Import Cobalt 22.master.0.305678
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 174d63a..cc6dd4e 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -38,7 +38,12 @@
language: system
types: [c++]
args: [--verbose=4, --quiet]
- exclude: '(^cobalt/bindings/(templates|generated)/|tests?.(cc|h)$)'
+ exclude: |
+ (?x)(
+ ^cobalt/bindings/(templates|generated)/|
+ ^starboard/shared/uikit/.*\.h$|
+ tests?\.(cc|h)$
+ )
- id: cpplint_test
name: cpplint_test
entry: cpplint
@@ -46,6 +51,7 @@
types: [c++]
args: [--verbose=5, --quiet]
files: '.*tests?.(cc|h)$'
+ exclude: '^starboard/shared/uikit/.*\.h$'
- id: yapf
name: yapf
description: Run yapf (the python formatter) in-place on changed files.
@@ -141,9 +147,17 @@
entry: python precommit_hooks/internal_file_check_wrapper.py
language: python
types: [text]
- exclude: 'EXCLUDE\.FILES(\.RECURSIVE)?$'
+ # TODO: Remove docker-compose-windows.yml after internal check evaluates
+ # properly on it.
+ exclude: '(^docker-compose-windows.yml|EXCLUDE\.FILES(\.RECURSIVE)?)$'
- id: gn-format
name: GN format
entry: gn format
language: system
files: '.*\.gni?$'
+ - id: gyp-changes
+ name: Disallow GYP Changes
+ entry: echo -e "GYP is deprecated and will not be included past Cobalt 22. Use GN.\n"
+ language: system
+ files: '\.gypi?$'
+ verbose: true
diff --git a/BUILD.gn b/BUILD.gn
index 6900b8c..7a4b5d1 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -12,14 +12,13 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-# executable("hello_world") {
-# sources = ["hello_world.cc"]
-# }
-
group("gn_all") {
testonly = true
- deps = [ "//starboard:gn_all" ]
+ deps = [
+ "//cobalt:gn_all",
+ "//starboard:gn_all",
+ ]
}
group("default") {
diff --git a/docker/precommit_hooks/docker-compose.yml b/cobalt/BUILD.gn
similarity index 70%
rename from docker/precommit_hooks/docker-compose.yml
rename to cobalt/BUILD.gn
index 6106d19..5206049 100644
--- a/docker/precommit_hooks/docker-compose.yml
+++ b/cobalt/BUILD.gn
@@ -12,16 +12,13 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-version: '2.4'
+group("gn_all") {
+ testonly = true
-services:
- pre-commit:
- build:
- context: .
- dockerfile: Dockerfile
- image: pre-commit
- volumes:
- - ${COBALT_SRC:-../../}:/code/
- environment:
- FROM_REF: ${FROM_REF:-HEAD^1}
- TO_REF: ${TO_REF:-HEAD}
+ deps = [
+ "//cobalt/network_bridge",
+ "//cobalt/storage:storage_constants",
+ "//nb",
+ "//third_party/libwebp",
+ ]
+}
diff --git a/cobalt/browser/browser_module.cc b/cobalt/browser/browser_module.cc
index 44fc15e..ea42569 100644
--- a/cobalt/browser/browser_module.cc
+++ b/cobalt/browser/browser_module.cc
@@ -409,6 +409,15 @@
#endif // ENABLE_DEBUGGER
}
}
+
+ if (command_line->HasSwitch(switches::kDisableMediaEncryptionSchemes)) {
+ std::string encryption_schemes = command_line->GetSwitchValueASCII(
+ switches::kDisableMediaEncryptionSchemes);
+ if (!encryption_schemes.empty()) {
+ can_play_type_handler_->SetDisabledMediaEncryptionSchemes(
+ encryption_schemes);
+ }
+ }
#endif // ENABLE_DEBUG_COMMAND_LINE_SWITCHES
if (application_state_ == base::kApplicationStateStarted ||
diff --git a/cobalt/browser/switches.cc b/cobalt/browser/switches.cc
index e2743e9..ff63221 100644
--- a/cobalt/browser/switches.cc
+++ b/cobalt/browser/switches.cc
@@ -71,6 +71,15 @@
"example, setting the value to \"avc;hvc\" will disable any h264 and h265 "
"playbacks.";
+const char kDisableMediaEncryptionSchemes[] =
+ "disable_media_encryption_schemes";
+const char kDisableMediaEncryptionSchemesHelp[] =
+ "Disables the semicolon-separated list of encryption schemes that will be "
+ "treated as unsupported for encrypted media playback. Used for debugging "
+ "and testing purposes. For example, setting the value to \"cenc;cbcs\" "
+ "will disable any cenc and cbcs DRM playbacks. Accepted values: \"cenc\", "
+ "\"cbcs\", \"cbcs-1-9\".";
+
const char kDisableRasterizerCaching[] = "disable_rasterizer_caching";
const char kDisableRasterizerCachingHelp[] =
"Disables caching of rasterized render tree nodes; caching improves "
@@ -442,6 +451,7 @@
{kDisableImageAnimations, kDisableImageAnimationsHelp},
{kForceDeterministicRendering, kForceDeterministicRenderingHelp},
{kDisableMediaCodecs, kDisableMediaCodecsHelp},
+ {kDisableMediaEncryptionSchemes, kDisableMediaEncryptionSchemesHelp},
{kDisableRasterizerCaching, kDisableRasterizerCachingHelp},
{kDisableSignIn, kDisableSignInHelp},
{kDisableSplashScreenOnReloads, kDisableSplashScreenOnReloadsHelp},
diff --git a/cobalt/browser/switches.h b/cobalt/browser/switches.h
index 50e3b4c..9786622 100644
--- a/cobalt/browser/switches.h
+++ b/cobalt/browser/switches.h
@@ -41,6 +41,8 @@
extern const char kForceDeterministicRendering[];
extern const char kDisableMediaCodecs[];
extern const char kDisableMediaCodecsHelp[];
+extern const char kDisableMediaEncryptionSchemes[];
+extern const char kDisableMediaEncryptionSchemesHelp[];
extern const char kDisableRasterizerCaching[];
extern const char kDisableSignIn[];
extern const char kDisableSignInHelp[];
diff --git a/cobalt/build/gyp_utils.py b/cobalt/build/gyp_utils.py
index 963e560..42affa5 100644
--- a/cobalt/build/gyp_utils.py
+++ b/cobalt/build/gyp_utils.py
@@ -34,16 +34,14 @@
def CheckRevInfo(key, cwd=None):
- cwd = cwd if cwd else '.'
- git_prefix = ['git', '-C', cwd]
- git_get_remote_args = git_prefix + ['config', '--get', 'remote.origin.url']
- remote = subprocess.check_output(git_get_remote_args).strip()
+ git_get_remote_args = ['git', 'config', '--get', 'remote.origin.url']
+ remote = subprocess.check_output(git_get_remote_args, cwd=cwd).strip()
if remote.endswith('.git'):
remote = remote[:-len('.git')]
- git_get_revision_args = git_prefix + ['rev-parse', 'HEAD']
- revision = subprocess.check_output(git_get_revision_args).strip()
+ git_get_revision_args = ['git', 'rev-parse', 'HEAD']
+ revision = subprocess.check_output(git_get_revision_args, cwd=cwd).strip()
return {key: '{}@{}'.format(remote, revision)}
@@ -73,7 +71,11 @@
try:
repos.update(CheckRevInfo(rel_path, cwd=path))
except subprocess.CalledProcessError as e:
- logging.warning('Failed to get revision information for subrepo: %s', e)
+ logging.warning('Failed to get revision information for subrepo %s: %s',
+ rel_path, e)
+ continue
+ except OSError as e:
+ logging.info('%s. Subrepository %s not found.', e, rel_path)
continue
return repos
diff --git a/cobalt/content/ssl/certs/002c0b4f.0 b/cobalt/content/ssl/certs/002c0b4f.0
new file mode 100644
index 0000000..559a390
--- /dev/null
+++ b/cobalt/content/ssl/certs/002c0b4f.0
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFWjCCA0KgAwIBAgISEdK7udcjGJ5AXwqdLdDfJWfRMA0GCSqGSIb3DQEBDAUA
+MEYxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYD
+VQQDExNHbG9iYWxTaWduIFJvb3QgUjQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMy
+MDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYt
+c2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEB
+AQUAA4ICDwAwggIKAoICAQCsrHQy6LNl5brtQyYdpokNRbopiLKkHWPd08EsCVeJ
+OaFV6Wc0dwxu5FUdUiXSE2te4R2pt32JMl8Nnp8semNgQB+msLZ4j5lUlghYruQG
+vGIFAha/r6gjA7aUD7xubMLL1aa7DOn2wQL7Id5m3RerdELv8HQvJfTqa1VbkNud
+316HCkD7rRlr+/fKYIje2sGP1q7Vf9Q8g+7XFkyDRTNrJ9CG0Bwta/OrffGFqfUo
+0q3v84RLHIf8E6M6cqJaESvWJ3En7YEtbWaBkoe0G1h6zD8K+kZPTXhc+CtI4wSE
+y132tGqzZfxCnlEmIyDLPRT5ge1lFgBPGmSXZgjPjHvjK8Cd+RTyG/FWaha/LIWF
+zXg4mutCagI0GIMXTpRW+LaCtfOW3T3zvn8gdz57GSNrLNRyc0NXfeD412lPFzYE
++cCQYDdF3uYM2HSNrpyibXRdQr4G9dlkbgIQrImwTDsHTUB+JMWKmIJ5jqSngiCN
+I/onccnfxkF0oE32kRbcRoxfKWMxWXEM2G/CtjJ9++ZdU6Z+Ffy7dXxd7Pj2Fxzs
+x2sZy/N78CsHpdlseVR2bJ0cpm4O6XkMqCNqo98bMDGfsVR7/mrLZqrcZdCinkqa
+ByFrgY/bxFn63iLABJzjqls2k+g9vXqhnQt2sQvHnf3PmKgGwvgqo6GDoLclcqUC
+4wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV
+HQ4EFgQUA1yrc4GHqMywptWU4jaWSf8FmSwwDQYJKoZIhvcNAQEMBQADggIBAHx4
+7PYCLLtbfpIrXTncvtgdokIzTfnvpCo7RGkerNlFo048p9gkUbJUHJNOxO97k4Vg
+JuoJSOD1u8fpaNK7ajFxzHmuEajwmf3lH7wvqMxX63bEIaZHU1VNaL8FpO7XJqti
+2kM3S+LGteWygxk6x9PbTZ4IevPuzz5i+6zoYMzRx6Fcg0XERczzF2sUyQQCPtIk
+pnnpHs6i58FZFZ8d4kuaPp92CC1r2LpXFNqD6v6MVenQTqnMdzGxRBF6XLE+0xRF
+FRhiJBPSy03OXIPBNvIQtQ6IbbjhVp+J3pZmOUdkLG5NrmJ7v2B0GbhWrJKsFjLt
+rWhV/pi60zTe9Mlhww6G9kuEYO4Ne7UyWHmRVSyBQ7N0H3qqJZ4d16GLuc1CLgSk
+ZoNNiTW2bKg2SnkheCLQQrzRQDGQob4Ez8pn7fXwgNNgyYMqIgXQBztSvwyeqiv5
+u+YfjyW6hY0XHgL+XVAEV8/+LbzvXMAaq7afJMbfc2hIkCwU9D9SGuTSyxTDYWnP
+4vkYxboznxSjBF25cfe1lNj2M8FawTSLfJvdkzrnE6JwYZ+vj+vYxXX4M2bUdGc6
+N3ec592kD3ZDZopD8p/7DEJ4Y9HiD2971KE9dJeFt0g5QdYg/NA6s/rob8SKunE3
+vouXsXgxT7PntgMTzlSdriVZzH81Xwj3QEUxeCp6
+-----END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/0c4c9b6c.0 b/cobalt/content/ssl/certs/0c4c9b6c.0
deleted file mode 100644
index 70b4ce4..0000000
--- a/cobalt/content/ssl/certs/0c4c9b6c.0
+++ /dev/null
@@ -1,41 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYD
-VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0
-IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3
-MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
-aGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMxNDBaFw0zODA3MzEx
-MjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3Vy
-cmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAG
-A1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAl
-BgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZI
-hvcNAQEBBQADggIPADCCAgoCggIBAMDfVtPkOpt2RbQT2//BthmLN0EYlVJH6xed
-KYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXfXjaOcNFccUMd2drvXNL7
-G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0ZJJ0YPP2
-zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4
-ddPB/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyG
-HoiMvvKRhI9lNNgATH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2
-Id3UwD2ln58fQ1DJu7xsepeY7s2MH/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3V
-yJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfeOx2YItaswTXbo6Al/3K1dh3e
-beksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSFHTynyQbehP9r
-6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
-wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsog
-zCtLkykPAgMBAAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQW
-BBS5CcqcHtvTbDprru1U8VuTBjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDpr
-ru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UEBhMCRVUxQzBBBgNVBAcTOk1hZHJp
-ZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJmaXJtYS5jb20vYWRk
-cmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJmaXJt
-YSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiC
-CQDJzdPp1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCow
-KAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZI
-hvcNAQEFBQADggIBAICIf3DekijZBZRG/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZ
-UohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6ReAJ3spED8IXDneRRXoz
-X1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/sdZ7LoR/x
-fxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVz
-a2Mg9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yyd
-Yhz2rXzdpjEetrHHfoUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMd
-SqlapskD7+3056huirRXhOukP9DuqqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9O
-AP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETrP3iZ8ntxPjzxmKfFGBI/5rso
-M0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVqc5iJWzouE4ge
-v8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
-09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
------END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/116bf586.0 b/cobalt/content/ssl/certs/116bf586.0
deleted file mode 100644
index f9364c0..0000000
--- a/cobalt/content/ssl/certs/116bf586.0
+++ /dev/null
@@ -1,17 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL
-MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj
-KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2
-MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
-eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV
-BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw
-NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV
-BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
-MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL
-So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal
-tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
-BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG
-CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT
-qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz
-rD6ogRLQy7rQkgu2npaqBA+K
------END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/128805a3.0 b/cobalt/content/ssl/certs/128805a3.0
deleted file mode 100644
index 013d461..0000000
--- a/cobalt/content/ssl/certs/128805a3.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1
-MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1
-czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG
-CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy
-MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl
-ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS
-b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy
-euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO
-bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw
-WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d
-MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE
-1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD
-VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/
-zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB
-BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF
-BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV
-v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG
-E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
-uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW
-iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v
-GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0=
------END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/2c543cd1.0 b/cobalt/content/ssl/certs/2c543cd1.0
deleted file mode 100644
index bcb2529..0000000
--- a/cobalt/content/ssl/certs/2c543cd1.0
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
-MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
-YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
-EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
-R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
-9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
-fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
-iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
-1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
-bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
-MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
-ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
-uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
-Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
-tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
-PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
-hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
-5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
------END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/2e4eed3c.0 b/cobalt/content/ssl/certs/2e4eed3c.0
deleted file mode 100644
index 998460f..0000000
--- a/cobalt/content/ssl/certs/2e4eed3c.0
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB
-qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
-Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
-MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV
-BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw
-NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j
-LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG
-A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs
-W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta
-3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk
-6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6
-Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J
-NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA
-MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP
-r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU
-DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz
-YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
-xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2
-/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/
-LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7
-jVaMaA==
------END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/3fb36b73.0 b/cobalt/content/ssl/certs/3fb36b73.0
new file mode 100644
index 0000000..59f8ce3
--- /dev/null
+++ b/cobalt/content/ssl/certs/3fb36b73.0
@@ -0,0 +1,33 @@
+-----BEGIN CERTIFICATE-----
+MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEM
+BQAwaTELMAkGA1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRG
+T1JNIENvcnAuMTIwMAYDVQQDDClOQVZFUiBHbG9iYWwgUm9vdCBDZXJ0aWZpY2F0
+aW9uIEF1dGhvcml0eTAeFw0xNzA4MTgwODU4NDJaFw0zNzA4MTgyMzU5NTlaMGkx
+CzAJBgNVBAYTAktSMSYwJAYDVQQKDB1OQVZFUiBCVVNJTkVTUyBQTEFURk9STSBD
+b3JwLjEyMDAGA1UEAwwpTkFWRVIgR2xvYmFsIFJvb3QgQ2VydGlmaWNhdGlvbiBB
+dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC21PGTXLVA
+iQqrDZBbUGOukJR0F0Vy1ntlWilLp1agS7gvQnXp2XskWjFlqxcX0TM62RHcQDaH
+38dq6SZeWYp34+hInDEW+j6RscrJo+KfziFTowI2MMtSAuXaMl3Dxeb57hHHi8lE
+HoSTGEq0n+USZGnQJoViAbbJAh2+g1G7XNr4rRVqmfeSVPc0W+m/6imBEtRTkZaz
+kVrd/pBzKPswRrXKCAfHcXLJZtM0l/aM9BhK4dA9WkW2aacp+yPOiNgSnABIqKYP
+szuSjXEOdMWLyEz59JuOuDxp7W87UC9Y7cSw0BwbagzivESq2M0UXZR4Yb8Obtoq
+vC8MC3GmsxY/nOb5zJ9TNeIDoKAYv7vxvvTWjIcNQvcGufFt7QSUqP620wbGQGHf
+nZ3zVHbOUzoBppJB7ASjjw2i1QnK1sua8e9DXcCrpUHPXFNwcMmIpi3Ua2FzUCaG
+YQ5fG8Ir4ozVu53BA0K6lNpfqbDKzE0K70dpAy8i+/Eozr9dUGWokG2zdLAIx6yo
+0es+nPxdGoMuK8u180SdOqcXYZaicdNwlhVNt0xz7hlcxVs+Qf6sdWA7G2POAN3a
+CJBitOUt7kinaxeZVL6HSuOpXgRM6xBtVNbv8ejyYhbLgGvtPe31HzClrkvJE+2K
+AQHJuFFYwGY6sWZLxNUxAmLpdIQM201GLQIDAQABo0IwQDAdBgNVHQ4EFgQU0p+I
+36HNLL3s9TsBAZMzJ7LrYEswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB
+Af8wDQYJKoZIhvcNAQEMBQADggIBADLKgLOdPVQG3dLSLvCkASELZ0jKbY7gyKoN
+qo0hV4/GPnrK21HUUrPUloSlWGB/5QuOH/XcChWB5Tu2tyIvCZwTFrFsDDUIbatj
+cu3cvuzHV+YwIHHW1xDBE1UBjCpD5EHxzzp6U5LOogMFDTjfArsQLtk70pt6wKGm
++LUx5vR1yblTmXVHIloUFcd4G7ad6Qz4G3bxhYTeodoS76TiEJd6eN4MUZeoIUCL
+hr0N8F5OSza7OyAfikJW4Qsav3vQIkMsRIz75Sq0bBwcupTgE34h5prCy8VCZLQe
+lHsIJchxzIdFV4XTnyliIoNRlwAYl3dqmJLJfGBs32x9SuRwTMKeuB330DTHD8z7
+p/8Dvq1wkNoL3chtl1+afwkyQf3NosxabUzyqkn+Zvjp2DXrDige7kgvOtB5CTh8
+piKCk5XQA76+AqAF3SAi428diDRgxuYKuQl1C/AH6GmWNcf7I4GOODm4RStDeKLR
+LBT/DShycpWbXgnbiUSYqqFJu3FS8r/2/yehNq+4tneI3TqkbZs0kNwUXTC/t+sX
+5Ie3cdCh13cV1ELX8vMxmV2b3RZtP+oGI/hGoiLtk/bdmuYqh7GYVPEi92tF4+KO
+dh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmgkpzNNIaRkPpkUZ3+/uul
+9XXeifdy
+-----END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/480720ec.0 b/cobalt/content/ssl/certs/480720ec.0
deleted file mode 100644
index 03c70c7..0000000
--- a/cobalt/content/ssl/certs/480720ec.0
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY
-MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo
-R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx
-MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
-Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9
-AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA
-ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0
-7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W
-kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI
-mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G
-A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ
-KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1
-6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl
-4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K
-oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj
-UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU
-AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
------END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/5a4d6896.0 b/cobalt/content/ssl/certs/5a4d6896.0
deleted file mode 100644
index bc6a756..0000000
--- a/cobalt/content/ssl/certs/5a4d6896.0
+++ /dev/null
@@ -1,32 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO
-TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh
-dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloX
-DTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl
-ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv
-b3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4yolQP
-cPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WW
-IkYFsO2tx1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqX
-xz8ecAgwoNzFs21v0IJyEavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFy
-KJLZWyNtZrVtB0LrpjPOktvA9mxjeM3KTj215VKb8b475lRgsGYeCasH/lSJEULR
-9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUurmkVLoR9BvUhTFXFkC4az
-5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU51nus6+N8
-6U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7
-Ngzp07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHP
-bMk7ccHViLVlvMDoFxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXt
-BznaqB16nzaeErAMZRKQFWDZJkBE41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTt
-XUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMBAAGjQjBAMA8GA1UdEwEB/wQF
-MAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleuyjWcLhL75Lpd
-INyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD
-U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwp
-LiniyMMB8jPqKqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8
-Ipf3YF3qKS9Ysr1YvY2WTxB1v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixp
-gZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA8KCWAg8zxXHzniN9lLf9OtMJgwYh
-/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b8KKaa8MFSu1BYBQw
-0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0rmj1A
-fsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq
-4BZ+Extq1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR
-1VmiiXTTn74eS9fGbbeIJG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/
-QFH1T/U67cjF68IeHRaVesd+QnGTbksVtzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM
-94B7IWcnMFk=
------END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/5f618aec.0 b/cobalt/content/ssl/certs/5f618aec.0
new file mode 100644
index 0000000..573ec33
--- /dev/null
+++ b/cobalt/content/ssl/certs/5f618aec.0
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNV
+BAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04g
+Uk9PVCBDQSBHMjAeFw0xNzAyMDYwOTI3MzVaFw00MjAyMDYwOTI3MzVaMEExCzAJ
+BgNVBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJ
+R04gUk9PVCBDQSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDF
+dRmRfUR0dIf+DjuW3NgBFszuY5HnC2/OOwppGnzC46+CjobXXo9X69MhWf05N0Iw
+vlDqtg+piNguLWkh59E3GE59kdUWX2tbAMI5Qw02hVK5U2UPHULlj88F0+7cDBrZ
+uIt4ImfkabBoxTzkbFpG583H+u/E7Eu9aqSs/cwoUe+StCmrqzWaTOTECMYmzPhp
+n+Sc8CnTXPnGFiWeI8MgwT0PPzhAsP6CRDiqWhqKa2NYOLQV07YRaXseVO6MGiKs
+cpc/I1mbySKEwQdPzH/iV8oScLumZfNpdWO9lfsbl83kqK/20U6o2YpxJM02PbyW
+xPFsqa7lzw1uKA2wDrXKUXt4FMMgL3/7FFXhEZn91QqhngLjYl/rNUssuHLoPj1P
+rCy7Lobio3aP5ZMqz6WryFyNSwb/EkaseMsUBzXgqd+L6a8VTxaJW732jcZZroiF
+DsGJ6x9nxUWO/203Nit4ZoORUSs9/1F3dmKh7Gc+PoGD4FapUB8fepmrY7+EF3fx
+DTvf95xhszWYijqy7DwaNz9+j5LP2RIUZNoQAhVB/0/E6xyjyfqZ90bp4RjZsbgy
+LcsUDFDYg2WD7rlcz8sFWkz6GZdr1l0T08JcVLwyc6B49fFtHsufpaafItzRUZ6C
+eWRgKRM+o/1Pcmqr4tTluCRVLERLiohEnMqE0yo7AgMBAAGjQjBAMA8GA1UdEwEB
+/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSCIS1mxteg4BXrzkwJ
+d8RgnlRuAzANBgkqhkiG9w0BAQsFAAOCAgEAYN4auOfyYILVAzOBywaK8SJJ6ejq
+kX/GM15oGQOGO0MBzwdw5AgeZYWR5hEit/UCI46uuR59H35s5r0l1ZUa8gWmr4UC
+b6741jH/JclKyMeKqdmfS0mbEVeZkkMR3rYzpMzXjWR91M08KCy0mpbqTfXERMQl
+qiCA2ClV9+BB/AYm/7k29UMUA2Z44RGx2iBfRgB4ACGlHgAoYXhvqAEBj500mv/0
+OJD7uNGzcgbJceaBxXntC6Z58hMLnPddDnskk7RI24Zf3lCGeOdA5jGokHZwYa+c
+NywRtYK3qq4kNFtyDGkNzVmf9nGvnAvRCjj5BiKDUyUM/FHE5r7iOZULJK2v0ZXk
+ltd0ZGtxTgI8qoXzIKNDOXZbbFD+mpwUHmUUihW9o4JFWklWatKcsWMy5WHgUyIO
+pwpJ6st+H6jiYoD2EEVSmAYY3qXNL3+q1Ok+CHLsIwMCPKaq2LxndD0UF/tUSxfj
+03k9bWtJySgOLnRQvwzZRjoQhsmnP+mg7H/rpXdYaXHmgwo38oZJar55CJD2AhZk
+PuXaTH4MNMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE
+1LlSVHJ7liXMvGnjSG4N0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MX
+QRBdJ3NghVdJIgc=
+-----END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/6410666e.0 b/cobalt/content/ssl/certs/6410666e.0
deleted file mode 100644
index 51187d8..0000000
--- a/cobalt/content/ssl/certs/6410666e.0
+++ /dev/null
@@ -1,32 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/
-MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1ow
-PzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZp
-Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
-AJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XR
-IePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1q
-gQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKy
-yhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAts
-F/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2
-jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvx
-ls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FC
-VGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHK
-YS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoH
-EgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThN
-Xo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1Ud
-DgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAE
-MTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqK
-UWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
-TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyf
-qzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaK
-ZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFE
-JPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7
-hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1
-EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6Mm
-nD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WX
-udpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44Vbnz
-ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDe
-LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl
-pYYsfPQS
------END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/7d0b38bd.0 b/cobalt/content/ssl/certs/7d0b38bd.0
deleted file mode 100644
index e19fdea..0000000
--- a/cobalt/content/ssl/certs/7d0b38bd.0
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL
-MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
-ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
-U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
-aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG
-A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp
-U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg
-SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln
-biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm
-GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve
-fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw
-AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ
-aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj
-aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW
-kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC
-4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga
-FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
------END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/8867006a.0 b/cobalt/content/ssl/certs/8867006a.0
deleted file mode 100644
index bed6cd0..0000000
--- a/cobalt/content/ssl/certs/8867006a.0
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW
-MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy
-c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD
-VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1
-c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
-AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81
-WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG
-FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq
-XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL
-se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb
-KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd
-IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73
-y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt
-hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc
-QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4
-Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV
-HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ
-KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
-dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ
-L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr
-Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo
-ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY
-T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz
-GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m
-1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV
-OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH
-6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX
-QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
------END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/8d89cda1.0 b/cobalt/content/ssl/certs/8d89cda1.0
new file mode 100644
index 0000000..e3be2a5
--- /dev/null
+++ b/cobalt/content/ssl/certs/8d89cda1.0
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQsw
+CQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYD
+VQQDEy1NaWNyb3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIw
+MTcwHhcNMTkxMjE4MjMwNjQ1WhcNNDIwNzE4MjMxNjA0WjBlMQswCQYDVQQGEwJV
+UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNy
+b3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwdjAQBgcq
+hkjOPQIBBgUrgQQAIgNiAATUvD0CQnVBEyPNgASGAlEvaqiBYgtlzPbKnR5vSmZR
+ogPZnZH6thaxjG7efM3beaYvzrvOcS/lpaso7GMEZpn4+vKTEAXhgShC48Zo9OYb
+hGBKia/teQ87zvH2RPUBeMCjVDBSMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8E
+BTADAQH/MB0GA1UdDgQWBBTIy5lycFIM+Oa+sgRXKSrPQhDtNTAQBgkrBgEEAYI3
+FQEEAwIBADAKBggqhkjOPQQDAwNoADBlAjBY8k3qDPlfXu5gKcs68tvWMoQZP3zV
+L8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaReNtUjGUB
+iudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M=
+-----END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/9482e63a.0 b/cobalt/content/ssl/certs/9482e63a.0
new file mode 100644
index 0000000..81f8a2e
--- /dev/null
+++ b/cobalt/content/ssl/certs/9482e63a.0
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQsw
+CQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScw
+JQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAXBgNVBAMT
+EENlcnR1bSBFQy0zODQgQ0EwHhcNMTgwMzI2MDcyNDU0WhcNNDMwMzI2MDcyNDU0
+WjB0MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBT
+LkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAX
+BgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATE
+KI6rGFtqvm5kN2PkzeyrOvfMobgOgknXhimfoZTy42B4mIF4Bk3y7JoOV2CDn7Tm
+Fy8as10CW4kjPMIRBSqniBMY81CE1700LCeJVf/OTOffph8oxPBUw7l8t1Ot68Kj
+QjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI0GZnQkdjrzife81r1HfS+8
+EF9LMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNoADBlAjADVS2m5hjEfO/J
+UG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0QoSZ/6vn
+nvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k=
+-----END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/9b5697b0.0 b/cobalt/content/ssl/certs/9b5697b0.0
new file mode 100644
index 0000000..8f308f5
--- /dev/null
+++ b/cobalt/content/ssl/certs/9b5697b0.0
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYD
+VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf
+BgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3
+YXZlIEdsb2JhbCBFQ0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x
+NzA4MjMxOTM1MTBaFw00MjA4MjMxOTM1MTBaMIGRMQswCQYDVQQGEwJVUzERMA8G
+A1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0
+d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF
+Q0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTBZMBMGByqGSM49AgEGCCqG
+SM49AwEHA0IABH77bOYj43MyCMpg5lOcunSNGLB4kFKA3TjASh3RqMyTpJcGOMoN
+FWLGjgEqZZ2q3zSRLoHB5DOSMcT9CTqmP62jQzBBMA8GA1UdEwEB/wQFMAMBAf8w
+DwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt0UrrdaVKEJmzsaGLSvcw
+CgYIKoZIzj0EAwIDRwAwRAIgB+ZU2g6gWrKuEZ+Hxbb/ad4lvvigtwjzRM4q3wgh
+DDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7
+-----END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/9f727ac7.0 b/cobalt/content/ssl/certs/9f727ac7.0
new file mode 100644
index 0000000..f440412
--- /dev/null
+++ b/cobalt/content/ssl/certs/9f727ac7.0
@@ -0,0 +1,33 @@
+-----BEGIN CERTIFICATE-----
+MIIFpDCCA4ygAwIBAgIQOcqTHO9D88aOk8f0ZIk4fjANBgkqhkiG9w0BAQsFADBs
+MQswCQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl
+c2VhcmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBSU0Eg
+Um9vdCBDQSAyMDIxMB4XDTIxMDIxOTEwNTUzOFoXDTQ1MDIxMzEwNTUzN1owbDEL
+MAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl
+YXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgUlNBIFJv
+b3QgQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvC569l
+mwVnlskNJLnQDmT8zuIkGCyEf3dRywQRNrhe7Wlxp57kJQmXZ8FHws+RFjZiPTgE
+4VGC/6zStGndLuwRo0Xua2s7TL+MjaQenRG56Tj5eg4MmOIjHdFOY9TnuEFE+2uv
+a9of08WRiFukiZLRgeaMOVig1mlDqa2YUlhu2wr7a89o+uOkXjpFc5gH6l8Cct4M
+pbOfrqkdtx2z/IpZ525yZa31MJQjB/OCFks1mJxTuy/K5FrZx40d/JiZ+yykgmvw
+Kh+OC19xXFyuQnspiYHLA6OZyoieC0AJQTPb5lh6/a6ZcMBaD9YThnEvdmn8kN3b
+LW7R8pv1GmuebxWMevBLKKAiOIAkbDakO/IwkfN4E8/BPzWr8R0RI7VDIp4BkrcY
+AuUR0YLbFQDMYTfBKnya4dC6s1BG7oKsnTH4+yPiAwBIcKMJJnkVU2DzOFytOOqB
+AGMUuTNe3QvboEUHGjMJ+E20pwKmafTCWQWIZYVWrkvL4N48fS0ayOn7H6NhStYq
+E613TBoYm5EPWNgGVMWX+Ko/IIqmhaZ39qb8HOLubpQzKoNQhArlT4b4UEV4AIHr
+W2jjJo3Me1xR9BQsQL4aYB16cmEdH2MtiKrOokWQCPxrvrNQKlr9qEgYRtaQQJKQ
+CoReaDH46+0N0x3GfZkYVVYnZS6NRcUk7M7jAgMBAAGjQjBAMA8GA1UdEwEB/wQF
+MAMBAf8wHQYDVR0OBBYEFApII6ZgpJIKM+qTW8VX6iVNvRLuMA4GA1UdDwEB/wQE
+AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAPpBIqm5iFSVmewzVjIuJndftTgfvnNAU
+X15QvWiWkKQUEapobQk1OUAJ2vQJLDSle1mESSmXdMgHHkdt8s4cUCbjnj1AUz/3
+f5Z2EMVGpdAgS1D0NTsY9FVqQRtHBmg8uwkIYtlfVUKqrFOFrJVWNlar5AWMxaja
+H6NpvVMPxP/cyuN+8kyIhkdGGvMA9YCRotxDQpSbIPDRzbLrLFPCU3hKTwSUQZqP
+JzLB5UkZv/HywouoCjkxKLR9YjYsTewfM7Z+d21+UPCfDtcRj88YxeMn/ibvBZ3P
+zzfF0HvaO7AWhAw6k9a+F9sPPg4ZeAnHqQJyIkv3N3a6dcSFA1pj1bF1BcK5vZSt
+jBWZp5N99sXzqnTPBIWUmAD04vnKJGW/4GKvyMX6ssmeVkjaef2WdhW+o45WxLM0
+/L5H9MG0qPzVMIho7suuyWPEdr6sOBjhXlzPrjoiUevRi7PzKzMHVIf6tLITe7pT
+BGIBnfHAT+7hOtSLIBD6Alfm78ELt5BGnBkpjNxvoEppaZS3JGWg/6w/zgH7IS79
+aPib8qXPMThcFarmlwDB31qlpzmq6YR/PFGoOtmUW4y/Twhx5duoXNTSpv4Ao8YW
+xw/ogM4cKGR0GQjTQuPOAF1/sdwTsOEFy9EgqoZ0njnnkf3/W9b3raYvAwtt41dU
+63ZTGI0RmLo=
+-----END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/ad088e1d.0 b/cobalt/content/ssl/certs/ad088e1d.0
deleted file mode 100644
index 6bc2888..0000000
--- a/cobalt/content/ssl/certs/ad088e1d.0
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW
-MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy
-c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE
-BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0
-IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV
-VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8
-cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT
-QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh
-F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v
-c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w
-mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd
-VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX
-teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ
-f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe
-Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+
-nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB
-/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY
-MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG
-9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
-aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX
-IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn
-ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z
-uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN
-Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja
-QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW
-koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9
-ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt
-DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm
-bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw=
------END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/b1b8a7f3.0 b/cobalt/content/ssl/certs/b1b8a7f3.0
deleted file mode 100644
index a695c21..0000000
--- a/cobalt/content/ssl/certs/b1b8a7f3.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB
-ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly
-aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl
-ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w
-NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G
-A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD
-VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX
-SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR
-VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2
-w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF
-mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg
-4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9
-4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw
-DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw
-EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx
-SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2
-ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8
-vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
-hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi
-Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ
-/L7fCg0=
------END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/b204d74a.0 b/cobalt/content/ssl/certs/b204d74a.0
deleted file mode 100644
index 707ff08..0000000
--- a/cobalt/content/ssl/certs/b204d74a.0
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
-yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
-ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
-U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
-ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
-MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
-ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
-U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
-aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
-nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
-t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
-SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
-BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
-rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
-NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
-BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
-BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
-aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
-MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
-p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
-5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
-WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
-4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
-hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
------END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/b433981b.0 b/cobalt/content/ssl/certs/b433981b.0
new file mode 100644
index 0000000..c371237
--- /dev/null
+++ b/cobalt/content/ssl/certs/b433981b.0
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIIF7zCCA9egAwIBAgIIDdPjvGz5a7EwDQYJKoZIhvcNAQELBQAwgYQxEjAQBgNV
+BAUTCUc2MzI4NzUxMDELMAkGA1UEBhMCRVMxJzAlBgNVBAoTHkFORiBBdXRvcmlk
+YWQgZGUgQ2VydGlmaWNhY2lvbjEUMBIGA1UECxMLQU5GIENBIFJhaXoxIjAgBgNV
+BAMTGUFORiBTZWN1cmUgU2VydmVyIFJvb3QgQ0EwHhcNMTkwOTA0MTAwMDM4WhcN
+MzkwODMwMTAwMDM4WjCBhDESMBAGA1UEBRMJRzYzMjg3NTEwMQswCQYDVQQGEwJF
+UzEnMCUGA1UEChMeQU5GIEF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uMRQwEgYD
+VQQLEwtBTkYgQ0EgUmFpejEiMCAGA1UEAxMZQU5GIFNlY3VyZSBTZXJ2ZXIgUm9v
+dCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANvrayvmZFSVgpCj
+cqQZAZ2cC4Ffc0m6p6zzBE57lgvsEeBbphzOG9INgxwruJ4dfkUyYA8H6XdYfp9q
+yGFOtibBTI3/TO80sh9l2Ll49a2pcbnvT1gdpd50IJeh7WhM3pIXS7yr/2WanvtH
+2Vdy8wmhrnZEE26cLUQ5vPnHO6RYPUG9tMJJo8gN0pcvB2VSAKduyK9o7PQUlrZX
+H1bDOZ8rbeTzPvY1ZNoMHKGESy9LS+IsJJ1tk0DrtSOOMspvRdOoiXsezx76W0OL
+zc2oD2rKDF65nkeP8Nm2CgtYZRczuSPkdxl9y0oukntPLxB3sY0vaJxizOBQ+OyR
+p1RMVwnVdmPF6GUe7m1qzwmd+nxPrWAI/VaZDxUse6mAq4xhj0oHdkLePfTdsiQz
+W7i1o0TJrH93PB0j7IKppuLIBkwC/qxcmZkLLxCKpvR/1Yd0DVlJRfbwcVw5Kda/
+SiOL9V8BY9KHcyi1Swr1+KuCLH5zJTIdC2MKF4EA/7Z2Xue0sUDKIbvVgFHlSFJn
+LNJhiQcND85Cd8BEc5xEUKDbEAotlRyBr+Qc5RQe8TZBAQIvfXOn3kLMTOmJDVb3
+n5HUA8ZsyY/b2BzgQJhdZpmYgG4t/wHFzstGH6wCxkPmrqKEPMVOHj1tyRRM4y5B
+u8o5vzY8KhmqQYdOpc5LMnndkEl/AgMBAAGjYzBhMB8GA1UdIwQYMBaAFJxf0Gxj
+o1+TypOYCK2Mh6UsXME3MB0GA1UdDgQWBBScX9BsY6Nfk8qTmAitjIelLFzBNzAO
+BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOC
+AgEATh65isagmD9uw2nAalxJUqzLK114OMHVVISfk/CHGT0sZonrDUL8zPB1hT+L
+9IBdeeUXZ701guLyPI59WzbLWoAAKfLOKyzxj6ptBZNscsdW699QIyjlRRA96Gej
+rw5VD5AJYu9LWaL2U/HANeQvwSS9eS9OICI7/RogsKQOLHDtdD+4E5UGUcjohybK
+pFtqFiGS3XNgnhAY3jyB6ugYw3yJ8otQPr0R4hUDqDZ9MwFsSBXXiJCZBMXM5gf0
+vPSQ7RPi6ovDj6MzD8EpTBNO2hVWcXNyglD2mjN8orGoGjR0ZVzO0eurU+AagNjq
+OknkJjCb5RyKqKkVMoaZkgoQI1YS4PbOTOK7vtuNknMBZi9iPrJyJ0U27U1W45eZ
+/zo1PqVUSlJZS2Db7v54EX9K3BR5YLZrZAPbFYPhor72I5dQ8AkzNqdxliXzuUJ9
+2zg/LFis6ELhDtjTO0wugumDLmsx2d1Hhk9tl5EuT+IocTUW0fJz/iUrB0ckYyfI
++PbZa/wSMVYIwFNCr5zQM378BvAxRAMU8Vjq8moNqRGyg77FGr8H6lnco4g175x2
+MjxNBiLOFeXdntiP2t7SxDnlF4HPOEfrf4htWRvfn0IUrn7PqLBmZdo3r5+qPeoo
+tt7VMVgWglvquxl1AnMaykgaIZOQCo6ThKd9OyMYkomgjaw=
+-----END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/b81b93f0.0 b/cobalt/content/ssl/certs/b81b93f0.0
new file mode 100644
index 0000000..8dde431
--- /dev/null
+++ b/cobalt/content/ssl/certs/b81b93f0.0
@@ -0,0 +1,16 @@
+-----BEGIN CERTIFICATE-----
+MIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQsw
+CQYDVQQGEwJFUzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgw
+FgYDVQRhDA9WQVRFUy1RMjgyNjAwNEoxLDAqBgNVBAMMI0FDIFJBSVogRk5NVC1S
+Q00gU0VSVklET1JFUyBTRUdVUk9TMB4XDTE4MTIyMDA5MzczM1oXDTQzMTIyMDA5
+MzczM1oweDELMAkGA1UEBhMCRVMxETAPBgNVBAoMCEZOTVQtUkNNMQ4wDAYDVQQL
+DAVDZXJlczEYMBYGA1UEYQwPVkFURVMtUTI4MjYwMDRKMSwwKgYDVQQDDCNBQyBS
+QUlaIEZOTVQtUkNNIFNFUlZJRE9SRVMgU0VHVVJPUzB2MBAGByqGSM49AgEGBSuB
+BAAiA2IABPa6V1PIyqvfNkpSIeSX0oNnnvBlUdBeh8dHsVnyV0ebAAKTRBdp20LH
+sbI6GA60XYyzZl2hNPk2LEnb80b8s0RpRBNm/dfF/a82Tc4DTQdxz69qBdKiQ1oK
+Um8BA06Oi6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
+VR0OBBYEFAG5L++/EYZg8k/QQW6rcx/n0m5JMAoGCCqGSM49BAMDA2kAMGYCMQCu
+SuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoDzBOQn5IC
+MQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJy
+v+c=
+-----END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/ba89ed3b.0 b/cobalt/content/ssl/certs/ba89ed3b.0
deleted file mode 100644
index acfed9d..0000000
--- a/cobalt/content/ssl/certs/ba89ed3b.0
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB
-rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
-Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
-MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV
-BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa
-Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl
-LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u
-MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl
-ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm
-gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8
-YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf
-b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9
-9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S
-zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk
-OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV
-HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA
-2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW
-oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
-t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c
-KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM
-m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu
-MdRAGmI0Nj81Aa6sY6A=
------END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/bf53fb88.0 b/cobalt/content/ssl/certs/bf53fb88.0
new file mode 100644
index 0000000..3bdfb23
--- /dev/null
+++ b/cobalt/content/ssl/certs/bf53fb88.0
@@ -0,0 +1,33 @@
+-----BEGIN CERTIFICATE-----
+MIIFqDCCA5CgAwIBAgIQHtOXCV/YtLNHcB6qvn9FszANBgkqhkiG9w0BAQwFADBl
+MQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYw
+NAYDVQQDEy1NaWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
+IDIwMTcwHhcNMTkxMjE4MjI1MTIyWhcNNDIwNzE4MjMwMDIzWjBlMQswCQYDVQQG
+EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1N
+aWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwggIi
+MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKW76UM4wplZEWCpW9R2LBifOZ
+Nt9GkMml7Xhqb0eRaPgnZ1AzHaGm++DlQ6OEAlcBXZxIQIJTELy/xztokLaCLeX0
+ZdDMbRnMlfl7rEqUrQ7eS0MdhweSE5CAg2Q1OQT85elss7YfUJQ4ZVBcF0a5toW1
+HLUX6NZFndiyJrDKxHBKrmCk3bPZ7Pw71VdyvD/IybLeS2v4I2wDwAW9lcfNcztm
+gGTjGqwu+UcF8ga2m3P1eDNbx6H7JyqhtJqRjJHTOoI+dkC0zVJhUXAoP8XFWvLJ
+jEm7FFtNyP9nTUwSlq31/niol4fX/V4ggNyhSyL71Imtus5Hl0dVe49FyGcohJUc
+aDDv70ngNXtk55iwlNpNhTs+VcQor1fznhPbRiefHqJeRIOkpcrVE7NLP8TjwuaG
+YaRSMLl6IE9vDzhTyzMMEyuP1pq9KsgtsRx9S1HKR9FIJ3Jdh+vVReZIZZ2vUpC6
+W6IYZVcSn2i51BVrlMRpIpj0M+Dt+VGOQVDJNE92kKz8OMHY4Xu54+OU4UZpyw4K
+UGsTuqwPN1q3ErWQgR5WrlcihtnJ0tHXUeOrO8ZV/R4O03QK0dqq6mm4lyiPSMQH
++FJDOvTKVTUssKZqwJz58oHhEmrARdlns87/I6KJClTUFLkqqNfs+avNJVgyeY+Q
+W5g5xAgGwax/Dj0ApQIDAQABo1QwUjAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/
+BAUwAwEB/zAdBgNVHQ4EFgQUCctZf4aycI8awznjwNnpv7tNsiMwEAYJKwYBBAGC
+NxUBBAMCAQAwDQYJKoZIhvcNAQEMBQADggIBAKyvPl3CEZaJjqPnktaXFbgToqZC
+LgLNFgVZJ8og6Lq46BrsTaiXVq5lQ7GPAJtSzVXNUzltYkyLDVt8LkS/gxCP81OC
+gMNPOsduET/m4xaRhPtthH80dK2Jp86519efhGSSvpWhrQlTM93uCupKUY5vVau6
+tZRGrox/2KJQJWVggEbbMwSubLWYdFQl3JPk+ONVFT24bcMKpBLBaYVu32TxU5nh
+SnUgnZUP5NbcA/FZGOhHibJXWpS2qdgXKxdJ5XbLwVaZOjex/2kskZGT4d9Mozd2
+TaGf+G0eHdP67Pv0RR0Tbc/3WeUiJ3IrhvNXuzDtJE3cfVa7o7P4NHmJweDyAmH3
+pvwPuxwXC65B2Xy9J6P9LjrRk5Sxcx0ki69bIImtt2dmefU6xqaWM/5TkshGsRGR
+xpl/j8nWZjEgQRCHLQzWwa80mMpkg/sTV9HB8Dx6jKXB/ZUhoHHBk2dxEuqPiApp
+GWSZI1b7rCoucL5mxAyE7+WL85MB+GqQk2dLsmijtWKP6T+MejteD+eMuMZ87zf9
+dOLITzNy4ZQ5bb0Sr74MTnB8G2+NszKTc0QWbej09+CVgI+WXTik9KveCjCHk9hN
+AHFiRSdLOkKEW39lt2c0Ui2cFmuqqNh7o0JMcccMyj6D5KbvtwEwXlGjefVwaaZB
+RA+GsCyRxj3qrg+E
+-----END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/c01cdfa2.0 b/cobalt/content/ssl/certs/c01cdfa2.0
deleted file mode 100644
index b5f1875..0000000
--- a/cobalt/content/ssl/certs/c01cdfa2.0
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB
-vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
-ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp
-U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W
-ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
-Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX
-MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0
-IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y
-IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh
-bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF
-9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH
-H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H
-LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN
-/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT
-rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud
-EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw
-WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs
-exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
-DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4
-sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+
-seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz
-4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+
-BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR
-lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3
-7M2CYfE45k+XmCpajQ==
------END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/c089bbbd.0 b/cobalt/content/ssl/certs/c089bbbd.0
deleted file mode 100644
index 447ee3d..0000000
--- a/cobalt/content/ssl/certs/c089bbbd.0
+++ /dev/null
@@ -1,16 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL
-MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp
-IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi
-BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw
-MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
-d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig
-YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v
-dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/
-BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6
-papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K
-DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3
-KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox
-XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
------END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/c0ff1f52.0 b/cobalt/content/ssl/certs/c0ff1f52.0
deleted file mode 100644
index 6880364..0000000
--- a/cobalt/content/ssl/certs/c0ff1f52.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b
-N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t
-KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu
-kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm
-CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ
-Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu
-imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te
-2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe
-DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
-/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p
-F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt
-TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
------END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/c47d9980.0 b/cobalt/content/ssl/certs/c47d9980.0
deleted file mode 100644
index 7d3a249..0000000
--- a/cobalt/content/ssl/certs/c47d9980.0
+++ /dev/null
@@ -1,42 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD
-VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0
-IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3
-MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJz
-IG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDcz
-MTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBj
-dXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIw
-EAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEp
-MCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G
-CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW9
-28sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJq
-VKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072Q
-DuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR
-5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfL
-ZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05a
-Sd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esHnFIbAURRPHsl18Tl
-UlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2wsWsSaR6s
-+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5
-Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
-ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAx
-hduub+84Mxh2EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNV
-HQ4EFgQU+SSsD7K1+HnA+mCIG8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1
-+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpN
-YWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t
-L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVy
-ZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAt
-IDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV
-HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20w
-DQYJKoZIhvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwW
-PJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF
-5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1
-glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaH
-FoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2
-pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MD
-xvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QG
-tjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq
-jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1De
-fhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
-OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZ
-d0jQ
------END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/d853d49e.0 b/cobalt/content/ssl/certs/d853d49e.0
deleted file mode 100644
index fb804c9..0000000
--- a/cobalt/content/ssl/certs/d853d49e.0
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBF
-MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQL
-ExNUcnVzdGlzIEZQUyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTEx
-MzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEc
-MBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQRUN+
-AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihH
-iTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjj
-vSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA
-0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlB
-OrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/
-BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4E
-FgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01
-GX2cGE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmW
-zaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP4
-1BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZE
-f1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/rGXuhg8F
-jZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQEN
-ZetX2fNXlrtIzYE=
------END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/d887a5bb.0 b/cobalt/content/ssl/certs/d887a5bb.0
new file mode 100644
index 0000000..e1ddb42
--- /dev/null
+++ b/cobalt/content/ssl/certs/d887a5bb.0
@@ -0,0 +1,17 @@
+-----BEGIN CERTIFICATE-----
+MIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYD
+VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf
+BgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3
+YXZlIEdsb2JhbCBFQ0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x
+NzA4MjMxOTM2NDNaFw00MjA4MjMxOTM2NDNaMIGRMQswCQYDVQQGEwJVUzERMA8G
+A1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0
+d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF
+Q0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTB2MBAGByqGSM49AgEGBSuB
+BAAiA2IABGvaDXU1CDFHBa5FmVXxERMuSvgQMSOjfoPTfygIOiYaOs+Xgh+AtycJ
+j9GOMMQKmw6sWASr9zZ9lCOkmwqKi6vr/TklZvFe/oyujUF5nQlgziip04pt89ZF
+1PKYhDhloKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwYAMB0G
+A1UdDgQWBBRVqYSJ0sEyvRjLbKYHTsjnnb6CkDAKBggqhkjOPQQDAwNnADBkAjA3
+AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsC
+MGclCrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVu
+Sw==
+-----END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/def36a68.0 b/cobalt/content/ssl/certs/def36a68.0
deleted file mode 100644
index 014657f..0000000
--- a/cobalt/content/ssl/certs/def36a68.0
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFwzCCA6ugAwIBAgIUCn6m30tEntpqJIWe5rgV0xZ/u7EwDQYJKoZIhvcNAQEL
-BQAwRjELMAkGA1UEBhMCTFUxFjAUBgNVBAoMDUx1eFRydXN0IFMuQS4xHzAdBgNV
-BAMMFkx1eFRydXN0IEdsb2JhbCBSb290IDIwHhcNMTUwMzA1MTMyMTU3WhcNMzUw
-MzA1MTMyMTU3WjBGMQswCQYDVQQGEwJMVTEWMBQGA1UECgwNTHV4VHJ1c3QgUy5B
-LjEfMB0GA1UEAwwWTHV4VHJ1c3QgR2xvYmFsIFJvb3QgMjCCAiIwDQYJKoZIhvcN
-AQEBBQADggIPADCCAgoCggIBANeFl78RmOnwYoNMPIf5U2o3C/IPPIfOb9wmKb3F
-ibrJgz337spbxm1Jc7TJRqMbNBM/wYlFV/TZsfs2ZUv7COJIcRHIbjuend+JZTem
-hfY7RBi2xjcwYkSSl2l9QjAk5A0MiWtj3sXh306pFGxT4GHO9hcvHTy95iJMHZP1
-EMShduxq3sVs35a0VkBCwGKSMKEtFZSg0iAGCW5qbeXrt77U8PEVfIvmTroTzEsn
-Xpk8F12PgX8zPU/TPxvsXD/wPEx1bvKm1Z3aLQdjAsZy6ZS8TEmVT4hSyNvoaYL4
-zDRbIvCGp4m9SAptZoFtyMhk+wHh9OHe2Z7d21vUKpkmFRseTJIpgp7VkoGSQXAZ
-96Tlk0u8d2cx3Rz9MXANF5kM+Qw5GSoXtTBxVdUPrljhPS80m8+f9niFwpN6cj5m
-j5wWEWCPnolvZ77gR1o7DJpni89Gxq44o/KnvObWhWszJHAiS8sIm7vI+AIpHb4g
-DEa/a4ebsypmQjVGbKq6rfmYe+lQVRQxv7HaLe2ArWgk+2mr2HETMOZns4dA/Yl+
-8kPREd8vZS9kzl8UubG/Mb2HeFpZZYiq/FkySIbWTLkpS5XTdvN3JW1CHDiDTf2j
-X5t/Lax5Gw5CMZdjpPuKadUiDTSQMC6otOBttpSsvItO13D8xTiOZCXhTTmQzsmH
-hFhxAgMBAAGjgagwgaUwDwYDVR0TAQH/BAUwAwEB/zBCBgNVHSAEOzA5MDcGByuB
-KwEBAQowLDAqBggrBgEFBQcCARYeaHR0cHM6Ly9yZXBvc2l0b3J5Lmx1eHRydXN0
-Lmx1MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBT/GCh2+UgFLKGu8SsbK7JT
-+Et8szAdBgNVHQ4EFgQU/xgodvlIBSyhrvErGyuyU/hLfLMwDQYJKoZIhvcNAQEL
-BQADggIBAGoZFO1uecEsh9QNcH7X9njJCwROxLHOk3D+sFTAMs2ZMGQXvw/l4jP9
-BzZAcg4atmpZ1gDlaCDdLnINH2pkMSCEfUmmWjfrRcmF9dTHF5kH5ptV5AzoqbTO
-jFu1EVzPig4N1qx3gf4ynCSecs5U89BvolbW7MM3LGVYvlcAGvI1+ut7MV3CwRI9
-loGIlonBWVx65n9wNOeD4rHh4bhY79SV5GCc8JaXcozrhAIuZY+kt9J/Z93I055c
-qqmkoCUUBpvsT34tC38ddfEz2O3OuHVtPlu5mB0xDVbYQw8wkbIEa91WvpWAVWe+
-2M2D2RjuLg+GLZKecBPs3lHJQ3gCpU3I+V/EkVhGFndadKpAvAefMLmx9xIX3eP/
-JEAdemrRTxgKqpAd60Ae36EeRJIQmvKN4dFLRp7oRUKX6kWZ8+xm1QL68qZKJKre
-zrnK+T+Tb/mjuuqlPpmt/f97mfVl7vBZKGfXkJWkE4SphMHozs51k2MavDzq1WQf
-LSoSOcbDWjLtR5EWDrw4wVDej8oqkDQc7kGUnF4ZLvhFSZl0kbAEb+MEWrGrKqv+
-x9CWttrhSmQGbmBNvUJO/3jaJMobtNeWOWyu8Q6qp31IiyBMz2TWuJdGsE7RKlY6
-oJO9r4Ak4Ap+58rVyuiFVdw2KuGUaJPHZnJED4AhMmwlxyOAgwrr
------END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/e2799e36.0 b/cobalt/content/ssl/certs/e2799e36.0
deleted file mode 100644
index dc1f859..0000000
--- a/cobalt/content/ssl/certs/e2799e36.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB
-mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT
-MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
-eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ
-BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
-MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0
-BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz
-+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm
-hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn
-5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W
-JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL
-DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC
-huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
-HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB
-AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB
-zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN
-kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
-AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH
-SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G
-spki4cErx5z481+oghLrGREt
------END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/e35234b1.0 b/cobalt/content/ssl/certs/e35234b1.0
new file mode 100644
index 0000000..fa7fa74
--- /dev/null
+++ b/cobalt/content/ssl/certs/e35234b1.0
@@ -0,0 +1,33 @@
+-----BEGIN CERTIFICATE-----
+MIIFwDCCA6igAwIBAgIQHr9ZULjJgDdMBvfrVU+17TANBgkqhkiG9w0BAQ0FADB6
+MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEu
+MScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHzAdBgNV
+BAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0EwHhcNMTgwMzE2MTIxMDEzWhcNNDMw
+MzE2MTIxMDEzWjB6MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEg
+U3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRo
+b3JpdHkxHzAdBgNVBAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0EwggIiMA0GCSqG
+SIb3DQEBAQUAA4ICDwAwggIKAoICAQDRLY67tzbqbTeRn06TpwXkKQMlzhyC93yZ
+n0EGze2jusDbCSzBfN8pfktlL5On1AFrAygYo9idBcEq2EXxkd7fO9CAAozPOA/q
+p1x4EaTByIVcJdPTsuclzxFUl6s1wB52HO8AU5853BSlLCIls3Jy/I2z5T4IHhQq
+NwuIPMqw9MjCoa68wb4pZ1Xi/K1ZXP69VyywkI3C7Te2fJmItdUDmj0VDT06qKhF
+8JVOJVkdzZhpu9PMMsmN74H+rX2Ju7pgE8pllWeg8xn2A1bUatMn4qGtg/BKEiJ3
+HAVz4hlxQsDsdUaakFjgao4rpUYwBI4Zshfjvqm6f1bxJAPXsiEodg42MEx51UGa
+mqi4NboMOvJEGyCI98Ul1z3G4z5D3Yf+xOr1Uz5MZf87Sst4WmsXXw3Hw09Omiqi
+7VdNIuJGmj8PkTQkfVXjjJU30xrwCSss0smNtA0Aq2cpKNgB9RkEth2+dv5yXMSF
+ytKAQd8FqKPVhJBPC/PgP5sZ0jeJP/J7UhyM9uH3PAeXjA6iWYEMspA90+NZRu0P
+qafegGtaqge2Gcu8V/OXIXoMsSt0Puvap2ctTMSYnjYJdmZm/Bo/6khUHL4wvYBQ
+v3y1zgD2DGHZ5yQD4OMBgQ692IU0iL2yNqh7XAjlRICMb/gv1SHKHRzQ+8S1h9E6
+Tsd2tTVItQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSM+xx1
+vALTn04uSNn5YFSqxLNP+jAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQENBQAD
+ggIBAEii1QALLtA/vBzVtVRJHlpr9OTy4EA34MwUe7nJ+jW1dReTagVphZzNTxl4
+WxmB82M+w85bj/UvXgF2Ez8sALnNllI5SW0ETsXpD4YN4fqzX4IS8TrOZgYkNCvo
+zMrnadyHncI013nR03e4qllY/p0m+jiGPp2Kh2RX5Rc64vmNueMzeMGQ2Ljdt4NR
+5MTMI9UGfOZR0800McD2RrsLrfw9EAUqO0qRJe6M1ISHgCq8CYyqOhNf6DR5UMEQ
+GfnTKB7U0VEwKbOukGfWHwpjscWpxkIxYxeU72nLL/qMFH3EQxiJ2fAyQOaA4kZf
+5ePBAFmo+eggvIksDkc0C+pXwlM2/KfUrzHN/gLldfq5Jwn58/U7yn2fqSLLiMmq
+0Uc9NneoWWRrJ8/vJ8HjJLWG965+Mk2weWjROeiQWMODvA8s1pfrzgzhIMfatz7D
+P78v3DSk+yshzWePS/Tj6tQ/50+6uaWTRRxmHyH6ZF5v4HaUMst19W7l9o/HuKTM
+qJZ9ZPskWkoDbGs4xugDQ5r3V7mzKWmTOPQD8rv7gmsHINFSH5pkAnuYZttcTVoP
+0ISVoDwUQwbKytu4QTbaakRnh6+v40URFWkIsr4WOZckbxJF0WddCajJFdr60qZf
+E2Efv4WstK2tBZQIgx51F9NxO5NQI1mg7TyRVJ12AMXDuDjb
+-----END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/e868b802.0 b/cobalt/content/ssl/certs/e868b802.0
new file mode 100644
index 0000000..b6f59c2
--- /dev/null
+++ b/cobalt/content/ssl/certs/e868b802.0
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNV
+BAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRk
+LjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25vIFJv
+b3QgQ0EgMjAxNzAeFw0xNzA4MjIxMjA3MDZaFw00MjA4MjIxMjA3MDZaMHExCzAJ
+BgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMg
+THRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25v
+IFJvb3QgQ0EgMjAxNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJbcPYrYsHtv
+xie+RJCxs1YVe45DJH0ahFnuY2iyxl6H0BVIHqiQrb1TotreOpCmYF9oMrWGQd+H
+Wyx7xf58etqjYzBhMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
+A1UdDgQWBBSHERUI0arBeAyxr87GyZDvvzAEwDAfBgNVHSMEGDAWgBSHERUI0arB
+eAyxr87GyZDvvzAEwDAKBggqhkjOPQQDAgNJADBGAiEAtVfd14pVCzbhhkT61Nlo
+jbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxOsvxyqltZ
++efcMQ==
+-----END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/ecccd8db.0 b/cobalt/content/ssl/certs/ecccd8db.0
new file mode 100644
index 0000000..42924b0
--- /dev/null
+++ b/cobalt/content/ssl/certs/ecccd8db.0
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQsw
+CQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2Vh
+cmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9v
+dCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoXDTQ1MDIxMzExMDEwOVowbDELMAkG
+A1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj
+aCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJvb3Qg
+Q0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7
+KKrxcm1lAEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9Y
+STHMmE5gEYd103KUkE+bECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQD
+AgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAircJRQO9gcS3ujwLEXQNw
+SaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/QwCZ61IygN
+nxS2PFOiTAZpffpskcYqSUXm7LcT4Tps
+-----END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/f249de83.0 b/cobalt/content/ssl/certs/f249de83.0
new file mode 100644
index 0000000..85da765
--- /dev/null
+++ b/cobalt/content/ssl/certs/f249de83.0
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIIF2jCCA8KgAwIBAgIMBfcOhtpJ80Y1LrqyMA0GCSqGSIb3DQEBCwUAMIGIMQsw
+CQYDVQQGEwJVUzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28x
+ITAfBgNVBAoMGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1
+c3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMx
+OTM0MTJaFw00MjA4MjMxOTM0MTJaMIGIMQswCQYDVQQGEwJVUzERMA8GA1UECAwI
+SWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2ZSBI
+b2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZp
+Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
+ALldUShLPDeS0YLOvR29zd24q88KPuFd5dyqCblXAj7mY2Hf8g+CY66j96xz0Xzn
+swuvCAAJWX/NKSqIk4cXGIDtiLK0thAfLdZfVaITXdHG6wZWiYj+rDKd/VzDBcdu
+7oaJuogDnXIhhpCujwOl3J+IKMujkkkP7NAP4m1ET4BqstTnoApTAbqOl5F2brz8
+1Ws25kCI1nsvXwXoLG0R8+eyvpJETNKXpP7ScoFDB5zpET71ixpZfR9oWN0EACyW
+80OzfpgZdNmcc9kYvkHHNHnZ9GLCQ7mzJ7Aiy/k9UscwR7PJPrhq4ufogXBeQotP
+JqX+OsIgbrv4Fo7NDKm0G2x2EOFYeUY+VM6AqFcJNykbmROPDMjWLBz7BegIlT1l
+RtzuzWniTY+HKE40Cz7PFNm73bZQmq131BnW2hqIyE4bJ3XYsgjxroMwuREOzYfw
+hI0Vcnyh78zyiGG69Gm7DIwLdVcEuE4qFC49DxweMqZiNu5m4iK4BUBjECLzMx10
+coos9TkpoNPnG4CELcU9402x/RpvumUHO1jsQkUm+9jaJXLE9gCxInm943xZYkqc
+BW89zubWR2OZxiRvchLIrH+QtAuRcOi35hYQcRfO3gZPSEF9NUqjifLJS3tBEW1n
+twiYTOURGa5CgNz7kAXU+FDKvuStx8KU1xad5hePrzb7AgMBAAGjQjBAMA8GA1Ud
+EwEB/wQFMAMBAf8wHQYDVR0OBBYEFJngGWcNYtt2s9o9uFvo/ULSMQ6HMA4GA1Ud
+DwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAmHNw4rDT7TnsTGDZqRKGFx6W
+0OhUKDtkLSGm+J1WE2pIPU/HPinbbViDVD2HfSMF1OQc3Og4ZYbFdada2zUFvXfe
+uyk3QAUHw5RSn8pk3fEbK9xGChACMf1KaA0HZJDmHvUqoai7PF35owgLEQzxPy0Q
+lG/+4jSHg9bP5Rs1bdID4bANqKCqRieCNqcVtgimQlRXtpla4gt5kNdXElE1GYhB
+aCXUNxeEFfsBctyV3lImIJgm4nb1J2/6ADtKYdkNy1GTKv0WBpanI5ojSP5RvbbE
+sLFUzt5sQa0WZ37b/TjNuThOssFgy50X31ieemKyJo90lZvkWx3SD92YHJtZuSPT
+MaCm/zjdzyBP6VhWOmfD0faZmZ26NraAL4hHT4a/RDqA5Dccprrql5gR0IRiR2Qe
+qu5AvzSxnI9O4fKSTx+O856X3vOmeWqJcU9LJxdI/uz0UA9PSX3MReO9ekDFQdxh
+VicGaeVyQYHTtgGJoC86cnn+OjC/QezHYj6RS8fZMXZC+fc8Y+wmjHMMfRod6qh8
+h6jCJ3zhM0EPz8/8AKAigJ5Kp28AsEFFtyLKaEjFQqKu3R3y4G5OBVixwJAWKqQ9
+EEC+j2Jjg6mcgn0tAumDMHzLJ8n9HmYAsC7TIS+OMxZsmO0QqAfWzJPP29FpHOTK
+yeC2nOnOcXHebD8WpHk=
+-----END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/fa5da96b.0 b/cobalt/content/ssl/certs/fa5da96b.0
new file mode 100644
index 0000000..c80b4e8
--- /dev/null
+++ b/cobalt/content/ssl/certs/fa5da96b.0
@@ -0,0 +1,32 @@
+-----BEGIN CERTIFICATE-----
+MIIFgjCCA2qgAwIBAgILWku9WvtPilv6ZeUwDQYJKoZIhvcNAQELBQAwTTELMAkG
+A1UEBhMCQVQxIzAhBgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkw
+FwYDVQQDExBHTE9CQUxUUlVTVCAyMDIwMB4XDTIwMDIxMDAwMDAwMFoXDTQwMDYx
+MDAwMDAwMFowTTELMAkGA1UEBhMCQVQxIzAhBgNVBAoTGmUtY29tbWVyY2UgbW9u
+aXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVTVCAyMDIwMIICIjANBgkq
+hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAri5WrRsc7/aVj6B3GyvTY4+ETUWiD59b
+RatZe1E0+eyLinjF3WuvvcTfk0Uev5E4C64OFudBc/jbu9G4UeDLgztzOG53ig9Z
+YybNpyrOVPu44sB8R85gfD+yc/LAGbaKkoc1DZAoouQVBGM+uq/ufF7MpotQsjj3
+QWPKzv9pj2gOlTblzLmMCcpL3TGQlsjMH/1WljTbjhzqLL6FLmPdqqmV0/0plRPw
+yJiT2S0WR5ARg6I6IqIoV6Lr/sCMKKCmfecqQjuCgGOlYx8ZzHyyZqjC0203b+J+
+BlHZRYQfEs4kUmSFC0iAToexIiIwquuuvuAC4EDosEKAA1GqtH6qRNdDYfOiaxaJ
+SaSjpCuKAsR49GiKweR6NrFvG5Ybd0mN1MkGco/PU+PcF4UgStyYJ9ORJitHHmkH
+r96i5OTUawuzXnzUJIBHKWk7buis/UDr2O1xcSvy6Fgd60GXIsUf1DnQJ4+H4xj0
+4KlGDfV0OoIu0G4skaMxXDtG6nsEEFZegB31pWXogvziB4xiRfUg3kZwhqG8k9Me
+dKZssCz3AwyIDMvUclOGvGBG85hqwvG/Q/lwIHfKN0F5VVJjjVsSn8VoxIidrPIw
+q7ejMZdnrY8XD2zHc+0klGvIg5rQmjdJBKuxFshsSUktq6HQjJLyQUp5ISXbY9e2
+nKd+Qmn7OmMCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
+AQYwHQYDVR0OBBYEFNwuH9FhN3nkq9XVsxJxaD1qaJwiMB8GA1UdIwQYMBaAFNwu
+H9FhN3nkq9XVsxJxaD1qaJwiMA0GCSqGSIb3DQEBCwUAA4ICAQCR8EICaEDuw2jA
+VC/f7GLDw56KoDEoqoOOpFaWEhCGVrqXctJUMHytGdUdaG/7FELYjQ7ztdGl4wJC
+XtzoRlgHNQIw4Lx0SsFDKv/bGtCwr2zD/cuz9X9tAy5ZVp0tLTWMstZDFyySCstd
+6IwPS3BD0IL/qMy/pJTAvoe9iuOTe8aPmxadJ2W8esVCgmxcB9CpwYhgROmYhRZf
++I/KARDOJcP5YBugxZfD0yyIMaK9MOzQ0MAS8cE54+X1+NZK3TTN+2/BT+MAi1bi
+kvcoskJ3ciNnxz8RFbLEAwW+uxF7Cr+obuf/WEPPm2eggAe2HcqtbepBEX4tdJP7
+wry+UUTF72glJ4DjyKDUEuzZpTcdN3y0kcra1LGWge9oXHYQSa9+pTeAsRxSvTOB
+TI/53WXZFM2KJVj04sWDpQmQ1GwUY7VA3+vA/MRYfg0UFodUJ25W5HCEuGwyEn6C
+MUO+1918oa2u1qsgEu8KwxCMSZY13At1XrFP1U80DhEgB3VDRemjEdqso5nCtnkn
+4rnvyOL2NSl6dPrFf4IFYqYK6miyeUcGbvJXqBUzxvd4Sj1Ce2t+/vdG6tHrju+I
+aFvowdlxfv1k7/9nR4hYJS8+hge9+6jlgqispdNpQ80xiEmEU5LAsTkbOYMBMMTy
+qfrQA71yN2BWHzZ8vTmR9W0Nv3vXkg==
+-----END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/fd64f3fc.0 b/cobalt/content/ssl/certs/fd64f3fc.0
new file mode 100644
index 0000000..58c5b54
--- /dev/null
+++ b/cobalt/content/ssl/certs/fd64f3fc.0
@@ -0,0 +1,33 @@
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIUEwLV4kBMkkaGFmddtLu7sms+/BMwDQYJKoZIhvcNAQEL
+BQAwYTELMAkGA1UEBhMCVE4xNzA1BgNVBAoMLkFnZW5jZSBOYXRpb25hbGUgZGUg
+Q2VydGlmaWNhdGlvbiBFbGVjdHJvbmlxdWUxGTAXBgNVBAMMEFR1blRydXN0IFJv
+b3QgQ0EwHhcNMTkwNDI2MDg1NzU2WhcNNDQwNDI2MDg1NzU2WjBhMQswCQYDVQQG
+EwJUTjE3MDUGA1UECgwuQWdlbmNlIE5hdGlvbmFsZSBkZSBDZXJ0aWZpY2F0aW9u
+IEVsZWN0cm9uaXF1ZTEZMBcGA1UEAwwQVHVuVHJ1c3QgUm9vdCBDQTCCAiIwDQYJ
+KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMPN0/y9BFPdDCA61YguBUtB9YOCfvdZ
+n56eY+hz2vYGqU8ftPkLHzmMmiDQfgbU7DTZhrx1W4eI8NLZ1KMKsmwb60ksPqxd
+2JQDoOw05TDENX37Jk0bbjBU2PWARZw5rZzJJQRNmpA+TkBuimvNKWfGzC3gdOgF
+VwpIUPp6Q9p+7FuaDmJ2/uqdHYVy7BG7NegfJ7/Boce7SBbdVtfMTqDhuazb1YMZ
+GoXRlJfXyqNlC/M4+QKu3fZnz8k/9YosRxqZbwUN/dAdgjH8KcwAWJeRTIAAHDOF
+li/LQcKLEITDCSSJH7UP2dl3RxiSlGBcx5kDPP73lad9UKGAwqmDrViWVSHbhlnU
+r8a83YFuB9tgYv7sEG7aaAH0gxupPqJbI9dkxt/con3YS7qC0lH4Zr8GRuR5KiY2
+eY8fTpkdso8MDhz/yV3A/ZAQprE38806JG60hZC/gLkMjNWb1sjxVj8agIl6qeIb
+MlEsPvLfe/ZdeikZjuXIvTZxi11Mwh0/rViizz1wTaZQmCXcI/m4WEEIcb9PuISg
+jwBUFfyRbVinljvrS5YnzWuioYasDXxU5mZMZl+QviGaAkYt5IPCgLnPSz7ofzwB
+7I9ezX/SKEIBlYrilz0QIX32nRzFNKHsLA4KUiwSVXAkPcvCFDVDXSdOvsC9qnyW
+5/yeYa1E0wCXAgMBAAGjYzBhMB0GA1UdDgQWBBQGmpsfU33x9aTI04Y+oXNZtPdE
+ITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFAaamx9TffH1pMjThj6hc1m0
+90QhMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAqgVutt0Vyb+z
+xiD2BkewhpMl0425yAA/l/VSJ4hxyXT968pk21vvHl26v9Hr7lxpuhbI87mP0zYu
+QEkHDVneixCwSQXi/5E/S7fdAo74gShczNxtr18UnH1YeA32gAm56Q6XKRm4t+v4
+FstVEuTGfbvE7Pi1HE4+Z7/FXxttbUcoqgRYYdZ2vyJ/0Adqp2RT8JeNnYA/u8EH
+22Wv5psymsNUk8QcCMNE+3tjEUPRahphanltkE8pjkcFwRJpadbGNjHh/PqAulxP
+xOu3Mqz4dWEX1xAZufHSCe96Qp1bWgvUxpVOKs7/B9dPfhgGiPEZtdmYu65xxBzn
+dFlY7wyJz4sfdZMaBBSSSFCp61cpABbjNhzI+L/wM9VBD8TMPN3pM0MBkRArHtG5
+Xc0yGYuPjCB31yLEQtyEFpslbei0VXF/sHyz03FJuc9SpAQ/3D2gu68zngowYI7b
+nV2UqL1g52KAdoGDDIzMMEZJ4gzSqK/rYXHv5yJiqfdcZGyfFoxnNidF9Ql7v/YQ
+CvGwjVRDjAS6oz/v4jXH+XTgbzRB0L9zZVcg+ZtnemZoJE6AZb0QmQZZ8mWvuMZH
+u/2QeItBcy6vVR/cO5JyboTT0GFMDcx2V+IthSIVNg3rAZ3r2OvEhJn7wAzMMujj
+d9qDRIueVSjAi1jTkD5OGwDxFa2DK5o=
+-----END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/feffd413.0 b/cobalt/content/ssl/certs/feffd413.0
new file mode 100644
index 0000000..d9e601c
--- /dev/null
+++ b/cobalt/content/ssl/certs/feffd413.0
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYx
+CzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQD
+ExNHbG9iYWxTaWduIFJvb3QgRTQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAw
+MDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2Ex
+HDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBFNDYwdjAQBgcqhkjOPQIBBgUrgQQA
+IgNiAAScDrHPt+ieUnd1NPqlRqetMhkytAepJ8qUuwzSChDH2omwlwxwEwkBjtjq
+R+q+soArzfwoDdusvKSGN+1wCAB16pMLey5SnCNoIwZD7JIvU4Tb+0cUB+hflGdd
+yXqBPCCjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud
+DgQWBBQxCpCPtsad0kRLgLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ
+7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZkvLtoURMMA/cVi4RguYv/Uo7njLwcAjA8
++RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+CAezNIm8BZ/3Hobui3A=
+-----END CERTIFICATE-----
diff --git a/cobalt/dom/performance.cc b/cobalt/dom/performance.cc
index a7b2fd9..d1298ce 100644
--- a/cobalt/dom/performance.cc
+++ b/cobalt/dom/performance.cc
@@ -74,7 +74,9 @@
: EventTarget(settings),
time_origin_(base::TimeTicks::Now()),
tick_clock_(base::DefaultTickClock::GetInstance()),
- timing_(new PerformanceTiming(clock, time_origin_)),
+ timing_(new PerformanceTiming(
+ clock,
+ (time_origin_ - base::TimeTicks::UnixEpoch()).InMilliseconds())),
memory_(new MemoryInfo()),
resource_timing_buffer_size_limit_(
Performance::kMaxResourceTimingBufferSize),
diff --git a/cobalt/dom/performance_test.cc b/cobalt/dom/performance_test.cc
index 4d9d6ce..f0a28ed 100644
--- a/cobalt/dom/performance_test.cc
+++ b/cobalt/dom/performance_test.cc
@@ -72,17 +72,19 @@
// the object will be created at the beginning of a new navigation.
scoped_refptr<base::SystemMonotonicClock> clock(
new base::SystemMonotonicClock());
- base::TimeTicks lower_limit = base::TimeTicks::Now();
- scoped_refptr<PerformanceTiming> performance_timing(
- new PerformanceTiming(clock, base::TimeTicks::Now()));
+ uint64 lower_limit =
+ (base::TimeTicks::Now() - base::TimeTicks::UnixEpoch()).InMilliseconds();
- base::TimeTicks upper_limit = base::TimeTicks::Now();
+ testing::StubEnvironmentSettings environment_settings;
+ scoped_refptr<Performance> performance(
+ new Performance(&environment_settings, clock));
- DCHECK_GE(performance_timing->navigation_start(),
- static_cast<uint64>((lower_limit.ToInternalValue())));
- DCHECK_LE(performance_timing->navigation_start(),
- static_cast<uint64>((upper_limit.ToInternalValue())));
+ uint64 upper_limit =
+ (base::TimeTicks::Now() - base::TimeTicks::UnixEpoch()).InMilliseconds();
+
+ DCHECK_GE(performance->timing()->navigation_start(), lower_limit);
+ DCHECK_LE(performance->timing()->navigation_start(), upper_limit);
}
} // namespace dom
diff --git a/cobalt/dom/performance_timing.cc b/cobalt/dom/performance_timing.cc
index 910eb03..c0cf211 100644
--- a/cobalt/dom/performance_timing.cc
+++ b/cobalt/dom/performance_timing.cc
@@ -18,16 +18,13 @@
namespace dom {
PerformanceTiming::PerformanceTiming(
- const scoped_refptr<base::BasicClock>& clock,
- base::TimeTicks time_origin)
- : navigation_start_(time_origin),
+ const scoped_refptr<base::BasicClock>& clock, uint64 navigation_start)
+ : navigation_start_(navigation_start),
navigation_start_clock_(new base::OffsetClock(clock, clock->Now())) {}
PerformanceTiming::~PerformanceTiming() {}
-uint64 PerformanceTiming::navigation_start() const {
- return static_cast<uint64>(navigation_start_.ToInternalValue());
-}
+uint64 PerformanceTiming::navigation_start() const { return navigation_start_; }
scoped_refptr<base::OffsetClock> PerformanceTiming::GetNavigationStartClock() {
return navigation_start_clock_;
diff --git a/cobalt/dom/performance_timing.h b/cobalt/dom/performance_timing.h
index 184d92d..a0a761c 100644
--- a/cobalt/dom/performance_timing.h
+++ b/cobalt/dom/performance_timing.h
@@ -29,7 +29,7 @@
// Performance::Mark and Performance::Measure.
public:
explicit PerformanceTiming(const scoped_refptr<base::BasicClock>& clock,
- base::TimeTicks time_origin);
+ uint64 navigation_start);
// This attribute must return the time immediately after the user agent
// finishes prompting to unload the previous document. If there is no previous
@@ -50,7 +50,7 @@
~PerformanceTiming();
// The navigation start time relative to January 1, 1970.
- base::TimeTicks navigation_start_;
+ uint64 navigation_start_;
scoped_refptr<base::OffsetClock> navigation_start_clock_;
DISALLOW_COPY_AND_ASSIGN(PerformanceTiming);
diff --git a/cobalt/evergreen_tests/evergreen_tests.py b/cobalt/evergreen_tests/evergreen_tests.py
index 38845e8..23fc411 100644
--- a/cobalt/evergreen_tests/evergreen_tests.py
+++ b/cobalt/evergreen_tests/evergreen_tests.py
@@ -95,7 +95,9 @@
run_all_tests = os.path.join(REPOSITORY_ROOT,
'starboard/evergreen/testing/run_all_tests.sh')
- command = [run_all_tests, args.platform_under_test]
+
+ # /bin/bash is executed since run_all_tests.sh may not be executable.
+ command = ['/bin/bash', run_all_tests, args.platform_under_test]
if launcher.device_id:
# The automated tests run on this host should target a remote device.
diff --git a/cobalt/h5vcc/h5vcc.gyp b/cobalt/h5vcc/h5vcc.gyp
index 6486986..ce59392 100644
--- a/cobalt/h5vcc/h5vcc.gyp
+++ b/cobalt/h5vcc/h5vcc.gyp
@@ -110,6 +110,9 @@
'h5vcc_updater.cc',
'h5vcc_updater.h',
],
+ 'dependencies': [
+ '<(DEPTH)/cobalt/updater/updater.gyp:updater',
+ ],
}],
],
},
diff --git a/cobalt/h5vcc/h5vcc_updater.cc b/cobalt/h5vcc/h5vcc_updater.cc
index c4d7bbf..97162bb 100644
--- a/cobalt/h5vcc/h5vcc_updater.cc
+++ b/cobalt/h5vcc/h5vcc_updater.cc
@@ -14,6 +14,10 @@
#include "cobalt/h5vcc/h5vcc_updater.h"
+#if SB_IS(EVERGREEN)
+#include "cobalt/updater/utils.h"
+#endif
+
namespace {
const uint16 kInvalidInstallationIndex = 1000;
@@ -23,6 +27,7 @@
namespace cobalt {
namespace h5vcc {
+#if SB_IS(EVERGREEN)
std::string H5vccUpdater::GetUpdaterChannel() const {
if (!updater_module_) {
return "";
@@ -66,5 +71,10 @@
return index == -1 ? kInvalidInstallationIndex : static_cast<uint16>(index);
}
+std::string H5vccUpdater::GetLibrarySha256(uint16 index) const {
+ return cobalt::updater::GetLibrarySha256(index);
+}
+
+#endif // SB_IS(EVERGREEN)
} // namespace h5vcc
} // namespace cobalt
diff --git a/cobalt/h5vcc/h5vcc_updater.h b/cobalt/h5vcc/h5vcc_updater.h
index 841b893..8b869ff 100644
--- a/cobalt/h5vcc/h5vcc_updater.h
+++ b/cobalt/h5vcc/h5vcc_updater.h
@@ -46,6 +46,8 @@
uint16 GetInstallationIndex() const;
+ std::string GetLibrarySha256(uint16 index) const;
+
#else
H5vccUpdater() {}
#endif
diff --git a/cobalt/h5vcc/h5vcc_updater.idl b/cobalt/h5vcc/h5vcc_updater.idl
index 4a81664..d71d603 100644
--- a/cobalt/h5vcc/h5vcc_updater.idl
+++ b/cobalt/h5vcc/h5vcc_updater.idl
@@ -24,4 +24,7 @@
void resetInstallations();
unsigned short getInstallationIndex();
+
+ DOMString getLibrarySha256(unsigned short index);
+
};
diff --git a/cobalt/media/base/sbplayer_pipeline.cc b/cobalt/media/base/sbplayer_pipeline.cc
index 7e5bb2b..3fa6b43 100644
--- a/cobalt/media/base/sbplayer_pipeline.cc
+++ b/cobalt/media/base/sbplayer_pipeline.cc
@@ -544,11 +544,6 @@
error_cb_.Reset();
if (demuxer_) {
stop_cb_ = stop_cb;
- {
- base::AutoLock auto_lock(lock_);
- audio_stream_ = nullptr;
- video_stream_ = nullptr;
- }
demuxer_->Stop();
OnDemuxerStopped();
} else {
@@ -909,7 +904,7 @@
// TODO: Check |suspended_| here as the pipeline can be suspended before the
// player is created. In this case we should delay creating the player as the
// creation of player may fail.
-
+ std::string error_message;
{
base::AutoLock auto_lock(lock_);
LOG(INFO) << "Creating StarboardPlayer with url: " << source_url;
@@ -921,6 +916,7 @@
SetPlaybackRateTask(playback_rate_);
SetVolumeTask(volume_);
} else {
+ error_message = player_->GetPlayerCreationErrorMessage();
player_.reset();
LOG(INFO) << "Failed to create a valid StarboardPlayer.";
}
@@ -938,8 +934,9 @@
}
CallSeekCB(DECODER_ERROR_NOT_SUPPORTED,
- "SbPlayerPipeline::CreateUrlPlayer failed: "
- "player_->IsValid() is false.");
+ "SbPlayerPipeline::CreateUrlPlayer failed to create a valid "
+ "StarboardPlayer:" +
+ (error_message.empty() ? "" : " Error: " + error_message));
}
void SbPlayerPipeline::SetDrmSystem(SbDrmSystem drm_system) {
@@ -995,6 +992,7 @@
video_stream_->video_decoder_config());
}
+ std::string error_message;
{
base::AutoLock auto_lock(lock_);
SB_DCHECK(!player_);
@@ -1013,6 +1011,7 @@
SetPlaybackRateTask(playback_rate_);
SetVolumeTask(volume_);
} else {
+ error_message = player_->GetPlayerCreationErrorMessage();
player_.reset();
LOG(INFO) << "Failed to create a valid StarboardPlayer.";
}
@@ -1037,8 +1036,9 @@
}
CallSeekCB(DECODER_ERROR_NOT_SUPPORTED,
- "SbPlayerPipeline::CreatePlayer failed: "
- "player_->IsValid() is false.");
+ "SbPlayerPipeline::CreatePlayer failed to create a valid "
+ "StarboardPlayer:" +
+ (error_message.empty() ? "" : " Error: " + error_message));
}
void SbPlayerPipeline::OnDemuxerInitialized(PipelineStatus status) {
diff --git a/cobalt/media/base/starboard_player.cc b/cobalt/media/base/starboard_player.cc
index 7d19612..47ad52b 100644
--- a/cobalt/media/base/starboard_player.cc
+++ b/cobalt/media/base/starboard_player.cc
@@ -554,6 +554,8 @@
bool has_audio = audio_codec != kSbMediaAudioCodecNone;
+ is_creating_player_ = true;
+
#if SB_HAS(PLAYER_CREATION_AND_OUTPUT_MODE_QUERY_IMPROVEMENT)
SbPlayerCreationParam creation_param = {};
@@ -592,6 +594,8 @@
#endif // SB_HAS(PLAYER_CREATION_AND_OUTPUT_MODE_QUERY_IMPROVEMENT)
+ is_creating_player_ = false;
+
if (!SbPlayerIsValid(player_)) {
return;
}
@@ -856,6 +860,19 @@
}
}
+bool StarboardPlayer::TryToSetPlayerCreationErrorMessage(
+ const std::string& message) {
+ DCHECK(task_runner_->BelongsToCurrentThread());
+ if (is_creating_player_) {
+ player_creation_error_message_ = message;
+ return true;
+ }
+ LOG(INFO) << "TryToSetPlayerCreationErrorMessage() "
+ "is called when |is_creating_player_| "
+ "is false. Error message is ignored.";
+ return false;
+}
+
// static
void StarboardPlayer::DecoderStatusCB(SbPlayer player, void* context,
SbMediaType type,
@@ -880,6 +897,13 @@
void StarboardPlayer::PlayerErrorCB(SbPlayer player, void* context,
SbPlayerError error, const char* message) {
StarboardPlayer* helper = static_cast<StarboardPlayer*>(context);
+ if (player == kSbPlayerInvalid) {
+ // TODO: Simplify by combining the functionality of
+ // TryToSetPlayerCreationErrorMessage() with OnPlayerError().
+ if (helper->TryToSetPlayerCreationErrorMessage(message)) {
+ return;
+ }
+ }
helper->task_runner_->PostTask(
FROM_HERE, base::Bind(&StarboardPlayer::CallbackHelper::OnPlayerError,
helper->callback_helper_, player, error,
diff --git a/cobalt/media/base/starboard_player.h b/cobalt/media/base/starboard_player.h
index 588ca42..6e40ac4 100644
--- a/cobalt/media/base/starboard_player.h
+++ b/cobalt/media/base/starboard_player.h
@@ -118,6 +118,15 @@
// Need to be removed with media refactor.
void Resume(SbWindow window);
+ // These functions help the pipeline report an error message on a player
+ // creation error. TryToSetPlayerCreationErrorMessage() will set
+ // |player_creation_error_message_| and return true when called while
+ // |is_creating_player_| is true, else it will do nothing and return false.
+ bool TryToSetPlayerCreationErrorMessage(const std::string& message);
+ std::string GetPlayerCreationErrorMessage() const {
+ return player_creation_error_message_;
+ }
+
SbDecodeTarget GetCurrentSbDecodeTarget();
SbPlayerOutputMode GetSbPlayerOutputMode();
@@ -256,6 +265,10 @@
// A string of video maximum capabilities.
std::string max_video_capabilities_;
+ // Keep track of errors during player creation.
+ bool is_creating_player_ = false;
+ std::string player_creation_error_message_;
+
#if SB_HAS(PLAYER_WITH_URL)
const bool is_url_based_;
#endif // SB_HAS(PLAYER_WITH_URL)
diff --git a/cobalt/media/can_play_type_handler.h b/cobalt/media/can_play_type_handler.h
index 00b94f1..5ed65d7 100644
--- a/cobalt/media/can_play_type_handler.h
+++ b/cobalt/media/can_play_type_handler.h
@@ -30,6 +30,8 @@
virtual SbMediaSupportType CanPlayAdaptive(
const std::string& mime_type, const std::string& key_system) const = 0;
virtual void SetDisabledMediaCodecs(const std::string& codecs) = 0;
+ virtual void SetDisabledMediaEncryptionSchemes(
+ const std::string& disabled_encryption_schemes) = 0;
protected:
CanPlayTypeHandler() {}
diff --git a/cobalt/media/media_module.cc b/cobalt/media/media_module.cc
index b70b045..3f6671d 100644
--- a/cobalt/media/media_module.cc
+++ b/cobalt/media/media_module.cc
@@ -14,6 +14,9 @@
#include "cobalt/media/media_module.h"
+#include <algorithm>
+#include <string>
+#include <utility>
#include <vector>
#include "base/bind.h"
@@ -37,6 +40,57 @@
namespace {
+// TODO: Determine if ExtractCodecs() and ExtractEncryptionScheme() can be
+// combined and simplified.
+static std::vector<std::string> ExtractCodecs(const std::string& mime_type) {
+ std::vector<std::string> codecs;
+ std::vector<std::string> components = base::SplitString(
+ mime_type, ";", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
+ LOG_IF(WARNING, components.empty())
+ << "argument mime type \"" << mime_type << "\" is not valid.";
+ // The first component is the type/subtype pair. We want to iterate over the
+ // remaining components to search for the codecs.
+ auto iter = components.begin() + 1;
+ for (; iter != components.end(); ++iter) {
+ std::vector<std::string> name_and_value = base::SplitString(
+ *iter, "=", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
+ if (name_and_value.size() != 2) {
+ LOG(WARNING) << "parameter for mime_type \"" << mime_type
+ << "\" is not valid.";
+ continue;
+ }
+ if (name_and_value[0] == "codecs") {
+ ParseCodecString(name_and_value[1], &codecs, /* strip= */ false);
+ return codecs;
+ }
+ }
+ return codecs;
+}
+
+static std::string ExtractEncryptionScheme(const std::string& key_system) {
+ std::vector<std::string> components = base::SplitString(
+ key_system, ";", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
+
+ auto iter = components.begin();
+ for (; iter != components.end(); ++iter) {
+ std::vector<std::string> name_and_value = base::SplitString(
+ *iter, "=", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
+ if (name_and_value.size() != 1 && name_and_value.size() != 2) {
+ LOG(WARNING) << "parameter for key_system \"" << key_system
+ << "\" is not valid.";
+ continue;
+ }
+ if (name_and_value[0] == "encryptionscheme") {
+ if (name_and_value.size() < 2) {
+ return "";
+ }
+ base::RemoveChars(name_and_value[1], "\"", &name_and_value[1]);
+ return name_and_value[1];
+ }
+ }
+ return "";
+}
+
class CanPlayTypeHandlerStarboard : public CanPlayTypeHandler {
public:
void SetDisabledMediaCodecs(
@@ -48,6 +102,15 @@
<< "\" from console/command line.";
}
+ void SetDisabledMediaEncryptionSchemes(
+ const std::string& disabled_encryption_schemes) override {
+ disabled_encryption_schemes_ =
+ base::SplitString(disabled_encryption_schemes, ";",
+ base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
+ LOG(INFO) << "Disabled encryption scheme(s) \""
+ << disabled_encryption_schemes << "\" from command line.";
+ }
+
SbMediaSupportType CanPlayProgressive(
const std::string& mime_type) const override {
// |mime_type| is something like:
@@ -72,31 +135,6 @@
}
private:
- std::vector<std::string> ExtractCodecs(const std::string& mime_type) const {
- std::vector<std::string> codecs;
- std::vector<std::string> components = base::SplitString(
- mime_type, ";", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
- LOG_IF(WARNING, components.empty())
- << "argument mime type \"" << mime_type << "\" is not valid.";
- // The first component is the type/subtype pair. We want to iterate over the
- // remaining components to search for the codecs.
- auto iter = components.begin() + 1;
- for (; iter != components.end(); ++iter) {
- std::vector<std::string> name_and_value = base::SplitString(
- *iter, "=", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
- if (name_and_value.size() != 2) {
- LOG(WARNING) << "parameter for mime_type \"" << mime_type
- << "\" is not valid.";
- continue;
- }
- if (name_and_value[0] == "codecs") {
- ParseCodecString(name_and_value[1], &codecs, /* strip= */ false);
- return codecs;
- }
- }
- return codecs;
- }
-
SbMediaSupportType CanPlayType(const std::string& mime_type,
const std::string& key_system) const {
if (!disabled_media_codecs_.empty()) {
@@ -111,6 +149,17 @@
}
}
}
+
+ if (!disabled_encryption_schemes_.empty()) {
+ std::string encryption_scheme = ExtractEncryptionScheme(key_system);
+ if (std::find(disabled_encryption_schemes_.begin(),
+ disabled_encryption_schemes_.end(),
+ encryption_scheme) != disabled_encryption_schemes_.end()) {
+ LOG(INFO) << "Encryption scheme (" << encryption_scheme
+ << ") is disabled via console/command line.";
+ return kSbMediaSupportTypeNotSupported;
+ }
+ }
SbMediaSupportType type =
SbMediaCanPlayMimeAndKeySystem(mime_type.c_str(), key_system.c_str());
return type;
@@ -118,6 +167,9 @@
// List of disabled media codecs that will be treated as unsupported.
std::vector<std::string> disabled_media_codecs_;
+ // List of disabled DRM encryption schemes that will be treated as
+ // unsupported.
+ std::vector<std::string> disabled_encryption_schemes_;
};
} // namespace
diff --git a/docker/precommit_hooks/docker-compose.yml b/cobalt/network_bridge/BUILD.gn
similarity index 70%
copy from docker/precommit_hooks/docker-compose.yml
copy to cobalt/network_bridge/BUILD.gn
index 6106d19..4c83d97 100644
--- a/docker/precommit_hooks/docker-compose.yml
+++ b/cobalt/network_bridge/BUILD.gn
@@ -12,16 +12,12 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-version: '2.4'
+static_library("network_bridge") {
+ has_pedantic_warnings = true
-services:
- pre-commit:
- build:
- context: .
- dockerfile: Dockerfile
- image: pre-commit
- volumes:
- - ${COBALT_SRC:-../../}:/code/
- environment:
- FROM_REF: ${FROM_REF:-HEAD^1}
- TO_REF: ${TO_REF:-HEAD}
+ sources = [
+ "cookie_jar.h",
+ "net_poster.cc",
+ "net_poster.h",
+ ]
+}
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/finger_print-expected.png b/cobalt/renderer/rasterizer/testdata/lottie_coverage/finger_print-expected.png
deleted file mode 100755
index 978125d..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/finger_print-expected.png
+++ /dev/null
Binary files differ
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/finger_print.json b/cobalt/renderer/rasterizer/testdata/lottie_coverage/finger_print.json
deleted file mode 100755
index beee64c..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/finger_print.json
+++ /dev/null
@@ -1 +0,0 @@
-{"v":"5.5.3","fr":25,"ip":0,"op":96,"w":730,"h":500,"nm":"FINGERPRINT 2X","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"circle","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[320,132,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[73.25,0],[0,-64],[-69.5,0],[0,55.5]],"o":[[-67.25,0],[0,56],[69.5,0],[0,-55.5]],"v":[[-56.25,-117.25],[-174,2],[-56,118.5],[62.5,-1]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.823529411765,0.890196078431,0.988235294118,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":96,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"hand details","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":0,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[0.314,-154.096],[-117.686,-36.596],[0.314,80.904],[118.314,-36.596]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":1,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[0.802,-153.113],[-117.198,-35.613],[0.802,81.887],[118.802,-35.613]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[0.083,-151.37],[-117.917,-33.87],[0.083,83.63],[118.083,-33.87]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[0.839,-147.872],[-117.161,-30.372],[0.839,87.128],[118.839,-30.372]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-1.987,-143.263],[-119.987,-25.763],[-1.987,91.737],[116.013,-25.763]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-5.003,-135.474],[-123.003,-17.974],[-5.003,99.526],[112.997,-17.974]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-8.319,-127.592],[-126.319,-10.092],[-8.319,107.408],[109.681,-10.092]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-12.854,-119.432],[-130.854,-1.932],[-12.854,115.568],[105.146,-1.932]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":9,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-24.992,-108.918],[-142.992,8.582],[-24.992,126.082],[93.008,8.582]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-31.169,-107.098],[-149.169,10.402],[-31.169,127.902],[86.831,10.402]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-36.57,-107.515],[-154.57,9.985],[-36.57,127.485],[81.43,9.985]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":13,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-44.066,-108.433],[-162.066,9.067],[-44.066,126.567],[73.934,9.067]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":18,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-54.156,-115.724],[-172.156,1.776],[-54.156,119.276],[63.844,1.776]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":54,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-56.031,-116.349],[-174.031,1.151],[-56.031,118.651],[61.969,1.151]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":58,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-49.155,-114.917],[-167.155,2.583],[-49.155,120.083],[68.845,2.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-39.583,-113.183],[-157.583,4.317],[-39.583,121.817],[78.417,4.317]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-25.857,-113.839],[-143.857,3.661],[-25.857,121.161],[92.143,3.661]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":67,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-12.868,-120.448],[-130.868,-2.948],[-12.868,114.552],[105.132,-2.948]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-3.238,-129.453],[-121.238,-11.953],[-3.238,105.547],[114.762,-11.953]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[0.567,-141.116],[-117.433,-23.616],[0.567,93.884],[118.567,-23.616]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":76,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[1.48,-149.526],[-116.52,-32.026],[1.48,85.474],[119.48,-32.026]],"c":true}]},{"t":79,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[0.778,-153.058],[-117.222,-35.558],[0.778,81.942],[118.778,-35.558]],"c":true}]}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.215,"y":1},"o":{"x":0.643,"y":0},"t":14,"s":[{"i":[[0,0],[-1.5,-3.625],[0,0]],"o":[[0,0],[1.5,3.625],[0,0]],"v":[[-102.25,78.25],[-96.75,87.5],[-95,94.625]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0,0],[-1.5,-3.625],[0,0]],"o":[[0,0],[1.5,3.625],[0,0]],"v":[[-115,70.5],[-111.75,75.875],[-110.5,79.25]],"c":false}]},{"i":{"x":0.519,"y":1},"o":{"x":0.333,"y":0},"t":54,"s":[{"i":[[0,0],[-1.5,-3.625],[0,0]],"o":[[0,0],[1.5,3.625],[0,0]],"v":[[-115,70.5],[-111.75,75.875],[-110.5,79.25]],"c":false}]},{"t":76,"s":[{"i":[[0,0],[-1.5,-3.625],[0,0]],"o":[[0,0],[1.5,3.625],[0,0]],"v":[[-102.25,78.25],[-96.75,87.5],[-95,94.625]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.627450980392,0.760784313725,0.976470588235,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 7","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.83,"y":0},"t":14,"s":[{"i":[[0,0],[0,0],[3.669,-9.386],[0,0]],"o":[[0,0],[0,0],[-5.375,13.75],[0,0]],"v":[[-42.75,5.25],[-56.5,21.375],[-62.75,45.125],[-74.5,62.5]],"c":false}]},{"i":{"x":0.215,"y":1},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[0,0],[0,0],[4.119,-7.925],[0,0]],"o":[[0,0],[0,0],[-7.001,12.805],[0,0]],"v":[[-46.789,18.512],[-62.1,34.221],[-71.16,56.098],[-85.615,72.641]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0,0],[0,0],[4.75,-5.875],[0,0]],"o":[[0,0],[0,0],[-9.282,11.48],[0,0]],"v":[[-48.25,24.5],[-65.75,39.625],[-78.75,58.875],[-97,74.25]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":54,"s":[{"i":[[0,0],[0,0],[4.75,-5.875],[0,0]],"o":[[0,0],[0,0],[-9.282,11.48],[0,0]],"v":[[-48.25,24.5],[-65.75,39.625],[-78.75,58.875],[-97,74.25]],"c":false}]},{"i":{"x":0.323,"y":1},"o":{"x":0.167,"y":0.167},"t":66,"s":[{"i":[[0,0],[0,0],[4.119,-7.925],[0,0]],"o":[[0,0],[0,0],[-7.001,12.805],[0,0]],"v":[[-46.789,18.512],[-62.1,34.221],[-71.16,56.098],[-85.615,72.641]],"c":false}]},{"t":76,"s":[{"i":[[0,0],[0,0],[3.669,-9.386],[0,0]],"o":[[0,0],[0,0],[-5.375,13.75],[0,0]],"v":[[-42.75,5.25],[-56.5,21.375],[-62.75,45.125],[-74.5,62.5]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.627450980392,0.760784313725,0.976470588235,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[2]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[0]},{"t":70,"s":[2]}],"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 6","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":14,"s":[{"i":[[0,0],[-1.562,-3.062],[0,0]],"o":[[0,0],[1.938,-1.375],[0,0]],"v":[[-44.812,-12.75],[-39.188,-6.562],[-33.875,-11.312]],"c":false}]},{"i":{"x":0.215,"y":1},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[0,0],[-1.562,-3.062],[0,0]],"o":[[0,0],[1.938,-1.375],[0,0]],"v":[[-45.213,-10.852],[-39.751,-4.612],[-34.406,-9.232]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0,0],[-1.562,-3.062],[0,0]],"o":[[0,0],[1.938,-1.375],[0,0]],"v":[[-43.812,7.562],[-39.75,14.25],[-34.125,10.75]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":54,"s":[{"i":[[0,0],[-1.562,-3.062],[0,0]],"o":[[0,0],[1.938,-1.375],[0,0]],"v":[[-43.812,7.562],[-39.75,14.25],[-34.125,10.75]],"c":false}]},{"i":{"x":0.519,"y":1},"o":{"x":0.167,"y":0.167},"t":66,"s":[{"i":[[0,0],[-1.562,-3.062],[0,0]],"o":[[0,0],[1.938,-1.375],[0,0]],"v":[[-45.688,-6.689],[-40.752,-0.281],[-35.302,-4.479]],"c":false}]},{"t":76,"s":[{"i":[[0,0],[-1.562,-3.062],[0,0]],"o":[[0,0],[1.938,-1.375],[0,0]],"v":[[-44.812,-12.75],[-39.188,-6.562],[-33.875,-11.312]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.627450980392,0.760784313725,0.976470588235,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 5","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":14,"s":[{"i":[[0,0],[-3.121,1.615],[0,0]],"o":[[0,0],[2.92,-1.511],[0,0]],"v":[[-80.018,6.971],[-67.893,2.869],[-61.943,-0.544]],"c":false}]},{"i":{"x":0.215,"y":1},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[0,0],[-3.109,1.616],[0,0]],"o":[[0,0],[4.138,-2.151],[0,0]],"v":[[-81.649,5.6],[-69.638,0.651],[-61.035,-3.714]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0,0],[-3.051,1.743],[0,0]],"o":[[0,0],[2.625,-1.5],[0,0]],"v":[[-75.875,14.312],[-63.375,8.75],[-57.688,6.188]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":54,"s":[{"i":[[0,0],[-3.051,1.743],[0,0]],"o":[[0,0],[2.625,-1.5],[0,0]],"v":[[-75.875,14.312],[-63.375,8.75],[-57.688,6.188]],"c":false}]},{"i":{"x":0.323,"y":1},"o":{"x":0.167,"y":0.167},"t":66,"s":[{"i":[[0,0],[-3.197,1.433],[0,0]],"o":[[0,0],[5.13,-2.3],[0,0]],"v":[[-79.974,7.951],[-67.546,3.113],[-58.201,-0.8]],"c":false}]},{"t":76,"s":[{"i":[[0,0],[-3.121,1.615],[0,0]],"o":[[0,0],[2.92,-1.511],[0,0]],"v":[[-80.018,6.971],[-67.893,2.869],[-61.943,-0.544]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.627450980392,0.760784313725,0.976470588235,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 4","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[3.875,2.75],[0,0]],"o":[[0,0],[-3.875,-2.75],[0,0]],"v":[[-67.252,-5.853],[-74.502,-12.416],[-82.314,-15.916]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.83,"y":0},"t":14,"s":[{"i":[[0,0],[3.875,2.75],[0,0]],"o":[[0,0],[-3.875,-2.75],[0,0]],"v":[[-68.75,-8.5],[-76,-15.062],[-83.812,-18.562]],"c":false}]},{"i":{"x":0.215,"y":1},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[0,0],[3.875,2.75],[0,0]],"o":[[0,0],[-3.875,-2.75],[0,0]],"v":[[-66.325,-0.424],[-75.688,-11.056],[-85.113,-15.649]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0,0],[3.875,2.75],[0,0]],"o":[[0,0],[-3.875,-2.75],[0,0]],"v":[[-64.125,8.5],[-75.25,-5.438],[-86.938,-11.562]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":54,"s":[{"i":[[0,0],[3.875,2.75],[0,0]],"o":[[0,0],[-3.875,-2.75],[0,0]],"v":[[-64.125,8.5],[-75.25,-5.438],[-86.938,-11.562]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":66,"s":[{"i":[[0,0],[3.875,2.75],[0,0]],"o":[[0,0],[-3.875,-2.75],[0,0]],"v":[[-65.075,0.826],[-75.688,-11.056],[-85.113,-15.649]],"c":false}]},{"t":76,"s":[{"i":[[0,0],[3.875,2.75],[0,0]],"o":[[0,0],[-3.875,-2.75],[0,0]],"v":[[-67.252,-5.853],[-74.502,-12.416],[-82.314,-15.916]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.627450980392,0.760784313725,0.976470588235,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 3","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.83,"y":0},"t":14,"s":[{"i":[[0,0],[3.625,3]],"o":[[0,0],[-2.565,-2.122]],"v":[[-55.875,-25.938],[-62.312,-33.812]],"c":false}]},{"i":{"x":0.215,"y":1},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[0,0],[2.402,3.13]],"o":[[0,0],[-1.779,-2.596]],"v":[[-56.709,-20.414],[-61.888,-30.466]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0,0],[0.688,3.312]],"o":[[0,0],[-0.676,-3.26]],"v":[[-54.375,-6.938],[-56.188,-17.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":54,"s":[{"i":[[0,0],[0.688,3.312]],"o":[[0,0],[-0.676,-3.26]],"v":[[-54.375,-6.938],[-56.188,-17.062]],"c":false}]},{"i":{"x":0.323,"y":1},"o":{"x":0.167,"y":0.167},"t":66,"s":[{"i":[[0,0],[2.402,3.13]],"o":[[0,0],[-1.779,-2.596]],"v":[[-53.209,-12.664],[-59.763,-26.841]],"c":false}]},{"t":76,"s":[{"i":[[0,0],[3.625,3]],"o":[[0,0],[-2.565,-2.122]],"v":[[-55.875,-25.938],[-62.312,-33.812]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.627450980392,0.760784313725,0.976470588235,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 2","np":3,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-45.14,-57.253],[-43.261,-54.03],[-37.244,-57.149]],"c":false}]},{"i":{"x":0.215,"y":1},"o":{"x":0.643,"y":0},"t":14,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-30.062,-49.938],[-30.125,-46.062],[-23.25,-46]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-20.062,-18.188],[-20.188,-16.562],[-14.25,-13.938]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":54,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-20.062,-18.188],[-20.188,-16.562],[-14.25,-13.938]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-33.949,-40.675],[-33.102,-38.276],[-27.126,-38.436]],"c":false}]},{"i":{"x":0.438,"y":1},"o":{"x":0.167,"y":0.167},"t":66,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-40.247,-48.742],[-38.941,-45.977],[-32.947,-47.453]],"c":false}]},{"t":76,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-45.14,-57.253],[-43.261,-54.03],[-37.244,-57.149]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.627450980392,0.760784313725,0.976470588235,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":96,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"hand","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[20.051]},{"t":18,"s":[0],"h":1},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":54,"s":[0]},{"t":79,"s":[20.051]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.203,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[251,166,0],"to":[11.5,-5.667,0],"ti":[-34.667,-25,0]},{"t":23,"s":[320,132,0],"h":1},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":54,"s":[320,132,0],"to":[0,0,0],"ti":[14,-44.167,0]},{"t":79,"s":[251,166,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":0,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[0.314,-154.096],[-117.686,-36.596],[0.314,80.904],[118.314,-36.596]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":1,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[0.802,-153.113],[-117.198,-35.613],[0.802,81.887],[118.802,-35.613]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[0.083,-151.37],[-117.917,-33.87],[0.083,83.63],[118.083,-33.87]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[0.839,-147.872],[-117.161,-30.372],[0.839,87.128],[118.839,-30.372]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-1.987,-143.263],[-119.987,-25.763],[-1.987,91.737],[116.013,-25.763]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-5.003,-135.474],[-123.003,-17.974],[-5.003,99.526],[112.997,-17.974]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-8.319,-127.592],[-126.319,-10.092],[-8.319,107.408],[109.681,-10.092]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-12.854,-119.432],[-130.854,-1.932],[-12.854,115.568],[105.146,-1.932]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":9,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-24.992,-108.918],[-142.992,8.582],[-24.992,126.082],[93.008,8.582]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-31.169,-107.098],[-149.169,10.402],[-31.169,127.902],[86.831,10.402]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-36.57,-107.515],[-154.57,9.985],[-36.57,127.485],[81.43,9.985]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":13,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-44.066,-108.433],[-162.066,9.067],[-44.066,126.567],[73.934,9.067]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":18,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-54.156,-115.724],[-172.156,1.776],[-54.156,119.276],[63.844,1.776]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":54,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-56.031,-116.349],[-174.031,1.151],[-56.031,118.651],[61.969,1.151]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":58,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-49.155,-114.917],[-167.155,2.583],[-49.155,120.083],[68.845,2.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-39.583,-113.183],[-157.583,4.317],[-39.583,121.817],[78.417,4.317]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-25.857,-113.839],[-143.857,3.661],[-25.857,121.161],[92.143,3.661]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":67,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-12.868,-120.448],[-130.868,-2.948],[-12.868,114.552],[105.132,-2.948]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-3.238,-129.453],[-121.238,-11.953],[-3.238,105.547],[114.762,-11.953]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[0.567,-141.116],[-117.433,-23.616],[0.567,93.884],[118.567,-23.616]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":76,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[1.48,-149.526],[-116.52,-32.026],[1.48,85.474],[119.48,-32.026]],"c":true}]},{"t":79,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[0.778,-153.058],[-117.222,-35.558],[0.778,81.942],[118.778,-35.558]],"c":true}]}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[6.104,-5.516],[10.943,-13.805],[10.125,-18.25],[3.75,-4.5],[0,0],[0,0],[-4.375,7.125],[-8.035,16.07],[0,0],[-12.505,13.056],[-2.25,6.25],[5.172,-3.649],[4.375,-2.375],[-3.226,4.517],[-4.5,6.75],[-2.625,4.571],[-3.463,2.822],[-3.769,3.912],[6.89,-3.651]],"o":[[-3.493,3.822],[-11.46,14.732],[-7.763,13.993],[-3.75,4.5],[0,0],[0,0],[16,-5],[7.75,-15.5],[0,0],[4.108,-4.289],[2.25,-6.25],[-7.936,5.599],[-4.375,2.375],[4.375,-6.125],[4.5,-6.75],[4.517,-2.99],[4.396,-3.226],[3.836,-3.981],[-5.367,2.844]],"v":[[-57.558,-49.423],[-84.29,-23.275],[-116.54,20.975],[-127.04,48.225],[-157.54,87.225],[-107.04,126.975],[-95.915,100.6],[-60.54,67.225],[-56.915,25.6],[-44.5,7.217],[-31.345,-7.125],[-37.596,-18.788],[-62.29,-0.025],[-72.165,2.725],[-62.79,-13.025],[-53.233,-30.592],[-43.949,-44.477],[-33.349,-52.378],[-40.735,-59.942]],"c":true}]},{"i":{"x":0.215,"y":1},"o":{"x":0.643,"y":0},"t":14,"s":[{"i":[[9.25,-0.625],[14.875,-13.25],[10.125,-18.25],[3.75,-4.5],[0,0],[0,0],[-4.375,7.125],[-8.035,16.07],[0,0],[-3.875,4.5],[-5.979,6.802],[6.102,-4.945],[4.375,-2.375],[-3.226,4.517],[-4.5,6.75],[-4.25,3.375],[-3.25,1],[-4.625,5],[3.75,0.625]],"o":[[-5.803,0.392],[-14.032,12.499],[-7.763,13.993],[-3.75,4.5],[0,0],[0,0],[16,-5],[7.75,-15.5],[0,0],[3.875,-4.5],[6.978,-7.939],[-4.917,3.985],[-4.375,2.375],[4.375,-6.125],[4.5,-6.75],[4.25,-3.375],[4.75,0.375],[2.072,-2.24],[-3.75,-0.625]],"v":[[-42.375,-50.625],[-83.75,-28],[-116,16.25],[-126.5,43.5],[-157,82.5],[-106.5,122.25],[-95.375,95.875],[-60,62.5],[-56.375,20.875],[-44.125,7.875],[-32.786,-7.839],[-40.921,-17.493],[-61.75,-4.75],[-71.625,-2],[-62.25,-17.75],[-48.318,-30.011],[-35.442,-37.972],[-19.125,-42.125],[-20.25,-49.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[24.25,0.875],[18.945,-6.157],[8,-10.75],[3.75,-4.5],[0,0],[0,0],[-4.375,7.125],[-6,6.25],[0,0],[-4.475,3.904],[-4.374,4.999],[7,-2.125],[4.375,-2.375],[-2,3.25],[-7.468,3.168],[-3,0.5],[-4.375,-0.125],[-4,-0.5],[3.824,1.586]],"o":[[-14.13,-0.51],[-10,3.25],[-9.553,12.837],[-3.75,4.5],[0,0],[0,0],[16,-5],[12.001,-12.501],[0,0],[5.875,-5.125],[2.625,-3],[-5.754,1.747],[-4.375,2.375],[1.472,-2.392],[4.125,-1.75],[2.542,-0.424],[4.75,0.375],[3.028,0.379],[-5.125,-2.125]],"v":[[-54,-26.875],[-96.5,-16],[-124.75,14.25],[-136.75,36.75],[-162,71.25],[-123,112.5],[-110.625,78.875],[-81,61.75],[-65.625,39.875],[-44.375,21.625],[-30.125,11.25],[-37.875,0.75],[-59.125,8.25],[-63.875,-0.25],[-53.125,-7.875],[-42.375,-11],[-26.25,-11.625],[-13.75,-10],[-12.25,-16.125]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":54,"s":[{"i":[[24.25,0.875],[18.945,-6.157],[8,-10.75],[3.75,-4.5],[0,0],[0,0],[-4.375,7.125],[-6,6.25],[0,0],[-4.475,3.904],[-4.374,4.999],[7,-2.125],[4.375,-2.375],[-2,3.25],[-7.468,3.168],[-3,0.5],[-4.375,-0.125],[-4,-0.5],[3.824,1.586]],"o":[[-14.13,-0.51],[-10,3.25],[-9.553,12.837],[-3.75,4.5],[0,0],[0,0],[16,-5],[12.001,-12.501],[0,0],[5.875,-5.125],[2.625,-3],[-5.754,1.747],[-4.375,2.375],[1.472,-2.392],[4.125,-1.75],[2.542,-0.424],[4.75,0.375],[3.028,0.379],[-5.125,-2.125]],"v":[[-54,-26.875],[-96.5,-16],[-124.75,14.25],[-136.75,36.75],[-162,71.25],[-123,112.5],[-110.625,78.875],[-81,61.75],[-65.625,39.875],[-44.375,21.625],[-30.125,11.25],[-37.875,0.75],[-59.125,8.25],[-63.875,-0.25],[-53.125,-7.875],[-42.375,-11],[-26.25,-11.625],[-13.75,-10],[-12.25,-16.125]],"c":true}]},{"i":{"x":0.314,"y":1},"o":{"x":0.167,"y":0.167},"t":63,"s":[{"i":[[13.71,-2.837],[14.297,-10.599],[9.234,-15.106],[3.75,-4.5],[0,0],[0,0],[-4.375,7.125],[-7.182,11.954],[0,0],[-9.139,9.219],[-3.14,5.726],[5.938,-3.01],[4.375,-2.375],[-2.712,3.986],[-5.744,5.249],[-2.782,2.864],[-3.845,1.587],[-3.218,2.899],[5.605,-1.456]],"o":[[-7.951,2.006],[-10.848,9.919],[-8.514,13.508],[-3.75,4.5],[0,0],[0,0],[16,-5],[9.532,-14.243],[0,0],[4.849,-4.639],[2.407,-4.888],[-7.021,3.984],[-4.375,2.375],[3.158,-4.56],[4.343,-4.654],[3.689,-1.915],[7.064,0.363],[3.497,-2.154],[-5.265,0.761]],"v":[[-56.067,-39.971],[-89.408,-20.226],[-119.981,18.156],[-131.11,43.415],[-159.409,80.529],[-113.73,120.907],[-102.081,91.493],[-69.116,64.93],[-60.566,31.584],[-44.448,13.257],[-30.834,0.578],[-37.713,-10.598],[-60.963,3.444],[-68.69,1.478],[-58.738,-10.866],[-52.47,-17.714],[-38.939,-29.702],[-25.134,-34.614],[-28.795,-41.575]],"c":true}]},{"t":76,"s":[{"i":[[6.104,-5.516],[10.943,-13.805],[10.125,-18.25],[3.75,-4.5],[0,0],[0,0],[-4.375,7.125],[-8.035,16.07],[0,0],[-12.505,13.056],[-2.25,6.25],[5.172,-3.649],[4.375,-2.375],[-3.226,4.517],[-4.5,6.75],[-2.625,4.571],[-3.463,2.822],[-3.769,3.912],[6.89,-3.651]],"o":[[-3.493,3.822],[-11.46,14.732],[-7.763,13.993],[-3.75,4.5],[0,0],[0,0],[16,-5],[7.75,-15.5],[0,0],[4.108,-4.289],[2.25,-6.25],[-7.936,5.599],[-4.375,2.375],[4.375,-6.125],[4.5,-6.75],[4.517,-2.99],[4.396,-3.226],[3.836,-3.981],[-5.367,2.844]],"v":[[-57.558,-49.423],[-84.29,-23.275],[-116.54,20.975],[-127.04,48.225],[-157.54,87.225],[-107.04,126.975],[-95.915,100.6],[-60.54,67.225],[-56.915,25.6],[-44.5,7.217],[-31.345,-7.125],[-37.596,-18.788],[-62.29,-0.025],[-72.165,2.725],[-62.79,-13.025],[-55.938,-26.205],[-43.949,-44.477],[-33.349,-52.378],[-40.735,-59.942]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.823529411765,0.890196078431,0.988235294118,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823529411765,0.890196078431,0.988235294118,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":96,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"button","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[320,132,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.215,"y":1},"o":{"x":0.657,"y":0},"t":14,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-7.27,-40.033],[-27.76,-39.99],[-27.77,-37.07],[-7.27,-37.105]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-6.041,-12.021],[-26.969,-11.969],[-27,-7.986],[-6.062,-8.031]],"c":true}]},{"i":{"x":0.275,"y":1},"o":{"x":0.717,"y":0},"t":60.115,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-6.041,-12.021],[-26.969,-11.969],[-27,-7.986],[-6.062,-8.031]],"c":true}]},{"t":83,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-7.27,-40.033],[-27.76,-39.99],[-27.77,-37.07],[-7.27,-37.105]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.627450980392,0.760784313725,0.976470588235,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258823529412,0.513725490196,0.949019607843,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":96,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"screen","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[320,132,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[65.17,0],[0,-64.893],[-65.164,0.866],[0.281,57.849]],"o":[[-65.17,0],[0,64.893],[67.781,-0.901],[-0.316,-64.893]],"v":[[-56.031,-116.349],[-174.031,1.151],[-56.031,118.651],[61.969,0.151]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.21,"y":1},"o":{"x":0.634,"y":0},"t":14,"s":[{"i":[[0,0],[5.25,0],[0,-3.25],[0,0],[0,0]],"o":[[0,0],[-5.25,0],[0,3.25],[0,0],[0,0]],"v":[[114,-33.75],[-32,-33.625],[-39.75,-27],[-39.5,174.75],[114.5,175]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0,0],[5.25,0],[-0.625,-4.25],[0,0],[0,0]],"o":[[0,0],[-5.25,0],[0.473,3.215],[0,0],[0,0]],"v":[[117.75,-2],[-29.5,-1.875],[-37,5.5],[-15.5,144.5],[118.5,144.75]],"c":true}]},{"i":{"x":0.275,"y":1},"o":{"x":0.717,"y":0},"t":60,"s":[{"i":[[0,0],[5.25,0],[-0.625,-4.25],[0,0],[0,0]],"o":[[0,0],[-5.25,0],[0.473,3.215],[0,0],[0,0]],"v":[[117.75,-2],[-29.5,-1.875],[-37,5.5],[-15.5,144.5],[118.5,144.75]],"c":true}]},{"t":82.884765625,"s":[{"i":[[0,0],[5.25,0],[0,-3.25],[0,0],[0,0]],"o":[[0,0],[-5.25,0],[0,3.25],[0,0],[0,0]],"v":[[114,-33.75],[-32,-33.625],[-39.75,-27],[-39.5,174.75],[114.5,175]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.823529411765,0.890196078431,0.988235294118,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.235294117647,0.250980392157,0.262745098039,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":96,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"tablet","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[320,132,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[65.17,0],[0,-64.893],[-65.164,0.866],[0.281,57.849]],"o":[[-65.17,0],[0,64.893],[67.781,-0.901],[-0.316,-64.893]],"v":[[-56.031,-116.349],[-174.031,1.151],[-56.031,118.651],[61.969,0.151]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.202,"y":1},"o":{"x":0.63,"y":0},"t":14,"s":[{"i":[[0,0],[5.125,0],[0.125,-5],[0,0],[0,0]],"o":[[0,0],[-5.125,0],[-0.084,3.374],[0,0],[0,0]],"v":[[92.25,-39],[-33.5,-38.375],[-45,-28.875],[-45,162.25],[90.5,163.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0,0],[5.125,0],[0.125,-5],[0,0],[0,0]],"o":[[0,0],[-5.125,0],[-0.084,3.374],[0,0],[0,0]],"v":[[92.25,-7],[-32.75,-6.625],[-42.75,2.875],[-14.594,186.75],[90.5,189.25]],"c":true}]},{"i":{"x":0.275,"y":1},"o":{"x":0.717,"y":0},"t":60.115,"s":[{"i":[[0,0],[5.125,0],[0.125,-5],[0,0],[0,0]],"o":[[0,0],[-5.125,0],[-0.084,3.374],[0,0],[0,0]],"v":[[92.25,-7],[-32.75,-6.625],[-42.75,2.875],[-14.594,186.75],[90.5,189.25]],"c":true}]},{"t":83,"s":[{"i":[[0,0],[5.125,0],[0.125,-5],[0,0],[0,0]],"o":[[0,0],[-5.125,0],[-0.084,3.374],[0,0],[0,0]],"v":[[92.25,-39],[-33.5,-38.375],[-45,-28.875],[-45,162.25],[90.5,163.5]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.850980392157,0.858823529412,0.874509803922,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.941176470588,0.949019607843,0.952941176471,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":96,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"border","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[320,132,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[65.17,0],[0,-64.893],[-65.164,0.866],[0.281,57.849]],"o":[[-65.17,0],[0,64.893],[67.781,-0.901],[-0.316,-64.893]],"v":[[-56.031,-116.349],[-174.031,1.151],[-56.031,118.651],[61.969,0.151]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.202,"y":1},"o":{"x":0.63,"y":0},"t":14,"s":[{"i":[[0,0],[8.5,-0.125],[0,-9.625],[0,0]],"o":[[0,0],[-8.5,0.125],[16.375,2.875],[0,0]],"v":[[93.125,-38.375],[-32.75,-38.125],[-43.5,-22.125],[90.875,0.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0,0],[8.5,-0.125],[-0.25,-4.625],[0,0]],"o":[[0,0],[-8.5,0.125],[16.375,2.875],[0,0]],"v":[[93.25,-13.125],[-32.625,-12.875],[-43.125,2.875],[91,25.5]],"c":true}]},{"i":{"x":0.275,"y":1},"o":{"x":0.717,"y":0},"t":60.115,"s":[{"i":[[0,0],[8.5,-0.125],[-0.25,-4.625],[0,0]],"o":[[0,0],[-8.5,0.125],[16.375,2.875],[0,0]],"v":[[93.25,-13.125],[-32.625,-12.875],[-43.125,2.875],[91,25.5]],"c":true}]},{"t":83,"s":[{"i":[[0,0],[8.5,-0.125],[0,-9.625],[0,0]],"o":[[0,0],[-8.5,0.125],[16.375,2.875],[0,0]],"v":[[93.125,-38.375],[-32.75,-38.125],[-43.5,-22.125],[90.875,0.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.850980392157,0.858823529412,0.874509803922,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":96,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"hand back","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":0,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[0.314,-154.096],[-117.686,-36.596],[0.314,80.904],[118.314,-36.596]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":1,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[0.802,-153.113],[-117.198,-35.613],[0.802,81.887],[118.802,-35.613]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[0.083,-151.37],[-117.917,-33.87],[0.083,83.63],[118.083,-33.87]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[0.839,-147.872],[-117.161,-30.372],[0.839,87.128],[118.839,-30.372]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-1.987,-143.263],[-119.987,-25.763],[-1.987,91.737],[116.013,-25.763]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-5.003,-135.474],[-123.003,-17.974],[-5.003,99.526],[112.997,-17.974]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-8.319,-127.592],[-126.319,-10.092],[-8.319,107.408],[109.681,-10.092]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-12.854,-119.432],[-130.854,-1.932],[-12.854,115.568],[105.146,-1.932]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":9,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-24.992,-108.918],[-142.992,8.582],[-24.992,126.082],[93.008,8.582]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-31.169,-107.098],[-149.169,10.402],[-31.169,127.902],[86.831,10.402]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-36.57,-107.515],[-154.57,9.985],[-36.57,127.485],[81.43,9.985]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":13,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-44.066,-108.433],[-162.066,9.067],[-44.066,126.567],[73.934,9.067]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":18,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-54.156,-115.724],[-172.156,1.776],[-54.156,119.276],[63.844,1.776]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":54,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-56.031,-116.349],[-174.031,1.151],[-56.031,118.651],[61.969,1.151]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":58,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-49.155,-114.917],[-167.155,2.583],[-49.155,120.083],[68.845,2.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-39.583,-113.183],[-157.583,4.317],[-39.583,121.817],[78.417,4.317]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-25.857,-113.839],[-143.857,3.661],[-25.857,121.161],[92.143,3.661]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":67,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-12.868,-120.448],[-130.868,-2.948],[-12.868,114.552],[105.132,-2.948]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[-3.238,-129.453],[-121.238,-11.953],[-3.238,105.547],[114.762,-11.953]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[0.567,-141.116],[-117.433,-23.616],[0.567,93.884],[118.567,-23.616]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":76,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[1.48,-149.526],[-116.52,-32.026],[1.48,85.474],[119.48,-32.026]],"c":true}]},{"t":79,"s":[{"i":[[65.17,0],[0,-64.893],[-65.17,0],[0,64.893]],"o":[[-65.17,0],[0,64.893],[65.17,0],[0,-64.893]],"v":[[0.778,-153.058],[-117.222,-35.558],[0.778,81.942],[118.778,-35.558]],"c":true}]}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.606,"y":0.606},"o":{"x":0.167,"y":0},"t":4,"s":[{"i":[[7.235,-4.106],[5.046,-4.005],[2.952,-2.818],[-8.133,9.096],[-8.054,7.267]],"o":[[-5.969,4.315],[-8.245,6.544],[-8.668,8.275],[8.155,-9.12],[10.187,-7.473]],"v":[[-39.846,13.37],[-53.768,23.78],[-74.56,41.2],[-59.611,53.679],[-35.977,23.378]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.584,"y":0},"t":14,"s":[{"i":[[7.657,1.41],[5.742,-0.232],[4.459,-0.478],[-12.505,2.439],[-11.835,0.489]],"o":[[-2.691,-0.496],[-10.598,0.428],[-12.526,1.342],[12.505,-2.439],[20.412,1.931]],"v":[[-30.526,34.031],[-44.028,33.761],[-71.974,35.908],[-73.741,57.793],[-39.248,46.822]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[7.683,0.569],[5.353,-0.387],[4.336,-0.776],[-12.129,2.782],[-11.64,1.209]],"o":[[-2.7,-0.2],[-9.88,0.715],[-6.685,1.196],[12.129,-2.782],[11.64,-1.209]],"v":[[-55.943,15.569],[-68.774,15.95],[-94.827,18.815],[-89.567,32.554],[-56.14,27.751]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":53,"s":[{"i":[[7.683,0.569],[5.353,-0.387],[4.336,-0.776],[-12.129,2.782],[-11.64,1.209]],"o":[[-2.7,-0.2],[-9.88,0.715],[-6.685,1.196],[12.129,-2.782],[11.64,-1.209]],"v":[[-56.193,16.819],[-71.524,16.45],[-94.827,18.815],[-89.567,32.554],[-58.64,26.251]],"c":true}]},{"t":79,"s":[{"i":[[7.235,-4.106],[5.046,-4.005],[2.952,-2.818],[-8.133,9.096],[-8.054,7.267]],"o":[[-5.969,4.315],[-8.245,6.544],[-8.668,8.275],[8.155,-9.12],[10.187,-7.473]],"v":[[-39.846,13.37],[-53.768,23.78],[-74.56,41.2],[-59.611,53.679],[-35.977,23.378]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.823529411765,0.890196078431,0.988235294118,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.627450980392,0.760784313725,0.976470588235,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 3","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.586,"y":0.586},"o":{"x":0.167,"y":0},"t":4,"s":[{"i":[[6.733,-2.477],[5.059,-4.199],[-9.224,8.193],[-9.044,6.428],[9.451,-2.625]],"o":[[-6.174,3.156],[-5.059,4.199],[9.25,-8.277],[17.315,-5.525],[-5.147,1.43]],"v":[[-55.918,2.009],[-76.839,16.006],[-65.271,31.517],[-38.175,9.222],[-36.707,-6.436]],"c":true}]},{"i":{"x":0.233,"y":1},"o":{"x":0.548,"y":0},"t":14,"s":[{"i":[[3.096,0.3],[6.75,-1.5],[-12.25,3.5],[-11.75,1.5],[0,4.869]],"o":[[-7.75,-0.75],[-6.75,1.5],[12.25,-3.5],[14.991,2.303],[0,-3.239]],"v":[[-32.75,13.25],[-72,17.25],[-66.75,34.75],[-41.577,26.982],[-24.298,20.548]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[3.097,0.289],[6.745,-1.522],[-12.238,3.54],[-11.745,1.539],[1.646,4.118]],"o":[[-7.752,-0.724],[-6.745,1.522],[12.238,-3.54],[7.053,-0.924],[-1.095,-2.74]],"v":[[-45.779,2.684],[-85.015,6.813],[-79.707,24.296],[-45.977,18.184],[-39.121,8]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":53,"s":[{"i":[[3.097,0.289],[6.745,-1.522],[-12.238,3.54],[-11.836,-0.478],[-0.422,4.415]],"o":[[-7.752,-0.724],[-6.745,1.522],[12.238,-3.54],[4.727,0.191],[0.371,-3.875]],"v":[[-41.154,3.934],[-85.015,6.813],[-79.707,24.296],[-47.477,14.684],[-35.746,10.5]],"c":true}]},{"t":79,"s":[{"i":[[6.733,-2.477],[5.059,-4.199],[-9.224,8.193],[-9.044,6.428],[9.451,-2.625]],"o":[[-6.174,3.156],[-5.059,4.199],[9.25,-8.277],[17.315,-5.525],[-5.147,1.43]],"v":[[-55.918,2.009],[-76.839,16.006],[-65.271,31.517],[-38.175,9.222],[-36.707,-6.436]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.823529411765,0.890196078431,0.988235294118,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.627450980392,0.760784313725,0.976470588235,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":4,"s":[{"i":[[8.718,2.911],[6.67,-6.846],[5.423,-5.956],[-8.396,5.743],[-0.226,0.737],[-4.706,1.65]],"o":[[-6.534,2.591],[-6.754,7.068],[-5.423,5.956],[8.396,-5.743],[0.226,-0.737],[5.935,-2.081]],"v":[[-37.463,-35.314],[-61.022,-21.913],[-88.41,3.463],[-79.538,16.751],[-52.109,-11.362],[-36.909,-24.718]],"c":true}]},{"i":{"x":0.215,"y":1},"o":{"x":0.53,"y":0},"t":14,"s":[{"i":[[2.815,4.624],[9.32,-3.493],[7.25,-3.75],[-10,2.5],[0,0],[-4.75,0.75]],"o":[[-4.137,-6.797],[-15.671,5.874],[-7.25,3.75],[10,-2.5],[0,0],[4.75,-0.75]],"v":[[-27.249,-17.202],[-49.474,-16.644],[-87,0.5],[-83.25,16.25],[-45.75,-2],[-33.411,-7.18]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[3.65,7.07],[9.834,-1.532],[8.014,-1.547],[-10.299,-0.429],[0,0],[-4.768,-0.623]],"o":[[-3.65,-7.07],[-9.834,1.532],[-8.014,1.547],[10.299,0.429],[0,0],[4.768,0.623]],"v":[[-23.004,-8.763],[-49.142,-16.467],[-86.534,-8.982],[-87.389,7.185],[-51.099,-0.102],[-34.762,1.064]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":53,"s":[{"i":[[7.212,3.361],[9.834,-1.532],[8.014,-1.547],[-10.299,-0.429],[0,0],[-4.768,-0.623]],"o":[[-3.996,-1.862],[-9.834,1.532],[-8.014,1.547],[10.299,0.429],[0,0],[4.768,0.623]],"v":[[-25.504,-9.263],[-48.267,-14.092],[-86.534,-8.982],[-87.389,7.185],[-47.349,-1.727],[-34.887,-0.686]],"c":true}]},{"t":79,"s":[{"i":[[8.718,2.911],[6.67,-6.846],[5.423,-5.956],[-8.396,5.743],[-0.226,0.737],[-4.706,1.65]],"o":[[-6.534,2.591],[-6.754,7.068],[-5.423,5.956],[8.396,-5.743],[0.226,-0.737],[5.935,-2.081]],"v":[[-37.463,-35.314],[-61.022,-21.913],[-88.41,3.463],[-79.538,16.751],[-52.109,-11.362],[-36.909,-24.718]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.823529411765,0.890196078431,0.988235294118,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.627451002598,0.760784327984,0.976470589638,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":96,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"screen","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[320,132,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.203,"y":1},"o":{"x":0.624,"y":0},"t":14,"s":[{"i":[[3.625,0],[4,0],[0,-4.375],[0,-3.875],[-3.125,0],[-3.375,0],[0,3.5],[0,4.5]],"o":[[-3.625,0],[-4,0],[0,3.5],[0,4.75],[3.125,0],[3.375,0],[0,-3.5],[0,-4.5]],"v":[[176.75,-10.75],[-4.75,-10.625],[-10.125,-4.875],[-9.875,113.375],[-5.125,120.25],[176.75,120.25],[182.375,114.75],[182.5,-4.125]],"c":true}]},{"i":{"x":0.462,"y":0.462},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[3.625,0],[4,0],[-0.875,-5.125],[-0.218,-2.503],[-3.125,0],[-3.375,0],[-0.417,3.475],[-0.659,4.451]],"o":[[-3.625,0],[-4,0],[0.589,3.45],[0.25,2.875],[3.125,0],[3.375,0],[0.375,-3.125],[0.5,-3.375]],"v":[[162.375,15.75],[-17.5,15.875],[-19.875,24.125],[-9,93.5],[-5.5,98],[151.875,97.875],[155.25,93.875],[166.625,20.125]],"c":true}]},{"i":{"x":0.275,"y":1},"o":{"x":0.717,"y":0},"t":60.115,"s":[{"i":[[3.625,0],[4,0],[-0.875,-5.125],[-0.218,-2.503],[-3.125,0],[-3.375,0],[-0.417,3.475],[-0.659,4.451]],"o":[[-3.625,0],[-4,0],[0.589,3.45],[0.25,2.875],[3.125,0],[3.375,0],[0.375,-3.125],[0.5,-3.375]],"v":[[162.375,15.75],[-17.5,15.875],[-19.875,24.125],[-9,93.5],[-5.5,98],[151.875,97.875],[155.25,93.875],[166.625,20.125]],"c":true}]},{"t":83,"s":[{"i":[[3.625,0],[4,0],[0,-4.375],[0,-3.875],[-3.125,0],[-3.375,0],[0,3.5],[0,4.5]],"o":[[-3.625,0],[-4,0],[0,3.5],[0,4.75],[3.125,0],[3.375,0],[0,-3.5],[0,-4.5]],"v":[[176.75,-10.75],[-4.75,-10.625],[-10.125,-4.875],[-9.875,113.375],[-5.125,120.25],[176.75,120.25],[182.375,114.75],[182.5,-4.125]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.066666995778,0.419607992733,0.713725968903,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.235294117647,0.250980392157,0.262745098039,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":96,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"tablet","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[320,132,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.203,"y":1},"o":{"x":0.624,"y":0},"t":14,"s":[{"i":[[5.375,0],[0,-5],[0,-5.5],[-4.5,0],[-5.5,0],[0,4.75],[0,7.5],[5,0]],"o":[[-5.375,0],[0,5],[0,5.5],[4.5,0],[5.5,0],[0,-4.75],[0,-7.5],[-5,0]],"v":[[-5.5,-14.875],[-14.125,-5.625],[-14.25,115.625],[-6.125,124.625],[176.25,124.75],[186.625,116.625],[186.75,-3.625],[178.375,-15.125]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[5.375,0],[-0.625,-7.375],[-1,-6.375],[-4.5,0],[-5.496,0.196],[-1.231,4.588],[-1.258,7.394],[5,0]],"o":[[-5.375,0],[0.422,4.982],[0.852,5.434],[4.5,0],[7,-0.25],[1.375,-5.125],[1,-5.875],[-5,0]],"v":[[-19,9.875],[-25.625,21.125],[-14.5,95.625],[-6.875,103.375],[152.75,103],[160.625,95.125],[172.75,18.625],[163.375,10.125]],"c":true}]},{"i":{"x":0.275,"y":1},"o":{"x":0.717,"y":0},"t":60.115,"s":[{"i":[[5.375,0],[-0.625,-7.375],[-1,-6.375],[-4.5,0],[-5.496,0.196],[-1.231,4.588],[-1.258,7.394],[5,0]],"o":[[-5.375,0],[0.422,4.982],[0.852,5.434],[4.5,0],[7,-0.25],[1.375,-5.125],[1,-5.875],[-5,0]],"v":[[-19,9.875],[-25.625,21.125],[-14.5,95.625],[-6.875,103.375],[152.75,103],[160.625,95.125],[172.75,18.625],[163.375,10.125]],"c":true}]},{"t":83,"s":[{"i":[[5.375,0],[0,-5],[0,-5.5],[-4.5,0],[-5.5,0],[0,4.75],[0,7.5],[5,0]],"o":[[-5.375,0],[0,5],[0,5.5],[4.5,0],[5.5,0],[0,-4.75],[0,-7.5],[-5,0]],"v":[[-5.5,-14.875],[-14.125,-5.625],[-14.25,115.625],[-6.125,124.625],[176.25,124.75],[186.625,116.625],[186.75,-3.625],[178.375,-15.125]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.854901960784,0.862745098039,0.878431372549,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.941176470588,0.949019607843,0.952941176471,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":96,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"border","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[320,132,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.202,"y":1},"o":{"x":0.617,"y":0},"t":14,"s":[{"i":[[5,0],[6.25,-0.125],[-1,-6.875],[-7.125,0]],"o":[[-5,0],[-5.75,0.115],[27.25,0],[0.375,-5.125]],"v":[[179.25,-14.375],[-5.875,-14.25],[-12.375,-2.5],[186,-2.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[5,0],[6.25,-0.125],[-1,-6.875],[-7.125,0]],"o":[[-5,0],[-5.75,0.115],[27.25,0],[0.375,-5.125]],"v":[[166,6.75],[-19.125,6.875],[-25.625,18.625],[172.75,18.375]],"c":true}]},{"i":{"x":0.275,"y":1},"o":{"x":0.717,"y":0},"t":60.115,"s":[{"i":[[5,0],[6.25,-0.125],[-1,-6.875],[-7.125,0]],"o":[[-5,0],[-5.75,0.115],[27.25,0],[0.375,-5.125]],"v":[[166,6.75],[-19.125,6.875],[-25.625,18.625],[172.75,18.375]],"c":true}]},{"t":83,"s":[{"i":[[5,0],[6.25,-0.125],[-1,-6.875],[-7.125,0]],"o":[[-5,0],[-5.75,0.115],[27.25,0],[0.375,-5.125]],"v":[[179.25,-14.375],[-5.875,-14.25],[-12.375,-2.5],[186,-2.75]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.850980392157,0.858823529412,0.874509803922,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":96,"st":0,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"buttons","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[320,132,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.203,"y":1},"o":{"x":0.624,"y":0},"t":14,"s":[{"i":[[0,0],[-2.25,0],[-1.75,0.125],[0,0]],"o":[[0,0],[2.25,0],[1.75,-0.125],[0,0]],"v":[[138.25,125.125],[140.125,127.5],[150.875,127.5],[152.625,125.125]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0,0],[-2.25,0],[-1.75,0.125],[0,0]],"o":[[0,0],[2.25,0],[1.75,-0.125],[0,0]],"v":[[115.75,101],[117.625,103.375],[128.375,103.375],[130.125,101]],"c":true}]},{"i":{"x":0.275,"y":1},"o":{"x":0.717,"y":0},"t":60.115,"s":[{"i":[[0,0],[-2.25,0],[-1.75,0.125],[0,0]],"o":[[0,0],[2.25,0],[1.75,-0.125],[0,0]],"v":[[115.75,101],[117.625,103.375],[128.375,103.375],[130.125,101]],"c":true}]},{"t":83,"s":[{"i":[[0,0],[-2.25,0],[-1.75,0.125],[0,0]],"o":[[0,0],[2.25,0],[1.75,-0.125],[0,0]],"v":[[138.25,125.125],[140.125,127.5],[150.875,127.5],[152.625,125.125]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.203,"y":1},"o":{"x":0.624,"y":0},"t":14,"s":[{"i":[[0,0],[-2.25,0],[-1.75,0.125],[0,0]],"o":[[0,0],[2.25,0],[1.75,-0.125],[0,0]],"v":[[160.875,125],[162.75,127.375],[166.875,127.375],[168.625,125]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0,0],[-2.25,0],[-1.75,0.125],[0,0]],"o":[[0,0],[2.25,0],[1.75,-0.125],[0,0]],"v":[[133,101.375],[134.875,103.75],[139,103.75],[140.75,101.375]],"c":true}]},{"i":{"x":0.275,"y":1},"o":{"x":0.717,"y":0},"t":60.115,"s":[{"i":[[0,0],[-2.25,0],[-1.75,0.125],[0,0]],"o":[[0,0],[2.25,0],[1.75,-0.125],[0,0]],"v":[[133,101.375],[134.875,103.75],[139,103.75],[140.75,101.375]],"c":true}]},{"t":83,"s":[{"i":[[0,0],[-2.25,0],[-1.75,0.125],[0,0]],"o":[[0,0],[2.25,0],[1.75,-0.125],[0,0]],"v":[[160.875,125],[162.75,127.375],[166.875,127.375],[168.625,125]],"c":true}]}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.854901960784,0.862745098039,0.878431372549,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.858823529412,0.866666666667,0.882352941176,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":96,"st":0,"bm":0},{"ddd":0,"ind":13,"ty":0,"nm":"radio waves","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.255,"y":1},"o":{"x":0.683,"y":0},"t":14,"s":[302.5,92.5,0],"to":[0.333,4.167,0],"ti":[-0.333,-4.167,0]},{"t":37,"s":[304.5,117.5,0]}],"ix":2},"a":{"a":0,"k":[302.5,92.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":640,"h":264,"ip":19,"op":70,"st":19,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"radio waves 4","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[100]},{"t":99,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[320,132,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":62,"s":[0,0]},{"t":99,"s":[70,70]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.627450980392,0.760784313725,0.976470588235,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-17.591,-39.614],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":62,"op":99,"st":45,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"radio waves 3","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[100]},{"t":87,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[320,132,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":50,"s":[0,0]},{"t":87,"s":[70,70]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.627450980392,0.760784313725,0.976470588235,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-17.591,-39.614],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":50,"op":87,"st":33,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"radio waves 2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[100]},{"t":49,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[320,132,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":12,"s":[0,0]},{"t":49,"s":[70,70]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.627450980392,0.760784313725,0.976470588235,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-17.591,-39.614],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":12,"op":49,"st":-5,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"radio waves","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":20,"s":[100]},{"t":37,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[320,132,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":0,"s":[0,0]},{"t":37,"s":[70,70]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.627450980392,0.760784313725,0.976470588235,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-17.591,-39.614],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":37,"st":-17,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"pre FINGERPRINT","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[351.5,246,0],"ix":2},"a":{"a":0,"k":[320,132,0],"ix":1},"s":{"a":0,"k":[200,200,100],"ix":6}},"ao":0,"w":640,"h":264,"ip":0,"op":96,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/gesture_go_back-expected.png b/cobalt/renderer/rasterizer/testdata/lottie_coverage/gesture_go_back-expected.png
deleted file mode 100755
index 8cac659..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/gesture_go_back-expected.png
+++ /dev/null
Binary files differ
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/gesture_go_back.json b/cobalt/renderer/rasterizer/testdata/lottie_coverage/gesture_go_back.json
deleted file mode 100755
index 9b7240f..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/gesture_go_back.json
+++ /dev/null
@@ -1 +0,0 @@
-{"v":"5.6.4","fr":60,"ip":0,"op":181,"w":445,"h":445,"nm":"Gesture Go back ","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":1,"nm":"White Solid 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-158.438,222.5,0],"ix":2},"a":{"a":0,"k":[222.5,222.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[485.658,114],[375.438,114],[375.438,318.68],[485.658,318.68]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":445,"sh":445,"sc":"#ffffff","ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":1,"nm":"Pale Royal Blue Solid 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-153.375,222.5,0],"ix":2},"a":{"a":0,"k":[222.5,222.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[462.902,119],[370.875,119],[370.875,311.615],[462.902,311.615]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":445,"sh":445,"sc":"#f0f2f3","ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 10","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[222.5,222.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"arrow Outlines 2","parent":8,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":106,"s":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":132,"s":[100]},{"t":144,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.12,"y":0.91},"o":{"x":0.88,"y":0.09},"t":106,"s":[4.591,12.717,0],"to":[1.354,0,0],"ti":[-1.354,0,0]},{"t":129.072265625,"s":[12.716,12.717,0]}],"ix":2},"a":{"a":0,"k":[6.117,6.117,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[5.867,-0.734],[-3.061,-0.734],[1.036,-4.831],[-0.001,-5.867],[-5.867,-0.001],[-0.001,5.867],[1.036,4.829],[-3.061,0.732],[5.867,0.732]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[6.117,6.117],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":96,"op":696,"st":96,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"backicon white 2 Outlines 3","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.12],"y":[0.908]},"o":{"x":[0.167],"y":[0.167]},"t":116.857,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":132,"s":[100]},{"t":144,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.12,"y":0.886},"o":{"x":0.88,"y":0.114},"t":106,"s":[49.448,222.908,0],"to":[11.25,0,0],"ti":[-11.25,0,0]},{"t":129.072265625,"s":[116.948,222.908,0]}],"ix":2},"a":{"a":0,"k":[12.716,12.716,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,6.885],[-6.885,0],[0,-6.885],[6.886,0]],"o":[[0,-6.885],[6.886,0],[0,6.885],[-6.885,0]],"v":[[-12.467,0.001],[-0.001,-12.467],[12.467,0.001],[-0.001,12.467]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.101960784314,0.450980392157,0.909803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[12.716,12.717],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":96,"op":696,"st":96,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"touch blue Outlines 2","parent":8,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":129.072,"s":[54]},{"t":144,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[12.716,12.717,0],"ix":2},"a":{"a":0,"k":[22.25,22.25,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":116,"s":[60,60,100]},{"t":129.072265625,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,12.15],[-12.15,0],[0,-12.15],[12.15,0]],"o":[[0,-12.15],[12.15,0],[0,12.15],[-12.15,0]],"v":[[-22,0],[0,-22],[22,0],[0,22]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.560999971278,0.677999997606,0.933000033509,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[22.25,22.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":96,"op":696,"st":96,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"backicon white Outlines 2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":116.857,"s":[100]},{"t":129.072265625,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.12,"y":0.886},"o":{"x":0.88,"y":0.114},"t":106,"s":[49.448,222.908,0],"to":[11.25,0,0],"ti":[-11.25,0,0]},{"t":129.072265625,"s":[116.948,222.908,0]}],"ix":2},"a":{"a":0,"k":[12.716,12.716,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,6.885],[-6.885,0],[0,-6.885],[6.886,0]],"o":[[0,-6.885],[6.886,0],[0,6.885],[-6.885,0]],"v":[[-12.467,0.001],[-0.001,-12.467],[12.467,0.001],[-0.001,12.467]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[12.716,12.717],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":96,"op":696,"st":96,"bm":0},{"ddd":0,"ind":8,"ty":3,"nm":"backicon white","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":116.857,"s":[100]},{"t":129.072265625,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.12,"y":0.886},"o":{"x":0.88,"y":0.114},"t":106,"s":[49.448,222.908,0],"to":[11.25,0,0],"ti":[-11.25,0,0]},{"t":129.072265625,"s":[116.948,222.908,0]}],"ix":2},"a":{"a":0,"k":[12.716,12.716,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":96,"op":696,"st":96,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"arrow Outlines","parent":12,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19.34,"s":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40.805,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[100]},{"t":52,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19.34,"s":[2.35]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":41,"s":[13.1]},{"t":46,"s":[13.1]}],"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":19.34,"s":[12.717]},{"t":41,"s":[12.717]}],"ix":4}},"a":{"a":0,"k":[6.117,6.117,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[5.867,-0.734],[-3.061,-0.734],[1.036,-4.831],[-0.001,-5.867],[-5.867,-0.001],[-0.001,5.867],[1.036,4.829],[-3.061,0.732],[5.867,0.732]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[6.117,6.117],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":18,"op":605,"st":5,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"backicon white 2 Outlines 2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46.172,"s":[100]},{"t":52,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.33,"y":0},"t":18,"s":[52.948,222.908,0],"to":[11.25,0,0],"ti":[-11.25,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":41,"s":[120.448,222.908,0],"to":[0,0,0],"ti":[0,0,0]},{"t":46,"s":[120.448,222.908,0]}],"ix":2},"a":{"a":0,"k":[12.716,12.716,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,6.885],[-6.885,0],[0,-6.885],[6.886,0]],"o":[[0,-6.885],[6.886,0],[0,6.885],[-6.885,0]],"v":[[-12.467,0.001],[-0.001,-12.467],[12.467,0.001],[-0.001,12.467]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.101960791794,0.450980422076,0.909803981407,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[12.716,12.717],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":18,"op":605,"st":5,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"backicon white 2 Outlines","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46.172,"s":[0]},{"t":52,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.33,"y":0},"t":18,"s":[52.948,222.908,0],"to":[11.25,0,0],"ti":[-11.25,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":41,"s":[120.448,222.908,0],"to":[0,0,0],"ti":[0,0,0]},{"t":46,"s":[120.448,222.908,0]}],"ix":2},"a":{"a":0,"k":[12.716,12.716,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,6.885],[-6.885,0],[0,-6.885],[6.886,0]],"o":[[0,-6.885],[6.886,0],[0,6.885],[-6.885,0]],"v":[[-12.467,0.001],[-0.001,-12.467],[12.467,0.001],[-0.001,12.467]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[12.716,12.717],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":18,"op":605,"st":5,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"backicon white Outlines","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[100]},{"t":52,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.33,"y":0},"t":18,"s":[52.948,222.908,0],"to":[11.25,0,0],"ti":[-11.25,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":41,"s":[120.448,222.908,0],"to":[0,0,0],"ti":[0,0,0]},{"t":46,"s":[120.448,222.908,0]}],"ix":2},"a":{"a":0,"k":[12.716,12.716,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,6.885],[-6.885,0],[0,-6.885],[6.886,0]],"o":[[0,-6.885],[6.886,0],[0,6.885],[-6.885,0]],"v":[[-12.467,0.001],[-0.001,-12.467],[12.467,0.001],[-0.001,12.467]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[12.716,12.717],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":18,"op":605,"st":5,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"touch blue Outlines","parent":12,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[54]},{"t":52,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[12.716,12.717,0],"ix":2},"a":{"a":0,"k":[22.25,22.25,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.33,0.33,0.33],"y":[0,0,0]},"t":18,"s":[60,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":41,"s":[100,100,100]},{"t":46,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,12.15],[-12.15,0],[0,-12.15],[12.15,0]],"o":[[0,-12.15],[12.15,0],[0,12.15],[-12.15,0]],"v":[[-22,0],[0,-22],[22,0],[0,22]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.560999971278,0.677999997606,0.933000033509,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[22.25,22.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":18,"op":605,"st":5,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"Thumb nail","parent":17,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[6.567,12.936,0],"ix":2},"a":{"a":0,"k":[7.357,10.534,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.1,"y":1},"o":{"x":0.333,"y":0},"t":16,"s":[{"i":[[0,0],[0,0],[0.275,0.579],[0,0]],"o":[[0,0],[0.579,-0.275],[0,0],[0,0]],"v":[[-1.078,5.534],[1.53,4.831],[2.082,3.285],[-2.357,-5.534]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":46,"s":[{"i":[[0,0],[0,0],[0.275,0.579],[0,0]],"o":[[0,0],[0.579,-0.275],[0,0],[0,0]],"v":[[-1.078,5.534],[0.539,5.214],[3.889,2.587],[-0.55,-6.232]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":75,"s":[{"i":[[0,0],[0,0],[0.275,0.579],[0,0]],"o":[[0,0],[0.579,-0.275],[0,0],[0,0]],"v":[[-1.078,5.534],[0.539,5.214],[3.889,2.587],[-0.55,-6.232]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.33,"y":0},"t":96,"s":[{"i":[[0,0],[0,0],[0.275,0.579],[0,0]],"o":[[0,0],[0.579,-0.275],[0,0],[0,0]],"v":[[-1.078,5.534],[1.53,4.831],[2.082,3.285],[-2.357,-5.534]],"c":false}]},{"i":{"x":0.1,"y":1},"o":{"x":0.9,"y":0},"t":109,"s":[{"i":[[0,0],[0,0],[0.275,0.579],[0,0]],"o":[[0,0],[0.579,-0.275],[0,0],[0,0]],"v":[[-1.078,5.534],[1.53,4.831],[2.082,3.285],[-2.357,-5.534]],"c":false}]},{"t":129,"s":[{"i":[[0,0],[0,0],[0.275,0.579],[0,0]],"o":[[0,0],[0.579,-0.275],[0,0],[0,0]],"v":[[-1.078,5.534],[0.539,5.214],[1.091,3.668],[-3.348,-5.151]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.584999952129,0.758000033509,0.994000004787,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[7.357,10.534],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":"Thumb wrinkle","parent":17,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":16,"s":[-18]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":46,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.33],"y":[0]},"t":96,"s":[-18]},{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.9],"y":[0]},"t":109,"s":[-18]},{"t":129,"s":[0]}],"ix":10},"p":{"a":0,"k":[27.512,23.803,0],"ix":2},"a":{"a":0,"k":[10.082,4.23,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.1,"y":1},"o":{"x":0.333,"y":0},"t":16,"s":[{"i":[[0,0],[0,0]],"o":[[-2.911,0.838],[0,0]],"v":[[2.456,-1.855],[-0.96,0.103]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":46,"s":[{"i":[[0,0],[0,0]],"o":[[-2.911,0.838],[0,0]],"v":[[2.456,-1.855],[0.072,0.075]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":75,"s":[{"i":[[0,0],[0,0]],"o":[[-2.911,0.838],[0,0]],"v":[[2.456,-1.855],[0.072,0.075]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.33,"y":0},"t":96,"s":[{"i":[[0,0],[0,0]],"o":[[-2.911,0.838],[0,0]],"v":[[2.456,-1.855],[-0.96,0.103]],"c":false}]},{"i":{"x":0.1,"y":1},"o":{"x":0.9,"y":0},"t":109,"s":[{"i":[[0,0],[0,0]],"o":[[-2.911,0.838],[0,0]],"v":[[2.456,-1.855],[-0.96,0.103]],"c":false}]},{"t":129,"s":[{"i":[[0,0],[0,0]],"o":[[-2.911,0.838],[0,0]],"v":[[2.456,-1.855],[-2.456,1.855]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.584999952129,0.758000033509,0.994000004787,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[7.457,6.856],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"Thumb top","parent":19,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":16,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":46,"s":[-10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[-10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.33],"y":[0]},"t":96,"s":[0]},{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.9],"y":[0]},"t":109,"s":[0]},{"t":129,"s":[-10]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.1,"y":1},"o":{"x":0.333,"y":0},"t":16,"s":[18.797,13.493,0],"to":[0.131,-0.064,0],"ti":[-0.131,0.064,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46,"s":[19.582,13.108,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":75,"s":[19.582,13.108,0],"to":[-0.131,0.064,0],"ti":[0.131,-0.064,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.33,"y":0.33},"t":96,"s":[18.797,13.493,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.1,"y":1},"o":{"x":0.9,"y":0},"t":109,"s":[18.797,13.493,0],"to":[0.131,-0.064,0],"ti":[-0.131,0.064,0]},{"t":129,"s":[19.582,13.108,0]}],"ix":2},"a":{"a":0,"k":[24.415,32.846,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.9,"y":0},"t":46,"s":[{"i":[[0,0],[1.764,3.78],[-2.009,0.695],[-2.812,-9.641],[0,0],[5.009,-1.46],[0,0],[0.925,5.708]],"o":[[-0.232,-0.798],[-0.898,-1.927],[10.083,-4.007],[0,0],[1.461,5.01],[0,0],[-5.551,1.619],[0,0]],"v":[[-8.725,0.397],[-13.267,-9.691],[-11.187,-14.59],[11.336,0.128],[12.704,4.82],[6.253,16.585],[4.905,16.977],[-7.286,9.279]],"c":true}]},{"i":{"x":0.1,"y":1},"o":{"x":0.167,"y":0.167},"t":75,"s":[{"i":[[0,0],[1.764,3.78],[-2.009,0.695],[-2.812,-9.641],[0,0],[5.009,-1.46],[0,0],[0.925,5.708]],"o":[[-0.232,-0.798],[-0.898,-1.927],[10.083,-4.007],[0,0],[1.461,5.01],[0,0],[-5.551,1.619],[0,0]],"v":[[-8.725,0.397],[-13.267,-9.691],[-11.187,-14.59],[11.336,0.128],[12.704,4.82],[6.253,16.585],[4.905,16.977],[-7.286,9.279]],"c":true}]},{"t":129,"s":[{"i":[[0,0],[1.764,3.78],[-2.009,0.695],[-2.812,-9.641],[0,0],[5.009,-1.46],[0,0],[0.925,5.708]],"o":[[-0.232,-0.798],[-0.898,-1.927],[10.083,-4.007],[0,0],[1.461,5.01],[0,0],[-5.551,1.619],[0,0]],"v":[[-8.725,0.397],[-13.267,-9.691],[-11.187,-14.59],[11.336,0.128],[12.704,4.82],[6.253,16.585],[4.905,16.977],[-7.286,9.279]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.810000011968,0.890999947342,0.998000021542,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[14.415,18.847],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"Thumb border line","parent":19,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.68],"y":[-0.196]},"t":16,"s":[-45]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":46,"s":[-33]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[-33]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.33],"y":[0]},"t":96,"s":[-45]},{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.9],"y":[0]},"t":109,"s":[-45]},{"t":129,"s":[-28]}],"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.68],"y":[-7.516]},"t":16,"s":[29.473]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":46,"s":[29.705]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[29.705]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.33],"y":[0]},"t":96,"s":[29.473]},{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.9],"y":[0]},"t":109,"s":[29.473]},{"t":129,"s":[28.343]}],"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.68],"y":[1.417]},"t":16,"s":[8.299]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":46,"s":[7.625]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[9.651]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.33],"y":[0]},"t":96,"s":[8.299]},{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.9],"y":[0]},"t":109,"s":[8.299]},{"t":129,"s":[8.303]}],"ix":4}},"a":{"a":0,"k":[7.657,5.806,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[-3.064,12.767],[0,0]],"v":[[1.532,-8.556],[-0.609,8.556]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.584999952129,0.758000033509,0.994000004787,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[6.532,13.556],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":19,"ty":4,"nm":"Thumb bottom","parent":28,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.175],"y":[0]},"t":0,"s":[15.556]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":46,"s":[16.556]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[16.556]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.33],"y":[0]},"t":96,"s":[15.556]},{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.9],"y":[0]},"t":109,"s":[15.556]},{"t":129,"s":[17]}],"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":46,"s":[27.091]},{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[27.091]},{"t":129,"s":[28.041]}],"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":46,"s":[103.199]},{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[103.199]},{"t":129,"s":[102.88]}],"ix":4}},"a":{"a":0,"k":[59.637,47.74,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.903,1.245],[0,0],[0,0],[0,0],[6.242,6.985],[0,0]],"o":[[0,0],[0,0],[0,0],[-8,2],[0,0],[-5.02,-4.898]],"v":[[-26.871,-33.016],[-24.243,-33.49],[36.387,-9.787],[22.881,31.49],[-0.949,15.691],[-31.367,-18.348]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.810000011968,0.890999947342,0.998000021542,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[36.637,33.74],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":20,"ty":4,"nm":"Forfinger nail","parent":23,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[8.719,9.876,0],"to":[0.784,2.042,0],"ti":[-1.574,-1.183,0]},{"i":{"x":0.1,"y":1},"o":{"x":0.333,"y":0},"t":16,"s":[13.425,22.126,0],"to":[1.574,1.183,0],"ti":[-0.79,0.859,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46,"s":[18.163,16.973,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":75,"s":[18.163,16.973,0],"to":[-1.397,-0.762,0],"ti":[0.79,-0.859,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":96,"s":[9.781,12.404,0],"to":[-0.79,0.859,0],"ti":[-0.829,-1.563,0]},{"i":{"x":0.1,"y":1},"o":{"x":0.88,"y":0.453},"t":109,"s":[13.425,22.126,0],"to":[0.829,1.563,0],"ti":[-0.222,0.057,0]},{"t":129,"s":[14.754,21.784,0]}],"ix":2},"a":{"a":0,"k":[10.945,10.342,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[-1.552,0.259],[0,0]],"o":[[0,0],[0.175,0.845],[0,0],[0,0]],"v":[[-2.82,0.401],[-2.096,4.173],[0.709,5.49],[6.721,3.2]],"c":false}]},{"i":{"x":0.1,"y":1},"o":{"x":0.333,"y":0},"t":16,"s":[{"i":[[0,0],[0,0],[-0.895,0.281],[0,0]],"o":[[0,0],[0.137,0.937],[0,0],[0,0]],"v":[[-2.361,1.028],[-2.679,1.691],[-0.691,2.138],[4.626,-0.074]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":46,"s":[{"i":[[0,0],[0,0],[-1.074,0.273],[0,0]],"o":[[0,0],[0.213,1.182],[0,0],[0,0]],"v":[[-2.524,-0.268],[-2.634,2.143],[0.445,2.938],[4.574,1.471]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":75,"s":[{"i":[[0,0],[0,0],[-1.074,0.273],[0,0]],"o":[[0,0],[0.213,1.182],[0,0],[0,0]],"v":[[-2.524,-0.268],[-2.634,2.143],[0.445,2.938],[4.574,1.471]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":96,"s":[{"i":[[0,0],[0,0],[-1.552,0.259],[0,0]],"o":[[0,0],[0.175,0.845],[0,0],[0,0]],"v":[[-2.82,0.401],[-2.096,4.173],[0.709,5.49],[6.721,3.2]],"c":false}]},{"i":{"x":0.1,"y":1},"o":{"x":0.88,"y":0.14},"t":109,"s":[{"i":[[0,0],[0,0],[-0.895,0.281],[0,0]],"o":[[0,0],[0.137,0.937],[0,0],[0,0]],"v":[[-2.361,1.028],[-2.679,1.691],[-0.691,2.138],[4.626,-0.074]],"c":false}]},{"t":129,"s":[{"i":[[0,0],[0,0],[-1.074,0.273],[0,0]],"o":[[0,0],[0.213,1.182],[0,0],[0,0]],"v":[[-3.304,-0.2],[-3.204,1.283],[-0.125,2.078],[4.004,0.611]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.584999952129,0.758000033509,0.994000004787,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":3,"lj":3,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[9.444,8.343],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":21,"ty":4,"nm":"Forfinger wrinkle","parent":23,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[2]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":16,"s":[-1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[-1]},{"i":{"x":[0.67],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[2]},{"t":109,"s":[-1]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[26.419,52.39,0],"to":[-0.18,-0.43,0],"ti":[-0.733,0.334,0]},{"i":{"x":0.1,"y":1},"o":{"x":0.333,"y":0},"t":16,"s":[25.342,49.811,0],"to":[0.733,-0.334,0],"ti":[-0.912,-0.096,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46,"s":[30.814,50.387,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":75,"s":[30.814,50.387,0],"to":[-0.733,0.334,0],"ti":[0.663,0.112,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":96,"s":[26.419,52.39,0],"to":[-0.663,-0.112,0],"ti":[-0.535,0.028,0]},{"i":{"x":0.1,"y":1},"o":{"x":0.88,"y":0.203},"t":109,"s":[26.838,49.713,0],"to":[0.535,-0.028,0],"ti":[-0.465,-0.418,0]},{"t":129,"s":[29.631,52.222,0]}],"ix":2},"a":{"a":0,"k":[11.35,5.174,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-2.276,0.709],[-1.206,0.042]],"o":[[1.111,-0.809],[1.798,-0.562],[0,0]],"v":[[-4.85,1.673],[0.245,-0.889],[4.85,-1.673]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.584999952129,0.758000033509,0.994000004787,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[9.85,6.674],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":22,"ty":4,"nm":"Forfinger borderline","parent":23,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":16,"s":[14]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":46,"s":[11]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":75,"s":[14]},{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.88],"y":[0.14]},"t":109,"s":[14]},{"t":129,"s":[11]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.1,"y":1},"o":{"x":0.333,"y":0},"t":16,"s":[50.768,85.811,0],"to":[-0.105,0.014,0],"ti":[0.105,-0.014,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46,"s":[50.136,85.893,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":75,"s":[50.136,85.893,0],"to":[0.105,-0.014,0],"ti":[0,0,0]},{"i":{"x":0.1,"y":1},"o":{"x":0.88,"y":0.14},"t":109,"s":[50.768,85.811,0],"to":[0,0,0],"ti":[0.105,-0.014,0]},{"t":129,"s":[50.136,85.893,0]}],"ix":2},"a":{"a":0,"k":[8.003,9.498,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-2.698,-2.879]],"o":[[0,0],[0,0]],"v":[[-3.003,-4.498],[3.003,4.498]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.584999952129,0.758000033509,0.994000004787,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[8.003,9.498],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":23,"ty":4,"nm":"Forfinger","parent":28,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[-4]},{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.675],"y":[0]},"t":16,"s":[-4]},{"i":{"x":[0.833],"y":[0.267]},"o":{"x":[0.297],"y":[0]},"t":46,"s":[8]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.041]},"t":86,"s":[6]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[-3]},{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.88],"y":[0.14]},"t":109,"s":[-4]},{"t":129,"s":[9]}],"ix":10},"p":{"a":0,"k":[30.907,52.47,0],"ix":2},"a":{"a":0,"k":[45.715,111.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[-5.834,2.261],[0,0],[-1.46,-2.604],[0,0],[0,0],[1.432,7.604],[7.284,29.085],[1.346,4.997]],"o":[[0,0],[2.313,-0.897],[0,0],[0,0],[0,0],[-8.024,-42.619],[-1.906,-7.61],[-1.627,-6.042]],"v":[[-25.084,-78.624],[-24.826,-78.731],[-16.891,-75.791],[1.364,-30.252],[31.965,42.729],[0.503,72.146],[-19.49,-22.018],[-30.339,-64.261]],"c":true}]},{"i":{"x":0.1,"y":1},"o":{"x":0.333,"y":0},"t":16,"s":[{"i":[[-5.834,2.261],[0,0],[-0.915,-2.306],[0,0],[0,0],[1.432,7.604],[4.878,24.758],[0.795,7.041]],"o":[[0,0],[3.616,0.017],[0,0],[0,0],[0,0],[-7.249,-38.501],[-1.934,-9.819],[-0.703,-6.227]],"v":[[-21.417,-64.342],[-18.764,-64.662],[-11.349,-57.748],[1.053,-31.944],[31.965,42.729],[0.503,72.146],[-20.596,-24.684],[-26.572,-49.596]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":46,"s":[{"i":[[-5.834,2.261],[0,0],[-0.915,-2.306],[0,0],[0,0],[1.432,7.604],[4.764,25.988],[0.857,5.122]],"o":[[0,0],[2.313,-0.897],[0,0],[0,0],[0,0],[-8.024,-42.619],[-1.247,-6.8],[-1.032,-6.171]],"v":[[-17.452,-70.181],[-14.257,-69.983],[-7.396,-65.103],[5.867,-29.45],[31.965,42.729],[0.503,72.146],[-19.644,-33.885],[-22.817,-51.824]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":75,"s":[{"i":[[-5.834,2.261],[0,0],[-0.915,-2.306],[0,0],[0,0],[1.432,7.604],[4.764,25.988],[0.857,5.122]],"o":[[0,0],[2.313,-0.897],[0,0],[0,0],[0,0],[-8.024,-42.619],[-1.247,-6.8],[-1.032,-6.171]],"v":[[-17.452,-70.181],[-14.257,-69.983],[-7.396,-65.103],[5.867,-29.45],[31.965,42.729],[0.503,72.146],[-19.644,-33.885],[-22.817,-51.824]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":96,"s":[{"i":[[-5.834,2.261],[0,0],[-1.46,-2.604],[0,0],[0,0],[1.432,7.604],[7.284,29.085],[1.346,4.997]],"o":[[0,0],[2.313,-0.897],[0,0],[0,0],[0,0],[-8.024,-42.619],[-1.906,-7.61],[-1.627,-6.042]],"v":[[-24.191,-74.35],[-23.684,-74.451],[-15.998,-71.517],[2.12,-30.483],[31.965,42.728],[0.503,72.146],[-20.496,-21.793],[-29.446,-59.987]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.88,"y":0.14},"t":109,"s":[{"i":[[-5.834,2.261],[0,0],[-0.915,-2.306],[0,0],[0,0],[1.432,7.604],[4.878,24.758],[0.795,7.041]],"o":[[0,0],[3.616,0.017],[0,0],[0,0],[0,0],[-7.249,-38.501],[-1.934,-9.819],[-0.703,-6.227]],"v":[[-21.417,-64.342],[-18.764,-64.662],[-11.349,-57.748],[1.053,-31.944],[31.965,42.729],[0.503,72.146],[-20.596,-24.684],[-26.572,-49.596]],"c":true}]},{"t":129,"s":[{"i":[[-5.834,2.261],[0,0],[-0.915,-2.306],[0,0],[0,0],[1.432,7.604],[4.878,24.758],[0.795,7.041]],"o":[[0,0],[3.616,0.017],[0,0],[0,0],[0,0],[-7.249,-38.501],[-1.934,-9.819],[-0.703,-6.227]],"v":[[-21.417,-64.342],[-18.764,-64.662],[-11.349,-57.748],[1.053,-31.944],[31.965,42.729],[0.503,72.146],[-20.596,-24.684],[-26.572,-49.596]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.810000011968,0.890999947342,0.998000021542,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[32.216,80],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":24,"ty":4,"nm":"Middlefinger wrinkle","parent":26,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":16,"s":[-5]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":46,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[0]},{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.9],"y":[0]},"t":109,"s":[-5]},{"t":129,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.1,"y":1},"o":{"x":0.333,"y":0},"t":16,"s":[30.999,13.704,0],"to":[0.27,-0.411,0],"ti":[-0.27,0.411,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46,"s":[32.618,11.238,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":75,"s":[32.618,11.238,0],"to":[-0.27,0.411,0],"ti":[-0.212,-0.453,0]},{"i":{"x":0.1,"y":1},"o":{"x":0.9,"y":0},"t":116,"s":[30.999,13.704,0],"to":[0.212,0.453,0],"ti":[-0.482,-0.042,0]},{"t":129,"s":[33.891,13.954,0]}],"ix":2},"a":{"a":0,"k":[11.279,5.341,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-2.35,0.402],[-1.202,-0.118]],"o":[[1.209,-0.653],[1.856,-0.318],[0,0]],"v":[[-5.029,1.092],[0.361,-0.773],[5.029,-0.939]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.584999952129,0.758000033509,0.994000004787,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[10.029,6.091],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":25,"ty":4,"nm":"Middlefinger border line","parent":26,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[47.644,40.112,0],"ix":2},"a":{"a":0,"k":[11.039,23.172,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-6.039,-18.172],[6.039,15.383],[5.809,18.172]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.584999952129,0.758000033509,0.994000004787,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[11.039,23.172],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":26,"ty":4,"nm":"Middlefinger","parent":28,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":46,"s":[0.556]},{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":75,"s":[0.556]},{"t":129,"s":[0.556]}],"ix":10},"p":{"a":0,"k":[54.275,33.441,0],"ix":2},"a":{"a":0,"k":[43.966,61.435,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":46,"s":[{"i":[[-0.486,1.22],[0,0],[-1.404,-0.571],[0,0],[-0.437,-1.213],[0,0],[0,0],[0,0],[2.456,3.338],[0.063,0.134]],"o":[[0.501,-1.257],[1.338,-0.713],[0,0],[1.194,0.486],[0,0],[0,0],[0,0],[0,0],[-0.298,-0.405],[-0.727,-1.54]],"v":[[-20.808,-27.749],[-18.715,-30.179],[-12.387,-31.114],[8.492,-22.622],[11.054,-19.953],[26.717,23.56],[3.272,31.685],[-10.344,-9.766],[-18.92,-19.427],[-20.516,-21.872]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":75,"s":[{"i":[[-0.702,0.459],[0,0],[-1.404,-0.571],[0,0],[-0.437,-1.213],[0,0],[0,0],[0,0],[1.571,2.35],[0.029,0.062]],"o":[[0.702,-0.459],[1.338,-0.713],[0,0],[1.194,0.486],[0,0],[0,0],[0,0],[0,0],[-0.083,-0.124],[-0.727,-1.54]],"v":[[-22.723,-28.66],[-16.712,-30.89],[-12.387,-31.114],[8.492,-22.622],[11.054,-19.953],[26.717,23.56],[3.272,31.685],[-10.344,-9.766],[-22.628,-25.027],[-22.798,-25.307]],"c":true}]},{"i":{"x":0.1,"y":1},"o":{"x":0.9,"y":0},"t":109,"s":[{"i":[[-0.152,0.825],[0,0],[-1.889,-0.292],[0,0],[-0.437,-1.213],[0,0],[0,0],[0,0],[1.285,1.839],[0.019,0.066]],"o":[[0.355,-1.93],[1.799,-0.732],[0,0],[1.194,0.486],[0,0],[0,0],[0,0],[0,0],[-0.068,-0.097],[-1.119,-3.823]],"v":[[-21.002,-24.623],[-17.471,-28.721],[-10.288,-29.35],[8.492,-22.622],[11.054,-19.953],[26.717,23.56],[1.68,30.019],[-9.387,-10.569],[-20.239,-19.561],[-20.37,-19.805]],"c":true}]},{"t":129,"s":[{"i":[[-0.702,0.459],[0,0],[-1.404,-0.571],[0,0],[-0.437,-1.213],[0,0],[0,0],[0,0],[1.571,2.35],[0.029,0.062]],"o":[[0.702,-0.459],[1.338,-0.713],[0,0],[1.194,0.486],[0,0],[0,0],[0,0],[0,0],[-0.083,-0.124],[-0.727,-1.54]],"v":[[-22.723,-28.66],[-16.712,-30.89],[-12.387,-31.114],[8.492,-22.622],[12.114,-17.689],[26.717,23.56],[3.272,31.685],[-10.344,-9.766],[-22.628,-25.027],[-22.798,-25.307]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.810000011968,0.890999947342,0.998000021542,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[26.967,31.935],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":27,"ty":4,"nm":"The rest of the finger","parent":28,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0.556,"ix":10},"p":{"a":0,"k":[83.335,41.922,0],"ix":2},"a":{"a":0,"k":[36.395,53.331,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-5.891,-16.107],[4.756,12.001],[5.891,16.107]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.584999952129,0.758000033509,0.994000004787,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[35.131,34.554],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-2.349,0.402]],"o":[[1.208,-0.654],[0,0]],"v":[[-2.695,0.932],[2.695,-0.932]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.584999952129,0.758000033509,0.994000004787,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[16.27,5.932],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-1.056,-2.299],[0,0],[0,0],[-0.969,-2.191],[0,0],[0,0]],"o":[[0,0],[2.499,0.396],[0,0],[0,0],[2.339,0.524],[0,0],[0,0],[0,0]],"v":[[-27.145,-25.23],[-8.774,-22.326],[-3.083,-18.012],[0.666,-9.846],[9.149,-7.939],[14.408,-3.62],[27.145,25.23],[-19.321,15.889]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.810000011968,0.890999947342,0.998000021542,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[27.395,26.387],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":28,"ty":4,"nm":"The back of the hand","parent":29,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0.556]},{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":16,"s":[0.556]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":46,"s":[13]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[13]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[13]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[0.556]},{"i":{"x":[0.67],"y":[1]},"o":{"x":[0.33],"y":[0]},"t":109,"s":[0.556]},{"t":129,"s":[15.556]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.1,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[54.319,12.028,0],"to":[-0.833,0.029,0],"ti":[0.833,-0.029,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46,"s":[49.322,12.202,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47,"s":[49.322,12.202,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[49.322,12.202,0],"to":[0.833,-0.029,0],"ti":[0,0,0]},{"i":{"x":0.67,"y":1},"o":{"x":0.33,"y":0},"t":109,"s":[54.319,12.028,0],"to":[0,0,0],"ti":[0.833,-0.029,0]},{"t":129,"s":[49.322,12.202,0]}],"ix":2},"a":{"a":0,"k":[81.22,124.153,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.98,-24.846],[39.311,2.495],[20.472,14.216],[0.733,15.236],[-1.016,7.951],[-3.849,8.116]],"o":[[3.301,41.419],[-24.875,-1.579],[-8.667,-6.018],[-0.374,-7.782],[1.692,-13.251],[15.593,-32.878]],"v":[[44.993,-22.559],[20.159,69.408],[-34.642,53.473],[-59.096,14.31],[-46.802,-5.223],[-37.957,-39.024]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.810000011968,0.890999947342,0.998000021542,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[59.72,72.153],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":29,"ty":4,"nm":"Wrist","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[2]},{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":16,"s":[2]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":46,"s":[6]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[6]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[2]},{"i":{"x":[0.12],"y":[0.86]},"o":{"x":[0.88],"y":[0.14]},"t":109,"s":[2]},{"t":129,"s":[9]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[219.22,481.332,0],"to":[-1.833,0,0],"ti":[0,0,0]},{"i":{"x":0.1,"y":1},"o":{"x":0.333,"y":0},"t":16,"s":[208.22,481.332,0],"to":[4.968,0,0],"ti":[-5.576,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.9,"y":0},"t":46,"s":[231.741,491.332,0],"to":[6.777,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47,"s":[231.741,491.332,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":75,"s":[231.741,491.332,0],"to":[0,0,0],"ti":[-0.747,-1,0]},{"i":{"x":0.12,"y":0.623},"o":{"x":0.333,"y":0},"t":109,"s":[211.22,481.332,0],"to":[0.747,1,0],"ti":[0,0,0]},{"t":129,"s":[236.22,497.332,0]}],"ix":2},"a":{"a":0,"k":[104.97,71.418,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":0,"s":[103,103,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":16,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1.152,1.152,-13.771]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":75,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0.094,0.094,9.144]},"t":96,"s":[102,102,100]},{"t":109,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-84.221,-32.333],[-42.76,34.529],[63.198,35.401],[-4.41,-35.737]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.810000011968,0.890999947342,0.998000021542,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[84.471,35.918],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":30,"ty":4,"nm":"Shelf Outlines","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":157,"s":[0]},{"t":166,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[224.175,323.08,0],"ix":2},"a":{"a":0,"k":[154.051,5.278,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.349,0],[0,0],[0,2.349],[0,0],[0,0],[0,0]],"o":[[0,0],[-2.349,0],[0,0],[0,0],[0,0],[0,2.349]],"v":[[149.549,5.027],[-151.327,5.045],[-155.175,0.793],[-155.175,-5.01],[153.8,-5.027],[153.8,0.775]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.732999973671,0.74900004069,0.764999988032,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[154.05,5.278],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":31,"ty":4,"nm":"Shelf icons ","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":129,"s":[0]},{"t":138,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[223.098,303.588,0],"ix":2},"a":{"a":0,"k":[66.178,11.442,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.393],[-4.391,0],[0,-4.393],[4.393,0]],"o":[[0,-4.393],[4.393,0],[0,4.393],[-4.391,0]],"v":[[-7.953,0],[0,-7.953],[7.953,0],[0,7.953]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.838999968884,0.913999968884,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[114.584,11.442],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.393],[-4.392,0],[0,-4.393],[4.392,0]],"o":[[0,-4.393],[4.392,0],[0,4.393],[-4.392,0]],"v":[[-7.952,0],[0.001,-7.953],[7.952,0],[0.001,7.953]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.855000035903,0.842999985639,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[89.678,11.442],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.393],[-4.392,0],[0,-4.393],[4.392,0]],"o":[[0,-4.393],[4.392,0],[0,4.393],[-4.392,0]],"v":[[-7.952,0],[0,-7.953],[7.952,0],[0,7.953]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.839215695858,0.913725495338,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[65.709,11.442],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.393],[-4.392,0],[0,-4.393],[4.392,0]],"o":[[0,-4.393],[4.392,0],[0,4.393],[-4.392,0]],"v":[[-7.953,0],[0,-7.953],[7.953,0],[0,7.953]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.776000019148,0.929000016755,0.847000002394,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[41.741,11.442],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.393],[-4.392,0],[0,-4.393],[4.392,0]],"o":[[0,-4.393],[4.392,0],[0,4.393],[-4.392,0]],"v":[[-7.953,0],[0,-7.953],[7.953,0],[0,7.953]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.819999964097,0.902000038297,0.991999966491,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[17.772,11.442],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":4,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[6.318,0],[0,0],[0,6.318],[0,0],[-6.318,0],[0,0],[0,-6.319],[0,0]],"o":[[0,0],[-6.318,0],[0,0],[0,-6.319],[0,0],[6.318,0],[0,0],[0,6.318]],"v":[[54.738,11.442],[-54.738,11.442],[-66.178,0.001],[-66.178,-0.001],[-54.738,-11.442],[54.738,-11.442],[66.178,-0.001],[66.178,0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.732999973671,0.74900004069,0.764999988032,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[66.178,11.442],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":4,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":32,"ty":4,"nm":"Launcher","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":129,"s":[0]},{"t":138,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[223.816,222.979,0],"ix":2},"a":{"a":0,"k":[154.253,105.85,0],"ix":1},"s":{"a":0,"k":[100.5,100.5,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.59],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.59],[-4.59,0]],"v":[[-8.31,0],[0,-8.311],[8.31,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[254.387,153.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.59],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.59],[-4.59,0]],"v":[[-8.31,0],[0,-8.311],[8.31,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[204.292,153.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.59],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.59],[-4.59,0]],"v":[[-8.31,0],[0.001,-8.311],[8.311,0],[0.001,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[154.197,153.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.59],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.59],[-4.59,0]],"v":[[-8.311,0],[0,-8.311],[8.311,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[104.103,153.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.59],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.59],[-4.59,0]],"v":[[-8.311,0],[0,-8.311],[8.311,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54.008,153.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":4,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.59],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.59],[-4.59,0]],"v":[[-8.31,0],[0,-8.311],[8.31,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[254.387,120.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":4,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.59],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.59],[-4.59,0]],"v":[[-8.31,0],[0,-8.311],[8.31,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[204.292,120.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":4,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.59],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.59],[-4.59,0]],"v":[[-8.31,0],[0.001,-8.311],[8.311,0],[0.001,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[154.197,120.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":4,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.59],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.59],[-4.59,0]],"v":[[-8.311,0],[0,-8.311],[8.311,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[104.103,120.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":4,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.59],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.59],[-4.59,0]],"v":[[-8.311,0],[0,-8.311],[8.311,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54.008,120.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":4,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.589],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.589],[-4.59,0]],"v":[[-8.31,0],[0,-8.311],[8.31,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[254.387,87.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":4,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.589],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.589],[-4.59,0]],"v":[[-8.31,0],[0,-8.311],[8.31,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[204.292,87.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":4,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.589],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.589],[-4.59,0]],"v":[[-8.31,0],[0.001,-8.311],[8.311,0],[0.001,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.922000002394,0.713999968884,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[154.197,87.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":4,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.589],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.589],[-4.59,0]],"v":[[-8.311,0],[0,-8.311],[8.311,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[104.103,87.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":4,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.589],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.589],[-4.59,0]],"v":[[-8.311,0],[0,-8.311],[8.311,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54.008,87.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 15","np":4,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.589],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.589],[-4.59,0]],"v":[[-8.31,0],[0,-8.311],[8.31,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[254.387,54.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 16","np":4,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.589],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.589],[-4.59,0]],"v":[[-8.31,0],[0,-8.311],[8.31,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[204.292,54.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 17","np":4,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.589],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.589],[-4.59,0]],"v":[[-8.31,0],[0.001,-8.311],[8.311,0],[0.001,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[154.197,54.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 18","np":4,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.589],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.589],[-4.59,0]],"v":[[-8.311,0],[0,-8.311],[8.311,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[104.103,54.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 19","np":4,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.589],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.589],[-4.59,0]],"v":[[-8.311,0],[0,-8.311],[8.311,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54.008,54.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 20","np":4,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.59,0],[0,0],[0,3.59],[3.59,0],[0,0],[0,-3.59]],"o":[[0,0],[3.59,0],[0,-3.59],[0,0],[-3.59,0],[0,3.59]],"v":[[-74,6.5],[74,6.5],[80.5,0],[74,-6.5],[-74,-6.5],[-80.5,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[154.535,17.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 21","np":4,"cix":2,"bm":0,"ix":21,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.349,0],[0,0],[0,2.348],[0,0],[-2.349,0],[0,0],[0,-2.348],[0,0]],"o":[[0,0],[-2.349,0],[0,0],[0,-2.348],[0,0],[2.349,0],[0,0],[0,2.348]],"v":[[149.751,105.6],[-149.751,105.6],[-154.002,101.348],[-154.002,-101.347],[-149.751,-105.6],[149.751,-105.6],[154.002,-101.347],[154.002,101.348]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.732999973671,0.74900004069,0.764999988032,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[154.252,105.85],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 22","np":4,"cix":2,"bm":0,"ix":22,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":33,"ty":4,"nm":"Device Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[223.598,222.107,0],"ix":2},"a":{"a":0,"k":[238.859,238.058,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.141,0.042],[0,0],[-0.058,3.164],[0,0],[0,0],[0,0]],"o":[[0,0],[-2.462,0.042],[0,0],[0,0],[0,0],[0.033,3.314]],"v":[[149.897,5.298],[-149.751,5.298],[-154.124,0.863],[-154.124,-5.027],[154.129,-5.027],[154.129,0.87]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.732999973671,0.74900004069,0.764999988032,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[238.598,339.58],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.523,0],[0,0],[0,-5.522],[0,0],[-5.523,0],[0,0],[0,5.523],[0,0]],"o":[[0,0],[-5.523,0],[0,0],[0,5.523],[0,0],[5.523,0],[0,0],[0,-5.522]],"v":[[150.155,-111.807],[-150.155,-111.807],[-160.155,-101.807],[-160.155,101.807],[-150.155,111.807],[150.155,111.807],[160.155,101.807],[160.155,-101.807]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,-2.206],[0,0],[2.206,0],[0,0],[0,2.206],[0,0],[-2.206,0]],"o":[[2.206,0],[0,0],[0,2.206],[0,0],[-2.206,0],[0,0],[0,-2.206],[0,0]],"v":[[150.155,-105.807],[154.155,-101.807],[154.155,101.807],[150.155,105.807],[-150.155,105.807],[-154.155,101.807],[-154.155,-101.807],[-150.155,-105.807]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.941000007181,0.948999980852,0.952999997606,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[238.598,239.107],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.523,0],[0,0],[0,-5.522],[0,0],[-5.523,0],[0,0],[0,5.523],[0,0]],"o":[[0,0],[-5.523,0],[0,0],[0,5.523],[0,0],[5.523,0],[0,0],[0,-5.522]],"v":[[150.155,-111.807],[-150.155,-111.807],[-160.155,-101.807],[-160.155,101.807],[-150.155,111.807],[150.155,111.807],[160.155,101.807],[160.155,-101.807]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,-4.411],[0,0],[4.411,0],[0,0],[0,4.411],[0,0],[-4.411,0]],"o":[[4.411,0],[0,0],[0,4.411],[0,0],[-4.411,0],[0,0],[0,-4.411],[0,0]],"v":[[150.155,-109.807],[158.155,-101.807],[158.155,101.807],[150.155,109.807],[-150.155,109.807],[-158.155,101.807],[-158.155,-101.807],[-150.155,-109.807]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.851000019148,0.859000052658,0.875,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[238.598,239.107],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":34,"ty":4,"nm":"App UI 2 Outlines","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[100]},{"t":137,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[222.323,222.908,0],"ix":2},"a":{"a":0,"k":[154.23,105.691,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.104,0],[0,0],[0,1.104],[0,0],[1.104,0],[0,0],[0,-1.104],[0,0]],"o":[[0,0],[1.104,0],[0,0],[0,-1.104],[0,0],[-1.104,0],[0,0],[0,1.104]],"v":[[-66.292,30.5],[66.293,30.5],[68.293,28.5],[68.293,-28.5],[66.293,-30.5],[-66.292,-30.5],[-68.292,-28.5],[-68.292,28.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.987999949736,0.964999988032,0.889999988032,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[226.905,83.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-118.5,2.5],[118.5,2.5],[118.5,-2.5],[-118.5,-2.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[128.697,196.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-126.5,2.5],[126.5,2.5],[126.5,-2.5],[-126.5,-2.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[136.697,181.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-119,2.5],[119,2.5],[119,-2.5],[-119,-2.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[129.197,166.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-95,2.5],[95,2.5],[95,-2.5],[-95,-2.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.197,152.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":4,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.104,0],[0,0],[0,1.104],[0,0],[1.104,0],[0,0],[0,-1.104],[0,0]],"o":[[0,0],[1.104,0],[0,0],[0,-1.104],[0,0],[-1.104,0],[0,0],[0,1.104]],"v":[[-66.293,30.5],[66.293,30.5],[68.293,28.5],[68.293,-28.5],[66.293,-30.5],[-66.293,-30.5],[-68.293,-28.5],[-68.293,28.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.987999949736,0.964999988032,0.889999988032,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[78.49,83.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":4,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.104,0],[0,0],[0,1.104],[0,0],[1.104,0],[0,0],[0,-1.104],[0,0]],"o":[[0,0],[1.104,0],[0,0],[0,-1.104],[0,0],[-1.104,0],[0,0],[0,1.104]],"v":[[-61.5,6.5],[61.5,6.5],[63.5,4.5],[63.5,-4.5],[61.5,-6.5],[-61.5,-6.5],[-63.5,-4.5],[-63.5,4.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[73.697,131.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":4,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.104,0],[0,0],[0,1.104],[0,0],[1.104,0],[0,0],[0,-1.105],[0,0]],"o":[[0,0],[1.104,0],[0,0],[0,-1.105],[0,0],[-1.104,0],[0,0],[0,1.104]],"v":[[-17.5,6.5],[17.5,6.5],[19.5,4.5],[19.5,-4.5],[17.5,-6.5],[-17.5,-6.5],[-19.5,-4.5],[-19.5,4.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.964999988032,0.862999949736,0.528999956916,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[29.697,34.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":4,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.349,0],[0,0],[0,2.348],[0,0],[-2.349,0],[0,0],[0,-2.348],[0,0]],"o":[[0,0],[-2.349,0],[0,0],[0,-2.348],[0,0],[2.349,0],[0,0],[0,2.348]],"v":[[149.751,105.6],[-149.751,105.6],[-154.002,101.348],[-154.002,-101.347],[-149.751,-105.6],[149.751,-105.6],[154.002,-101.347],[154.002,101.348]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[154.252,105.85],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":4,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":35,"ty":4,"nm":"Yellow Window Outlines","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":161,"s":[100]},{"t":189,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":92,"s":[222.354,233.44,0],"to":[0.016,-0.089,0],"ti":[-0.016,0.089,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.001,"y":0.001},"t":117,"s":[222.448,232.908,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.36,"y":1},"o":{"x":0.22,"y":0.99},"t":139,"s":[222.448,232.908,0],"to":[0,-4.5,0],"ti":[0,4.5,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":211,"s":[222.448,205.908,0],"to":[0,0,0],"ti":[0,0,0]},{"t":270,"s":[222.448,205.908,0]}],"ix":2},"a":{"a":0,"k":[154.23,116.217,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.36,0.36,0.36],"y":[1,1,1]},"o":{"x":[0.22,0.22,0.22],"y":[0.99,0.99,0]},"t":139,"s":[100,100,100]},{"t":211,"s":[58,58,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.104,0],[0,0],[0,1.104],[0,0],[1.104,0],[0,0],[0,-1.104],[0,0]],"o":[[0,0],[1.104,0],[0,0],[0,-1.104],[0,0],[-1.104,0],[0,0],[0,1.104]],"v":[[-66.292,30.5],[66.293,30.5],[68.293,28.5],[68.293,-28.5],[66.293,-30.5],[-66.292,-30.5],[-68.292,-28.5],[-68.292,28.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.862999949736,0.922000002394,0.866999966491,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[226.905,106.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.104,0],[0,0],[0,1.104],[0,0],[1.104,0],[0,0],[0,-1.104],[0,0]],"o":[[0,0],[1.104,0],[0,0],[0,-1.104],[0,0],[-1.104,0],[0,0],[0,1.104]],"v":[[-66.292,17.125],[66.293,17.125],[68.293,15.125],[68.293,-17.5],[66.293,-19.5],[-66.292,-19.5],[-68.292,-17.5],[-68.292,15.125]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.969000004787,0.922000002394,0.913999968884,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[226.49,191.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.104,0],[0,0],[0,1.104],[0,0],[1.104,0],[0,0],[0,-1.104],[0,0]],"o":[[0,0],[1.104,0],[0,0],[0,-1.104],[0,0],[-1.104,0],[0,0],[0,1.104]],"v":[[-66.293,17.125],[66.293,17.125],[68.293,15.125],[68.293,-17.5],[66.293,-19.5],[-66.293,-19.5],[-68.293,-17.5],[-68.293,15.125]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.964999988032,0.952999997606,0.819999964097,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[78.49,191.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-63.5,6.5],[63.5,6.5],[63.5,-6.5],[-63.5,-6.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[73.697,154.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.104,0],[0,0],[0,1.104],[0,0],[1.104,0],[0,0],[0,-1.104],[0,0]],"o":[[0,0],[1.104,0],[0,0],[0,-1.104],[0,0],[-1.104,0],[0,0],[0,1.104]],"v":[[-66.293,30.5],[66.293,30.5],[68.293,28.5],[68.293,-28.5],[66.293,-30.5],[-66.293,-30.5],[-68.293,-28.5],[-68.293,28.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.969000004787,0.922000002394,0.913999968884,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[78.49,106.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":4,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.104,0],[0,0],[0,1.104],[0,0],[1.104,0],[0,0],[0,-1.105],[0,0]],"o":[[0,0],[1.104,0],[0,0],[0,-1.105],[0,0],[-1.104,0],[0,0],[0,1.104]],"v":[[-61.5,6.5],[61.5,6.5],[63.5,4.5],[63.5,-4.5],[61.5,-6.5],[-61.5,-6.5],[-63.5,-4.5],[-63.5,4.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[73.697,58.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":4,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.104,0],[0,0],[0,1.104],[0,0],[1.104,0],[0,0],[0,-1.105],[0,0]],"o":[[0,0],[1.104,0],[0,0],[0,-1.105],[0,0],[-1.104,0],[0,0],[0,1.104]],"v":[[-17.5,6.5],[17.5,6.5],[19.5,4.5],[19.5,-4.5],[17.5,-6.5],[-17.5,-6.5],[-19.5,-4.5],[-19.5,4.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.964999988032,0.862999949736,0.528999956916,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[29.697,34.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":4,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.349,0],[0,0],[0,2.348],[0,0],[-2.349,0],[0,0],[0,-2.348],[0,0]],"o":[[0,0],[-2.349,0],[0,0],[0,-2.348],[0,0],[2.349,0],[0,0],[0,2.348]],"v":[[149.751,105.6],[-149.751,105.6],[-154.002,101.348],[-154.002,-101.347],[-149.751,-105.6],[149.751,-105.6],[154.002,-101.347],[154.002,101.348]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[154.252,105.85],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":4,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0}],"markers":[{"tm":16,"cm":"0","dr":0},{"tm":33,"cm":"1","dr":0},{"tm":46,"cm":"2","dr":0},{"tm":63,"cm":"3","dr":0},{"tm":86,"cm":"4","dr":0},{"tm":107,"cm":"5","dr":0},{"tm":120,"cm":"6","dr":0},{"tm":129,"cm":"7","dr":0}]}
\ No newline at end of file
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/gesture_go_home-expected.png b/cobalt/renderer/rasterizer/testdata/lottie_coverage/gesture_go_home-expected.png
deleted file mode 100755
index bf07bc2..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/gesture_go_home-expected.png
+++ /dev/null
Binary files differ
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/gesture_go_home.json b/cobalt/renderer/rasterizer/testdata/lottie_coverage/gesture_go_home.json
deleted file mode 100755
index 68d14c3..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/gesture_go_home.json
+++ /dev/null
@@ -1 +0,0 @@
-{"v":"5.6.4","fr":60,"ip":8,"op":121,"w":445,"h":445,"nm":"Gesture Go home","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Thumb nail ","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[7.915,11.761,0],"ix":2},"a":{"a":0,"k":[7.357,10.534,0],"ix":1},"s":{"a":0,"k":[91.15,91.15,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.275,0.579],[0,0]],"o":[[0,0],[0.579,-0.275],[0,0],[0,0]],"v":[[-1.078,5.534],[1.53,4.831],[2.082,3.285],[-2.357,-5.534]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.584999952129,0.758000033509,0.994000004787,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[7.357,10.534],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Thumb wrinkle","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-28,"ix":10},"p":{"a":0,"k":[26.546,23.907,0],"ix":2},"a":{"a":0,"k":[10.082,4.23,0],"ix":1},"s":{"a":0,"k":[91.15,91.15,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[-2.911,0.838],[0,0]],"v":[[2.456,-1.855],[-0.96,0.103]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.584999952129,0.758000033509,0.994000004787,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[7.457,6.856],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Thumb top","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[18.797,13.493,0],"ix":2},"a":{"a":0,"k":[24.415,32.846,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.764,3.78],[-2.009,0.695],[-2.812,-9.641],[0,0],[5.009,-1.46],[0,0],[0.925,5.708]],"o":[[-0.232,-0.798],[-0.898,-1.927],[10.083,-4.007],[0,0],[1.461,5.01],[0,0],[-5.551,1.619],[0,0]],"v":[[-8.725,0.397],[-13.267,-9.691],[-11.187,-14.59],[11.336,0.128],[12.704,4.82],[6.253,16.585],[4.905,16.977],[-7.286,9.279]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.810000011968,0.890999947342,0.998000021542,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[14.415,18.847],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Thumb border line","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8,"s":[-39]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[-39]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[-39]},{"t":53,"s":[-21]}],"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8,"s":[33.559]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[40.553]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[40.553]},{"t":53,"s":[36.476]}],"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8,"s":[10.114]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[12.235]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[12.235]},{"t":53,"s":[10.468]}],"ix":4}},"a":{"a":0,"k":[7.657,5.806,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[-3.064,12.767],[0,0]],"v":[[1.532,-8.556],[-0.609,8.556]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.584999952129,0.758000033509,0.994000004787,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[6.532,13.556],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Thumb bottom","parent":14,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.58],"y":[1]},"o":{"x":[0.001],"y":[0]},"t":8,"s":[12.556]},{"i":{"x":[0.58],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":33,"s":[6]},{"t":42,"s":[6]}],"ix":10},"p":{"a":0,"k":[28.041,102.88,0],"ix":2},"a":{"a":0,"k":[59.637,47.74,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.903,1.245],[0,0],[0,0],[0,0],[6.242,6.985],[0,0]],"o":[[0,0],[0,0],[0,0],[-8,2],[0,0],[-5.02,-4.898]],"v":[[-26.871,-33.016],[-24.243,-33.49],[36.387,-9.787],[22.881,31.49],[-0.949,15.691],[-31.367,-18.348]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.810000011968,0.890999947342,0.998000021542,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[36.637,33.74],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Forfinger nail","parent":9,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":8,"s":[8.978,19.524,0],"to":[-0.247,3.36,0],"ti":[0.247,-3.36,0]},{"i":{"x":0.58,"y":0.58},"o":{"x":0.001,"y":0.001},"t":33,"s":[7.499,39.687,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.446,"y":0.484},"o":{"x":0.001,"y":0},"t":42,"s":[7.499,39.687,0],"to":[-0.239,-2.045,0],"ti":[0.58,4.97,0]},{"i":{"x":0.685,"y":1},"o":{"x":0.32,"y":0.278},"t":48.191,"s":[4.565,28.858,0],"to":[-0.373,-3.201,0],"ti":[0.154,1.317,0]},{"t":53,"s":[5.146,19.511,0]}],"ix":2},"a":{"a":0,"k":[10.945,10.342,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":8,"s":[{"i":[[0,0],[0,0],[-1.552,0.259],[0,0]],"o":[[0,0],[0.175,0.845],[0,0],[0,0]],"v":[[-2.82,0.401],[-2.096,4.173],[0.709,5.49],[6.721,3.2]],"c":false}]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":33,"s":[{"i":[[0,0],[0,0],[-0.891,0.408],[0,0]],"o":[[0,0],[0.488,0.868],[0,0],[0,0]],"v":[[-2.168,1.149],[-1.685,1.932],[0.693,1.695],[3.735,0.147]],"c":false}]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":42,"s":[{"i":[[0,0],[0,0],[-0.891,0.408],[0,0]],"o":[[0,0],[0.488,0.868],[0,0],[0,0]],"v":[[-2.168,1.149],[-1.685,1.932],[0.693,1.695],[3.735,0.147]],"c":false}]},{"t":53,"s":[{"i":[[0,0],[0,0],[-1.104,0.522],[0,0]],"o":[[0,0],[0.175,0.845],[0,0],[0,0]],"v":[[-3.622,2.244],[-2.335,4.352],[0.143,5.144],[5.452,2.943]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.584999952129,0.758000033509,0.994000004787,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":3,"lj":3,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[9.444,8.343],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Forfinger wrinkle","parent":9,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-4,"ix":10},"p":{"a":0,"k":[27.077,50.793,0],"ix":2},"a":{"a":0,"k":[11.35,5.174,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-2.276,0.709],[-1.206,0.042]],"o":[[1.111,-0.809],[1.798,-0.562],[0,0]],"v":[[-4.85,1.673],[0.245,-0.889],[4.85,-1.673]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.584999952129,0.758000033509,0.994000004787,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[9.85,6.674],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Forfinger borderline","parent":9,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":14,"ix":10},"p":{"a":0,"k":[50.768,85.811,0],"ix":2},"a":{"a":0,"k":[8.003,9.498,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-2.698,-2.879]],"o":[[0,0],[0,0]],"v":[[-3.003,-4.498],[3.003,4.498]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.584999952129,0.758000033509,0.994000004787,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[8.003,9.498],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"Forfinger","parent":14,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.58],"y":[1]},"o":{"x":[0.001],"y":[0]},"t":8,"s":[-0.819]},{"i":{"x":[0.58],"y":[1]},"o":{"x":[0.001],"y":[0]},"t":33,"s":[-4]},{"i":{"x":[0.58],"y":[1]},"o":{"x":[0.001],"y":[0]},"t":42,"s":[-4]},{"i":{"x":[0.686],"y":[1]},"o":{"x":[0.001],"y":[0]},"t":53,"s":[13]},{"t":95,"s":[11.5]}],"ix":10},"p":{"a":0,"k":[30.907,52.47,0],"ix":2},"a":{"a":0,"k":[45.715,111.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":8,"s":[{"i":[[-5.834,2.261],[0,0],[-1.981,-2.623],[0,0],[0,0],[1.432,7.604],[5.876,21.954],[2.685,5.402]],"o":[[0,0],[2.313,-0.897],[0,0],[0,0],[0,0],[-8.024,-42.619],[-1.913,-6.787],[-2.482,-5.602]],"v":[[-26.181,-66.337],[-25.759,-66.5],[-17.534,-63.579],[1.758,-30.72],[31.965,42.729],[0.503,72.146],[-19.034,-20.237],[-29.895,-51.26]],"c":true}]},{"i":{"x":0.58,"y":1},"o":{"x":0.001,"y":0},"t":33,"s":[{"i":[[-5.834,2.261],[0,0],[-2.893,-2.656],[0,0],[0,0],[1.432,7.604],[3.415,9.485],[5.027,6.109]],"o":[[0,0],[2.313,-0.897],[0,0],[0,0],[0,0],[-8.024,-42.619],[-1.926,-5.348],[-3.976,-4.832]],"v":[[-28.1,-44.853],[-27.39,-45.113],[-18.659,-42.226],[2.446,-31.538],[31.965,42.729],[0.503,72.146],[-18.237,-17.121],[-29.119,-28.525]],"c":true}]},{"i":{"x":0.833,"y":0.865},"o":{"x":0.001,"y":0},"t":42,"s":[{"i":[[-5.834,2.261],[0,0],[-2.893,-2.656],[0,0],[0,0],[1.432,7.604],[3.415,9.485],[5.027,6.109]],"o":[[0,0],[2.313,-0.897],[0,0],[0,0],[0,0],[-8.024,-42.619],[-1.926,-5.348],[-3.976,-4.832]],"v":[[-28.1,-44.853],[-27.39,-45.113],[-18.659,-42.226],[2.446,-31.538],[31.965,42.729],[0.503,72.146],[-18.237,-17.121],[-29.119,-28.525]],"c":true}]},{"i":{"x":0.833,"y":0.865},"o":{"x":0.167,"y":0.135},"t":49.428,"s":[{"i":[[-5.834,2.261],[0,0],[-2.315,-2.635],[0,0],[0,0],[1.432,7.604],[2.04,5.665],[3.544,5.661]],"o":[[0,0],[2.313,-0.897],[0,0],[0,0],[0,0],[-8.024,-42.619],[-1.15,-3.194],[-3.03,-5.319]],"v":[[-32.012,-56.209],[-31.484,-56.407],[-23.074,-53.499],[2.289,-31.476],[31.965,42.728],[0.503,72.146],[-18.742,-19.093],[-34.238,-39.806]],"c":true}]},{"i":{"x":0.58,"y":1},"o":{"x":0.167,"y":0.135},"t":50.666,"s":[{"i":[[-5.834,2.261],[0,0],[-2.027,-2.625],[0,0],[0,0],[1.432,7.604],[1.351,3.753],[2.802,5.437]],"o":[[0,0],[2.313,-0.897],[0,0],[0,0],[0,0],[-8.024,-42.619],[-0.762,-2.116],[-2.556,-5.563]],"v":[[-32.286,-60.533],[-31.849,-60.701],[-23.599,-57.781],[2.211,-31.445],[31.965,42.728],[0.503,72.146],[-18.994,-20.08],[-35.534,-44.818]],"c":true}]},{"t":53,"s":[{"i":[[-5.834,2.261],[0,0],[-1.46,-2.604],[0,0],[0,0],[1.432,7.604],[0,0],[1.346,4.997]],"o":[[0,0],[2.313,-0.897],[0,0],[0,0],[0,0],[-8.024,-42.619],[0,0],[-1.627,-6.042]],"v":[[-30.806,-66.137],[-30.548,-66.244],[-22.613,-63.304],[2.057,-31.384],[31.965,42.729],[0.503,72.146],[-19.49,-22.018],[-36.061,-51.774]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.810000011968,0.890999947342,0.998000021542,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[32.216,80],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"Middlefinger wrinkle","parent":12,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":1,"ix":10},"p":{"a":0,"k":[32.388,11.982,0],"ix":2},"a":{"a":0,"k":[11.279,5.341,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-2.35,0.402],[-1.202,-0.118]],"o":[[1.209,-0.653],[1.856,-0.318],[0,0]],"v":[[-5.029,1.092],[0.361,-0.773],[5.029,-0.939]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.584999952129,0.758000033509,0.994000004787,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[10.029,6.091],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"Middlefinger borderline","parent":12,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[47.644,40.112,0],"ix":2},"a":{"a":0,"k":[11.039,23.172,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-6.039,-18.172],[6.039,15.383],[5.809,18.172]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.584999952129,0.758000033509,0.994000004787,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[11.039,23.172],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"Middlefinger","parent":14,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.58],"y":[1]},"o":{"x":[0.001],"y":[0]},"t":8,"s":[-0.444]},{"i":{"x":[0.58],"y":[1]},"o":{"x":[0.001],"y":[0]},"t":33,"s":[3]},{"i":{"x":[0.58],"y":[1]},"o":{"x":[0.001],"y":[0]},"t":42,"s":[3]},{"t":53,"s":[2]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42,"s":[54.275,33.441,0],"to":[0.36,0.296,0],"ti":[-0.36,-0.296,0]},{"t":53,"s":[56.437,35.219,0]}],"ix":2},"a":{"a":0,"k":[43.966,61.435,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.152,0.825],[0,0],[-1.889,-0.292],[0,0],[-0.437,-1.213],[0,0],[0,0],[0,0],[0.384,1.311]],"o":[[0.355,-1.93],[1.799,-0.732],[0,0],[1.194,0.486],[0,0],[0,0],[0,0],[0,0],[-1.119,-3.823]],"v":[[-21.002,-24.623],[-17.471,-28.721],[-10.288,-29.35],[8.492,-22.622],[11.054,-19.953],[26.717,23.56],[1.68,30.019],[-9.387,-10.569],[-20.37,-19.805]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.810000011968,0.890999947342,0.998000021542,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[26.967,31.935],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"The rest of the fingers","parent":12,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":1,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.001,"y":0},"t":8,"s":[73.701,69.32,0],"to":[0.184,-0.181,0],"ti":[-0.184,0.181,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.001,"y":0.001},"t":33,"s":[74.804,68.233,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":1},"o":{"x":0.001,"y":0},"t":42,"s":[74.804,68.233,0],"to":[-0.209,-0.072,0],"ti":[0.209,0.072,0]},{"t":53,"s":[73.549,67.801,0]}],"ix":2},"a":{"a":0,"k":[36.395,53.331,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-5.891,-16.107],[4.756,12.001],[5.891,16.107]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.584999952129,0.758000033509,0.994000004787,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[35.131,34.554],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.143,-0.187]],"o":[[1.455,-0.491],[0,0]],"v":[[-2.695,0.932],[4.625,0.167]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.584999952129,0.758000033509,0.994000004787,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[16.27,5.932],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-1.056,-2.299],[0,0],[0,0],[-0.969,-2.191],[0,0],[0,0]],"o":[[0,0],[2.499,0.396],[0,0],[0,0],[2.339,0.524],[0,0],[0,0],[0,0]],"v":[[-27.145,-25.23],[-8.774,-22.326],[-3.083,-18.012],[0.666,-9.845],[9.149,-7.939],[14.408,-3.62],[28.044,30.018],[-19.321,15.889]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.810000011968,0.890999947342,0.998000021542,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[27.395,26.387],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"The back of the hand","parent":15,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.58],"y":[1]},"o":{"x":[0.001],"y":[0]},"t":8,"s":[0.556]},{"i":{"x":[0.58],"y":[1]},"o":{"x":[0.001],"y":[0]},"t":33,"s":[-2.444]},{"i":{"x":[0.58],"y":[1]},"o":{"x":[0.001],"y":[0]},"t":42,"s":[-2.444]},{"t":53,"s":[11]}],"ix":10},"p":{"a":0,"k":[51.974,15.78,0],"ix":2},"a":{"a":0,"k":[81.22,124.153,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42,"s":[{"i":[[-1.98,-24.846],[39.311,2.495],[20.472,14.216],[0.733,15.236],[-1.016,7.951],[-3.849,8.116]],"o":[[3.301,41.419],[-24.875,-1.579],[-8.667,-6.018],[-0.374,-7.782],[1.692,-13.251],[15.593,-32.878]],"v":[[44.993,-22.559],[20.159,69.408],[-34.642,53.473],[-59.096,14.31],[-46.802,-5.223],[-37.957,-39.024]],"c":true}]},{"t":53,"s":[{"i":[[-1.98,-24.846],[35.147,-31.683],[20.472,14.216],[0.733,15.236],[-1.016,7.951],[-3.849,8.116]],"o":[[3.301,41.419],[-18.513,16.689],[-8.667,-6.018],[-0.374,-7.782],[1.692,-13.251],[15.593,-32.878]],"v":[[44.993,-22.558],[20.159,69.408],[-34.642,53.474],[-59.096,14.309],[-46.802,-5.223],[-37.957,-39.024]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.810000011968,0.890999947342,0.998000021542,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[59.72,72.153],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"Wrist","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[-41]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.001],"y":[0]},"t":33,"s":[-46]},{"i":{"x":[0.58],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[-46]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[-32]},{"t":95,"s":[-33]}],"ix":10},"p":{"a":0,"k":[506.22,352.332,0],"ix":2},"a":{"a":0,"k":[104.97,71.418,0],"ix":1},"s":{"a":0,"k":[113,113,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-78.139,-22.213],[-39.905,50.225],[63.198,35.401],[-4.41,-35.737]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.810000011968,0.890999947342,0.998000021542,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[84.471,35.918],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":16,"ty":1,"nm":"White Solid 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[108.438,441.5,0],"ix":2},"a":{"a":0,"k":[222.5,222.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[485.469,115],[199.748,115.11],[200.158,191.289],[485.879,191.18]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":445,"sh":445,"sc":"#ffffff","ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":17,"ty":1,"nm":"Pale Royal Blue Solid 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[120.125,255.5,0],"ix":2},"a":{"a":0,"k":[222.5,222.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[462.902,295],[194.875,295],[194.875,311.615],[462.902,311.615]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":445,"sh":445,"sc":"#f0f2f3","ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"swipe up motion Outlines","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[56]},{"t":71,"s":[0]}],"ix":11},"r":{"a":0,"k":12.289,"ix":10},"p":{"a":0,"k":[237.959,263.992,0],"ix":2},"a":{"a":0,"k":[12.203,31.503,0],"ix":1},"s":{"a":0,"k":[130.331,174.152,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0,0],[1.142,-3.785],[-2.541,-6.81],[-1.236,2.329],[0,0]],"o":[[0,0],[-0.314,1.042],[0,0],[0.875,-1.65],[0,0]],"v":[[2.369,24.051],[1.03,25.585],[2.497,31.504],[5.706,24.823],[5.913,24.523]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":44,"s":[{"i":[[0,0],[-0.578,-3.911],[-2.541,-6.81],[-1.236,2.329],[0,0]],"o":[[0,0],[1.341,9.077],[0,0],[0.875,-1.65],[0,0]],"v":[[-0.162,15.354],[-1.502,16.889],[2.497,31.504],[3.174,16.126],[3.381,15.827]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46,"s":[{"i":[[0,0],[-1.265,-7.619],[-3.235,-9.194],[-3.56,10.092],[0,0]],"o":[[0,0],[1.503,9.052],[0,0],[2.294,-6.503],[0,0]],"v":[[-2.554,-7.028],[-3.478,9.425],[2.497,31.504],[4.993,3.489],[8.894,-6.375]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":48,"s":[{"i":[[0,0],[0.642,-11.622],[-4.515,-10.895],[-9.671,21.152],[0,0]],"o":[[0,0],[-1.038,18.79],[0,0],[2.867,-6.272],[0,0]],"v":[[2.888,-24.076],[-4.53,-7.006],[2.497,31.504],[8.149,-6.575],[14.747,-18.642]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":51,"s":[{"i":[[0,0],[1.068,-19.165],[-4.114,-8.169],[-9.551,21.207],[0,0]],"o":[[0,0],[-1.122,20.132],[0,0],[6.448,-14.317],[0,0]],"v":[[13.143,-49.549],[-4.506,-7.597],[2.497,31.504],[8.149,-6.575],[30.26,-39.536]],"c":true}]},{"t":54,"s":[{"i":[[0,0],[1.068,-19.165],[-4.114,-8.169],[-9.551,21.207],[0,0]],"o":[[0,0],[-1.122,20.132],[0,0],[6.448,-14.317],[0,0]],"v":[[13.143,-49.549],[-4.506,-7.597],[2.497,31.504],[8.149,-6.575],[30.26,-39.536]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.810000011968,0.890999947342,0.998000021542,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[12.203,31.504],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":43,"op":609,"st":9,"bm":0},{"ddd":0,"ind":19,"ty":4,"nm":"Shape Layer 3","parent":20,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-41.948,-71.533,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[16.24,16.24],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.235294117647,0.250980392157,0.262745098039,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.925490255917,0.772549079446,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[50.5,80.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":58,"op":600,"st":0,"bm":0},{"ddd":0,"ind":20,"ty":3,"nm":"Yellow Icon 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[258.178,199.485,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":58,"s":[279.678,241.36,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":59,"s":[279.116,257.262,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[278.538,272.393,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63,"s":[273.448,307.533,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[273.448,303.033,0],"to":[0,0,0],"ti":[0,0,0]},{"t":599,"s":[273.198,303.533,0]}],"ix":2},"a":{"a":0,"k":[9,9,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[379,379,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63.047,"s":[100,100,100]},{"t":68,"s":[100,100,100]}],"ix":6}},"ao":0,"ef":[{"ty":21,"nm":"Fill","np":9,"mn":"ADBE Fill","ix":1,"en":1,"ef":[{"ty":10,"nm":"Fill Mask","mn":"ADBE Fill-0001","ix":1,"v":{"a":0,"k":0,"ix":1}},{"ty":7,"nm":"All Masks","mn":"ADBE Fill-0007","ix":2,"v":{"a":0,"k":0,"ix":2}},{"ty":2,"nm":"Color","mn":"ADBE Fill-0002","ix":3,"v":{"a":0,"k":[1,0.925490260124,0.77254909277,1],"ix":3}},{"ty":7,"nm":"Invert","mn":"ADBE Fill-0006","ix":4,"v":{"a":0,"k":0,"ix":4}},{"ty":0,"nm":"Horizontal Feather","mn":"ADBE Fill-0003","ix":5,"v":{"a":0,"k":0,"ix":5}},{"ty":0,"nm":"Vertical Feather","mn":"ADBE Fill-0004","ix":6,"v":{"a":0,"k":0,"ix":6}},{"ty":0,"nm":"Opacity","mn":"ADBE Fill-0005","ix":7,"v":{"a":0,"k":1,"ix":7}}]}],"ip":58,"op":600,"st":0,"bm":0},{"ddd":0,"ind":21,"ty":4,"nm":"Hotseat","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.4,"y":0},"t":42,"s":[224.598,341.088,0],"to":[0,-6.333,0],"ti":[0,6.333,0]},{"t":59,"s":[224.598,303.088,0]}],"ix":2},"a":{"a":0,"k":[66.428,11.692,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.393],[-4.392,0],[0,-4.393],[4.392,0]],"o":[[0,-4.393],[4.392,0],[0,4.393],[-4.392,0]],"v":[[-7.952,0],[0.001,-7.953],[7.952,0],[0.001,7.953]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.855000035903,0.842999985639,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[89.928,11.692],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.393],[-4.392,0],[0,-4.393],[4.392,0]],"o":[[0,-4.393],[4.392,0],[0,4.393],[-4.392,0]],"v":[[-7.952,0],[0,-7.953],[7.952,0],[0,7.953]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.839215695858,0.913725495338,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[65.959,11.692],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.393],[-4.392,0],[0,-4.393],[4.392,0]],"o":[[0,-4.393],[4.392,0],[0,4.393],[-4.392,0]],"v":[[-7.953,0],[0,-7.953],[7.953,0],[0,7.953]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.776000019148,0.929000016755,0.847000002394,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[41.991,11.692],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.393],[-4.392,0],[0,-4.393],[4.392,0]],"o":[[0,-4.393],[4.392,0],[0,4.393],[-4.392,0]],"v":[[-7.953,0],[0,-7.953],[7.953,0],[0,7.953]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.819999964097,0.902000038297,0.991999966491,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[18.022,11.692],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[6.318,0],[0,0],[0,6.318],[0,0],[-6.318,0],[0,0],[0,-6.319],[0,0]],"o":[[0,0],[-6.318,0],[0,0],[0,-6.319],[0,0],[6.318,0],[0,0],[0,6.318]],"v":[[54.738,11.442],[-54.738,11.442],[-66.178,0.001],[-66.178,-0.001],[-54.738,-11.442],[54.738,-11.442],[66.178,-0.001],[66.178,0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.732999973671,0.74900004069,0.764999988032,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[66.428,11.692],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":4,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":593,"st":-7,"bm":0},{"ddd":0,"ind":22,"ty":4,"nm":"Device Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[223.598,222.107,0],"ix":2},"a":{"a":0,"k":[160.405,112.057,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[3.151,-0.006],[0,0],[0,2.349],[0,0],[0,0],[0,0]],"o":[[0,0],[-2.349,0],[0,0],[0,0],[0,0],[0,2.349]],"v":[[149.75,5.301],[-149.969,5.348],[-154.17,1.282],[-154.17,-4.521],[154.128,-4.749],[154.128,1.054]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.732999973671,0.74900004069,0.764999988032,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[160.405,212.53],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.523,0],[0,0],[0,-5.522],[0,0],[-5.523,0],[0,0],[0,5.523],[0,0]],"o":[[0,0],[-5.523,0],[0,0],[0,5.523],[0,0],[5.523,0],[0,0],[0,-5.522]],"v":[[150.155,-111.807],[-150.155,-111.807],[-160.155,-101.807],[-160.155,101.807],[-150.155,111.807],[150.155,111.807],[160.155,101.807],[160.155,-101.807]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,-2.206],[0,0],[2.206,0],[0,0],[0,2.206],[0,0],[-1.25,0]],"o":[[2.206,0],[0,0],[0,2.206],[0,0],[-2.206,0],[0,0],[0,-0.956],[0,0]],"v":[[150.155,-105.807],[154.155,-101.807],[154.155,101.807],[150.155,105.807],[-150.155,105.807],[-154.155,101.807],[-154.155,-101.807],[-150.155,-105.807]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 2","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.941000007181,0.948999980852,0.952999997606,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[160.405,112.057],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":6,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.523,0],[0,0],[0,-5.522],[0,0],[-5.523,0],[0,0],[0,5.523],[0,0]],"o":[[0,0],[-5.523,0],[0,0],[0,5.523],[0,0],[5.523,0],[0,0],[0,-5.522]],"v":[[150.155,-111.807],[-150.155,-111.807],[-160.155,-101.807],[-160.155,101.807],[-150.155,111.807],[150.155,111.807],[160.155,101.807],[160.155,-101.807]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,-4.411],[0,0],[4.411,0],[0,0],[0,4.411],[0,0],[-4.411,0]],"o":[[4.411,0],[0,0],[0,4.411],[0,0],[-4.411,0],[0,0],[0,-4.411],[0,0]],"v":[[150.155,-109.807],[158.155,-101.807],[158.155,101.807],[150.155,109.807],[-150.155,109.807],[-158.155,101.807],[-158.155,-101.807],[-150.155,-109.807]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 2","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.851000019148,0.859000052658,0.875,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[160.405,112.057],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":6,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[154,103],[-154,103]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[160.755,110.359],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":23,"ty":4,"nm":"Full window Outlines 2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":56.857,"s":[100]},{"t":59,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.497,"y":0.54},"o":{"x":0.002,"y":0},"t":44,"s":[222.448,221.908,0],"to":[0.012,-0.121,0],"ti":[-22.405,-15.046,0]},{"i":{"x":0.681,"y":0.604},"o":{"x":0.34,"y":0.144},"t":54,"s":[264.671,192.146,0],"to":[9.009,6.05,0],"ti":[-0.781,-19.115,0]},{"i":{"x":0.764,"y":1},"o":{"x":0.405,"y":0.51},"t":58,"s":[277.881,239.621,0],"to":[1.27,31.072,0],"ti":[0,0,0]},{"t":63,"s":[273.448,301.533,0]}],"ix":2},"a":{"a":0,"k":[154.23,106.217,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.999,0.999,0.999],"y":[1,1,1]},"o":{"x":[0.42,0.42,0.42],"y":[0,0,0]},"t":44,"s":[100.5,100.5,100]},{"t":59,"s":[18,18,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.104,0],[0,0],[0,1.104],[0,0],[1.104,0],[0,0],[0,-1.104],[0,0]],"o":[[0,0],[1.104,0],[0,0],[0,-1.104],[0,0],[-1.104,0],[0,0],[0,1.104]],"v":[[-66.292,30.5],[66.293,30.5],[68.293,28.5],[68.293,-28.5],[66.293,-30.5],[-66.292,-30.5],[-68.292,-28.5],[-68.292,28.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.862999949736,0.922000002394,0.866999966491,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[226.905,106.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.104,0],[0,0],[0,1.104],[0,0],[1.104,0],[0,0],[0,-1.104],[0,0]],"o":[[0,0],[1.104,0],[0,0],[0,-1.104],[0,0],[-1.104,0],[0,0],[0,1.104]],"v":[[-66.292,19.112],[66.293,19.112],[68.293,19.164],[68.293,-17.5],[66.293,-19.5],[-66.292,-19.5],[-68.292,-17.5],[-68.292,19.164]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.969000004787,0.922000002394,0.913999968884,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[226.49,191.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.104,0],[0,0],[0,1.104],[0,0],[1.104,0],[0,0],[0,-1.104],[0,0]],"o":[[0,0],[1.104,0],[0,0],[0,-1.104],[0,0],[-1.104,0],[0,0],[0,1.104]],"v":[[-66.293,19.112],[66.293,19.112],[68.293,19.164],[68.293,-17.5],[66.293,-19.5],[-66.293,-19.5],[-68.293,-17.5],[-68.293,19.164]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.964999988032,0.952999997606,0.819999964097,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[78.49,191.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-63.5,6.5],[63.5,6.5],[63.5,-6.5],[-63.5,-6.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[73.697,154.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.104,0],[0,0],[0,1.104],[0,0],[1.104,0],[0,0],[0,-1.104],[0,0]],"o":[[0,0],[1.104,0],[0,0],[0,-1.104],[0,0],[-1.104,0],[0,0],[0,1.104]],"v":[[-66.293,30.5],[66.293,30.5],[68.293,28.5],[68.293,-28.5],[66.293,-30.5],[-66.293,-30.5],[-68.293,-28.5],[-68.293,28.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.969000004787,0.922000002394,0.913999968884,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[78.49,106.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":4,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.104,0],[0,0],[0,1.104],[0,0],[1.104,0],[0,0],[0,-1.105],[0,0]],"o":[[0,0],[1.104,0],[0,0],[0,-1.105],[0,0],[-1.104,0],[0,0],[0,1.104]],"v":[[-61.5,6.5],[61.5,6.5],[63.5,4.5],[63.5,-4.5],[61.5,-6.5],[-61.5,-6.5],[-63.5,-4.5],[-63.5,4.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[73.697,58.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":4,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.104,0],[0,0],[0,1.104],[0,0],[1.104,0],[0,0],[0,-1.105],[0,0]],"o":[[0,0],[1.104,0],[0,0],[0,-1.105],[0,0],[-1.104,0],[0,0],[0,1.104]],"v":[[-17.5,6.5],[17.5,6.5],[19.5,4.5],[19.5,-4.5],[17.5,-6.5],[-17.5,-6.5],[-19.5,-4.5],[-19.5,4.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.964999988032,0.862999949736,0.528999956916,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[29.697,34.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":4,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.349,0],[0,0],[0,2.348],[0,0],[-2.349,0],[0,0],[0,-2.348],[0,0]],"o":[[0,0],[-2.349,0],[0,0],[0,-2.348],[0,0],[2.349,0],[0,0],[0,2.348]],"v":[[149.751,105.6],[-149.751,105.6],[-154.002,101.348],[-154.002,-101.347],[-149.751,-105.6],[149.751,-105.6],[154.002,-101.347],[154.002,101.348]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[154.252,105.85],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":4,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":24,"ty":4,"nm":"Launcher","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[223.503,222.229,0],"ix":2},"a":{"a":0,"k":[154.253,105.85,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.59],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.59],[-4.59,0]],"v":[[-8.31,0],[0,-8.311],[8.31,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[254.387,153.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.59],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.59],[-4.59,0]],"v":[[-8.31,0],[0,-8.311],[8.31,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[204.292,153.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.59],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.59],[-4.59,0]],"v":[[-8.31,0],[0.001,-8.311],[8.311,0],[0.001,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[154.197,153.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.59],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.59],[-4.59,0]],"v":[[-8.311,0],[0,-8.311],[8.311,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[104.103,153.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.59],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.59],[-4.59,0]],"v":[[-8.311,0],[0,-8.311],[8.311,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54.008,153.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":4,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.59],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.59],[-4.59,0]],"v":[[-8.31,0],[0,-8.311],[8.31,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[254.387,120.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":4,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.59],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.59],[-4.59,0]],"v":[[-8.31,0],[0,-8.311],[8.31,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[204.292,120.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":4,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.59],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.59],[-4.59,0]],"v":[[-8.31,0],[0.001,-8.311],[8.311,0],[0.001,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[154.197,120.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":4,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.59],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.59],[-4.59,0]],"v":[[-8.311,0],[0,-8.311],[8.311,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[104.103,120.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":4,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.59],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.59],[-4.59,0]],"v":[[-8.311,0],[0,-8.311],[8.311,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54.008,120.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":4,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.589],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.589],[-4.59,0]],"v":[[-8.31,0],[0,-8.311],[8.31,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[254.387,87.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":4,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.589],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.589],[-4.59,0]],"v":[[-8.31,0],[0,-8.311],[8.31,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[204.292,87.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":4,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.589],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.589],[-4.59,0]],"v":[[-8.31,0],[0.001,-8.311],[8.311,0],[0.001,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.92199999094,0.929000020027,0.940999984741,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[154.197,87.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":4,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.589],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.589],[-4.59,0]],"v":[[-8.311,0],[0,-8.311],[8.311,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[104.103,87.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":4,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.589],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.589],[-4.59,0]],"v":[[-8.311,0],[0,-8.311],[8.311,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54.008,87.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 15","np":4,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.589],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.589],[-4.59,0]],"v":[[-8.31,0],[0,-8.311],[8.31,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[254.387,54.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 16","np":4,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.589],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.589],[-4.59,0]],"v":[[-8.31,0],[0,-8.311],[8.31,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[204.292,54.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 17","np":4,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.589],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.589],[-4.59,0]],"v":[[-8.31,0],[0.001,-8.311],[8.311,0],[0.001,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[154.197,54.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 18","np":4,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.589],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.589],[-4.59,0]],"v":[[-8.311,0],[0,-8.311],[8.311,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[104.103,54.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 19","np":4,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,4.589],[-4.59,0],[0,-4.59],[4.589,0]],"o":[[0,-4.59],[4.589,0],[0,4.589],[-4.59,0]],"v":[[-8.311,0],[0,-8.311],[8.311,0],[0,8.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54.008,54.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 20","np":4,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.59,0],[0,0],[0,3.59],[3.59,0],[0,0],[0,-3.59]],"o":[[0,0],[3.59,0],[0,-3.59],[0,0],[-3.59,0],[0,3.59]],"v":[[-74,6.5],[74,6.5],[80.5,0],[74,-6.5],[-74,-6.5],[-80.5,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.922000002394,0.929000016755,0.941000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[154.535,17.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 21","np":4,"cix":2,"bm":0,"ix":21,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.349,0],[0,0],[0,2.348],[0,0],[-2.349,0],[0,0],[0,-2.348],[0,0]],"o":[[0,0],[-2.349,0],[0,0],[0,-2.348],[0,0],[2.349,0],[0,0],[0,2.348]],"v":[[149.751,105.6],[-149.751,105.6],[-154.002,101.348],[-154.002,-101.347],[-149.751,-105.6],[149.751,-105.6],[154.002,-101.347],[154.002,101.348]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.732999973671,0.74900004069,0.764999988032,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[154.252,105.85],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 22","np":4,"cix":2,"bm":0,"ix":22,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0}],"markers":[{"tm":8,"cm":"0","dr":0},{"tm":33,"cm":"1","dr":0},{"tm":42,"cm":"2","dr":0},{"tm":45,"cm":"*\r\r","dr":0},{"tm":53,"cm":"3","dr":0},{"tm":59,"cm":"**\r","dr":0},{"tm":120,"cm":"6","dr":0},{"tm":129,"cm":"7","dr":0}]}
\ No newline at end of file
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/heart_preloader-expected.png b/cobalt/renderer/rasterizer/testdata/lottie_coverage/heart_preloader-expected.png
deleted file mode 100755
index 90a6d5b..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/heart_preloader-expected.png
+++ /dev/null
Binary files differ
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/heart_preloader.json b/cobalt/renderer/rasterizer/testdata/lottie_coverage/heart_preloader.json
deleted file mode 100755
index 005043c..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/heart_preloader.json
+++ /dev/null
@@ -1 +0,0 @@
-{"v":"5.5.7","meta":{"g":"LottieFiles AE 0.1.20","a":"","k":"","d":"","tc":""},"fr":60,"ip":0,"op":30,"w":300,"h":300,"nm":"All Preloaders","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[52.5,52.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"f","pt":{"a":0,"k":{"i":[[-0.29,-1.59],[0,0],[0.05,-0.31],[2.46,-4.273],[2.662,-2.965],[3.911,-3.417],[3.76,-2.82],[5.1,-3.65],[0.348,0.308],[4.37,3.33],[4.44,3.78],[4.382,5.881],[1.126,5.435],[0.23,1.22],[0,0],[-0.06,0.26],[-0.63,2],[-6.073,3.37],[-6.437,-1.191],[-4.197,-4.783],[-0.147,-0.317],[-0.85,0.79],[-10.845,-9.997],[-1.314,-5.331]],"o":[[0,0],[-0.07,0.3],[-0.629,4.89],[-2.075,3.401],[-3.414,3.914],[-3.59,3.12],[-5,3.76],[-0.348,0.308],[-4.49,-3.16],[-4.6,-3.51],[-5.586,-4.752],[-3.326,-4.444],[-0.35,-1.28],[0,0],[0.06,-0.26],[0.44,-2],[2.11,-6.618],[5.653,-3.301],[6.278,1.037],[0.206,0.282],[1.09,-1.09],[10.777,-10.07],[4.064,3.691],[0.44,1.53]],"v":[[50.5,-15.281],[50.5,-10.811],[50.3,-9.891],[45.62,3.989],[38.5,13.559],[27.5,24.569],[16.5,33.569],[1.2,44.509],[-0.02,44.509],[-13.49,34.999],[-26.93,23.999],[-41.93,7.999],[-48.69,-7.001],[-49.5,-10.671],[-49.5,-15.281],[-49.33,-16.051],[-47.98,-22.051],[-35.24,-37.601],[-16.5,-40.871],[-0.3,-31.871],[0.23,-30.971],[2.98,-33.691],[41.32,-33.821],[49.57,-19.981]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[126.336,126.336],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":20,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"gf","o":{"a":0,"k":100,"ix":10},"r":1,"bm":0,"g":{"p":2,"k":{"a":0,"k":[0,1,0,0.2235294117647059,1,1,0.6980392156862745,0.5333333333333333],"ix":9}},"s":{"a":0,"k":[0,0],"ix":5},"e":{"a":0,"k":[100,0],"ix":6},"t":2,"h":{"a":0,"k":0,"ix":7},"a":{"a":0,"k":0,"ix":8},"nm":"Gradient Fill 1","mn":"ADBE Vector Graphic - G-Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-0.207,-0.145],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[83.088,83.088],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"5_white","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[150,150,0],"ix":2},"a":{"a":0,"k":[52.5,52.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[80,84.211,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":5,"s":[90,94.737,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":9,"s":[100,105.263,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":13,"s":[125,131.579,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":15,"s":[130,136.842,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":17,"s":[125,131.579,100]},{"t":29,"s":[80,84.211,100]}],"ix":6}},"ao":0,"w":105,"h":105,"ip":0,"op":30,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/ripple_loading_animation-expected.png b/cobalt/renderer/rasterizer/testdata/lottie_coverage/ripple_loading_animation-expected.png
deleted file mode 100755
index 9b4a63e..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/ripple_loading_animation-expected.png
+++ /dev/null
Binary files differ
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/ripple_loading_animation.json b/cobalt/renderer/rasterizer/testdata/lottie_coverage/ripple_loading_animation.json
deleted file mode 100755
index 1935a03..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/ripple_loading_animation.json
+++ /dev/null
@@ -1 +0,0 @@
-{"v":"4.10.1","fr":60,"ip":0,"op":120,"w":800,"h":800,"nm":"loading_animation","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 5","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":23,"s":[20],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":34,"s":[100],"e":[20]},{"t":69}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"n":["0_1_0p333_0","0_1_0p333_0"],"t":23,"s":[400,400],"e":[440,440]},{"i":{"x":[0.009,0.009],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"n":["0p009_1_0p333_0","0p009_1_0p333_0"],"t":34,"s":[440,440],"e":[400,400]},{"t":59}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":4,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gs","o":{"a":0,"k":100,"ix":9},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":23,"s":[5],"e":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":34,"s":[10],"e":[5]},{"t":59}],"ix":10},"g":{"p":3,"k":{"a":0,"k":[0,0,0.627,1,0.5,0.496,0.314,1,1,0.992,0,1],"ix":8}},"s":{"a":0,"k":[0,0],"ix":4},"e":{"a":0,"k":[100,0],"ix":5},"t":1,"lc":1,"lj":1,"ml":4,"nm":"Gradient Stroke 1","mn":"ADBE Vector Graphic - G-Stroke","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 4","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":16,"s":[20],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":27,"s":[100],"e":[20]},{"t":62}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0"],"t":16,"s":[320,320],"e":[360,360]},{"i":{"x":[0.025,0.025],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"n":["0p025_1_0p333_0","0p025_1_0p333_0"],"t":27,"s":[360,360],"e":[320,320]},{"t":52}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gs","o":{"a":0,"k":100,"ix":9},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":16,"s":[5],"e":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":27,"s":[10],"e":[5]},{"t":52}],"ix":10},"g":{"p":3,"k":{"a":0,"k":[0,0,0.627,1,0.5,0.496,0.314,1,1,0.992,0,1],"ix":8}},"s":{"a":0,"k":[0,0],"ix":4},"e":{"a":0,"k":[100,0],"ix":5},"t":1,"lc":1,"lj":1,"ml":4,"nm":"Gradient Stroke 1","mn":"ADBE Vector Graphic - G-Stroke","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 3","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":9,"s":[20],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":20,"s":[100],"e":[20]},{"t":55}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0"],"t":9,"s":[240,240],"e":[280,280]},{"i":{"x":[0.051,0.051],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"n":["0p051_1_0p333_0","0p051_1_0p333_0"],"t":20,"s":[280,280],"e":[240,240]},{"t":45}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gs","o":{"a":0,"k":100,"ix":9},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":9,"s":[5],"e":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":20,"s":[10],"e":[5]},{"t":45}],"ix":10},"g":{"p":3,"k":{"a":0,"k":[0,0,0.627,1,0.5,0.496,0.314,1,1,0.992,0,1],"ix":8}},"s":{"a":0,"k":[0,0],"ix":4},"e":{"a":0,"k":[100,0],"ix":5},"t":1,"lc":1,"lj":1,"ml":4,"nm":"Gradient Stroke 1","mn":"ADBE Vector Graphic - G-Stroke","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":2,"s":[20],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":13,"s":[100],"e":[20]},{"t":48}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0"],"t":2,"s":[160,160],"e":[200,200]},{"i":{"x":[0.034,0.034],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"n":["0p034_1_0p333_0","0p034_1_0p333_0"],"t":13,"s":[200,200],"e":[160,160]},{"t":38}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gs","o":{"a":0,"k":100,"ix":9},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":2,"s":[5],"e":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":13,"s":[10],"e":[5]},{"t":38}],"ix":10},"g":{"p":3,"k":{"a":0,"k":[0,0,0.627,1,0.5,0.496,0.314,1,1,0.992,0,1],"ix":8}},"s":{"a":0,"k":[0,0],"ix":4},"e":{"a":0,"k":[100,0],"ix":5},"t":1,"lc":1,"lj":1,"ml":4,"nm":"Gradient Stroke 1","mn":"ADBE Vector Graphic - G-Stroke","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":0,"s":[20],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":11,"s":[100],"e":[20]},{"t":46}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0"],"t":0,"s":[80,80],"e":[120,120]},{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"n":["0_1_0p333_0","0_1_0p333_0"],"t":11,"s":[120,120],"e":[80,80]},{"t":36}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gs","o":{"a":0,"k":100,"ix":9},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[5],"e":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":11,"s":[10],"e":[5]},{"t":35}],"ix":10},"g":{"p":3,"k":{"a":0,"k":[0,0,0.627,1,0.5,0.496,0.314,1,1,0.992,0,1],"ix":8}},"s":{"a":0,"k":[0,0],"ix":4},"e":{"a":0,"k":[100,0],"ix":5},"t":1,"lc":1,"lj":1,"ml":4,"nm":"Gradient Stroke 1","mn":"ADBE Vector Graphic - G-Stroke","hd":false}],"ip":0,"op":120,"st":0,"bm":0}]}
\ No newline at end of file
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-3d-2planes-expected.png b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-3d-2planes-expected.png
deleted file mode 100755
index 808ffed..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-3d-2planes-expected.png
+++ /dev/null
Binary files differ
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-3d-2planes.json b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-3d-2planes.json
deleted file mode 100755
index 997ee23..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-3d-2planes.json
+++ /dev/null
@@ -1,990 +0,0 @@
-{
- "assets": [
- {
- "id": "comp_0",
- "layers": [
- {
- "ao": 0,
- "bm": 0,
- "ddd": 0,
- "ind": 1,
- "ip": 0,
- "ks": {
- "a": {
- "a": 0,
- "ix": 1,
- "k": [
- 0,
- 0,
- 0
- ]
- },
- "o": {
- "a": 0,
- "ix": 11,
- "k": 35
- },
- "p": {
- "a": 0,
- "ix": 2,
- "k": [
- 50,
- 50,
- 0
- ]
- },
- "r": {
- "a": 0,
- "ix": 10,
- "k": 0
- },
- "s": {
- "a": 0,
- "ix": 6,
- "k": [
- 100,
- 100,
- 100
- ]
- }
- },
- "nm": "Shape Layer 1",
- "op": 1203,
- "shapes": [
- {
- "d": 1,
- "hd": false,
- "mn": "ADBE Vector Shape - Rect",
- "nm": "Rectangle Path 6",
- "p": {
- "a": 1,
- "ix": 3,
- "k": [
- {
- "i": {
- "x": 0.833,
- "y": 0.833
- },
- "o": {
- "x": 0.167,
- "y": 0.167
- },
- "s": [
- -20,
- -20
- ],
- "t": 450,
- "ti": [
- 0,
- -3.333
- ],
- "to": [
- 0,
- 3.333
- ]
- },
- {
- "s": [
- -20,
- 0
- ],
- "t": 570
- }
- ]
- },
- "r": {
- "a": 0,
- "ix": 4,
- "k": 0
- },
- "s": {
- "a": 0,
- "ix": 2,
- "k": [
- 16,
- 16
- ]
- },
- "ty": "rc"
- },
- {
- "d": 1,
- "hd": false,
- "mn": "ADBE Vector Shape - Rect",
- "nm": "Rectangle Path 4",
- "p": {
- "a": 1,
- "ix": 3,
- "k": [
- {
- "i": {
- "x": 0.833,
- "y": 0.833
- },
- "o": {
- "x": 0.167,
- "y": 0.167
- },
- "s": [
- 0,
- -20
- ],
- "t": 600,
- "ti": [
- 3.333,
- 0
- ],
- "to": [
- -3.333,
- 0
- ]
- },
- {
- "s": [
- -20,
- -20
- ],
- "t": 720
- }
- ]
- },
- "r": {
- "a": 0,
- "ix": 4,
- "k": 0
- },
- "s": {
- "a": 0,
- "ix": 2,
- "k": [
- 16,
- 16
- ]
- },
- "ty": "rc"
- },
- {
- "d": 1,
- "hd": false,
- "mn": "ADBE Vector Shape - Rect",
- "nm": "Rectangle Path 5",
- "p": {
- "a": 1,
- "ix": 3,
- "k": [
- {
- "i": {
- "x": 0.833,
- "y": 0.833
- },
- "o": {
- "x": 0.167,
- "y": 0.167
- },
- "s": [
- 20,
- -20
- ],
- "t": 750,
- "ti": [
- 3.333,
- 0
- ],
- "to": [
- -3.333,
- 0
- ]
- },
- {
- "s": [
- 0,
- -20
- ],
- "t": 870
- }
- ]
- },
- "r": {
- "a": 0,
- "ix": 4,
- "k": 0
- },
- "s": {
- "a": 0,
- "ix": 2,
- "k": [
- 16,
- 16
- ]
- },
- "ty": "rc"
- },
- {
- "d": 1,
- "hd": false,
- "mn": "ADBE Vector Shape - Rect",
- "nm": "Rectangle Path 3",
- "p": {
- "a": 1,
- "ix": 3,
- "k": [
- {
- "i": {
- "x": 0.833,
- "y": 0.833
- },
- "o": {
- "x": 0.167,
- "y": 0.167
- },
- "s": [
- -20,
- 0
- ],
- "t": 300,
- "ti": [
- -3.333,
- 0
- ],
- "to": [
- 3.333,
- 0
- ]
- },
- {
- "s": [
- 0,
- 0
- ],
- "t": 420
- }
- ]
- },
- "r": {
- "a": 0,
- "ix": 4,
- "k": 0
- },
- "s": {
- "a": 0,
- "ix": 2,
- "k": [
- 16,
- 16
- ]
- },
- "ty": "rc"
- },
- {
- "d": 1,
- "hd": false,
- "mn": "ADBE Vector Shape - Rect",
- "nm": "Rectangle Path 1",
- "p": {
- "a": 1,
- "ix": 3,
- "k": [
- {
- "i": {
- "x": 0.833,
- "y": 0.833
- },
- "o": {
- "x": 0.167,
- "y": 0.167
- },
- "s": [
- 0,
- 0
- ],
- "t": 150,
- "ti": [
- 0,
- -3.333
- ],
- "to": [
- 0,
- 3.333
- ]
- },
- {
- "s": [
- 0,
- 20
- ],
- "t": 270
- }
- ]
- },
- "r": {
- "a": 0,
- "ix": 4,
- "k": 0
- },
- "s": {
- "a": 0,
- "ix": 2,
- "k": [
- 16,
- 16
- ]
- },
- "ty": "rc"
- },
- {
- "d": 1,
- "hd": false,
- "mn": "ADBE Vector Shape - Rect",
- "nm": "Rectangle Path 2",
- "p": {
- "a": 1,
- "ix": 3,
- "k": [
- {
- "i": {
- "x": 0.833,
- "y": 0.833
- },
- "o": {
- "x": 0.167,
- "y": 0.167
- },
- "s": [
- 20,
- 0
- ],
- "t": 900,
- "ti": [
- 0,
- 3.333
- ],
- "to": [
- 0,
- -3.333
- ]
- },
- {
- "s": [
- 20,
- -20
- ],
- "t": 1020
- }
- ]
- },
- "r": {
- "a": 0,
- "ix": 4,
- "k": 0
- },
- "s": {
- "a": 0,
- "ix": 2,
- "k": [
- 16,
- 16
- ]
- },
- "ty": "rc"
- },
- {
- "d": 1,
- "hd": false,
- "mn": "ADBE Vector Shape - Rect",
- "nm": "Rectangle Path 8",
- "p": {
- "a": 0,
- "ix": 3,
- "k": [
- -20,
- 20
- ]
- },
- "r": {
- "a": 0,
- "ix": 4,
- "k": 0
- },
- "s": {
- "a": 0,
- "ix": 2,
- "k": [
- 16,
- 16
- ]
- },
- "ty": "rc"
- },
- {
- "d": 1,
- "hd": false,
- "mn": "ADBE Vector Shape - Rect",
- "nm": "Rectangle Path 7",
- "p": {
- "a": 1,
- "ix": 3,
- "k": [
- {
- "i": {
- "x": 0.833,
- "y": 0.833
- },
- "o": {
- "x": 0.167,
- "y": 0.167
- },
- "s": [
- 0,
- 20
- ],
- "t": 0,
- "ti": [
- -3.333,
- 0
- ],
- "to": [
- 3.333,
- 0
- ]
- },
- {
- "i": {
- "x": 0.833,
- "y": 0.833
- },
- "o": {
- "x": 0.167,
- "y": 0.167
- },
- "s": [
- 20,
- 20
- ],
- "t": 120,
- "ti": [
- 0,
- 0
- ],
- "to": [
- 0,
- 0
- ]
- },
- {
- "i": {
- "x": 0.833,
- "y": 0.833
- },
- "o": {
- "x": 0.167,
- "y": 0.167
- },
- "s": [
- 20,
- 20
- ],
- "t": 1050,
- "ti": [
- 0,
- 3.333
- ],
- "to": [
- 0,
- -3.333
- ]
- },
- {
- "s": [
- 20,
- 0
- ],
- "t": 1170
- }
- ]
- },
- "r": {
- "a": 0,
- "ix": 4,
- "k": 0
- },
- "s": {
- "a": 0,
- "ix": 2,
- "k": [
- 16,
- 16
- ]
- },
- "ty": "rc"
- },
- {
- "bm": 0,
- "c": {
- "a": 0,
- "ix": 4,
- "k": [
- 0,
- 1,
- 0.263311892748,
- 1
- ]
- },
- "hd": false,
- "mn": "ADBE Vector Graphic - Fill",
- "nm": "Fill 1",
- "o": {
- "a": 0,
- "ix": 5,
- "k": 100
- },
- "r": 1,
- "ty": "fl"
- }
- ],
- "sr": 1,
- "st": 0,
- "ty": 4
- }
- ]
- }
- ],
- "ddd": 1,
- "fr": 60,
- "h": 100,
- "ip": 0,
- "layers": [
- {
- "bm": 0,
- "ddd": 0,
- "ind": 1,
- "ip": 0,
- "ks": {
- "a": {
- "a": 0,
- "ix": 1,
- "k": [
- 50,
- 50,
- 0
- ]
- },
- "or": {
- "a": 0,
- "ix": 7,
- "k": [
- 0,
- 0,
- 0
- ]
- },
- "p": {
- "a": 1,
- "ix": 2,
- "k": [
- {
- "i": {
- "x": 0.833,
- "y": 0.833
- },
- "o": {
- "x": 0.167,
- "y": 0.167
- },
- "s": [
- 50,
- 50,
- -200
- ],
- "t": 0,
- "ti": [
- 0,
- 0,
- 0
- ],
- "to": [
- -25,
- 41.667,
- 0
- ]
- },
- {
- "i": {
- "x": 0.833,
- "y": 0.833
- },
- "o": {
- "x": 0.167,
- "y": 0.167
- },
- "s": [
- -100,
- 300,
- -200
- ],
- "t": 360,
- "ti": [
- -41.21,
- 68.683,
- 0
- ],
- "to": [
- 0,
- 0,
- 0
- ]
- },
- {
- "i": {
- "x": 0.833,
- "y": 0.833
- },
- "o": {
- "x": 0.167,
- "y": 0.167
- },
- "s": [
- 200,
- 300,
- -200
- ],
- "t": 840,
- "ti": [
- -10.083,
- 16.805,
- 0
- ],
- "to": [
- 27.854,
- -46.424,
- 0
- ]
- },
- {
- "s": [
- 50,
- 50,
- -200
- ],
- "t": 1200
- }
- ]
- },
- "rx": {
- "a": 0,
- "ix": 8,
- "k": 0
- },
- "ry": {
- "a": 0,
- "ix": 9,
- "k": 0
- },
- "rz": {
- "a": 1,
- "ix": 10,
- "k": [
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "s": [
- 0
- ],
- "t": 0
- },
- {
- "s": [
- 360
- ],
- "t": 1200
- }
- ]
- }
- },
- "nm": "Camera 1",
- "op": 1201,
- "pe": {
- "a": 0,
- "ix": 1,
- "k": 269
- },
- "sr": 1,
- "st": 0,
- "ty": 13
- },
- {
- "ao": 0,
- "bm": 0,
- "ddd": 1,
- "h": 100,
- "ind": 2,
- "ip": 0,
- "ks": {
- "a": {
- "a": 0,
- "ix": 1,
- "k": [
- 50,
- 50,
- 0
- ]
- },
- "o": {
- "a": 0,
- "ix": 11,
- "k": 100
- },
- "or": {
- "a": 0,
- "ix": 7,
- "k": [
- 0,
- 0,
- 0
- ]
- },
- "p": {
- "a": 0,
- "ix": 2,
- "k": [
- 50,
- 50,
- 20
- ]
- },
- "rx": {
- "a": 0,
- "ix": 8,
- "k": 0
- },
- "ry": {
- "a": 0,
- "ix": 9,
- "k": 0
- },
- "rz": {
- "a": 0,
- "ix": 10,
- "k": 0
- },
- "s": {
- "a": 0,
- "ix": 6,
- "k": [
- 100,
- 100,
- 100
- ]
- }
- },
- "nm": "bottom",
- "op": 1201,
- "refId": "comp_0",
- "sr": 1,
- "st": 0,
- "tm": {
- "a": 1,
- "ix": 2,
- "k": [
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "s": [
- 20
- ],
- "t": 0
- },
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "s": [
- 0
- ],
- "t": 1200
- },
- {
- "s": [
- 20.017
- ],
- "t": 1201
- }
- ]
- },
- "ty": 0,
- "w": 100
- },
- {
- "ao": 0,
- "bm": 0,
- "ddd": 1,
- "h": 100,
- "ind": 4,
- "ip": 0,
- "ks": {
- "a": {
- "a": 0,
- "ix": 1,
- "k": [
- 50,
- 50,
- 0
- ]
- },
- "o": {
- "a": 0,
- "ix": 11,
- "k": 100
- },
- "or": {
- "a": 0,
- "ix": 7,
- "k": [
- 0,
- 0,
- 0
- ]
- },
- "p": {
- "a": 0,
- "ix": 2,
- "k": [
- 50,
- 50,
- -20
- ]
- },
- "rx": {
- "a": 0,
- "ix": 8,
- "k": 0
- },
- "ry": {
- "a": 0,
- "ix": 9,
- "k": 0
- },
- "rz": {
- "a": 0,
- "ix": 10,
- "k": 0
- },
- "s": {
- "a": 0,
- "ix": 6,
- "k": [
- 100,
- 100,
- 100
- ]
- }
- },
- "nm": "top",
- "op": 1201,
- "refId": "comp_0",
- "sr": 1,
- "st": 0,
- "ty": 0,
- "w": 100
- },
- {
- "ao": 0,
- "bm": 0,
- "ddd": 0,
- "ind": 5,
- "ip": 0,
- "ks": {
- "a": {
- "a": 0,
- "ix": 1,
- "k": [
- 50,
- 50,
- 0
- ]
- },
- "o": {
- "a": 0,
- "ix": 11,
- "k": 100
- },
- "p": {
- "a": 0,
- "ix": 2,
- "k": [
- 50,
- 50,
- 0
- ]
- },
- "r": {
- "a": 0,
- "ix": 10,
- "k": 0
- },
- "s": {
- "a": 0,
- "ix": 6,
- "k": [
- 100,
- 100,
- 100
- ]
- }
- },
- "nm": "Black Solid 1",
- "op": 1201,
- "sc": "#000000",
- "sh": 100,
- "sr": 1,
- "st": 0,
- "sw": 100,
- "ty": 1
- }
- ],
- "markers": [],
- "nm": "cube",
- "op": 1201,
- "v": "5.5.5",
- "w": 100
-}
\ No newline at end of file
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-effects-tranform-expected.png b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-effects-tranform-expected.png
deleted file mode 100755
index ef35678..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-effects-tranform-expected.png
+++ /dev/null
Binary files differ
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-effects-tranform.json b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-effects-tranform.json
deleted file mode 100755
index 4df1b5c..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-effects-tranform.json
+++ /dev/null
@@ -1 +0,0 @@
-{"v":"5.5.2","fr":60,"ip":0,"op":900,"w":500,"h":500,"nm":"Comp 1","ddd":0,"assets":[{"id":"image_0","w":150,"h":150,"u":"images/","p":"triangle.png","e":0},{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[75,75,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":3,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":25,"ix":6},"is":{"a":0,"k":0,"ix":8},"or":{"a":0,"k":50,"ix":7},"os":{"a":0,"k":0,"ix":9},"ix":1,"nm":"Polystar Path 1","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"fl","c":{"a":0,"k":[0,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":900,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":899,"s":[720]}],"ix":10},"p":{"a":0,"k":[115,115,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[150,150,100],"ix":6}},"ao":0,"ef":[{"ty":25,"nm":"Drop Shadow","np":8,"mn":"ADBE Drop Shadow","ix":1,"en":1,"ef":[{"ty":2,"nm":"Shadow Color","mn":"ADBE Drop Shadow-0001","ix":1,"v":{"a":0,"k":[0,0,0,1],"ix":1}},{"ty":0,"nm":"Opacity","mn":"ADBE Drop Shadow-0002","ix":2,"v":{"a":0,"k":191.25,"ix":2}},{"ty":0,"nm":"Direction","mn":"ADBE Drop Shadow-0003","ix":3,"v":{"a":0,"k":180,"ix":3}},{"ty":0,"nm":"Distance","mn":"ADBE Drop Shadow-0004","ix":4,"v":{"a":0,"k":30,"ix":4}},{"ty":0,"nm":"Softness","mn":"ADBE Drop Shadow-0005","ix":5,"v":{"a":0,"k":0,"ix":5}},{"ty":7,"nm":"Shadow Only","mn":"ADBE Drop Shadow-0006","ix":6,"v":{"a":0,"k":0,"ix":6}}]}],"shapes":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":3,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":25,"ix":6},"is":{"a":0,"k":0,"ix":8},"or":{"a":0,"k":50,"ix":7},"os":{"a":0,"k":0,"ix":9},"ix":1,"nm":"Polystar Path 1","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"fl","c":{"a":0,"k":[0,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":900,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"triangle","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":899,"s":[720]}],"ix":10},"p":{"a":0,"k":[385,115,0],"ix":2},"a":{"a":0,"k":[75,75,0],"ix":1},"s":{"a":0,"k":[150,150,100],"ix":6}},"ao":0,"ef":[{"ty":25,"nm":"Drop Shadow","np":8,"mn":"ADBE Drop Shadow","ix":1,"en":1,"ef":[{"ty":2,"nm":"Shadow Color","mn":"ADBE Drop Shadow-0001","ix":1,"v":{"a":0,"k":[0,0,0,1],"ix":1}},{"ty":0,"nm":"Opacity","mn":"ADBE Drop Shadow-0002","ix":2,"v":{"a":0,"k":191.25,"ix":2}},{"ty":0,"nm":"Direction","mn":"ADBE Drop Shadow-0003","ix":3,"v":{"a":0,"k":180,"ix":3}},{"ty":0,"nm":"Distance","mn":"ADBE Drop Shadow-0004","ix":4,"v":{"a":0,"k":30,"ix":4}},{"ty":0,"nm":"Softness","mn":"ADBE Drop Shadow-0005","ix":5,"v":{"a":0,"k":0,"ix":5}},{"ty":7,"nm":"Shadow Only","mn":"ADBE Drop Shadow-0006","ix":6,"v":{"a":0,"k":0,"ix":6}}]}],"w":150,"h":150,"ip":0,"op":900,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":2,"nm":"triangle (0-00-00-00).png","cl":"png","refId":"image_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":899,"s":[720]}],"ix":10},"p":{"a":0,"k":[385,385,0],"ix":2},"a":{"a":0,"k":[75,75,0],"ix":1},"s":{"a":0,"k":[150,150,100],"ix":6}},"ao":0,"ef":[{"ty":25,"nm":"Drop Shadow","np":8,"mn":"ADBE Drop Shadow","ix":1,"en":1,"ef":[{"ty":2,"nm":"Shadow Color","mn":"ADBE Drop Shadow-0001","ix":1,"v":{"a":0,"k":[0,0,0,1],"ix":1}},{"ty":0,"nm":"Opacity","mn":"ADBE Drop Shadow-0002","ix":2,"v":{"a":0,"k":191.25,"ix":2}},{"ty":0,"nm":"Direction","mn":"ADBE Drop Shadow-0003","ix":3,"v":{"a":0,"k":180,"ix":3}},{"ty":0,"nm":"Distance","mn":"ADBE Drop Shadow-0004","ix":4,"v":{"a":0,"k":30,"ix":4}},{"ty":0,"nm":"Softness","mn":"ADBE Drop Shadow-0005","ix":5,"v":{"a":0,"k":0,"ix":5}},{"ty":7,"nm":"Shadow Only","mn":"ADBE Drop Shadow-0006","ix":6,"v":{"a":0,"k":0,"ix":6}}]}],"ip":0,"op":900,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":1,"nm":"White Solid 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250,250,0],"ix":2},"a":{"a":0,"k":[250,250,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"sw":500,"sh":500,"sc":"#ffffff","ip":0,"op":900,"st":0,"bm":0}],"markers":[]}
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-fill-effect-expected.png b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-fill-effect-expected.png
deleted file mode 100755
index 019a1a8..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-fill-effect-expected.png
+++ /dev/null
Binary files differ
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-fill-effect.json b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-fill-effect.json
deleted file mode 100755
index 8ae8849..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-fill-effect.json
+++ /dev/null
@@ -1 +0,0 @@
-{"v":"5.5.10","fr":60,"ip":0,"op":601,"w":500,"h":500,"nm":"fill","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250,250,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[200,200],"ix":2},"p":{"a":0,"k":[100,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0,1,0.250980407,1],"ix":4},"o":{"a":0,"k":75,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":600,"s":[360]}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":5,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":50,"ix":6},"is":{"a":0,"k":0,"ix":8},"or":{"a":0,"k":162,"ix":7},"os":{"a":0,"k":0,"ix":9},"ix":1,"nm":"Polystar Path 1","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.250980407,0,1],"ix":4},"o":{"a":0,"k":75,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":600,"s":[720]}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[175,175],"ix":2},"p":{"a":0,"k":[-90,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.250980407,0,1,1],"ix":4},"o":{"a":0,"k":75,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":600,"s":[-360]}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":601,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"precomp","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250,250,0],"ix":2},"a":{"a":0,"k":[250,250,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ef":[{"ty":21,"nm":"Fill","np":9,"mn":"ADBE Fill","ix":1,"en":1,"ef":[{"ty":10,"nm":"Fill Mask","mn":"ADBE Fill-0001","ix":1,"v":{"a":0,"k":0,"ix":1}},{"ty":7,"nm":"All Masks","mn":"ADBE Fill-0007","ix":2,"v":{"a":0,"k":0,"ix":2}},{"ty":2,"nm":"Color","mn":"ADBE Fill-0002","ix":3,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[1,0,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":210,"s":[0,1,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":406,"s":[0,0,1,1]},{"t":600,"s":[1,0,0,1]}],"ix":3}},{"ty":7,"nm":"Invert","mn":"ADBE Fill-0006","ix":4,"v":{"a":0,"k":0,"ix":4}},{"ty":0,"nm":"Horizontal Feather","mn":"ADBE Fill-0003","ix":5,"v":{"a":0,"k":0,"ix":5}},{"ty":0,"nm":"Vertical Feather","mn":"ADBE Fill-0004","ix":6,"v":{"a":0,"k":0,"ix":6}},{"ty":0,"nm":"Opacity","mn":"ADBE Fill-0005","ix":7,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":300,"s":[0.5]},{"t":600,"s":[1]}],"ix":7}}]}],"w":500,"h":500,"ip":0,"op":601,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":1,"nm":"White Solid 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250,250,0],"ix":2},"a":{"a":0,"k":[250,250,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"sw":500,"sh":500,"sc":"#ffffff","ip":0,"op":601,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-gradient-opacity-expected.png b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-gradient-opacity-expected.png
deleted file mode 100755
index c3ad8d5..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-gradient-opacity-expected.png
+++ /dev/null
Binary files differ
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-gradient-opacity.json b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-gradient-opacity.json
deleted file mode 100755
index db0057b..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-gradient-opacity.json
+++ /dev/null
@@ -1,585 +0,0 @@
-{
- "assets": [],
- "ddd": 0,
- "fr": 60,
- "h": 500,
- "ip": 0,
- "layers": [
- {
- "ao": 0,
- "bm": 0,
- "ddd": 0,
- "ind": 1,
- "ip": 0,
- "ks": {
- "a": {
- "a": 0,
- "ix": 1,
- "k": [
- 0,
- 0,
- 0
- ]
- },
- "o": {
- "a": 0,
- "ix": 11,
- "k": 100
- },
- "p": {
- "a": 0,
- "ix": 2,
- "k": [
- 250,
- 75,
- 0
- ]
- },
- "r": {
- "a": 0,
- "ix": 10,
- "k": 0
- },
- "s": {
- "a": 0,
- "ix": 6,
- "k": [
- 100,
- 100,
- 100
- ]
- }
- },
- "nm": "Shape Layer 1",
- "op": 301,
- "shapes": [
- {
- "d": 1,
- "hd": false,
- "mn": "ADBE Vector Shape - Rect",
- "nm": "Rectangle Path 1",
- "p": {
- "a": 0,
- "ix": 3,
- "k": [
- 0,
- 0
- ]
- },
- "r": {
- "a": 0,
- "ix": 4,
- "k": 0
- },
- "s": {
- "a": 0,
- "ix": 2,
- "k": [
- 400,
- 100
- ]
- },
- "ty": "rc"
- },
- {
- "bm": 0,
- "e": {
- "a": 0,
- "ix": 6,
- "k": [
- 200,
- 0
- ]
- },
- "g": {
- "k": {
- "a": 0,
- "ix": 9,
- "k": [
- 0.50, 0, 1, 0,
- 0.50, 1, 0, 0,
- 0.00, 1,
- 0.25, 0,
- 0.50, 1,
- 0.75, 0,
- 1.00, 1
- ]
- },
- "p": 2
- },
- "hd": false,
- "mn": "ADBE Vector Graphic - G-Fill",
- "nm": "Gradient Fill 1",
- "o": {
- "a": 0,
- "ix": 10,
- "k": 100
- },
- "r": 1,
- "s": {
- "a": 0,
- "ix": 5,
- "k": [
- -200,
- 0
- ]
- },
- "t": 1,
- "ty": "gf"
- }
- ],
- "sr": 1,
- "st": 0,
- "ty": 4
- },
- {
- "ao": 0,
- "bm": 0,
- "ddd": 0,
- "ind": 2,
- "ip": 0,
- "ks": {
- "a": {
- "a": 0,
- "ix": 1,
- "k": [
- 0,
- 0,
- 0
- ]
- },
- "o": {
- "a": 0,
- "ix": 11,
- "k": 100
- },
- "p": {
- "a": 0,
- "ix": 2,
- "k": [
- 250,
- 190,
- 0
- ]
- },
- "r": {
- "a": 0,
- "ix": 10,
- "k": 0
- },
- "s": {
- "a": 0,
- "ix": 6,
- "k": [
- 100,
- 100,
- 100
- ]
- }
- },
- "nm": "Shape Layer 2",
- "op": 301,
- "shapes": [
- {
- "d": 1,
- "hd": false,
- "mn": "ADBE Vector Shape - Rect",
- "nm": "Rectangle Path 1",
- "p": {
- "a": 0,
- "ix": 3,
- "k": [
- 0,
- 0
- ]
- },
- "r": {
- "a": 0,
- "ix": 4,
- "k": 0
- },
- "s": {
- "a": 0,
- "ix": 2,
- "k": [
- 400,
- 100
- ]
- },
- "ty": "rc"
- },
- {
- "bm": 0,
- "e": {
- "a": 0,
- "ix": 6,
- "k": [
- 200,
- 0
- ]
- },
- "g": {
- "k": {
- "a": 0,
- "ix": 9,
- "k": [
- 0.00, 0, 1, 0,
- 0.25, 1, 0, 0,
- 0.50, 0, 0, 1,
- 0.75, 1, 0, 0,
- 1.00, 0, 1, 0,
-
- 0.50, 0.35,
- 0.50, 1.00
- ]
- },
- "p": 5
- },
- "hd": false,
- "mn": "ADBE Vector Graphic - G-Fill",
- "nm": "Gradient Fill 1",
- "o": {
- "a": 0,
- "ix": 10,
- "k": 100
- },
- "r": 1,
- "s": {
- "a": 0,
- "ix": 5,
- "k": [
- -200,
- 0
- ]
- },
- "t": 1,
- "ty": "gf"
- }
- ],
- "sr": 1,
- "st": 0,
- "ty": 4
- },
- {
- "ao": 0,
- "bm": 0,
- "ddd": 0,
- "ind": 3,
- "ip": 0,
- "ks": {
- "a": {
- "a": 0,
- "ix": 1,
- "k": [
- 0,
- 0,
- 0
- ]
- },
- "o": {
- "a": 0,
- "ix": 11,
- "k": 100
- },
- "p": {
- "a": 0,
- "ix": 2,
- "k": [
- 250,
- 305,
- 0
- ]
- },
- "r": {
- "a": 0,
- "ix": 10,
- "k": 0
- },
- "s": {
- "a": 0,
- "ix": 6,
- "k": [
- 100,
- 100,
- 100
- ]
- }
- },
- "nm": "Shape Layer 3",
- "op": 301,
- "shapes": [
- {
- "d": 1,
- "hd": false,
- "mn": "ADBE Vector Shape - Rect",
- "nm": "Rectangle Path 1",
- "p": {
- "a": 0,
- "ix": 3,
- "k": [
- 0,
- 0
- ]
- },
- "r": {
- "a": 0,
- "ix": 4,
- "k": 0
- },
- "s": {
- "a": 0,
- "ix": 2,
- "k": [
- 400,
- 100
- ]
- },
- "ty": "rc"
- },
- {
- "bm": 0,
- "e": {
- "a": 0,
- "ix": 6,
- "k": [
- 200,
- 0
- ]
- },
- "g": {
- "k": {
- "a": 0,
- "ix": 9,
- "k": [
- 0.00, 0, 1, 0,
- 0.25, 1, 0, 0,
- 0.50, 0, 0, 1,
- 0.75, 1, 0, 0,
- 1.00, 0, 1, 0,
-
- 0.25, 1,
- 0.37, 0,
- 0.50, 1,
- 0.62, 0,
- 0.75, 1
- ]
- },
- "p": 5
- },
- "hd": false,
- "mn": "ADBE Vector Graphic - G-Fill",
- "nm": "Gradient Fill 1",
- "o": {
- "a": 0,
- "ix": 10,
- "k": 100
- },
- "r": 1,
- "s": {
- "a": 0,
- "ix": 5,
- "k": [
- -200,
- 0
- ]
- },
- "t": 1,
- "ty": "gf"
- }
- ],
- "sr": 1,
- "st": 0,
- "ty": 4
- },
- {
- "ao": 0,
- "bm": 0,
- "ddd": 0,
- "ind": 4,
- "ip": 0,
- "ks": {
- "a": {
- "a": 0,
- "ix": 1,
- "k": [
- 0,
- 0,
- 0
- ]
- },
- "o": {
- "a": 0,
- "ix": 11,
- "k": 100
- },
- "p": {
- "a": 0,
- "ix": 2,
- "k": [
- 250,
- 425,
- 0
- ]
- },
- "r": {
- "a": 0,
- "ix": 10,
- "k": 0
- },
- "s": {
- "a": 0,
- "ix": 6,
- "k": [
- 100,
- 100,
- 100
- ]
- }
- },
- "nm": "Shape Layer 4",
- "op": 301,
- "shapes": [
- {
- "d": 1,
- "hd": false,
- "mn": "ADBE Vector Shape - Rect",
- "nm": "Rectangle Path 1",
- "p": {
- "a": 0,
- "ix": 3,
- "k": [
- 0,
- 0
- ]
- },
- "r": {
- "a": 0,
- "ix": 4,
- "k": 0
- },
- "s": {
- "a": 0,
- "ix": 2,
- "k": [
- 400,
- 100
- ]
- },
- "ty": "rc"
- },
- {
- "bm": 0,
- "e": {
- "a": 0,
- "ix": 6,
- "k": [
- 200,
- 0
- ]
- },
- "g": {
- "k": {
- "a": 0,
- "ix": 9,
- "k": [
- 0.25, 0, 1, 0,
- 0.37, 1, 0, 0,
- 0.50, 0, 0, 1,
- 0.62, 1, 0, 0,
- 0.75, 0, 1, 0,
-
- 0.00, 1,
- 0.25, 0,
- 0.50, 1,
- 0.75, 0,
- 1.00, 1
- ]
- },
- "p": 5
- },
- "hd": false,
- "mn": "ADBE Vector Graphic - G-Fill",
- "nm": "Gradient Fill 1",
- "o": {
- "a": 0,
- "ix": 10,
- "k": 100
- },
- "r": 1,
- "s": {
- "a": 0,
- "ix": 5,
- "k": [
- -200,
- 0
- ]
- },
- "t": 1,
- "ty": "gf"
- }
- ],
- "sr": 1,
- "st": 0,
- "ty": 4
- },
- {
- "ao": 0,
- "bm": 0,
- "ddd": 0,
- "ind": 5,
- "ip": 0,
- "ks": {
- "a": {
- "a": 0,
- "ix": 1,
- "k": [
- 250,
- 250,
- 0
- ]
- },
- "o": {
- "a": 0,
- "ix": 11,
- "k": 100
- },
- "p": {
- "a": 0,
- "ix": 2,
- "k": [
- 250,
- 250,
- 0
- ]
- },
- "r": {
- "a": 0,
- "ix": 10,
- "k": 0
- },
- "s": {
- "a": 0,
- "ix": 6,
- "k": [
- 100,
- 100,
- 100
- ]
- }
- },
- "nm": "White Solid 1",
- "op": 301,
- "sc": "#ffffff",
- "sh": 500,
- "sr": 1,
- "st": 0,
- "sw": 500,
- "ty": 1
- }
- ],
- "markers": [],
- "nm": "gradient opacity",
- "op": 301,
- "v": "5.5.5",
- "w": 500
-}
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-gradient-ramp-expected.png b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-gradient-ramp-expected.png
deleted file mode 100755
index 73ef3d0..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-gradient-ramp-expected.png
+++ /dev/null
Binary files differ
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-gradient-ramp.json b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-gradient-ramp.json
deleted file mode 100755
index 536f6f5..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-gradient-ramp.json
+++ /dev/null
@@ -1 +0,0 @@
-{"v":"5.5.0","fr":60,"ip":0,"op":300,"w":500,"h":500,"nm":"Comp 1","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":1,"nm":"solid-linear","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[125,125,0],"ix":2},"a":{"a":0,"k":[100,100,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Gradient Ramp","np":10,"mn":"ADBE Ramp","ix":1,"en":1,"ef":[{"ty":3,"nm":"Start of Ramp","mn":"ADBE Ramp-0001","ix":1,"v":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[50,50],"to":[16.667,0],"ti":[-16.667,-16.667]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[150,50],"to":[16.667,16.667],"ti":[16.667,-16.667]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":150,"s":[150,150],"to":[-16.667,16.667],"ti":[16.667,16.667]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":225,"s":[50,150],"to":[-16.667,-16.667],"ti":[0,16.667]},{"t":299,"s":[50,50]}],"ix":1}},{"ty":2,"nm":"Start Color","mn":"ADBE Ramp-0002","ix":2,"v":{"a":0,"k":[1,0,0,1],"ix":2}},{"ty":3,"nm":"End of Ramp","mn":"ADBE Ramp-0003","ix":3,"v":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[150,150],"to":[-16.667,0],"ti":[16.667,16.667]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[50,150],"to":[-16.667,-16.667],"ti":[-16.667,16.667]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":150,"s":[50,50],"to":[16.667,-16.667],"ti":[-16.667,-16.667]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":225,"s":[150,50],"to":[16.667,16.667],"ti":[0,-16.667]},{"t":299,"s":[150,150]}],"ix":3}},{"ty":2,"nm":"End Color","mn":"ADBE Ramp-0004","ix":4,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[1,1,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":150,"s":[0,0,1,1]},{"t":299,"s":[1,1,0,1]}],"ix":4}},{"ty":7,"nm":"Ramp Shape","mn":"ADBE Ramp-0005","ix":5,"v":{"a":0,"k":1,"ix":5}},{"ty":0,"nm":"Ramp Scatter","mn":"ADBE Ramp-0006","ix":6,"v":{"a":0,"k":0,"ix":6}},{"ty":0,"nm":"Blend With Original","mn":"ADBE Ramp-0007","ix":7,"v":{"a":0,"k":0,"ix":7}},{"ty":6,"nm":"","mn":"ADBE Ramp-0008","ix":8,"v":0}]}],"sw":200,"sh":200,"sc":"#00ff00","ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":1,"nm":"solid-radial","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[375,125,0],"ix":2},"a":{"a":0,"k":[100,100,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Gradient Ramp","np":10,"mn":"ADBE Ramp","ix":1,"en":1,"ef":[{"ty":3,"nm":"Start of Ramp","mn":"ADBE Ramp-0001","ix":1,"v":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[50,50],"to":[16.667,0],"ti":[-16.667,-16.667]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[150,50],"to":[16.667,16.667],"ti":[16.667,-16.667]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":150,"s":[150,150],"to":[-16.667,16.667],"ti":[16.667,16.667]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":225,"s":[50,150],"to":[-16.667,-16.667],"ti":[0,16.667]},{"t":299,"s":[50,50]}],"ix":1}},{"ty":2,"nm":"Start Color","mn":"ADBE Ramp-0002","ix":2,"v":{"a":0,"k":[1,0,0,1],"ix":2}},{"ty":3,"nm":"End of Ramp","mn":"ADBE Ramp-0003","ix":3,"v":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[150,150],"to":[-16.667,0],"ti":[16.667,16.667]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[50,150],"to":[-16.667,-16.667],"ti":[-16.667,16.667]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":150,"s":[50,50],"to":[16.667,-16.667],"ti":[-16.667,-16.667]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":225,"s":[150,50],"to":[16.667,16.667],"ti":[0,-16.667]},{"t":299,"s":[150,150]}],"ix":3}},{"ty":2,"nm":"End Color","mn":"ADBE Ramp-0004","ix":4,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[1,1,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":150,"s":[0,0,1,1]},{"t":299,"s":[1,1,0,1]}],"ix":4}},{"ty":7,"nm":"Ramp Shape","mn":"ADBE Ramp-0005","ix":5,"v":{"a":0,"k":2,"ix":5}},{"ty":0,"nm":"Ramp Scatter","mn":"ADBE Ramp-0006","ix":6,"v":{"a":0,"k":0,"ix":6}},{"ty":0,"nm":"Blend With Original","mn":"ADBE Ramp-0007","ix":7,"v":{"a":0,"k":0,"ix":7}},{"ty":6,"nm":"","mn":"ADBE Ramp-0008","ix":8,"v":0}]}],"sw":200,"sh":200,"sc":"#00ff00","ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"shapes-linear","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[75,375,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Gradient Ramp","np":10,"mn":"ADBE Ramp","ix":1,"en":1,"ef":[{"ty":3,"nm":"Start of Ramp","mn":"ADBE Ramp-0001","ix":1,"v":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[25,375],"to":[37.5,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":150,"s":[250,375],"to":[0,0],"ti":[37.5,0]},{"t":299,"s":[25,375]}],"ix":1}},{"ty":2,"nm":"Start Color","mn":"ADBE Ramp-0002","ix":2,"v":{"a":0,"k":[1,0.291544109583,0.868933796883,1],"ix":2}},{"ty":3,"nm":"End of Ramp","mn":"ADBE Ramp-0003","ix":3,"v":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[250,375],"to":[-37.5,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":150,"s":[25,375],"to":[0,0],"ti":[-37.5,0]},{"t":299,"s":[250,375]}],"ix":3}},{"ty":2,"nm":"End Color","mn":"ADBE Ramp-0004","ix":4,"v":{"a":0,"k":[0,0.996721804142,0,1],"ix":4}},{"ty":7,"nm":"Ramp Shape","mn":"ADBE Ramp-0005","ix":5,"v":{"a":0,"k":1,"ix":5}},{"ty":0,"nm":"Ramp Scatter","mn":"ADBE Ramp-0006","ix":6,"v":{"a":0,"k":0,"ix":6}},{"ty":0,"nm":"Blend With Original","mn":"ADBE Ramp-0007","ix":7,"v":{"a":0,"k":0,"ix":7}},{"ty":6,"nm":"","mn":"ADBE Ramp-0008","ix":8,"v":0}]}],"shapes":[{"ty":"rc","d":1,"s":{"a":0,"k":[100,100],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"d":1,"ty":"el","s":{"a":0,"k":[146,146],"ix":2},"p":{"a":0,"k":[89,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"shapes-radial","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[325,375,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Gradient Ramp","np":10,"mn":"ADBE Ramp","ix":1,"en":1,"ef":[{"ty":3,"nm":"Start of Ramp","mn":"ADBE Ramp-0001","ix":1,"v":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[275,375],"to":[33.333,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":150,"s":[475,375],"to":[0,0],"ti":[33.333,0]},{"t":299,"s":[275,375]}],"ix":1}},{"ty":2,"nm":"Start Color","mn":"ADBE Ramp-0002","ix":2,"v":{"a":0,"k":[1,0.291544109583,0.868933796883,1],"ix":2}},{"ty":3,"nm":"End of Ramp","mn":"ADBE Ramp-0003","ix":3,"v":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[475,375],"to":[-33.333,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":150,"s":[275,375],"to":[0,0],"ti":[-33.333,0]},{"t":299,"s":[475,375]}],"ix":3}},{"ty":2,"nm":"End Color","mn":"ADBE Ramp-0004","ix":4,"v":{"a":0,"k":[0,0.996721804142,0,1],"ix":4}},{"ty":7,"nm":"Ramp Shape","mn":"ADBE Ramp-0005","ix":5,"v":{"a":0,"k":2,"ix":5}},{"ty":0,"nm":"Ramp Scatter","mn":"ADBE Ramp-0006","ix":6,"v":{"a":0,"k":0,"ix":6}},{"ty":0,"nm":"Blend With Original","mn":"ADBE Ramp-0007","ix":7,"v":{"a":0,"k":0,"ix":7}},{"ty":6,"nm":"","mn":"ADBE Ramp-0008","ix":8,"v":0}]}],"shapes":[{"ty":"rc","d":1,"s":{"a":0,"k":[100,100],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"d":1,"ty":"el","s":{"a":0,"k":[146,146],"ix":2},"p":{"a":0,"k":[89,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":300,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-linear-wipe-effect-expected.png b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-linear-wipe-effect-expected.png
deleted file mode 100755
index 7d4441f..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-linear-wipe-effect-expected.png
+++ /dev/null
Binary files differ
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-linear-wipe-effect.json b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-linear-wipe-effect.json
deleted file mode 100755
index fef7610..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-linear-wipe-effect.json
+++ /dev/null
@@ -1 +0,0 @@
-{"v":"5.5.2","fr":60,"ip":0,"op":300,"w":500,"h":500,"nm":"linear wipe","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":1,"nm":"0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[130,70,0],"ix":2},"a":{"a":0,"k":[125,50,0],"ix":1},"s":{"a":0,"k":[80,80,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Linear Wipe","np":5,"mn":"ADBE Linear Wipe","ix":1,"en":1,"ef":[{"ty":0,"nm":"Transition Completion","mn":"ADBE Linear Wipe-0001","ix":1,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":150,"s":[100]},{"t":299,"s":[0]}],"ix":1}},{"ty":0,"nm":"Wipe Angle","mn":"ADBE Linear Wipe-0002","ix":2,"v":{"a":0,"k":90,"ix":2}},{"ty":0,"nm":"Feather","mn":"ADBE Linear Wipe-0003","ix":3,"v":{"a":0,"k":20,"ix":3}}]}],"sw":250,"sh":100,"sc":"#00ff00","ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":1,"nm":"45","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[130,190,0],"ix":2},"a":{"a":0,"k":[125,50,0],"ix":1},"s":{"a":0,"k":[80,80,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Linear Wipe","np":5,"mn":"ADBE Linear Wipe","ix":1,"en":1,"ef":[{"ty":0,"nm":"Transition Completion","mn":"ADBE Linear Wipe-0001","ix":1,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":150,"s":[100]},{"t":299,"s":[0]}],"ix":1}},{"ty":0,"nm":"Wipe Angle","mn":"ADBE Linear Wipe-0002","ix":2,"v":{"a":0,"k":45,"ix":2}},{"ty":0,"nm":"Feather","mn":"ADBE Linear Wipe-0003","ix":3,"v":{"a":0,"k":20,"ix":3}}]}],"sw":250,"sh":100,"sc":"#00ff00","ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":1,"nm":"90","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[130,310,0],"ix":2},"a":{"a":0,"k":[125,50,0],"ix":1},"s":{"a":0,"k":[80,80,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Linear Wipe","np":5,"mn":"ADBE Linear Wipe","ix":1,"en":1,"ef":[{"ty":0,"nm":"Transition Completion","mn":"ADBE Linear Wipe-0001","ix":1,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":150,"s":[100]},{"t":299,"s":[0]}],"ix":1}},{"ty":0,"nm":"Wipe Angle","mn":"ADBE Linear Wipe-0002","ix":2,"v":{"a":0,"k":0,"ix":2}},{"ty":0,"nm":"Feather","mn":"ADBE Linear Wipe-0003","ix":3,"v":{"a":0,"k":20,"ix":3}}]}],"sw":250,"sh":100,"sc":"#00ff00","ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":1,"nm":"135","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[130,430,0],"ix":2},"a":{"a":0,"k":[125,50,0],"ix":1},"s":{"a":0,"k":[80,80,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Linear Wipe","np":5,"mn":"ADBE Linear Wipe","ix":1,"en":1,"ef":[{"ty":0,"nm":"Transition Completion","mn":"ADBE Linear Wipe-0001","ix":1,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":150,"s":[100]},{"t":299,"s":[0]}],"ix":1}},{"ty":0,"nm":"Wipe Angle","mn":"ADBE Linear Wipe-0002","ix":2,"v":{"a":0,"k":-45,"ix":2}},{"ty":0,"nm":"Feather","mn":"ADBE Linear Wipe-0003","ix":3,"v":{"a":0,"k":20,"ix":3}}]}],"sw":250,"sh":100,"sc":"#00ff00","ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":1,"nm":"180","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[370,70,0],"ix":2},"a":{"a":0,"k":[125,50,0],"ix":1},"s":{"a":0,"k":[80,80,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Linear Wipe","np":5,"mn":"ADBE Linear Wipe","ix":1,"en":1,"ef":[{"ty":0,"nm":"Transition Completion","mn":"ADBE Linear Wipe-0001","ix":1,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":150,"s":[100]},{"t":299,"s":[0]}],"ix":1}},{"ty":0,"nm":"Wipe Angle","mn":"ADBE Linear Wipe-0002","ix":2,"v":{"a":0,"k":-90,"ix":2}},{"ty":0,"nm":"Feather","mn":"ADBE Linear Wipe-0003","ix":3,"v":{"a":0,"k":20,"ix":3}}]}],"sw":250,"sh":100,"sc":"#00ff00","ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":1,"nm":"225","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[370,190,0],"ix":2},"a":{"a":0,"k":[125,50,0],"ix":1},"s":{"a":0,"k":[80,80,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Linear Wipe","np":5,"mn":"ADBE Linear Wipe","ix":1,"en":1,"ef":[{"ty":0,"nm":"Transition Completion","mn":"ADBE Linear Wipe-0001","ix":1,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":150,"s":[100]},{"t":299,"s":[0]}],"ix":1}},{"ty":0,"nm":"Wipe Angle","mn":"ADBE Linear Wipe-0002","ix":2,"v":{"a":0,"k":-135,"ix":2}},{"ty":0,"nm":"Feather","mn":"ADBE Linear Wipe-0003","ix":3,"v":{"a":0,"k":20,"ix":3}}]}],"sw":250,"sh":100,"sc":"#00ff00","ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":1,"nm":"270","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[370,310,0],"ix":2},"a":{"a":0,"k":[125,50,0],"ix":1},"s":{"a":0,"k":[80,80,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Linear Wipe","np":5,"mn":"ADBE Linear Wipe","ix":1,"en":1,"ef":[{"ty":0,"nm":"Transition Completion","mn":"ADBE Linear Wipe-0001","ix":1,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":150,"s":[100]},{"t":299,"s":[0]}],"ix":1}},{"ty":0,"nm":"Wipe Angle","mn":"ADBE Linear Wipe-0002","ix":2,"v":{"a":0,"k":-180,"ix":2}},{"ty":0,"nm":"Feather","mn":"ADBE Linear Wipe-0003","ix":3,"v":{"a":0,"k":20,"ix":3}}]}],"sw":250,"sh":100,"sc":"#00ff00","ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":1,"nm":"315","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[370,430,0],"ix":2},"a":{"a":0,"k":[125,50,0],"ix":1},"s":{"a":0,"k":[80,80,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Linear Wipe","np":5,"mn":"ADBE Linear Wipe","ix":1,"en":1,"ef":[{"ty":0,"nm":"Transition Completion","mn":"ADBE Linear Wipe-0001","ix":1,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":150,"s":[100]},{"t":299,"s":[0]}],"ix":1}},{"ty":0,"nm":"Wipe Angle","mn":"ADBE Linear Wipe-0002","ix":2,"v":{"a":0,"k":-225,"ix":2}},{"ty":0,"nm":"Feather","mn":"ADBE Linear Wipe-0003","ix":3,"v":{"a":0,"k":20,"ix":3}}]}],"sw":250,"sh":100,"sc":"#00ff00","ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":1,"nm":"Black Solid 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250,250,0],"ix":2},"a":{"a":0,"k":[250,250,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"sw":500,"sh":500,"sc":"#000000","ip":0,"op":300,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-luma-matte-expected.png b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-luma-matte-expected.png
deleted file mode 100755
index ad1b24f..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-luma-matte-expected.png
+++ /dev/null
Binary files differ
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-luma-matte.json b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-luma-matte.json
deleted file mode 100755
index a8817fc..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-luma-matte.json
+++ /dev/null
@@ -1 +0,0 @@
-{"v":"5.5.5","fr":60,"ip":0,"op":300,"w":500,"h":500,"nm":"Comp 1","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 1","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250,250,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":5,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":50,"ix":6},"is":{"a":0,"k":0,"ix":8},"or":{"a":0,"k":150,"ix":7},"os":{"a":0,"k":0,"ix":9},"ix":1,"nm":"Polystar Path 1","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":75,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[200,200],"ix":2},"p":{"a":0,"k":[101,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":299,"s":[-360]}],"ix":6},"o":{"a":0,"k":75,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[200,200],"ix":2},"p":{"a":0,"k":[-100,100],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":299,"s":[360]}],"ix":6},"o":{"a":0,"k":75,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":1,"nm":"Green Solid 1","tt":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250,250,0],"ix":2},"a":{"a":0,"k":[250,250,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"sw":500,"sh":500,"sc":"#00ff00","ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":1,"nm":"Black Solid 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250,250,0],"ix":2},"a":{"a":0,"k":[250,250,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"sw":500,"sh":500,"sc":"#000000","ip":0,"op":300,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-mask-feather-expected.png b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-mask-feather-expected.png
deleted file mode 100755
index f5788d8..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-mask-feather-expected.png
+++ /dev/null
Binary files differ
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-mask-feather.json b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-mask-feather.json
deleted file mode 100755
index 3ae2337..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-mask-feather.json
+++ /dev/null
@@ -1 +0,0 @@
-{"v":"5.5.2","fr":60,"ip":0,"op":300,"w":500,"h":500,"nm":"Mask feather","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":1,"nm":"feather 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":299,"s":[360]}],"ix":10},"p":{"a":0,"k":[100,100,0],"ix":2},"a":{"a":0,"k":[75,75,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[75,0],[86.756,58.82],[146.329,51.824],[94.021,81.18],[119.084,135.676],[75,95],[30.916,135.676],[55.979,81.18],[3.671,51.824],[63.244,58.82]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"f":{"a":0,"k":[10,10],"ix":2},"nm":"Mask 1"}],"sw":150,"sh":150,"sc":"#000000","ip":0,"op":300,"st":0,"cp":false,"bm":0},{"ddd":0,"ind":2,"ty":1,"nm":"feather 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":299,"s":[360]}],"ix":10},"p":{"a":0,"k":[250,100,0],"ix":2},"a":{"a":0,"k":[75,75,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[75,0],[86.756,58.82],[146.329,51.824],[94.021,81.18],[119.084,135.676],[75,95],[30.916,135.676],[55.979,81.18],[3.671,51.824],[63.244,58.82]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"f":{"a":0,"k":[20,20],"ix":2},"nm":"Mask 1"}],"sw":150,"sh":150,"sc":"#000000","ip":0,"op":300,"st":0,"cp":false,"bm":0},{"ddd":0,"ind":3,"ty":1,"nm":"feather 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":299,"s":[360]}],"ix":10},"p":{"a":0,"k":[400,100,0],"ix":2},"a":{"a":0,"k":[75,75,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[75,0],[86.756,58.82],[146.329,51.824],[94.021,81.18],[119.084,135.676],[75,95],[30.916,135.676],[55.979,81.18],[3.671,51.824],[63.244,58.82]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"f":{"a":0,"k":[40,40],"ix":2},"nm":"Mask 1"},{"inv":false,"mode":"n","pt":{"a":0,"k":{"i":[[0,0]],"o":[[0,0]],"v":[[-58,332]],"c":false},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"f":{"a":0,"k":[0,0],"ix":2},"nm":"Mask 2"}],"sw":150,"sh":150,"sc":"#000000","ip":0,"op":300,"st":0,"cp":false,"bm":0},{"ddd":0,"ind":4,"ty":1,"nm":"feather 6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":299,"s":[360]}],"ix":10},"p":{"a":0,"k":[100,250,0],"ix":2},"a":{"a":0,"k":[75,75,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[75,0],[86.756,58.82],[146.329,51.824],[94.021,81.18],[119.084,135.676],[75,95],[30.916,135.676],[55.979,81.18],[3.671,51.824],[63.244,58.82]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"f":{"a":0,"k":[10,0],"ix":2},"nm":"Mask 1"}],"sw":150,"sh":150,"sc":"#000000","ip":0,"op":300,"st":0,"cp":false,"bm":0},{"ddd":0,"ind":5,"ty":1,"nm":"feather 5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":299,"s":[360]}],"ix":10},"p":{"a":0,"k":[250,250,0],"ix":2},"a":{"a":0,"k":[75,75,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[75,0],[86.756,58.82],[146.329,51.824],[94.021,81.18],[119.084,135.676],[75,95],[30.916,135.676],[55.979,81.18],[3.671,51.824],[63.244,58.82]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"f":{"a":0,"k":[20,0],"ix":2},"nm":"Mask 1"}],"sw":150,"sh":150,"sc":"#000000","ip":0,"op":300,"st":0,"cp":false,"bm":0},{"ddd":0,"ind":6,"ty":1,"nm":"feather 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":299,"s":[360]}],"ix":10},"p":{"a":0,"k":[400,250,0],"ix":2},"a":{"a":0,"k":[75,75,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[75,0],[86.756,58.82],[146.329,51.824],[94.021,81.18],[119.084,135.676],[75,95],[30.916,135.676],[55.979,81.18],[3.671,51.824],[63.244,58.82]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"f":{"a":0,"k":[40,0],"ix":2},"nm":"Mask 1"},{"inv":false,"mode":"n","pt":{"a":0,"k":{"i":[[0,0]],"o":[[0,0]],"v":[[-58,332]],"c":false},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"f":{"a":0,"k":[0,0],"ix":2},"nm":"Mask 2"}],"sw":150,"sh":150,"sc":"#000000","ip":0,"op":300,"st":0,"cp":false,"bm":0},{"ddd":0,"ind":7,"ty":1,"nm":"feather 9","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":299,"s":[360]}],"ix":10},"p":{"a":0,"k":[100,400,0],"ix":2},"a":{"a":0,"k":[75,75,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[75,0],[86.756,58.82],[146.329,51.824],[94.021,81.18],[119.084,135.676],[75,95],[30.916,135.676],[55.979,81.18],[3.671,51.824],[63.244,58.82]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"f":{"a":0,"k":[0,10],"ix":2},"nm":"Mask 1"}],"sw":150,"sh":150,"sc":"#000000","ip":0,"op":300,"st":0,"cp":false,"bm":0},{"ddd":0,"ind":8,"ty":1,"nm":"feather 8","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":299,"s":[360]}],"ix":10},"p":{"a":0,"k":[250,400,0],"ix":2},"a":{"a":0,"k":[75,75,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[75,0],[86.756,58.82],[146.329,51.824],[94.021,81.18],[119.084,135.676],[75,95],[30.916,135.676],[55.979,81.18],[3.671,51.824],[63.244,58.82]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"f":{"a":0,"k":[0,20],"ix":2},"nm":"Mask 1"}],"sw":150,"sh":150,"sc":"#000000","ip":0,"op":300,"st":0,"cp":false,"bm":0},{"ddd":0,"ind":9,"ty":1,"nm":"feather 7","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":299,"s":[360]}],"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[75,75,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[75,0],[86.756,58.82],[146.329,51.824],[94.021,81.18],[119.084,135.676],[75,95],[30.916,135.676],[55.979,81.18],[3.671,51.824],[63.244,58.82]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"f":{"a":0,"k":[0,40],"ix":2},"nm":"Mask 1"},{"inv":false,"mode":"n","pt":{"a":0,"k":{"i":[[0,0]],"o":[[0,0]],"v":[[-58,332]],"c":false},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"f":{"a":0,"k":[0,0],"ix":2},"nm":"Mask 2"}],"sw":150,"sh":150,"sc":"#000000","ip":0,"op":300,"st":0,"cp":false,"bm":0},{"ddd":0,"ind":10,"ty":1,"nm":"White Solid 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250,250,0],"ix":2},"a":{"a":0,"k":[250,250,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"sw":500,"sh":500,"sc":"#ffffff","ip":0,"op":300,"st":0,"cp":false,"bm":0}],"markers":[]}
\ No newline at end of file
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-matte-blendmode-expected.png b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-matte-blendmode-expected.png
deleted file mode 100755
index ac3da35..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-matte-blendmode-expected.png
+++ /dev/null
Binary files differ
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-matte-blendmode.json b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-matte-blendmode.json
deleted file mode 100755
index 431fc7a..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-matte-blendmode.json
+++ /dev/null
@@ -1 +0,0 @@
-{"v":"5.5.5","fr":60,"ip":0,"op":301,"w":500,"h":500,"nm":"matted-blendmode","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"mask","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250,250,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":6,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":50,"ix":6},"is":{"a":0,"k":0,"ix":8},"or":{"a":0,"k":162,"ix":7},"os":{"a":0,"k":0,"ix":9},"ix":1,"nm":"Polystar Path 1","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":300,"s":[120]}],"ix":6},"o":{"a":0,"k":75,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[200,200],"ix":2},"p":{"a":0,"k":[100,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":300,"s":[-360]}],"ix":6},"o":{"a":0,"k":75,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":301,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":1,"nm":"Red Solid 1","tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250,250,0],"ix":2},"a":{"a":0,"k":[250,250,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"sw":500,"sh":500,"sc":"#ff0000","ip":0,"op":301,"st":0,"bm":1},{"ddd":0,"ind":3,"ty":1,"nm":"Green Solid 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250,250,0],"ix":2},"a":{"a":0,"k":[250,250,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"sw":500,"sh":500,"sc":"#00ff00","ip":0,"op":301,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-motiontile-effect-phase-expected.png b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-motiontile-effect-phase-expected.png
deleted file mode 100755
index 0509c25..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-motiontile-effect-phase-expected.png
+++ /dev/null
Binary files differ
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-motiontile-effect-phase.json b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-motiontile-effect-phase.json
deleted file mode 100755
index b58a999..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-motiontile-effect-phase.json
+++ /dev/null
@@ -1 +0,0 @@
-{"v":"5.5.2","fr":60,"ip":0,"op":300,"w":500,"h":500,"nm":"phase","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250,250,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[98,98,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Motion Tile","np":10,"mn":"ADBE Tile","ix":1,"en":1,"ef":[{"ty":3,"nm":"Tile Center","mn":"ADBE Tile-0001","ix":1,"v":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[250,250],"to":[16.667,16.667],"ti":[-16.667,-16.667]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[350,350],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":195,"s":[350,350],"to":[-16.667,-16.667],"ti":[16.667,16.667]},{"t":299,"s":[250,250]}],"ix":1}},{"ty":0,"nm":"Tile Width","mn":"ADBE Tile-0002","ix":2,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":195,"s":[50]},{"t":299,"s":[100]}],"ix":2}},{"ty":0,"nm":"Tile Height","mn":"ADBE Tile-0003","ix":3,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":195,"s":[30]},{"t":299,"s":[100]}],"ix":3}},{"ty":0,"nm":"Output Width","mn":"ADBE Tile-0004","ix":4,"v":{"a":0,"k":100,"ix":4}},{"ty":0,"nm":"Output Height","mn":"ADBE Tile-0005","ix":5,"v":{"a":0,"k":100,"ix":5}},{"ty":7,"nm":"Mirror Edges","mn":"ADBE Tile-0006","ix":6,"v":{"a":0,"k":0,"ix":6}},{"ty":0,"nm":"Phase","mn":"ADBE Tile-0007","ix":7,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":150,"s":[360]},{"t":255,"s":[720]}],"ix":7}},{"ty":7,"nm":"Horizontal Phase Shift","mn":"ADBE Tile-0008","ix":8,"v":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":150,"s":[1],"h":1}],"ix":8}}]}],"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[50,400],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-225,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[50,400],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[225,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[400,50],"ix":2},"p":{"a":0,"k":[0,-225],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0.930851697922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[400,50],"ix":2},"p":{"a":0,"k":[0,225],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":1,"nm":"Black Solid 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250,250,0],"ix":2},"a":{"a":0,"k":[249,249,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"sw":498,"sh":498,"sc":"#000000","ip":0,"op":300,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-shift-channels-effect-expected.png b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-shift-channels-effect-expected.png
deleted file mode 100755
index d60f105..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-shift-channels-effect-expected.png
+++ /dev/null
Binary files differ
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-shift-channels-effect.json b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-shift-channels-effect.json
deleted file mode 100755
index a762f85..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-shift-channels-effect.json
+++ /dev/null
@@ -1,1254 +0,0 @@
-{
- "assets": [
- {
- "id": "comp_0",
- "layers": [
- {
- "ao": 0,
- "bm": 0,
- "ddd": 0,
- "ind": 1,
- "ip": 0,
- "ks": {
- "a": {
- "a": 0,
- "ix": 1,
- "k": [
- 0,
- 0,
- 0
- ]
- },
- "o": {
- "a": 0,
- "ix": 11,
- "k": 100
- },
- "p": {
- "a": 0,
- "ix": 2,
- "k": [
- 125,
- 125,
- 0
- ]
- },
- "r": {
- "a": 0,
- "ix": 10,
- "k": 0
- },
- "s": {
- "a": 0,
- "ix": 6,
- "k": [
- 50,
- 50,
- 100
- ]
- }
- },
- "nm": "Shape Layer 1",
- "op": 302.5,
- "shapes": [
- {
- "bm": 0,
- "cix": 2,
- "hd": false,
- "it": [
- {
- "d": 1,
- "hd": false,
- "ir": {
- "a": 0,
- "ix": 6,
- "k": 35
- },
- "is": {
- "a": 0,
- "ix": 8,
- "k": 0
- },
- "ix": 1,
- "mn": "ADBE Vector Shape - Star",
- "nm": "Polystar Path 1",
- "or": {
- "a": 0,
- "ix": 7,
- "k": 100
- },
- "os": {
- "a": 0,
- "ix": 9,
- "k": 0
- },
- "p": {
- "a": 0,
- "ix": 4,
- "k": [
- 0,
- 0
- ]
- },
- "pt": {
- "a": 0,
- "ix": 3,
- "k": 9
- },
- "r": {
- "a": 0,
- "ix": 5,
- "k": 0
- },
- "sy": 1,
- "ty": "sr"
- },
- {
- "a": {
- "a": 0,
- "ix": 8,
- "k": 0
- },
- "bm": 0,
- "e": {
- "a": 0,
- "ix": 6,
- "k": [
- 100,
- 0
- ]
- },
- "g": {
- "k": {
- "a": 0,
- "ix": 9,
- "k": [
- 0,
- 0,
- 0.5,
- 1,
- 1,
- 1,
- 0,
- 0.5
- ]
- },
- "p": 2
- },
- "h": {
- "a": 0,
- "ix": 7,
- "k": 0
- },
- "hd": false,
- "mn": "ADBE Vector Graphic - G-Fill",
- "nm": "Gradient Fill 1",
- "o": {
- "a": 0,
- "ix": 10,
- "k": 100
- },
- "r": 1,
- "s": {
- "a": 0,
- "ix": 5,
- "k": [
- 0,
- 0
- ]
- },
- "t": 2,
- "ty": "gf"
- },
- {
- "a": {
- "a": 0,
- "ix": 1,
- "k": [
- 0,
- 0
- ]
- },
- "nm": "Transform",
- "o": {
- "a": 0,
- "ix": 7,
- "k": 75
- },
- "p": {
- "a": 0,
- "ix": 2,
- "k": [
- 0,
- 0
- ]
- },
- "r": {
- "a": 1,
- "ix": 6,
- "k": [
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "s": [
- 0
- ],
- "t": 0
- },
- {
- "s": [
- 80
- ],
- "t": 300
- }
- ]
- },
- "s": {
- "a": 0,
- "ix": 3,
- "k": [
- 100,
- 100
- ]
- },
- "sa": {
- "a": 0,
- "ix": 5,
- "k": 0
- },
- "sk": {
- "a": 0,
- "ix": 4,
- "k": 0
- },
- "ty": "tr"
- }
- ],
- "ix": 1,
- "mn": "ADBE Vector Group",
- "nm": "Group 1",
- "np": 2,
- "ty": "gr"
- },
- {
- "bm": 0,
- "cix": 2,
- "hd": false,
- "it": [
- {
- "d": 1,
- "hd": false,
- "mn": "ADBE Vector Shape - Ellipse",
- "nm": "Ellipse Path 1",
- "p": {
- "a": 0,
- "ix": 3,
- "k": [
- -85,
- 0
- ]
- },
- "s": {
- "a": 0,
- "ix": 2,
- "k": [
- 150,
- 150
- ]
- },
- "ty": "el"
- },
- {
- "a": {
- "a": 0,
- "ix": 8,
- "k": 0
- },
- "bm": 0,
- "e": {
- "a": 0,
- "ix": 6,
- "k": [
- -10,
- 0
- ]
- },
- "g": {
- "k": {
- "a": 0,
- "ix": 9,
- "k": [
- 0,
- 0.5,
- 1,
- 0,
- 1,
- 0,
- 0.5,
- 1
- ]
- },
- "p": 2
- },
- "h": {
- "a": 0,
- "ix": 7,
- "k": 0
- },
- "hd": false,
- "mn": "ADBE Vector Graphic - G-Fill",
- "nm": "Gradient Fill 1",
- "o": {
- "a": 0,
- "ix": 10,
- "k": 100
- },
- "r": 1,
- "s": {
- "a": 0,
- "ix": 5,
- "k": [
- -85,
- 0
- ]
- },
- "t": 2,
- "ty": "gf"
- },
- {
- "a": {
- "a": 0,
- "ix": 1,
- "k": [
- 0,
- 0
- ]
- },
- "nm": "Transform",
- "o": {
- "a": 0,
- "ix": 7,
- "k": 75
- },
- "p": {
- "a": 0,
- "ix": 2,
- "k": [
- 0,
- 0
- ]
- },
- "r": {
- "a": 1,
- "ix": 6,
- "k": [
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "s": [
- 0
- ],
- "t": 0
- },
- {
- "s": [
- 360
- ],
- "t": 300
- }
- ]
- },
- "s": {
- "a": 0,
- "ix": 3,
- "k": [
- 100,
- 100
- ]
- },
- "sa": {
- "a": 0,
- "ix": 5,
- "k": 0
- },
- "sk": {
- "a": 0,
- "ix": 4,
- "k": 0
- },
- "ty": "tr"
- }
- ],
- "ix": 2,
- "mn": "ADBE Vector Group",
- "nm": "Group 2",
- "np": 2,
- "ty": "gr"
- },
- {
- "bm": 0,
- "cix": 2,
- "hd": false,
- "it": [
- {
- "d": 1,
- "hd": false,
- "mn": "ADBE Vector Shape - Rect",
- "nm": "Rectangle Path 1",
- "p": {
- "a": 0,
- "ix": 3,
- "k": [
- 75,
- 75
- ]
- },
- "r": {
- "a": 0,
- "ix": 4,
- "k": 0
- },
- "s": {
- "a": 0,
- "ix": 2,
- "k": [
- 150,
- 150
- ]
- },
- "ty": "rc"
- },
- {
- "a": {
- "a": 0,
- "ix": 8,
- "k": 0
- },
- "bm": 0,
- "e": {
- "a": 0,
- "ix": 6,
- "k": [
- 160,
- 75
- ]
- },
- "g": {
- "k": {
- "a": 0,
- "ix": 9,
- "k": [
- 0,
- 0.5,
- 0,
- 1,
- 1,
- 1,
- 0.5,
- 0
- ]
- },
- "p": 2
- },
- "h": {
- "a": 0,
- "ix": 7,
- "k": 0
- },
- "hd": false,
- "mn": "ADBE Vector Graphic - G-Fill",
- "nm": "Gradient Fill 1",
- "o": {
- "a": 0,
- "ix": 10,
- "k": 100
- },
- "r": 1,
- "s": {
- "a": 0,
- "ix": 5,
- "k": [
- 75,
- 75
- ]
- },
- "t": 2,
- "ty": "gf"
- },
- {
- "a": {
- "a": 0,
- "ix": 1,
- "k": [
- 0,
- 0
- ]
- },
- "nm": "Transform",
- "o": {
- "a": 0,
- "ix": 7,
- "k": 75
- },
- "p": {
- "a": 0,
- "ix": 2,
- "k": [
- 0,
- 0
- ]
- },
- "r": {
- "a": 1,
- "ix": 6,
- "k": [
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "s": [
- 0
- ],
- "t": 0
- },
- {
- "s": [
- -360
- ],
- "t": 300
- }
- ]
- },
- "s": {
- "a": 0,
- "ix": 3,
- "k": [
- 100,
- 100
- ]
- },
- "sa": {
- "a": 0,
- "ix": 5,
- "k": 0
- },
- "sk": {
- "a": 0,
- "ix": 4,
- "k": 0
- },
- "ty": "tr"
- }
- ],
- "ix": 3,
- "mn": "ADBE Vector Group",
- "nm": "Group 3",
- "np": 2,
- "ty": "gr"
- }
- ],
- "sr": 1,
- "st": 0,
- "ty": 4
- }
- ]
- }
- ],
- "ddd": 0,
- "fr": 60,
- "h": 500,
- "ip": 0,
- "layers": [
- {
- "ao": 0,
- "bm": 0,
- "ddd": 0,
- "h": 250,
- "ind": 1,
- "ip": 0,
- "ks": {
- "a": {
- "a": 0,
- "ix": 1,
- "k": [
- 125,
- 125,
- 0
- ]
- },
- "o": {
- "a": 0,
- "ix": 11,
- "k": 100
- },
- "p": {
- "a": 0,
- "ix": 2,
- "k": [
- 125,
- 125,
- 0
- ]
- },
- "r": {
- "a": 0,
- "ix": 10,
- "k": 0
- },
- "s": {
- "a": 0,
- "ix": 6,
- "k": [
- 100,
- 100,
- 100
- ]
- }
- },
- "nm": "baseline",
- "op": 301,
- "refId": "comp_0",
- "sr": 1,
- "st": 0,
- "ty": 0,
- "w": 250
- },
- {
- "ao": 0,
- "bm": 0,
- "ddd": 0,
- "ef": [
- {
- "ef": [
- {
- "ix": 1,
- "mn": "ADBE Shift Channels-0001",
- "nm": "Take Alpha From",
- "ty": 7,
- "v": {
- "a": 0,
- "ix": 1,
- "k": 5
- }
- },
- {
- "ix": 2,
- "mn": "ADBE Shift Channels-0002",
- "nm": "Take Red From",
- "ty": 7,
- "v": {
- "a": 0,
- "ix": 2,
- "k": 3
- }
- },
- {
- "ix": 3,
- "mn": "ADBE Shift Channels-0003",
- "nm": "Take Green From",
- "ty": 7,
- "v": {
- "a": 0,
- "ix": 3,
- "k": 4
- }
- },
- {
- "ix": 4,
- "mn": "ADBE Shift Channels-0004",
- "nm": "Take Blue From",
- "ty": 7,
- "v": {
- "a": 0,
- "ix": 4,
- "k": 2
- }
- }
- ],
- "en": 1,
- "ix": 1,
- "mn": "ADBE Shift Channels",
- "nm": "Shift Channels",
- "np": 6,
- "ty": 5
- }
- ],
- "h": 250,
- "ind": 2,
- "ip": 0,
- "ks": {
- "a": {
- "a": 0,
- "ix": 1,
- "k": [
- 125,
- 125,
- 0
- ]
- },
- "o": {
- "a": 0,
- "ix": 11,
- "k": 100
- },
- "p": {
- "a": 0,
- "ix": 2,
- "k": [
- 125,
- 375,
- 0
- ]
- },
- "r": {
- "a": 0,
- "ix": 10,
- "k": 0
- },
- "s": {
- "a": 0,
- "ix": 6,
- "k": [
- 100,
- 100,
- 100
- ]
- }
- },
- "nm": "shift1",
- "op": 301,
- "refId": "comp_0",
- "sr": 1,
- "st": 0,
- "ty": 0,
- "w": 250
- },
- {
- "ao": 0,
- "bm": 0,
- "ddd": 0,
- "ef": [
- {
- "ef": [
- {
- "ix": 1,
- "mn": "ADBE Shift Channels-0001",
- "nm": "Take Alpha From",
- "ty": 7,
- "v": {
- "a": 0,
- "ix": 1,
- "k": 2
- }
- },
- {
- "ix": 2,
- "mn": "ADBE Shift Channels-0002",
- "nm": "Take Red From",
- "ty": 7,
- "v": {
- "a": 0,
- "ix": 2,
- "k": 5
- }
- },
- {
- "ix": 3,
- "mn": "ADBE Shift Channels-0003",
- "nm": "Take Green From",
- "ty": 7,
- "v": {
- "a": 0,
- "ix": 3,
- "k": 2
- }
- },
- {
- "ix": 4,
- "mn": "ADBE Shift Channels-0004",
- "nm": "Take Blue From",
- "ty": 7,
- "v": {
- "a": 0,
- "ix": 4,
- "k": 3
- }
- }
- ],
- "en": 1,
- "ix": 1,
- "mn": "ADBE Shift Channels",
- "nm": "Shift Channels",
- "np": 6,
- "ty": 5
- }
- ],
- "h": 250,
- "ind": 3,
- "ip": 0,
- "ks": {
- "a": {
- "a": 0,
- "ix": 1,
- "k": [
- 125,
- 125,
- 0
- ]
- },
- "o": {
- "a": 0,
- "ix": 11,
- "k": 100
- },
- "p": {
- "a": 0,
- "ix": 2,
- "k": [
- 375,
- 125,
- 0
- ]
- },
- "r": {
- "a": 0,
- "ix": 10,
- "k": 0
- },
- "s": {
- "a": 0,
- "ix": 6,
- "k": [
- 100,
- 100,
- 100
- ]
- }
- },
- "nm": "shift2",
- "op": 301,
- "refId": "comp_0",
- "sr": 1,
- "st": 0,
- "ty": 0,
- "w": 250
- },
- {
- "ao": 0,
- "bm": 0,
- "ddd": 0,
- "ef": [
- {
- "ef": [
- {
- "ix": 1,
- "mn": "ADBE Shift Channels-0001",
- "nm": "Take Alpha From",
- "ty": 7,
- "v": {
- "a": 1,
- "ix": 1,
- "k": [
- {
- "h": 1,
- "s": [
- 1
- ],
- "t": 0
- },
- {
- "h": 1,
- "s": [
- 2
- ],
- "t": 30
- },
- {
- "h": 1,
- "s": [
- 3
- ],
- "t": 75
- },
- {
- "h": 1,
- "s": [
- 4
- ],
- "t": 120
- },
- {
- "h": 1,
- "s": [
- 5
- ],
- "t": 165
- },
- {
- "h": 1,
- "s": [
- 9
- ],
- "t": 210
- },
- {
- "h": 1,
- "s": [
- 9
- ],
- "t": 255
- },
- {
- "h": 1,
- "s": [
- 9
- ],
- "t": 285
- }
- ]
- }
- },
- {
- "ix": 2,
- "mn": "ADBE Shift Channels-0002",
- "nm": "Take Red From",
- "ty": 7,
- "v": {
- "a": 1,
- "ix": 2,
- "k": [
- {
- "h": 1,
- "s": [
- 2
- ],
- "t": 0
- },
- {
- "h": 1,
- "s": [
- 3
- ],
- "t": 30
- },
- {
- "h": 1,
- "s": [
- 4
- ],
- "t": 75
- },
- {
- "h": 1,
- "s": [
- 5
- ],
- "t": 120
- },
- {
- "h": 1,
- "s": [
- 9
- ],
- "t": 165
- },
- {
- "h": 1,
- "s": [
- 10
- ],
- "t": 210
- },
- {
- "h": 1,
- "s": [
- 1
- ],
- "t": 255
- }
- ]
- }
- },
- {
- "ix": 3,
- "mn": "ADBE Shift Channels-0003",
- "nm": "Take Green From",
- "ty": 7,
- "v": {
- "a": 1,
- "ix": 3,
- "k": [
- {
- "h": 1,
- "s": [
- 3
- ],
- "t": 0
- },
- {
- "h": 1,
- "s": [
- 4
- ],
- "t": 30
- },
- {
- "h": 1,
- "s": [
- 5
- ],
- "t": 75
- },
- {
- "h": 1,
- "s": [
- 9
- ],
- "t": 120
- },
- {
- "h": 1,
- "s": [
- 10
- ],
- "t": 165
- },
- {
- "h": 1,
- "s": [
- 1
- ],
- "t": 210
- },
- {
- "h": 1,
- "s": [
- 2
- ],
- "t": 255
- }
- ]
- }
- },
- {
- "ix": 4,
- "mn": "ADBE Shift Channels-0004",
- "nm": "Take Blue From",
- "ty": 7,
- "v": {
- "a": 1,
- "ix": 4,
- "k": [
- {
- "h": 1,
- "s": [
- 4
- ],
- "t": 0
- },
- {
- "h": 1,
- "s": [
- 5
- ],
- "t": 30
- },
- {
- "h": 1,
- "s": [
- 9
- ],
- "t": 75
- },
- {
- "h": 1,
- "s": [
- 10
- ],
- "t": 120
- },
- {
- "h": 1,
- "s": [
- 1
- ],
- "t": 165
- },
- {
- "h": 1,
- "s": [
- 2
- ],
- "t": 210
- },
- {
- "h": 1,
- "s": [
- 3
- ],
- "t": 255
- }
- ]
- }
- }
- ],
- "en": 1,
- "ix": 1,
- "mn": "ADBE Shift Channels",
- "nm": "Shift Channels",
- "np": 6,
- "ty": 5
- }
- ],
- "h": 250,
- "ind": 4,
- "ip": 0,
- "ks": {
- "a": {
- "a": 0,
- "ix": 1,
- "k": [
- 125,
- 125,
- 0
- ]
- },
- "o": {
- "a": 0,
- "ix": 11,
- "k": 100
- },
- "p": {
- "a": 0,
- "ix": 2,
- "k": [
- 375,
- 375,
- 0
- ]
- },
- "r": {
- "a": 0,
- "ix": 10,
- "k": 0
- },
- "s": {
- "a": 0,
- "ix": 6,
- "k": [
- 100,
- 100,
- 100
- ]
- }
- },
- "nm": "shift3",
- "op": 301,
- "refId": "comp_0",
- "sr": 1,
- "st": 0,
- "ty": 0,
- "w": 250
- },
- {
- "ao": 0,
- "bm": 0,
- "ddd": 0,
- "ind": 5,
- "ip": 0,
- "ks": {
- "a": {
- "a": 0,
- "ix": 1,
- "k": [
- 250,
- 250,
- 0
- ]
- },
- "o": {
- "a": 0,
- "ix": 11,
- "k": 100
- },
- "p": {
- "a": 0,
- "ix": 2,
- "k": [
- 250,
- 250,
- 0
- ]
- },
- "r": {
- "a": 0,
- "ix": 10,
- "k": 0
- },
- "s": {
- "a": 0,
- "ix": 6,
- "k": [
- 100,
- 100,
- 100
- ]
- }
- },
- "nm": "Pale Cyan Solid 1",
- "op": 302.5,
- "sc": "#e1e8e8",
- "sh": 500,
- "sr": 1,
- "st": 0,
- "sw": 500,
- "ty": 1
- }
- ],
- "markers": [],
- "nm": "shift channel",
- "op": 301,
- "v": "5.5.5",
- "w": 500
-}
\ No newline at end of file
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-tritone-effect-expected.png b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-tritone-effect-expected.png
deleted file mode 100755
index 8a70c29..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-tritone-effect-expected.png
+++ /dev/null
Binary files differ
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-tritone-effect.json b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-tritone-effect.json
deleted file mode 100755
index aa51c38..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-tritone-effect.json
+++ /dev/null
@@ -1 +0,0 @@
-{"v":"5.5.10","fr":60,"ip":0,"op":601,"w":500,"h":500,"nm":"tritone","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250,250,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[200,200],"ix":2},"p":{"a":0,"k":[100,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0,1,0.250980407,1],"ix":4},"o":{"a":0,"k":75,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":600,"s":[360]}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":5,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":50,"ix":6},"is":{"a":0,"k":0,"ix":8},"or":{"a":0,"k":162,"ix":7},"os":{"a":0,"k":0,"ix":9},"ix":1,"nm":"Polystar Path 1","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.250980407,0,1],"ix":4},"o":{"a":0,"k":75,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":600,"s":[720]}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[175,175],"ix":2},"p":{"a":0,"k":[-90,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.250980407,0,1,1],"ix":4},"o":{"a":0,"k":75,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":600,"s":[-360]}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":601,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"precomp","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250,250,0],"ix":2},"a":{"a":0,"k":[250,250,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ef":[{"ty":23,"nm":"Tritone","np":6,"mn":"ADBE Tritone","ix":1,"en":1,"ef":[{"ty":2,"nm":"Highlights","mn":"ADBE Tritone-0001","ix":1,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[1,0.988710165024,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":300,"s":[0.50727635622,0,1,1]},{"t":600,"s":[1,1,1,0]}],"ix":1}},{"ty":2,"nm":"Midtones","mn":"ADBE Tritone-0002","ix":2,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[1,0,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":300,"s":[0,0,0,1]},{"t":600,"s":[1,0,0,1]}],"ix":2}},{"ty":2,"nm":"Shadows","mn":"ADBE Tritone-0003","ix":3,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0,1,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":300,"s":[0,0,0.535355389118,1]},{"t":600,"s":[0,1,0,1]}],"ix":3}},{"ty":0,"nm":"Blend With Original","mn":"ADBE Tritone-0004","ix":4,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":150,"s":[5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":300,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":450,"s":[0.5]},{"t":600,"s":[0]}],"ix":4}}]}],"w":500,"h":500,"ip":0,"op":601,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":1,"nm":"White Solid 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250,250,0],"ix":2},"a":{"a":0,"k":[250,250,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"sw":500,"sh":500,"sc":"#ffffff","ip":0,"op":601,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-venetianblinds-effect-expected.png b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-venetianblinds-effect-expected.png
deleted file mode 100755
index 69f4af6..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-venetianblinds-effect-expected.png
+++ /dev/null
Binary files differ
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-venetianblinds-effect.json b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-venetianblinds-effect.json
deleted file mode 100755
index a161a5c..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-venetianblinds-effect.json
+++ /dev/null
@@ -1 +0,0 @@
-{"v":"5.5.2","fr":60,"ip":0,"op":300,"w":500,"h":500,"nm":"blinds","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":1,"nm":"Green Solid 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[130,130,0],"ix":2},"a":{"a":0,"k":[125,125,0],"ix":1},"s":{"a":0,"k":[80,80,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Venetian Blinds","np":6,"mn":"ADBE Venetian Blinds","ix":1,"en":1,"ef":[{"ty":0,"nm":"Transition Completion","mn":"ADBE Venetian Blinds-0001","ix":1,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":150,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":165,"s":[100]},{"t":299,"s":[0]}],"ix":1}},{"ty":0,"nm":"Direction","mn":"ADBE Venetian Blinds-0002","ix":2,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":299,"s":[360]}],"ix":2}},{"ty":0,"nm":"Width","mn":"ADBE Venetian Blinds-0003","ix":3,"v":{"a":0,"k":50,"ix":3}},{"ty":0,"nm":"Feather","mn":"ADBE Venetian Blinds-0004","ix":4,"v":{"a":0,"k":0,"ix":4}}]}],"sw":250,"sh":250,"sc":"#00ff00","ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":1,"nm":"Green Solid 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[130,370,0],"ix":2},"a":{"a":0,"k":[125,125,0],"ix":1},"s":{"a":0,"k":[80,80,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Venetian Blinds","np":6,"mn":"ADBE Venetian Blinds","ix":1,"en":1,"ef":[{"ty":0,"nm":"Transition Completion","mn":"ADBE Venetian Blinds-0001","ix":1,"v":{"a":0,"k":75,"ix":1}},{"ty":0,"nm":"Direction","mn":"ADBE Venetian Blinds-0002","ix":2,"v":{"a":0,"k":45,"ix":2}},{"ty":0,"nm":"Width","mn":"ADBE Venetian Blinds-0003","ix":3,"v":{"a":0,"k":100,"ix":3}},{"ty":0,"nm":"Feather","mn":"ADBE Venetian Blinds-0004","ix":4,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":150,"s":[150]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":165,"s":[150]},{"t":299,"s":[0]}],"ix":4}}]}],"sw":250,"sh":250,"sc":"#00ff00","ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[370,130,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[80,80,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Venetian Blinds","np":6,"mn":"ADBE Venetian Blinds","ix":1,"en":1,"ef":[{"ty":0,"nm":"Transition Completion","mn":"ADBE Venetian Blinds-0001","ix":1,"v":{"a":0,"k":50,"ix":1}},{"ty":0,"nm":"Direction","mn":"ADBE Venetian Blinds-0002","ix":2,"v":{"a":0,"k":0,"ix":2}},{"ty":0,"nm":"Width","mn":"ADBE Venetian Blinds-0003","ix":3,"v":{"a":0,"k":100,"ix":3}},{"ty":0,"nm":"Feather","mn":"ADBE Venetian Blinds-0004","ix":4,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":150,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":165,"s":[100]},{"t":299,"s":[0]}],"ix":4}}]}],"shapes":[{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":5,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":33,"ix":6},"is":{"a":0,"k":0,"ix":8},"or":{"a":0,"k":100,"ix":7},"os":{"a":0,"k":0,"ix":9},"ix":1,"nm":"Polystar Path 1","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"fl","c":{"a":0,"k":[0.314644604921,0.276639103889,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[250,250],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[370,370,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[80,80,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Venetian Blinds","np":6,"mn":"ADBE Venetian Blinds","ix":1,"en":1,"ef":[{"ty":0,"nm":"Transition Completion","mn":"ADBE Venetian Blinds-0001","ix":1,"v":{"a":0,"k":29,"ix":1}},{"ty":0,"nm":"Direction","mn":"ADBE Venetian Blinds-0002","ix":2,"v":{"a":0,"k":0,"ix":2}},{"ty":0,"nm":"Width","mn":"ADBE Venetian Blinds-0003","ix":3,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":150,"s":[250]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":165,"s":[250]},{"t":299,"s":[1]}],"ix":3}},{"ty":0,"nm":"Feather","mn":"ADBE Venetian Blinds-0004","ix":4,"v":{"a":0,"k":5,"ix":4}}]}],"shapes":[{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":5,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":33,"ix":6},"is":{"a":0,"k":0,"ix":8},"or":{"a":0,"k":100,"ix":7},"os":{"a":0,"k":0,"ix":9},"ix":1,"nm":"Polystar Path 1","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"fl","c":{"a":0,"k":[0.314644604921,0.276639103889,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[250,250],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":1,"nm":"Black Solid 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250,250,0],"ix":2},"a":{"a":0,"k":[250,250,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"sw":500,"sh":500,"sc":"#000000","ip":0,"op":300,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/white_material_wave_loading-expected.png b/cobalt/renderer/rasterizer/testdata/lottie_coverage/white_material_wave_loading-expected.png
deleted file mode 100755
index 6685b37..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/white_material_wave_loading-expected.png
+++ /dev/null
Binary files differ
diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/white_material_wave_loading.json b/cobalt/renderer/rasterizer/testdata/lottie_coverage/white_material_wave_loading.json
deleted file mode 100755
index cafcccf..0000000
--- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/white_material_wave_loading.json
+++ /dev/null
@@ -1 +0,0 @@
-{"v":"4.6.8","fr":29.9700012207031,"ip":0,"op":40.0000016292334,"w":256,"h":256,"nm":"Comp 1","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 3","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":20,"s":[208.6,127.969,0],"e":[208.6,88,0],"to":[0,-6.66145849227905,0],"ti":[0,-0.00520833348855,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":30,"s":[208.6,88,0],"e":[208.6,128,0],"to":[0,0.00520833348855,0],"ti":[0,-6.66666650772095,0]},{"t":40.0000016292334}]},"a":{"a":0,"k":[-70,-0.5,0]},"s":{"a":0,"k":[75,75,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[33.75,34.5]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":0,"k":[0.9843137,0.5490196,0,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-70.125,-0.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group"}],"ip":0,"op":300.00001221925,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 2","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":15,"s":[168.6,128,0],"e":[168.6,88,0],"to":[0,-6.66666650772095,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":25,"s":[168.6,88,0],"e":[168.6,128,0],"to":[0,0,0],"ti":[0,-6.66666650772095,0]},{"t":35.0000014255792}]},"a":{"a":0,"k":[-70,-0.5,0]},"s":{"a":0,"k":[75,75,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[33.75,34.5]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":0,"k":[0.9921569,0.8470588,0.2078431,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-70.125,-0.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group"}],"ip":0,"op":300.00001221925,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 1","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":10,"s":[128.594,127.969,0],"e":[128.594,88,0],"to":[0,-6.66145849227905,0],"ti":[0,-0.00520833348855,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":20,"s":[128.594,88,0],"e":[128.594,128,0],"to":[0,0.00520833348855,0],"ti":[0,-6.66666650772095,0]},{"t":30.0000012219251}]},"a":{"a":0,"k":[-70,-0.5,0]},"s":{"a":0,"k":[75,75,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[33.75,34.5]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":0,"k":[0.2627451,0.627451,0.2784314,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-70.125,-0.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group"}],"ip":0,"op":300.00001221925,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":4,"ty":4,"nm":"Shape Layer 4","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":5,"s":[88.6,127.969,0],"e":[88.6,88,0],"to":[0,-6.66145849227905,0],"ti":[0,-0.00520833348855,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":15,"s":[88.6,88,0],"e":[88.6,128,0],"to":[0,0.00520833348855,0],"ti":[0,-6.66666650772095,0]},{"t":25.0000010182709}]},"a":{"a":0,"k":[-70,-0.5,0]},"s":{"a":0,"k":[75,75,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[33.75,34.5]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":0,"k":[0.1176471,0.5333334,0.8980392,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-70.125,-0.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group"}],"ip":0,"op":300.00001221925,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":5,"ty":4,"nm":"Shape Layer 5","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":0,"s":[48.6,127.969,0],"e":[48.6,88,0],"to":[0,-6.66145849227905,0],"ti":[0,-0.00520833348855,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":10,"s":[48.6,88,0],"e":[48.6,128,0],"to":[0,0.00520833348855,0],"ti":[0,-6.66666650772095,0]},{"t":20.0000008146167}]},"a":{"a":0,"k":[-70,-0.5,0]},"s":{"a":0,"k":[75,75,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[33.75,34.5]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":0,"k":[0.8980392,0.2235294,0.2078431,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-70.125,-0.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group"}],"ip":0,"op":300.00001221925,"st":0,"bm":0,"sr":1}]}
\ No newline at end of file
diff --git a/cobalt/site/docs/gen/starboard/build/doc/gn_migrate_stub_to_platform.md b/cobalt/site/docs/gen/starboard/build/doc/gn_migrate_stub_to_platform.md
index f717d32..12c9356 100644
--- a/cobalt/site/docs/gen/starboard/build/doc/gn_migrate_stub_to_platform.md
+++ b/cobalt/site/docs/gen/starboard/build/doc/gn_migrate_stub_to_platform.md
@@ -17,14 +17,14 @@
Here are the steps to do your migration:
1. [Copy stub files over to your platform and build them](#copy-stub-files-over-to-your-platform-and-build-them).
-2. [Replace stub toolchain with your platform's toolchain](#replace-stub-toolchain-with-your-platforms-toolchain).
-3. [Replace stub configuration with your platform's configuration](#replace-stub-configuration-with-your-platforms-configuration).
-4. [Replace stubbed starboard_platform target sources with your platform's
- sources](#replace-stubbed-starboardplatform-sources-with-your-platforms-sources).
+2. [Replace stub toolchain with toolchain for your platform](#replace-stub-toolchain-with-toolchain-for-your-platform).
+3. [Replace stub configuration with configuration for your platform](#replace-stub-configuration-with-configuration-for-your-platform).
+4. [Replace stubbed starboard_platform sources with sources for your platform](#replace-stubbed-starboard_platform-sources-with-sources-for-your-platform).
-After each step, you should be able to build the starboard_platform target.
-For example, you would build raspi2 starboard_platform target with the following
+After each step, you should be able to build the starboard_platform target. For
+example, you would build raspi2 starboard_platform target with the following
commands:
+
```
$gn gen out/raspi-2gn_devel --args='target_platform="raspi-2" build_type="devel"'
$ninja -C out/raspi-2gn_devel/ starboard
@@ -47,41 +47,43 @@
* starboard/stub/toolchain/BUILD.gn >
starboard/YOUR_PLATFORM/toolchain/BUILD.gn
2. Add your platform path to starboard/build/platforms.gni as referenced
- [here](../migrating_gyp_to_gn.md#adding-your-platform-to-starboard)
+ [here](./migrating_gyp_to_gn.md#adding-your-platform-to-starboard)
3. Resolve any errors which come up for missing/incorrect file paths. Then, you
should be able to build your platform target with the stubbed out files
suggested in the above section.
-### Replace Stub Toolchain with Your Platform's Toolchain
+### Replace Stub Toolchain with Toolchain for Your Platform
-Follow instructions [here](../migrating_gyp_to_gn.md#migrating-a-toolchain) for
+Follow instructions [here](./migrating_gyp_to_gn.md#migrating-a-toolchain) for
migrating the toolchain. Resolve errors and build the starboard_platform target
with the stubbed files.
-### Replace Stub Configuration with Your Platform's Configuration
+### Replace Stub Configuration with Configuration for Your Platform
This involves migrating the compiler flags and build variables as referenced
-[here](../migrating_gyp_to_gn.md#migrating-a-platform).
+[here](./migrating_gyp_to_gn.md#migrating-a-platform).
> **Highly recommended** \
-> It’s good to turn off the `treat_warnings_as_errors flag` until you can compile
-> the starboard_platform target with the platform files.
-> If this flag is not disabled you might run into a lot of
-> warnings turned errors and it might take time to solve all those errors.
-> Meanwhile you won't be in a buildable state which might make it uncertain as to
-> how much progress you are actually making.
-> For disabling the flag you can pass that as an argument to gn.
-> Here's an example for disabling the flag for raspi2:
+> It’s good to turn off the `treat_warnings_as_errors flag` until you can
+> compile the starboard_platform target with the platform files. If this flag is
+> not disabled you might run into a lot of warnings turned errors and it might
+> take time to solve all those errors. Meanwhile you won't be in a buildable
+> state which might make it uncertain as to how much progress you are actually
+> making. For disabling the flag you can pass that as an argument to gn. Here's
+> an example for disabling the flag for raspi2:
+>
> ```
-> $gn gen out/raspi-2gn_devel --args='target_platform="raspi-2" build_type="devel" treat_warnings_as_errors=false'
+> $gn gen out/raspi-2gn_devel
+> --args='target_platform="raspi-2" build_type="devel"
+> treat_warnings_as_errors=false'
> ```
Resolve errors and build the starboard_platform target with the stubbed files.
-### Replace Stubbed starboard_platform Sources with Your Platform's Sources
+### Replace Stubbed starboard_platform Sources with Sources for Your Platform
This involves adding files for the starboard_platform target as suggested
-[here](../migrating_gyp_to_gn.md#migrating-a-platform).
+[here](./migrating_gyp_to_gn.md#migrating-a-platform).
While building any target, follow the recommendation above of building the
target with `treat_warnings_as_errors=false`.
@@ -118,15 +120,16 @@
* Are the compiler flags for this file the same as in GYP ?
> To compare flags for GYP vs GN refer
- > [section](../migrating_gyp_to_gn.md#validating-a-target). To check if
+ > [section](./migrating_gyp_to_gn.md#validating-a-target). To check if
> the variables/flags you are compiling have changed since GYP, refer
- > [page](../migration_changes.md).
+ > [page](./migration_changes.md).
* Have you passed in the default arguments for your platform correctly?
> Default variables such as `target_cpu`, `target_os` and others can be
> overridden by passing arguments to gn while building. Here's an
> example of passing the default argument `target_cpu` for raspi2:
+ >
> ```
> $gn gen out/raspi-2gn_devel --args='target_platform="raspi-2" build_type="devel" target_cpu="arm"'
> ```
diff --git a/cobalt/site/docs/gen/starboard/build/doc/migrating_gyp_to_gn.md b/cobalt/site/docs/gen/starboard/build/doc/migrating_gyp_to_gn.md
index 07b4968..e4b9c0a 100644
--- a/cobalt/site/docs/gen/starboard/build/doc/migrating_gyp_to_gn.md
+++ b/cobalt/site/docs/gen/starboard/build/doc/migrating_gyp_to_gn.md
@@ -83,7 +83,8 @@
```
You also may need to remove default configs. The default configs are listed in
-[BUILDCONFIG.gn](../config/BUILDCONFIG.gn). You remove a config like so:
+[BUILDCONFIG.gn](https://cobalt.googlesource.com/cobalt/+/refs/heads/master/src/starboard/build/config/BUILDCONFIG.gn).
+You remove a config like so:
```
static_library("foo") {
@@ -148,8 +149,9 @@
Instead of implicitly searching directories for certain files like GYP did, we
explicitly enumerate our ports and their locations.
-[platforms.gni](../platforms.gni) contains all of this information, and you'll
-need to add your platform to that list following the same format.
+[platforms.gni](https://cobalt.googlesource.com/cobalt/+/refs/heads/master/src/starboard/build/platforms.gni)
+contains all of this information, and you'll need to add your platform to that
+list following the same format.
### Migrating a Family of Platforms
@@ -175,10 +177,10 @@
You may define a toolchain from scratch following the [reference][gn_toolchain],
or you can use the
-[gcc/clang templates](../../../build/toolchain/gcc_toolchain.gni) provided.
-Almost all of the reference platforms use these templates, so look to those as
-examples for how to use it correctly. Here's the linux-x64x11
-[toolchain/BUILD.gn file](../../linux/x64x11/toolchain/BUILD.gn).
+[gcc/clang templates](https://cobalt.googlesource.com/cobalt/+/refs/heads/master/src/build/toolchain/gcc_toolchain.gni)
+provided. Almost all of the reference platforms use these templates, so look to
+those as examples for how to use it correctly. Here's the linux-x64x11
+[toolchain/BUILD.gn file](https://cobalt.googlesource.com/cobalt/+/refs/heads/master/src/starboard/linux/x64x11/toolchain/BUILD.gn).
## Checking Your Migration
@@ -203,29 +205,36 @@
```
If this was equivalent to a GYP target, you can compare the ninja compilation
-databases by using [format_ninja.py](../../../tools/format_ninja.py) and a
-comparison tool, i.e. [meld](https://meldmerge.org/). This will allow you to see
-any changes in commands, i.e. with flags or otherwise.
+databases by using
+[format_ninja.py](https://cobalt.googlesource.com/cobalt/+/refs/heads/master/src/tools/format_ninja.py)
+and a comparison tool, i.e. [meld](https://meldmerge.org/). This will allow you
+to see any changes in commands, i.e. with flags or otherwise.
The following differences for ninja flags between GYP and GN don't cause any
issues:
-1. The name of the intermediate .o, .d files is different in both cases: Here is
- an example while compiling the same source file
- ```
- starboard/common/new.cc
- ```
- GYP generates:
- ```
- obj/starboard/common/common.new.cc.o
- ```
- GN generates:
- ```
- obj/starboard/common/common/new.o
- ```
-2. The `-x` flag for specifying language is not present in GN migration.
- For example GYP specifies `-x c` flag while building c language files for
- certain targets. This flag is not specified while building any GN targets.
+1. The name of the intermediate .o, .d files is different in both cases: Here
+ is an example while compiling the same source file
+
+ ```
+ starboard/common/new.cc
+ ```
+
+ GYP generates:
+
+ ```
+ obj/starboard/common/common.new.cc.o
+ ```
+
+ GN generates:
+
+ ```
+ obj/starboard/common/common/new.o
+ ```
+
+1. The `-x` flag for specifying language is not present in GN migration. For
+ example GYP specifies `-x c` flag while building c language files for
+ certain targets. This flag is not specified while building any GN targets.
### Validating a Platform
@@ -240,7 +249,7 @@
### Step by Step Stub to Your Platform Migration Guide
-This [document](../gn_migrate_stub_to_platform.md) outlines a step by step
+This [document](./gn_migrate_stub_to_platform.md) outlines a step by step
process for converting the stub platform's GN files to GN files that will be
able to be built for your platform.
diff --git a/cobalt/site/docs/gen/starboard/doc/evergreen/cobalt_evergreen_overview.md b/cobalt/site/docs/gen/starboard/doc/evergreen/cobalt_evergreen_overview.md
index 4e07d8e..8d770ca 100644
--- a/cobalt/site/docs/gen/starboard/doc/evergreen/cobalt_evergreen_overview.md
+++ b/cobalt/site/docs/gen/starboard/doc/evergreen/cobalt_evergreen_overview.md
@@ -507,16 +507,17 @@
### Fonts
The system font directory `kSbSystemPathFontDirectory` should be configured to
-point to the `standard` (23MB) or the `limited` (3.1MB) cobalt font packages. An
-easy way to do that is to use the `kSbSystemPathContentDirectory` to contain
-the system font directory and setting the `cobalt_font_package` to `standard` or
-`limited` in your port.
+point to either the system fonts on the device or the Cobalt `standard` (23MB)
+or the Cobalt `limited` (3.1MB) font packages. An easy way to use the Cobalt
+fonts is to set `kSbSystemPathFontDirectory` to point to
+`kSbSystemPathContentDirectory/fonts` and configure `cobalt_font_package` to
+`standard` or `limited` in your port.
Cobalt Evergreen (built by Google), will by default use the `empty` font
package to minimize storage requirements. A separate
`cobalt_font_package` variable is set to `empty` in the Evergreen platform.
-On Raspberry Pi this is:
+On Raspberry Pi the Cobalt fonts are configured the following way:
`empty` set of fonts under:
```
diff --git a/docker/precommit_hooks/docker-compose.yml b/cobalt/storage/BUILD.gn
similarity index 69%
copy from docker/precommit_hooks/docker-compose.yml
copy to cobalt/storage/BUILD.gn
index 6106d19..1bce50a 100644
--- a/docker/precommit_hooks/docker-compose.yml
+++ b/cobalt/storage/BUILD.gn
@@ -12,16 +12,9 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-version: '2.4'
-
-services:
- pre-commit:
- build:
- context: .
- dockerfile: Dockerfile
- image: pre-commit
- volumes:
- - ${COBALT_SRC:-../../}:/code/
- environment:
- FROM_REF: ${FROM_REF:-HEAD^1}
- TO_REF: ${TO_REF:-HEAD}
+static_library("storage_constants") {
+ sources = [
+ "storage_constants.cc",
+ "storage_constants.h",
+ ]
+}
diff --git a/cobalt/updater/utils.cc b/cobalt/updater/utils.cc
index 5baad0a..4c96c7c 100644
--- a/cobalt/updater/utils.cc
+++ b/cobalt/updater/utils.cc
@@ -4,6 +4,7 @@
#include "cobalt/updater/utils.h"
+#include <memory>
#include <vector>
#include "base/base_paths.h"
@@ -11,10 +12,13 @@
#include "base/files/file_util.h"
#include "base/logging.h"
#include "base/path_service.h"
+#include "base/strings/string_number_conversions.h"
#include "base/values.h"
#include "build/build_config.h"
#include "cobalt/extension/installation_manager.h"
#include "components/update_client/utils.h"
+#include "crypto/secure_hash.h"
+#include "crypto/sha2.h"
#include "starboard/configuration_constants.h"
#include "starboard/string.h"
#include "starboard/system.h"
@@ -151,5 +155,74 @@
return version.GetString();
}
+std::string GetLibrarySha256(int index) {
+ base::FilePath filepath;
+ auto installation_manager =
+ static_cast<const CobaltExtensionInstallationManagerApi*>(
+ SbSystemGetExtension(kCobaltExtensionInstallationManagerName));
+ if (!installation_manager && index == 0) {
+ // Evergreen Lite
+ std::vector<char> system_path_content_dir(kSbFileMaxPath);
+ if (!SbSystemGetPath(kSbSystemPathContentDirectory,
+ system_path_content_dir.data(), kSbFileMaxPath)) {
+ SB_LOG(ERROR)
+ << "GetLibrarySha256: Failed to get system path content directory";
+ return "";
+ }
+
+ filepath = base::FilePath(std::string(system_path_content_dir.begin(),
+ system_path_content_dir.end()))
+ .DirName();
+ } else if (!installation_manager && index != 0) {
+ SB_LOG(ERROR) << "GetLibrarySha256: Evergreen lite supports only slot 0";
+ return "";
+ } else {
+ // Evergreen Full
+ std::vector<char> installation_path(kSbFileMaxPath);
+ if (installation_manager->GetInstallationPath(
+ index, installation_path.data(), kSbFileMaxPath) == IM_EXT_ERROR) {
+ SB_LOG(ERROR) << "GetLibrarySha256: Failed to get installation path";
+ return "";
+ }
+
+ filepath = base::FilePath(installation_path.data());
+ }
+
+ filepath = filepath.AppendASCII("lib").AppendASCII("libcobalt.so");
+ base::File source_file(filepath,
+ base::File::FLAG_OPEN | base::File::FLAG_READ);
+ if (!source_file.IsValid()) {
+ SB_LOG(ERROR) << "GetLibrarySha256(): Unable to open source file: "
+ << filepath.value();
+ return "";
+ }
+
+ const size_t kBufferSize = 32768;
+ std::vector<char> buffer(kBufferSize);
+ uint8_t actual_hash[crypto::kSHA256Length] = {0};
+ std::unique_ptr<crypto::SecureHash> hasher(
+ crypto::SecureHash::Create(crypto::SecureHash::SHA256));
+
+ while (true) {
+ int bytes_read = source_file.ReadAtCurrentPos(&buffer[0], buffer.size());
+ if (bytes_read < 0) {
+ SB_LOG(ERROR) << "GetLibrarySha256(): error reading from: "
+ << filepath.value();
+
+ return "";
+ }
+
+ if (bytes_read == 0) {
+ break;
+ }
+
+ hasher->Update(&buffer[0], bytes_read);
+ }
+
+ hasher->Finish(actual_hash, sizeof(actual_hash));
+
+ return base::HexEncode(actual_hash, sizeof(actual_hash));
+}
+
} // namespace updater
} // namespace cobalt
diff --git a/cobalt/updater/utils.h b/cobalt/updater/utils.h
index 3ca7793..a0b5008 100644
--- a/cobalt/updater/utils.h
+++ b/cobalt/updater/utils.h
@@ -1,4 +1,4 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
+// Copyright 2021 The Cobalt Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -29,6 +29,10 @@
// Read the Evergreen version of the installation dir.
base::Version ReadEvergreenVersion(base::FilePath installation_dir);
+// Returns the hash of the libcobalt.so binary for the installation
+// at slot |index|.
+std::string GetLibrarySha256(int index);
+
} // namespace updater
} // namespace cobalt
diff --git a/codereview.settings b/codereview.settings
deleted file mode 100644
index 1950c32..0000000
--- a/codereview.settings
+++ /dev/null
@@ -1,3 +0,0 @@
-GERRIT_HOST: cobalt-review.googlesource.com
-GERRIT_AUTODETECT_BRANCH: true
-CODE_REVIEW_SERVER: cobalt-review.googlesource.com
diff --git a/docker-compose.yml b/docker-compose.yml
index 7e2364f..b2f6912 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -53,24 +53,6 @@
FROM_REF: ${FROM_REF:-HEAD^1}
TO_REF: ${TO_REF:-HEAD}
- docsite:
- build:
- context: ./docker/docsite
- dockerfile: Dockerfile
- container_name: docsite
- ports:
- - "4000:4000"
- volumes:
- - ${COBALT_SRC:-.}:/code/
- docsite-build-only:
- container_name: docsite-build-only
- environment:
- # SITE_DST specifies where the files required to deploy the site should be
- # placed, and by default this is under the "out" directory.
- - SITE_DST=${SITE_DST:-/cobalt/out/deploy/www}
- extends:
- service: docsite
-
#### Cobalt build containers
base:
build:
@@ -173,6 +155,23 @@
- build-base-bionic
scale: 0
+ linux-x64x11-gcc-6-3:
+ <<: *common-definitions
+ <<: *build-volumes
+ build:
+ context: ./docker/linux
+ dockerfile: gcc-6-3/Dockerfile
+ args:
+ - FROM_IMAGE=build-base-bionic
+ image: linux-x64x11-gcc-6-3
+ environment:
+ <<: *shared-build-env
+ PLATFORM: linux-x64x11-gcc-6-3
+ CONFIG: ${CONFIG:-debug}
+ depends_on:
+ - build-base-bionic
+ scale: 0
+
linux-x64x11-clang-3-9:
<<: *common-definitions
<<: *build-volumes
diff --git a/docker/docsite/Dockerfile b/docker/docsite/Dockerfile
index f4682a3..b5b4436 100644
--- a/docker/docsite/Dockerfile
+++ b/docker/docsite/Dockerfile
@@ -39,4 +39,4 @@
USER defaultuser
-CMD /code/third_party/repo-publishing-toolkit-local/preview-site.sh
+CMD /cobalt/third_party/repo-publishing-toolkit-local/preview-site.sh
diff --git a/docker/docsite/Dockerfile-gke b/docker/docsite/Dockerfile-gke
deleted file mode 100644
index c199810..0000000
--- a/docker/docsite/Dockerfile-gke
+++ /dev/null
@@ -1,29 +0,0 @@
-# Copyright 2021 The Cobalt 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.
-
-FROM ruby:2.7-buster
-
-RUN apt update -qqy \
- && apt install -qqy --no-install-recommends bundler doxygen git nodejs \
- python python-pip python-setuptools python-wheel \
- && apt-get clean autoclean \
- && apt-get autoremove -y --purge \
- && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
- && rm -rf /var/lib/{apt,dpkg,cache,log}
-
-COPY Gemfile /app/Gemfile
-
-RUN bundle install --gemfile=/app/Gemfile
-
-CMD ruby -v
diff --git a/docker/docsite/README.md b/docker/docsite/README.md
index d2e3701..06ea6fc 100644
--- a/docker/docsite/README.md
+++ b/docker/docsite/README.md
@@ -26,14 +26,3 @@
`preview-site.sh`, which normally installs gems, run with elevated permissions
the resulting files added or modified would not be accessible to the user who
ran the Docker container.
-
-# GKE version
-For Buildbot on GKE, we use base images then layer the Buildbot worker image
-atop. This currently requires root to work, so we have a separate simplified
-Dockerfile which only has the necessary ruby and gems installed, plus the
-additional libs required for Buildbot.
-To build and push a new version run:
-
-docker build -t gcr.io/cobalt-buildbot-gcr/docsite-builder -f Dockerfile-gke .
-
-docker push gcr.io/cobalt-buildbot-gcr/docsite-builder
diff --git a/docker/docsite/docker-compose.yml b/docker/docsite/docker-compose.yml
new file mode 100644
index 0000000..bc0b6e0
--- /dev/null
+++ b/docker/docsite/docker-compose.yml
@@ -0,0 +1,36 @@
+# Copyright 2021 The Cobalt 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.
+
+version: '2.4'
+
+services:
+ docsite:
+ build:
+ context: .
+ dockerfile: Dockerfile
+ container_name: docsite
+ ports:
+ - "4000:4000"
+ volumes:
+ # We use ../../ when the environment variable COBALT_SRC is not set since
+ # this file is located two directories under the root of the repository.
+ - ${COBALT_SRC:-../../}:/cobalt/
+ docsite-build-only:
+ container_name: docsite-build-only
+ environment:
+ # SITE_DST specifies where the files required to deploy the site should be
+ # placed, and by default this is under the "out" directory.
+ - SITE_DST=${SITE_DST:-/cobalt/out/deploy/www}
+ extends:
+ service: docsite
diff --git a/docker/linux/gcc-6-3/Dockerfile b/docker/linux/gcc-6-3/Dockerfile
new file mode 100644
index 0000000..702db8d
--- /dev/null
+++ b/docker/linux/gcc-6-3/Dockerfile
@@ -0,0 +1,42 @@
+# Copyright 2021 The Cobalt 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.
+
+FROM linux-x64x11-bionic
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+RUN apt update -qqy \
+ # Install the |add-apt-repository| command for convenience.
+ && apt install -qqy software-properties-common \
+ # Add zesty archive repository, and remove universe repository.
+ && echo "deb http://old-releases.ubuntu.com/ubuntu zesty main" \
+ | tee /etc/apt/sources.list.d/zesty.list \
+ && apt-add-repository -r universe \
+ # Install gcc 6.3 from zesty repo.
+ && apt update -qqy \
+ && apt install -qqy gcc-6 g++-6 \
+ && update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 1 \
+ && update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-6 1 \
+ # Remove zesty repo, and restore universe repo.
+ # Also remove unnecessary software-properties-common.
+ && rm /etc/apt/sources.list.d/zesty.list \
+ && apt-add-repository universe \
+ && apt purge -qqy software-properties-common \
+ && apt autoremove -qqy --purge \
+ && /opt/clean-after-apt.sh
+
+CMD /code/cobalt/build/gyp_cobalt -v -C ${CONFIG} ${PLATFORM} && \
+ ccache -z && \
+ ninja -v -j ${NINJA_PARALLEL} -C ${OUTDIR}/${PLATFORM}_${CONFIG} ${TARGET:-cobalt_deploy} && \
+ ccache -s
diff --git a/docker/linux/raspi/gn/Dockerfile b/docker/linux/raspi/gn/Dockerfile
index 3339455..bb56179 100644
--- a/docker/linux/raspi/gn/Dockerfile
+++ b/docker/linux/raspi/gn/Dockerfile
@@ -14,5 +14,5 @@
FROM cobalt-build-raspi
-CMD gn gen ${OUTDIR}/${PLATFORM}_${CONFIG} --args="target_platform=\"${PLATFORM}\" build_type=\"${CONFIG}\" target_cpu=\"arm\" is_clang=false can_build_evergreen_loader_apps=false " && \
+CMD gn gen ${OUTDIR}/${PLATFORM}_${CONFIG} --args="target_platform=\"${PLATFORM}\" build_type=\"${CONFIG}\" target_cpu=\"arm\" is_clang=false" && \
ninja -j ${NINJA_PARALLEL} -C ${OUTDIR}/${PLATFORM}_${CONFIG}
diff --git a/nb/BUILD.gn b/nb/BUILD.gn
new file mode 100644
index 0000000..2e19f21
--- /dev/null
+++ b/nb/BUILD.gn
@@ -0,0 +1,105 @@
+# Copyright 2021 The Cobalt 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.
+
+static_library("nb") {
+ if (is_starboard) {
+ sources = [
+ "allocator.cc",
+ "allocator.h",
+ "analytics/memory_tracker.cc",
+ "analytics/memory_tracker.h",
+ "analytics/memory_tracker_helpers.cc",
+ "analytics/memory_tracker_helpers.h",
+ "analytics/memory_tracker_impl.cc",
+ "analytics/memory_tracker_impl.h",
+ "bidirectional_fit_reuse_allocator.cc",
+ "bidirectional_fit_reuse_allocator.h",
+ "bit_cast.h",
+ "concurrent_map.h",
+ "concurrent_ptr.h",
+ "first_fit_reuse_allocator.cc",
+ "first_fit_reuse_allocator.h",
+ "fixed_no_free_allocator.cc",
+ "fixed_no_free_allocator.h",
+ "hash.cc",
+ "hash.h",
+ "memory_pool.h",
+ "memory_scope.cc",
+ "memory_scope.h",
+ "move.h",
+ "multipart_allocator.cc",
+ "multipart_allocator.h",
+ "pointer_arithmetic.h",
+ "rect.h",
+ "ref_counted.cc",
+ "ref_counted.h",
+ "reuse_allocator_base.cc",
+ "reuse_allocator_base.h",
+ "rewindable_vector.h",
+ "scoped_ptr.h",
+ "simple_profiler.cc",
+ "simple_profiler.h",
+ "simple_thread.cc",
+ "simple_thread.h",
+ "starboard_aligned_memory_deleter.h",
+ "starboard_memory_allocator.h",
+ "std_allocator.h",
+ "string_interner.cc",
+ "string_interner.h",
+ "thread_collision_warner.cc",
+ "thread_collision_warner.h",
+ "thread_local_boolean.h",
+ "thread_local_object.h",
+ "thread_local_pointer.h",
+ ]
+
+ deps = [
+ "//starboard:starboard_headers_only",
+ "//starboard/common",
+ ]
+ }
+}
+
+target(gtest_target_type, "nb_test") {
+ testonly = true
+
+ if (is_starboard) {
+ sources = [
+ "analytics/memory_tracker_helpers_test.cc",
+ "analytics/memory_tracker_impl_test.cc",
+ "analytics/memory_tracker_test.cc",
+ "bidirectional_fit_reuse_allocator_test.cc",
+ "concurrent_map_test.cc",
+ "concurrent_ptr_test.cc",
+ "first_fit_reuse_allocator_test.cc",
+ "fixed_no_free_allocator_test.cc",
+ "memory_scope_test.cc",
+ "multipart_allocator_test.cc",
+ "rewindable_vector_test.cc",
+ "run_all_unittests.cc",
+ "simple_profiler_test.cc",
+ "std_allocator_test.cc",
+ "string_interner_test.cc",
+ "test_thread.h",
+ "thread_local_object_test.cc",
+ ]
+
+ deps = [
+ ":nb",
+ "//starboard",
+ "//testing/gmock:gmock",
+ "//testing/gtest",
+ ]
+ }
+}
diff --git a/starboard/android/shared/BUILD.gn b/starboard/android/shared/BUILD.gn
index a56739f..4ef3355 100644
--- a/starboard/android/shared/BUILD.gn
+++ b/starboard/android/shared/BUILD.gn
@@ -14,6 +14,7 @@
import("//starboard/shared/starboard/media/media_tests.gni")
import("//starboard/shared/starboard/player/buildfiles.gni")
+import("//starboard/shared/starboard/player/player_tests.gni")
config("starboard_platform_config") {
include_dirs = [ "bionic" ]
@@ -477,7 +478,7 @@
target(gtest_target_type, "starboard_platform_tests") {
testonly = true
- sources = media_tests_sources + [
+ sources = media_tests_sources + player_tests_sources + [
"//starboard/common/test_main.cc",
"jni_env_ext_test.cc",
"model_year_test.cc",
diff --git a/starboard/android/shared/application_android.cc b/starboard/android/shared/application_android.cc
index 9c171b1..45a57af 100644
--- a/starboard/android/shared/application_android.cc
+++ b/starboard/android/shared/application_android.cc
@@ -264,13 +264,6 @@
#else // SB_API_VERSION >= 13
DispatchStart();
#endif // SB_API_VERSION >= 13
- } else if (state() == kStateConcealed || state() == kStateFrozen) {
-#if SB_API_VERSION >= 13
- DispatchAndDelete(
- new Event(kSbEventTypeReveal, SbTimeGetMonotonicNow(), NULL, NULL));
-#else // SB_API_VERSION >= 13
- DispatchAndDelete(new Event(kSbEventTypeReveal, NULL, NULL));
-#endif // SB_API_VERSION >= 13
} else {
// Now that we got a window back, change the command for the switch
// below to sync up with the current activity lifecycle.
diff --git a/starboard/android/shared/platform_configuration/BUILD.gn b/starboard/android/shared/platform_configuration/BUILD.gn
index 75b13be..c8da86a 100644
--- a/starboard/android/shared/platform_configuration/BUILD.gn
+++ b/starboard/android/shared/platform_configuration/BUILD.gn
@@ -31,20 +31,13 @@
cflags += [ "-O2" ]
}
if (is_debug) {
- cflags += [
- "-frtti",
- "-O0",
- ]
+ cflags += [ "-O0" ]
+ configs += [ "//build/config/compiler:rtti" ]
} else if (is_devel) {
- cflags += [
- "-frtti",
- "-O2",
- ]
+ cflags += [ "-O2" ]
+ configs += [ "//build/config/compiler:rtti" ]
} else {
- cflags += [
- "-fno-rtti",
- "-gline-tables-only",
- ]
+ cflags += [ "-gline-tables-only" ]
}
libs = [
diff --git a/starboard/android/shared/player_create.cc b/starboard/android/shared/player_create.cc
index f4c4083..e9e1041 100644
--- a/starboard/android/shared/player_create.cc
+++ b/starboard/android/shared/player_create.cc
@@ -17,6 +17,8 @@
#include "starboard/android/shared/video_decoder.h"
#include "starboard/android/shared/video_window.h"
#include "starboard/common/log.h"
+#include "starboard/common/media.h"
+#include "starboard/common/string.h"
#include "starboard/configuration.h"
#include "starboard/decode_target.h"
#include "starboard/shared/starboard/player/filter/filter_based_player_worker_handler.h"
@@ -37,8 +39,15 @@
SbPlayerErrorFunc player_error_func,
void* context,
SbDecodeTargetGraphicsContextProvider* provider) {
+ if (!player_error_func) {
+ SB_LOG(ERROR) << "|player_error_func| cannot be null.";
+ return kSbPlayerInvalid;
+ }
+
if (!creation_param) {
SB_LOG(ERROR) << "CreationParam cannot be null.";
+ player_error_func(kSbPlayerInvalid, context, kSbPlayerErrorDecode,
+ "CreationParam cannot be null");
return kSbPlayerInvalid;
}
@@ -56,15 +65,22 @@
if (!audio_mime) {
SB_LOG(ERROR) << "creation_param->audio_sample_info.mime cannot be null.";
+ player_error_func(kSbPlayerInvalid, context, kSbPlayerErrorDecode,
+ "creation_param->audio_sample_info.mime cannot be null");
return kSbPlayerInvalid;
}
if (!video_mime) {
SB_LOG(ERROR) << "creation_param->video_sample_info.mime cannot be null.";
+ player_error_func(kSbPlayerInvalid, context, kSbPlayerErrorDecode,
+ "creation_param->video_sample_info.mime cannot be null");
return kSbPlayerInvalid;
}
if (!max_video_capabilities) {
SB_LOG(ERROR) << "creation_param->video_sample_info.max_video_capabilities"
<< " cannot be null.";
+ player_error_func(kSbPlayerInvalid, context, kSbPlayerErrorDecode,
+ "creation_param->video_sample_info.max_video_"
+ "capabilities cannot be null");
return kSbPlayerInvalid;
}
@@ -73,8 +89,24 @@
<< "\", and max video capabilities \"" << max_video_capabilities
<< "\".";
- if (!sample_deallocate_func || !decoder_status_func || !player_status_func ||
- !player_error_func) {
+ if (!sample_deallocate_func) {
+ SB_LOG(ERROR) << "|sample_deallocate_func| cannot be null.";
+ player_error_func(kSbPlayerInvalid, context, kSbPlayerErrorDecode,
+ "|sample_deallocate_func| cannot be null.");
+ return kSbPlayerInvalid;
+ }
+
+ if (!decoder_status_func) {
+ SB_LOG(ERROR) << "|decoder_status_func| cannot be null.";
+ player_error_func(kSbPlayerInvalid, context, kSbPlayerErrorDecode,
+ "|decoder_status_func| cannot be null.");
+ return kSbPlayerInvalid;
+ }
+
+ if (!player_status_func) {
+ SB_LOG(ERROR) << "|player_status_func| cannot be null.";
+ player_error_func(kSbPlayerInvalid, context, kSbPlayerErrorDecode,
+ "|player_status_func| cannot be null.");
return kSbPlayerInvalid;
}
@@ -86,7 +118,13 @@
audio_codec != kSbMediaAudioCodecAc3 &&
audio_codec != kSbMediaAudioCodecEac3 &&
audio_codec != kSbMediaAudioCodecOpus) {
- SB_LOG(ERROR) << "Unsupported audio codec " << audio_codec;
+ SB_LOG(ERROR) << "Unsupported audio codec: "
+ << starboard::GetMediaAudioCodecName(audio_codec) << ".";
+ player_error_func(
+ kSbPlayerInvalid, context, kSbPlayerErrorDecode,
+ starboard::FormatString("Unsupported audio codec: %s",
+ starboard::GetMediaAudioCodecName(audio_codec))
+ .c_str());
return kSbPlayerInvalid;
}
@@ -95,7 +133,13 @@
video_codec != kSbMediaVideoCodecH265 &&
video_codec != kSbMediaVideoCodecVp9 &&
video_codec != kSbMediaVideoCodecAv1) {
- SB_LOG(ERROR) << "Unsupported video codec " << video_codec;
+ SB_LOG(ERROR) << "Unsupported video codec: "
+ << starboard::GetMediaVideoCodecName(video_codec) << ".";
+ player_error_func(
+ kSbPlayerInvalid, context, kSbPlayerErrorDecode,
+ starboard::FormatString("Unsupported video codec: %s",
+ starboard::GetMediaVideoCodecName(video_codec))
+ .c_str());
return kSbPlayerInvalid;
}
@@ -103,20 +147,33 @@
video_codec == kSbMediaVideoCodecNone) {
SB_LOG(ERROR) << "SbPlayerCreate() requires at least one audio track or"
<< " one video track.";
+ player_error_func(kSbPlayerInvalid, context, kSbPlayerErrorDecode,
+ "SbPlayerCreate() requires at least one audio track or "
+ "one video track");
return kSbPlayerInvalid;
}
+ std::string error_message;
if (has_audio && creation_param->audio_sample_info.number_of_channels >
SbAudioSinkGetMaxChannels()) {
- SB_LOG(ERROR) << "creation_param->audio_sample_info.number_of_channels"
- << " exceeds the maximum number of audio channels supported"
- << " by this platform.";
+ error_message = starboard::FormatString(
+ "Number of audio channels (%d) exceeds the maximum number of audio "
+ "channels supported by this platform (%d)",
+ creation_param->audio_sample_info.number_of_channels,
+ SbAudioSinkGetMaxChannels());
+ SB_LOG(ERROR) << error_message << ".";
+ player_error_func(kSbPlayerInvalid, context, kSbPlayerErrorDecode,
+ error_message.c_str());
return kSbPlayerInvalid;
}
auto output_mode = creation_param->output_mode;
if (SbPlayerGetPreferredOutputMode(creation_param) != output_mode) {
- SB_LOG(ERROR) << "Unsupported player output mode " << output_mode;
+ error_message = starboard::FormatString(
+ "Unsupported player output mode: %d", output_mode);
+ SB_LOG(ERROR) << error_message << ".";
+ player_error_func(kSbPlayerInvalid, context, kSbPlayerErrorDecode,
+ error_message.c_str());
return kSbPlayerInvalid;
}
@@ -127,8 +184,16 @@
// support one main player on Android, which can be either in punch out mode
// or decode to target mode.
const int kMaxNumberOfHardwareDecoders = 1;
- if (VideoDecoder::number_of_hardware_decoders() >=
- kMaxNumberOfHardwareDecoders) {
+ auto number_of_hardware_decoders =
+ VideoDecoder::number_of_hardware_decoders();
+ if (number_of_hardware_decoders >= kMaxNumberOfHardwareDecoders) {
+ error_message = starboard::FormatString(
+ "Number of hardware decoders (%d) is equal to or exceeds the max "
+ "number of hardware decoders supported by this platform (%d)",
+ number_of_hardware_decoders, kMaxNumberOfHardwareDecoders);
+ SB_LOG(ERROR) << error_message << ".";
+ player_error_func(kSbPlayerInvalid, context, kSbPlayerErrorDecode,
+ error_message.c_str());
return kSbPlayerInvalid;
}
}
@@ -143,6 +208,8 @@
if (!starboard::android::shared::VideoSurfaceHolder::
IsVideoSurfaceAvailable()) {
SB_LOG(ERROR) << "Video surface is not available now.";
+ player_error_func(kSbPlayerInvalid, context, kSbPlayerErrorDecode,
+ "Video surface is not available now");
return kSbPlayerInvalid;
}
}
@@ -161,5 +228,12 @@
SbPlayerSetBounds(player, 0, 0, 0, 0, 0);
}
+ if (!SbPlayerIsValid(player)) {
+ SB_LOG(ERROR)
+ << "Invalid player returned by SbPlayerPrivate::CreateInstance().";
+ player_error_func(
+ kSbPlayerInvalid, context, kSbPlayerErrorDecode,
+ "Invalid player returned by SbPlayerPrivate::CreateInstance()");
+ }
return player;
}
diff --git a/starboard/android/shared/starboard_platform_tests.gypi b/starboard/android/shared/starboard_platform_tests.gypi
index 0c34f23..0b44440 100644
--- a/starboard/android/shared/starboard_platform_tests.gypi
+++ b/starboard/android/shared/starboard_platform_tests.gypi
@@ -18,6 +18,7 @@
'type': '<(gtest_target_type)',
'includes': [
'<(DEPTH)/starboard/shared/starboard/media/media_tests.gypi',
+ '<(DEPTH)/starboard/shared/starboard/player/player_tests.gypi',
],
'sources': [
'<(DEPTH)/starboard/common/test_main.cc',
diff --git a/starboard/build/config/BUILDCONFIG.gn b/starboard/build/config/BUILDCONFIG.gn
index b3356ca..52910cb 100644
--- a/starboard/build/config/BUILDCONFIG.gn
+++ b/starboard/build/config/BUILDCONFIG.gn
@@ -26,9 +26,6 @@
cobalt_fastbuild = getenv("IS_CI") == 1
is_internal_build = false
-
- # TODO: Remove this flag when the affected targets can be built.
- can_build_evergreen_loader_apps = true
}
is_debug = build_type == "debug"
@@ -104,39 +101,89 @@
default_compiler_configs = [
"//build/config/compiler:default_include_dirs",
"//build/config/compiler:no_exceptions",
- "//$starboard_path/platform_configuration",
+ "//build/config/compiler:thin_archive",
"//starboard/build/config:base",
"//starboard/build/config:host",
"//starboard/build/config:size",
"//starboard/build/config:target",
- "//starboard/build/config:no_pedantic_warnings",
]
if (is_starboard) {
default_compiler_configs += [ "//starboard/build/config:starboard" ]
}
+if (is_qa || is_gold) {
+ default_compiler_configs += [ "//build/config/compiler:no_rtti" ]
+}
+
set_defaults("static_library") {
configs = default_compiler_configs + static_library_configs
+ has_pedantic_warnings = false
}
set_defaults("source_set") {
configs = default_compiler_configs + source_set_configs
+ has_pedantic_warnings = false
}
set_defaults("loadable_module") {
configs = default_compiler_configs + loadable_module_configs
+ has_pedantic_warnings = false
}
set_defaults("executable") {
configs = default_compiler_configs + executable_configs
+ has_pedantic_warnings = false
}
set_defaults("shared_library") {
configs = default_compiler_configs + shared_library_configs
+ has_pedantic_warnings = false
+}
+
+# We make sure to change the pedantic_warnings configs in a particular order to
+# ensure -Wno-foo compiler flags (usually set in no_pedantic_warnings and some
+# of the platform_configuration) come after -Wfoo flags (including -Wall and
+# -Wextra which are set in pedantic_warnings). It is only certain the the "foo"
+# error will be ignored if -Wfoo precedes -Wno-foo in the compilation line.
+template("target_with_platform_configs") {
+ target(invoker.target_type, target_name) {
+ forward_variables_from(invoker, "*", [ "target_type" ])
+
+ if (has_pedantic_warnings) {
+ configs += [ "//starboard/build/config:pedantic_warnings" ]
+ }
+ configs += [ "//$starboard_path/platform_configuration" ]
+ if (!has_pedantic_warnings) {
+ configs += [ "//starboard/build/config:no_pedantic_warnings" ]
+ }
+ }
+}
+
+# Ensure the platform_configuration config is the last one included.
+template("static_library") {
+ target_with_platform_configs(target_name) {
+ target_type = "static_library"
+ forward_variables_from(invoker, "*")
+ }
+}
+
+template("source_set") {
+ target_with_platform_configs(target_name) {
+ target_type = "source_set"
+ forward_variables_from(invoker, "*")
+ }
+}
+
+template("loadable_module") {
+ target_with_platform_configs(target_name) {
+ target_type = "loadable_module"
+ forward_variables_from(invoker, "*")
+ }
}
# Set up the method of generating the install targets as defined by the
# platform.
import("$install_target_path")
template("executable") {
- executable(target_name) {
+ target_with_platform_configs(target_name) {
+ target_type = "executable"
forward_variables_from(invoker, "*", [ "install_target" ])
}
@@ -155,7 +202,8 @@
}
template("shared_library") {
- shared_library(target_name) {
+ target_with_platform_configs(target_name) {
+ target_type = "shared_library"
forward_variables_from(invoker, "*", [ "install_target" ])
}
diff --git a/starboard/build/doc/gn_migrate_stub_to_platform.md b/starboard/build/doc/gn_migrate_stub_to_platform.md
index f07e338..a2468f2 100644
--- a/starboard/build/doc/gn_migrate_stub_to_platform.md
+++ b/starboard/build/doc/gn_migrate_stub_to_platform.md
@@ -13,14 +13,14 @@
Here are the steps to do your migration:
1. [Copy stub files over to your platform and build them](#copy-stub-files-over-to-your-platform-and-build-them).
-2. [Replace stub toolchain with your platform's toolchain](#replace-stub-toolchain-with-your-platforms-toolchain).
-3. [Replace stub configuration with your platform's configuration](#replace-stub-configuration-with-your-platforms-configuration).
-4. [Replace stubbed starboard_platform target sources with your platform's
- sources](#replace-stubbed-starboardplatform-sources-with-your-platforms-sources).
+2. [Replace stub toolchain with toolchain for your platform](#replace-stub-toolchain-with-toolchain-for-your-platform).
+3. [Replace stub configuration with configuration for your platform](#replace-stub-configuration-with-configuration-for-your-platform).
+4. [Replace stubbed starboard_platform sources with sources for your platform](#replace-stubbed-starboard_platform-sources-with-sources-for-your-platform).
-After each step, you should be able to build the starboard_platform target.
-For example, you would build raspi2 starboard_platform target with the following
+After each step, you should be able to build the starboard_platform target. For
+example, you would build raspi2 starboard_platform target with the following
commands:
+
```
$gn gen out/raspi-2gn_devel --args='target_platform="raspi-2" build_type="devel"'
$ninja -C out/raspi-2gn_devel/ starboard
@@ -43,41 +43,43 @@
* starboard/stub/toolchain/BUILD.gn >
starboard/YOUR_PLATFORM/toolchain/BUILD.gn
2. Add your platform path to starboard/build/platforms.gni as referenced
- [here](../migrating_gyp_to_gn.md#adding-your-platform-to-starboard)
+ [here](./migrating_gyp_to_gn.md#adding-your-platform-to-starboard)
3. Resolve any errors which come up for missing/incorrect file paths. Then, you
should be able to build your platform target with the stubbed out files
suggested in the above section.
-### Replace Stub Toolchain with Your Platform's Toolchain
+### Replace Stub Toolchain with Toolchain for Your Platform
-Follow instructions [here](../migrating_gyp_to_gn.md#migrating-a-toolchain) for
+Follow instructions [here](./migrating_gyp_to_gn.md#migrating-a-toolchain) for
migrating the toolchain. Resolve errors and build the starboard_platform target
with the stubbed files.
-### Replace Stub Configuration with Your Platform's Configuration
+### Replace Stub Configuration with Configuration for Your Platform
This involves migrating the compiler flags and build variables as referenced
-[here](../migrating_gyp_to_gn.md#migrating-a-platform).
+[here](./migrating_gyp_to_gn.md#migrating-a-platform).
> **Highly recommended** \
-> It’s good to turn off the `treat_warnings_as_errors flag` until you can compile
-> the starboard_platform target with the platform files.
-> If this flag is not disabled you might run into a lot of
-> warnings turned errors and it might take time to solve all those errors.
-> Meanwhile you won't be in a buildable state which might make it uncertain as to
-> how much progress you are actually making.
-> For disabling the flag you can pass that as an argument to gn.
-> Here's an example for disabling the flag for raspi2:
+> It’s good to turn off the `treat_warnings_as_errors flag` until you can
+> compile the starboard_platform target with the platform files. If this flag is
+> not disabled you might run into a lot of warnings turned errors and it might
+> take time to solve all those errors. Meanwhile you won't be in a buildable
+> state which might make it uncertain as to how much progress you are actually
+> making. For disabling the flag you can pass that as an argument to gn. Here's
+> an example for disabling the flag for raspi2:
+>
> ```
-> $gn gen out/raspi-2gn_devel --args='target_platform="raspi-2" build_type="devel" treat_warnings_as_errors=false'
+> $gn gen out/raspi-2gn_devel
+> --args='target_platform="raspi-2" build_type="devel"
+> treat_warnings_as_errors=false'
> ```
Resolve errors and build the starboard_platform target with the stubbed files.
-### Replace Stubbed starboard_platform Sources with Your Platform's Sources
+### Replace Stubbed starboard_platform Sources with Sources for Your Platform
This involves adding files for the starboard_platform target as suggested
-[here](../migrating_gyp_to_gn.md#migrating-a-platform).
+[here](./migrating_gyp_to_gn.md#migrating-a-platform).
While building any target, follow the recommendation above of building the
target with `treat_warnings_as_errors=false`.
@@ -114,15 +116,16 @@
* Are the compiler flags for this file the same as in GYP ?
> To compare flags for GYP vs GN refer
- > [section](../migrating_gyp_to_gn.md#validating-a-target). To check if
+ > [section](./migrating_gyp_to_gn.md#validating-a-target). To check if
> the variables/flags you are compiling have changed since GYP, refer
- > [page](../migration_changes.md).
+ > [page](./migration_changes.md).
* Have you passed in the default arguments for your platform correctly?
> Default variables such as `target_cpu`, `target_os` and others can be
> overridden by passing arguments to gn while building. Here's an
> example of passing the default argument `target_cpu` for raspi2:
+ >
> ```
> $gn gen out/raspi-2gn_devel --args='target_platform="raspi-2" build_type="devel" target_cpu="arm"'
> ```
diff --git a/starboard/build/doc/migrating_gyp_to_gn.md b/starboard/build/doc/migrating_gyp_to_gn.md
index c6d06b6..5834300 100644
--- a/starboard/build/doc/migrating_gyp_to_gn.md
+++ b/starboard/build/doc/migrating_gyp_to_gn.md
@@ -79,7 +79,8 @@
```
You also may need to remove default configs. The default configs are listed in
-[BUILDCONFIG.gn](../config/BUILDCONFIG.gn). You remove a config like so:
+[BUILDCONFIG.gn](https://cobalt.googlesource.com/cobalt/+/refs/heads/master/src/starboard/build/config/BUILDCONFIG.gn).
+You remove a config like so:
```
static_library("foo") {
@@ -144,8 +145,9 @@
Instead of implicitly searching directories for certain files like GYP did, we
explicitly enumerate our ports and their locations.
-[platforms.gni](../platforms.gni) contains all of this information, and you'll
-need to add your platform to that list following the same format.
+[platforms.gni](https://cobalt.googlesource.com/cobalt/+/refs/heads/master/src/starboard/build/platforms.gni)
+contains all of this information, and you'll need to add your platform to that
+list following the same format.
### Migrating a Family of Platforms
@@ -171,10 +173,10 @@
You may define a toolchain from scratch following the [reference][gn_toolchain],
or you can use the
-[gcc/clang templates](../../../build/toolchain/gcc_toolchain.gni) provided.
-Almost all of the reference platforms use these templates, so look to those as
-examples for how to use it correctly. Here's the linux-x64x11
-[toolchain/BUILD.gn file](../../linux/x64x11/toolchain/BUILD.gn).
+[gcc/clang templates](https://cobalt.googlesource.com/cobalt/+/refs/heads/master/src/build/toolchain/gcc_toolchain.gni)
+provided. Almost all of the reference platforms use these templates, so look to
+those as examples for how to use it correctly. Here's the linux-x64x11
+[toolchain/BUILD.gn file](https://cobalt.googlesource.com/cobalt/+/refs/heads/master/src/starboard/linux/x64x11/toolchain/BUILD.gn).
## Checking Your Migration
@@ -199,29 +201,36 @@
```
If this was equivalent to a GYP target, you can compare the ninja compilation
-databases by using [format_ninja.py](../../../tools/format_ninja.py) and a
-comparison tool, i.e. [meld](https://meldmerge.org/). This will allow you to see
-any changes in commands, i.e. with flags or otherwise.
+databases by using
+[format_ninja.py](https://cobalt.googlesource.com/cobalt/+/refs/heads/master/src/tools/format_ninja.py)
+and a comparison tool, i.e. [meld](https://meldmerge.org/). This will allow you
+to see any changes in commands, i.e. with flags or otherwise.
The following differences for ninja flags between GYP and GN don't cause any
issues:
-1. The name of the intermediate .o, .d files is different in both cases: Here is
- an example while compiling the same source file
- ```
- starboard/common/new.cc
- ```
- GYP generates:
- ```
- obj/starboard/common/common.new.cc.o
- ```
- GN generates:
- ```
- obj/starboard/common/common/new.o
- ```
-2. The `-x` flag for specifying language is not present in GN migration.
- For example GYP specifies `-x c` flag while building c language files for
- certain targets. This flag is not specified while building any GN targets.
+1. The name of the intermediate .o, .d files is different in both cases: Here
+ is an example while compiling the same source file
+
+ ```
+ starboard/common/new.cc
+ ```
+
+ GYP generates:
+
+ ```
+ obj/starboard/common/common.new.cc.o
+ ```
+
+ GN generates:
+
+ ```
+ obj/starboard/common/common/new.o
+ ```
+
+1. The `-x` flag for specifying language is not present in GN migration. For
+ example GYP specifies `-x c` flag while building c language files for
+ certain targets. This flag is not specified while building any GN targets.
### Validating a Platform
@@ -236,7 +245,7 @@
### Step by Step Stub to Your Platform Migration Guide
-This [document](../gn_migrate_stub_to_platform.md) outlines a step by step
+This [document](./gn_migrate_stub_to_platform.md) outlines a step by step
process for converting the stub platform's GN files to GN files that will be
able to be built for your platform.
diff --git a/starboard/build/doc/migration_changes.md b/starboard/build/doc/migration_changes.md
index 433d1a3..650d107 100644
--- a/starboard/build/doc/migration_changes.md
+++ b/starboard/build/doc/migration_changes.md
@@ -15,6 +15,7 @@
`has_drm_system_extension` | `is_internal_build` (true/false) | (global)
`has_cdm` | `is_internal_build` (true/false) | (global)
`has_private_system_properties` | `is_internal_build` (true/false) | (global)
+`sb_pedantic_warnings` (0/1) | `has_pedantic_warnings` (true/false) | (global, see "Compiler Options" note)
`sb_deploy_output_dir` | `sb_install_output_dir` | `//starboard/build/config/base_configuration.gni`
`sb_evergreen` (0/1) | `sb_is_evergreen` (true/false) | `//starboard/build/config/base_configuration.gni`
`sb_evergreen_compatible` (0/1) | `sb_is_evergreen_compatible` (true/false) | `//starboard/build/config/base_configuration.gni`
@@ -38,10 +39,8 @@
`optimize_target_for_speed` (1) | `"//starboard/build/config:speed"` | Optimizations
`compiler_flags_*_speed` | `speed_config_path` | Optimizations
`compiler_flags_*_size` | `size_config_path` | Optimizations
-`sb_pedantic_warnings` | `pedantic_warnings_config_path` | Compiler Options
-`sb_pedantic_warnings` | `no_pedantic_warnings_config_path` | Compiler Options
-Notes:
+## Notes:
* *Starboard Implementation:* If your platform defined
`STARBOARD_IMPLENTATION` in its implementation, you would now add the above
@@ -56,13 +55,12 @@
correct ones for `speed_config_path` and `size_config_path` in your
platform's `platform_configuration/configuration.gni` file.
-* *Compiler Options:* Cobalt compiles some targets with stricter settings
- than others, depending on the platform. Before these targets would opt into
- the stricter settings by settings `sb_pedantic_warnings: 1` in their
- `variables` section. Now they will add the appropriate config like so:
- `configs += [ "//starboard/build/config:pedantic_warnings" ]` and remove
- the default: `configs -= [ "//starboard/build/config:no_pedantic_warnings"
- ]`. The additional config that is used to compile these targets is
- specified with the `pedantic_warnings_config_path` and
- `no_pedantic_warnings_config_path` variables in your platform's
- `platform_configuration/configuration.gni` file.
+* *Compiler Options:* Cobalt compiles some targets with stricter,
+ platform-dependent settings than others. Before these targets would opt into
+ the stricter settings by setting `sb_pedantic_warnings: 1` in their
+ `variables` section. Now targets will be compiled with pedantic warnings if
+ the target sets `has_pedantic_warnings=true`. The additional config that is
+ used to compile these targets is specified with the
+ `pedantic_warnings_config_path` and `no_pedantic_warnings_config_path`
+ variables in your platform's `platform_configuration/configuration.gni`
+ file.
diff --git a/starboard/doc/c99.md b/starboard/doc/c99.md
index b23ef3b..769ad3e 100644
--- a/starboard/doc/c99.md
+++ b/starboard/doc/c99.md
@@ -31,13 +31,63 @@
* tolower
* toupper
### <math.h>
+* acos
+* acosf
+* asin
+* asinf
+* atan
+* atan2
+* atan2f
+* atanf
+* cbrt
+* cbrtf
+* ceil
+* ceilf
+* cos
+* cosf
+* div
+* erf
+* erff
+* exp
+* expf
+* exp2f
* fabs
* floor
+* floorf
+* fmod
+* fmodf
+* frexp
* isfinite
* isnan
+* labs
+* llround
+* llroundf
+* log
+* log10
+* log10f
+* log2
+* log2f
+* ldexp
+* lrint
+* lrintf
+* modf
+* nearbyint
+* nearbyintf
+* nextafter
+* nextafterf
* pow
+* powf
+* round
+* roundf
+* scalbn
+* sin
+* sinf
* sqrt
* sqrtf
+* tan
+* tanf
+* trunc
+* truncf
### <stdlib.h>
* abs
* atoi
@@ -68,6 +118,9 @@
* strrchr
* strstr
* strspn
+### <tgmath.h>
+* ceill
+* logl
### <wchar.h>
* wcscat
* wcschr
diff --git a/starboard/elf_loader/BUILD.gn b/starboard/elf_loader/BUILD.gn
index eff2b9e..9ce393b 100644
--- a/starboard/elf_loader/BUILD.gn
+++ b/starboard/elf_loader/BUILD.gn
@@ -97,33 +97,31 @@
]
}
-if (can_build_evergreen_loader_apps) {
- target(final_executable_type, "elf_loader_sys_sandbox") {
- # To properly function the system loader requires the starboard
- # symbols to be exported from the binary.
- # To allow symbols to be exported remove the '-fvisibility=hidden' flag
- # from your compiler_flags.gypi. For Linux this would be:
- # starboard/linux/shared/compiler_flags.gypi
- # Example run:
- # export LD_LIBRARY_PATH=.
- # ./elf_loader_sys_sandbox --evergreen_library=app/cobalt/lib/libcobalt.so --evergreen_content=app/cobalt/content
- sources = [ "sandbox.cc" ]
- configs += [ ":elf_loader_config" ]
+target(final_executable_type, "elf_loader_sys_sandbox") {
+ # To properly function the system loader requires the starboard
+ # symbols to be exported from the binary.
+ # To allow symbols to be exported remove the '-fvisibility=hidden' flag
+ # from your compiler_flags.gypi. For Linux this would be:
+ # starboard/linux/shared/compiler_flags.gypi
+ # Example run:
+ # export LD_LIBRARY_PATH=.
+ # ./elf_loader_sys_sandbox --evergreen_library=app/cobalt/lib/libcobalt.so --evergreen_content=app/cobalt/content
+ sources = [ "sandbox.cc" ]
+ configs += [ ":elf_loader_config" ]
- starboard_syms_path =
- rebase_path("//starboard/starboard.syms", root_build_dir)
- ldflags = [
- "-Wl,--dynamic-list=$starboard_syms_path",
- "-ldl",
- ]
+ starboard_syms_path =
+ rebase_path("//starboard/starboard.syms", root_build_dir)
+ ldflags = [
+ "-Wl,--dynamic-list=$starboard_syms_path",
+ "-ldl",
+ ]
- deps = [
- ":elf_loader_sys",
- ":evergreen_info",
- ":sabi_string",
- "//starboard",
- ]
- }
+ deps = [
+ ":elf_loader_sys",
+ ":evergreen_info",
+ ":sabi_string",
+ "//starboard",
+ ]
}
target(gtest_target_type, "elf_loader_test") {
diff --git a/starboard/linux/shared/BUILD.gn b/starboard/linux/shared/BUILD.gn
index 7fe8d4a..ea46558 100644
--- a/starboard/linux/shared/BUILD.gn
+++ b/starboard/linux/shared/BUILD.gn
@@ -14,6 +14,7 @@
import("//starboard/shared/starboard/media/media_tests.gni")
import("//starboard/shared/starboard/player/buildfiles.gni")
+import("//starboard/shared/starboard/player/player_tests.gni")
group("starboard_platform") {
public_deps = [
@@ -455,7 +456,8 @@
target(gtest_target_type, "starboard_platform_tests") {
testonly = true
- sources = media_tests_sources + [ "//starboard/common/test_main.cc" ]
+ sources = media_tests_sources + player_tests_sources +
+ [ "//starboard/common/test_main.cc" ]
configs += [ "//starboard/build/config:starboard_implementation" ]
diff --git a/starboard/linux/shared/configuration_public.h b/starboard/linux/shared/configuration_public.h
index 81fb6b6..98a1ccc 100644
--- a/starboard/linux/shared/configuration_public.h
+++ b/starboard/linux/shared/configuration_public.h
@@ -271,12 +271,6 @@
#define SB_CAN_MAP_EXECUTABLE_MEMORY 1
#if SB_API_VERSION < 12
-// Whether this platform has and should use an growable heap (e.g. with sbrk())
-// to map physical memory to the virtual address space.
-#define SB_HAS_VIRTUAL_REGIONS 0
-#endif // SB_API_VERSION < 12
-
-#if SB_API_VERSION < 12
// Specifies the alignment for IO Buffers, in bytes. Some low-level network APIs
// may require buffers to have a specific alignment, and this is the place to
// specify that.
@@ -289,7 +283,7 @@
#endif // SB_API_VERSION < 12
#if SB_API_VERSION < 12
-// Determines the threshhold of allocation size that should be done with mmap
+// Determines the threshold of allocation size that should be done with mmap
// (if available), rather than allocated within the core heap.
#define SB_DEFAULT_MMAP_THRESHOLD ((size_t)(256 * 1024U))
#endif // SB_API_VERSION < 12
diff --git a/starboard/linux/shared/platform_configuration/BUILD.gn b/starboard/linux/shared/platform_configuration/BUILD.gn
index 9920863..7d23495 100644
--- a/starboard/linux/shared/platform_configuration/BUILD.gn
+++ b/starboard/linux/shared/platform_configuration/BUILD.gn
@@ -20,20 +20,11 @@
ldflags = []
if (is_debug) {
- cflags += [
- "-frtti",
- "-O0",
- ]
+ cflags += [ "-O0" ]
} else if (is_devel) {
- cflags += [
- "-frtti",
- "-O2",
- ]
+ cflags += [ "-O2" ]
} else {
- cflags += [
- "-fno-rtti",
- "-gline-tables-only",
- ]
+ cflags += [ "-gline-tables-only" ]
}
if (is_clang) {
@@ -149,11 +140,13 @@
"_GLIBCXX_DEBUG",
"_LIBCPP_DEBUG=1",
]
+ configs = [ "//build/config/compiler:rtti" ]
} else if (is_devel) {
defines += [
"_GLIBCXX_DEBUG",
"_LIBCPP_DEBUG=0",
]
+ configs = [ "//build/config/compiler:rtti" ]
}
}
diff --git a/starboard/linux/shared/starboard_platform_tests.gypi b/starboard/linux/shared/starboard_platform_tests.gypi
index 45a0d30..53e9370 100644
--- a/starboard/linux/shared/starboard_platform_tests.gypi
+++ b/starboard/linux/shared/starboard_platform_tests.gypi
@@ -18,10 +18,12 @@
'type': '<(gtest_target_type)',
'includes': [
'<(DEPTH)/starboard/shared/starboard/media/media_tests.gypi',
+ '<(DEPTH)/starboard/shared/starboard/player/player_tests.gypi',
],
'sources': [
'<(DEPTH)/starboard/common/test_main.cc',
'<@(media_tests_sources)',
+ '<@(player_tests_sources)',
],
'defines': [
# This allows the tests to include internal only header files.
diff --git a/starboard/linux/x64x11/gcc/6.3/gyp_configuration.py b/starboard/linux/x64x11/gcc/6.3/gyp_configuration.py
index df1a163..80e976f 100644
--- a/starboard/linux/x64x11/gcc/6.3/gyp_configuration.py
+++ b/starboard/linux/x64x11/gcc/6.3/gyp_configuration.py
@@ -14,10 +14,8 @@
"""Starboard Linux X64 X11 gcc 6.3 platform configuration for gyp_cobalt."""
import os
-import subprocess
from starboard.linux.shared import gyp_configuration as shared_configuration
-from starboard.tools import build
from starboard.tools.toolchain import ar
from starboard.tools.toolchain import bash
from starboard.tools.toolchain import clang
@@ -25,6 +23,10 @@
from starboard.tools.toolchain import cp
from starboard.tools.toolchain import touch
+# Directory for GCC 6.3 if it is installed as a system dependency.
+_DEFAULT_GCC_6_3_BIN_DIR = '/usr/bin'
+_DEFAULT_GCC_6_3_LIB_DIR = '/usr/lib/gcc/x86_64-linux-gnu/6.3.0'
+
class LinuxX64X11Gcc63Configuration(shared_configuration.LinuxConfiguration):
"""Starboard Linux platform configuration."""
@@ -33,48 +35,45 @@
platform='linux-x64x11-gcc-6-3',
asan_enabled_by_default=False,
sabi_json_path='starboard/sabi/default/sabi.json'):
- super(LinuxX64X11Gcc63Configuration, self).__init__(
- platform,
- asan_enabled_by_default,
- sabi_json_path)
+ super(LinuxX64X11Gcc63Configuration,
+ self).__init__(platform, asan_enabled_by_default, sabi_json_path)
+ self.toolchain_bin_dir = _DEFAULT_GCC_6_3_BIN_DIR
+ self.toolchain_lib_dir = _DEFAULT_GCC_6_3_LIB_DIR
- self.toolchain_dir = os.path.join(build.GetToolchainsDir(),
- 'x86_64-linux-gnu-gcc-6.3.0', 'gcc')
+ def SetupPlatformTools(self, build_number): # pylint: disable=unused-argument
+ if not (os.path.exists(os.path.join(self.toolchain_bin_dir, 'g++')) and
+ os.path.exists(os.path.join(self.toolchain_bin_dir, 'gcc'))):
+ raise RuntimeError('GCC 6.3 dependency is not present on this system.')
- def SetupPlatformTools(self, build_number):
- # Run the script that ensures gcc 6.3.0 is installed.
- script_path = os.path.dirname(os.path.realpath(__file__))
- subprocess.call(
- os.path.join(script_path, 'download_gcc.sh'), cwd=script_path)
-
- def GetVariables(self, configuration):
+ def GetVariables(self, config_name):
variables = super(LinuxX64X11Gcc63Configuration,
- self).GetVariables(configuration)
+ self).GetVariables(config_name)
variables.update({
'clang': 0,
})
- toolchain_lib_path = os.path.join(self.toolchain_dir, 'lib64')
variables.update({
- 'toolchain_lib_path': toolchain_lib_path,
+ 'toolchain_lib_path': self.toolchain_lib_dir,
})
return variables
def GetEnvironmentVariables(self):
- toolchain_bin_dir = os.path.join(self.toolchain_dir, 'bin')
-
env_variables = {
- 'CC': self.build_accelerator + ' ' + os.path.join(toolchain_bin_dir,
- 'gcc'),
- 'CXX': self.build_accelerator + ' ' + os.path.join(toolchain_bin_dir,
- 'g++'),
- 'CC_HOST': self.build_accelerator + ' ' + os.path.join(
- toolchain_bin_dir, 'gcc'),
- 'CXX_HOST': self.build_accelerator + ' ' + os.path.join(
- toolchain_bin_dir, 'g++'),
+ 'CC':
+ self.build_accelerator + ' ' +
+ os.path.join(self.toolchain_bin_dir, 'gcc'),
+ 'CXX':
+ self.build_accelerator + ' ' +
+ os.path.join(self.toolchain_bin_dir, 'g++'),
+ 'CC_HOST':
+ self.build_accelerator + ' ' +
+ os.path.join(self.toolchain_bin_dir, 'gcc'),
+ 'CXX_HOST':
+ self.build_accelerator + ' ' +
+ os.path.join(self.toolchain_bin_dir, 'g++'),
}
return env_variables
- def GetTargetToolchain(self, **kwargs):
+ def GetTargetToolchain(self, **kwargs): # pylint: disable=unused-argument
environment_variables = self.GetEnvironmentVariables()
cc_path = environment_variables['CC']
cxx_path = environment_variables['CXX']
@@ -92,7 +91,7 @@
bash.Shell(),
]
- def GetHostToolchain(self, **kwargs):
+ def GetHostToolchain(self, **kwargs): # pylint: disable=unused-argument
environment_variables = self.GetEnvironmentVariables()
cc_path = environment_variables['CC_HOST']
cxx_path = environment_variables['CXX_HOST']
diff --git a/starboard/loader_app/BUILD.gn b/starboard/loader_app/BUILD.gn
index cc35c66..481ccc8 100644
--- a/starboard/loader_app/BUILD.gn
+++ b/starboard/loader_app/BUILD.gn
@@ -42,24 +42,22 @@
}
}
-if (can_build_evergreen_loader_apps) {
- target(final_executable_type, "loader_app_sys") {
- if (target_cpu == "x86" || target_cpu == "x64" || target_cpu == "arm" ||
- target_cpu == "arm64") {
- sources = _common_loader_app_sources
+target(final_executable_type, "loader_app_sys") {
+ if (target_cpu == "x86" || target_cpu == "x64" || target_cpu == "arm" ||
+ target_cpu == "arm64") {
+ sources = _common_loader_app_sources
- starboard_syms_path =
- rebase_path("//starboard/starboard.syms", root_build_dir)
- ldflags = [
- "-Wl,--dynamic-list=$starboard_syms_path",
- "-ldl",
- ]
- deps = [
- ":common_loader_app_dependencies",
- "//cobalt/content/fonts:copy_font_data",
- "//starboard/elf_loader:elf_loader_sys",
- ]
- }
+ starboard_syms_path =
+ rebase_path("//starboard/starboard.syms", root_build_dir)
+ ldflags = [
+ "-Wl,--dynamic-list=$starboard_syms_path",
+ "-ldl",
+ ]
+ deps = [
+ ":common_loader_app_dependencies",
+ "//cobalt/content/fonts:copy_font_data",
+ "//starboard/elf_loader:elf_loader_sys",
+ ]
}
}
diff --git a/starboard/nplb/media_buffer_test.cc b/starboard/nplb/media_buffer_test.cc
index 66640dd..10599ce 100644
--- a/starboard/nplb/media_buffer_test.cc
+++ b/starboard/nplb/media_buffer_test.cc
@@ -12,7 +12,12 @@
// See the License for the specific language governing permissions and
// limitations under the License.
+#include <cmath>
+#include <random>
+#include <vector>
+
#include "starboard/media.h"
+#include "starboard/memory.h"
#include "starboard/nplb/performance_helpers.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -38,8 +43,7 @@
kSbMediaVideoCodecNone,
kSbMediaVideoCodecH264, kSbMediaVideoCodecH265, kSbMediaVideoCodecMpeg2,
- kSbMediaVideoCodecTheora, kSbMediaVideoCodecVc1,
- kSbMediaVideoCodecAv1,
+ kSbMediaVideoCodecTheora, kSbMediaVideoCodecVc1, kSbMediaVideoCodecAv1,
kSbMediaVideoCodecVp8, kSbMediaVideoCodecVp9,
};
@@ -47,6 +51,37 @@
kSbMediaTypeAudio, kSbMediaTypeVideo,
};
+// Minimum audio and video budgets required by the 2020 Youtube Software
+// Requirements.
+constexpr int kMinAudioBudget = 5 * 1024 * 1024;
+constexpr int kMinVideoBudget = 30 * 1024 * 1024;
+
+std::vector<void*> TryToAllocateMemory(int size,
+ int allocation_unit,
+ int alignment) {
+ int total_allocated = 0;
+ std::vector<void*> allocated_ptrs;
+ if (allocation_unit != 0) {
+ allocated_ptrs.reserve(std::ceil(size / allocation_unit));
+ }
+ while (total_allocated < size) {
+ // When |allocation_unit| == 0, randomly allocate a size between 100k -
+ // 500k.
+ int allocation_increment = allocation_unit != 0
+ ? allocation_unit
+ : (std::rand() % 500 + 100) * 1024;
+ void* allocated_memory =
+ SbMemoryAllocateAligned(alignment, allocation_increment);
+ EXPECT_NE(allocated_memory, nullptr);
+ if (!allocated_memory) {
+ return allocated_ptrs;
+ }
+ allocated_ptrs.push_back(allocated_memory);
+ total_allocated += allocation_increment;
+ }
+ return allocated_ptrs;
+}
+
} // namespace
TEST(SbMediaBufferTest, VideoCodecs) {
@@ -83,28 +118,60 @@
TEST(SbMediaBufferTest, Alignment) {
for (auto type : kMediaTypes) {
int alignment = SbMediaGetBufferAlignment(type);
- // TODO: This currently accepts 0 or a power of 2. We should disallow 0 here
- // when we change the default value to be 1 instead of 0.
- EXPECT_GE(alignment, 0);
+ EXPECT_GE(alignment, 1);
EXPECT_EQ(alignment & (alignment - 1), 0)
<< "Alignment must always be a power of 2";
}
}
TEST(SbMediaBufferTest, AllocationUnit) {
- // TODO: impose more bounds.
EXPECT_GE(SbMediaGetBufferAllocationUnit(), 0);
+
+ if (SbMediaGetBufferAllocationUnit() != 0) {
+ EXPECT_GE(SbMediaGetBufferAllocationUnit(), 64 * 1024);
+ }
+
+ int allocation_unit = SbMediaGetBufferAllocationUnit();
+ std::vector<void*> allocated_ptrs;
+ int initial_buffer_capacity = SbMediaGetInitialBufferCapacity();
+ if (initial_buffer_capacity > 0) {
+ allocated_ptrs =
+ TryToAllocateMemory(initial_buffer_capacity, allocation_unit, 1);
+ }
+
+ if (!HasNonfatalFailure()) {
+ for (SbMediaType type : kMediaTypes) {
+ int alignment = SbMediaGetBufferAlignment(type);
+ EXPECT_EQ(alignment & (alignment - 1), 0)
+ << "Alignment must always be a power of 2";
+ if (HasNonfatalFailure()) {
+ break;
+ }
+ int media_budget = type == SbMediaType::kSbMediaTypeAudio
+ ? kMinAudioBudget
+ : kMinVideoBudget;
+ std::vector<void*> media_buffer_allocated_memory =
+ TryToAllocateMemory(media_budget, allocation_unit, alignment);
+ allocated_ptrs.insert(allocated_ptrs.end(),
+ media_buffer_allocated_memory.begin(),
+ media_buffer_allocated_memory.end());
+ if (HasNonfatalFailure()) {
+ break;
+ }
+ }
+ }
+
+ for (void* ptr : allocated_ptrs) {
+ SbMemoryFreeAligned(ptr);
+ }
}
TEST(SbMediaBufferTest, AudioBudget) {
- // TODO: refine this lower bound.
- const int kMinAudioBudget = 1 * 1024 * 1024;
- EXPECT_GT(SbMediaGetAudioBufferBudget(), kMinAudioBudget);
+ EXPECT_GE(SbMediaGetAudioBufferBudget(), kMinAudioBudget);
}
TEST(SbMediaBufferTest, GarbageCollectionDurationThreshold) {
- // TODO: impose reasonable bounds here.
- int kMinGarbageCollectionDurationThreshold = 10 * kSbTimeSecond;
+ int kMinGarbageCollectionDurationThreshold = 30 * kSbTimeSecond;
int kMaxGarbageCollectionDurationThreshold = 240 * kSbTimeSecond;
int threshold = SbMediaGetBufferGarbageCollectionDurationThreshold();
EXPECT_GE(threshold, kMinGarbageCollectionDurationThreshold);
@@ -116,7 +183,9 @@
}
TEST(SbMediaBufferTest, MaxCapacity) {
- // TODO: set a reasonable upper bound.
+ // TODO: Limit EXPECT statements to only codecs and resolutions that are
+ // supported by the platform. If unsupported, still call
+ // SbMediaGetMaxBufferCapacity() to ensure there isn't a crash.
for (auto resolution : kVideoResolutions) {
for (auto bits_per_pixel : kBitsPerPixelValues) {
for (auto codec : kVideoCodecs) {
@@ -178,12 +247,10 @@
}
TEST(SbMediaBufferTest, VideoBudget) {
- // TODO: refine this lower bound.
- const int kMinVideoBudget = 1 * 1024 * 1024;
for (auto codec : kVideoCodecs) {
for (auto resolution : kVideoResolutions) {
for (auto bits_per_pixel : kBitsPerPixelValues) {
- EXPECT_GT(SbMediaGetVideoBufferBudget(codec, resolution[0],
+ EXPECT_GE(SbMediaGetVideoBufferBudget(codec, resolution[0],
resolution[1], bits_per_pixel),
kMinVideoBudget);
}
diff --git a/starboard/nplb/player_create_test.cc b/starboard/nplb/player_create_test.cc
index 535d4b9..29d8355 100644
--- a/starboard/nplb/player_create_test.cc
+++ b/starboard/nplb/player_create_test.cc
@@ -78,9 +78,9 @@
TEST_P(SbPlayerTest, SunnyDay) {
SbMediaAudioSampleInfo audio_sample_info =
CreateAudioSampleInfo(kSbMediaAudioCodecAac);
- SbMediaVideoCodec kVideoCodec = kSbMediaVideoCodecH264;
- if (!IsOutputModeSupported(output_mode_, kVideoCodec)) {
+ if (!IsOutputModeSupported(output_mode_, kSbMediaAudioCodecAac,
+ kSbMediaVideoCodecH264)) {
return;
}
@@ -101,9 +101,9 @@
TEST_P(SbPlayerTest, NullCallbacks) {
SbMediaAudioSampleInfo audio_sample_info =
CreateAudioSampleInfo(kSbMediaAudioCodecAac);
- SbMediaVideoCodec kVideoCodec = kSbMediaVideoCodecH264;
- if (!IsOutputModeSupported(output_mode_, kVideoCodec)) {
+ if (!IsOutputModeSupported(output_mode_, kSbMediaAudioCodecAac,
+ kSbMediaVideoCodecH264)) {
return;
}
@@ -160,14 +160,13 @@
}
TEST_P(SbPlayerTest, Audioless) {
- SbMediaVideoCodec kVideoCodec = kSbMediaVideoCodecH264;
-
- if (!IsOutputModeSupported(output_mode_, kVideoCodec)) {
+ if (!IsOutputModeSupported(output_mode_, kSbMediaAudioCodecNone,
+ kSbMediaVideoCodecH264)) {
return;
}
SbPlayer player = CallSbPlayerCreate(
- fake_graphics_context_provider_.window(), kVideoCodec,
+ fake_graphics_context_provider_.window(), kSbMediaVideoCodecH264,
kSbMediaAudioCodecNone, kSbDrmSystemInvalid, NULL /* audio_sample_info */,
"" /* max_video_capabilities */, DummyDeallocateSampleFunc,
DummyDecoderStatusFunc, DummyStatusFunc, DummyErrorFunc,
@@ -183,16 +182,15 @@
TEST_P(SbPlayerTest, AudioOnly) {
SbMediaAudioSampleInfo audio_sample_info =
CreateAudioSampleInfo(kSbMediaAudioCodecAac);
- SbMediaAudioCodec kAudioCodec = kSbMediaAudioCodecAac;
- SbMediaVideoCodec kVideoCodec = kSbMediaVideoCodecH264;
- if (!IsOutputModeSupported(output_mode_, kVideoCodec)) {
+ if (!IsOutputModeSupported(output_mode_, kSbMediaAudioCodecAac,
+ kSbMediaVideoCodecH264)) {
return;
}
SbPlayer player = CallSbPlayerCreate(
fake_graphics_context_provider_.window(), kSbMediaVideoCodecNone,
- kAudioCodec, kSbDrmSystemInvalid, &audio_sample_info,
+ kSbMediaAudioCodecAac, kSbDrmSystemInvalid, &audio_sample_info,
"" /* max_video_capabilities */, DummyDeallocateSampleFunc,
DummyDecoderStatusFunc, DummyStatusFunc, DummyErrorFunc,
NULL /* context */, output_mode_,
@@ -213,13 +211,10 @@
kSbPlayerOutputModeDecodeToTexture, kSbPlayerOutputModePunchOut};
constexpr SbMediaAudioCodec kAudioCodecs[] = {
- kSbMediaAudioCodecNone,
+ kSbMediaAudioCodecNone,
- kSbMediaAudioCodecAac,
- kSbMediaAudioCodecAc3,
- kSbMediaAudioCodecEac3,
- kSbMediaAudioCodecOpus,
- kSbMediaAudioCodecVorbis,
+ kSbMediaAudioCodecAac, kSbMediaAudioCodecAc3, kSbMediaAudioCodecEac3,
+ kSbMediaAudioCodecOpus, kSbMediaAudioCodecVorbis,
};
// TODO: turn this into a macro.
@@ -238,16 +233,11 @@
}
constexpr SbMediaVideoCodec kVideoCodecs[] = {
- kSbMediaVideoCodecNone,
+ kSbMediaVideoCodecNone,
- kSbMediaVideoCodecH264,
- kSbMediaVideoCodecH265,
- kSbMediaVideoCodecMpeg2,
- kSbMediaVideoCodecTheora,
- kSbMediaVideoCodecVc1,
- kSbMediaVideoCodecAv1,
- kSbMediaVideoCodecVp8,
- kSbMediaVideoCodecVp9,
+ kSbMediaVideoCodecH264, kSbMediaVideoCodecH265, kSbMediaVideoCodecMpeg2,
+ kSbMediaVideoCodecTheora, kSbMediaVideoCodecVc1, kSbMediaVideoCodecAv1,
+ kSbMediaVideoCodecVp8, kSbMediaVideoCodecVp9,
};
// TODO: turn this into a macro.
diff --git a/starboard/nplb/player_test_util.cc b/starboard/nplb/player_test_util.cc
index e4d6afd..ddcacf1 100644
--- a/starboard/nplb/player_test_util.cc
+++ b/starboard/nplb/player_test_util.cc
@@ -74,7 +74,8 @@
if (SbMediaCanPlayMimeAndKeySystem(dmp_reader.audio_mime_type().c_str(),
"")) {
for (auto output_mode : kOutputModes) {
- if (IsOutputModeSupported(output_mode, kSbMediaVideoCodecNone)) {
+ if (IsOutputModeSupported(output_mode, dmp_reader.audio_codec(),
+ kSbMediaVideoCodecNone)) {
test_configs.push_back(
std::make_tuple(audio_filename, kEmptyName, output_mode));
}
@@ -90,7 +91,8 @@
continue;
}
for (auto output_mode : kOutputModes) {
- if (IsOutputModeSupported(output_mode, dmp_reader.video_codec())) {
+ if (IsOutputModeSupported(output_mode, kSbMediaAudioCodecNone,
+ dmp_reader.video_codec())) {
test_configs.push_back(
std::make_tuple(kEmptyName, video_filename, output_mode));
}
@@ -173,24 +175,26 @@
#else // SB_HAS(PLAYER_CREATION_AND_OUTPUT_MODE_QUERY_IMPROVEMENT)
- return SbPlayerCreate(
- window, video_codec, audio_codec, kSbDrmSystemInvalid, audio_sample_info,
- max_video_capabilities,
- sample_deallocate_func, decoder_status_func, player_status_func,
- player_error_func, context, output_mode, context_provider);
+ return SbPlayerCreate(window, video_codec, audio_codec, kSbDrmSystemInvalid,
+ audio_sample_info, max_video_capabilities,
+ sample_deallocate_func, decoder_status_func,
+ player_status_func, player_error_func, context,
+ output_mode, context_provider);
#endif // SB_HAS(PLAYER_CREATION_AND_OUTPUT_MODE_QUERY_IMPROVEMENT)
}
bool IsOutputModeSupported(SbPlayerOutputMode output_mode,
- SbMediaVideoCodec codec) {
+ SbMediaAudioCodec audio_codec,
+ SbMediaVideoCodec video_codec) {
#if SB_HAS(PLAYER_CREATION_AND_OUTPUT_MODE_QUERY_IMPROVEMENT)
SbPlayerCreationParam creation_param =
- CreatePlayerCreationParam(kSbMediaAudioCodecNone, codec);
+ CreatePlayerCreationParam(audio_codec, video_codec);
creation_param.output_mode = output_mode;
return SbPlayerGetPreferredOutputMode(&creation_param) == output_mode;
#else // SB_HAS(PLAYER_CREATION_AND_OUTPUT_MODE_QUERY_IMPROVEMENT)
- return SbPlayerOutputModeSupported(output_mode, codec, kSbDrmSystemInvalid);
+ return SbPlayerOutputModeSupported(output_mode, video_codec,
+ kSbDrmSystemInvalid);
#endif // SB_HAS(PLAYER_CREATION_AND_OUTPUT_MODE_QUERY_IMPROVEMENT)
}
diff --git a/starboard/nplb/player_test_util.h b/starboard/nplb/player_test_util.h
index dfb8f11..53503ee 100644
--- a/starboard/nplb/player_test_util.h
+++ b/starboard/nplb/player_test_util.h
@@ -70,7 +70,8 @@
SbDecodeTargetGraphicsContextProvider* context_provider);
bool IsOutputModeSupported(SbPlayerOutputMode output_mode,
- SbMediaVideoCodec codec);
+ SbMediaAudioCodec audio_codec,
+ SbMediaVideoCodec video_codec);
} // namespace nplb
} // namespace starboard
diff --git a/starboard/nplb/player_write_sample_test.cc b/starboard/nplb/player_write_sample_test.cc
index 13977ee..0a5d6fd 100644
--- a/starboard/nplb/player_write_sample_test.cc
+++ b/starboard/nplb/player_write_sample_test.cc
@@ -220,7 +220,9 @@
}
void SbPlayerWriteSampleTest::TearDown() {
- SB_DCHECK(SbPlayerIsValid(player_));
+ if (!SbPlayerIsValid(player_)) {
+ return;
+ }
ASSERT_FALSE(destroy_player_called_);
destroy_player_called_ = true;
diff --git a/docker/precommit_hooks/docker-compose.yml b/starboard/raspi/2/starboard_platform_tests.gyp
similarity index 69%
copy from docker/precommit_hooks/docker-compose.yml
copy to starboard/raspi/2/starboard_platform_tests.gyp
index 6106d19..f01ba52 100644
--- a/docker/precommit_hooks/docker-compose.yml
+++ b/starboard/raspi/2/starboard_platform_tests.gyp
@@ -11,17 +11,8 @@
# 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.
-
-version: '2.4'
-
-services:
- pre-commit:
- build:
- context: .
- dockerfile: Dockerfile
- image: pre-commit
- volumes:
- - ${COBALT_SRC:-../../}:/code/
- environment:
- FROM_REF: ${FROM_REF:-HEAD^1}
- TO_REF: ${TO_REF:-HEAD}
+{
+ 'includes': [
+ '<(DEPTH)/starboard/raspi/shared/starboard_platform_tests.gypi',
+ ],
+}
diff --git a/starboard/raspi/shared/BUILD.gn b/starboard/raspi/shared/BUILD.gn
index 2cc3d1c..d224eda 100644
--- a/starboard/raspi/shared/BUILD.gn
+++ b/starboard/raspi/shared/BUILD.gn
@@ -11,7 +11,9 @@
# 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.
+
import("//starboard/shared/starboard/player/buildfiles.gni")
+import("//starboard/shared/starboard/player/player_tests.gni")
group("starboard_platform") {
public_deps = [ ":starboard_platform_sources" ]
@@ -20,6 +22,8 @@
static_library("starboard_platform_sources") {
check_includes = false
+ has_pedantic_warnings = true
+
sources = [
"//starboard/linux/shared/atomic_public.h",
"//starboard/linux/shared/configuration_constants.cc",
@@ -386,11 +390,7 @@
]
}
- configs += [
- "//starboard/build/config:pedantic_warnings",
- "//starboard/build/config:starboard_implementation",
- ]
- configs -= [ "//starboard/build/config:no_pedantic_warnings" ]
+ configs += [ "//starboard/build/config:starboard_implementation" ]
public_deps = [
":starboard_base_symbolize",
@@ -430,3 +430,18 @@
public_deps = [ "//starboard/elf_loader:evergreen_info" ]
}
+
+target(gtest_target_type, "starboard_platform_tests") {
+ testonly = true
+
+ sources = player_tests_sources + [ "//starboard/common/test_main.cc" ]
+
+ configs += [ "//starboard/build/config:starboard_implementation" ]
+
+ deps = [
+ "//starboard",
+ "//starboard/shared/starboard/player/filter/testing:test_util",
+ "//testing/gmock",
+ "//testing/gtest",
+ ]
+}
diff --git a/starboard/raspi/shared/platform_configuration/BUILD.gn b/starboard/raspi/shared/platform_configuration/BUILD.gn
index fe181d1..b1b060c 100644
--- a/starboard/raspi/shared/platform_configuration/BUILD.gn
+++ b/starboard/raspi/shared/platform_configuration/BUILD.gn
@@ -36,13 +36,10 @@
if (is_debug) {
cflags += [ "-O0" ]
- cflags_cc += [ "-frtti" ]
} else if (is_devel) {
cflags += [ "-O2" ]
- cflags_cc += [ "-frtti" ]
} else {
cflags += [ "-Wno-unused-but-set-variable" ]
- cflags_cc += [ "-fno-rtti" ]
}
ldflags += [
@@ -149,6 +146,10 @@
]
configs = [ "//starboard/raspi/shared/platform_configuration:compiler_flags" ]
+
+ if (is_debug || is_devel) {
+ configs += [ "//build/config/compiler:rtti" ]
+ }
}
config("speed") {
diff --git a/starboard/raspi/shared/platform_configuration/configuration.gni b/starboard/raspi/shared/platform_configuration/configuration.gni
index 4ceaa77..dfa14b8 100644
--- a/starboard/raspi/shared/platform_configuration/configuration.gni
+++ b/starboard/raspi/shared/platform_configuration/configuration.gni
@@ -24,3 +24,5 @@
pedantic_warnings_config_path =
"//starboard/raspi/shared/platform_configuration:pedantic_warnings"
sabi_path = "//starboard/sabi/arm/hardfp/sabi-v$sb_api_version.json"
+
+platform_tests_path = "//starboard/raspi/shared:starboard_platform_tests"
diff --git a/starboard/raspi/shared/starboard_platform_tests.gypi b/starboard/raspi/shared/starboard_platform_tests.gypi
new file mode 100644
index 0000000..782c7cf
--- /dev/null
+++ b/starboard/raspi/shared/starboard_platform_tests.gypi
@@ -0,0 +1,48 @@
+# Copyright 2021 The Cobalt 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.
+{
+ 'targets': [
+ {
+ 'target_name': 'starboard_platform_tests',
+ 'type': '<(gtest_target_type)',
+ 'includes': [
+ '<(DEPTH)/starboard/shared/starboard/player/player_tests.gypi',
+ ],
+ 'sources': [
+ '<(DEPTH)/starboard/common/test_main.cc',
+ '<@(player_tests_sources)',
+ ],
+ 'defines': [
+ # This allows the tests to include internal only header files.
+ 'STARBOARD_IMPLEMENTATION',
+ ],
+ 'dependencies': [
+ '<(DEPTH)/starboard/starboard.gyp:starboard',
+ '<(DEPTH)/testing/gmock.gyp:gmock',
+ '<(DEPTH)/testing/gtest.gyp:gtest',
+ ],
+ },
+ {
+ 'target_name': 'starboard_platform_tests_deploy',
+ 'type': 'none',
+ 'dependencies': [
+ '<(DEPTH)/<(starboard_path)/starboard_platform_tests.gyp:starboard_platform_tests',
+ ],
+ 'variables': {
+ 'executable_name': 'starboard_platform_tests',
+ },
+ 'includes': [ '<(DEPTH)/starboard/build/deploy.gypi' ],
+ },
+ ],
+}
diff --git a/starboard/shared/dlmalloc/page_internal.h b/starboard/shared/dlmalloc/page_internal.h
index e72fd75..e26d509 100644
--- a/starboard/shared/dlmalloc/page_internal.h
+++ b/starboard/shared/dlmalloc/page_internal.h
@@ -27,83 +27,6 @@
extern "C" {
#endif
-// A virtual memory address.
-typedef void* SbPageVirtualMemory;
-
-// Internal Virtual memory API
-//
-// This was designed to provide common wrappers around OS functions relied upon
-// by dlmalloc. However the APIs can also be used for other custom allocators,
-// but, due to platform restrictions, this is not completely generic.
-//
-// When dlmalloc requires memory from the system, it uses two different
-// approaches to get it. It either extends a growing heap, or it uses mmap() to
-// request a bunch of pages from the system.
-//
-// Its default behavior is to place small allocations into a contiguous heap,
-// and allocate large (256K+) blocks with mmap. Separating large blocks from the
-// main heap has advantages for reducing fragmentation.
-//
-// In dlmalloc, extending the heap is called "MORECORE" and, by default on POSIX
-// systems, uses sbrk().
-//
-// Since almost none of our platforms support sbrk(), we implement MORECORE by
-// reserving a large virtual region and giving that to dlmalloc. This region
-// starts off unmapped, i.e. there are no physical pages backing it, so reading
-// or writing from that region is invalid. As dlmalloc requests memory, we
-// allocate physical pages from the OS and map them to the top of the heap,
-// thereby growing the usable heap area. When the heap shrinks, we can unmap
-// those pages and free them back to the OS.
-//
-// mmap(), by contrast, allocates N pages from the OS, and the OS then maps them
-// into some arbitrary virtual address space. There is no guarantee that two
-// consecutive mmap() calls will return a contiguous block.
-//
-// SbMap() is our implementation of mmap(). On platforms such as Linux that
-// actually have mmap(), we call that directly. Otherwise we use
-// platform-specific system allocators.
-//
-// Platforms that support SbMap() must be at least starboard version 12 or
-// enable SB_HAS_MMAP in their configuration_public.h file. dlmalloc is very
-// flexible and if a platform can't implement virtual regions, it will use
-// Map() for all allocations, merging adjacent allocations when it can.
-//
-// If a platform can't use Map(), it will just use MORECORE for everything.
-// Currently we believe a mixture of both provides best behavior, but more
-// testing would be useful.
-//
-// See also dlmalloc_config.h which controls some dlmalloc behavior.
-
-#if SB_API_VERSION < 12 && SB_HAS(VIRTUAL_REGIONS)
-// Reserves a virtual address space |size_bytes| big, without mapping any
-// physical pages to that range, returning a pointer to the beginning of the
-// reserved virtual address range. To get memory that is actually usable and
-// backed by physical memory, a reserved virtual address needs to passed into
-// AllocateAndMap().
-// [Presumably size_bytes should be a multiple of a physical page size? -DG]
-SbPageVirtualMemory SbPageReserveVirtualRegion(size_t size_bytes);
-
-// Releases a virtual address space reserved with ReserveVirtualRegion().
-// [What happens if that address space is wholly or partially mapped? -DG]
-void SbPageReleaseVirtualRegion(SbPageVirtualMemory range_start);
-
-// Allocate |size_bytes| of physical memory and map it to a virtual address
-// range starting at |virtual_address|. |virtual_address| should be a pointer
-// into the range returned by ReserveVirtualRegion().
-int SbPageAllocatePhysicalAndMap(SbPageVirtualMemory virtual_address,
- size_t size_bytes);
-
-// Frees |size_bytes| of physical memory that had been mapped to
-// |virtual_address| and return them to the system. After this,
-// [virtual_address, virtual_address + size_bytes) will not be read/writable.
-int SbPageUnmapAndFreePhysical(SbPageVirtualMemory virtual_address,
- size_t size_bytes);
-
-// How big of a virtual region dlmalloc should allocate.
-size_t SbPageGetVirtualRegionSize();
-#endif // SB_API_VERSION < 12 &&
- // SB_HAS(VIRTUAL_REGIONS)
-
#if SB_API_VERSION >= 12 || SB_HAS(MMAP)
// Allocates |size_bytes| worth of physical memory pages and maps them into an
// available virtual region. On some platforms, |name| appears in the debugger
@@ -157,26 +80,6 @@
// always be a multiple of kSbMemoryPageSize.
size_t SbPageGetMappedBytes();
-// Declaration of the allocator API.
-
-#if defined(ADDRESS_SANITIZER)
-#define SB_ALLOCATOR_PREFIX
-#include <stdlib.h>
-#else
-#define SB_ALLOCATOR_PREFIX dl
-#endif
-
-#define SB_ALLOCATOR_MANGLER_2(prefix, fn) prefix##fn
-#define SB_ALLOCATOR_MANGLER(prefix, fn) SB_ALLOCATOR_MANGLER_2(prefix, fn)
-#define SB_ALLOCATOR(fn) SB_ALLOCATOR_MANGLER(SB_ALLOCATOR_PREFIX, fn)
-
-void SB_ALLOCATOR(_malloc_init)();
-void SB_ALLOCATOR(_malloc_finalize)();
-void* SB_ALLOCATOR(malloc)(size_t size);
-void* SB_ALLOCATOR(memalign)(size_t align, size_t size);
-void* SB_ALLOCATOR(realloc)(void* ptr, size_t size);
-void SB_ALLOCATOR(free)(void* ptr);
-
#ifdef __cplusplus
} // extern "C"
#endif
diff --git a/starboard/shared/dlmalloc/system_get_used_cpu_memory.cc b/starboard/shared/dlmalloc/system_get_used_cpu_memory.cc
deleted file mode 100644
index 2e9a4d3..0000000
--- a/starboard/shared/dlmalloc/system_get_used_cpu_memory.cc
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2017 The Cobalt 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.
-
-#include "starboard/memory.h"
-
-#include "starboard/shared/dlmalloc/page_internal.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Returns the number of bytes obtained from the system. The total
-// number of bytes allocated by malloc, realloc etc., is less than this
-// value. Unlike mallinfo, this function returns only a precomputed
-// result, so can be called frequently to monitor memory consumption.
-// Even if locks are otherwise defined, this function does not use them,
-// so results might not be up to date.
-//
-// See http://gee.cs.oswego.edu/pub/misc/malloc.h for more details.
-size_t SB_ALLOCATOR(malloc_footprint)();
-
-#ifdef __cplusplus
-} // extern "C"
-#endif
-
-int64_t SbSystemGetUsedCPUMemory() {
- return static_cast<int64_t>(SB_ALLOCATOR(malloc_footprint)());
-}
diff --git a/starboard/shared/starboard/application.cc b/starboard/shared/starboard/application.cc
index c54fa31..2d34e10 100644
--- a/starboard/shared/starboard/application.cc
+++ b/starboard/shared/starboard/application.cc
@@ -239,7 +239,7 @@
SB_DCHECK(state_ == kStateUnstarted);
DispatchAndDelete(CreateInitialEvent(kSbEventTypeStart, timestamp));
}
-#else // SB_API_VERSION >= 13
+#else // SB_API_VERSION >= 13
void Application::DispatchStart() {
SB_DCHECK(IsCurrentThread());
SB_DCHECK(state_ == kStateUnstarted || state_ == kStatePreloading);
@@ -253,7 +253,7 @@
SB_DCHECK(state_ == kStateUnstarted);
DispatchAndDelete(CreateInitialEvent(kSbEventTypePreload, timestamp));
}
-#else // SB_API_VERSION >= 13
+#else // SB_API_VERSION >= 13
void Application::DispatchPreload() {
SB_DCHECK(IsCurrentThread());
SB_DCHECK(state_ == kStateUnstarted);
@@ -334,7 +334,6 @@
case kStateStopped:
return true;
case kStateFrozen:
- OnResume();
Inject(new Event(kSbEventTypeUnfreeze, timestamp, NULL, NULL));
Inject(scoped_event.release());
return true;
@@ -370,6 +369,7 @@
case kStateStopped:
return true;
case kStateFrozen:
+ OnResume();
break;
case kStateConcealed:
case kStateBlurred:
@@ -585,7 +585,7 @@
#if SB_API_VERSION >= 13
Application::Event* Application::CreateInitialEvent(SbEventType type,
SbTimeMonotonic timestamp) {
-#else // SB_API_VERSION >= 13
+#else // SB_API_VERSION >= 13
Application::Event* Application::CreateInitialEvent(SbEventType type) {
#endif // SB_API_VERSION >= 13
SB_DCHECK(type == kSbEventTypePreload || type == kSbEventTypeStart);
@@ -615,8 +615,8 @@
} else if (IsStartImmediate()) {
DispatchStart(SbTimeGetMonotonicNow());
}
-#else // SB_API_VERSION >= 13
- if (IsPreloadImmediate()) {
+#else // SB_API_VERSION >= 13
+ if (IsPreloadImmediate()) {
DispatchPreload();
} else if (IsStartImmediate()) {
DispatchStart();
diff --git a/starboard/shared/starboard/media/avc_util.cc b/starboard/shared/starboard/media/avc_util.cc
index aaa677e..81e196b 100644
--- a/starboard/shared/starboard/media/avc_util.cc
+++ b/starboard/shared/starboard/media/avc_util.cc
@@ -38,8 +38,7 @@
if (annex_b_data_size < sizeof(kAnnexBHeader)) {
return false;
}
- return memcmp(annex_b_data, kAnnexBHeader, sizeof(kAnnexBHeader)) ==
- 0;
+ return memcmp(annex_b_data, kAnnexBHeader, sizeof(kAnnexBHeader)) == 0;
}
// UInt8Type can be "uint8_t", or "const uint8_t".
@@ -125,6 +124,26 @@
<< "AVC parameter set NALUs not found.";
}
+std::vector<uint8_t> AvcParameterSets::GetAllSpses() const {
+ std::vector<uint8_t> result;
+ for (const auto& parameter_set : parameter_sets_) {
+ if (parameter_set[4] == kSpsStartCode) {
+ result.insert(result.end(), parameter_set.begin(), parameter_set.end());
+ }
+ }
+ return result;
+}
+
+std::vector<uint8_t> AvcParameterSets::GetAllPpses() const {
+ std::vector<uint8_t> result;
+ for (const auto& parameter_set : parameter_sets_) {
+ if (parameter_set[4] == kPpsStartCode) {
+ result.insert(result.end(), parameter_set.begin(), parameter_set.end());
+ }
+ }
+ return result;
+}
+
AvcParameterSets AvcParameterSets::ConvertTo(Format new_format) const {
if (format_ == new_format) {
return *this;
@@ -204,7 +223,7 @@
avcc_destination[2] = static_cast<uint8_t>((payload_size & 0xff00) >> 8);
avcc_destination[3] = static_cast<uint8_t>(payload_size & 0xff);
memcpy(avcc_destination + kAvccLengthInBytes,
- last_source + kAnnexBHeaderSizeInBytes, payload_size);
+ last_source + kAnnexBHeaderSizeInBytes, payload_size);
avcc_destination += annex_b_source - last_source;
last_source = annex_b_source;
}
diff --git a/starboard/shared/starboard/media/avc_util.h b/starboard/shared/starboard/media/avc_util.h
index c9d7931..7def624 100644
--- a/starboard/shared/starboard/media/avc_util.h
+++ b/starboard/shared/starboard/media/avc_util.h
@@ -83,6 +83,9 @@
}
size_t combined_size_in_bytes() const { return combined_size_in_bytes_; }
+ std::vector<uint8_t> GetAllSpses() const;
+ std::vector<uint8_t> GetAllPpses() const;
+
AvcParameterSets ConvertTo(Format new_format) const;
bool operator==(const AvcParameterSets& that) const;
diff --git a/starboard/shared/starboard/media/media_util.cc b/starboard/shared/starboard/media/media_util.cc
index ab3db04..786e284 100644
--- a/starboard/shared/starboard/media/media_util.cc
+++ b/starboard/shared/starboard/media/media_util.cc
@@ -221,7 +221,7 @@
if (audio_specific_config_size > 0) {
audio_specific_config_storage.resize(audio_specific_config_size);
memcpy(audio_specific_config_storage.data(), audio_specific_config,
- audio_specific_config_size);
+ audio_specific_config_size);
audio_specific_config = audio_specific_config_storage.data();
}
#if SB_HAS(PLAYER_CREATION_AND_OUTPUT_MODE_QUERY_IMPROVEMENT)
@@ -310,6 +310,51 @@
return true;
}
+bool IsSDRVideo(const char* mime) {
+ SB_DCHECK(mime);
+
+ if (!mime) {
+ SB_LOG(WARNING) << mime << " is empty, assuming sdr video.";
+ return true;
+ }
+
+ MimeType mime_type(mime);
+ if (!mime_type.is_valid()) {
+ SB_LOG(WARNING) << mime << " is not a valid mime type, assuming sdr video.";
+ return true;
+ }
+ const std::vector<std::string> codecs = mime_type.GetCodecs();
+ if (codecs.empty()) {
+ SB_LOG(WARNING) << mime << " contains no codecs, assuming sdr video.";
+ return true;
+ }
+ if (codecs.size() > 1) {
+ SB_LOG(WARNING) << mime
+ << " contains more than one codecs, assuming sdr video.";
+ return true;
+ }
+
+ SbMediaVideoCodec video_codec;
+ int profile = -1;
+ int level = -1;
+ int bit_depth = 8;
+ SbMediaPrimaryId primary_id = kSbMediaPrimaryIdUnspecified;
+ SbMediaTransferId transfer_id = kSbMediaTransferIdUnspecified;
+ SbMediaMatrixId matrix_id = kSbMediaMatrixIdUnspecified;
+
+ if (!ParseVideoCodec(codecs[0].c_str(), &video_codec, &profile, &level,
+ &bit_depth, &primary_id, &transfer_id, &matrix_id)) {
+ SB_LOG(WARNING) << "ParseVideoCodec() failed on mime: " << mime
+ << ", assuming sdr video.";
+ return true;
+ }
+
+ SB_DCHECK(video_codec != kSbMediaVideoCodecNone);
+ // TODO: Consider to consolidate the two IsSDRVideo() implementations by
+ // calling IsSDRVideo(bit_depth, primary_id, transfer_id, matrix_id).
+ return bit_depth == 8;
+}
+
SbMediaTransferId GetTransferIdFromString(const std::string& transfer_id) {
if (transfer_id == "bt709") {
return kSbMediaTransferIdBt709;
@@ -459,8 +504,7 @@
left.samples_per_second != right.samples_per_second ||
left.number_of_channels != right.number_of_channels ||
left.audio_specific_config_size != right.audio_specific_config_size ||
- memcmp(left.audio_specific_config,
- right.audio_specific_config,
+ memcmp(left.audio_specific_config, right.audio_specific_config,
left.audio_specific_config_size) != 0;
}
@@ -471,8 +515,7 @@
bool operator==(const SbMediaColorMetadata& metadata_1,
const SbMediaColorMetadata& metadata_2) {
- return memcmp(&metadata_1, &metadata_2,
- sizeof(SbMediaColorMetadata)) == 0;
+ return memcmp(&metadata_1, &metadata_2, sizeof(SbMediaColorMetadata)) == 0;
}
bool operator==(const SbMediaVideoSampleInfo& sample_info_1,
@@ -489,7 +532,7 @@
return false;
}
if (strcmp(sample_info_1.max_video_capabilities,
- sample_info_2.max_video_capabilities) != 0) {
+ sample_info_2.max_video_capabilities) != 0) {
return false;
}
#endif // SB_HAS(PLAYER_CREATION_AND_OUTPUT_MODE_QUERY_IMPROVEMENT)
diff --git a/starboard/shared/starboard/media/media_util.h b/starboard/shared/starboard/media/media_util.h
index 3f43cd5..a0ee728 100644
--- a/starboard/shared/starboard/media/media_util.h
+++ b/starboard/shared/starboard/media/media_util.h
@@ -58,6 +58,7 @@
SbMediaPrimaryId primary_id,
SbMediaTransferId transfer_id,
SbMediaMatrixId matrix_id);
+bool IsSDRVideo(const char* mime);
// Turns |eotf| into value of SbMediaTransferId. If |eotf| isn't recognized the
// function returns kSbMediaTransferIdReserved0.
diff --git a/starboard/shared/starboard/player/job_queue.cc b/starboard/shared/starboard/player/job_queue.cc
index 614535e..82c5ebe 100644
--- a/starboard/shared/starboard/player/job_queue.cc
+++ b/starboard/shared/starboard/player/job_queue.cc
@@ -96,11 +96,11 @@
bool job_finished = false;
- Schedule(std::bind([&]() {
+ Schedule([&]() {
ScopedLock lock(mutex_);
job_finished = true;
condition_.Broadcast();
- }));
+ });
ScopedLock lock(mutex_);
while (!job_finished && !stopped_) {
@@ -197,7 +197,7 @@
bool is_first_job = time_to_job_record_map_.empty() ||
time_to_run_job < time_to_job_record_map_.begin()->first;
- time_to_job_record_map_.insert(std::make_pair(time_to_run_job, job_record));
+ time_to_job_record_map_.insert({time_to_run_job, std::move(job_record)});
if (is_first_job) {
condition_.Broadcast();
}
@@ -262,7 +262,7 @@
if (delay > 0) {
return false;
}
- job_record = first_delayed_job->second;
+ job_record = std::move(first_delayed_job->second);
time_to_job_record_map_.erase(first_delayed_job);
}
diff --git a/starboard/shared/starboard/player/job_queue.h b/starboard/shared/starboard/player/job_queue.h
index 1494872..f45949f 100644
--- a/starboard/shared/starboard/player/job_queue.h
+++ b/starboard/shared/starboard/player/job_queue.h
@@ -15,8 +15,6 @@
#ifndef STARBOARD_SHARED_STARBOARD_PLAYER_JOB_QUEUE_H_
#define STARBOARD_SHARED_STARBOARD_PLAYER_JOB_QUEUE_H_
-// TODO: We need unit tests for JobQueue and JobThread.
-
#include <functional>
#include <map>
#include <utility>
@@ -72,11 +70,7 @@
SB_DCHECK(job_queue);
}
JobOwner(const JobOwner&) = delete;
- ~JobOwner() {
- if (job_queue_) {
- CancelPendingJobs();
- }
- }
+ ~JobOwner() { CancelPendingJobs(); }
bool BelongsToCurrentThread() const {
return job_queue_->BelongsToCurrentThread();
@@ -92,12 +86,16 @@
void RemoveJobByToken(JobToken job_token) {
return job_queue_->RemoveJobByToken(job_token);
}
- void CancelPendingJobs() { job_queue_->RemoveJobsByOwner(this); }
+ void CancelPendingJobs() {
+ if (job_queue_) {
+ job_queue_->RemoveJobsByOwner(this);
+ }
+ }
protected:
enum DetachedState { kDetached };
- explicit JobOwner(DetachedState detached_state) : job_queue_(NULL) {
+ explicit JobOwner(DetachedState detached_state) : job_queue_(nullptr) {
SB_DCHECK(detached_state == kDetached);
}
@@ -106,10 +104,21 @@
// Note that this operation is not thread safe. It is the caller's
// responsibility to ensure that concurrency hasn't happened yet.
void AttachToCurrentThread() {
- SB_DCHECK(job_queue_ == NULL);
+ SB_DCHECK(job_queue_ == nullptr);
job_queue_ = JobQueue::current();
}
+ // If a class implementing JobOwner also holds the current thread JobQueue,
+ // that JobQueue will get deleted before the JobOwner dtor runs, which
+ // accesses job_queue_. To avoid making calls on a destroyed object
+ // job_queue_ must be detached before the subclass is destroyed.
+ void DetachFromCurrentThread() {
+ SB_DCHECK(job_queue_ != nullptr);
+ SB_DCHECK(BelongsToCurrentThread());
+ CancelPendingJobs();
+ job_queue_ = nullptr;
+ }
+
private:
JobQueue* job_queue_;
};
diff --git a/starboard/shared/starboard/player/job_queue_test.cc b/starboard/shared/starboard/player/job_queue_test.cc
new file mode 100644
index 0000000..53578cf
--- /dev/null
+++ b/starboard/shared/starboard/player/job_queue_test.cc
@@ -0,0 +1,182 @@
+// Copyright 2021 The Cobalt 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.
+
+#include "starboard/shared/starboard/player/job_queue.h"
+
+#include <atomic>
+#include <vector>
+
+#include "starboard/thread.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace starboard {
+namespace shared {
+namespace starboard {
+namespace player {
+
+namespace {
+
+using ::testing::ElementsAre;
+
+// Require at least millisecond-level precision.
+const SbTime kPrecision = kSbTimeMillisecond;
+
+class JobQueueTest
+ : public ::testing::Test,
+ protected ::starboard::shared::starboard::player::JobQueue::JobOwner {
+ public:
+ JobQueueTest() : JobOwner(kDetached) {}
+ ~JobQueueTest() {}
+ // Create a JobQueue for use on the current thread.
+ JobQueue job_queue_;
+};
+
+TEST_F(JobQueueTest, OwnedScheduledJobsAreExecutedInOrder) {
+ AttachToCurrentThread();
+
+ std::vector<int> values;
+ Schedule([&]() { values.push_back(1); });
+ Schedule([&]() { values.push_back(2); });
+ Schedule([&]() { values.push_back(3); });
+ Schedule([&]() { values.push_back(4); }, 1 * kPrecision);
+ Schedule([&]() { values.push_back(5); }, 1 * kPrecision);
+ Schedule([&]() { values.push_back(6); }, 1 * kPrecision);
+ Schedule([&]() { values.push_back(7); }, 2 * kPrecision);
+ Schedule([&]() { values.push_back(8); }, 3 * kPrecision);
+
+ // Sleep past the last scheduled job.
+ SbThreadSleep(4 * kPrecision);
+ job_queue_.RunUntilIdle();
+
+ EXPECT_THAT(values, ElementsAre(1, 2, 3, 4, 5, 6, 7, 8));
+ DetachFromCurrentThread();
+}
+
+TEST_F(JobQueueTest, OwnedJobsAreRemovedWhenOwnerGoesOutOfScope) {
+ std::atomic_bool job_1 = {false}, job_2 = {false};
+ {
+ JobQueue::JobOwner job_owner(&job_queue_);
+ job_owner.Schedule([&]() { job_1 = true; });
+ job_queue_.Schedule([&]() { job_2 = true; });
+ }
+ // Execute pending jobs.
+ job_queue_.RunUntilIdle();
+
+ // Job 1 was canceled due to job_owner going out of scope.
+ EXPECT_FALSE(job_1);
+ // Job 2 should have run as it was not owned by job_owner.
+ EXPECT_TRUE(job_2);
+}
+
+TEST_F(JobQueueTest, CancelPendingJobsCancelsPendingJobs) {
+ AttachToCurrentThread();
+ std::atomic_bool job_1 = {false}, job_2 = {false};
+
+ Schedule([&]() { job_1 = true; });
+ job_queue_.Schedule([&]() { job_2 = true; });
+
+ // Cancel the pending owned job (job 1).
+ CancelPendingJobs();
+
+ // Execute any remaining pending jobs.
+ job_queue_.RunUntilIdle();
+
+ // Job 1 was owned by |this| and should have been canceled.
+ EXPECT_FALSE(job_1);
+ // Job 2 should have run.
+ EXPECT_TRUE(job_2);
+ DetachFromCurrentThread();
+}
+
+TEST_F(JobQueueTest, RemovedJobsAreRemoved) {
+ std::atomic_bool job_1 = {false}, job_2 = {false};
+ auto job_token_1 = job_queue_.Schedule([&]() { job_1 = true; });
+ auto job_token_2 = job_queue_.Schedule([&]() { job_2 = true; });
+
+ // Cancel job 1.
+ job_queue_.RemoveJobByToken(job_token_1);
+
+ job_queue_.RunUntilIdle();
+
+ // Job 1 should have been canceled.
+ EXPECT_FALSE(job_1);
+ EXPECT_TRUE(job_2);
+
+ // Should be a no-op since job 2 already ran.
+ job_queue_.RemoveJobByToken(job_token_2);
+}
+
+TEST_F(JobQueueTest, RunUntilStoppedExecutesAllRemainingJobs) {
+ SbTimeMonotonic start = SbTimeGetMonotonicNow();
+ std::atomic_bool job_1 = {false}, job_2 = {false}, job_3 = {false};
+ job_queue_.Schedule([&job_1]() { job_1 = true; });
+ job_queue_.Schedule([&job_2]() { job_2 = true; }, 1 * kPrecision);
+ job_queue_.Schedule([&job_3]() { job_3 = true; }, 2 * kPrecision);
+ job_queue_.Schedule([&]() { job_queue_.StopSoon(); }, 3 * kPrecision);
+
+ job_queue_.RunUntilIdle();
+ // Job 1 should have been executed.
+ EXPECT_TRUE(job_1);
+
+ job_queue_.RunUntilStopped();
+
+ // All other pending jobs should have run.
+ EXPECT_TRUE(job_2);
+ EXPECT_TRUE(job_3);
+
+ // Time passed should at least be as long as the delay of the last job.
+ EXPECT_GE(SbTimeGetMonotonicNow() - start, 3 * kPrecision);
+}
+
+TEST_F(JobQueueTest, JobsAreMovedAndNotCopied) {
+ struct MoveMe {
+ public:
+ MoveMe() {}
+ MoveMe(MoveMe const& other) {
+ copied = true;
+ moved = other.moved;
+ }
+ MoveMe(MoveMe&& other) {
+ copied = other.copied;
+ moved = true;
+ }
+
+ bool copied = false;
+ bool moved = false;
+ };
+
+ std::atomic_bool moved = {false}, copied = {false};
+ MoveMe move_me;
+ auto job = [ move_me = std::move(move_me), &moved, &copied ]() {
+ moved = move_me.moved;
+ copied = move_me.copied;
+ };
+ job_queue_.Schedule(std::move(job));
+ job_queue_.RunUntilIdle();
+
+ EXPECT_FALSE(copied);
+ EXPECT_TRUE(moved);
+}
+
+TEST_F(JobQueueTest, QueueBelongsToCorrectThread) {
+ EXPECT_EQ(&job_queue_, JobQueue::current());
+ EXPECT_TRUE(job_queue_.BelongsToCurrentThread());
+}
+
+} // namespace
+} // namespace player
+} // namespace starboard
+} // namespace shared
+} // namespace starboard
diff --git a/starboard/shared/starboard/player/job_thread.cc b/starboard/shared/starboard/player/job_thread.cc
index bf22fcf..b4828e1 100644
--- a/starboard/shared/starboard/player/job_thread.cc
+++ b/starboard/shared/starboard/player/job_thread.cc
@@ -49,14 +49,19 @@
}
JobThread::~JobThread() {
- job_queue_->Schedule(std::bind(&JobQueue::StopSoon, job_queue_.get()));
- SbThreadJoin(thread_, NULL);
+ // TODO: There is a potential race condition here since job_queue_ can get
+ // reset if it's is stopped while this dtor is running. Thus, avoid stopping
+ // job_queue_ before JobThread is destructed.
+ if (job_queue_) {
+ job_queue_->Schedule(std::bind(&JobQueue::StopSoon, job_queue_.get()));
+ }
+ SbThreadJoin(thread_, nullptr);
}
// static
void* JobThread::ThreadEntryPoint(void* context) {
ThreadParam* param = static_cast<ThreadParam*>(context);
- SB_DCHECK(param != NULL);
+ SB_DCHECK(param != nullptr);
JobThread* job_thread = param->job_thread;
{
ScopedLock scoped_lock(param->mutex);
@@ -64,13 +69,15 @@
param->condition_variable.Signal();
}
job_thread->RunLoop();
- return NULL;
+ return nullptr;
}
void JobThread::RunLoop() {
SB_DCHECK(job_queue_->BelongsToCurrentThread());
job_queue_->RunUntilStopped();
+ // TODO: Investigate removing this line to avoid the race condition in the
+ // dtor.
job_queue_.reset();
}
diff --git a/starboard/shared/starboard/player/job_thread.h b/starboard/shared/starboard/player/job_thread.h
index 4c9b66f..c6ae99c 100644
--- a/starboard/shared/starboard/player/job_thread.h
+++ b/starboard/shared/starboard/player/job_thread.h
@@ -55,16 +55,22 @@
return job_queue_->Schedule(job, delay);
}
+
JobQueue::JobToken Schedule(JobQueue::Job&& job, SbTimeMonotonic delay = 0) {
SB_DCHECK(job_queue_);
return job_queue_->Schedule(std::move(job), delay);
}
+
void ScheduleAndWait(const JobQueue::Job& job) {
SB_DCHECK(job_queue_);
job_queue_->ScheduleAndWait(job);
}
+
+ // TODO: Calling ScheduleAndWait with a call to JobQueue::StopSoon will cause
+ // heap-use-after-free errors in ScheduleAndWait due to JobQueue dtor
+ // occasionally running before ScheduleAndWait has finished.
void ScheduleAndWait(JobQueue::Job&& job) {
SB_DCHECK(job_queue_);
diff --git a/starboard/shared/starboard/player/job_thread_test.cc b/starboard/shared/starboard/player/job_thread_test.cc
new file mode 100644
index 0000000..961b070
--- /dev/null
+++ b/starboard/shared/starboard/player/job_thread_test.cc
@@ -0,0 +1,170 @@
+// Copyright 2021 The Cobalt 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.
+
+#include "starboard/shared/starboard/player/job_thread.h"
+
+#include <atomic>
+#include <vector>
+
+#include "starboard/shared/starboard/player/job_queue.h"
+#include "starboard/thread.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace starboard {
+namespace shared {
+namespace starboard {
+namespace player {
+
+namespace {
+
+using ::testing::ElementsAre;
+
+// Require at least millisecond-level precision.
+constexpr SbTime kPrecision = kSbTimeMillisecond;
+
+void ExecutePendingJobs(JobThread* job_thread) {
+ job_thread->ScheduleAndWait([]() {});
+}
+
+TEST(JobThreadTest, ScheduledJobsAreExecutedInOrder) {
+ std::vector<int> values;
+ JobThread job_thread{"JobThreadTests"};
+ job_thread.Schedule([&]() { values.push_back(1); });
+ job_thread.Schedule([&]() { values.push_back(2); });
+ job_thread.Schedule([&]() { values.push_back(3); });
+ job_thread.Schedule([&]() { values.push_back(4); }, 1 * kPrecision);
+ job_thread.Schedule([&]() { values.push_back(5); }, 1 * kPrecision);
+ job_thread.Schedule([&]() { values.push_back(6); }, 1 * kPrecision);
+ job_thread.Schedule([&]() { values.push_back(7); }, 2 * kPrecision);
+ job_thread.Schedule([&]() { values.push_back(8); }, 3 * kPrecision);
+
+ // Sleep past the last scheduled job.
+ SbThreadSleep(4 * kPrecision);
+
+ ExecutePendingJobs(&job_thread);
+
+ EXPECT_THAT(values, ElementsAre(1, 2, 3, 4, 5, 6, 7, 8));
+}
+
+TEST(JobThreadTest, ScheduleAndWaitWaits) {
+ SbTimeMonotonic start = SbTimeGetMonotonicNow();
+ std::atomic_bool job_1 = {false};
+ JobThread job_thread{"JobThreadTests"};
+ job_thread.ScheduleAndWait([&]() {
+ SbThreadSleep(1 * kPrecision);
+ job_1 = true;
+ });
+ // Verify that the job ran and that it took at least as long as it slept.
+ EXPECT_TRUE(job_1);
+ EXPECT_GE(SbTimeGetMonotonicNow() - start, 1 * kPrecision);
+}
+
+TEST(JobThreadTest, ScheduledJobsShouldNotExecuteAfterGoingOutOfScope) {
+ std::atomic_int counter = {0};
+ {
+ JobThread job_thread{"JobThreadTests"};
+ std::function<void()> job = [&]() {
+ counter++;
+ job_thread.Schedule(job, 2 * kPrecision);
+ };
+ job_thread.Schedule(job);
+
+ // Wait for the job to run at least once and reschedule itself.
+ SbThreadSleep(1 * kPrecision);
+ ExecutePendingJobs(&job_thread);
+ }
+ int end_value = counter;
+ EXPECT_GE(counter, 1);
+
+ // Sleep past two more (potential) executions and verify there were none.
+ SbThreadSleep(4 * kPrecision);
+ EXPECT_EQ(counter, end_value);
+}
+
+TEST(JobThreadTest, CanceledJobsAreCanceled) {
+ std::atomic_int counter_1 = {0}, counter_2 = {0};
+ JobQueue::JobToken job_token_1, job_token_2;
+
+ JobThread job_thread{"JobThreadTests"};
+ std::function<void()> job_1 = [&]() {
+ counter_1++;
+ job_token_1 = job_thread.Schedule(job_1);
+ };
+ std::function<void()> job_2 = [&]() {
+ counter_2++;
+ job_token_2 = job_thread.Schedule(job_2);
+ };
+
+ job_token_1 = job_thread.Schedule(job_1);
+ job_token_2 = job_thread.Schedule(job_2);
+
+ // Wait for the scheduled jobs to at least run once.
+ ExecutePendingJobs(&job_thread);
+
+ // Cancel job 1 and grab the current counter values.
+ job_thread.ScheduleAndWait(
+ [&]() { job_thread.RemoveJobByToken(job_token_1); });
+ int checkpoint_1 = counter_1;
+ int checkpoint_2 = counter_2;
+
+ // Sleep and wait for pending jobs to run.
+ SbThreadSleep(1 * kPrecision);
+ ExecutePendingJobs(&job_thread);
+
+ // Job 1 should not have run again.
+ EXPECT_EQ(counter_1, checkpoint_1);
+
+ // Job 2 should have continued running.
+ EXPECT_GT(counter_2, checkpoint_2);
+
+ // Cancel job 2 to avoid it scheduling itself during destruction.
+ job_thread.ScheduleAndWait(
+ [&]() { job_thread.RemoveJobByToken(job_token_2); });
+}
+
+TEST(JobThreadTest, QueueBelongsToCorrectThread) {
+ JobThread job_thread{"JobThreadTests"};
+ JobQueue job_queue;
+
+ bool belongs_to_job_thread = false;
+ bool belongs_to_main_thread = false;
+
+ // Schedule in JobQueue owned by job thread.
+ job_thread.ScheduleAndWait([&]() {
+ belongs_to_job_thread = job_thread.BelongsToCurrentThread();
+ belongs_to_main_thread = job_queue.BelongsToCurrentThread();
+ });
+
+ EXPECT_TRUE(belongs_to_job_thread);
+ EXPECT_FALSE(belongs_to_main_thread);
+
+ belongs_to_job_thread = belongs_to_main_thread = false;
+
+ // Schedule in JobQueue owned by main thread.
+ job_queue.Schedule([&]() {
+ belongs_to_job_thread = job_thread.BelongsToCurrentThread();
+ belongs_to_main_thread = job_queue.BelongsToCurrentThread();
+ });
+
+ job_queue.RunUntilIdle();
+ EXPECT_FALSE(belongs_to_job_thread);
+ EXPECT_TRUE(belongs_to_main_thread);
+}
+
+} // namespace
+} // namespace player
+} // namespace starboard
+} // namespace shared
+} // namespace starboard
diff --git a/docker/precommit_hooks/docker-compose.yml b/starboard/shared/starboard/player/player_tests.gni
similarity index 69%
copy from docker/precommit_hooks/docker-compose.yml
copy to starboard/shared/starboard/player/player_tests.gni
index 6106d19..e9ea0ac 100644
--- a/docker/precommit_hooks/docker-compose.yml
+++ b/starboard/shared/starboard/player/player_tests.gni
@@ -12,16 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-version: '2.4'
-
-services:
- pre-commit:
- build:
- context: .
- dockerfile: Dockerfile
- image: pre-commit
- volumes:
- - ${COBALT_SRC:-../../}:/code/
- environment:
- FROM_REF: ${FROM_REF:-HEAD^1}
- TO_REF: ${TO_REF:-HEAD}
+player_tests_sources = [
+ "//starboard/shared/starboard/player/job_queue_test.cc",
+ "//starboard/shared/starboard/player/job_thread_test.cc",
+]
diff --git a/docker/precommit_hooks/docker-compose.yml b/starboard/shared/starboard/player/player_tests.gypi
similarity index 65%
copy from docker/precommit_hooks/docker-compose.yml
copy to starboard/shared/starboard/player/player_tests.gypi
index 6106d19..1ad36ff 100644
--- a/docker/precommit_hooks/docker-compose.yml
+++ b/starboard/shared/starboard/player/player_tests.gypi
@@ -12,16 +12,13 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-version: '2.4'
-
-services:
- pre-commit:
- build:
- context: .
- dockerfile: Dockerfile
- image: pre-commit
- volumes:
- - ${COBALT_SRC:-../../}:/code/
- environment:
- FROM_REF: ${FROM_REF:-HEAD^1}
- TO_REF: ${TO_REF:-HEAD}
+{
+ 'variables': {
+ # This will be included by 'starboard_platform_tests.gyp' so full path names
+ # have to be used here.
+ 'player_tests_sources': [
+ '<(DEPTH)/starboard/shared/starboard/player/job_queue_test.cc',
+ '<(DEPTH)/starboard/shared/starboard/player/job_thread_test.cc',
+ ],
+ },
+}
diff --git a/starboard/stub/platform_configuration/BUILD.gn b/starboard/stub/platform_configuration/BUILD.gn
index a5bdb8f..e75f459 100644
--- a/starboard/stub/platform_configuration/BUILD.gn
+++ b/starboard/stub/platform_configuration/BUILD.gn
@@ -25,18 +25,13 @@
}
if (is_debug) {
- cflags += [
- "-frtti",
- "-O0",
- ]
+ cflags += [ "-O0" ]
+ configs += [ "//build/config/compiler:rtti" ]
} else if (is_devel) {
- cflags += [
- "-frtti",
- "-O2",
- ]
+ cflags += [ "-O2" ]
+ configs += [ "//build/config/compiler:rtti" ]
} else {
cflags += [
- "-fno-rtti",
"-O2",
"-gline-tables-only",
]
diff --git a/starboard/tools/app_launcher_packager.py b/starboard/tools/app_launcher_packager.py
index 37a1e80..0420583 100644
--- a/starboard/tools/app_launcher_packager.py
+++ b/starboard/tools/app_launcher_packager.py
@@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-"""Extracts python files and writes platforms information.
+"""Extracts files and writes platforms information.
This script extracts the app launcher scripts (and all their dependencies) from
the Cobalt source tree, and then packages them into a user-specified location so
@@ -39,10 +39,16 @@
from starboard.tools import port_symlink
import starboard.tools.platform
-# Default python directories to app launcher resources.
-_INCLUDE_FILE_PATTERNS = [('cobalt', '*.py'), ('starboard', '*.py'),
- ('starboard', '*.pfx'),
- ('starboard/tools', 'platform.py.template')]
+# Default directories to app launcher resources.
+_INCLUDE_FILE_PATTERNS = [
+ ('cobalt', '*.py'),
+ ('starboard', '*.py'),
+ ('starboard', '*.pfx'),
+ ('starboard/tools', 'platform.py.template'),
+ # Just match everything since the Evergreen tests are written using shell
+ # scripts and html files.
+ ('starboard/evergreen/testing', '*')
+]
_INCLUDE_BLACK_BOX_TESTS_PATTERNS = [
# Black box and web platform tests have non-py assets, so everything
diff --git a/third_party/crashpad/third_party/libfuzzer/BUILD.gn b/third_party/crashpad/third_party/libfuzzer/BUILD.gn
deleted file mode 100644
index ac815da..0000000
--- a/third_party/crashpad/third_party/libfuzzer/BUILD.gn
+++ /dev/null
@@ -1,49 +0,0 @@
-# Copyright 2018 The Crashpad 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.
-
-source_set("libfuzzer") {
- if (crashpad_use_libfuzzer) {
- sources = [
- "src/FuzzerClangCounters.cpp",
- "src/FuzzerCrossOver.cpp",
- "src/FuzzerDriver.cpp",
- "src/FuzzerExtFunctionsDlsym.cpp",
- "src/FuzzerExtFunctionsDlsymWin.cpp",
- "src/FuzzerExtFunctionsWeak.cpp",
- "src/FuzzerExtFunctionsWeakAlias.cpp",
- "src/FuzzerExtraCounters.cpp",
- "src/FuzzerIO.cpp",
- "src/FuzzerIOPosix.cpp",
- "src/FuzzerIOWindows.cpp",
- "src/FuzzerLoop.cpp",
- "src/FuzzerMain.cpp",
- "src/FuzzerMerge.cpp",
- "src/FuzzerMutate.cpp",
- "src/FuzzerSHA1.cpp",
- "src/FuzzerShmemPosix.cpp",
- "src/FuzzerShmemWindows.cpp",
- "src/FuzzerTracePC.cpp",
- "src/FuzzerUtil.cpp",
- "src/FuzzerUtilDarwin.cpp",
- "src/FuzzerUtilLinux.cpp",
- "src/FuzzerUtilPosix.cpp",
- "src/FuzzerUtilWindows.cpp",
- ]
-
- configs -= [
- "//third_party/mini_chromium/mini_chromium/build:Wexit_time_destructors",
- "//build:crashpad_fuzzer_flags",
- ]
- }
-}
diff --git a/third_party/freetype2/docs/reference/README b/third_party/freetype2/docs/reference/README
deleted file mode 100644
index 3ffcfc0..0000000
--- a/third_party/freetype2/docs/reference/README
+++ /dev/null
@@ -1,35 +0,0 @@
-After saying `make refdoc' or `make refdoc-venv' the `site/' directory
-contains the FreeType API reference. You need python and pip to make this
-target.
-
-There are two ways to generate the documentation:
-
-1. Using `make refdoc':
-
- - Ensure `python' and `pip' are available.
- - Install pip package `docwriter' with `pip install --user docwriter'.
- - Make target with `make refdoc'.
- - This target can be run offline once required packages are installed.
-
-2. Using `make refdoc-venv' (requires internet access):
-
- - Ensure `python', `pip' and python package `virtualenv' are available.
- - Make target with `make refdoc-venv'.
- - This may or may not require internet access every time depending on
- pip and system caching.
-
-This also works with Jam: Just type `jam refdoc' in the main directory.
-
-Some troubleshooting tips:
-
-* Regularly run `pip install --upgrade docwriter' to check for updates which
-may include bug fixes.
-
-* Ensure that `docwriter' is installed in the same python target that
-`make refdoc' uses (python3/python2/python).
-
-* `pip' and `python' may point to different versions of Python. Check using
-`python --version' and `pip --version'.
-
-* If none of this works, send a mail to `freetype-devel@nongnu.org' or file
-an issue at `https://github.com/freetype/docwriter/issues'.
diff --git a/third_party/freetype2/docs/reference/markdown/images/favico.ico b/third_party/freetype2/docs/reference/markdown/images/favico.ico
deleted file mode 100644
index a1a22ed..0000000
--- a/third_party/freetype2/docs/reference/markdown/images/favico.ico
+++ /dev/null
Binary files differ
diff --git a/third_party/freetype2/docs/reference/markdown/javascripts/extra.js b/third_party/freetype2/docs/reference/markdown/javascripts/extra.js
deleted file mode 100644
index 00f1670..0000000
--- a/third_party/freetype2/docs/reference/markdown/javascripts/extra.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
-Internal link topbar offest adjust Javascript
-Code provided by @makshh on GitHub
-
-Bug report on material-mkdocs
- https://github.com/squidfunk/mkdocs-material/issues/791
-*/
-
-// Offset top helper
-function offsetY(elem) {
- if(!elem) elem = this;
- var y = elem.offsetTop;
- while (elem = elem.offsetParent) {
- y += elem.offsetTop;
- }
- return y;
-}
-
-// If a link on the same page is clicked, calculate the
-// correct offset and scroll to that part of the page.
-//
-var links = document.getElementsByTagName('a');
-for(var i = 0; i < links.length; i++) {
- links[i].onclick = function (event) {
- if (this.pathname == window.location.pathname &&
- this.protocol == window.location.protocol &&
- this.host == window.location.host) {
- event.preventDefault();
- if(this.hash.substr(1)){
- var o = document.getElementById(this.hash.substr(1));
- var sT = offsetY(o) - document.getElementsByClassName('md-header')[0].clientHeight;
- window.location.hash = this.hash;
- window.scrollTo(0, sT);
- }
- }
- }
-}
-
-// Slugify supplied text
-function slugify(text){
- text = text.toLowerCase();
- text = text.replace(" ", "-");
- return text;
-}
-
-// If there is a hash in the url, slugify it
-// and replace
-if(window.location.hash) {
- // Fragment exists
- slug = slugify(window.location.hash);
- history.replaceState(undefined, undefined, slug)
- //window.location.hash = slug;
- document.location.replace(window.location.href);
-}
diff --git a/third_party/freetype2/docs/reference/markdown/stylesheets/extra.css b/third_party/freetype2/docs/reference/markdown/stylesheets/extra.css
deleted file mode 100644
index cd6a1ee..0000000
--- a/third_party/freetype2/docs/reference/markdown/stylesheets/extra.css
+++ /dev/null
@@ -1,221 +0,0 @@
-/* Body and page */
-.wy-nav-content {
- max-width: 90%;
-}
-.md-grid {
- max-width: 90%;
-}
-.md-sidebar--secondary {
- margin-left: 90%;
-}
-p {
- text-align: justify;
- /* margin: 1.5ex 0 1.5ex 0;
- */
-}
-/* .md-typeset p{
- margin: 1em 1em 0 1em;
-}
-*/
-/* code blocks */
-pre.colored {
- color: blue;
-}
-pre {
- font-family: monospace;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%;
- overflow-x:auto;
-}
-span.keyword {
- font-family: monospace;
- text-align: left;
- white-space: pre;
- color: #d73a49;
-}
-.md-typeset code {
- white-space: pre;
-}
-/* H4 Heading */
-h4 {
- background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- /* margin: 3ex 0 1.5ex 9%;
- */
- padding: 0.3em 0 0.3em 1%;
-}
-/* Fields table */
-table.fields {
- width: 90%;
- margin: 1.5ex 0 1.5ex 10%;
-}
-table.fields td.val {
- font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1em 1em 0 0;
-}
-table.fields td.desc {
- vertical-align: baseline;
- padding: 1ex 0 0 1em;
-}
-table.fields td.desc p:first-child {
- margin: 0;
-}
-
-table.fields td.desc p {
- margin: 1.5ex 0 0 0;
-}
-
-/* START EXPERIMENTAL CODE */
-table.long {
- display: block;
- width: 93%;
-}
-table.long thead,
-table.long tbody,
-table.long th,
-table.long td,
-table.long tr {
- display: block;
-}
-/* Hide table headers (but not display: none;
-, for accessibility) */
-table.long thead tr {
- position: absolute;
- top: -9999px;
- left: -9999px;
-}
-table.long tr {
- border: 0;
-}
-table.long {
- margin: 1.5ex 3% 1.5ex 3%;
-}
-table.long td.val {
- text-align: left;
-}
-table.long td {
- /* Behave like a "row" */
- border: none;
- border-bottom: 0;
- position: relative;
- padding-left: 50%;
-}
-table.long td:before {
- /* Now like a table header */
- position: absolute;
- /* Top/left values mimic padding */
- top: 6px;
- left: 6px;
- width: 45%;
- padding-right: 10px;
- white-space: nowrap;
-}
-/* END EXPERIMENTAL CODE */
-
-/* Index table */
-table.index {
- width: 100%;
- border-collapse: collapse;
- border: 0;
- border-spacing: 1em 0.3ex;
-}
-table.index tr {
- padding: 0;
-}
-table.index td {
- padding: 0;
-}
-table.index-toc-link {
- width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0;
-}
-table.index-toc-link td.left {
- padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left;
-}
-table.index-toc-link td.middle {
- padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center;
-}
-table.index-toc-link td.right {
- padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right;
-}
-/* toc table */
-table.toc {
- width: 95%;
- margin: 1.5ex 0 1.5ex 5%;
-}
-table.toc td.link {
- width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0;
-}
-table.toc td.desc {
- vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left;
-}
-table.toc td.desc p:first-child {
- margin: 0;
- text-align: left;
-}
-table.toc td.desc p {
- margin: 1.5ex 0 0 0;
- text-align: left;
-}
-div.timestamp {
- font-size: small;
-}
-/* Max width before this PARTICULAR table gets nasty This query will take effect for any screen smaller than 760px and also iPads specifically. */
-@media only screen and (max-width: 760px), (min-device-width: 768px) and (max-device-width: 1024px) {
- /* Force table to not be like tables anymore */
- table, thead, tbody, th, td, tr {
- display: block;
- }
- /* Hide table headers (but not display: none;
- , for accessibility) */
- thead tr {
- position: absolute;
- top: -9999px;
- left: -9999px;
- }
- tr {
- border: 0;
- }
- table.fields {
- width: 93%;
- margin: 1.5ex 3% 1.5ex 3%;
- }
- table.fields td.val {
- text-align: left;
- }
- td {
- /* Behave like a "row" */
- border: none;
- border-bottom: 0;
- position: relative;
- padding-left: 50%;
- }
- td:before {
- /* Now like a table header */
- position: absolute;
- /* Top/left values mimic padding */
- top: 6px;
- left: 6px;
- width: 45%;
- padding-right: 10px;
- white-space: nowrap;
- }
-}
diff --git a/third_party/glm/cmake/CMakePackageConfigHelpers.cmake b/third_party/glm/cmake/CMakePackageConfigHelpers.cmake
deleted file mode 100644
index d5bf4a2..0000000
--- a/third_party/glm/cmake/CMakePackageConfigHelpers.cmake
+++ /dev/null
@@ -1,227 +0,0 @@
-# - CONFIGURE_PACKAGE_CONFIG_FILE(), WRITE_BASIC_PACKAGE_VERSION_FILE()
-#
-# CONFIGURE_PACKAGE_CONFIG_FILE(<input> <output> INSTALL_DESTINATION <path>
-# [PATH_VARS <var1> <var2> ... <varN>]
-# [NO_SET_AND_CHECK_MACRO]
-# [NO_CHECK_REQUIRED_COMPONENTS_MACRO])
-#
-# CONFIGURE_PACKAGE_CONFIG_FILE() should be used instead of the plain
-# CONFIGURE_FILE() command when creating the <Name>Config.cmake or <Name>-config.cmake
-# file for installing a project or library. It helps making the resulting package
-# relocatable by avoiding hardcoded paths in the installed Config.cmake file.
-#
-# In a FooConfig.cmake file there may be code like this to make the
-# install destinations know to the using project:
-# set(FOO_INCLUDE_DIR "@CMAKE_INSTALL_FULL_INCLUDEDIR@" )
-# set(FOO_DATA_DIR "@CMAKE_INSTALL_PREFIX@/@RELATIVE_DATA_INSTALL_DIR@" )
-# set(FOO_ICONS_DIR "@CMAKE_INSTALL_PREFIX@/share/icons" )
-# ...logic to determine installedPrefix from the own location...
-# set(FOO_CONFIG_DIR "${installedPrefix}/@CONFIG_INSTALL_DIR@" )
-# All 4 options shown above are not sufficient, since the first 3 hardcode
-# the absolute directory locations, and the 4th case works only if the logic
-# to determine the installedPrefix is correct, and if CONFIG_INSTALL_DIR contains
-# a relative path, which in general cannot be guaranteed.
-# This has the effect that the resulting FooConfig.cmake file would work poorly
-# under Windows and OSX, where users are used to choose the install location
-# of a binary package at install time, independent from how CMAKE_INSTALL_PREFIX
-# was set at build/cmake time.
-#
-# Using CONFIGURE_PACKAGE_CONFIG_FILE() helps. If used correctly, it makes the
-# resulting FooConfig.cmake file relocatable.
-# Usage:
-# 1. write a FooConfig.cmake.in file as you are used to
-# 2. insert a line containing only the string "@PACKAGE_INIT@"
-# 3. instead of SET(FOO_DIR "@SOME_INSTALL_DIR@"), use SET(FOO_DIR "@PACKAGE_SOME_INSTALL_DIR@")
-# (this must be after the @PACKAGE_INIT@ line)
-# 4. instead of using the normal CONFIGURE_FILE(), use CONFIGURE_PACKAGE_CONFIG_FILE()
-#
-# The <input> and <output> arguments are the input and output file, the same way
-# as in CONFIGURE_FILE().
-#
-# The <path> given to INSTALL_DESTINATION must be the destination where the FooConfig.cmake
-# file will be installed to. This can either be a relative or absolute path, both work.
-#
-# The variables <var1> to <varN> given as PATH_VARS are the variables which contain
-# install destinations. For each of them the macro will create a helper variable
-# PACKAGE_<var...>. These helper variables must be used
-# in the FooConfig.cmake.in file for setting the installed location. They are calculated
-# by CONFIGURE_PACKAGE_CONFIG_FILE() so that they are always relative to the
-# installed location of the package. This works both for relative and also for absolute locations.
-# For absolute locations it works only if the absolute location is a subdirectory
-# of CMAKE_INSTALL_PREFIX.
-#
-# By default configure_package_config_file() also generates two helper macros,
-# set_and_check() and check_required_components() into the FooConfig.cmake file.
-#
-# set_and_check() should be used instead of the normal set()
-# command for setting directories and file locations. Additionally to setting the
-# variable it also checks that the referenced file or directory actually exists
-# and fails with a FATAL_ERROR otherwise. This makes sure that the created
-# FooConfig.cmake file does not contain wrong references.
-# When using the NO_SET_AND_CHECK_MACRO, this macro is not generated into the
-# FooConfig.cmake file.
-#
-# check_required_components(<package_name>) should be called at the end of the
-# FooConfig.cmake file if the package supports components.
-# This macro checks whether all requested, non-optional components have been found,
-# and if this is not the case, sets the Foo_FOUND variable to FALSE, so that the package
-# is considered to be not found.
-# It does that by testing the Foo_<Component>_FOUND variables for all requested
-# required components.
-# When using the NO_CHECK_REQUIRED_COMPONENTS option, this macro is not generated
-# into the FooConfig.cmake file.
-#
-# For an example see below the documentation for WRITE_BASIC_PACKAGE_VERSION_FILE().
-#
-#
-# WRITE_BASIC_PACKAGE_VERSION_FILE( filename VERSION major.minor.patch COMPATIBILITY (AnyNewerVersion|SameMajorVersion|ExactVersion) )
-#
-# Writes a file for use as <package>ConfigVersion.cmake file to <filename>.
-# See the documentation of FIND_PACKAGE() for details on this.
-# filename is the output filename, it should be in the build tree.
-# major.minor.patch is the version number of the project to be installed
-# The COMPATIBILITY mode AnyNewerVersion means that the installed package version
-# will be considered compatible if it is newer or exactly the same as the requested version.
-# This mode should be used for packages which are fully backward compatible,
-# also across major versions.
-# If SameMajorVersion is used instead, then the behaviour differs from AnyNewerVersion
-# in that the major version number must be the same as requested, e.g. version 2.0 will
-# not be considered compatible if 1.0 is requested.
-# This mode should be used for packages which guarantee backward compatibility within the
-# same major version.
-# If ExactVersion is used, then the package is only considered compatible if the requested
-# version matches exactly its own version number (not considering the tweak version).
-# For example, version 1.2.3 of a package is only considered compatible to requested version 1.2.3.
-# This mode is for packages without compatibility guarantees.
-# If your project has more elaborated version matching rules, you will need to write your
-# own custom ConfigVersion.cmake file instead of using this macro.
-#
-# Internally, this macro executes configure_file() to create the resulting
-# version file. Depending on the COMPATIBILITY, either the file
-# BasicConfigVersion-SameMajorVersion.cmake.in or BasicConfigVersion-AnyNewerVersion.cmake.in
-# is used. Please note that these two files are internal to CMake and you should
-# not call configure_file() on them yourself, but they can be used as starting
-# point to create more sophisticted custom ConfigVersion.cmake files.
-#
-#
-# Example using both configure_package_config_file() and write_basic_package_version_file():
-# CMakeLists.txt:
-# set(INCLUDE_INSTALL_DIR include/ ... CACHE )
-# set(LIB_INSTALL_DIR lib/ ... CACHE )
-# set(SYSCONFIG_INSTALL_DIR etc/foo/ ... CACHE )
-# ...
-# include(CMakePackageConfigHelpers)
-# configure_package_config_file(FooConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/FooConfig.cmake
-# INSTALL_DESTINATION ${LIB_INSTALL_DIR}/Foo/cmake
-# PATH_VARS INCLUDE_INSTALL_DIR SYSCONFIG_INSTALL_DIR)
-# write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/FooConfigVersion.cmake
-# VERSION 1.2.3
-# COMPATIBILITY SameMajorVersion )
-# install(FILES ${CMAKE_CURRENT_BINARY_DIR}/FooConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/FooConfigVersion.cmake
-# DESTINATION ${LIB_INSTALL_DIR}/Foo/cmake )
-#
-# With a FooConfig.cmake.in:
-# set(FOO_VERSION x.y.z)
-# ...
-# @PACKAGE_INIT@
-# ...
-# set_and_check(FOO_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@")
-# set_and_check(FOO_SYSCONFIG_DIR "@PACKAGE_SYSCONFIG_INSTALL_DIR@")
-#
-# check_required_components(Foo)
-
-
-#=============================================================================
-# Copyright 2012 Alexander Neundorf <neundorf@kde.org>
-#
-# Distributed under the OSI-approved BSD License (the "License");
-# see accompanying file Copyright.txt for details.
-#
-# This software is distributed WITHOUT ANY WARRANTY; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the License for more information.
-#=============================================================================
-# (To distribute this file outside of CMake, substitute the full
-# License text for the above reference.)
-
-include(CMakeParseArguments)
-
-include(WriteBasicConfigVersionFile)
-
-macro(WRITE_BASIC_PACKAGE_VERSION_FILE)
- write_basic_config_version_file(${ARGN})
-endmacro()
-
-
-function(CONFIGURE_PACKAGE_CONFIG_FILE _inputFile _outputFile)
- set(options NO_SET_AND_CHECK_MACRO NO_CHECK_REQUIRED_COMPONENTS_MACRO)
- set(oneValueArgs INSTALL_DESTINATION )
- set(multiValueArgs PATH_VARS )
-
- cmake_parse_arguments(CCF "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
-
- if(CCF_UNPARSED_ARGUMENTS)
- message(FATAL_ERROR "Unknown keywords given to CONFIGURE_PACKAGE_CONFIG_FILE(): \"${CCF_UNPARSED_ARGUMENTS}\"")
- endif()
-
- if(NOT CCF_INSTALL_DESTINATION)
- message(FATAL_ERROR "No INSTALL_DESTINATION given to CONFIGURE_PACKAGE_CONFIG_FILE()")
- endif()
-
- if(IS_ABSOLUTE "${CCF_INSTALL_DESTINATION}")
- set(absInstallDir "${CCF_INSTALL_DESTINATION}")
- else()
- set(absInstallDir "${CMAKE_INSTALL_PREFIX}/${CCF_INSTALL_DESTINATION}")
- endif()
- file(RELATIVE_PATH PACKAGE_RELATIVE_PATH "${absInstallDir}" "${CMAKE_INSTALL_PREFIX}" )
-
- foreach(var ${CCF_PATH_VARS})
- if(NOT DEFINED ${var})
- message(FATAL_ERROR "Variable ${var} does not exist")
- else()
- if(IS_ABSOLUTE "${${var}}")
- string(REPLACE "${CMAKE_INSTALL_PREFIX}" "\${PACKAGE_PREFIX_DIR}"
- PACKAGE_${var} "${${var}}")
- else()
- set(PACKAGE_${var} "\${PACKAGE_PREFIX_DIR}/${${var}}")
- endif()
- endif()
- endforeach()
-
- set(PACKAGE_INIT "
-####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() #######
-get_filename_component(PACKAGE_PREFIX_DIR \"\${CMAKE_CURRENT_LIST_DIR}/${PACKAGE_RELATIVE_PATH}\" ABSOLUTE)
-")
-
- if(NOT CCF_NO_SET_AND_CHECK_MACRO)
- set(PACKAGE_INIT "${PACKAGE_INIT}
-macro(set_and_check _var _file)
- set(\${_var} \"\${_file}\")
- if(NOT EXISTS \"\${_file}\")
- message(FATAL_ERROR \"File or directory \${_file} referenced by variable \${_var} does not exist !\")
- endif()
-endmacro()
-")
- endif()
-
-
- if(NOT CCF_NO_CHECK_REQUIRED_COMPONENTS_MACRO)
- set(PACKAGE_INIT "${PACKAGE_INIT}
-macro(check_required_components _NAME)
- foreach(comp \${\${_NAME}_FIND_COMPONENTS})
- if(NOT \${_NAME}_\${comp}_FOUND)
- if(\${_NAME}_FIND_REQUIRED_\${comp})
- set(\${_NAME}_FOUND FALSE)
- endif()
- endif()
- endforeach(comp)
-endmacro()
-")
- endif()
-
- set(PACKAGE_INIT "${PACKAGE_INIT}
-####################################################################################")
-
- configure_file("${_inputFile}" "${_outputFile}" @ONLY)
-
-endfunction()
diff --git a/third_party/glm/cmake/GNUInstallDirs.cmake b/third_party/glm/cmake/GNUInstallDirs.cmake
deleted file mode 100644
index 4dc2d68..0000000
--- a/third_party/glm/cmake/GNUInstallDirs.cmake
+++ /dev/null
@@ -1,188 +0,0 @@
-# - Define GNU standard installation directories
-# Provides install directory variables as defined for GNU software:
-# http://www.gnu.org/prep/standards/html_node/Directory-Variables.html
-# Inclusion of this module defines the following variables:
-# CMAKE_INSTALL_<dir> - destination for files of a given type
-# CMAKE_INSTALL_FULL_<dir> - corresponding absolute path
-# where <dir> is one of:
-# BINDIR - user executables (bin)
-# SBINDIR - system admin executables (sbin)
-# LIBEXECDIR - program executables (libexec)
-# SYSCONFDIR - read-only single-machine data (etc)
-# SHAREDSTATEDIR - modifiable architecture-independent data (com)
-# LOCALSTATEDIR - modifiable single-machine data (var)
-# LIBDIR - object code libraries (lib or lib64 or lib/<multiarch-tuple> on Debian)
-# INCLUDEDIR - C header files (include)
-# OLDINCLUDEDIR - C header files for non-gcc (/usr/include)
-# DATAROOTDIR - read-only architecture-independent data root (share)
-# DATADIR - read-only architecture-independent data (DATAROOTDIR)
-# INFODIR - info documentation (DATAROOTDIR/info)
-# LOCALEDIR - locale-dependent data (DATAROOTDIR/locale)
-# MANDIR - man documentation (DATAROOTDIR/man)
-# DOCDIR - documentation root (DATAROOTDIR/doc/PROJECT_NAME)
-# Each CMAKE_INSTALL_<dir> value may be passed to the DESTINATION options of
-# install() commands for the corresponding file type. If the includer does
-# not define a value the above-shown default will be used and the value will
-# appear in the cache for editing by the user.
-# Each CMAKE_INSTALL_FULL_<dir> value contains an absolute path constructed
-# from the corresponding destination by prepending (if necessary) the value
-# of CMAKE_INSTALL_PREFIX.
-
-#=============================================================================
-# Copyright 2011 Nikita Krupen'ko <krnekit@gmail.com>
-# Copyright 2011 Kitware, Inc.
-#
-# Distributed under the OSI-approved BSD License (the "License");
-# see accompanying file Copyright.txt for details.
-#
-# This software is distributed WITHOUT ANY WARRANTY; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the License for more information.
-#=============================================================================
-# (To distribute this file outside of CMake, substitute the full
-# License text for the above reference.)
-
-# Installation directories
-#
-if(NOT DEFINED CMAKE_INSTALL_BINDIR)
- set(CMAKE_INSTALL_BINDIR "bin" CACHE PATH "user executables (bin)")
-endif()
-
-if(NOT DEFINED CMAKE_INSTALL_SBINDIR)
- set(CMAKE_INSTALL_SBINDIR "sbin" CACHE PATH "system admin executables (sbin)")
-endif()
-
-if(NOT DEFINED CMAKE_INSTALL_LIBEXECDIR)
- set(CMAKE_INSTALL_LIBEXECDIR "libexec" CACHE PATH "program executables (libexec)")
-endif()
-
-if(NOT DEFINED CMAKE_INSTALL_SYSCONFDIR)
- set(CMAKE_INSTALL_SYSCONFDIR "etc" CACHE PATH "read-only single-machine data (etc)")
-endif()
-
-if(NOT DEFINED CMAKE_INSTALL_SHAREDSTATEDIR)
- set(CMAKE_INSTALL_SHAREDSTATEDIR "com" CACHE PATH "modifiable architecture-independent data (com)")
-endif()
-
-if(NOT DEFINED CMAKE_INSTALL_LOCALSTATEDIR)
- set(CMAKE_INSTALL_LOCALSTATEDIR "var" CACHE PATH "modifiable single-machine data (var)")
-endif()
-
-if(NOT DEFINED CMAKE_INSTALL_LIBDIR)
- set(_LIBDIR_DEFAULT "lib")
- # Override this default 'lib' with 'lib64' iff:
- # - we are on Linux system but NOT cross-compiling
- # - we are NOT on debian
- # - we are on a 64 bits system
- # reason is: amd64 ABI: http://www.x86-64.org/documentation/abi.pdf
- # For Debian with multiarch, use 'lib/${CMAKE_LIBRARY_ARCHITECTURE}' if
- # CMAKE_LIBRARY_ARCHITECTURE is set (which contains e.g. "i386-linux-gnu"
- # See http://wiki.debian.org/Multiarch
- if((CMAKE_SYSTEM_NAME MATCHES "Linux|kFreeBSD" OR CMAKE_SYSTEM_NAME STREQUAL "GNU")
- AND NOT CMAKE_CROSSCOMPILING)
- if (EXISTS "/etc/debian_version") # is this a debian system ?
- if(CMAKE_LIBRARY_ARCHITECTURE)
- set(_LIBDIR_DEFAULT "lib/${CMAKE_LIBRARY_ARCHITECTURE}")
- endif()
- else() # not debian, rely on CMAKE_SIZEOF_VOID_P:
- if(NOT DEFINED CMAKE_SIZEOF_VOID_P)
- message(AUTHOR_WARNING
- "Unable to determine default CMAKE_INSTALL_LIBDIR directory because no target architecture is known. "
- "Please enable at least one language before including GNUInstallDirs.")
- else()
- if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
- set(_LIBDIR_DEFAULT "lib64")
- endif()
- endif()
- endif()
- endif()
- set(CMAKE_INSTALL_LIBDIR "${_LIBDIR_DEFAULT}" CACHE PATH "object code libraries (${_LIBDIR_DEFAULT})")
-endif()
-
-if(NOT DEFINED CMAKE_INSTALL_INCLUDEDIR)
- set(CMAKE_INSTALL_INCLUDEDIR "include" CACHE PATH "C header files (include)")
-endif()
-
-if(NOT DEFINED CMAKE_INSTALL_OLDINCLUDEDIR)
- set(CMAKE_INSTALL_OLDINCLUDEDIR "/usr/include" CACHE PATH "C header files for non-gcc (/usr/include)")
-endif()
-
-if(NOT DEFINED CMAKE_INSTALL_DATAROOTDIR)
- set(CMAKE_INSTALL_DATAROOTDIR "share" CACHE PATH "read-only architecture-independent data root (share)")
-endif()
-
-#-----------------------------------------------------------------------------
-# Values whose defaults are relative to DATAROOTDIR. Store empty values in
-# the cache and store the defaults in local variables if the cache values are
-# not set explicitly. This auto-updates the defaults as DATAROOTDIR changes.
-
-if(NOT CMAKE_INSTALL_DATADIR)
- set(CMAKE_INSTALL_DATADIR "" CACHE PATH "read-only architecture-independent data (DATAROOTDIR)")
- set(CMAKE_INSTALL_DATADIR "${CMAKE_INSTALL_DATAROOTDIR}")
-endif()
-
-if(NOT CMAKE_INSTALL_INFODIR)
- set(CMAKE_INSTALL_INFODIR "" CACHE PATH "info documentation (DATAROOTDIR/info)")
- set(CMAKE_INSTALL_INFODIR "${CMAKE_INSTALL_DATAROOTDIR}/info")
-endif()
-
-if(NOT CMAKE_INSTALL_LOCALEDIR)
- set(CMAKE_INSTALL_LOCALEDIR "" CACHE PATH "locale-dependent data (DATAROOTDIR/locale)")
- set(CMAKE_INSTALL_LOCALEDIR "${CMAKE_INSTALL_DATAROOTDIR}/locale")
-endif()
-
-if(NOT CMAKE_INSTALL_MANDIR)
- set(CMAKE_INSTALL_MANDIR "" CACHE PATH "man documentation (DATAROOTDIR/man)")
- set(CMAKE_INSTALL_MANDIR "${CMAKE_INSTALL_DATAROOTDIR}/man")
-endif()
-
-if(NOT CMAKE_INSTALL_DOCDIR)
- set(CMAKE_INSTALL_DOCDIR "" CACHE PATH "documentation root (DATAROOTDIR/doc/PROJECT_NAME)")
- set(CMAKE_INSTALL_DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc/${PROJECT_NAME}")
-endif()
-
-#-----------------------------------------------------------------------------
-
-mark_as_advanced(
- CMAKE_INSTALL_BINDIR
- CMAKE_INSTALL_SBINDIR
- CMAKE_INSTALL_LIBEXECDIR
- CMAKE_INSTALL_SYSCONFDIR
- CMAKE_INSTALL_SHAREDSTATEDIR
- CMAKE_INSTALL_LOCALSTATEDIR
- CMAKE_INSTALL_LIBDIR
- CMAKE_INSTALL_INCLUDEDIR
- CMAKE_INSTALL_OLDINCLUDEDIR
- CMAKE_INSTALL_DATAROOTDIR
- CMAKE_INSTALL_DATADIR
- CMAKE_INSTALL_INFODIR
- CMAKE_INSTALL_LOCALEDIR
- CMAKE_INSTALL_MANDIR
- CMAKE_INSTALL_DOCDIR
- )
-
-# Result directories
-#
-foreach(dir
- BINDIR
- SBINDIR
- LIBEXECDIR
- SYSCONFDIR
- SHAREDSTATEDIR
- LOCALSTATEDIR
- LIBDIR
- INCLUDEDIR
- OLDINCLUDEDIR
- DATAROOTDIR
- DATADIR
- INFODIR
- LOCALEDIR
- MANDIR
- DOCDIR
- )
- if(NOT IS_ABSOLUTE ${CMAKE_INSTALL_${dir}})
- set(CMAKE_INSTALL_FULL_${dir} "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_${dir}}")
- else()
- set(CMAKE_INSTALL_FULL_${dir} "${CMAKE_INSTALL_${dir}}")
- endif()
-endforeach()
diff --git a/third_party/google_benchmark/cmake/Modules/FindLLVMAr.cmake b/third_party/google_benchmark/cmake/Modules/FindLLVMAr.cmake
deleted file mode 100644
index 2346981..0000000
--- a/third_party/google_benchmark/cmake/Modules/FindLLVMAr.cmake
+++ /dev/null
@@ -1,16 +0,0 @@
-include(FeatureSummary)
-
-find_program(LLVMAR_EXECUTABLE
- NAMES llvm-ar
- DOC "The llvm-ar executable"
- )
-
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(LLVMAr
- DEFAULT_MSG
- LLVMAR_EXECUTABLE)
-
-SET_PACKAGE_PROPERTIES(LLVMAr PROPERTIES
- URL https://llvm.org/docs/CommandGuide/llvm-ar.html
- DESCRIPTION "create, modify, and extract from archives"
-)
diff --git a/third_party/google_benchmark/cmake/Modules/FindLLVMNm.cmake b/third_party/google_benchmark/cmake/Modules/FindLLVMNm.cmake
deleted file mode 100644
index e56430a..0000000
--- a/third_party/google_benchmark/cmake/Modules/FindLLVMNm.cmake
+++ /dev/null
@@ -1,16 +0,0 @@
-include(FeatureSummary)
-
-find_program(LLVMNM_EXECUTABLE
- NAMES llvm-nm
- DOC "The llvm-nm executable"
- )
-
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(LLVMNm
- DEFAULT_MSG
- LLVMNM_EXECUTABLE)
-
-SET_PACKAGE_PROPERTIES(LLVMNm PROPERTIES
- URL https://llvm.org/docs/CommandGuide/llvm-nm.html
- DESCRIPTION "list LLVM bitcode and object file’s symbol table"
-)
diff --git a/third_party/google_benchmark/cmake/Modules/FindLLVMRanLib.cmake b/third_party/google_benchmark/cmake/Modules/FindLLVMRanLib.cmake
deleted file mode 100644
index 7b53e1a..0000000
--- a/third_party/google_benchmark/cmake/Modules/FindLLVMRanLib.cmake
+++ /dev/null
@@ -1,15 +0,0 @@
-include(FeatureSummary)
-
-find_program(LLVMRANLIB_EXECUTABLE
- NAMES llvm-ranlib
- DOC "The llvm-ranlib executable"
- )
-
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(LLVMRanLib
- DEFAULT_MSG
- LLVMRANLIB_EXECUTABLE)
-
-SET_PACKAGE_PROPERTIES(LLVMRanLib PROPERTIES
- DESCRIPTION "generate index for LLVM archive"
-)
diff --git a/third_party/libdav1d/platforms/linux-x64/libdav1d.a b/third_party/libdav1d/platforms/linux-x64/libdav1d.a
index bb3473f..5189375 100644
--- a/third_party/libdav1d/platforms/linux-x64/libdav1d.a
+++ b/third_party/libdav1d/platforms/linux-x64/libdav1d.a
Binary files differ
diff --git a/third_party/libvpx/platforms/linux-x64/libvpx.a b/third_party/libvpx/platforms/linux-x64/libvpx.a
deleted file mode 100644
index c8f685f..0000000
--- a/third_party/libvpx/platforms/linux-x64/libvpx.a
+++ /dev/null
Binary files differ
diff --git a/third_party/libwebp/BUILD.gn b/third_party/libwebp/BUILD.gn
new file mode 100644
index 0000000..94c0d14
--- /dev/null
+++ b/third_party/libwebp/BUILD.gn
@@ -0,0 +1,103 @@
+# Copyright 2021 The Cobalt 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.
+
+import("//third_party/libwebp/libwebp.gni")
+
+template("libwebp_lib") {
+ static_library(target_name) {
+ forward_variables_from(invoker, "*")
+ configs -= [ "//starboard/build/config:size" ]
+ configs += [
+ "//starboard/build/config:speed",
+ ":libwebp_direct_config",
+ ]
+ }
+}
+
+libwebp_lib("libwebp_dec") {
+ sources = libwebp_dec_sources
+}
+
+libwebp_lib("libwebp_demux") {
+ sources = libwebp_demux_sources
+}
+
+libwebp_lib("libwebp_dsp_dec_common") {
+ sources = libwebp_dsp_dec_common_sources
+ deps = [
+ ":libwebp_dsp_dec_mips32",
+ ":libwebp_dsp_dec_mips_dsp_r2",
+ ":libwebp_dsp_dec_msa",
+ ":libwebp_dsp_dec_neon",
+ ":libwebp_dsp_dec_sse2",
+ ":libwebp_dsp_dec_sse41",
+ ]
+}
+
+libwebp_lib("libwebp_dsp_dec_msa") {
+ sources = libwebp_dsp_dec_msa_sources
+}
+
+libwebp_lib("libwebp_dsp_dec_neon") {
+ sources = libwebp_dsp_dec_neon_sources
+}
+
+libwebp_lib("libwebp_dsp_dec_sse2") {
+ sources = libwebp_dsp_dec_sse2_sources
+}
+
+libwebp_lib("libwebp_dsp_dec_sse41") {
+ sources = libwebp_dsp_dec_sse41_sources
+}
+
+libwebp_lib("libwebp_dsp_dec_mips32") {
+ sources = libwebp_dsp_dec_mips32_sources
+}
+
+libwebp_lib("libwebp_dsp_dec_mips_dsp_r2") {
+ sources = libwebp_dsp_dec_mips_dsp_r2_sources
+}
+
+libwebp_lib("libwebp_utils_dec") {
+ sources = libwebp_utils_dec_sources
+}
+
+libwebp_lib("libwebp_enc") {
+ sources = libwebp_enc_sources
+}
+
+libwebp_lib("libwebp_dsp_enc") {
+ sources = libwebp_dsp_enc_sources
+}
+
+libwebp_lib("libwebp_utils_enc") {
+ sources = libwebp_utils_enc_sources
+}
+
+config("libwebp_direct_config") {
+ include_dirs = [ "." ]
+}
+
+group("libwebp") {
+ public_configs = [ ":libwebp_direct_config" ]
+ deps = [
+ ":libwebp_dec",
+ ":libwebp_demux",
+ ":libwebp_dsp_dec_common",
+ ":libwebp_dsp_enc",
+ ":libwebp_enc",
+ ":libwebp_utils_dec",
+ ":libwebp_utils_enc",
+ ]
+}
diff --git a/third_party/libwebp/libwebp.gni b/third_party/libwebp/libwebp.gni
new file mode 100644
index 0000000..cba22f5
--- /dev/null
+++ b/third_party/libwebp/libwebp.gni
@@ -0,0 +1,190 @@
+# Copyright 2021 The Cobalt 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.
+
+libwebp_dec_sources = [
+ "src/dec/alpha_dec.c",
+ "src/dec/buffer_dec.c",
+ "src/dec/frame_dec.c",
+ "src/dec/idec_dec.c",
+ "src/dec/io_dec.c",
+ "src/dec/quant_dec.c",
+ "src/dec/tree_dec.c",
+ "src/dec/vp8_dec.c",
+ "src/dec/vp8l_dec.c",
+ "src/dec/webp_dec.c",
+]
+
+libwebp_demux_sources = [
+ "src/demux/anim_decode.c",
+ "src/demux/demux.c",
+]
+
+libwebp_dsp_dec_common_sources = [
+ "src/dsp/alpha_processing.c",
+ "src/dsp/cpu.c",
+ "src/dsp/dec.c",
+ "src/dsp/dec_clip_tables.c",
+ "src/dsp/filters.c",
+ "src/dsp/lossless.c",
+ "src/dsp/rescaler.c",
+ "src/dsp/upsampling.c",
+ "src/dsp/yuv.c",
+]
+
+libwebp_dsp_dec_sse41_sources = [
+ "src/dsp/alpha_processing_sse41.c",
+ "src/dsp/dec_sse41.c",
+ "src/dsp/upsampling_sse41.c",
+ "src/dsp/yuv_sse41.c",
+]
+
+libwebp_dsp_dec_sse2_sources = [
+ "src/dsp/alpha_processing_sse2.c",
+ "src/dsp/dec_sse2.c",
+ "src/dsp/filters_sse2.c",
+ "src/dsp/lossless_sse2.c",
+ "src/dsp/rescaler_sse2.c",
+ "src/dsp/upsampling_sse2.c",
+ "src/dsp/yuv_sse2.c",
+]
+
+libwebp_dsp_dec_neon_sources = [
+ "src/dsp/alpha_processing_neon.c",
+ "src/dsp/dec_neon.c",
+ "src/dsp/filters_neon.c",
+ "src/dsp/lossless_neon.c",
+ "src/dsp/rescaler_neon.c",
+ "src/dsp/upsampling_neon.c",
+ "src/dsp/yuv_neon.c",
+]
+
+libwebp_dsp_dec_mips_dsp_r2_sources = [
+ "src/dsp/alpha_processing_mips_dsp_r2.c",
+ "src/dsp/dec_mips_dsp_r2.c",
+ "src/dsp/filters_mips_dsp_r2.c",
+ "src/dsp/lossless_mips_dsp_r2.c",
+ "src/dsp/rescaler_mips_dsp_r2.c",
+ "src/dsp/upsampling_mips_dsp_r2.c",
+ "src/dsp/yuv_mips_dsp_r2.c",
+]
+
+libwebp_dsp_dec_mips32_sources = [
+ "src/dsp/dec_mips32.c",
+ "src/dsp/rescaler_mips32.c",
+ "src/dsp/yuv_mips32.c",
+]
+
+libwebp_dsp_dec_msa_sources = [
+ "src/dsp/dec_msa.c",
+ "src/dsp/filters_msa.c",
+ "src/dsp/lossless_msa.c",
+ "src/dsp/rescaler_msa.c",
+ "src/dsp/upsampling_msa.c",
+]
+
+libwebp_dsp_enc_sources = [
+ "src/dsp/cost.c",
+ "src/dsp/cost_mips32.c",
+ "src/dsp/cost_mips_dsp_r2.c",
+ "src/dsp/cost_sse2.c",
+ "src/dsp/enc.c",
+ "src/dsp/enc_avx2.c",
+ "src/dsp/enc_mips32.c",
+ "src/dsp/enc_mips_dsp_r2.c",
+ "src/dsp/enc_msa.c",
+ "src/dsp/enc_neon.c",
+ "src/dsp/enc_sse2.c",
+ "src/dsp/enc_sse41.c",
+ "src/dsp/lossless_enc.c",
+ "src/dsp/lossless_enc_mips32.c",
+ "src/dsp/lossless_enc_mips_dsp_r2.c",
+ "src/dsp/lossless_enc_msa.c",
+ "src/dsp/lossless_enc_neon.c",
+ "src/dsp/lossless_enc_sse2.c",
+ "src/dsp/lossless_enc_sse41.c",
+ "src/dsp/ssim.c",
+ "src/dsp/ssim_sse2.c",
+]
+
+libwebp_enc_sources = [
+ "src/enc/alpha_enc.c",
+ "src/enc/analysis_enc.c",
+ "src/enc/backward_references_cost_enc.c",
+ "src/enc/backward_references_enc.c",
+ "src/enc/config_enc.c",
+ "src/enc/cost_enc.c",
+ "src/enc/filter_enc.c",
+ "src/enc/frame_enc.c",
+ "src/enc/histogram_enc.c",
+ "src/enc/iterator_enc.c",
+ "src/enc/near_lossless_enc.c",
+ "src/enc/picture_csp_enc.c",
+ "src/enc/picture_enc.c",
+ "src/enc/picture_psnr_enc.c",
+ "src/enc/picture_rescale_enc.c",
+ "src/enc/picture_tools_enc.c",
+ "src/enc/predictor_enc.c",
+ "src/enc/quant_enc.c",
+ "src/enc/syntax_enc.c",
+ "src/enc/token_enc.c",
+ "src/enc/tree_enc.c",
+ "src/enc/vp8l_enc.c",
+ "src/enc/webp_enc.c",
+]
+
+libwebp_format_dec_sources = [
+ "imageio/image_dec.c",
+ "imageio/jpegdec.c",
+ "imageio/metadata.c",
+ "imageio/pngdec.c",
+ "imageio/pnmdec.c",
+ "imageio/tiffdec.c",
+ "imageio/webpdec.c",
+]
+
+libwebp_format_enc_sources = [ "imageio/image_enc.c" ]
+
+libwebp_util_sources = [ "examples/example_util.c" ]
+
+libwebp_image_util_sources = [ "imageio/imageio_util.c" ]
+
+libwebp_mux_sources = [
+ "src/mux/anim_encode.c",
+ "src/mux/muxedit.c",
+ "src/mux/muxinternal.c",
+ "src/mux/muxread.c",
+]
+
+libwebp_utils_dec_sources = [
+ "src/utils/bit_reader_utils.c",
+ "src/utils/color_cache_utils.c",
+ "src/utils/filters_utils.c",
+ "src/utils/huffman_utils.c",
+ "src/utils/quant_levels_dec_utils.c",
+ "src/utils/random_utils.c",
+ "src/utils/rescaler_utils.c",
+ "src/utils/thread_utils.c",
+ "src/utils/utils.c",
+]
+
+libwebp_utils_enc_sources = [
+ "src/utils/bit_writer_utils.c",
+ "src/utils/huffman_encode_utils.c",
+ "src/utils/quant_levels_utils.c",
+]
+
+libwebp_extra_sources = [
+ "extras/extras.c",
+ "extras/quality_estimate.c",
+]
diff --git a/third_party/llvm-project/clang-tools-extra/clangd/clients/clangd-vscode/.vscode/launch.json b/third_party/llvm-project/clang-tools-extra/clangd/clients/clangd-vscode/.vscode/launch.json
deleted file mode 100644
index cd6b87b..0000000
--- a/third_party/llvm-project/clang-tools-extra/clangd/clients/clangd-vscode/.vscode/launch.json
+++ /dev/null
@@ -1,28 +0,0 @@
-// A launch configuration that compiles the extension and then opens it inside a new window
-{
- "version": "0.1.0",
- "configurations": [
- {
- "name": "Launch Extension",
- "type": "extensionHost",
- "request": "launch",
- "runtimeExecutable": "${execPath}",
- "args": ["--extensionDevelopmentPath=${workspaceRoot}" ],
- "stopOnEntry": false,
- "sourceMaps": true,
- "outFiles": [ "${workspaceRoot}/out/src/**/*.js" ],
- "preLaunchTask": "npm"
- },
- {
- "name": "Launch Tests",
- "type": "extensionHost",
- "request": "launch",
- "runtimeExecutable": "${execPath}",
- "args": ["--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/out/test" ],
- "stopOnEntry": false,
- "sourceMaps": true,
- "outFiles": [ "${workspaceRoot}/out/test/**/*.js" ],
- "preLaunchTask": "npm"
- }
- ]
-}
diff --git a/third_party/llvm-project/clang-tools-extra/clangd/clients/clangd-vscode/.vscode/settings.json b/third_party/llvm-project/clang-tools-extra/clangd/clients/clangd-vscode/.vscode/settings.json
deleted file mode 100644
index d137133..0000000
--- a/third_party/llvm-project/clang-tools-extra/clangd/clients/clangd-vscode/.vscode/settings.json
+++ /dev/null
@@ -1,9 +0,0 @@
-// Place your settings in this file to overwrite default and user settings.
-{
- "files.exclude": {
- "out": false // set this to true to hide the "out" folder with the compiled JS files
- },
- "search.exclude": {
- "out": true // set this to false to include "out" folder in search results
- }
-}
\ No newline at end of file
diff --git a/third_party/llvm-project/clang-tools-extra/clangd/clients/clangd-vscode/.vscode/tasks.json b/third_party/llvm-project/clang-tools-extra/clangd/clients/clangd-vscode/.vscode/tasks.json
deleted file mode 100644
index fb7f662..0000000
--- a/third_party/llvm-project/clang-tools-extra/clangd/clients/clangd-vscode/.vscode/tasks.json
+++ /dev/null
@@ -1,30 +0,0 @@
-// Available variables which can be used inside of strings.
-// ${workspaceRoot}: the root folder of the team
-// ${file}: the current opened file
-// ${fileBasename}: the current opened file's basename
-// ${fileDirname}: the current opened file's dirname
-// ${fileExtname}: the current opened file's extension
-// ${cwd}: the current working directory of the spawned process
-
-// A task runner that calls a custom npm script that compiles the extension.
-{
- "version": "0.1.0",
-
- // we want to run npm
- "command": "npm",
-
- // the command is a shell script
- "isShellCommand": true,
-
- // show the output window only if unrecognized errors occur.
- "showOutput": "silent",
-
- // we run the custom script "compile" as defined in package.json
- "args": ["run", "compile", "--loglevel", "silent"],
-
- // The tsc compiler is started in watching mode
- "isWatching": true,
-
- // use the standard tsc in watch mode problem matcher to find compile problems in the output.
- "problemMatcher": "$tsc-watch"
-}
\ No newline at end of file
diff --git a/third_party/llvm-project/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/equal.pass.cpp b/third_party/llvm-project/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/equal.pass.cpp
deleted file mode 100644
index 9f01fed..0000000
--- a/third_party/llvm-project/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/equal.pass.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-// <forward_list>
-
-// template <class T, class Allocator>
-// bool operator==(const forward_list<T, Allocator>& x,
-// const forward_list<T, Allocator>& y);
-//
-// template <class T, class Allocator>
-// bool operator!=(const forward_list<T, Allocator>& x,
-// const forward_list<T, Allocator>& y);
-
-#include <forward_list>
-#include <iterator>
-#include <algorithm>
-#include <cassert>
-
-#include "test_macros.h"
-#include "min_allocator.h"
-
-template <class C>
-void test(int N, int M)
-{
- C c1;
- for (int i = 0; i < N; ++i)
- c1.push_front(i);
- C c2;
- for (int i = 0; i < M; ++i)
- c2.push_front(i);
- if (N == M)
- assert(c1 == c2);
- else
- assert(c1 != c2);
- c2 = c1;
- assert(c1 == c2);
- if (N > 0)
- {
- c2.front() = N+1;
- assert(c1 != c2);
- }
-}
-
-int main()
-{
- for (int i = 0; i < 10; ++i)
- for (int j = 0; j < 10; ++j)
- test<std::forward_list<int> >(i, j);
-#if TEST_STD_VER >= 11
- for (int i = 0; i < 10; ++i)
- for (int j = 0; j < 10; ++j)
- test<std::forward_list<int, min_allocator<int>> >(i, j);
-#endif
-}
diff --git a/third_party/llvm-project/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/member_swap.pass.cpp b/third_party/llvm-project/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/member_swap.pass.cpp
deleted file mode 100644
index 242a00b..0000000
--- a/third_party/llvm-project/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/member_swap.pass.cpp
+++ /dev/null
@@ -1,259 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-// <forward_list>
-
-// void swap(forward_list& x);
-
-#include <forward_list>
-#include <cassert>
-
-#include "test_allocator.h"
-#include "min_allocator.h"
-
-int main()
-{
- {
- typedef int T;
- typedef test_allocator<T> A;
- typedef std::forward_list<T, A> C;
- const T t1[] = {0, 1, 2, 3, 4, 5};
- C c1(std::begin(t1), std::end(t1), A(1, 1));
- const T t2[] = {10, 11, 12};
- C c2(std::begin(t2), std::end(t2), A(1, 2));
- c1.swap(c2);
-
- assert(distance(c1.begin(), c1.end()) == 3);
- assert(*next(c1.begin(), 0) == 10);
- assert(*next(c1.begin(), 1) == 11);
- assert(*next(c1.begin(), 2) == 12);
- assert(c1.get_allocator().get_id() == 1);
-
- assert(distance(c2.begin(), c2.end()) == 6);
- assert(*next(c2.begin(), 0) == 0);
- assert(*next(c2.begin(), 1) == 1);
- assert(*next(c2.begin(), 2) == 2);
- assert(*next(c2.begin(), 3) == 3);
- assert(*next(c2.begin(), 4) == 4);
- assert(*next(c2.begin(), 5) == 5);
- assert(c2.get_allocator().get_id() == 2);
- }
- {
- typedef int T;
- typedef test_allocator<T> A;
- typedef std::forward_list<T, A> C;
- const T t1[] = {0, 1, 2, 3, 4, 5};
- C c1(std::begin(t1), std::end(t1), A(1, 1));
- C c2(A(1, 2));
- c1.swap(c2);
-
- assert(distance(c1.begin(), c1.end()) == 0);
- assert(c1.get_allocator().get_id() == 1);
-
- assert(distance(c2.begin(), c2.end()) == 6);
- assert(*next(c2.begin(), 0) == 0);
- assert(*next(c2.begin(), 1) == 1);
- assert(*next(c2.begin(), 2) == 2);
- assert(*next(c2.begin(), 3) == 3);
- assert(*next(c2.begin(), 4) == 4);
- assert(*next(c2.begin(), 5) == 5);
- assert(c2.get_allocator().get_id() == 2);
- }
- {
- typedef int T;
- typedef test_allocator<T> A;
- typedef std::forward_list<T, A> C;
- C c1(A(1, 1));
- const T t2[] = {10, 11, 12};
- C c2(std::begin(t2), std::end(t2), A(1, 2));
- c1.swap(c2);
-
- assert(distance(c1.begin(), c1.end()) == 3);
- assert(*next(c1.begin(), 0) == 10);
- assert(*next(c1.begin(), 1) == 11);
- assert(*next(c1.begin(), 2) == 12);
- assert(c1.get_allocator().get_id() == 1);
-
- assert(distance(c2.begin(), c2.end()) == 0);
- assert(c2.get_allocator().get_id() == 2);
- }
- {
- typedef int T;
- typedef test_allocator<T> A;
- typedef std::forward_list<T, A> C;
- C c1(A(1, 1));
- C c2(A(1, 2));
- c1.swap(c2);
-
- assert(distance(c1.begin(), c1.end()) == 0);
- assert(c1.get_allocator().get_id() == 1);
-
- assert(distance(c2.begin(), c2.end()) == 0);
- assert(c2.get_allocator().get_id() == 2);
- }
-
- {
- typedef int T;
- typedef other_allocator<T> A;
- typedef std::forward_list<T, A> C;
- const T t1[] = {0, 1, 2, 3, 4, 5};
- C c1(std::begin(t1), std::end(t1), A(1));
- const T t2[] = {10, 11, 12};
- C c2(std::begin(t2), std::end(t2), A(2));
- c1.swap(c2);
-
- assert(distance(c1.begin(), c1.end()) == 3);
- assert(*next(c1.begin(), 0) == 10);
- assert(*next(c1.begin(), 1) == 11);
- assert(*next(c1.begin(), 2) == 12);
- assert(c1.get_allocator() == A(2));
-
- assert(distance(c2.begin(), c2.end()) == 6);
- assert(*next(c2.begin(), 0) == 0);
- assert(*next(c2.begin(), 1) == 1);
- assert(*next(c2.begin(), 2) == 2);
- assert(*next(c2.begin(), 3) == 3);
- assert(*next(c2.begin(), 4) == 4);
- assert(*next(c2.begin(), 5) == 5);
- assert(c2.get_allocator() == A(1));
- }
- {
- typedef int T;
- typedef other_allocator<T> A;
- typedef std::forward_list<T, A> C;
- const T t1[] = {0, 1, 2, 3, 4, 5};
- C c1(std::begin(t1), std::end(t1), A(1));
- C c2(A(2));
- c1.swap(c2);
-
- assert(distance(c1.begin(), c1.end()) == 0);
- assert(c1.get_allocator() == A(2));
-
- assert(distance(c2.begin(), c2.end()) == 6);
- assert(*next(c2.begin(), 0) == 0);
- assert(*next(c2.begin(), 1) == 1);
- assert(*next(c2.begin(), 2) == 2);
- assert(*next(c2.begin(), 3) == 3);
- assert(*next(c2.begin(), 4) == 4);
- assert(*next(c2.begin(), 5) == 5);
- assert(c2.get_allocator() == A(1));
- }
- {
- typedef int T;
- typedef other_allocator<T> A;
- typedef std::forward_list<T, A> C;
- C c1(A(1));
- const T t2[] = {10, 11, 12};
- C c2(std::begin(t2), std::end(t2), A(2));
- c1.swap(c2);
-
- assert(distance(c1.begin(), c1.end()) == 3);
- assert(*next(c1.begin(), 0) == 10);
- assert(*next(c1.begin(), 1) == 11);
- assert(*next(c1.begin(), 2) == 12);
- assert(c1.get_allocator() == A(2));
-
- assert(distance(c2.begin(), c2.end()) == 0);
- assert(c2.get_allocator() == A(1));
- }
- {
- typedef int T;
- typedef other_allocator<T> A;
- typedef std::forward_list<T, A> C;
- C c1(A(1));
- C c2(A(2));
- c1.swap(c2);
-
- assert(distance(c1.begin(), c1.end()) == 0);
- assert(c1.get_allocator() == A(2));
-
- assert(distance(c2.begin(), c2.end()) == 0);
- assert(c2.get_allocator() == A(1));
- }
-#if TEST_STD_VER >= 11
- {
- typedef int T;
- typedef min_allocator<T> A;
- typedef std::forward_list<T, A> C;
- const T t1[] = {0, 1, 2, 3, 4, 5};
- C c1(std::begin(t1), std::end(t1), A());
- const T t2[] = {10, 11, 12};
- C c2(std::begin(t2), std::end(t2), A());
- c1.swap(c2);
-
- assert(distance(c1.begin(), c1.end()) == 3);
- assert(*next(c1.begin(), 0) == 10);
- assert(*next(c1.begin(), 1) == 11);
- assert(*next(c1.begin(), 2) == 12);
- assert(c1.get_allocator() == A());
-
- assert(distance(c2.begin(), c2.end()) == 6);
- assert(*next(c2.begin(), 0) == 0);
- assert(*next(c2.begin(), 1) == 1);
- assert(*next(c2.begin(), 2) == 2);
- assert(*next(c2.begin(), 3) == 3);
- assert(*next(c2.begin(), 4) == 4);
- assert(*next(c2.begin(), 5) == 5);
- assert(c2.get_allocator() == A());
- }
- {
- typedef int T;
- typedef min_allocator<T> A;
- typedef std::forward_list<T, A> C;
- const T t1[] = {0, 1, 2, 3, 4, 5};
- C c1(std::begin(t1), std::end(t1), A());
- C c2(A{});
- c1.swap(c2);
-
- assert(distance(c1.begin(), c1.end()) == 0);
- assert(c1.get_allocator() == A());
-
- assert(distance(c2.begin(), c2.end()) == 6);
- assert(*next(c2.begin(), 0) == 0);
- assert(*next(c2.begin(), 1) == 1);
- assert(*next(c2.begin(), 2) == 2);
- assert(*next(c2.begin(), 3) == 3);
- assert(*next(c2.begin(), 4) == 4);
- assert(*next(c2.begin(), 5) == 5);
- assert(c2.get_allocator() == A());
- }
- {
- typedef int T;
- typedef min_allocator<T> A;
- typedef std::forward_list<T, A> C;
- C c1(A{});
- const T t2[] = {10, 11, 12};
- C c2(std::begin(t2), std::end(t2), A());
- c1.swap(c2);
-
- assert(distance(c1.begin(), c1.end()) == 3);
- assert(*next(c1.begin(), 0) == 10);
- assert(*next(c1.begin(), 1) == 11);
- assert(*next(c1.begin(), 2) == 12);
- assert(c1.get_allocator() == A());
-
- assert(distance(c2.begin(), c2.end()) == 0);
- assert(c2.get_allocator() == A());
- }
- {
- typedef int T;
- typedef min_allocator<T> A;
- typedef std::forward_list<T, A> C;
- C c1(A{});
- C c2(A{});
- c1.swap(c2);
-
- assert(distance(c1.begin(), c1.end()) == 0);
- assert(c1.get_allocator() == A());
-
- assert(distance(c2.begin(), c2.end()) == 0);
- assert(c2.get_allocator() == A());
- }
-#endif
-}
diff --git a/third_party/llvm-project/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/non_member_swap.pass.cpp b/third_party/llvm-project/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/non_member_swap.pass.cpp
deleted file mode 100644
index 44820d9..0000000
--- a/third_party/llvm-project/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/non_member_swap.pass.cpp
+++ /dev/null
@@ -1,260 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-// <forward_list>
-
-// template <class T, class Allocator>
-// void swap(forward_list<T, Allocator>& x, forward_list<T, Allocator>& y);
-
-#include <forward_list>
-#include <cassert>
-
-#include "test_allocator.h"
-#include "min_allocator.h"
-
-int main()
-{
- {
- typedef int T;
- typedef test_allocator<T> A;
- typedef std::forward_list<T, A> C;
- const T t1[] = {0, 1, 2, 3, 4, 5};
- C c1(std::begin(t1), std::end(t1), A(1, 1));
- const T t2[] = {10, 11, 12};
- C c2(std::begin(t2), std::end(t2), A(1, 2));
- swap(c1, c2);
-
- assert(distance(c1.begin(), c1.end()) == 3);
- assert(*next(c1.begin(), 0) == 10);
- assert(*next(c1.begin(), 1) == 11);
- assert(*next(c1.begin(), 2) == 12);
- assert(c1.get_allocator().get_id() == 1);
-
- assert(distance(c2.begin(), c2.end()) == 6);
- assert(*next(c2.begin(), 0) == 0);
- assert(*next(c2.begin(), 1) == 1);
- assert(*next(c2.begin(), 2) == 2);
- assert(*next(c2.begin(), 3) == 3);
- assert(*next(c2.begin(), 4) == 4);
- assert(*next(c2.begin(), 5) == 5);
- assert(c2.get_allocator().get_id() == 2);
- }
- {
- typedef int T;
- typedef test_allocator<T> A;
- typedef std::forward_list<T, A> C;
- const T t1[] = {0, 1, 2, 3, 4, 5};
- C c1(std::begin(t1), std::end(t1), A(1, 1));
- C c2(A(1, 2));
- swap(c1, c2);
-
- assert(distance(c1.begin(), c1.end()) == 0);
- assert(c1.get_allocator().get_id() == 1);
-
- assert(distance(c2.begin(), c2.end()) == 6);
- assert(*next(c2.begin(), 0) == 0);
- assert(*next(c2.begin(), 1) == 1);
- assert(*next(c2.begin(), 2) == 2);
- assert(*next(c2.begin(), 3) == 3);
- assert(*next(c2.begin(), 4) == 4);
- assert(*next(c2.begin(), 5) == 5);
- assert(c2.get_allocator().get_id() == 2);
- }
- {
- typedef int T;
- typedef test_allocator<T> A;
- typedef std::forward_list<T, A> C;
- C c1(A(1, 1));
- const T t2[] = {10, 11, 12};
- C c2(std::begin(t2), std::end(t2), A(1, 2));
- swap(c1, c2);
-
- assert(distance(c1.begin(), c1.end()) == 3);
- assert(*next(c1.begin(), 0) == 10);
- assert(*next(c1.begin(), 1) == 11);
- assert(*next(c1.begin(), 2) == 12);
- assert(c1.get_allocator().get_id() == 1);
-
- assert(distance(c2.begin(), c2.end()) == 0);
- assert(c2.get_allocator().get_id() == 2);
- }
- {
- typedef int T;
- typedef test_allocator<T> A;
- typedef std::forward_list<T, A> C;
- C c1(A(1, 1));
- C c2(A(1, 2));
- swap(c1, c2);
-
- assert(distance(c1.begin(), c1.end()) == 0);
- assert(c1.get_allocator().get_id() == 1);
-
- assert(distance(c2.begin(), c2.end()) == 0);
- assert(c2.get_allocator().get_id() == 2);
- }
-
- {
- typedef int T;
- typedef other_allocator<T> A;
- typedef std::forward_list<T, A> C;
- const T t1[] = {0, 1, 2, 3, 4, 5};
- C c1(std::begin(t1), std::end(t1), A(1));
- const T t2[] = {10, 11, 12};
- C c2(std::begin(t2), std::end(t2), A(2));
- swap(c1, c2);
-
- assert(distance(c1.begin(), c1.end()) == 3);
- assert(*next(c1.begin(), 0) == 10);
- assert(*next(c1.begin(), 1) == 11);
- assert(*next(c1.begin(), 2) == 12);
- assert(c1.get_allocator() == A(2));
-
- assert(distance(c2.begin(), c2.end()) == 6);
- assert(*next(c2.begin(), 0) == 0);
- assert(*next(c2.begin(), 1) == 1);
- assert(*next(c2.begin(), 2) == 2);
- assert(*next(c2.begin(), 3) == 3);
- assert(*next(c2.begin(), 4) == 4);
- assert(*next(c2.begin(), 5) == 5);
- assert(c2.get_allocator() == A(1));
- }
- {
- typedef int T;
- typedef other_allocator<T> A;
- typedef std::forward_list<T, A> C;
- const T t1[] = {0, 1, 2, 3, 4, 5};
- C c1(std::begin(t1), std::end(t1), A(1));
- C c2(A(2));
- swap(c1, c2);
-
- assert(distance(c1.begin(), c1.end()) == 0);
- assert(c1.get_allocator() == A(2));
-
- assert(distance(c2.begin(), c2.end()) == 6);
- assert(*next(c2.begin(), 0) == 0);
- assert(*next(c2.begin(), 1) == 1);
- assert(*next(c2.begin(), 2) == 2);
- assert(*next(c2.begin(), 3) == 3);
- assert(*next(c2.begin(), 4) == 4);
- assert(*next(c2.begin(), 5) == 5);
- assert(c2.get_allocator() == A(1));
- }
- {
- typedef int T;
- typedef other_allocator<T> A;
- typedef std::forward_list<T, A> C;
- C c1(A(1));
- const T t2[] = {10, 11, 12};
- C c2(std::begin(t2), std::end(t2), A(2));
- swap(c1, c2);
-
- assert(distance(c1.begin(), c1.end()) == 3);
- assert(*next(c1.begin(), 0) == 10);
- assert(*next(c1.begin(), 1) == 11);
- assert(*next(c1.begin(), 2) == 12);
- assert(c1.get_allocator() == A(2));
-
- assert(distance(c2.begin(), c2.end()) == 0);
- assert(c2.get_allocator() == A(1));
- }
- {
- typedef int T;
- typedef other_allocator<T> A;
- typedef std::forward_list<T, A> C;
- C c1(A(1));
- C c2(A(2));
- swap(c1, c2);
-
- assert(distance(c1.begin(), c1.end()) == 0);
- assert(c1.get_allocator() == A(2));
-
- assert(distance(c2.begin(), c2.end()) == 0);
- assert(c2.get_allocator() == A(1));
- }
-#if TEST_STD_VER >= 11
- {
- typedef int T;
- typedef min_allocator<T> A;
- typedef std::forward_list<T, A> C;
- const T t1[] = {0, 1, 2, 3, 4, 5};
- C c1(std::begin(t1), std::end(t1), A());
- const T t2[] = {10, 11, 12};
- C c2(std::begin(t2), std::end(t2), A());
- swap(c1, c2);
-
- assert(distance(c1.begin(), c1.end()) == 3);
- assert(*next(c1.begin(), 0) == 10);
- assert(*next(c1.begin(), 1) == 11);
- assert(*next(c1.begin(), 2) == 12);
- assert(c1.get_allocator() == A());
-
- assert(distance(c2.begin(), c2.end()) == 6);
- assert(*next(c2.begin(), 0) == 0);
- assert(*next(c2.begin(), 1) == 1);
- assert(*next(c2.begin(), 2) == 2);
- assert(*next(c2.begin(), 3) == 3);
- assert(*next(c2.begin(), 4) == 4);
- assert(*next(c2.begin(), 5) == 5);
- assert(c2.get_allocator() == A());
- }
- {
- typedef int T;
- typedef min_allocator<T> A;
- typedef std::forward_list<T, A> C;
- const T t1[] = {0, 1, 2, 3, 4, 5};
- C c1(std::begin(t1), std::end(t1), A());
- C c2(A{});
- swap(c1, c2);
-
- assert(distance(c1.begin(), c1.end()) == 0);
- assert(c1.get_allocator() == A());
-
- assert(distance(c2.begin(), c2.end()) == 6);
- assert(*next(c2.begin(), 0) == 0);
- assert(*next(c2.begin(), 1) == 1);
- assert(*next(c2.begin(), 2) == 2);
- assert(*next(c2.begin(), 3) == 3);
- assert(*next(c2.begin(), 4) == 4);
- assert(*next(c2.begin(), 5) == 5);
- assert(c2.get_allocator() == A());
- }
- {
- typedef int T;
- typedef min_allocator<T> A;
- typedef std::forward_list<T, A> C;
- C c1(A{});
- const T t2[] = {10, 11, 12};
- C c2(std::begin(t2), std::end(t2), A());
- swap(c1, c2);
-
- assert(distance(c1.begin(), c1.end()) == 3);
- assert(*next(c1.begin(), 0) == 10);
- assert(*next(c1.begin(), 1) == 11);
- assert(*next(c1.begin(), 2) == 12);
- assert(c1.get_allocator() == A());
-
- assert(distance(c2.begin(), c2.end()) == 0);
- assert(c2.get_allocator() == A());
- }
- {
- typedef int T;
- typedef min_allocator<T> A;
- typedef std::forward_list<T, A> C;
- C c1(A{});
- C c2(A{});
- swap(c1, c2);
-
- assert(distance(c1.begin(), c1.end()) == 0);
- assert(c1.get_allocator() == A());
-
- assert(distance(c2.begin(), c2.end()) == 0);
- assert(c2.get_allocator() == A());
- }
-#endif
-}
diff --git a/third_party/llvm-project/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/relational.pass.cpp b/third_party/llvm-project/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/relational.pass.cpp
deleted file mode 100644
index e65e064..0000000
--- a/third_party/llvm-project/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/relational.pass.cpp
+++ /dev/null
@@ -1,65 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-// <forward_list>
-
-// template <class T, class Allocator>
-// bool operator< (const forward_list<T, Allocator>& x,
-// const forward_list<T, Allocator>& y);
-//
-// template <class T, class Allocator>
-// bool operator> (const forward_list<T, Allocator>& x,
-// const forward_list<T, Allocator>& y);
-//
-// template <class T, class Allocator>
-// bool operator>=(const forward_list<T, Allocator>& x,
-// const forward_list<T, Allocator>& y);
-//
-// template <class T, class Allocator>
-// bool operator<=(const forward_list<T, Allocator>& x,
-// const forward_list<T, Allocator>& y);
-
-#include <forward_list>
-#include <iterator>
-#include <algorithm>
-#include <cassert>
-
-#include "test_macros.h"
-#include "min_allocator.h"
-
-template <class C>
-void test(int N, int M)
-{
- C c1;
- for (int i = 0; i < N; ++i)
- c1.push_front(i);
- C c2;
- for (int i = 0; i < M; ++i)
- c2.push_front(i);
- if (N < M)
- assert(c1 < c2);
- if (N <= M)
- assert(c1 <= c2);
- if (N >= M)
- assert(c1 >= c2);
- if (N > M)
- assert(c1 > c2);
-}
-
-int main()
-{
- for (int i = 0; i < 10; ++i)
- for (int j = 0; j < 10; ++j)
- test<std::forward_list<int> >(i, j);
-#if TEST_STD_VER >= 11
- for (int i = 0; i < 10; ++i)
- for (int j = 0; j < 10; ++j)
- test<std::forward_list<int, min_allocator<int>> >(i, j);
-#endif
-}
diff --git a/third_party/llvm-project/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/swap_noexcept.pass.cpp b/third_party/llvm-project/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/swap_noexcept.pass.cpp
deleted file mode 100644
index ae48d1a..0000000
--- a/third_party/llvm-project/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/swap_noexcept.pass.cpp
+++ /dev/null
@@ -1,88 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-// UNSUPPORTED: c++98, c++03
-
-// <forward_list>
-
-// void swap(forward_list& c)
-// noexcept(!allocator_type::propagate_on_container_swap::value ||
-// __is_nothrow_swappable<allocator_type>::value);
-//
-// In C++17, the standard says that swap shall have:
-// noexcept(is_always_equal<allocator_type>::value);
-
-// This tests a conforming extension
-
-#include <forward_list>
-#include <utility>
-#include <cassert>
-
-#include "test_macros.h"
-#include "MoveOnly.h"
-#include "test_allocator.h"
-
-template <class T>
-struct some_alloc
-{
- typedef T value_type;
-
- some_alloc() {}
- some_alloc(const some_alloc&);
- void deallocate(void*, unsigned) {}
-
- typedef std::true_type propagate_on_container_swap;
-};
-
-template <class T>
-struct some_alloc2
-{
- typedef T value_type;
-
- some_alloc2() {}
- some_alloc2(const some_alloc2&);
- void deallocate(void*, unsigned) {}
-
- typedef std::false_type propagate_on_container_swap;
- typedef std::true_type is_always_equal;
-};
-
-int main()
-{
- {
- typedef std::forward_list<MoveOnly> C;
- static_assert(noexcept(swap(std::declval<C&>(), std::declval<C&>())), "");
- }
-#if defined(_LIBCPP_VERSION)
- {
- typedef std::forward_list<MoveOnly, test_allocator<MoveOnly>> C;
- static_assert(noexcept(swap(std::declval<C&>(), std::declval<C&>())), "");
- }
- {
- typedef std::forward_list<MoveOnly, other_allocator<MoveOnly>> C;
- static_assert(noexcept(swap(std::declval<C&>(), std::declval<C&>())), "");
- }
-#endif // _LIBCPP_VERSION
- {
- typedef std::forward_list<MoveOnly, some_alloc<MoveOnly>> C;
-#if TEST_STD_VER >= 14
- // In C++14, if POCS is set, swapping the allocator is required not to throw
- static_assert( noexcept(swap(std::declval<C&>(), std::declval<C&>())), "");
-#else
- static_assert(!noexcept(swap(std::declval<C&>(), std::declval<C&>())), "");
-#endif
- }
-#if TEST_STD_VER >= 14
- {
- typedef std::forward_list<MoveOnly, some_alloc2<MoveOnly>> C;
- // if the allocators are always equal, then the swap can be noexcept
- static_assert( noexcept(swap(std::declval<C&>(), std::declval<C&>())), "");
- }
-#endif
-}
diff --git a/third_party/llvm-project/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.spec/swap.pass.cpp b/third_party/llvm-project/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.spec/swap.pass.cpp
deleted file mode 100644
index b40e470..0000000
--- a/third_party/llvm-project/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.spec/swap.pass.cpp
+++ /dev/null
@@ -1,104 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-// <memory>
-
-// shared_ptr
-
-// template<class T> void swap(shared_ptr<T>& a, shared_ptr<T>& b);
-
-#include <memory>
-#include <cassert>
-
-struct A
-{
- static int count;
-
- A() {++count;}
- A(const A&) {++count;}
- ~A() {--count;}
-};
-
-int A::count = 0;
-
-int main()
-{
- {
- A* ptr1 = new A;
- A* ptr2 = new A;
- std::shared_ptr<A> p1(ptr1);
- {
- std::shared_ptr<A> p2(ptr2);
- swap(p1, p2);
- assert(p1.use_count() == 1);
- assert(p1.get() == ptr2);
- assert(p2.use_count() == 1);
- assert(p2.get() == ptr1);
- assert(A::count == 2);
- }
- assert(p1.use_count() == 1);
- assert(p1.get() == ptr2);
- assert(A::count == 1);
- }
- assert(A::count == 0);
- {
- A* ptr1 = new A;
- A* ptr2 = 0;
- std::shared_ptr<A> p1(ptr1);
- {
- std::shared_ptr<A> p2;
- swap(p1, p2);
- assert(p1.use_count() == 0);
- assert(p1.get() == ptr2);
- assert(p2.use_count() == 1);
- assert(p2.get() == ptr1);
- assert(A::count == 1);
- }
- assert(p1.use_count() == 0);
- assert(p1.get() == ptr2);
- assert(A::count == 0);
- }
- assert(A::count == 0);
- {
- A* ptr1 = 0;
- A* ptr2 = new A;
- std::shared_ptr<A> p1;
- {
- std::shared_ptr<A> p2(ptr2);
- swap(p1, p2);
- assert(p1.use_count() == 1);
- assert(p1.get() == ptr2);
- assert(p2.use_count() == 0);
- assert(p2.get() == ptr1);
- assert(A::count == 1);
- }
- assert(p1.use_count() == 1);
- assert(p1.get() == ptr2);
- assert(A::count == 1);
- }
- assert(A::count == 0);
- {
- A* ptr1 = 0;
- A* ptr2 = 0;
- std::shared_ptr<A> p1;
- {
- std::shared_ptr<A> p2;
- swap(p1, p2);
- assert(p1.use_count() == 0);
- assert(p1.get() == ptr2);
- assert(p2.use_count() == 0);
- assert(p2.get() == ptr1);
- assert(A::count == 0);
- }
- assert(p1.use_count() == 0);
- assert(p1.get() == ptr2);
- assert(A::count == 0);
- }
- assert(A::count == 0);
-}
diff --git a/third_party/llvm-project/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.spec/swap.pass.cpp b/third_party/llvm-project/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.spec/swap.pass.cpp
deleted file mode 100644
index e13d5ae..0000000
--- a/third_party/llvm-project/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.spec/swap.pass.cpp
+++ /dev/null
@@ -1,49 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-// <memory>
-
-// weak_ptr
-
-// template<class T> void swap(weak_ptr<T>& a, weak_ptr<T>& b)
-
-#include <memory>
-#include <cassert>
-
-struct A
-{
- static int count;
-
- A() {++count;}
- A(const A&) {++count;}
- ~A() {--count;}
-};
-
-int A::count = 0;
-
-int main()
-{
- {
- A* ptr1 = new A;
- A* ptr2 = new A;
- std::shared_ptr<A> p1(ptr1);
- std::weak_ptr<A> w1(p1);
- {
- std::shared_ptr<A> p2(ptr2);
- std::weak_ptr<A> w2(p2);
- swap(w1, w2);
- assert(w1.use_count() == 1);
- assert(w1.lock().get() == ptr2);
- assert(w2.use_count() == 1);
- assert(w2.lock().get() == ptr1);
- assert(A::count == 2);
- }
- }
- assert(A::count == 0);
-}
diff --git a/third_party/llvm-project/libcxx/test/std/utilities/utility/pairs/pairs.spec/comparison.pass.cpp b/third_party/llvm-project/libcxx/test/std/utilities/utility/pairs/pairs.spec/comparison.pass.cpp
deleted file mode 100644
index 3b994df..0000000
--- a/third_party/llvm-project/libcxx/test/std/utilities/utility/pairs/pairs.spec/comparison.pass.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-// <utility>
-
-// template <class T1, class T2> struct pair
-
-// template <class T1, class T2> bool operator==(const pair<T1,T2>&, const pair<T1,T2>&);
-// template <class T1, class T2> bool operator!=(const pair<T1,T2>&, const pair<T1,T2>&);
-// template <class T1, class T2> bool operator< (const pair<T1,T2>&, const pair<T1,T2>&);
-// template <class T1, class T2> bool operator> (const pair<T1,T2>&, const pair<T1,T2>&);
-// template <class T1, class T2> bool operator>=(const pair<T1,T2>&, const pair<T1,T2>&);
-// template <class T1, class T2> bool operator<=(const pair<T1,T2>&, const pair<T1,T2>&);
-
-#include <utility>
-#include <cassert>
-
-#include "test_macros.h"
-
-int main()
-{
- {
- typedef std::pair<int, short> P;
- P p1(3, static_cast<short>(4));
- P p2(3, static_cast<short>(4));
- assert( (p1 == p2));
- assert(!(p1 != p2));
- assert(!(p1 < p2));
- assert( (p1 <= p2));
- assert(!(p1 > p2));
- assert( (p1 >= p2));
- }
- {
- typedef std::pair<int, short> P;
- P p1(2, static_cast<short>(4));
- P p2(3, static_cast<short>(4));
- assert(!(p1 == p2));
- assert( (p1 != p2));
- assert( (p1 < p2));
- assert( (p1 <= p2));
- assert(!(p1 > p2));
- assert(!(p1 >= p2));
- }
- {
- typedef std::pair<int, short> P;
- P p1(3, static_cast<short>(2));
- P p2(3, static_cast<short>(4));
- assert(!(p1 == p2));
- assert( (p1 != p2));
- assert( (p1 < p2));
- assert( (p1 <= p2));
- assert(!(p1 > p2));
- assert(!(p1 >= p2));
- }
- {
- typedef std::pair<int, short> P;
- P p1(3, static_cast<short>(4));
- P p2(2, static_cast<short>(4));
- assert(!(p1 == p2));
- assert( (p1 != p2));
- assert(!(p1 < p2));
- assert(!(p1 <= p2));
- assert( (p1 > p2));
- assert( (p1 >= p2));
- }
- {
- typedef std::pair<int, short> P;
- P p1(3, static_cast<short>(4));
- P p2(3, static_cast<short>(2));
- assert(!(p1 == p2));
- assert( (p1 != p2));
- assert(!(p1 < p2));
- assert(!(p1 <= p2));
- assert( (p1 > p2));
- assert( (p1 >= p2));
- }
-
-#if TEST_STD_VER > 11
- {
- typedef std::pair<int, short> P;
- constexpr P p1(3, static_cast<short>(4));
- constexpr P p2(3, static_cast<short>(2));
- static_assert(!(p1 == p2), "");
- static_assert( (p1 != p2), "");
- static_assert(!(p1 < p2), "");
- static_assert(!(p1 <= p2), "");
- static_assert( (p1 > p2), "");
- static_assert( (p1 >= p2), "");
- }
-#endif
-}
diff --git a/third_party/llvm-project/libcxx/test/std/utilities/utility/pairs/pairs.spec/make_pair.pass.cpp b/third_party/llvm-project/libcxx/test/std/utilities/utility/pairs/pairs.spec/make_pair.pass.cpp
deleted file mode 100644
index 3586243..0000000
--- a/third_party/llvm-project/libcxx/test/std/utilities/utility/pairs/pairs.spec/make_pair.pass.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-// <utility>
-
-// template <class T1, class T2> pair<V1, V2> make_pair(T1&&, T2&&);
-
-#include <utility>
-#include <memory>
-#include <cassert>
-
-#include "test_macros.h"
-
-int main()
-{
- {
- typedef std::pair<int, short> P1;
- P1 p1 = std::make_pair(3, static_cast<short>(4));
- assert(p1.first == 3);
- assert(p1.second == 4);
- }
-
-#if TEST_STD_VER >= 11
- {
- typedef std::pair<std::unique_ptr<int>, short> P1;
- P1 p1 = std::make_pair(std::unique_ptr<int>(new int(3)), static_cast<short>(4));
- assert(*p1.first == 3);
- assert(p1.second == 4);
- }
- {
- typedef std::pair<std::unique_ptr<int>, short> P1;
- P1 p1 = std::make_pair(nullptr, static_cast<short>(4));
- assert(p1.first == nullptr);
- assert(p1.second == 4);
- }
-#endif
-#if TEST_STD_VER >= 14
- {
- typedef std::pair<int, short> P1;
- constexpr P1 p1 = std::make_pair(3, static_cast<short>(4));
- static_assert(p1.first == 3, "");
- static_assert(p1.second == 4, "");
- }
-#endif
-
-}
diff --git a/third_party/llvm-project/libcxx/test/std/utilities/utility/pairs/pairs.spec/non_member_swap.pass.cpp b/third_party/llvm-project/libcxx/test/std/utilities/utility/pairs/pairs.spec/non_member_swap.pass.cpp
deleted file mode 100644
index 62fa942..0000000
--- a/third_party/llvm-project/libcxx/test/std/utilities/utility/pairs/pairs.spec/non_member_swap.pass.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-// <utility>
-
-// template <class T1, class T2> struct pair
-
-// template <class T1, class T2> void swap(pair<T1, T2>& x, pair<T1, T2>& y);
-
-#include <utility>
-#include <cassert>
-
-int main()
-{
- {
- typedef std::pair<int, short> P1;
- P1 p1(3, static_cast<short>(4));
- P1 p2(5, static_cast<short>(6));
- swap(p1, p2);
- assert(p1.first == 5);
- assert(p1.second == 6);
- assert(p2.first == 3);
- assert(p2.second == 4);
- }
-}
diff --git a/third_party/llvm-project/llvm/utils/vscode/tablegen/.vscode/launch.json b/third_party/llvm-project/llvm/utils/vscode/tablegen/.vscode/launch.json
deleted file mode 100644
index 8384213..0000000
--- a/third_party/llvm-project/llvm/utils/vscode/tablegen/.vscode/launch.json
+++ /dev/null
@@ -1,13 +0,0 @@
-// A launch configuration that launches the extension inside a new window
-{
- "version": "0.1.0",
- "configurations": [
- {
- "name": "Launch Extension",
- "type": "extensionHost",
- "request": "launch",
- "runtimeExecutable": "${execPath}",
- "args": ["--extensionDevelopmentPath=${workspaceRoot}" ]
- }
- ]
-}
\ No newline at end of file
diff --git a/third_party/musl/dist/config.mak b/third_party/musl/dist/config.mak
deleted file mode 100644
index 1fc4369..0000000
--- a/third_party/musl/dist/config.mak
+++ /dev/null
@@ -1,36 +0,0 @@
-#
-# musl config.mak template (original in dist/config.mak)
-#
-
-# Target CPU architecture. Supported values: i386, x86_64
-ARCH = i386
-
-# Installation prefix. DO NOT use /, /usr, or /usr/local !
-prefix = /usr/local/musl
-
-# Installation prefix for musl-gcc compiler wrapper.
-exec_prefix = /usr/local
-
-# Location for the dynamic linker ld-musl-$(ARCH).so.1
-syslibdir = /lib
-
-# Uncomment if you want to build i386 musl on a 64-bit host
-#CFLAGS += -m32
-
-# Uncomment to fix broken distro-patched toolchains where hash-style=gnu(only)
-#LDFLAGS += -Wl,--hash-style,both
-
-# Uncomment to fix broken distro-patched toolchains where stack-protector=on
-#CFLAGS += -fno-stack-protector
-
-# Uncomment for smaller code size.
-#CFLAGS += -fomit-frame-pointer -mno-accumulate-outgoing-args
-
-# Uncomment to omit massive GCC4 DWARF2 bloat (only useful for debugging)
-#CFLAGS += -fno-asynchronous-unwind-tables
-
-# Uncomment for warnings (as errors). Might need tuning to your gcc version.
-#CFLAGS += -Werror -Wall -Wpointer-arith -Wcast-align -Wno-parentheses -Wno-char-subscripts -Wno-uninitialized -Wno-sequence-point -Wno-missing-braces -Wno-unused-value -Wno-overflow -Wno-int-to-pointer-cast
-
-# Uncomment if you want to disable building the shared library.
-#SHARED_LIBS =
diff --git a/third_party/opus/celt/dump_modes/Makefile b/third_party/opus/celt/dump_modes/Makefile
deleted file mode 100644
index 93f599f..0000000
--- a/third_party/opus/celt/dump_modes/Makefile
+++ /dev/null
@@ -1,32 +0,0 @@
-
-CFLAGS=-O2 -Wall -Wextra -DHAVE_CONFIG_H
-INCLUDES=-I. -I../ -I../.. -I../../include
-
-SOURCES = dump_modes.c \
- ../modes.c \
- ../cwrs.c \
- ../rate.c \
- ../entcode.c \
- ../entenc.c \
- ../entdec.c \
- ../mathops.c \
- ../mdct.c \
- ../kiss_fft.c
-
-ifdef HAVE_ARM_NE10
-CC = gcc
-CFLAGS += -mfpu=neon
-INCLUDES += -I$(NE10_INCDIR) -DHAVE_ARM_NE10 -DOPUS_ARM_PRESUME_NEON_INTR
-LIBS = -L$(NE10_LIBDIR) -lNE10
-SOURCES += ../arm/celt_ne10_fft.c \
- dump_modes_arm_ne10.c \
- ../arm/armcpu.c
-endif
-
-all: dump_modes
-
-dump_modes:
- $(PREFIX)$(CC) $(CFLAGS) $(INCLUDES) -DCUSTOM_MODES_ONLY -DCUSTOM_MODES $(SOURCES) -o $@ $(LIBS) -lm
-
-clean:
- rm -f dump_modes
diff --git a/third_party/opus/starboard/config.h b/third_party/opus/starboard/config.h
deleted file mode 100644
index 7c67f29..0000000
--- a/third_party/opus/starboard/config.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/***********************************************************************
-Copyright (c) 2011, Skype Limited. All rights reserved.
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright
-notice, this list of conditions and the following disclaimer in the
-documentation and/or other materials provided with the distribution.
-- Neither the name of Internet Society, IETF or IETF Trust, nor the
-names of specific contributors, may be used to endorse or promote
-products derived from this software without specific prior written
-permission.
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#define USE_ALLOCA 0
-
-/* Comment out the next line for floating-point code */
-/*#define FIXED_POINT 1 */
-
-#define OPUS_BUILD 1
-
-#if defined(_M_IX86) || defined(_M_X64)
-/* Can always compile SSE intrinsics (no special compiler flags necessary) */
-#define OPUS_X86_MAY_HAVE_SSE
-#define OPUS_X86_MAY_HAVE_SSE2
-#define OPUS_X86_MAY_HAVE_SSE4_1
-
-/* Presume SSE functions, if compiled to use SSE/SSE2/AVX (note that AMD64 implies SSE2, and AVX
- implies SSE4.1) */
-#if defined(_M_X64) || (defined(_M_IX86_FP) && (_M_IX86_FP >= 1)) || defined(__AVX__)
-#define OPUS_X86_PRESUME_SSE 1
-#endif
-#if defined(_M_X64) || (defined(_M_IX86_FP) && (_M_IX86_FP >= 2)) || defined(__AVX__)
-#define OPUS_X86_PRESUME_SSE2 1
-#endif
-#if defined(__AVX__)
-#define OPUS_X86_PRESUME_SSE4_1 1
-#endif
-
-#if !defined(OPUS_X86_PRESUME_SSE4_1) || !defined(OPUS_X86_PRESUME_SSE2) || !defined(OPUS_X86_PRESUME_SSE)
-#define OPUS_HAVE_RTCD 1
-#endif
-
-#endif
-
-#include "version.h"
-
-#endif /* CONFIG_H */
diff --git a/third_party/opus/starboard/version.h b/third_party/opus/starboard/version.h
deleted file mode 100644
index d95510d..0000000
--- a/third_party/opus/starboard/version.h
+++ /dev/null
@@ -1 +0,0 @@
-#define OPUS_VERSION "1.3-rc-2-gc1c247d-dirty"
diff --git a/third_party/opus/win32/config.h b/third_party/opus/win32/config.h
deleted file mode 100644
index 3e54bcb..0000000
--- a/third_party/opus/win32/config.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/***********************************************************************
-Copyright (c) 2011, Skype Limited. All rights reserved.
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright
-notice, this list of conditions and the following disclaimer in the
-documentation and/or other materials provided with the distribution.
-- Neither the name of Internet Society, IETF or IETF Trust, nor the
-names of specific contributors, may be used to endorse or promote
-products derived from this software without specific prior written
-permission.
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#define USE_ALLOCA 1
-
-/* Comment out the next line for floating-point code */
-/*#define FIXED_POINT 1 */
-
-#define OPUS_BUILD 1
-
-#if defined(_M_IX86) || defined(_M_X64)
-/* Can always compile SSE intrinsics (no special compiler flags necessary) */
-#define OPUS_X86_MAY_HAVE_SSE
-#define OPUS_X86_MAY_HAVE_SSE2
-#define OPUS_X86_MAY_HAVE_SSE4_1
-
-/* Presume SSE functions, if compiled to use SSE/SSE2/AVX (note that AMD64 implies SSE2, and AVX
- implies SSE4.1) */
-#if defined(_M_X64) || (defined(_M_IX86_FP) && (_M_IX86_FP >= 1)) || defined(__AVX__)
-#define OPUS_X86_PRESUME_SSE 1
-#endif
-#if defined(_M_X64) || (defined(_M_IX86_FP) && (_M_IX86_FP >= 2)) || defined(__AVX__)
-#define OPUS_X86_PRESUME_SSE2 1
-#endif
-#if defined(__AVX__)
-#define OPUS_X86_PRESUME_SSE4_1 1
-#endif
-
-#if !defined(OPUS_X86_PRESUME_SSE4_1) || !defined(OPUS_X86_PRESUME_SSE2) || !defined(OPUS_X86_PRESUME_SSE)
-#define OPUS_HAVE_RTCD 1
-#endif
-
-#endif
-
-#include "version.h"
-
-#endif /* CONFIG_H */
diff --git a/third_party/opus/win32/version.h b/third_party/opus/win32/version.h
deleted file mode 100644
index d95510d..0000000
--- a/third_party/opus/win32/version.h
+++ /dev/null
@@ -1 +0,0 @@
-#define OPUS_VERSION "1.3-rc-2-gc1c247d-dirty"
diff --git a/third_party/web_platform_tests/testharness_runner.html b/third_party/web_platform_tests/testharness_runner.html
deleted file mode 100644
index 1cc80a2..0000000
--- a/third_party/web_platform_tests/testharness_runner.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<!doctype html>
-<title></title>
-<script>
-var timeout_multiplier = 1;
-var win = null;
-</script>
diff --git a/third_party/web_platform_tests/tools/.coveragerc b/third_party/web_platform_tests/tools/.coveragerc
deleted file mode 100644
index 6c49e51..0000000
--- a/third_party/web_platform_tests/tools/.coveragerc
+++ /dev/null
@@ -1,26 +0,0 @@
-[run]
-branch = True
-parallel = True
-omit =
- html5lib/*
- py/*
- pytest/*
- pywebsocket/*
- six/*
- webdriver/*
- wptserve/*
- */site-packages/*
- */lib_pypy/*
-
-[paths]
-html5lib =
- html5lib/html5lib
- .tox/**/site-packages/html5lib
-
-pytest =
- pytest/_pytest
- .tox/**/site-packages/_pytest
-
-py =
- py/py
- .tox/**/site-packages/py
diff --git a/third_party/web_platform_tests/tools/pytest/.coveragerc b/third_party/web_platform_tests/tools/pytest/.coveragerc
deleted file mode 100644
index 27db64e..0000000
--- a/third_party/web_platform_tests/tools/pytest/.coveragerc
+++ /dev/null
@@ -1,7 +0,0 @@
-[run]
-omit =
- # standlonetemplate is read dynamically and tested by test_genscript
- *standalonetemplate.py
- # oldinterpret could be removed, as it is no longer used in py26+
- *oldinterpret.py
- vendored_packages
diff --git a/third_party/web_platform_tests/tools/wptrunner/wptrunner/config.json b/third_party/web_platform_tests/tools/wptrunner/wptrunner/config.json
deleted file mode 100644
index d146424..0000000
--- a/third_party/web_platform_tests/tools/wptrunner/wptrunner/config.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{"host": "%(host)s",
- "ports":{"http":[8000, 8001],
- "https":[8443],
- "ws":[8888]},
- "check_subdomains":false,
- "bind_hostname":%(bind_hostname)s,
- "ssl":{}}
diff --git a/third_party/web_platform_tests/tools/wptrunner/wptrunner/testharness_runner.html b/third_party/web_platform_tests/tools/wptrunner/wptrunner/testharness_runner.html
deleted file mode 100644
index 1cc80a2..0000000
--- a/third_party/web_platform_tests/tools/wptrunner/wptrunner/testharness_runner.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<!doctype html>
-<title></title>
-<script>
-var timeout_multiplier = 1;
-var win = null;
-</script>
diff --git a/third_party/web_platform_tests/tools/wptserve/.coveragerc b/third_party/web_platform_tests/tools/wptserve/.coveragerc
deleted file mode 100644
index 0e00c07..0000000
--- a/third_party/web_platform_tests/tools/wptserve/.coveragerc
+++ /dev/null
@@ -1,11 +0,0 @@
-[run]
-branch = True
-parallel = True
-omit =
- */site-packages/*
- */lib_pypy/*
-
-[paths]
-wptserve =
- wptserve
- .tox/**/site-packages/wptserve