Showing preview only (9,307K chars total). Download the full file or copy to clipboard to get everything.
Repository: PAIR-code/facets
Branch: master
Commit: 44d9b60437bf
Files: 192
Total size: 8.8 MB
Directory structure:
gitextract_q04hf33v/
├── .gitignore
├── AUTHORS
├── CONTRIBUTING.md
├── CONTRIBUTORS
├── LICENSE
├── README.md
├── WORKSPACE
├── colab_facets.ipynb
├── facets/
│ ├── BUILD
│ ├── colab.html
│ └── visualizations.html
├── facets-dist/
│ └── facets-jupyter.html
├── facets_atlasmaker/
│ ├── .gitignore
│ ├── BUILD
│ ├── README.md
│ ├── atlasmaker.py
│ ├── atlasmaker_io.py
│ ├── atlasmaker_io_test.py
│ ├── convert.py
│ ├── convert_test.py
│ ├── montage.py
│ ├── montage_test.py
│ ├── parallelize.py
│ ├── parallelize_test.py
│ ├── pylintrc
│ ├── requirements.txt
│ ├── testdata/
│ │ ├── attributions.txt
│ │ ├── testfiles_smalllist.csv
│ │ ├── testfiles_smalllist_with_dups.csv
│ │ └── wikipedia_images_16.csv
│ └── utils/
│ ├── BUILD
│ ├── README.md
│ ├── wikipedia_sourcelist_generator.py
│ └── wikipedia_sourcelist_generator_test.py
├── facets_dive/
│ ├── Dive_demo.ipynb
│ ├── README.md
│ ├── colab_dive_atlas_demo.ipynb
│ ├── components/
│ │ ├── facets_dive/
│ │ │ ├── BUILD
│ │ │ ├── facets-dive.html
│ │ │ ├── facets-dive.ts
│ │ │ ├── test.html
│ │ │ └── test.ts
│ │ ├── facets_dive_controls/
│ │ │ ├── BUILD
│ │ │ ├── facets-dive-controls.html
│ │ │ ├── facets-dive-controls.ts
│ │ │ ├── test.html
│ │ │ └── test.ts
│ │ ├── facets_dive_info_card/
│ │ │ ├── BUILD
│ │ │ ├── facets-dive-info-card.html
│ │ │ ├── facets-dive-info-card.ts
│ │ │ ├── test.html
│ │ │ └── test.ts
│ │ ├── facets_dive_legend/
│ │ │ ├── BUILD
│ │ │ ├── facets-dive-legend.html
│ │ │ ├── facets-dive-legend.ts
│ │ │ ├── test.html
│ │ │ └── test.ts
│ │ └── facets_dive_vis/
│ │ ├── BUILD
│ │ ├── facets-dive-vis.html
│ │ ├── facets-dive-vis.ts
│ │ ├── test.html
│ │ ├── test.ts
│ │ └── typings.d.ts
│ ├── demo/
│ │ ├── BUILD
│ │ ├── quickdraw.html
│ │ └── quickdraw.ts
│ └── lib/
│ ├── BUILD
│ ├── axis.html
│ ├── axis.ts
│ ├── bounded-object.html
│ ├── bounded-object.ts
│ ├── data-example.html
│ ├── data-example.ts
│ ├── grid.html
│ ├── grid.ts
│ ├── info-renderers.html
│ ├── info-renderers.ts
│ ├── label.html
│ ├── label.ts
│ ├── layout.html
│ ├── layout.ts
│ ├── sorting.html
│ ├── sorting.ts
│ ├── sprite-atlas.html
│ ├── sprite-atlas.ts
│ ├── sprite-material.html
│ ├── sprite-material.ts
│ ├── sprite-mesh.html
│ ├── sprite-mesh.ts
│ ├── stats.html
│ ├── stats.ts
│ ├── string-format.html
│ ├── string-format.ts
│ ├── test/
│ │ ├── BUILD
│ │ ├── axis_test.ts
│ │ ├── bounded-object_test.ts
│ │ ├── externs.js
│ │ ├── grid_test.ts
│ │ ├── layout_test.ts
│ │ ├── sorting_test.ts
│ │ ├── sprite-atlas_test.ts
│ │ ├── sprite-material_test.ts
│ │ ├── sprite-mesh_test.ts
│ │ ├── stats_test.ts
│ │ ├── string-format_test.ts
│ │ ├── test.html
│ │ ├── text_test.ts
│ │ └── wordtree_test.ts
│ ├── text.html
│ ├── text.ts
│ ├── wordtree.html
│ └── wordtree.ts
└── facets_overview/
├── Overview_demo.ipynb
├── README.md
├── common/
│ ├── BUILD
│ ├── common_bundle.html
│ ├── feature_statistics_generator.ts
│ ├── overview_data_model.ts
│ ├── plottable_helpers.d.ts
│ ├── plottable_helpers.js
│ ├── test/
│ │ ├── BUILD
│ │ ├── externs.js
│ │ ├── feature_statistics_generator_test.ts
│ │ ├── overview_data_model_test.ts
│ │ ├── test.html
│ │ ├── test_bundle.html
│ │ └── utils_test.ts
│ └── utils.ts
├── components/
│ ├── facets_overview/
│ │ ├── BUILD
│ │ ├── facets-overview-filter-validator.html
│ │ ├── facets-overview.html
│ │ └── facets-overview.ts
│ ├── facets_overview_chart/
│ │ ├── BUILD
│ │ ├── externs.js
│ │ ├── facets-overview-chart.html
│ │ └── facets-overview-chart.ts
│ ├── facets_overview_row_legend/
│ │ ├── BUILD
│ │ ├── facets-overview-row-legend.html
│ │ └── facets-overview-row-legend.ts
│ ├── facets_overview_row_stats/
│ │ ├── BUILD
│ │ ├── facets-overview-row-stats.html
│ │ └── facets-overview-row-stats.ts
│ └── facets_overview_table/
│ ├── BUILD
│ ├── facets-overview-table.html
│ └── facets-overview-table.ts
├── facets_overview/
│ ├── __init__.py
│ ├── base_feature_statistics_generator.py
│ ├── base_generic_feature_statistics_generator.py
│ ├── feature_statistics_generator.py
│ ├── feature_statistics_generator_test.py
│ ├── feature_statistics_pb2.py
│ ├── generic_feature_statistics_generator.py
│ └── generic_feature_statistics_generator_test.py
├── functional_tests/
│ ├── many/
│ │ ├── BUILD
│ │ ├── index.html
│ │ ├── many-test.html
│ │ └── many_test.ts
│ ├── simple/
│ │ ├── BUILD
│ │ ├── index.html
│ │ ├── simple-test.html
│ │ └── simple_test.ts
│ ├── single/
│ │ ├── BUILD
│ │ ├── index.html
│ │ ├── single-test.html
│ │ └── single_test.ts
│ ├── single_feature/
│ │ ├── BUILD
│ │ ├── index.html
│ │ ├── single-feature-test.html
│ │ └── single_feature_test.ts
│ ├── stress/
│ │ ├── BUILD
│ │ ├── index.html
│ │ ├── stress-test.html
│ │ └── stress_test.ts
│ ├── test_helpers/
│ │ ├── BUILD
│ │ ├── externs.js
│ │ ├── test_helpers.ts
│ │ └── test_helpers_bundle.html
│ └── weighted/
│ ├── BUILD
│ ├── index.html
│ ├── weighted-test.html
│ └── weighted_test.ts
├── proto/
│ ├── BUILD
│ └── feature_statistics.proto
├── python/
│ ├── __init__.py
│ ├── base_feature_statistics_generator.py
│ ├── base_generic_feature_statistics_generator.py
│ ├── feature_statistics_generator.py
│ ├── feature_statistics_generator_test.py
│ ├── feature_statistics_pb2.py
│ ├── generic_feature_statistics_generator.py
│ └── generic_feature_statistics_generator_test.py
└── setup.py
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
*~
/bazel-*
**/__pycache__
**/.ipynb_checkpoints/
**/*.swp
**/dist/
**/build/
**/facets_overview.egg-info/
================================================
FILE: AUTHORS
================================================
# This the official list of Bazel rules_closure authors for copyright purposes.
# This file is distinct from the CONTRIBUTORS files.
# See the latter for an explanation.
# Names should be added to this file as:
# Name or Organization <email address>
# The email address is not required for organizations.
Google Inc.
================================================
FILE: CONTRIBUTING.md
================================================
Want to contribute? Great! First, read this page (including the small print at the end).
### Before you contribute
Before we can use your code, you must sign the
[Google Individual Contributor License Agreement]
(https://cla.developers.google.com/about/google-individual)
(CLA), which you can do online. The CLA is necessary mainly because you own the
copyright to your changes, even after your contribution becomes part of our
codebase, so we need your permission to use and distribute your code. We also
need to be sure of various other things—for instance that you'll tell us if you
know that your code infringes on other people's patents. You don't have to sign
the CLA until after you've submitted your code for review and a member has
approved it, but you must do it before we can put your code into our codebase.
Before you start working on a larger contribution, you should get in touch with
us first through the issue tracker with your idea so that we can help out and
possibly guide you. Coordinating up front makes it much easier to avoid
frustration later on.
### Code reviews
All submissions, including submissions by project members, require review. We
use Github pull requests for this purpose.
### The small print
Contributions made by corporations are covered by a different agreement than
the one above, the
[Software Grant and Corporate Contributor License Agreement]
(https://cla.developers.google.com/about/google-corporate).
================================================
FILE: CONTRIBUTORS
================================================
# People who have agreed to one of the CLAs and can contribute patches.
# The AUTHORS file lists the copyright holders; this file
# lists people. For example, Google employees are listed here
# but not in AUTHORS, because Google holds the copyright.
#
# https://developers.google.com/open-source/cla/individual
# https://developers.google.com/open-source/cla/corporate
#
# Names should be added to this file as:
# Name <email address>
James Wexler <jwexler@google.com>
Jimbo Wilson <jimbo@google.com>
Justine Tunney <jart@google.com>
================================================
FILE: LICENSE
================================================
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.
================================================
FILE: README.md
================================================
# Introduction
The facets project contains two visualizations for understanding and analyzing machine learning datasets: Facets Overview and Facets Dive.
The visualizations are implemented as [Polymer](https://www.polymer-project.org) web components, backed by [Typescript](https://www.typescriptlang.org) code and can be easily embedded into Jupyter notebooks or webpages.
Live demos of the visualizations can be found on the [Facets project description page](https://pair-code.github.io/facets/).
## Facets Overview
. UCI Machine Learning Repository [http://archive.ics.uci.edu/ml/datasets/Census+Income]. Irvine, CA: University of California, School of Information and Computer Science")
Overview gives a high-level view of one or more data sets. It produces a visual feature-by-feature statistical analysis, and can also be used to compare statistics across two or more data sets. The tool can process both numeric and string features, including multiple instances of a number or string per feature.
Overview can help uncover issues with datasets, including the following:
* Unexpected feature values
* Missing feature values for a large number of examples
* Training/serving skew
* Training/test/validation set skew
Key aspects of the visualization are outlier detection and distribution comparison across multiple datasets.
Interesting values (such as a high proportion of missing data, or very different distributions of a feature across multiple datasets) are highlighted in red.
Features can be sorted by values of interest such as the number of missing values or the skew between the different datasets.
The python code to generate the statistics for visualization can be installed through `pip install facets-overview`.
As of version 1.1.0, the `facets-overview` package requires a version of `protobuf` at version 3.20.0 or later.
Details about Overview usage can be found in its [README](./facets_overview/README.md).
## Facets Dive
. UCI Machine Learning Repository [http://archive.ics.uci.edu/ml/datasets/Census+Income]. Irvine, CA: University of California, School of Information and Computer Science")
Dive is a tool for interactively exploring up to tens of thousands of multidimensional data points, allowing users to seamlessly switch between a high-level overview and low-level details.
Each example is a represented as single item in the visualization and the points can be positioned by faceting/bucketing in multiple dimensions by their feature values. Combining smooth animation and zooming with faceting and filtering, Dive makes it easy to spot patterns and outliers in complex data sets.
Details about Dive usage can be found in its [README](./facets_dive/README.md).
# Setup
## Usage in Google Colabratory/Jupyter Notebooks
Using Facets in [Google Colabratory](https://colab.research.google.com) and [Jupyter](http://jupyter.org) notebooks can be seen
[in this notebook](https://colab.research.google.com/github/PAIR-code/facets/blob/master/colab_facets.ipynb). These notebooks work without the need to first download/install this repository.
Both Facets visualizations make use of HTML imports. So in order to use them, you must first load the appropriate polyfill, through `<script src="https://cdnjs.cloudflare.com/ajax/libs/webcomponentsjs/1.3.3/webcomponents-lite.js"></script>`, as shown in the demo notebooks in this repo.
Note that for using Facets Overview in a Jupyter notebook, there are two considerations:
1. In the notebook, you will need to change the path that the Facets Overview python code is loaded from to the correct path given where your notebook kernel is run from.
2. You must also have the Protocol Buffers python runtime library installed: https://github.com/google/protobuf/tree/master/python. If you used pip or anaconda to install Jupyter, you can use the same tool to install the runtime library.
When visualizing a large amount of data in Dive in a Juypter notebook, as is done in the [Dive demo Jupyter notebook](./facets_dive/Dive_demo.ipynb), you will need to start the notebook server with an increased IOPub data rate.
This can be done with the command ```jupyter notebook --NotebookApp.iopub_data_rate_limit=10000000```.
## Code Installation
```
git clone https://github.com/PAIR-code/facets
cd facets
```
## Building the Visualizations
If you make code changes to the visualization and would like to rebuild them, follow these directions:
1. Install bazel: https://bazel.build/
2. Build the visualizations: ```bazel build facets:facets_jupyter``` (run from the facets top-level directory)
## Using the rebuilt Visualizations in a Jupyter notebook
If you want to use the visualizations you built locally in a Jupyter notebook, follow these directions:
1. Move the resulting vulcanized html file from the build step into the facets-dist directory: ```cp -f bazel-bin/facets/facets-jupyter.html facets-dist/```
2. Install the visualizations into Jupyter as an nbextension.
* If jupyter was installed with pip, you can use ```jupyter nbextension install facets-dist/ ``` if jupyter was installed system-wide or ```jupyter nbextension install facets-dist/ --user``` if installed per-user (run from the facets top-level directory). You do not need to run any follow-up ```jupyter nbextension enable``` command for this extension.
* Alternatively, you can manually install the nbextension by finding your jupyter installation's ```share/jupyter/nbextensions``` folder and copying the facets-dist directory into it.
3. In the notebook cell's HTML link tag that loads the built facets html, load from ```/nbextensions/facets-dist/facets-jupyter.html```, which is the locally installed facets distribution. from the previous step.
## Known Issues
* The Facets visualizations currently work only in Chrome - [Issue 9](../../issues/9).
**Disclaimer: This is not an official Google product**
================================================
FILE: WORKSPACE
================================================
workspace(name = "ai_google_pair_facets")
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
# Needed as a transitive dependency of rules_webtesting below.
http_archive(
name = "bazel_skylib",
sha256 = "2b9af2de004d67725c9985540811835389b229c27874f2e15f5e319622a53a3b",
strip_prefix = "bazel-skylib-e9fc4750d427196754bebb0e2e1e38d68893490a",
urls = [
"https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/archive/e9fc4750d427196754bebb0e2e1e38d68893490a.tar.gz",
"https://github.com/bazelbuild/bazel-skylib/archive/e9fc4750d427196754bebb0e2e1e38d68893490a.tar.gz",
],
)
load("@bazel_skylib//lib:versions.bzl", "versions")
versions.check(minimum_bazel_version = "0.22.0")
http_archive(
name = "io_bazel_rules_closure",
sha256 = "b6936ecc0b5a1ef616b9d7e76694d414aa5605265c11322257a610fb256b1bf7",
# The changes that we need for Bazel 0.26 compatibility are not in
# any release, so we pin to HEAD as of 2019-06-04.
strip_prefix = "rules_closure-7434c41542ca9e1b05166d897b90073d1b8b2cf8",
urls = [
"http://mirror.tensorflow.org/github.com/bazelbuild/rules_closure/archive/7434c41542ca9e1b05166d897b90073d1b8b2cf8.tar.gz",
"https://github.com/bazelbuild/rules_closure/archive/7434c41542ca9e1b05166d897b90073d1b8b2cf8.tar.gz", # 2019-06-04
],
)
http_archive(
name = "io_bazel_rules_webtesting",
sha256 = "89f041028627d801ba3b4ea1ef2211994392d46e25c1fc3501b95d51698e4a1e",
strip_prefix = "rules_webtesting-0.2.2",
urls = [
"https://mirror.bazel.build/github.com/bazelbuild/rules_webtesting/archive/0.2.2.tar.gz",
"https://github.com/bazelbuild/rules_webtesting/archive/0.2.2.tar.gz",
],
)
load("@io_bazel_rules_closure//closure:defs.bzl", "closure_repositories")
load("@io_bazel_rules_closure//closure:defs.bzl", "web_library_external")
load("@io_bazel_rules_closure//closure:defs.bzl", "filegroup_external")
closure_repositories(
# omit_com_google_protobuf = True,
omit_com_google_protobuf_js = True,
)
http_archive(
name = "org_tensorflow_tensorboard",
sha256 = "1534836f297ae70d089379bc8f91e8817bd7911066bd8a93088f095bd05797e5",
strip_prefix = "tensorboard-dcf27c0496348349f9d905d09ed80717f421cdfe",
urls = [
"https://github.com/stephanwlee/tensorboard/archive/dcf27c0496348349f9d905d09ed80717f421cdfe.tar.gz", # 2019-07-12
],
)
load("@org_tensorflow_tensorboard//third_party:workspace.bzl", "tensorboard_workspace")
tensorboard_workspace()
web_library_external(
name = "org_polymer_paper_card",
srcs = ["paper-card.html"],
licenses = ["notice"], # BSD-3-Clause
path = "/paper-card",
sha256 = "daf6f5326501f74811c2e10ca4ca8d2a42613e88f3ac64e218e6a3cf4cc1dac2",
strip_prefix = "paper-card-2.0.0",
urls = [
"https://mirror.bazel.build/github.com/PolymerElements/paper-card/archive/v2.0.0.tar.gz",
"https://github.com/PolymerElements/paper-card/archive/v2.0.0.tar.gz",
],
deps = [
"@org_polymer",
"@org_polymer_iron_flex_layout",
"@org_polymer_iron_image",
"@org_polymer_paper_styles",
],
)
web_library_external(
name = "org_polymer_iron_image",
srcs = ["iron-image.html"],
licenses = ["notice"], # BSD-3-Clause
path = "/iron-image",
sha256 = "40c7b2ec941e29a1721c6fb19d6de69308c50a960a3c3319faf2447eed0d4d88",
strip_prefix = "iron-image-2.0.0",
urls = [
"https://mirror.bazel.build/github.com/PolymerElements/iron-image/archive/v2.0.0.tar.gz",
"https://github.com/PolymerElements/iron-image/archive/v2.0.0.tar.gz",
],
deps = [
"@org_polymer",
],
)
web_library_external(
name = "org_polymer_iron_validator_behavior",
srcs = ["iron-validator-behavior.html"],
licenses = ["notice"], # BSD-3-Clause
path = "/iron-validator-behavior",
sha256 = "0956488f849c0528d66d5ce28bbfb66e163a7990df2cc5f157a5bf34dcb7dfd2",
strip_prefix = "iron-validator-behavior-1.0.2",
urls = [
"https://mirror.bazel.build/github.com/PolymerElements/iron-validator-behavior/archive/v1.0.2.tar.gz",
"https://github.com/PolymerElements/iron-validator-behavior/archive/v1.0.2.tar.gz",
],
deps = [
"@org_polymer",
"@org_polymer_iron_meta",
],
)
================================================
FILE: colab_facets.ipynb
================================================
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "Facets Dive and Overview Colab Example",
"version": "0.3.2",
"provenance": []
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
}
},
"cells": [
{
"cell_type": "code",
"metadata": {
"id": "M7JcESAhpKG-",
"colab_type": "code",
"colab": {}
},
"source": [
"#@title Install the facets_overview pip package.\n",
"!pip install facets-overview"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab_type": "code",
"id": "blPpZw5R3Bb4",
"colab": {}
},
"source": [
"# Load UCI census train and test data into dataframes.\n",
"import pandas as pd\n",
"features = [\"Age\", \"Workclass\", \"fnlwgt\", \"Education\", \"Education-Num\", \"Marital Status\",\n",
" \"Occupation\", \"Relationship\", \"Race\", \"Sex\", \"Capital Gain\", \"Capital Loss\",\n",
" \"Hours per week\", \"Country\", \"Target\"]\n",
"train_data = pd.read_csv(\n",
" \"https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data\",\n",
" names=features,\n",
" sep=r'\\s*,\\s*',\n",
" engine='python',\n",
" na_values=\"?\")\n",
"test_data = pd.read_csv(\n",
" \"https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.test\",\n",
" names=features,\n",
" sep=r'\\s*,\\s*',\n",
" skiprows=[0],\n",
" engine='python',\n",
" na_values=\"?\")"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab_type": "code",
"id": "XtOzRy8Z3M36",
"colab": {}
},
"source": [
"\n",
"# Display the Dive visualization for the training data.\n",
"from IPython.core.display import display, HTML\n",
"\n",
"jsonstr = train_data.to_json(orient='records')\n",
"HTML_TEMPLATE = \"\"\"\n",
" <script src=\"https://cdnjs.cloudflare.com/ajax/libs/webcomponentsjs/1.3.3/webcomponents-lite.js\"></script>\n",
" <link rel=\"import\" href=\"https://raw.githubusercontent.com/PAIR-code/facets/1.0.0/facets-dist/facets-jupyter.html\">\n",
" <facets-dive id=\"elem\" height=\"600\"></facets-dive>\n",
" <script>\n",
" var data = {jsonstr};\n",
" document.querySelector(\"#elem\").data = data;\n",
" </script>\"\"\"\n",
"html = HTML_TEMPLATE.format(jsonstr=jsonstr)\n",
"display(HTML(html))"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab_type": "code",
"id": "mjv5Kr1Mflq7",
"colab": {}
},
"source": [
"# Create the feature stats for the datasets and stringify it.\n",
"import base64\n",
"from facets_overview.generic_feature_statistics_generator import GenericFeatureStatisticsGenerator\n",
"\n",
"gfsg = GenericFeatureStatisticsGenerator()\n",
"proto = gfsg.ProtoFromDataFrames([{'name': 'train', 'table': train_data},\n",
" {'name': 'test', 'table': test_data}])\n",
"protostr = base64.b64encode(proto.SerializeToString()).decode(\"utf-8\")"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab_type": "code",
"id": "b7zs2p2_goJa",
"colab": {}
},
"source": [
"# Display the facets overview visualization for this data\n",
"from IPython.core.display import display, HTML\n",
"\n",
"HTML_TEMPLATE = \"\"\"\n",
" <script src=\"https://cdnjs.cloudflare.com/ajax/libs/webcomponentsjs/1.3.3/webcomponents-lite.js\"></script>\n",
" <link rel=\"import\" href=\"https://raw.githubusercontent.com/PAIR-code/facets/1.0.0/facets-dist/facets-jupyter.html\" >\n",
" <facets-overview id=\"elem\"></facets-overview>\n",
" <script>\n",
" document.querySelector(\"#elem\").protoInput = \"{protostr}\";\n",
" </script>\"\"\"\n",
"html = HTML_TEMPLATE.format(protostr=protostr)\n",
"display(HTML(html))"
],
"execution_count": 0,
"outputs": []
}
]
}
================================================
FILE: facets/BUILD
================================================
package(default_visibility = ["//visibility:public"])
load("@org_tensorflow_tensorboard//tensorboard/defs:web.bzl", "tf_web_library")
load("@org_tensorflow_tensorboard//tensorboard/defs:vulcanize.bzl", "tensorboard_html_binary")
licenses(["notice"]) # Apache 2.0
tf_web_library(
name = "visualizations",
srcs = [
"visualizations.html",
],
path = "/facets",
deps = [
"//facets_dive/components/facets_dive",
"//facets_overview/components/facets_overview",
"@org_tensorflow_tensorboard//tensorboard/components/tf_imports:polymer",
],
)
# Compiles standalone HTML for Facets Dive demo, used by ":facets_jupyter"
#
# NOTE: This runs TensorBoard Vulcanize.java to inline HTML imports and
# runs the Closure Compiler on the JavaScript outputted by the
# TypeScript Compiler, in order to remove ES6 imports, which don't
# work in web browsers. Otherwise we'd `bazel run` tf_web_library.
tensorboard_html_binary(
name = "facets",
compile = True,
input_path = "/facets/visualizations.html",
output_path = "/all/visualizations.html",
deps = [":visualizations"],
)
# Add javascript to undefine the define function when building the vulcanized
# visualizations. This is to avoid issues with require.js dependency loading
# when using the visualizations inside of a Jupyter notebook.
# TODO(jwexler): Figure out a cleaner way to get vulcanized visualizations that
# work in Jupyter notebooks.
genrule(
name = "facets_jupyter",
srcs = [":facets"],
outs = ["facets-jupyter.html"],
cmd = "sed 's|<!doctype html>|<!doctype html><script>define=undefined</script>|' $(location :facets) > $@",
)
tf_web_library(
name = "colab",
srcs = [
"colab.html",
],
path = "/facets",
deps = [
"//facets_dive/components/facets_dive",
"//facets_overview/components/facets_overview",
"@org_tensorflow_tensorboard//tensorboard/components/tf_imports:polymer",
],
)
# Compiles standalone HTML for Facets in colab.
#
# NOTE: This runs TensorBoard Vulcanize.java to inline HTML imports and
# runs the Closure Compiler on the JavaScript outputted by the
# TypeScript Compiler, in order to remove ES6 imports, which don't
# work in web browsers. Otherwise we'd `bazel run` tf_web_library.
tensorboard_html_binary(
name = "facets_colab",
compile = True,
input_path = "/facets/colab.html",
output_path = "/all/colab.html",
deps = [":colab"],
)
================================================
FILE: facets/colab.html
================================================
<link rel="import" href="../facets-dive/components/facets-dive/facets-dive.html">
<link rel="import" href="../facets-overview/components/facets-overview/facets-overview.html">
<style>
facets-dive {
border: 1px solid #cccccc;
box-sizing: border-box;
height: 100%;
min-width: 800px;
min-height: 640px;
position: relative;
width: 100%;
}
</style>
================================================
FILE: facets/visualizations.html
================================================
<link rel="import" href="../../tf-imports/polymer.html">
<link rel="import" href="../facets-overview/components/facets-overview/facets-overview.html">
<link rel="import" href="../facets-dive/components/facets-dive/facets-dive.html">
================================================
FILE: facets-dist/facets-jupyter.html
================================================
<!doctype html><script>define=undefined</script><!--
@license
Copyright 2019 The TensorFlow Authors. 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.
--><script>// 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={},f=null;!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=w}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==u.indexOf(b[c]))return;if("direction"==c&&-1==v.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 0>a||a>1||0>c||c>1?w: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(0==e||1==e)return e;for(var g=0,h=1;;){var i=(g+h)/2,j=f(a,c,i);if(Math.abs(e-j)<1e-4)return f(b,d,i);e>j?g=i:h=i}}}function j(a,b){return function(c){if(c>=1)return 1;var d=1/a;return c+=b*d,c-c%d}}function k(a){B||(B=document.createElement("div").style),B.animationTimingFunction="",B.animationTimingFunction=a;var b=B.animationTimingFunction;if(""==b&&e())throw new TypeError(a+" is not a valid value for easing");var c=D.exec(b);if(c)return i.apply(this,c.slice(1).map(Number));var d=E.exec(b);if(d)return j(Number(d[1]),{start:x,middle:y,end:z}[d[2]]);var f=A[b];return f?f:w}function l(a){return Math.abs(m(a)/a.playbackRate)}function m(a){return a.duration*a.iterations}function n(a,b,c){return null==b?F:b<c.delay?G:b>=c.delay+a?H:I}function o(a,b,c,d,e){switch(d){case G:return"backwards"==b||"both"==b?0:null;case I:return c-e;case H:return"forwards"==b||"both"==b?a:null;case F:return null}}function p(a,b,c,d){return(d.playbackRate<0?b-a:b)*d.playbackRate+c}function q(a,b,c,d,e){return c===1/0||c===-(1/0)||c-d==b&&e.iterations&&(e.iterations+e.iterationStart)%1==0?a:c%a}function r(a,b,c,d){return 0===c?0:b==a?d.iterationStart+d.iterations-1:Math.floor(c/a)}function s(a,b,c,d){var e=a%2>=1,f="normal"==d.direction||d.direction==(e?"alternate-reverse":"alternate"),g=f?c:b-c,h=g/b;return b*d._easingFunction(h)}function t(a,b,c){var d=n(a,b,c),e=o(a,c.fill,b,d,c.delay);if(null===e)return null;if(0===a)return d===G?0:1;var f=c.iterationStart*c.duration,g=p(a,e,f,c),h=q(c.duration,m(c),g,f,c),i=r(c.duration,h,g,c);return s(i,c.duration,h,c)/c.duration}var u="backwards|forwards|both|none".split("|"),v="reverse|alternate|alternate-reverse".split("|"),w=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)||0>a)&&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)||0>a)&&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=k(a),this._setMember("easing",a)},get easing(){return this._easing},set iterations(a){if((isNaN(a)||0>a)&&e())throw new TypeError("iterations must be non-negative, received: "+a);this._setMember("iterations",a)},get iterations(){return this._iterations}};var x=1,y=.5,z=0,A={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,x),"step-middle":j(1,y),"step-end":j(1,z)},B=null,C="\\s*(-?\\d+\\.?\\d*|-?\\.\\d+)\\s*",D=new RegExp("cubic-bezier\\("+C+","+C+","+C+","+C+"\\)"),E=/steps\(\s*(\d+)\s*,\s*(start|middle|end)\s*\)/,F=0,G=1,H=2,I=3;a.cloneTimingInput=c,a.makeTiming=f,a.numericTimingToObject=g,a.normalizeTimingInput=h,a.calculateActiveDuration=l,a.calculateTimeFraction=t,a.calculatePhase=n,a.toTimingFunction=k}(c,f),function(a,b){function c(a,b){return a in j?j[a][b]||b:b}function d(a,b,d){var e=g[a];if(e){h.style[a]=b;for(var f in e){var i=e[f],j=h.style[i];d[i]=c(i,j)}}else d[a]=c(a,b)}function e(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;f>g;g++)e={},"offset"in a?e.offset=a.offset:1==f?e.offset=1:e.offset=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 f(a){function b(){var a=c.length;null==c[a-1].offset&&(c[a-1].offset=1),a>1&&null==c[0].offset&&(c[0].offset=0);for(var b=0,d=c[0].offset,e=1;a>e;e++){var f=c[e].offset;if(null!=f){for(var g=1;e-b>g;g++)c[b+g].offset=d+(f-d)*g/(e-b);b=e,d=f}}}if(null==a)return[];window.Symbol&&Symbol.iterator&&Array.prototype.from&&a[Symbol.iterator]&&(a=Array.from(a)),Array.isArray(a)||(a=e(a));for(var c=a.map(function(a){var b={};for(var c in a){var e=a[c];if("offset"==c){if(null!=e&&(e=Number(e),!isFinite(e)))throw new TypeError("keyframe offsets must be numbers.")}else{if("composite"==c)throw{type:DOMException.NOT_SUPPORTED_ERR,name:"NotSupportedError",message:"add compositing is not supported"};e=""+e}d(c,e,b)}return void 0==b.offset&&(b.offset=null),b}),f=!0,g=-(1/0),h=0;h<c.length;h++){var i=c[h].offset;if(null!=i){if(g>i)throw{code:DOMException.INVALID_MODIFICATION_ERR,name:"InvalidModificationError",message:"Keyframes are not loosely sorted by offset. Sort or specify offsets."};g=i}else f=!1}return c=c.filter(function(a){return a.offset>=0&&a.offset<=1}),f||b(),c}var g={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"]},h=document.createElementNS("http://www.w3.org/1999/xhtml","div"),i={thin:"1px",medium:"3px",thick:"5px"},j={borderBottomWidth:i,borderLeftWidth:i,borderRightWidth:i,borderTopWidth:i,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:i,textShadow:{none:"0px 0px 0px transparent"},boxShadow:{none:"0px 0px 0px 0px transparent"}};a.convertToArrayForm=e,a.normalizeKeyframes=f}(c,f),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),h>g?(a in b||console.warn("Web Animations: "+a+" "+f+" deprecated and will stop working on "+h.toDateString()+". "+d),b[a]=!0,!1):!0},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=f[g].offset,i=f[g+1].offset,j=f[g].value,k=f[g+1].value,l=f[g].easing;h==i&&(1==i?j=k:k=j),d.push({startTime:h,endTime:i,easing:a.toTimingFunction(l?l:"linear"),property:e,interpolation:b.propertyInterpolation(e,j,k)})}return d.sort(function(a,b){return a.startTime-b.startTime}),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 0>=c&&0==a.startTime||c>=1&&1==a.endTime||c>=a.startTime&&c<=a.endTime}).forEach(function(d){var e=c-d.startTime,f=d.endTime-d.startTime,g=0==f?0:d.easing(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,f),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++){var g=c[f];e(a,b,d(g))}}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",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,f),function(a,b,c){function d(b){var c=a.calculateActiveDuration(b),d=function(d){return a.calculateTimeFraction(c,d,b)};return d._totalDuration=b.delay+c+b.endDelay,d._isCurrent=function(d){var e=a.calculatePhase(c,d,b);return e===PhaseActive||e===PhaseBefore},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 h=i(a),null!==h},k._clear=function(){j(c,null)},k._hasSameTarget=function(a){return c===a},k._isCurrent=i._isCurrent,k._totalDuration=i._totalDuration,k._id=g,k},b.NullEffect=function(a){var b=function(){a&&(a(),a=null)};return b._update=function(){return null},b._totalDuration=0,b._isCurrent=function(){return!1},b._hasSameTarget=function(){return!1},b}}(c,d,f),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,f),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.5>d?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,f),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._tickCurrentTime(a,!0),b.invalidateEffects()))},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.invalidateEffects())},get playbackRate(){return this._playbackRate},set playbackRate(a){if(a!=this._playbackRate){var b=this.currentTime;this._playbackRate=a,this._startTime=null,"paused"!=this.playState&&"idle"!=this.playState&&this.play(),null!=b&&(this.currentTime=b)}},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"},play:function(){this._paused=!1,(this._isFinished||this._idle)&&(this._currentTime=this._playbackRate>0?0:this._totalDuration,this._startTime=null),this._finishedFlag=!1,this._idle=!1,this._ensureAlive(),b.invalidateEffects()},pause:function(){this._isFinished||this._paused||this._idle||(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.invalidateEffects())},cancel:function(){this._inEffect&&(this._inEffect=!1,this._idle=!0,this._finishedFlag=!0,this.currentTime=0,this._startTime=null,this._effect._update(null),b.invalidateEffects())},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}}}(c,d,f),function(a,b,c){function d(a){var b=j;j=[],a<p.currentTime&&(a=p.currentTime),h(a,!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){n=!1;var d=b.timeline;d.currentTime=a,d._animations.sort(e),m=!1;var f=d._animations;d._animations=[];var g=[],h=[];f=f.filter(function(b){b._tick(a,c),b._inEffect?h.push(b._effect):g.push(b._effect),b._needsTick&&(m=!0);var d=b._inEffect||b._needsTick;return b._inTimeline=d,d}),o.push.apply(o,g),o.push.apply(o,h),d._animations.push.apply(d._animations,f),m&&requestAnimationFrame(function(){})}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.invalidateEffects(),d}};var l=void 0,m=!1,n=!1;b.restart=function(){return m||(m=!0,requestAnimationFrame(function(){}),n=!0),n},b.invalidateEffects=function(){h(b.timeline.currentTime,!1),g()};var o=[],p=new f;b.timeline=p}(c,d,f),function(a){function b(a,b){var c=a.exec(b);return c?(c=a.ignoreCase?c[0].toLowerCase():c[0],[c,b.substr(c.length)]):void 0}function c(a,b){b=b.replace(/^\s*/,"");var c=a(b);return c?[c[0],c[1].replace(/^\s*/,"")]:void 0}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||""==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++,0>=c))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){var d=a(c);return d?d:[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]}return""==c?d:void 0}function j(a,b,c,d,e){for(var g=[],h=[],i=[],j=f(d.length,e.length),k=0;j>k;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);return e&&e[0].length?[d,e[1]]:void 0}function c(c){var d=a.consumeRepeated(b,/^,/,c);return d&&""==d[1]?d[0]:void 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(".000","")}function d(a,b,c){return Math.min(b,Math.max(a,c))}function e(a){return/^\s*[-+]?(\d*\.)?\d+\s*$/.test(a)?Number(a):void 0}function f(a,b){return[a,b,c]}function g(a,b){return 0!=a?i(0,1/0)(a,b):void 0}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,b){return[a,b,Math.round]}a.clamp=d,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,j,["z-index"]),a.parseNumber=e,a.mergeNumbers=f,a.numberToString=c}(d,f),function(a,b){function c(a,b){return"visible"==a||"visible"==b?[0,1,function(c){return 0>=c?a:c>=1?b:"visible"}]:void 0}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;3>d;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","outline-color","text-decoration-color"]),a.consumeColor=a.consumeParenthesised.bind(null,c),a.mergeColors=d}(d,f),function(a,b){function c(a,b){if(b=b.trim().toLowerCase(),"0"==b&&"px".search(a)>=0)return{px:0};if(/^[^(]*$|^calc/.test(b)){b=b.replace(/calc\(/g,"(");var c={};b=b.replace(a,function(a){return c[a]=null,"U"+a});for(var d="U("+a.source+")",e=b.replace(/[-+]?(\d*\.)?\d+/g,"N").replace(new RegExp("N"+d,"g"),"D").replace(/\s[+-]\s/g,"O").replace(/\s/g,""),f=[/N\*(D)/g,/(N|D)[*\/]N/g,/(N|D)O\1/g,/\((N|D)\)/g],g=0;g<f.length;)f[g].test(e)?(e=e.replace(f[g],"$1"),g=0):g++;if("D"==e){for(var h in c){var i=eval(b.replace(new RegExp("U"+h,"g"),"").replace(new RegExp(d,"g"),"*0"));if(!isFinite(i))return;c[h]=i}return c}}}function d(a,b){return e(a,b,!0)}function e(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 f="px|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc",g=c.bind(null,new RegExp(f,"g")),h=c.bind(null,new RegExp(f+"|%","g")),i=c.bind(null,/deg|rad|grad|turn/g);a.parseLength=g,a.parseLengthOrPercent=h,a.consumeLengthOrPercent=a.consumeParenthesised.bind(null,h),a.parseAngle=i,a.mergeDimensions=e;var j=a.consumeParenthesised.bind(null,g),k=a.consumeRepeated.bind(void 0,j,/^/),l=a.consumeRepeated.bind(void 0,k,/^,/);a.consumeSizePairList=l;var m=function(a){var b=l(a);return b&&""==b[1]?b[0]:void 0},n=a.mergeNestedRepeated.bind(void 0,d," "),o=a.mergeNestedRepeated.bind(void 0,n,",");a.mergeNonNegativeSizePair=n,a.addPropertiesHandler(m,o,["background-size"]),a.addPropertiesHandler(h,d,["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(h,e,["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","text-indent","top","vertical-align","word-spacing"])}(d,f),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);return d&&4==d[0].length?d[0]:void 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,f),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(b=b.toLowerCase().trim(),"none"==b)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(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],void 0===p)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]),g=a.composeMatrix(b[0],b[1],b[2],c,b[4]),h=g.map(f).join(",");return h}])}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"])}(d,f),function(a,b){function c(a,b){b.concat([a]).forEach(function(b){b in document.documentElement.style&&(d[a]=b)})}var d={};c("transform",["webkitTransform","msTransform"]),c("transformOrigin",["webkitTransformOrigin"]),c("perspective",["webkitPerspective"]),c("perspectiveOrigin",["webkitPerspectiveOrigin"]),a.propertyName=function(a){return d[a]||a}}(d,f)}(),!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(g){}finally{c&&c.cancel()}if(!d){var h=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)),h.call(this,b,c)}}}(c),!function(a,b,c){function d(a){var b=window.document.timeline;b.currentTime=a,b._discardAnimations(),0==b._animations.length?f=!1:requestAnimationFrame(d);
}var e=window.requestAnimationFrame;window.requestAnimationFrame=function(a){return e(function(b){window.document.timeline._updateAnimationsPromises(),a(b),window.document.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(h){}try{window.document.timeline=g}catch(h){}}(c,e,f),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=window.document.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){"function"==typeof a?this._animation.onfinish=function(b){b.target=this,a.call(this,b)}.bind(this):this._animation.onfinish=a},get oncancel(){return this._animation.oncancel},set oncancel(a){"function"==typeof a?this._animation.oncancel=function(b){b.target=this,a.call(this,b)}.bind(this):this._animation.oncancel=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}),"paused"!=this.playState&&"idle"!=this.playState&&this.play(),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.calculateTimeFraction(a.calculateActiveDuration(d),e,d)),(null==e||isNaN(e))&&this._removeChildAnimations()}}},window.Animation=b.Animation}(c,e,f),function(a,b,c){function d(b){this._frames=a.normalizeKeyframes(b)}function e(){for(var a=!1;i.length;){var b=i.shift();b._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(){window.document.timeline._updateAnimationsPromises();var a=j.apply(this,arguments);return e()&&(a=j.apply(this,arguments)),window.document.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,f),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.calculateTimeFraction(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,f),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;return c&&"pending"!=c.playState&&c.effect?null==b?void c._removeChildAnimations():0==b&&c.playbackRate<0&&(e||(e=a.normalizeTimingInput(c.effect.timing)),b=a.calculateTimeFraction(a.calculateActiveDuration(e),-1,e),isNaN(b)||null==b)?(c._forEachChild(function(a){a.currentTime=-1}),void c._removeChildAnimations()):void 0: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,f),b["true"]=a}({},function(){return this}());
</script>
<script>/**
@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 ia(a){da();var b=a[Symbol.iterator];return b?b.call(a):ea(a)}
function ja(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,q=Object.getOwnPropertyNames(m),x=0;x<q.length;x++)e=q[x],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 ua.call(a,b);case Node.DOCUMENT_FRAGMENT_NODE:return lb.call(a,b);default:return U.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,g=Node.prototype.replaceChild;Node.prototype.replaceChild=function(b,c){b instanceof DocumentFragment?(a.call(this,b,c),f.call(this,c)):g.call(this,b,c);return c};Document.prototype.createDocumentFragment=
function(){var a=this.createElement("df");a.__proto__=DocumentFragment.prototype;return a};var h=Document.prototype.importNode;Document.prototype.importNode=function(a,b){b=h.call(this,a,b||!1);a instanceof DocumentFragment&&(b.__proto__=DocumentFragment.prototype);return b}}();var f=Node.prototype.cloneNode,g=Document.prototype.createElement,h=Document.prototype.importNode,k=Node.prototype.removeChild,l=Node.prototype.appendChild,m=Node.prototype.replaceChild,q=DOMParser.prototype.parseFromString,
x=Object.getOwnPropertyDescriptor(window.HTMLElement.prototype,"innerHTML")||{get:function(){return this.innerHTML},set:function(a){this.innerHTML=a}},M=Object.getOwnPropertyDescriptor(window.Node.prototype,"childNodes")||{get:function(){return this.childNodes}},U=Element.prototype.querySelectorAll,ua=Document.prototype.querySelectorAll,lb=DocumentFragment.prototype.querySelectorAll,mb=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 S=document.implementation.createHTMLDocument("template"),C=!0,V=document.createElement("style");V.textContent="template{display:none;}";var ha=document.head;ha.insertBefore(V,ha.firstElementChild);a.prototype=Object.create(HTMLElement.prototype);var va=!document.createElement("div").hasOwnProperty("innerHTML");a.G=function(b){if(!b.content&&b.namespaceURI===
document.documentElement.namespaceURI){b.content=S.createDocumentFragment();for(var c;c=b.firstChild;)l.call(b.content,c);if(va)b.__proto__=a.prototype;else if(b.cloneNode=function(b){return a.a(this,b)},C)try{P(b),W(b)}catch(Tg){C=!1}a.C(b.content)}};var X={option:["select"],thead:["table"],col:["colgroup","table"],tr:["tbody","table"],th:["tr","tbody","table"],td:["tr","tbody","table"]},P=function(b){Object.defineProperty(b,"innerHTML",{get:function(){return nb(this)},set:function(b){var c=X[(/<([a-z][^/\0>\x20\t\r\n\f]+)/i.exec(b)||
["",""])[1].toLowerCase()];if(c)for(var d=0;d<c.length;d++)b="<"+c[d]+">"+b+"</"+c[d]+">";S.body.innerHTML=b;for(a.C(S);this.content.firstChild;)k.call(this.content,this.content.firstChild);b=S.body;if(c)for(d=0;d<c.length;d++)b=b.lastChild;for(;b.firstChild;)l.call(this.content,b.firstChild)},configurable:!0})},W=function(a){Object.defineProperty(a,"outerHTML",{get:function(){return"<template>"+this.innerHTML+"</template>"},set:function(a){if(this.parentNode){S.body.innerHTML=a;for(a=this.ownerDocument.createDocumentFragment();S.body.firstChild;)l.call(a,
S.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})};P(a.prototype);W(a.prototype);a.C=function(c){c=b(c,"template");for(var d=0,e=c.length,f;d<e&&(f=c[d]);d++)a.G(f)};document.addEventListener("DOMContentLoaded",function(){a.C(document)});Document.prototype.createElement=function(){var b=g.apply(this,arguments);"template"===b.localName&&a.G(b);return b};DOMParser.prototype.parseFromString=
function(){var b=q.apply(this,arguments);a.C(b);return b};Object.defineProperty(HTMLElement.prototype,"innerHTML",{get:function(){return nb(this)},set:function(b){x.set.call(this,b);a.C(this)},configurable:!0,enumerable:!0});var Ve=/[&\u00A0"]/g,yc=/[&\u00A0<>]/g,zc=function(a){switch(a){case "&":return"&";case "<":return"<";case ">":return">";case '"':return""";case "\u00a0":return" "}};V=function(a){for(var b={},c=0;c<a.length;c++)b[a[c]]=!0;return b};var We=V("area base br col command embed hr img input keygen link meta param source track wbr".split(" ")),
Xe=V("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):M.get.call(a),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 P=h.localName,m="<"+P,W=h.attributes,q=0;k=W[q];q++)m+=" "+k.name+'="'+k.value.replace(Ve,zc)+'"';m+=">";h=We[P]?m:m+nb(h,l)+"</"+P+">";break a;case Node.TEXT_NODE:h=h.data;h=k&&Xe[k.localName]?h:h.replace(yc,zc);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}}if(c||mb){a.a=function(a,b){var c=f.call(a,!1);this.G&&this.G(c);b&&(l.call(c.content,f.call(a.content,!0)),ob(c.content,a.content));return c};var ob=function(c,d){if(d.querySelectorAll&&(d=b(d,"template"),0!==d.length)){c=b(c,"template");for(var e=0,f=c.length,g,h;e<f;e++)h=d[e],g=c[e],a&&a.G&&a.G(h),m.call(g.parentNode,Ye.call(h,!0),g)}},Ye=Node.prototype.cloneNode=
function(b){if(!e&&d&&this instanceof DocumentFragment)if(b)var c=Ze.call(this.ownerDocument,this,!0);else return this.ownerDocument.createDocumentFragment();else this.nodeType===Node.ELEMENT_NODE&&"template"===this.localName&&this.namespaceURI==document.documentElement.namespaceURI?c=a.a(this,b):c=f.call(this,b);b&&ob(c,this);return c},Ze=Document.prototype.importNode=function(c,d){d=d||!1;if("template"===c.localName)return a.a(c,d);var e=h.call(this,c,d);if(d){ob(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=g.call(document,"script");d.textContent=f.textContent;for(var l=f.attributes,P=0,W;P<l.length;P++)W=l[P],d.setAttribute(W.name,W.value);m.call(f.parentNode,d,f)}}return e}}c&&(window.HTMLTemplateElement=a)})();var ka=setTimeout;function la(){}function ma(a,b){return function(){a.apply(b,arguments)}}function r(a){if(!(this instanceof r))throw new TypeError("Promises must be constructed via new");if("function"!==typeof a)throw new TypeError("not a function");this.u=0;this.ma=!1;this.h=void 0;this.I=[];na(a,this)}
function oa(a,b){for(;3===a.u;)a=a.h;0===a.u?a.I.push(b):(a.ma=!0,pa(function(){var c=1===a.u?b.Na:b.Oa;if(null===c)(1===a.u?qa:ra)(b.ga,a.h);else{try{var d=c(a.h)}catch(e){ra(b.ga,e);return}qa(b.ga,d)}}))}function qa(a,b){try{if(b===a)throw new TypeError("A promise cannot be resolved with itself.");if(b&&("object"===typeof b||"function"===typeof b)){var c=b.then;if(b instanceof r){a.u=3;a.h=b;sa(a);return}if("function"===typeof c){na(ma(c,b),a);return}}a.u=1;a.h=b;sa(a)}catch(d){ra(a,d)}}
function ra(a,b){a.u=2;a.h=b;sa(a)}function sa(a){2===a.u&&0===a.I.length&&pa(function(){a.ma||"undefined"!==typeof console&&console&&console.warn("Possible Unhandled Promise Rejection:",a.h)});for(var b=0,c=a.I.length;b<c;b++)oa(a,a.I[b]);a.I=null}function ta(a,b,c){this.Na="function"===typeof a?a:null;this.Oa="function"===typeof b?b:null;this.ga=c}function na(a,b){var c=!1;try{a(function(a){c||(c=!0,qa(b,a))},function(a){c||(c=!0,ra(b,a))})}catch(d){c||(c=!0,ra(b,d))}}
r.prototype["catch"]=function(a){return this.then(null,a)};r.prototype.then=function(a,b){var c=new this.constructor(la);oa(this,new ta(a,b,c));return c};r.prototype["finally"]=function(a){var b=this.constructor;return this.then(function(c){return b.resolve(a()).then(function(){return c})},function(c){return b.resolve(a()).then(function(){return b.reject(c)})})};
function wa(a){return new r(function(b,c){function d(a,g){try{if(g&&("object"===typeof g||"function"===typeof g)){var h=g.then;if("function"===typeof h){h.call(g,function(b){d(a,b)},c);return}}e[a]=g;0===--f&&b(e)}catch(m){c(m)}}if(!a||"undefined"===typeof a.length)throw new TypeError("Promise.all accepts an array");var e=Array.prototype.slice.call(a);if(0===e.length)return b([]);for(var f=e.length,g=0;g<e.length;g++)d(g,e[g])})}
function xa(a){return a&&"object"===typeof a&&a.constructor===r?a:new r(function(b){b(a)})}function ya(a){return new r(function(b,c){c(a)})}function za(a){return new r(function(b,c){for(var d=0,e=a.length;d<e;d++)a[d].then(b,c)})}var pa="function"===typeof setImmediate&&function(a){setImmediate(a)}||function(a){ka(a,0)};/*
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
*/
if(!window.Promise){window.Promise=r;r.prototype.then=r.prototype.then;r.all=wa;r.race=za;r.resolve=xa;r.reject=ya;var Aa=document.createTextNode(""),Ba=[];(new MutationObserver(function(){for(var a=Ba.length,b=0;b<a;b++)Ba[b]();Ba.splice(0,a)})).observe(Aa,{characterData:!0});pa=function(a){Ba.push(a);Aa.textContent=0<Aa.textContent.length?"":"a"}};(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(M)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=m(document,"link[rel=import]:not([import-dependency])"),
c=b.length;c?q(b,function(b){return g(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 g(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);ha&&"style"===a.localName||a.addEventListener("error",c)}}function h(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.Ja(b)});this.c.observe(document.head,{childList:!0,subtree:!0});this.loadImports(document)}function l(a){q(m(a,"template"),function(a){q(m(a.content,'script:not([type]),script[type="application/javascript"],script[type="text/javascript"],script[type="module"]'),
function(a){var b=document.createElement("script");q(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):U}function q(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"),M="import"in x,U=x.querySelectorAll("*"),ua=null;!1==="currentScript"in document&&Object.defineProperty(document,"currentScript",
{get:function(){return ua||("complete"!==document.readyState?document.scripts[document.scripts.length-1]:null)},configurable:!0});var lb=/(url\()([^)]*)(\))/g,mb=/(@import[\s]+(?!url\())([^;]*)(;)/g,S=/(<link[^>]*)(rel=['|"]?stylesheet['|"]?[^>]*>)/g,C={Ea:function(a,b){a.href&&a.setAttribute("href",C.X(a.getAttribute("href"),b));a.src&&a.setAttribute("src",C.X(a.getAttribute("src"),b));if("style"===a.localName){var c=C.qa(a.textContent,b,lb);a.textContent=C.qa(c,b,mb)}},qa:function(a,b,c){return a.replace(c,
function(a,c,d,e){a=d.replace(/["']/g,"");b&&(a=C.X(a,b));return c+"'"+a+"'"+e})},X:function(a,b){if(void 0===C.aa){C.aa=!1;try{var c=new URL("b","http://a");c.pathname="c%20d";C.aa="http://a/c%20d"===c.href}catch(yc){}}if(C.aa)return(new URL(a,b)).href;c=C.xa;c||(c=document.implementation.createHTMLDocument("temp"),C.xa=c,c.ja=c.createElement("base"),c.head.appendChild(c.ja),c.ia=c.createElement("a"));c.ja.href=b;c.ia.href=a;return c.ia.href||a}},V={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,V.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")}},ha=/Trident/.test(navigator.userAgent)||/Edge\/\d./i.test(navigator.userAgent);
k.prototype.loadImports=function(a){var b=this;a=m(a,"link[rel=import]");q(a,function(a){return b.g(a)})};k.prototype.g=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.f(a))}else this.b++,this.a[c]="pending",V.load(c,function(a,d){a=b.Ka(a,d||c);b.a[c]=a;b.b--;b.loadImports(a);b.l()},function(){b.a[c]=null;b.b--;b.l()})};k.prototype.Ka=function(a,b){if(!a)return document.createDocumentFragment();ha&&(a=a.replace(S,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=C.X(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"],script[type="module"]');
var d=0;q(c,function(a){g(a);C.Ea(a,b);a.setAttribute("import-dependency","");if("script"===a.localName&&!a.src&&a.textContent){if("module"===a.type)throw Error("Inline module scripts are not supported in HTML Imports.");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.l=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.da()))};this.Ma(function(){c=!0;d()});this.La(function(){b=!0;d()})}};k.prototype.flatten=function(a){var b=this;a=m(a,"link[rel=import]");q(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.La=function(a){function b(e){if(e<d){var f=c[e],h=document.createElement("script");f.removeAttribute("import-dependency");
q(f.attributes,function(a){return h.setAttribute(a.name,a.value)});ua=h;f.parentNode.replaceChild(h,f);g(h,function(){ua=null;b(e+1)})}else a()}var c=m(document,"script[import-dependency]"),d=c.length;b(0)};k.prototype.Ma=function(a){var b=m(document,"style[import-dependency],link[rel=stylesheet][import-dependency]"),d=b.length;if(d){var e=ha&&!!document.querySelector("link[rel=stylesheet][href][type=import-disable]");q(b,function(b){g(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.da=function(){var a=this,b=m(document,"link[rel=import]");q(b,function(b){return a.f(b)},!0)};k.prototype.f=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.Ja=function(a){var b=this;q(a,function(a){return q(a.addedNodes,function(a){a&&a.nodeType===Node.ELEMENT_NODE&&(h(a)?b.g(a):b.loadImports(a))})})};var va=null;if(M)x=m(document,"link[rel=import]"),q(x,function(a){a.import&&"loading"===a.import.readyState||(a.__loaded=!0)}),x=function(a){a=a.target;h(a)&&(a.__loaded=!0)},document.addEventListener("load",x,!0),document.addEventListener("error",
x,!0);else{var X=Object.getOwnPropertyDescriptor(Node.prototype,"baseURI");Object.defineProperty((!X||X.configurable?Node:Element).prototype,"baseURI",{get:function(){var a=h(this)?this:c(this);return a?a.href:X&&X.get?X.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(){va=new k})}f(function(){return document.dispatchEvent(b("HTMLImportsLoaded",
{cancelable:!0,bubbles:!0,detail:void 0}))});a.useNative=M;a.whenReady=f;a.importForElement=c;a.loadImports=function(a){va&&va.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 Ca=document.querySelector('script[src*="webcomponents-lite.js"]'),Da=/wc-(.+)/,t={};if(!t.noOpts){location.search.slice(1).split("&").forEach(function(a){a=a.split("=");var b;a[0]&&(b=a[0].match(Da))&&(t[b[1]]=a[1]||!0)});if(Ca)for(var Ea=0,Fa=void 0;Fa=Ca.attributes[Ea];Ea++)"src"!==Fa.name&&(t[Fa.name]=Fa.value||!0);if(t.log&&t.log.split){var Ga=t.log.split(",");t.log={};Ga.forEach(function(a){t.log[a]=!0})}else t.log={}}
window.WebComponents.flags=t;var Ha=t.shadydom;Ha&&(window.ShadyDOM=window.ShadyDOM||{},window.ShadyDOM.force=Ha);var Ia=t.register||t.ce;Ia&&window.customElements&&(window.customElements.forcePolyfill=Ia);/*
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 Ja(){this.pa=this.root=null;this.T=!1;this.D=this.P=this.ca=this.assignedSlot=this.assignedNodes=this.H=null;this.childNodes=this.nextSibling=this.previousSibling=this.lastChild=this.firstChild=this.parentNode=this.K=void 0;this.ka=this.la=!1;this.O={}}Ja.prototype.toJSON=function(){return{}};function u(a){a.__shady||(a.__shady=new Ja);return a.__shady}function v(a){return a&&a.__shady};var w=window.ShadyDOM||{};w.Ga=!(!Element.prototype.attachShadow||!Node.prototype.getRootNode);var Ka=Object.getOwnPropertyDescriptor(Node.prototype,"firstChild");w.m=!!(Ka&&Ka.configurable&&Ka.get);w.ea=w.force||!w.Ga;w.J=w.noPatch||!1;w.oa=w.preferPerformance;function y(a){return(a=v(a))&&void 0!==a.firstChild}function z(a){return"ShadyRoot"===a.za}function La(a){return(a=(a=v(a))&&a.root)&&Ma(a)}
var Na=Element.prototype,Oa=Na.matches||Na.matchesSelector||Na.mozMatchesSelector||Na.msMatchesSelector||Na.oMatchesSelector||Na.webkitMatchesSelector,Pa=document.createTextNode(""),Qa=0,Ra=[];(new MutationObserver(function(){for(;Ra.length;)try{Ra.shift()()}catch(a){throw Pa.textContent=Qa++,a;}})).observe(Pa,{characterData:!0});function Sa(a){Ra.push(a);Pa.textContent=Qa++}var Ta=!!document.contains;function Ua(a,b){for(;b;){if(b==a)return!0;b=b.__shady_parentNode}return!1}
function Va(a){for(var b=a.length-1;0<=b;b--){var c=a[b],d=c.getAttribute("id")||c.getAttribute("name");d&&"length"!==d&&isNaN(d)&&(a[d]=c)}a.item=function(b){return a[b]};a.namedItem=function(b){if("length"!==b&&isNaN(b)&&a[b])return a[b];for(var c=ia(a),d=c.next();!d.done;d=c.next())if(d=d.value,(d.getAttribute("id")||d.getAttribute("name"))==b)return d;return null};return a}
function A(a,b,c,d){c=void 0===c?"":c;for(var e in b){var f=b[e];if(!(d&&0<=d.indexOf(e))){f.configurable=!0;var g=c+e;if(f.value)a[g]=f.value;else try{Object.defineProperty(a,g,f)}catch(h){}}}}function B(a){var b={};Object.getOwnPropertyNames(a).forEach(function(c){b[c]=Object.getOwnPropertyDescriptor(a,c)});return b};var Wa=[],Xa;function Ya(a){Xa||(Xa=!0,Sa(Za));Wa.push(a)}function Za(){Xa=!1;for(var a=!!Wa.length;Wa.length;)Wa.shift()();return a}Za.list=Wa;function $a(){this.a=!1;this.addedNodes=[];this.removedNodes=[];this.S=new Set}function ab(a){a.a||(a.a=!0,Sa(function(){a.flush()}))}$a.prototype.flush=function(){if(this.a){this.a=!1;var a=this.takeRecords();a.length&&this.S.forEach(function(b){b(a)})}};$a.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 bb(a,b){var c=u(a);c.H||(c.H=new $a);c.H.S.add(b);var d=c.H;return{ya:b,F:d,Aa:a,takeRecords:function(){return d.takeRecords()}}}function cb(a){var b=a&&a.F;b&&(b.S.delete(a.ya),b.S.size||(u(a.Aa).H=null))}
function db(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 eb=/[&\u00A0"]/g,fb=/[&\u00A0<>]/g;function gb(a){switch(a){case "&":return"&";case "<":return"<";case ">":return">";case '"':return""";case "\u00a0":return" "}}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,g=void 0;e<f&&(g=d[e]);e++){a:{var h=g;var k=a,l=b;switch(h.nodeType){case Node.ELEMENT_NODE:k=h.localName;for(var m="<"+k,q=h.attributes,x=0,M;M=q[x];x++)m+=" "+M.name+'="'+M.value.replace(eb,gb)+'"';m+=">";h=ib[k]?m:m+kb(h,l)+"</"+k+">";break a;case Node.TEXT_NODE:h=h.data;h=k&&jb[k.localName]?h:h.replace(fb,gb);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 pb=w.m,qb={querySelector:function(a){return this.__shady_native_querySelector(a)},querySelectorAll:function(a){return this.__shady_native_querySelectorAll(a)}},rb={};function sb(a){rb[a]=function(b){return b["__shady_native_"+a]}}function tb(a,b){A(a,b,"__shady_native_");for(var c in b)sb(c)}function D(a,b){b=void 0===b?[]:b;for(var c=0;c<b.length;c++){var d=b[c],e=Object.getOwnPropertyDescriptor(a,d);e&&(Object.defineProperty(a,"__shady_native_"+d,e),e.value?qb[d]||(qb[d]=e.value):sb(d))}}
var E=document.createTreeWalker(document,NodeFilter.SHOW_ALL,null,!1),F=document.createTreeWalker(document,NodeFilter.SHOW_ELEMENT,null,!1),ub=document.implementation.createHTMLDocument("inert");function vb(a){for(var b;b=a.__shady_native_firstChild;)a.__shady_native_removeChild(b)}var wb=["firstElementChild","lastElementChild","children","childElementCount"],xb=["querySelector","querySelectorAll"];
function yb(){var a=["dispatchEvent","addEventListener","removeEventListener"];window.EventTarget?D(window.EventTarget.prototype,a):(D(Node.prototype,a),D(Window.prototype,a));pb?D(Node.prototype,"parentNode firstChild lastChild previousSibling nextSibling childNodes parentElement textContent".split(" ")):tb(Node.prototype,{parentNode:{get:function(){E.currentNode=this;return E.parentNode()}},firstChild:{get:function(){E.currentNode=this;return E.firstChild()}},lastChild:{get:function(){E.currentNode=
this;return E.lastChild()}},previousSibling:{get:function(){E.currentNode=this;return E.previousSibling()}},nextSibling:{get:function(){E.currentNode=this;return E.nextSibling()}},childNodes:{get:function(){var a=[];E.currentNode=this;for(var c=E.firstChild();c;)a.push(c),c=E.nextSibling();return a}},parentElement:{get:function(){F.currentNode=this;return F.parentNode()}},textContent:{get:function(){switch(this.nodeType){case Node.ELEMENT_NODE:case Node.DOCUMENT_FRAGMENT_NODE:for(var a=document.createTreeWalker(this,
NodeFilter.SHOW_TEXT,null,!1),c="",d;d=a.nextNode();)c+=d.nodeValue;return c;default:return this.nodeValue}},set:function(a){if("undefined"===typeof a||null===a)a="";switch(this.nodeType){case Node.ELEMENT_NODE:case Node.DOCUMENT_FRAGMENT_NODE:vb(this);(0<a.length||this.nodeType===Node.ELEMENT_NODE)&&this.__shady_native_insertBefore(document.createTextNode(a),void 0);break;default:this.nodeValue=a}}}});D(Node.prototype,"appendChild insertBefore removeChild replaceChild cloneNode contains".split(" "));
a={firstElementChild:{get:function(){F.currentNode=this;return F.firstChild()}},lastElementChild:{get:function(){F.currentNode=this;return F.lastChild()}},children:{get:function(){var a=[];F.currentNode=this;for(var c=F.firstChild();c;)a.push(c),c=F.nextSibling();return Va(a)}},childElementCount:{get:function(){return this.children?this.children.length:0}}};pb?(D(Element.prototype,wb),D(Element.prototype,["previousElementSibling","nextElementSibling","innerHTML"]),Object.getOwnPropertyDescriptor(HTMLElement.prototype,
"children")&&D(HTMLElement.prototype,["children"]),Object.getOwnPropertyDescriptor(HTMLElement.prototype,"innerHTML")&&D(HTMLElement.prototype,["innerHTML"])):(tb(Element.prototype,a),tb(Element.prototype,{previousElementSibling:{get:function(){F.currentNode=this;return F.previousSibling()}},nextElementSibling:{get:function(){F.currentNode=this;return F.nextSibling()}},innerHTML:{get:function(){return kb(this,function(a){return a.__shady_native_childNodes})},set:function(a){var b="template"===this.localName?
this.content:this;vb(b);var d=this.localName||"div";d=this.namespaceURI&&this.namespaceURI!==ub.namespaceURI?ub.createElementNS(this.namespaceURI,d):ub.createElement(d);d.innerHTML=a;for(a="template"===this.localName?d.content:d;d=a.__shady_native_firstChild;)b.__shady_native_insertBefore(d,void 0)}}}));D(Element.prototype,"setAttribute getAttribute hasAttribute removeAttribute focus blur".split(" "));D(Element.prototype,xb);D(HTMLElement.prototype,["focus","blur","contains"]);pb&&D(HTMLElement.prototype,
["parentElement","children","innerHTML"]);window.HTMLTemplateElement&&D(window.HTMLTemplateElement.prototype,["innerHTML"]);pb?D(DocumentFragment.prototype,wb):tb(DocumentFragment.prototype,a);D(DocumentFragment.prototype,xb);pb?(D(Document.prototype,wb),D(Document.prototype,["activeElement"])):tb(Document.prototype,a);D(Document.prototype,["importNode","getElementById"]);D(Document.prototype,xb)};var zb=B({get childNodes(){return this.__shady_childNodes},get firstChild(){return this.__shady_firstChild},get lastChild(){return this.__shady_lastChild},get textContent(){return this.__shady_textContent},set textContent(a){this.__shady_textContent=a},get childElementCount(){return this.__shady_childElementCount},get children(){return this.__shady_children},get firstElementChild(){return this.__shady_firstElementChild},get lastElementChild(){return this.__shady_lastElementChild},get innerHTML(){return this.__shady_innerHTML},
set innerHTML(a){return this.__shady_innerHTML=a},get shadowRoot(){return this.__shady_shadowRoot}}),Ab=B({get parentElement(){return this.__shady_parentElement},get parentNode(){return this.__shady_parentNode},get nextSibling(){return this.__shady_nextSibling},get previousSibling(){return this.__shady_previousSibling},get nextElementSibling(){return this.__shady_nextElementSibling},get previousElementSibling(){return this.__shady_previousElementSibling},get className(){return this.__shady_className},
set className(a){return this.__shady_className=a}}),Bb;for(Bb in zb)zb[Bb].enumerable=!1;for(var Cb in Ab)Ab[Cb].enumerable=!1;var Db=w.m||w.J,Eb=Db?function(){}:function(a){var b=u(a);b.la||(b.la=!0,A(a,Ab))},Fb=Db?function(){}:function(a){var b=u(a);b.ka||(b.ka=!0,A(a,zb))};var Gb="__eventWrappers"+Date.now(),Hb=function(){var a=Object.getOwnPropertyDescriptor(Event.prototype,"composed");return a?function(b){return a.get.call(b)}:null}(),Ib={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},Jb={DOMAttrModified:!0,DOMAttributeNameChanged:!0,DOMCharacterDataModified:!0,DOMElementNameChanged:!0,DOMNodeInserted:!0,DOMNodeInsertedIntoDocument:!0,DOMNodeRemoved:!0,DOMNodeRemovedFromDocument:!0,DOMSubtreeModified:!0};
function Kb(a){return a instanceof Node?a.__shady_getRootNode():a}function Lb(a,b){var c=[],d=a;for(a=Kb(a);d;)c.push(d),d.__shady_assignedSlot?d=d.__shady_assignedSlot:d.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&d.host&&(b||d!==a)?d=d.host:d=d.__shady_parentNode;c[c.length-1]===document&&c.push(window);return c}function Mb(a){a.__composedPath||(a.__composedPath=Lb(a.target,!0));return a.__composedPath}
function Nb(a,b){if(!z)return a;a=Lb(a,!0);for(var c=0,d,e=void 0,f,g=void 0;c<b.length;c++)if(d=b[c],f=Kb(d),f!==e&&(g=a.indexOf(f),e=f),!z(f)||-1<g)return d}function Ob(a){function b(b,d){b=new a(b,d);b.__composed=d&&!!d.composed;return b}b.__proto__=a;b.prototype=a.prototype;return b}var Pb={focus:!0,blur:!0};function Qb(a){return a.__target!==a.target||a.__relatedTarget!==a.relatedTarget}
function Rb(a,b,c){if(c=b.__handlers&&b.__handlers[a.type]&&b.__handlers[a.type][c])for(var d=0,e;(e=c[d])&&(!Qb(a)||a.target!==a.relatedTarget)&&(e.call(b,a),!a.__immediatePropagationStopped);d++);}
function Sb(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];Rb(a,d,"capture");if(a.Z)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=v(d);f=f&&f.root;if(0===c||f&&f===e)if(Rb(a,d,"bubble"),d!==window&&(e=d.__shady_getRootNode()),a.Z)break}}
function Tb(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 Ub(a,b,c){if(b){var d=typeof b;if("function"===d||"object"===d)if("object"!==d||b.handleEvent&&"function"===typeof b.handleEvent){if(Jb[a])return this.__shady_native_addEventListener(a,b,c);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.$||this,k=b[Gb];if(k){if(-1<Tb(k,h,a,e,f,g))return}else b[Gb]=[];k=function(e){f&&this.__shady_removeEventListener(a,b,c);e.__target||Vb(e);if(h!==this){var g=Object.getOwnPropertyDescriptor(e,"currentTarget");
Object.defineProperty(e,"currentTarget",{get:function(){return h},configurable:!0})}e.__previousCurrentTarget=e.currentTarget;if(!z(h)||-1!=e.composedPath().indexOf(h))if(e.composed||-1<e.composedPath().indexOf(h))if(Qb(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[Gb].push({node:h,type:a,capture:e,once:f,passive:g,Ya:k});Pb[a]?(this.__handlers=this.__handlers||{},this.__handlers[a]=this.__handlers[a]||{capture:[],bubble:[]},this.__handlers[a][e?"capture":"bubble"].push(k)):this.__shady_native_addEventListener(a,k,c)}}}
function Wb(a,b,c){if(b){if(Jb[a])return this.__shady_native_removeEventListener(a,b,c);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.$||this,h=void 0;var k=null;try{k=b[Gb]}catch(l){}k&&(e=Tb(k,g,a,d,e,f),-1<e&&(h=k.splice(e,1)[0].Ya,k.length||(b[Gb]=void 0)));this.__shady_native_removeEventListener(a,h||b,c);h&&Pb[a]&&this.__handlers&&this.__handlers[a]&&(a=this.__handlers[a][d?"capture":"bubble"],h=a.indexOf(h),-1<h&&a.splice(h,1))}}
function Xb(){for(var a in Pb)window.__shady_native_addEventListener(a,function(a){a.__target||(Vb(a),Sb(a))},!0)}
var Yb=B({get composed(){void 0===this.__composed&&(Hb?this.__composed="focusin"===this.type||"focusout"===this.type||Hb(this):!1!==this.isTrusted&&(this.__composed=Ib[this.type]));return this.__composed||!1},composedPath:function(){this.__composedPath||(this.__composedPath=Lb(this.__target,this.composed));return this.__composedPath},get target(){return Nb(this.currentTarget||this.__previousCurrentTarget,this.composedPath())},get relatedTarget(){if(!this.__relatedTarget)return null;this.__relatedTargetComposedPath||
(this.__relatedTargetComposedPath=Lb(this.__relatedTarget,!0));return Nb(this.currentTarget||this.__previousCurrentTarget,this.__relatedTargetComposedPath)},stopPropagation:function(){Event.prototype.stopPropagation.call(this);this.Z=!0},stopImmediatePropagation:function(){Event.prototype.stopImmediatePropagation.call(this);this.Z=this.__immediatePropagationStopped=!0}});
function Vb(a){a.__target=a.target;a.__relatedTarget=a.relatedTarget;if(w.m){var b=Object.getPrototypeOf(a);if(!Object.hasOwnProperty(b,"__shady_patchedProto")){var c=Object.create(b);c.__shady_sourceProto=b;A(c,Yb);b.__shady_patchedProto=c}a.__proto__=b.__shady_patchedProto}else A(a,Yb)}var Zb=Ob(Event),$b=Ob(CustomEvent),ac=Ob(MouseEvent);
function bc(){if(!Hb&&Object.getOwnPropertyDescriptor(Event.prototype,"isTrusted")){var a=function(){var a=new MouseEvent("click",{bubbles:!0,cancelable:!0,composed:!0});this.__shady_dispatchEvent(a)};Element.prototype.click?Element.prototype.click=a:HTMLElement.prototype.click&&(HTMLElement.prototype.click=a)}}var cc=Object.getOwnPropertyNames(Document.prototype).filter(function(a){return"on"===a.substring(0,2)});function dc(a,b){return{index:a,L:[],R:b}}
function ec(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&&fc(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=dc(e,0);f<d;)b.L.push(c[f++]);return[b]}if(f==d)return[dc(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,x=b[l][m-1]+1;b[l][m]=q<x?q:x}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=dc(e,0));b.R++;e++;b.L.push(c[f]);f++;break;case 2:b||(b=dc(e,0));
b.R++;e++;break;case 3:b||(b=dc(e,0)),b.L.push(c[f]),f++}b&&k.push(b);return k}function fc(a,b){return a===b};function gc(a,b,c){Eb(a);c=c||null;var d=u(a),e=u(b),f=c?u(c):null;d.previousSibling=c?f.previousSibling:b.__shady_lastChild;if(f=v(d.previousSibling))f.nextSibling=a;if(f=v(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 hc(a,b,c){Fb(b);var d=u(b);void 0!==d.firstChild&&(d.childNodes=null);if(a.nodeType===Node.DOCUMENT_FRAGMENT_NODE){d=a.__shady_childNodes;for(var e=0;e<d.length;e++)gc(d[e],b,c);a=u(a);b=void 0!==a.firstChild?null:void 0;a.firstChild=a.lastChild=b;a.childNodes=b}else gc(a,b,c)}
function ic(a,b){var c=u(a);b=u(b);a===b.firstChild&&(b.firstChild=c.nextSibling);a===b.lastChild&&(b.lastChild=c.previousSibling);a=c.previousSibling;var d=c.nextSibling;a&&(u(a).nextSibling=d);d&&(u(d).previousSibling=a);c.parentNode=c.previousSibling=c.nextSibling=void 0;void 0!==b.childNodes&&(b.childNodes=null)}
function jc(a){var b=u(a);if(void 0===b.firstChild){b.childNodes=null;var c=b.firstChild=a.__shady_native_firstChild||null;b.lastChild=a.__shady_native_lastChild||null;Fb(a);b=c;for(c=void 0;b;b=b.__shady_native_nextSibling){var d=u(b);d.parentNode=a;d.nextSibling=b.__shady_native_nextSibling||null;d.previousSibling=c||null;c=b;Eb(b)}}};var kc=null;function G(){kc||(kc=window.ShadyCSS&&window.ShadyCSS.ScopingShim);return kc||null}function lc(a,b){var c=G();c&&c.unscopeNode(a,b)}function mc(a,b){var c=G();if(!c)return!0;if(a.nodeType===Node.DOCUMENT_FRAGMENT_NODE){c=!0;a=a.__shady_childNodes;for(var d=0;c&&d<a.length;d++)c=c&&mc(a[d],b);return c}return a.nodeType!==Node.ELEMENT_NODE?!0:c.currentScopeForNode(a)===b}function nc(a){if(a.nodeType!==Node.ELEMENT_NODE)return"";var b=G();return b?b.currentScopeForNode(a):""}
function oc(a,b){if(a){a.nodeType===Node.ELEMENT_NODE&&b(a);a=a.__shady_childNodes;for(var c=0,d;c<a.length;c++)d=a[c],d.nodeType===Node.ELEMENT_NODE&&oc(d,b)}};var pc=window.document,qc=w.oa,rc=Object.getOwnPropertyDescriptor(Node.prototype,"isConnected"),sc=rc&&rc.get;function tc(a){for(var b;b=a.__shady_firstChild;)a.__shady_removeChild(b)}function uc(a){var b=v(a);if(b&&void 0!==b.K){b=a.__shady_childNodes;for(var c=0,d=b.length,e=void 0;c<d&&(e=b[c]);c++)uc(e)}if(a=v(a))a.K=void 0}function vc(a){var b=a;a&&"slot"===a.localName&&(b=(b=(b=v(a))&&b.D)&&b.length?b[0]:vc(a.__shady_nextSibling));return b}
function wc(a,b,c){if(a=(a=v(a))&&a.H)b&&a.addedNodes.push(b),c&&a.removedNodes.push(c),ab(a)}
var Cc=B({get parentNode(){var a=v(this);a=a&&a.parentNode;return void 0!==a?a:this.__shady_native_parentNode},get firstChild(){var a=v(this);a=a&&a.firstChild;return void 0!==a?a:this.__shady_native_firstChild},get lastChild(){var a=v(this);a=a&&a.lastChild;return void 0!==a?a:this.__shady_native_lastChild},get nextSibling(){var a=v(this);a=a&&a.nextSibling;return void 0!==a?a:this.__shady_native_nextSibling},get previousSibling(){var a=v(this);a=a&&a.previousSibling;return void 0!==a?a:this.__shady_native_previousSibling},
get childNodes(){if(y(this)){var a=v(this);if(!a.childNodes){a.childNodes=[];for(var b=this.__shady_firstChild;b;b=b.__shady_nextSibling)a.childNodes.push(b)}var c=a.childNodes}else c=this.__shady_native_childNodes;c.item=function(a){return c[a]};return c},get parentElement(){var a=v(this);(a=a&&a.parentNode)&&a.nodeType!==Node.ELEMENT_NODE&&(a=null);return void 0!==a?a:this.__shady_native_parentElement},get isConnected(){if(sc&&sc.call(this))return!0;if(this.nodeType==Node.DOCUMENT_FRAGMENT_NODE)return!1;
var a=this.ownerDocument;if(Ta){if(a.__shady_native_contains(this))return!0}else if(a.documentElement&&a.documentElement.__shady_native_contains(this))return!0;for(a=this;a&&!(a instanceof Document);)a=a.__shady_parentNode||(z(a)?a.host:void 0);return!!(a&&a instanceof Document)},get textContent(){if(y(this)){for(var a=[],b=0,c=this.__shady_childNodes,d;d=c[b];b++)d.nodeType!==Node.COMMENT_NODE&&a.push(d.__shady_textContent);return a.join("")}return this.__shady_native_textContent},set textContent(a){if("undefined"===
typeof a||null===a)a="";switch(this.nodeType){case Node.ELEMENT_NODE:case Node.DOCUMENT_FRAGMENT_NODE:if(!y(this)&&w.m){var b=this.__shady_firstChild;(b!=this.__shady_lastChild||b&&b.nodeType!=Node.TEXT_NODE)&&tc(this);this.__shady_native_textContent=a}else tc(this),(0<a.length||this.nodeType===Node.ELEMENT_NODE)&&this.__shady_insertBefore(document.createTextNode(a));break;default:this.nodeValue=a}},insertBefore:function(a,b){if(this.ownerDocument!==pc&&a.ownerDocument!==pc)return this.__shady_native_insertBefore(a,
b),a;if(a===this)throw Error("Failed to execute 'appendChild' on 'Node': The new child element contains the parent.");if(b){var c=v(b);c=c&&c.parentNode;if(void 0!==c&&c!==this||void 0===c&&b.__shady_native_parentNode!==this)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(b===a)return a;var d=[],e=(c=xc(this))?c.host.localName:nc(this),f=a.__shady_parentNode;if(f){var g=nc(a);f.__shady_removeChild(a,!!c||
!xc(a))}f=!0;var h=(!qc||void 0===a.__noInsertionPoint)&&!mc(a,e),k=c&&!a.__noInsertionPoint&&(!qc||a.nodeType===Node.DOCUMENT_FRAGMENT_NODE);if(k||h)h&&(g=g||nc(a)),oc(a,function(a){k&&"slot"===a.localName&&d.push(a);if(h){var b=g;G()&&(b&&lc(a,b),(b=G())&&b.scopeNode(a,e))}});if("slot"===this.localName||d.length)d.length&&(c.c=c.c||[],c.a=c.a||[],c.b=c.b||{},c.c.push.apply(c.c,d instanceof Array?d:ja(ia(d)))),c&&Ac(c);y(this)&&(hc(a,this,b),c=v(this),La(this)?(Ac(c.root),f=!1):c.root&&(f=!1));f?
(c=z(this)?this.host:this,b?(b=vc(b),c.__shady_native_insertBefore(a,b)):c.__shady_native_appendChild(a)):a.ownerDocument!==this.ownerDocument&&this.ownerDocument.adoptNode(a);wc(this,a);return a},appendChild:function(a){return this.__shady_insertBefore(a)},removeChild:function(a,b){b=void 0===b?!1:b;if(this.ownerDocument!==pc)return this.__shady_native_removeChild(a);if(a.__shady_parentNode!==this)throw Error("The node to be removed is not a child of this node: "+a);var c=xc(a),d=c&&Bc(c,a),e=v(this);
if(y(this)&&(ic(a,this),La(this))){Ac(e.root);var f=!0}if(G()&&!b&&c){var g=nc(a);oc(a,function(a){lc(a,g)})}uc(a);c&&((b=this&&"slot"===this.localName)&&(f=!0),(d||b)&&Ac(c));f||(f=z(this)?this.host:this,(!e.root&&"slot"!==a.localName||f===a.__shady_native_parentNode)&&f.__shady_native_removeChild(a));wc(this,null,a);return a},replaceChild:function(a,b){this.__shady_insertBefore(a,b);this.__shady_removeChild(b);return a},cloneNode:function(a){if("template"==this.localName)return this.__shady_native_cloneNode(a);
var b=this.__shady_native_cloneNode(!1);if(a&&b.nodeType!==Node.ATTRIBUTE_NODE){a=this.__shady_childNodes;for(var c=0,d;c<a.length;c++)d=a[c].__shady_cloneNode(!0),b.__shady_appendChild(d)}return b},getRootNode:function(a){if(this&&this.nodeType){var b=u(this),c=b.K;void 0===c&&(z(this)?(c=this,b.K=c):(c=(c=this.__shady_parentNode)?c.__shady_getRootNode(a):this,document.documentElement.__shady_native_contains(this)&&(b.K=c)));return c}},contains:function(a){return Ua(this,a)}});function Dc(a,b,c){var d=[];Ec(a.__shady_childNodes,b,c,d);return d}function Ec(a,b,c,d){for(var e=0,f=a.length,g=void 0;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:(Ec(h.__shady_childNodes,k,l,m),h=void 0)}if(h)break}}
var Fc=B({get firstElementChild(){var a=v(this);if(a&&void 0!==a.firstChild){for(a=this.__shady_firstChild;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.__shady_nextSibling;return a}return this.__shady_native_firstElementChild},get lastElementChild(){var a=v(this);if(a&&void 0!==a.lastChild){for(a=this.__shady_lastChild;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.__shady_previousSibling;return a}return this.__shady_native_lastElementChild},get children(){return y(this)?Va(Array.prototype.filter.call(this.__shady_childNodes,
function(a){return a.nodeType===Node.ELEMENT_NODE})):this.__shady_native_children},get childElementCount(){var a=this.__shady_children;return a?a.length:0}}),Gc=B({querySelector:function(a){return Dc(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(this.__shady_native_querySelectorAll(a));var c=this.__shady_getRootNode();return b.filter(function(a){return a.__shady_getRootNode()==c})}return Dc(this,function(b){return Oa.call(b,
a)})}}),Hc=w.oa?Object.assign({},Fc):Fc;Object.assign(Fc,Gc);var Ic=B({getElementById:function(a){return""===a?null:Dc(this,function(b){return b.id==a},function(a){return!!a})[0]||null}});var Jc=B({get activeElement(){var a=w.m?document.__shady_native_activeElement:document.activeElement;if(!a||!a.nodeType)return null;var b=!!z(this);if(!(this===document||b&&this.host!==a&&this.host.__shady_native_contains(a)))return null;for(b=xc(a);b&&b!==this;)a=b.host,b=xc(a);return this===document?b?null:a:b===this?a:null}});var Kc=document.implementation.createHTMLDocument("inert"),Lc=B({get innerHTML(){return y(this)?kb("template"===this.localName?this.content:this,function(a){return a.__shady_childNodes}):this.__shady_native_innerHTML},set innerHTML(a){if("template"===this.localName)this.__shady_native_innerHTML=a;else{tc(this);var b=this.localName||"div";b=this.namespaceURI&&this.namespaceURI!==Kc.namespaceURI?Kc.createElementNS(this.namespaceURI,b):Kc.createElement(b);for(w.m?b.__shady_native_innerHTML=a:b.innerHTML=
a;a=b.__shady_firstChild;)this.__shady_insertBefore(a)}}});var Mc=B({addEventListener:function(a,b,c){"object"!==typeof c&&(c={capture:!!c});c.$=this;this.host.__shady_addEventListener(a,b,c)},removeEventListener:function(a,b,c){"object"!==typeof c&&(c={capture:!!c});c.$=this;this.host.__shady_removeEventListener(a,b,c)}});function Nc(a,b){A(a,Mc,b);A(a,Jc,b);A(a,Lc,b);A(a,Fc,b);w.J&&!b?(A(a,Cc,b),A(a,Ic,b)):w.m||(A(a,Ab),A(a,zb))};var Oc={},Pc=w.deferConnectionCallbacks&&"loading"===document.readyState,Qc;function Rc(a){var b=[];do b.unshift(a);while(a=a.__shady_parentNode);return b}
function Sc(a,b,c){if(a!==Oc)throw new TypeError("Illegal constructor");this.za="ShadyRoot";this.host=b;this.mode=c&&c.mode;jc(b);a=u(b);a.root=this;a.pa="closed"!==this.mode?this:null;a=u(this);a.firstChild=a.lastChild=a.parentNode=a.nextSibling=a.previousSibling=null;a.childNodes=[];this.ba=this.B=!1;this.c=this.b=this.a=null;if(w.preferPerformance)for(;a=b.__shady_native_firstChild;)b.__shady_native_removeChild(a);else Ac(this)}function Ac(a){a.B||(a.B=!0,Ya(function(){return Tc(a)}))}
function Tc(a){var b;if(b=a.B){for(var c;a;)a:{a.B&&(c=a),b=a;a=b.host.__shady_getRootNode();if(z(a)&&(b=v(b.host))&&0<b.N)break a;a=void 0}b=c}(c=b)&&c._renderSelf()}
Sc.prototype._renderSelf=function(){var a=Pc;Pc=!0;this.B=!1;if(this.a){Uc(this);for(var b=0,c;b<this.a.length;b++){c=this.a[b];var d=v(c),e=d.assignedNodes;d.assignedNodes=[];d.D=[];if(d.ca=e)for(d=0;d<e.length;d++){var f=v(e[d]);f.P=f.assignedSlot;f.assignedSlot===c&&(f.assignedSlot=null)}}for(b=this.host.__shady_firstChild;b;b=b.__shady_nextSibling)Vc(this,b);for(b=0;b<this.a.length;b++){c=this.a[b];e=v(c);if(!e.assignedNodes.length)for(d=c.__shady_firstChild;d;d=d.__shady_nextSibling)Vc(this,
d,c);(d=(d=v(c.__shady_parentNode))&&d.root)&&(Ma(d)||d.B)&&d._renderSelf();Wc(this,e.D,e.assignedNodes);if(d=e.ca){for(f=0;f<d.length;f++)v(d[f]).P=null;e.ca=null;d.length>e.assignedNodes.length&&(e.T=!0)}e.T&&(e.T=!1,Xc(this,c))}c=this.a;b=[];for(e=0;e<c.length;e++)d=c[e].__shady_parentNode,(f=v(d))&&f.root||!(0>b.indexOf(d))||b.push(d);for(c=0;c<b.length;c++){f=b[c];e=f===this?this.host:f;d=[];f=f.__shady_childNodes;for(var g=0;g<f.length;g++){var h=f[g];if("slot"==h.localName){h=v(h).D;for(var k=
0;k<h.length;k++)d.push(h[k])}else d.push(h)}f=Array.prototype.slice.call(e.__shady_native_childNodes);g=ec(d,d.length,f,f.length);k=h=0;for(var l=void 0;h<g.length&&(l=g[h]);h++){for(var m=0,q=void 0;m<l.L.length&&(q=l.L[m]);m++)q.__shady_native_parentNode===e&&e.__shady_native_removeChild(q),f.splice(l.index+k,1);k-=l.R}k=0;for(l=void 0;k<g.length&&(l=g[k]);k++)for(h=f[l.index],m=l.index;m<l.index+l.R;m++)q=d[m],e.__shady_native_insertBefore(q,h),f.splice(m,0,q)}}if(!w.preferPerformance&&!this.ba)for(b=
this.host.__shady_childNodes,c=0,e=b.length;c<e;c++)d=b[c],f=v(d),d.__shady_native_parentNode!==this.host||"slot"!==d.localName&&f.assignedSlot||this.host.__shady_native_removeChild(d);this.ba=!0;Pc=a;Qc&&Qc()};function Vc(a,b,c){var d=u(b),e=d.P;d.P=null;c||(c=(a=a.b[b.__shady_slot||"__catchall"])&&a[0]);c?(u(c).assignedNodes.push(b),d.assignedSlot=c):d.assignedSlot=void 0;e!==d.assignedSlot&&d.assignedSlot&&(u(d.assignedSlot).T=!0)}
function Wc(a,b,c){for(var d=0,e=void 0;d<c.length&&(e=c[d]);d++)if("slot"==e.localName){var f=v(e).assignedNodes;f&&f.length&&Wc(a,b,f)}else b.push(c[d])}function Xc(a,b){b.__shady_native_dispatchEvent(new Event("slotchange"));b=v(b);b.assignedSlot&&Xc(a,b.assignedSlot)}
function Uc(a){if(a.c&&a.c.length){for(var b=a.c,c,d=0;d<b.length;d++){var e=b[d];jc(e);var f=e.__shady_parentNode;jc(f);f=v(f);f.N=(f.N||0)+1;f=Yc(e);a.b[f]?(c=c||{},c[f]=!0,a.b[f].push(e)):a.b[f]=[e];a.a.push(e)}if(c)for(var g in c)a.b[g]=Zc(a.b[g]);a.c=[]}}function Yc(a){var b=a.name||a.getAttribute("name")||"__catchall";return a.wa=b}
function Zc(a){return a.sort(function(a,c){a=Rc(a);for(var b=Rc(c),e=0;e<a.length;e++){c=a[e];var f=b[e];if(c!==f)return a=Array.from(c.__shady_parentNode.__shady_childNodes),a.indexOf(c)-a.indexOf(f)}})}
function Bc(a,b){if(a.a){Uc(a);var c=a.b,d;for(d in c)for(var e=c[d],f=0;f<e.length;f++){var g=e[f];if(Ua(b,g)){e.splice(f,1);var h=a.a.indexOf(g);0<=h&&(a.a.splice(h,1),(h=v(g.__shady_parentNode))&&h.N&&h.N--);f--;g=v(g);if(h=g.D)for(var k=0;k<h.length;k++){var l=h[k],m=l.__shady_native_parentNode;m&&m.__shady_native_removeChild(l)}g.D=[];g.assignedNodes=[];h=!0}}return h}}function Ma(a){Uc(a);return!(!a.a||!a.a.length)}
(function(a){a.__proto__=DocumentFragment.prototype;Nc(a,"__shady_");Nc(a);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})})})(Sc.prototype);
if(window.customElements&&w.ea&&!w.preferPerformance){var $c=new Map;Qc=function(){var a=[];$c.forEach(function(b,c){a.push([c,b])});$c.clear();for(var b=0;b<a.length;b++){var c=a[b][0];a[b][1]?c.ua():c.va()}};Pc&&document.addEventListener("readystatechange",function(){Pc=!1;Qc()},{once:!0});var ad=function(a,b,c){var d=0,e="__isConnected"+d++;if(b||c)a.prototype.connectedCallback=a.prototype.ua=function(){Pc?$c.set(this,!0):this[e]||(this[e]=!0,b&&b.call(this))},a.prototype.disconnectedCallback=
a.prototype.va=function(){Pc?this.isConnected||$c.set(this,!1):this[e]&&(this[e]=!1,c&&c.call(this))};return a},bd=window.customElements.define;Object.defineProperty(window.CustomElementRegistry.prototype,"define",{value:function(a,b){var c=b.prototype.connectedCallback,d=b.prototype.disconnectedCallback;bd.call(window.customElements,a,ad(b,c,d));b.prototype.connectedCallback=c;b.prototype.disconnectedCallback=d}})}function xc(a){a=a.__shady_getRootNode();if(z(a))return a};function cd(a){this.node=a}n=cd.prototype;n.addEventListener=function(a,b,c){return this.node.__shady_addEventListener(a,b,c)};n.removeEventListener=function(a,b,c){return this.node.__shady_removeEventListener(a,b,c)};n.appendChild=function(a){return this.node.__shady_appendChild(a)};n.insertBefore=function(a,b){return this.node.__shady_insertBefore(a,b)};n.removeChild=function(a){return this.node.__shady_removeChild(a)};n.replaceChild=function(a,b){return this.node.__shady_replaceChild(a,b)};
n.cloneNode=function(a){return this.node.__shady_cloneNode(a)};n.getRootNode=function(a){return this.node.__shady_getRootNode(a)};n.contains=function(a){return this.node.__shady_contains(a)};n.dispatchEvent=function(a){return this.node.__shady_dispatchEvent(a)};n.setAttribute=function(a,b){this.node.__shady_setAttribute(a,b)};n.getAttribute=function(a){return this.node.__shady_native_getAttribute(a)};n.hasAttribute=function(a){return this.node.__shady_native_hasAttribute(a)};n.removeAttribute=function(a){this.node.__shady_removeAttribute(a)};
n.attachShadow=function(a){return this.node.__shady_attachShadow(a)};n.focus=function(){this.node.__shady_native_focus()};n.blur=function(){this.node.__shady_blur()};n.importNode=function(a,b){if(this.node.nodeType===Node.DOCUMENT_NODE)return this.node.__shady_importNode(a,b)};n.getElementById=function(a){if(this.node.nodeType===Node.DOCUMENT_NODE)return this.node.__shady_getElementById(a)};n.querySelector=function(a){return this.node.__shady_querySelector(a)};
n.querySelectorAll=function(a,b){return this.node.__shady_querySelectorAll(a,b)};n.assignedNodes=function(a){if("slot"===this.node.localName)return this.node.__shady_assignedNodes(a)};
p.Object.defineProperties(cd.prototype,{activeElement:{configurable:!0,enumerable:!0,get:function(){if(z(this.node)||this.node.nodeType===Node.DOCUMENT_NODE)return this.node.__shady_activeElement}},_activeElement:{configurable:!0,enumerable:!0,get:function(){return this.activeElement}},host:{configurable:!0,enumerable:!0,get:function(){if(z(this.node))return this.node.host}},parentNode:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_parentNode}},firstChild:{configurable:!0,
enumerable:!0,get:function(){return this.node.__shady_firstChild}},lastChild:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_lastChild}},nextSibling:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_nextSibling}},previousSibling:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_previousSibling}},childNodes:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_childNodes}},parentElement:{configurable:!0,enumerable:!0,
get:function(){return this.node.__shady_parentElement}},firstElementChild:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_firstElementChild}},lastElementChild:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_lastElementChild}},nextElementSibling:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_nextElementSibling}},previousElementSibling:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_previousElementSibling}},
children:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_children}},childElementCount:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_childElementCount}},shadowRoot:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_shadowRoot}},assignedSlot:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_assignedSlot}},isConnected:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_isConnected}},innerHTML:{configurable:!0,
enumerable:!0,get:function(){return this.node.__shady_innerHTML},set:function(a){this.node.__shady_innerHTML=a}},textContent:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_textContent},set:function(a){this.node.__shady_textContent=a}},slot:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_slot},set:function(a){this.node.__shady_slot=a}}});
cc.forEach(function(a){Object.defineProperty(cd.prototype,a,{get:function(){return this.node["__shady_"+a]},set:function(b){this.node["__shady_"+a]=b},configurable:!0})});var dd=new WeakMap;function ed(a){if(z(a)||a instanceof cd)return a;var b=dd.get(a);b||(b=new cd(a),dd.set(a,b));return b};var fd=B({dispatchEvent:function(a){Za();return this.__shady_native_dispatchEvent(a)},addEventListener:Ub,removeEventListener:Wb});var gd=B({get assignedSlot(){var a=this.__shady_parentNode;(a=a&&a.__shady_shadowRoot)&&Tc(a);return(a=v(this))&&a.assignedSlot||null}});var hd=window.document;function id(a,b){if("slot"===b)a=a.__shady_parentNode,La(a)&&Ac(v(a).root);else if("slot"===a.localName&&"name"===b&&(b=xc(a))){if(b.a){Uc(b);var c=a.wa,d=Yc(a);if(d!==c){c=b.b[c];var e=c.indexOf(a);0<=e&&c.splice(e,1);c=b.b[d]||(b.b[d]=[]);c.push(a);1<c.length&&(b.b[d]=Zc(c))}}Ac(b)}}
var jd=B({get previousElementSibling(){var a=v(this);if(a&&void 0!==a.previousSibling){for(a=this.__shady_previousSibling;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.__shady_previousSibling;return a}return this.__shady_native_previousElementSibling},get nextElementSibling(){var a=v(this);if(a&&void 0!==a.nextSibling){for(a=this.__shady_nextSibling;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.__shady_nextSibling;return a}return this.__shady_native_nextElementSibling},get slot(){return this.getAttribute("slot")},
set slot(a){this.__shady_setAttribute("slot",a)},get shadowRoot(){var a=v(this);return a&&a.pa||null},get className(){return this.getAttribute("class")||""},set className(a){this.__shady_setAttribute("class",a)},setAttribute:function(a,b){if(this.ownerDocument!==hd)this.__shady_native_setAttribute(a,b);else{var c;(c=G())&&"class"===a?(c.setElementClass(this,b),c=!0):c=!1;c||(this.__shady_native_setAttribute(a,b),id(this,a))}},removeAttribute:function(a){this.__shady_native_removeAttribute(a);id(this,
a)},attachShadow:function(a){if(!this)throw Error("Must provide a host.");if(!a)throw Error("Not enough arguments.");return new Sc(Oc,this,a)}});var kd=B({blur:function(){var a=v(this);(a=(a=a&&a.root)&&a.activeElement)?a.__shady_blur():this.__shady_native_blur()}});cc.forEach(function(a){kd[a]={set:function(b){var c=u(this),d=a.substring(2);c.O[a]&&this.removeEventListener(d,c.O[a]);this.__shady_addEventListener(d,b);c.O[a]=b},get:function(){var b=v(this);return b&&b.O[a]},configurable:!0}});var ld=B({assignedNodes:function(a){if("slot"===this.localName){var b=this.__shady_getRootNode();b&&z(b)&&Tc(b);return(b=v(this))?(a&&a.flatten?b.D:b.assignedNodes)||[]:[]}}});var md=window.document,nd=B({importNode:function(a,b){if(a.ownerDocument!==md||"template"===a.localName)return this.__shady_native_importNode(a,b);var c=this.__shady_native_importNode(a,!1);if(b){a=a.__shady_childNodes;b=0;for(var d;b<a.length;b++)d=this.__shady_importNode(a[b],!0),c.__shady_appendChild(d)}return c}});var od=B({addEventListener:Ub.bind(window),removeEventListener:Wb.bind(window)});var pd={};Object.getOwnPropertyDescriptor(HTMLElement.prototype,"parentElement")&&(pd.parentElement=Cc.parentElement);Object.getOwnPropertyDescriptor(HTMLElement.prototype,"contains")&&(pd.contains=Cc.contains);Object.getOwnPropertyDescriptor(HTMLElement.prototype,"children")&&(pd.children=Fc.children);Object.getOwnPropertyDescriptor(HTMLElement.prototype,"innerHTML")&&(pd.innerHTML=Lc.innerHTML);Object.getOwnPropertyDescriptor(HTMLElement.prototype,"className")&&(pd.className=jd.className);
var qd={EventTarget:[fd],Node:[Cc,window.EventTarget?null:fd],Text:[gd],Element:[jd,Fc,gd,!w.m||"innerHTML"in Element.prototype?Lc:null,window.HTMLSlotElement?null:ld],HTMLElement:[kd,pd],HTMLSlotElement:[ld],DocumentFragment:[Hc,Ic],Document:[nd,Hc,Ic,Jc],Window:[od]},rd=w.m?null:["innerHTML","textContent"];function sd(a){var b=a?null:rd,c={},d;for(d in qd)c.W=window[d]&&window[d].prototype,qd[d].forEach(function(c){return function(d){return c.W&&d&&A(c.W,d,a,b)}}(c)),c={W:c.W}};if(w.ea){var ShadyDOM={inUse:w.ea,patch:function(a){Fb(a);Eb(a);return a},isShadyRoot:z,enqueue:Ya,flush:Za,flushInitial:function(a){!a.ba&&a.B&&Tc(a)},settings:w,filterMutations:db,observeChildren:bb,unobserveChildren:cb,deferConnectionCallbacks:w.deferConnectionCallbacks,preferPerformance:w.preferPerformance,handlesDynamicScoping:!0,wrap:w.J?ed:function(a){return a},Wrapper:cd,composedPath:Mb,noPatch:w.J,nativeMethods:qb,nativeTree:rb};window.ShadyDOM=ShadyDOM;yb();sd("__shady_");Object.defineProperty(document,
"_activeElement",Jc.activeElement);A(Window.prototype,od,"__shady_");w.J||(sd(),bc());Xb();window.Event=Zb;window.CustomEvent=$b;window.MouseEvent=ac;window.ShadowRoot=Sc};var td=new Set("annotation-xml color-profile font-face font-face-src font-face-uri font-face-format font-face-name missing-glyph".split(" "));function ud(a){var b=td.has(a);a=/^[a-z][.0-9_a-z]*-[\-.0-9_a-z]*$/.test(a);return!b&&a}function H(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 vd(a,b){for(;b&&b!==a&&!b.nextSibling;)b=b.parentNode;return b&&b!==a?b.nextSibling:null}
function wd(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)wd(d,b,c);d=vd(a,e);continue}else if("template"===f){d=vd(a,e);continue}if(e=e.__CE_shadowRoot)for(e=e.firstChild;e;e=e.nextSibling)wd(e,b,c)}d=d.firstChild?d.firstChild:vd(a,d)}}function I(a,b,c){a[b]=c};function xd(){this.a=new Map;this.g=new Map;this.f=[];this.c=!1}function yd(a,b,c){a.a.set(b,c);a.g.set(c.constructorFunction,c)}function zd(a,b){a.c=!0;a.f.push(b)}function Ad(a,b){a.c&&wd(b,function(b){return a.b(b)})}xd.prototype.b=function(a){if(this.c&&!a.__CE_patched){a.__CE_patched=!0;for(var b=0;b<this.f.length;b++)this.f[b](a)}};function J(a,b){var c=[];wd(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):Bd(a,d)}}
function K(a,b){var c=[];wd(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 L(a,b,c){c=void 0===c?{}:c;var d=c.Xa||new Set,e=c.Y||function(b){return Bd(a,b)},f=[];wd(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);L(a,c,{Xa:f,Y: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 Bd(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.constructorFunction;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)}H(b)&&a.connectedCallback(b)}}}xd.prototype.connectedCallback=function(a){var b=a.__CE_definition;b.connectedCallback&&b.connectedCallback.call(a)};xd.prototype.disconnectedCallback=function(a){var b=a.__CE_definition;b.disconnectedCallback&&b.disconnectedCallback.call(a)};
xd.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 Cd(a){var b=document;this.b=a;this.a=b;this.F=void 0;L(this.b,this.a);"loading"===this.a.readyState&&(this.F=new MutationObserver(this.c.bind(this)),this.F.observe(this.a,{childList:!0,subtree:!0}))}function Dd(a){a.F&&a.F.disconnect()}Cd.prototype.c=function(a){var b=this.a.readyState;"interactive"!==b&&"complete"!==b||Dd(this);for(b=0;b<a.length;b++)for(var c=a[b].addedNodes,d=0;d<c.length;d++)L(this.b,c[d])};function Ed(){var a=this;this.a=this.h=void 0;this.b=new Promise(function(b){a.a=b;a.h&&b(a.h)})}Ed.prototype.resolve=function(a){if(this.h)throw Error("Already resolved.");this.h=a;this.a&&this.a(a)};function N(a){this.c=!1;this.a=a;this.l=new Map;this.f=function(a){return a()};this.b=!1;this.g=[];this.da=new Cd(a)}n=N.prototype;
n.sa=function(a,b){var c=this;if(!(b instanceof Function))throw new TypeError("Custom element constructors must be functions.");if(!ud(a))throw new SyntaxError("The element name '"+a+"' is not valid.");if(this.a.a.get(a))throw Error("A custom element with name '"+a+"' has already been defined.");if(this.c)throw Error("A custom element is already being defined.");this.c=!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.c=!1}b={localName:a,constructorFunction:b,connectedCallback:f,disconnectedCallback:g,adoptedCallback:h,attributeChangedCallback:k,observedAttributes:l,constructionStack:[]};yd(this.a,
a,b);this.g.push(b);this.b||(this.b=!0,this.f(function(){return Fd(c)}))};n.Y=function(a){L(this.a,a)};
function Fd(a){if(!1!==a.b){a.b=!1;for(var b=a.g,c=[],d=new Map,e=0;e<b.length;e++)d.set(b[e].localName,[]);L(a.a,document,{Y:function(b){if(void 0===b.__CE_state){var e=b.localName,f=d.get(e);f?f.push(b):a.a.a.get(e)&&c.push(b)}}});for(e=0;e<c.length;e++)Bd(a.a,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++)Bd(a.a,f[g]);(e=a.l.get(e))&&e.resolve(void 0)}}}n.get=function(a){if(a=this.a.a.get(a))return a.constructorFunction};
n.ta=function(a){if(!ud(a))return Promise.reject(new SyntaxError("'"+a+"' is not a valid custom element name."));var b=this.l.get(a);if(b)return b.b;b=new Ed;this.l.set(a,b);this.a.a.get(a)&&!this.g.some(function(b){return b.localName===a})&&b.resolve(void 0);return b.b};n.Pa=function(a){Dd(this.da);var b=this.f;this.f=function(c){return a(function(){return b(c)})}};window.CustomElementRegistry=N;N.prototype.define=N.prototype.sa;N.prototype.upgrade=N.prototype.Y;N.prototype.get=N.prototype.get;
N.prototype.whenDefined=N.prototype.ta;N.prototype.polyfillWrapFlushCallback=N.prototype.Pa;var Gd=window.Document.prototype.createElement,Hd=window.Document.prototype.createElementNS,Id=window.Document.prototype.importNode,Jd=window.Document.prototype.prepend,Kd=window.Document.prototype.append,Ld=window.DocumentFragment.prototype.prepend,Md=window.DocumentFragment.prototype.append,Nd=window.Node.prototype.cloneNode,Od=window.Node.prototype.appendChild,Pd=window.Node.prototype.insertBefore,Qd=window.Node.prototype.removeChild,Rd=window.Node.prototype.replaceChild,Sd=Object.getOwnPropertyDescriptor(window.Node.prototype,
"textContent"),Td=window.Element.prototype.attachShadow,Ud=Object.getOwnPropertyDescriptor(window.Element.prototype,"innerHTML"),Vd=window.Element.prototype.getAttribute,Wd=window.Element.prototype.setAttribute,Xd=window.Element.prototype.removeAttribute,Yd=window.Element.prototype.getAttributeNS,Zd=window.Element.prototype.setAttributeNS,$d=window.Element.prototype.removeAttributeNS,ae=window.Element.prototype.insertAdjacentElement,be=window.Element.prototype.insertAdjacentHTML,ce=window.Element.prototype.prepend,
de=window.Element.prototype.append,ee=window.Element.prototype.before,fe=window.Element.prototype.after,ge=window.Element.prototype.replaceWith,he=window.Element.prototype.remove,ie=window.HTMLElement,je=Object.getOwnPropertyDescriptor(window.HTMLElement.prototype,"innerHTML"),ke=window.HTMLElement.prototype.insertAdjacentElement,le=window.HTMLElement.prototype.insertAdjacentHTML;var me=new function(){};function ne(){var a=oe;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=Gd.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===me)throw Error("The HTMLElement constructor was either called reentrantly for this constructor or called multiple times.");
e[d]=me;Object.setPrototypeOf(f,b.prototype);a.b(f);return f}b.prototype=ie.prototype;Object.defineProperty(b.prototype,"constructor",{writable:!0,configurable:!0,enumerable:!1,value:b});return b}()};function pe(a,b,c){function d(b){return function(c){for(var d=[],e=0;e<arguments.length;++e)d[e]=arguments[e];e=[];for(var f=[],l=0;l<d.length;l++){var m=d[l];m instanceof Element&&H(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++)K(a,f[d]);if(H(this))for(d=0;d<e.length;d++)f=e[d],f instanceof Element&&J(a,f)}}void 0!==c.V&&(b.prepend=d(c.V));void 0!==c.append&&(b.append=d(c.append))};function qe(){var a=oe;I(Document.prototype,"createElement",function(b){if(this.__CE_hasRegistry){var c=a.a.get(b);if(c)return new c.constructorFunction}b=Gd.call(this,b);a.b(b);return b});I(Document.prototype,"importNode",function(b,c){b=Id.call(this,b,!!c);this.__CE_hasRegistry?L(a,b):Ad(a,b);return b});I(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.constructorFunction}b=Hd.call(this,
b,c);a.b(b);return b});pe(a,Document.prototype,{V:Jd,append:Kd})};function re(){function a(a,d){Object.defineProperty(a,"textContent",{enumerable:d.enumerable,configurable:!0,get:d.get,set:function(a){if(this.nodeType===Node.TEXT_NODE)d.set.call(this,a);else{var c=void 0;if(this.firstChild){var e=this.childNodes,h=e.length;if(0<h&&H(this)){c=Array(h);for(var k=0;k<h;k++)c[k]=e[k]}}d.set.call(this,a);if(c)for(a=0;a<c.length;a++)K(b,c[a])}}})}var b=oe;I(Node.prototype,"insertBefore",function(a,d){if(a instanceof DocumentFragment){var c=Array.prototype.slice.apply(a.childNodes);
a=Pd.call(this,a,d);if(H(this))for(d=0;d<c.length;d++)J(b,c[d]);return a}c=H(a);d=Pd.call(this,a,d);c&&K(b,a);H(this)&&J(b,a);return d});I(Node.prototype,"appendChild",function(a){if(a instanceof DocumentFragment){var c=Array.prototype.slice.apply(a.childNodes);a=Od.call(this,a);if(H(this))for(var e=0;e<c.length;e++)J(b,c[e]);return a}c=H(a);e=Od.call(this,a);c&&K(b,a);H(this)&&J(b,a);return e});I(Node.prototype,"cloneNode",function(a){a=Nd.call(this,!!a);this.ownerDocument.__CE_hasRegistry?L(b,a):
Ad(b,a);return a});I(Node.prototype,"removeChild",function(a){var c=H(a),e=Qd.call(this,a);c&&K(b,a);return e});I(Node.prototype,"replaceChild",function(a,d){if(a instanceof DocumentFragment){var c=Array.prototype.slice.apply(a.childNodes);a=Rd.call(this,a,d);if(H(this))for(K(b,d),d=0;d<c.length;d++)J(b,c[d]);return a}c=H(a);var f=Rd.call(this,a,d),g=H(this);g&&K(b,d);c&&K(b,a);g&&J(b,a);return f});Sd&&Sd.get?a(Node.prototype,Sd):zd(b,function(b){a(b,{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;)Qd.call(this,this.firstChild);Od.call(this,document.createTextNode(a))}})})};function se(a){function b(b){return function(c){for(var d=[],e=0;e<arguments.length;++e)d[e]=arguments[e];e=[];for(var h=[],k=0;k<d.length;k++){var l=d[k];l instanceof Element&&H(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++)K(a,h[d]);if(H(this))for(d=0;d<e.length;d++)h=e[d],h instanceof Element&&J(a,h)}}var c=Element.prototype;void 0!==ee&&(c.before=b(ee));void 0!==ee&&(c.after=b(fe));void 0!==ge&&
I(c,"replaceWith",function(b){for(var c=[],d=0;d<arguments.length;++d)c[d]=arguments[d];d=[];for(var g=[],h=0;h<c.length;h++){var k=c[h];k instanceof Element&&H(k)&&g.push(k);if(k instanceof DocumentFragment)for(k=k.firstChild;k;k=k.nextSibling)d.push(k);else d.push(k)}h=H(this);ge.apply(this,c);for(c=0;c<g.length;c++)K(a,g[c]);if(h)for(K(a,this),c=0;c<d.length;c++)g=d[c],g instanceof Element&&J(a,g)});void 0!==he&&I(c,"remove",function(){var b=H(this);he.call(this);b&&K(a,this)})};function te(){function a(a,b){Object.defineProperty(a,"innerHTML",{enumerable:b.enumerable,configurable:!0,get:b.get,set:function(a){var c=this,e=void 0;H(this)&&(e=[],wd(this,function(a){a!==c&&e.push(a)}));b.set.call(this,a);if(e)for(var f=0;f<e.length;f++){var g=e[f];1===g.__CE_state&&d.disconnectedCallback(g)}this.ownerDocument.__CE_hasRegistry?L(d,this):Ad(d,this);return a}})}function b(a,b){I(a,"insertAdjacentElement",function(a,c){var e=H(c);a=b.call(this,a,c);e&&K(d,c);H(a)&&J(d,c);return a})}
function c(a,b){function c(a,b){for(var c=[];a!==b;a=a.nextSibling)c.push(a);for(b=0;b<c.length;b++)L(d,c[b])}I(a,"insertAdjacentHTML",function(a,d){a=a.toLowerCase();if("beforebegin"===a){var e=this.previousSibling;b.call(this,a,d);c(e||this.parentNode.firstChild,this)}else if("afterbegin"===a)e=this.firstChild,b.call(this,a,d),c(this.firstChild,e);else if("beforeend"===a)e=this.lastChild,b.call(this,a,d),c(e||this.firstChild,null);else if("afterend"===a)e=this.nextSibling,b.call(this,a,d),c(this.nextSibling,
e);else throw new SyntaxError("The value provided ("+String(a)+") is not one of 'beforebegin', 'afterbegin', 'beforeend', or 'afterend'.");})}var d=oe;Td&&I(Element.prototype,"attachShadow",function(a){return this.__CE_shadowRoot=a=Td.call(this,a)});Ud&&Ud.get?a(Element.prototype,Ud):je&&je.get?a(HTMLElement.prototype,je):zd(d,function(b){a(b,{enumerable:!0,configurable:!0,get:function(){return Nd.call(this,!0).innerHTML},set:function(a){var b="template"===this.localName,c=b?this.content:this,d=Hd.call(document,
this.namespaceURI,this.localName);for(d.innerHTML=a;0<c.childNodes.length;)Qd.call(c,c.childNodes[0]);for(a=b?d.content:d;0<a.childNodes.length;)Od.call(c,a.childNodes[0])}})});I(Element.prototype,"setAttribute",function(a,b){if(1!==this.__CE_state)return Wd.call(this,a,b);var c=Vd.call(this,a);Wd.call(this,a,b);b=Vd.call(this,a);d.attributeChangedCallback(this,a,c,b,null)});I(Element.prototype,"setAttributeNS",function(a,b,c){if(1!==this.__CE_state)return Zd.call(this,a,b,c);var e=Yd.call(this,a,
b);Zd.call(this,a,b,c);c=Yd.call(this,a,b);d.attributeChangedCallback(this,b,e,c,a)});I(Element.prototype,"removeAttribute",function(a){if(1!==this.__CE_state)return Xd.call(this,a);var b=Vd.call(this,a);Xd.call(this,a);null!==b&&d.attributeChangedCallback(this,a,b,null,null)});I(Element.prototype,"removeAttributeNS",function(a,b){if(1!==this.__CE_state)return $d.call(this,a,b);var c=Yd.call(this,a,b);$d.call(this,a,b);var e=Yd.call(this,a,b);c!==e&&d.attributeChangedCallback(this,b,c,e,a)});ke?b(HTMLElement.prototype,
ke):ae?b(Element.prototype,ae):console.warn("Custom Elements: `Element#insertAdjacentElement` was not patched.");le?c(HTMLElement.prototype,le):be?c(Element.prototype,be):console.warn("Custom Elements: `Element#insertAdjacentHTML` was not patched.");pe(d,Element.prototype,{V:ce,append:de});se(d)};var ue=window.customElements;if(!ue||ue.forcePolyfill||"function"!=typeof ue.define||"function"!=typeof ue.get){var oe=new xd;ne();qe();pe(oe,DocumentFragment.prototype,{V:Ld,append:Md});re();te();document.__CE_hasRegistry=!0;var customElements=new N(oe);Object.defineProperty(window,"customElements",{configurable:!0,enumerable:!0,value:customElements})};function ve(){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 we(a){a=a.replace(xe,"").replace(ye,"");var b=ze,c=a,d=new ve;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 ve;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 ze(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=Ae(c),c=c.replace(Be," "),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=Ce:c.match(De)&&(a.type=Ee,a.keyframesName=a.selector.split(Be).pop()):a.type=0===c.indexOf("--")?Fe:Ge);if(c=a.rules)for(var d=0,e=c.length,f=void 0;d<e&&(f=c[d]);d++)ze(f,
b);return a}function Ae(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 He(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=void 0;f<g&&(h=e[f]);f++)d=He(h,b,d)}else b?b=a.cssText:(b=a.cssText,b=b.replace(Ie,"").replace(Je,""),b=b.replace(Ke,"").replace(Le,"")),(d=b.trim())&&(d=" "+d+"\n")}d&&(a.selector&&(c+=a.selector+" {\n"),c+=d,a.selector&&(c+="}\n\n"));return c}
var Ge=1,Ee=7,Ce=4,Fe=1E3,xe=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,ye=/@import[^;]*;/gim,Ie=/(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\n]|$)/gim,Je=/(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\n]|$)?/gim,Ke=/@apply\s*\(?[^);]*\)?\s*(?:[;\n]|$)?/gim,Le=/[^;:]*?:[^;]*?var\([^;]*\)(?:[;\n]|$)?/gim,De=/^@[^\s]*keyframes/,Be=/\s+/g;var O=!(window.ShadyDOM&&window.ShadyDOM.inUse),Me;function Ne(a){Me=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)"))}var Oe;window.ShadyCSS&&void 0!==window.ShadyCSS.cssBuild&&(Oe=window.ShadyCSS.cssBuild);var Pe=!(!window.ShadyCSS||!window.ShadyCSS.disableRuntime);
window.ShadyCSS&&void 0!==window.ShadyCSS.nativeCss?Me=window.ShadyCSS.nativeCss:window.ShadyCSS?(Ne(window.ShadyCSS),window.ShadyCSS=void 0):Ne(window.WebComponents&&window.WebComponents.flags);var Q=Me,Qe=Oe;var Re=/(?:^|[;\s{]\s*)(--[\w-]*?)\s*:\s*(?:((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};{])+)|\{([^}]*)\}(?:(?=[;\s}])|$))/gi,Se=/(?:^|\W+)@apply\s*\(?([^);\n]*)\)?/gi,Te=/(--[\w-]+)\s*([:,;)]|$)/gi,Ue=/(animation\s*:)|(animation-name\s*:)/,$e=/@media\s(.*)/,af=/\{[^}]*\}/g;var bf=new Set;function cf(a,b){if(!a)return"";"string"===typeof a&&(a=we(a));b&&df(a,b);return He(a,Q)}function ef(a){!a.__cssRules&&a.textContent&&(a.__cssRules=we(a.textContent));return a.__cssRules||null}function ff(a){return!!a.parent&&a.parent.type===Ee}function df(a,b,c,d){if(a){var e=!1,f=a.type;if(d&&f===Ce){var g=a.selector.match($e);g&&(window.matchMedia(g[1]).matches||(e=!0))}f===Ge?b(a):c&&f===Ee?c(a):f===Fe&&(e=!0);if((a=a.rules)&&!e)for(e=0,f=a.length,g=void 0;e<f&&(g=a[e]);e++)df(g,b,c,d)}}
function gf(a,b,c,d){var e=document.createElement("style");b&&e.setAttribute("scope",b);e.textContent=a;hf(e,c,d);return e}var jf=null;function kf(a){a=document.createComment(" Shady DOM styles for "+a+" ");var b=document.head;b.insertBefore(a,(jf?jf.nextSibling:null)||b.firstChild);return jf=a}function hf(a,b,c){b=b||document.head;b.insertBefore(a,c&&c.nextSibling||b.firstChild);jf?a.compareDocumentPosition(jf)===Node.DOCUMENT_POSITION_PRECEDING&&(jf=a):jf=a}
function lf(a,b){for(var c=0,d=a.length;b<d;b++)if("("===a[b])c++;else if(")"===a[b]&&0===--c)return b;return-1}function mf(a,b){var c=a.indexOf("var(");if(-1===c)return b(a,"","","");var d=lf(a,c+3),e=a.substring(c+4,d);c=a.substring(0,c);a=mf(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 nf(a,b){O?a.setAttribute("class",b):window.ShadyDOM.nativeMethods.setAttribute.call(a,"class",b)}
var of=window.ShadyDOM&&window.ShadyDOM.wrap||function(a){return a};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,M:c}}function qf(a){for(var b=[],c="",d=0;0<=d&&d<a.length;d++)if("("===a[d]){var e=lf(a,d);c+=a.slice(d,e+1);d=e}else","===a[d]?(b.push(c),c=""):c+=a[d];c&&b.push(c);return b}
function rf(a){if(void 0!==Qe)return Qe;if(void 0===a.__cssBuild){var b=a.getAttribute("css-build");if(b)a.__cssBuild=b;else{a:{b="template"===a.localName?a.content.firstChild:a.firstChild;if(b instanceof Comment&&(b=b.textContent.trim().split(":"),"css-build"===b[0])){b=b[1];break a}b=""}if(""!==b){var c="template"===a.localName?a.content.firstChild:a.firstChild;c.parentNode.removeChild(c)}a.__cssBuild=b}}return a.__cssBuild||""}
function sf(a){a=void 0===a?"":a;return""!==a&&Q?O?"shadow"===a:"shady"===a:!1};function tf(){}function uf(a,b){vf(R,a,function(a){wf(a,b||"")})}function vf(a,b,c){b.nodeType===Node.ELEMENT_NODE&&c(b);var d;"template"===b.localName?d=(b.content||b._content||b).childNodes:d=b.children||b.childNodes;if(d)for(b=0;b<d.length;b++)vf(a,d[b],c)}
function wf(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("class");c?d&&(b=d.replace("style-scope","").replace(b,""),nf(a,b)):nf(a,(d?d+" ":"")+"style-scope "+b)}}function xf(a,b,c){vf(R,a,function(a){wf(a,b,!0);wf(a,c)})}function yf(a,b){vf(R,a,function(a){wf(a,b||"",!0)})}
function zf(a,b,c,d,e){var f=R;e=void 0===e?"":e;""===e&&(O||"shady"===(void 0===d?"":d)?e=cf(b,c):(a=pf(a),e=Af(f,b,a.is,a.M,c)+"\n\n"));return e.trim()}function Af(a,b,c,d,e){var f=Bf(c,d);c=c?"."+c:"";return cf(b,function(b){b.c||(b.selector=b.j=Cf(a,b,a.b,c,f),b.c=!0);e&&e(b,c,f)})}function Bf(a,b){return b?"[is="+a+"]":a}
function Cf(a,b,c,d,e){var f=qf(b.selector);if(!ff(b)){b=0;for(var g=f.length,h=void 0;b<g&&(h=f[b]);b++)f[b]=c.call(a,h,d,e)}return f.filter(function(a){return!!a}).join(",")}function Df(a){return a.replace(Ef,function(a,c,d){-1<d.indexOf("+")?d=d.replace(/\+/g,"___"):-1<d.indexOf("___")&&(d=d.replace(/___/g,"+"));return":"+c+"("+d+")"})}
function Ff(a){for(var b=[],c;c=a.match(Gf);){var d=c.index,e=lf(a,d);if(-1===e)throw Error(c.input+" selector missing ')'");c=a.slice(d,e+1);a=a.replace(c,"\ue000");b.push(c)}return{ha:a,matches:b}}function Hf(a,b){var c=a.split("\ue000");return b.reduce(function(a,b,f){return a+b+c[f+1]},c[0])}
tf.prototype.b=function(a,b,c){var d=!1;a=a.trim();var e=Ef.test(a);e&&(a=a.replace(Ef,function(a,b,c){return":"+b+"("+c.replace(/\s/g,"")+")"}),a=Df(a));var f=Gf.test(a);if(f){var g=Ff(a);a=g.ha;g=g.matches}a=a.replace(If,":host $1");a=a.replace(Jf,function(a,e,f){d||(a=Kf(f,e,b,c),d=d||a.stop,e=a.Ca,f=a.value);return e+f});f&&(a=Hf(a,g));e&&(a=Df(a));return a};
function Kf(a,b,c,d){var e=a.indexOf("::slotted");0<=a.indexOf(":host")?a=Lf(a,d):0!==e&&(a=c?Mf(a,c):a);c=!1;0<=e&&(b="",c=!0);if(c){var f=!0;c&&(a=a.replace(Nf,function(a,b){return" > "+b}))}a=a.replace(Of,function(a,b,c){return'[dir="'+c+'"] '+b+", "+b+'[dir="'+c+'"]'});return{value:a,Ca:b,stop:f}}
function Mf(a,b){a=a.split(/(\[.+?\])/);for(var c=[],d=0;d<a.length;d++)if(1===d%2)c.push(a[d]);else{var e=a[d];if(""!==e||d!==a.length-1)e=e.split(":"),e[0]+=b,c.push(e.join(":"))}return c.join("")}function Lf(a,b){var c=a.match(Pf);return(c=c&&c[2].trim()||"")?c[0].match(Qf)?a.replace(Pf,function(a,c,f){return b+f}):c.split(Qf)[0]===b?c:"should_not_match":a.replace(":host",b)}function Rf(a){":root"===a.selector&&(a.selector="html")}
tf.prototype.c=function(a){return a.match(":host")?"":a.match("::slotted")?this.b(a,":not(.style-scope)"):Mf(a.trim(),":not(.style-scope)")};p.Object.defineProperties(tf.prototype,{a:{configurable:!0,enumerable:!0,get:function(){return"style-scope"}}});
var Ef=/:(nth[-\w]+)\(([^)]+)\)/,Jf=/(^|[\s>+~]+)((?:\[.+?\]|[^\s>+~=[])+)/g,Qf=/[[.:#*]/,If=/^(::slotted)/,Pf=/(:host)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/,Nf=/(?:::slotted)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/,Of=/(.*):dir\((?:(ltr|rtl))\)/,Gf=/:(?:matches|any|-(?:webkit|moz)-any)/,R=new tf;function Sf(a,b,c,d,e){this.A=a||null;this.b=b||null;this.fa=c||[];this.o=null;this.cssBuild=e||"";this.M=d||"";this.a=this.s=this.w=null}function T(a){return a?a.__styleInfo:null}function Tf(a,b){return a.__styleInfo=b}Sf.prototype.c=function(){return this.A};Sf.prototype._getStyleRules=Sf.prototype.c;function Uf(a){var b=this.matches||this.matchesSelector||this.mozMatchesSelector||this.msMatchesSelector||this.oMatchesSelector||this.webkitMatchesSelector;return b&&b.call(this,a)}var Vf=navigator.userAgent.match("Trident");function Wf(){}function Xf(a){var b={},c=[],d=0;df(a,function(a){Yf(a);a.index=d++;a=a.i.cssText;for(var c;c=Te.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 Yf(a){if(!a.i){var b={},c={};Zf(a,c)&&(b.v=c,a.rules=null);b.cssText=a.parsedCssText.replace(af,"").replace(Re,"");a.i=b}}function Zf(a,b){var c=a.i;if(c){if(c.v)return Object.assign(b,c.v),!0}else{c=a.parsedCssText;for(var d;a=Re.exec(c);){d=(a[2]||a[3]).trim();if("inherit"!==d||"unset"!==d)b[a[1].trim()]=d;d=!0}return d}}
function $f(a,b,c){b&&(b=0<=b.indexOf(";")?ag(a,b,c):mf(b,function(b,e,f,g){if(!e)return b+g;(e=$f(a,c[e],c))&&"initial"!==e?"apply-shim-inherit"===e&&(e="inherit"):e=$f(a,c[f]||f,c)||f;return b+(e||"")+g}));return b&&b.trim()||""}
function ag(a,b,c){b=b.split(";");for(var d=0,e,f;d<b.length;d++)if(e=b[d]){Se.lastIndex=0;if(f=Se.exec(e))e=$f(a,c[f[1]],c);else if(f=e.indexOf(":"),-1!==f){var g=e.substring(f);g=g.trim();g=$f(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 bg(a,b){var c={},d=[];df(a,function(a){a.i||Yf(a);var e=a.j||a.parsedSelector;b&&a.i.v&&e&&Uf.call(b,e)&&(Zf(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 cg(a,b,c,d){b.i||Yf(b);if(b.i.v){var e=pf(a);a=e.is;e=e.M;e=a?Bf(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));if(g||h)c=e,h&&(b.j||(b.j=Cf(R,b,R.b,a?"."+a:"",e)),c=b.j||e),d({ha:c,Ia:h,Za:g})}}function dg(a,b,c){var d={},e={};df(b,function(b){cg(a,b,c,function(c){Uf.call(a._element||a,c.ha)&&(c.Ia?Zf(b,d):Zf(b,e))})},null,!0);return{Ra:e,Ha:d}}
function eg(a,b,c,d){var e=pf(b),f=Bf(e.is,e.M),g=new RegExp("(?:^|[^.#[:])"+(b.extends?"\\"+f.slice(0,-1)+"\\]":f)+"($|[.:[\\s>+~])"),h=T(b);e=h.A;h=h.cssBuild;var k=fg(e,d);return zf(b,e,function(b){var e="";b.i||Yf(b);b.i.cssText&&(e=ag(a,b.i.cssText,c));b.cssText=e;if(!O&&!ff(b)&&b.cssText){var h=e=b.cssText;null==b.na&&(b.na=Ue.test(e));if(b.na)if(null==b.U){b.U=[];for(var l in k)h=k[l],h=h(e),e!==h&&(e=h,b.U.push(l))}else{for(l=0;l<b.U.length;++l)h=k[b.U[l]],e=h(e);h=e}b.cssText=h;b.j=b.j||
b.selector;e="."+d;l=qf(b.j);h=0;for(var M=l.length,U=void 0;h<M&&(U=l[h]);h++)l[h]=U.match(g)?U.replace(f,e):e+" "+U;b.selector=l.join(",")}},h)}function fg(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,g=b;f.f=new RegExp("\\b"+f.keyframesName+"(?!\\B|-)","g");f.a=f.keyframesName+"-"+g;f.j=f.j||f.selector;f.selector=f.j.replace(f.keyframesName,f.a);c[e.keyframesName]=gg(e)}return c}function gg(a){return function(b){return b.replace(a.f,a.a)}}
function hg(a,b){var c=ig,d=ef(a);a.textContent=cf(d,function(a){var d=a.cssText=a.parsedCssText;a.i&&a.i.cssText&&(d=d.replace(Ie,"").replace(Je,""),a.cssText=ag(c,d,b))})}p.Object.defineProperties(Wf.prototype,{a:{configurable:!0,enumerable:!0,get:function(){return"x-scope"}}});var ig=new Wf;var jg={},kg=window.customElements;if(kg&&!O&&!Pe){var lg=kg.define;kg.define=function(a,b,c){jg[a]||(jg[a]=kf(a));lg.call(kg,a,b,c)}};function mg(){this.cache={}}mg.prototype.store=function(a,b,c,d){var e=this.cache[a]||[];e.push({v:b,styleElement:c,s:d});100<e.length&&e.shift();this.cache[a]=e};function ng(){}var og=new RegExp(R.a+"\\s*([^\\s]*)");function pg(a){return(a=(a.classList&&a.classList.value?a.classList.value:a.getAttribute("class")||"").match(og))?a[1]:""}function qg(a){var b=of(a).getRootNode();return b===a||b===a.ownerDocument?"":(a=b.host)?pf(a).is:""}
function rg(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(),g=pg(e);if(g&&f===e.ownerDocument&&("style"!==e.localName&&"template"!==e.localName||""===rf(e)))yf(e,g);else if(f instanceof ShadowRoot)for(f=qg(e),f!==g&&xf(e,g,f),e=window.ShadyDOM.nativeMethods.querySelectorAll.call(e,":not(."+R.a+")"),g=0;g<e.length;g++){f=e[g];
var h=qg(f);h&&wf(f,h)}}}}}
if(!(O||window.ShadyDOM&&window.ShadyDOM.handlesDynamicScoping)){var sg=new MutationObserver(rg),tg=function(a){sg.observe(a,{childList:!0,subtree:!0})};if(window.customElements&&!window.customElements.polyfillWrapFlushCallback)tg(document);else{var ug=function(){tg(document.body)};window.HTMLImports?window.HTMLImports.whenReady(ug):requestAnimationFrame(function(){if("loading"===document.readyState){var a=function(){ug();document.removeEventListener("readystatechange",a)};document.addEventListener("readystatechange",
a)}else ug()})}ng=function(){rg(sg.takeRecords())}}var vg=ng;var wg={};var xg=Promise.resolve();function yg(a){if(a=wg[a])a._applyShimCurrentVersion=a._applyShimCurrentVersion||0,a._applyShimValidatingVersion=a._applyShimValidatingVersion||0,a._applyShimNextVersion=(a._applyShimNextVersion||0)+1}function zg(a){return a._applyShimCurrentVersion===a._applyShimNextVersion}function Ag(a){a._applyShimValidatingVersion=a._applyShimNextVersion;a._validating||(a._validating=!0,xg.then(function(){a._applyShimCurrentVersion=a._applyShimNextVersion;a._validating=!1}))};var Bg={},Cg=new mg;function Y(){this.l={};this.c=document.documentElement;var a=new ve;a.rules=[];this.f=Tf(this.c,new Sf(a));this.g=!1;this.b=this.a=null}n=Y.prototype;n.flush=function(){vg()};n.Fa=function(a){return ef(a)};n.Va=function(a){return cf(a)};n.prepareTemplate=function(a,b,c){this.prepareTemplateDom(a,b);this.prepareTemplateStyles(a,b,c)};
n.prepareTemplateStyles=function(a,b,c){if(!a._prepared&&!Pe){O||jg[b]||(jg[b]=kf(b));a._prepared=!0;a.name=b;a.extends=c;wg[b]=a;var d=rf(a),e=sf(d);c={is:b,extends:c};for(var f=[],g=a.content.querySelectorAll("style"),h=0;h<g.length;h++){var k=g[h];if(k.hasAttribute("shady-unscoped")){if(!O){var l=k.textContent;bf.has(l)||(bf.add(l),l=k.cloneNode(!0),document.head.appendChild(l));k.parentNode.removeChild(k)}}else f.push(k.textContent),k.parentNode.removeChild(k)}f=f.join("").trim()+(Bg[b]||"");
Dg(this);if(!e){if(g=!d)g=Se.test(f)||Re.test(f),Se.lastIndex=0,Re.lastIndex=0;h=we(f);g&&Q&&this.a&&this.a.transformRules(h,b);a._styleAst=h}g=[];Q||(g=Xf(a._styleAst));if(!g.length||Q)h=O?a.content:null,b=jg[b]||null,d=zf(c,a._styleAst,null,d,e?f:""),d=d.length?gf(d,c.is,h,b):null,a._style=d;a.a=g}};n.Qa=function(a,b){Bg[b]=a.join(" ")};n.prepareTemplateDom=function(a,b){if(!Pe){var c=rf(a);O||"shady"===c||a._domPrepared||(a._domPrepared=!0,uf(a.content,b))}};
function Eg(a){var b=pf(a),c=b.is;b=b.M;var d=jg[c]||null,e=wg[c];if(e){c=e._styleAst;var f=e.a;e=rf(e);b=new Sf(c,d,f,b,e);Tf(a,b);return b}}function Fg(a){!a.b&&window.ShadyCSS&&window.ShadyCSS.CustomStyleInterface&&(a.b=window.ShadyCSS.CustomStyleInterface,a.b.transformCallback=function(b){a.ra(b)},a.b.validateCallback=function(){requestAnimationFrame(function(){(a.b.enqueued||a.g)&&a.flushCustomStyles()})})}
function Dg(a){!a.a&&window.ShadyCSS&&window.ShadyCSS.ApplyShim&&(a.a=window.ShadyCSS.ApplyShim,a.a.invalidCallback=yg);Fg(a)}
n.flushCustomStyles=function(){if(!Pe&&(Dg(this),this.b)){var a=this.b.processStyles();if(this.b.enqueued&&!sf(this.f.cssBuild)){if(Q){if(!this.f.cssBuild)for(var b=0;b<a.length;b++){var c=this.b.getStyleForCustomStyle(a[b]);if(c&&Q&&this.a){var d=ef(c);Dg(this);this.a.transformRules(d);c.textContent=cf(d)}}}else{Gg(this,this.c,this.f);for(b=0;b<a.length;b++)(c=this.b.getStyleForCustomStyle(a[b]))&&hg(c,this.f.w);this.g&&this.styleDocument()}this.b.enqueued=!1}}};
n.styleElement=function(a,b){if(Pe){if(b){T(a)||Tf(a,new Sf(null));var c=T(a);c.o=c.o||{};Object.assign(c.o,b);Hg(this,a,c)}}else if(c=T(a)||Eg(a))if(a!==this.c&&(this.g=!0),b&&(c.o=c.o||{},Object.assign(c.o,b)),Q)Hg(this,a,c);else if(this.flush(),Gg(this,a,c),c.fa&&c.fa.length){b=pf(a).is;var d;a:{if(d=Cg.cache[b])for(var e=d.length-1;0<=e;e--){var f=d[e];b:{var g=c.fa;for(var h=0;h<g.length;h++){var k=g[h];if(f.v[k]!==c.w[k]){g=!1;break b}}g=!0}if(g){d=f;break a}}d=void 0}g=d?d.styleElement:null;
e=c.s;(f=d&&d.s)||(f=this.l[b]=(this.l[b]||0)+1,f=b+"-"+f);c.s=f;f=c.s;h=ig;h=g?g.textContent||"":eg(h,a,c.w,f);k=T(a);var l=k.a;l&&!O&&l!==g&&(l._useCount--,0>=l._useCount&&l.parentNode&&l.parentNode.removeChild(l));O?k.a?(k.a.textContent=h,g=k.a):h&&(g=gf(h,f,a.shadowRoot,k.b)):g?g.parentNode||(Vf&&-1<h.indexOf("@media")&&(g.textContent=h),hf(g,null,k.b)):h&&(g=gf(h,f,null,k.b));g&&(g._useCount=g._useCount||0,k.a!=g&&g._useCount++,k.a=g);f=g;O||(g=c.s,k=h=a.getAttribute("class")||"",e&&(k=h.replace(new RegExp("\\s*x-scope\\s*"+
e+"\\s*","g")," ")),k+=(k?" ":"")+"x-scope "+g,h!==k&&nf(a,k));d||Cg.store(b,c.w,f,c.s)}};
function Hg(a,b,c){var d=pf(b).is;if(c.o){var e=c.o,f;for(f in e)null===f?b.style.removeProperty(f):b.style.setProperty(f,e[f])}e=wg[d];if(!(!e&&b!==a.c||e&&""!==rf(e))&&e&&e._style&&!zg(e)){if(zg(e)||e._applyShimValidatingVersion!==e._applyShimNextVersion)Dg(a),a.a&&a.a.transformRules(e._styleAst,d),e._style.textContent=zf(b,c.A),Ag(e);O&&(a=b.shadowRoot)&&(a=a.querySelector("style"))&&(a.textContent=zf(b,c.A));c.A=e._styleAst}}
function Ig(a,b){return(b=of(b).getRootNode().host)?T(b)||Eg(b)?b:Ig(a,b):a.c}function Gg(a,b,c){var d=Ig(a,b),e=T(d),f=e.w;d===a.c||f||(Gg(a,d,e),f=e.w);a=Object.create(f||null);d=dg(b,c.A,c.cssBuild);b=bg(e.A,b).v;Object.assign(a,d.Ha,b,d.Ra);b=c.o;for(var g in b)if((e=b[g])||0===e)a[g]=e;g=ig;b=Object.getOwnPropertyNames(a);for(e=0;e<b.length;e++)d=b[e],a[d]=$f(g,a[d],a);c.w=a}n.styleDocument=function(a){this.styleSubtree(this.c,a)};
n.styleSubtree=function(a,b){var c=of(a),d=c.shadowRoot;(d||a===this.c)&&this.styleElement(a,b);if(a=d&&(d.children||d.childNodes))for(c=0;c<a.length;c++)this.styleSubtree(a[c]);else if(c=c.children||c.childNodes)for(a=0;a<c.length;a++)this.styleSubtree(c[a])};
n.ra=function(a){var b=this,c=rf(a);c!==this.f.cssBuild&&(this.f.cssBuild=c);if(!sf(c)){var d=ef(a);df(d,function(a){if(O)Rf(a);else{var d=R;a.selector=a.parsedSelector;Rf(a);a.selector=a.j=Cf(d,a,d.c,void 0,void 0)}Q&&""===c&&(Dg(b),b.a&&b.a.transformRule(a))});Q?a.textContent=cf(d):this.f.A.rules.push(d)}};n.getComputedStyleValue=function(a,b){var c;Q||(c=(T(a)||T(Ig(this,a))).w[b]);return(c=c||window.getComputedStyle(a).getPropertyValue(b))?c.trim():""};
n.Ua=function(a,b){var c=of(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]===R.a){c=d[e+1];break}}}c&&b.push(R.a,c);Q||(c=T(a))&&c.s&&b.push(ig.a,c.s);nf(a,b.join(" "))};n.Ba=function(a){return T(a)};n.Ta=function(a,b){wf(a,b)};n.Wa=function(a,b){wf(a,b,!0)};n.Sa=function(a){return qg(a)};n.Da=function(a){return pg(a)};Y.prototype.flush=Y.prototype.flush;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.Ua;Y.prototype._styleInfoForNode=Y.prototype.Ba;Y.prototype.transformCustomStyleForDocument=Y.prototype.ra;Y.prototype.getStyleAst=Y.prototype.Fa;Y.prototype.styleAstToString=Y.prototype.Va;Y.prototype.flushCustomStyles=Y.prototype.flushCustomStyles;
Y.prototype.scopeNode=Y.prototype.Ta;Y.prototype.unscopeNode=Y.prototype.Wa;Y.prototype.scopeForNode=Y.prototype.Sa;Y.prototype.currentScopeForNode=Y.prototype.Da;Y.prototype.prepareAdoptedCssText=Y.prototype.Qa;Object.defineProperties(Y.prototype,{nativeShadow:{get:function(){return O}},nativeCss:{get:function(){return Q}}});var Z=new Y,Jg,Kg;window.ShadyCSS&&(Jg=window.ShadyCSS.ApplyShim,Kg=window.ShadyCSS.CustomStyleInterface);
window.ShadyCSS={ScopingShim:Z,prepareTemplate:function(a,b,c){Z.flushCustomStyles();Z.prepareTemplate(a,b,c)},prepareTemplateDom:function(a,b){Z.prepareTemplateDom(a,b)},prepareTemplateStyles:function(a,b,c){Z.flushCustomStyles();Z.prepareTemplateStyles(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:Q,nativeShadow:O,cssBuild:Qe,disableRuntime:Pe};Jg&&(window.ShadyCSS.ApplyShim=Jg);Kg&&(window.ShadyCSS.CustomStyleInterface=Kg);var Lg=window.customElements,Mg=window.HTMLImports,Ng=window.HTMLTemplateElement;window.WebComponents=window.WebComponents||{};if(Lg&&Lg.polyfillWrapFlushCallback){var Og,Pg=function(){if(Og){Ng.C&&Ng.C(window.document);var a=Og;Og=null;a();return!0}},Qg=Mg.whenReady;Lg.polyfillWrapFlushCallback(function(a){Og=a;Qg(Pg)});Mg.whenReady=function(a){Qg(function(){Pg()?Mg.whenReady(a):a()})}}
Mg.whenReady(function(){requestAnimationFrame(function(){window.WebComponents.ready=!0;document.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))})});var Rg=document.createElement("style");Rg.textContent="body {transition: opacity ease-in 0.2s; } \nbody[unresolved] {opacity: 0; display: block; overflow: hidden; position: relative; } \n";var Sg=document.querySelector("head");Sg.insertBefore(Rg,Sg.firstChild);}).call(this);
</script>
<script>(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=!(window.ShadyDOM&&window.ShadyDOM.inUse),p;function r(a){p=a&&a.shimcssproperties?!1:l||!(navigator.userAgent.match(/AppleWebKit\/601|Edge\/15/)||!window.CSS||!CSS.supports||!CSS.supports("box-shadow","0 0 0 var(--foo)"))}var t;window.ShadyCSS&&void 0!==window.ShadyCSS.cssBuild&&(t=window.ShadyCSS.cssBuild);var aa=!(!window.ShadyCSS||!window.ShadyCSS.disableRuntime);
window.ShadyCSS&&void 0!==window.ShadyCSS.nativeCss?p=window.ShadyCSS.nativeCss:window.ShadyCSS?(r(window.ShadyCSS),window.ShadyCSS=void 0):r(window.WebComponents&&window.WebComponents.flags);var u=p,v=t;function w(){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 x(a){a=a.replace(ba,"").replace(ca,"");var b=y,c=a,e=new w;e.start=0;e.end=c.length;for(var d=e,f=0,g=c.length;f<g;f++)if("{"===c[f]){d.rules||(d.rules=[]);var h=d,k=h.rules[h.rules.length-1]||null;d=new w;d.start=f+1;d.parent=h;d.previous=k;h.rules.push(d)}else"}"===c[f]&&(d.end=f+1,d=d.parent||e);return b(e,a)}
function y(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=da(c),c=c.replace(z," "),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=A:c.match(ea)&&(a.type=B,a.keyframesName=a.selector.split(z).pop()):a.type=0===c.indexOf("--")?C:D);if(c=a.rules)for(var e=0,d=c.length,f=void 0;e<d&&(f=c[e]);e++)y(f,b);
return a}function da(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 E(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 g=d.length,h=void 0;f<g&&(h=d[f]);f++)e=E(h,b,e)}else b?b=a.cssText:(b=a.cssText,b=b.replace(fa,"").replace(ha,""),b=b.replace(ia,"").replace(ja,"")),(e=b.trim())&&(e=" "+e+"\n")}e&&(a.selector&&(c+=a.selector+" {\n"),c+=e,a.selector&&(c+="}\n\n"));return c}
var D=1,B=7,A=4,C=1E3,ba=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,ca=/@import[^;]*;/gim,fa=/(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\n]|$)/gim,ha=/(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\n]|$)?/gim,ia=/@apply\s*\(?[^);]*\)?\s*(?:[;\n]|$)?/gim,ja=/[^;:]*?:[^;]*?var\([^;]*\)(?:[;\n]|$)?/gim,ea=/^@[^\s]*keyframes/,z=/\s+/g;var G=/(?:^|[;\s{]\s*)(--[\w-]*?)\s*:\s*(?:((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};{])+)|\{([^}]*)\}(?:(?=[;\s}])|$))/gi,H=/(?:^|\W+)@apply\s*\(?([^);\n]*)\)?/gi,ka=/@media\s(.*)/;var I=new Set;function J(a){if(!a)return"";"string"===typeof a&&(a=x(a));return E(a,u)}function K(a){!a.__cssRules&&a.textContent&&(a.__cssRules=x(a.textContent));return a.__cssRules||null}function L(a,b,c,e){if(a){var d=!1,f=a.type;if(e&&f===A){var g=a.selector.match(ka);g&&(window.matchMedia(g[1]).matches||(d=!0))}f===D?b(a):c&&f===B?c(a):f===C&&(d=!0);if((a=a.rules)&&!d)for(d=0,f=a.length,g=void 0;d<f&&(g=a[d]);d++)L(g,b,c,e)}}
function M(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=M(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 N(a){if(void 0!==v)return v;if(void 0===a.__cssBuild){var b=a.getAttribute("css-build");if(b)a.__cssBuild=b;else{a:{b="template"===a.localName?a.content.firstChild:a.firstChild;if(b instanceof Comment&&(b=b.textContent.trim().split(":"),"css-build"===b[0])){b=b[1];break a}b=""}if(""!==b){var c="template"===a.localName?a.content.firstChild:a.firstChild;c.parentNode.removeChild(c)}a.__cssBuild=b}}return a.__cssBuild||""};var la=/;\s*/m,ma=/^\s*(initial)|(inherit)\s*$/,O=/\s*!important/;function P(){this.a={}}P.prototype.set=function(a,b){a=a.trim();this.a[a]={h:b,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=H.test(a)||G.test(a);H.lastIndex=0;G.lastIndex=0;return a};
R.prototype.m=function(a,b){if(void 0===a._gatheredStyle){var c=[];for(var e=a.content.querySelectorAll("style"),d=0;d<e.length;d++){var f=e[d];if(f.hasAttribute("shady-unscoped")){if(!l){var g=f.textContent;I.has(g)||(I.add(g),g=f.cloneNode(!0),document.head.appendChild(g));f.parentNode.removeChild(f)}}else c.push(f.textContent),f.parentNode.removeChild(f)}(c=c.join("").trim())?(e=document.createElement("style"),e.textContent=c,a.content.insertBefore(e,a.content.firstChild),c=e):c=null;a._gatheredStyle=
c}return(a=a._gatheredStyle)?this.j(a,b):null};R.prototype.j=function(a,b){b=void 0===b?"":b;var c=K(a);this.l(c,b);a.textContent=J(c);return c};R.prototype.f=function(a){var b=this,c=K(a);L(c,function(a){":root"===a.selector&&(a.selector="html");b.g(a)});a.textContent=J(c);return c};R.prototype.l=function(a,b){var c=this;this.c=b;L(a,function(a){c.g(a)});this.c=null};R.prototype.g=function(a){a.cssText=na(this,a.parsedCssText,a);":root"===a.selector&&(a.selector=":host > *")};
function na(a,b,c){b=b.replace(G,function(b,d,f,g){return oa(a,b,d,f,g,c)});return S(a,b,c)}function pa(a,b){for(var c=b;c.parent;)c=c.parent;var e={},d=!1;L(c,function(c){(d=d||c===b)||c.selector===b.selector&&Object.assign(e,T(a,c.parsedCssText))});return e}
function S(a,b,c){for(var e;e=H.exec(b);){var d=e[0],f=e[1];e=e.index;var g=b.slice(0,e+d.indexOf("@apply"));b=b.slice(e+d.length);var h=c?pa(a,c):{};Object.assign(h,T(a,g));d=void 0;var k=a;f=f.replace(la,"");var n=[];var m=k.a.get(f);m||(k.a.set(f,{}),m=k.a.get(f));if(m){k.c&&(m.i[k.c]=!0);var q=m.h;for(d in q)k=h&&h[d],m=[d,": var(",f,"_-_",d],k&&m.push(",",k.replace(O,"")),m.push(")"),O.test(q[d])&&m.push(" !important"),n.push(m.join(""))}d=n.join("; ");b=g+d+b;H.lastIndex=e+d.length}return b}
function T(a,b,c){c=void 0===c?!1:c;b=b.split(";");for(var e,d,f={},g=0,h;g<b.length;g++)if(e=b[g])if(h=e.split(":"),1<h.length){e=h[0].trim();d=h.slice(1).join(":");if(c){var k=a;h=e;var n=ma.exec(d);n&&(n[1]?(k.b||(k.b=document.createElement("meta"),k.b.setAttribute("apply-shim-measure",""),k.b.style.all="initial",document.head.appendChild(k.b)),h=window.getComputedStyle(k.b).getPropertyValue(h)):h="apply-shim-inherit",d=h)}f[e]=d}return f}function qa(a,b){if(Q)for(var c in b.i)c!==a.c&&Q(c)}
function oa(a,b,c,e,d,f){e&&M(e,function(b,c){c&&a.a.get(c)&&(d="@apply "+c+";")});if(!d)return b;var g=S(a,""+d,f);f=b.slice(0,b.indexOf("--"));var h=g=T(a,g,!0),k=a.a.get(c),n=k&&k.h;n?h=Object.assign(Object.create(n),g):a.a.set(c,h);var m=[],q,Z=!1;for(q in h){var F=g[q];void 0===F&&(F="initial");!n||q in n||(Z=!0);m.push(c+"_-_"+q+": "+F)}Z&&qa(a,k);k&&(k.h=h);e&&(f=b+";"+f);return f+m.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={};var ra=Promise.resolve();function sa(a){if(a=U[a])a._applyShimCurrentVersion=a._applyShimCurrentVersion||0,a._applyShimValidatingVersion=a._applyShimValidatingVersion||0,a._applyShimNextVersion=(a._applyShimNextVersion||0)+1}function ta(a){return a._applyShimCurrentVersion===a._applyShimNextVersion}function ua(a){a._applyShimValidatingVersion=a._applyShimNextVersion;a._validating||(a._validating=!0,ra.then(function(){a._applyShimCurrentVersion=a._applyShimNextVersion;a._validating=!1}))};var V=new R;function W(){this.a=null;V.invalidCallback=sa}function X(a){!a.a&&window.ShadyCSS.CustomStyleInterface&&(a.a=window.ShadyCSS.CustomStyleInterface,a.a.transformCallback=function(a){V.f(a)},a.a.validateCallback=function(){requestAnimationFrame(function(){a.a.enqueued&&a.flushCustomStyles()})})}W.prototype.prepareTemplate=function(a,b){X(this);""===N(a)&&(U[b]=a,b=V.m(a,b),a._styleAst=b)};
W.prototype.flushCustomStyles=function(){X(this);if(this.a){var a=this.a.processStyles();if(this.a.enqueued){for(var b=0;b<a.length;b++){var c=this.a.getStyleForCustomStyle(a[b]);c&&V.f(c)}this.a.enqueued=!1}}};
W.prototype.styleSubtree=function(a,b){X(this);if(b)for(var c in b)null===c?a.style.removeProperty(c):a.style.setProperty(c,b[c]);if(a.shadowRoot)for(this.styleElement(a),a=a.shadowRoot.children||a.shadowRoot.childNodes,b=0;b<a.length;b++)this.styleSubtree(a[b]);else for(a=a.children||a.childNodes,b=0;b<a.length;b++)this.styleSubtree(a[b])};
W.prototype.styleElement=function(a){X(this);var b=a.localName,c;b?-1<b.indexOf("-")?c=b:c=a.getAttribute&&a.getAttribute("is")||"":c=a.is;b=U[c];if(!(b&&""!==N(b)||!b||ta(b))){if(ta(b)||b._applyShimValidatingVersion!==b._applyShimNextVersion)this.prepareTemplate(b,c),ua(b);if(a=a.shadowRoot)if(a=a.querySelector("style"))a.__cssRules=b._styleAst,a.textContent=J(b._styleAst)}};W.prototype.styleDocument=function(a){X(this);this.styleSubtree(document.body,a)};
if(!window.ShadyCSS||!window.ShadyCSS.ScopingShim){var Y=new W,va=window.ShadyCSS&&window.ShadyCSS.CustomStyleInterface;window.ShadyCSS={prepareTemplate:function(a,b){Y.flushCustomStyles();Y.prepareTemplate(a,b)},prepareTemplateStyles:function(a,b,c){window.ShadyCSS.prepareTemplate(a,b,c)},prepareTemplateDom:function(){},styleSubtree:function(a,b){Y.flushCustomStyles();Y.styleSubtree(a,b)},styleElement:function(a){Y.flushCustomStyles();Y.styleElement(a)},styleDocument:function(a){Y.flushCustomStyles();
Y.styleDocument(a)},getComputedStyleValue:function(a,b){return(a=window.getComputedStyle(a).getPropertyValue(b))?a.trim():""},flushCustomStyles:function(){Y.flushCustomStyles()},nativeCss:u,nativeShadow:l,cssBuild:v,disableRuntime:aa};va&&(window.ShadyCSS.CustomStyleInterface=va)}window.ShadyCSS.ApplyShim=V;}).call(this);
</script>
<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.7.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>
<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 = re
gitextract_q04hf33v/
├── .gitignore
├── AUTHORS
├── CONTRIBUTING.md
├── CONTRIBUTORS
├── LICENSE
├── README.md
├── WORKSPACE
├── colab_facets.ipynb
├── facets/
│ ├── BUILD
│ ├── colab.html
│ └── visualizations.html
├── facets-dist/
│ └── facets-jupyter.html
├── facets_atlasmaker/
│ ├── .gitignore
│ ├── BUILD
│ ├── README.md
│ ├── atlasmaker.py
│ ├── atlasmaker_io.py
│ ├── atlasmaker_io_test.py
│ ├── convert.py
│ ├── convert_test.py
│ ├── montage.py
│ ├── montage_test.py
│ ├── parallelize.py
│ ├── parallelize_test.py
│ ├── pylintrc
│ ├── requirements.txt
│ ├── testdata/
│ │ ├── attributions.txt
│ │ ├── testfiles_smalllist.csv
│ │ ├── testfiles_smalllist_with_dups.csv
│ │ └── wikipedia_images_16.csv
│ └── utils/
│ ├── BUILD
│ ├── README.md
│ ├── wikipedia_sourcelist_generator.py
│ └── wikipedia_sourcelist_generator_test.py
├── facets_dive/
│ ├── Dive_demo.ipynb
│ ├── README.md
│ ├── colab_dive_atlas_demo.ipynb
│ ├── components/
│ │ ├── facets_dive/
│ │ │ ├── BUILD
│ │ │ ├── facets-dive.html
│ │ │ ├── facets-dive.ts
│ │ │ ├── test.html
│ │ │ └── test.ts
│ │ ├── facets_dive_controls/
│ │ │ ├── BUILD
│ │ │ ├── facets-dive-controls.html
│ │ │ ├── facets-dive-controls.ts
│ │ │ ├── test.html
│ │ │ └── test.ts
│ │ ├── facets_dive_info_card/
│ │ │ ├── BUILD
│ │ │ ├── facets-dive-info-card.html
│ │ │ ├── facets-dive-info-card.ts
│ │ │ ├── test.html
│ │ │ └── test.ts
│ │ ├── facets_dive_legend/
│ │ │ ├── BUILD
│ │ │ ├── facets-dive-legend.html
│ │ │ ├── facets-dive-legend.ts
│ │ │ ├── test.html
│ │ │ └── test.ts
│ │ └── facets_dive_vis/
│ │ ├── BUILD
│ │ ├── facets-dive-vis.html
│ │ ├── facets-dive-vis.ts
│ │ ├── test.html
│ │ ├── test.ts
│ │ └── typings.d.ts
│ ├── demo/
│ │ ├── BUILD
│ │ ├── quickdraw.html
│ │ └── quickdraw.ts
│ └── lib/
│ ├── BUILD
│ ├── axis.html
│ ├── axis.ts
│ ├── bounded-object.html
│ ├── bounded-object.ts
│ ├── data-example.html
│ ├── data-example.ts
│ ├── grid.html
│ ├── grid.ts
│ ├── info-renderers.html
│ ├── info-renderers.ts
│ ├── label.html
│ ├── label.ts
│ ├── layout.html
│ ├── layout.ts
│ ├── sorting.html
│ ├── sorting.ts
│ ├── sprite-atlas.html
│ ├── sprite-atlas.ts
│ ├── sprite-material.html
│ ├── sprite-material.ts
│ ├── sprite-mesh.html
│ ├── sprite-mesh.ts
│ ├── stats.html
│ ├── stats.ts
│ ├── string-format.html
│ ├── string-format.ts
│ ├── test/
│ │ ├── BUILD
│ │ ├── axis_test.ts
│ │ ├── bounded-object_test.ts
│ │ ├── externs.js
│ │ ├── grid_test.ts
│ │ ├── layout_test.ts
│ │ ├── sorting_test.ts
│ │ ├── sprite-atlas_test.ts
│ │ ├── sprite-material_test.ts
│ │ ├── sprite-mesh_test.ts
│ │ ├── stats_test.ts
│ │ ├── string-format_test.ts
│ │ ├── test.html
│ │ ├── text_test.ts
│ │ └── wordtree_test.ts
│ ├── text.html
│ ├── text.ts
│ ├── wordtree.html
│ └── wordtree.ts
└── facets_overview/
├── Overview_demo.ipynb
├── README.md
├── common/
│ ├── BUILD
│ ├── common_bundle.html
│ ├── feature_statistics_generator.ts
│ ├── overview_data_model.ts
│ ├── plottable_helpers.d.ts
│ ├── plottable_helpers.js
│ ├── test/
│ │ ├── BUILD
│ │ ├── externs.js
│ │ ├── feature_statistics_generator_test.ts
│ │ ├── overview_data_model_test.ts
│ │ ├── test.html
│ │ ├── test_bundle.html
│ │ └── utils_test.ts
│ └── utils.ts
├── components/
│ ├── facets_overview/
│ │ ├── BUILD
│ │ ├── facets-overview-filter-validator.html
│ │ ├── facets-overview.html
│ │ └── facets-overview.ts
│ ├── facets_overview_chart/
│ │ ├── BUILD
│ │ ├── externs.js
│ │ ├── facets-overview-chart.html
│ │ └── facets-overview-chart.ts
│ ├── facets_overview_row_legend/
│ │ ├── BUILD
│ │ ├── facets-overview-row-legend.html
│ │ └── facets-overview-row-legend.ts
│ ├── facets_overview_row_stats/
│ │ ├── BUILD
│ │ ├── facets-overview-row-stats.html
│ │ └── facets-overview-row-stats.ts
│ └── facets_overview_table/
│ ├── BUILD
│ ├── facets-overview-table.html
│ └── facets-overview-table.ts
├── facets_overview/
│ ├── __init__.py
│ ├── base_feature_statistics_generator.py
│ ├── base_generic_feature_statistics_generator.py
│ ├── feature_statistics_generator.py
│ ├── feature_statistics_generator_test.py
│ ├── feature_statistics_pb2.py
│ ├── generic_feature_statistics_generator.py
│ └── generic_feature_statistics_generator_test.py
├── functional_tests/
│ ├── many/
│ │ ├── BUILD
│ │ ├── index.html
│ │ ├── many-test.html
│ │ └── many_test.ts
│ ├── simple/
│ │ ├── BUILD
│ │ ├── index.html
│ │ ├── simple-test.html
│ │ └── simple_test.ts
│ ├── single/
│ │ ├── BUILD
│ │ ├── index.html
│ │ ├── single-test.html
│ │ └── single_test.ts
│ ├── single_feature/
│ │ ├── BUILD
│ │ ├── index.html
│ │ ├── single-feature-test.html
│ │ └── single_feature_test.ts
│ ├── stress/
│ │ ├── BUILD
│ │ ├── index.html
│ │ ├── stress-test.html
│ │ └── stress_test.ts
│ ├── test_helpers/
│ │ ├── BUILD
│ │ ├── externs.js
│ │ ├── test_helpers.ts
│ │ └── test_helpers_bundle.html
│ └── weighted/
│ ├── BUILD
│ ├── index.html
│ ├── weighted-test.html
│ └── weighted_test.ts
├── proto/
│ ├── BUILD
│ └── feature_statistics.proto
├── python/
│ ├── __init__.py
│ ├── base_feature_statistics_generator.py
│ ├── base_generic_feature_statistics_generator.py
│ ├── feature_statistics_generator.py
│ ├── feature_statistics_generator_test.py
│ ├── feature_statistics_pb2.py
│ ├── generic_feature_statistics_generator.py
│ └── generic_feature_statistics_generator_test.py
└── setup.py
SYMBOL INDEX (854 symbols across 61 files)
FILE: facets_atlasmaker/atlasmaker.py
function _determine_bg_rgb (line 115) | def _determine_bg_rgb():
function main (line 122) | def main(argv):
FILE: facets_atlasmaker/atlasmaker_io.py
function create_output_dir_if_not_exist (line 30) | def create_output_dir_if_not_exist(dirpath, testfile_name='testfile'):
function _check_src_list_dups (line 55) | def _check_src_list_dups(locations, handle_dups='ignore'):
function read_src_list_csvfile (line 102) | def read_src_list_csvfile(filepath, handle_dups='ignore'):
function get_image (line 119) | def get_image(location, request_timeout=60, http_max_retries=2,
function save_atlas_and_manifests (line 169) | def save_atlas_and_manifests(outdir, atlases, manifests, sprite_atlas_se...
function save_image (line 206) | def save_image(img, outpath, delete_after_write=False):
function _output_manifest (line 238) | def _output_manifest(filepath, manifest):
FILE: facets_atlasmaker/atlasmaker_io_test.py
class AtlasmakerIOTests (line 14) | class AtlasmakerIOTests(absltest.TestCase):
method setUp (line 16) | def setUp(self):
method testCreateOutputDir (line 19) | def testCreateOutputDir(self):
method testCreateOutputDirUnableToCreateDir (line 39) | def testCreateOutputDirUnableToCreateDir(self, mock_os):
method testCreateOutputDirFailsWrite (line 51) | def testCreateOutputDirFailsWrite(self, mock_os):
method testReadSrcListCsvfile (line 63) | def testReadSrcListCsvfile(self):
method testReadSrcListCsvfileIgnoreDups (line 73) | def testReadSrcListCsvfileIgnoreDups(self):
method testReadSrcListCsvfileFailWhenDups (line 85) | def testReadSrcListCsvfileFailWhenDups(self):
method testReadSrcListCsvfileDupsReturnUniques (line 92) | def testReadSrcListCsvfileDupsReturnUniques(self):
method testGetImageFromLocalFile (line 103) | def testGetImageFromLocalFile(self):
method testGetImageFromUrlHTTP (line 110) | def testGetImageFromUrlHTTP(self, mock_io, mock_requests):
method testGetImageFromUrlHTTPS (line 127) | def testGetImageFromUrlHTTPS(self, mock_io, mock_requests):
method testGetImageFromUrlSucceedsLastTry (line 146) | def testGetImageFromUrlSucceedsLastTry(self, mock_io, mock_requests):
method testGetImageFromUrlNotWorthRetry (line 168) | def testGetImageFromUrlNotWorthRetry(self, mock_io, mock_requests):
method testSaveImageJpegDontDelete (line 188) | def testSaveImageJpegDontDelete(self):
method testSaveImageJpegAndDelete (line 204) | def testSaveImageJpegAndDelete(self):
FILE: facets_atlasmaker/convert.py
class ImageConvertSettings (line 21) | class ImageConvertSettings(object):
method __init__ (line 24) | def __init__(self, img_format, width, height, position=(0.5, 0.5),
method _validate_settings (line 65) | def _validate_settings(self):
method bg_color (line 86) | def bg_color(self):
method bg_mode (line 90) | def bg_mode(self):
method format (line 94) | def format(self):
method height (line 98) | def height(self):
method width (line 102) | def width(self):
method position (line 106) | def position(self):
method resize_if_larger (line 110) | def resize_if_larger(self):
method preserve_aspect_ratio (line 114) | def preserve_aspect_ratio(self):
class ImageConverter (line 118) | class ImageConverter(object):
method __init__ (line 121) | def __init__(self, image, image_convert_settings):
method convert (line 142) | def convert(self):
method _resize_thumbnail_keep_aspect_ratio (line 165) | def _resize_thumbnail_keep_aspect_ratio(self):
method _resize_thumbnail_and_crop (line 207) | def _resize_thumbnail_and_crop(self):
method _pad_to_larger_size (line 218) | def _pad_to_larger_size(self):
method _resize_larger_dont_keep_aspect_ratio (line 226) | def _resize_larger_dont_keep_aspect_ratio(self):
method _resize_larger_keep_aspect_ratio (line 231) | def _resize_larger_keep_aspect_ratio(self):
function create_default_image (line 255) | def create_default_image(image_convert_settings):
FILE: facets_atlasmaker/convert_test.py
class ImageConvertSettingsTests (line 15) | class ImageConvertSettingsTests(absltest.TestCase):
method test_initializeWithDefaultSettings (line 18) | def test_initializeWithDefaultSettings(self):
method test_initializeWithAllSettings (line 25) | def test_initializeWithAllSettings(self):
method test_invalidWidth (line 35) | def test_invalidWidth(self):
method test_invalidHeight (line 39) | def test_invalidHeight(self):
method test_invalidPosition (line 43) | def test_invalidPosition(self):
method test_invalidBGColorRGB (line 47) | def test_invalidBGColorRGB(self):
method test_invalidOpacity (line 51) | def test_invalidOpacity(self):
class TestImageConverterTests (line 56) | class TestImageConverterTests(absltest.TestCase):
method setUp (line 59) | def setUp(self):
method testConvertSmallerKeepRatioHasCorrectSize (line 74) | def testConvertSmallerKeepRatioHasCorrectSize(self):
method testConvertResizedSmallKeepRatio (line 89) | def testConvertResizedSmallKeepRatio(self):
method testConvertResizedSmallTopLeftKeepRatio (line 117) | def testConvertResizedSmallTopLeftKeepRatio(self):
method testConvertSmallerRightPosKeepRatio (line 143) | def testConvertSmallerRightPosKeepRatio(self):
method testConvertSmallerIgnoreRatio (line 172) | def testConvertSmallerIgnoreRatio(self):
method testConvertResizedSmallDontKeepRatioCenterCrop (line 186) | def testConvertResizedSmallDontKeepRatioCenterCrop(self):
method testConvertSmallerIgnoreRatioCropTopLeftSameAspectRatio (line 218) | def testConvertSmallerIgnoreRatioCropTopLeftSameAspectRatio(self):
method testConvertSmallerIgnoreRatioCropTopLeftNoAspectRatio (line 253) | def testConvertSmallerIgnoreRatioCropTopLeftNoAspectRatio(self):
method testConvertResizedLargerKeepAspectRatio (line 283) | def testConvertResizedLargerKeepAspectRatio(
method testConvertImageResizedLargerIgnoreRatio (line 297) | def testConvertImageResizedLargerIgnoreRatio(self):
method testConvertImagePaddedLargerCorrectSize (line 317) | def testConvertImagePaddedLargerCorrectSize(self):
method testConvertInputSizeSameAsOutput (line 329) | def testConvertInputSizeSameAsOutput(self):
method testConvertTruncatedImage (line 339) | def testConvertTruncatedImage(self):
class TestImageConverterHelpersTests (line 366) | class TestImageConverterHelpersTests(absltest.TestCase):
method testCreateDefaultImage (line 369) | def testCreateDefaultImage(self):
FILE: facets_atlasmaker/montage.py
class SpriteAtlasSettings (line 16) | class SpriteAtlasSettings(object):
method __init__ (line 19) | def __init__(self, img_format, height=None, width=None,
method filename (line 40) | def filename(self):
method img_format (line 44) | def img_format(self):
method height (line 48) | def height(self):
method width (line 52) | def width(self):
method manifest_filename (line 56) | def manifest_filename(self):
class SpriteAtlasGenerator (line 60) | class SpriteAtlasGenerator(object):
method __init__ (line 63) | def __init__(self, images_with_statuses, img_src_paths, atlas_settings,
method _identify_image_size (line 89) | def _identify_image_size(self):
method _validate_inputs (line 103) | def _validate_inputs(self):
method create_atlas (line 112) | def create_atlas(self):
method _create_single_atlas (line 136) | def _create_single_atlas(self):
method _generate_default_atlas_size (line 195) | def _generate_default_atlas_size(self):
FILE: facets_atlasmaker/montage_test.py
class SpriteAtlasGeneratorTests (line 8) | class SpriteAtlasGeneratorTests(absltest.TestCase):
method setUp (line 10) | def setUp(self):
method testAtlasGeneratorDifferentInputSizes (line 19) | def testAtlasGeneratorDifferentInputSizes(self):
method testAtlasGeneratorDifferentImageSizes (line 32) | def testAtlasGeneratorDifferentImageSizes(self):
method testCreateAtlasIfNoSizeSpecified (line 50) | def testCreateAtlasIfNoSizeSpecified(self):
method testCreateAtlas (line 69) | def testCreateAtlas(self):
method testCreateAtlasWithFailures (line 100) | def testCreateAtlasWithFailures(self):
method testCreateAtlasManifest (line 132) | def testCreateAtlasManifest(self):
method testCreateAtlasManifestWithImgFailures (line 156) | def testCreateAtlasManifestWithImgFailures(self):
FILE: facets_atlasmaker/parallelize.py
function get_and_convert_image (line 10) | def get_and_convert_image(image_location, image_convert_settings,
function get_and_convert_images_parallel (line 70) | def get_and_convert_images_parallel(image_src_locations, image_convert_s...
function convert_default_image (line 111) | def convert_default_image(image_location, image_convert_settings):
FILE: facets_atlasmaker/parallelize_test.py
class ParallelizeTests (line 13) | class ParallelizeTests(absltest.TestCase):
method setUp (line 15) | def setUp(self):
method testGetAndConvertOneImageFromLocalFile (line 25) | def testGetAndConvertOneImageFromLocalFile(self):
method testGetAndConvertOneImageMissingFile (line 39) | def testGetAndConvertOneImageMissingFile(self):
method testGetAndConvertOneImageNotImageFile (line 52) | def testGetAndConvertOneImageNotImageFile(self):
method testGetAndConvertTruncatedImageFail (line 65) | def testGetAndConvertTruncatedImageFail(self):
method testGetAndConvertAllowTruncatedImage (line 93) | def testGetAndConvertAllowTruncatedImage(self):
method testGetAndConvertOneImageBadUrl (line 120) | def testGetAndConvertOneImageBadUrl(self):
method testParallelizeConvertImagesFromLocalfile (line 132) | def testParallelizeConvertImagesFromLocalfile(self):
method testParallelizeConvertWithFailures (line 152) | def testParallelizeConvertWithFailures(self):
method testConvertDefaultImageSucceeds (line 174) | def testConvertDefaultImageSucceeds(self):
method testConvertDefaultImageFails (line 185) | def testConvertDefaultImageFails(self):
FILE: facets_atlasmaker/utils/wikipedia_sourcelist_generator.py
function _get_pageids_for_category (line 32) | def _get_pageids_for_category(category, limit=500, cmcontinue=None):
function _get_image_urls_for_pageids (line 74) | def _get_image_urls_for_pageids(page_ids):
function _chunk_page_ids (line 108) | def _chunk_page_ids(page_ids, chunk_size=50):
function get_images_list (line 127) | def get_images_list(category, num_images_desired=100,
function write_to_csv (line 176) | def write_to_csv(urls, outputfile):
function main (line 189) | def main(argv):
FILE: facets_atlasmaker/utils/wikipedia_sourcelist_generator_test.py
class WikipediaSourcelistGeneratorTests (line 10) | class WikipediaSourcelistGeneratorTests(absltest.TestCase):
method testChunkPageIds (line 11) | def testChunkPageIds(self):
method testChunkPageIdsEmptyList (line 16) | def testChunkPageIdsEmptyList(self):
FILE: facets_dive/components/facets_dive/facets-dive.ts
type FacetsDive (line 24) | interface FacetsDive extends Element {
method ready (line 399) | ready(this: any) {
FILE: facets_dive/components/facets_dive_controls/facets-dive-controls.ts
type FacetsDiveControls (line 21) | interface FacetsDiveControls extends Element {
method _getImageFieldNameDefaultLabel (line 226) | _getImageFieldNameDefaultLabel(atlasUrl: string): string {
method _isModeScatter (line 230) | _isModeScatter(positionMode: string): boolean {
method _updateCSSVars (line 242) | _updateCSSVars(this: any) {
method _breakUpAndTruncate (line 254) | _breakUpAndTruncate(longString: string): string {
method _maxBuckets (line 261) | _maxBuckets(this: any, fieldName: string, bagOfWords: boolean): number {
method _getPositionMode (line 285) | _getPositionMode(
method _openOverflow (line 295) | _openOverflow(this: any) {
method _shouldShowOverflowMenu (line 303) | _shouldShowOverflowMenu(
FILE: facets_dive/components/facets_dive_info_card/facets-dive-info-card.ts
type FacetsDiveInfoCard (line 20) | interface FacetsDiveInfoCard extends Element {
method ready (line 44) | ready(this: any) {
method _updateSelected (line 47) | _updateSelected(this: any, selectedData: Object[]) {
FILE: facets_dive/components/facets_dive_legend/facets-dive-legend.ts
type FacetsDiveLegend (line 20) | interface FacetsDiveLegend extends Element {
method _breakUpAndTruncate (line 59) | _breakUpAndTruncate(longString: string): string {
method _anyColor (line 66) | _anyColor(this: any, colorBy: string, palette?: vis.Palette) {
method _specialClass (line 73) | _specialClass(special: boolean): string {
method _open (line 80) | _open(this: any) {
method _toggleOpened (line 87) | _toggleOpened(this: any) {
method _getIcon (line 94) | _getIcon(opened: boolean) {
FILE: facets_dive/components/facets_dive_vis/facets-dive-vis.ts
type Cell (line 31) | type Cell = gridlib.Cell;
type Grid (line 32) | type Grid = gridlib.Grid;
type ItemPosition (line 33) | type ItemPosition = gridlib.ItemPosition;
type Key (line 34) | type Key = sorting.Key;
constant BAG_OF_WORDS_SEPARATOR (line 36) | const BAG_OF_WORDS_SEPARATOR = '\u2022';
constant BAG_OF_WORDS_SUFFIX (line 37) | const BAG_OF_WORDS_SUFFIX = '\u2026';
constant DEFAULT_SCENE_PADDING (line 40) | const DEFAULT_SCENE_PADDING = 8;
constant DEFAULT_TWEEN_DURATION (line 41) | const DEFAULT_TWEEN_DURATION = 600;
constant DEFAULT_FADE_DURATION (line 42) | const DEFAULT_FADE_DURATION = 200;
constant DEFAULT_SPRITE_IMAGE_WIDTH (line 43) | const DEFAULT_SPRITE_IMAGE_WIDTH = 64;
constant DEFAULT_SPRITE_IMAGE_HEIGHT (line 44) | const DEFAULT_SPRITE_IMAGE_HEIGHT = 64;
constant DEFAULT_VERTICAL_BUCKETS (line 45) | const DEFAULT_VERTICAL_BUCKETS = 10;
constant DEFAULT_HORIZONTAL_BUCKETS (line 46) | const DEFAULT_HORIZONTAL_BUCKETS = 10;
constant DEFAULT_POSITION_MODE (line 47) | const DEFAULT_POSITION_MODE = 'stacked';
constant GRID_FACETING_VERTICAL_LABEL_COLOR (line 52) | const GRID_FACETING_VERTICAL_LABEL_COLOR = '#666666';
constant GRID_FACETING_HORIZONTAL_LABEL_COLOR (line 53) | const GRID_FACETING_HORIZONTAL_LABEL_COLOR = '#dd6622';
constant ITEM_POSITIONING_VERTICAL_LABEL_COLOR (line 54) | const ITEM_POSITIONING_VERTICAL_LABEL_COLOR = '#2255aa';
constant ITEM_POSITIONING_HORIZONTAL_LABEL_COLOR (line 55) | const ITEM_POSITIONING_HORIZONTAL_LABEL_COLOR = '#118844';
constant GRID_CELL_MARGIN (line 60) | const GRID_CELL_MARGIN = 1;
constant CELL_BACKGROUND_FILL_COLOR (line 65) | const CELL_BACKGROUND_FILL_COLOR = '#f8f8f9';
constant SELECTED_ITEM_COLOR (line 70) | const SELECTED_ITEM_COLOR = '#fad411';
constant SELECTED_ITEM_COLOR_STROKE (line 75) | const SELECTED_ITEM_COLOR_STROKE = '#483d06';
constant SELECTED_ITEM_STROKE_WIDTH (line 80) | const SELECTED_ITEM_STROKE_WIDTH = 0.15;
constant SELECTED_ITEM_INITIAL_SCALE (line 85) | const SELECTED_ITEM_INITIAL_SCALE = 3;
constant SELECTED_ITEM_FINAL_SCALE (line 90) | const SELECTED_ITEM_FINAL_SCALE = 0.8;
constant COMPARED_ITEM_COLOR (line 95) | const COMPARED_ITEM_COLOR = '#1d6b1d';
constant COMPARED_ITEM_COLOR_STROKE (line 100) | const COMPARED_ITEM_COLOR_STROKE = '#44ff44';
constant COMPARED_ITEM_STROKE_WIDTH (line 105) | const COMPARED_ITEM_STROKE_WIDTH = 0.15;
constant COMPARED_ITEM_INITIAL_SCALE (line 110) | const COMPARED_ITEM_INITIAL_SCALE = 3;
constant COMPARED_ITEM_FINAL_SCALE (line 115) | const COMPARED_ITEM_FINAL_SCALE = 0.8;
constant DEFAULT_NUMERIC_LABEL_PRECISION (line 120) | const DEFAULT_NUMERIC_LABEL_PRECISION = 3;
constant ITEM_POSITIONING_MIN_CELL_ASPECT_RATIO (line 127) | const ITEM_POSITIONING_MIN_CELL_ASPECT_RATIO = 1;
constant ITEM_POSITIONING_MAX_CELL_ASPECT_RATIO (line 128) | const ITEM_POSITIONING_MAX_CELL_ASPECT_RATIO = 2;
constant ITEM_POSITIONING_CELL_PADDING (line 134) | const ITEM_POSITIONING_CELL_PADDING = {
constant ITEM_POSITIONING_LABEL_MARGIN (line 146) | const ITEM_POSITIONING_LABEL_MARGIN = {
constant GRID_FACETING_LABEL_MARGIN (line 158) | const GRID_FACETING_LABEL_MARGIN = {
constant LABEL_LENGTH_PAD (line 169) | const LABEL_LENGTH_PAD = 3;
constant FACETING_OTHER_PLACEHOLDER (line 180) | const FACETING_OTHER_PLACEHOLDER: Key = '\ufffcOTHER\ufffc';
constant FACETING_OTHER_LABEL (line 185) | const FACETING_OTHER_LABEL = 'other';
constant FACETING_NO_WORDS_PLACEHOLDER (line 191) | const FACETING_NO_WORDS_PLACEHOLDER = '\ufffcNO_WORDS\ufffc';
constant FACETING_NO_WORDS_LABEL (line 196) | const FACETING_NO_WORDS_LABEL = 'non-words';
constant FACETING_ALL_WORDS_PLACEHOLDER (line 201) | const FACETING_ALL_WORDS_PLACEHOLDER = '\ufffcALL_WORDS\ufffc';
constant FACETING_ALL_WORDS_LABEL (line 206) | const FACETING_ALL_WORDS_LABEL = 'other';
constant FACETING_PLACEHOLDERS (line 211) | const FACETING_PLACEHOLDERS: {[placeholder: string]: string} = {};
constant MIN_GRID_SCREEN_WIDTH_PX (line 222) | const MIN_GRID_SCREEN_WIDTH_PX = 200;
constant MIN_GRID_SCREEN_HEIGHT_PX (line 229) | const MIN_GRID_SCREEN_HEIGHT_PX = 200;
constant PALETTE_STANDARD (line 257) | const PALETTE_STANDARD: string[] = [
constant PALETTE_COOL (line 275) | const PALETTE_COOL: string[] = [
constant PALETTE_WARM (line 288) | const PALETTE_WARM: string[] = [
constant PALETTE_ASSIST (line 302) | const PALETTE_ASSIST: string[] = [
constant PALETTE_NUMERIC (line 316) | const PALETTE_NUMERIC = {
constant PALETTE_OTHER_COLOR (line 325) | const PALETTE_OTHER_COLOR = '#F0F0F0';
constant COLOR_BY_MIX (line 330) | const COLOR_BY_MIX = 180;
constant ZOOM_INCREMENT (line 336) | const ZOOM_INCREMENT = 1.1;
constant UPDATE_DEBOUNCE_DELAY_MS (line 343) | const UPDATE_DEBOUNCE_DELAY_MS = 100;
type GridItem (line 348) | interface GridItem {
type LabelAttributes (line 353) | interface LabelAttributes {
constant DEFAULT_LABEL_ROTATE (line 368) | const DEFAULT_LABEL_ROTATE = 0;
constant DEFAULT_LABEL_ATTRIBUTES (line 369) | const DEFAULT_LABEL_ATTRIBUTES: LabelAttributes = {
constant ITEM_POSITIONING_LABEL_FONT_SIZE_PX (line 379) | const ITEM_POSITIONING_LABEL_FONT_SIZE_PX = 16;
class Label (line 384) | class Label extends BoundedObject {
type Palette (line 437) | type Palette = Array<{
type FacetingFunction (line 454) | type FacetingFunction = (item: GridItem) => (Key|null);
type FacetingInfo (line 460) | interface FacetingInfo {
type FacetsDiveVis (line 481) | interface FacetsDiveVis extends HTMLElement {
class FacetsDiveVizInternal (line 690) | class FacetsDiveVizInternal {
method constructor (line 845) | constructor(public elem: FacetsDiveVis) {
method ready (line 857) | ready() {
method zoomed (line 945) | zoomed() {
method clicked (line 972) | clicked() {
method selectedIndicesUpdated (line 1002) | selectedIndicesUpdated() {
method comparedIndicesUpdated (line 1013) | comparedIndicesUpdated() {
method updateSelectedBoxes (line 1031) | updateSelectedBoxes() {
method updateComparedBoxes (line 1105) | updateComparedBoxes() {
method fitToViewport (line 1178) | fitToViewport() {
method zoomIn (line 1282) | zoomIn() {
method zoomOut (line 1289) | zoomOut() {
method transformSVG (line 1297) | transformSVG() {
method isVisible (line 1324) | isVisible(boundedObject: BoundedObject, elem: Element): boolean {
method updateObjectVisibility (line 1333) | updateObjectVisibility() {
method addVerticalFacetLabels (line 1396) | addVerticalFacetLabels(labels: Label[]): void {
method addHorizontalFacetLabels (line 1435) | addHorizontalFacetLabels(labels: Label[]): void {
method addVerticalPositioningLabels (line 1477) | addVerticalPositioningLabels(labels: Label[]): void {
method addHorizontalPositioningLabels (line 1587) | addHorizontalPositioningLabels(labels: Label[]): void {
method determineLabels (line 1694) | determineLabels(): Label[] {
method updateCellBackgrounds (line 1707) | updateCellBackgrounds() {
method updateAxes (line 1749) | updateAxes() {
method updateLabels (line 1813) | updateLabels() {
method dataChange (line 1938) | dataChange() {
method initializeSpriteMesh (line 1978) | initializeSpriteMesh() {
method filteredDataIndicesChange (line 2028) | filteredDataIndicesChange() {
method pickColorByField (line 2081) | pickColorByField() {
method pickTextDrawingField (line 2108) | pickTextDrawingField() {
method queueAtlasUrlChange (line 2134) | queueAtlasUrlChange() {
method atlasUrlChange (line 2148) | atlasUrlChange() {
method spriteUrlChange (line 2191) | spriteUrlChange() {
method updateGridStacking (line 2220) | updateGridStacking() {
method updateGridFaceting (line 2231) | updateGridFaceting() {
method updateGridItemPositions (line 2281) | updateGridItemPositions() {
method getPaletteSource (line 2390) | getPaletteSource(): string[] {
method updateScalarPalette (line 2408) | updateScalarPalette(): d3.RGBColor[] {
method updateCategoricalPalette (line 2503) | updateCategoricalPalette(paletteSource: string[]): d3.RGBColor[] {
method updateColors (line 2616) | updateColors() {
method updateGridItemPositionsAfterColorChange (line 2666) | updateGridItemPositionsAfterColorChange() {
method clearColors (line 2676) | clearColors() {
method resetSpritesToDefaultTexture (line 2702) | resetSpritesToDefaultTexture() {
method updateImageFieldName (line 2724) | updateImageFieldName() {
method generatePositionFunction (line 2770) | generatePositionFunction(fieldName: string):
method generateFacetingInfo (line 2790) | generateFacetingInfo(
method generateBagOfWordsFacetingInfo (line 2864) | generateBagOfWordsFacetingInfo(
method generateNumericFacetingInfo (line 2965) | generateNumericFacetingInfo(fieldName: string, buckets: number):
method formatNumber (line 3044) | formatNumber(num: number|null, precision = DEFAULT_NUMERIC_LABEL_PRECI...
method computeMinimumPrecision (line 3057) | computeMinimumPrecision(low: number, high: number, start = 1) {
method formatRange (line 3071) | formatRange(
method getKeys (line 3085) | getKeys(): string[] {
method renderUntil (line 3092) | renderUntil(endTimestamp: number) {
method resizeHandler (line 3100) | resizeHandler() {
method queueRenderScene (line 3127) | queueRenderScene() {
method renderScene (line 3142) | renderScene() {
method created (line 3348) | created(this: any) {
method ready (line 3352) | ready(this: any) {
method _dataChange (line 3356) | _dataChange(this: any, data: DataExample[]) {
method _filteredDataIndicesChange (line 3367) | _filteredDataIndicesChange(this: any, filteredDataIndices: number[]) {
method _queueAtlasUrlChange (line 3379) | _queueAtlasUrlChange(this: any, atlasUrl: string) {
method _spriteUrlChange (line 3383) | _spriteUrlChange(this: any, spriteUrl: string) {
method _updateGridFaceting (line 3387) | _updateGridFaceting(this: any) {
method _updateGridItemPositions (line 3391) | _updateGridItemPositions(this: any) {
method _updateColors (line 3395) | _updateColors(this: any) {
method _updateImageFieldName (line 3399) | _updateImageFieldName(this: any) {
method _onIronResize (line 3403) | _onIronResize(this: any) {
method _selectedIndicesUpdated (line 3407) | _selectedIndicesUpdated(this: any) {
method _comparedIndicesUpdated (line 3411) | _comparedIndicesUpdated(this: any) {
method fitToViewport (line 3416) | fitToViewport(this: any) {
method zoomIn (line 3420) | zoomIn(this: any) {
method zoomOut (line 3424) | zoomOut(this: any) {
FILE: facets_dive/components/facets_dive_vis/typings.d.ts
type PolymerStatic (line 24) | interface PolymerStatic {
FILE: facets_dive/demo/quickdraw.ts
constant PRESET_VIEWS (line 32) | const PRESET_VIEWS = [
FILE: facets_dive/lib/axis.ts
constant AXIS_STROKE_PX (line 26) | const AXIS_STROKE_PX = 1.2;
constant AXIS_WING_LENGTH_PX (line 31) | const AXIS_WING_LENGTH_PX = 6;
constant AXIS_OFFSET_PX (line 36) | const AXIS_OFFSET_PX = 4;
constant AXIS_MARGIN_PX (line 41) | const AXIS_MARGIN_PX = 14;
constant AXIS_MIN_LENGTH_RATIO (line 49) | const AXIS_MIN_LENGTH_RATIO = 5;
class Axis (line 54) | class Axis extends BoundedObject {
method constructor (line 70) | constructor(side: Side, cell: Cell) {
method strokeWidth (line 155) | strokeWidth(scale: number): number {
method path (line 163) | path(scale: number): string {
method key (line 211) | key(): string {
FILE: facets_dive/lib/bounded-object.ts
type Side (line 28) | enum Side {
type CameraPosition (line 39) | interface CameraPosition {
type BoundingBox (line 50) | interface BoundingBox {
type ElementMargin (line 61) | interface ElementMargin {
class BoundedObject (line 72) | class BoundedObject {
method shouldBeVisible (line 122) | shouldBeVisible(
FILE: facets_dive/lib/data-example.ts
type DataFieldValue (line 30) | type DataFieldValue = number|string;
type DataExample (line 40) | interface DataExample { [fieldName: string]: DataFieldValue; }
FILE: facets_dive/lib/grid.ts
type Key (line 22) | type Key = SortingModule.Key;
constant UNIT_SEPARATOR (line 25) | const UNIT_SEPARATOR = '\u001F';
constant RECORD_SEPARATOR (line 26) | const RECORD_SEPARATOR = '\u001E';
type Item (line 33) | type Item = any;
type Cell (line 43) | interface Cell {
constant MAX_OPTIMIZATION_ATTEMPTS (line 135) | const MAX_OPTIMIZATION_ATTEMPTS = 20;
constant ROUNDING_EPSILON (line 143) | const ROUNDING_EPSILON = 1e-6;
type ItemPosition (line 149) | type ItemPosition = {
type ComputeItemPosition (line 158) | type ComputeItemPosition =
constant STACK_ITEMS (line 235) | const STACK_ITEMS = stackItems('bottom', 'left');
type GridAlignment (line 240) | enum GridAlignment {
type FacetingFunction (line 289) | type FacetingFunction = (item: Item) => (Key | null);
class Grid (line 291) | class Grid {
method constructor (line 488) | constructor(items: Item[]) {
method clear (line 540) | clear() {
method arrange (line 556) | arrange() {
method positionItems (line 689) | positionItems() {
method facetItemsIntoCells (line 737) | facetItemsIntoCells() {
method eachItem (line 763) | eachItem(callback: (item: Item) => any) {
method eachCell (line 775) | eachCell(callback: (cell: Cell) => any) {
method getCompoundKey (line 785) | getCompoundKey(verticalKey: Key, horizontalKey: Key) {
method getCell (line 795) | getCell(verticalKey: Key, horizontalKey: Key): Cell|null {
method getCells (line 803) | getCells() { return Object.keys(this.cells).map(key => this.cells[key]...
method getOrCreateCell (line 810) | getOrCreateCell(verticalKey: Key, horizontalKey: Key): Cell {
method getRow (line 827) | getRow(verticalKey: Key): Cell[] {
method getColumn (line 842) | getColumn(horizontalKey: Key): Cell[] {
method addVerticalKey (line 856) | addVerticalKey(verticalKey: Key) {
method addHorizontalKey (line 866) | addHorizontalKey(horizontalKey: Key) {
method computeOptimalCellAspectRatio (line 889) | computeOptimalCellAspectRatio(targetGridAspectRatio: number): number {
method computeGridAspectRatio (line 959) | computeGridAspectRatio(proposedCellAspectRatio: number): number {
method computeCellDimensions (line 1036) | computeCellDimensions(cellAspectRatio: number, itemCount: number): num...
FILE: facets_dive/lib/label.ts
type LabelContent (line 28) | interface LabelContent {
type LabelingFunction (line 44) | type LabelingFunction = (key: Key) => LabelContent;
FILE: facets_dive/lib/layout.ts
type Size (line 22) | interface Size {
type Rect (line 27) | interface Rect {
type Camera (line 38) | interface Camera {
class Layout (line 43) | class Layout {
method constructor (line 64) | constructor() {
method computeScale (line 74) | computeScale(): number {
method computeCamera (line 144) | computeCamera(): Camera {
method reducePaddingToFitWidth (line 180) | reducePaddingToFitWidth(rectWidth: number, minWidth: number) {
method reducePaddingToFitHeight (line 199) | reducePaddingToFitHeight(rectHeight: number, minHeight: number) {
FILE: facets_dive/lib/sorting.ts
type Key (line 28) | type Key = number | string;
function horizontalStringCompare (line 45) | function horizontalStringCompare(a: Key, b: Key): number {
function verticalStringCompare (line 108) | function verticalStringCompare(a: Key, b: Key): number {
function numberCompare (line 161) | function numberCompare(a: Key, b: Key): number {
FILE: facets_dive/lib/sprite-atlas.ts
type SpriteImageData (line 25) | interface SpriteImageData {
type DrawJob (line 46) | interface DrawJob {
constant DEFAULT_DRAW_TIMEOUT (line 78) | const DEFAULT_DRAW_TIMEOUT = 50;
constant DEFAULT_WAIT_TIMEOUT (line 85) | const DEFAULT_WAIT_TIMEOUT = 1;
constant FONT_FAMILY (line 90) | const FONT_FAMILY = `'Roboto Mono', 'Consolas', 'Menlo', monospace`;
constant TEXT_PADDING (line 96) | const TEXT_PADDING = 0.125;
class SpriteAtlas (line 137) | class SpriteAtlas extends THREE.Texture {
method constructor (line 237) | constructor(capacity: number, imageWidth: number, imageHeight: number) {
method clearQueues (line 286) | clearQueues(): number {
method setSpriteImageData (line 297) | setSpriteImageData(
method setAtlasUrl (line 309) | setAtlasUrl(
method updatePropertiesToMatchImageDimensions (line 362) | updatePropertiesToMatchImageDimensions(width: number, height: number) {
method postRender (line 391) | postRender() {
method queueDraw (line 406) | queueDraw() {
method workOnDrawJobs (line 421) | workOnDrawJobs() {
FILE: facets_dive/lib/sprite-material.ts
class SpriteMaterial (line 24) | class SpriteMaterial extends THREE.RawShaderMaterial {
method constructor (line 25) | constructor(defaultTexture: THREE.Texture, spriteAtlas: SpriteAtlas) {
method time (line 89) | public get time(): number {
method time (line 93) | public set time(time: number) {
method defaultTexture (line 97) | public get defaultTexture(): THREE.Texture {
method defaultTexture (line 101) | public set defaultTexture(defaultTexture: THREE.Texture) {
method spriteAtlas (line 105) | public get spriteAtlas(): SpriteAtlas {
method spriteAtlas (line 109) | public set spriteAtlas(spriteAtlas: SpriteAtlas) {
method updateAtlasUniforms (line 116) | public updateAtlasUniforms() {
method applyEasing (line 127) | applyEasing(t: number): number {
constant VERTEX_SHADER (line 180) | const VERTEX_SHADER = `
constant FRAGMENT_SHADER (line 272) | const FRAGMENT_SHADER = `
FILE: facets_dive/lib/sprite-mesh.ts
class Sprite (line 105) | class Sprite {
method constructor (line 119) | constructor(spriteMesh: SpriteMesh, spriteIndex: number) {
method spriteMesh (line 124) | public get spriteMesh(): SpriteMesh {
method spriteIndex (line 128) | public get spriteIndex(): number {
method x (line 132) | public get x(): number {
method x (line 136) | public set x(x: number) {
method y (line 140) | public get y(): number {
method y (line 144) | public set y(y: number) {
method z (line 148) | public get z(): number {
method z (line 152) | public set z(z: number) {
method r (line 156) | public get r(): number {
method r (line 160) | public set r(r: number) {
method g (line 164) | public get g(): number {
method g (line 168) | public set g(g: number) {
method b (line 172) | public get b(): number {
method b (line 176) | public set b(b: number) {
method a (line 180) | public get a(): number {
method a (line 184) | public set a(a: number) {
method opacity (line 188) | public get opacity(): number {
method opacity (line 192) | public set opacity(opacity: number) {
method timestamp (line 196) | public get timestamp(): number {
method timestamp (line 200) | public set timestamp(timestamp: number) {
method baseX (line 204) | public get baseX(): number {
method baseX (line 208) | public set baseX(baseX: number) {
method baseY (line 212) | public get baseY(): number {
method baseY (line 216) | public set baseY(baseY: number) {
method baseZ (line 220) | public get baseZ(): number {
method baseZ (line 224) | public set baseZ(baseZ: number) {
method baseR (line 228) | public get baseR(): number {
method baseR (line 232) | public set baseR(baseR: number) {
method baseG (line 236) | public get baseG(): number {
method baseG (line 240) | public set baseG(baseG: number) {
method baseB (line 244) | public get baseB(): number {
method baseB (line 248) | public set baseB(baseB: number) {
method baseA (line 252) | public get baseA(): number {
method baseA (line 256) | public set baseA(baseA: number) {
method baseOpacity (line 260) | public get baseOpacity(): number {
method baseOpacity (line 264) | public set baseOpacity(baseOpacity: number) {
method baseTimestamp (line 268) | public get baseTimestamp(): number {
method baseTimestamp (line 272) | public set baseTimestamp(baseTimestamp: number) {
method textureIndex (line 276) | public get textureIndex(): number {
method textureIndex (line 280) | public set textureIndex(textureIndex: number) {
method baseTextureIndex (line 284) | public get baseTextureIndex(): number {
method baseTextureIndex (line 288) | public set baseTextureIndex(baseTextureIndex: number) {
method textureTimestamp (line 292) | public get textureTimestamp(): number {
method textureTimestamp (line 296) | public set textureTimestamp(textureTimestamp: number) {
method baseTextureTimestamp (line 300) | public get baseTextureTimestamp(): number {
method baseTextureTimestamp (line 304) | public set baseTextureTimestamp(baseTextureTimestamp: number) {
method rebase (line 314) | rebase(timestamp?: number) {
method setSpriteImageData (line 323) | setSpriteImageData(imageData: SpriteImageData, callback?: () => any) {
method switchTextures (line 330) | switchTextures(startTimestamp: number, endTimestamp: number) {
constant VERTICES_PER_SPRITE (line 341) | const VERTICES_PER_SPRITE = 4;
constant POSITIONS_PER_SPRITE (line 344) | const POSITIONS_PER_SPRITE = 12;
constant COLORS_PER_SPRITE (line 350) | const COLORS_PER_SPRITE = 16;
constant FACE_INDICES_PER_SPRITE (line 356) | const FACE_INDICES_PER_SPRITE = 6;
constant DEFAULT_TEXTURE_INDEX (line 361) | const DEFAULT_TEXTURE_INDEX = 0;
constant SPRITE_TEXTURE_INDEX (line 362) | const SPRITE_TEXTURE_INDEX = 1;
class SpriteMesh (line 364) | class SpriteMesh extends THREE.Mesh {
method constructor (line 666) | constructor(capacity: number, imageWidth = 32, imageHeight = 32) {
method createSprite (line 822) | createSprite() {
method time (line 826) | public get time(): number {
method time (line 830) | public set time(time: number) {
method createDefaultTextureCanvas (line 837) | createDefaultTextureCanvas() {
method getX (line 858) | getX(spriteIndex: number) {
method setX (line 866) | setX(spriteIndex: number, x: number) {
method getY (line 878) | getY(spriteIndex: number) {
method setY (line 886) | setY(spriteIndex: number, y: number) {
method getZ (line 898) | getZ(spriteIndex: number) {
method setZ (line 906) | setZ(spriteIndex: number, z: number) {
method getR (line 918) | getR(spriteIndex: number) {
method setR (line 926) | setR(spriteIndex: number, r: number) {
method getG (line 938) | getG(spriteIndex: number) {
method setG (line 946) | setG(spriteIndex: number, g: number) {
method getB (line 958) | getB(spriteIndex: number) {
method setB (line 966) | setB(spriteIndex: number, b: number) {
method getA (line 978) | getA(spriteIndex: number) {
method setA (line 986) | setA(spriteIndex: number, a: number) {
method getBaseX (line 998) | getBaseX(spriteIndex: number) {
method setBaseX (line 1006) | setBaseX(spriteIndex: number, baseX: number) {
method getBaseY (line 1018) | getBaseY(spriteIndex: number) {
method setBaseY (line 1026) | setBaseY(spriteIndex: number, baseY: number) {
method getBaseZ (line 1038) | getBaseZ(spriteIndex: number) {
method setBaseZ (line 1046) | setBaseZ(spriteIndex: number, baseZ: number) {
method getBaseR (line 1058) | getBaseR(spriteIndex: number) {
method setBaseR (line 1066) | setBaseR(spriteIndex: number, baseR: number) {
method getBaseG (line 1078) | getBaseG(spriteIndex: number) {
method setBaseG (line 1086) | setBaseG(spriteIndex: number, baseG: number) {
method getBaseB (line 1098) | getBaseB(spriteIndex: number) {
method setBaseB (line 1106) | setBaseB(spriteIndex: number, baseB: number) {
method getBaseA (line 1118) | getBaseA(spriteIndex: number) {
method setBaseA (line 1126) | setBaseA(spriteIndex: number, baseA: number) {
method getOpacity (line 1138) | getOpacity(spriteIndex: number) {
method setOpacity (line 1146) | setOpacity(spriteIndex: number, opacity: number) {
method getBaseOpacity (line 1158) | getBaseOpacity(spriteIndex: number) {
method setBaseOpacity (line 1166) | setBaseOpacity(spriteIndex: number, baseOpacity: number) {
method getTimestamp (line 1178) | getTimestamp(spriteIndex: number) {
method setTimestamp (line 1187) | setTimestamp(spriteIndex: number, timestamp: number) {
method getBaseTimestamp (line 1200) | getBaseTimestamp(spriteIndex: number) {
method setBaseTimestamp (line 1209) | setBaseTimestamp(spriteIndex: number, baseTimestamp: number) {
method getTextureIndex (line 1222) | getTextureIndex(spriteIndex: number) {
method setTextureIndex (line 1230) | setTextureIndex(spriteIndex: number, textureIndex: number) {
method getBaseTextureIndex (line 1242) | getBaseTextureIndex(spriteIndex: number) {
method setBaseTextureIndex (line 1250) | setBaseTextureIndex(spriteIndex: number, baseTextureIndex: number) {
method getTextureTimestamp (line 1262) | getTextureTimestamp(spriteIndex: number) {
method setTextureTimestamp (line 1271) | setTextureTimestamp(spriteIndex: number, textureTimestamp: number) {
method getBaseTextureTimestamp (line 1284) | getBaseTextureTimestamp(spriteIndex: number) {
method setBaseTextureTimestamp (line 1293) | setBaseTextureTimestamp(spriteIndex: number, baseTextureTimestamp: num...
method rebase (line 1316) | rebase(spriteIndex: number, timestamp?: number) {
method setSpriteImageData (line 1372) | setSpriteImageData(
method switchTextures (line 1381) | switchTextures(
method findSprites (line 1401) | findSprites(x: number, y: number): number[] {
constant DOT_SVG (line 1418) | const DOT_SVG = `
FILE: facets_dive/lib/stats.ts
function getAllKeys (line 28) | function getAllKeys(items: any[]|null): string[] {
class FieldStats (line 54) | class FieldStats {
method isNumeric (line 177) | isNumeric(): boolean {
method isInteger (line 187) | isInteger(): boolean {
method addValue (line 194) | addValue(value: number|string) {
method incorporateNumberValue (line 220) | private incorporateNumberValue(value: number) {
method incorporateStringValue (line 236) | private incorporateStringValue(hashKey: string, value: string) {
function getStats (line 286) | function getStats(items: any[]|null): {[field: string]: FieldStats} {
FILE: facets_dive/lib/string-format.ts
constant DEFAULT_TRUNCATE_REPLACEMENT_STRING (line 21) | const DEFAULT_TRUNCATE_REPLACEMENT_STRING = '...';
constant MIN_TRUNCATE_PREFIX_LENGTH (line 27) | const MIN_TRUNCATE_PREFIX_LENGTH = 30;
constant MIN_TRUNCATE_SUFFIX_LENGTH (line 28) | const MIN_TRUNCATE_SUFFIX_LENGTH = 30;
constant MIN_TRUNCATE_CONTENT_LENGTH (line 29) | const MIN_TRUNCATE_CONTENT_LENGTH = 5;
constant MIN_TRUNCATE_TOTAL_LENGTH (line 30) | const MIN_TRUNCATE_TOTAL_LENGTH = MIN_TRUNCATE_PREFIX_LENGTH +
function breakAfterNonWords (line 37) | function breakAfterNonWords(text: string): string {
function truncateLongString (line 44) | function truncateLongString(text: string, replacement?: string): string {
FILE: facets_dive/lib/test/grid_test.ts
type Crayon (line 23) | interface Crayon {
type Item (line 82) | type Item = {name: string, x?: number, y?: number};
type Item (line 133) | type Item = {name: string, row: number, col: number};
FILE: facets_dive/lib/test/wordtree_test.ts
function generateValueHash (line 22) | function generateValueHash(values: any[]) {
FILE: facets_dive/lib/text.ts
type HorizontalAlign (line 21) | enum HorizontalAlign {
type VerticalAlign (line 27) | enum VerticalAlign {
type FitTextInBoxOptions (line 36) | interface FitTextInBoxOptions {
constant FIT_TEXT_IN_BOX_DEFAULT_OPTIONS (line 83) | const FIT_TEXT_IN_BOX_DEFAULT_OPTIONS = {
constant MAX_ATTEMPTS (line 97) | const MAX_ATTEMPTS = 20;
constant EPSILON (line 105) | const EPSILON = 0.01;
type TextSpecs (line 116) | interface TextSpecs {
type Segment (line 127) | interface Segment {
class TextFitter (line 137) | class TextFitter {
method constructor (line 143) | constructor(options: FitTextInBoxOptions) {
method fit (line 159) | fit(text: string): TextSpecs {
method split (line 227) | split(text: string) {
method computeTextRect (line 257) | computeTextRect(segments: Segment[], proposedWidth: number) {
method computeCutoff (line 323) | computeCutoff(segments: Segment[], total: number, max: number) {
method wrapLines (line 384) | wrapLines(segments: Segment[], cutoff: number) {
FILE: facets_dive/lib/wordtree.ts
constant MAX_WORD_TREE_LEVEL (line 52) | const MAX_WORD_TREE_LEVEL = 100;
constant WORD_MATCH_REGEX (line 63) | const WORD_MATCH_REGEX = /\b[-'\w]+\b/g;
type WordFrequencyCounts (line 68) | interface WordFrequencyCounts { [word: string]: number; }
type ValueHash (line 75) | interface ValueHash {
function getHashKey (line 105) | function getHashKey(value: any): string {
type WordTreeNode (line 113) | interface WordTreeNode {
type WordTree (line 167) | interface WordTree {
function splitIntoWords (line 193) | function splitIntoWords(str: string): string[] {
function getTopWord (line 203) | function getTopWord(node: WordTreeNode): string|null {
function generateWordTree (line 264) | function generateWordTree(valueHash: ValueHash) {
FILE: facets_overview/common/feature_statistics_generator.ts
type DataValue (line 30) | type DataValue = number|string;
type DataPoint (line 31) | type DataPoint = {[feature: string]: DataValue|DataValue[]};
class FeatureCollector (line 33) | class FeatureCollector {
type DataForStatsProto (line 45) | interface DataForStatsProto {
function getStatsProto (line 56) | function getStatsProto(datasets: DataForStatsProto[]):
function generateStats (line 74) | function generateStats(items?: DataPoint[]):
function isInteger (line 142) | function isInteger(n: number) {
function statsFromFeatures (line 146) | function statsFromFeatures(
function createNumStats (line 176) | function createNumStats(
function getQuantileHistogram (line 245) | function getQuantileHistogram(hist: Histogram, numVals: number[]) {
function quantile (line 261) | function quantile(nums: number[], percentile: number): number {
function createStringStats (line 275) | function createStringStats(
function createCommonStats (line 318) | function createCommonStats(counts: number[], numExamples: number,
FILE: facets_overview/common/overview_data_model.ts
class OverviewDataModel (line 31) | class OverviewDataModel {
method constructor (line 32) | constructor(private data: DatasetFeatureStatisticsList) {
method makeFeatureBySpecList (line 51) | private makeFeatureBySpecList(): string[][] {
method getNonEmptyFeatureSpecLists (line 68) | getNonEmptyFeatureSpecLists(): utils.FeatureSpecAndList[] {
method getFeatureSpecForFeature (line 84) | getFeatureSpecForFeature(feature: string): utils.FeatureSpec {
method getDatasetFeatureStatistics (line 120) | getDatasetFeatureStatistics(): DatasetFeatureStatisticsList {
method getColorScale (line 128) | getColorScale(): Plottable.Scales.Color {
method getDatasetNames (line 135) | getDatasetNames(): string[] {
method getDataset (line 146) | getDataset(name: string): DatasetFeatureStatistics|null {
method getFeature (line 161) | getFeature(featureName: string|null,
method getExtraHistogramNames (line 186) | getExtraHistogramNames(features: FeatureNameStatistics[]): string[] {
method getFeatureCommonStats (line 231) | getFeatureCommonStats(featureName: string|null,
method getFeatureNames (line 243) | getFeatureNames(datasetName: string|null): string[]|null {
method getFeatureIndex (line 260) | getFeatureIndex(datasetName: string, featureName: string): number|null {
method getUniqueFeatures (line 281) | getUniqueFeatures(): FeatureNameStatistics[] {
method getNumUniqueFeaturesByType (line 297) | getNumUniqueFeaturesByType(numeric: boolean): number {
method featureHasSingleValue (line 306) | featureHasSingleValue(feature: FeatureNameStatistics|null): boolean {
method featureAcrossAllDatasetsHasSingleValue (line 331) | featureAcrossAllDatasetsHasSingleValue(featureName: string|null): bool...
method getFeatureSingleValue (line 353) | getFeatureSingleValue(stats: FeatureNameStatistics|null): string {
method getDatasetHistogramsForFeature (line 381) | getDatasetHistogramsForFeature(featureName: string):
method doesContainWeightedStats (line 465) | doesContainWeightedStats(): boolean {
method doesContainCustomStats (line 472) | doesContainCustomStats(): boolean {
method doesContainFeatureListLengthData (line 479) | doesContainFeatureListLengthData(): boolean {
method getChartAlpha (line 487) | getChartAlpha() {
method getChartColorString (line 492) | getChartColorString(datasetIndex: number) {
FILE: facets_overview/common/plottable_helpers.d.ts
class PointerInteraction (line 19) | class PointerInteraction extends Plottable.Interactions.Pointer {}
FILE: facets_overview/common/plottable_helpers.js
function getHtmlElementAncestors (line 30) | function getHtmlElementAncestors(elem) {
function getCumulativeTransform (line 53) | function getCumulativeTransform(element) {
class CustomTranslator (line 86) | class CustomTranslator extends Plottable.Utils.Translator {
method computePosition (line 87) | computePosition(clientX, clientY) {
class MouseDispatcher (line 104) | class MouseDispatcher extends Plottable.Dispatchers.Mouse {
method constructor (line 105) | constructor(component) {
method getDispatcher (line 114) | static getDispatcher(component) {
class TouchDispatcher (line 126) | class TouchDispatcher extends Plottable.Dispatchers.Touch {
method constructor (line 127) | constructor(component) {
method getDispatcher (line 136) | static getDispatcher(component) {
class PointerInteraction (line 148) | class PointerInteraction extends Plottable.Interactions.Pointer {
method _anchor (line 149) | _anchor(component) {
FILE: facets_overview/common/utils.ts
type GenericHistogram (line 27) | type GenericHistogram = Histogram|RankHistogram;
type GenericHistogramBucket (line 28) | type GenericHistogramBucket = Histogram.Bucket|RankHistogram.Bucket;
class QuantileInfo (line 33) | class QuantileInfo {
class HistogramForDataset (line 42) | class HistogramForDataset {
method constructor (line 46) | constructor(
class FeatureSelection (line 90) | class FeatureSelection {
method constructor (line 91) | constructor(
method clear (line 96) | clear() {
method equals (line 103) | equals(rhs: FeatureSelection): boolean {
class FeatureSelectionArrayEntry (line 113) | class FeatureSelectionArrayEntry {
type FeatureSelectionMap (line 118) | type FeatureSelectionMap = {
function getNormalizedEntropy (line 125) | function getNormalizedEntropy(buckets: GenericHistogramBucket[]):
function roundToPlaces (line 148) | function roundToPlaces(num: number, numPlaces: number): number {
function getBuckets (line 160) | function getBuckets(
function getHistKey (line 174) | function getHistKey(weighted?: boolean, chartType?: string): string {
function getTotalCount (line 185) | function getTotalCount(buckets: GenericHistogramBucket[]): number {
function getTotalCounts (line 194) | function getTotalCounts(
function getAllLabels (line 204) | function getAllLabels(datasetBuckets: GenericHistogramBucket[][]):
function getPrintableLabel (line 223) | function getPrintableLabel(label: string|null|undefined): string {
function quoteIfNumber (line 234) | function quoteIfNumber(label: string): string {
function getNumberFromField (line 243) | function getNumberFromField(value: number|string|null|
function getRatioMissingAndZero (line 258) | function getRatioMissingAndZero(stats: FeatureNameStatistics|
function getHistogramDistance (line 310) | function getHistogramDistance(histograms: HistogramForDataset[]):
function stepOfChiSquaredForShape (line 406) | function stepOfChiSquaredForShape(
function filteredElementCountString (line 421) | function filteredElementCountString(
function stringFromFeatureType (line 433) | function stringFromFeatureType(type: FeatureNameStatistics.Type):
function containsNumericStats (line 452) | function containsNumericStats(feature: FeatureNameStatistics) {
function isFeatureTypeNumeric (line 457) | function isFeatureTypeNumeric(type: FeatureNameStatistics.Type) {
function cleanProto (line 469) | function cleanProto(datasets: DatasetFeatureStatisticsList):
function isProtoClean (line 529) | function isProtoClean(datasets: DatasetFeatureStatisticsList): boolean {
function containsWeightedStats (line 575) | function containsWeightedStats(datasets: DatasetFeatureStatisticsList):
function containsCustomStats (line 599) | function containsCustomStats(datasets: DatasetFeatureStatisticsList):
function containsFeatureListLengthData (line 618) | function containsFeatureListLengthData(
function hasWeightedHistogram (line 634) | function hasWeightedHistogram(hists: HistogramForDataset[]): boolean {
function hasQuantiles (line 647) | function hasQuantiles(hists: HistogramForDataset[]): boolean {
function hasListQuantiles (line 660) | function hasListQuantiles(hists: HistogramForDataset[]): boolean {
function getTotalNumberOfValues (line 676) | function getTotalNumberOfValues(stats: CommonStatistics|null): number {
type FeatureSpec (line 696) | type FeatureSpec = number;
constant FS_SCALAR_INT (line 697) | const FS_SCALAR_INT = 0;
constant FS_FIXED_LEN_INTS (line 698) | const FS_FIXED_LEN_INTS = 1;
constant FS_VAR_LEN_INTS (line 699) | const FS_VAR_LEN_INTS = 2;
constant FS_SCALAR_FLOAT (line 700) | const FS_SCALAR_FLOAT = 3;
constant FS_FIXED_LEN_FLOATS (line 701) | const FS_FIXED_LEN_FLOATS = 4;
constant FS_VAR_LEN_FLOATS (line 702) | const FS_VAR_LEN_FLOATS = 5;
constant FS_SCALAR_STR (line 703) | const FS_SCALAR_STR = 6;
constant FS_FIXED_LEN_STRS (line 704) | const FS_FIXED_LEN_STRS = 7;
constant FS_VAR_LEN_STRS (line 705) | const FS_VAR_LEN_STRS = 8;
constant FS_SCALAR_BYTES (line 706) | const FS_SCALAR_BYTES = 9;
constant FS_FIXED_LEN_BYTES (line 707) | const FS_FIXED_LEN_BYTES = 10;
constant FS_VAR_LEN_BYTES (line 708) | const FS_VAR_LEN_BYTES = 11;
constant FS_SCALAR_STRUCT (line 709) | const FS_SCALAR_STRUCT = 12;
constant FS_FIXED_LEN_STRUCT (line 710) | const FS_FIXED_LEN_STRUCT = 13;
constant FS_VAR_LEN_STRUCT (line 711) | const FS_VAR_LEN_STRUCT = 14;
constant FS_UNKNOWN (line 712) | const FS_UNKNOWN = 15;
constant FS_NUM_VALUES (line 713) | const FS_NUM_VALUES = 16;
function featureSpecToString (line 718) | function featureSpecToString(spec: number) {
function updateSpec (line 759) | function updateSpec(spec: FeatureSpec, newSpec: FeatureSpec) {
function getSpecFromFeatureStats (line 793) | function getSpecFromFeatureStats(
class FeatureSpecAndList (line 832) | class FeatureSpecAndList {
class BucketsForDataset (line 841) | class BucketsForDataset {
class ValueAndCounts (line 851) | class ValueAndCounts {
function getValueAndCountsArray (line 868) | function getValueAndCountsArray(chartData: BucketsForDataset[]):
function getValueAndCountsArrayWithLabels (line 915) | function getValueAndCountsArrayWithLabels(
type ChartType (line 955) | enum ChartType {
constant CHART_SELECTION_STANDARD (line 965) | const CHART_SELECTION_STANDARD = 'Standard';
constant CHART_SELECTION_QUANTILES (line 967) | const CHART_SELECTION_QUANTILES = 'Quantiles';
constant CHART_SELECTION_LIST_QUANTILES (line 970) | const CHART_SELECTION_LIST_QUANTILES = 'Value list length';
constant CHART_SELECTION_FEATURE_LIST_LENGTH_QUANTILES (line 974) | const CHART_SELECTION_FEATURE_LIST_LENGTH_QUANTILES =
function chartSelectionHasQuantiles (line 983) | function chartSelectionHasQuantiles(chartSelection: string) {
function determineChartTypeForData (line 992) | function determineChartTypeForData(
constant ERROR_CLASS (line 1020) | const ERROR_CLASS = 'data-error ';
constant WEIGHTED_CLASS (line 1021) | const WEIGHTED_CLASS = 'data-weighted ';
constant CUSTOM_CLASS (line 1022) | const CUSTOM_CLASS = 'data-custom ';
constant EMPTY_CLASS (line 1023) | const EMPTY_CLASS = '';
class CssFormattedString (line 1029) | class CssFormattedString {
method constructor (line 1030) | constructor(
method append (line 1042) | append(moreInfo: CssFormattedString, connector?: string) {
function formatNumberWithSi (line 1065) | function formatNumberWithSi(num: number): string {
function formatFloatWithClass (line 1080) | function formatFloatWithClass(
function formatPercentageWithClass (line 1096) | function formatPercentageWithClass(
function formatIntWithClass (line 1114) | function formatIntWithClass(
function formatStringWithClass (line 1127) | function formatStringWithClass(
function getClassForCssFormattedString (line 1136) | function getClassForCssFormattedString(
function getLegendEntries (line 1147) | function getLegendEntries(
constant ZEROS_PERC_ERROR_THRESHOLD (line 1174) | const ZEROS_PERC_ERROR_THRESHOLD = 0.1;
constant NUM_NON_MISSING_ERROR_THRESHOLD (line 1175) | const NUM_NON_MISSING_ERROR_THRESHOLD = 0;
constant MISSING_PERC_ERROR_THRESHOLD (line 1176) | const MISSING_PERC_ERROR_THRESHOLD = 0.02;
function getCommonStats (line 1181) | function getCommonStats(featureStats?: FeatureNameStatistics):
function getCommonStatsEntries (line 1202) | function getCommonStatsEntries(commonstats: CommonStatistics|null) {
function getNumStatsEntries (line 1226) | function getNumStatsEntries(
function hasNans (line 1259) | function hasNans(numstats: NumericStatistics|null): boolean {
function getStringStatsEntries (line 1276) | function getStringStatsEntries(
function getBytesStatsEntries (line 1307) | function getBytesStatsEntries(bytesstats: BytesStatistics|null) {
function getCustomStatsEntries (line 1326) | function getCustomStatsEntries(stats: CustomStatistic[]|null) {
function getStatsEntries (line 1363) | function getStatsEntries(
function convertToPercentage (line 1393) | function convertToPercentage(chartData: GenericHistogramBucket[][]) {
FILE: facets_overview/components/facets_overview/facets-overview.ts
method _getFeatureSpecArray (line 55) | _getFeatureSpecArray(this: any, dataModel: OverviewDataModel):
method _getSpecCheckboxText (line 70) | _getSpecCheckboxText(specAndList: utils.FeatureSpecAndList): string {
method _getSpecCheckboxId (line 74) | _getSpecCheckboxId(specAndList: utils.FeatureSpecAndList): string {
method _setDatasetCheckboxes (line 77) | _setDatasetCheckboxes(dataModel: OverviewDataModel) {
method _datasetCheck (line 85) | _datasetCheck(this: any, event: any) {
method _getDatasetId (line 99) | _getDatasetId(index: number): string {
method _featureSpecCheck (line 103) | _featureSpecCheck(this: any, event: any) {
method _convertInputToProto (line 120) | _convertInputToProto(
method _update (line 162) | _update(this: any) {
method _getStats (line 227) | _getStats(
method _getSortFunction (line 236) | _getSortFunction(this: any, val: number, reverse: boolean) {
method _getFilter (line 249) | _getFilter(str: string) {
method _getNumericFeatureListItems (line 263) | _getNumericFeatureListItems(
method _getNonNumericFeatureListItems (line 270) | _getNonNumericFeatureListItems(
method _getFeatureListItems (line 277) | _getFeatureListItems(
method _getControlsWrapperClass (line 302) | _getControlsWrapperClass(dataModel: OverviewDataModel) {
method _getDatasetName (line 306) | _getDatasetName(dataModel: OverviewDataModel, index: number) {
method _getLegendBoxStyle (line 309) | _getLegendBoxStyle(dataModel: OverviewDataModel, index: number) {
method _getDatasets (line 312) | _getDatasets(dataModel: OverviewDataModel) {
method _hasMultipleDatasets (line 318) | _hasMultipleDatasets(dataModel: OverviewDataModel) {
method getStatsProto (line 324) | getStatsProto(datasets: fsg.DataForStatsProto[]): DatasetFeatureStatisti...
FILE: facets_overview/components/facets_overview_chart/facets-overview-chart.ts
method _updateData (line 69) | _updateData(this: any, chartData: utils.HistogramForDataset[]) {
method _updateChartSelection (line 74) | _updateChartSelection(this: any, chartSelection: string) {
method _hasWeightedHistogram (line 77) | _hasWeightedHistogram(chartData: utils.HistogramForDataset[]) {
method _hasQuantiles (line 80) | _hasQuantiles(chartData: utils.HistogramForDataset[]) {
method _isStringChart (line 83) | _isStringChart(chartType: utils.ChartType, chartSelection: string) {
method _disableLogCheckbox (line 90) | _disableLogCheckbox(showTable: boolean, chartSelection: string) {
method _render (line 93) | _render(
method _renderHistogramChart (line 137) | _renderHistogramChart(
method _renderQuantileChart (line 296) | _renderQuantileChart(
method _renderBarChart (line 420) | _renderBarChart(
method _renderCdfChart (line 505) | _renderCdfChart(
method _renderChart (line 658) | _renderChart<T>(
method _setSelection (line 773) | _setSelection(this: any, newSelection: utils.FeatureSelection) {
method _getBuckets (line 780) | _getBuckets(
method _getScale (line 785) | _getScale(logScale: boolean) {
method _chartAxisScaleFormatter (line 790) | _chartAxisScaleFormatter() {
method _getCountWithFloor (line 800) | _getCountWithFloor(
method _toggleShowTable (line 822) | _toggleShowTable(this: any, e: any) {
method _getChartClass (line 825) | _getChartClass(showData: boolean) {
method _getShowTableButtonText (line 828) | _getShowTableButtonText(showData: boolean) {
method _getChartSvgClass (line 831) | _getChartSvgClass(expandChart: boolean) {
method _getXAxisSvgClass (line 834) | _getXAxisSvgClass(expandChart: boolean) {
method _getTableDataClass (line 837) | _getTableDataClass(expandChart: boolean) {
method _rowClick (line 841) | _rowClick(this: any, e: any) {
method _getEntryRowValue (line 848) | _getEntryRowValue(entry: utils.ValueAndCounts) {
method _getEntryRowClass (line 851) | _getEntryRowClass(
method _getCountCellClass (line 864) | _getCountCellClass(showWeighted: boolean) {
FILE: facets_overview/components/facets_overview_table/facets-overview-table.ts
method _computeChartSelectionTypes (line 68) | _computeChartSelectionTypes(
method attached (line 85) | attached(this: any) {
method _chartSelectionHasQuantiles (line 93) | _chartSelectionHasQuantiles(chartType: string) {
method _getTitle (line 96) | _getTitle(numeric: boolean) {
method _getFeatureName (line 99) | _getFeatureName(feature: FeatureNameStatistics) {
method _hasCustomStats (line 102) | _hasCustomStats(dataModel: OverviewDataModel) {
method _hasMultipleDatasets (line 108) | _hasMultipleDatasets(dataModel: OverviewDataModel) {
method _getAllCustomStats (line 114) | _getAllCustomStats(
method _getDatasets (line 145) | _getDatasets(dataModel: OverviewDataModel) {
method _getStats (line 151) | _getStats(
method _getFeatureCountText (line 176) | _getFeatureCountText(
method _hasWeightedHistogram (line 184) | _hasWeightedHistogram(
method _getChartClass (line 193) | _getChartClass(expandCharts: boolean) {
method _getTableWrapperClass (line 200) | _getTableWrapperClass(features: FeatureNameStatistics[]) {
method _getTableRowClass (line 203) | _getTableRowClass(numeric: boolean) {
method _shouldShowDataset (line 206) | _shouldShowDataset(datasetIndex: number, datasetCheckboxes: boolean[]) {
FILE: facets_overview/facets_overview/base_feature_statistics_generator.py
class BaseFeatureStatisticsGenerator (line 30) | class BaseFeatureStatisticsGenerator(BaseGenericFeatureStatisticsGenerat...
method __init__ (line 33) | def __init__(self, fs_proto, datasets_proto, histogram_proto):
method ProtoFromTfRecordFiles (line 37) | def ProtoFromTfRecordFiles(self,
method _ParseExample (line 80) | def _ParseExample(self, example_features, example_feature_lists, entries,
method _GetEntries (line 168) | def _GetEntries(self,
method _GetTfRecordEntries (line 208) | def _GetTfRecordEntries(self, path, max_entries, is_sequence,
FILE: facets_overview/facets_overview/base_generic_feature_statistics_generator.py
class BaseGenericFeatureStatisticsGenerator (line 25) | class BaseGenericFeatureStatisticsGenerator(object):
method __init__ (line 28) | def __init__(self, fs_proto, datasets_proto, histogram_proto):
method ProtoFromDataFrames (line 33) | def ProtoFromDataFrames(self, dataframes,
method DtypeToType (line 64) | def DtypeToType(self, dtype):
method DtypeToNumberConverter (line 75) | def DtypeToNumberConverter(self, dtype):
method NdarrayToEntry (line 105) | def NdarrayToEntry(self, x):
method GetDatasetsProto (line 148) | def GetDatasetsProto(self, datasets, features=None,
method _PopulateQuantilesHistogram (line 308) | def _PopulateQuantilesHistogram(self, hist, nums):
FILE: facets_overview/facets_overview/feature_statistics_generator.py
class FeatureStatisticsGenerator (line 24) | class FeatureStatisticsGenerator(BaseFeatureStatisticsGenerator):
method __init__ (line 27) | def __init__(self):
FILE: facets_overview/facets_overview/feature_statistics_generator_test.py
class FeatureStatisticsGeneratorTest (line 21) | class FeatureStatisticsGeneratorTest(googletest.TestCase):
method setUp (line 23) | def setUp(self):
method testParseExampleInt (line 26) | def testParseExampleInt(self):
method testParseExampleMissingValueList (line 47) | def testParseExampleMissingValueList(self):
method _check_sequence_example_entries (line 71) | def _check_sequence_example_entries(self,
method testParseExampleSequenceContext (line 89) | def testParseExampleSequenceContext(self):
method testParseExampleSequenceFeatureList (line 104) | def testParseExampleSequenceFeatureList(self):
method testParseExampleSequenceFeatureListMultipleEntriesInner (line 118) | def testParseExampleSequenceFeatureListMultipleEntriesInner(self):
method testParseExampleSequenceFeatureListMultipleEntriesOuter (line 134) | def testParseExampleSequenceFeatureListMultipleEntriesOuter(self):
method testVaryingCountsAndMissing (line 150) | def testVaryingCountsAndMissing(self):
method testParseExampleStringsAndFloats (line 174) | def testParseExampleStringsAndFloats(self):
method testParseExamplesTypeMismatch (line 197) | def testParseExamplesTypeMismatch(self):
method testGetDatasetsProtoFromEntriesLists (line 212) | def testGetDatasetsProtoFromEntriesLists(self):
method testGetProtoNums (line 234) | def testGetProtoNums(self):
method testQuantiles (line 306) | def testQuantiles(self):
method testInfinityAndNan (line 337) | def testInfinityAndNan(self):
method testInfinitysOnly (line 383) | def testInfinitysOnly(self):
method testGetProtoStrings (line 411) | def testGetProtoStrings(self):
method testGetProtoMultipleDatasets (line 476) | def testGetProtoMultipleDatasets(self):
method testGetEntriesNoFiles (line 520) | def testGetEntriesNoFiles(self):
method get_example_iter (line 527) | def get_example_iter():
method testGetEntries_one (line 539) | def testGetEntries_one(self):
method testGetEntries_oneFile (line 545) | def testGetEntries_oneFile(self):
method testGetEntries_twoFiles (line 550) | def testGetEntries_twoFiles(self):
method testGetEntries_stopInSecondFile (line 556) | def testGetEntries_stopInSecondFile(self):
FILE: facets_overview/facets_overview/generic_feature_statistics_generator.py
class GenericFeatureStatisticsGenerator (line 24) | class GenericFeatureStatisticsGenerator(BaseGenericFeatureStatisticsGene...
method __init__ (line 27) | def __init__(self):
FILE: facets_overview/facets_overview/generic_feature_statistics_generator_test.py
class GenericFeatureStatisticsGeneratorTest (line 21) | class GenericFeatureStatisticsGeneratorTest(googletest.TestCase):
method setUp (line 23) | def setUp(self):
method testProtoFromDataFrames (line 26) | def testProtoFromDataFrames(self):
method testNdarrayToEntry (line 53) | def testNdarrayToEntry(self):
method testNdarrayToEntryTimeTypes (line 63) | def testNdarrayToEntryTimeTypes(self):
method testDTypeToType (line 77) | def testDTypeToType(self):
method testGetDatasetsProtoFromEntriesLists (line 95) | def testGetDatasetsProtoFromEntriesLists(self):
method testGetDatasetsProtoSequenceExampleHistogram (line 127) | def testGetDatasetsProtoSequenceExampleHistogram(self):
method testGetDatasetsProtoWithWhitelist (line 150) | def testGetDatasetsProtoWithWhitelist(self):
method testGetDatasetsProtoWithMaxHistigramLevelsCount (line 176) | def testGetDatasetsProtoWithMaxHistigramLevelsCount(self):
FILE: facets_overview/functional_tests/many/many_test.ts
function create (line 45) | function create(): DatasetFeatureStatisticsList {
FILE: facets_overview/functional_tests/simple/simple_test.ts
function create (line 46) | function create(): DatasetFeatureStatisticsList {
FILE: facets_overview/functional_tests/single/single_test.ts
function create (line 47) | function create(): DatasetFeatureStatisticsList {
FILE: facets_overview/functional_tests/single_feature/single_feature_test.ts
function create (line 44) | function create(): any {
FILE: facets_overview/functional_tests/stress/stress_test.ts
function create (line 46) | function create(): DatasetFeatureStatisticsList {
FILE: facets_overview/functional_tests/test_helpers/test_helpers.ts
function makeHistogram (line 26) | function makeHistogram(vals: number[][],
function makeCustomStatistic (line 41) | function makeCustomStatistic(name: string, value: {}): CustomStatistic {
function makeRankBucket (line 56) | function makeRankBucket(label: string,
function makeRankHistogram (line 68) | function makeRankHistogram(buckets: RankHistogram.Bucket[]):
function makeFreqValuePair (line 75) | function makeFreqValuePair(value: string,
function addWeightedStatsToNumFeature (line 83) | function addWeightedStatsToNumFeature(
function addWeightedStatsToStringFeature (line 102) | function addWeightedStatsToStringFeature(
FILE: facets_overview/functional_tests/weighted/weighted_test.ts
function create (line 45) | function create(): DatasetFeatureStatisticsList {
FILE: facets_overview/python/base_feature_statistics_generator.py
class BaseFeatureStatisticsGenerator (line 31) | class BaseFeatureStatisticsGenerator(BaseGenericFeatureStatisticsGenerat...
method __init__ (line 34) | def __init__(self, fs_proto, datasets_proto, histogram_proto):
method ProtoFromTfRecordFiles (line 38) | def ProtoFromTfRecordFiles(self,
method _ParseExample (line 85) | def _ParseExample(self, example_features, example_feature_lists, entries,
method _GetEntries (line 173) | def _GetEntries(self,
method _GetTfRecordEntries (line 213) | def _GetTfRecordEntries(self, path, max_entries, is_sequence,
FILE: facets_overview/python/base_generic_feature_statistics_generator.py
class BaseGenericFeatureStatisticsGenerator (line 26) | class BaseGenericFeatureStatisticsGenerator(object):
method __init__ (line 29) | def __init__(self, fs_proto, datasets_proto, histogram_proto):
method ProtoFromDataFrames (line 34) | def ProtoFromDataFrames(self, dataframes,
method DtypeToType (line 69) | def DtypeToType(self, dtype):
method DtypeToNumberConverter (line 80) | def DtypeToNumberConverter(self, dtype):
method NdarrayToEntry (line 110) | def NdarrayToEntry(self, x):
method GetDatasetsProto (line 153) | def GetDatasetsProto(self, datasets, features=None,
method _PopulateQuantilesHistogram (line 313) | def _PopulateQuantilesHistogram(self, hist, nums):
FILE: facets_overview/python/feature_statistics_generator.py
class FeatureStatisticsGenerator (line 25) | class FeatureStatisticsGenerator(BaseFeatureStatisticsGenerator):
method __init__ (line 28) | def __init__(self):
function ProtoFromTfRecordFiles (line 34) | def ProtoFromTfRecordFiles(files,
FILE: facets_overview/python/feature_statistics_generator_test.py
class FeatureStatisticsGeneratorTest (line 21) | class FeatureStatisticsGeneratorTest(googletest.TestCase):
method setUp (line 23) | def setUp(self):
method testParseExampleInt (line 26) | def testParseExampleInt(self):
method testParseExampleMissingValueList (line 47) | def testParseExampleMissingValueList(self):
method _check_sequence_example_entries (line 71) | def _check_sequence_example_entries(self,
method testParseExampleSequenceContext (line 89) | def testParseExampleSequenceContext(self):
method testParseExampleSequenceFeatureList (line 104) | def testParseExampleSequenceFeatureList(self):
method testParseExampleSequenceFeatureListMultipleEntriesInner (line 118) | def testParseExampleSequenceFeatureListMultipleEntriesInner(self):
method testParseExampleSequenceFeatureListMultipleEntriesOuter (line 134) | def testParseExampleSequenceFeatureListMultipleEntriesOuter(self):
method testVaryingCountsAndMissing (line 150) | def testVaryingCountsAndMissing(self):
method testParseExampleStringsAndFloats (line 174) | def testParseExampleStringsAndFloats(self):
method testParseExamplesTypeMismatch (line 197) | def testParseExamplesTypeMismatch(self):
method testGetDatasetsProtoFromEntriesLists (line 212) | def testGetDatasetsProtoFromEntriesLists(self):
method testGetProtoNums (line 234) | def testGetProtoNums(self):
method testQuantiles (line 306) | def testQuantiles(self):
method testInfinityAndNan (line 337) | def testInfinityAndNan(self):
method testInfinitysOnly (line 383) | def testInfinitysOnly(self):
method testGetProtoStrings (line 411) | def testGetProtoStrings(self):
method testGetProtoMultipleDatasets (line 476) | def testGetProtoMultipleDatasets(self):
method testGetEntriesNoFiles (line 520) | def testGetEntriesNoFiles(self):
method get_example_iter (line 527) | def get_example_iter():
method testGetEntries_one (line 539) | def testGetEntries_one(self):
method testGetEntries_oneFile (line 545) | def testGetEntries_oneFile(self):
method testGetEntries_twoFiles (line 550) | def testGetEntries_twoFiles(self):
method testGetEntries_stopInSecondFile (line 556) | def testGetEntries_stopInSecondFile(self):
FILE: facets_overview/python/generic_feature_statistics_generator.py
class GenericFeatureStatisticsGenerator (line 25) | class GenericFeatureStatisticsGenerator(BaseGenericFeatureStatisticsGene...
method __init__ (line 28) | def __init__(self):
function ProtoFromDataFrames (line 38) | def ProtoFromDataFrames(dataframes):
FILE: facets_overview/python/generic_feature_statistics_generator_test.py
class GenericFeatureStatisticsGeneratorTest (line 21) | class GenericFeatureStatisticsGeneratorTest(googletest.TestCase):
method setUp (line 23) | def setUp(self):
method testProtoFromDataFrames (line 26) | def testProtoFromDataFrames(self):
method testNdarrayToEntry (line 53) | def testNdarrayToEntry(self):
method testNdarrayToEntryTimeTypes (line 63) | def testNdarrayToEntryTimeTypes(self):
method testDTypeToType (line 77) | def testDTypeToType(self):
method testGetDatasetsProtoFromEntriesLists (line 95) | def testGetDatasetsProtoFromEntriesLists(self):
method testGetDatasetsProtoSequenceExampleHistogram (line 127) | def testGetDatasetsProtoSequenceExampleHistogram(self):
method testGetDatasetsProtoWithWhitelist (line 150) | def testGetDatasetsProtoWithWhitelist(self):
method testGetDatasetsProtoWithMaxHistigramLevelsCount (line 176) | def testGetDatasetsProtoWithMaxHistigramLevelsCount(self):
Copy disabled (too large)
Download .json
Condensed preview — 192 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (10,928K chars).
[
{
"path": ".gitignore",
"chars": 108,
"preview": "*~\n/bazel-*\n**/__pycache__\n**/.ipynb_checkpoints/\n**/*.swp\n**/dist/\n**/build/\n**/facets_overview.egg-info/\n\n"
},
{
"path": "AUTHORS",
"chars": 319,
"preview": "# This the official list of Bazel rules_closure authors for copyright purposes.\n# This file is distinct from the CONTRIB"
},
{
"path": "CONTRIBUTING.md",
"chars": 1450,
"preview": "Want to contribute? Great! First, read this page (including the small print at the end).\n\n### Before you contribute\nBefo"
},
{
"path": "CONTRIBUTORS",
"chars": 540,
"preview": "# People who have agreed to one of the CLAs and can contribute patches.\n# The AUTHORS file lists the copyright holders; "
},
{
"path": "LICENSE",
"chars": 11358,
"preview": "\n Apache License\n Version 2.0, January 2004\n "
},
{
"path": "README.md",
"chars": 6138,
"preview": "# Introduction\n\nThe facets project contains two visualizations for understanding and analyzing machine learning datasets"
},
{
"path": "WORKSPACE",
"chars": 4329,
"preview": "workspace(name = \"ai_google_pair_facets\")\n\nload(\"@bazel_tools//tools/build_defs/repo:http.bzl\", \"http_archive\")\n\n# Neede"
},
{
"path": "colab_facets.ipynb",
"chars": 4658,
"preview": "{\n \"nbformat\": 4,\n \"nbformat_minor\": 0,\n \"metadata\": {\n \"colab\": {\n \"name\": \"Facets Dive and Overview Colab E"
},
{
"path": "facets/BUILD",
"chars": 2512,
"preview": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@org_tensorflow_tensorboard//tensorboard/defs:web.bzl\", \"tf"
},
{
"path": "facets/colab.html",
"chars": 375,
"preview": "<link rel=\"import\" href=\"../facets-dive/components/facets-dive/facets-dive.html\">\n<link rel=\"import\" href=\"../facets-ove"
},
{
"path": "facets/visualizations.html",
"chars": 232,
"preview": "<link rel=\"import\" href=\"../../tf-imports/polymer.html\">\n<link rel=\"import\" href=\"../facets-overview/components/facets-o"
},
{
"path": "facets-dist/facets-jupyter.html",
"chars": 2310769,
"preview": "<!doctype html><script>define=undefined</script><!--\n@license\nCopyright 2019 The TensorFlow Authors. All Rights Reserved"
},
{
"path": "facets_atlasmaker/.gitignore",
"chars": 105,
"preview": "/bazel-*\n\n**/*.pyc\n\n# virtualenv\nENV*\n\n# test output dir\ntestoutput/*\noutputs/*\n\n# Utilities\nutils/*.csv\n"
},
{
"path": "facets_atlasmaker/BUILD",
"chars": 462,
"preview": "licenses([\"notice\"]) # Apache 2.0\n\npy_binary(\n name = \"atlasmaker\",\n srcs = [\"atlasmaker.py\"],\n srcs_version ="
},
{
"path": "facets_atlasmaker/README.md",
"chars": 5748,
"preview": "# Facets Atlasmaker\n\nAtlasmaker is a command line utility and library for creating sprite atlases. These atlases can be "
},
{
"path": "facets_atlasmaker/atlasmaker.py",
"chars": 9775,
"preview": "\"\"\"Main function for sprite atlas maker command line utility.\"\"\"\n\nfrom __future__ import absolute_import\nfrom __future__"
},
{
"path": "facets_atlasmaker/atlasmaker_io.py",
"chars": 8193,
"preview": "\"\"\"Utilities and wrappers for file and source catalog I/O.\"\"\"\n\nimport io\nimport json\nimport os\nimport time\nimport sys\nif"
},
{
"path": "facets_atlasmaker/atlasmaker_io_test.py",
"chars": 8245,
"preview": "\"\"\"Unit tests for IO utilities.\"\"\"\nimport io\nimport os\nimport shutil\nimport mock\nfrom absl.testing import absltest\nfrom "
},
{
"path": "facets_atlasmaker/convert.py",
"chars": 9763,
"preview": "\"\"\"Image conversion classes and methods.\n\nMethods for converting images as well as for creating a default image for use\n"
},
{
"path": "facets_atlasmaker/convert_test.py",
"chars": 17467,
"preview": "\"\"\"Unit tests for image conversion.\"\"\"\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __fut"
},
{
"path": "facets_atlasmaker/montage.py",
"chars": 7298,
"preview": "\"\"\"Utilities to combine converted images into atlas and to create manifest.\"\"\"\nimport math\nimport os\nfrom absl import lo"
},
{
"path": "facets_atlasmaker/montage_test.py",
"chars": 8453,
"preview": "\"\"\"Unit tests for montaging images to create sprite atlases.\"\"\"\nfrom absl.testing import absltest\nfrom PIL import Image\n"
},
{
"path": "facets_atlasmaker/parallelize.py",
"chars": 5076,
"preview": "\"\"\"Parallelize file fetch and conversion utilities and wrappers.\"\"\"\n\nfrom absl import logging\nfrom joblib import Paralle"
},
{
"path": "facets_atlasmaker/parallelize_test.py",
"chars": 7302,
"preview": "\"\"\"Tests for parallize.\"\"\"\nimport os\nfrom absl import logging\nfrom absl.testing import absltest\nfrom PIL import Image\nfr"
},
{
"path": "facets_atlasmaker/pylintrc",
"chars": 13136,
"preview": "[MASTER]\n\n# Specify a configuration file.\n#rcfile=\n\n# Python code to execute, usually for sys.path manipulation such as\n"
},
{
"path": "facets_atlasmaker/requirements.txt",
"chars": 47,
"preview": "absl-py\njoblib\nmock\nnose\npillow\npylint\nrequests"
},
{
"path": "facets_atlasmaker/testdata/attributions.txt",
"chars": 70,
"preview": "https://commons.wikimedia.org/wiki/File:Googleplex-Patio-Aug-2014.JPG\n"
},
{
"path": "facets_atlasmaker/testdata/testfiles_smalllist.csv",
"chars": 100,
"preview": "https://www.wikipedia/image1.png\nhttp://www.wordpress/testimage1.png\nhttp://www.npr.org/myimageA.jpg"
},
{
"path": "facets_atlasmaker/testdata/testfiles_smalllist_with_dups.csv",
"chars": 169,
"preview": "https://www.wikipedia/image1.png\nhttp://www.wordpress/testimage1.png\nhttp://www.wordpress/testimage1.png\nhttp://www.npr."
},
{
"path": "facets_atlasmaker/testdata/wikipedia_images_16.csv",
"chars": 2555,
"preview": "https://upload.wikimedia.org/wikipedia/commons/thumb/3/33/ARD-Hauptstadtstudio%2C_Berlin-Mitte%2C_Fassade%2C_170117%2C_a"
},
{
"path": "facets_atlasmaker/utils/BUILD",
"chars": 216,
"preview": "licenses([\"notice\"]) # Apache 2.0\n\npy_binary(\n name = \"wikipedia_sourcelist_generator\",\n srcs = [\"wikipedia_sourc"
},
{
"path": "facets_atlasmaker/utils/README.md",
"chars": 477,
"preview": "# Atlasmaker Utilities\n\nThis directory contains utilities that can be useful for testing or experimenting with Atlasmak"
},
{
"path": "facets_atlasmaker/utils/wikipedia_sourcelist_generator.py",
"chars": 6285,
"preview": "\"\"\"Script that grabs URLs of the desired N featured images from wikipedia.\n\nThis list can then be used as a test input t"
},
{
"path": "facets_atlasmaker/utils/wikipedia_sourcelist_generator_test.py",
"chars": 762,
"preview": "\"\"\"Unit tests for Wikipedia Sourcelist Generator.\"\"\"\nfrom absl import flags\nfrom absl.testing import absltest\nfrom absl."
},
{
"path": "facets_dive/Dive_demo.ipynb",
"chars": 5797855,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n "
},
{
"path": "facets_dive/README.md",
"chars": 16474,
"preview": "\nFacets Dive is a data visualization for interactively exploring large numbers of records at once—many thousands at a ti"
},
{
"path": "facets_dive/colab_dive_atlas_demo.ipynb",
"chars": 3214,
"preview": "{\n \"nbformat\": 4,\n \"nbformat_minor\": 0,\n \"metadata\": {\n \"colab\": {\n \"name\": \"colab_dive_atlas_demo.ipynb\",\n "
},
{
"path": "facets_dive/components/facets_dive/BUILD",
"chars": 2105,
"preview": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@org_tensorflow_tensorboard//tensorboard/defs:web.bzl\", \"tf"
},
{
"path": "facets_dive/components/facets_dive/facets-dive.html",
"chars": 6929,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_dive/components/facets_dive/facets-dive.ts",
"chars": 10878,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/components/facets_dive/test.html",
"chars": 1082,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_dive/components/facets_dive/test.ts",
"chars": 1553,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/components/facets_dive_controls/BUILD",
"chars": 2413,
"preview": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@org_tensorflow_tensorboard//tensorboard/defs:web.bzl\", \"tf"
},
{
"path": "facets_dive/components/facets_dive_controls/facets-dive-controls.html",
"chars": 9830,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_dive/components/facets_dive_controls/facets-dive-controls.ts",
"chars": 7852,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/components/facets_dive_controls/test.html",
"chars": 881,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_dive/components/facets_dive_controls/test.ts",
"chars": 904,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/components/facets_dive_info_card/BUILD",
"chars": 1990,
"preview": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@org_tensorflow_tensorboard//tensorboard/defs:web.bzl\", \"tf"
},
{
"path": "facets_dive/components/facets_dive_info_card/facets-dive-info-card.html",
"chars": 1428,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_dive/components/facets_dive_info_card/facets-dive-info-card.ts",
"chars": 1697,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/components/facets_dive_info_card/test.html",
"chars": 884,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_dive/components/facets_dive_info_card/test.ts",
"chars": 1246,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/components/facets_dive_legend/BUILD",
"chars": 2089,
"preview": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@org_tensorflow_tensorboard//tensorboard/defs:web.bzl\", \"tf"
},
{
"path": "facets_dive/components/facets_dive_legend/facets-dive-legend.html",
"chars": 4584,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_dive/components/facets_dive_legend/facets-dive-legend.ts",
"chars": 2272,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/components/facets_dive_legend/test.html",
"chars": 875,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_dive/components/facets_dive_legend/test.ts",
"chars": 896,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/components/facets_dive_vis/BUILD",
"chars": 2458,
"preview": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@org_tensorflow_tensorboard//tensorboard/defs:web.bzl\", \"tf"
},
{
"path": "facets_dive/components/facets_dive_vis/facets-dive-vis.html",
"chars": 2047,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_dive/components/facets_dive_vis/facets-dive-vis.ts",
"chars": 103245,
"preview": "/**\n * @license\n * Copyright 2018 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/components/facets_dive_vis/test.html",
"chars": 866,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_dive/components/facets_dive_vis/test.ts",
"chars": 1465,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/components/facets_dive_vis/typings.d.ts",
"chars": 889,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/demo/BUILD",
"chars": 1403,
"preview": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@org_tensorflow_tensorboard//tensorboard/defs:web.bzl\", \"tf"
},
{
"path": "facets_dive/demo/quickdraw.html",
"chars": 2183,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_dive/demo/quickdraw.ts",
"chars": 3959,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/lib/BUILD",
"chars": 2869,
"preview": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@org_tensorflow_tensorboard//tensorboard/defs:web.bzl\", \"tf"
},
{
"path": "facets_dive/lib/axis.html",
"chars": 690,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_dive/lib/axis.ts",
"chars": 8112,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/lib/bounded-object.html",
"chars": 612,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_dive/lib/bounded-object.ts",
"chars": 5094,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/lib/data-example.html",
"chars": 610,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_dive/lib/data-example.ts",
"chars": 1494,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/lib/grid.html",
"chars": 644,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_dive/lib/grid.ts",
"chars": 35889,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/lib/info-renderers.html",
"chars": 612,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_dive/lib/info-renderers.ts",
"chars": 1322,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/lib/label.html",
"chars": 645,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_dive/lib/label.ts",
"chars": 1328,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/lib/layout.html",
"chars": 604,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_dive/lib/layout.ts",
"chars": 7243,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/lib/sorting.html",
"chars": 605,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_dive/lib/sorting.ts",
"chars": 6469,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/lib/sprite-atlas.html",
"chars": 706,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_dive/lib/sprite-atlas.ts",
"chars": 16524,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/lib/sprite-material.html",
"chars": 717,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_dive/lib/sprite-material.ts",
"chars": 10012,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/lib/sprite-mesh.html",
"chars": 763,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_dive/lib/sprite-mesh.ts",
"chars": 50012,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/lib/stats.html",
"chars": 646,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_dive/lib/stats.ts",
"chars": 8767,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/lib/string-format.html",
"chars": 611,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_dive/lib/string-format.ts",
"chars": 1742,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/lib/test/BUILD",
"chars": 2250,
"preview": "package(\n default_testonly = True,\n default_visibility = [\"//visibility:public\"],\n)\n\nload(\"@io_bazel_rules_closure"
},
{
"path": "facets_dive/lib/test/axis_test.ts",
"chars": 844,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/lib/test/bounded-object_test.ts",
"chars": 5472,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/lib/test/externs.js",
"chars": 766,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/lib/test/grid_test.ts",
"chars": 28249,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/lib/test/layout_test.ts",
"chars": 6778,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/lib/test/sorting_test.ts",
"chars": 8717,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/lib/test/sprite-atlas_test.ts",
"chars": 3730,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/lib/test/sprite-material_test.ts",
"chars": 2415,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/lib/test/sprite-mesh_test.ts",
"chars": 12350,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/lib/test/stats_test.ts",
"chars": 13759,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/lib/test/string-format_test.ts",
"chars": 1664,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/lib/test/test.html",
"chars": 1725,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_dive/lib/test/text_test.ts",
"chars": 8934,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/lib/test/wordtree_test.ts",
"chars": 2954,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/lib/text.html",
"chars": 602,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_dive/lib/text.ts",
"chars": 14446,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_dive/lib/wordtree.html",
"chars": 606,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_dive/lib/wordtree.ts",
"chars": 11944,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_overview/Overview_demo.ipynb",
"chars": 3156,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n \"metadata\": {},\n \"outputs\": [],\n \"source\": "
},
{
"path": "facets_overview/README.md",
"chars": 10005,
"preview": "The example code shown in the below explanation can also be found in [this example Jupyter notebook](./Overview_demo.ipy"
},
{
"path": "facets_overview/common/BUILD",
"chars": 1177,
"preview": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@org_tensorflow_tensorboard//tensorboard/defs:web.bzl\", \"tf"
},
{
"path": "facets_overview/common/common_bundle.html",
"chars": 862,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_overview/common/feature_statistics_generator.ts",
"chars": 11506,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_overview/common/overview_data_model.ts",
"chars": 17337,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_overview/common/plottable_helpers.d.ts",
"chars": 757,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_overview/common/plottable_helpers.js",
"chars": 5766,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_overview/common/test/BUILD",
"chars": 2234,
"preview": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@io_bazel_rules_closure//closure:defs.bzl\", \"closure_js_lib"
},
{
"path": "facets_overview/common/test/externs.js",
"chars": 766,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_overview/common/test/feature_statistics_generator_test.ts",
"chars": 11786,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_overview/common/test/overview_data_model_test.ts",
"chars": 48535,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_overview/common/test/test.html",
"chars": 884,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_overview/common/test/test_bundle.html",
"chars": 769,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_overview/common/test/utils_test.ts",
"chars": 65164,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_overview/common/utils.ts",
"chars": 50505,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_overview/components/facets_overview/BUILD",
"chars": 1417,
"preview": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@org_tensorflow_tensorboard//tensorboard/defs:web.bzl\", \"tf"
},
{
"path": "facets_overview/components/facets_overview/facets-overview-filter-validator.html",
"chars": 1073,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_overview/components/facets_overview/facets-overview.html",
"chars": 7682,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_overview/components/facets_overview/facets-overview.ts",
"chars": 13869,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_overview/components/facets_overview_chart/BUILD",
"chars": 1487,
"preview": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@io_bazel_rules_closure//closure:defs.bzl\", \"closure_js_lib"
},
{
"path": "facets_overview/components/facets_overview_chart/externs.js",
"chars": 670,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_overview/components/facets_overview_chart/facets-overview-chart.html",
"chars": 4872,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_overview/components/facets_overview_chart/facets-overview-chart.ts",
"chars": 37257,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_overview/components/facets_overview_row_legend/BUILD",
"chars": 1076,
"preview": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@org_tensorflow_tensorboard//tensorboard/defs:web.bzl\", \"tf"
},
{
"path": "facets_overview/components/facets_overview_row_legend/facets-overview-row-legend.html",
"chars": 1746,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_overview/components/facets_overview_row_legend/facets-overview-row-legend.ts",
"chars": 1201,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_overview/components/facets_overview_row_stats/BUILD",
"chars": 1149,
"preview": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@org_tensorflow_tensorboard//tensorboard/defs:web.bzl\", \"tf"
},
{
"path": "facets_overview/components/facets_overview_row_stats/facets-overview-row-stats.html",
"chars": 1813,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_overview/components/facets_overview_row_stats/facets-overview-row-stats.ts",
"chars": 2057,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_overview/components/facets_overview_table/BUILD",
"chars": 1479,
"preview": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@org_tensorflow_tensorboard//tensorboard/defs:web.bzl\", \"tf"
},
{
"path": "facets_overview/components/facets_overview_table/facets-overview-table.html",
"chars": 7564,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_overview/components/facets_overview_table/facets-overview-table.ts",
"chars": 8347,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_overview/facets_overview/__init__.py",
"chars": 677,
"preview": "# Copyright 2017 Google Inc. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# "
},
{
"path": "facets_overview/facets_overview/base_feature_statistics_generator.py",
"chars": 9498,
"preview": "# Copyright 2017 Google Inc. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# "
},
{
"path": "facets_overview/facets_overview/base_generic_feature_statistics_generator.py",
"chars": 13756,
"preview": "# Copyright 2017 Google Inc. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# "
},
{
"path": "facets_overview/facets_overview/feature_statistics_generator.py",
"chars": 1290,
"preview": "# Copyright 2017 Google Inc. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# "
},
{
"path": "facets_overview/facets_overview/feature_statistics_generator_test.py",
"chars": 22511,
"preview": "# Copyright 2017 Google Inc. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# "
},
{
"path": "facets_overview/facets_overview/feature_statistics_pb2.py",
"chars": 9368,
"preview": "# Copyright 2023 Google Inc. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# "
},
{
"path": "facets_overview/facets_overview/generic_feature_statistics_generator.py",
"chars": 1277,
"preview": "# Copyright 2017 Google Inc. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# "
},
{
"path": "facets_overview/facets_overview/generic_feature_statistics_generator_test.py",
"chars": 8404,
"preview": "# Copyright 2017 Google Inc. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# "
},
{
"path": "facets_overview/functional_tests/many/BUILD",
"chars": 2111,
"preview": "package(\n default_testonly = True,\n default_visibility = [\"//visibility:public\"],\n)\n\nload(\"@org_tensorflow_tensorb"
},
{
"path": "facets_overview/functional_tests/many/index.html",
"chars": 1140,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_overview/functional_tests/many/many-test.html",
"chars": 959,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_overview/functional_tests/many/many_test.ts",
"chars": 2973,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_overview/functional_tests/simple/BUILD",
"chars": 2129,
"preview": "package(\n default_testonly = True,\n default_visibility = [\"//visibility:public\"],\n)\n\nload(\"@org_tensorflow_tensorb"
},
{
"path": "facets_overview/functional_tests/simple/index.html",
"chars": 1146,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_overview/functional_tests/simple/simple-test.html",
"chars": 962,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_overview/functional_tests/simple/simple_test.ts",
"chars": 3656,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_overview/functional_tests/single/BUILD",
"chars": 2129,
"preview": "package(\n default_testonly = True,\n default_visibility = [\"//visibility:public\"],\n)\n\nload(\"@org_tensorflow_tensorb"
},
{
"path": "facets_overview/functional_tests/single/index.html",
"chars": 1147,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_overview/functional_tests/single/single-test.html",
"chars": 1160,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_overview/functional_tests/single/single_test.ts",
"chars": 3442,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_overview/functional_tests/single_feature/BUILD",
"chars": 2201,
"preview": "package(\n default_testonly = True,\n default_visibility = [\"//visibility:public\"],\n)\n\nload(\"@org_tensorflow_tensorb"
},
{
"path": "facets_overview/functional_tests/single_feature/index.html",
"chars": 1171,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_overview/functional_tests/single_feature/single-feature-test.html",
"chars": 978,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_overview/functional_tests/single_feature/single_feature_test.ts",
"chars": 1793,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_overview/functional_tests/stress/BUILD",
"chars": 2129,
"preview": "package(\n default_testonly = True,\n default_visibility = [\"//visibility:public\"],\n)\n\nload(\"@org_tensorflow_tensorb"
},
{
"path": "facets_overview/functional_tests/stress/index.html",
"chars": 1153,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_overview/functional_tests/stress/stress-test.html",
"chars": 962,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_overview/functional_tests/stress/stress_test.ts",
"chars": 2411,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_overview/functional_tests/test_helpers/BUILD",
"chars": 1151,
"preview": "package(\n default_testonly = True,\n default_visibility = [\"//visibility:public\"],\n)\n\nload(\"@io_bazel_rules_closure"
},
{
"path": "facets_overview/functional_tests/test_helpers/externs.js",
"chars": 671,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_overview/functional_tests/test_helpers/test_helpers.ts",
"chars": 3973,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_overview/functional_tests/test_helpers/test_helpers_bundle.html",
"chars": 610,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_overview/functional_tests/weighted/BUILD",
"chars": 2147,
"preview": "package(\n default_testonly = True,\n default_visibility = [\"//visibility:public\"],\n)\n\nload(\"@org_tensorflow_tensorb"
},
{
"path": "facets_overview/functional_tests/weighted/index.html",
"chars": 1152,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_overview/functional_tests/weighted/weighted-test.html",
"chars": 966,
"preview": "<!--\n@license\nCopyright 2017 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not us"
},
{
"path": "facets_overview/functional_tests/weighted/weighted_test.ts",
"chars": 3145,
"preview": "/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * y"
},
{
"path": "facets_overview/proto/BUILD",
"chars": 779,
"preview": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@io_bazel_rules_closure//closure:defs.bzl\", \"closure_js_pro"
},
{
"path": "facets_overview/proto/feature_statistics.proto",
"chars": 11289,
"preview": "// Copyright 2017 Google Inc. All Rights Reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");"
},
{
"path": "facets_overview/python/__init__.py",
"chars": 677,
"preview": "# Copyright 2017 Google Inc. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# "
},
{
"path": "facets_overview/python/base_feature_statistics_generator.py",
"chars": 9640,
"preview": "# Copyright 2017 Google Inc. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# "
},
{
"path": "facets_overview/python/base_generic_feature_statistics_generator.py",
"chars": 13914,
"preview": "# Copyright 2017 Google Inc. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# "
},
{
"path": "facets_overview/python/feature_statistics_generator.py",
"chars": 2728,
"preview": "# Copyright 2017 Google Inc. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# "
},
{
"path": "facets_overview/python/feature_statistics_generator_test.py",
"chars": 22495,
"preview": "# Copyright 2017 Google Inc. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# "
},
{
"path": "facets_overview/python/feature_statistics_pb2.py",
"chars": 9368,
"preview": "# Copyright 2023 Google Inc. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# "
},
{
"path": "facets_overview/python/generic_feature_statistics_generator.py",
"chars": 2041,
"preview": "# Copyright 2017 Google Inc. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# "
},
{
"path": "facets_overview/python/generic_feature_statistics_generator_test.py",
"chars": 8388,
"preview": "# Copyright 2017 Google Inc. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# "
},
{
"path": "facets_overview/setup.py",
"chars": 1325,
"preview": "# Copyright 2018 The TensorFlow Authors. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"L"
}
]
About this extraction
This page contains the full source code of the PAIR-code/facets GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 192 files (8.8 MB), approximately 2.3M tokens, and a symbol index with 854 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.