From 80881a745beac59f42de5372122e3056c1b2e68b Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Thu, 10 Oct 2024 12:38:24 +0200 Subject: [PATCH 01/31] init --- .env.example | 1 + Cargo.lock | 2014 +++++++++++++++++++++++++++++++--- Cargo.toml | 3 +- abi/Pragma.json | 1 + evm_config.yaml | 47 + src/config.rs | 36 +- src/evm/mod.rs | 1 + src/evm/pragma.rs | 14 + src/lib.rs | 1 + src/main.rs | 2 + src/tests/common/fixtures.rs | 1 + 11 files changed, 1991 insertions(+), 130 deletions(-) create mode 100644 abi/Pragma.json create mode 100644 evm_config.yaml create mode 100644 src/evm/mod.rs create mode 100644 src/evm/pragma.rs diff --git a/.env.example b/.env.example index 13b7f14..5b53a1a 100644 --- a/.env.example +++ b/.env.example @@ -21,6 +21,7 @@ SPOT_PAIRS=BTC/USD,ETH/USD,USDC/USD,USDT/USD,DAI/USD FUTURE_PAIRS=BTC/USD,ETH/USD,BTC/USDT,ETH/USDT IGNORE_SOURCES=BITSTAMP,DEFILLAMA IGNORE_PUBLISHERS=BINANCE +EVM_CONFIG_PATH="./evm_config.yaml" # Prometheus TELEGRAM_TOKEN= diff --git a/Cargo.lock b/Cargo.lock index 1927cca..5a024ff 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -37,6 +37,589 @@ dependencies = [ "memchr", ] +[[package]] +name = "allocator-api2" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" + +[[package]] +name = "alloy" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "056f2c01b2aed86e15b43c47d109bfc8b82553dc34e66452875e51247ec31ab2" +dependencies = [ + "alloy-consensus", + "alloy-contract", + "alloy-core", + "alloy-eips", + "alloy-genesis", + "alloy-json-rpc", + "alloy-network", + "alloy-provider", + "alloy-pubsub", + "alloy-rpc-client", + "alloy-rpc-types", + "alloy-serde", + "alloy-signer", + "alloy-signer-local", + "alloy-transport", + "alloy-transport-http", + "alloy-transport-ipc", + "alloy-transport-ws", +] + +[[package]] +name = "alloy-chains" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94c225801d42099570d0674701dddd4142f0ef715282aeb5985042e2ec962df7" +dependencies = [ + "num_enum", + "strum 0.26.3", +] + +[[package]] +name = "alloy-consensus" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "705687d5bfd019fee57cf9e206b27b30a9a9617535d5590a02b171e813208f8e" +dependencies = [ + "alloy-eips", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "auto_impl", + "c-kzg", + "derive_more", + "serde", +] + +[[package]] +name = "alloy-contract" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "917f7d12cf3971dc8c11c9972f732b35ccb9aaaf5f28f2f87e9e6523bee3a8ad" +dependencies = [ + "alloy-dyn-abi", + "alloy-json-abi", + "alloy-network", + "alloy-network-primitives", + "alloy-primitives", + "alloy-provider", + "alloy-pubsub", + "alloy-rpc-types-eth", + "alloy-sol-types", + "alloy-transport", + "futures", + "futures-util", + "thiserror", +] + +[[package]] +name = "alloy-core" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eeb750349efda145ca6aada68d0336067f7f364d7d44ef09e2cf000b040c5e99" +dependencies = [ + "alloy-dyn-abi", + "alloy-json-abi", + "alloy-primitives", + "alloy-rlp", + "alloy-sol-types", +] + +[[package]] +name = "alloy-dyn-abi" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f95d76a38cae906fd394a5afb0736aaceee5432efe76addfd71048e623e208af" +dependencies = [ + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-type-parser", + "alloy-sol-types", + "const-hex", + "itoa", + "serde", + "serde_json", + "winnow 0.6.20", +] + +[[package]] +name = "alloy-eip2930" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0069cf0642457f87a01a014f6dc29d5d893cd4fd8fddf0c3cdfad1bb3ebafc41" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "serde", +] + +[[package]] +name = "alloy-eip7702" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea59dc42102bc9a1905dc57901edc6dd48b9f38115df86c7d252acba70d71d04" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "k256", + "serde", +] + +[[package]] +name = "alloy-eips" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ffb906284a1e1f63c4607da2068c8197458a352d0b3e9796e67353d72a9be85" +dependencies = [ + "alloy-eip2930", + "alloy-eip7702", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "c-kzg", + "derive_more", + "once_cell", + "serde", + "sha2", +] + +[[package]] +name = "alloy-genesis" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8429cf4554eed9b40feec7f4451113e76596086447550275e3def933faf47ce3" +dependencies = [ + "alloy-primitives", + "alloy-serde", + "serde", +] + +[[package]] +name = "alloy-json-abi" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c66eec1acdd96b39b995b8f5ee5239bc0c871d62c527ae1ac9fd1d7fecd455" +dependencies = [ + "alloy-primitives", + "alloy-sol-type-parser", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-json-rpc" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fa8a1a3c4cbd221f2b8e3693aeb328fca79a757fe556ed08e47bbbc2a70db7" +dependencies = [ + "alloy-primitives", + "alloy-sol-types", + "serde", + "serde_json", + "thiserror", + "tracing", +] + +[[package]] +name = "alloy-network" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85fa23a6a9d612b52e402c995f2d582c25165ec03ac6edf64c861a76bc5b87cd" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-json-rpc", + "alloy-network-primitives", + "alloy-primitives", + "alloy-rpc-types-eth", + "alloy-serde", + "alloy-signer", + "alloy-sol-types", + "async-trait", + "auto_impl", + "futures-utils-wasm", + "thiserror", +] + +[[package]] +name = "alloy-network-primitives" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "801492711d4392b2ccf5fc0bc69e299fa1aab15167d74dcaa9aab96a54f684bd" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-serde", + "serde", +] + +[[package]] +name = "alloy-primitives" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb848c43f6b06ae3de2e4a67496cbbabd78ae87db0f1248934f15d76192c6a" +dependencies = [ + "alloy-rlp", + "bytes", + "cfg-if", + "const-hex", + "derive_more", + "foldhash", + "hashbrown 0.15.0", + "hex-literal", + "indexmap 2.6.0", + "itoa", + "k256", + "keccak-asm", + "paste", + "proptest", + "rand", + "ruint", + "rustc-hash", + "serde", + "sha3", + "tiny-keccak", +] + +[[package]] +name = "alloy-provider" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcfaa4ffec0af04e3555686b8aacbcdf7d13638133a0672749209069750f78a6" +dependencies = [ + "alloy-chains", + "alloy-consensus", + "alloy-eips", + "alloy-json-rpc", + "alloy-network", + "alloy-network-primitives", + "alloy-primitives", + "alloy-pubsub", + "alloy-rpc-client", + "alloy-rpc-types-eth", + "alloy-transport", + "alloy-transport-http", + "alloy-transport-ipc", + "alloy-transport-ws", + "async-stream", + "async-trait", + "auto_impl", + "dashmap", + "futures", + "futures-utils-wasm", + "lru", + "pin-project", + "reqwest 0.12.8", + "serde", + "serde_json", + "thiserror", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "alloy-pubsub" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f32cef487122ae75c91eb50154c70801d71fabdb976fec6c49e0af5e6486ab15" +dependencies = [ + "alloy-json-rpc", + "alloy-primitives", + "alloy-transport", + "bimap", + "futures", + "serde", + "serde_json", + "tokio", + "tokio-stream", + "tower 0.5.1", + "tracing", +] + +[[package]] +name = "alloy-rlp" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26154390b1d205a4a7ac7352aa2eb4f81f391399d4e2f546fb81a2f8bb383f62" +dependencies = [ + "alloy-rlp-derive", + "arrayvec", + "bytes", +] + +[[package]] +name = "alloy-rlp-derive" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d0f2d905ebd295e7effec65e5f6868d153936130ae718352771de3e7d03c75c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "alloy-rpc-client" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "370143ed581aace6e663342d21d209c6b2e34ee6142f7d6675adb518deeaf0dc" +dependencies = [ + "alloy-json-rpc", + "alloy-primitives", + "alloy-pubsub", + "alloy-transport", + "alloy-transport-http", + "alloy-transport-ipc", + "alloy-transport-ws", + "futures", + "pin-project", + "reqwest 0.12.8", + "serde", + "serde_json", + "tokio", + "tokio-stream", + "tower 0.5.1", + "tracing", + "url", +] + +[[package]] +name = "alloy-rpc-types" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ffc534b7919e18f35e3aa1f507b6f3d9d92ec298463a9f6beaac112809d8d06" +dependencies = [ + "alloy-primitives", + "alloy-rpc-types-engine", + "alloy-rpc-types-eth", + "alloy-serde", + "serde", +] + +[[package]] +name = "alloy-rpc-types-engine" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0285c4c09f838ab830048b780d7f4a4f460f309aa1194bb049843309524c64c" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-rlp", + "derive_more", + "strum 0.26.3", +] + +[[package]] +name = "alloy-rpc-types-eth" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413f4aa3ccf2c3e4234a047c5fa4727916d7daf25a89f9b765df0ba09784fd87" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-network-primitives", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "alloy-sol-types", + "derive_more", + "itertools 0.13.0", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-serde" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dff0ab1cdd43ca001e324dc27ee0e8606bd2161d6623c63e0e0b8c4dfc13600" +dependencies = [ + "alloy-primitives", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-signer" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fd4e0ad79c81a27ca659be5d176ca12399141659fef2bcbfdc848da478f4504" +dependencies = [ + "alloy-primitives", + "async-trait", + "auto_impl", + "elliptic-curve", + "k256", + "thiserror", +] + +[[package]] +name = "alloy-signer-local" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "494e0a256f3e99f2426f994bcd1be312c02cb8f88260088dacb33a8b8936475f" +dependencies = [ + "alloy-consensus", + "alloy-network", + "alloy-primitives", + "alloy-signer", + "async-trait", + "k256", + "rand", + "thiserror", +] + +[[package]] +name = "alloy-sol-macro" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "661c516eb1fa3294cc7f2fb8955b3b609d639c282ac81a4eedb14d3046db503a" +dependencies = [ + "alloy-sol-macro-expander", + "alloy-sol-macro-input", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "alloy-sol-macro-expander" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecbabb8fc3d75a0c2cea5215be22e7a267e3efde835b0f2a8922f5e3f5d47683" +dependencies = [ + "alloy-json-abi", + "alloy-sol-macro-input", + "const-hex", + "heck 0.5.0", + "indexmap 2.6.0", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.66", + "syn-solidity", + "tiny-keccak", +] + +[[package]] +name = "alloy-sol-macro-input" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16517f2af03064485150d89746b8ffdcdbc9b6eeb3d536fb66efd7c2846fbc75" +dependencies = [ + "alloy-json-abi", + "const-hex", + "dunce", + "heck 0.5.0", + "proc-macro2", + "quote", + "serde_json", + "syn 2.0.66", + "syn-solidity", +] + +[[package]] +name = "alloy-sol-type-parser" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c07ebb0c1674ff8cbb08378d7c2e0e27919d2a2dae07ad3bca26174deda8d389" +dependencies = [ + "serde", + "winnow 0.6.20", +] + +[[package]] +name = "alloy-sol-types" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e448d879903624863f608c552d10efb0e0905ddbee98b0049412799911eb062" +dependencies = [ + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-macro", + "const-hex", + "serde", +] + +[[package]] +name = "alloy-transport" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ac3e97dad3d31770db0fc89bd6a63b789fbae78963086733f960cf32c483904" +dependencies = [ + "alloy-json-rpc", + "base64 0.22.1", + "futures-util", + "futures-utils-wasm", + "serde", + "serde_json", + "thiserror", + "tokio", + "tower 0.5.1", + "tracing", + "url", +] + +[[package]] +name = "alloy-transport-http" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b367dcccada5b28987c2296717ee04b9a5637aacd78eacb1726ef211678b5212" +dependencies = [ + "alloy-json-rpc", + "alloy-transport", + "reqwest 0.12.8", + "serde_json", + "tower 0.5.1", + "tracing", + "url", +] + +[[package]] +name = "alloy-transport-ipc" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b90cf9cde7f2fce617da52768ee28f522264b282d148384a4ca0ea85af04fa3a" +dependencies = [ + "alloy-json-rpc", + "alloy-pubsub", + "alloy-transport", + "bytes", + "futures", + "interprocess", + "pin-project", + "serde_json", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "alloy-transport-ws" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7153b88690de6a50bba81c11e1d706bc41dbb90126d607404d60b763f6a3947f" +dependencies = [ + "alloy-pubsub", + "alloy-transport", + "futures", + "http 1.1.0", + "rustls 0.23.14", + "serde_json", + "tokio", + "tokio-tungstenite", + "tracing", + "ws_stream_wasm", +] + [[package]] name = "android-tzdata" version = "0.1.1" @@ -44,25 +627,171 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" [[package]] -name = "android_system_properties" -version = "0.1.5" +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "arc-swap" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" + +[[package]] +name = "ark-ff" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" +dependencies = [ + "ark-ff-asm 0.3.0", + "ark-ff-macros 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", + "derivative", + "num-bigint", + "num-traits", + "paste", + "rustc_version 0.3.3", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint", + "num-traits", + "paste", + "rustc_version 0.4.0", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" +dependencies = [ + "num-bigint", + "num-traits", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-serialize" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" +dependencies = [ + "ark-std 0.3.0", + "digest 0.9.0", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-std 0.4.0", + "digest 0.10.7", + "num-bigint", +] + +[[package]] +name = "ark-std" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "async-stream" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" dependencies = [ - "libc", + "async-stream-impl", + "futures-core", + "pin-project-lite", ] [[package]] -name = "arc-swap" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" - -[[package]] -name = "arrayvec" -version = "0.7.4" +name = "async-stream-impl" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] [[package]] name = "async-trait" @@ -75,16 +804,26 @@ dependencies = [ "syn 2.0.66", ] +[[package]] +name = "async_io_stream" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" +dependencies = [ + "futures", + "pharos", + "rustc_version 0.4.0", +] + [[package]] name = "auto_impl" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fee3da8ef1276b0bee5dd1c7258010d8fffd31801447323115a25560e1327b89" +checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ - "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.66", ] [[package]] @@ -105,9 +844,9 @@ dependencies = [ "bitflags 1.3.2", "bytes", "futures-util", - "http", - "http-body", - "hyper", + "http 0.2.11", + "http-body 0.4.6", + "hyper 0.14.27", "itoa", "matchit", "memchr", @@ -120,9 +859,9 @@ dependencies = [ "serde_json", "serde_path_to_error", "serde_urlencoded", - "sync_wrapper", + "sync_wrapper 0.1.2", "tokio", - "tower", + "tower 0.4.13", "tower-layer", "tower-service", ] @@ -136,8 +875,8 @@ dependencies = [ "async-trait", "bytes", "futures-util", - "http", - "http-body", + "http 0.2.11", + "http-body 0.4.6", "mime", "rustversion", "tower-layer", @@ -150,7 +889,7 @@ version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdca6a10ecad987bda04e95606ef85a5417dcaac1a78455242d72e031e2b6b62" dependencies = [ - "heck", + "heck 0.4.1", "proc-macro2", "quote", "syn 2.0.66", @@ -171,6 +910,12 @@ dependencies = [ "rustc-demangle", ] +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + [[package]] name = "base64" version = "0.13.1" @@ -183,6 +928,18 @@ version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + [[package]] name = "bigdecimal" version = "0.4.2" @@ -196,6 +953,27 @@ dependencies = [ "num-traits", ] +[[package]] +name = "bimap" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7" + +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + [[package]] name = "bitflags" version = "1.3.2" @@ -229,6 +1007,18 @@ dependencies = [ "generic-array", ] +[[package]] +name = "blst" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4378725facc195f1a538864863f6de233b500a8862747e7f165078a419d5e874" +dependencies = [ + "cc", + "glob", + "threadpool", + "zeroize", +] + [[package]] name = "bumpalo" version = "3.14.0" @@ -252,6 +1042,24 @@ name = "bytes" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +dependencies = [ + "serde", +] + +[[package]] +name = "c-kzg" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0307f72feab3300336fb803a57134159f6e20139af1357f36c54cb90d8e8928" +dependencies = [ + "blst", + "cc", + "glob", + "hex", + "libc", + "once_cell", + "serde", +] [[package]] name = "cc" @@ -293,6 +1101,25 @@ dependencies = [ "inout", ] +[[package]] +name = "const-hex" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0121754e84117e65f9d90648ee6aa4882a6e63110307ab73967a4c5e7e69e586" +dependencies = [ + "cfg-if", + "cpufeatures", + "hex", + "proptest", + "serde", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + [[package]] name = "core-foundation" version = "0.9.4" @@ -327,6 +1154,12 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + [[package]] name = "crunchy" version = "0.2.2" @@ -340,6 +1173,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ "generic-array", + "rand_core", "subtle", "zeroize", ] @@ -398,6 +1232,26 @@ dependencies = [ "syn 2.0.66", ] +[[package]] +name = "dashmap" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +dependencies = [ + "cfg-if", + "crossbeam-utils", + "hashbrown 0.14.3", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "data-encoding" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" + [[package]] name = "deadpool" version = "0.9.5" @@ -417,6 +1271,16 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63dfa964fe2a66f3fde91fc70b267fe193d822c7e603e2a675a49a7f46ad3f49" +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "zeroize", +] + [[package]] name = "deranged" version = "0.3.10" @@ -427,6 +1291,38 @@ dependencies = [ "serde", ] +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", + "unicode-xid", +] + [[package]] name = "diesel" version = "2.1.4" @@ -505,6 +1401,15 @@ dependencies = [ "syn 2.0.66", ] +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + [[package]] name = "digest" version = "0.10.7" @@ -512,16 +1417,68 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", + "const-oid", "crypto-common", "subtle", ] +[[package]] +name = "doctest-file" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aac81fa3e28d21450aa4d2ac065992ba96a1d7303efbce51a95f4fd175b67562" + [[package]] name = "dotenv" version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff", + "generic-array", + "group", + "pkcs8", + "rand_core", + "sec1", + "subtle", + "zeroize", +] + [[package]] name = "encoding_rs" version = "0.8.33" @@ -568,7 +1525,7 @@ checksum = "1fda3bf123be441da5260717e0661c25a2fd9cb2b2c1d20bf2e05580047158ab" dependencies = [ "aes", "ctr", - "digest", + "digest 0.10.7", "hex", "hmac", "pbkdf2", @@ -621,6 +1578,27 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" +[[package]] +name = "fastrlp" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "rand_core", + "subtle", +] + [[package]] name = "finl_unicode" version = "1.2.0" @@ -655,6 +1633,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" + [[package]] name = "foreign-types" version = "0.3.2" @@ -780,6 +1764,12 @@ dependencies = [ "slab", ] +[[package]] +name = "futures-utils-wasm" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42012b0f064e01aa58b545fe3727f90f7dd4020f4a3ea735b50344965f5a57e9" + [[package]] name = "generic-array" version = "0.14.7" @@ -788,6 +1778,7 @@ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", + "zeroize", ] [[package]] @@ -815,6 +1806,17 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core", + "subtle", +] + [[package]] name = "h2" version = "0.3.22" @@ -826,8 +1828,8 @@ dependencies = [ "futures-core", "futures-sink", "futures-util", - "http", - "indexmap 2.1.0", + "http 0.2.11", + "indexmap 2.6.0", "slab", "tokio", "tokio-util", @@ -846,23 +1848,50 @@ version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +[[package]] +name = "hashbrown" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", + "serde", +] + [[package]] name = "heck" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + [[package]] name = "hermit-abi" -version = "0.3.3" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] name = "hex" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +dependencies = [ + "serde", +] + +[[package]] +name = "hex-literal" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" [[package]] name = "hmac" @@ -870,7 +1899,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest", + "digest 0.10.7", ] [[package]] @@ -885,13 +1914,47 @@ dependencies = [ ] [[package]] -name = "http-body" -version = "0.4.6" +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.11", + "pin-project-lite", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.1.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ "bytes", - "http", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", "pin-project-lite", ] @@ -924,8 +1987,8 @@ dependencies = [ "futures-core", "futures-util", "h2", - "http", - "http-body", + "http 0.2.11", + "http-body 0.4.6", "httparse", "httpdate", "itoa", @@ -937,6 +2000,25 @@ dependencies = [ "want", ] +[[package]] +name = "hyper" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + [[package]] name = "hyper-rustls" version = "0.24.2" @@ -944,11 +2026,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", - "http", - "hyper", - "rustls", + "http 0.2.11", + "hyper 0.14.27", + "rustls 0.21.10", "tokio", - "tokio-rustls", + "tokio-rustls 0.24.1", ] [[package]] @@ -958,10 +2040,46 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ "bytes", - "hyper", + "hyper 0.14.27", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper 1.4.1", + "hyper-util", "native-tls", "tokio", "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "hyper 1.4.1", + "pin-project-lite", + "socket2 0.5.5", + "tokio", + "tower 0.4.13", + "tower-service", + "tracing", ] [[package]] @@ -1054,12 +2172,13 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.1.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", - "hashbrown 0.14.3", + "hashbrown 0.15.0", + "serde", ] [[package]] @@ -1071,6 +2190,21 @@ dependencies = [ "generic-array", ] +[[package]] +name = "interprocess" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2f4e4a06d42fab3e85ab1b419ad32b09eab58b901d40c57935ff92db3287a13" +dependencies = [ + "doctest-file", + "futures-core", + "libc", + "recvmsg", + "tokio", + "widestring", + "windows-sys 0.52.0", +] + [[package]] name = "ipnet" version = "2.9.0" @@ -1088,6 +2222,24 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.10" @@ -1103,6 +2255,19 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "k256" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2", +] + [[package]] name = "keccak" version = "0.1.4" @@ -1112,6 +2277,16 @@ dependencies = [ "cpufeatures", ] +[[package]] +name = "keccak-asm" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "505d1856a39b200489082f90d897c3f07c455563880bc5952e38eabf731c83b6" +dependencies = [ + "digest 0.10.7", + "sha3-asm", +] + [[package]] name = "lambdaworks-math" version = "0.7.0" @@ -1158,6 +2333,15 @@ version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +[[package]] +name = "lru" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" +dependencies = [ + "hashbrown 0.15.0", +] + [[package]] name = "matchit" version = "0.7.3" @@ -1171,7 +2355,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ "cfg-if", - "digest", + "digest 0.10.7", ] [[package]] @@ -1218,13 +2402,14 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.10" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ + "hermit-abi", "libc", "wasi", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -1236,7 +2421,7 @@ dependencies = [ "bytes", "encoding_rs", "futures-util", - "http", + "http 0.2.11", "httparse", "log", "memchr", @@ -1291,6 +2476,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", + "libm", ] [[package]] @@ -1303,6 +2489,26 @@ dependencies = [ "libc", ] +[[package]] +name = "num_enum" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + [[package]] name = "object" version = "0.32.1" @@ -1411,13 +2617,19 @@ dependencies = [ "windows-targets 0.48.5", ] +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + [[package]] name = "pbkdf2" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" dependencies = [ - "digest", + "digest 0.10.7", ] [[package]] @@ -1426,6 +2638,27 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +[[package]] +name = "pest" +version = "2.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdbef9d1d47087a895abd220ed25eb4ad973a5e26f6a4367b038c25e28dfc2d9" +dependencies = [ + "memchr", + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pharos" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" +dependencies = [ + "futures", + "rustc_version 0.4.0", +] + [[package]] name = "phf" version = "0.11.2" @@ -1500,6 +2733,16 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + [[package]] name = "pkg-config" version = "0.3.27" @@ -1560,6 +2803,7 @@ dependencies = [ name = "pragma-monitoring" version = "0.1.0" dependencies = [ + "alloy", "arc-swap", "axum", "axum-macros", @@ -1573,17 +2817,17 @@ dependencies = [ "dotenv", "env_logger", "futures", - "hyper", + "hyper 0.14.27", "lazy_static", "log", "num-bigint", "phf", "prometheus", - "reqwest", + "reqwest 0.11.22", "rstest", "serde", "starknet", - "strum", + "strum 0.25.0", "tokio", "url", "uuid 1.6.1", @@ -1612,27 +2856,25 @@ dependencies = [ ] [[package]] -name = "proc-macro-error" -version = "1.0.4" +name = "proc-macro-error-attr2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" dependencies = [ - "proc-macro-error-attr", "proc-macro2", "quote", - "syn 1.0.109", - "version_check", ] [[package]] -name = "proc-macro-error-attr" -version = "1.0.4" +name = "proc-macro-error2" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" dependencies = [ + "proc-macro-error-attr2", "proc-macro2", "quote", - "version_check", + "syn 2.0.66", ] [[package]] @@ -1659,12 +2901,38 @@ dependencies = [ "thiserror", ] +[[package]] +name = "proptest" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c2511913b88df1637da85cc8d96ec8e43a3f8bb8ccb71ee1ac240d6f3df58d" +dependencies = [ + "bit-set", + "bit-vec", + "bitflags 2.4.1", + "lazy_static", + "num-traits", + "rand", + "rand_chacha", + "rand_xorshift", + "regex-syntax", + "rusty-fork", + "tempfile", + "unarray", +] + [[package]] name = "protobuf" version = "2.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + [[package]] name = "quote" version = "1.0.36" @@ -1689,6 +2957,7 @@ dependencies = [ "libc", "rand_chacha", "rand_core", + "serde", ] [[package]] @@ -1710,6 +2979,21 @@ dependencies = [ "getrandom", ] +[[package]] +name = "rand_xorshift" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +dependencies = [ + "rand_core", +] + +[[package]] +name = "recvmsg" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3edd4d5d42c92f0a659926464d4cce56b562761267ecf0f469d85b7de384175" + [[package]] name = "redox_syscall" version = "0.4.1" @@ -1766,11 +3050,11 @@ dependencies = [ "futures-core", "futures-util", "h2", - "http", - "http-body", - "hyper", + "http 0.2.11", + "http-body 0.4.6", + "hyper 0.14.27", "hyper-rustls", - "hyper-tls", + "hyper-tls 0.5.0", "ipnet", "js-sys", "log", @@ -1779,24 +3063,63 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls", - "rustls-pemfile", + "rustls 0.21.10", + "rustls-pemfile 1.0.4", "serde", "serde_json", "serde_urlencoded", "system-configuration", "tokio", "tokio-native-tls", - "tokio-rustls", + "tokio-rustls 0.24.1", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "webpki-roots", + "webpki-roots 0.25.3", "winreg", ] +[[package]] +name = "reqwest" +version = "0.12.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f713147fbe92361e52392c73b8c9e48c04c6625bce969ef54dc901e58e042a7b" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-core", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.4.1", + "hyper-tls 0.6.0", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls-pemfile 2.2.0", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 1.0.1", + "tokio", + "tokio-native-tls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows-registry", +] + [[package]] name = "retain_mut" version = "0.1.9" @@ -1846,7 +3169,7 @@ dependencies = [ "futures", "futures-timer", "rstest_macros", - "rustc_version", + "rustc_version 0.4.0", ] [[package]] @@ -1861,30 +3184,75 @@ dependencies = [ "quote", "regex", "relative-path", - "rustc_version", + "rustc_version 0.4.0", "syn 2.0.66", "unicode-ident", ] +[[package]] +name = "ruint" +version = "1.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c3cc4c2511671f327125da14133d0c5c5d137f006a1017a16f557bc85b16286" +dependencies = [ + "alloy-rlp", + "ark-ff 0.3.0", + "ark-ff 0.4.2", + "bytes", + "fastrlp", + "num-bigint", + "num-traits", + "parity-scale-codec", + "primitive-types", + "proptest", + "rand", + "rlp", + "ruint-macro", + "serde", + "valuable", + "zeroize", +] + +[[package]] +name = "ruint-macro" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" + [[package]] name = "rustc-demangle" version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +[[package]] +name = "rustc-hash" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" + [[package]] name = "rustc-hex" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver 0.11.0", +] + [[package]] name = "rustc_version" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver", + "semver 1.0.20", ] [[package]] @@ -1908,10 +3276,24 @@ checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" dependencies = [ "log", "ring", - "rustls-webpki", + "rustls-webpki 0.101.7", "sct", ] +[[package]] +name = "rustls" +version = "0.23.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "415d9944693cb90382053259f89fbb077ea730ad7273047ec63b19bc9b160ba8" +dependencies = [ + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki 0.102.8", + "subtle", + "zeroize", +] + [[package]] name = "rustls-pemfile" version = "1.0.4" @@ -1921,6 +3303,21 @@ dependencies = [ "base64 0.21.5", ] +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e696e35370c65c9c541198af4543ccd580cf17fc25d8e05c5a242b202488c55" + [[package]] name = "rustls-webpki" version = "0.101.7" @@ -1931,11 +3328,34 @@ dependencies = [ "untrusted", ] +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + [[package]] name = "rustversion" version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" + +[[package]] +name = "rusty-fork" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" +dependencies = [ + "fnv", + "quick-error", + "tempfile", + "wait-timeout", +] [[package]] name = "ryu" @@ -1999,6 +3419,20 @@ dependencies = [ "untrusted", ] +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + [[package]] name = "security-framework" version = "2.9.2" @@ -2022,12 +3456,36 @@ dependencies = [ "libc", ] +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser", +] + [[package]] name = "semver" version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" +[[package]] +name = "semver-parser" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" +dependencies = [ + "pest", +] + +[[package]] +name = "send_wrapper" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" + [[package]] name = "serde" version = "1.0.203" @@ -2129,6 +3587,17 @@ dependencies = [ "syn 2.0.66", ] +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + [[package]] name = "sha2" version = "0.10.8" @@ -2137,7 +3606,7 @@ checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", - "digest", + "digest 0.10.7", ] [[package]] @@ -2146,10 +3615,20 @@ version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" dependencies = [ - "digest", + "digest 0.10.7", "keccak", ] +[[package]] +name = "sha3-asm" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28efc5e327c837aa837c59eae585fc250715ef939ac32881bcc11677cd02d46" +dependencies = [ + "cc", + "cfg-if", +] + [[package]] name = "signal-hook-registry" version = "1.4.1" @@ -2159,6 +3638,16 @@ dependencies = [ "libc", ] +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core", +] + [[package]] name = "siphasher" version = "0.3.11" @@ -2176,9 +3665,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "socket2" @@ -2206,6 +3695,16 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + [[package]] name = "starknet" version = "0.11.0" @@ -2332,7 +3831,7 @@ dependencies = [ "flate2", "getrandom", "log", - "reqwest", + "reqwest 0.11.22", "serde", "serde_json", "serde_with", @@ -2400,7 +3899,16 @@ version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" dependencies = [ - "strum_macros", + "strum_macros 0.25.3", +] + +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +dependencies = [ + "strum_macros 0.26.4", ] [[package]] @@ -2409,7 +3917,20 @@ version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" dependencies = [ - "heck", + "heck 0.4.1", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.66", +] + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck 0.5.0", "proc-macro2", "quote", "rustversion", @@ -2444,12 +3965,33 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn-solidity" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20e7b52ad118b2153644eea95c6fc740b6c1555b2344fdab763fc9de4075f665" +dependencies = [ + "paste", + "proc-macro2", + "quote", + "syn 2.0.66", +] + [[package]] name = "sync_wrapper" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +[[package]] +name = "sync_wrapper" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +dependencies = [ + "futures-core", +] + [[package]] name = "system-configuration" version = "0.5.1" @@ -2519,6 +4061,15 @@ dependencies = [ "syn 2.0.66", ] +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + [[package]] name = "time" version = "0.3.30" @@ -2574,28 +4125,27 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.35.0" +version = "1.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d45b238a16291a4e1584e61820b8ae57d696cc5015c459c229ccc6990cc1c" +checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" dependencies = [ "backtrace", "bytes", "libc", "mio", - "num_cpus", "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2 0.5.5", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "tokio-macros" -version = "2.2.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", @@ -2644,8 +4194,47 @@ version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ - "rustls", + "rustls 0.21.10", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls 0.23.14", + "rustls-pki-types", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", + "tokio-util", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9" +dependencies = [ + "futures-util", + "log", + "rustls 0.23.14", + "rustls-pki-types", "tokio", + "tokio-rustls 0.26.0", + "tungstenite", + "webpki-roots 0.26.6", ] [[package]] @@ -2689,11 +4278,11 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.1.0", + "indexmap 2.6.0", "serde", "serde_spanned", "toml_datetime", - "winnow", + "winnow 0.5.28", ] [[package]] @@ -2702,9 +4291,9 @@ version = "0.20.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" dependencies = [ - "indexmap 2.1.0", + "indexmap 2.6.0", "toml_datetime", - "winnow", + "winnow 0.5.28", ] [[package]] @@ -2723,17 +4312,31 @@ dependencies = [ "tracing", ] +[[package]] +name = "tower" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2873938d487c3cfb9aed7546dc9f2711d867c9f90c46b889989a2cb84eba6b4f" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper 0.1.2", + "tower-layer", + "tower-service", +] + [[package]] name = "tower-layer" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" @@ -2743,9 +4346,21 @@ checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ "log", "pin-project-lite", + "tracing-attributes", "tracing-core", ] +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + [[package]] name = "tracing-core" version = "0.1.32" @@ -2761,12 +4376,38 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "tungstenite" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http 1.1.0", + "httparse", + "log", + "rand", + "rustls 0.23.14", + "rustls-pki-types", + "sha1", + "thiserror", + "utf-8", +] + [[package]] name = "typenum" version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + [[package]] name = "uint" version = "0.9.5" @@ -2779,6 +4420,12 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + [[package]] name = "unicode-bidi" version = "0.3.14" @@ -2800,6 +4447,12 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + [[package]] name = "untrusted" version = "0.9.0" @@ -2817,6 +4470,12 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + [[package]] name = "uuid" version = "0.8.2" @@ -2838,6 +4497,12 @@ dependencies = [ "serde", ] +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + [[package]] name = "vcpkg" version = "0.2.15" @@ -2850,6 +4515,15 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +[[package]] +name = "wait-timeout" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" +dependencies = [ + "libc", +] + [[package]] name = "want" version = "0.3.1" @@ -2947,6 +4621,15 @@ version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" +[[package]] +name = "webpki-roots" +version = "0.26.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841c67bff177718f1d4dfefde8d8f0e78f9b6589319ba88312f567fc5841a958" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "whoami" version = "1.4.1" @@ -2957,6 +4640,12 @@ dependencies = [ "web-sys", ] +[[package]] +name = "widestring" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" + [[package]] name = "winapi" version = "0.3.9" @@ -2997,6 +4686,36 @@ dependencies = [ "windows-targets 0.48.5", ] +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets 0.52.6", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -3012,7 +4731,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.0", + "windows-targets 0.52.6", ] [[package]] @@ -3032,17 +4751,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.0", - "windows_aarch64_msvc 0.52.0", - "windows_i686_gnu 0.52.0", - "windows_i686_msvc 0.52.0", - "windows_x86_64_gnu 0.52.0", - "windows_x86_64_gnullvm 0.52.0", - "windows_x86_64_msvc 0.52.0", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] @@ -3053,9 +4773,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -3065,9 +4785,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -3077,9 +4797,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.0" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -3089,9 +4815,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -3101,9 +4827,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" @@ -3113,9 +4839,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -3125,9 +4851,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" @@ -3138,6 +4864,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "winnow" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" +dependencies = [ + "memchr", +] + [[package]] name = "winreg" version = "0.50.0" @@ -3148,6 +4883,25 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "ws_stream_wasm" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7999f5f4217fe3818726b66257a4475f71e74ffd190776ad053fa159e50737f5" +dependencies = [ + "async_io_stream", + "futures", + "js-sys", + "log", + "pharos", + "rustc_version 0.4.0", + "send_wrapper", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "wyz" version = "0.5.1" @@ -3162,3 +4916,17 @@ name = "zeroize" version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] diff --git a/Cargo.toml b/Cargo.toml index aaf553a..f0a4776 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,6 +6,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +alloy = {version = "0.4.2", features = ["full","json-rpc","rpc-client",]} arc-swap = "1.6.0" axum = { version = "0.6", features = ["macros", "multipart"] } axum-macros = "0.3" @@ -40,7 +41,7 @@ reqwest = { version = "0.11.22", features = ["json"] } serde = { version = "1.0.130", features = ["derive"] } starknet = "0.11.0" strum = { version = "0.25.0", features = ["derive"] } -tokio = { version = "1", features = ["full"] } +tokio = { version = "1.36", features = ["full"] } url = "2.5.0" uuid = { version = "1.4", features = ["fast-rng", "v4", "serde"] } diff --git a/abi/Pragma.json b/abi/Pragma.json new file mode 100644 index 0000000..2fb0af9 --- /dev/null +++ b/abi/Pragma.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"_isValidDataSource","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"dataFeedExists","inputs":[{"name":"id","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"getOptionsNoOlderThan","inputs":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"age","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"data","type":"tuple","internalType":"struct Options","components":[{"name":"metadata","type":"tuple","internalType":"struct Metadata","components":[{"name":"feedId","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"numberOfSources","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"}]},{"name":"strikePrice","type":"uint256","internalType":"uint256"},{"name":"impliedVolatility","type":"uint256","internalType":"uint256"},{"name":"timeToExpiry","type":"uint256","internalType":"uint256"},{"name":"isCall","type":"bool","internalType":"bool"},{"name":"underlyingPrice","type":"uint256","internalType":"uint256"},{"name":"optionPrice","type":"uint256","internalType":"uint256"},{"name":"delta","type":"int256","internalType":"int256"},{"name":"gamma","type":"int256","internalType":"int256"},{"name":"vega","type":"int256","internalType":"int256"},{"name":"theta","type":"int256","internalType":"int256"},{"name":"rho","type":"int256","internalType":"int256"}]}],"stateMutability":"view"},{"type":"function","name":"getPerpNoOlderThan","inputs":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"age","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"data","type":"tuple","internalType":"struct Perp","components":[{"name":"metadata","type":"tuple","internalType":"struct Metadata","components":[{"name":"feedId","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"numberOfSources","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"}]},{"name":"markPrice","type":"uint256","internalType":"uint256"},{"name":"fundingRate","type":"uint256","internalType":"uint256"},{"name":"openInterest","type":"uint256","internalType":"uint256"},{"name":"volume","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"getRealizedVolatilityNoOlderThan","inputs":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"age","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"data","type":"tuple","internalType":"struct RealizedVolatility","components":[{"name":"metadata","type":"tuple","internalType":"struct Metadata","components":[{"name":"feedId","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"numberOfSources","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"}]},{"name":"volatility","type":"uint256","internalType":"uint256"},{"name":"timePeriod","type":"uint256","internalType":"uint256"},{"name":"startPrice","type":"uint256","internalType":"uint256"},{"name":"endPrice","type":"uint256","internalType":"uint256"},{"name":"highPrice","type":"uint256","internalType":"uint256"},{"name":"lowPrice","type":"uint256","internalType":"uint256"},{"name":"numberOfDataPoints","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"getSpotMedianNoOlderThan","inputs":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"age","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"data","type":"tuple","internalType":"struct SpotMedian","components":[{"name":"metadata","type":"tuple","internalType":"struct Metadata","components":[{"name":"feedId","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"numberOfSources","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"}]},{"name":"price","type":"uint256","internalType":"uint256"},{"name":"volume","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"getTwapNoOlderThan","inputs":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"age","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"data","type":"tuple","internalType":"struct TWAP","components":[{"name":"metadata","type":"tuple","internalType":"struct Metadata","components":[{"name":"feedId","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"numberOfSources","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"}]},{"name":"twapPrice","type":"uint256","internalType":"uint256"},{"name":"timePeriod","type":"uint256","internalType":"uint256"},{"name":"startPrice","type":"uint256","internalType":"uint256"},{"name":"endPrice","type":"uint256","internalType":"uint256"},{"name":"totalVolume","type":"uint256","internalType":"uint256"},{"name":"numberOfDataPoints","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"getUpdateFee","inputs":[{"name":"updateData","type":"bytes[]","internalType":"bytes[]"}],"outputs":[{"name":"feeAmount","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getValidTimePeriod","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"hyperlane","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IHyperlane"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_hyperlane","type":"address","internalType":"address"},{"name":"initial_owner","type":"address","internalType":"address"},{"name":"_dataSourceEmitterChainIds","type":"uint16[]","internalType":"uint16[]"},{"name":"_dataSourceEmitterAddresses","type":"bytes32[]","internalType":"bytes32[]"},{"name":"_validTimePeriodSeconds","type":"uint256","internalType":"uint256"},{"name":"_singleUpdateFeeInWei","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isValidDataSource","inputs":[{"name":"chainId","type":"uint16","internalType":"uint16"},{"name":"emitterAddress","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"optionsFeeds","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"metadata","type":"tuple","internalType":"struct Metadata","components":[{"name":"feedId","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"numberOfSources","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"}]},{"name":"strikePrice","type":"uint256","internalType":"uint256"},{"name":"impliedVolatility","type":"uint256","internalType":"uint256"},{"name":"timeToExpiry","type":"uint256","internalType":"uint256"},{"name":"isCall","type":"bool","internalType":"bool"},{"name":"underlyingPrice","type":"uint256","internalType":"uint256"},{"name":"optionPrice","type":"uint256","internalType":"uint256"},{"name":"delta","type":"int256","internalType":"int256"},{"name":"gamma","type":"int256","internalType":"int256"},{"name":"vega","type":"int256","internalType":"int256"},{"name":"theta","type":"int256","internalType":"int256"},{"name":"rho","type":"int256","internalType":"int256"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"perpFeeds","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"metadata","type":"tuple","internalType":"struct Metadata","components":[{"name":"feedId","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"numberOfSources","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"}]},{"name":"markPrice","type":"uint256","internalType":"uint256"},{"name":"fundingRate","type":"uint256","internalType":"uint256"},{"name":"openInterest","type":"uint256","internalType":"uint256"},{"name":"volume","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rvFeeds","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"metadata","type":"tuple","internalType":"struct Metadata","components":[{"name":"feedId","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"numberOfSources","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"}]},{"name":"volatility","type":"uint256","internalType":"uint256"},{"name":"timePeriod","type":"uint256","internalType":"uint256"},{"name":"startPrice","type":"uint256","internalType":"uint256"},{"name":"endPrice","type":"uint256","internalType":"uint256"},{"name":"highPrice","type":"uint256","internalType":"uint256"},{"name":"lowPrice","type":"uint256","internalType":"uint256"},{"name":"numberOfDataPoints","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"singleUpdateFeeInWei","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"spotMedianFeeds","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"metadata","type":"tuple","internalType":"struct Metadata","components":[{"name":"feedId","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"numberOfSources","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"}]},{"name":"price","type":"uint256","internalType":"uint256"},{"name":"volume","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"twapFeeds","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"metadata","type":"tuple","internalType":"struct Metadata","components":[{"name":"feedId","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"numberOfSources","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"}]},{"name":"twapPrice","type":"uint256","internalType":"uint256"},{"name":"timePeriod","type":"uint256","internalType":"uint256"},{"name":"startPrice","type":"uint256","internalType":"uint256"},{"name":"endPrice","type":"uint256","internalType":"uint256"},{"name":"totalVolume","type":"uint256","internalType":"uint256"},{"name":"numberOfDataPoints","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"updateDataFeeds","inputs":[{"name":"updateData","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"validTimePeriodSeconds","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"withdraw_funds","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"OptionsUpdate","inputs":[{"name":"feedId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"publishTime","type":"uint64","indexed":false,"internalType":"uint64"},{"name":"options","type":"tuple","indexed":false,"internalType":"struct Options","components":[{"name":"metadata","type":"tuple","internalType":"struct Metadata","components":[{"name":"feedId","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"numberOfSources","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"}]},{"name":"strikePrice","type":"uint256","internalType":"uint256"},{"name":"impliedVolatility","type":"uint256","internalType":"uint256"},{"name":"timeToExpiry","type":"uint256","internalType":"uint256"},{"name":"isCall","type":"bool","internalType":"bool"},{"name":"underlyingPrice","type":"uint256","internalType":"uint256"},{"name":"optionPrice","type":"uint256","internalType":"uint256"},{"name":"delta","type":"int256","internalType":"int256"},{"name":"gamma","type":"int256","internalType":"int256"},{"name":"vega","type":"int256","internalType":"int256"},{"name":"theta","type":"int256","internalType":"int256"},{"name":"rho","type":"int256","internalType":"int256"}]}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"PerpUpdate","inputs":[{"name":"feedId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"publishTime","type":"uint64","indexed":false,"internalType":"uint64"},{"name":"perp","type":"tuple","indexed":false,"internalType":"struct Perp","components":[{"name":"metadata","type":"tuple","internalType":"struct Metadata","components":[{"name":"feedId","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"numberOfSources","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"}]},{"name":"markPrice","type":"uint256","internalType":"uint256"},{"name":"fundingRate","type":"uint256","internalType":"uint256"},{"name":"openInterest","type":"uint256","internalType":"uint256"},{"name":"volume","type":"uint256","internalType":"uint256"}]}],"anonymous":false},{"type":"event","name":"RealizedVolatilityUpdate","inputs":[{"name":"feedId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"publishTime","type":"uint64","indexed":false,"internalType":"uint64"},{"name":"realizedVolatility","type":"tuple","indexed":false,"internalType":"struct RealizedVolatility","components":[{"name":"metadata","type":"tuple","internalType":"struct Metadata","components":[{"name":"feedId","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"numberOfSources","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"}]},{"name":"volatility","type":"uint256","internalType":"uint256"},{"name":"timePeriod","type":"uint256","internalType":"uint256"},{"name":"startPrice","type":"uint256","internalType":"uint256"},{"name":"endPrice","type":"uint256","internalType":"uint256"},{"name":"highPrice","type":"uint256","internalType":"uint256"},{"name":"lowPrice","type":"uint256","internalType":"uint256"},{"name":"numberOfDataPoints","type":"uint256","internalType":"uint256"}]}],"anonymous":false},{"type":"event","name":"SpotMedianUpdate","inputs":[{"name":"feedId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"publishTime","type":"uint64","indexed":false,"internalType":"uint64"},{"name":"spotMedian","type":"tuple","indexed":false,"internalType":"struct SpotMedian","components":[{"name":"metadata","type":"tuple","internalType":"struct Metadata","components":[{"name":"feedId","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"numberOfSources","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"}]},{"name":"price","type":"uint256","internalType":"uint256"},{"name":"volume","type":"uint256","internalType":"uint256"}]}],"anonymous":false},{"type":"event","name":"TWAPUpdate","inputs":[{"name":"feedId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"publishTime","type":"uint64","indexed":false,"internalType":"uint64"},{"name":"twap","type":"tuple","indexed":false,"internalType":"struct TWAP","components":[{"name":"metadata","type":"tuple","internalType":"struct Metadata","components":[{"name":"feedId","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"numberOfSources","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"}]},{"name":"twapPrice","type":"uint256","internalType":"uint256"},{"name":"timePeriod","type":"uint256","internalType":"uint256"},{"name":"startPrice","type":"uint256","internalType":"uint256"},{"name":"endPrice","type":"uint256","internalType":"uint256"},{"name":"totalVolume","type":"uint256","internalType":"uint256"},{"name":"numberOfDataPoints","type":"uint256","internalType":"uint256"}]}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"DataNotFound","inputs":[]},{"type":"error","name":"DataStale","inputs":[]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"FailedCall","inputs":[]},{"type":"error","name":"InsufficientFee","inputs":[]},{"type":"error","name":"InvalidDataFeedType","inputs":[]},{"type":"error","name":"InvalidHyperlaneCheckpointRoot","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"InvalidUpdateData","inputs":[]},{"type":"error","name":"InvalidUpdateDataSource","inputs":[]},{"type":"error","name":"InvalidVersion","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]}],"bytecode":{"object":"0x60a080604052346100e857306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c166100d9576002600160401b03196001600160401b03821601610073575b60405161327c90816100ed82396080518181816107e4015261090e0152f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80610054565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c8063043cc783146101cf5780630e8fd1ba146101ca5780630f01cb51146101c557806332bb41d3146101c05780633a612c32146101bb578063437209a7146101b657806348b6404d146101b157806349c398a4146101ac5780634f1ef286146101a757806352d1902d146101a257806354fd4d501461019d5780635d2c53a7146101985780636306642214610193578063715018a61461018e5780637cfa33dd146101895780638da5cb5b14610184578063ad3cb1cc1461017f578063bdf6afa41461017a578063c12fd47314610175578063c6ac557c14610170578063cb718a9b14610157578063cf8e17bb1461016b578063d47eed4514610166578063d58a8f6d14610161578063d5d89eaf1461015c578063e18910a314610157578063e29ea30f146101525763f2fde38b1461014d575f80fd5b6113b3565b61129e565b610f01565b611132565b611029565b61100f565b610f5f565b610e9c565b610e25565b610cee565b610c49565b610c15565b610b57565b610aab565b610a84565b6109bc565b61097d565b6108fc565b610795565b610646565b6105ce565b6105a3565b61051b565b61043d565b6103dd565b6103b5565b610362565b634e487b7160e01b5f52604160045260245ffd5b608081019081106001600160401b0382111761020357604052565b6101d4565b606081019081106001600160401b0382111761020357604052565b60e081019081106001600160401b0382111761020357604052565b60a081019081106001600160401b0382111761020357604052565b61010081019081106001600160401b0382111761020357604052565b61018081019081106001600160401b0382111761020357604052565b60c081019081106001600160401b0382111761020357604052565b90601f801991011681019081106001600160401b0382111761020357604052565b604051906102dd610100836102ac565b565b604051906102dd610180836102ac565b906040516102fc816101e8565b606060ff600183958054855201546001600160401b038116602085015261ffff8160401c16604085015260501c16910152565b60ff60608092805185526001600160401b03602082015116602086015261ffff6040820151166040860152015116910152565b346103b15760203660031901126103b1576004355f52600260205260c060405f2061038c816102ef565b9060036002820154910154906103a5604051809461032f565b608083015260a0820152f35b5f80fd5b346103b15760203660031901126103b15760206103d36004356113fa565b6040519015158152f35b346103b15760203660031901126103b1576004355f526001602052602060ff60405f2054166040519015158152f35b604060a09161041c84825161032f565b602081015160808501520151910152565b60c0810192916102dd919061040c565b346103b15760403660031901126103b15760243560043561045c61153c565b505f52600260205260405f20906001600160401b036104b060206040519461048386610208565b600361048e826102ef565b918288526002810154848901520154604087015201516001600160401b031690565b161561050c576104e46104de6104d260208551016001600160401b0390511690565b6001600160401b031690565b42611a42565b116104fd576104f9906040519182918261042d565b0390f35b630ee5338360e21b5f5260045ffd5b635a26d5fd60e11b5f5260045ffd5b346103b15760203660031901126103b1576004355f52600360205261014060405f20610546816102ef565b90600281015490600381015460048201546005830154916007600685015494015494610575604051809861032f565b608087015260a086015260c085015260e0840152610100830152610120820152f35b61ffff8116036103b157565b346103b15760403660031901126103b15760206103d36004356105c581610597565b60243590611561565b346103b1575f3660031901126103b1576020600854604051908152f35b60c0610120916105fc84825161032f565b60208101516080850152604081015160a0850152606081015182850152608081015160e085015260a08101516101008501520151910152565b610140810192916102dd91906105eb565b346103b15760403660031901126103b1576024356004356106656115af565b505f52600360205260405f20906001600160401b036106e160206040519461068c86610223565b6007610697826102ef565b91828852600281015484890152600381015460408901526004810154606089015260058101546080890152600681015460a0890152015460c087015201516001600160401b031690565b161561050c576107036104de6104d260208551016001600160401b0390511690565b116104fd576104f99060405191829182610635565b600435906001600160a01b03821682036103b157565b602435906001600160a01b03821682036103b157565b6001600160401b03811161020357601f01601f191660200190565b92919261076b82610744565b9161077960405193846102ac565b8294818452818301116103b1578281602093845f960137010152565b60403660031901126103b1576107a9610718565b6024356001600160401b0381116103b157366023820112156103b1576107d990369060248160040135910161075f565b906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163081149081156108da575b506108cb5761081c611a7e565b6040516352d1902d60e01b8152916020836004816001600160a01b0386165afa5f938161089a575b5061086557634c9c8ce360e01b5f526001600160a01b03821660045260245ffd5b905f805160206132078339815191528303610886576108849250611bac565b005b632a87526960e21b5f52600483905260245ffd5b6108bd91945060203d6020116108c4575b6108b581836102ac565b810190611a64565b925f610844565b503d6108ab565b63703e46dd60e11b5f5260045ffd5b5f80516020613207833981519152546001600160a01b0316141590505f61080f565b346103b1575f3660031901126103b1577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036108cb5760206040515f805160206132078339815191528152f35b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b346103b1575f3660031901126103b1576104f960405161099e6040826102ac565b60058152640312e302e360dc1b602082015260405191829182610953565b346103b15760203660031901126103b1576004356109d8611a7e565b478111610a48575f805160206131e7833981519152545f918291829182916001600160a01b03165af1610a096115ec565b5015610a1157005b60405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606490fd5b60405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606490fd5b346103b1575f3660031901126103b1575f546040516001600160a01b039091168152602090f35b346103b1575f3660031901126103b157610ac3611a7e565b5f805160206131e783398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b608060e091610b2284825161032f565b602081015182850152604081015160a0850152606081015160c08501520151910152565b610100810192916102dd9190610b12565b346103b15760403660031901126103b157602435600435610b7661161b565b505f52600660205260405f20906001600160401b03610bde602060405194610b9d8661023e565b6005610ba8826102ef565b9182885260028101548489015260038101546040890152600481015460608901520154608087015201516001600160401b031690565b161561050c57610c006104de6104d260208551016001600160401b0390511690565b116104fd576104f99060405191829182610b46565b346103b1575f3660031901126103b1575f805160206131e7833981519152546040516001600160a01b039091168152602090f35b346103b1575f3660031901126103b1576104f9604051610c6a6040826102ac565b60058152640352e302e360dc1b602082015260405191829182610953565b60e061014091610c9984825161032f565b60208101516080850152604081015160a0850152606081015160c085015260808101518285015260a081015161010085015260c08101516101208501520151910152565b610160810192916102dd9190610c88565b346103b15760403660031901126103b157602435600435610d0d61164c565b505f52600460205260405f20906001600160401b03610d8f6020610d2f6102cd565b946008610d3b826102ef565b91828852600281015484890152600381015460408901526004810154606089015260058101546080890152600681015460a0890152600781015460c0890152015460e087015201516001600160401b031690565b161561050c57610db16104de6104d260208551016001600160401b0390511690565b116104fd576104f99060405191829182610cdd565b9c9b9a9896949290918d9a989694926101e08c019e610de49161032f565b60808b015260a08a015260c0890152151560e08801526101008701526101208601526101408501526101608401526101808301526101a08201526101c00152565b346103b15760203660031901126103b1576004355f52600560205260405f20610e4d816102ef565b6104f9600283015492600381015490600481015460ff60058301541660068301546007840154600885015491600986015493600a87015495600c600b890154980154986040519c8d9c8d610dc6565b346103b15760203660031901126103b1576004355f52600660205261010060405f20610ec7816102ef565b9060028101549060038101546005600483015492015492610eeb604051809661032f565b608085015260a084015260c083015260e0820152f35b346103b1575f3660031901126103b1576020600754604051908152f35b9491926101409693999897949199610f3b8761016081019c61032f565b608087015260a086015260c085015260e08401526101008301526101208201520152565b346103b15760203660031901126103b1576004355f52600460205260405f20610f87816102ef565b6104f960028301549260038101549060048101546005820154600683015491600860078501549401549460405198899889610f1e565b9060206003198301126103b1576004356001600160401b0381116103b157826023820112156103b1578060040135926001600160401b0384116103b15760248460051b830101116103b1576024019190565b346103b15761101d36610fbd565b505060206040515f8152f35b61103236610fbd565b5f8092601e1981360301915b8385101561109c578460051b820135838112156103b1578201908135916001600160401b0383116103b1576020019082360382136103b15761108e61108860019461109494611b05565b60ff1690565b906116e0565b94019361103e565b6008546110a891611b99565b34106110b057005b62976f7560e21b5f5260045ffd5b6001600160401b0381116102035760051b60200190565b9080601f830112156103b15781356110ec816110be565b926110fa60405194856102ac565b81845260208085019260051b8201019283116103b157602001905b8282106111225750505090565b8135815260209182019101611115565b346103b15760c03660031901126103b15761114b610718565b61115361072e565b90604435916001600160401b0383116103b157366023840112156103b157826004013592611180846110be565b9361118e60405195866102ac565b8085526024602086019160051b830101913683116103b157602401905b8282106111e657505050606435926001600160401b0384116103b1576111d86108849436906004016110d5565b906084359260a435946116ed565b6020809183356111f581610597565b8152019101906111ab565b6101606101c09161121284825161032f565b60208101516080850152604081015160a0850152606081015160c0850152611243608082015160e086019015159052565b60a081015161010085015260c081015161012085015260e0810151610140850152610100810151828501526101208101516101808501526101408101516101a08501520151910152565b6101e0810192916102dd9190611200565b346103b15760403660031901126103b1576024356004356112bd61194c565b505f52600560205260405f2090600c6112d46102df565b926112de816102ef565b845260028101546020850152600381015460408501526004810154606085015261131861130f600583015460ff1690565b15156080860152565b600681015460a0850152600781015460c0850152600881015460e08501526009810154610100850152600a810154610120850152600b81015461014085015201546101608301526001600160401b0361137c6020845101516001600160401b031690565b161561050c5761139e6104de6104d260208551016001600160401b0390511690565b116104fd576104f9906040519182918261128d565b346103b15760203660031901126103b1576108846113cf610718565b6113d7611a7e565b6119ab565b600511156113e657565b634e487b7160e01b5f52602160045260245ffd5b611405815f1a611a1c565b61140e816113dc565b80611447575061144160016114336001600160401b03935f52600260205260405f2090565b01546001600160401b031690565b16151590565b611450816113dc565b60018103611478575061144160016114336001600160401b03935f52600360205260405f2090565b611481816113dc565b600281036114a9575061144160016114336001600160401b03935f52600460205260405f2090565b6114b2816113dc565b600381036114da575061144160016114336001600160401b03935f52600560205260405f2090565b806114e66004926113dc565b0361150a5761144160016114336001600160401b03935f52600660205260405f2090565b62c5984360e11b5f5260045ffd5b60405190611525826101e8565b5f6060838281528260208201528260408201520152565b6040519061154982610208565b5f604083611555611518565b81528260208201520152565b60405160f09190911b6001600160f01b03191660208201908152602282019290925261159a81604281015b03601f1981018352826102ac565b5190205f52600160205260ff60405f20541690565b604051906115bc82610223565b5f60c0836115c8611518565b81528260208201528260408201528260608201528260808201528260a08201520152565b3d15611616573d906115fd82610744565b9161160b60405193846102ac565b82523d5f602084013e565b606090565b604051906116288261023e565b5f608083611634611518565b81528260208201528260408201528260608201520152565b6040519061165982610259565b5f60e083611665611518565b81528260208201528260408201528260608201528260808201528260a08201528260c08201520152565b634e487b7160e01b5f52601160045260245ffd5b90602082018092116116b157565b61168f565b90600182018092116116b157565b90600882018092116116b157565b90600282018092116116b157565b919082018092116116b157565b9391949290945f8051602061322783398151915254956001600160401b0361172b61171e60ff8a60401c1615151590565b986001600160401b031690565b1680159081611845575b600114908161183b575b159081611832575b506118235761178a958761178160016001600160401b03195f805160206132278339815191525416175f8051602061322783398151915255565b6117e957611875565b61179057565b6117ba60ff60401b195f8051602061322783398151915254165f8051602061322783398151915255565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1565b61181e6801000000000000000060ff60401b195f805160206132278339815191525416175f8051602061322783398151915255565b611875565b63f92ee8a960e01b5f5260045ffd5b9050155f611747565b303b15915061173f565b889150611735565b80518210156118615760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b90611891909693969592949561188961256a565b6113d761256a565b61189961256a565b60018060a01b03166bffffffffffffffffffffffff60a01b5f5416175f555f5b8351811015611936578061193061192361ffff6118d86001958961184d565b511661158c6119126118ea868d61184d565b51604051928391602083019586909160229261ffff60f01b9060f01b16825260028201520190565b5190205f52600160205260405f2090565b805460ff19166001179055565b016118b9565b50915092506119476102dd92600755565b600855565b6040519061195982610275565b5f61016083611966611518565b81528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b6001600160a01b03168015611a09575f805160206131e783398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b60ff166004811161150a5760058110156113e65790565b6027198101919082116116b157565b9080821115611a575781039081116116b15790565b9081039081116116b15790565b908160209103126103b1575190565b6040513d5f823e3d90fd5b5f805160206131e7833981519152546001600160a01b03163303611a9e57565b63118cdaa760e01b5f523360045260245ffd5b60405190611abe82610291565b815f8152611aca61153c565b6020820152611ad76115af565b6040820152611ae461164c565b6060820152611af161194c565b608082015260a0611b0061161b565b910152565b906001823560f81c03611b8a576003600283013560f81c0190818110611b4c57611b2e92611c4e565b928291929594925f5b60ff84168110611b5b575050505003611b4c57565b63734fff6760e11b5f5260045ffd5b600160ff91611b7885611b8298611b70611ab1565b508a87611d54565b9190999299612260565b019050611b37565b63a9146eeb60e01b5f5260045ffd5b818102929181159184041417156116b157565b90813b15611c2d575f8051602061320783398151915280546001600160a01b0319166001600160a01b0384169081179091557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115611c1557611c1291612595565b50565b505034611c1e57565b63b398979f60e01b5f5260045ffd5b50634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b611ca392611c5f92818103926125ed565b92905f611c71823560f01c86846125b5565b90611c7a612607565b5082546001600160a01b031690604051809781948293631286d10d60e21b845260048401612876565b03915afa928315611d4f575f905f905f95611d24575b5015611d1557611ce3611cdf611cd4606084015161ffff1690565b608084015190611561565b1590565b611d065760a0015192600201936020840151938051602011611b4c576021015192565b63e60dce7160e01b5f5260045ffd5b63a1a2d59960e01b5f5260045ffd5b915050611d449193503d805f833e611d3c81836102ac565b810190612777565b94929050905f611cb9565b611a73565b82611d6e92949394611d64611ab1565b50818103926125ed565b6021829392013560f01c91602384013560f01c90611dbe611db4611d938486896125d1565b509684602501611da5888289856125ed565b979096810360241901926125ed565b939094369161075f565b604051611df06021826020808201955f87528051918291018484015e81015f838201520301601f1981018352826102ac565b519020853560f01c956002965f915b818310611e2a5750505003611d1557611e1c60259160289361289d565b959195949095960101010193565b90919297611e48816020611e4060019486013590565b91019a612a35565b93019190611dff565b600190825181550190611e876001600160401b0360208301511683906001600160401b03166001600160401b0319825416179055565b60408101519061ffff60401b835491606060ff60501b91015160501b169260401b169062ffffff60401b191617179055565b9060806005918051805185556001850190611ef76001600160401b0360208301511683906001600160401b03166001600160401b0319825416179055565b60408101519061ffff60401b835491606060ff60501b91015160501b169260401b169062ffffff60401b1916171790556020810151600285015560408101516003850155606081015160048501550151910155565b9160206102dd9294936001600160401b036101208201961681520190610b12565b90610160600c91611f7f815185611e51565b602081015160028501556040810151600385015560608101516004850155611fc2611fad6080830151151590565b600586019060ff801983541691151516179055565b60a0810151600685015560c0810151600785015560e081015160088501556101008101516009850155610120810151600a850155610140810151600b8501550151910155565b9160206102dd9294936001600160401b036102008201961681520190611200565b9060e060089180518051855560018501906120676001600160401b0360208301511683906001600160401b03166001600160401b0319825416179055565b60408101519061ffff60401b835491606060ff60501b91015160501b169260401b169062ffffff60401b1916171790556020810151600285015560408101516003850155606081015160048501556080810151600585015560a0810151600685015560c081015160078501550151910155565b9160206102dd9294936001600160401b036101808201961681520190610c88565b9060c060079180518051855560018501906121396001600160401b0360208301511683906001600160401b03166001600160401b0319825416179055565b60408101519061ffff60401b835491606060ff60501b91015160501b169260401b169062ffffff60401b1916171790556020810151600285015560408101516003850155606081015160048501556080810151600585015560a081015160068501550151910155565b9160206102dd9294936001600160401b0361016082019616815201906105eb565b90604060039180518051855560018501906122016001600160401b0360208301511683906001600160401b03166001600160401b0319825416179055565b838101519061ffff60401b835491606060ff60501b91015160501b1692861b169062ffffff60401b191617179055602081015160028501550151910155565b9160206102dd9294936001600160401b0360e0820196168152019061040c565b91815161226c816113dc565b612275816113dc565b6122fe576122936104d26001611433865f52600260205260405f2090565b6001600160401b038216116122a757505050565b60207ffb12ae848c5dadd8d78a67a33e6edd5c9de9217de2735553c5451a6f6c6fceb792016122e881516122e3865f52600260205260405f2090565b6121c3565b51906122f960405192839283612240565b0390a2565b6001825161230b816113dc565b612314816113dc565b03612399576123336104d26001611433865f52600360205260405f2090565b6001600160401b0382161161234757505050565b60407f7191ffe59869d1cf17cb7c2726e2bd60a37024a55d653026782e80eca977b1df92016123888151612383865f52600360205260405f2090565b6120fb565b51906122f9604051928392836121a2565b600282516123a6816113dc565b6123af816113dc565b03612434576123ce6104d26001611433865f52600460205260405f2090565b6001600160401b038216116123e257505050565b60607f98bf4c5718257f52861df389c8da98969915aac10244557e2fbebe31c25774949201612423815161241e865f52600460205260405f2090565b612029565b51906122f9604051928392836120da565b60038251612441816113dc565b61244a816113dc565b036124cf576124696104d26001611433865f52600560205260405f2090565b6001600160401b0382161161247d57505050565b60807f66e9beacbf647c3bc61691e3291107d4a62979d7845cb7527ca0dcd478e8134f92016124be81516124b9865f52600560205260405f2090565b611f6d565b51906122f960405192839283612008565b600482516124dc816113dc565b6124e5816113dc565b0361150a576125046104d26001611433865f52600660205260405f2090565b6001600160401b0382161161251857505050565b60a07f21654bf502bb4f1c5de999bef2220202e8be7e7bb8febc1307d54f0d840fbb0492016125598151612554865f52600660205260405f2090565b611eb9565b51906122f960405192839283611f4c565b60ff5f805160206132278339815191525460401c161561258657565b631afcd79f60e31b5f5260045ffd5b5f806125b293602081519101845af46125ac6115ec565b916129cb565b90565b9092919283600201806002116116b157116103b1576002019190565b9092919283602501806025116116b157116103b1576025019190565b9093928201938483116116b15784116103b1578101920390565b6040519061261482610259565b5f60e083828152826020820152826040820152826060820152826080820152606060a0820152606060c08201520152565b519060ff821682036103b157565b51906001600160401b03821682036103b157565b519063ffffffff821682036103b157565b51906102dd82610597565b81601f820112156103b15760208151910161269d82610744565b926126ab60405194856102ac565b828452828201116103b157815f926020928386015e8301015290565b81601f820112156103b1578051906126de826110be565b926126ec60405194856102ac565b82845260208085019360071b830101918183116103b157602001925b828410612716575050505090565b6080848303126103b1576020608091604051612731816101e8565b86518152828701518382015261274960408801612645565b604082015261275a60608801612645565b6060820152815201930192612708565b519081151582036103b157565b6080818303126103b15780516001600160401b0381116103b1578101610100818403126103b1576127a66102cd565b906127b081612645565b82526127be60208201612653565b60208301526127cf60408201612667565b60408301526127e060608201612678565b60608301526080810151608083015260a08101516001600160401b0381116103b1578461280e918301612683565b60a083015260c0810151906001600160401b0382116103b1576128358560e09383016126c7565b60c0840152015160e08201529261284e6020830161276a565b9260408301516001600160401b0381116103b157606091612870918501612683565b92015190565b90918060409360208452816020850152848401375f828201840152601f01601f1916010190565b90916128a7611ab1565b506128b336848461075f565b6128bb611ab1565b506128cd6128c882612a73565b611a1c565b6128d5612ada565b906128e08183612a29565b6128e9816113dc565b8061292c57506128fb6125b292612e44565b60208201525b9361292461290e82611a33565b9461291c81870135966116a3565b92369161075f565b016008015190565b612935816113dc565b60018103612954575061294a6125b292612d9d565b6040820152612901565b61295d816113dc565b6002810361297c57506129726125b292612cdc565b6060820152612901565b612985816113dc565b600381036129a4575061299a6125b292612bb6565b6080820152612901565b806129b06004926113dc565b0361150a576129c16125b292612b39565b60a0820152612901565b906129ef57508051156129e057805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580612a20575b612a00575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156129f8565b60058210156113e65752565b90808211612a6d575b604051906020820192600160f81b84526021830152604182015260418152612a676061826102ac565b51902090565b90612a3e565b6003815110612a83576003015190565b60405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b6044820152606490fd5b90815160018201908183116116b15710612a8357016001015190565b612ae2611ab1565b50612aeb612e8d565b612af3612ebc565b612afb612f03565b612b03612f50565b90612b0c612fb9565b9260405194612b1a86610291565b5f8652602086015260408501526060840152608083015260a082015290565b612b4161161b565b50612b4a612fb9565b90612b5481612ff4565b908352612b6181836130b0565b602084015260208101908181116116b157612b7c82846130b0565b6040850152604081018092116116b157606090612b9983856130b0565b82860152018091116116b157612bae916130b0565b608082015290565b612bbe61194c565b50612cd3612bca612f50565b91612ccd612cb8612ca3612c8e612c7a612c66612c52612c33612c1f898c6040612c17612c10612bf985612ff4565b908552612c0681876130b0565b60208601526116a3565b80946130b0565b9101526116a3565b612c29818b6130b0565b60608d01526116a3565b612c4d600160ff612c44848d612abe565b161460808d0152565b6116b6565b612c5c81896130b0565b60a08b01526116a3565b612c7081886130b0565b60c08a01526116a3565b612c848187613109565b60e08901526116a3565b612c988186613109565b6101008801526116a3565b612cad8185613109565b6101208701526116a3565b612cc28184613109565b6101408601526116a3565b90613109565b61016082015290565b612ce461164c565b50612ced612f03565b90612cf781612ff4565b91908352612d0582826130b0565b602084015260208201918281116116b157604090612d2384846130b0565b82860152018092116116b157612d8f612d7b612d67612d5385612d49612d9597876130b0565b60608901526116a3565b612d5d81866130b0565b60808801526116a3565b612d7181856130b0565b60a08701526116a3565b612d8581846130b0565b60c08601526116a3565b906130b0565b60e082015290565b612da56115af565b50612dae612ebc565b90612db881612ff4565b91908352612dc682826130b0565b602084015260208201918281116116b157612de183836130b0565b6040850152604081018093116116b157606090612dfe84846130b0565b82860152018092116116b157612d8f612e2883612e1e612e3c95856130b0565b60808701526116a3565b612e3281846130b0565b60a08601526116a3565b60c082015290565b612e4c61153c565b50612e55612e8d565b90612e5f81612ff4565b908352612e6c81836130b0565b6020840152602081018091116116b157612e85916130b0565b604082015290565b612e9561153c565b50612e9e613161565b60405190612eab82610208565b81525f60208201525f604082015290565b612ec46115af565b50612ecd613161565b60405190612eda82610223565b81525f60208201525f60408201525f60608201525f60808201525f60a08201525f60c082015290565b612f0b61164c565b50612f14613161565b60405190612f2182610259565b81525f60208201525f60408201525f60608201525f60808201525f60a08201525f60c08201525f60e082015290565b612f5861194c565b50612f61613161565b60405190612f6e82610275565b81525f60208201525f60408201525f60608201525f60808201525f60a08201525f60c08201525f60e08201525f6101008201525f6101208201525f6101408201525f61016082015290565b612fc161161b565b50612fca613161565b60405190612fd78261023e565b81525f60208201525f60408201525f60608201525f608082015290565b90612ffd611518565b50613006613161565b916130115f826130b0565b835260288151106130745760288101516001600160401b031660208401526125b290612c4d61306a61306361304660206116c4565b61305e613053828761318e565b61ffff1660408a0152565b6116d2565b8093612abe565b60ff166060860152565b60405162461bcd60e51b8152602060048201526014602482015273746f55696e7436345f6f75744f66426f756e647360601b6044820152606490fd5b90815160208201908183116116b157106130cc57016020015190565b60405162461bcd60e51b8152602060048201526015602482015274746f55696e743235365f6f75744f66426f756e647360581b6044820152606490fd5b90815160208201908183116116b1571061312557016020015190565b60405162461bcd60e51b8152602060048201526014602482015273746f496e743235365f6f75744f66426f756e647360601b6044820152606490fd5b613169611518565b50604051613176816101e8565b5f81525f60208201525f60408201525f606082015290565b90815160028201908183116116b157106131aa57016002015190565b60405162461bcd60e51b8152602060048201526014602482015273746f55696e7431365f6f75744f66426f756e647360601b6044820152606490fdfe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212204a3711fca3c5856cb6d435990f15e65da5266746cdfbd7d5feb5154b5398db1c64736f6c634300081a0033","sourceMap":"651:5308:41:-:0;;;;;;;1171:4:25;1163:13;;8837:64:24;651:5308:41;;;;;;7896:76:24;;-1:-1:-1;;;;;;;;;;;651:5308:41;;7985:34:24;7981:146;;-1:-1:-1;651:5308:41;;;;;;;;1163:13:25;651:5308:41;;;;;;;;;;;7981:146:24;-1:-1:-1;;;;;;651:5308:41;-1:-1:-1;;;;;651:5308:41;;;8837:64:24;651:5308:41;;;8087:29:24;;651:5308:41;;8087:29:24;7981:146;;;;7896:76;7938:23;;;-1:-1:-1;7938:23:24;;-1:-1:-1;7938:23:24;651:5308:41;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f3560e01c8063043cc783146101cf5780630e8fd1ba146101ca5780630f01cb51146101c557806332bb41d3146101c05780633a612c32146101bb578063437209a7146101b657806348b6404d146101b157806349c398a4146101ac5780634f1ef286146101a757806352d1902d146101a257806354fd4d501461019d5780635d2c53a7146101985780636306642214610193578063715018a61461018e5780637cfa33dd146101895780638da5cb5b14610184578063ad3cb1cc1461017f578063bdf6afa41461017a578063c12fd47314610175578063c6ac557c14610170578063cb718a9b14610157578063cf8e17bb1461016b578063d47eed4514610166578063d58a8f6d14610161578063d5d89eaf1461015c578063e18910a314610157578063e29ea30f146101525763f2fde38b1461014d575f80fd5b6113b3565b61129e565b610f01565b611132565b611029565b61100f565b610f5f565b610e9c565b610e25565b610cee565b610c49565b610c15565b610b57565b610aab565b610a84565b6109bc565b61097d565b6108fc565b610795565b610646565b6105ce565b6105a3565b61051b565b61043d565b6103dd565b6103b5565b610362565b634e487b7160e01b5f52604160045260245ffd5b608081019081106001600160401b0382111761020357604052565b6101d4565b606081019081106001600160401b0382111761020357604052565b60e081019081106001600160401b0382111761020357604052565b60a081019081106001600160401b0382111761020357604052565b61010081019081106001600160401b0382111761020357604052565b61018081019081106001600160401b0382111761020357604052565b60c081019081106001600160401b0382111761020357604052565b90601f801991011681019081106001600160401b0382111761020357604052565b604051906102dd610100836102ac565b565b604051906102dd610180836102ac565b906040516102fc816101e8565b606060ff600183958054855201546001600160401b038116602085015261ffff8160401c16604085015260501c16910152565b60ff60608092805185526001600160401b03602082015116602086015261ffff6040820151166040860152015116910152565b346103b15760203660031901126103b1576004355f52600260205260c060405f2061038c816102ef565b9060036002820154910154906103a5604051809461032f565b608083015260a0820152f35b5f80fd5b346103b15760203660031901126103b15760206103d36004356113fa565b6040519015158152f35b346103b15760203660031901126103b1576004355f526001602052602060ff60405f2054166040519015158152f35b604060a09161041c84825161032f565b602081015160808501520151910152565b60c0810192916102dd919061040c565b346103b15760403660031901126103b15760243560043561045c61153c565b505f52600260205260405f20906001600160401b036104b060206040519461048386610208565b600361048e826102ef565b918288526002810154848901520154604087015201516001600160401b031690565b161561050c576104e46104de6104d260208551016001600160401b0390511690565b6001600160401b031690565b42611a42565b116104fd576104f9906040519182918261042d565b0390f35b630ee5338360e21b5f5260045ffd5b635a26d5fd60e11b5f5260045ffd5b346103b15760203660031901126103b1576004355f52600360205261014060405f20610546816102ef565b90600281015490600381015460048201546005830154916007600685015494015494610575604051809861032f565b608087015260a086015260c085015260e0840152610100830152610120820152f35b61ffff8116036103b157565b346103b15760403660031901126103b15760206103d36004356105c581610597565b60243590611561565b346103b1575f3660031901126103b1576020600854604051908152f35b60c0610120916105fc84825161032f565b60208101516080850152604081015160a0850152606081015182850152608081015160e085015260a08101516101008501520151910152565b610140810192916102dd91906105eb565b346103b15760403660031901126103b1576024356004356106656115af565b505f52600360205260405f20906001600160401b036106e160206040519461068c86610223565b6007610697826102ef565b91828852600281015484890152600381015460408901526004810154606089015260058101546080890152600681015460a0890152015460c087015201516001600160401b031690565b161561050c576107036104de6104d260208551016001600160401b0390511690565b116104fd576104f99060405191829182610635565b600435906001600160a01b03821682036103b157565b602435906001600160a01b03821682036103b157565b6001600160401b03811161020357601f01601f191660200190565b92919261076b82610744565b9161077960405193846102ac565b8294818452818301116103b1578281602093845f960137010152565b60403660031901126103b1576107a9610718565b6024356001600160401b0381116103b157366023820112156103b1576107d990369060248160040135910161075f565b906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163081149081156108da575b506108cb5761081c611a7e565b6040516352d1902d60e01b8152916020836004816001600160a01b0386165afa5f938161089a575b5061086557634c9c8ce360e01b5f526001600160a01b03821660045260245ffd5b905f805160206132078339815191528303610886576108849250611bac565b005b632a87526960e21b5f52600483905260245ffd5b6108bd91945060203d6020116108c4575b6108b581836102ac565b810190611a64565b925f610844565b503d6108ab565b63703e46dd60e11b5f5260045ffd5b5f80516020613207833981519152546001600160a01b0316141590505f61080f565b346103b1575f3660031901126103b1577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036108cb5760206040515f805160206132078339815191528152f35b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b346103b1575f3660031901126103b1576104f960405161099e6040826102ac565b60058152640312e302e360dc1b602082015260405191829182610953565b346103b15760203660031901126103b1576004356109d8611a7e565b478111610a48575f805160206131e7833981519152545f918291829182916001600160a01b03165af1610a096115ec565b5015610a1157005b60405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606490fd5b60405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606490fd5b346103b1575f3660031901126103b1575f546040516001600160a01b039091168152602090f35b346103b1575f3660031901126103b157610ac3611a7e565b5f805160206131e783398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b608060e091610b2284825161032f565b602081015182850152604081015160a0850152606081015160c08501520151910152565b610100810192916102dd9190610b12565b346103b15760403660031901126103b157602435600435610b7661161b565b505f52600660205260405f20906001600160401b03610bde602060405194610b9d8661023e565b6005610ba8826102ef565b9182885260028101548489015260038101546040890152600481015460608901520154608087015201516001600160401b031690565b161561050c57610c006104de6104d260208551016001600160401b0390511690565b116104fd576104f99060405191829182610b46565b346103b1575f3660031901126103b1575f805160206131e7833981519152546040516001600160a01b039091168152602090f35b346103b1575f3660031901126103b1576104f9604051610c6a6040826102ac565b60058152640352e302e360dc1b602082015260405191829182610953565b60e061014091610c9984825161032f565b60208101516080850152604081015160a0850152606081015160c085015260808101518285015260a081015161010085015260c08101516101208501520151910152565b610160810192916102dd9190610c88565b346103b15760403660031901126103b157602435600435610d0d61164c565b505f52600460205260405f20906001600160401b03610d8f6020610d2f6102cd565b946008610d3b826102ef565b91828852600281015484890152600381015460408901526004810154606089015260058101546080890152600681015460a0890152600781015460c0890152015460e087015201516001600160401b031690565b161561050c57610db16104de6104d260208551016001600160401b0390511690565b116104fd576104f99060405191829182610cdd565b9c9b9a9896949290918d9a989694926101e08c019e610de49161032f565b60808b015260a08a015260c0890152151560e08801526101008701526101208601526101408501526101608401526101808301526101a08201526101c00152565b346103b15760203660031901126103b1576004355f52600560205260405f20610e4d816102ef565b6104f9600283015492600381015490600481015460ff60058301541660068301546007840154600885015491600986015493600a87015495600c600b890154980154986040519c8d9c8d610dc6565b346103b15760203660031901126103b1576004355f52600660205261010060405f20610ec7816102ef565b9060028101549060038101546005600483015492015492610eeb604051809661032f565b608085015260a084015260c083015260e0820152f35b346103b1575f3660031901126103b1576020600754604051908152f35b9491926101409693999897949199610f3b8761016081019c61032f565b608087015260a086015260c085015260e08401526101008301526101208201520152565b346103b15760203660031901126103b1576004355f52600460205260405f20610f87816102ef565b6104f960028301549260038101549060048101546005820154600683015491600860078501549401549460405198899889610f1e565b9060206003198301126103b1576004356001600160401b0381116103b157826023820112156103b1578060040135926001600160401b0384116103b15760248460051b830101116103b1576024019190565b346103b15761101d36610fbd565b505060206040515f8152f35b61103236610fbd565b5f8092601e1981360301915b8385101561109c578460051b820135838112156103b1578201908135916001600160401b0383116103b1576020019082360382136103b15761108e61108860019461109494611b05565b60ff1690565b906116e0565b94019361103e565b6008546110a891611b99565b34106110b057005b62976f7560e21b5f5260045ffd5b6001600160401b0381116102035760051b60200190565b9080601f830112156103b15781356110ec816110be565b926110fa60405194856102ac565b81845260208085019260051b8201019283116103b157602001905b8282106111225750505090565b8135815260209182019101611115565b346103b15760c03660031901126103b15761114b610718565b61115361072e565b90604435916001600160401b0383116103b157366023840112156103b157826004013592611180846110be565b9361118e60405195866102ac565b8085526024602086019160051b830101913683116103b157602401905b8282106111e657505050606435926001600160401b0384116103b1576111d86108849436906004016110d5565b906084359260a435946116ed565b6020809183356111f581610597565b8152019101906111ab565b6101606101c09161121284825161032f565b60208101516080850152604081015160a0850152606081015160c0850152611243608082015160e086019015159052565b60a081015161010085015260c081015161012085015260e0810151610140850152610100810151828501526101208101516101808501526101408101516101a08501520151910152565b6101e0810192916102dd9190611200565b346103b15760403660031901126103b1576024356004356112bd61194c565b505f52600560205260405f2090600c6112d46102df565b926112de816102ef565b845260028101546020850152600381015460408501526004810154606085015261131861130f600583015460ff1690565b15156080860152565b600681015460a0850152600781015460c0850152600881015460e08501526009810154610100850152600a810154610120850152600b81015461014085015201546101608301526001600160401b0361137c6020845101516001600160401b031690565b161561050c5761139e6104de6104d260208551016001600160401b0390511690565b116104fd576104f9906040519182918261128d565b346103b15760203660031901126103b1576108846113cf610718565b6113d7611a7e565b6119ab565b600511156113e657565b634e487b7160e01b5f52602160045260245ffd5b611405815f1a611a1c565b61140e816113dc565b80611447575061144160016114336001600160401b03935f52600260205260405f2090565b01546001600160401b031690565b16151590565b611450816113dc565b60018103611478575061144160016114336001600160401b03935f52600360205260405f2090565b611481816113dc565b600281036114a9575061144160016114336001600160401b03935f52600460205260405f2090565b6114b2816113dc565b600381036114da575061144160016114336001600160401b03935f52600560205260405f2090565b806114e66004926113dc565b0361150a5761144160016114336001600160401b03935f52600660205260405f2090565b62c5984360e11b5f5260045ffd5b60405190611525826101e8565b5f6060838281528260208201528260408201520152565b6040519061154982610208565b5f604083611555611518565b81528260208201520152565b60405160f09190911b6001600160f01b03191660208201908152602282019290925261159a81604281015b03601f1981018352826102ac565b5190205f52600160205260ff60405f20541690565b604051906115bc82610223565b5f60c0836115c8611518565b81528260208201528260408201528260608201528260808201528260a08201520152565b3d15611616573d906115fd82610744565b9161160b60405193846102ac565b82523d5f602084013e565b606090565b604051906116288261023e565b5f608083611634611518565b81528260208201528260408201528260608201520152565b6040519061165982610259565b5f60e083611665611518565b81528260208201528260408201528260608201528260808201528260a08201528260c08201520152565b634e487b7160e01b5f52601160045260245ffd5b90602082018092116116b157565b61168f565b90600182018092116116b157565b90600882018092116116b157565b90600282018092116116b157565b919082018092116116b157565b9391949290945f8051602061322783398151915254956001600160401b0361172b61171e60ff8a60401c1615151590565b986001600160401b031690565b1680159081611845575b600114908161183b575b159081611832575b506118235761178a958761178160016001600160401b03195f805160206132278339815191525416175f8051602061322783398151915255565b6117e957611875565b61179057565b6117ba60ff60401b195f8051602061322783398151915254165f8051602061322783398151915255565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1565b61181e6801000000000000000060ff60401b195f805160206132278339815191525416175f8051602061322783398151915255565b611875565b63f92ee8a960e01b5f5260045ffd5b9050155f611747565b303b15915061173f565b889150611735565b80518210156118615760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b90611891909693969592949561188961256a565b6113d761256a565b61189961256a565b60018060a01b03166bffffffffffffffffffffffff60a01b5f5416175f555f5b8351811015611936578061193061192361ffff6118d86001958961184d565b511661158c6119126118ea868d61184d565b51604051928391602083019586909160229261ffff60f01b9060f01b16825260028201520190565b5190205f52600160205260405f2090565b805460ff19166001179055565b016118b9565b50915092506119476102dd92600755565b600855565b6040519061195982610275565b5f61016083611966611518565b81528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b6001600160a01b03168015611a09575f805160206131e783398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b60ff166004811161150a5760058110156113e65790565b6027198101919082116116b157565b9080821115611a575781039081116116b15790565b9081039081116116b15790565b908160209103126103b1575190565b6040513d5f823e3d90fd5b5f805160206131e7833981519152546001600160a01b03163303611a9e57565b63118cdaa760e01b5f523360045260245ffd5b60405190611abe82610291565b815f8152611aca61153c565b6020820152611ad76115af565b6040820152611ae461164c565b6060820152611af161194c565b608082015260a0611b0061161b565b910152565b906001823560f81c03611b8a576003600283013560f81c0190818110611b4c57611b2e92611c4e565b928291929594925f5b60ff84168110611b5b575050505003611b4c57565b63734fff6760e11b5f5260045ffd5b600160ff91611b7885611b8298611b70611ab1565b508a87611d54565b9190999299612260565b019050611b37565b63a9146eeb60e01b5f5260045ffd5b818102929181159184041417156116b157565b90813b15611c2d575f8051602061320783398151915280546001600160a01b0319166001600160a01b0384169081179091557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115611c1557611c1291612595565b50565b505034611c1e57565b63b398979f60e01b5f5260045ffd5b50634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b611ca392611c5f92818103926125ed565b92905f611c71823560f01c86846125b5565b90611c7a612607565b5082546001600160a01b031690604051809781948293631286d10d60e21b845260048401612876565b03915afa928315611d4f575f905f905f95611d24575b5015611d1557611ce3611cdf611cd4606084015161ffff1690565b608084015190611561565b1590565b611d065760a0015192600201936020840151938051602011611b4c576021015192565b63e60dce7160e01b5f5260045ffd5b63a1a2d59960e01b5f5260045ffd5b915050611d449193503d805f833e611d3c81836102ac565b810190612777565b94929050905f611cb9565b611a73565b82611d6e92949394611d64611ab1565b50818103926125ed565b6021829392013560f01c91602384013560f01c90611dbe611db4611d938486896125d1565b509684602501611da5888289856125ed565b979096810360241901926125ed565b939094369161075f565b604051611df06021826020808201955f87528051918291018484015e81015f838201520301601f1981018352826102ac565b519020853560f01c956002965f915b818310611e2a5750505003611d1557611e1c60259160289361289d565b959195949095960101010193565b90919297611e48816020611e4060019486013590565b91019a612a35565b93019190611dff565b600190825181550190611e876001600160401b0360208301511683906001600160401b03166001600160401b0319825416179055565b60408101519061ffff60401b835491606060ff60501b91015160501b169260401b169062ffffff60401b191617179055565b9060806005918051805185556001850190611ef76001600160401b0360208301511683906001600160401b03166001600160401b0319825416179055565b60408101519061ffff60401b835491606060ff60501b91015160501b169260401b169062ffffff60401b1916171790556020810151600285015560408101516003850155606081015160048501550151910155565b9160206102dd9294936001600160401b036101208201961681520190610b12565b90610160600c91611f7f815185611e51565b602081015160028501556040810151600385015560608101516004850155611fc2611fad6080830151151590565b600586019060ff801983541691151516179055565b60a0810151600685015560c0810151600785015560e081015160088501556101008101516009850155610120810151600a850155610140810151600b8501550151910155565b9160206102dd9294936001600160401b036102008201961681520190611200565b9060e060089180518051855560018501906120676001600160401b0360208301511683906001600160401b03166001600160401b0319825416179055565b60408101519061ffff60401b835491606060ff60501b91015160501b169260401b169062ffffff60401b1916171790556020810151600285015560408101516003850155606081015160048501556080810151600585015560a0810151600685015560c081015160078501550151910155565b9160206102dd9294936001600160401b036101808201961681520190610c88565b9060c060079180518051855560018501906121396001600160401b0360208301511683906001600160401b03166001600160401b0319825416179055565b60408101519061ffff60401b835491606060ff60501b91015160501b169260401b169062ffffff60401b1916171790556020810151600285015560408101516003850155606081015160048501556080810151600585015560a081015160068501550151910155565b9160206102dd9294936001600160401b0361016082019616815201906105eb565b90604060039180518051855560018501906122016001600160401b0360208301511683906001600160401b03166001600160401b0319825416179055565b838101519061ffff60401b835491606060ff60501b91015160501b1692861b169062ffffff60401b191617179055602081015160028501550151910155565b9160206102dd9294936001600160401b0360e0820196168152019061040c565b91815161226c816113dc565b612275816113dc565b6122fe576122936104d26001611433865f52600260205260405f2090565b6001600160401b038216116122a757505050565b60207ffb12ae848c5dadd8d78a67a33e6edd5c9de9217de2735553c5451a6f6c6fceb792016122e881516122e3865f52600260205260405f2090565b6121c3565b51906122f960405192839283612240565b0390a2565b6001825161230b816113dc565b612314816113dc565b03612399576123336104d26001611433865f52600360205260405f2090565b6001600160401b0382161161234757505050565b60407f7191ffe59869d1cf17cb7c2726e2bd60a37024a55d653026782e80eca977b1df92016123888151612383865f52600360205260405f2090565b6120fb565b51906122f9604051928392836121a2565b600282516123a6816113dc565b6123af816113dc565b03612434576123ce6104d26001611433865f52600460205260405f2090565b6001600160401b038216116123e257505050565b60607f98bf4c5718257f52861df389c8da98969915aac10244557e2fbebe31c25774949201612423815161241e865f52600460205260405f2090565b612029565b51906122f9604051928392836120da565b60038251612441816113dc565b61244a816113dc565b036124cf576124696104d26001611433865f52600560205260405f2090565b6001600160401b0382161161247d57505050565b60807f66e9beacbf647c3bc61691e3291107d4a62979d7845cb7527ca0dcd478e8134f92016124be81516124b9865f52600560205260405f2090565b611f6d565b51906122f960405192839283612008565b600482516124dc816113dc565b6124e5816113dc565b0361150a576125046104d26001611433865f52600660205260405f2090565b6001600160401b0382161161251857505050565b60a07f21654bf502bb4f1c5de999bef2220202e8be7e7bb8febc1307d54f0d840fbb0492016125598151612554865f52600660205260405f2090565b611eb9565b51906122f960405192839283611f4c565b60ff5f805160206132278339815191525460401c161561258657565b631afcd79f60e31b5f5260045ffd5b5f806125b293602081519101845af46125ac6115ec565b916129cb565b90565b9092919283600201806002116116b157116103b1576002019190565b9092919283602501806025116116b157116103b1576025019190565b9093928201938483116116b15784116103b1578101920390565b6040519061261482610259565b5f60e083828152826020820152826040820152826060820152826080820152606060a0820152606060c08201520152565b519060ff821682036103b157565b51906001600160401b03821682036103b157565b519063ffffffff821682036103b157565b51906102dd82610597565b81601f820112156103b15760208151910161269d82610744565b926126ab60405194856102ac565b828452828201116103b157815f926020928386015e8301015290565b81601f820112156103b1578051906126de826110be565b926126ec60405194856102ac565b82845260208085019360071b830101918183116103b157602001925b828410612716575050505090565b6080848303126103b1576020608091604051612731816101e8565b86518152828701518382015261274960408801612645565b604082015261275a60608801612645565b6060820152815201930192612708565b519081151582036103b157565b6080818303126103b15780516001600160401b0381116103b1578101610100818403126103b1576127a66102cd565b906127b081612645565b82526127be60208201612653565b60208301526127cf60408201612667565b60408301526127e060608201612678565b60608301526080810151608083015260a08101516001600160401b0381116103b1578461280e918301612683565b60a083015260c0810151906001600160401b0382116103b1576128358560e09383016126c7565b60c0840152015160e08201529261284e6020830161276a565b9260408301516001600160401b0381116103b157606091612870918501612683565b92015190565b90918060409360208452816020850152848401375f828201840152601f01601f1916010190565b90916128a7611ab1565b506128b336848461075f565b6128bb611ab1565b506128cd6128c882612a73565b611a1c565b6128d5612ada565b906128e08183612a29565b6128e9816113dc565b8061292c57506128fb6125b292612e44565b60208201525b9361292461290e82611a33565b9461291c81870135966116a3565b92369161075f565b016008015190565b612935816113dc565b60018103612954575061294a6125b292612d9d565b6040820152612901565b61295d816113dc565b6002810361297c57506129726125b292612cdc565b6060820152612901565b612985816113dc565b600381036129a4575061299a6125b292612bb6565b6080820152612901565b806129b06004926113dc565b0361150a576129c16125b292612b39565b60a0820152612901565b906129ef57508051156129e057805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580612a20575b612a00575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156129f8565b60058210156113e65752565b90808211612a6d575b604051906020820192600160f81b84526021830152604182015260418152612a676061826102ac565b51902090565b90612a3e565b6003815110612a83576003015190565b60405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b6044820152606490fd5b90815160018201908183116116b15710612a8357016001015190565b612ae2611ab1565b50612aeb612e8d565b612af3612ebc565b612afb612f03565b612b03612f50565b90612b0c612fb9565b9260405194612b1a86610291565b5f8652602086015260408501526060840152608083015260a082015290565b612b4161161b565b50612b4a612fb9565b90612b5481612ff4565b908352612b6181836130b0565b602084015260208101908181116116b157612b7c82846130b0565b6040850152604081018092116116b157606090612b9983856130b0565b82860152018091116116b157612bae916130b0565b608082015290565b612bbe61194c565b50612cd3612bca612f50565b91612ccd612cb8612ca3612c8e612c7a612c66612c52612c33612c1f898c6040612c17612c10612bf985612ff4565b908552612c0681876130b0565b60208601526116a3565b80946130b0565b9101526116a3565b612c29818b6130b0565b60608d01526116a3565b612c4d600160ff612c44848d612abe565b161460808d0152565b6116b6565b612c5c81896130b0565b60a08b01526116a3565b612c7081886130b0565b60c08a01526116a3565b612c848187613109565b60e08901526116a3565b612c988186613109565b6101008801526116a3565b612cad8185613109565b6101208701526116a3565b612cc28184613109565b6101408601526116a3565b90613109565b61016082015290565b612ce461164c565b50612ced612f03565b90612cf781612ff4565b91908352612d0582826130b0565b602084015260208201918281116116b157604090612d2384846130b0565b82860152018092116116b157612d8f612d7b612d67612d5385612d49612d9597876130b0565b60608901526116a3565b612d5d81866130b0565b60808801526116a3565b612d7181856130b0565b60a08701526116a3565b612d8581846130b0565b60c08601526116a3565b906130b0565b60e082015290565b612da56115af565b50612dae612ebc565b90612db881612ff4565b91908352612dc682826130b0565b602084015260208201918281116116b157612de183836130b0565b6040850152604081018093116116b157606090612dfe84846130b0565b82860152018092116116b157612d8f612e2883612e1e612e3c95856130b0565b60808701526116a3565b612e3281846130b0565b60a08601526116a3565b60c082015290565b612e4c61153c565b50612e55612e8d565b90612e5f81612ff4565b908352612e6c81836130b0565b6020840152602081018091116116b157612e85916130b0565b604082015290565b612e9561153c565b50612e9e613161565b60405190612eab82610208565b81525f60208201525f604082015290565b612ec46115af565b50612ecd613161565b60405190612eda82610223565b81525f60208201525f60408201525f60608201525f60808201525f60a08201525f60c082015290565b612f0b61164c565b50612f14613161565b60405190612f2182610259565b81525f60208201525f60408201525f60608201525f60808201525f60a08201525f60c08201525f60e082015290565b612f5861194c565b50612f61613161565b60405190612f6e82610275565b81525f60208201525f60408201525f60608201525f60808201525f60a08201525f60c08201525f60e08201525f6101008201525f6101208201525f6101408201525f61016082015290565b612fc161161b565b50612fca613161565b60405190612fd78261023e565b81525f60208201525f60408201525f60608201525f608082015290565b90612ffd611518565b50613006613161565b916130115f826130b0565b835260288151106130745760288101516001600160401b031660208401526125b290612c4d61306a61306361304660206116c4565b61305e613053828761318e565b61ffff1660408a0152565b6116d2565b8093612abe565b60ff166060860152565b60405162461bcd60e51b8152602060048201526014602482015273746f55696e7436345f6f75744f66426f756e647360601b6044820152606490fd5b90815160208201908183116116b157106130cc57016020015190565b60405162461bcd60e51b8152602060048201526015602482015274746f55696e743235365f6f75744f66426f756e647360581b6044820152606490fd5b90815160208201908183116116b1571061312557016020015190565b60405162461bcd60e51b8152602060048201526014602482015273746f496e743235365f6f75744f66426f756e647360601b6044820152606490fd5b613169611518565b50604051613176816101e8565b5f81525f60208201525f60408201525f606082015290565b90815160028201908183116116b157106131aa57016002015190565b60405162461bcd60e51b8152602060048201526014602482015273746f55696e7431365f6f75744f66426f756e647360601b6044820152606490fdfe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212204a3711fca3c5856cb6d435990f15e65da5266746cdfbd7d5feb5154b5398db1c64736f6c634300081a0033","sourceMap":"651:5308:41:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;-1:-1:-1;651:5308:41;908:53:42;651:5308:41;;;;-1:-1:-1;651:5308:41;908:53:42;;;:::i;:::-;;;;;;651:5308:41;908:53:42;;651:5308:41;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;651:5308:41;;;;;;;;-1:-1:-1;;651:5308:41;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;651:5308:41;;;;;;-1:-1:-1;651:5308:41;852:50:42;651:5308:41;;;;;-1:-1:-1;651:5308:41;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;;;;;:::i;:::-;;-1:-1:-1;651:5308:41;2741:15;651:5308;;;-1:-1:-1;651:5308:41;;-1:-1:-1;;;;;651:5308:41;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;2741:15;651:5308;;;;;;;;;;;;;2774:23;651:5308;-1:-1:-1;;;;;651:5308:41;;;;;2774:28;2770:90;;2873:46;;2895:23;651:5308;2895:13;;:23;-1:-1:-1;;;;;651:5308:41;;;;;2895:23;-1:-1:-1;;;;;651:5308:41;;;2873:46;2878:15;2873:46;:::i;:::-;:52;2869:111;;651:5308;;;;;;;;;:::i;:::-;;;;2869:111;2948:21;;;-1:-1:-1;2948:21:41;651:5308;-1:-1:-1;2948:21:41;2770:90;2825:24;;;-1:-1:-1;2825:24:41;651:5308;-1:-1:-1;2825:24:41;651:5308;;;;;;-1:-1:-1;;651:5308:41;;;;;;-1:-1:-1;651:5308:41;967:41:42;651:5308:41;;;;-1:-1:-1;651:5308:41;967:41:42;;;:::i;:::-;;;;;651:5308:41;967:41:42;;;;651:5308:41;;967:41:42;;651:5308:41;967:41:42;;;651:5308:41;967:41:42;;;;;651:5308:41;967:41:42;;651:5308:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;812:35;651:5308;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;;;;;:::i;:::-;;-1:-1:-1;651:5308:41;3124:9;651:5308;;;-1:-1:-1;651:5308:41;;-1:-1:-1;;;;;651:5308:41;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;3124:9;651:5308;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3151:23;651:5308;-1:-1:-1;;;;;651:5308:41;;;;;3151:28;3147:90;;3250:46;;3272:23;651:5308;3272:13;;:23;-1:-1:-1;;;;;651:5308:41;;;;;3250:46;:52;3246:111;;651:5308;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;651:5308:41;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;651:5308:41;;;;;;:::o;:::-;-1:-1:-1;;;;;651:5308:41;;;;;;-1:-1:-1;;651:5308:41;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;651:5308:41;;;;;;:::o;:::-;;;-1:-1:-1;;651:5308:41;;;;;;:::i;:::-;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;4692:6:25;651:5308:41;4683:4:25;4675:23;;;:120;;;;651:5308:41;4658:251:25;;;2303:62:23;;:::i;:::-;651:5308:41;;-1:-1:-1;;;6156:52:25;;651:5308:41;;;;;-1:-1:-1;;;;;651:5308:41;;6156:52:25;;-1:-1:-1;;6156:52:25;;;651:5308:41;-1:-1:-1;6152:437:25;;-1:-1:-1;;;;6518:60:25;-1:-1:-1;;;;;651:5308:41;;;;;-1:-1:-1;6518:60:25;6152:437;6250:40;-1:-1:-1;;;;;;;;;;;6250:40:25;;6246:120;;6428:4;;;;:::i;:::-;651:5308:41;6246:120:25;-1:-1:-1;;;;6317:34:25;651:5308:41;;;;;-1:-1:-1;6518:60:25;6156:52;;;;;651:5308:41;6156:52:25;651:5308:41;6156:52:25;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;4658:251;4869:29;;;-1:-1:-1;4869:29:25;651:5308:41;-1:-1:-1;4869:29:25;4675:120;-1:-1:-1;;;;;;;;;;;651:5308:41;-1:-1:-1;;;;;651:5308:41;4753:42:25;;;-1:-1:-1;4675:120:25;;;651:5308:41;;;;;;-1:-1:-1;;651:5308:41;;;;5115:6:25;-1:-1:-1;;;;;651:5308:41;5106:4:25;5098:23;5094:145;;651:5308:41;;;-1:-1:-1;;;;;;;;;;;651:5308:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;651:5308:41;;;;:::o;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;2303:62:23;;:::i;:::-;5526:21:41;5516:31;;651:5308;;-1:-1:-1;;;;;;;;;;;651:5308:41;-1:-1:-1;;;;;;;;;;;;;651:5308:41;5601:31;;;;:::i;:::-;;651:5308;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;;-1:-1:-1;;651:5308:41;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;-1:-1:-1;;651:5308:41;;;;2303:62:23;;:::i;:::-;-1:-1:-1;;;;;;;;;;;651:5308:41;;-1:-1:-1;;;;;;651:5308:41;;;;;;;-1:-1:-1;;;;;651:5308:41;3975:40:23;651:5308:41;;3975:40:23;651:5308:41;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;;;;;:::i;:::-;;-1:-1:-1;651:5308:41;4255:9;651:5308;;;-1:-1:-1;651:5308:41;;-1:-1:-1;;;;;651:5308:41;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4282:23;651:5308;-1:-1:-1;;;;;651:5308:41;;;;;4282:28;4278:90;;4381:46;;4403:23;651:5308;4403:13;;:23;-1:-1:-1;;;;;651:5308:41;;;;;4381:46;:52;4377:111;;651:5308;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;-1:-1:-1;;;;;;;;;;;651:5308:41;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;-1:-1:-1;;651:5308:41;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;;;;;:::i;:::-;;-1:-1:-1;651:5308:41;;;;;-1:-1:-1;651:5308:41;;-1:-1:-1;;;;;651:5308:41;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3561:23;651:5308;-1:-1:-1;;;;;651:5308:41;;;;;3561:28;3557:90;;3660:46;;3682:23;651:5308;3682:13;;:23;-1:-1:-1;;;;;651:5308:41;;;;;3660:46;:52;3656:111;;651:5308;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;-1:-1:-1;651:5308:41;1073:47:42;651:5308:41;;;-1:-1:-1;651:5308:41;1073:47:42;;;:::i;:::-;651:5308:41;1073:47:42;;;651:5308:41;1073:47:42;;;;651:5308:41;1073:47:42;651:5308:41;1073:47:42;;651:5308:41;;1073:47:42;;;651:5308:41;;1073:47:42;;;651:5308:41;1073:47:42;;;651:5308:41;1073:47:42;;;651:5308:41;1073:47:42;;;;651:5308:41;1073:47:42;;;;651:5308:41;1073:47:42;;;;;651:5308:41;1073:47:42;;651:5308:41;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;-1:-1:-1;651:5308:41;1126:41:42;651:5308:41;;;;-1:-1:-1;651:5308:41;1126:41:42;;;:::i;:::-;;;;;651:5308:41;1126:41:42;;;;651:5308:41;1126:41:42;651:5308:41;1126:41:42;;651:5308:41;1126:41:42;;651:5308:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;651:5308:41;;;;;769:37;651:5308;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;-1:-1:-1;651:5308:41;;;;;-1:-1:-1;651:5308:41;1014:53:42;;;:::i;:::-;651:5308:41;1014:53:42;;;651:5308:41;1014:53:42;;;;651:5308:41;1014:53:42;651:5308:41;1014:53:42;;651:5308:41;1014:53:42;;;651:5308:41;1014:53:42;;;651:5308:41;1014:53:42;;;;;651:5308:41;1014:53:42;;651:5308:41;;;;;;;;;:::i;:::-;;;-1:-1:-1;;651:5308:41;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;2447:1;651:5308;;;;;;;:::i;:::-;1916:1;;651:5308;;;;;;;1968:172;1973:13;1988:7;;;;;;651:5308;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;2012:58;2031:39;651:5308;2031:39;2012:58;2031:39;;:::i;:::-;651:5308;;;;2012:58;;;:::i;:::-;651:5308;;1973:13;;;1988:7;2585:20;651:5308;2567:38;;;:::i;:::-;2213:9;:23;2209:88;;651:5308;2209:88;2259:27;;;1916:1;2259:27;651:5308;1916:1;2259:27;651:5308;-1:-1:-1;;;;;651:5308:41;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;651:5308:41;;;;;;:::i;:::-;;;:::i;:::-;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;913:772;651:5308;;;;;;:::i;:::-;;;;;;;913:772;;:::i;651:5308::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;;;;;:::i;:::-;;-1:-1:-1;651:5308:41;3896:12;651:5308;;;-1:-1:-1;651:5308:41;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3896:12;651:5308;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;3926:13;;:23;651:5308;-1:-1:-1;;;;;651:5308:41;;;;;3926:28;3922:90;;4025:46;;4047:23;651:5308;4047:13;;:23;-1:-1:-1;;;;;651:5308:41;;;;;4025:46;:52;4021:111;;651:5308;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;2357:1:23;651:5308:41;;:::i;:::-;2303:62:23;;:::i;:::-;2357:1;:::i;651:5308:41:-;;-1:-1:-1;651:5308:41;;;:::o;:::-;;;;;;;;;;;;4528:793;4623:43;4659:5;651:5308;4659:5;4623:43;:::i;:::-;651:5308;;;:::i;:::-;4680:31;;;4735:19;651:5308;4659:5;4735:19;-1:-1:-1;;;;;4735:19:41;651:5308;;4735:15;651:5308;;;;;;;4735:19;:38;651:5308;-1:-1:-1;;;;;651:5308:41;;;;;4735:43;;4727:52;:::o;4676:639::-;651:5308;;;:::i;:::-;4659:5;4800:25;;4659:5;;4849:13;:32;4659:5;4849:13;-1:-1:-1;;;;;4849:13:41;651:5308;;4849:9;651:5308;;;;;;;4796:519;651:5308;;;:::i;:::-;4920:27;4908:39;;4920:27;;4971:11;:30;4659:5;4971:11;-1:-1:-1;;;;;4971:11:41;651:5308;;4971:7;651:5308;;;;;;;4904:411;651:5308;;;:::i;:::-;5040:16;5028:28;;5040:16;;5080;:35;4659:5;5080:16;-1:-1:-1;;;;;5080:16:41;651:5308;;5080:12;651:5308;;;;;;;5024:291;651:5308;;5154:19;651:5308;;:::i;:::-;5142:31;5154:19;;5197:32;4659:5;5197:13;-1:-1:-1;;;;;5197:13:41;651:5308;;5197:9;651:5308;;;;;;;5138:177;5273:31;;;651:5308;5273:31;5154:19;651:5308;5273:31;651:5308;;;;;;;:::i;:::-;-1:-1:-1;651:5308:41;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;651:5308:41;;;;:::i;:::-;;;;;;;;;;:::o;1210:190:42:-;651:5308:41;;;;;;;-1:-1:-1;;;;;;651:5308:41;1350:41:42;;;651:5308:41;;;;;;;;;;1350:41:42;651:5308:41;;;;1350:41:42;;651:5308:41;;1350:41:42;;;;;;:::i;:::-;651:5308:41;1340:52:42;;-1:-1:-1;651:5308:41;1321:18:42;1350:41;651:5308:41;;;-1:-1:-1;651:5308:41;;;1210:190:42;:::o;651:5308:41:-;;;;;;;:::i;:::-;-1:-1:-1;651:5308:41;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;651:5308:41;;;;:::o;:::-;;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;651:5308:41;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;651:5308:41;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;7607:2:42;651:5308:41;;;;;;;:::o;:::-;;:::i;:::-;;4500:1:48;651:5308:41;;;;;;;:::o;:::-;;13393:1:46;651:5308:41;;;;;;;:::o;:::-;;1968:1:48;651:5308:41;;;;;;;:::o;:::-;;;;;;;;;;:::o;4069:1104:24:-;;;;;;;-1:-1:-1;;;;;;;;;;;651:5308:41;;-1:-1:-1;;;;;651:5308:41;4301:16:24;651:5308:41;;;;;4301:16:24;651:5308:41;;;;4301:16:24;651:5308:41;-1:-1:-1;;;;;651:5308:41;;;;;4726:16:24;;:34;;;;4069:1104;4805:1;4790:16;:50;;;;4069:1104;4855:13;:30;;;;4069:1104;4851:91;;;5055:1;4951:18;;;651:5308:41;-1:-1:-1;;;;;651:5308:41;-1:-1:-1;;;;;;;;;;;651:5308:41;;;-1:-1:-1;;;;;;;;;;;651:5308:41;;4951:18:24;4979:67;;5055:1;:::i;:::-;5066:101;;4069:1104::o;5066:101::-;5100:23;-1:-1:-1;;;651:5308:41;-1:-1:-1;;;;;;;;;;;651:5308:41;;-1:-1:-1;;;;;;;;;;;651:5308:41;;5100:23:24;651:5308:41;;4805:1:24;651:5308:41;;5142:14:24;;651:5308:41;;5142:14:24;4069:1104::o;4979:67::-;5013:22;651:5308:41;-1:-1:-1;;;651:5308:41;-1:-1:-1;;;;;;;;;;;651:5308:41;;;-1:-1:-1;;;;;;;;;;;651:5308:41;;5013:22:24;5055:1;:::i;4851:91::-;4908:23;;;4302:15;4908:23;;4302:15;4908:23;4855:30;4872:13;;;4855:30;;;4790:50;4818:4;4810:25;:30;;-1:-1:-1;4790:50:24;;4726:34;;;-1:-1:-1;4726:34:24;;651:5308:41;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;913:772;;6961:1:24;913:772:41;;;;;;;;6893:76:24;;:::i;:::-;;;:::i;6961:1::-;6893:76;;:::i;:::-;651:5308:41;;;;;;;;;1286:34;651:5308;;;1286:34;651:5308;1286:34;1390:3;651:5308;;1351:37;;;;;1472:29;1409:147;:140;651:5308;1472:29;651:5308;1472:29;;;:::i;:::-;651:5308;;1455:79;;1503:30;;;;:::i;:::-;651:5308;;;1455:79;;;;;;;;651:5308;;;;;;;;;;;;;;;;;;;;1455:79;651:5308;1428:120;;651:5308;;;;;;;;;;1409:140;651:5308;;-1:-1:-1;;651:5308:41;;;;;;1409:147;651:5308;1336:13;;1351:37;;;;;;1576:48;1634:44;1351:37;1576:48;651:5308;;1576:48;1634:44;651:5308;;;;;;;;;:::i;:::-;-1:-1:-1;651:5308:41;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3405:215:23:-;-1:-1:-1;;;;;651:5308:41;3489:22:23;;3485:91;;-1:-1:-1;;;;;;;;;;;651:5308:41;;-1:-1:-1;;;;;;651:5308:41;;;;;;;-1:-1:-1;;;;;651:5308:41;3975:40:23;-1:-1:-1;;3975:40:23;3405:215::o;3485:91::-;3534:31;;;3509:1;3534:31;3509:1;3534:31;651:5308:41;;3509:1:23;3534:31;1237:264:48;651:5308:41;;1352:18:48;1331:40;;1352:18;;651:5308:41;;;;;;1387:28:48;:::o;651:5308:41:-;-1:-1:-1;;651:5308:41;;;;;;;;:::o;5782:175::-;;5864:5;;;;;;651:5308;;;;;;;5885:12;:::o;5860:91::-;651:5308;;;;;;;;5928:12;:::o;651:5308::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;2658:162:23;-1:-1:-1;;;;;;;;;;;651:5308:41;-1:-1:-1;;;;;651:5308:41;966:10:26;2717:23:23;2713:101;;2658:162::o;2713:101::-;2763:40;;;-1:-1:-1;2763:40:23;966:10:26;2763:40:23;651:5308:41;;-1:-1:-1;2763:40:23;651:5308:41;;;;;;;:::i;:::-;;-1:-1:-1;651:5308:41;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;:::o;7694:1114:42:-;;2215:1;1256:95:53;;;;2239:42:42;2235:122;;651:5308:41;;1256:95:53;;;;;651:5308:41;;3611:33:42;;;3607:108;;8116:61;7979:14;8116:61;:::i;:::-;8068:109;;;;;;8216:13;-1:-1:-1;8231:14:42;651:5308:41;;;8231:14:42;;;;8739:24;;;;;8735:66;;7694:1114::o;8735:66::-;3671:29;;;-1:-1:-1;8772:29:42;;-1:-1:-1;8772:29:42;8247:3;2215:1;651:5308:41;;8428:58:42;651:5308:41;8556:11:42;651:5308:41;;;:::i;:::-;;8428:58:42;;;:::i;:::-;8384:102;;;;8556:11;;:::i;:::-;651:5308:41;8216:13:42;;;;2235:122;2312:26;;;-1:-1:-1;2312:26:42;;-1:-1:-1;2312:26:42;651:5308:41;;;;;;;;;;;;;;;;:::o;2274:344:31:-;;1758:29;;:34;1754:119;;-1:-1:-1;;;;;;;;;;;651:5308:41;;-1:-1:-1;;;;;;651:5308:41;-1:-1:-1;;;;;651:5308:41;;;;;;;;2417:36:31;-1:-1:-1;;2417:36:31;651:5308:41;;2468:15:31;:11;;2499:53;;;:::i;:::-;;2274:344::o;2464:148::-;6173:9;;;6169:70;;2274:344::o;6169:70::-;6209:19;;;1791:1;6209:19;;1791:1;6209:19;1754:119;-1:-1:-1;;;;1791:1:31;1815:47;;;-1:-1:-1;;;;;651:5308:41;;;;1815:47:31;651:5308:41;;;1815:47:31;3737:1442:42;1623:43;3737:1442;4008:90;3737:1442;651:5308:41;;;4008:90:42;;:::i;:::-;3998:100;;4121:1;4411:56;1513:95:53;;;;3998:100:42;;4411:56;:::i;:::-;651:5308:41;;;:::i;:::-;-1:-1:-1;651:5308:41;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;1623:43:42;;;;;;:::i;:::-;;;;;;;;;;4121:1;;;;;1623:43;;;3737:1442;1684:6;;1680:61;;1766:62;1767:61;651:5308:41;1785:20:42;;;651:5308:41;;;;;;1807:20:42;;;651:5308:41;1767:61:42;;:::i;:::-;1766:62;;651:5308:41;1766:62:42;1762:135;;4507:13;;;651:5308:41;4228:1:42;651:5308:41;14089:85:52;;;;;651:5308:41;;;14089:85:52;4879:37:42;4875:128;;12388:81:52;;;3737:1442:42;:::o;1762:135::-;1851:35;;;4121:1;1851:35;1623:43;4121:1;1851:35;1680:61;1699:42;;;4121:1;1699:42;1623:43;4121:1;1699:42;1623:43;;;;;;;;;;4121:1;1623:43;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;:::i;5482:1598::-;;5887:70;5482:1598;;;;651:5308:41;;:::i;:::-;;;;;5887:70:42;;:::i;:::-;5995:2;1513:95:53;;;;;;;;651:5308:41;1513:95:53;;;;;6375:63:42;651:5308:41;6613:84:42;6375:63;;;;;:::i;:::-;651:5308:41;;;;;6516:64:42;;;;;;:::i;:::-;651:5308:41;;;;;-1:-1:-1;;651:5308:41;;6613:84:42;:::i;:::-;651:5308:41;;;;;;:::i;:::-;;;716:42:51;5995:2:42;716:42:51;;;;;269:1;-1:-1:-1;269:1:51;;651:5308:41;;269:1:51;;;;;;;651:5308:41;;;-1:-1:-1;651:5308:41;;;;716:42:51;;651:5308:41;;716:42:51;;;;;;:::i;:::-;651:5308:41;460:16:51;;1513:95:53;;;;2066:16:51;6157:1:42;2101:13:51;-1:-1:-1;2096:301:51;2116:18;;;;;;2418:21;;;;6896:61:42;;7007:27;651:5308:41;7007:27:42;7061:2;7007:27;;:::i;:::-;6971:63;;;;;;651:5308:41;;;;;5482:1598:42;:::o;2136:3:51:-;2191:59;;;;2333:49;2191:59;716:42;2191:59;269:1;2191:59;;2804:85:53;;2677:244;;2191:59:51;651:5308:41;;2333:49:51;;:::i;:::-;2136:3;651:5308:41;2101:13:51;;;;651:5308:41;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;-1:-1:-1;;;;;651:5308:41;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;:::o;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;-1:-1:-1;;;;;651:5308:41;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;-1:-1:-1;;;;;651:5308:41;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;-1:-1:-1;;;;;651:5308:41;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;-1:-1:-1;;;;;651:5308:41;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;:::i;8814:1660:42:-;;651:5308:41;;;;;:::i;:::-;;;;:::i;:::-;8956:42:42;;9018:56;651:5308:41;9032:42:42;:23;;651:5308:41;;4735:15;651:5308;;;;;;;9018:56:42;-1:-1:-1;;;;;651:5308:41;;9018:56:42;9014:223;;8952:1516;;;8814:1660::o;9014:223::-;9120:15;9158:64;9120:15;;651:5308:41;9120:15:42;;9094:23;;651:5308:41;;4735:15;651:5308;;;;;;;9094:23:42;651:5308:41;:::i;:::-;9206:15:42;651:5308:41;9158:64:42;651:5308:41;;9158:64:42;;;;;:::i;:::-;;;;8814:1660::o;8952:1516::-;9280:13;651:5308:41;;;;;:::i;:::-;;;;:::i;:::-;9257:36:42;9280:13;;9313:50;9327:36;9280:13;9327:17;;651:5308:41;;4849:9;651:5308;;;;;;;9313:50:42;-1:-1:-1;;;;;651:5308:41;;9313:50:42;9309:205;;9253:1215;;;8814:1660::o;9309:205::-;9403:15;9441:58;9403:15;;651:5308:41;9403:15:42;;9383:17;;651:5308:41;;4849:9;651:5308;;;;;;;9383:17:42;651:5308:41;:::i;:::-;9483:15:42;651:5308:41;9441:58:42;9403:15;651:5308:41;9441:58:42;;;;;:::i;9253:1215::-;9557:27;651:5308:41;;;;;:::i;:::-;;;;:::i;:::-;9534:50:42;9557:27;;9604:48;9618:34;9280:13;9618:15;;651:5308:41;;4971:7;651:5308;;;;;;;9604:48:42;-1:-1:-1;;;;;651:5308:41;;9604:48:42;9600:211;;9530:938;;;651:5308:41:o;9600:211:42:-;9690:13;9726:70;9690:13;;651:5308:41;9690:13:42;;9672:15;;651:5308:41;;4971:7;651:5308;;;;;;;9672:15:42;651:5308:41;:::i;:::-;9782:13:42;651:5308:41;9726:70:42;651:5308:41;;9726:70:42;;;;;:::i;9530:938::-;9854:16;651:5308:41;;;;;:::i;:::-;;;;:::i;:::-;9831:39:42;9854:16;;9890:53;9904:39;9280:13;9904:20;;651:5308:41;;5080:12;651:5308;;;;;;;9890:53:42;-1:-1:-1;;;;;651:5308:41;;9890:53:42;9886:220;;9827:641;;;651:5308:41:o;9886:220:42:-;9986:18;10027:64;9986:18;;651:5308:41;9986:18:42;;9963:20;;651:5308:41;;5080:12;651:5308;;;;;;;9963:20:42;651:5308:41;:::i;:::-;10072:18:42;651:5308:41;10027:64:42;651:5308:41;;10027:64:42;;;;;:::i;9827:641::-;10149:19;651:5308:41;;;;;:::i;:::-;;;;:::i;:::-;10126:42:42;10149:19;;10188:50;10202:36;9280:13;10202:17;;651:5308:41;;5197:9;651:5308;;;;;;;10188:50:42;-1:-1:-1;;;;;651:5308:41;;10188:50:42;10184:205;;10122:346;;;651:5308:41:o;10184:205:42:-;10278:15;10316:58;10278:15;;651:5308:41;10278:15:42;;10258:17;;651:5308:41;;5197:9;651:5308;;;;;;;10258:17:42;651:5308:41;:::i;:::-;10358:15:42;651:5308:41;10316:58:42;651:5308:41;;10316:58:42;;;;;:::i;7084:141:24:-;651:5308:41;-1:-1:-1;;;;;;;;;;;651:5308:41;;;;7150:18:24;7146:73;;7084:141::o;7146:73::-;7191:17;;;-1:-1:-1;7191:17:24;;-1:-1:-1;7191:17:24;3900:253:36;4049:25;3900:253;4091:55;3900:253;4049:25;;;;;;;;;;:::i;:::-;4091:55;;:::i;:::-;3900:253;:::o;541:165:53:-;;;;;651:5308:41;;;;;;;;;;;;;661:38:53;541:165;:::o;:::-;;;;;651:5308:41;;;;;;;;;;;;;661:38:53;541:165;:::o;:::-;;;;651:5308:41;;;;;;;;;;;;;;;;541:165:53;:::o;651:5308:41:-;;;;;;;:::i;:::-;-1:-1:-1;651:5308:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;651:5308:41;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;651:5308:41;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;651:5308:41;;;;:::o;7086:602:42:-;;;651:5308:41;;:::i;:::-;;;;;;;:::i;:::-;;;:::i;:::-;;427:31:48;377:20;;;:::i;:::-;427:31;:::i;:::-;500:42;;:::i;:::-;552:30;;;;;:::i;:::-;651:5308:41;;;:::i;:::-;596:31:48;;;661:19;;7633:48:42;661:19:48;;:::i;:::-;643:15;;;:37;592:605;7427:27:42;651:5308:41;7427:27:42;;;:::i;:::-;7512:75;7597:12;2804:85:53;;;;7597:12:42;;:::i;:::-;651:5308:41;;;;:::i;:::-;13111:81:52;;;;;12989:235;592:605:48;651:5308:41;;;:::i;:::-;713:13:48;701:25;;713:13;;760:19;;7633:48:42;760:19:48;;:::i;:::-;742:15;;;:37;592:605;;697:500;651:5308:41;;;:::i;:::-;308:1:48;800:39;;308:1;;871:33;;7633:48:42;871:33:48;;:::i;:::-;855:13;;;:49;592:605;;796:401;651:5308:41;;;:::i;:::-;937:16:48;925:28;;937:16;;990:22;;7633:48:42;990:22:48;;:::i;:::-;969:18;;;:43;592:605;;921:276;651:5308:41;;1045:19:48;651:5308:41;;:::i;:::-;1033:31:48;1045:19;;1098;7633:48:42;1098:19:48;;:::i;:::-;1080:15;;;:37;592:605;;4421:582:36;;4593:8;;-1:-1:-1;651:5308:41;;5674:21:36;:17;;5846:142;;;;;;5670:385;6025:19;;;5694:1;6025:19;;5694:1;6025:19;4589:408;651:5308:41;;4841:22:36;:49;;;4589:408;4837:119;;4969:17;;:::o;4837:119::-;-1:-1:-1;;;4862:1:36;4917:24;;;-1:-1:-1;;;;;651:5308:41;;;;4917:24:36;651:5308:41;;;4917:24:36;4841:49;4867:18;;;:23;4841:49;;651:5308:41;;;;;;;;:::o;772:254:51:-;;868:15;;;864:81;;772:254;651:5308:41;;966:52:51;;;;651:5308:41;;;;269:1:51;;312;;;651:5308:41;312:1:51;;;651:5308:41;312:1:51;966:52;;;;;;:::i;:::-;651:5308:41;460:16:51;;772:254;:::o;864:81::-;;;;12334:301:46;651:5308:41;;;12436:27:46;651:5308:41;;;12522:81:46;;12334:301;:::o;651:5308:41:-;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;12334:301:46;;651:5308:41;;12462:1:46;651:5308:41;;;;;;;;12436:27:46;651:5308:41;;12522:81:46;12462:1;12522:81;;;12334:301::o;1881:357:45:-;651:5308:41;;:::i;:::-;;2046:22:45;;:::i;:::-;2088:16;;:::i;:::-;2122:14;;:::i;:::-;2159:19;;:::i;:::-;2198:22;;;:::i;:::-;651:5308:41;;;;;;;:::i;:::-;-1:-1:-1;651:5308:41;;1972:259:45;;;651:5308:41;;1972:259:45;;651:5308:41;1972:259:45;;;651:5308:41;1972:259:45;;;651:5308:41;1972:259:45;;;651:5308:41;1881:357:45;:::o;5013:535:48:-;651:5308:41;;:::i;:::-;;5121:42:48;;:::i;:::-;5227:26;;;;:::i;:::-;5201:52;;;5282:21;;;;:::i;:::-;5264:15;;;651:5308:41;5264:15:48;651:5308:41;;;;;;;;5355:21:48;;;;:::i;:::-;5335:17;;;651:5308:41;5335:17:48;651:5308:41;;;;;;;5408:18:48;5429:21;;;;;:::i;:::-;5408:18;;;651:5308:41;;;;;;;5497:21:48;;;:::i;:::-;5482:12;;;651:5308:41;5013:535:48;:::o;3979:1028::-;651:5308:41;;:::i;:::-;;4957:20:48;4096:39;;:::i;:::-;4199:26;4923:11;4857;4792;4726;4660;4587;4511:10;4440:11;4366;4199:26;;4309:23;4335:21;4287:11;4199:26;;;:::i;:::-;4173:52;;;4256:21;;;;:::i;:::-;4236:17;;;651:5308:41;4287:11:48;:::i;:::-;4335:21;;;:::i;:::-;4309:23;;651:5308:41;4366:11:48;:::i;:::-;4409:21;;;;:::i;:::-;4388:18;;;651:5308:41;4440:11:48;:::i;:::-;4462:39;4500:1;651:5308:41;4477:19:48;;;;:::i;:::-;651:5308:41;4477:24:48;4462:12;;;651:5308:41;;4462:39:48;4511:10;:::i;:::-;4556:21;;;;:::i;:::-;4532;;;651:5308:41;4587:11:48;:::i;:::-;4629:21;;;;:::i;:::-;4609:17;;;651:5308:41;4660:11:48;:::i;:::-;4696:20;;;;:::i;:::-;4682:11;;;651:5308:41;4726:11:48;:::i;:::-;4762:20;;;;:::i;:::-;4748:11;;;651:5308:41;4792:11:48;:::i;:::-;4827:20;;;;:::i;:::-;4814:10;;;651:5308:41;4857:11:48;:::i;:::-;4893:20;;;;:::i;:::-;4879:11;;;651:5308:41;4923:11:48;:::i;:::-;4957:20;;:::i;:::-;4945:9;;;651:5308:41;3979:1028:48;:::o;3183:790::-;651:5308:41;;:::i;:::-;;3333:34:48;;:::i;:::-;3431:26;;;;:::i;:::-;3405:52;;;;3487:21;;;;:::i;:::-;3468:16;;;651:5308:41;3468:16:48;651:5308:41;;;;;;;;3540:16:48;3559:21;;;;;:::i;:::-;3540:16;;;651:5308:41;;;;;;;3873:11:48;3803;3732;3662;3631:21;;3922;3631;;;:::i;:::-;3612:16;;;651:5308:41;3662:11:48;:::i;:::-;3701:21;;;;:::i;:::-;3684:14;;;651:5308:41;3732:11:48;:::i;:::-;3772:21;;;;:::i;:::-;3754:15;;;651:5308:41;3803:11:48;:::i;:::-;3842:21;;;;:::i;:::-;3825:14;;;651:5308:41;3873:11:48;:::i;:::-;3922:21;;:::i;:::-;3895:24;;;651:5308:41;3183:790:48;:::o;2496:681::-;651:5308:41;;:::i;:::-;;2604:36:48;;:::i;:::-;2704:26;;;;:::i;:::-;2678:52;;;;2759:21;;;;:::i;:::-;2741:15;;;651:5308:41;2741:15:48;651:5308:41;;;;;;;;2831:21:48;;;;:::i;:::-;2812:16;;;651:5308:41;2812:16:48;651:5308:41;;;;;;;2884:16:48;2903:21;;;;;:::i;:::-;2884:16;;;651:5308:41;;;;;;;3077:11:48;3004;2973:21;;3126;2973;;;:::i;:::-;2956:14;;;651:5308:41;3004:11:48;:::i;:::-;3046:21;;;;:::i;:::-;3026:17;;;651:5308:41;3077:11:48;:::i;3126:21::-;3099:24;;;651:5308:41;2496:681:48;:::o;2094:396::-;651:5308:41;;:::i;:::-;;2214:42:48;;:::i;:::-;2320:26;;;;:::i;:::-;2294:52;;;2371:21;;;;:::i;:::-;2357:11;;;651:5308:41;2357:11:48;651:5308:41;;;;;;;2439:21:48;;;:::i;:::-;2424:12;;;651:5308:41;2094:396:48;:::o;2412:163:45:-;651:5308:41;;:::i;:::-;;2525:20:45;;:::i;:::-;651:5308:41;;;;;;:::i;:::-;;;-1:-1:-1;2503:65:45;;;651:5308:41;-1:-1:-1;651:5308:41;2503:65:45;;651:5308:41;2412:163:45;:::o;2581:314::-;651:5308:41;;:::i;:::-;;2689:20:45;;:::i;:::-;651:5308:41;;;;;;:::i;:::-;;;-1:-1:-1;2660:228:45;;;651:5308:41;-1:-1:-1;651:5308:41;2660:228:45;;651:5308:41;-1:-1:-1;2660:228:45;;;651:5308:41;-1:-1:-1;2660:228:45;;;651:5308:41;-1:-1:-1;2660:228:45;;;651:5308:41;-1:-1:-1;2660:228:45;;;651:5308:41;2581:314:45;:::o;2901:364::-;651:5308:41;;:::i;:::-;;3035:20:45;;:::i;:::-;651:5308:41;;;;;;:::i;:::-;;;-1:-1:-1;2992:266:45;;;651:5308:41;-1:-1:-1;651:5308:41;2992:266:45;;651:5308:41;-1:-1:-1;2992:266:45;;;651:5308:41;-1:-1:-1;2992:266:45;;;651:5308:41;-1:-1:-1;2992:266:45;;;651:5308:41;-1:-1:-1;2992:266:45;;;651:5308:41;-1:-1:-1;2992:266:45;;;651:5308:41;2901:364:45;:::o;3271:440::-;651:5308:41;;:::i;:::-;;3388:20:45;;:::i;:::-;651:5308:41;;;;;;:::i;:::-;;;-1:-1:-1;3356:348:45;;;651:5308:41;-1:-1:-1;651:5308:41;3356:348:45;;651:5308:41;-1:-1:-1;3356:348:45;;;651:5308:41;-1:-1:-1;3356:348:45;;;651:5308:41;-1:-1:-1;3356:348:45;;;651:5308:41;-1:-1:-1;3356:348:45;;;651:5308:41;-1:-1:-1;3356:348:45;;;651:5308:41;-1:-1:-1;3356:348:45;;;651:5308:41;-1:-1:-1;3356:348:45;;;651:5308:41;-1:-1:-1;3356:348:45;;;651:5308:41;-1:-1:-1;3356:348:45;;;651:5308:41;3271:440:45;:::o;3717:188::-;651:5308:41;;:::i;:::-;;3818:20:45;;:::i;:::-;651:5308:41;;;;;;:::i;:::-;;;-1:-1:-1;3802:96:45;;;651:5308:41;-1:-1:-1;651:5308:41;3802:96:45;;651:5308:41;-1:-1:-1;3802:96:45;;;651:5308:41;-1:-1:-1;3802:96:45;;;651:5308:41;3717:188:45;:::o;1507:581:48:-;;651:5308:41;;:::i;:::-;;1655:40:48;;:::i;:::-;1768:21;;5189:1;1768:21;;:::i;:::-;651:5308:41;;;;;13367:27:46;651:5308:41;;;13455:81:46;;;-1:-1:-1;;;;;651:5308:41;1809:2:48;1822:18;;651:5308:41;2036:10:48;;1980:46;2006:19;1959:10;1873;1809:2;1873:10;:::i;:::-;1894:55;1928:20;;;;:::i;:::-;651:5308:41;;1894:24:48;;;651:5308:41;;1894:55:48;1959:10;:::i;:::-;2006:19;;;:::i;:::-;651:5308:41;;1980:17:48;;;651:5308:41;;;;;-1:-1:-1;;;651:5308:41;;1809:2:48;651:5308:41;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;14203:311:46;;651:5308:41;;14335:2:46;651:5308:41;;;;;;;;14309:28:46;651:5308:41;;14400:82:46;14335:2;14400:82;;;14203:311::o;651:5308:41:-;;;-1:-1:-1;;;651:5308:41;;14335:2:46;651:5308:41;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;14520:304:46;;651:5308:41;;14650:2:46;651:5308:41;;;;;;;;14624:28:46;651:5308:41;;14712:81:46;14650:2;14712:81;;;14520:304::o;651:5308:41:-;;;-1:-1:-1;;;651:5308:41;;14650:2:46;651:5308:41;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;2244:162:45;651:5308:41;;:::i;:::-;;;;;;;:::i;:::-;-1:-1:-1;651:5308:41;;-1:-1:-1;2331:68:45;;;651:5308:41;-1:-1:-1;651:5308:41;2331:68:45;;651:5308:41;-1:-1:-1;2331:68:45;;;651:5308:41;2244:162:45;:::o;12641:305:46:-;;651:5308:41;;12771:1:46;651:5308:41;;;;;;;;12745:27:46;651:5308:41;;12833:81:46;12771:1;12833:81;;;12641:305::o;651:5308:41:-;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;","linkReferences":{},"immutableReferences":{"47242":[{"start":2020,"length":32},{"start":2318,"length":32}]}},"methodIdentifiers":{"UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","_isValidDataSource(bytes32)":"0f01cb51","dataFeedExists(bytes32)":"0e8fd1ba","getOptionsNoOlderThan(bytes32,uint256)":"e29ea30f","getPerpNoOlderThan(bytes32,uint256)":"7cfa33dd","getRealizedVolatilityNoOlderThan(bytes32,uint256)":"bdf6afa4","getSpotMedianNoOlderThan(bytes32,uint256)":"32bb41d3","getTwapNoOlderThan(bytes32,uint256)":"49c398a4","getUpdateFee(bytes[])":"d47eed45","getValidTimePeriod()":"e18910a3","hyperlane()":"63066422","initialize(address,address,uint16[],bytes32[],uint256,uint256)":"d5d89eaf","isValidDataSource(uint16,bytes32)":"437209a7","optionsFeeds(bytes32)":"c12fd473","owner()":"8da5cb5b","perpFeeds(bytes32)":"c6ac557c","proxiableUUID()":"52d1902d","renounceOwnership()":"715018a6","rvFeeds(bytes32)":"cf8e17bb","singleUpdateFeeInWei()":"48b6404d","spotMedianFeeds(bytes32)":"043cc783","transferOwnership(address)":"f2fde38b","twapFeeds(bytes32)":"3a612c32","updateDataFeeds(bytes[])":"d58a8f6d","upgradeToAndCall(address,bytes)":"4f1ef286","validTimePeriodSeconds()":"cb718a9b","version()":"54fd4d50","withdraw_funds(uint256)":"5d2c53a7"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DataNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DataStale\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientFee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDataFeedType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidHyperlaneCheckpointRoot\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidUpdateData\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidUpdateDataSource\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidVersion\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"publishTime\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"strikePrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"impliedVolatility\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeToExpiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isCall\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"underlyingPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"optionPrice\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"delta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"gamma\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"vega\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"theta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"rho\",\"type\":\"int256\"}],\"indexed\":false,\"internalType\":\"struct Options\",\"name\":\"options\",\"type\":\"tuple\"}],\"name\":\"OptionsUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"publishTime\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"markPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fundingRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"openInterest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"volume\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct Perp\",\"name\":\"perp\",\"type\":\"tuple\"}],\"name\":\"PerpUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"publishTime\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"volatility\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"highPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lowPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfDataPoints\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct RealizedVolatility\",\"name\":\"realizedVolatility\",\"type\":\"tuple\"}],\"name\":\"RealizedVolatilityUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"publishTime\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"volume\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct SpotMedian\",\"name\":\"spotMedian\",\"type\":\"tuple\"}],\"name\":\"SpotMedianUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"publishTime\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"twapPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalVolume\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfDataPoints\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct TWAP\",\"name\":\"twap\",\"type\":\"tuple\"}],\"name\":\"TWAPUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"_isValidDataSource\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"name\":\"dataFeedExists\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"age\",\"type\":\"uint256\"}],\"name\":\"getOptionsNoOlderThan\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"strikePrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"impliedVolatility\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeToExpiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isCall\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"underlyingPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"optionPrice\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"delta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"gamma\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"vega\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"theta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"rho\",\"type\":\"int256\"}],\"internalType\":\"struct Options\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"age\",\"type\":\"uint256\"}],\"name\":\"getPerpNoOlderThan\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"markPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fundingRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"openInterest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"volume\",\"type\":\"uint256\"}],\"internalType\":\"struct Perp\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"age\",\"type\":\"uint256\"}],\"name\":\"getRealizedVolatilityNoOlderThan\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"volatility\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"highPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lowPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfDataPoints\",\"type\":\"uint256\"}],\"internalType\":\"struct RealizedVolatility\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"age\",\"type\":\"uint256\"}],\"name\":\"getSpotMedianNoOlderThan\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"volume\",\"type\":\"uint256\"}],\"internalType\":\"struct SpotMedian\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"age\",\"type\":\"uint256\"}],\"name\":\"getTwapNoOlderThan\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"twapPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalVolume\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfDataPoints\",\"type\":\"uint256\"}],\"internalType\":\"struct TWAP\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"updateData\",\"type\":\"bytes[]\"}],\"name\":\"getUpdateFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getValidTimePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hyperlane\",\"outputs\":[{\"internalType\":\"contract IHyperlane\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_hyperlane\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initial_owner\",\"type\":\"address\"},{\"internalType\":\"uint16[]\",\"name\":\"_dataSourceEmitterChainIds\",\"type\":\"uint16[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"_dataSourceEmitterAddresses\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"_validTimePeriodSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_singleUpdateFeeInWei\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"chainId\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"emitterAddress\",\"type\":\"bytes32\"}],\"name\":\"isValidDataSource\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"optionsFeeds\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"strikePrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"impliedVolatility\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeToExpiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isCall\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"underlyingPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"optionPrice\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"delta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"gamma\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"vega\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"theta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"rho\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"perpFeeds\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"markPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fundingRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"openInterest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"volume\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"rvFeeds\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"volatility\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"highPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lowPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfDataPoints\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"singleUpdateFeeInWei\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"spotMedianFeeds\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"volume\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"twapFeeds\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"twapPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalVolume\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfDataPoints\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"updateData\",\"type\":\"bytes[]\"}],\"name\":\"updateDataFeeds\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validTimePeriodSeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw_funds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Pragma Labs\",\"custom:contact\":\"security@pragma.build\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"OptionsUpdate(bytes32,uint64,((bytes32,uint64,uint16,uint8),uint256,uint256,uint256,bool,uint256,uint256,int256,int256,int256,int256,int256))\":{\"details\":\"Emitted when an Options feed with `feedId` has received a fresh update.\",\"params\":{\"feedId\":\"Pragma Feed ID.\",\"options\":\"New Options data.\",\"publishTime\":\"Unix timestamp of the update.\"}},\"PerpUpdate(bytes32,uint64,((bytes32,uint64,uint16,uint8),uint256,uint256,uint256,uint256))\":{\"details\":\"Emitted when a Perp feed with `feedId` has received a fresh update.\",\"params\":{\"feedId\":\"Pragma Feed ID.\",\"perp\":\"New Perp data.\",\"publishTime\":\"Unix timestamp of the update.\"}},\"RealizedVolatilityUpdate(bytes32,uint64,((bytes32,uint64,uint16,uint8),uint256,uint256,uint256,uint256,uint256,uint256,uint256))\":{\"details\":\"Emitted when a Realized Volatility feed with `feedId` has received a fresh update.\",\"params\":{\"feedId\":\"Pragma Feed ID.\",\"publishTime\":\"Unix timestamp of the update.\",\"realizedVolatility\":\"New Realized Volatility data.\"}},\"SpotMedianUpdate(bytes32,uint64,((bytes32,uint64,uint16,uint8),uint256,uint256))\":{\"details\":\"Emitted when a Spot Median feed with `feedId` has received a fresh update.\",\"params\":{\"feedId\":\"Pragma Feed ID.\",\"publishTime\":\"Unix timestamp of the update.\",\"spotMedian\":\"New Spot Median data.\"}},\"TWAPUpdate(bytes32,uint64,((bytes32,uint64,uint16,uint8),uint256,uint256,uint256,uint256,uint256,uint256))\":{\"details\":\"Emitted when a TWAP feed with `feedId` has received a fresh update.\",\"params\":{\"feedId\":\"Pragma Feed ID.\",\"publishTime\":\"Unix timestamp of the update.\",\"twap\":\"New TWAP data.\"}},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"dataFeedExists(bytes32)\":{\"params\":{\"id\":\"The data feed ID.\"},\"returns\":{\"_0\":\"True if the data feed exists, false otherwise.\"}},\"getOptionsNoOlderThan(bytes32,uint256)\":{\"params\":{\"age\":\"The maximum allowed age (in seconds) for the options data.\",\"id\":\"The unique identifier of the options data feed.\"},\"returns\":{\"data\":\"The latest valid Options data, or a revert if no valid data is available within the specified age.\"}},\"getPerpNoOlderThan(bytes32,uint256)\":{\"params\":{\"age\":\"The maximum allowed age (in seconds) for the perpetuals data.\",\"id\":\"The unique identifier of the perpetuals data feed.\"},\"returns\":{\"data\":\"The latest valid Perp data, or a revert if no valid data is available within the specified age.\"}},\"getRealizedVolatilityNoOlderThan(bytes32,uint256)\":{\"params\":{\"age\":\"The maximum allowed age (in seconds) for the volatility data.\",\"id\":\"The unique identifier of the realized volatility data feed.\"},\"returns\":{\"data\":\"The latest valid RealizedVolatility data, or a revert if no valid data is available within the specified age.\"}},\"getSpotMedianNoOlderThan(bytes32,uint256)\":{\"params\":{\"age\":\"The maximum allowed age (in seconds) for the price data.\",\"id\":\"The unique identifier of the data feed.\"},\"returns\":{\"data\":\"The latest valid SpotMedian data, or a revert if no valid data is available within the specified age.\"}},\"getTwapNoOlderThan(bytes32,uint256)\":{\"params\":{\"age\":\"The maximum allowed age (in seconds) for the TWAP data.\",\"id\":\"The unique identifier of the TWAP data feed.\"},\"returns\":{\"data\":\"The latest valid TWAP data, or a revert if no valid data is available within the specified age.\"}},\"getUpdateFee(bytes[])\":{\"params\":{\"updateData\":\"Array of price update data.\"},\"returns\":{\"feeAmount\":\"The required fee in Wei.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"updateDataFeeds(bytes[])\":{\"details\":\"Emits a `DataFeedUpdate` event for each updated data feed.Reverts if the caller has not paid the required fee.\",\"params\":{\"updateData\":\"The data.\"}},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"title\":\"Pragma\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"dataFeedExists(bytes32)\":{\"notice\":\"Checks if a data feed exists.\"},\"getOptionsNoOlderThan(bytes32,uint256)\":{\"notice\":\"Fetches the latest options data that is no older than a specified age.\"},\"getPerpNoOlderThan(bytes32,uint256)\":{\"notice\":\"Fetches the latest perpetuals data that is no older than a specified age.\"},\"getRealizedVolatilityNoOlderThan(bytes32,uint256)\":{\"notice\":\"Fetches the latest realized volatility that is no older than a specified age.\"},\"getSpotMedianNoOlderThan(bytes32,uint256)\":{\"notice\":\"Fetches the latest spot median price that is no older than a specified age.\"},\"getTwapNoOlderThan(bytes32,uint256)\":{\"notice\":\"Fetches the latest TWAP (Time-Weighted Average Price) that is no older than a specified age.\"},\"getUpdateFee(bytes[])\":{\"notice\":\"Returns the required fee to update an array of price updates.\"},\"updateDataFeeds(bytes[])\":{\"notice\":\"Updates data feeds given some update data. Before calling this function, the caller must have paid the required fee. Which can be calculated using the `getUpdateFee` function. Data feeds will only be updated if data is more recent than the current data.\"}},\"notice\":\"The Pragma contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Pragma.sol\":\"Pragma\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x490959f972df54829d0ffacb71fa025429d9b7b9ebd118f418b41e9c0041ef73\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1883bc1a16a88922abccd415d1b41caf00c38ee581ae3e5976018d9c17d2c4b7\",\"dweb:/ipfs/QmP2vzQM8RR8ce675KhuZEaUicAPRMUbPLwBsTpxByvn18\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d\",\"dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0xf5c04a8bf51755681f7db413095377dfd1a05b98b6326fb1da0e9a297057caf0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f57690465f41860906cf84e6970baaacae9d05b8311674812e6b502bb510441e\",\"dweb:/ipfs/Qme5swSUieatWond1BHyZaEztdLAPu67KcoQTeY4pH5wVd\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x5f3770f82f75d132e210b43c071d3feec1bef13c385d1d799763a366e8bda311\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3a50b7702cbd525c4a0fd3c36d1e116432b5f645f84cb25e4473dc9c88a917c5\",\"dweb:/ipfs/QmaN5QKZwgypVK3zAwdgXfsygEeauRYa4sSe4x8yKXDRtV\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x80b4189de089dc632b752b365a16c5063b58cc24da0dd38b82f2c25f56d25c84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81e2717e78844156a86733f1cada84dba906ffe03e4957de12ca219c65e9191b\",\"dweb:/ipfs/QmW8vg3AafPJRo7EC75RQJTtjiaYmfPa4U4sqmEuBXXzaP\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0x1b0625096e82d06abdcf1844172ef78ef54a5e878761f4d905fda07eaf098424\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5cd99f1a4836c07461cb3ea023ae2f6d1d01e80694b764a87623aa7252754756\",\"dweb:/ipfs/QmNPNDuiNU6TJatZcdBcrwixBoo5MSXNDq4kaXhpJLWGpB\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xfd29ed7a01e9ef109cc31542ca0f51ba3e793740570b69172ec3d8bfbb1643b4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99379e0649be8106d2708a2bde73b5cdaba4505f1001f1586b53788bf971d097\",\"dweb:/ipfs/QmV9cCnvFoVzV2cVDW4Zbs3JQ3ehxBcooQS52taVxR637S\"]},\"src/Pragma.sol\":{\"keccak256\":\"0xf89995e23351ab6fbb25f3dc95b885e81bc7b97f7bc8982684595984de420c09\",\"license\":\"Apache 2\",\"urls\":[\"bzz-raw://14b8f09887435dab43cfb0bbc09817b46b410dc6d440c6b5032e8f5601800e1f\",\"dweb:/ipfs/QmZCk31tM9SpGvah3KsGKrYh579c1pBfBpS1ujdueQURvF\"]},\"src/PragmaDecoder.sol\":{\"keccak256\":\"0x7047b7a1f5f77a34a50ab67986bb0c9e7532bcf2a8a2633dc0857ae7acbc5bf5\",\"license\":\"Apache 2\",\"urls\":[\"bzz-raw://3fbba793eec4a3bcb7bfe58768743bd3f611d483b545d5a5c575cf39fab7aacf\",\"dweb:/ipfs/Qma8444uYEFE4aHUV83D4pGaA1211MFr4pn111ynv1BUh5\"]},\"src/interfaces/IHyperlane.sol\":{\"keccak256\":\"0x6dd20bc4d6d8095d325a990f36ad17a7a8368a15d4e0d7b82f2fb9f3cbdb17c9\",\"license\":\"Apache 2\",\"urls\":[\"bzz-raw://1d962f61740af891ede951a01410df5b13c675777fb644cfaefab0a750382bbf\",\"dweb:/ipfs/QmVfFyJ8fxiyzGr729V7aG9tJFLTwSyogTArHvUPyoL5Qg\"]},\"src/interfaces/IPragma.sol\":{\"keccak256\":\"0x6bd6515f3d07ab43963f4e2bb3422ebc7a546e389756f842e54afdd4bcf401e8\",\"license\":\"Apache 2\",\"urls\":[\"bzz-raw://b9f1159fae9808862e13837d3617ae4ef1166d54a3d1d7a5050edbf5cb866b53\",\"dweb:/ipfs/QmefhvLM1jdCt3b7Jfq8qtEeVTXATMo6FWDUsTGg79RRhL\"]},\"src/interfaces/PragmaStructs.sol\":{\"keccak256\":\"0x199822095c5fd1de00f5920e5a4ed95f340322ef499cf346d5ecfadeb5f60269\",\"license\":\"Apache 2\",\"urls\":[\"bzz-raw://36e499944b2f354d4ae5627912f05fa925c398a3b4d5b6c1fec219441eae1850\",\"dweb:/ipfs/QmQa8LyFcmziQ89koJfmjaFVPpgyHcxSjbxoXP1K5GoKGs\"]},\"src/libraries/BytesLib.sol\":{\"keccak256\":\"0x44653e7d858d3ac584836abbc48c9168a92c82561c4f6f8cc233f551fd97ffdc\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://3baaa3305da8ceb5d9ca67f9fbc1c556cedc9838163d3cdda940b937f0eff58d\",\"dweb:/ipfs/QmaKgQZkrnt2tL4VAet3jF3GKwunz87GnhKLawBz1aV3Ma\"]},\"src/libraries/ConstantsLib.sol\":{\"keccak256\":\"0xa839f506eb9cdeb048839e1e98e056b0983b00ead78ec22437379fa828ae9542\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c3ddd94a7b1d1fba7f17ad49397cb0a8528e18356861debb63284edf2c2fbf48\",\"dweb:/ipfs/QmdJd9z9GN4m5mSc3Q5AuCoB7szwqEzC19MB2EkZWvTbWQ\"]},\"src/libraries/DataParser.sol\":{\"keccak256\":\"0xd7e97b4d13ba828dd35bd84cfd419286895fbe0b3dfd003d7db692476e626095\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f762e9b46295eaab78291cfe35fe5061d671bb3ddefead1088b1150bf0fad3c9\",\"dweb:/ipfs/QmYQAYeNUhE3NEryFGNLghGH4T67B4bYJ6hFTn6zcNdXQW\"]},\"src/libraries/ErrorsLib.sol\":{\"keccak256\":\"0xe2d16754bf56c44fb876454e917b9715a0c991c387d9a185f2b06697b6fadf55\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7b30985127a441f4646cfd7225a069d17c9d29b9f2b30f57950f7ac3f234053b\",\"dweb:/ipfs/QmXWK5FcbvC7CbWzAwQaz8s3kT7dYT5edyPng5TEpfAL2D\"]},\"src/libraries/EventsLib.sol\":{\"keccak256\":\"0x7b5212636969cc535216917fb8400701f0c3e6cb6bb111da51914bd8cd5a8677\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://962b195f56ab4228b5a8e8735f4e1d97414a27ecf10ed39f9cf9202efdc92b82\",\"dweb:/ipfs/QmUD4xUjgxuKJ4PihCuGQMrb36dAwabSzCRcLU4mUqf6Gk\"]},\"src/libraries/MerkleTree.sol\":{\"keccak256\":\"0x97160fed5b287dc5375228ff9823e31d257c34f0eccecf4892043c00695e4177\",\"license\":\"Apache 2\",\"urls\":[\"bzz-raw://118d0cce4053b7022e718d1556aab36bec850f0f5f7ac3a9d10dcf85dc6cbd7d\",\"dweb:/ipfs/QmRFFczwXPzJHiwJVJhEDec4SxBrvjt5BYFPsNrYMYw6Y8\"]},\"src/libraries/UnsafeBytesLib.sol\":{\"keccak256\":\"0xc88690f8bb4c5f4478d232c12d7c7e59d527929883524e088d26b1ed47da661e\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://de2ffea160aa099a49de5ab7f4c9df9f9dac945cbad131d96cf6f37f63c185c1\",\"dweb:/ipfs/QmeEobBaUksKwDvMd7Dqvf62snArQjp8ayQfss4EnR1pQF\"]},\"src/libraries/UnsafeCalldataBytesLib.sol\":{\"keccak256\":\"0x5865e707c7b2115ebc8edf2a4d5bb12f30b08ddec7ef54f044098666a202b62b\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://84d84dca1b8c4339156c51a671295f281caad9c79add1e5c4af7aaba67dc7967\",\"dweb:/ipfs/QmNVuCAr5h1Yp5CdzKS9jF2DjLahVh65hiPEyfz1mZTbvY\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[],"type":"error","name":"DataNotFound"},{"inputs":[],"type":"error","name":"DataStale"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"FailedCall"},{"inputs":[],"type":"error","name":"InsufficientFee"},{"inputs":[],"type":"error","name":"InvalidDataFeedType"},{"inputs":[],"type":"error","name":"InvalidHyperlaneCheckpointRoot"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"InvalidUpdateData"},{"inputs":[],"type":"error","name":"InvalidUpdateDataSource"},{"inputs":[],"type":"error","name":"InvalidVersion"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[],"type":"error","name":"UUPSUnauthorizedCallContext"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"type":"error","name":"UUPSUnsupportedProxiableUUID"},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"feedId","type":"bytes32","indexed":true},{"internalType":"uint64","name":"publishTime","type":"uint64","indexed":false},{"internalType":"struct Options","name":"options","type":"tuple","components":[{"internalType":"struct Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint16","name":"numberOfSources","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"}]},{"internalType":"uint256","name":"strikePrice","type":"uint256"},{"internalType":"uint256","name":"impliedVolatility","type":"uint256"},{"internalType":"uint256","name":"timeToExpiry","type":"uint256"},{"internalType":"bool","name":"isCall","type":"bool"},{"internalType":"uint256","name":"underlyingPrice","type":"uint256"},{"internalType":"uint256","name":"optionPrice","type":"uint256"},{"internalType":"int256","name":"delta","type":"int256"},{"internalType":"int256","name":"gamma","type":"int256"},{"internalType":"int256","name":"vega","type":"int256"},{"internalType":"int256","name":"theta","type":"int256"},{"internalType":"int256","name":"rho","type":"int256"}],"indexed":false}],"type":"event","name":"OptionsUpdate","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"feedId","type":"bytes32","indexed":true},{"internalType":"uint64","name":"publishTime","type":"uint64","indexed":false},{"internalType":"struct Perp","name":"perp","type":"tuple","components":[{"internalType":"struct Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint16","name":"numberOfSources","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"}]},{"internalType":"uint256","name":"markPrice","type":"uint256"},{"internalType":"uint256","name":"fundingRate","type":"uint256"},{"internalType":"uint256","name":"openInterest","type":"uint256"},{"internalType":"uint256","name":"volume","type":"uint256"}],"indexed":false}],"type":"event","name":"PerpUpdate","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"feedId","type":"bytes32","indexed":true},{"internalType":"uint64","name":"publishTime","type":"uint64","indexed":false},{"internalType":"struct RealizedVolatility","name":"realizedVolatility","type":"tuple","components":[{"internalType":"struct Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint16","name":"numberOfSources","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"}]},{"internalType":"uint256","name":"volatility","type":"uint256"},{"internalType":"uint256","name":"timePeriod","type":"uint256"},{"internalType":"uint256","name":"startPrice","type":"uint256"},{"internalType":"uint256","name":"endPrice","type":"uint256"},{"internalType":"uint256","name":"highPrice","type":"uint256"},{"internalType":"uint256","name":"lowPrice","type":"uint256"},{"internalType":"uint256","name":"numberOfDataPoints","type":"uint256"}],"indexed":false}],"type":"event","name":"RealizedVolatilityUpdate","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"feedId","type":"bytes32","indexed":true},{"internalType":"uint64","name":"publishTime","type":"uint64","indexed":false},{"internalType":"struct SpotMedian","name":"spotMedian","type":"tuple","components":[{"internalType":"struct Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint16","name":"numberOfSources","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"}]},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"volume","type":"uint256"}],"indexed":false}],"type":"event","name":"SpotMedianUpdate","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"feedId","type":"bytes32","indexed":true},{"internalType":"uint64","name":"publishTime","type":"uint64","indexed":false},{"internalType":"struct TWAP","name":"twap","type":"tuple","components":[{"internalType":"struct Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint16","name":"numberOfSources","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"}]},{"internalType":"uint256","name":"twapPrice","type":"uint256"},{"internalType":"uint256","name":"timePeriod","type":"uint256"},{"internalType":"uint256","name":"startPrice","type":"uint256"},{"internalType":"uint256","name":"endPrice","type":"uint256"},{"internalType":"uint256","name":"totalVolume","type":"uint256"},{"internalType":"uint256","name":"numberOfDataPoints","type":"uint256"}],"indexed":false}],"type":"event","name":"TWAPUpdate","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"_isValidDataSource","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"stateMutability":"view","type":"function","name":"dataFeedExists","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"uint256","name":"age","type":"uint256"}],"stateMutability":"view","type":"function","name":"getOptionsNoOlderThan","outputs":[{"internalType":"struct Options","name":"data","type":"tuple","components":[{"internalType":"struct Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint16","name":"numberOfSources","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"}]},{"internalType":"uint256","name":"strikePrice","type":"uint256"},{"internalType":"uint256","name":"impliedVolatility","type":"uint256"},{"internalType":"uint256","name":"timeToExpiry","type":"uint256"},{"internalType":"bool","name":"isCall","type":"bool"},{"internalType":"uint256","name":"underlyingPrice","type":"uint256"},{"internalType":"uint256","name":"optionPrice","type":"uint256"},{"internalType":"int256","name":"delta","type":"int256"},{"internalType":"int256","name":"gamma","type":"int256"},{"internalType":"int256","name":"vega","type":"int256"},{"internalType":"int256","name":"theta","type":"int256"},{"internalType":"int256","name":"rho","type":"int256"}]}]},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"uint256","name":"age","type":"uint256"}],"stateMutability":"view","type":"function","name":"getPerpNoOlderThan","outputs":[{"internalType":"struct Perp","name":"data","type":"tuple","components":[{"internalType":"struct Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint16","name":"numberOfSources","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"}]},{"internalType":"uint256","name":"markPrice","type":"uint256"},{"internalType":"uint256","name":"fundingRate","type":"uint256"},{"internalType":"uint256","name":"openInterest","type":"uint256"},{"internalType":"uint256","name":"volume","type":"uint256"}]}]},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"uint256","name":"age","type":"uint256"}],"stateMutability":"view","type":"function","name":"getRealizedVolatilityNoOlderThan","outputs":[{"internalType":"struct RealizedVolatility","name":"data","type":"tuple","components":[{"internalType":"struct Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint16","name":"numberOfSources","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"}]},{"internalType":"uint256","name":"volatility","type":"uint256"},{"internalType":"uint256","name":"timePeriod","type":"uint256"},{"internalType":"uint256","name":"startPrice","type":"uint256"},{"internalType":"uint256","name":"endPrice","type":"uint256"},{"internalType":"uint256","name":"highPrice","type":"uint256"},{"internalType":"uint256","name":"lowPrice","type":"uint256"},{"internalType":"uint256","name":"numberOfDataPoints","type":"uint256"}]}]},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"uint256","name":"age","type":"uint256"}],"stateMutability":"view","type":"function","name":"getSpotMedianNoOlderThan","outputs":[{"internalType":"struct SpotMedian","name":"data","type":"tuple","components":[{"internalType":"struct Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint16","name":"numberOfSources","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"}]},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"volume","type":"uint256"}]}]},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"uint256","name":"age","type":"uint256"}],"stateMutability":"view","type":"function","name":"getTwapNoOlderThan","outputs":[{"internalType":"struct TWAP","name":"data","type":"tuple","components":[{"internalType":"struct Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint16","name":"numberOfSources","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"}]},{"internalType":"uint256","name":"twapPrice","type":"uint256"},{"internalType":"uint256","name":"timePeriod","type":"uint256"},{"internalType":"uint256","name":"startPrice","type":"uint256"},{"internalType":"uint256","name":"endPrice","type":"uint256"},{"internalType":"uint256","name":"totalVolume","type":"uint256"},{"internalType":"uint256","name":"numberOfDataPoints","type":"uint256"}]}]},{"inputs":[{"internalType":"bytes[]","name":"updateData","type":"bytes[]"}],"stateMutability":"view","type":"function","name":"getUpdateFee","outputs":[{"internalType":"uint256","name":"feeAmount","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getValidTimePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"hyperlane","outputs":[{"internalType":"contract IHyperlane","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_hyperlane","type":"address"},{"internalType":"address","name":"initial_owner","type":"address"},{"internalType":"uint16[]","name":"_dataSourceEmitterChainIds","type":"uint16[]"},{"internalType":"bytes32[]","name":"_dataSourceEmitterAddresses","type":"bytes32[]"},{"internalType":"uint256","name":"_validTimePeriodSeconds","type":"uint256"},{"internalType":"uint256","name":"_singleUpdateFeeInWei","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"uint16","name":"chainId","type":"uint16"},{"internalType":"bytes32","name":"emitterAddress","type":"bytes32"}],"stateMutability":"view","type":"function","name":"isValidDataSource","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"optionsFeeds","outputs":[{"internalType":"struct Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint16","name":"numberOfSources","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"}]},{"internalType":"uint256","name":"strikePrice","type":"uint256"},{"internalType":"uint256","name":"impliedVolatility","type":"uint256"},{"internalType":"uint256","name":"timeToExpiry","type":"uint256"},{"internalType":"bool","name":"isCall","type":"bool"},{"internalType":"uint256","name":"underlyingPrice","type":"uint256"},{"internalType":"uint256","name":"optionPrice","type":"uint256"},{"internalType":"int256","name":"delta","type":"int256"},{"internalType":"int256","name":"gamma","type":"int256"},{"internalType":"int256","name":"vega","type":"int256"},{"internalType":"int256","name":"theta","type":"int256"},{"internalType":"int256","name":"rho","type":"int256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"perpFeeds","outputs":[{"internalType":"struct Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint16","name":"numberOfSources","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"}]},{"internalType":"uint256","name":"markPrice","type":"uint256"},{"internalType":"uint256","name":"fundingRate","type":"uint256"},{"internalType":"uint256","name":"openInterest","type":"uint256"},{"internalType":"uint256","name":"volume","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"rvFeeds","outputs":[{"internalType":"struct Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint16","name":"numberOfSources","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"}]},{"internalType":"uint256","name":"volatility","type":"uint256"},{"internalType":"uint256","name":"timePeriod","type":"uint256"},{"internalType":"uint256","name":"startPrice","type":"uint256"},{"internalType":"uint256","name":"endPrice","type":"uint256"},{"internalType":"uint256","name":"highPrice","type":"uint256"},{"internalType":"uint256","name":"lowPrice","type":"uint256"},{"internalType":"uint256","name":"numberOfDataPoints","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"singleUpdateFeeInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"spotMedianFeeds","outputs":[{"internalType":"struct Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint16","name":"numberOfSources","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"}]},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"volume","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"twapFeeds","outputs":[{"internalType":"struct Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint16","name":"numberOfSources","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"}]},{"internalType":"uint256","name":"twapPrice","type":"uint256"},{"internalType":"uint256","name":"timePeriod","type":"uint256"},{"internalType":"uint256","name":"startPrice","type":"uint256"},{"internalType":"uint256","name":"endPrice","type":"uint256"},{"internalType":"uint256","name":"totalVolume","type":"uint256"},{"internalType":"uint256","name":"numberOfDataPoints","type":"uint256"}]},{"inputs":[{"internalType":"bytes[]","name":"updateData","type":"bytes[]"}],"stateMutability":"payable","type":"function","name":"updateDataFeeds"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"},{"inputs":[],"stateMutability":"view","type":"function","name":"validTimePeriodSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"version","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"withdraw_funds"}],"devdoc":{"kind":"dev","methods":{"dataFeedExists(bytes32)":{"params":{"id":"The data feed ID."},"returns":{"_0":"True if the data feed exists, false otherwise."}},"getOptionsNoOlderThan(bytes32,uint256)":{"params":{"age":"The maximum allowed age (in seconds) for the options data.","id":"The unique identifier of the options data feed."},"returns":{"data":"The latest valid Options data, or a revert if no valid data is available within the specified age."}},"getPerpNoOlderThan(bytes32,uint256)":{"params":{"age":"The maximum allowed age (in seconds) for the perpetuals data.","id":"The unique identifier of the perpetuals data feed."},"returns":{"data":"The latest valid Perp data, or a revert if no valid data is available within the specified age."}},"getRealizedVolatilityNoOlderThan(bytes32,uint256)":{"params":{"age":"The maximum allowed age (in seconds) for the volatility data.","id":"The unique identifier of the realized volatility data feed."},"returns":{"data":"The latest valid RealizedVolatility data, or a revert if no valid data is available within the specified age."}},"getSpotMedianNoOlderThan(bytes32,uint256)":{"params":{"age":"The maximum allowed age (in seconds) for the price data.","id":"The unique identifier of the data feed."},"returns":{"data":"The latest valid SpotMedian data, or a revert if no valid data is available within the specified age."}},"getTwapNoOlderThan(bytes32,uint256)":{"params":{"age":"The maximum allowed age (in seconds) for the TWAP data.","id":"The unique identifier of the TWAP data feed."},"returns":{"data":"The latest valid TWAP data, or a revert if no valid data is available within the specified age."}},"getUpdateFee(bytes[])":{"params":{"updateData":"Array of price update data."},"returns":{"feeAmount":"The required fee in Wei."}},"owner()":{"details":"Returns the address of the current owner."},"proxiableUUID()":{"details":"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"updateDataFeeds(bytes[])":{"details":"Emits a `DataFeedUpdate` event for each updated data feed.Reverts if the caller has not paid the required fee.","params":{"updateData":"The data."}},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}},"version":1},"userdoc":{"kind":"user","methods":{"dataFeedExists(bytes32)":{"notice":"Checks if a data feed exists."},"getOptionsNoOlderThan(bytes32,uint256)":{"notice":"Fetches the latest options data that is no older than a specified age."},"getPerpNoOlderThan(bytes32,uint256)":{"notice":"Fetches the latest perpetuals data that is no older than a specified age."},"getRealizedVolatilityNoOlderThan(bytes32,uint256)":{"notice":"Fetches the latest realized volatility that is no older than a specified age."},"getSpotMedianNoOlderThan(bytes32,uint256)":{"notice":"Fetches the latest spot median price that is no older than a specified age."},"getTwapNoOlderThan(bytes32,uint256)":{"notice":"Fetches the latest TWAP (Time-Weighted Average Price) that is no older than a specified age."},"getUpdateFee(bytes[])":{"notice":"Returns the required fee to update an array of price updates."},"updateDataFeeds(bytes[])":{"notice":"Updates data feeds given some update data. Before calling this function, the caller must have paid the required fee. Which can be calculated using the `getUpdateFee` function. Data feeds will only be updated if data is more recent than the current data."}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Pragma.sol":"Pragma"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0x490959f972df54829d0ffacb71fa025429d9b7b9ebd118f418b41e9c0041ef73","urls":["bzz-raw://1883bc1a16a88922abccd415d1b41caf00c38ee581ae3e5976018d9c17d2c4b7","dweb:/ipfs/QmP2vzQM8RR8ce675KhuZEaUicAPRMUbPLwBsTpxByvn18"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol":{"keccak256":"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486","urls":["bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d","dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0xf5c04a8bf51755681f7db413095377dfd1a05b98b6326fb1da0e9a297057caf0","urls":["bzz-raw://f57690465f41860906cf84e6970baaacae9d05b8311674812e6b502bb510441e","dweb:/ipfs/Qme5swSUieatWond1BHyZaEztdLAPu67KcoQTeY4pH5wVd"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0x5f3770f82f75d132e210b43c071d3feec1bef13c385d1d799763a366e8bda311","urls":["bzz-raw://3a50b7702cbd525c4a0fd3c36d1e116432b5f645f84cb25e4473dc9c88a917c5","dweb:/ipfs/QmaN5QKZwgypVK3zAwdgXfsygEeauRYa4sSe4x8yKXDRtV"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c","urls":["bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa","dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0x80b4189de089dc632b752b365a16c5063b58cc24da0dd38b82f2c25f56d25c84","urls":["bzz-raw://81e2717e78844156a86733f1cada84dba906ffe03e4957de12ca219c65e9191b","dweb:/ipfs/QmW8vg3AafPJRo7EC75RQJTtjiaYmfPa4U4sqmEuBXXzaP"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol":{"keccak256":"0x1b0625096e82d06abdcf1844172ef78ef54a5e878761f4d905fda07eaf098424","urls":["bzz-raw://5cd99f1a4836c07461cb3ea023ae2f6d1d01e80694b764a87623aa7252754756","dweb:/ipfs/QmNPNDuiNU6TJatZcdBcrwixBoo5MSXNDq4kaXhpJLWGpB"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0xfd29ed7a01e9ef109cc31542ca0f51ba3e793740570b69172ec3d8bfbb1643b4","urls":["bzz-raw://99379e0649be8106d2708a2bde73b5cdaba4505f1001f1586b53788bf971d097","dweb:/ipfs/QmV9cCnvFoVzV2cVDW4Zbs3JQ3ehxBcooQS52taVxR637S"],"license":"MIT"},"src/Pragma.sol":{"keccak256":"0xf89995e23351ab6fbb25f3dc95b885e81bc7b97f7bc8982684595984de420c09","urls":["bzz-raw://14b8f09887435dab43cfb0bbc09817b46b410dc6d440c6b5032e8f5601800e1f","dweb:/ipfs/QmZCk31tM9SpGvah3KsGKrYh579c1pBfBpS1ujdueQURvF"],"license":"Apache 2"},"src/PragmaDecoder.sol":{"keccak256":"0x7047b7a1f5f77a34a50ab67986bb0c9e7532bcf2a8a2633dc0857ae7acbc5bf5","urls":["bzz-raw://3fbba793eec4a3bcb7bfe58768743bd3f611d483b545d5a5c575cf39fab7aacf","dweb:/ipfs/Qma8444uYEFE4aHUV83D4pGaA1211MFr4pn111ynv1BUh5"],"license":"Apache 2"},"src/interfaces/IHyperlane.sol":{"keccak256":"0x6dd20bc4d6d8095d325a990f36ad17a7a8368a15d4e0d7b82f2fb9f3cbdb17c9","urls":["bzz-raw://1d962f61740af891ede951a01410df5b13c675777fb644cfaefab0a750382bbf","dweb:/ipfs/QmVfFyJ8fxiyzGr729V7aG9tJFLTwSyogTArHvUPyoL5Qg"],"license":"Apache 2"},"src/interfaces/IPragma.sol":{"keccak256":"0x6bd6515f3d07ab43963f4e2bb3422ebc7a546e389756f842e54afdd4bcf401e8","urls":["bzz-raw://b9f1159fae9808862e13837d3617ae4ef1166d54a3d1d7a5050edbf5cb866b53","dweb:/ipfs/QmefhvLM1jdCt3b7Jfq8qtEeVTXATMo6FWDUsTGg79RRhL"],"license":"Apache 2"},"src/interfaces/PragmaStructs.sol":{"keccak256":"0x199822095c5fd1de00f5920e5a4ed95f340322ef499cf346d5ecfadeb5f60269","urls":["bzz-raw://36e499944b2f354d4ae5627912f05fa925c398a3b4d5b6c1fec219441eae1850","dweb:/ipfs/QmQa8LyFcmziQ89koJfmjaFVPpgyHcxSjbxoXP1K5GoKGs"],"license":"Apache 2"},"src/libraries/BytesLib.sol":{"keccak256":"0x44653e7d858d3ac584836abbc48c9168a92c82561c4f6f8cc233f551fd97ffdc","urls":["bzz-raw://3baaa3305da8ceb5d9ca67f9fbc1c556cedc9838163d3cdda940b937f0eff58d","dweb:/ipfs/QmaKgQZkrnt2tL4VAet3jF3GKwunz87GnhKLawBz1aV3Ma"],"license":"Unlicense"},"src/libraries/ConstantsLib.sol":{"keccak256":"0xa839f506eb9cdeb048839e1e98e056b0983b00ead78ec22437379fa828ae9542","urls":["bzz-raw://c3ddd94a7b1d1fba7f17ad49397cb0a8528e18356861debb63284edf2c2fbf48","dweb:/ipfs/QmdJd9z9GN4m5mSc3Q5AuCoB7szwqEzC19MB2EkZWvTbWQ"],"license":"GPL-2.0-or-later"},"src/libraries/DataParser.sol":{"keccak256":"0xd7e97b4d13ba828dd35bd84cfd419286895fbe0b3dfd003d7db692476e626095","urls":["bzz-raw://f762e9b46295eaab78291cfe35fe5061d671bb3ddefead1088b1150bf0fad3c9","dweb:/ipfs/QmYQAYeNUhE3NEryFGNLghGH4T67B4bYJ6hFTn6zcNdXQW"],"license":"MIT"},"src/libraries/ErrorsLib.sol":{"keccak256":"0xe2d16754bf56c44fb876454e917b9715a0c991c387d9a185f2b06697b6fadf55","urls":["bzz-raw://7b30985127a441f4646cfd7225a069d17c9d29b9f2b30f57950f7ac3f234053b","dweb:/ipfs/QmXWK5FcbvC7CbWzAwQaz8s3kT7dYT5edyPng5TEpfAL2D"],"license":"GPL-2.0-or-later"},"src/libraries/EventsLib.sol":{"keccak256":"0x7b5212636969cc535216917fb8400701f0c3e6cb6bb111da51914bd8cd5a8677","urls":["bzz-raw://962b195f56ab4228b5a8e8735f4e1d97414a27ecf10ed39f9cf9202efdc92b82","dweb:/ipfs/QmUD4xUjgxuKJ4PihCuGQMrb36dAwabSzCRcLU4mUqf6Gk"],"license":"GPL-2.0-or-later"},"src/libraries/MerkleTree.sol":{"keccak256":"0x97160fed5b287dc5375228ff9823e31d257c34f0eccecf4892043c00695e4177","urls":["bzz-raw://118d0cce4053b7022e718d1556aab36bec850f0f5f7ac3a9d10dcf85dc6cbd7d","dweb:/ipfs/QmRFFczwXPzJHiwJVJhEDec4SxBrvjt5BYFPsNrYMYw6Y8"],"license":"Apache 2"},"src/libraries/UnsafeBytesLib.sol":{"keccak256":"0xc88690f8bb4c5f4478d232c12d7c7e59d527929883524e088d26b1ed47da661e","urls":["bzz-raw://de2ffea160aa099a49de5ab7f4c9df9f9dac945cbad131d96cf6f37f63c185c1","dweb:/ipfs/QmeEobBaUksKwDvMd7Dqvf62snArQjp8ayQfss4EnR1pQF"],"license":"Unlicense"},"src/libraries/UnsafeCalldataBytesLib.sol":{"keccak256":"0x5865e707c7b2115ebc8edf2a4d5bb12f30b08ddec7ef54f044098666a202b62b","urls":["bzz-raw://84d84dca1b8c4339156c51a671295f281caad9c79add1e5c4af7aaba67dc7967","dweb:/ipfs/QmNVuCAr5h1Yp5CdzKS9jF2DjLahVh65hiPEyfz1mZTbvY"],"license":"Unlicense"}},"version":1},"storageLayout":{"storage":[{"astId":49874,"contract":"src/Pragma.sol:Pragma","label":"hyperlane","offset":0,"slot":"0","type":"t_contract(IHyperlane)50691"},{"astId":49878,"contract":"src/Pragma.sol:Pragma","label":"_isValidDataSource","offset":0,"slot":"1","type":"t_mapping(t_bytes32,t_bool)"},{"astId":49883,"contract":"src/Pragma.sol:Pragma","label":"spotMedianFeeds","offset":0,"slot":"2","type":"t_mapping(t_bytes32,t_struct(SpotMedian)50838_storage)"},{"astId":49888,"contract":"src/Pragma.sol:Pragma","label":"twapFeeds","offset":0,"slot":"3","type":"t_mapping(t_bytes32,t_struct(TWAP)50854_storage)"},{"astId":49893,"contract":"src/Pragma.sol:Pragma","label":"rvFeeds","offset":0,"slot":"4","type":"t_mapping(t_bytes32,t_struct(RealizedVolatility)50872_storage)"},{"astId":49898,"contract":"src/Pragma.sol:Pragma","label":"optionsFeeds","offset":0,"slot":"5","type":"t_mapping(t_bytes32,t_struct(Options)50898_storage)"},{"astId":49903,"contract":"src/Pragma.sol:Pragma","label":"perpFeeds","offset":0,"slot":"6","type":"t_mapping(t_bytes32,t_struct(Perp)50910_storage)"},{"astId":49277,"contract":"src/Pragma.sol:Pragma","label":"validTimePeriodSeconds","offset":0,"slot":"7","type":"t_uint256"},{"astId":49279,"contract":"src/Pragma.sol:Pragma","label":"singleUpdateFeeInWei","offset":0,"slot":"8","type":"t_uint256"}],"types":{"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IHyperlane)50691":{"encoding":"inplace","label":"contract IHyperlane","numberOfBytes":"20"},"t_int256":{"encoding":"inplace","label":"int256","numberOfBytes":"32"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_struct(Options)50898_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct Options)","numberOfBytes":"32","value":"t_struct(Options)50898_storage"},"t_mapping(t_bytes32,t_struct(Perp)50910_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct Perp)","numberOfBytes":"32","value":"t_struct(Perp)50910_storage"},"t_mapping(t_bytes32,t_struct(RealizedVolatility)50872_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct RealizedVolatility)","numberOfBytes":"32","value":"t_struct(RealizedVolatility)50872_storage"},"t_mapping(t_bytes32,t_struct(SpotMedian)50838_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct SpotMedian)","numberOfBytes":"32","value":"t_struct(SpotMedian)50838_storage"},"t_mapping(t_bytes32,t_struct(TWAP)50854_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct TWAP)","numberOfBytes":"32","value":"t_struct(TWAP)50854_storage"},"t_struct(Metadata)50830_storage":{"encoding":"inplace","label":"struct Metadata","numberOfBytes":"64","members":[{"astId":50823,"contract":"src/Pragma.sol:Pragma","label":"feedId","offset":0,"slot":"0","type":"t_bytes32"},{"astId":50825,"contract":"src/Pragma.sol:Pragma","label":"timestamp","offset":0,"slot":"1","type":"t_uint64"},{"astId":50827,"contract":"src/Pragma.sol:Pragma","label":"numberOfSources","offset":8,"slot":"1","type":"t_uint16"},{"astId":50829,"contract":"src/Pragma.sol:Pragma","label":"decimals","offset":10,"slot":"1","type":"t_uint8"}]},"t_struct(Options)50898_storage":{"encoding":"inplace","label":"struct Options","numberOfBytes":"416","members":[{"astId":50875,"contract":"src/Pragma.sol:Pragma","label":"metadata","offset":0,"slot":"0","type":"t_struct(Metadata)50830_storage"},{"astId":50877,"contract":"src/Pragma.sol:Pragma","label":"strikePrice","offset":0,"slot":"2","type":"t_uint256"},{"astId":50879,"contract":"src/Pragma.sol:Pragma","label":"impliedVolatility","offset":0,"slot":"3","type":"t_uint256"},{"astId":50881,"contract":"src/Pragma.sol:Pragma","label":"timeToExpiry","offset":0,"slot":"4","type":"t_uint256"},{"astId":50883,"contract":"src/Pragma.sol:Pragma","label":"isCall","offset":0,"slot":"5","type":"t_bool"},{"astId":50885,"contract":"src/Pragma.sol:Pragma","label":"underlyingPrice","offset":0,"slot":"6","type":"t_uint256"},{"astId":50887,"contract":"src/Pragma.sol:Pragma","label":"optionPrice","offset":0,"slot":"7","type":"t_uint256"},{"astId":50889,"contract":"src/Pragma.sol:Pragma","label":"delta","offset":0,"slot":"8","type":"t_int256"},{"astId":50891,"contract":"src/Pragma.sol:Pragma","label":"gamma","offset":0,"slot":"9","type":"t_int256"},{"astId":50893,"contract":"src/Pragma.sol:Pragma","label":"vega","offset":0,"slot":"10","type":"t_int256"},{"astId":50895,"contract":"src/Pragma.sol:Pragma","label":"theta","offset":0,"slot":"11","type":"t_int256"},{"astId":50897,"contract":"src/Pragma.sol:Pragma","label":"rho","offset":0,"slot":"12","type":"t_int256"}]},"t_struct(Perp)50910_storage":{"encoding":"inplace","label":"struct Perp","numberOfBytes":"192","members":[{"astId":50901,"contract":"src/Pragma.sol:Pragma","label":"metadata","offset":0,"slot":"0","type":"t_struct(Metadata)50830_storage"},{"astId":50903,"contract":"src/Pragma.sol:Pragma","label":"markPrice","offset":0,"slot":"2","type":"t_uint256"},{"astId":50905,"contract":"src/Pragma.sol:Pragma","label":"fundingRate","offset":0,"slot":"3","type":"t_uint256"},{"astId":50907,"contract":"src/Pragma.sol:Pragma","label":"openInterest","offset":0,"slot":"4","type":"t_uint256"},{"astId":50909,"contract":"src/Pragma.sol:Pragma","label":"volume","offset":0,"slot":"5","type":"t_uint256"}]},"t_struct(RealizedVolatility)50872_storage":{"encoding":"inplace","label":"struct RealizedVolatility","numberOfBytes":"288","members":[{"astId":50857,"contract":"src/Pragma.sol:Pragma","label":"metadata","offset":0,"slot":"0","type":"t_struct(Metadata)50830_storage"},{"astId":50859,"contract":"src/Pragma.sol:Pragma","label":"volatility","offset":0,"slot":"2","type":"t_uint256"},{"astId":50861,"contract":"src/Pragma.sol:Pragma","label":"timePeriod","offset":0,"slot":"3","type":"t_uint256"},{"astId":50863,"contract":"src/Pragma.sol:Pragma","label":"startPrice","offset":0,"slot":"4","type":"t_uint256"},{"astId":50865,"contract":"src/Pragma.sol:Pragma","label":"endPrice","offset":0,"slot":"5","type":"t_uint256"},{"astId":50867,"contract":"src/Pragma.sol:Pragma","label":"highPrice","offset":0,"slot":"6","type":"t_uint256"},{"astId":50869,"contract":"src/Pragma.sol:Pragma","label":"lowPrice","offset":0,"slot":"7","type":"t_uint256"},{"astId":50871,"contract":"src/Pragma.sol:Pragma","label":"numberOfDataPoints","offset":0,"slot":"8","type":"t_uint256"}]},"t_struct(SpotMedian)50838_storage":{"encoding":"inplace","label":"struct SpotMedian","numberOfBytes":"128","members":[{"astId":50833,"contract":"src/Pragma.sol:Pragma","label":"metadata","offset":0,"slot":"0","type":"t_struct(Metadata)50830_storage"},{"astId":50835,"contract":"src/Pragma.sol:Pragma","label":"price","offset":0,"slot":"2","type":"t_uint256"},{"astId":50837,"contract":"src/Pragma.sol:Pragma","label":"volume","offset":0,"slot":"3","type":"t_uint256"}]},"t_struct(TWAP)50854_storage":{"encoding":"inplace","label":"struct TWAP","numberOfBytes":"256","members":[{"astId":50841,"contract":"src/Pragma.sol:Pragma","label":"metadata","offset":0,"slot":"0","type":"t_struct(Metadata)50830_storage"},{"astId":50843,"contract":"src/Pragma.sol:Pragma","label":"twapPrice","offset":0,"slot":"2","type":"t_uint256"},{"astId":50845,"contract":"src/Pragma.sol:Pragma","label":"timePeriod","offset":0,"slot":"3","type":"t_uint256"},{"astId":50847,"contract":"src/Pragma.sol:Pragma","label":"startPrice","offset":0,"slot":"4","type":"t_uint256"},{"astId":50849,"contract":"src/Pragma.sol:Pragma","label":"endPrice","offset":0,"slot":"5","type":"t_uint256"},{"astId":50851,"contract":"src/Pragma.sol:Pragma","label":"totalVolume","offset":0,"slot":"6","type":"t_uint256"},{"astId":50853,"contract":"src/Pragma.sol:Pragma","label":"numberOfDataPoints","offset":0,"slot":"7","type":"t_uint256"}]},"t_uint16":{"encoding":"inplace","label":"uint16","numberOfBytes":"2"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint64":{"encoding":"inplace","label":"uint64","numberOfBytes":"8"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"ast":{"absolutePath":"src/Pragma.sol","id":49850,"exportedSymbols":{"BytesLib":[51421],"ConstantsLib":[51433],"ContextUpgradeable":[47450],"DataFeed":[50786],"DataFeedType":[50788],"DataParser":[52216],"DataSource":[50793],"ERC1967Utils":[47961],"ErrorsLib":[52236],"EventsLib":[52302],"FeedType":[50935],"HyMsg":[50821],"IERC1822Proxiable":[47629],"IHyperlane":[50691],"IPragma":[50775],"Initializable":[47222],"MerkleTree":[52712],"Metadata":[50830],"Options":[50898],"OwnableUpgradeable":[46968],"ParsedData":[50929],"Perp":[50910],"Pragma":[49849],"PragmaDecoder":[50660],"RealizedVolatility":[50872],"Signature":[50802],"SpotMedian":[50838],"StructsInitializers":[51062],"TWAP":[50854],"UUPSUpgradeable":[47404],"UnsafeBytesLib":[52936],"UnsafeCalldataBytesLib":[53118]},"nodeType":"SourceUnit","src":"38:5922:41","nodes":[{"id":49253,"nodeType":"PragmaDirective","src":"38:23:41","nodes":[],"literals":["solidity","^","0.8",".0"]},{"id":49256,"nodeType":"ImportDirective","src":"63:59:41","nodes":[],"absolutePath":"src/interfaces/IPragma.sol","file":"./interfaces/IPragma.sol","nameLocation":"-1:-1:-1","scope":49850,"sourceUnit":50776,"symbolAliases":[{"foreign":{"id":49254,"name":"IPragma","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50775,"src":"71:7:41","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":49255,"name":"DataFeed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50786,"src":"80:8:41","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":49257,"nodeType":"ImportDirective","src":"123:75:41","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":49850,"sourceUnit":47223,"symbolAliases":[],"unitAlias":""},{"id":49258,"nodeType":"ImportDirective","src":"199:77:41","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol","nameLocation":"-1:-1:-1","scope":49850,"sourceUnit":47405,"symbolAliases":[],"unitAlias":""},{"id":49259,"nodeType":"ImportDirective","src":"277:75:41","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":49850,"sourceUnit":46969,"symbolAliases":[],"unitAlias":""},{"id":49260,"nodeType":"ImportDirective","src":"353:29:41","nodes":[],"absolutePath":"src/PragmaDecoder.sol","file":"./PragmaDecoder.sol","nameLocation":"-1:-1:-1","scope":49850,"sourceUnit":50661,"symbolAliases":[],"unitAlias":""},{"id":49261,"nodeType":"ImportDirective","src":"383:35:41","nodes":[],"absolutePath":"src/libraries/EventsLib.sol","file":"./libraries/EventsLib.sol","nameLocation":"-1:-1:-1","scope":49850,"sourceUnit":52303,"symbolAliases":[],"unitAlias":""},{"id":49262,"nodeType":"ImportDirective","src":"419:35:41","nodes":[],"absolutePath":"src/libraries/ErrorsLib.sol","file":"./libraries/ErrorsLib.sol","nameLocation":"-1:-1:-1","scope":49850,"sourceUnit":52237,"symbolAliases":[],"unitAlias":""},{"id":49263,"nodeType":"ImportDirective","src":"455:40:41","nodes":[],"absolutePath":"src/interfaces/PragmaStructs.sol","file":"./interfaces/PragmaStructs.sol","nameLocation":"-1:-1:-1","scope":49850,"sourceUnit":51063,"symbolAliases":[],"unitAlias":""},{"id":49264,"nodeType":"ImportDirective","src":"496:36:41","nodes":[],"absolutePath":"src/libraries/DataParser.sol","file":"./libraries/DataParser.sol","nameLocation":"-1:-1:-1","scope":49850,"sourceUnit":52217,"symbolAliases":[],"unitAlias":""},{"id":49849,"nodeType":"ContractDefinition","src":"651:5308:41","nodes":[{"id":49277,"nodeType":"VariableDeclaration","src":"769:37:41","nodes":[],"constant":false,"functionSelector":"cb718a9b","mutability":"mutable","name":"validTimePeriodSeconds","nameLocation":"784:22:41","scope":49849,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49276,"name":"uint256","nodeType":"ElementaryTypeName","src":"769:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":49279,"nodeType":"VariableDeclaration","src":"812:35:41","nodes":[],"constant":false,"functionSelector":"48b6404d","mutability":"mutable","name":"singleUpdateFeeInWei","nameLocation":"827:20:41","scope":49849,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49278,"name":"uint256","nodeType":"ElementaryTypeName","src":"812:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":49286,"nodeType":"FunctionDefinition","src":"854:53:41","nodes":[],"body":{"id":49285,"nodeType":"Block","src":"868:39:41","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":49282,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47190,"src":"878:20:41","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":49283,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"878:22:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49284,"nodeType":"ExpressionStatement","src":"878:22:41"}]},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":49280,"nodeType":"ParameterList","parameters":[],"src":"865:2:41"},"returnParameters":{"id":49281,"nodeType":"ParameterList","parameters":[],"src":"868:0:41"},"scope":49849,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":49356,"nodeType":"FunctionDefinition","src":"913:772:41","nodes":[],"body":{"id":49355,"nodeType":"Block","src":"1203:482:41","nodes":[],"statements":[{"expression":{"arguments":[{"id":49306,"name":"initial_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49290,"src":"1228:13:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":49305,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46828,"src":"1213:14:41","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":49307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1213:29:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49308,"nodeType":"ExpressionStatement","src":"1213:29:41"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":49309,"name":"__UUPSUpgradeable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47276,"src":"1252:22:41","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":49310,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1252:24:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49311,"nodeType":"ExpressionStatement","src":"1252:24:41"},{"expression":{"id":49316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49312,"name":"hyperlane","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49874,"src":"1286:9:41","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperlane_$50691","typeString":"contract IHyperlane"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":49314,"name":"_hyperlane","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49288,"src":"1309:10:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":49313,"name":"IHyperlane","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50691,"src":"1298:10:41","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IHyperlane_$50691_$","typeString":"type(contract IHyperlane)"}},"id":49315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1298:22:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IHyperlane_$50691","typeString":"contract IHyperlane"}},"src":"1286:34:41","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperlane_$50691","typeString":"contract IHyperlane"}},"id":49317,"nodeType":"ExpressionStatement","src":"1286:34:41"},{"body":{"id":49345,"nodeType":"Block","src":"1395:172:41","statements":[{"expression":{"id":49343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":49329,"name":"_isValidDataSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49878,"src":"1409:18:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"}},"id":49341,"indexExpression":{"arguments":[{"arguments":[{"baseExpression":{"id":49333,"name":"_dataSourceEmitterChainIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49293,"src":"1472:26:41","typeDescriptions":{"typeIdentifier":"t_array$_t_uint16_$dyn_memory_ptr","typeString":"uint16[] memory"}},"id":49335,"indexExpression":{"id":49334,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49319,"src":"1499:1:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1472:29:41","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"baseExpression":{"id":49336,"name":"_dataSourceEmitterAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49296,"src":"1503:27:41","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":49338,"indexExpression":{"id":49337,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49319,"src":"1531:1:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1503:30:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":49331,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1455:3:41","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":49332,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1459:12:41","memberName":"encodePacked","nodeType":"MemberAccess","src":"1455:16:41","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":49339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1455:79:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":49330,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1428:9:41","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":49340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1428:120:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1409:140:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":49342,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1552:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"1409:147:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49344,"nodeType":"ExpressionStatement","src":"1409:147:41"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49322,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49319,"src":"1351:1:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":49323,"name":"_dataSourceEmitterChainIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49293,"src":"1355:26:41","typeDescriptions":{"typeIdentifier":"t_array$_t_uint16_$dyn_memory_ptr","typeString":"uint16[] memory"}},"id":49324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1382:6:41","memberName":"length","nodeType":"MemberAccess","src":"1355:33:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1351:37:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49346,"initializationExpression":{"assignments":[49319],"declarations":[{"constant":false,"id":49319,"mutability":"mutable","name":"i","nameLocation":"1344:1:41","nodeType":"VariableDeclaration","scope":49346,"src":"1336:9:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49318,"name":"uint256","nodeType":"ElementaryTypeName","src":"1336:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":49321,"initialValue":{"hexValue":"30","id":49320,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1348:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1336:13:41"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":49327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1390:3:41","subExpression":{"id":49326,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49319,"src":"1390:1:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":49328,"nodeType":"ExpressionStatement","src":"1390:3:41"},"nodeType":"ForStatement","src":"1331:236:41"},{"expression":{"id":49349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49347,"name":"validTimePeriodSeconds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49277,"src":"1576:22:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":49348,"name":"_validTimePeriodSeconds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49298,"src":"1601:23:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1576:48:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":49350,"nodeType":"ExpressionStatement","src":"1576:48:41"},{"expression":{"id":49353,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49351,"name":"singleUpdateFeeInWei","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49279,"src":"1634:20:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":49352,"name":"_singleUpdateFeeInWei","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49300,"src":"1657:21:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1634:44:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":49354,"nodeType":"ExpressionStatement","src":"1634:44:41"}]},"functionSelector":"d5d89eaf","implemented":true,"kind":"function","modifiers":[{"id":49303,"kind":"modifierInvocation","modifierName":{"id":49302,"name":"initializer","nameLocations":["1191:11:41"],"nodeType":"IdentifierPath","referencedDeclaration":47076,"src":"1191:11:41"},"nodeType":"ModifierInvocation","src":"1191:11:41"}],"name":"initialize","nameLocation":"922:10:41","parameters":{"id":49301,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49288,"mutability":"mutable","name":"_hyperlane","nameLocation":"950:10:41","nodeType":"VariableDeclaration","scope":49356,"src":"942:18:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":49287,"name":"address","nodeType":"ElementaryTypeName","src":"942:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":49290,"mutability":"mutable","name":"initial_owner","nameLocation":"978:13:41","nodeType":"VariableDeclaration","scope":49356,"src":"970:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":49289,"name":"address","nodeType":"ElementaryTypeName","src":"970:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":49293,"mutability":"mutable","name":"_dataSourceEmitterChainIds","nameLocation":"1017:26:41","nodeType":"VariableDeclaration","scope":49356,"src":"1001:42:41","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint16_$dyn_memory_ptr","typeString":"uint16[]"},"typeName":{"baseType":{"id":49291,"name":"uint16","nodeType":"ElementaryTypeName","src":"1001:6:41","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"id":49292,"nodeType":"ArrayTypeName","src":"1001:8:41","typeDescriptions":{"typeIdentifier":"t_array$_t_uint16_$dyn_storage_ptr","typeString":"uint16[]"}},"visibility":"internal"},{"constant":false,"id":49296,"mutability":"mutable","name":"_dataSourceEmitterAddresses","nameLocation":"1070:27:41","nodeType":"VariableDeclaration","scope":49356,"src":"1053:44:41","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":49294,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1053:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":49295,"nodeType":"ArrayTypeName","src":"1053:9:41","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":49298,"mutability":"mutable","name":"_validTimePeriodSeconds","nameLocation":"1115:23:41","nodeType":"VariableDeclaration","scope":49356,"src":"1107:31:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49297,"name":"uint256","nodeType":"ElementaryTypeName","src":"1107:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":49300,"mutability":"mutable","name":"_singleUpdateFeeInWei","nameLocation":"1156:21:41","nodeType":"VariableDeclaration","scope":49356,"src":"1148:29:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49299,"name":"uint256","nodeType":"ElementaryTypeName","src":"1148:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"932:251:41"},"returnParameters":{"id":49304,"nodeType":"ParameterList","parameters":[],"src":"1203:0:41"},"scope":49849,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":49365,"nodeType":"FunctionDefinition","src":"1691:84:41","nodes":[],"body":{"id":49364,"nodeType":"Block","src":"1773:2:41","nodes":[],"statements":[]},"baseFunctions":[47358],"implemented":true,"kind":"function","modifiers":[{"id":49362,"kind":"modifierInvocation","modifierName":{"id":49361,"name":"onlyOwner","nameLocations":["1763:9:41"],"nodeType":"IdentifierPath","referencedDeclaration":46863,"src":"1763:9:41"},"nodeType":"ModifierInvocation","src":"1763:9:41"}],"name":"_authorizeUpgrade","nameLocation":"1700:17:41","overrides":{"id":49360,"nodeType":"OverrideSpecifier","overrides":[],"src":"1754:8:41"},"parameters":{"id":49359,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49358,"mutability":"mutable","name":"newImplementation","nameLocation":"1726:17:41","nodeType":"VariableDeclaration","scope":49365,"src":"1718:25:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":49357,"name":"address","nodeType":"ElementaryTypeName","src":"1718:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1717:27:41"},"returnParameters":{"id":49363,"nodeType":"ParameterList","parameters":[],"src":"1773:0:41"},"scope":49849,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":49420,"nodeType":"FunctionDefinition","src":"1809:494:41","nodes":[],"body":{"id":49419,"nodeType":"Block","src":"1880:423:41","nodes":[],"statements":[{"assignments":[49373],"declarations":[{"constant":false,"id":49373,"mutability":"mutable","name":"totalNumUpdates","nameLocation":"1898:15:41","nodeType":"VariableDeclaration","scope":49419,"src":"1890:23:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49372,"name":"uint256","nodeType":"ElementaryTypeName","src":"1890:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":49375,"initialValue":{"hexValue":"30","id":49374,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1916:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1890:27:41"},{"assignments":[49377],"declarations":[{"constant":false,"id":49377,"mutability":"mutable","name":"len","nameLocation":"1935:3:41","nodeType":"VariableDeclaration","scope":49419,"src":"1927:11:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49376,"name":"uint256","nodeType":"ElementaryTypeName","src":"1927:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":49380,"initialValue":{"expression":{"id":49378,"name":"updateData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49369,"src":"1941:10:41","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}},"id":49379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1952:6:41","memberName":"length","nodeType":"MemberAccess","src":"1941:17:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1927:31:41"},{"body":{"id":49400,"nodeType":"Block","src":"1998:142:41","statements":[{"expression":{"id":49394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49388,"name":"totalNumUpdates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49373,"src":"2012:15:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"baseExpression":{"id":49390,"name":"updateData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49369,"src":"2056:10:41","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}},"id":49392,"indexExpression":{"id":49391,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49382,"src":"2067:1:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2056:13:41","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":49389,"name":"updateDataInfoFromUpdate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50482,"src":"2031:24:41","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_calldata_ptr_$returns$_t_uint8_$","typeString":"function (bytes calldata) returns (uint8)"}},"id":49393,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2031:39:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"2012:58:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":49395,"nodeType":"ExpressionStatement","src":"2012:58:41"},{"id":49399,"nodeType":"UncheckedBlock","src":"2084:46:41","statements":[{"expression":{"id":49397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2112:3:41","subExpression":{"id":49396,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49382,"src":"2112:1:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":49398,"nodeType":"ExpressionStatement","src":"2112:3:41"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49385,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49382,"src":"1988:1:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":49386,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49377,"src":"1992:3:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1988:7:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49401,"initializationExpression":{"assignments":[49382],"declarations":[{"constant":false,"id":49382,"mutability":"mutable","name":"i","nameLocation":"1981:1:41","nodeType":"VariableDeclaration","scope":49401,"src":"1973:9:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49381,"name":"uint256","nodeType":"ElementaryTypeName","src":"1973:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":49384,"initialValue":{"hexValue":"30","id":49383,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1985:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1973:13:41"},"isSimpleCounterLoop":false,"nodeType":"ForStatement","src":"1968:172:41"},{"assignments":[49403],"declarations":[{"constant":false,"id":49403,"mutability":"mutable","name":"requiredFee","nameLocation":"2157:11:41","nodeType":"VariableDeclaration","scope":49419,"src":"2149:19:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49402,"name":"uint256","nodeType":"ElementaryTypeName","src":"2149:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":49407,"initialValue":{"arguments":[{"id":49405,"name":"totalNumUpdates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49373,"src":"2183:15:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":49404,"name":"getTotalFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49444,"src":"2171:11:41","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":49406,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2171:28:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2149:50:41"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":49408,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2213:3:41","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":49409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2217:5:41","memberName":"value","nodeType":"MemberAccess","src":"2213:9:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":49410,"name":"requiredFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49403,"src":"2225:11:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2213:23:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49418,"nodeType":"IfStatement","src":"2209:88:41","trueBody":{"id":49417,"nodeType":"Block","src":"2238:59:41","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":49412,"name":"ErrorsLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52236,"src":"2259:9:41","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ErrorsLib_$52236_$","typeString":"type(library ErrorsLib)"}},"id":49414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2269:15:41","memberName":"InsufficientFee","nodeType":"MemberAccess","referencedDeclaration":52221,"src":"2259:25:41","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":49415,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2259:27:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":49416,"nodeType":"RevertStatement","src":"2252:34:41"}]}}]},"baseFunctions":[50702],"documentation":{"id":49366,"nodeType":"StructuredDocumentation","src":"1781:23:41","text":"@inheritdoc IPragma"},"functionSelector":"d58a8f6d","implemented":true,"kind":"function","modifiers":[],"name":"updateDataFeeds","nameLocation":"1818:15:41","parameters":{"id":49370,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49369,"mutability":"mutable","name":"updateData","nameLocation":"1851:10:41","nodeType":"VariableDeclaration","scope":49420,"src":"1834:27:41","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":49367,"name":"bytes","nodeType":"ElementaryTypeName","src":"1834:5:41","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":49368,"nodeType":"ArrayTypeName","src":"1834:7:41","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"1833:29:41"},"returnParameters":{"id":49371,"nodeType":"ParameterList","parameters":[],"src":"1880:0:41"},"scope":49849,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":49432,"nodeType":"FunctionDefinition","src":"2337:118:41","nodes":[],"body":{"id":49431,"nodeType":"Block","src":"2430:25:41","nodes":[],"statements":[{"expression":{"hexValue":"30","id":49429,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2447:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":49428,"id":49430,"nodeType":"Return","src":"2440:8:41"}]},"baseFunctions":[50711],"documentation":{"id":49421,"nodeType":"StructuredDocumentation","src":"2309:23:41","text":"@inheritdoc IPragma"},"functionSelector":"d47eed45","implemented":true,"kind":"function","modifiers":[],"name":"getUpdateFee","nameLocation":"2346:12:41","parameters":{"id":49425,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49424,"mutability":"mutable","name":"updateData","nameLocation":"2376:10:41","nodeType":"VariableDeclaration","scope":49432,"src":"2359:27:41","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":49422,"name":"bytes","nodeType":"ElementaryTypeName","src":"2359:5:41","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":49423,"nodeType":"ArrayTypeName","src":"2359:7:41","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"2358:29:41"},"returnParameters":{"id":49428,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49427,"mutability":"mutable","name":"feeAmount","nameLocation":"2419:9:41","nodeType":"VariableDeclaration","scope":49432,"src":"2411:17:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49426,"name":"uint256","nodeType":"ElementaryTypeName","src":"2411:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2410:19:41"},"scope":49849,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":49444,"nodeType":"FunctionDefinition","src":"2461:151:41","nodes":[],"body":{"id":49443,"nodeType":"Block","src":"2550:62:41","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49439,"name":"totalNumUpdates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49434,"src":"2567:15:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":49440,"name":"singleUpdateFeeInWei","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49279,"src":"2585:20:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2567:38:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":49438,"id":49442,"nodeType":"Return","src":"2560:45:41"}]},"implemented":true,"kind":"function","modifiers":[],"name":"getTotalFee","nameLocation":"2470:11:41","parameters":{"id":49435,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49434,"mutability":"mutable","name":"totalNumUpdates","nameLocation":"2490:15:41","nodeType":"VariableDeclaration","scope":49444,"src":"2482:23:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49433,"name":"uint256","nodeType":"ElementaryTypeName","src":"2482:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2481:25:41"},"returnParameters":{"id":49438,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49437,"mutability":"mutable","name":"requiredFee","nameLocation":"2537:11:41","nodeType":"VariableDeclaration","scope":49444,"src":"2529:19:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49436,"name":"uint256","nodeType":"ElementaryTypeName","src":"2529:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2528:21:41"},"scope":49849,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":49491,"nodeType":"FunctionDefinition","src":"2618:389:41","nodes":[],"body":{"id":49490,"nodeType":"Block","src":"2724:283:41","nodes":[],"statements":[{"expression":{"id":49458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49454,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49452,"src":"2734:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_SpotMedian_$50838_memory_ptr","typeString":"struct SpotMedian memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":49455,"name":"spotMedianFeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49883,"src":"2741:15:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_SpotMedian_$50838_storage_$","typeString":"mapping(bytes32 => struct SpotMedian storage ref)"}},"id":49457,"indexExpression":{"id":49456,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49446,"src":"2757:2:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2741:19:41","typeDescriptions":{"typeIdentifier":"t_struct$_SpotMedian_$50838_storage","typeString":"struct SpotMedian storage ref"}},"src":"2734:26:41","typeDescriptions":{"typeIdentifier":"t_struct$_SpotMedian_$50838_memory_ptr","typeString":"struct SpotMedian memory"}},"id":49459,"nodeType":"ExpressionStatement","src":"2734:26:41"},{"condition":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":49464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":49460,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49452,"src":"2774:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_SpotMedian_$50838_memory_ptr","typeString":"struct SpotMedian memory"}},"id":49461,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2779:8:41","memberName":"metadata","nodeType":"MemberAccess","referencedDeclaration":50833,"src":"2774:13:41","typeDescriptions":{"typeIdentifier":"t_struct$_Metadata_$50830_memory_ptr","typeString":"struct Metadata memory"}},"id":49462,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2788:9:41","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":50825,"src":"2774:23:41","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":49463,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2801:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2774:28:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49471,"nodeType":"IfStatement","src":"2770:90:41","trueBody":{"id":49470,"nodeType":"Block","src":"2804:56:41","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":49465,"name":"ErrorsLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52236,"src":"2825:9:41","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ErrorsLib_$52236_$","typeString":"type(library ErrorsLib)"}},"id":49467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2835:12:41","memberName":"DataNotFound","nodeType":"MemberAccess","referencedDeclaration":52233,"src":"2825:22:41","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":49468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2825:24:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":49469,"nodeType":"RevertStatement","src":"2818:31:41"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":49473,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2878:5:41","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":49474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2884:9:41","memberName":"timestamp","nodeType":"MemberAccess","src":"2878:15:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":49475,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49452,"src":"2895:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_SpotMedian_$50838_memory_ptr","typeString":"struct SpotMedian memory"}},"id":49476,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2900:8:41","memberName":"metadata","nodeType":"MemberAccess","referencedDeclaration":50833,"src":"2895:13:41","typeDescriptions":{"typeIdentifier":"t_struct$_Metadata_$50830_memory_ptr","typeString":"struct Metadata memory"}},"id":49477,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2909:9:41","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":50825,"src":"2895:23:41","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":49472,"name":"diff","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49848,"src":"2873:4:41","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":49478,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2873:46:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":49479,"name":"age","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49448,"src":"2922:3:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2873:52:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49487,"nodeType":"IfStatement","src":"2869:111:41","trueBody":{"id":49486,"nodeType":"Block","src":"2927:53:41","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":49481,"name":"ErrorsLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52236,"src":"2948:9:41","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ErrorsLib_$52236_$","typeString":"type(library ErrorsLib)"}},"id":49483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2958:9:41","memberName":"DataStale","nodeType":"MemberAccess","referencedDeclaration":52235,"src":"2948:19:41","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":49484,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2948:21:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":49485,"nodeType":"RevertStatement","src":"2941:28:41"}]}},{"expression":{"id":49488,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49452,"src":"2996:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_SpotMedian_$50838_memory_ptr","typeString":"struct SpotMedian memory"}},"functionReturnParameters":49453,"id":49489,"nodeType":"Return","src":"2989:11:41"}]},"baseFunctions":[50722],"functionSelector":"32bb41d3","implemented":true,"kind":"function","modifiers":[],"name":"getSpotMedianNoOlderThan","nameLocation":"2627:24:41","parameters":{"id":49449,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49446,"mutability":"mutable","name":"id","nameLocation":"2660:2:41","nodeType":"VariableDeclaration","scope":49491,"src":"2652:10:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49445,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2652:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":49448,"mutability":"mutable","name":"age","nameLocation":"2672:3:41","nodeType":"VariableDeclaration","scope":49491,"src":"2664:11:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49447,"name":"uint256","nodeType":"ElementaryTypeName","src":"2664:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2651:25:41"},"returnParameters":{"id":49453,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49452,"mutability":"mutable","name":"data","nameLocation":"2718:4:41","nodeType":"VariableDeclaration","scope":49491,"src":"2700:22:41","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SpotMedian_$50838_memory_ptr","typeString":"struct SpotMedian"},"typeName":{"id":49451,"nodeType":"UserDefinedTypeName","pathNode":{"id":49450,"name":"SpotMedian","nameLocations":["2700:10:41"],"nodeType":"IdentifierPath","referencedDeclaration":50838,"src":"2700:10:41"},"referencedDeclaration":50838,"src":"2700:10:41","typeDescriptions":{"typeIdentifier":"t_struct$_SpotMedian_$50838_storage_ptr","typeString":"struct SpotMedian"}},"visibility":"internal"}],"src":"2699:24:41"},"scope":49849,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":49536,"nodeType":"FunctionDefinition","src":"3013:350:41","nodes":[],"body":{"id":49535,"nodeType":"Block","src":"3107:256:41","nodes":[],"statements":[{"expression":{"id":49505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49501,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49499,"src":"3117:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_TWAP_$50854_memory_ptr","typeString":"struct TWAP memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":49502,"name":"twapFeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49888,"src":"3124:9:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_TWAP_$50854_storage_$","typeString":"mapping(bytes32 => struct TWAP storage ref)"}},"id":49504,"indexExpression":{"id":49503,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49493,"src":"3134:2:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3124:13:41","typeDescriptions":{"typeIdentifier":"t_struct$_TWAP_$50854_storage","typeString":"struct TWAP storage ref"}},"src":"3117:20:41","typeDescriptions":{"typeIdentifier":"t_struct$_TWAP_$50854_memory_ptr","typeString":"struct TWAP memory"}},"id":49506,"nodeType":"ExpressionStatement","src":"3117:20:41"},{"condition":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":49511,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":49507,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49499,"src":"3151:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_TWAP_$50854_memory_ptr","typeString":"struct TWAP memory"}},"id":49508,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3156:8:41","memberName":"metadata","nodeType":"MemberAccess","referencedDeclaration":50841,"src":"3151:13:41","typeDescriptions":{"typeIdentifier":"t_struct$_Metadata_$50830_memory_ptr","typeString":"struct Metadata memory"}},"id":49509,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3165:9:41","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":50825,"src":"3151:23:41","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":49510,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3178:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3151:28:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49518,"nodeType":"IfStatement","src":"3147:90:41","trueBody":{"id":49517,"nodeType":"Block","src":"3181:56:41","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":49512,"name":"ErrorsLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52236,"src":"3202:9:41","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ErrorsLib_$52236_$","typeString":"type(library ErrorsLib)"}},"id":49514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3212:12:41","memberName":"DataNotFound","nodeType":"MemberAccess","referencedDeclaration":52233,"src":"3202:22:41","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":49515,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3202:24:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":49516,"nodeType":"RevertStatement","src":"3195:31:41"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":49520,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3255:5:41","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":49521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3261:9:41","memberName":"timestamp","nodeType":"MemberAccess","src":"3255:15:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":49522,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49499,"src":"3272:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_TWAP_$50854_memory_ptr","typeString":"struct TWAP memory"}},"id":49523,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3277:8:41","memberName":"metadata","nodeType":"MemberAccess","referencedDeclaration":50841,"src":"3272:13:41","typeDescriptions":{"typeIdentifier":"t_struct$_Metadata_$50830_memory_ptr","typeString":"struct Metadata memory"}},"id":49524,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3286:9:41","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":50825,"src":"3272:23:41","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":49519,"name":"diff","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49848,"src":"3250:4:41","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":49525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3250:46:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":49526,"name":"age","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49495,"src":"3299:3:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3250:52:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49534,"nodeType":"IfStatement","src":"3246:111:41","trueBody":{"id":49533,"nodeType":"Block","src":"3304:53:41","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":49528,"name":"ErrorsLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52236,"src":"3325:9:41","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ErrorsLib_$52236_$","typeString":"type(library ErrorsLib)"}},"id":49530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3335:9:41","memberName":"DataStale","nodeType":"MemberAccess","referencedDeclaration":52235,"src":"3325:19:41","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":49531,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3325:21:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":49532,"nodeType":"RevertStatement","src":"3318:28:41"}]}}]},"baseFunctions":[50733],"functionSelector":"49c398a4","implemented":true,"kind":"function","modifiers":[],"name":"getTwapNoOlderThan","nameLocation":"3022:18:41","parameters":{"id":49496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49493,"mutability":"mutable","name":"id","nameLocation":"3049:2:41","nodeType":"VariableDeclaration","scope":49536,"src":"3041:10:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49492,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3041:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":49495,"mutability":"mutable","name":"age","nameLocation":"3061:3:41","nodeType":"VariableDeclaration","scope":49536,"src":"3053:11:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49494,"name":"uint256","nodeType":"ElementaryTypeName","src":"3053:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3040:25:41"},"returnParameters":{"id":49500,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49499,"mutability":"mutable","name":"data","nameLocation":"3101:4:41","nodeType":"VariableDeclaration","scope":49536,"src":"3089:16:41","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TWAP_$50854_memory_ptr","typeString":"struct TWAP"},"typeName":{"id":49498,"nodeType":"UserDefinedTypeName","pathNode":{"id":49497,"name":"TWAP","nameLocations":["3089:4:41"],"nodeType":"IdentifierPath","referencedDeclaration":50854,"src":"3089:4:41"},"referencedDeclaration":50854,"src":"3089:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_TWAP_$50854_storage_ptr","typeString":"struct TWAP"}},"visibility":"internal"}],"src":"3088:18:41"},"scope":49849,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":49581,"nodeType":"FunctionDefinition","src":"3369:404:41","nodes":[],"body":{"id":49580,"nodeType":"Block","src":"3519:254:41","nodes":[],"statements":[{"expression":{"id":49550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49546,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49544,"src":"3529:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_RealizedVolatility_$50872_memory_ptr","typeString":"struct RealizedVolatility memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":49547,"name":"rvFeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49893,"src":"3536:7:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RealizedVolatility_$50872_storage_$","typeString":"mapping(bytes32 => struct RealizedVolatility storage ref)"}},"id":49549,"indexExpression":{"id":49548,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49538,"src":"3544:2:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3536:11:41","typeDescriptions":{"typeIdentifier":"t_struct$_RealizedVolatility_$50872_storage","typeString":"struct RealizedVolatility storage ref"}},"src":"3529:18:41","typeDescriptions":{"typeIdentifier":"t_struct$_RealizedVolatility_$50872_memory_ptr","typeString":"struct RealizedVolatility memory"}},"id":49551,"nodeType":"ExpressionStatement","src":"3529:18:41"},{"condition":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":49556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":49552,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49544,"src":"3561:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_RealizedVolatility_$50872_memory_ptr","typeString":"struct RealizedVolatility memory"}},"id":49553,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3566:8:41","memberName":"metadata","nodeType":"MemberAccess","referencedDeclaration":50857,"src":"3561:13:41","typeDescriptions":{"typeIdentifier":"t_struct$_Metadata_$50830_memory_ptr","typeString":"struct Metadata memory"}},"id":49554,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3575:9:41","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":50825,"src":"3561:23:41","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":49555,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3588:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3561:28:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49563,"nodeType":"IfStatement","src":"3557:90:41","trueBody":{"id":49562,"nodeType":"Block","src":"3591:56:41","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":49557,"name":"ErrorsLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52236,"src":"3612:9:41","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ErrorsLib_$52236_$","typeString":"type(library ErrorsLib)"}},"id":49559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3622:12:41","memberName":"DataNotFound","nodeType":"MemberAccess","referencedDeclaration":52233,"src":"3612:22:41","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":49560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3612:24:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":49561,"nodeType":"RevertStatement","src":"3605:31:41"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":49565,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3665:5:41","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":49566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3671:9:41","memberName":"timestamp","nodeType":"MemberAccess","src":"3665:15:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":49567,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49544,"src":"3682:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_RealizedVolatility_$50872_memory_ptr","typeString":"struct RealizedVolatility memory"}},"id":49568,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3687:8:41","memberName":"metadata","nodeType":"MemberAccess","referencedDeclaration":50857,"src":"3682:13:41","typeDescriptions":{"typeIdentifier":"t_struct$_Metadata_$50830_memory_ptr","typeString":"struct Metadata memory"}},"id":49569,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3696:9:41","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":50825,"src":"3682:23:41","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":49564,"name":"diff","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49848,"src":"3660:4:41","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":49570,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3660:46:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":49571,"name":"age","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49540,"src":"3709:3:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3660:52:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49579,"nodeType":"IfStatement","src":"3656:111:41","trueBody":{"id":49578,"nodeType":"Block","src":"3714:53:41","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":49573,"name":"ErrorsLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52236,"src":"3735:9:41","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ErrorsLib_$52236_$","typeString":"type(library ErrorsLib)"}},"id":49575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3745:9:41","memberName":"DataStale","nodeType":"MemberAccess","referencedDeclaration":52235,"src":"3735:19:41","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":49576,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3735:21:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":49577,"nodeType":"RevertStatement","src":"3728:28:41"}]}}]},"baseFunctions":[50744],"functionSelector":"bdf6afa4","implemented":true,"kind":"function","modifiers":[],"name":"getRealizedVolatilityNoOlderThan","nameLocation":"3378:32:41","parameters":{"id":49541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49538,"mutability":"mutable","name":"id","nameLocation":"3419:2:41","nodeType":"VariableDeclaration","scope":49581,"src":"3411:10:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49537,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3411:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":49540,"mutability":"mutable","name":"age","nameLocation":"3431:3:41","nodeType":"VariableDeclaration","scope":49581,"src":"3423:11:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49539,"name":"uint256","nodeType":"ElementaryTypeName","src":"3423:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3410:25:41"},"returnParameters":{"id":49545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49544,"mutability":"mutable","name":"data","nameLocation":"3509:4:41","nodeType":"VariableDeclaration","scope":49581,"src":"3483:30:41","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RealizedVolatility_$50872_memory_ptr","typeString":"struct RealizedVolatility"},"typeName":{"id":49543,"nodeType":"UserDefinedTypeName","pathNode":{"id":49542,"name":"RealizedVolatility","nameLocations":["3483:18:41"],"nodeType":"IdentifierPath","referencedDeclaration":50872,"src":"3483:18:41"},"referencedDeclaration":50872,"src":"3483:18:41","typeDescriptions":{"typeIdentifier":"t_struct$_RealizedVolatility_$50872_storage_ptr","typeString":"struct RealizedVolatility"}},"visibility":"internal"}],"src":"3482:32:41"},"scope":49849,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":49626,"nodeType":"FunctionDefinition","src":"3779:359:41","nodes":[],"body":{"id":49625,"nodeType":"Block","src":"3879:259:41","nodes":[],"statements":[{"expression":{"id":49595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49591,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49589,"src":"3889:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_Options_$50898_memory_ptr","typeString":"struct Options memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":49592,"name":"optionsFeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49898,"src":"3896:12:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Options_$50898_storage_$","typeString":"mapping(bytes32 => struct Options storage ref)"}},"id":49594,"indexExpression":{"id":49593,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49583,"src":"3909:2:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3896:16:41","typeDescriptions":{"typeIdentifier":"t_struct$_Options_$50898_storage","typeString":"struct Options storage ref"}},"src":"3889:23:41","typeDescriptions":{"typeIdentifier":"t_struct$_Options_$50898_memory_ptr","typeString":"struct Options memory"}},"id":49596,"nodeType":"ExpressionStatement","src":"3889:23:41"},{"condition":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":49601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":49597,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49589,"src":"3926:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_Options_$50898_memory_ptr","typeString":"struct Options memory"}},"id":49598,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3931:8:41","memberName":"metadata","nodeType":"MemberAccess","referencedDeclaration":50875,"src":"3926:13:41","typeDescriptions":{"typeIdentifier":"t_struct$_Metadata_$50830_memory_ptr","typeString":"struct Metadata memory"}},"id":49599,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3940:9:41","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":50825,"src":"3926:23:41","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":49600,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3953:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3926:28:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49608,"nodeType":"IfStatement","src":"3922:90:41","trueBody":{"id":49607,"nodeType":"Block","src":"3956:56:41","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":49602,"name":"ErrorsLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52236,"src":"3977:9:41","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ErrorsLib_$52236_$","typeString":"type(library ErrorsLib)"}},"id":49604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3987:12:41","memberName":"DataNotFound","nodeType":"MemberAccess","referencedDeclaration":52233,"src":"3977:22:41","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":49605,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3977:24:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":49606,"nodeType":"RevertStatement","src":"3970:31:41"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49617,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":49610,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"4030:5:41","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":49611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4036:9:41","memberName":"timestamp","nodeType":"MemberAccess","src":"4030:15:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":49612,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49589,"src":"4047:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_Options_$50898_memory_ptr","typeString":"struct Options memory"}},"id":49613,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4052:8:41","memberName":"metadata","nodeType":"MemberAccess","referencedDeclaration":50875,"src":"4047:13:41","typeDescriptions":{"typeIdentifier":"t_struct$_Metadata_$50830_memory_ptr","typeString":"struct Metadata memory"}},"id":49614,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4061:9:41","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":50825,"src":"4047:23:41","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":49609,"name":"diff","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49848,"src":"4025:4:41","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":49615,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4025:46:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":49616,"name":"age","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49585,"src":"4074:3:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4025:52:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49624,"nodeType":"IfStatement","src":"4021:111:41","trueBody":{"id":49623,"nodeType":"Block","src":"4079:53:41","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":49618,"name":"ErrorsLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52236,"src":"4100:9:41","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ErrorsLib_$52236_$","typeString":"type(library ErrorsLib)"}},"id":49620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4110:9:41","memberName":"DataStale","nodeType":"MemberAccess","referencedDeclaration":52235,"src":"4100:19:41","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":49621,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4100:21:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":49622,"nodeType":"RevertStatement","src":"4093:28:41"}]}}]},"baseFunctions":[50755],"functionSelector":"e29ea30f","implemented":true,"kind":"function","modifiers":[],"name":"getOptionsNoOlderThan","nameLocation":"3788:21:41","parameters":{"id":49586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49583,"mutability":"mutable","name":"id","nameLocation":"3818:2:41","nodeType":"VariableDeclaration","scope":49626,"src":"3810:10:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49582,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3810:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":49585,"mutability":"mutable","name":"age","nameLocation":"3830:3:41","nodeType":"VariableDeclaration","scope":49626,"src":"3822:11:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49584,"name":"uint256","nodeType":"ElementaryTypeName","src":"3822:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3809:25:41"},"returnParameters":{"id":49590,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49589,"mutability":"mutable","name":"data","nameLocation":"3873:4:41","nodeType":"VariableDeclaration","scope":49626,"src":"3858:19:41","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Options_$50898_memory_ptr","typeString":"struct Options"},"typeName":{"id":49588,"nodeType":"UserDefinedTypeName","pathNode":{"id":49587,"name":"Options","nameLocations":["3858:7:41"],"nodeType":"IdentifierPath","referencedDeclaration":50898,"src":"3858:7:41"},"referencedDeclaration":50898,"src":"3858:7:41","typeDescriptions":{"typeIdentifier":"t_struct$_Options_$50898_storage_ptr","typeString":"struct Options"}},"visibility":"internal"}],"src":"3857:21:41"},"scope":49849,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":49671,"nodeType":"FunctionDefinition","src":"4144:350:41","nodes":[],"body":{"id":49670,"nodeType":"Block","src":"4238:256:41","nodes":[],"statements":[{"expression":{"id":49640,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49636,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49634,"src":"4248:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_Perp_$50910_memory_ptr","typeString":"struct Perp memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":49637,"name":"perpFeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49903,"src":"4255:9:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Perp_$50910_storage_$","typeString":"mapping(bytes32 => struct Perp storage ref)"}},"id":49639,"indexExpression":{"id":49638,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49628,"src":"4265:2:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4255:13:41","typeDescriptions":{"typeIdentifier":"t_struct$_Perp_$50910_storage","typeString":"struct Perp storage ref"}},"src":"4248:20:41","typeDescriptions":{"typeIdentifier":"t_struct$_Perp_$50910_memory_ptr","typeString":"struct Perp memory"}},"id":49641,"nodeType":"ExpressionStatement","src":"4248:20:41"},{"condition":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":49646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":49642,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49634,"src":"4282:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_Perp_$50910_memory_ptr","typeString":"struct Perp memory"}},"id":49643,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4287:8:41","memberName":"metadata","nodeType":"MemberAccess","referencedDeclaration":50901,"src":"4282:13:41","typeDescriptions":{"typeIdentifier":"t_struct$_Metadata_$50830_memory_ptr","typeString":"struct Metadata memory"}},"id":49644,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4296:9:41","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":50825,"src":"4282:23:41","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":49645,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4309:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4282:28:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49653,"nodeType":"IfStatement","src":"4278:90:41","trueBody":{"id":49652,"nodeType":"Block","src":"4312:56:41","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":49647,"name":"ErrorsLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52236,"src":"4333:9:41","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ErrorsLib_$52236_$","typeString":"type(library ErrorsLib)"}},"id":49649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4343:12:41","memberName":"DataNotFound","nodeType":"MemberAccess","referencedDeclaration":52233,"src":"4333:22:41","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":49650,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4333:24:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":49651,"nodeType":"RevertStatement","src":"4326:31:41"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":49655,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"4386:5:41","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":49656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4392:9:41","memberName":"timestamp","nodeType":"MemberAccess","src":"4386:15:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":49657,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49634,"src":"4403:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_Perp_$50910_memory_ptr","typeString":"struct Perp memory"}},"id":49658,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4408:8:41","memberName":"metadata","nodeType":"MemberAccess","referencedDeclaration":50901,"src":"4403:13:41","typeDescriptions":{"typeIdentifier":"t_struct$_Metadata_$50830_memory_ptr","typeString":"struct Metadata memory"}},"id":49659,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4417:9:41","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":50825,"src":"4403:23:41","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":49654,"name":"diff","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49848,"src":"4381:4:41","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":49660,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4381:46:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":49661,"name":"age","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49630,"src":"4430:3:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4381:52:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49669,"nodeType":"IfStatement","src":"4377:111:41","trueBody":{"id":49668,"nodeType":"Block","src":"4435:53:41","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":49663,"name":"ErrorsLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52236,"src":"4456:9:41","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ErrorsLib_$52236_$","typeString":"type(library ErrorsLib)"}},"id":49665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4466:9:41","memberName":"DataStale","nodeType":"MemberAccess","referencedDeclaration":52235,"src":"4456:19:41","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":49666,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4456:21:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":49667,"nodeType":"RevertStatement","src":"4449:28:41"}]}}]},"baseFunctions":[50766],"functionSelector":"7cfa33dd","implemented":true,"kind":"function","modifiers":[],"name":"getPerpNoOlderThan","nameLocation":"4153:18:41","parameters":{"id":49631,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49628,"mutability":"mutable","name":"id","nameLocation":"4180:2:41","nodeType":"VariableDeclaration","scope":49671,"src":"4172:10:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49627,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4172:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":49630,"mutability":"mutable","name":"age","nameLocation":"4192:3:41","nodeType":"VariableDeclaration","scope":49671,"src":"4184:11:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49629,"name":"uint256","nodeType":"ElementaryTypeName","src":"4184:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4171:25:41"},"returnParameters":{"id":49635,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49634,"mutability":"mutable","name":"data","nameLocation":"4232:4:41","nodeType":"VariableDeclaration","scope":49671,"src":"4220:16:41","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Perp_$50910_memory_ptr","typeString":"struct Perp"},"typeName":{"id":49633,"nodeType":"UserDefinedTypeName","pathNode":{"id":49632,"name":"Perp","nameLocations":["4220:4:41"],"nodeType":"IdentifierPath","referencedDeclaration":50910,"src":"4220:4:41"},"referencedDeclaration":50910,"src":"4220:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_Perp_$50910_storage_ptr","typeString":"struct Perp"}},"visibility":"internal"}],"src":"4219:18:41"},"scope":49849,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":49774,"nodeType":"FunctionDefinition","src":"4528:793:41","nodes":[],"body":{"id":49773,"nodeType":"Block","src":"4593:728:41","nodes":[],"statements":[{"assignments":[49681],"declarations":[{"constant":false,"id":49681,"mutability":"mutable","name":"feedType","nameLocation":"4612:8:41","nodeType":"VariableDeclaration","scope":49773,"src":"4603:17:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"},"typeName":{"id":49680,"nodeType":"UserDefinedTypeName","pathNode":{"id":49679,"name":"FeedType","nameLocations":["4603:8:41"],"nodeType":"IdentifierPath","referencedDeclaration":50935,"src":"4603:8:41"},"referencedDeclaration":50935,"src":"4603:8:41","typeDescriptions":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"}},"visibility":"internal"}],"id":49691,"initialValue":{"arguments":[{"arguments":[{"baseExpression":{"id":49686,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49674,"src":"4659:2:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":49688,"indexExpression":{"hexValue":"30","id":49687,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4662:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4659:5:41","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes1","typeString":"bytes1"}],"id":49685,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4653:5:41","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":49684,"name":"uint8","nodeType":"ElementaryTypeName","src":"4653:5:41","typeDescriptions":{}}},"id":49689,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4653:12:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":49682,"name":"DataParser","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52216,"src":"4623:10:41","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataParser_$52216_$","typeString":"type(library DataParser)"}},"id":49683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4634:18:41","memberName":"safeCastToFeedType","nodeType":"MemberAccess","referencedDeclaration":51589,"src":"4623:29:41","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint8_$returns$_t_enum$_FeedType_$50935_$","typeString":"function (uint8) pure returns (enum FeedType)"}},"id":49690,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4623:43:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"}},"nodeType":"VariableDeclarationStatement","src":"4603:63:41"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"},"id":49695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49692,"name":"feedType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49681,"src":"4680:8:41","typeDescriptions":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":49693,"name":"FeedType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50935,"src":"4692:8:41","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_FeedType_$50935_$","typeString":"type(enum FeedType)"}},"id":49694,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4701:10:41","memberName":"SpotMedian","nodeType":"MemberAccess","referencedDeclaration":50930,"src":"4692:19:41","typeDescriptions":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"}},"src":"4680:31:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"},"id":49709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49706,"name":"feedType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49681,"src":"4800:8:41","typeDescriptions":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":49707,"name":"FeedType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50935,"src":"4812:8:41","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_FeedType_$50935_$","typeString":"type(enum FeedType)"}},"id":49708,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4821:4:41","memberName":"Twap","nodeType":"MemberAccess","referencedDeclaration":50931,"src":"4812:13:41","typeDescriptions":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"}},"src":"4800:25:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"},"id":49723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49720,"name":"feedType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49681,"src":"4908:8:41","typeDescriptions":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":49721,"name":"FeedType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50935,"src":"4920:8:41","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_FeedType_$50935_$","typeString":"type(enum FeedType)"}},"id":49722,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4929:18:41","memberName":"RealizedVolatility","nodeType":"MemberAccess","referencedDeclaration":50932,"src":"4920:27:41","typeDescriptions":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"}},"src":"4908:39:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"},"id":49737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49734,"name":"feedType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49681,"src":"5028:8:41","typeDescriptions":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":49735,"name":"FeedType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50935,"src":"5040:8:41","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_FeedType_$50935_$","typeString":"type(enum FeedType)"}},"id":49736,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5049:7:41","memberName":"Options","nodeType":"MemberAccess","referencedDeclaration":50933,"src":"5040:16:41","typeDescriptions":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"}},"src":"5028:28:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"},"id":49751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49748,"name":"feedType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49681,"src":"5142:8:41","typeDescriptions":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":49749,"name":"FeedType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50935,"src":"5154:8:41","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_FeedType_$50935_$","typeString":"type(enum FeedType)"}},"id":49750,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5163:10:41","memberName":"Perpetuals","nodeType":"MemberAccess","referencedDeclaration":50934,"src":"5154:19:41","typeDescriptions":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"}},"src":"5142:31:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":49767,"nodeType":"Block","src":"5252:63:41","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":49762,"name":"ErrorsLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52236,"src":"5273:9:41","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ErrorsLib_$52236_$","typeString":"type(library ErrorsLib)"}},"id":49764,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5283:19:41","memberName":"InvalidDataFeedType","nodeType":"MemberAccess","referencedDeclaration":52231,"src":"5273:29:41","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":49765,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5273:31:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":49766,"nodeType":"RevertStatement","src":"5266:38:41"}]},"id":49768,"nodeType":"IfStatement","src":"5138:177:41","trueBody":{"id":49761,"nodeType":"Block","src":"5175:71:41","statements":[{"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":49758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"baseExpression":{"id":49752,"name":"perpFeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49903,"src":"5197:9:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Perp_$50910_storage_$","typeString":"mapping(bytes32 => struct Perp storage ref)"}},"id":49754,"indexExpression":{"id":49753,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49674,"src":"5207:2:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5197:13:41","typeDescriptions":{"typeIdentifier":"t_struct$_Perp_$50910_storage","typeString":"struct Perp storage ref"}},"id":49755,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5211:8:41","memberName":"metadata","nodeType":"MemberAccess","referencedDeclaration":50901,"src":"5197:22:41","typeDescriptions":{"typeIdentifier":"t_struct$_Metadata_$50830_storage","typeString":"struct Metadata storage ref"}},"id":49756,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5220:9:41","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":50825,"src":"5197:32:41","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":49757,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5233:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5197:37:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":49759,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5196:39:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":49678,"id":49760,"nodeType":"Return","src":"5189:46:41"}]}},"id":49769,"nodeType":"IfStatement","src":"5024:291:41","trueBody":{"id":49747,"nodeType":"Block","src":"5058:74:41","statements":[{"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":49744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"baseExpression":{"id":49738,"name":"optionsFeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49898,"src":"5080:12:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Options_$50898_storage_$","typeString":"mapping(bytes32 => struct Options storage ref)"}},"id":49740,"indexExpression":{"id":49739,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49674,"src":"5093:2:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5080:16:41","typeDescriptions":{"typeIdentifier":"t_struct$_Options_$50898_storage","typeString":"struct Options storage ref"}},"id":49741,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5097:8:41","memberName":"metadata","nodeType":"MemberAccess","referencedDeclaration":50875,"src":"5080:25:41","typeDescriptions":{"typeIdentifier":"t_struct$_Metadata_$50830_storage","typeString":"struct Metadata storage ref"}},"id":49742,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5106:9:41","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":50825,"src":"5080:35:41","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":49743,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5119:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5080:40:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":49745,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5079:42:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":49678,"id":49746,"nodeType":"Return","src":"5072:49:41"}]}},"id":49770,"nodeType":"IfStatement","src":"4904:411:41","trueBody":{"id":49733,"nodeType":"Block","src":"4949:69:41","statements":[{"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":49730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"baseExpression":{"id":49724,"name":"rvFeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49893,"src":"4971:7:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RealizedVolatility_$50872_storage_$","typeString":"mapping(bytes32 => struct RealizedVolatility storage ref)"}},"id":49726,"indexExpression":{"id":49725,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49674,"src":"4979:2:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4971:11:41","typeDescriptions":{"typeIdentifier":"t_struct$_RealizedVolatility_$50872_storage","typeString":"struct RealizedVolatility storage ref"}},"id":49727,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4983:8:41","memberName":"metadata","nodeType":"MemberAccess","referencedDeclaration":50857,"src":"4971:20:41","typeDescriptions":{"typeIdentifier":"t_struct$_Metadata_$50830_storage","typeString":"struct Metadata storage ref"}},"id":49728,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4992:9:41","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":50825,"src":"4971:30:41","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":49729,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5005:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4971:35:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":49731,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4970:37:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":49678,"id":49732,"nodeType":"Return","src":"4963:44:41"}]}},"id":49771,"nodeType":"IfStatement","src":"4796:519:41","trueBody":{"id":49719,"nodeType":"Block","src":"4827:71:41","statements":[{"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":49716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"baseExpression":{"id":49710,"name":"twapFeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49888,"src":"4849:9:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_TWAP_$50854_storage_$","typeString":"mapping(bytes32 => struct TWAP storage ref)"}},"id":49712,"indexExpression":{"id":49711,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49674,"src":"4859:2:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4849:13:41","typeDescriptions":{"typeIdentifier":"t_struct$_TWAP_$50854_storage","typeString":"struct TWAP storage ref"}},"id":49713,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4863:8:41","memberName":"metadata","nodeType":"MemberAccess","referencedDeclaration":50841,"src":"4849:22:41","typeDescriptions":{"typeIdentifier":"t_struct$_Metadata_$50830_storage","typeString":"struct Metadata storage ref"}},"id":49714,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4872:9:41","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":50825,"src":"4849:32:41","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":49715,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4885:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4849:37:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":49717,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4848:39:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":49678,"id":49718,"nodeType":"Return","src":"4841:46:41"}]}},"id":49772,"nodeType":"IfStatement","src":"4676:639:41","trueBody":{"id":49705,"nodeType":"Block","src":"4713:77:41","statements":[{"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":49702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"baseExpression":{"id":49696,"name":"spotMedianFeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49883,"src":"4735:15:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_SpotMedian_$50838_storage_$","typeString":"mapping(bytes32 => struct SpotMedian storage ref)"}},"id":49698,"indexExpression":{"id":49697,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49674,"src":"4751:2:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4735:19:41","typeDescriptions":{"typeIdentifier":"t_struct$_SpotMedian_$50838_storage","typeString":"struct SpotMedian storage ref"}},"id":49699,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4755:8:41","memberName":"metadata","nodeType":"MemberAccess","referencedDeclaration":50833,"src":"4735:28:41","typeDescriptions":{"typeIdentifier":"t_struct$_Metadata_$50830_storage","typeString":"struct Metadata storage ref"}},"id":49700,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4764:9:41","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":50825,"src":"4735:38:41","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":49701,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4777:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4735:43:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":49703,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4734:45:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":49678,"id":49704,"nodeType":"Return","src":"4727:52:41"}]}}]},"baseFunctions":[50774],"documentation":{"id":49672,"nodeType":"StructuredDocumentation","src":"4500:23:41","text":"@inheritdoc IPragma"},"functionSelector":"0e8fd1ba","implemented":true,"kind":"function","modifiers":[],"name":"dataFeedExists","nameLocation":"4537:14:41","parameters":{"id":49675,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49674,"mutability":"mutable","name":"id","nameLocation":"4560:2:41","nodeType":"VariableDeclaration","scope":49774,"src":"4552:10:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49673,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4552:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4551:12:41"},"returnParameters":{"id":49678,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49677,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49774,"src":"4587:4:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":49676,"name":"bool","nodeType":"ElementaryTypeName","src":"4587:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4586:6:41"},"scope":49849,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":49782,"nodeType":"FunctionDefinition","src":"5327:106:41","nodes":[],"body":{"id":49781,"nodeType":"Block","src":"5387:46:41","nodes":[],"statements":[{"expression":{"id":49779,"name":"validTimePeriodSeconds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49277,"src":"5404:22:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":49778,"id":49780,"nodeType":"Return","src":"5397:29:41"}]},"functionSelector":"e18910a3","implemented":true,"kind":"function","modifiers":[],"name":"getValidTimePeriod","nameLocation":"5336:18:41","parameters":{"id":49775,"nodeType":"ParameterList","parameters":[],"src":"5354:2:41"},"returnParameters":{"id":49778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49777,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49782,"src":"5378:7:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49776,"name":"uint256","nodeType":"ElementaryTypeName","src":"5378:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5377:9:41"},"scope":49849,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":49816,"nodeType":"FunctionDefinition","src":"5439:245:41","nodes":[],"body":{"id":49815,"nodeType":"Block","src":"5498:186:41","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49790,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49784,"src":"5516:6:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"arguments":[{"id":49793,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5534:4:41","typeDescriptions":{"typeIdentifier":"t_contract$_Pragma_$49849","typeString":"contract Pragma"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Pragma_$49849","typeString":"contract Pragma"}],"id":49792,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5526:7:41","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":49791,"name":"address","nodeType":"ElementaryTypeName","src":"5526:7:41","typeDescriptions":{}}},"id":49794,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5526:13:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":49795,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5540:7:41","memberName":"balance","nodeType":"MemberAccess","src":"5526:21:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5516:31:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e73756666696369656e742062616c616e6365","id":49797,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5549:22:41","typeDescriptions":{"typeIdentifier":"t_stringliteral_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5","typeString":"literal_string \"Insufficient balance\""},"value":"Insufficient balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5","typeString":"literal_string \"Insufficient balance\""}],"id":49789,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"5508:7:41","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":49798,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5508:64:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49799,"nodeType":"ExpressionStatement","src":"5508:64:41"},{"assignments":[49801,null],"declarations":[{"constant":false,"id":49801,"mutability":"mutable","name":"success","nameLocation":"5588:7:41","nodeType":"VariableDeclaration","scope":49815,"src":"5583:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":49800,"name":"bool","nodeType":"ElementaryTypeName","src":"5583:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":49809,"initialValue":{"arguments":[{"hexValue":"","id":49807,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5629:2:41","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":49802,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46879,"src":"5601:5:41","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":49803,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5601:7:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":49804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5609:4:41","memberName":"call","nodeType":"MemberAccess","src":"5601:12:41","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":49806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":49805,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49784,"src":"5621:6:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"5601:27:41","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":49808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5601:31:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"5582:50:41"},{"expression":{"arguments":[{"id":49811,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49801,"src":"5650:7:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5472616e73666572206661696c6564","id":49812,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5659:17:41","typeDescriptions":{"typeIdentifier":"t_stringliteral_25adaa6d082ce15f901e0d8a3d393e7462ef9edf2e6bc8321fa14d1615b6fc51","typeString":"literal_string \"Transfer failed\""},"value":"Transfer failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_25adaa6d082ce15f901e0d8a3d393e7462ef9edf2e6bc8321fa14d1615b6fc51","typeString":"literal_string \"Transfer failed\""}],"id":49810,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"5642:7:41","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":49813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5642:35:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49814,"nodeType":"ExpressionStatement","src":"5642:35:41"}]},"functionSelector":"5d2c53a7","implemented":true,"kind":"function","modifiers":[{"id":49787,"kind":"modifierInvocation","modifierName":{"id":49786,"name":"onlyOwner","nameLocations":["5488:9:41"],"nodeType":"IdentifierPath","referencedDeclaration":46863,"src":"5488:9:41"},"nodeType":"ModifierInvocation","src":"5488:9:41"}],"name":"withdraw_funds","nameLocation":"5448:14:41","parameters":{"id":49785,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49784,"mutability":"mutable","name":"amount","nameLocation":"5471:6:41","nodeType":"VariableDeclaration","scope":49816,"src":"5463:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49783,"name":"uint256","nodeType":"ElementaryTypeName","src":"5463:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5462:16:41"},"returnParameters":{"id":49788,"nodeType":"ParameterList","parameters":[],"src":"5498:0:41"},"scope":49849,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":49824,"nodeType":"FunctionDefinition","src":"5690:86:41","nodes":[],"body":{"id":49823,"nodeType":"Block","src":"5745:31:41","nodes":[],"statements":[{"expression":{"hexValue":"312e302e30","id":49821,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5762:7:41","typeDescriptions":{"typeIdentifier":"t_stringliteral_06c015bd22b4c69690933c1058878ebdfef31f9aaae40bbe86d8a09fe1b2972c","typeString":"literal_string \"1.0.0\""},"value":"1.0.0"},"functionReturnParameters":49820,"id":49822,"nodeType":"Return","src":"5755:14:41"}]},"functionSelector":"54fd4d50","implemented":true,"kind":"function","modifiers":[],"name":"version","nameLocation":"5699:7:41","parameters":{"id":49817,"nodeType":"ParameterList","parameters":[],"src":"5706:2:41"},"returnParameters":{"id":49820,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49819,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49824,"src":"5730:13:41","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":49818,"name":"string","nodeType":"ElementaryTypeName","src":"5730:6:41","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"5729:15:41"},"scope":49849,"stateMutability":"pure","virtual":false,"visibility":"public"},{"id":49848,"nodeType":"FunctionDefinition","src":"5782:175:41","nodes":[],"body":{"id":49847,"nodeType":"Block","src":"5850:107:41","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49833,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49826,"src":"5864:1:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":49834,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49828,"src":"5868:1:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5864:5:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":49845,"nodeType":"Block","src":"5914:37:41","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49841,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49828,"src":"5935:1:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":49842,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49826,"src":"5939:1:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5935:5:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":49832,"id":49844,"nodeType":"Return","src":"5928:12:41"}]},"id":49846,"nodeType":"IfStatement","src":"5860:91:41","trueBody":{"id":49840,"nodeType":"Block","src":"5871:37:41","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49836,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49826,"src":"5892:1:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":49837,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49828,"src":"5896:1:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5892:5:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":49832,"id":49839,"nodeType":"Return","src":"5885:12:41"}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"diff","nameLocation":"5791:4:41","parameters":{"id":49829,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49826,"mutability":"mutable","name":"x","nameLocation":"5804:1:41","nodeType":"VariableDeclaration","scope":49848,"src":"5796:9:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49825,"name":"uint256","nodeType":"ElementaryTypeName","src":"5796:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":49828,"mutability":"mutable","name":"y","nameLocation":"5815:1:41","nodeType":"VariableDeclaration","scope":49848,"src":"5807:9:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49827,"name":"uint256","nodeType":"ElementaryTypeName","src":"5807:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5795:22:41"},"returnParameters":{"id":49832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49831,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49848,"src":"5841:7:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49830,"name":"uint256","nodeType":"ElementaryTypeName","src":"5841:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5840:9:41"},"scope":49849,"stateMutability":"pure","virtual":false,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":49266,"name":"Initializable","nameLocations":["670:13:41"],"nodeType":"IdentifierPath","referencedDeclaration":47222,"src":"670:13:41"},"id":49267,"nodeType":"InheritanceSpecifier","src":"670:13:41"},{"baseName":{"id":49268,"name":"UUPSUpgradeable","nameLocations":["685:15:41"],"nodeType":"IdentifierPath","referencedDeclaration":47404,"src":"685:15:41"},"id":49269,"nodeType":"InheritanceSpecifier","src":"685:15:41"},{"baseName":{"id":49270,"name":"OwnableUpgradeable","nameLocations":["702:18:41"],"nodeType":"IdentifierPath","referencedDeclaration":46968,"src":"702:18:41"},"id":49271,"nodeType":"InheritanceSpecifier","src":"702:18:41"},{"baseName":{"id":49272,"name":"IPragma","nameLocations":["722:7:41"],"nodeType":"IdentifierPath","referencedDeclaration":50775,"src":"722:7:41"},"id":49273,"nodeType":"InheritanceSpecifier","src":"722:7:41"},{"baseName":{"id":49274,"name":"PragmaDecoder","nameLocations":["731:13:41"],"nodeType":"IdentifierPath","referencedDeclaration":50660,"src":"731:13:41"},"id":49275,"nodeType":"InheritanceSpecifier","src":"731:13:41"}],"canonicalName":"Pragma","contractDependencies":[],"contractKind":"contract","documentation":{"id":49265,"nodeType":"StructuredDocumentation","src":"534:117:41","text":"@title Pragma\n @author Pragma Labs\n @custom:contact security@pragma.build\n @notice The Pragma contract."},"fullyImplemented":true,"linearizedBaseContracts":[49849,50660,50775,46968,47450,47404,47629,47222],"name":"Pragma","nameLocation":"660:6:41","scope":49850,"usedErrors":[46804,46809,46985,46988,47249,47254,47687,47700,48200,48492,52221,52223,52225,52227,52229,52231,52233,52235],"usedEvents":[46815,46993,47606,52261,52271,52281,52291,52301]}],"license":"Apache 2"},"id":41} \ No newline at end of file diff --git a/evm_config.yaml b/evm_config.yaml new file mode 100644 index 0000000..58d9881 --- /dev/null +++ b/evm_config.yaml @@ -0,0 +1,47 @@ +mainnet: + rpc_url: "https://mainnet.infura.io/v3/${INFURA_PROJECT_ID}" + contract_address: "" + +sepolia: + rpc_url: "https://sepolia.infura.io/v3/${INFURA_PROJECT_ID}" + contract_address: "" + +holesky: + rpc_url: "https://holesky.infura.io/v3/${INFURA_PROJECT_ID}" + contract_address: "0x50fEbf423F5Fc61C2512bb5F9c6B1878d37C50DF" + +bsc: + rpc_url: "https://bsc-dataseed1.defibit.io/" + contract_address: "" + +bscTestnet: + rpc_url: "https://data-seed-prebsc-1-s1.binance.org:8545" + contract_address: "" + +polygon: + rpc_url: "https://polygon-rpc.com/" + contract_address: "" + +polygonTestnet: + rpc_url: "https://rpc-mumbai.maticvigil.com" + contract_address: "" + +avalanche: + rpc_url: "https://api.avax.network/ext/bc/C/rpc" + contract_address: "" + +fantom: + rpc_url: "https://rpc.ftm.tools/" + contract_address: "" + +arbitrum: + rpc_url: "https://arb1.arbitrum.io/rpc" + contract_address: "" + +optimism: + rpc_url: "https://rpc.ankr.com/optimism" + contract_address: "" + +base: + rpc_url: "https://mainnet.base.org" + contract_address: "" \ No newline at end of file diff --git a/src/config.rs b/src/config.rs index 32e518b..59103d5 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,10 +1,8 @@ use std::{ - collections::HashMap, - str::FromStr, - sync::Arc, - time::{Duration, Instant}, + collections::HashMap, path::{Path, PathBuf}, str::FromStr, sync::Arc, time::{Duration, Instant} }; +use alloy::{hex::FromHex, primitives::Address, providers::ProviderBuilder}; use arc_swap::{ArcSwap, Guard}; use starknet::{ core::{ @@ -21,8 +19,7 @@ use url::Url; use crate::{ constants::{ CONFIG_UPDATE_INTERVAL, LONG_TAIL_ASSETS, LONG_TAIL_ASSET_THRESHOLD, LOW_SOURCES_THRESHOLD, - }, - utils::{is_long_tail_asset, try_felt_to_u32}, + }, evm::pragma::{Pragma, PragmaContract}, utils::{is_long_tail_asset, try_felt_to_u32} }; #[derive(Debug, Clone, EnumString, IntoStaticStr)] @@ -60,6 +57,28 @@ pub struct DataInfo { pub table_name: String, } + +#[derive(Debug, Clone)] +pub struct EvmConfig { + name: String, + pragma: PragmaContract +} + +impl EvmConfig { + pub fn new(network_name: String, mut contract_adress: String, rpc_url: Url) -> Self { + let provider = ProviderBuilder::new().with_recommended_fillers().on_http(rpc_url); + if contract_adress.starts_with("0x") { + contract_adress = contract_adress.replace("0x", ""); + } + let address = Address::from_hex(contract_adress).expect("Invalid Pragma Address specified. Make sure it is an hexadecimal address."); + let pragma = Pragma::new(address, provider); + Self { + name: network_name, + pragma, + } + } +} + #[derive(Debug, Clone)] #[allow(unused)] pub struct Config { @@ -67,6 +86,7 @@ pub struct Config { publishers: HashMap, network: Network, indexer_url: String, + evm_config: Vec, } /// We are using `ArcSwap` as it allow us to replace the new `Config` with @@ -117,6 +137,7 @@ impl Config { vrf_address: config_input.vrf_address, publisher_registry_address, }, + evm_config: todo!(), } } @@ -126,6 +147,7 @@ impl Config { let vrf_address = std::env::var("VRF_ADDRESS").expect("VRF_ADDRESS must be set"); let spot_pairs = std::env::var("SPOT_PAIRS").expect("SPOT_PAIRS must be set"); let future_pairs = std::env::var("FUTURE_PAIRS").expect("FUTURE_PAIRS must be set"); + let evm_config = std::env::var("EVM_CONFIG_PATH").expect("EVM_CONFIG_PATH must be set"); Config::new(ConfigInput { network: NetworkName::from_str(&network).expect("Invalid network name"), @@ -133,6 +155,7 @@ impl Config { vrf_address: Felt::from_hex_unchecked(&vrf_address), spot_pairs: parse_pairs(&spot_pairs), future_pairs: parse_pairs(&future_pairs), + config_path: PathBuf::from_str(&evm_config).expect("invalid evm config path"), }) .await } @@ -177,6 +200,7 @@ pub struct ConfigInput { pub vrf_address: Felt, pub spot_pairs: Vec, pub future_pairs: Vec, + pub config_path: PathBuf, } #[allow(unused)] diff --git a/src/evm/mod.rs b/src/evm/mod.rs new file mode 100644 index 0000000..37854df --- /dev/null +++ b/src/evm/mod.rs @@ -0,0 +1 @@ +pub mod pragma; diff --git a/src/evm/pragma.rs b/src/evm/pragma.rs new file mode 100644 index 0000000..2d4105a --- /dev/null +++ b/src/evm/pragma.rs @@ -0,0 +1,14 @@ +use alloy::{providers::fillers::BlobGasFiller, sol}; +use alloy::network::Ethereum; +use alloy::providers::fillers::{ChainIdFiller, FillProvider, GasFiller, JoinFill, NonceFiller}; +use alloy::providers::{Identity, RootProvider}; +use alloy::transports::http::{Client, Http}; + +sol!( + #[allow(missing_docs)] + #[sol(rpc)] + Pragma, + "abi/Pragma.json" +); + +pub type PragmaContract = Pragma::PragmaInstance, FillProvider>>>, RootProvider>, Http, Ethereum>>; diff --git a/src/lib.rs b/src/lib.rs index 6a36dce..732f0f6 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,3 +4,4 @@ pub mod models; pub mod schema; pub mod types; pub(crate) mod utils; +pub(crate) mod evm; diff --git a/src/main.rs b/src/main.rs index 1449b79..3550282 100644 --- a/src/main.rs +++ b/src/main.rs @@ -28,6 +28,7 @@ mod tests; use std::time::Duration; use std::{env, vec}; +use alloy::primitives::address; use deadpool::managed::Pool; use diesel_async::pooled_connection::AsyncDieselConnectionManager; use diesel_async::AsyncPgConnection; @@ -38,6 +39,7 @@ use config::{get_config, init_long_tail_asset_configuration, periodic_config_upd use processing::common::{check_publisher_balance, indexers_are_synced}; use utils::{is_long_tail_asset, log_tasks_results}; + #[tokio::main] async fn main() { env_logger::init(); diff --git a/src/tests/common/fixtures.rs b/src/tests/common/fixtures.rs index eea5b8e..82a5ac3 100644 --- a/src/tests/common/fixtures.rs +++ b/src/tests/common/fixtures.rs @@ -31,6 +31,7 @@ pub async fn test_config() -> Guard> { ), spot_pairs: vec!["ETH/USD".to_string(), "BTC/USD".to_string()], future_pairs: vec!["ETH/USD".to_string(), "BTC/USD".to_string()], + config_path: "".into(), }) .await; get_config(None).await From 98de7e12bfddd9d30062ef2d4f642bd1e4d3f5d1 Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Thu, 10 Oct 2024 17:49:40 +0200 Subject: [PATCH 02/31] fiou --- Cargo.lock | 20 ++++++++ Cargo.toml | 1 + src/config.rs | 56 ++++++++++++++++++++-- src/constants.rs | 8 ++++ src/error.rs | 2 + src/main.rs | 17 +++++++ src/processing/evm.rs | 91 ++++++++++++++++++++++++++++++++++++ src/processing/mod.rs | 1 + src/tests/common/fixtures.rs | 1 + 9 files changed, 193 insertions(+), 4 deletions(-) create mode 100644 src/processing/evm.rs diff --git a/Cargo.lock b/Cargo.lock index 5a024ff..235ed5d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2826,6 +2826,7 @@ dependencies = [ "reqwest 0.11.22", "rstest", "serde", + "serde_yaml", "starknet", "strum 0.25.0", "tokio", @@ -3587,6 +3588,19 @@ dependencies = [ "syn 2.0.66", ] +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap 2.6.0", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + [[package]] name = "sha1" version = "0.10.6" @@ -4453,6 +4467,12 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +[[package]] +name = "unsafe-libyaml" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" + [[package]] name = "untrusted" version = "0.9.0" diff --git a/Cargo.toml b/Cargo.toml index f0a4776..97de726 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,6 +39,7 @@ phf = { version = "0.11", features = ["macros"] } prometheus = "0.13.3" reqwest = { version = "0.11.22", features = ["json"] } serde = { version = "1.0.130", features = ["derive"] } +serde_yaml = "0.9.34" starknet = "0.11.0" strum = { version = "0.25.0", features = ["derive"] } tokio = { version = "1.36", features = ["full"] } diff --git a/src/config.rs b/src/config.rs index 59103d5..bcd1f2c 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,9 +1,10 @@ use std::{ - collections::HashMap, path::{Path, PathBuf}, str::FromStr, sync::Arc, time::{Duration, Instant} + collections::HashMap, fs::File, path::{Path, PathBuf}, str::FromStr, sync::Arc, time::{Duration, Instant} }; use alloy::{hex::FromHex, primitives::Address, providers::ProviderBuilder}; use arc_swap::{ArcSwap, Guard}; +use serde::Deserialize; use starknet::{ core::{ types::{BlockId, BlockTag, Felt, FunctionCall}, @@ -60,8 +61,8 @@ pub struct DataInfo { #[derive(Debug, Clone)] pub struct EvmConfig { - name: String, - pragma: PragmaContract + pub name: String, + pub pragma: PragmaContract } impl EvmConfig { @@ -79,6 +80,12 @@ impl EvmConfig { } } +#[derive(Debug, Deserialize)] +struct EvmChainConfig { + rpc_url: String, + contract_address: String, +} + #[derive(Debug, Clone)] #[allow(unused)] pub struct Config { @@ -87,6 +94,7 @@ pub struct Config { network: Network, indexer_url: String, evm_config: Vec, + feed_registry_address: Option } /// We are using `ArcSwap` as it allow us to replace the new `Config` with @@ -126,6 +134,27 @@ impl Config { .into_iter() .collect::>(); + let file = File::open(config_input.config_path).expect("cannot open config file"); + let config: HashMap = serde_yaml::from_reader(file).expect("failed to parse config"); + + let evm_config = config + .into_iter() + .filter_map(|(network_name, chain_config)| { + if !chain_config.contract_address.is_empty() { + match Url::parse(&chain_config.rpc_url) { + Ok(rpc_url) => Some(Ok(EvmConfig::new( + network_name, + chain_config.contract_address, + rpc_url, + ))), + Err(e) => Some(Err(format!("Invalid URL for {}: {}", network_name, e).into())), + } + } else { + None + } + }) + .collect::, Box>>().expect("failed to retrieve configs"); + Self { indexer_url, publishers, @@ -137,7 +166,8 @@ impl Config { vrf_address: config_input.vrf_address, publisher_registry_address, }, - evm_config: todo!(), + evm_config, + feed_registry_address: config_input.feed_registry_address, } } @@ -149,6 +179,14 @@ impl Config { let future_pairs = std::env::var("FUTURE_PAIRS").expect("FUTURE_PAIRS must be set"); let evm_config = std::env::var("EVM_CONFIG_PATH").expect("EVM_CONFIG_PATH must be set"); + let feed_registry_address = match network.starts_with("pragma") { + true => { + let env_var = std::env::var("FEED_REGISTRY_ADDRESS").expect("FEED_REGISTRY_ADDRESS must be set for pragma chains"); + Some(Felt::from_hex(env_var.as_str()).expect("failed to parse feed registry address")) + }, + false => None, + }; + Config::new(ConfigInput { network: NetworkName::from_str(&network).expect("Invalid network name"), oracle_address: Felt::from_hex_unchecked(&oracle_address), @@ -156,6 +194,7 @@ impl Config { spot_pairs: parse_pairs(&spot_pairs), future_pairs: parse_pairs(&future_pairs), config_path: PathBuf::from_str(&evm_config).expect("invalid evm config path"), + feed_registry_address, }) .await } @@ -191,6 +230,14 @@ impl Config { pub fn all_publishers(&self) -> &HashMap { &self.publishers } + + pub fn evm_configs(&self) -> &[EvmConfig] { + &self.evm_config + } + + pub fn feed_registry_address(&self) -> &Option{ + &self.feed_registry_address + } } #[derive(Debug, Clone)] @@ -201,6 +248,7 @@ pub struct ConfigInput { pub spot_pairs: Vec, pub future_pairs: Vec, pub config_path: PathBuf, + pub feed_registry_address: Option, } #[allow(unused)] diff --git a/src/constants.rs b/src/constants.rs index e3216ee..038d35a 100644 --- a/src/constants.rs +++ b/src/constants.rs @@ -207,6 +207,14 @@ lazy_static! { &["network"] ) .unwrap(); + pub static ref EVM_TIME_SINCE_LAST_FEED_UPDATE: GaugeVec = register_gauge_vec!( + opts!( + "evm_time_since_last_feed_update", + "Time in seconds that the oldest feed update has been performed on a specific network." + ), + &["chain", "feed_id"] + ) + .unwrap(); } #[allow(unused)] diff --git a/src/error.rs b/src/error.rs index 59756b4..9baa475 100644 --- a/src/error.rs +++ b/src/error.rs @@ -12,6 +12,7 @@ pub enum MonitoringError { OnChain(String), Provider(ProviderError), InvalidTimestamp(u64), + EVM(String), } impl StdError for MonitoringError {} @@ -27,6 +28,7 @@ impl fmt::Display for MonitoringError { MonitoringError::OnChain(e) => write!(f, "OnChain Error: {}", e), MonitoringError::Provider(e) => write!(f, "Provider Error: {}", e), MonitoringError::InvalidTimestamp(e) => write!(f, "Invalid Timestamp: {}", e), + MonitoringError::EVM(e) => write!(f, "EVM Monitoring Error: {}", e), } } } diff --git a/src/main.rs b/src/main.rs index 3550282..ad23a3e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -21,6 +21,8 @@ mod constants; mod types; // Utils mod utils; +// Evm Config utils +mod evm; #[cfg(test)] mod tests; @@ -275,3 +277,18 @@ pub(crate) async fn vrf_monitor(pool: Pool = vec![tokio::spawn(Box::pin(processing::evm::check_feed_update_state()))]; + + let results: Vec<_> = futures::future::join_all(tasks).await; + log_tasks_results("EVM", results); + } +} \ No newline at end of file diff --git a/src/processing/evm.rs b/src/processing/evm.rs new file mode 100644 index 0000000..894392c --- /dev/null +++ b/src/processing/evm.rs @@ -0,0 +1,91 @@ +use alloy::hex::FromHex; +use alloy::primitives::FixedBytes; +use num_bigint::BigInt; +use starknet::core::types::{BlockId, BlockTag, FunctionCall}; +use starknet::macros::selector; +use starknet::providers::Provider; +use bigdecimal::ToPrimitive; + +use crate::constants::EVM_TIME_SINCE_LAST_FEED_UPDATE; +use crate::{config::get_config, error::MonitoringError}; + + +// /// Try to construct a FeedType from the provided FeedTypeId. +// fn from_id(id: FeedTypeId) -> Result { +// let main_type = (id & FEED_TYPE_MAIN_MASK) / FEED_TYPE_MAIN_SHIFT; +// let variant = id & FEED_TYPE_VARIANT_MASK; + +// match main_type { +// 0 => match variant { +// 0 => Result::Ok(FeedType::Unique(UniqueVariant::SpotMedian)), +// 1 => Result::Ok(FeedType::Unique(UniqueVariant::PerpMedian)), +// 2 => Result::Ok(FeedType::Unique(UniqueVariant::SpotMean)), +// _ => Result::Err(FeedTypeError::IdConversion('Unknown feed type variant')), +// }, +// 1 => match variant { +// 0 => Result::Ok(FeedType::Twap(TwapVariant::SpotMedianOneDay)), +// _ => Result::Err(FeedTypeError::IdConversion('Unknown feed type variant')), +// }, +// 2 => match variant { +// 0 => Result::Ok(FeedType::RealizedVolatility(RealizedVolatilityVariant::OneWeek)), +// _ => Result::Err(FeedTypeError::IdConversion('Unknown feed type variant')), +// }, +// _ => Result::Err(FeedTypeError::IdConversion('Unknown feed type')), +// } +// } + + +pub async fn check_feed_update_state( +) -> Result<(), MonitoringError> { + let config = get_config(None).await; + let evm_config = config.evm_configs(); + let feed_registry_address = config.feed_registry_address().expect("failed to retrieve feed registry address"); + let client = &config.network().provider; + let mut feed_list = client.call(FunctionCall{ contract_address: feed_registry_address, entry_point_selector: selector!("get_all_feeds"), calldata: vec![] }, BlockId::Tag(BlockTag::Pending)).await.map_err(|e| MonitoringError::EVM(e.to_string()))?; + feed_list.remove(0); + + for chain in evm_config.iter() { + let fl = feed_list.clone(); + for feed in fl.into_iter() { + let main_type = ((feed.to_bigint() & BigInt::from(65280)) / BigInt::from(256)).to_u64().expect("invalid main type"); + let variant = (feed.to_bigint() & BigInt::from(255)).to_u64().expect("invalid variant"); + let feed_id_as_calldata: FixedBytes<32> = alloy::sol_types::private::FixedBytes::from_hex(feed.to_hex_string()).expect("failed to parse felt id"); + match main_type { + 0 => { + match variant { + 0 => { + let result = chain.pragma.spotMedianFeeds(feed_id_as_calldata).call().await.expect("failed to retrieve spot median feed"); + EVM_TIME_SINCE_LAST_FEED_UPDATE.with_label_values(&[chain.name.as_str(), feed.to_hex_string().as_str()]).set(result.metadata.timestamp as f64); + }, + 1 => { + let result = chain.pragma.perpFeeds(feed_id_as_calldata).call().await.expect("failed to retrieve spot perp feed"); + EVM_TIME_SINCE_LAST_FEED_UPDATE.with_label_values(&[chain.name.as_str(), feed.to_hex_string().as_str()]).set(result.metadata.timestamp as f64); + }, + va => return Err(MonitoringError::EVM(format!("unknown variant {va} for main type Unique"))), + } + }, + 1 =>{ + match variant { + 0 => { + let result = chain.pragma.twapFeeds(feed_id_as_calldata).call().await.expect("failed to retrieve twap feed"); + EVM_TIME_SINCE_LAST_FEED_UPDATE.with_label_values(&[chain.name.as_str(), feed.to_hex_string().as_str()]).set(result.metadata.timestamp as f64); + }, + va => return Err(MonitoringError::EVM(format!("unknown variant {va} for main type Twap"))), + } + }, + 2 =>{ + match variant { + 0 => { + let result = chain.pragma.twapFeeds(feed_id_as_calldata).call().await.expect("failed to retrieve twap feed"); + EVM_TIME_SINCE_LAST_FEED_UPDATE.with_label_values(&[chain.name.as_str(), feed.to_hex_string().as_str()]).set(result.metadata.timestamp as f64); + }, + va => return Err(MonitoringError::EVM(format!("unknown variant {va} for main type Realized Volatility"))), + } + }, + va =>{ return Err(MonitoringError::EVM(format!("unknown variant {va} for main type Unique")))}, + }; + } + } + + Ok(()) +} \ No newline at end of file diff --git a/src/processing/mod.rs b/src/processing/mod.rs index 674ec7e..acf2710 100644 --- a/src/processing/mod.rs +++ b/src/processing/mod.rs @@ -3,3 +3,4 @@ pub mod common; pub mod future; pub mod spot; pub mod vrf; +pub mod evm; diff --git a/src/tests/common/fixtures.rs b/src/tests/common/fixtures.rs index 82a5ac3..973da7b 100644 --- a/src/tests/common/fixtures.rs +++ b/src/tests/common/fixtures.rs @@ -32,6 +32,7 @@ pub async fn test_config() -> Guard> { spot_pairs: vec!["ETH/USD".to_string(), "BTC/USD".to_string()], future_pairs: vec!["ETH/USD".to_string(), "BTC/USD".to_string()], config_path: "".into(), + feed_registry_address: None, }) .await; get_config(None).await From a3579912092756eb6aa5a23672cd1a1b69f21473 Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Thu, 10 Oct 2024 17:53:31 +0200 Subject: [PATCH 03/31] lint --- src/config.rs | 73 +++++++++++++--------- src/evm/pragma.rs | 15 ++++- src/lib.rs | 2 +- src/main.rs | 36 ++++++----- src/processing/evm.rs | 139 +++++++++++++++++++++++++++++++----------- src/processing/mod.rs | 2 +- 6 files changed, 179 insertions(+), 88 deletions(-) diff --git a/src/config.rs b/src/config.rs index d16de86..f5222bf 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,5 +1,10 @@ use std::{ - collections::HashMap, fs::File, path::{Path, PathBuf}, str::FromStr, sync::Arc, time::{Duration, Instant} + collections::HashMap, + fs::File, + path::{Path, PathBuf}, + str::FromStr, + sync::Arc, + time::{Duration, Instant}, }; use alloy::{hex::FromHex, primitives::Address, providers::ProviderBuilder}; @@ -20,7 +25,9 @@ use url::Url; use crate::{ constants::{ CONFIG_UPDATE_INTERVAL, LONG_TAIL_ASSETS, LONG_TAIL_ASSET_THRESHOLD, LOW_SOURCES_THRESHOLD, - }, evm::pragma::{Pragma, PragmaContract}, utils::{is_long_tail_asset, try_felt_to_u32} + }, + evm::pragma::{Pragma, PragmaContract}, + utils::{is_long_tail_asset, try_felt_to_u32}, }; #[derive(Debug, Clone, EnumString, IntoStaticStr)] @@ -60,20 +67,22 @@ pub struct DataInfo { pub table_name: String, } - #[derive(Debug, Clone)] pub struct EvmConfig { pub name: String, - pub pragma: PragmaContract + pub pragma: PragmaContract, } impl EvmConfig { pub fn new(network_name: String, mut contract_adress: String, rpc_url: Url) -> Self { - let provider = ProviderBuilder::new().with_recommended_fillers().on_http(rpc_url); + let provider = ProviderBuilder::new() + .with_recommended_fillers() + .on_http(rpc_url); if contract_adress.starts_with("0x") { contract_adress = contract_adress.replace("0x", ""); } - let address = Address::from_hex(contract_adress).expect("Invalid Pragma Address specified. Make sure it is an hexadecimal address."); + let address = Address::from_hex(contract_adress) + .expect("Invalid Pragma Address specified. Make sure it is an hexadecimal address."); let pragma = Pragma::new(address, provider); Self { name: network_name, @@ -96,7 +105,7 @@ pub struct Config { network: Network, indexer_url: String, evm_config: Vec, - feed_registry_address: Option + feed_registry_address: Option, } /// We are using `ArcSwap` as it allow us to replace the new `Config` with @@ -137,25 +146,29 @@ impl Config { .collect::>(); let file = File::open(config_input.config_path).expect("cannot open config file"); - let config: HashMap = serde_yaml::from_reader(file).expect("failed to parse config"); + let config: HashMap = + serde_yaml::from_reader(file).expect("failed to parse config"); let evm_config = config - .into_iter() - .filter_map(|(network_name, chain_config)| { - if !chain_config.contract_address.is_empty() { - match Url::parse(&chain_config.rpc_url) { - Ok(rpc_url) => Some(Ok(EvmConfig::new( - network_name, - chain_config.contract_address, - rpc_url, - ))), - Err(e) => Some(Err(format!("Invalid URL for {}: {}", network_name, e).into())), + .into_iter() + .filter_map(|(network_name, chain_config)| { + if !chain_config.contract_address.is_empty() { + match Url::parse(&chain_config.rpc_url) { + Ok(rpc_url) => Some(Ok(EvmConfig::new( + network_name, + chain_config.contract_address, + rpc_url, + ))), + Err(e) => Some(Err( + format!("Invalid URL for {}: {}", network_name, e).into() + )), + } + } else { + None } - } else { - None - } - }) - .collect::, Box>>().expect("failed to retrieve configs"); + }) + .collect::, Box>>() + .expect("failed to retrieve configs"); Self { indexer_url, @@ -183,9 +196,13 @@ impl Config { let feed_registry_address = match network.starts_with("pragma") { true => { - let env_var = std::env::var("FEED_REGISTRY_ADDRESS").expect("FEED_REGISTRY_ADDRESS must be set for pragma chains"); - Some(Felt::from_hex(env_var.as_str()).expect("failed to parse feed registry address")) - }, + let env_var = std::env::var("FEED_REGISTRY_ADDRESS") + .expect("FEED_REGISTRY_ADDRESS must be set for pragma chains"); + Some( + Felt::from_hex(env_var.as_str()) + .expect("failed to parse feed registry address"), + ) + } false => None, }; @@ -238,10 +255,10 @@ impl Config { &self.evm_config } - pub fn feed_registry_address(&self) -> &Option{ + pub fn feed_registry_address(&self) -> &Option { &self.feed_registry_address } - + /// Check if the configuration is set for a Pragma Chain pub fn is_pragma_chain(&self) -> bool { matches!(self.network.name, NetworkName::PragmaDevnet) diff --git a/src/evm/pragma.rs b/src/evm/pragma.rs index 2d4105a..13032c1 100644 --- a/src/evm/pragma.rs +++ b/src/evm/pragma.rs @@ -1,8 +1,8 @@ -use alloy::{providers::fillers::BlobGasFiller, sol}; use alloy::network::Ethereum; use alloy::providers::fillers::{ChainIdFiller, FillProvider, GasFiller, JoinFill, NonceFiller}; use alloy::providers::{Identity, RootProvider}; use alloy::transports::http::{Client, Http}; +use alloy::{providers::fillers::BlobGasFiller, sol}; sol!( #[allow(missing_docs)] @@ -11,4 +11,15 @@ sol!( "abi/Pragma.json" ); -pub type PragmaContract = Pragma::PragmaInstance, FillProvider>>>, RootProvider>, Http, Ethereum>>; +pub type PragmaContract = Pragma::PragmaInstance< + Http, + FillProvider< + JoinFill< + Identity, + JoinFill>>, + >, + RootProvider>, + Http, + Ethereum, + >, +>; diff --git a/src/lib.rs b/src/lib.rs index 732f0f6..6f734d8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,7 +1,7 @@ pub(crate) mod config; pub(crate) mod constants; +pub(crate) mod evm; pub mod models; pub mod schema; pub mod types; pub(crate) mod utils; -pub(crate) mod evm; diff --git a/src/main.rs b/src/main.rs index 15d435a..37c8d02 100644 --- a/src/main.rs +++ b/src/main.rs @@ -48,7 +48,6 @@ struct MonitoringTask { handle: JoinHandle<()>, } - #[tokio::main] async fn main() { env_logger::init(); @@ -299,8 +298,6 @@ pub(crate) async fn vrf_monitor(pool: Pool>, wait_for_syncing: bool, @@ -309,28 +306,29 @@ pub(crate) async fn hyperlane_dispatch_monitor( loop { interval.tick().await; // Wait for the next tick - // Skip if indexer is still syncing + // Skip if indexer is still syncing if wait_for_syncing && !indexers_are_synced("pragma_devnet_dispatch_event").await { - continue; - } - - let tasks: Vec<_> = vec![tokio::spawn(Box::pin( - processing::dispatch::process_dispatch_events(pool.clone()), - ))]; - let results: Vec<_> = futures::future::join_all(tasks).await; - log_tasks_results("Dispatch", results); + continue; } + + let tasks: Vec<_> = vec![tokio::spawn(Box::pin( + processing::dispatch::process_dispatch_events(pool.clone()), + ))]; + let results: Vec<_> = futures::future::join_all(tasks).await; + log_tasks_results("Dispatch", results); } +} - pub(crate) async fn evm_monitor() { - log::info!("[EVM] Monitoring EVM.."); - let mut interval = interval(Duration::from_secs(30)); - loop { - interval.tick().await; // Wait for the next tick - let tasks: Vec<_> = vec![tokio::spawn(Box::pin(processing::evm::check_feed_update_state()))]; +pub(crate) async fn evm_monitor() { + log::info!("[EVM] Monitoring EVM.."); + let mut interval = interval(Duration::from_secs(30)); + loop { + interval.tick().await; // Wait for the next tick + let tasks: Vec<_> = vec![tokio::spawn(Box::pin( + processing::evm::check_feed_update_state(), + ))]; let results: Vec<_> = futures::future::join_all(tasks).await; log_tasks_results("EVM", results); } } - diff --git a/src/processing/evm.rs b/src/processing/evm.rs index 894392c..eb6e248 100644 --- a/src/processing/evm.rs +++ b/src/processing/evm.rs @@ -1,15 +1,14 @@ use alloy::hex::FromHex; use alloy::primitives::FixedBytes; +use bigdecimal::ToPrimitive; use num_bigint::BigInt; use starknet::core::types::{BlockId, BlockTag, FunctionCall}; use starknet::macros::selector; use starknet::providers::Provider; -use bigdecimal::ToPrimitive; use crate::constants::EVM_TIME_SINCE_LAST_FEED_UPDATE; use crate::{config::get_config, error::MonitoringError}; - // /// Try to construct a FeedType from the provided FeedTypeId. // fn from_id(id: FeedTypeId) -> Result { // let main_type = (id & FEED_TYPE_MAIN_MASK) / FEED_TYPE_MAIN_SHIFT; @@ -34,58 +33,124 @@ use crate::{config::get_config, error::MonitoringError}; // } // } - -pub async fn check_feed_update_state( -) -> Result<(), MonitoringError> { +pub async fn check_feed_update_state() -> Result<(), MonitoringError> { let config = get_config(None).await; let evm_config = config.evm_configs(); - let feed_registry_address = config.feed_registry_address().expect("failed to retrieve feed registry address"); + let feed_registry_address = config + .feed_registry_address() + .expect("failed to retrieve feed registry address"); let client = &config.network().provider; - let mut feed_list = client.call(FunctionCall{ contract_address: feed_registry_address, entry_point_selector: selector!("get_all_feeds"), calldata: vec![] }, BlockId::Tag(BlockTag::Pending)).await.map_err(|e| MonitoringError::EVM(e.to_string()))?; + let mut feed_list = client + .call( + FunctionCall { + contract_address: feed_registry_address, + entry_point_selector: selector!("get_all_feeds"), + calldata: vec![], + }, + BlockId::Tag(BlockTag::Pending), + ) + .await + .map_err(|e| MonitoringError::EVM(e.to_string()))?; feed_list.remove(0); for chain in evm_config.iter() { let fl = feed_list.clone(); for feed in fl.into_iter() { - let main_type = ((feed.to_bigint() & BigInt::from(65280)) / BigInt::from(256)).to_u64().expect("invalid main type"); - let variant = (feed.to_bigint() & BigInt::from(255)).to_u64().expect("invalid variant"); - let feed_id_as_calldata: FixedBytes<32> = alloy::sol_types::private::FixedBytes::from_hex(feed.to_hex_string()).expect("failed to parse felt id"); + let main_type = ((feed.to_bigint() & BigInt::from(65280)) / BigInt::from(256)) + .to_u64() + .expect("invalid main type"); + let variant = (feed.to_bigint() & BigInt::from(255)) + .to_u64() + .expect("invalid variant"); + let feed_id_as_calldata: FixedBytes<32> = + alloy::sol_types::private::FixedBytes::from_hex(feed.to_hex_string()) + .expect("failed to parse felt id"); match main_type { - 0 => { - match variant { - 0 => { - let result = chain.pragma.spotMedianFeeds(feed_id_as_calldata).call().await.expect("failed to retrieve spot median feed"); - EVM_TIME_SINCE_LAST_FEED_UPDATE.with_label_values(&[chain.name.as_str(), feed.to_hex_string().as_str()]).set(result.metadata.timestamp as f64); - }, - 1 => { - let result = chain.pragma.perpFeeds(feed_id_as_calldata).call().await.expect("failed to retrieve spot perp feed"); - EVM_TIME_SINCE_LAST_FEED_UPDATE.with_label_values(&[chain.name.as_str(), feed.to_hex_string().as_str()]).set(result.metadata.timestamp as f64); - }, - va => return Err(MonitoringError::EVM(format!("unknown variant {va} for main type Unique"))), + 0 => match variant { + 0 => { + let result = chain + .pragma + .spotMedianFeeds(feed_id_as_calldata) + .call() + .await + .expect("failed to retrieve spot median feed"); + EVM_TIME_SINCE_LAST_FEED_UPDATE + .with_label_values(&[ + chain.name.as_str(), + feed.to_hex_string().as_str(), + ]) + .set(result.metadata.timestamp as f64); + } + 1 => { + let result = chain + .pragma + .perpFeeds(feed_id_as_calldata) + .call() + .await + .expect("failed to retrieve spot perp feed"); + EVM_TIME_SINCE_LAST_FEED_UPDATE + .with_label_values(&[ + chain.name.as_str(), + feed.to_hex_string().as_str(), + ]) + .set(result.metadata.timestamp as f64); + } + va => { + return Err(MonitoringError::EVM(format!( + "unknown variant {va} for main type Unique" + ))) } }, - 1 =>{ - match variant { - 0 => { - let result = chain.pragma.twapFeeds(feed_id_as_calldata).call().await.expect("failed to retrieve twap feed"); - EVM_TIME_SINCE_LAST_FEED_UPDATE.with_label_values(&[chain.name.as_str(), feed.to_hex_string().as_str()]).set(result.metadata.timestamp as f64); - }, - va => return Err(MonitoringError::EVM(format!("unknown variant {va} for main type Twap"))), + 1 => match variant { + 0 => { + let result = chain + .pragma + .twapFeeds(feed_id_as_calldata) + .call() + .await + .expect("failed to retrieve twap feed"); + EVM_TIME_SINCE_LAST_FEED_UPDATE + .with_label_values(&[ + chain.name.as_str(), + feed.to_hex_string().as_str(), + ]) + .set(result.metadata.timestamp as f64); + } + va => { + return Err(MonitoringError::EVM(format!( + "unknown variant {va} for main type Twap" + ))) } }, - 2 =>{ - match variant { - 0 => { - let result = chain.pragma.twapFeeds(feed_id_as_calldata).call().await.expect("failed to retrieve twap feed"); - EVM_TIME_SINCE_LAST_FEED_UPDATE.with_label_values(&[chain.name.as_str(), feed.to_hex_string().as_str()]).set(result.metadata.timestamp as f64); - }, - va => return Err(MonitoringError::EVM(format!("unknown variant {va} for main type Realized Volatility"))), + 2 => match variant { + 0 => { + let result = chain + .pragma + .twapFeeds(feed_id_as_calldata) + .call() + .await + .expect("failed to retrieve twap feed"); + EVM_TIME_SINCE_LAST_FEED_UPDATE + .with_label_values(&[ + chain.name.as_str(), + feed.to_hex_string().as_str(), + ]) + .set(result.metadata.timestamp as f64); + } + va => { + return Err(MonitoringError::EVM(format!( + "unknown variant {va} for main type Realized Volatility" + ))) } }, - va =>{ return Err(MonitoringError::EVM(format!("unknown variant {va} for main type Unique")))}, + va => { + return Err(MonitoringError::EVM(format!( + "unknown variant {va} for main type Unique" + ))) + } }; } } Ok(()) -} \ No newline at end of file +} diff --git a/src/processing/mod.rs b/src/processing/mod.rs index 7b73182..e01175d 100644 --- a/src/processing/mod.rs +++ b/src/processing/mod.rs @@ -1,7 +1,7 @@ pub mod api; pub mod common; pub mod dispatch; +pub mod evm; pub mod future; pub mod spot; pub mod vrf; -pub mod evm; From f3dd8efd4cf5d905981f8b11914a51f1dc8c6ec6 Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Thu, 10 Oct 2024 17:54:26 +0200 Subject: [PATCH 04/31] Update main.rs --- src/main.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main.rs b/src/main.rs index 37c8d02..2e403aa 100644 --- a/src/main.rs +++ b/src/main.rs @@ -100,6 +100,10 @@ async fn spawn_monitoring_tasks( name: "Hyperlane Dispatches Monitoring".to_string(), handle: tokio::spawn(hyperlane_dispatch_monitor(pool.clone(), true)), }); + tasks.push(MonitoringTask { + name: "EVM Chains Monitoring".to_string(), + handle: tokio::spawn(evm_monitor()), + }); } else { tasks.push(MonitoringTask { name: "API Monitoring".to_string(), From 95fbaab8c62c9085a253dad32b04f7bc206b63ca Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Thu, 10 Oct 2024 17:58:21 +0200 Subject: [PATCH 05/31] lint --- Cargo.toml | 2 +- abi/Pragma.json | 10627 +++++++++++++++++++++++++++++++++++++++- evm_config.yaml | 2 +- src/config.rs | 3 +- src/error.rs | 4 +- src/main.rs | 1 - src/processing/evm.rs | 10 +- 7 files changed, 10637 insertions(+), 12 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 97de726..defec7c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -alloy = {version = "0.4.2", features = ["full","json-rpc","rpc-client",]} +alloy = { version = "0.4.2", features = ["full", "json-rpc", "rpc-client"] } arc-swap = "1.6.0" axum = { version = "0.6", features = ["macros", "multipart"] } axum-macros = "0.3" diff --git a/abi/Pragma.json b/abi/Pragma.json index 2fb0af9..fc6267c 100644 --- a/abi/Pragma.json +++ b/abi/Pragma.json @@ -1 +1,10626 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"_isValidDataSource","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"dataFeedExists","inputs":[{"name":"id","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"getOptionsNoOlderThan","inputs":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"age","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"data","type":"tuple","internalType":"struct Options","components":[{"name":"metadata","type":"tuple","internalType":"struct Metadata","components":[{"name":"feedId","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"numberOfSources","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"}]},{"name":"strikePrice","type":"uint256","internalType":"uint256"},{"name":"impliedVolatility","type":"uint256","internalType":"uint256"},{"name":"timeToExpiry","type":"uint256","internalType":"uint256"},{"name":"isCall","type":"bool","internalType":"bool"},{"name":"underlyingPrice","type":"uint256","internalType":"uint256"},{"name":"optionPrice","type":"uint256","internalType":"uint256"},{"name":"delta","type":"int256","internalType":"int256"},{"name":"gamma","type":"int256","internalType":"int256"},{"name":"vega","type":"int256","internalType":"int256"},{"name":"theta","type":"int256","internalType":"int256"},{"name":"rho","type":"int256","internalType":"int256"}]}],"stateMutability":"view"},{"type":"function","name":"getPerpNoOlderThan","inputs":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"age","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"data","type":"tuple","internalType":"struct Perp","components":[{"name":"metadata","type":"tuple","internalType":"struct Metadata","components":[{"name":"feedId","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"numberOfSources","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"}]},{"name":"markPrice","type":"uint256","internalType":"uint256"},{"name":"fundingRate","type":"uint256","internalType":"uint256"},{"name":"openInterest","type":"uint256","internalType":"uint256"},{"name":"volume","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"getRealizedVolatilityNoOlderThan","inputs":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"age","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"data","type":"tuple","internalType":"struct RealizedVolatility","components":[{"name":"metadata","type":"tuple","internalType":"struct Metadata","components":[{"name":"feedId","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"numberOfSources","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"}]},{"name":"volatility","type":"uint256","internalType":"uint256"},{"name":"timePeriod","type":"uint256","internalType":"uint256"},{"name":"startPrice","type":"uint256","internalType":"uint256"},{"name":"endPrice","type":"uint256","internalType":"uint256"},{"name":"highPrice","type":"uint256","internalType":"uint256"},{"name":"lowPrice","type":"uint256","internalType":"uint256"},{"name":"numberOfDataPoints","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"getSpotMedianNoOlderThan","inputs":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"age","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"data","type":"tuple","internalType":"struct SpotMedian","components":[{"name":"metadata","type":"tuple","internalType":"struct Metadata","components":[{"name":"feedId","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"numberOfSources","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"}]},{"name":"price","type":"uint256","internalType":"uint256"},{"name":"volume","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"getTwapNoOlderThan","inputs":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"age","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"data","type":"tuple","internalType":"struct TWAP","components":[{"name":"metadata","type":"tuple","internalType":"struct Metadata","components":[{"name":"feedId","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"numberOfSources","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"}]},{"name":"twapPrice","type":"uint256","internalType":"uint256"},{"name":"timePeriod","type":"uint256","internalType":"uint256"},{"name":"startPrice","type":"uint256","internalType":"uint256"},{"name":"endPrice","type":"uint256","internalType":"uint256"},{"name":"totalVolume","type":"uint256","internalType":"uint256"},{"name":"numberOfDataPoints","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"getUpdateFee","inputs":[{"name":"updateData","type":"bytes[]","internalType":"bytes[]"}],"outputs":[{"name":"feeAmount","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getValidTimePeriod","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"hyperlane","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IHyperlane"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_hyperlane","type":"address","internalType":"address"},{"name":"initial_owner","type":"address","internalType":"address"},{"name":"_dataSourceEmitterChainIds","type":"uint16[]","internalType":"uint16[]"},{"name":"_dataSourceEmitterAddresses","type":"bytes32[]","internalType":"bytes32[]"},{"name":"_validTimePeriodSeconds","type":"uint256","internalType":"uint256"},{"name":"_singleUpdateFeeInWei","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isValidDataSource","inputs":[{"name":"chainId","type":"uint16","internalType":"uint16"},{"name":"emitterAddress","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"optionsFeeds","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"metadata","type":"tuple","internalType":"struct Metadata","components":[{"name":"feedId","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"numberOfSources","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"}]},{"name":"strikePrice","type":"uint256","internalType":"uint256"},{"name":"impliedVolatility","type":"uint256","internalType":"uint256"},{"name":"timeToExpiry","type":"uint256","internalType":"uint256"},{"name":"isCall","type":"bool","internalType":"bool"},{"name":"underlyingPrice","type":"uint256","internalType":"uint256"},{"name":"optionPrice","type":"uint256","internalType":"uint256"},{"name":"delta","type":"int256","internalType":"int256"},{"name":"gamma","type":"int256","internalType":"int256"},{"name":"vega","type":"int256","internalType":"int256"},{"name":"theta","type":"int256","internalType":"int256"},{"name":"rho","type":"int256","internalType":"int256"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"perpFeeds","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"metadata","type":"tuple","internalType":"struct Metadata","components":[{"name":"feedId","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"numberOfSources","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"}]},{"name":"markPrice","type":"uint256","internalType":"uint256"},{"name":"fundingRate","type":"uint256","internalType":"uint256"},{"name":"openInterest","type":"uint256","internalType":"uint256"},{"name":"volume","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rvFeeds","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"metadata","type":"tuple","internalType":"struct Metadata","components":[{"name":"feedId","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"numberOfSources","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"}]},{"name":"volatility","type":"uint256","internalType":"uint256"},{"name":"timePeriod","type":"uint256","internalType":"uint256"},{"name":"startPrice","type":"uint256","internalType":"uint256"},{"name":"endPrice","type":"uint256","internalType":"uint256"},{"name":"highPrice","type":"uint256","internalType":"uint256"},{"name":"lowPrice","type":"uint256","internalType":"uint256"},{"name":"numberOfDataPoints","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"singleUpdateFeeInWei","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"spotMedianFeeds","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"metadata","type":"tuple","internalType":"struct Metadata","components":[{"name":"feedId","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"numberOfSources","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"}]},{"name":"price","type":"uint256","internalType":"uint256"},{"name":"volume","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"twapFeeds","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"metadata","type":"tuple","internalType":"struct Metadata","components":[{"name":"feedId","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"numberOfSources","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"}]},{"name":"twapPrice","type":"uint256","internalType":"uint256"},{"name":"timePeriod","type":"uint256","internalType":"uint256"},{"name":"startPrice","type":"uint256","internalType":"uint256"},{"name":"endPrice","type":"uint256","internalType":"uint256"},{"name":"totalVolume","type":"uint256","internalType":"uint256"},{"name":"numberOfDataPoints","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"updateDataFeeds","inputs":[{"name":"updateData","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"validTimePeriodSeconds","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"withdraw_funds","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"OptionsUpdate","inputs":[{"name":"feedId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"publishTime","type":"uint64","indexed":false,"internalType":"uint64"},{"name":"options","type":"tuple","indexed":false,"internalType":"struct Options","components":[{"name":"metadata","type":"tuple","internalType":"struct Metadata","components":[{"name":"feedId","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"numberOfSources","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"}]},{"name":"strikePrice","type":"uint256","internalType":"uint256"},{"name":"impliedVolatility","type":"uint256","internalType":"uint256"},{"name":"timeToExpiry","type":"uint256","internalType":"uint256"},{"name":"isCall","type":"bool","internalType":"bool"},{"name":"underlyingPrice","type":"uint256","internalType":"uint256"},{"name":"optionPrice","type":"uint256","internalType":"uint256"},{"name":"delta","type":"int256","internalType":"int256"},{"name":"gamma","type":"int256","internalType":"int256"},{"name":"vega","type":"int256","internalType":"int256"},{"name":"theta","type":"int256","internalType":"int256"},{"name":"rho","type":"int256","internalType":"int256"}]}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"PerpUpdate","inputs":[{"name":"feedId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"publishTime","type":"uint64","indexed":false,"internalType":"uint64"},{"name":"perp","type":"tuple","indexed":false,"internalType":"struct Perp","components":[{"name":"metadata","type":"tuple","internalType":"struct Metadata","components":[{"name":"feedId","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"numberOfSources","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"}]},{"name":"markPrice","type":"uint256","internalType":"uint256"},{"name":"fundingRate","type":"uint256","internalType":"uint256"},{"name":"openInterest","type":"uint256","internalType":"uint256"},{"name":"volume","type":"uint256","internalType":"uint256"}]}],"anonymous":false},{"type":"event","name":"RealizedVolatilityUpdate","inputs":[{"name":"feedId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"publishTime","type":"uint64","indexed":false,"internalType":"uint64"},{"name":"realizedVolatility","type":"tuple","indexed":false,"internalType":"struct RealizedVolatility","components":[{"name":"metadata","type":"tuple","internalType":"struct Metadata","components":[{"name":"feedId","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"numberOfSources","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"}]},{"name":"volatility","type":"uint256","internalType":"uint256"},{"name":"timePeriod","type":"uint256","internalType":"uint256"},{"name":"startPrice","type":"uint256","internalType":"uint256"},{"name":"endPrice","type":"uint256","internalType":"uint256"},{"name":"highPrice","type":"uint256","internalType":"uint256"},{"name":"lowPrice","type":"uint256","internalType":"uint256"},{"name":"numberOfDataPoints","type":"uint256","internalType":"uint256"}]}],"anonymous":false},{"type":"event","name":"SpotMedianUpdate","inputs":[{"name":"feedId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"publishTime","type":"uint64","indexed":false,"internalType":"uint64"},{"name":"spotMedian","type":"tuple","indexed":false,"internalType":"struct SpotMedian","components":[{"name":"metadata","type":"tuple","internalType":"struct Metadata","components":[{"name":"feedId","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"numberOfSources","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"}]},{"name":"price","type":"uint256","internalType":"uint256"},{"name":"volume","type":"uint256","internalType":"uint256"}]}],"anonymous":false},{"type":"event","name":"TWAPUpdate","inputs":[{"name":"feedId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"publishTime","type":"uint64","indexed":false,"internalType":"uint64"},{"name":"twap","type":"tuple","indexed":false,"internalType":"struct TWAP","components":[{"name":"metadata","type":"tuple","internalType":"struct Metadata","components":[{"name":"feedId","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"numberOfSources","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"}]},{"name":"twapPrice","type":"uint256","internalType":"uint256"},{"name":"timePeriod","type":"uint256","internalType":"uint256"},{"name":"startPrice","type":"uint256","internalType":"uint256"},{"name":"endPrice","type":"uint256","internalType":"uint256"},{"name":"totalVolume","type":"uint256","internalType":"uint256"},{"name":"numberOfDataPoints","type":"uint256","internalType":"uint256"}]}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"DataNotFound","inputs":[]},{"type":"error","name":"DataStale","inputs":[]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"FailedCall","inputs":[]},{"type":"error","name":"InsufficientFee","inputs":[]},{"type":"error","name":"InvalidDataFeedType","inputs":[]},{"type":"error","name":"InvalidHyperlaneCheckpointRoot","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"InvalidUpdateData","inputs":[]},{"type":"error","name":"InvalidUpdateDataSource","inputs":[]},{"type":"error","name":"InvalidVersion","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]}],"bytecode":{"object":"0x60a080604052346100e857306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c166100d9576002600160401b03196001600160401b03821601610073575b60405161327c90816100ed82396080518181816107e4015261090e0152f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80610054565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c8063043cc783146101cf5780630e8fd1ba146101ca5780630f01cb51146101c557806332bb41d3146101c05780633a612c32146101bb578063437209a7146101b657806348b6404d146101b157806349c398a4146101ac5780634f1ef286146101a757806352d1902d146101a257806354fd4d501461019d5780635d2c53a7146101985780636306642214610193578063715018a61461018e5780637cfa33dd146101895780638da5cb5b14610184578063ad3cb1cc1461017f578063bdf6afa41461017a578063c12fd47314610175578063c6ac557c14610170578063cb718a9b14610157578063cf8e17bb1461016b578063d47eed4514610166578063d58a8f6d14610161578063d5d89eaf1461015c578063e18910a314610157578063e29ea30f146101525763f2fde38b1461014d575f80fd5b6113b3565b61129e565b610f01565b611132565b611029565b61100f565b610f5f565b610e9c565b610e25565b610cee565b610c49565b610c15565b610b57565b610aab565b610a84565b6109bc565b61097d565b6108fc565b610795565b610646565b6105ce565b6105a3565b61051b565b61043d565b6103dd565b6103b5565b610362565b634e487b7160e01b5f52604160045260245ffd5b608081019081106001600160401b0382111761020357604052565b6101d4565b606081019081106001600160401b0382111761020357604052565b60e081019081106001600160401b0382111761020357604052565b60a081019081106001600160401b0382111761020357604052565b61010081019081106001600160401b0382111761020357604052565b61018081019081106001600160401b0382111761020357604052565b60c081019081106001600160401b0382111761020357604052565b90601f801991011681019081106001600160401b0382111761020357604052565b604051906102dd610100836102ac565b565b604051906102dd610180836102ac565b906040516102fc816101e8565b606060ff600183958054855201546001600160401b038116602085015261ffff8160401c16604085015260501c16910152565b60ff60608092805185526001600160401b03602082015116602086015261ffff6040820151166040860152015116910152565b346103b15760203660031901126103b1576004355f52600260205260c060405f2061038c816102ef565b9060036002820154910154906103a5604051809461032f565b608083015260a0820152f35b5f80fd5b346103b15760203660031901126103b15760206103d36004356113fa565b6040519015158152f35b346103b15760203660031901126103b1576004355f526001602052602060ff60405f2054166040519015158152f35b604060a09161041c84825161032f565b602081015160808501520151910152565b60c0810192916102dd919061040c565b346103b15760403660031901126103b15760243560043561045c61153c565b505f52600260205260405f20906001600160401b036104b060206040519461048386610208565b600361048e826102ef565b918288526002810154848901520154604087015201516001600160401b031690565b161561050c576104e46104de6104d260208551016001600160401b0390511690565b6001600160401b031690565b42611a42565b116104fd576104f9906040519182918261042d565b0390f35b630ee5338360e21b5f5260045ffd5b635a26d5fd60e11b5f5260045ffd5b346103b15760203660031901126103b1576004355f52600360205261014060405f20610546816102ef565b90600281015490600381015460048201546005830154916007600685015494015494610575604051809861032f565b608087015260a086015260c085015260e0840152610100830152610120820152f35b61ffff8116036103b157565b346103b15760403660031901126103b15760206103d36004356105c581610597565b60243590611561565b346103b1575f3660031901126103b1576020600854604051908152f35b60c0610120916105fc84825161032f565b60208101516080850152604081015160a0850152606081015182850152608081015160e085015260a08101516101008501520151910152565b610140810192916102dd91906105eb565b346103b15760403660031901126103b1576024356004356106656115af565b505f52600360205260405f20906001600160401b036106e160206040519461068c86610223565b6007610697826102ef565b91828852600281015484890152600381015460408901526004810154606089015260058101546080890152600681015460a0890152015460c087015201516001600160401b031690565b161561050c576107036104de6104d260208551016001600160401b0390511690565b116104fd576104f99060405191829182610635565b600435906001600160a01b03821682036103b157565b602435906001600160a01b03821682036103b157565b6001600160401b03811161020357601f01601f191660200190565b92919261076b82610744565b9161077960405193846102ac565b8294818452818301116103b1578281602093845f960137010152565b60403660031901126103b1576107a9610718565b6024356001600160401b0381116103b157366023820112156103b1576107d990369060248160040135910161075f565b906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163081149081156108da575b506108cb5761081c611a7e565b6040516352d1902d60e01b8152916020836004816001600160a01b0386165afa5f938161089a575b5061086557634c9c8ce360e01b5f526001600160a01b03821660045260245ffd5b905f805160206132078339815191528303610886576108849250611bac565b005b632a87526960e21b5f52600483905260245ffd5b6108bd91945060203d6020116108c4575b6108b581836102ac565b810190611a64565b925f610844565b503d6108ab565b63703e46dd60e11b5f5260045ffd5b5f80516020613207833981519152546001600160a01b0316141590505f61080f565b346103b1575f3660031901126103b1577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036108cb5760206040515f805160206132078339815191528152f35b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b346103b1575f3660031901126103b1576104f960405161099e6040826102ac565b60058152640312e302e360dc1b602082015260405191829182610953565b346103b15760203660031901126103b1576004356109d8611a7e565b478111610a48575f805160206131e7833981519152545f918291829182916001600160a01b03165af1610a096115ec565b5015610a1157005b60405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606490fd5b60405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606490fd5b346103b1575f3660031901126103b1575f546040516001600160a01b039091168152602090f35b346103b1575f3660031901126103b157610ac3611a7e565b5f805160206131e783398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b608060e091610b2284825161032f565b602081015182850152604081015160a0850152606081015160c08501520151910152565b610100810192916102dd9190610b12565b346103b15760403660031901126103b157602435600435610b7661161b565b505f52600660205260405f20906001600160401b03610bde602060405194610b9d8661023e565b6005610ba8826102ef565b9182885260028101548489015260038101546040890152600481015460608901520154608087015201516001600160401b031690565b161561050c57610c006104de6104d260208551016001600160401b0390511690565b116104fd576104f99060405191829182610b46565b346103b1575f3660031901126103b1575f805160206131e7833981519152546040516001600160a01b039091168152602090f35b346103b1575f3660031901126103b1576104f9604051610c6a6040826102ac565b60058152640352e302e360dc1b602082015260405191829182610953565b60e061014091610c9984825161032f565b60208101516080850152604081015160a0850152606081015160c085015260808101518285015260a081015161010085015260c08101516101208501520151910152565b610160810192916102dd9190610c88565b346103b15760403660031901126103b157602435600435610d0d61164c565b505f52600460205260405f20906001600160401b03610d8f6020610d2f6102cd565b946008610d3b826102ef565b91828852600281015484890152600381015460408901526004810154606089015260058101546080890152600681015460a0890152600781015460c0890152015460e087015201516001600160401b031690565b161561050c57610db16104de6104d260208551016001600160401b0390511690565b116104fd576104f99060405191829182610cdd565b9c9b9a9896949290918d9a989694926101e08c019e610de49161032f565b60808b015260a08a015260c0890152151560e08801526101008701526101208601526101408501526101608401526101808301526101a08201526101c00152565b346103b15760203660031901126103b1576004355f52600560205260405f20610e4d816102ef565b6104f9600283015492600381015490600481015460ff60058301541660068301546007840154600885015491600986015493600a87015495600c600b890154980154986040519c8d9c8d610dc6565b346103b15760203660031901126103b1576004355f52600660205261010060405f20610ec7816102ef565b9060028101549060038101546005600483015492015492610eeb604051809661032f565b608085015260a084015260c083015260e0820152f35b346103b1575f3660031901126103b1576020600754604051908152f35b9491926101409693999897949199610f3b8761016081019c61032f565b608087015260a086015260c085015260e08401526101008301526101208201520152565b346103b15760203660031901126103b1576004355f52600460205260405f20610f87816102ef565b6104f960028301549260038101549060048101546005820154600683015491600860078501549401549460405198899889610f1e565b9060206003198301126103b1576004356001600160401b0381116103b157826023820112156103b1578060040135926001600160401b0384116103b15760248460051b830101116103b1576024019190565b346103b15761101d36610fbd565b505060206040515f8152f35b61103236610fbd565b5f8092601e1981360301915b8385101561109c578460051b820135838112156103b1578201908135916001600160401b0383116103b1576020019082360382136103b15761108e61108860019461109494611b05565b60ff1690565b906116e0565b94019361103e565b6008546110a891611b99565b34106110b057005b62976f7560e21b5f5260045ffd5b6001600160401b0381116102035760051b60200190565b9080601f830112156103b15781356110ec816110be565b926110fa60405194856102ac565b81845260208085019260051b8201019283116103b157602001905b8282106111225750505090565b8135815260209182019101611115565b346103b15760c03660031901126103b15761114b610718565b61115361072e565b90604435916001600160401b0383116103b157366023840112156103b157826004013592611180846110be565b9361118e60405195866102ac565b8085526024602086019160051b830101913683116103b157602401905b8282106111e657505050606435926001600160401b0384116103b1576111d86108849436906004016110d5565b906084359260a435946116ed565b6020809183356111f581610597565b8152019101906111ab565b6101606101c09161121284825161032f565b60208101516080850152604081015160a0850152606081015160c0850152611243608082015160e086019015159052565b60a081015161010085015260c081015161012085015260e0810151610140850152610100810151828501526101208101516101808501526101408101516101a08501520151910152565b6101e0810192916102dd9190611200565b346103b15760403660031901126103b1576024356004356112bd61194c565b505f52600560205260405f2090600c6112d46102df565b926112de816102ef565b845260028101546020850152600381015460408501526004810154606085015261131861130f600583015460ff1690565b15156080860152565b600681015460a0850152600781015460c0850152600881015460e08501526009810154610100850152600a810154610120850152600b81015461014085015201546101608301526001600160401b0361137c6020845101516001600160401b031690565b161561050c5761139e6104de6104d260208551016001600160401b0390511690565b116104fd576104f9906040519182918261128d565b346103b15760203660031901126103b1576108846113cf610718565b6113d7611a7e565b6119ab565b600511156113e657565b634e487b7160e01b5f52602160045260245ffd5b611405815f1a611a1c565b61140e816113dc565b80611447575061144160016114336001600160401b03935f52600260205260405f2090565b01546001600160401b031690565b16151590565b611450816113dc565b60018103611478575061144160016114336001600160401b03935f52600360205260405f2090565b611481816113dc565b600281036114a9575061144160016114336001600160401b03935f52600460205260405f2090565b6114b2816113dc565b600381036114da575061144160016114336001600160401b03935f52600560205260405f2090565b806114e66004926113dc565b0361150a5761144160016114336001600160401b03935f52600660205260405f2090565b62c5984360e11b5f5260045ffd5b60405190611525826101e8565b5f6060838281528260208201528260408201520152565b6040519061154982610208565b5f604083611555611518565b81528260208201520152565b60405160f09190911b6001600160f01b03191660208201908152602282019290925261159a81604281015b03601f1981018352826102ac565b5190205f52600160205260ff60405f20541690565b604051906115bc82610223565b5f60c0836115c8611518565b81528260208201528260408201528260608201528260808201528260a08201520152565b3d15611616573d906115fd82610744565b9161160b60405193846102ac565b82523d5f602084013e565b606090565b604051906116288261023e565b5f608083611634611518565b81528260208201528260408201528260608201520152565b6040519061165982610259565b5f60e083611665611518565b81528260208201528260408201528260608201528260808201528260a08201528260c08201520152565b634e487b7160e01b5f52601160045260245ffd5b90602082018092116116b157565b61168f565b90600182018092116116b157565b90600882018092116116b157565b90600282018092116116b157565b919082018092116116b157565b9391949290945f8051602061322783398151915254956001600160401b0361172b61171e60ff8a60401c1615151590565b986001600160401b031690565b1680159081611845575b600114908161183b575b159081611832575b506118235761178a958761178160016001600160401b03195f805160206132278339815191525416175f8051602061322783398151915255565b6117e957611875565b61179057565b6117ba60ff60401b195f8051602061322783398151915254165f8051602061322783398151915255565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1565b61181e6801000000000000000060ff60401b195f805160206132278339815191525416175f8051602061322783398151915255565b611875565b63f92ee8a960e01b5f5260045ffd5b9050155f611747565b303b15915061173f565b889150611735565b80518210156118615760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b90611891909693969592949561188961256a565b6113d761256a565b61189961256a565b60018060a01b03166bffffffffffffffffffffffff60a01b5f5416175f555f5b8351811015611936578061193061192361ffff6118d86001958961184d565b511661158c6119126118ea868d61184d565b51604051928391602083019586909160229261ffff60f01b9060f01b16825260028201520190565b5190205f52600160205260405f2090565b805460ff19166001179055565b016118b9565b50915092506119476102dd92600755565b600855565b6040519061195982610275565b5f61016083611966611518565b81528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b6001600160a01b03168015611a09575f805160206131e783398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b60ff166004811161150a5760058110156113e65790565b6027198101919082116116b157565b9080821115611a575781039081116116b15790565b9081039081116116b15790565b908160209103126103b1575190565b6040513d5f823e3d90fd5b5f805160206131e7833981519152546001600160a01b03163303611a9e57565b63118cdaa760e01b5f523360045260245ffd5b60405190611abe82610291565b815f8152611aca61153c565b6020820152611ad76115af565b6040820152611ae461164c565b6060820152611af161194c565b608082015260a0611b0061161b565b910152565b906001823560f81c03611b8a576003600283013560f81c0190818110611b4c57611b2e92611c4e565b928291929594925f5b60ff84168110611b5b575050505003611b4c57565b63734fff6760e11b5f5260045ffd5b600160ff91611b7885611b8298611b70611ab1565b508a87611d54565b9190999299612260565b019050611b37565b63a9146eeb60e01b5f5260045ffd5b818102929181159184041417156116b157565b90813b15611c2d575f8051602061320783398151915280546001600160a01b0319166001600160a01b0384169081179091557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115611c1557611c1291612595565b50565b505034611c1e57565b63b398979f60e01b5f5260045ffd5b50634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b611ca392611c5f92818103926125ed565b92905f611c71823560f01c86846125b5565b90611c7a612607565b5082546001600160a01b031690604051809781948293631286d10d60e21b845260048401612876565b03915afa928315611d4f575f905f905f95611d24575b5015611d1557611ce3611cdf611cd4606084015161ffff1690565b608084015190611561565b1590565b611d065760a0015192600201936020840151938051602011611b4c576021015192565b63e60dce7160e01b5f5260045ffd5b63a1a2d59960e01b5f5260045ffd5b915050611d449193503d805f833e611d3c81836102ac565b810190612777565b94929050905f611cb9565b611a73565b82611d6e92949394611d64611ab1565b50818103926125ed565b6021829392013560f01c91602384013560f01c90611dbe611db4611d938486896125d1565b509684602501611da5888289856125ed565b979096810360241901926125ed565b939094369161075f565b604051611df06021826020808201955f87528051918291018484015e81015f838201520301601f1981018352826102ac565b519020853560f01c956002965f915b818310611e2a5750505003611d1557611e1c60259160289361289d565b959195949095960101010193565b90919297611e48816020611e4060019486013590565b91019a612a35565b93019190611dff565b600190825181550190611e876001600160401b0360208301511683906001600160401b03166001600160401b0319825416179055565b60408101519061ffff60401b835491606060ff60501b91015160501b169260401b169062ffffff60401b191617179055565b9060806005918051805185556001850190611ef76001600160401b0360208301511683906001600160401b03166001600160401b0319825416179055565b60408101519061ffff60401b835491606060ff60501b91015160501b169260401b169062ffffff60401b1916171790556020810151600285015560408101516003850155606081015160048501550151910155565b9160206102dd9294936001600160401b036101208201961681520190610b12565b90610160600c91611f7f815185611e51565b602081015160028501556040810151600385015560608101516004850155611fc2611fad6080830151151590565b600586019060ff801983541691151516179055565b60a0810151600685015560c0810151600785015560e081015160088501556101008101516009850155610120810151600a850155610140810151600b8501550151910155565b9160206102dd9294936001600160401b036102008201961681520190611200565b9060e060089180518051855560018501906120676001600160401b0360208301511683906001600160401b03166001600160401b0319825416179055565b60408101519061ffff60401b835491606060ff60501b91015160501b169260401b169062ffffff60401b1916171790556020810151600285015560408101516003850155606081015160048501556080810151600585015560a0810151600685015560c081015160078501550151910155565b9160206102dd9294936001600160401b036101808201961681520190610c88565b9060c060079180518051855560018501906121396001600160401b0360208301511683906001600160401b03166001600160401b0319825416179055565b60408101519061ffff60401b835491606060ff60501b91015160501b169260401b169062ffffff60401b1916171790556020810151600285015560408101516003850155606081015160048501556080810151600585015560a081015160068501550151910155565b9160206102dd9294936001600160401b0361016082019616815201906105eb565b90604060039180518051855560018501906122016001600160401b0360208301511683906001600160401b03166001600160401b0319825416179055565b838101519061ffff60401b835491606060ff60501b91015160501b1692861b169062ffffff60401b191617179055602081015160028501550151910155565b9160206102dd9294936001600160401b0360e0820196168152019061040c565b91815161226c816113dc565b612275816113dc565b6122fe576122936104d26001611433865f52600260205260405f2090565b6001600160401b038216116122a757505050565b60207ffb12ae848c5dadd8d78a67a33e6edd5c9de9217de2735553c5451a6f6c6fceb792016122e881516122e3865f52600260205260405f2090565b6121c3565b51906122f960405192839283612240565b0390a2565b6001825161230b816113dc565b612314816113dc565b03612399576123336104d26001611433865f52600360205260405f2090565b6001600160401b0382161161234757505050565b60407f7191ffe59869d1cf17cb7c2726e2bd60a37024a55d653026782e80eca977b1df92016123888151612383865f52600360205260405f2090565b6120fb565b51906122f9604051928392836121a2565b600282516123a6816113dc565b6123af816113dc565b03612434576123ce6104d26001611433865f52600460205260405f2090565b6001600160401b038216116123e257505050565b60607f98bf4c5718257f52861df389c8da98969915aac10244557e2fbebe31c25774949201612423815161241e865f52600460205260405f2090565b612029565b51906122f9604051928392836120da565b60038251612441816113dc565b61244a816113dc565b036124cf576124696104d26001611433865f52600560205260405f2090565b6001600160401b0382161161247d57505050565b60807f66e9beacbf647c3bc61691e3291107d4a62979d7845cb7527ca0dcd478e8134f92016124be81516124b9865f52600560205260405f2090565b611f6d565b51906122f960405192839283612008565b600482516124dc816113dc565b6124e5816113dc565b0361150a576125046104d26001611433865f52600660205260405f2090565b6001600160401b0382161161251857505050565b60a07f21654bf502bb4f1c5de999bef2220202e8be7e7bb8febc1307d54f0d840fbb0492016125598151612554865f52600660205260405f2090565b611eb9565b51906122f960405192839283611f4c565b60ff5f805160206132278339815191525460401c161561258657565b631afcd79f60e31b5f5260045ffd5b5f806125b293602081519101845af46125ac6115ec565b916129cb565b90565b9092919283600201806002116116b157116103b1576002019190565b9092919283602501806025116116b157116103b1576025019190565b9093928201938483116116b15784116103b1578101920390565b6040519061261482610259565b5f60e083828152826020820152826040820152826060820152826080820152606060a0820152606060c08201520152565b519060ff821682036103b157565b51906001600160401b03821682036103b157565b519063ffffffff821682036103b157565b51906102dd82610597565b81601f820112156103b15760208151910161269d82610744565b926126ab60405194856102ac565b828452828201116103b157815f926020928386015e8301015290565b81601f820112156103b1578051906126de826110be565b926126ec60405194856102ac565b82845260208085019360071b830101918183116103b157602001925b828410612716575050505090565b6080848303126103b1576020608091604051612731816101e8565b86518152828701518382015261274960408801612645565b604082015261275a60608801612645565b6060820152815201930192612708565b519081151582036103b157565b6080818303126103b15780516001600160401b0381116103b1578101610100818403126103b1576127a66102cd565b906127b081612645565b82526127be60208201612653565b60208301526127cf60408201612667565b60408301526127e060608201612678565b60608301526080810151608083015260a08101516001600160401b0381116103b1578461280e918301612683565b60a083015260c0810151906001600160401b0382116103b1576128358560e09383016126c7565b60c0840152015160e08201529261284e6020830161276a565b9260408301516001600160401b0381116103b157606091612870918501612683565b92015190565b90918060409360208452816020850152848401375f828201840152601f01601f1916010190565b90916128a7611ab1565b506128b336848461075f565b6128bb611ab1565b506128cd6128c882612a73565b611a1c565b6128d5612ada565b906128e08183612a29565b6128e9816113dc565b8061292c57506128fb6125b292612e44565b60208201525b9361292461290e82611a33565b9461291c81870135966116a3565b92369161075f565b016008015190565b612935816113dc565b60018103612954575061294a6125b292612d9d565b6040820152612901565b61295d816113dc565b6002810361297c57506129726125b292612cdc565b6060820152612901565b612985816113dc565b600381036129a4575061299a6125b292612bb6565b6080820152612901565b806129b06004926113dc565b0361150a576129c16125b292612b39565b60a0820152612901565b906129ef57508051156129e057805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580612a20575b612a00575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156129f8565b60058210156113e65752565b90808211612a6d575b604051906020820192600160f81b84526021830152604182015260418152612a676061826102ac565b51902090565b90612a3e565b6003815110612a83576003015190565b60405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b6044820152606490fd5b90815160018201908183116116b15710612a8357016001015190565b612ae2611ab1565b50612aeb612e8d565b612af3612ebc565b612afb612f03565b612b03612f50565b90612b0c612fb9565b9260405194612b1a86610291565b5f8652602086015260408501526060840152608083015260a082015290565b612b4161161b565b50612b4a612fb9565b90612b5481612ff4565b908352612b6181836130b0565b602084015260208101908181116116b157612b7c82846130b0565b6040850152604081018092116116b157606090612b9983856130b0565b82860152018091116116b157612bae916130b0565b608082015290565b612bbe61194c565b50612cd3612bca612f50565b91612ccd612cb8612ca3612c8e612c7a612c66612c52612c33612c1f898c6040612c17612c10612bf985612ff4565b908552612c0681876130b0565b60208601526116a3565b80946130b0565b9101526116a3565b612c29818b6130b0565b60608d01526116a3565b612c4d600160ff612c44848d612abe565b161460808d0152565b6116b6565b612c5c81896130b0565b60a08b01526116a3565b612c7081886130b0565b60c08a01526116a3565b612c848187613109565b60e08901526116a3565b612c988186613109565b6101008801526116a3565b612cad8185613109565b6101208701526116a3565b612cc28184613109565b6101408601526116a3565b90613109565b61016082015290565b612ce461164c565b50612ced612f03565b90612cf781612ff4565b91908352612d0582826130b0565b602084015260208201918281116116b157604090612d2384846130b0565b82860152018092116116b157612d8f612d7b612d67612d5385612d49612d9597876130b0565b60608901526116a3565b612d5d81866130b0565b60808801526116a3565b612d7181856130b0565b60a08701526116a3565b612d8581846130b0565b60c08601526116a3565b906130b0565b60e082015290565b612da56115af565b50612dae612ebc565b90612db881612ff4565b91908352612dc682826130b0565b602084015260208201918281116116b157612de183836130b0565b6040850152604081018093116116b157606090612dfe84846130b0565b82860152018092116116b157612d8f612e2883612e1e612e3c95856130b0565b60808701526116a3565b612e3281846130b0565b60a08601526116a3565b60c082015290565b612e4c61153c565b50612e55612e8d565b90612e5f81612ff4565b908352612e6c81836130b0565b6020840152602081018091116116b157612e85916130b0565b604082015290565b612e9561153c565b50612e9e613161565b60405190612eab82610208565b81525f60208201525f604082015290565b612ec46115af565b50612ecd613161565b60405190612eda82610223565b81525f60208201525f60408201525f60608201525f60808201525f60a08201525f60c082015290565b612f0b61164c565b50612f14613161565b60405190612f2182610259565b81525f60208201525f60408201525f60608201525f60808201525f60a08201525f60c08201525f60e082015290565b612f5861194c565b50612f61613161565b60405190612f6e82610275565b81525f60208201525f60408201525f60608201525f60808201525f60a08201525f60c08201525f60e08201525f6101008201525f6101208201525f6101408201525f61016082015290565b612fc161161b565b50612fca613161565b60405190612fd78261023e565b81525f60208201525f60408201525f60608201525f608082015290565b90612ffd611518565b50613006613161565b916130115f826130b0565b835260288151106130745760288101516001600160401b031660208401526125b290612c4d61306a61306361304660206116c4565b61305e613053828761318e565b61ffff1660408a0152565b6116d2565b8093612abe565b60ff166060860152565b60405162461bcd60e51b8152602060048201526014602482015273746f55696e7436345f6f75744f66426f756e647360601b6044820152606490fd5b90815160208201908183116116b157106130cc57016020015190565b60405162461bcd60e51b8152602060048201526015602482015274746f55696e743235365f6f75744f66426f756e647360581b6044820152606490fd5b90815160208201908183116116b1571061312557016020015190565b60405162461bcd60e51b8152602060048201526014602482015273746f496e743235365f6f75744f66426f756e647360601b6044820152606490fd5b613169611518565b50604051613176816101e8565b5f81525f60208201525f60408201525f606082015290565b90815160028201908183116116b157106131aa57016002015190565b60405162461bcd60e51b8152602060048201526014602482015273746f55696e7431365f6f75744f66426f756e647360601b6044820152606490fdfe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212204a3711fca3c5856cb6d435990f15e65da5266746cdfbd7d5feb5154b5398db1c64736f6c634300081a0033","sourceMap":"651:5308:41:-:0;;;;;;;1171:4:25;1163:13;;8837:64:24;651:5308:41;;;;;;7896:76:24;;-1:-1:-1;;;;;;;;;;;651:5308:41;;7985:34:24;7981:146;;-1:-1:-1;651:5308:41;;;;;;;;1163:13:25;651:5308:41;;;;;;;;;;;7981:146:24;-1:-1:-1;;;;;;651:5308:41;-1:-1:-1;;;;;651:5308:41;;;8837:64:24;651:5308:41;;;8087:29:24;;651:5308:41;;8087:29:24;7981:146;;;;7896:76;7938:23;;;-1:-1:-1;7938:23:24;;-1:-1:-1;7938:23:24;651:5308:41;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f3560e01c8063043cc783146101cf5780630e8fd1ba146101ca5780630f01cb51146101c557806332bb41d3146101c05780633a612c32146101bb578063437209a7146101b657806348b6404d146101b157806349c398a4146101ac5780634f1ef286146101a757806352d1902d146101a257806354fd4d501461019d5780635d2c53a7146101985780636306642214610193578063715018a61461018e5780637cfa33dd146101895780638da5cb5b14610184578063ad3cb1cc1461017f578063bdf6afa41461017a578063c12fd47314610175578063c6ac557c14610170578063cb718a9b14610157578063cf8e17bb1461016b578063d47eed4514610166578063d58a8f6d14610161578063d5d89eaf1461015c578063e18910a314610157578063e29ea30f146101525763f2fde38b1461014d575f80fd5b6113b3565b61129e565b610f01565b611132565b611029565b61100f565b610f5f565b610e9c565b610e25565b610cee565b610c49565b610c15565b610b57565b610aab565b610a84565b6109bc565b61097d565b6108fc565b610795565b610646565b6105ce565b6105a3565b61051b565b61043d565b6103dd565b6103b5565b610362565b634e487b7160e01b5f52604160045260245ffd5b608081019081106001600160401b0382111761020357604052565b6101d4565b606081019081106001600160401b0382111761020357604052565b60e081019081106001600160401b0382111761020357604052565b60a081019081106001600160401b0382111761020357604052565b61010081019081106001600160401b0382111761020357604052565b61018081019081106001600160401b0382111761020357604052565b60c081019081106001600160401b0382111761020357604052565b90601f801991011681019081106001600160401b0382111761020357604052565b604051906102dd610100836102ac565b565b604051906102dd610180836102ac565b906040516102fc816101e8565b606060ff600183958054855201546001600160401b038116602085015261ffff8160401c16604085015260501c16910152565b60ff60608092805185526001600160401b03602082015116602086015261ffff6040820151166040860152015116910152565b346103b15760203660031901126103b1576004355f52600260205260c060405f2061038c816102ef565b9060036002820154910154906103a5604051809461032f565b608083015260a0820152f35b5f80fd5b346103b15760203660031901126103b15760206103d36004356113fa565b6040519015158152f35b346103b15760203660031901126103b1576004355f526001602052602060ff60405f2054166040519015158152f35b604060a09161041c84825161032f565b602081015160808501520151910152565b60c0810192916102dd919061040c565b346103b15760403660031901126103b15760243560043561045c61153c565b505f52600260205260405f20906001600160401b036104b060206040519461048386610208565b600361048e826102ef565b918288526002810154848901520154604087015201516001600160401b031690565b161561050c576104e46104de6104d260208551016001600160401b0390511690565b6001600160401b031690565b42611a42565b116104fd576104f9906040519182918261042d565b0390f35b630ee5338360e21b5f5260045ffd5b635a26d5fd60e11b5f5260045ffd5b346103b15760203660031901126103b1576004355f52600360205261014060405f20610546816102ef565b90600281015490600381015460048201546005830154916007600685015494015494610575604051809861032f565b608087015260a086015260c085015260e0840152610100830152610120820152f35b61ffff8116036103b157565b346103b15760403660031901126103b15760206103d36004356105c581610597565b60243590611561565b346103b1575f3660031901126103b1576020600854604051908152f35b60c0610120916105fc84825161032f565b60208101516080850152604081015160a0850152606081015182850152608081015160e085015260a08101516101008501520151910152565b610140810192916102dd91906105eb565b346103b15760403660031901126103b1576024356004356106656115af565b505f52600360205260405f20906001600160401b036106e160206040519461068c86610223565b6007610697826102ef565b91828852600281015484890152600381015460408901526004810154606089015260058101546080890152600681015460a0890152015460c087015201516001600160401b031690565b161561050c576107036104de6104d260208551016001600160401b0390511690565b116104fd576104f99060405191829182610635565b600435906001600160a01b03821682036103b157565b602435906001600160a01b03821682036103b157565b6001600160401b03811161020357601f01601f191660200190565b92919261076b82610744565b9161077960405193846102ac565b8294818452818301116103b1578281602093845f960137010152565b60403660031901126103b1576107a9610718565b6024356001600160401b0381116103b157366023820112156103b1576107d990369060248160040135910161075f565b906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163081149081156108da575b506108cb5761081c611a7e565b6040516352d1902d60e01b8152916020836004816001600160a01b0386165afa5f938161089a575b5061086557634c9c8ce360e01b5f526001600160a01b03821660045260245ffd5b905f805160206132078339815191528303610886576108849250611bac565b005b632a87526960e21b5f52600483905260245ffd5b6108bd91945060203d6020116108c4575b6108b581836102ac565b810190611a64565b925f610844565b503d6108ab565b63703e46dd60e11b5f5260045ffd5b5f80516020613207833981519152546001600160a01b0316141590505f61080f565b346103b1575f3660031901126103b1577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036108cb5760206040515f805160206132078339815191528152f35b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b346103b1575f3660031901126103b1576104f960405161099e6040826102ac565b60058152640312e302e360dc1b602082015260405191829182610953565b346103b15760203660031901126103b1576004356109d8611a7e565b478111610a48575f805160206131e7833981519152545f918291829182916001600160a01b03165af1610a096115ec565b5015610a1157005b60405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606490fd5b60405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606490fd5b346103b1575f3660031901126103b1575f546040516001600160a01b039091168152602090f35b346103b1575f3660031901126103b157610ac3611a7e565b5f805160206131e783398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b608060e091610b2284825161032f565b602081015182850152604081015160a0850152606081015160c08501520151910152565b610100810192916102dd9190610b12565b346103b15760403660031901126103b157602435600435610b7661161b565b505f52600660205260405f20906001600160401b03610bde602060405194610b9d8661023e565b6005610ba8826102ef565b9182885260028101548489015260038101546040890152600481015460608901520154608087015201516001600160401b031690565b161561050c57610c006104de6104d260208551016001600160401b0390511690565b116104fd576104f99060405191829182610b46565b346103b1575f3660031901126103b1575f805160206131e7833981519152546040516001600160a01b039091168152602090f35b346103b1575f3660031901126103b1576104f9604051610c6a6040826102ac565b60058152640352e302e360dc1b602082015260405191829182610953565b60e061014091610c9984825161032f565b60208101516080850152604081015160a0850152606081015160c085015260808101518285015260a081015161010085015260c08101516101208501520151910152565b610160810192916102dd9190610c88565b346103b15760403660031901126103b157602435600435610d0d61164c565b505f52600460205260405f20906001600160401b03610d8f6020610d2f6102cd565b946008610d3b826102ef565b91828852600281015484890152600381015460408901526004810154606089015260058101546080890152600681015460a0890152600781015460c0890152015460e087015201516001600160401b031690565b161561050c57610db16104de6104d260208551016001600160401b0390511690565b116104fd576104f99060405191829182610cdd565b9c9b9a9896949290918d9a989694926101e08c019e610de49161032f565b60808b015260a08a015260c0890152151560e08801526101008701526101208601526101408501526101608401526101808301526101a08201526101c00152565b346103b15760203660031901126103b1576004355f52600560205260405f20610e4d816102ef565b6104f9600283015492600381015490600481015460ff60058301541660068301546007840154600885015491600986015493600a87015495600c600b890154980154986040519c8d9c8d610dc6565b346103b15760203660031901126103b1576004355f52600660205261010060405f20610ec7816102ef565b9060028101549060038101546005600483015492015492610eeb604051809661032f565b608085015260a084015260c083015260e0820152f35b346103b1575f3660031901126103b1576020600754604051908152f35b9491926101409693999897949199610f3b8761016081019c61032f565b608087015260a086015260c085015260e08401526101008301526101208201520152565b346103b15760203660031901126103b1576004355f52600460205260405f20610f87816102ef565b6104f960028301549260038101549060048101546005820154600683015491600860078501549401549460405198899889610f1e565b9060206003198301126103b1576004356001600160401b0381116103b157826023820112156103b1578060040135926001600160401b0384116103b15760248460051b830101116103b1576024019190565b346103b15761101d36610fbd565b505060206040515f8152f35b61103236610fbd565b5f8092601e1981360301915b8385101561109c578460051b820135838112156103b1578201908135916001600160401b0383116103b1576020019082360382136103b15761108e61108860019461109494611b05565b60ff1690565b906116e0565b94019361103e565b6008546110a891611b99565b34106110b057005b62976f7560e21b5f5260045ffd5b6001600160401b0381116102035760051b60200190565b9080601f830112156103b15781356110ec816110be565b926110fa60405194856102ac565b81845260208085019260051b8201019283116103b157602001905b8282106111225750505090565b8135815260209182019101611115565b346103b15760c03660031901126103b15761114b610718565b61115361072e565b90604435916001600160401b0383116103b157366023840112156103b157826004013592611180846110be565b9361118e60405195866102ac565b8085526024602086019160051b830101913683116103b157602401905b8282106111e657505050606435926001600160401b0384116103b1576111d86108849436906004016110d5565b906084359260a435946116ed565b6020809183356111f581610597565b8152019101906111ab565b6101606101c09161121284825161032f565b60208101516080850152604081015160a0850152606081015160c0850152611243608082015160e086019015159052565b60a081015161010085015260c081015161012085015260e0810151610140850152610100810151828501526101208101516101808501526101408101516101a08501520151910152565b6101e0810192916102dd9190611200565b346103b15760403660031901126103b1576024356004356112bd61194c565b505f52600560205260405f2090600c6112d46102df565b926112de816102ef565b845260028101546020850152600381015460408501526004810154606085015261131861130f600583015460ff1690565b15156080860152565b600681015460a0850152600781015460c0850152600881015460e08501526009810154610100850152600a810154610120850152600b81015461014085015201546101608301526001600160401b0361137c6020845101516001600160401b031690565b161561050c5761139e6104de6104d260208551016001600160401b0390511690565b116104fd576104f9906040519182918261128d565b346103b15760203660031901126103b1576108846113cf610718565b6113d7611a7e565b6119ab565b600511156113e657565b634e487b7160e01b5f52602160045260245ffd5b611405815f1a611a1c565b61140e816113dc565b80611447575061144160016114336001600160401b03935f52600260205260405f2090565b01546001600160401b031690565b16151590565b611450816113dc565b60018103611478575061144160016114336001600160401b03935f52600360205260405f2090565b611481816113dc565b600281036114a9575061144160016114336001600160401b03935f52600460205260405f2090565b6114b2816113dc565b600381036114da575061144160016114336001600160401b03935f52600560205260405f2090565b806114e66004926113dc565b0361150a5761144160016114336001600160401b03935f52600660205260405f2090565b62c5984360e11b5f5260045ffd5b60405190611525826101e8565b5f6060838281528260208201528260408201520152565b6040519061154982610208565b5f604083611555611518565b81528260208201520152565b60405160f09190911b6001600160f01b03191660208201908152602282019290925261159a81604281015b03601f1981018352826102ac565b5190205f52600160205260ff60405f20541690565b604051906115bc82610223565b5f60c0836115c8611518565b81528260208201528260408201528260608201528260808201528260a08201520152565b3d15611616573d906115fd82610744565b9161160b60405193846102ac565b82523d5f602084013e565b606090565b604051906116288261023e565b5f608083611634611518565b81528260208201528260408201528260608201520152565b6040519061165982610259565b5f60e083611665611518565b81528260208201528260408201528260608201528260808201528260a08201528260c08201520152565b634e487b7160e01b5f52601160045260245ffd5b90602082018092116116b157565b61168f565b90600182018092116116b157565b90600882018092116116b157565b90600282018092116116b157565b919082018092116116b157565b9391949290945f8051602061322783398151915254956001600160401b0361172b61171e60ff8a60401c1615151590565b986001600160401b031690565b1680159081611845575b600114908161183b575b159081611832575b506118235761178a958761178160016001600160401b03195f805160206132278339815191525416175f8051602061322783398151915255565b6117e957611875565b61179057565b6117ba60ff60401b195f8051602061322783398151915254165f8051602061322783398151915255565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1565b61181e6801000000000000000060ff60401b195f805160206132278339815191525416175f8051602061322783398151915255565b611875565b63f92ee8a960e01b5f5260045ffd5b9050155f611747565b303b15915061173f565b889150611735565b80518210156118615760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b90611891909693969592949561188961256a565b6113d761256a565b61189961256a565b60018060a01b03166bffffffffffffffffffffffff60a01b5f5416175f555f5b8351811015611936578061193061192361ffff6118d86001958961184d565b511661158c6119126118ea868d61184d565b51604051928391602083019586909160229261ffff60f01b9060f01b16825260028201520190565b5190205f52600160205260405f2090565b805460ff19166001179055565b016118b9565b50915092506119476102dd92600755565b600855565b6040519061195982610275565b5f61016083611966611518565b81528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b6001600160a01b03168015611a09575f805160206131e783398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b60ff166004811161150a5760058110156113e65790565b6027198101919082116116b157565b9080821115611a575781039081116116b15790565b9081039081116116b15790565b908160209103126103b1575190565b6040513d5f823e3d90fd5b5f805160206131e7833981519152546001600160a01b03163303611a9e57565b63118cdaa760e01b5f523360045260245ffd5b60405190611abe82610291565b815f8152611aca61153c565b6020820152611ad76115af565b6040820152611ae461164c565b6060820152611af161194c565b608082015260a0611b0061161b565b910152565b906001823560f81c03611b8a576003600283013560f81c0190818110611b4c57611b2e92611c4e565b928291929594925f5b60ff84168110611b5b575050505003611b4c57565b63734fff6760e11b5f5260045ffd5b600160ff91611b7885611b8298611b70611ab1565b508a87611d54565b9190999299612260565b019050611b37565b63a9146eeb60e01b5f5260045ffd5b818102929181159184041417156116b157565b90813b15611c2d575f8051602061320783398151915280546001600160a01b0319166001600160a01b0384169081179091557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115611c1557611c1291612595565b50565b505034611c1e57565b63b398979f60e01b5f5260045ffd5b50634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b611ca392611c5f92818103926125ed565b92905f611c71823560f01c86846125b5565b90611c7a612607565b5082546001600160a01b031690604051809781948293631286d10d60e21b845260048401612876565b03915afa928315611d4f575f905f905f95611d24575b5015611d1557611ce3611cdf611cd4606084015161ffff1690565b608084015190611561565b1590565b611d065760a0015192600201936020840151938051602011611b4c576021015192565b63e60dce7160e01b5f5260045ffd5b63a1a2d59960e01b5f5260045ffd5b915050611d449193503d805f833e611d3c81836102ac565b810190612777565b94929050905f611cb9565b611a73565b82611d6e92949394611d64611ab1565b50818103926125ed565b6021829392013560f01c91602384013560f01c90611dbe611db4611d938486896125d1565b509684602501611da5888289856125ed565b979096810360241901926125ed565b939094369161075f565b604051611df06021826020808201955f87528051918291018484015e81015f838201520301601f1981018352826102ac565b519020853560f01c956002965f915b818310611e2a5750505003611d1557611e1c60259160289361289d565b959195949095960101010193565b90919297611e48816020611e4060019486013590565b91019a612a35565b93019190611dff565b600190825181550190611e876001600160401b0360208301511683906001600160401b03166001600160401b0319825416179055565b60408101519061ffff60401b835491606060ff60501b91015160501b169260401b169062ffffff60401b191617179055565b9060806005918051805185556001850190611ef76001600160401b0360208301511683906001600160401b03166001600160401b0319825416179055565b60408101519061ffff60401b835491606060ff60501b91015160501b169260401b169062ffffff60401b1916171790556020810151600285015560408101516003850155606081015160048501550151910155565b9160206102dd9294936001600160401b036101208201961681520190610b12565b90610160600c91611f7f815185611e51565b602081015160028501556040810151600385015560608101516004850155611fc2611fad6080830151151590565b600586019060ff801983541691151516179055565b60a0810151600685015560c0810151600785015560e081015160088501556101008101516009850155610120810151600a850155610140810151600b8501550151910155565b9160206102dd9294936001600160401b036102008201961681520190611200565b9060e060089180518051855560018501906120676001600160401b0360208301511683906001600160401b03166001600160401b0319825416179055565b60408101519061ffff60401b835491606060ff60501b91015160501b169260401b169062ffffff60401b1916171790556020810151600285015560408101516003850155606081015160048501556080810151600585015560a0810151600685015560c081015160078501550151910155565b9160206102dd9294936001600160401b036101808201961681520190610c88565b9060c060079180518051855560018501906121396001600160401b0360208301511683906001600160401b03166001600160401b0319825416179055565b60408101519061ffff60401b835491606060ff60501b91015160501b169260401b169062ffffff60401b1916171790556020810151600285015560408101516003850155606081015160048501556080810151600585015560a081015160068501550151910155565b9160206102dd9294936001600160401b0361016082019616815201906105eb565b90604060039180518051855560018501906122016001600160401b0360208301511683906001600160401b03166001600160401b0319825416179055565b838101519061ffff60401b835491606060ff60501b91015160501b1692861b169062ffffff60401b191617179055602081015160028501550151910155565b9160206102dd9294936001600160401b0360e0820196168152019061040c565b91815161226c816113dc565b612275816113dc565b6122fe576122936104d26001611433865f52600260205260405f2090565b6001600160401b038216116122a757505050565b60207ffb12ae848c5dadd8d78a67a33e6edd5c9de9217de2735553c5451a6f6c6fceb792016122e881516122e3865f52600260205260405f2090565b6121c3565b51906122f960405192839283612240565b0390a2565b6001825161230b816113dc565b612314816113dc565b03612399576123336104d26001611433865f52600360205260405f2090565b6001600160401b0382161161234757505050565b60407f7191ffe59869d1cf17cb7c2726e2bd60a37024a55d653026782e80eca977b1df92016123888151612383865f52600360205260405f2090565b6120fb565b51906122f9604051928392836121a2565b600282516123a6816113dc565b6123af816113dc565b03612434576123ce6104d26001611433865f52600460205260405f2090565b6001600160401b038216116123e257505050565b60607f98bf4c5718257f52861df389c8da98969915aac10244557e2fbebe31c25774949201612423815161241e865f52600460205260405f2090565b612029565b51906122f9604051928392836120da565b60038251612441816113dc565b61244a816113dc565b036124cf576124696104d26001611433865f52600560205260405f2090565b6001600160401b0382161161247d57505050565b60807f66e9beacbf647c3bc61691e3291107d4a62979d7845cb7527ca0dcd478e8134f92016124be81516124b9865f52600560205260405f2090565b611f6d565b51906122f960405192839283612008565b600482516124dc816113dc565b6124e5816113dc565b0361150a576125046104d26001611433865f52600660205260405f2090565b6001600160401b0382161161251857505050565b60a07f21654bf502bb4f1c5de999bef2220202e8be7e7bb8febc1307d54f0d840fbb0492016125598151612554865f52600660205260405f2090565b611eb9565b51906122f960405192839283611f4c565b60ff5f805160206132278339815191525460401c161561258657565b631afcd79f60e31b5f5260045ffd5b5f806125b293602081519101845af46125ac6115ec565b916129cb565b90565b9092919283600201806002116116b157116103b1576002019190565b9092919283602501806025116116b157116103b1576025019190565b9093928201938483116116b15784116103b1578101920390565b6040519061261482610259565b5f60e083828152826020820152826040820152826060820152826080820152606060a0820152606060c08201520152565b519060ff821682036103b157565b51906001600160401b03821682036103b157565b519063ffffffff821682036103b157565b51906102dd82610597565b81601f820112156103b15760208151910161269d82610744565b926126ab60405194856102ac565b828452828201116103b157815f926020928386015e8301015290565b81601f820112156103b1578051906126de826110be565b926126ec60405194856102ac565b82845260208085019360071b830101918183116103b157602001925b828410612716575050505090565b6080848303126103b1576020608091604051612731816101e8565b86518152828701518382015261274960408801612645565b604082015261275a60608801612645565b6060820152815201930192612708565b519081151582036103b157565b6080818303126103b15780516001600160401b0381116103b1578101610100818403126103b1576127a66102cd565b906127b081612645565b82526127be60208201612653565b60208301526127cf60408201612667565b60408301526127e060608201612678565b60608301526080810151608083015260a08101516001600160401b0381116103b1578461280e918301612683565b60a083015260c0810151906001600160401b0382116103b1576128358560e09383016126c7565b60c0840152015160e08201529261284e6020830161276a565b9260408301516001600160401b0381116103b157606091612870918501612683565b92015190565b90918060409360208452816020850152848401375f828201840152601f01601f1916010190565b90916128a7611ab1565b506128b336848461075f565b6128bb611ab1565b506128cd6128c882612a73565b611a1c565b6128d5612ada565b906128e08183612a29565b6128e9816113dc565b8061292c57506128fb6125b292612e44565b60208201525b9361292461290e82611a33565b9461291c81870135966116a3565b92369161075f565b016008015190565b612935816113dc565b60018103612954575061294a6125b292612d9d565b6040820152612901565b61295d816113dc565b6002810361297c57506129726125b292612cdc565b6060820152612901565b612985816113dc565b600381036129a4575061299a6125b292612bb6565b6080820152612901565b806129b06004926113dc565b0361150a576129c16125b292612b39565b60a0820152612901565b906129ef57508051156129e057805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580612a20575b612a00575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156129f8565b60058210156113e65752565b90808211612a6d575b604051906020820192600160f81b84526021830152604182015260418152612a676061826102ac565b51902090565b90612a3e565b6003815110612a83576003015190565b60405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b6044820152606490fd5b90815160018201908183116116b15710612a8357016001015190565b612ae2611ab1565b50612aeb612e8d565b612af3612ebc565b612afb612f03565b612b03612f50565b90612b0c612fb9565b9260405194612b1a86610291565b5f8652602086015260408501526060840152608083015260a082015290565b612b4161161b565b50612b4a612fb9565b90612b5481612ff4565b908352612b6181836130b0565b602084015260208101908181116116b157612b7c82846130b0565b6040850152604081018092116116b157606090612b9983856130b0565b82860152018091116116b157612bae916130b0565b608082015290565b612bbe61194c565b50612cd3612bca612f50565b91612ccd612cb8612ca3612c8e612c7a612c66612c52612c33612c1f898c6040612c17612c10612bf985612ff4565b908552612c0681876130b0565b60208601526116a3565b80946130b0565b9101526116a3565b612c29818b6130b0565b60608d01526116a3565b612c4d600160ff612c44848d612abe565b161460808d0152565b6116b6565b612c5c81896130b0565b60a08b01526116a3565b612c7081886130b0565b60c08a01526116a3565b612c848187613109565b60e08901526116a3565b612c988186613109565b6101008801526116a3565b612cad8185613109565b6101208701526116a3565b612cc28184613109565b6101408601526116a3565b90613109565b61016082015290565b612ce461164c565b50612ced612f03565b90612cf781612ff4565b91908352612d0582826130b0565b602084015260208201918281116116b157604090612d2384846130b0565b82860152018092116116b157612d8f612d7b612d67612d5385612d49612d9597876130b0565b60608901526116a3565b612d5d81866130b0565b60808801526116a3565b612d7181856130b0565b60a08701526116a3565b612d8581846130b0565b60c08601526116a3565b906130b0565b60e082015290565b612da56115af565b50612dae612ebc565b90612db881612ff4565b91908352612dc682826130b0565b602084015260208201918281116116b157612de183836130b0565b6040850152604081018093116116b157606090612dfe84846130b0565b82860152018092116116b157612d8f612e2883612e1e612e3c95856130b0565b60808701526116a3565b612e3281846130b0565b60a08601526116a3565b60c082015290565b612e4c61153c565b50612e55612e8d565b90612e5f81612ff4565b908352612e6c81836130b0565b6020840152602081018091116116b157612e85916130b0565b604082015290565b612e9561153c565b50612e9e613161565b60405190612eab82610208565b81525f60208201525f604082015290565b612ec46115af565b50612ecd613161565b60405190612eda82610223565b81525f60208201525f60408201525f60608201525f60808201525f60a08201525f60c082015290565b612f0b61164c565b50612f14613161565b60405190612f2182610259565b81525f60208201525f60408201525f60608201525f60808201525f60a08201525f60c08201525f60e082015290565b612f5861194c565b50612f61613161565b60405190612f6e82610275565b81525f60208201525f60408201525f60608201525f60808201525f60a08201525f60c08201525f60e08201525f6101008201525f6101208201525f6101408201525f61016082015290565b612fc161161b565b50612fca613161565b60405190612fd78261023e565b81525f60208201525f60408201525f60608201525f608082015290565b90612ffd611518565b50613006613161565b916130115f826130b0565b835260288151106130745760288101516001600160401b031660208401526125b290612c4d61306a61306361304660206116c4565b61305e613053828761318e565b61ffff1660408a0152565b6116d2565b8093612abe565b60ff166060860152565b60405162461bcd60e51b8152602060048201526014602482015273746f55696e7436345f6f75744f66426f756e647360601b6044820152606490fd5b90815160208201908183116116b157106130cc57016020015190565b60405162461bcd60e51b8152602060048201526015602482015274746f55696e743235365f6f75744f66426f756e647360581b6044820152606490fd5b90815160208201908183116116b1571061312557016020015190565b60405162461bcd60e51b8152602060048201526014602482015273746f496e743235365f6f75744f66426f756e647360601b6044820152606490fd5b613169611518565b50604051613176816101e8565b5f81525f60208201525f60408201525f606082015290565b90815160028201908183116116b157106131aa57016002015190565b60405162461bcd60e51b8152602060048201526014602482015273746f55696e7431365f6f75744f66426f756e647360601b6044820152606490fdfe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212204a3711fca3c5856cb6d435990f15e65da5266746cdfbd7d5feb5154b5398db1c64736f6c634300081a0033","sourceMap":"651:5308:41:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;-1:-1:-1;651:5308:41;908:53:42;651:5308:41;;;;-1:-1:-1;651:5308:41;908:53:42;;;:::i;:::-;;;;;;651:5308:41;908:53:42;;651:5308:41;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;651:5308:41;;;;;;;;-1:-1:-1;;651:5308:41;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;651:5308:41;;;;;;-1:-1:-1;651:5308:41;852:50:42;651:5308:41;;;;;-1:-1:-1;651:5308:41;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;;;;;:::i;:::-;;-1:-1:-1;651:5308:41;2741:15;651:5308;;;-1:-1:-1;651:5308:41;;-1:-1:-1;;;;;651:5308:41;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;2741:15;651:5308;;;;;;;;;;;;;2774:23;651:5308;-1:-1:-1;;;;;651:5308:41;;;;;2774:28;2770:90;;2873:46;;2895:23;651:5308;2895:13;;:23;-1:-1:-1;;;;;651:5308:41;;;;;2895:23;-1:-1:-1;;;;;651:5308:41;;;2873:46;2878:15;2873:46;:::i;:::-;:52;2869:111;;651:5308;;;;;;;;;:::i;:::-;;;;2869:111;2948:21;;;-1:-1:-1;2948:21:41;651:5308;-1:-1:-1;2948:21:41;2770:90;2825:24;;;-1:-1:-1;2825:24:41;651:5308;-1:-1:-1;2825:24:41;651:5308;;;;;;-1:-1:-1;;651:5308:41;;;;;;-1:-1:-1;651:5308:41;967:41:42;651:5308:41;;;;-1:-1:-1;651:5308:41;967:41:42;;;:::i;:::-;;;;;651:5308:41;967:41:42;;;;651:5308:41;;967:41:42;;651:5308:41;967:41:42;;;651:5308:41;967:41:42;;;;;651:5308:41;967:41:42;;651:5308:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;812:35;651:5308;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;;;;;:::i;:::-;;-1:-1:-1;651:5308:41;3124:9;651:5308;;;-1:-1:-1;651:5308:41;;-1:-1:-1;;;;;651:5308:41;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;3124:9;651:5308;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3151:23;651:5308;-1:-1:-1;;;;;651:5308:41;;;;;3151:28;3147:90;;3250:46;;3272:23;651:5308;3272:13;;:23;-1:-1:-1;;;;;651:5308:41;;;;;3250:46;:52;3246:111;;651:5308;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;651:5308:41;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;651:5308:41;;;;;;:::o;:::-;-1:-1:-1;;;;;651:5308:41;;;;;;-1:-1:-1;;651:5308:41;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;651:5308:41;;;;;;:::o;:::-;;;-1:-1:-1;;651:5308:41;;;;;;:::i;:::-;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;4692:6:25;651:5308:41;4683:4:25;4675:23;;;:120;;;;651:5308:41;4658:251:25;;;2303:62:23;;:::i;:::-;651:5308:41;;-1:-1:-1;;;6156:52:25;;651:5308:41;;;;;-1:-1:-1;;;;;651:5308:41;;6156:52:25;;-1:-1:-1;;6156:52:25;;;651:5308:41;-1:-1:-1;6152:437:25;;-1:-1:-1;;;;6518:60:25;-1:-1:-1;;;;;651:5308:41;;;;;-1:-1:-1;6518:60:25;6152:437;6250:40;-1:-1:-1;;;;;;;;;;;6250:40:25;;6246:120;;6428:4;;;;:::i;:::-;651:5308:41;6246:120:25;-1:-1:-1;;;;6317:34:25;651:5308:41;;;;;-1:-1:-1;6518:60:25;6156:52;;;;;651:5308:41;6156:52:25;651:5308:41;6156:52:25;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;4658:251;4869:29;;;-1:-1:-1;4869:29:25;651:5308:41;-1:-1:-1;4869:29:25;4675:120;-1:-1:-1;;;;;;;;;;;651:5308:41;-1:-1:-1;;;;;651:5308:41;4753:42:25;;;-1:-1:-1;4675:120:25;;;651:5308:41;;;;;;-1:-1:-1;;651:5308:41;;;;5115:6:25;-1:-1:-1;;;;;651:5308:41;5106:4:25;5098:23;5094:145;;651:5308:41;;;-1:-1:-1;;;;;;;;;;;651:5308:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;651:5308:41;;;;:::o;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;2303:62:23;;:::i;:::-;5526:21:41;5516:31;;651:5308;;-1:-1:-1;;;;;;;;;;;651:5308:41;-1:-1:-1;;;;;;;;;;;;;651:5308:41;5601:31;;;;:::i;:::-;;651:5308;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;;-1:-1:-1;;651:5308:41;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;-1:-1:-1;;651:5308:41;;;;2303:62:23;;:::i;:::-;-1:-1:-1;;;;;;;;;;;651:5308:41;;-1:-1:-1;;;;;;651:5308:41;;;;;;;-1:-1:-1;;;;;651:5308:41;3975:40:23;651:5308:41;;3975:40:23;651:5308:41;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;;;;;:::i;:::-;;-1:-1:-1;651:5308:41;4255:9;651:5308;;;-1:-1:-1;651:5308:41;;-1:-1:-1;;;;;651:5308:41;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4282:23;651:5308;-1:-1:-1;;;;;651:5308:41;;;;;4282:28;4278:90;;4381:46;;4403:23;651:5308;4403:13;;:23;-1:-1:-1;;;;;651:5308:41;;;;;4381:46;:52;4377:111;;651:5308;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;-1:-1:-1;;;;;;;;;;;651:5308:41;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;-1:-1:-1;;651:5308:41;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;;;;;:::i;:::-;;-1:-1:-1;651:5308:41;;;;;-1:-1:-1;651:5308:41;;-1:-1:-1;;;;;651:5308:41;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3561:23;651:5308;-1:-1:-1;;;;;651:5308:41;;;;;3561:28;3557:90;;3660:46;;3682:23;651:5308;3682:13;;:23;-1:-1:-1;;;;;651:5308:41;;;;;3660:46;:52;3656:111;;651:5308;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;-1:-1:-1;651:5308:41;1073:47:42;651:5308:41;;;-1:-1:-1;651:5308:41;1073:47:42;;;:::i;:::-;651:5308:41;1073:47:42;;;651:5308:41;1073:47:42;;;;651:5308:41;1073:47:42;651:5308:41;1073:47:42;;651:5308:41;;1073:47:42;;;651:5308:41;;1073:47:42;;;651:5308:41;1073:47:42;;;651:5308:41;1073:47:42;;;651:5308:41;1073:47:42;;;;651:5308:41;1073:47:42;;;;651:5308:41;1073:47:42;;;;;651:5308:41;1073:47:42;;651:5308:41;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;-1:-1:-1;651:5308:41;1126:41:42;651:5308:41;;;;-1:-1:-1;651:5308:41;1126:41:42;;;:::i;:::-;;;;;651:5308:41;1126:41:42;;;;651:5308:41;1126:41:42;651:5308:41;1126:41:42;;651:5308:41;1126:41:42;;651:5308:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;651:5308:41;;;;;769:37;651:5308;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;-1:-1:-1;651:5308:41;;;;;-1:-1:-1;651:5308:41;1014:53:42;;;:::i;:::-;651:5308:41;1014:53:42;;;651:5308:41;1014:53:42;;;;651:5308:41;1014:53:42;651:5308:41;1014:53:42;;651:5308:41;1014:53:42;;;651:5308:41;1014:53:42;;;651:5308:41;1014:53:42;;;;;651:5308:41;1014:53:42;;651:5308:41;;;;;;;;;:::i;:::-;;;-1:-1:-1;;651:5308:41;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;2447:1;651:5308;;;;;;;:::i;:::-;1916:1;;651:5308;;;;;;;1968:172;1973:13;1988:7;;;;;;651:5308;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;2012:58;2031:39;651:5308;2031:39;2012:58;2031:39;;:::i;:::-;651:5308;;;;2012:58;;;:::i;:::-;651:5308;;1973:13;;;1988:7;2585:20;651:5308;2567:38;;;:::i;:::-;2213:9;:23;2209:88;;651:5308;2209:88;2259:27;;;1916:1;2259:27;651:5308;1916:1;2259:27;651:5308;-1:-1:-1;;;;;651:5308:41;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;651:5308:41;;;;;;:::i;:::-;;;:::i;:::-;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;913:772;651:5308;;;;;;:::i;:::-;;;;;;;913:772;;:::i;651:5308::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;;;;;:::i;:::-;;-1:-1:-1;651:5308:41;3896:12;651:5308;;;-1:-1:-1;651:5308:41;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3896:12;651:5308;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;3926:13;;:23;651:5308;-1:-1:-1;;;;;651:5308:41;;;;;3926:28;3922:90;;4025:46;;4047:23;651:5308;4047:13;;:23;-1:-1:-1;;;;;651:5308:41;;;;;4025:46;:52;4021:111;;651:5308;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;2357:1:23;651:5308:41;;:::i;:::-;2303:62:23;;:::i;:::-;2357:1;:::i;651:5308:41:-;;-1:-1:-1;651:5308:41;;;:::o;:::-;;;;;;;;;;;;4528:793;4623:43;4659:5;651:5308;4659:5;4623:43;:::i;:::-;651:5308;;;:::i;:::-;4680:31;;;4735:19;651:5308;4659:5;4735:19;-1:-1:-1;;;;;4735:19:41;651:5308;;4735:15;651:5308;;;;;;;4735:19;:38;651:5308;-1:-1:-1;;;;;651:5308:41;;;;;4735:43;;4727:52;:::o;4676:639::-;651:5308;;;:::i;:::-;4659:5;4800:25;;4659:5;;4849:13;:32;4659:5;4849:13;-1:-1:-1;;;;;4849:13:41;651:5308;;4849:9;651:5308;;;;;;;4796:519;651:5308;;;:::i;:::-;4920:27;4908:39;;4920:27;;4971:11;:30;4659:5;4971:11;-1:-1:-1;;;;;4971:11:41;651:5308;;4971:7;651:5308;;;;;;;4904:411;651:5308;;;:::i;:::-;5040:16;5028:28;;5040:16;;5080;:35;4659:5;5080:16;-1:-1:-1;;;;;5080:16:41;651:5308;;5080:12;651:5308;;;;;;;5024:291;651:5308;;5154:19;651:5308;;:::i;:::-;5142:31;5154:19;;5197:32;4659:5;5197:13;-1:-1:-1;;;;;5197:13:41;651:5308;;5197:9;651:5308;;;;;;;5138:177;5273:31;;;651:5308;5273:31;5154:19;651:5308;5273:31;651:5308;;;;;;;:::i;:::-;-1:-1:-1;651:5308:41;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;651:5308:41;;;;:::i;:::-;;;;;;;;;;:::o;1210:190:42:-;651:5308:41;;;;;;;-1:-1:-1;;;;;;651:5308:41;1350:41:42;;;651:5308:41;;;;;;;;;;1350:41:42;651:5308:41;;;;1350:41:42;;651:5308:41;;1350:41:42;;;;;;:::i;:::-;651:5308:41;1340:52:42;;-1:-1:-1;651:5308:41;1321:18:42;1350:41;651:5308:41;;;-1:-1:-1;651:5308:41;;;1210:190:42;:::o;651:5308:41:-;;;;;;;:::i;:::-;-1:-1:-1;651:5308:41;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;651:5308:41;;;;:::o;:::-;;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;651:5308:41;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;651:5308:41;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;7607:2:42;651:5308:41;;;;;;;:::o;:::-;;:::i;:::-;;4500:1:48;651:5308:41;;;;;;;:::o;:::-;;13393:1:46;651:5308:41;;;;;;;:::o;:::-;;1968:1:48;651:5308:41;;;;;;;:::o;:::-;;;;;;;;;;:::o;4069:1104:24:-;;;;;;;-1:-1:-1;;;;;;;;;;;651:5308:41;;-1:-1:-1;;;;;651:5308:41;4301:16:24;651:5308:41;;;;;4301:16:24;651:5308:41;;;;4301:16:24;651:5308:41;-1:-1:-1;;;;;651:5308:41;;;;;4726:16:24;;:34;;;;4069:1104;4805:1;4790:16;:50;;;;4069:1104;4855:13;:30;;;;4069:1104;4851:91;;;5055:1;4951:18;;;651:5308:41;-1:-1:-1;;;;;651:5308:41;-1:-1:-1;;;;;;;;;;;651:5308:41;;;-1:-1:-1;;;;;;;;;;;651:5308:41;;4951:18:24;4979:67;;5055:1;:::i;:::-;5066:101;;4069:1104::o;5066:101::-;5100:23;-1:-1:-1;;;651:5308:41;-1:-1:-1;;;;;;;;;;;651:5308:41;;-1:-1:-1;;;;;;;;;;;651:5308:41;;5100:23:24;651:5308:41;;4805:1:24;651:5308:41;;5142:14:24;;651:5308:41;;5142:14:24;4069:1104::o;4979:67::-;5013:22;651:5308:41;-1:-1:-1;;;651:5308:41;-1:-1:-1;;;;;;;;;;;651:5308:41;;;-1:-1:-1;;;;;;;;;;;651:5308:41;;5013:22:24;5055:1;:::i;4851:91::-;4908:23;;;4302:15;4908:23;;4302:15;4908:23;4855:30;4872:13;;;4855:30;;;4790:50;4818:4;4810:25;:30;;-1:-1:-1;4790:50:24;;4726:34;;;-1:-1:-1;4726:34:24;;651:5308:41;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;913:772;;6961:1:24;913:772:41;;;;;;;;6893:76:24;;:::i;:::-;;;:::i;6961:1::-;6893:76;;:::i;:::-;651:5308:41;;;;;;;;;1286:34;651:5308;;;1286:34;651:5308;1286:34;1390:3;651:5308;;1351:37;;;;;1472:29;1409:147;:140;651:5308;1472:29;651:5308;1472:29;;;:::i;:::-;651:5308;;1455:79;;1503:30;;;;:::i;:::-;651:5308;;;1455:79;;;;;;;;651:5308;;;;;;;;;;;;;;;;;;;;1455:79;651:5308;1428:120;;651:5308;;;;;;;;;;1409:140;651:5308;;-1:-1:-1;;651:5308:41;;;;;;1409:147;651:5308;1336:13;;1351:37;;;;;;1576:48;1634:44;1351:37;1576:48;651:5308;;1576:48;1634:44;651:5308;;;;;;;;;:::i;:::-;-1:-1:-1;651:5308:41;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3405:215:23:-;-1:-1:-1;;;;;651:5308:41;3489:22:23;;3485:91;;-1:-1:-1;;;;;;;;;;;651:5308:41;;-1:-1:-1;;;;;;651:5308:41;;;;;;;-1:-1:-1;;;;;651:5308:41;3975:40:23;-1:-1:-1;;3975:40:23;3405:215::o;3485:91::-;3534:31;;;3509:1;3534:31;3509:1;3534:31;651:5308:41;;3509:1:23;3534:31;1237:264:48;651:5308:41;;1352:18:48;1331:40;;1352:18;;651:5308:41;;;;;;1387:28:48;:::o;651:5308:41:-;-1:-1:-1;;651:5308:41;;;;;;;;:::o;5782:175::-;;5864:5;;;;;;651:5308;;;;;;;5885:12;:::o;5860:91::-;651:5308;;;;;;;;5928:12;:::o;651:5308::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;2658:162:23;-1:-1:-1;;;;;;;;;;;651:5308:41;-1:-1:-1;;;;;651:5308:41;966:10:26;2717:23:23;2713:101;;2658:162::o;2713:101::-;2763:40;;;-1:-1:-1;2763:40:23;966:10:26;2763:40:23;651:5308:41;;-1:-1:-1;2763:40:23;651:5308:41;;;;;;;:::i;:::-;;-1:-1:-1;651:5308:41;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;:::o;7694:1114:42:-;;2215:1;1256:95:53;;;;2239:42:42;2235:122;;651:5308:41;;1256:95:53;;;;;651:5308:41;;3611:33:42;;;3607:108;;8116:61;7979:14;8116:61;:::i;:::-;8068:109;;;;;;8216:13;-1:-1:-1;8231:14:42;651:5308:41;;;8231:14:42;;;;8739:24;;;;;8735:66;;7694:1114::o;8735:66::-;3671:29;;;-1:-1:-1;8772:29:42;;-1:-1:-1;8772:29:42;8247:3;2215:1;651:5308:41;;8428:58:42;651:5308:41;8556:11:42;651:5308:41;;;:::i;:::-;;8428:58:42;;;:::i;:::-;8384:102;;;;8556:11;;:::i;:::-;651:5308:41;8216:13:42;;;;2235:122;2312:26;;;-1:-1:-1;2312:26:42;;-1:-1:-1;2312:26:42;651:5308:41;;;;;;;;;;;;;;;;:::o;2274:344:31:-;;1758:29;;:34;1754:119;;-1:-1:-1;;;;;;;;;;;651:5308:41;;-1:-1:-1;;;;;;651:5308:41;-1:-1:-1;;;;;651:5308:41;;;;;;;;2417:36:31;-1:-1:-1;;2417:36:31;651:5308:41;;2468:15:31;:11;;2499:53;;;:::i;:::-;;2274:344::o;2464:148::-;6173:9;;;6169:70;;2274:344::o;6169:70::-;6209:19;;;1791:1;6209:19;;1791:1;6209:19;1754:119;-1:-1:-1;;;;1791:1:31;1815:47;;;-1:-1:-1;;;;;651:5308:41;;;;1815:47:31;651:5308:41;;;1815:47:31;3737:1442:42;1623:43;3737:1442;4008:90;3737:1442;651:5308:41;;;4008:90:42;;:::i;:::-;3998:100;;4121:1;4411:56;1513:95:53;;;;3998:100:42;;4411:56;:::i;:::-;651:5308:41;;;:::i;:::-;-1:-1:-1;651:5308:41;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;1623:43:42;;;;;;:::i;:::-;;;;;;;;;;4121:1;;;;;1623:43;;;3737:1442;1684:6;;1680:61;;1766:62;1767:61;651:5308:41;1785:20:42;;;651:5308:41;;;;;;1807:20:42;;;651:5308:41;1767:61:42;;:::i;:::-;1766:62;;651:5308:41;1766:62:42;1762:135;;4507:13;;;651:5308:41;4228:1:42;651:5308:41;14089:85:52;;;;;651:5308:41;;;14089:85:52;4879:37:42;4875:128;;12388:81:52;;;3737:1442:42;:::o;1762:135::-;1851:35;;;4121:1;1851:35;1623:43;4121:1;1851:35;1680:61;1699:42;;;4121:1;1699:42;1623:43;4121:1;1699:42;1623:43;;;;;;;;;;4121:1;1623:43;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;:::i;5482:1598::-;;5887:70;5482:1598;;;;651:5308:41;;:::i;:::-;;;;;5887:70:42;;:::i;:::-;5995:2;1513:95:53;;;;;;;;651:5308:41;1513:95:53;;;;;6375:63:42;651:5308:41;6613:84:42;6375:63;;;;;:::i;:::-;651:5308:41;;;;;6516:64:42;;;;;;:::i;:::-;651:5308:41;;;;;-1:-1:-1;;651:5308:41;;6613:84:42;:::i;:::-;651:5308:41;;;;;;:::i;:::-;;;716:42:51;5995:2:42;716:42:51;;;;;269:1;-1:-1:-1;269:1:51;;651:5308:41;;269:1:51;;;;;;;651:5308:41;;;-1:-1:-1;651:5308:41;;;;716:42:51;;651:5308:41;;716:42:51;;;;;;:::i;:::-;651:5308:41;460:16:51;;1513:95:53;;;;2066:16:51;6157:1:42;2101:13:51;-1:-1:-1;2096:301:51;2116:18;;;;;;2418:21;;;;6896:61:42;;7007:27;651:5308:41;7007:27:42;7061:2;7007:27;;:::i;:::-;6971:63;;;;;;651:5308:41;;;;;5482:1598:42;:::o;2136:3:51:-;2191:59;;;;2333:49;2191:59;716:42;2191:59;269:1;2191:59;;2804:85:53;;2677:244;;2191:59:51;651:5308:41;;2333:49:51;;:::i;:::-;2136:3;651:5308:41;2101:13:51;;;;651:5308:41;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;-1:-1:-1;;;;;651:5308:41;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;:::o;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;-1:-1:-1;;;;;651:5308:41;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;-1:-1:-1;;;;;651:5308:41;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;-1:-1:-1;;;;;651:5308:41;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;-1:-1:-1;;;;;651:5308:41;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;:::i;8814:1660:42:-;;651:5308:41;;;;;:::i;:::-;;;;:::i;:::-;8956:42:42;;9018:56;651:5308:41;9032:42:42;:23;;651:5308:41;;4735:15;651:5308;;;;;;;9018:56:42;-1:-1:-1;;;;;651:5308:41;;9018:56:42;9014:223;;8952:1516;;;8814:1660::o;9014:223::-;9120:15;9158:64;9120:15;;651:5308:41;9120:15:42;;9094:23;;651:5308:41;;4735:15;651:5308;;;;;;;9094:23:42;651:5308:41;:::i;:::-;9206:15:42;651:5308:41;9158:64:42;651:5308:41;;9158:64:42;;;;;:::i;:::-;;;;8814:1660::o;8952:1516::-;9280:13;651:5308:41;;;;;:::i;:::-;;;;:::i;:::-;9257:36:42;9280:13;;9313:50;9327:36;9280:13;9327:17;;651:5308:41;;4849:9;651:5308;;;;;;;9313:50:42;-1:-1:-1;;;;;651:5308:41;;9313:50:42;9309:205;;9253:1215;;;8814:1660::o;9309:205::-;9403:15;9441:58;9403:15;;651:5308:41;9403:15:42;;9383:17;;651:5308:41;;4849:9;651:5308;;;;;;;9383:17:42;651:5308:41;:::i;:::-;9483:15:42;651:5308:41;9441:58:42;9403:15;651:5308:41;9441:58:42;;;;;:::i;9253:1215::-;9557:27;651:5308:41;;;;;:::i;:::-;;;;:::i;:::-;9534:50:42;9557:27;;9604:48;9618:34;9280:13;9618:15;;651:5308:41;;4971:7;651:5308;;;;;;;9604:48:42;-1:-1:-1;;;;;651:5308:41;;9604:48:42;9600:211;;9530:938;;;651:5308:41:o;9600:211:42:-;9690:13;9726:70;9690:13;;651:5308:41;9690:13:42;;9672:15;;651:5308:41;;4971:7;651:5308;;;;;;;9672:15:42;651:5308:41;:::i;:::-;9782:13:42;651:5308:41;9726:70:42;651:5308:41;;9726:70:42;;;;;:::i;9530:938::-;9854:16;651:5308:41;;;;;:::i;:::-;;;;:::i;:::-;9831:39:42;9854:16;;9890:53;9904:39;9280:13;9904:20;;651:5308:41;;5080:12;651:5308;;;;;;;9890:53:42;-1:-1:-1;;;;;651:5308:41;;9890:53:42;9886:220;;9827:641;;;651:5308:41:o;9886:220:42:-;9986:18;10027:64;9986:18;;651:5308:41;9986:18:42;;9963:20;;651:5308:41;;5080:12;651:5308;;;;;;;9963:20:42;651:5308:41;:::i;:::-;10072:18:42;651:5308:41;10027:64:42;651:5308:41;;10027:64:42;;;;;:::i;9827:641::-;10149:19;651:5308:41;;;;;:::i;:::-;;;;:::i;:::-;10126:42:42;10149:19;;10188:50;10202:36;9280:13;10202:17;;651:5308:41;;5197:9;651:5308;;;;;;;10188:50:42;-1:-1:-1;;;;;651:5308:41;;10188:50:42;10184:205;;10122:346;;;651:5308:41:o;10184:205:42:-;10278:15;10316:58;10278:15;;651:5308:41;10278:15:42;;10258:17;;651:5308:41;;5197:9;651:5308;;;;;;;10258:17:42;651:5308:41;:::i;:::-;10358:15:42;651:5308:41;10316:58:42;651:5308:41;;10316:58:42;;;;;:::i;7084:141:24:-;651:5308:41;-1:-1:-1;;;;;;;;;;;651:5308:41;;;;7150:18:24;7146:73;;7084:141::o;7146:73::-;7191:17;;;-1:-1:-1;7191:17:24;;-1:-1:-1;7191:17:24;3900:253:36;4049:25;3900:253;4091:55;3900:253;4049:25;;;;;;;;;;:::i;:::-;4091:55;;:::i;:::-;3900:253;:::o;541:165:53:-;;;;;651:5308:41;;;;;;;;;;;;;661:38:53;541:165;:::o;:::-;;;;;651:5308:41;;;;;;;;;;;;;661:38:53;541:165;:::o;:::-;;;;651:5308:41;;;;;;;;;;;;;;;;541:165:53;:::o;651:5308:41:-;;;;;;;:::i;:::-;-1:-1:-1;651:5308:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;651:5308:41;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;651:5308:41;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;651:5308:41;;;;:::o;7086:602:42:-;;;651:5308:41;;:::i;:::-;;;;;;;:::i;:::-;;;:::i;:::-;;427:31:48;377:20;;;:::i;:::-;427:31;:::i;:::-;500:42;;:::i;:::-;552:30;;;;;:::i;:::-;651:5308:41;;;:::i;:::-;596:31:48;;;661:19;;7633:48:42;661:19:48;;:::i;:::-;643:15;;;:37;592:605;7427:27:42;651:5308:41;7427:27:42;;;:::i;:::-;7512:75;7597:12;2804:85:53;;;;7597:12:42;;:::i;:::-;651:5308:41;;;;:::i;:::-;13111:81:52;;;;;12989:235;592:605:48;651:5308:41;;;:::i;:::-;713:13:48;701:25;;713:13;;760:19;;7633:48:42;760:19:48;;:::i;:::-;742:15;;;:37;592:605;;697:500;651:5308:41;;;:::i;:::-;308:1:48;800:39;;308:1;;871:33;;7633:48:42;871:33:48;;:::i;:::-;855:13;;;:49;592:605;;796:401;651:5308:41;;;:::i;:::-;937:16:48;925:28;;937:16;;990:22;;7633:48:42;990:22:48;;:::i;:::-;969:18;;;:43;592:605;;921:276;651:5308:41;;1045:19:48;651:5308:41;;:::i;:::-;1033:31:48;1045:19;;1098;7633:48:42;1098:19:48;;:::i;:::-;1080:15;;;:37;592:605;;4421:582:36;;4593:8;;-1:-1:-1;651:5308:41;;5674:21:36;:17;;5846:142;;;;;;5670:385;6025:19;;;5694:1;6025:19;;5694:1;6025:19;4589:408;651:5308:41;;4841:22:36;:49;;;4589:408;4837:119;;4969:17;;:::o;4837:119::-;-1:-1:-1;;;4862:1:36;4917:24;;;-1:-1:-1;;;;;651:5308:41;;;;4917:24:36;651:5308:41;;;4917:24:36;4841:49;4867:18;;;:23;4841:49;;651:5308:41;;;;;;;;:::o;772:254:51:-;;868:15;;;864:81;;772:254;651:5308:41;;966:52:51;;;;651:5308:41;;;;269:1:51;;312;;;651:5308:41;312:1:51;;;651:5308:41;312:1:51;966:52;;;;;;:::i;:::-;651:5308:41;460:16:51;;772:254;:::o;864:81::-;;;;12334:301:46;651:5308:41;;;12436:27:46;651:5308:41;;;12522:81:46;;12334:301;:::o;651:5308:41:-;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;12334:301:46;;651:5308:41;;12462:1:46;651:5308:41;;;;;;;;12436:27:46;651:5308:41;;12522:81:46;12462:1;12522:81;;;12334:301::o;1881:357:45:-;651:5308:41;;:::i;:::-;;2046:22:45;;:::i;:::-;2088:16;;:::i;:::-;2122:14;;:::i;:::-;2159:19;;:::i;:::-;2198:22;;;:::i;:::-;651:5308:41;;;;;;;:::i;:::-;-1:-1:-1;651:5308:41;;1972:259:45;;;651:5308:41;;1972:259:45;;651:5308:41;1972:259:45;;;651:5308:41;1972:259:45;;;651:5308:41;1972:259:45;;;651:5308:41;1881:357:45;:::o;5013:535:48:-;651:5308:41;;:::i;:::-;;5121:42:48;;:::i;:::-;5227:26;;;;:::i;:::-;5201:52;;;5282:21;;;;:::i;:::-;5264:15;;;651:5308:41;5264:15:48;651:5308:41;;;;;;;;5355:21:48;;;;:::i;:::-;5335:17;;;651:5308:41;5335:17:48;651:5308:41;;;;;;;5408:18:48;5429:21;;;;;:::i;:::-;5408:18;;;651:5308:41;;;;;;;5497:21:48;;;:::i;:::-;5482:12;;;651:5308:41;5013:535:48;:::o;3979:1028::-;651:5308:41;;:::i;:::-;;4957:20:48;4096:39;;:::i;:::-;4199:26;4923:11;4857;4792;4726;4660;4587;4511:10;4440:11;4366;4199:26;;4309:23;4335:21;4287:11;4199:26;;;:::i;:::-;4173:52;;;4256:21;;;;:::i;:::-;4236:17;;;651:5308:41;4287:11:48;:::i;:::-;4335:21;;;:::i;:::-;4309:23;;651:5308:41;4366:11:48;:::i;:::-;4409:21;;;;:::i;:::-;4388:18;;;651:5308:41;4440:11:48;:::i;:::-;4462:39;4500:1;651:5308:41;4477:19:48;;;;:::i;:::-;651:5308:41;4477:24:48;4462:12;;;651:5308:41;;4462:39:48;4511:10;:::i;:::-;4556:21;;;;:::i;:::-;4532;;;651:5308:41;4587:11:48;:::i;:::-;4629:21;;;;:::i;:::-;4609:17;;;651:5308:41;4660:11:48;:::i;:::-;4696:20;;;;:::i;:::-;4682:11;;;651:5308:41;4726:11:48;:::i;:::-;4762:20;;;;:::i;:::-;4748:11;;;651:5308:41;4792:11:48;:::i;:::-;4827:20;;;;:::i;:::-;4814:10;;;651:5308:41;4857:11:48;:::i;:::-;4893:20;;;;:::i;:::-;4879:11;;;651:5308:41;4923:11:48;:::i;:::-;4957:20;;:::i;:::-;4945:9;;;651:5308:41;3979:1028:48;:::o;3183:790::-;651:5308:41;;:::i;:::-;;3333:34:48;;:::i;:::-;3431:26;;;;:::i;:::-;3405:52;;;;3487:21;;;;:::i;:::-;3468:16;;;651:5308:41;3468:16:48;651:5308:41;;;;;;;;3540:16:48;3559:21;;;;;:::i;:::-;3540:16;;;651:5308:41;;;;;;;3873:11:48;3803;3732;3662;3631:21;;3922;3631;;;:::i;:::-;3612:16;;;651:5308:41;3662:11:48;:::i;:::-;3701:21;;;;:::i;:::-;3684:14;;;651:5308:41;3732:11:48;:::i;:::-;3772:21;;;;:::i;:::-;3754:15;;;651:5308:41;3803:11:48;:::i;:::-;3842:21;;;;:::i;:::-;3825:14;;;651:5308:41;3873:11:48;:::i;:::-;3922:21;;:::i;:::-;3895:24;;;651:5308:41;3183:790:48;:::o;2496:681::-;651:5308:41;;:::i;:::-;;2604:36:48;;:::i;:::-;2704:26;;;;:::i;:::-;2678:52;;;;2759:21;;;;:::i;:::-;2741:15;;;651:5308:41;2741:15:48;651:5308:41;;;;;;;;2831:21:48;;;;:::i;:::-;2812:16;;;651:5308:41;2812:16:48;651:5308:41;;;;;;;2884:16:48;2903:21;;;;;:::i;:::-;2884:16;;;651:5308:41;;;;;;;3077:11:48;3004;2973:21;;3126;2973;;;:::i;:::-;2956:14;;;651:5308:41;3004:11:48;:::i;:::-;3046:21;;;;:::i;:::-;3026:17;;;651:5308:41;3077:11:48;:::i;3126:21::-;3099:24;;;651:5308:41;2496:681:48;:::o;2094:396::-;651:5308:41;;:::i;:::-;;2214:42:48;;:::i;:::-;2320:26;;;;:::i;:::-;2294:52;;;2371:21;;;;:::i;:::-;2357:11;;;651:5308:41;2357:11:48;651:5308:41;;;;;;;2439:21:48;;;:::i;:::-;2424:12;;;651:5308:41;2094:396:48;:::o;2412:163:45:-;651:5308:41;;:::i;:::-;;2525:20:45;;:::i;:::-;651:5308:41;;;;;;:::i;:::-;;;-1:-1:-1;2503:65:45;;;651:5308:41;-1:-1:-1;651:5308:41;2503:65:45;;651:5308:41;2412:163:45;:::o;2581:314::-;651:5308:41;;:::i;:::-;;2689:20:45;;:::i;:::-;651:5308:41;;;;;;:::i;:::-;;;-1:-1:-1;2660:228:45;;;651:5308:41;-1:-1:-1;651:5308:41;2660:228:45;;651:5308:41;-1:-1:-1;2660:228:45;;;651:5308:41;-1:-1:-1;2660:228:45;;;651:5308:41;-1:-1:-1;2660:228:45;;;651:5308:41;-1:-1:-1;2660:228:45;;;651:5308:41;2581:314:45;:::o;2901:364::-;651:5308:41;;:::i;:::-;;3035:20:45;;:::i;:::-;651:5308:41;;;;;;:::i;:::-;;;-1:-1:-1;2992:266:45;;;651:5308:41;-1:-1:-1;651:5308:41;2992:266:45;;651:5308:41;-1:-1:-1;2992:266:45;;;651:5308:41;-1:-1:-1;2992:266:45;;;651:5308:41;-1:-1:-1;2992:266:45;;;651:5308:41;-1:-1:-1;2992:266:45;;;651:5308:41;-1:-1:-1;2992:266:45;;;651:5308:41;2901:364:45;:::o;3271:440::-;651:5308:41;;:::i;:::-;;3388:20:45;;:::i;:::-;651:5308:41;;;;;;:::i;:::-;;;-1:-1:-1;3356:348:45;;;651:5308:41;-1:-1:-1;651:5308:41;3356:348:45;;651:5308:41;-1:-1:-1;3356:348:45;;;651:5308:41;-1:-1:-1;3356:348:45;;;651:5308:41;-1:-1:-1;3356:348:45;;;651:5308:41;-1:-1:-1;3356:348:45;;;651:5308:41;-1:-1:-1;3356:348:45;;;651:5308:41;-1:-1:-1;3356:348:45;;;651:5308:41;-1:-1:-1;3356:348:45;;;651:5308:41;-1:-1:-1;3356:348:45;;;651:5308:41;-1:-1:-1;3356:348:45;;;651:5308:41;3271:440:45;:::o;3717:188::-;651:5308:41;;:::i;:::-;;3818:20:45;;:::i;:::-;651:5308:41;;;;;;:::i;:::-;;;-1:-1:-1;3802:96:45;;;651:5308:41;-1:-1:-1;651:5308:41;3802:96:45;;651:5308:41;-1:-1:-1;3802:96:45;;;651:5308:41;-1:-1:-1;3802:96:45;;;651:5308:41;3717:188:45;:::o;1507:581:48:-;;651:5308:41;;:::i;:::-;;1655:40:48;;:::i;:::-;1768:21;;5189:1;1768:21;;:::i;:::-;651:5308:41;;;;;13367:27:46;651:5308:41;;;13455:81:46;;;-1:-1:-1;;;;;651:5308:41;1809:2:48;1822:18;;651:5308:41;2036:10:48;;1980:46;2006:19;1959:10;1873;1809:2;1873:10;:::i;:::-;1894:55;1928:20;;;;:::i;:::-;651:5308:41;;1894:24:48;;;651:5308:41;;1894:55:48;1959:10;:::i;:::-;2006:19;;;:::i;:::-;651:5308:41;;1980:17:48;;;651:5308:41;;;;;-1:-1:-1;;;651:5308:41;;1809:2:48;651:5308:41;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;14203:311:46;;651:5308:41;;14335:2:46;651:5308:41;;;;;;;;14309:28:46;651:5308:41;;14400:82:46;14335:2;14400:82;;;14203:311::o;651:5308:41:-;;;-1:-1:-1;;;651:5308:41;;14335:2:46;651:5308:41;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;14520:304:46;;651:5308:41;;14650:2:46;651:5308:41;;;;;;;;14624:28:46;651:5308:41;;14712:81:46;14650:2;14712:81;;;14520:304::o;651:5308:41:-;;;-1:-1:-1;;;651:5308:41;;14650:2:46;651:5308:41;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;2244:162:45;651:5308:41;;:::i;:::-;;;;;;;:::i;:::-;-1:-1:-1;651:5308:41;;-1:-1:-1;2331:68:45;;;651:5308:41;-1:-1:-1;651:5308:41;2331:68:45;;651:5308:41;-1:-1:-1;2331:68:45;;;651:5308:41;2244:162:45;:::o;12641:305:46:-;;651:5308:41;;12771:1:46;651:5308:41;;;;;;;;12745:27:46;651:5308:41;;12833:81:46;12771:1;12833:81;;;12641:305::o;651:5308:41:-;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;","linkReferences":{},"immutableReferences":{"47242":[{"start":2020,"length":32},{"start":2318,"length":32}]}},"methodIdentifiers":{"UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","_isValidDataSource(bytes32)":"0f01cb51","dataFeedExists(bytes32)":"0e8fd1ba","getOptionsNoOlderThan(bytes32,uint256)":"e29ea30f","getPerpNoOlderThan(bytes32,uint256)":"7cfa33dd","getRealizedVolatilityNoOlderThan(bytes32,uint256)":"bdf6afa4","getSpotMedianNoOlderThan(bytes32,uint256)":"32bb41d3","getTwapNoOlderThan(bytes32,uint256)":"49c398a4","getUpdateFee(bytes[])":"d47eed45","getValidTimePeriod()":"e18910a3","hyperlane()":"63066422","initialize(address,address,uint16[],bytes32[],uint256,uint256)":"d5d89eaf","isValidDataSource(uint16,bytes32)":"437209a7","optionsFeeds(bytes32)":"c12fd473","owner()":"8da5cb5b","perpFeeds(bytes32)":"c6ac557c","proxiableUUID()":"52d1902d","renounceOwnership()":"715018a6","rvFeeds(bytes32)":"cf8e17bb","singleUpdateFeeInWei()":"48b6404d","spotMedianFeeds(bytes32)":"043cc783","transferOwnership(address)":"f2fde38b","twapFeeds(bytes32)":"3a612c32","updateDataFeeds(bytes[])":"d58a8f6d","upgradeToAndCall(address,bytes)":"4f1ef286","validTimePeriodSeconds()":"cb718a9b","version()":"54fd4d50","withdraw_funds(uint256)":"5d2c53a7"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DataNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DataStale\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientFee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDataFeedType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidHyperlaneCheckpointRoot\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidUpdateData\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidUpdateDataSource\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidVersion\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"publishTime\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"strikePrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"impliedVolatility\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeToExpiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isCall\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"underlyingPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"optionPrice\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"delta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"gamma\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"vega\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"theta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"rho\",\"type\":\"int256\"}],\"indexed\":false,\"internalType\":\"struct Options\",\"name\":\"options\",\"type\":\"tuple\"}],\"name\":\"OptionsUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"publishTime\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"markPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fundingRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"openInterest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"volume\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct Perp\",\"name\":\"perp\",\"type\":\"tuple\"}],\"name\":\"PerpUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"publishTime\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"volatility\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"highPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lowPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfDataPoints\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct RealizedVolatility\",\"name\":\"realizedVolatility\",\"type\":\"tuple\"}],\"name\":\"RealizedVolatilityUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"publishTime\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"volume\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct SpotMedian\",\"name\":\"spotMedian\",\"type\":\"tuple\"}],\"name\":\"SpotMedianUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"publishTime\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"twapPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalVolume\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfDataPoints\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct TWAP\",\"name\":\"twap\",\"type\":\"tuple\"}],\"name\":\"TWAPUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"_isValidDataSource\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"name\":\"dataFeedExists\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"age\",\"type\":\"uint256\"}],\"name\":\"getOptionsNoOlderThan\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"strikePrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"impliedVolatility\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeToExpiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isCall\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"underlyingPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"optionPrice\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"delta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"gamma\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"vega\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"theta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"rho\",\"type\":\"int256\"}],\"internalType\":\"struct Options\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"age\",\"type\":\"uint256\"}],\"name\":\"getPerpNoOlderThan\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"markPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fundingRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"openInterest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"volume\",\"type\":\"uint256\"}],\"internalType\":\"struct Perp\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"age\",\"type\":\"uint256\"}],\"name\":\"getRealizedVolatilityNoOlderThan\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"volatility\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"highPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lowPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfDataPoints\",\"type\":\"uint256\"}],\"internalType\":\"struct RealizedVolatility\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"age\",\"type\":\"uint256\"}],\"name\":\"getSpotMedianNoOlderThan\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"volume\",\"type\":\"uint256\"}],\"internalType\":\"struct SpotMedian\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"age\",\"type\":\"uint256\"}],\"name\":\"getTwapNoOlderThan\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"twapPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalVolume\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfDataPoints\",\"type\":\"uint256\"}],\"internalType\":\"struct TWAP\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"updateData\",\"type\":\"bytes[]\"}],\"name\":\"getUpdateFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getValidTimePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hyperlane\",\"outputs\":[{\"internalType\":\"contract IHyperlane\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_hyperlane\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initial_owner\",\"type\":\"address\"},{\"internalType\":\"uint16[]\",\"name\":\"_dataSourceEmitterChainIds\",\"type\":\"uint16[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"_dataSourceEmitterAddresses\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"_validTimePeriodSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_singleUpdateFeeInWei\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"chainId\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"emitterAddress\",\"type\":\"bytes32\"}],\"name\":\"isValidDataSource\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"optionsFeeds\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"strikePrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"impliedVolatility\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeToExpiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isCall\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"underlyingPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"optionPrice\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"delta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"gamma\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"vega\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"theta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"rho\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"perpFeeds\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"markPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fundingRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"openInterest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"volume\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"rvFeeds\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"volatility\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"highPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lowPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfDataPoints\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"singleUpdateFeeInWei\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"spotMedianFeeds\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"volume\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"twapFeeds\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"twapPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalVolume\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfDataPoints\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"updateData\",\"type\":\"bytes[]\"}],\"name\":\"updateDataFeeds\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validTimePeriodSeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw_funds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Pragma Labs\",\"custom:contact\":\"security@pragma.build\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"OptionsUpdate(bytes32,uint64,((bytes32,uint64,uint16,uint8),uint256,uint256,uint256,bool,uint256,uint256,int256,int256,int256,int256,int256))\":{\"details\":\"Emitted when an Options feed with `feedId` has received a fresh update.\",\"params\":{\"feedId\":\"Pragma Feed ID.\",\"options\":\"New Options data.\",\"publishTime\":\"Unix timestamp of the update.\"}},\"PerpUpdate(bytes32,uint64,((bytes32,uint64,uint16,uint8),uint256,uint256,uint256,uint256))\":{\"details\":\"Emitted when a Perp feed with `feedId` has received a fresh update.\",\"params\":{\"feedId\":\"Pragma Feed ID.\",\"perp\":\"New Perp data.\",\"publishTime\":\"Unix timestamp of the update.\"}},\"RealizedVolatilityUpdate(bytes32,uint64,((bytes32,uint64,uint16,uint8),uint256,uint256,uint256,uint256,uint256,uint256,uint256))\":{\"details\":\"Emitted when a Realized Volatility feed with `feedId` has received a fresh update.\",\"params\":{\"feedId\":\"Pragma Feed ID.\",\"publishTime\":\"Unix timestamp of the update.\",\"realizedVolatility\":\"New Realized Volatility data.\"}},\"SpotMedianUpdate(bytes32,uint64,((bytes32,uint64,uint16,uint8),uint256,uint256))\":{\"details\":\"Emitted when a Spot Median feed with `feedId` has received a fresh update.\",\"params\":{\"feedId\":\"Pragma Feed ID.\",\"publishTime\":\"Unix timestamp of the update.\",\"spotMedian\":\"New Spot Median data.\"}},\"TWAPUpdate(bytes32,uint64,((bytes32,uint64,uint16,uint8),uint256,uint256,uint256,uint256,uint256,uint256))\":{\"details\":\"Emitted when a TWAP feed with `feedId` has received a fresh update.\",\"params\":{\"feedId\":\"Pragma Feed ID.\",\"publishTime\":\"Unix timestamp of the update.\",\"twap\":\"New TWAP data.\"}},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"dataFeedExists(bytes32)\":{\"params\":{\"id\":\"The data feed ID.\"},\"returns\":{\"_0\":\"True if the data feed exists, false otherwise.\"}},\"getOptionsNoOlderThan(bytes32,uint256)\":{\"params\":{\"age\":\"The maximum allowed age (in seconds) for the options data.\",\"id\":\"The unique identifier of the options data feed.\"},\"returns\":{\"data\":\"The latest valid Options data, or a revert if no valid data is available within the specified age.\"}},\"getPerpNoOlderThan(bytes32,uint256)\":{\"params\":{\"age\":\"The maximum allowed age (in seconds) for the perpetuals data.\",\"id\":\"The unique identifier of the perpetuals data feed.\"},\"returns\":{\"data\":\"The latest valid Perp data, or a revert if no valid data is available within the specified age.\"}},\"getRealizedVolatilityNoOlderThan(bytes32,uint256)\":{\"params\":{\"age\":\"The maximum allowed age (in seconds) for the volatility data.\",\"id\":\"The unique identifier of the realized volatility data feed.\"},\"returns\":{\"data\":\"The latest valid RealizedVolatility data, or a revert if no valid data is available within the specified age.\"}},\"getSpotMedianNoOlderThan(bytes32,uint256)\":{\"params\":{\"age\":\"The maximum allowed age (in seconds) for the price data.\",\"id\":\"The unique identifier of the data feed.\"},\"returns\":{\"data\":\"The latest valid SpotMedian data, or a revert if no valid data is available within the specified age.\"}},\"getTwapNoOlderThan(bytes32,uint256)\":{\"params\":{\"age\":\"The maximum allowed age (in seconds) for the TWAP data.\",\"id\":\"The unique identifier of the TWAP data feed.\"},\"returns\":{\"data\":\"The latest valid TWAP data, or a revert if no valid data is available within the specified age.\"}},\"getUpdateFee(bytes[])\":{\"params\":{\"updateData\":\"Array of price update data.\"},\"returns\":{\"feeAmount\":\"The required fee in Wei.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"updateDataFeeds(bytes[])\":{\"details\":\"Emits a `DataFeedUpdate` event for each updated data feed.Reverts if the caller has not paid the required fee.\",\"params\":{\"updateData\":\"The data.\"}},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"title\":\"Pragma\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"dataFeedExists(bytes32)\":{\"notice\":\"Checks if a data feed exists.\"},\"getOptionsNoOlderThan(bytes32,uint256)\":{\"notice\":\"Fetches the latest options data that is no older than a specified age.\"},\"getPerpNoOlderThan(bytes32,uint256)\":{\"notice\":\"Fetches the latest perpetuals data that is no older than a specified age.\"},\"getRealizedVolatilityNoOlderThan(bytes32,uint256)\":{\"notice\":\"Fetches the latest realized volatility that is no older than a specified age.\"},\"getSpotMedianNoOlderThan(bytes32,uint256)\":{\"notice\":\"Fetches the latest spot median price that is no older than a specified age.\"},\"getTwapNoOlderThan(bytes32,uint256)\":{\"notice\":\"Fetches the latest TWAP (Time-Weighted Average Price) that is no older than a specified age.\"},\"getUpdateFee(bytes[])\":{\"notice\":\"Returns the required fee to update an array of price updates.\"},\"updateDataFeeds(bytes[])\":{\"notice\":\"Updates data feeds given some update data. Before calling this function, the caller must have paid the required fee. Which can be calculated using the `getUpdateFee` function. Data feeds will only be updated if data is more recent than the current data.\"}},\"notice\":\"The Pragma contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Pragma.sol\":\"Pragma\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x490959f972df54829d0ffacb71fa025429d9b7b9ebd118f418b41e9c0041ef73\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1883bc1a16a88922abccd415d1b41caf00c38ee581ae3e5976018d9c17d2c4b7\",\"dweb:/ipfs/QmP2vzQM8RR8ce675KhuZEaUicAPRMUbPLwBsTpxByvn18\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d\",\"dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0xf5c04a8bf51755681f7db413095377dfd1a05b98b6326fb1da0e9a297057caf0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f57690465f41860906cf84e6970baaacae9d05b8311674812e6b502bb510441e\",\"dweb:/ipfs/Qme5swSUieatWond1BHyZaEztdLAPu67KcoQTeY4pH5wVd\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x5f3770f82f75d132e210b43c071d3feec1bef13c385d1d799763a366e8bda311\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3a50b7702cbd525c4a0fd3c36d1e116432b5f645f84cb25e4473dc9c88a917c5\",\"dweb:/ipfs/QmaN5QKZwgypVK3zAwdgXfsygEeauRYa4sSe4x8yKXDRtV\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x80b4189de089dc632b752b365a16c5063b58cc24da0dd38b82f2c25f56d25c84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81e2717e78844156a86733f1cada84dba906ffe03e4957de12ca219c65e9191b\",\"dweb:/ipfs/QmW8vg3AafPJRo7EC75RQJTtjiaYmfPa4U4sqmEuBXXzaP\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0x1b0625096e82d06abdcf1844172ef78ef54a5e878761f4d905fda07eaf098424\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5cd99f1a4836c07461cb3ea023ae2f6d1d01e80694b764a87623aa7252754756\",\"dweb:/ipfs/QmNPNDuiNU6TJatZcdBcrwixBoo5MSXNDq4kaXhpJLWGpB\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xfd29ed7a01e9ef109cc31542ca0f51ba3e793740570b69172ec3d8bfbb1643b4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99379e0649be8106d2708a2bde73b5cdaba4505f1001f1586b53788bf971d097\",\"dweb:/ipfs/QmV9cCnvFoVzV2cVDW4Zbs3JQ3ehxBcooQS52taVxR637S\"]},\"src/Pragma.sol\":{\"keccak256\":\"0xf89995e23351ab6fbb25f3dc95b885e81bc7b97f7bc8982684595984de420c09\",\"license\":\"Apache 2\",\"urls\":[\"bzz-raw://14b8f09887435dab43cfb0bbc09817b46b410dc6d440c6b5032e8f5601800e1f\",\"dweb:/ipfs/QmZCk31tM9SpGvah3KsGKrYh579c1pBfBpS1ujdueQURvF\"]},\"src/PragmaDecoder.sol\":{\"keccak256\":\"0x7047b7a1f5f77a34a50ab67986bb0c9e7532bcf2a8a2633dc0857ae7acbc5bf5\",\"license\":\"Apache 2\",\"urls\":[\"bzz-raw://3fbba793eec4a3bcb7bfe58768743bd3f611d483b545d5a5c575cf39fab7aacf\",\"dweb:/ipfs/Qma8444uYEFE4aHUV83D4pGaA1211MFr4pn111ynv1BUh5\"]},\"src/interfaces/IHyperlane.sol\":{\"keccak256\":\"0x6dd20bc4d6d8095d325a990f36ad17a7a8368a15d4e0d7b82f2fb9f3cbdb17c9\",\"license\":\"Apache 2\",\"urls\":[\"bzz-raw://1d962f61740af891ede951a01410df5b13c675777fb644cfaefab0a750382bbf\",\"dweb:/ipfs/QmVfFyJ8fxiyzGr729V7aG9tJFLTwSyogTArHvUPyoL5Qg\"]},\"src/interfaces/IPragma.sol\":{\"keccak256\":\"0x6bd6515f3d07ab43963f4e2bb3422ebc7a546e389756f842e54afdd4bcf401e8\",\"license\":\"Apache 2\",\"urls\":[\"bzz-raw://b9f1159fae9808862e13837d3617ae4ef1166d54a3d1d7a5050edbf5cb866b53\",\"dweb:/ipfs/QmefhvLM1jdCt3b7Jfq8qtEeVTXATMo6FWDUsTGg79RRhL\"]},\"src/interfaces/PragmaStructs.sol\":{\"keccak256\":\"0x199822095c5fd1de00f5920e5a4ed95f340322ef499cf346d5ecfadeb5f60269\",\"license\":\"Apache 2\",\"urls\":[\"bzz-raw://36e499944b2f354d4ae5627912f05fa925c398a3b4d5b6c1fec219441eae1850\",\"dweb:/ipfs/QmQa8LyFcmziQ89koJfmjaFVPpgyHcxSjbxoXP1K5GoKGs\"]},\"src/libraries/BytesLib.sol\":{\"keccak256\":\"0x44653e7d858d3ac584836abbc48c9168a92c82561c4f6f8cc233f551fd97ffdc\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://3baaa3305da8ceb5d9ca67f9fbc1c556cedc9838163d3cdda940b937f0eff58d\",\"dweb:/ipfs/QmaKgQZkrnt2tL4VAet3jF3GKwunz87GnhKLawBz1aV3Ma\"]},\"src/libraries/ConstantsLib.sol\":{\"keccak256\":\"0xa839f506eb9cdeb048839e1e98e056b0983b00ead78ec22437379fa828ae9542\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c3ddd94a7b1d1fba7f17ad49397cb0a8528e18356861debb63284edf2c2fbf48\",\"dweb:/ipfs/QmdJd9z9GN4m5mSc3Q5AuCoB7szwqEzC19MB2EkZWvTbWQ\"]},\"src/libraries/DataParser.sol\":{\"keccak256\":\"0xd7e97b4d13ba828dd35bd84cfd419286895fbe0b3dfd003d7db692476e626095\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f762e9b46295eaab78291cfe35fe5061d671bb3ddefead1088b1150bf0fad3c9\",\"dweb:/ipfs/QmYQAYeNUhE3NEryFGNLghGH4T67B4bYJ6hFTn6zcNdXQW\"]},\"src/libraries/ErrorsLib.sol\":{\"keccak256\":\"0xe2d16754bf56c44fb876454e917b9715a0c991c387d9a185f2b06697b6fadf55\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7b30985127a441f4646cfd7225a069d17c9d29b9f2b30f57950f7ac3f234053b\",\"dweb:/ipfs/QmXWK5FcbvC7CbWzAwQaz8s3kT7dYT5edyPng5TEpfAL2D\"]},\"src/libraries/EventsLib.sol\":{\"keccak256\":\"0x7b5212636969cc535216917fb8400701f0c3e6cb6bb111da51914bd8cd5a8677\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://962b195f56ab4228b5a8e8735f4e1d97414a27ecf10ed39f9cf9202efdc92b82\",\"dweb:/ipfs/QmUD4xUjgxuKJ4PihCuGQMrb36dAwabSzCRcLU4mUqf6Gk\"]},\"src/libraries/MerkleTree.sol\":{\"keccak256\":\"0x97160fed5b287dc5375228ff9823e31d257c34f0eccecf4892043c00695e4177\",\"license\":\"Apache 2\",\"urls\":[\"bzz-raw://118d0cce4053b7022e718d1556aab36bec850f0f5f7ac3a9d10dcf85dc6cbd7d\",\"dweb:/ipfs/QmRFFczwXPzJHiwJVJhEDec4SxBrvjt5BYFPsNrYMYw6Y8\"]},\"src/libraries/UnsafeBytesLib.sol\":{\"keccak256\":\"0xc88690f8bb4c5f4478d232c12d7c7e59d527929883524e088d26b1ed47da661e\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://de2ffea160aa099a49de5ab7f4c9df9f9dac945cbad131d96cf6f37f63c185c1\",\"dweb:/ipfs/QmeEobBaUksKwDvMd7Dqvf62snArQjp8ayQfss4EnR1pQF\"]},\"src/libraries/UnsafeCalldataBytesLib.sol\":{\"keccak256\":\"0x5865e707c7b2115ebc8edf2a4d5bb12f30b08ddec7ef54f044098666a202b62b\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://84d84dca1b8c4339156c51a671295f281caad9c79add1e5c4af7aaba67dc7967\",\"dweb:/ipfs/QmNVuCAr5h1Yp5CdzKS9jF2DjLahVh65hiPEyfz1mZTbvY\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[],"type":"error","name":"DataNotFound"},{"inputs":[],"type":"error","name":"DataStale"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"FailedCall"},{"inputs":[],"type":"error","name":"InsufficientFee"},{"inputs":[],"type":"error","name":"InvalidDataFeedType"},{"inputs":[],"type":"error","name":"InvalidHyperlaneCheckpointRoot"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"InvalidUpdateData"},{"inputs":[],"type":"error","name":"InvalidUpdateDataSource"},{"inputs":[],"type":"error","name":"InvalidVersion"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[],"type":"error","name":"UUPSUnauthorizedCallContext"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"type":"error","name":"UUPSUnsupportedProxiableUUID"},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"feedId","type":"bytes32","indexed":true},{"internalType":"uint64","name":"publishTime","type":"uint64","indexed":false},{"internalType":"struct Options","name":"options","type":"tuple","components":[{"internalType":"struct Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint16","name":"numberOfSources","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"}]},{"internalType":"uint256","name":"strikePrice","type":"uint256"},{"internalType":"uint256","name":"impliedVolatility","type":"uint256"},{"internalType":"uint256","name":"timeToExpiry","type":"uint256"},{"internalType":"bool","name":"isCall","type":"bool"},{"internalType":"uint256","name":"underlyingPrice","type":"uint256"},{"internalType":"uint256","name":"optionPrice","type":"uint256"},{"internalType":"int256","name":"delta","type":"int256"},{"internalType":"int256","name":"gamma","type":"int256"},{"internalType":"int256","name":"vega","type":"int256"},{"internalType":"int256","name":"theta","type":"int256"},{"internalType":"int256","name":"rho","type":"int256"}],"indexed":false}],"type":"event","name":"OptionsUpdate","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"feedId","type":"bytes32","indexed":true},{"internalType":"uint64","name":"publishTime","type":"uint64","indexed":false},{"internalType":"struct Perp","name":"perp","type":"tuple","components":[{"internalType":"struct Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint16","name":"numberOfSources","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"}]},{"internalType":"uint256","name":"markPrice","type":"uint256"},{"internalType":"uint256","name":"fundingRate","type":"uint256"},{"internalType":"uint256","name":"openInterest","type":"uint256"},{"internalType":"uint256","name":"volume","type":"uint256"}],"indexed":false}],"type":"event","name":"PerpUpdate","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"feedId","type":"bytes32","indexed":true},{"internalType":"uint64","name":"publishTime","type":"uint64","indexed":false},{"internalType":"struct RealizedVolatility","name":"realizedVolatility","type":"tuple","components":[{"internalType":"struct Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint16","name":"numberOfSources","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"}]},{"internalType":"uint256","name":"volatility","type":"uint256"},{"internalType":"uint256","name":"timePeriod","type":"uint256"},{"internalType":"uint256","name":"startPrice","type":"uint256"},{"internalType":"uint256","name":"endPrice","type":"uint256"},{"internalType":"uint256","name":"highPrice","type":"uint256"},{"internalType":"uint256","name":"lowPrice","type":"uint256"},{"internalType":"uint256","name":"numberOfDataPoints","type":"uint256"}],"indexed":false}],"type":"event","name":"RealizedVolatilityUpdate","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"feedId","type":"bytes32","indexed":true},{"internalType":"uint64","name":"publishTime","type":"uint64","indexed":false},{"internalType":"struct SpotMedian","name":"spotMedian","type":"tuple","components":[{"internalType":"struct Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint16","name":"numberOfSources","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"}]},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"volume","type":"uint256"}],"indexed":false}],"type":"event","name":"SpotMedianUpdate","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"feedId","type":"bytes32","indexed":true},{"internalType":"uint64","name":"publishTime","type":"uint64","indexed":false},{"internalType":"struct TWAP","name":"twap","type":"tuple","components":[{"internalType":"struct Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint16","name":"numberOfSources","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"}]},{"internalType":"uint256","name":"twapPrice","type":"uint256"},{"internalType":"uint256","name":"timePeriod","type":"uint256"},{"internalType":"uint256","name":"startPrice","type":"uint256"},{"internalType":"uint256","name":"endPrice","type":"uint256"},{"internalType":"uint256","name":"totalVolume","type":"uint256"},{"internalType":"uint256","name":"numberOfDataPoints","type":"uint256"}],"indexed":false}],"type":"event","name":"TWAPUpdate","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"_isValidDataSource","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"stateMutability":"view","type":"function","name":"dataFeedExists","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"uint256","name":"age","type":"uint256"}],"stateMutability":"view","type":"function","name":"getOptionsNoOlderThan","outputs":[{"internalType":"struct Options","name":"data","type":"tuple","components":[{"internalType":"struct Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint16","name":"numberOfSources","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"}]},{"internalType":"uint256","name":"strikePrice","type":"uint256"},{"internalType":"uint256","name":"impliedVolatility","type":"uint256"},{"internalType":"uint256","name":"timeToExpiry","type":"uint256"},{"internalType":"bool","name":"isCall","type":"bool"},{"internalType":"uint256","name":"underlyingPrice","type":"uint256"},{"internalType":"uint256","name":"optionPrice","type":"uint256"},{"internalType":"int256","name":"delta","type":"int256"},{"internalType":"int256","name":"gamma","type":"int256"},{"internalType":"int256","name":"vega","type":"int256"},{"internalType":"int256","name":"theta","type":"int256"},{"internalType":"int256","name":"rho","type":"int256"}]}]},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"uint256","name":"age","type":"uint256"}],"stateMutability":"view","type":"function","name":"getPerpNoOlderThan","outputs":[{"internalType":"struct Perp","name":"data","type":"tuple","components":[{"internalType":"struct Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint16","name":"numberOfSources","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"}]},{"internalType":"uint256","name":"markPrice","type":"uint256"},{"internalType":"uint256","name":"fundingRate","type":"uint256"},{"internalType":"uint256","name":"openInterest","type":"uint256"},{"internalType":"uint256","name":"volume","type":"uint256"}]}]},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"uint256","name":"age","type":"uint256"}],"stateMutability":"view","type":"function","name":"getRealizedVolatilityNoOlderThan","outputs":[{"internalType":"struct RealizedVolatility","name":"data","type":"tuple","components":[{"internalType":"struct Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint16","name":"numberOfSources","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"}]},{"internalType":"uint256","name":"volatility","type":"uint256"},{"internalType":"uint256","name":"timePeriod","type":"uint256"},{"internalType":"uint256","name":"startPrice","type":"uint256"},{"internalType":"uint256","name":"endPrice","type":"uint256"},{"internalType":"uint256","name":"highPrice","type":"uint256"},{"internalType":"uint256","name":"lowPrice","type":"uint256"},{"internalType":"uint256","name":"numberOfDataPoints","type":"uint256"}]}]},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"uint256","name":"age","type":"uint256"}],"stateMutability":"view","type":"function","name":"getSpotMedianNoOlderThan","outputs":[{"internalType":"struct SpotMedian","name":"data","type":"tuple","components":[{"internalType":"struct Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint16","name":"numberOfSources","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"}]},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"volume","type":"uint256"}]}]},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"uint256","name":"age","type":"uint256"}],"stateMutability":"view","type":"function","name":"getTwapNoOlderThan","outputs":[{"internalType":"struct TWAP","name":"data","type":"tuple","components":[{"internalType":"struct Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint16","name":"numberOfSources","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"}]},{"internalType":"uint256","name":"twapPrice","type":"uint256"},{"internalType":"uint256","name":"timePeriod","type":"uint256"},{"internalType":"uint256","name":"startPrice","type":"uint256"},{"internalType":"uint256","name":"endPrice","type":"uint256"},{"internalType":"uint256","name":"totalVolume","type":"uint256"},{"internalType":"uint256","name":"numberOfDataPoints","type":"uint256"}]}]},{"inputs":[{"internalType":"bytes[]","name":"updateData","type":"bytes[]"}],"stateMutability":"view","type":"function","name":"getUpdateFee","outputs":[{"internalType":"uint256","name":"feeAmount","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getValidTimePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"hyperlane","outputs":[{"internalType":"contract IHyperlane","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_hyperlane","type":"address"},{"internalType":"address","name":"initial_owner","type":"address"},{"internalType":"uint16[]","name":"_dataSourceEmitterChainIds","type":"uint16[]"},{"internalType":"bytes32[]","name":"_dataSourceEmitterAddresses","type":"bytes32[]"},{"internalType":"uint256","name":"_validTimePeriodSeconds","type":"uint256"},{"internalType":"uint256","name":"_singleUpdateFeeInWei","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"uint16","name":"chainId","type":"uint16"},{"internalType":"bytes32","name":"emitterAddress","type":"bytes32"}],"stateMutability":"view","type":"function","name":"isValidDataSource","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"optionsFeeds","outputs":[{"internalType":"struct Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint16","name":"numberOfSources","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"}]},{"internalType":"uint256","name":"strikePrice","type":"uint256"},{"internalType":"uint256","name":"impliedVolatility","type":"uint256"},{"internalType":"uint256","name":"timeToExpiry","type":"uint256"},{"internalType":"bool","name":"isCall","type":"bool"},{"internalType":"uint256","name":"underlyingPrice","type":"uint256"},{"internalType":"uint256","name":"optionPrice","type":"uint256"},{"internalType":"int256","name":"delta","type":"int256"},{"internalType":"int256","name":"gamma","type":"int256"},{"internalType":"int256","name":"vega","type":"int256"},{"internalType":"int256","name":"theta","type":"int256"},{"internalType":"int256","name":"rho","type":"int256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"perpFeeds","outputs":[{"internalType":"struct Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint16","name":"numberOfSources","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"}]},{"internalType":"uint256","name":"markPrice","type":"uint256"},{"internalType":"uint256","name":"fundingRate","type":"uint256"},{"internalType":"uint256","name":"openInterest","type":"uint256"},{"internalType":"uint256","name":"volume","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"rvFeeds","outputs":[{"internalType":"struct Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint16","name":"numberOfSources","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"}]},{"internalType":"uint256","name":"volatility","type":"uint256"},{"internalType":"uint256","name":"timePeriod","type":"uint256"},{"internalType":"uint256","name":"startPrice","type":"uint256"},{"internalType":"uint256","name":"endPrice","type":"uint256"},{"internalType":"uint256","name":"highPrice","type":"uint256"},{"internalType":"uint256","name":"lowPrice","type":"uint256"},{"internalType":"uint256","name":"numberOfDataPoints","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"singleUpdateFeeInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"spotMedianFeeds","outputs":[{"internalType":"struct Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint16","name":"numberOfSources","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"}]},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"volume","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"twapFeeds","outputs":[{"internalType":"struct Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint16","name":"numberOfSources","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"}]},{"internalType":"uint256","name":"twapPrice","type":"uint256"},{"internalType":"uint256","name":"timePeriod","type":"uint256"},{"internalType":"uint256","name":"startPrice","type":"uint256"},{"internalType":"uint256","name":"endPrice","type":"uint256"},{"internalType":"uint256","name":"totalVolume","type":"uint256"},{"internalType":"uint256","name":"numberOfDataPoints","type":"uint256"}]},{"inputs":[{"internalType":"bytes[]","name":"updateData","type":"bytes[]"}],"stateMutability":"payable","type":"function","name":"updateDataFeeds"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"},{"inputs":[],"stateMutability":"view","type":"function","name":"validTimePeriodSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"version","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"withdraw_funds"}],"devdoc":{"kind":"dev","methods":{"dataFeedExists(bytes32)":{"params":{"id":"The data feed ID."},"returns":{"_0":"True if the data feed exists, false otherwise."}},"getOptionsNoOlderThan(bytes32,uint256)":{"params":{"age":"The maximum allowed age (in seconds) for the options data.","id":"The unique identifier of the options data feed."},"returns":{"data":"The latest valid Options data, or a revert if no valid data is available within the specified age."}},"getPerpNoOlderThan(bytes32,uint256)":{"params":{"age":"The maximum allowed age (in seconds) for the perpetuals data.","id":"The unique identifier of the perpetuals data feed."},"returns":{"data":"The latest valid Perp data, or a revert if no valid data is available within the specified age."}},"getRealizedVolatilityNoOlderThan(bytes32,uint256)":{"params":{"age":"The maximum allowed age (in seconds) for the volatility data.","id":"The unique identifier of the realized volatility data feed."},"returns":{"data":"The latest valid RealizedVolatility data, or a revert if no valid data is available within the specified age."}},"getSpotMedianNoOlderThan(bytes32,uint256)":{"params":{"age":"The maximum allowed age (in seconds) for the price data.","id":"The unique identifier of the data feed."},"returns":{"data":"The latest valid SpotMedian data, or a revert if no valid data is available within the specified age."}},"getTwapNoOlderThan(bytes32,uint256)":{"params":{"age":"The maximum allowed age (in seconds) for the TWAP data.","id":"The unique identifier of the TWAP data feed."},"returns":{"data":"The latest valid TWAP data, or a revert if no valid data is available within the specified age."}},"getUpdateFee(bytes[])":{"params":{"updateData":"Array of price update data."},"returns":{"feeAmount":"The required fee in Wei."}},"owner()":{"details":"Returns the address of the current owner."},"proxiableUUID()":{"details":"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"updateDataFeeds(bytes[])":{"details":"Emits a `DataFeedUpdate` event for each updated data feed.Reverts if the caller has not paid the required fee.","params":{"updateData":"The data."}},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}},"version":1},"userdoc":{"kind":"user","methods":{"dataFeedExists(bytes32)":{"notice":"Checks if a data feed exists."},"getOptionsNoOlderThan(bytes32,uint256)":{"notice":"Fetches the latest options data that is no older than a specified age."},"getPerpNoOlderThan(bytes32,uint256)":{"notice":"Fetches the latest perpetuals data that is no older than a specified age."},"getRealizedVolatilityNoOlderThan(bytes32,uint256)":{"notice":"Fetches the latest realized volatility that is no older than a specified age."},"getSpotMedianNoOlderThan(bytes32,uint256)":{"notice":"Fetches the latest spot median price that is no older than a specified age."},"getTwapNoOlderThan(bytes32,uint256)":{"notice":"Fetches the latest TWAP (Time-Weighted Average Price) that is no older than a specified age."},"getUpdateFee(bytes[])":{"notice":"Returns the required fee to update an array of price updates."},"updateDataFeeds(bytes[])":{"notice":"Updates data feeds given some update data. Before calling this function, the caller must have paid the required fee. Which can be calculated using the `getUpdateFee` function. Data feeds will only be updated if data is more recent than the current data."}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Pragma.sol":"Pragma"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0x490959f972df54829d0ffacb71fa025429d9b7b9ebd118f418b41e9c0041ef73","urls":["bzz-raw://1883bc1a16a88922abccd415d1b41caf00c38ee581ae3e5976018d9c17d2c4b7","dweb:/ipfs/QmP2vzQM8RR8ce675KhuZEaUicAPRMUbPLwBsTpxByvn18"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol":{"keccak256":"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486","urls":["bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d","dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0xf5c04a8bf51755681f7db413095377dfd1a05b98b6326fb1da0e9a297057caf0","urls":["bzz-raw://f57690465f41860906cf84e6970baaacae9d05b8311674812e6b502bb510441e","dweb:/ipfs/Qme5swSUieatWond1BHyZaEztdLAPu67KcoQTeY4pH5wVd"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0x5f3770f82f75d132e210b43c071d3feec1bef13c385d1d799763a366e8bda311","urls":["bzz-raw://3a50b7702cbd525c4a0fd3c36d1e116432b5f645f84cb25e4473dc9c88a917c5","dweb:/ipfs/QmaN5QKZwgypVK3zAwdgXfsygEeauRYa4sSe4x8yKXDRtV"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c","urls":["bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa","dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0x80b4189de089dc632b752b365a16c5063b58cc24da0dd38b82f2c25f56d25c84","urls":["bzz-raw://81e2717e78844156a86733f1cada84dba906ffe03e4957de12ca219c65e9191b","dweb:/ipfs/QmW8vg3AafPJRo7EC75RQJTtjiaYmfPa4U4sqmEuBXXzaP"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol":{"keccak256":"0x1b0625096e82d06abdcf1844172ef78ef54a5e878761f4d905fda07eaf098424","urls":["bzz-raw://5cd99f1a4836c07461cb3ea023ae2f6d1d01e80694b764a87623aa7252754756","dweb:/ipfs/QmNPNDuiNU6TJatZcdBcrwixBoo5MSXNDq4kaXhpJLWGpB"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0xfd29ed7a01e9ef109cc31542ca0f51ba3e793740570b69172ec3d8bfbb1643b4","urls":["bzz-raw://99379e0649be8106d2708a2bde73b5cdaba4505f1001f1586b53788bf971d097","dweb:/ipfs/QmV9cCnvFoVzV2cVDW4Zbs3JQ3ehxBcooQS52taVxR637S"],"license":"MIT"},"src/Pragma.sol":{"keccak256":"0xf89995e23351ab6fbb25f3dc95b885e81bc7b97f7bc8982684595984de420c09","urls":["bzz-raw://14b8f09887435dab43cfb0bbc09817b46b410dc6d440c6b5032e8f5601800e1f","dweb:/ipfs/QmZCk31tM9SpGvah3KsGKrYh579c1pBfBpS1ujdueQURvF"],"license":"Apache 2"},"src/PragmaDecoder.sol":{"keccak256":"0x7047b7a1f5f77a34a50ab67986bb0c9e7532bcf2a8a2633dc0857ae7acbc5bf5","urls":["bzz-raw://3fbba793eec4a3bcb7bfe58768743bd3f611d483b545d5a5c575cf39fab7aacf","dweb:/ipfs/Qma8444uYEFE4aHUV83D4pGaA1211MFr4pn111ynv1BUh5"],"license":"Apache 2"},"src/interfaces/IHyperlane.sol":{"keccak256":"0x6dd20bc4d6d8095d325a990f36ad17a7a8368a15d4e0d7b82f2fb9f3cbdb17c9","urls":["bzz-raw://1d962f61740af891ede951a01410df5b13c675777fb644cfaefab0a750382bbf","dweb:/ipfs/QmVfFyJ8fxiyzGr729V7aG9tJFLTwSyogTArHvUPyoL5Qg"],"license":"Apache 2"},"src/interfaces/IPragma.sol":{"keccak256":"0x6bd6515f3d07ab43963f4e2bb3422ebc7a546e389756f842e54afdd4bcf401e8","urls":["bzz-raw://b9f1159fae9808862e13837d3617ae4ef1166d54a3d1d7a5050edbf5cb866b53","dweb:/ipfs/QmefhvLM1jdCt3b7Jfq8qtEeVTXATMo6FWDUsTGg79RRhL"],"license":"Apache 2"},"src/interfaces/PragmaStructs.sol":{"keccak256":"0x199822095c5fd1de00f5920e5a4ed95f340322ef499cf346d5ecfadeb5f60269","urls":["bzz-raw://36e499944b2f354d4ae5627912f05fa925c398a3b4d5b6c1fec219441eae1850","dweb:/ipfs/QmQa8LyFcmziQ89koJfmjaFVPpgyHcxSjbxoXP1K5GoKGs"],"license":"Apache 2"},"src/libraries/BytesLib.sol":{"keccak256":"0x44653e7d858d3ac584836abbc48c9168a92c82561c4f6f8cc233f551fd97ffdc","urls":["bzz-raw://3baaa3305da8ceb5d9ca67f9fbc1c556cedc9838163d3cdda940b937f0eff58d","dweb:/ipfs/QmaKgQZkrnt2tL4VAet3jF3GKwunz87GnhKLawBz1aV3Ma"],"license":"Unlicense"},"src/libraries/ConstantsLib.sol":{"keccak256":"0xa839f506eb9cdeb048839e1e98e056b0983b00ead78ec22437379fa828ae9542","urls":["bzz-raw://c3ddd94a7b1d1fba7f17ad49397cb0a8528e18356861debb63284edf2c2fbf48","dweb:/ipfs/QmdJd9z9GN4m5mSc3Q5AuCoB7szwqEzC19MB2EkZWvTbWQ"],"license":"GPL-2.0-or-later"},"src/libraries/DataParser.sol":{"keccak256":"0xd7e97b4d13ba828dd35bd84cfd419286895fbe0b3dfd003d7db692476e626095","urls":["bzz-raw://f762e9b46295eaab78291cfe35fe5061d671bb3ddefead1088b1150bf0fad3c9","dweb:/ipfs/QmYQAYeNUhE3NEryFGNLghGH4T67B4bYJ6hFTn6zcNdXQW"],"license":"MIT"},"src/libraries/ErrorsLib.sol":{"keccak256":"0xe2d16754bf56c44fb876454e917b9715a0c991c387d9a185f2b06697b6fadf55","urls":["bzz-raw://7b30985127a441f4646cfd7225a069d17c9d29b9f2b30f57950f7ac3f234053b","dweb:/ipfs/QmXWK5FcbvC7CbWzAwQaz8s3kT7dYT5edyPng5TEpfAL2D"],"license":"GPL-2.0-or-later"},"src/libraries/EventsLib.sol":{"keccak256":"0x7b5212636969cc535216917fb8400701f0c3e6cb6bb111da51914bd8cd5a8677","urls":["bzz-raw://962b195f56ab4228b5a8e8735f4e1d97414a27ecf10ed39f9cf9202efdc92b82","dweb:/ipfs/QmUD4xUjgxuKJ4PihCuGQMrb36dAwabSzCRcLU4mUqf6Gk"],"license":"GPL-2.0-or-later"},"src/libraries/MerkleTree.sol":{"keccak256":"0x97160fed5b287dc5375228ff9823e31d257c34f0eccecf4892043c00695e4177","urls":["bzz-raw://118d0cce4053b7022e718d1556aab36bec850f0f5f7ac3a9d10dcf85dc6cbd7d","dweb:/ipfs/QmRFFczwXPzJHiwJVJhEDec4SxBrvjt5BYFPsNrYMYw6Y8"],"license":"Apache 2"},"src/libraries/UnsafeBytesLib.sol":{"keccak256":"0xc88690f8bb4c5f4478d232c12d7c7e59d527929883524e088d26b1ed47da661e","urls":["bzz-raw://de2ffea160aa099a49de5ab7f4c9df9f9dac945cbad131d96cf6f37f63c185c1","dweb:/ipfs/QmeEobBaUksKwDvMd7Dqvf62snArQjp8ayQfss4EnR1pQF"],"license":"Unlicense"},"src/libraries/UnsafeCalldataBytesLib.sol":{"keccak256":"0x5865e707c7b2115ebc8edf2a4d5bb12f30b08ddec7ef54f044098666a202b62b","urls":["bzz-raw://84d84dca1b8c4339156c51a671295f281caad9c79add1e5c4af7aaba67dc7967","dweb:/ipfs/QmNVuCAr5h1Yp5CdzKS9jF2DjLahVh65hiPEyfz1mZTbvY"],"license":"Unlicense"}},"version":1},"storageLayout":{"storage":[{"astId":49874,"contract":"src/Pragma.sol:Pragma","label":"hyperlane","offset":0,"slot":"0","type":"t_contract(IHyperlane)50691"},{"astId":49878,"contract":"src/Pragma.sol:Pragma","label":"_isValidDataSource","offset":0,"slot":"1","type":"t_mapping(t_bytes32,t_bool)"},{"astId":49883,"contract":"src/Pragma.sol:Pragma","label":"spotMedianFeeds","offset":0,"slot":"2","type":"t_mapping(t_bytes32,t_struct(SpotMedian)50838_storage)"},{"astId":49888,"contract":"src/Pragma.sol:Pragma","label":"twapFeeds","offset":0,"slot":"3","type":"t_mapping(t_bytes32,t_struct(TWAP)50854_storage)"},{"astId":49893,"contract":"src/Pragma.sol:Pragma","label":"rvFeeds","offset":0,"slot":"4","type":"t_mapping(t_bytes32,t_struct(RealizedVolatility)50872_storage)"},{"astId":49898,"contract":"src/Pragma.sol:Pragma","label":"optionsFeeds","offset":0,"slot":"5","type":"t_mapping(t_bytes32,t_struct(Options)50898_storage)"},{"astId":49903,"contract":"src/Pragma.sol:Pragma","label":"perpFeeds","offset":0,"slot":"6","type":"t_mapping(t_bytes32,t_struct(Perp)50910_storage)"},{"astId":49277,"contract":"src/Pragma.sol:Pragma","label":"validTimePeriodSeconds","offset":0,"slot":"7","type":"t_uint256"},{"astId":49279,"contract":"src/Pragma.sol:Pragma","label":"singleUpdateFeeInWei","offset":0,"slot":"8","type":"t_uint256"}],"types":{"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IHyperlane)50691":{"encoding":"inplace","label":"contract IHyperlane","numberOfBytes":"20"},"t_int256":{"encoding":"inplace","label":"int256","numberOfBytes":"32"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_struct(Options)50898_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct Options)","numberOfBytes":"32","value":"t_struct(Options)50898_storage"},"t_mapping(t_bytes32,t_struct(Perp)50910_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct Perp)","numberOfBytes":"32","value":"t_struct(Perp)50910_storage"},"t_mapping(t_bytes32,t_struct(RealizedVolatility)50872_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct RealizedVolatility)","numberOfBytes":"32","value":"t_struct(RealizedVolatility)50872_storage"},"t_mapping(t_bytes32,t_struct(SpotMedian)50838_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct SpotMedian)","numberOfBytes":"32","value":"t_struct(SpotMedian)50838_storage"},"t_mapping(t_bytes32,t_struct(TWAP)50854_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct TWAP)","numberOfBytes":"32","value":"t_struct(TWAP)50854_storage"},"t_struct(Metadata)50830_storage":{"encoding":"inplace","label":"struct Metadata","numberOfBytes":"64","members":[{"astId":50823,"contract":"src/Pragma.sol:Pragma","label":"feedId","offset":0,"slot":"0","type":"t_bytes32"},{"astId":50825,"contract":"src/Pragma.sol:Pragma","label":"timestamp","offset":0,"slot":"1","type":"t_uint64"},{"astId":50827,"contract":"src/Pragma.sol:Pragma","label":"numberOfSources","offset":8,"slot":"1","type":"t_uint16"},{"astId":50829,"contract":"src/Pragma.sol:Pragma","label":"decimals","offset":10,"slot":"1","type":"t_uint8"}]},"t_struct(Options)50898_storage":{"encoding":"inplace","label":"struct Options","numberOfBytes":"416","members":[{"astId":50875,"contract":"src/Pragma.sol:Pragma","label":"metadata","offset":0,"slot":"0","type":"t_struct(Metadata)50830_storage"},{"astId":50877,"contract":"src/Pragma.sol:Pragma","label":"strikePrice","offset":0,"slot":"2","type":"t_uint256"},{"astId":50879,"contract":"src/Pragma.sol:Pragma","label":"impliedVolatility","offset":0,"slot":"3","type":"t_uint256"},{"astId":50881,"contract":"src/Pragma.sol:Pragma","label":"timeToExpiry","offset":0,"slot":"4","type":"t_uint256"},{"astId":50883,"contract":"src/Pragma.sol:Pragma","label":"isCall","offset":0,"slot":"5","type":"t_bool"},{"astId":50885,"contract":"src/Pragma.sol:Pragma","label":"underlyingPrice","offset":0,"slot":"6","type":"t_uint256"},{"astId":50887,"contract":"src/Pragma.sol:Pragma","label":"optionPrice","offset":0,"slot":"7","type":"t_uint256"},{"astId":50889,"contract":"src/Pragma.sol:Pragma","label":"delta","offset":0,"slot":"8","type":"t_int256"},{"astId":50891,"contract":"src/Pragma.sol:Pragma","label":"gamma","offset":0,"slot":"9","type":"t_int256"},{"astId":50893,"contract":"src/Pragma.sol:Pragma","label":"vega","offset":0,"slot":"10","type":"t_int256"},{"astId":50895,"contract":"src/Pragma.sol:Pragma","label":"theta","offset":0,"slot":"11","type":"t_int256"},{"astId":50897,"contract":"src/Pragma.sol:Pragma","label":"rho","offset":0,"slot":"12","type":"t_int256"}]},"t_struct(Perp)50910_storage":{"encoding":"inplace","label":"struct Perp","numberOfBytes":"192","members":[{"astId":50901,"contract":"src/Pragma.sol:Pragma","label":"metadata","offset":0,"slot":"0","type":"t_struct(Metadata)50830_storage"},{"astId":50903,"contract":"src/Pragma.sol:Pragma","label":"markPrice","offset":0,"slot":"2","type":"t_uint256"},{"astId":50905,"contract":"src/Pragma.sol:Pragma","label":"fundingRate","offset":0,"slot":"3","type":"t_uint256"},{"astId":50907,"contract":"src/Pragma.sol:Pragma","label":"openInterest","offset":0,"slot":"4","type":"t_uint256"},{"astId":50909,"contract":"src/Pragma.sol:Pragma","label":"volume","offset":0,"slot":"5","type":"t_uint256"}]},"t_struct(RealizedVolatility)50872_storage":{"encoding":"inplace","label":"struct RealizedVolatility","numberOfBytes":"288","members":[{"astId":50857,"contract":"src/Pragma.sol:Pragma","label":"metadata","offset":0,"slot":"0","type":"t_struct(Metadata)50830_storage"},{"astId":50859,"contract":"src/Pragma.sol:Pragma","label":"volatility","offset":0,"slot":"2","type":"t_uint256"},{"astId":50861,"contract":"src/Pragma.sol:Pragma","label":"timePeriod","offset":0,"slot":"3","type":"t_uint256"},{"astId":50863,"contract":"src/Pragma.sol:Pragma","label":"startPrice","offset":0,"slot":"4","type":"t_uint256"},{"astId":50865,"contract":"src/Pragma.sol:Pragma","label":"endPrice","offset":0,"slot":"5","type":"t_uint256"},{"astId":50867,"contract":"src/Pragma.sol:Pragma","label":"highPrice","offset":0,"slot":"6","type":"t_uint256"},{"astId":50869,"contract":"src/Pragma.sol:Pragma","label":"lowPrice","offset":0,"slot":"7","type":"t_uint256"},{"astId":50871,"contract":"src/Pragma.sol:Pragma","label":"numberOfDataPoints","offset":0,"slot":"8","type":"t_uint256"}]},"t_struct(SpotMedian)50838_storage":{"encoding":"inplace","label":"struct SpotMedian","numberOfBytes":"128","members":[{"astId":50833,"contract":"src/Pragma.sol:Pragma","label":"metadata","offset":0,"slot":"0","type":"t_struct(Metadata)50830_storage"},{"astId":50835,"contract":"src/Pragma.sol:Pragma","label":"price","offset":0,"slot":"2","type":"t_uint256"},{"astId":50837,"contract":"src/Pragma.sol:Pragma","label":"volume","offset":0,"slot":"3","type":"t_uint256"}]},"t_struct(TWAP)50854_storage":{"encoding":"inplace","label":"struct TWAP","numberOfBytes":"256","members":[{"astId":50841,"contract":"src/Pragma.sol:Pragma","label":"metadata","offset":0,"slot":"0","type":"t_struct(Metadata)50830_storage"},{"astId":50843,"contract":"src/Pragma.sol:Pragma","label":"twapPrice","offset":0,"slot":"2","type":"t_uint256"},{"astId":50845,"contract":"src/Pragma.sol:Pragma","label":"timePeriod","offset":0,"slot":"3","type":"t_uint256"},{"astId":50847,"contract":"src/Pragma.sol:Pragma","label":"startPrice","offset":0,"slot":"4","type":"t_uint256"},{"astId":50849,"contract":"src/Pragma.sol:Pragma","label":"endPrice","offset":0,"slot":"5","type":"t_uint256"},{"astId":50851,"contract":"src/Pragma.sol:Pragma","label":"totalVolume","offset":0,"slot":"6","type":"t_uint256"},{"astId":50853,"contract":"src/Pragma.sol:Pragma","label":"numberOfDataPoints","offset":0,"slot":"7","type":"t_uint256"}]},"t_uint16":{"encoding":"inplace","label":"uint16","numberOfBytes":"2"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint64":{"encoding":"inplace","label":"uint64","numberOfBytes":"8"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"ast":{"absolutePath":"src/Pragma.sol","id":49850,"exportedSymbols":{"BytesLib":[51421],"ConstantsLib":[51433],"ContextUpgradeable":[47450],"DataFeed":[50786],"DataFeedType":[50788],"DataParser":[52216],"DataSource":[50793],"ERC1967Utils":[47961],"ErrorsLib":[52236],"EventsLib":[52302],"FeedType":[50935],"HyMsg":[50821],"IERC1822Proxiable":[47629],"IHyperlane":[50691],"IPragma":[50775],"Initializable":[47222],"MerkleTree":[52712],"Metadata":[50830],"Options":[50898],"OwnableUpgradeable":[46968],"ParsedData":[50929],"Perp":[50910],"Pragma":[49849],"PragmaDecoder":[50660],"RealizedVolatility":[50872],"Signature":[50802],"SpotMedian":[50838],"StructsInitializers":[51062],"TWAP":[50854],"UUPSUpgradeable":[47404],"UnsafeBytesLib":[52936],"UnsafeCalldataBytesLib":[53118]},"nodeType":"SourceUnit","src":"38:5922:41","nodes":[{"id":49253,"nodeType":"PragmaDirective","src":"38:23:41","nodes":[],"literals":["solidity","^","0.8",".0"]},{"id":49256,"nodeType":"ImportDirective","src":"63:59:41","nodes":[],"absolutePath":"src/interfaces/IPragma.sol","file":"./interfaces/IPragma.sol","nameLocation":"-1:-1:-1","scope":49850,"sourceUnit":50776,"symbolAliases":[{"foreign":{"id":49254,"name":"IPragma","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50775,"src":"71:7:41","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":49255,"name":"DataFeed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50786,"src":"80:8:41","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":49257,"nodeType":"ImportDirective","src":"123:75:41","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":49850,"sourceUnit":47223,"symbolAliases":[],"unitAlias":""},{"id":49258,"nodeType":"ImportDirective","src":"199:77:41","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol","nameLocation":"-1:-1:-1","scope":49850,"sourceUnit":47405,"symbolAliases":[],"unitAlias":""},{"id":49259,"nodeType":"ImportDirective","src":"277:75:41","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":49850,"sourceUnit":46969,"symbolAliases":[],"unitAlias":""},{"id":49260,"nodeType":"ImportDirective","src":"353:29:41","nodes":[],"absolutePath":"src/PragmaDecoder.sol","file":"./PragmaDecoder.sol","nameLocation":"-1:-1:-1","scope":49850,"sourceUnit":50661,"symbolAliases":[],"unitAlias":""},{"id":49261,"nodeType":"ImportDirective","src":"383:35:41","nodes":[],"absolutePath":"src/libraries/EventsLib.sol","file":"./libraries/EventsLib.sol","nameLocation":"-1:-1:-1","scope":49850,"sourceUnit":52303,"symbolAliases":[],"unitAlias":""},{"id":49262,"nodeType":"ImportDirective","src":"419:35:41","nodes":[],"absolutePath":"src/libraries/ErrorsLib.sol","file":"./libraries/ErrorsLib.sol","nameLocation":"-1:-1:-1","scope":49850,"sourceUnit":52237,"symbolAliases":[],"unitAlias":""},{"id":49263,"nodeType":"ImportDirective","src":"455:40:41","nodes":[],"absolutePath":"src/interfaces/PragmaStructs.sol","file":"./interfaces/PragmaStructs.sol","nameLocation":"-1:-1:-1","scope":49850,"sourceUnit":51063,"symbolAliases":[],"unitAlias":""},{"id":49264,"nodeType":"ImportDirective","src":"496:36:41","nodes":[],"absolutePath":"src/libraries/DataParser.sol","file":"./libraries/DataParser.sol","nameLocation":"-1:-1:-1","scope":49850,"sourceUnit":52217,"symbolAliases":[],"unitAlias":""},{"id":49849,"nodeType":"ContractDefinition","src":"651:5308:41","nodes":[{"id":49277,"nodeType":"VariableDeclaration","src":"769:37:41","nodes":[],"constant":false,"functionSelector":"cb718a9b","mutability":"mutable","name":"validTimePeriodSeconds","nameLocation":"784:22:41","scope":49849,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49276,"name":"uint256","nodeType":"ElementaryTypeName","src":"769:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":49279,"nodeType":"VariableDeclaration","src":"812:35:41","nodes":[],"constant":false,"functionSelector":"48b6404d","mutability":"mutable","name":"singleUpdateFeeInWei","nameLocation":"827:20:41","scope":49849,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49278,"name":"uint256","nodeType":"ElementaryTypeName","src":"812:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":49286,"nodeType":"FunctionDefinition","src":"854:53:41","nodes":[],"body":{"id":49285,"nodeType":"Block","src":"868:39:41","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":49282,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47190,"src":"878:20:41","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":49283,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"878:22:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49284,"nodeType":"ExpressionStatement","src":"878:22:41"}]},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":49280,"nodeType":"ParameterList","parameters":[],"src":"865:2:41"},"returnParameters":{"id":49281,"nodeType":"ParameterList","parameters":[],"src":"868:0:41"},"scope":49849,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":49356,"nodeType":"FunctionDefinition","src":"913:772:41","nodes":[],"body":{"id":49355,"nodeType":"Block","src":"1203:482:41","nodes":[],"statements":[{"expression":{"arguments":[{"id":49306,"name":"initial_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49290,"src":"1228:13:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":49305,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46828,"src":"1213:14:41","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":49307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1213:29:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49308,"nodeType":"ExpressionStatement","src":"1213:29:41"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":49309,"name":"__UUPSUpgradeable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47276,"src":"1252:22:41","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":49310,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1252:24:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49311,"nodeType":"ExpressionStatement","src":"1252:24:41"},{"expression":{"id":49316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49312,"name":"hyperlane","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49874,"src":"1286:9:41","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperlane_$50691","typeString":"contract IHyperlane"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":49314,"name":"_hyperlane","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49288,"src":"1309:10:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":49313,"name":"IHyperlane","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50691,"src":"1298:10:41","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IHyperlane_$50691_$","typeString":"type(contract IHyperlane)"}},"id":49315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1298:22:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IHyperlane_$50691","typeString":"contract IHyperlane"}},"src":"1286:34:41","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperlane_$50691","typeString":"contract IHyperlane"}},"id":49317,"nodeType":"ExpressionStatement","src":"1286:34:41"},{"body":{"id":49345,"nodeType":"Block","src":"1395:172:41","statements":[{"expression":{"id":49343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":49329,"name":"_isValidDataSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49878,"src":"1409:18:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"}},"id":49341,"indexExpression":{"arguments":[{"arguments":[{"baseExpression":{"id":49333,"name":"_dataSourceEmitterChainIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49293,"src":"1472:26:41","typeDescriptions":{"typeIdentifier":"t_array$_t_uint16_$dyn_memory_ptr","typeString":"uint16[] memory"}},"id":49335,"indexExpression":{"id":49334,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49319,"src":"1499:1:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1472:29:41","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"baseExpression":{"id":49336,"name":"_dataSourceEmitterAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49296,"src":"1503:27:41","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":49338,"indexExpression":{"id":49337,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49319,"src":"1531:1:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1503:30:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":49331,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1455:3:41","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":49332,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1459:12:41","memberName":"encodePacked","nodeType":"MemberAccess","src":"1455:16:41","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":49339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1455:79:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":49330,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1428:9:41","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":49340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1428:120:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1409:140:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":49342,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1552:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"1409:147:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49344,"nodeType":"ExpressionStatement","src":"1409:147:41"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49322,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49319,"src":"1351:1:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":49323,"name":"_dataSourceEmitterChainIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49293,"src":"1355:26:41","typeDescriptions":{"typeIdentifier":"t_array$_t_uint16_$dyn_memory_ptr","typeString":"uint16[] memory"}},"id":49324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1382:6:41","memberName":"length","nodeType":"MemberAccess","src":"1355:33:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1351:37:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49346,"initializationExpression":{"assignments":[49319],"declarations":[{"constant":false,"id":49319,"mutability":"mutable","name":"i","nameLocation":"1344:1:41","nodeType":"VariableDeclaration","scope":49346,"src":"1336:9:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49318,"name":"uint256","nodeType":"ElementaryTypeName","src":"1336:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":49321,"initialValue":{"hexValue":"30","id":49320,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1348:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1336:13:41"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":49327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1390:3:41","subExpression":{"id":49326,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49319,"src":"1390:1:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":49328,"nodeType":"ExpressionStatement","src":"1390:3:41"},"nodeType":"ForStatement","src":"1331:236:41"},{"expression":{"id":49349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49347,"name":"validTimePeriodSeconds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49277,"src":"1576:22:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":49348,"name":"_validTimePeriodSeconds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49298,"src":"1601:23:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1576:48:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":49350,"nodeType":"ExpressionStatement","src":"1576:48:41"},{"expression":{"id":49353,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49351,"name":"singleUpdateFeeInWei","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49279,"src":"1634:20:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":49352,"name":"_singleUpdateFeeInWei","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49300,"src":"1657:21:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1634:44:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":49354,"nodeType":"ExpressionStatement","src":"1634:44:41"}]},"functionSelector":"d5d89eaf","implemented":true,"kind":"function","modifiers":[{"id":49303,"kind":"modifierInvocation","modifierName":{"id":49302,"name":"initializer","nameLocations":["1191:11:41"],"nodeType":"IdentifierPath","referencedDeclaration":47076,"src":"1191:11:41"},"nodeType":"ModifierInvocation","src":"1191:11:41"}],"name":"initialize","nameLocation":"922:10:41","parameters":{"id":49301,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49288,"mutability":"mutable","name":"_hyperlane","nameLocation":"950:10:41","nodeType":"VariableDeclaration","scope":49356,"src":"942:18:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":49287,"name":"address","nodeType":"ElementaryTypeName","src":"942:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":49290,"mutability":"mutable","name":"initial_owner","nameLocation":"978:13:41","nodeType":"VariableDeclaration","scope":49356,"src":"970:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":49289,"name":"address","nodeType":"ElementaryTypeName","src":"970:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":49293,"mutability":"mutable","name":"_dataSourceEmitterChainIds","nameLocation":"1017:26:41","nodeType":"VariableDeclaration","scope":49356,"src":"1001:42:41","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint16_$dyn_memory_ptr","typeString":"uint16[]"},"typeName":{"baseType":{"id":49291,"name":"uint16","nodeType":"ElementaryTypeName","src":"1001:6:41","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"id":49292,"nodeType":"ArrayTypeName","src":"1001:8:41","typeDescriptions":{"typeIdentifier":"t_array$_t_uint16_$dyn_storage_ptr","typeString":"uint16[]"}},"visibility":"internal"},{"constant":false,"id":49296,"mutability":"mutable","name":"_dataSourceEmitterAddresses","nameLocation":"1070:27:41","nodeType":"VariableDeclaration","scope":49356,"src":"1053:44:41","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":49294,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1053:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":49295,"nodeType":"ArrayTypeName","src":"1053:9:41","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":49298,"mutability":"mutable","name":"_validTimePeriodSeconds","nameLocation":"1115:23:41","nodeType":"VariableDeclaration","scope":49356,"src":"1107:31:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49297,"name":"uint256","nodeType":"ElementaryTypeName","src":"1107:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":49300,"mutability":"mutable","name":"_singleUpdateFeeInWei","nameLocation":"1156:21:41","nodeType":"VariableDeclaration","scope":49356,"src":"1148:29:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49299,"name":"uint256","nodeType":"ElementaryTypeName","src":"1148:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"932:251:41"},"returnParameters":{"id":49304,"nodeType":"ParameterList","parameters":[],"src":"1203:0:41"},"scope":49849,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":49365,"nodeType":"FunctionDefinition","src":"1691:84:41","nodes":[],"body":{"id":49364,"nodeType":"Block","src":"1773:2:41","nodes":[],"statements":[]},"baseFunctions":[47358],"implemented":true,"kind":"function","modifiers":[{"id":49362,"kind":"modifierInvocation","modifierName":{"id":49361,"name":"onlyOwner","nameLocations":["1763:9:41"],"nodeType":"IdentifierPath","referencedDeclaration":46863,"src":"1763:9:41"},"nodeType":"ModifierInvocation","src":"1763:9:41"}],"name":"_authorizeUpgrade","nameLocation":"1700:17:41","overrides":{"id":49360,"nodeType":"OverrideSpecifier","overrides":[],"src":"1754:8:41"},"parameters":{"id":49359,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49358,"mutability":"mutable","name":"newImplementation","nameLocation":"1726:17:41","nodeType":"VariableDeclaration","scope":49365,"src":"1718:25:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":49357,"name":"address","nodeType":"ElementaryTypeName","src":"1718:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1717:27:41"},"returnParameters":{"id":49363,"nodeType":"ParameterList","parameters":[],"src":"1773:0:41"},"scope":49849,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":49420,"nodeType":"FunctionDefinition","src":"1809:494:41","nodes":[],"body":{"id":49419,"nodeType":"Block","src":"1880:423:41","nodes":[],"statements":[{"assignments":[49373],"declarations":[{"constant":false,"id":49373,"mutability":"mutable","name":"totalNumUpdates","nameLocation":"1898:15:41","nodeType":"VariableDeclaration","scope":49419,"src":"1890:23:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49372,"name":"uint256","nodeType":"ElementaryTypeName","src":"1890:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":49375,"initialValue":{"hexValue":"30","id":49374,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1916:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1890:27:41"},{"assignments":[49377],"declarations":[{"constant":false,"id":49377,"mutability":"mutable","name":"len","nameLocation":"1935:3:41","nodeType":"VariableDeclaration","scope":49419,"src":"1927:11:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49376,"name":"uint256","nodeType":"ElementaryTypeName","src":"1927:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":49380,"initialValue":{"expression":{"id":49378,"name":"updateData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49369,"src":"1941:10:41","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}},"id":49379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1952:6:41","memberName":"length","nodeType":"MemberAccess","src":"1941:17:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1927:31:41"},{"body":{"id":49400,"nodeType":"Block","src":"1998:142:41","statements":[{"expression":{"id":49394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49388,"name":"totalNumUpdates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49373,"src":"2012:15:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"baseExpression":{"id":49390,"name":"updateData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49369,"src":"2056:10:41","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}},"id":49392,"indexExpression":{"id":49391,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49382,"src":"2067:1:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2056:13:41","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":49389,"name":"updateDataInfoFromUpdate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50482,"src":"2031:24:41","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_calldata_ptr_$returns$_t_uint8_$","typeString":"function (bytes calldata) returns (uint8)"}},"id":49393,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2031:39:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"2012:58:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":49395,"nodeType":"ExpressionStatement","src":"2012:58:41"},{"id":49399,"nodeType":"UncheckedBlock","src":"2084:46:41","statements":[{"expression":{"id":49397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2112:3:41","subExpression":{"id":49396,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49382,"src":"2112:1:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":49398,"nodeType":"ExpressionStatement","src":"2112:3:41"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49385,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49382,"src":"1988:1:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":49386,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49377,"src":"1992:3:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1988:7:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49401,"initializationExpression":{"assignments":[49382],"declarations":[{"constant":false,"id":49382,"mutability":"mutable","name":"i","nameLocation":"1981:1:41","nodeType":"VariableDeclaration","scope":49401,"src":"1973:9:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49381,"name":"uint256","nodeType":"ElementaryTypeName","src":"1973:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":49384,"initialValue":{"hexValue":"30","id":49383,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1985:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1973:13:41"},"isSimpleCounterLoop":false,"nodeType":"ForStatement","src":"1968:172:41"},{"assignments":[49403],"declarations":[{"constant":false,"id":49403,"mutability":"mutable","name":"requiredFee","nameLocation":"2157:11:41","nodeType":"VariableDeclaration","scope":49419,"src":"2149:19:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49402,"name":"uint256","nodeType":"ElementaryTypeName","src":"2149:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":49407,"initialValue":{"arguments":[{"id":49405,"name":"totalNumUpdates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49373,"src":"2183:15:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":49404,"name":"getTotalFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49444,"src":"2171:11:41","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":49406,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2171:28:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2149:50:41"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":49408,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2213:3:41","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":49409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2217:5:41","memberName":"value","nodeType":"MemberAccess","src":"2213:9:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":49410,"name":"requiredFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49403,"src":"2225:11:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2213:23:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49418,"nodeType":"IfStatement","src":"2209:88:41","trueBody":{"id":49417,"nodeType":"Block","src":"2238:59:41","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":49412,"name":"ErrorsLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52236,"src":"2259:9:41","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ErrorsLib_$52236_$","typeString":"type(library ErrorsLib)"}},"id":49414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2269:15:41","memberName":"InsufficientFee","nodeType":"MemberAccess","referencedDeclaration":52221,"src":"2259:25:41","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":49415,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2259:27:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":49416,"nodeType":"RevertStatement","src":"2252:34:41"}]}}]},"baseFunctions":[50702],"documentation":{"id":49366,"nodeType":"StructuredDocumentation","src":"1781:23:41","text":"@inheritdoc IPragma"},"functionSelector":"d58a8f6d","implemented":true,"kind":"function","modifiers":[],"name":"updateDataFeeds","nameLocation":"1818:15:41","parameters":{"id":49370,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49369,"mutability":"mutable","name":"updateData","nameLocation":"1851:10:41","nodeType":"VariableDeclaration","scope":49420,"src":"1834:27:41","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":49367,"name":"bytes","nodeType":"ElementaryTypeName","src":"1834:5:41","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":49368,"nodeType":"ArrayTypeName","src":"1834:7:41","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"1833:29:41"},"returnParameters":{"id":49371,"nodeType":"ParameterList","parameters":[],"src":"1880:0:41"},"scope":49849,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":49432,"nodeType":"FunctionDefinition","src":"2337:118:41","nodes":[],"body":{"id":49431,"nodeType":"Block","src":"2430:25:41","nodes":[],"statements":[{"expression":{"hexValue":"30","id":49429,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2447:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":49428,"id":49430,"nodeType":"Return","src":"2440:8:41"}]},"baseFunctions":[50711],"documentation":{"id":49421,"nodeType":"StructuredDocumentation","src":"2309:23:41","text":"@inheritdoc IPragma"},"functionSelector":"d47eed45","implemented":true,"kind":"function","modifiers":[],"name":"getUpdateFee","nameLocation":"2346:12:41","parameters":{"id":49425,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49424,"mutability":"mutable","name":"updateData","nameLocation":"2376:10:41","nodeType":"VariableDeclaration","scope":49432,"src":"2359:27:41","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":49422,"name":"bytes","nodeType":"ElementaryTypeName","src":"2359:5:41","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":49423,"nodeType":"ArrayTypeName","src":"2359:7:41","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"2358:29:41"},"returnParameters":{"id":49428,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49427,"mutability":"mutable","name":"feeAmount","nameLocation":"2419:9:41","nodeType":"VariableDeclaration","scope":49432,"src":"2411:17:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49426,"name":"uint256","nodeType":"ElementaryTypeName","src":"2411:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2410:19:41"},"scope":49849,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":49444,"nodeType":"FunctionDefinition","src":"2461:151:41","nodes":[],"body":{"id":49443,"nodeType":"Block","src":"2550:62:41","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49439,"name":"totalNumUpdates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49434,"src":"2567:15:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":49440,"name":"singleUpdateFeeInWei","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49279,"src":"2585:20:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2567:38:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":49438,"id":49442,"nodeType":"Return","src":"2560:45:41"}]},"implemented":true,"kind":"function","modifiers":[],"name":"getTotalFee","nameLocation":"2470:11:41","parameters":{"id":49435,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49434,"mutability":"mutable","name":"totalNumUpdates","nameLocation":"2490:15:41","nodeType":"VariableDeclaration","scope":49444,"src":"2482:23:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49433,"name":"uint256","nodeType":"ElementaryTypeName","src":"2482:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2481:25:41"},"returnParameters":{"id":49438,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49437,"mutability":"mutable","name":"requiredFee","nameLocation":"2537:11:41","nodeType":"VariableDeclaration","scope":49444,"src":"2529:19:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49436,"name":"uint256","nodeType":"ElementaryTypeName","src":"2529:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2528:21:41"},"scope":49849,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":49491,"nodeType":"FunctionDefinition","src":"2618:389:41","nodes":[],"body":{"id":49490,"nodeType":"Block","src":"2724:283:41","nodes":[],"statements":[{"expression":{"id":49458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49454,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49452,"src":"2734:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_SpotMedian_$50838_memory_ptr","typeString":"struct SpotMedian memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":49455,"name":"spotMedianFeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49883,"src":"2741:15:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_SpotMedian_$50838_storage_$","typeString":"mapping(bytes32 => struct SpotMedian storage ref)"}},"id":49457,"indexExpression":{"id":49456,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49446,"src":"2757:2:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2741:19:41","typeDescriptions":{"typeIdentifier":"t_struct$_SpotMedian_$50838_storage","typeString":"struct SpotMedian storage ref"}},"src":"2734:26:41","typeDescriptions":{"typeIdentifier":"t_struct$_SpotMedian_$50838_memory_ptr","typeString":"struct SpotMedian memory"}},"id":49459,"nodeType":"ExpressionStatement","src":"2734:26:41"},{"condition":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":49464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":49460,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49452,"src":"2774:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_SpotMedian_$50838_memory_ptr","typeString":"struct SpotMedian memory"}},"id":49461,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2779:8:41","memberName":"metadata","nodeType":"MemberAccess","referencedDeclaration":50833,"src":"2774:13:41","typeDescriptions":{"typeIdentifier":"t_struct$_Metadata_$50830_memory_ptr","typeString":"struct Metadata memory"}},"id":49462,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2788:9:41","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":50825,"src":"2774:23:41","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":49463,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2801:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2774:28:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49471,"nodeType":"IfStatement","src":"2770:90:41","trueBody":{"id":49470,"nodeType":"Block","src":"2804:56:41","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":49465,"name":"ErrorsLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52236,"src":"2825:9:41","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ErrorsLib_$52236_$","typeString":"type(library ErrorsLib)"}},"id":49467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2835:12:41","memberName":"DataNotFound","nodeType":"MemberAccess","referencedDeclaration":52233,"src":"2825:22:41","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":49468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2825:24:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":49469,"nodeType":"RevertStatement","src":"2818:31:41"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":49473,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2878:5:41","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":49474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2884:9:41","memberName":"timestamp","nodeType":"MemberAccess","src":"2878:15:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":49475,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49452,"src":"2895:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_SpotMedian_$50838_memory_ptr","typeString":"struct SpotMedian memory"}},"id":49476,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2900:8:41","memberName":"metadata","nodeType":"MemberAccess","referencedDeclaration":50833,"src":"2895:13:41","typeDescriptions":{"typeIdentifier":"t_struct$_Metadata_$50830_memory_ptr","typeString":"struct Metadata memory"}},"id":49477,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2909:9:41","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":50825,"src":"2895:23:41","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":49472,"name":"diff","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49848,"src":"2873:4:41","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":49478,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2873:46:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":49479,"name":"age","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49448,"src":"2922:3:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2873:52:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49487,"nodeType":"IfStatement","src":"2869:111:41","trueBody":{"id":49486,"nodeType":"Block","src":"2927:53:41","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":49481,"name":"ErrorsLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52236,"src":"2948:9:41","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ErrorsLib_$52236_$","typeString":"type(library ErrorsLib)"}},"id":49483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2958:9:41","memberName":"DataStale","nodeType":"MemberAccess","referencedDeclaration":52235,"src":"2948:19:41","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":49484,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2948:21:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":49485,"nodeType":"RevertStatement","src":"2941:28:41"}]}},{"expression":{"id":49488,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49452,"src":"2996:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_SpotMedian_$50838_memory_ptr","typeString":"struct SpotMedian memory"}},"functionReturnParameters":49453,"id":49489,"nodeType":"Return","src":"2989:11:41"}]},"baseFunctions":[50722],"functionSelector":"32bb41d3","implemented":true,"kind":"function","modifiers":[],"name":"getSpotMedianNoOlderThan","nameLocation":"2627:24:41","parameters":{"id":49449,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49446,"mutability":"mutable","name":"id","nameLocation":"2660:2:41","nodeType":"VariableDeclaration","scope":49491,"src":"2652:10:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49445,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2652:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":49448,"mutability":"mutable","name":"age","nameLocation":"2672:3:41","nodeType":"VariableDeclaration","scope":49491,"src":"2664:11:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49447,"name":"uint256","nodeType":"ElementaryTypeName","src":"2664:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2651:25:41"},"returnParameters":{"id":49453,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49452,"mutability":"mutable","name":"data","nameLocation":"2718:4:41","nodeType":"VariableDeclaration","scope":49491,"src":"2700:22:41","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SpotMedian_$50838_memory_ptr","typeString":"struct SpotMedian"},"typeName":{"id":49451,"nodeType":"UserDefinedTypeName","pathNode":{"id":49450,"name":"SpotMedian","nameLocations":["2700:10:41"],"nodeType":"IdentifierPath","referencedDeclaration":50838,"src":"2700:10:41"},"referencedDeclaration":50838,"src":"2700:10:41","typeDescriptions":{"typeIdentifier":"t_struct$_SpotMedian_$50838_storage_ptr","typeString":"struct SpotMedian"}},"visibility":"internal"}],"src":"2699:24:41"},"scope":49849,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":49536,"nodeType":"FunctionDefinition","src":"3013:350:41","nodes":[],"body":{"id":49535,"nodeType":"Block","src":"3107:256:41","nodes":[],"statements":[{"expression":{"id":49505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49501,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49499,"src":"3117:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_TWAP_$50854_memory_ptr","typeString":"struct TWAP memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":49502,"name":"twapFeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49888,"src":"3124:9:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_TWAP_$50854_storage_$","typeString":"mapping(bytes32 => struct TWAP storage ref)"}},"id":49504,"indexExpression":{"id":49503,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49493,"src":"3134:2:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3124:13:41","typeDescriptions":{"typeIdentifier":"t_struct$_TWAP_$50854_storage","typeString":"struct TWAP storage ref"}},"src":"3117:20:41","typeDescriptions":{"typeIdentifier":"t_struct$_TWAP_$50854_memory_ptr","typeString":"struct TWAP memory"}},"id":49506,"nodeType":"ExpressionStatement","src":"3117:20:41"},{"condition":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":49511,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":49507,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49499,"src":"3151:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_TWAP_$50854_memory_ptr","typeString":"struct TWAP memory"}},"id":49508,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3156:8:41","memberName":"metadata","nodeType":"MemberAccess","referencedDeclaration":50841,"src":"3151:13:41","typeDescriptions":{"typeIdentifier":"t_struct$_Metadata_$50830_memory_ptr","typeString":"struct Metadata memory"}},"id":49509,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3165:9:41","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":50825,"src":"3151:23:41","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":49510,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3178:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3151:28:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49518,"nodeType":"IfStatement","src":"3147:90:41","trueBody":{"id":49517,"nodeType":"Block","src":"3181:56:41","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":49512,"name":"ErrorsLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52236,"src":"3202:9:41","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ErrorsLib_$52236_$","typeString":"type(library ErrorsLib)"}},"id":49514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3212:12:41","memberName":"DataNotFound","nodeType":"MemberAccess","referencedDeclaration":52233,"src":"3202:22:41","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":49515,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3202:24:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":49516,"nodeType":"RevertStatement","src":"3195:31:41"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":49520,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3255:5:41","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":49521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3261:9:41","memberName":"timestamp","nodeType":"MemberAccess","src":"3255:15:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":49522,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49499,"src":"3272:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_TWAP_$50854_memory_ptr","typeString":"struct TWAP memory"}},"id":49523,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3277:8:41","memberName":"metadata","nodeType":"MemberAccess","referencedDeclaration":50841,"src":"3272:13:41","typeDescriptions":{"typeIdentifier":"t_struct$_Metadata_$50830_memory_ptr","typeString":"struct Metadata memory"}},"id":49524,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3286:9:41","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":50825,"src":"3272:23:41","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":49519,"name":"diff","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49848,"src":"3250:4:41","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":49525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3250:46:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":49526,"name":"age","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49495,"src":"3299:3:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3250:52:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49534,"nodeType":"IfStatement","src":"3246:111:41","trueBody":{"id":49533,"nodeType":"Block","src":"3304:53:41","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":49528,"name":"ErrorsLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52236,"src":"3325:9:41","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ErrorsLib_$52236_$","typeString":"type(library ErrorsLib)"}},"id":49530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3335:9:41","memberName":"DataStale","nodeType":"MemberAccess","referencedDeclaration":52235,"src":"3325:19:41","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":49531,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3325:21:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":49532,"nodeType":"RevertStatement","src":"3318:28:41"}]}}]},"baseFunctions":[50733],"functionSelector":"49c398a4","implemented":true,"kind":"function","modifiers":[],"name":"getTwapNoOlderThan","nameLocation":"3022:18:41","parameters":{"id":49496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49493,"mutability":"mutable","name":"id","nameLocation":"3049:2:41","nodeType":"VariableDeclaration","scope":49536,"src":"3041:10:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49492,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3041:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":49495,"mutability":"mutable","name":"age","nameLocation":"3061:3:41","nodeType":"VariableDeclaration","scope":49536,"src":"3053:11:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49494,"name":"uint256","nodeType":"ElementaryTypeName","src":"3053:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3040:25:41"},"returnParameters":{"id":49500,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49499,"mutability":"mutable","name":"data","nameLocation":"3101:4:41","nodeType":"VariableDeclaration","scope":49536,"src":"3089:16:41","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TWAP_$50854_memory_ptr","typeString":"struct TWAP"},"typeName":{"id":49498,"nodeType":"UserDefinedTypeName","pathNode":{"id":49497,"name":"TWAP","nameLocations":["3089:4:41"],"nodeType":"IdentifierPath","referencedDeclaration":50854,"src":"3089:4:41"},"referencedDeclaration":50854,"src":"3089:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_TWAP_$50854_storage_ptr","typeString":"struct TWAP"}},"visibility":"internal"}],"src":"3088:18:41"},"scope":49849,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":49581,"nodeType":"FunctionDefinition","src":"3369:404:41","nodes":[],"body":{"id":49580,"nodeType":"Block","src":"3519:254:41","nodes":[],"statements":[{"expression":{"id":49550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49546,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49544,"src":"3529:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_RealizedVolatility_$50872_memory_ptr","typeString":"struct RealizedVolatility memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":49547,"name":"rvFeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49893,"src":"3536:7:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RealizedVolatility_$50872_storage_$","typeString":"mapping(bytes32 => struct RealizedVolatility storage ref)"}},"id":49549,"indexExpression":{"id":49548,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49538,"src":"3544:2:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3536:11:41","typeDescriptions":{"typeIdentifier":"t_struct$_RealizedVolatility_$50872_storage","typeString":"struct RealizedVolatility storage ref"}},"src":"3529:18:41","typeDescriptions":{"typeIdentifier":"t_struct$_RealizedVolatility_$50872_memory_ptr","typeString":"struct RealizedVolatility memory"}},"id":49551,"nodeType":"ExpressionStatement","src":"3529:18:41"},{"condition":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":49556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":49552,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49544,"src":"3561:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_RealizedVolatility_$50872_memory_ptr","typeString":"struct RealizedVolatility memory"}},"id":49553,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3566:8:41","memberName":"metadata","nodeType":"MemberAccess","referencedDeclaration":50857,"src":"3561:13:41","typeDescriptions":{"typeIdentifier":"t_struct$_Metadata_$50830_memory_ptr","typeString":"struct Metadata memory"}},"id":49554,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3575:9:41","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":50825,"src":"3561:23:41","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":49555,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3588:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3561:28:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49563,"nodeType":"IfStatement","src":"3557:90:41","trueBody":{"id":49562,"nodeType":"Block","src":"3591:56:41","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":49557,"name":"ErrorsLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52236,"src":"3612:9:41","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ErrorsLib_$52236_$","typeString":"type(library ErrorsLib)"}},"id":49559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3622:12:41","memberName":"DataNotFound","nodeType":"MemberAccess","referencedDeclaration":52233,"src":"3612:22:41","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":49560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3612:24:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":49561,"nodeType":"RevertStatement","src":"3605:31:41"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":49565,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3665:5:41","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":49566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3671:9:41","memberName":"timestamp","nodeType":"MemberAccess","src":"3665:15:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":49567,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49544,"src":"3682:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_RealizedVolatility_$50872_memory_ptr","typeString":"struct RealizedVolatility memory"}},"id":49568,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3687:8:41","memberName":"metadata","nodeType":"MemberAccess","referencedDeclaration":50857,"src":"3682:13:41","typeDescriptions":{"typeIdentifier":"t_struct$_Metadata_$50830_memory_ptr","typeString":"struct Metadata memory"}},"id":49569,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3696:9:41","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":50825,"src":"3682:23:41","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":49564,"name":"diff","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49848,"src":"3660:4:41","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":49570,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3660:46:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":49571,"name":"age","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49540,"src":"3709:3:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3660:52:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49579,"nodeType":"IfStatement","src":"3656:111:41","trueBody":{"id":49578,"nodeType":"Block","src":"3714:53:41","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":49573,"name":"ErrorsLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52236,"src":"3735:9:41","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ErrorsLib_$52236_$","typeString":"type(library ErrorsLib)"}},"id":49575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3745:9:41","memberName":"DataStale","nodeType":"MemberAccess","referencedDeclaration":52235,"src":"3735:19:41","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":49576,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3735:21:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":49577,"nodeType":"RevertStatement","src":"3728:28:41"}]}}]},"baseFunctions":[50744],"functionSelector":"bdf6afa4","implemented":true,"kind":"function","modifiers":[],"name":"getRealizedVolatilityNoOlderThan","nameLocation":"3378:32:41","parameters":{"id":49541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49538,"mutability":"mutable","name":"id","nameLocation":"3419:2:41","nodeType":"VariableDeclaration","scope":49581,"src":"3411:10:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49537,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3411:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":49540,"mutability":"mutable","name":"age","nameLocation":"3431:3:41","nodeType":"VariableDeclaration","scope":49581,"src":"3423:11:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49539,"name":"uint256","nodeType":"ElementaryTypeName","src":"3423:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3410:25:41"},"returnParameters":{"id":49545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49544,"mutability":"mutable","name":"data","nameLocation":"3509:4:41","nodeType":"VariableDeclaration","scope":49581,"src":"3483:30:41","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RealizedVolatility_$50872_memory_ptr","typeString":"struct RealizedVolatility"},"typeName":{"id":49543,"nodeType":"UserDefinedTypeName","pathNode":{"id":49542,"name":"RealizedVolatility","nameLocations":["3483:18:41"],"nodeType":"IdentifierPath","referencedDeclaration":50872,"src":"3483:18:41"},"referencedDeclaration":50872,"src":"3483:18:41","typeDescriptions":{"typeIdentifier":"t_struct$_RealizedVolatility_$50872_storage_ptr","typeString":"struct RealizedVolatility"}},"visibility":"internal"}],"src":"3482:32:41"},"scope":49849,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":49626,"nodeType":"FunctionDefinition","src":"3779:359:41","nodes":[],"body":{"id":49625,"nodeType":"Block","src":"3879:259:41","nodes":[],"statements":[{"expression":{"id":49595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49591,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49589,"src":"3889:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_Options_$50898_memory_ptr","typeString":"struct Options memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":49592,"name":"optionsFeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49898,"src":"3896:12:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Options_$50898_storage_$","typeString":"mapping(bytes32 => struct Options storage ref)"}},"id":49594,"indexExpression":{"id":49593,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49583,"src":"3909:2:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3896:16:41","typeDescriptions":{"typeIdentifier":"t_struct$_Options_$50898_storage","typeString":"struct Options storage ref"}},"src":"3889:23:41","typeDescriptions":{"typeIdentifier":"t_struct$_Options_$50898_memory_ptr","typeString":"struct Options memory"}},"id":49596,"nodeType":"ExpressionStatement","src":"3889:23:41"},{"condition":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":49601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":49597,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49589,"src":"3926:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_Options_$50898_memory_ptr","typeString":"struct Options memory"}},"id":49598,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3931:8:41","memberName":"metadata","nodeType":"MemberAccess","referencedDeclaration":50875,"src":"3926:13:41","typeDescriptions":{"typeIdentifier":"t_struct$_Metadata_$50830_memory_ptr","typeString":"struct Metadata memory"}},"id":49599,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3940:9:41","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":50825,"src":"3926:23:41","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":49600,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3953:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3926:28:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49608,"nodeType":"IfStatement","src":"3922:90:41","trueBody":{"id":49607,"nodeType":"Block","src":"3956:56:41","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":49602,"name":"ErrorsLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52236,"src":"3977:9:41","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ErrorsLib_$52236_$","typeString":"type(library ErrorsLib)"}},"id":49604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3987:12:41","memberName":"DataNotFound","nodeType":"MemberAccess","referencedDeclaration":52233,"src":"3977:22:41","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":49605,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3977:24:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":49606,"nodeType":"RevertStatement","src":"3970:31:41"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49617,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":49610,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"4030:5:41","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":49611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4036:9:41","memberName":"timestamp","nodeType":"MemberAccess","src":"4030:15:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":49612,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49589,"src":"4047:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_Options_$50898_memory_ptr","typeString":"struct Options memory"}},"id":49613,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4052:8:41","memberName":"metadata","nodeType":"MemberAccess","referencedDeclaration":50875,"src":"4047:13:41","typeDescriptions":{"typeIdentifier":"t_struct$_Metadata_$50830_memory_ptr","typeString":"struct Metadata memory"}},"id":49614,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4061:9:41","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":50825,"src":"4047:23:41","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":49609,"name":"diff","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49848,"src":"4025:4:41","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":49615,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4025:46:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":49616,"name":"age","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49585,"src":"4074:3:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4025:52:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49624,"nodeType":"IfStatement","src":"4021:111:41","trueBody":{"id":49623,"nodeType":"Block","src":"4079:53:41","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":49618,"name":"ErrorsLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52236,"src":"4100:9:41","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ErrorsLib_$52236_$","typeString":"type(library ErrorsLib)"}},"id":49620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4110:9:41","memberName":"DataStale","nodeType":"MemberAccess","referencedDeclaration":52235,"src":"4100:19:41","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":49621,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4100:21:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":49622,"nodeType":"RevertStatement","src":"4093:28:41"}]}}]},"baseFunctions":[50755],"functionSelector":"e29ea30f","implemented":true,"kind":"function","modifiers":[],"name":"getOptionsNoOlderThan","nameLocation":"3788:21:41","parameters":{"id":49586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49583,"mutability":"mutable","name":"id","nameLocation":"3818:2:41","nodeType":"VariableDeclaration","scope":49626,"src":"3810:10:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49582,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3810:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":49585,"mutability":"mutable","name":"age","nameLocation":"3830:3:41","nodeType":"VariableDeclaration","scope":49626,"src":"3822:11:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49584,"name":"uint256","nodeType":"ElementaryTypeName","src":"3822:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3809:25:41"},"returnParameters":{"id":49590,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49589,"mutability":"mutable","name":"data","nameLocation":"3873:4:41","nodeType":"VariableDeclaration","scope":49626,"src":"3858:19:41","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Options_$50898_memory_ptr","typeString":"struct Options"},"typeName":{"id":49588,"nodeType":"UserDefinedTypeName","pathNode":{"id":49587,"name":"Options","nameLocations":["3858:7:41"],"nodeType":"IdentifierPath","referencedDeclaration":50898,"src":"3858:7:41"},"referencedDeclaration":50898,"src":"3858:7:41","typeDescriptions":{"typeIdentifier":"t_struct$_Options_$50898_storage_ptr","typeString":"struct Options"}},"visibility":"internal"}],"src":"3857:21:41"},"scope":49849,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":49671,"nodeType":"FunctionDefinition","src":"4144:350:41","nodes":[],"body":{"id":49670,"nodeType":"Block","src":"4238:256:41","nodes":[],"statements":[{"expression":{"id":49640,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49636,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49634,"src":"4248:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_Perp_$50910_memory_ptr","typeString":"struct Perp memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":49637,"name":"perpFeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49903,"src":"4255:9:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Perp_$50910_storage_$","typeString":"mapping(bytes32 => struct Perp storage ref)"}},"id":49639,"indexExpression":{"id":49638,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49628,"src":"4265:2:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4255:13:41","typeDescriptions":{"typeIdentifier":"t_struct$_Perp_$50910_storage","typeString":"struct Perp storage ref"}},"src":"4248:20:41","typeDescriptions":{"typeIdentifier":"t_struct$_Perp_$50910_memory_ptr","typeString":"struct Perp memory"}},"id":49641,"nodeType":"ExpressionStatement","src":"4248:20:41"},{"condition":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":49646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":49642,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49634,"src":"4282:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_Perp_$50910_memory_ptr","typeString":"struct Perp memory"}},"id":49643,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4287:8:41","memberName":"metadata","nodeType":"MemberAccess","referencedDeclaration":50901,"src":"4282:13:41","typeDescriptions":{"typeIdentifier":"t_struct$_Metadata_$50830_memory_ptr","typeString":"struct Metadata memory"}},"id":49644,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4296:9:41","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":50825,"src":"4282:23:41","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":49645,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4309:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4282:28:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49653,"nodeType":"IfStatement","src":"4278:90:41","trueBody":{"id":49652,"nodeType":"Block","src":"4312:56:41","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":49647,"name":"ErrorsLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52236,"src":"4333:9:41","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ErrorsLib_$52236_$","typeString":"type(library ErrorsLib)"}},"id":49649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4343:12:41","memberName":"DataNotFound","nodeType":"MemberAccess","referencedDeclaration":52233,"src":"4333:22:41","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":49650,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4333:24:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":49651,"nodeType":"RevertStatement","src":"4326:31:41"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":49655,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"4386:5:41","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":49656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4392:9:41","memberName":"timestamp","nodeType":"MemberAccess","src":"4386:15:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":49657,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49634,"src":"4403:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_Perp_$50910_memory_ptr","typeString":"struct Perp memory"}},"id":49658,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4408:8:41","memberName":"metadata","nodeType":"MemberAccess","referencedDeclaration":50901,"src":"4403:13:41","typeDescriptions":{"typeIdentifier":"t_struct$_Metadata_$50830_memory_ptr","typeString":"struct Metadata memory"}},"id":49659,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4417:9:41","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":50825,"src":"4403:23:41","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":49654,"name":"diff","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49848,"src":"4381:4:41","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":49660,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4381:46:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":49661,"name":"age","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49630,"src":"4430:3:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4381:52:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49669,"nodeType":"IfStatement","src":"4377:111:41","trueBody":{"id":49668,"nodeType":"Block","src":"4435:53:41","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":49663,"name":"ErrorsLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52236,"src":"4456:9:41","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ErrorsLib_$52236_$","typeString":"type(library ErrorsLib)"}},"id":49665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4466:9:41","memberName":"DataStale","nodeType":"MemberAccess","referencedDeclaration":52235,"src":"4456:19:41","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":49666,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4456:21:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":49667,"nodeType":"RevertStatement","src":"4449:28:41"}]}}]},"baseFunctions":[50766],"functionSelector":"7cfa33dd","implemented":true,"kind":"function","modifiers":[],"name":"getPerpNoOlderThan","nameLocation":"4153:18:41","parameters":{"id":49631,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49628,"mutability":"mutable","name":"id","nameLocation":"4180:2:41","nodeType":"VariableDeclaration","scope":49671,"src":"4172:10:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49627,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4172:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":49630,"mutability":"mutable","name":"age","nameLocation":"4192:3:41","nodeType":"VariableDeclaration","scope":49671,"src":"4184:11:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49629,"name":"uint256","nodeType":"ElementaryTypeName","src":"4184:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4171:25:41"},"returnParameters":{"id":49635,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49634,"mutability":"mutable","name":"data","nameLocation":"4232:4:41","nodeType":"VariableDeclaration","scope":49671,"src":"4220:16:41","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Perp_$50910_memory_ptr","typeString":"struct Perp"},"typeName":{"id":49633,"nodeType":"UserDefinedTypeName","pathNode":{"id":49632,"name":"Perp","nameLocations":["4220:4:41"],"nodeType":"IdentifierPath","referencedDeclaration":50910,"src":"4220:4:41"},"referencedDeclaration":50910,"src":"4220:4:41","typeDescriptions":{"typeIdentifier":"t_struct$_Perp_$50910_storage_ptr","typeString":"struct Perp"}},"visibility":"internal"}],"src":"4219:18:41"},"scope":49849,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":49774,"nodeType":"FunctionDefinition","src":"4528:793:41","nodes":[],"body":{"id":49773,"nodeType":"Block","src":"4593:728:41","nodes":[],"statements":[{"assignments":[49681],"declarations":[{"constant":false,"id":49681,"mutability":"mutable","name":"feedType","nameLocation":"4612:8:41","nodeType":"VariableDeclaration","scope":49773,"src":"4603:17:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"},"typeName":{"id":49680,"nodeType":"UserDefinedTypeName","pathNode":{"id":49679,"name":"FeedType","nameLocations":["4603:8:41"],"nodeType":"IdentifierPath","referencedDeclaration":50935,"src":"4603:8:41"},"referencedDeclaration":50935,"src":"4603:8:41","typeDescriptions":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"}},"visibility":"internal"}],"id":49691,"initialValue":{"arguments":[{"arguments":[{"baseExpression":{"id":49686,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49674,"src":"4659:2:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":49688,"indexExpression":{"hexValue":"30","id":49687,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4662:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4659:5:41","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes1","typeString":"bytes1"}],"id":49685,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4653:5:41","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":49684,"name":"uint8","nodeType":"ElementaryTypeName","src":"4653:5:41","typeDescriptions":{}}},"id":49689,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4653:12:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":49682,"name":"DataParser","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52216,"src":"4623:10:41","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataParser_$52216_$","typeString":"type(library DataParser)"}},"id":49683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4634:18:41","memberName":"safeCastToFeedType","nodeType":"MemberAccess","referencedDeclaration":51589,"src":"4623:29:41","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint8_$returns$_t_enum$_FeedType_$50935_$","typeString":"function (uint8) pure returns (enum FeedType)"}},"id":49690,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4623:43:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"}},"nodeType":"VariableDeclarationStatement","src":"4603:63:41"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"},"id":49695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49692,"name":"feedType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49681,"src":"4680:8:41","typeDescriptions":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":49693,"name":"FeedType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50935,"src":"4692:8:41","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_FeedType_$50935_$","typeString":"type(enum FeedType)"}},"id":49694,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4701:10:41","memberName":"SpotMedian","nodeType":"MemberAccess","referencedDeclaration":50930,"src":"4692:19:41","typeDescriptions":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"}},"src":"4680:31:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"},"id":49709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49706,"name":"feedType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49681,"src":"4800:8:41","typeDescriptions":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":49707,"name":"FeedType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50935,"src":"4812:8:41","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_FeedType_$50935_$","typeString":"type(enum FeedType)"}},"id":49708,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4821:4:41","memberName":"Twap","nodeType":"MemberAccess","referencedDeclaration":50931,"src":"4812:13:41","typeDescriptions":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"}},"src":"4800:25:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"},"id":49723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49720,"name":"feedType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49681,"src":"4908:8:41","typeDescriptions":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":49721,"name":"FeedType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50935,"src":"4920:8:41","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_FeedType_$50935_$","typeString":"type(enum FeedType)"}},"id":49722,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4929:18:41","memberName":"RealizedVolatility","nodeType":"MemberAccess","referencedDeclaration":50932,"src":"4920:27:41","typeDescriptions":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"}},"src":"4908:39:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"},"id":49737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49734,"name":"feedType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49681,"src":"5028:8:41","typeDescriptions":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":49735,"name":"FeedType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50935,"src":"5040:8:41","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_FeedType_$50935_$","typeString":"type(enum FeedType)"}},"id":49736,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5049:7:41","memberName":"Options","nodeType":"MemberAccess","referencedDeclaration":50933,"src":"5040:16:41","typeDescriptions":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"}},"src":"5028:28:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"},"id":49751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49748,"name":"feedType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49681,"src":"5142:8:41","typeDescriptions":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":49749,"name":"FeedType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50935,"src":"5154:8:41","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_FeedType_$50935_$","typeString":"type(enum FeedType)"}},"id":49750,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5163:10:41","memberName":"Perpetuals","nodeType":"MemberAccess","referencedDeclaration":50934,"src":"5154:19:41","typeDescriptions":{"typeIdentifier":"t_enum$_FeedType_$50935","typeString":"enum FeedType"}},"src":"5142:31:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":49767,"nodeType":"Block","src":"5252:63:41","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":49762,"name":"ErrorsLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52236,"src":"5273:9:41","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ErrorsLib_$52236_$","typeString":"type(library ErrorsLib)"}},"id":49764,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5283:19:41","memberName":"InvalidDataFeedType","nodeType":"MemberAccess","referencedDeclaration":52231,"src":"5273:29:41","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":49765,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5273:31:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":49766,"nodeType":"RevertStatement","src":"5266:38:41"}]},"id":49768,"nodeType":"IfStatement","src":"5138:177:41","trueBody":{"id":49761,"nodeType":"Block","src":"5175:71:41","statements":[{"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":49758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"baseExpression":{"id":49752,"name":"perpFeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49903,"src":"5197:9:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Perp_$50910_storage_$","typeString":"mapping(bytes32 => struct Perp storage ref)"}},"id":49754,"indexExpression":{"id":49753,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49674,"src":"5207:2:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5197:13:41","typeDescriptions":{"typeIdentifier":"t_struct$_Perp_$50910_storage","typeString":"struct Perp storage ref"}},"id":49755,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5211:8:41","memberName":"metadata","nodeType":"MemberAccess","referencedDeclaration":50901,"src":"5197:22:41","typeDescriptions":{"typeIdentifier":"t_struct$_Metadata_$50830_storage","typeString":"struct Metadata storage ref"}},"id":49756,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5220:9:41","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":50825,"src":"5197:32:41","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":49757,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5233:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5197:37:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":49759,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5196:39:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":49678,"id":49760,"nodeType":"Return","src":"5189:46:41"}]}},"id":49769,"nodeType":"IfStatement","src":"5024:291:41","trueBody":{"id":49747,"nodeType":"Block","src":"5058:74:41","statements":[{"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":49744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"baseExpression":{"id":49738,"name":"optionsFeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49898,"src":"5080:12:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Options_$50898_storage_$","typeString":"mapping(bytes32 => struct Options storage ref)"}},"id":49740,"indexExpression":{"id":49739,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49674,"src":"5093:2:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5080:16:41","typeDescriptions":{"typeIdentifier":"t_struct$_Options_$50898_storage","typeString":"struct Options storage ref"}},"id":49741,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5097:8:41","memberName":"metadata","nodeType":"MemberAccess","referencedDeclaration":50875,"src":"5080:25:41","typeDescriptions":{"typeIdentifier":"t_struct$_Metadata_$50830_storage","typeString":"struct Metadata storage ref"}},"id":49742,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5106:9:41","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":50825,"src":"5080:35:41","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":49743,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5119:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5080:40:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":49745,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5079:42:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":49678,"id":49746,"nodeType":"Return","src":"5072:49:41"}]}},"id":49770,"nodeType":"IfStatement","src":"4904:411:41","trueBody":{"id":49733,"nodeType":"Block","src":"4949:69:41","statements":[{"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":49730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"baseExpression":{"id":49724,"name":"rvFeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49893,"src":"4971:7:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RealizedVolatility_$50872_storage_$","typeString":"mapping(bytes32 => struct RealizedVolatility storage ref)"}},"id":49726,"indexExpression":{"id":49725,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49674,"src":"4979:2:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4971:11:41","typeDescriptions":{"typeIdentifier":"t_struct$_RealizedVolatility_$50872_storage","typeString":"struct RealizedVolatility storage ref"}},"id":49727,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4983:8:41","memberName":"metadata","nodeType":"MemberAccess","referencedDeclaration":50857,"src":"4971:20:41","typeDescriptions":{"typeIdentifier":"t_struct$_Metadata_$50830_storage","typeString":"struct Metadata storage ref"}},"id":49728,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4992:9:41","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":50825,"src":"4971:30:41","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":49729,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5005:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4971:35:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":49731,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4970:37:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":49678,"id":49732,"nodeType":"Return","src":"4963:44:41"}]}},"id":49771,"nodeType":"IfStatement","src":"4796:519:41","trueBody":{"id":49719,"nodeType":"Block","src":"4827:71:41","statements":[{"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":49716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"baseExpression":{"id":49710,"name":"twapFeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49888,"src":"4849:9:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_TWAP_$50854_storage_$","typeString":"mapping(bytes32 => struct TWAP storage ref)"}},"id":49712,"indexExpression":{"id":49711,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49674,"src":"4859:2:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4849:13:41","typeDescriptions":{"typeIdentifier":"t_struct$_TWAP_$50854_storage","typeString":"struct TWAP storage ref"}},"id":49713,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4863:8:41","memberName":"metadata","nodeType":"MemberAccess","referencedDeclaration":50841,"src":"4849:22:41","typeDescriptions":{"typeIdentifier":"t_struct$_Metadata_$50830_storage","typeString":"struct Metadata storage ref"}},"id":49714,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4872:9:41","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":50825,"src":"4849:32:41","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":49715,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4885:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4849:37:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":49717,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4848:39:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":49678,"id":49718,"nodeType":"Return","src":"4841:46:41"}]}},"id":49772,"nodeType":"IfStatement","src":"4676:639:41","trueBody":{"id":49705,"nodeType":"Block","src":"4713:77:41","statements":[{"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":49702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"baseExpression":{"id":49696,"name":"spotMedianFeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49883,"src":"4735:15:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_SpotMedian_$50838_storage_$","typeString":"mapping(bytes32 => struct SpotMedian storage ref)"}},"id":49698,"indexExpression":{"id":49697,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49674,"src":"4751:2:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4735:19:41","typeDescriptions":{"typeIdentifier":"t_struct$_SpotMedian_$50838_storage","typeString":"struct SpotMedian storage ref"}},"id":49699,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4755:8:41","memberName":"metadata","nodeType":"MemberAccess","referencedDeclaration":50833,"src":"4735:28:41","typeDescriptions":{"typeIdentifier":"t_struct$_Metadata_$50830_storage","typeString":"struct Metadata storage ref"}},"id":49700,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4764:9:41","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":50825,"src":"4735:38:41","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":49701,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4777:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4735:43:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":49703,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4734:45:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":49678,"id":49704,"nodeType":"Return","src":"4727:52:41"}]}}]},"baseFunctions":[50774],"documentation":{"id":49672,"nodeType":"StructuredDocumentation","src":"4500:23:41","text":"@inheritdoc IPragma"},"functionSelector":"0e8fd1ba","implemented":true,"kind":"function","modifiers":[],"name":"dataFeedExists","nameLocation":"4537:14:41","parameters":{"id":49675,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49674,"mutability":"mutable","name":"id","nameLocation":"4560:2:41","nodeType":"VariableDeclaration","scope":49774,"src":"4552:10:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49673,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4552:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4551:12:41"},"returnParameters":{"id":49678,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49677,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49774,"src":"4587:4:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":49676,"name":"bool","nodeType":"ElementaryTypeName","src":"4587:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4586:6:41"},"scope":49849,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":49782,"nodeType":"FunctionDefinition","src":"5327:106:41","nodes":[],"body":{"id":49781,"nodeType":"Block","src":"5387:46:41","nodes":[],"statements":[{"expression":{"id":49779,"name":"validTimePeriodSeconds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49277,"src":"5404:22:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":49778,"id":49780,"nodeType":"Return","src":"5397:29:41"}]},"functionSelector":"e18910a3","implemented":true,"kind":"function","modifiers":[],"name":"getValidTimePeriod","nameLocation":"5336:18:41","parameters":{"id":49775,"nodeType":"ParameterList","parameters":[],"src":"5354:2:41"},"returnParameters":{"id":49778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49777,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49782,"src":"5378:7:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49776,"name":"uint256","nodeType":"ElementaryTypeName","src":"5378:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5377:9:41"},"scope":49849,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":49816,"nodeType":"FunctionDefinition","src":"5439:245:41","nodes":[],"body":{"id":49815,"nodeType":"Block","src":"5498:186:41","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49790,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49784,"src":"5516:6:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"arguments":[{"id":49793,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5534:4:41","typeDescriptions":{"typeIdentifier":"t_contract$_Pragma_$49849","typeString":"contract Pragma"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Pragma_$49849","typeString":"contract Pragma"}],"id":49792,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5526:7:41","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":49791,"name":"address","nodeType":"ElementaryTypeName","src":"5526:7:41","typeDescriptions":{}}},"id":49794,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5526:13:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":49795,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5540:7:41","memberName":"balance","nodeType":"MemberAccess","src":"5526:21:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5516:31:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e73756666696369656e742062616c616e6365","id":49797,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5549:22:41","typeDescriptions":{"typeIdentifier":"t_stringliteral_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5","typeString":"literal_string \"Insufficient balance\""},"value":"Insufficient balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5","typeString":"literal_string \"Insufficient balance\""}],"id":49789,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"5508:7:41","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":49798,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5508:64:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49799,"nodeType":"ExpressionStatement","src":"5508:64:41"},{"assignments":[49801,null],"declarations":[{"constant":false,"id":49801,"mutability":"mutable","name":"success","nameLocation":"5588:7:41","nodeType":"VariableDeclaration","scope":49815,"src":"5583:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":49800,"name":"bool","nodeType":"ElementaryTypeName","src":"5583:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":49809,"initialValue":{"arguments":[{"hexValue":"","id":49807,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5629:2:41","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":49802,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46879,"src":"5601:5:41","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":49803,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5601:7:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":49804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5609:4:41","memberName":"call","nodeType":"MemberAccess","src":"5601:12:41","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":49806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":49805,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49784,"src":"5621:6:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"5601:27:41","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":49808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5601:31:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"5582:50:41"},{"expression":{"arguments":[{"id":49811,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49801,"src":"5650:7:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5472616e73666572206661696c6564","id":49812,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5659:17:41","typeDescriptions":{"typeIdentifier":"t_stringliteral_25adaa6d082ce15f901e0d8a3d393e7462ef9edf2e6bc8321fa14d1615b6fc51","typeString":"literal_string \"Transfer failed\""},"value":"Transfer failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_25adaa6d082ce15f901e0d8a3d393e7462ef9edf2e6bc8321fa14d1615b6fc51","typeString":"literal_string \"Transfer failed\""}],"id":49810,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"5642:7:41","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":49813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5642:35:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49814,"nodeType":"ExpressionStatement","src":"5642:35:41"}]},"functionSelector":"5d2c53a7","implemented":true,"kind":"function","modifiers":[{"id":49787,"kind":"modifierInvocation","modifierName":{"id":49786,"name":"onlyOwner","nameLocations":["5488:9:41"],"nodeType":"IdentifierPath","referencedDeclaration":46863,"src":"5488:9:41"},"nodeType":"ModifierInvocation","src":"5488:9:41"}],"name":"withdraw_funds","nameLocation":"5448:14:41","parameters":{"id":49785,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49784,"mutability":"mutable","name":"amount","nameLocation":"5471:6:41","nodeType":"VariableDeclaration","scope":49816,"src":"5463:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49783,"name":"uint256","nodeType":"ElementaryTypeName","src":"5463:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5462:16:41"},"returnParameters":{"id":49788,"nodeType":"ParameterList","parameters":[],"src":"5498:0:41"},"scope":49849,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":49824,"nodeType":"FunctionDefinition","src":"5690:86:41","nodes":[],"body":{"id":49823,"nodeType":"Block","src":"5745:31:41","nodes":[],"statements":[{"expression":{"hexValue":"312e302e30","id":49821,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5762:7:41","typeDescriptions":{"typeIdentifier":"t_stringliteral_06c015bd22b4c69690933c1058878ebdfef31f9aaae40bbe86d8a09fe1b2972c","typeString":"literal_string \"1.0.0\""},"value":"1.0.0"},"functionReturnParameters":49820,"id":49822,"nodeType":"Return","src":"5755:14:41"}]},"functionSelector":"54fd4d50","implemented":true,"kind":"function","modifiers":[],"name":"version","nameLocation":"5699:7:41","parameters":{"id":49817,"nodeType":"ParameterList","parameters":[],"src":"5706:2:41"},"returnParameters":{"id":49820,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49819,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49824,"src":"5730:13:41","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":49818,"name":"string","nodeType":"ElementaryTypeName","src":"5730:6:41","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"5729:15:41"},"scope":49849,"stateMutability":"pure","virtual":false,"visibility":"public"},{"id":49848,"nodeType":"FunctionDefinition","src":"5782:175:41","nodes":[],"body":{"id":49847,"nodeType":"Block","src":"5850:107:41","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49833,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49826,"src":"5864:1:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":49834,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49828,"src":"5868:1:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5864:5:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":49845,"nodeType":"Block","src":"5914:37:41","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49841,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49828,"src":"5935:1:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":49842,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49826,"src":"5939:1:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5935:5:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":49832,"id":49844,"nodeType":"Return","src":"5928:12:41"}]},"id":49846,"nodeType":"IfStatement","src":"5860:91:41","trueBody":{"id":49840,"nodeType":"Block","src":"5871:37:41","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49836,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49826,"src":"5892:1:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":49837,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49828,"src":"5896:1:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5892:5:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":49832,"id":49839,"nodeType":"Return","src":"5885:12:41"}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"diff","nameLocation":"5791:4:41","parameters":{"id":49829,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49826,"mutability":"mutable","name":"x","nameLocation":"5804:1:41","nodeType":"VariableDeclaration","scope":49848,"src":"5796:9:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49825,"name":"uint256","nodeType":"ElementaryTypeName","src":"5796:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":49828,"mutability":"mutable","name":"y","nameLocation":"5815:1:41","nodeType":"VariableDeclaration","scope":49848,"src":"5807:9:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49827,"name":"uint256","nodeType":"ElementaryTypeName","src":"5807:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5795:22:41"},"returnParameters":{"id":49832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49831,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49848,"src":"5841:7:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49830,"name":"uint256","nodeType":"ElementaryTypeName","src":"5841:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5840:9:41"},"scope":49849,"stateMutability":"pure","virtual":false,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":49266,"name":"Initializable","nameLocations":["670:13:41"],"nodeType":"IdentifierPath","referencedDeclaration":47222,"src":"670:13:41"},"id":49267,"nodeType":"InheritanceSpecifier","src":"670:13:41"},{"baseName":{"id":49268,"name":"UUPSUpgradeable","nameLocations":["685:15:41"],"nodeType":"IdentifierPath","referencedDeclaration":47404,"src":"685:15:41"},"id":49269,"nodeType":"InheritanceSpecifier","src":"685:15:41"},{"baseName":{"id":49270,"name":"OwnableUpgradeable","nameLocations":["702:18:41"],"nodeType":"IdentifierPath","referencedDeclaration":46968,"src":"702:18:41"},"id":49271,"nodeType":"InheritanceSpecifier","src":"702:18:41"},{"baseName":{"id":49272,"name":"IPragma","nameLocations":["722:7:41"],"nodeType":"IdentifierPath","referencedDeclaration":50775,"src":"722:7:41"},"id":49273,"nodeType":"InheritanceSpecifier","src":"722:7:41"},{"baseName":{"id":49274,"name":"PragmaDecoder","nameLocations":["731:13:41"],"nodeType":"IdentifierPath","referencedDeclaration":50660,"src":"731:13:41"},"id":49275,"nodeType":"InheritanceSpecifier","src":"731:13:41"}],"canonicalName":"Pragma","contractDependencies":[],"contractKind":"contract","documentation":{"id":49265,"nodeType":"StructuredDocumentation","src":"534:117:41","text":"@title Pragma\n @author Pragma Labs\n @custom:contact security@pragma.build\n @notice The Pragma contract."},"fullyImplemented":true,"linearizedBaseContracts":[49849,50660,50775,46968,47450,47404,47629,47222],"name":"Pragma","nameLocation":"660:6:41","scope":49850,"usedErrors":[46804,46809,46985,46988,47249,47254,47687,47700,48200,48492,52221,52223,52225,52227,52229,52231,52233,52235],"usedEvents":[46815,46993,47606,52261,52271,52281,52291,52301]}],"license":"Apache 2"},"id":41} \ No newline at end of file +{ + "abi": [ + { "type": "constructor", "inputs": [], "stateMutability": "nonpayable" }, + { + "type": "function", + "name": "UPGRADE_INTERFACE_VERSION", + "inputs": [], + "outputs": [{ "name": "", "type": "string", "internalType": "string" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "_isValidDataSource", + "inputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "dataFeedExists", + "inputs": [ + { "name": "id", "type": "bytes32", "internalType": "bytes32" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getOptionsNoOlderThan", + "inputs": [ + { "name": "id", "type": "bytes32", "internalType": "bytes32" }, + { "name": "age", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [ + { + "name": "data", + "type": "tuple", + "internalType": "struct Options", + "components": [ + { + "name": "metadata", + "type": "tuple", + "internalType": "struct Metadata", + "components": [ + { + "name": "feedId", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "timestamp", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "numberOfSources", + "type": "uint16", + "internalType": "uint16" + }, + { "name": "decimals", "type": "uint8", "internalType": "uint8" } + ] + }, + { + "name": "strikePrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "impliedVolatility", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timeToExpiry", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "isCall", "type": "bool", "internalType": "bool" }, + { + "name": "underlyingPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "optionPrice", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "delta", "type": "int256", "internalType": "int256" }, + { "name": "gamma", "type": "int256", "internalType": "int256" }, + { "name": "vega", "type": "int256", "internalType": "int256" }, + { "name": "theta", "type": "int256", "internalType": "int256" }, + { "name": "rho", "type": "int256", "internalType": "int256" } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPerpNoOlderThan", + "inputs": [ + { "name": "id", "type": "bytes32", "internalType": "bytes32" }, + { "name": "age", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [ + { + "name": "data", + "type": "tuple", + "internalType": "struct Perp", + "components": [ + { + "name": "metadata", + "type": "tuple", + "internalType": "struct Metadata", + "components": [ + { + "name": "feedId", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "timestamp", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "numberOfSources", + "type": "uint16", + "internalType": "uint16" + }, + { "name": "decimals", "type": "uint8", "internalType": "uint8" } + ] + }, + { + "name": "markPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "fundingRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "openInterest", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "volume", "type": "uint256", "internalType": "uint256" } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRealizedVolatilityNoOlderThan", + "inputs": [ + { "name": "id", "type": "bytes32", "internalType": "bytes32" }, + { "name": "age", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [ + { + "name": "data", + "type": "tuple", + "internalType": "struct RealizedVolatility", + "components": [ + { + "name": "metadata", + "type": "tuple", + "internalType": "struct Metadata", + "components": [ + { + "name": "feedId", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "timestamp", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "numberOfSources", + "type": "uint16", + "internalType": "uint16" + }, + { "name": "decimals", "type": "uint8", "internalType": "uint8" } + ] + }, + { + "name": "volatility", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timePeriod", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "startPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "endPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "highPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "lowPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "numberOfDataPoints", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getSpotMedianNoOlderThan", + "inputs": [ + { "name": "id", "type": "bytes32", "internalType": "bytes32" }, + { "name": "age", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [ + { + "name": "data", + "type": "tuple", + "internalType": "struct SpotMedian", + "components": [ + { + "name": "metadata", + "type": "tuple", + "internalType": "struct Metadata", + "components": [ + { + "name": "feedId", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "timestamp", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "numberOfSources", + "type": "uint16", + "internalType": "uint16" + }, + { "name": "decimals", "type": "uint8", "internalType": "uint8" } + ] + }, + { "name": "price", "type": "uint256", "internalType": "uint256" }, + { "name": "volume", "type": "uint256", "internalType": "uint256" } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getTwapNoOlderThan", + "inputs": [ + { "name": "id", "type": "bytes32", "internalType": "bytes32" }, + { "name": "age", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [ + { + "name": "data", + "type": "tuple", + "internalType": "struct TWAP", + "components": [ + { + "name": "metadata", + "type": "tuple", + "internalType": "struct Metadata", + "components": [ + { + "name": "feedId", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "timestamp", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "numberOfSources", + "type": "uint16", + "internalType": "uint16" + }, + { "name": "decimals", "type": "uint8", "internalType": "uint8" } + ] + }, + { + "name": "twapPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timePeriod", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "startPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "endPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "totalVolume", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "numberOfDataPoints", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getUpdateFee", + "inputs": [ + { "name": "updateData", "type": "bytes[]", "internalType": "bytes[]" } + ], + "outputs": [ + { "name": "feeAmount", "type": "uint256", "internalType": "uint256" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getValidTimePeriod", + "inputs": [], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "hyperlane", + "inputs": [], + "outputs": [ + { "name": "", "type": "address", "internalType": "contract IHyperlane" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { "name": "_hyperlane", "type": "address", "internalType": "address" }, + { + "name": "initial_owner", + "type": "address", + "internalType": "address" + }, + { + "name": "_dataSourceEmitterChainIds", + "type": "uint16[]", + "internalType": "uint16[]" + }, + { + "name": "_dataSourceEmitterAddresses", + "type": "bytes32[]", + "internalType": "bytes32[]" + }, + { + "name": "_validTimePeriodSeconds", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_singleUpdateFeeInWei", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isValidDataSource", + "inputs": [ + { "name": "chainId", "type": "uint16", "internalType": "uint16" }, + { + "name": "emitterAddress", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "optionsFeeds", + "inputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "outputs": [ + { + "name": "metadata", + "type": "tuple", + "internalType": "struct Metadata", + "components": [ + { "name": "feedId", "type": "bytes32", "internalType": "bytes32" }, + { "name": "timestamp", "type": "uint64", "internalType": "uint64" }, + { + "name": "numberOfSources", + "type": "uint16", + "internalType": "uint16" + }, + { "name": "decimals", "type": "uint8", "internalType": "uint8" } + ] + }, + { "name": "strikePrice", "type": "uint256", "internalType": "uint256" }, + { + "name": "impliedVolatility", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timeToExpiry", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "isCall", "type": "bool", "internalType": "bool" }, + { + "name": "underlyingPrice", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "optionPrice", "type": "uint256", "internalType": "uint256" }, + { "name": "delta", "type": "int256", "internalType": "int256" }, + { "name": "gamma", "type": "int256", "internalType": "int256" }, + { "name": "vega", "type": "int256", "internalType": "int256" }, + { "name": "theta", "type": "int256", "internalType": "int256" }, + { "name": "rho", "type": "int256", "internalType": "int256" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [{ "name": "", "type": "address", "internalType": "address" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "perpFeeds", + "inputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "outputs": [ + { + "name": "metadata", + "type": "tuple", + "internalType": "struct Metadata", + "components": [ + { "name": "feedId", "type": "bytes32", "internalType": "bytes32" }, + { "name": "timestamp", "type": "uint64", "internalType": "uint64" }, + { + "name": "numberOfSources", + "type": "uint16", + "internalType": "uint16" + }, + { "name": "decimals", "type": "uint8", "internalType": "uint8" } + ] + }, + { "name": "markPrice", "type": "uint256", "internalType": "uint256" }, + { "name": "fundingRate", "type": "uint256", "internalType": "uint256" }, + { + "name": "openInterest", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "volume", "type": "uint256", "internalType": "uint256" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "proxiableUUID", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "rvFeeds", + "inputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "outputs": [ + { + "name": "metadata", + "type": "tuple", + "internalType": "struct Metadata", + "components": [ + { "name": "feedId", "type": "bytes32", "internalType": "bytes32" }, + { "name": "timestamp", "type": "uint64", "internalType": "uint64" }, + { + "name": "numberOfSources", + "type": "uint16", + "internalType": "uint16" + }, + { "name": "decimals", "type": "uint8", "internalType": "uint8" } + ] + }, + { "name": "volatility", "type": "uint256", "internalType": "uint256" }, + { "name": "timePeriod", "type": "uint256", "internalType": "uint256" }, + { "name": "startPrice", "type": "uint256", "internalType": "uint256" }, + { "name": "endPrice", "type": "uint256", "internalType": "uint256" }, + { "name": "highPrice", "type": "uint256", "internalType": "uint256" }, + { "name": "lowPrice", "type": "uint256", "internalType": "uint256" }, + { + "name": "numberOfDataPoints", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "singleUpdateFeeInWei", + "inputs": [], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "spotMedianFeeds", + "inputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "outputs": [ + { + "name": "metadata", + "type": "tuple", + "internalType": "struct Metadata", + "components": [ + { "name": "feedId", "type": "bytes32", "internalType": "bytes32" }, + { "name": "timestamp", "type": "uint64", "internalType": "uint64" }, + { + "name": "numberOfSources", + "type": "uint16", + "internalType": "uint16" + }, + { "name": "decimals", "type": "uint8", "internalType": "uint8" } + ] + }, + { "name": "price", "type": "uint256", "internalType": "uint256" }, + { "name": "volume", "type": "uint256", "internalType": "uint256" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { "name": "newOwner", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "twapFeeds", + "inputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "outputs": [ + { + "name": "metadata", + "type": "tuple", + "internalType": "struct Metadata", + "components": [ + { "name": "feedId", "type": "bytes32", "internalType": "bytes32" }, + { "name": "timestamp", "type": "uint64", "internalType": "uint64" }, + { + "name": "numberOfSources", + "type": "uint16", + "internalType": "uint16" + }, + { "name": "decimals", "type": "uint8", "internalType": "uint8" } + ] + }, + { "name": "twapPrice", "type": "uint256", "internalType": "uint256" }, + { "name": "timePeriod", "type": "uint256", "internalType": "uint256" }, + { "name": "startPrice", "type": "uint256", "internalType": "uint256" }, + { "name": "endPrice", "type": "uint256", "internalType": "uint256" }, + { "name": "totalVolume", "type": "uint256", "internalType": "uint256" }, + { + "name": "numberOfDataPoints", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "updateDataFeeds", + "inputs": [ + { "name": "updateData", "type": "bytes[]", "internalType": "bytes[]" } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "upgradeToAndCall", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { "name": "data", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "validTimePeriodSeconds", + "inputs": [], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "version", + "inputs": [], + "outputs": [{ "name": "", "type": "string", "internalType": "string" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "withdraw_funds", + "inputs": [ + { "name": "amount", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OptionsUpdate", + "inputs": [ + { + "name": "feedId", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "publishTime", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + }, + { + "name": "options", + "type": "tuple", + "indexed": false, + "internalType": "struct Options", + "components": [ + { + "name": "metadata", + "type": "tuple", + "internalType": "struct Metadata", + "components": [ + { + "name": "feedId", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "timestamp", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "numberOfSources", + "type": "uint16", + "internalType": "uint16" + }, + { "name": "decimals", "type": "uint8", "internalType": "uint8" } + ] + }, + { + "name": "strikePrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "impliedVolatility", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timeToExpiry", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "isCall", "type": "bool", "internalType": "bool" }, + { + "name": "underlyingPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "optionPrice", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "delta", "type": "int256", "internalType": "int256" }, + { "name": "gamma", "type": "int256", "internalType": "int256" }, + { "name": "vega", "type": "int256", "internalType": "int256" }, + { "name": "theta", "type": "int256", "internalType": "int256" }, + { "name": "rho", "type": "int256", "internalType": "int256" } + ] + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "PerpUpdate", + "inputs": [ + { + "name": "feedId", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "publishTime", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + }, + { + "name": "perp", + "type": "tuple", + "indexed": false, + "internalType": "struct Perp", + "components": [ + { + "name": "metadata", + "type": "tuple", + "internalType": "struct Metadata", + "components": [ + { + "name": "feedId", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "timestamp", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "numberOfSources", + "type": "uint16", + "internalType": "uint16" + }, + { "name": "decimals", "type": "uint8", "internalType": "uint8" } + ] + }, + { + "name": "markPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "fundingRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "openInterest", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "volume", "type": "uint256", "internalType": "uint256" } + ] + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RealizedVolatilityUpdate", + "inputs": [ + { + "name": "feedId", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "publishTime", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + }, + { + "name": "realizedVolatility", + "type": "tuple", + "indexed": false, + "internalType": "struct RealizedVolatility", + "components": [ + { + "name": "metadata", + "type": "tuple", + "internalType": "struct Metadata", + "components": [ + { + "name": "feedId", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "timestamp", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "numberOfSources", + "type": "uint16", + "internalType": "uint16" + }, + { "name": "decimals", "type": "uint8", "internalType": "uint8" } + ] + }, + { + "name": "volatility", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timePeriod", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "startPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "endPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "highPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "lowPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "numberOfDataPoints", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SpotMedianUpdate", + "inputs": [ + { + "name": "feedId", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "publishTime", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + }, + { + "name": "spotMedian", + "type": "tuple", + "indexed": false, + "internalType": "struct SpotMedian", + "components": [ + { + "name": "metadata", + "type": "tuple", + "internalType": "struct Metadata", + "components": [ + { + "name": "feedId", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "timestamp", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "numberOfSources", + "type": "uint16", + "internalType": "uint16" + }, + { "name": "decimals", "type": "uint8", "internalType": "uint8" } + ] + }, + { "name": "price", "type": "uint256", "internalType": "uint256" }, + { "name": "volume", "type": "uint256", "internalType": "uint256" } + ] + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TWAPUpdate", + "inputs": [ + { + "name": "feedId", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "publishTime", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + }, + { + "name": "twap", + "type": "tuple", + "indexed": false, + "internalType": "struct TWAP", + "components": [ + { + "name": "metadata", + "type": "tuple", + "internalType": "struct Metadata", + "components": [ + { + "name": "feedId", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "timestamp", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "numberOfSources", + "type": "uint16", + "internalType": "uint16" + }, + { "name": "decimals", "type": "uint8", "internalType": "uint8" } + ] + }, + { + "name": "twapPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timePeriod", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "startPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "endPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "totalVolume", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "numberOfDataPoints", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { "name": "target", "type": "address", "internalType": "address" } + ] + }, + { "type": "error", "name": "DataNotFound", "inputs": [] }, + { "type": "error", "name": "DataStale", "inputs": [] }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { "type": "error", "name": "ERC1967NonPayable", "inputs": [] }, + { "type": "error", "name": "FailedCall", "inputs": [] }, + { "type": "error", "name": "InsufficientFee", "inputs": [] }, + { "type": "error", "name": "InvalidDataFeedType", "inputs": [] }, + { "type": "error", "name": "InvalidHyperlaneCheckpointRoot", "inputs": [] }, + { "type": "error", "name": "InvalidInitialization", "inputs": [] }, + { "type": "error", "name": "InvalidUpdateData", "inputs": [] }, + { "type": "error", "name": "InvalidUpdateDataSource", "inputs": [] }, + { "type": "error", "name": "InvalidVersion", "inputs": [] }, + { "type": "error", "name": "NotInitializing", "inputs": [] }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { "name": "owner", "type": "address", "internalType": "address" } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ] + }, + { "type": "error", "name": "UUPSUnauthorizedCallContext", "inputs": [] }, + { + "type": "error", + "name": "UUPSUnsupportedProxiableUUID", + "inputs": [ + { "name": "slot", "type": "bytes32", "internalType": "bytes32" } + ] + } + ], + "bytecode": { + "object": "0x60a080604052346100e857306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c166100d9576002600160401b03196001600160401b03821601610073575b60405161327c90816100ed82396080518181816107e4015261090e0152f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80610054565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c8063043cc783146101cf5780630e8fd1ba146101ca5780630f01cb51146101c557806332bb41d3146101c05780633a612c32146101bb578063437209a7146101b657806348b6404d146101b157806349c398a4146101ac5780634f1ef286146101a757806352d1902d146101a257806354fd4d501461019d5780635d2c53a7146101985780636306642214610193578063715018a61461018e5780637cfa33dd146101895780638da5cb5b14610184578063ad3cb1cc1461017f578063bdf6afa41461017a578063c12fd47314610175578063c6ac557c14610170578063cb718a9b14610157578063cf8e17bb1461016b578063d47eed4514610166578063d58a8f6d14610161578063d5d89eaf1461015c578063e18910a314610157578063e29ea30f146101525763f2fde38b1461014d575f80fd5b6113b3565b61129e565b610f01565b611132565b611029565b61100f565b610f5f565b610e9c565b610e25565b610cee565b610c49565b610c15565b610b57565b610aab565b610a84565b6109bc565b61097d565b6108fc565b610795565b610646565b6105ce565b6105a3565b61051b565b61043d565b6103dd565b6103b5565b610362565b634e487b7160e01b5f52604160045260245ffd5b608081019081106001600160401b0382111761020357604052565b6101d4565b606081019081106001600160401b0382111761020357604052565b60e081019081106001600160401b0382111761020357604052565b60a081019081106001600160401b0382111761020357604052565b61010081019081106001600160401b0382111761020357604052565b61018081019081106001600160401b0382111761020357604052565b60c081019081106001600160401b0382111761020357604052565b90601f801991011681019081106001600160401b0382111761020357604052565b604051906102dd610100836102ac565b565b604051906102dd610180836102ac565b906040516102fc816101e8565b606060ff600183958054855201546001600160401b038116602085015261ffff8160401c16604085015260501c16910152565b60ff60608092805185526001600160401b03602082015116602086015261ffff6040820151166040860152015116910152565b346103b15760203660031901126103b1576004355f52600260205260c060405f2061038c816102ef565b9060036002820154910154906103a5604051809461032f565b608083015260a0820152f35b5f80fd5b346103b15760203660031901126103b15760206103d36004356113fa565b6040519015158152f35b346103b15760203660031901126103b1576004355f526001602052602060ff60405f2054166040519015158152f35b604060a09161041c84825161032f565b602081015160808501520151910152565b60c0810192916102dd919061040c565b346103b15760403660031901126103b15760243560043561045c61153c565b505f52600260205260405f20906001600160401b036104b060206040519461048386610208565b600361048e826102ef565b918288526002810154848901520154604087015201516001600160401b031690565b161561050c576104e46104de6104d260208551016001600160401b0390511690565b6001600160401b031690565b42611a42565b116104fd576104f9906040519182918261042d565b0390f35b630ee5338360e21b5f5260045ffd5b635a26d5fd60e11b5f5260045ffd5b346103b15760203660031901126103b1576004355f52600360205261014060405f20610546816102ef565b90600281015490600381015460048201546005830154916007600685015494015494610575604051809861032f565b608087015260a086015260c085015260e0840152610100830152610120820152f35b61ffff8116036103b157565b346103b15760403660031901126103b15760206103d36004356105c581610597565b60243590611561565b346103b1575f3660031901126103b1576020600854604051908152f35b60c0610120916105fc84825161032f565b60208101516080850152604081015160a0850152606081015182850152608081015160e085015260a08101516101008501520151910152565b610140810192916102dd91906105eb565b346103b15760403660031901126103b1576024356004356106656115af565b505f52600360205260405f20906001600160401b036106e160206040519461068c86610223565b6007610697826102ef565b91828852600281015484890152600381015460408901526004810154606089015260058101546080890152600681015460a0890152015460c087015201516001600160401b031690565b161561050c576107036104de6104d260208551016001600160401b0390511690565b116104fd576104f99060405191829182610635565b600435906001600160a01b03821682036103b157565b602435906001600160a01b03821682036103b157565b6001600160401b03811161020357601f01601f191660200190565b92919261076b82610744565b9161077960405193846102ac565b8294818452818301116103b1578281602093845f960137010152565b60403660031901126103b1576107a9610718565b6024356001600160401b0381116103b157366023820112156103b1576107d990369060248160040135910161075f565b906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163081149081156108da575b506108cb5761081c611a7e565b6040516352d1902d60e01b8152916020836004816001600160a01b0386165afa5f938161089a575b5061086557634c9c8ce360e01b5f526001600160a01b03821660045260245ffd5b905f805160206132078339815191528303610886576108849250611bac565b005b632a87526960e21b5f52600483905260245ffd5b6108bd91945060203d6020116108c4575b6108b581836102ac565b810190611a64565b925f610844565b503d6108ab565b63703e46dd60e11b5f5260045ffd5b5f80516020613207833981519152546001600160a01b0316141590505f61080f565b346103b1575f3660031901126103b1577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036108cb5760206040515f805160206132078339815191528152f35b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b346103b1575f3660031901126103b1576104f960405161099e6040826102ac565b60058152640312e302e360dc1b602082015260405191829182610953565b346103b15760203660031901126103b1576004356109d8611a7e565b478111610a48575f805160206131e7833981519152545f918291829182916001600160a01b03165af1610a096115ec565b5015610a1157005b60405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606490fd5b60405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606490fd5b346103b1575f3660031901126103b1575f546040516001600160a01b039091168152602090f35b346103b1575f3660031901126103b157610ac3611a7e565b5f805160206131e783398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b608060e091610b2284825161032f565b602081015182850152604081015160a0850152606081015160c08501520151910152565b610100810192916102dd9190610b12565b346103b15760403660031901126103b157602435600435610b7661161b565b505f52600660205260405f20906001600160401b03610bde602060405194610b9d8661023e565b6005610ba8826102ef565b9182885260028101548489015260038101546040890152600481015460608901520154608087015201516001600160401b031690565b161561050c57610c006104de6104d260208551016001600160401b0390511690565b116104fd576104f99060405191829182610b46565b346103b1575f3660031901126103b1575f805160206131e7833981519152546040516001600160a01b039091168152602090f35b346103b1575f3660031901126103b1576104f9604051610c6a6040826102ac565b60058152640352e302e360dc1b602082015260405191829182610953565b60e061014091610c9984825161032f565b60208101516080850152604081015160a0850152606081015160c085015260808101518285015260a081015161010085015260c08101516101208501520151910152565b610160810192916102dd9190610c88565b346103b15760403660031901126103b157602435600435610d0d61164c565b505f52600460205260405f20906001600160401b03610d8f6020610d2f6102cd565b946008610d3b826102ef565b91828852600281015484890152600381015460408901526004810154606089015260058101546080890152600681015460a0890152600781015460c0890152015460e087015201516001600160401b031690565b161561050c57610db16104de6104d260208551016001600160401b0390511690565b116104fd576104f99060405191829182610cdd565b9c9b9a9896949290918d9a989694926101e08c019e610de49161032f565b60808b015260a08a015260c0890152151560e08801526101008701526101208601526101408501526101608401526101808301526101a08201526101c00152565b346103b15760203660031901126103b1576004355f52600560205260405f20610e4d816102ef565b6104f9600283015492600381015490600481015460ff60058301541660068301546007840154600885015491600986015493600a87015495600c600b890154980154986040519c8d9c8d610dc6565b346103b15760203660031901126103b1576004355f52600660205261010060405f20610ec7816102ef565b9060028101549060038101546005600483015492015492610eeb604051809661032f565b608085015260a084015260c083015260e0820152f35b346103b1575f3660031901126103b1576020600754604051908152f35b9491926101409693999897949199610f3b8761016081019c61032f565b608087015260a086015260c085015260e08401526101008301526101208201520152565b346103b15760203660031901126103b1576004355f52600460205260405f20610f87816102ef565b6104f960028301549260038101549060048101546005820154600683015491600860078501549401549460405198899889610f1e565b9060206003198301126103b1576004356001600160401b0381116103b157826023820112156103b1578060040135926001600160401b0384116103b15760248460051b830101116103b1576024019190565b346103b15761101d36610fbd565b505060206040515f8152f35b61103236610fbd565b5f8092601e1981360301915b8385101561109c578460051b820135838112156103b1578201908135916001600160401b0383116103b1576020019082360382136103b15761108e61108860019461109494611b05565b60ff1690565b906116e0565b94019361103e565b6008546110a891611b99565b34106110b057005b62976f7560e21b5f5260045ffd5b6001600160401b0381116102035760051b60200190565b9080601f830112156103b15781356110ec816110be565b926110fa60405194856102ac565b81845260208085019260051b8201019283116103b157602001905b8282106111225750505090565b8135815260209182019101611115565b346103b15760c03660031901126103b15761114b610718565b61115361072e565b90604435916001600160401b0383116103b157366023840112156103b157826004013592611180846110be565b9361118e60405195866102ac565b8085526024602086019160051b830101913683116103b157602401905b8282106111e657505050606435926001600160401b0384116103b1576111d86108849436906004016110d5565b906084359260a435946116ed565b6020809183356111f581610597565b8152019101906111ab565b6101606101c09161121284825161032f565b60208101516080850152604081015160a0850152606081015160c0850152611243608082015160e086019015159052565b60a081015161010085015260c081015161012085015260e0810151610140850152610100810151828501526101208101516101808501526101408101516101a08501520151910152565b6101e0810192916102dd9190611200565b346103b15760403660031901126103b1576024356004356112bd61194c565b505f52600560205260405f2090600c6112d46102df565b926112de816102ef565b845260028101546020850152600381015460408501526004810154606085015261131861130f600583015460ff1690565b15156080860152565b600681015460a0850152600781015460c0850152600881015460e08501526009810154610100850152600a810154610120850152600b81015461014085015201546101608301526001600160401b0361137c6020845101516001600160401b031690565b161561050c5761139e6104de6104d260208551016001600160401b0390511690565b116104fd576104f9906040519182918261128d565b346103b15760203660031901126103b1576108846113cf610718565b6113d7611a7e565b6119ab565b600511156113e657565b634e487b7160e01b5f52602160045260245ffd5b611405815f1a611a1c565b61140e816113dc565b80611447575061144160016114336001600160401b03935f52600260205260405f2090565b01546001600160401b031690565b16151590565b611450816113dc565b60018103611478575061144160016114336001600160401b03935f52600360205260405f2090565b611481816113dc565b600281036114a9575061144160016114336001600160401b03935f52600460205260405f2090565b6114b2816113dc565b600381036114da575061144160016114336001600160401b03935f52600560205260405f2090565b806114e66004926113dc565b0361150a5761144160016114336001600160401b03935f52600660205260405f2090565b62c5984360e11b5f5260045ffd5b60405190611525826101e8565b5f6060838281528260208201528260408201520152565b6040519061154982610208565b5f604083611555611518565b81528260208201520152565b60405160f09190911b6001600160f01b03191660208201908152602282019290925261159a81604281015b03601f1981018352826102ac565b5190205f52600160205260ff60405f20541690565b604051906115bc82610223565b5f60c0836115c8611518565b81528260208201528260408201528260608201528260808201528260a08201520152565b3d15611616573d906115fd82610744565b9161160b60405193846102ac565b82523d5f602084013e565b606090565b604051906116288261023e565b5f608083611634611518565b81528260208201528260408201528260608201520152565b6040519061165982610259565b5f60e083611665611518565b81528260208201528260408201528260608201528260808201528260a08201528260c08201520152565b634e487b7160e01b5f52601160045260245ffd5b90602082018092116116b157565b61168f565b90600182018092116116b157565b90600882018092116116b157565b90600282018092116116b157565b919082018092116116b157565b9391949290945f8051602061322783398151915254956001600160401b0361172b61171e60ff8a60401c1615151590565b986001600160401b031690565b1680159081611845575b600114908161183b575b159081611832575b506118235761178a958761178160016001600160401b03195f805160206132278339815191525416175f8051602061322783398151915255565b6117e957611875565b61179057565b6117ba60ff60401b195f8051602061322783398151915254165f8051602061322783398151915255565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1565b61181e6801000000000000000060ff60401b195f805160206132278339815191525416175f8051602061322783398151915255565b611875565b63f92ee8a960e01b5f5260045ffd5b9050155f611747565b303b15915061173f565b889150611735565b80518210156118615760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b90611891909693969592949561188961256a565b6113d761256a565b61189961256a565b60018060a01b03166bffffffffffffffffffffffff60a01b5f5416175f555f5b8351811015611936578061193061192361ffff6118d86001958961184d565b511661158c6119126118ea868d61184d565b51604051928391602083019586909160229261ffff60f01b9060f01b16825260028201520190565b5190205f52600160205260405f2090565b805460ff19166001179055565b016118b9565b50915092506119476102dd92600755565b600855565b6040519061195982610275565b5f61016083611966611518565b81528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b6001600160a01b03168015611a09575f805160206131e783398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b60ff166004811161150a5760058110156113e65790565b6027198101919082116116b157565b9080821115611a575781039081116116b15790565b9081039081116116b15790565b908160209103126103b1575190565b6040513d5f823e3d90fd5b5f805160206131e7833981519152546001600160a01b03163303611a9e57565b63118cdaa760e01b5f523360045260245ffd5b60405190611abe82610291565b815f8152611aca61153c565b6020820152611ad76115af565b6040820152611ae461164c565b6060820152611af161194c565b608082015260a0611b0061161b565b910152565b906001823560f81c03611b8a576003600283013560f81c0190818110611b4c57611b2e92611c4e565b928291929594925f5b60ff84168110611b5b575050505003611b4c57565b63734fff6760e11b5f5260045ffd5b600160ff91611b7885611b8298611b70611ab1565b508a87611d54565b9190999299612260565b019050611b37565b63a9146eeb60e01b5f5260045ffd5b818102929181159184041417156116b157565b90813b15611c2d575f8051602061320783398151915280546001600160a01b0319166001600160a01b0384169081179091557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115611c1557611c1291612595565b50565b505034611c1e57565b63b398979f60e01b5f5260045ffd5b50634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b611ca392611c5f92818103926125ed565b92905f611c71823560f01c86846125b5565b90611c7a612607565b5082546001600160a01b031690604051809781948293631286d10d60e21b845260048401612876565b03915afa928315611d4f575f905f905f95611d24575b5015611d1557611ce3611cdf611cd4606084015161ffff1690565b608084015190611561565b1590565b611d065760a0015192600201936020840151938051602011611b4c576021015192565b63e60dce7160e01b5f5260045ffd5b63a1a2d59960e01b5f5260045ffd5b915050611d449193503d805f833e611d3c81836102ac565b810190612777565b94929050905f611cb9565b611a73565b82611d6e92949394611d64611ab1565b50818103926125ed565b6021829392013560f01c91602384013560f01c90611dbe611db4611d938486896125d1565b509684602501611da5888289856125ed565b979096810360241901926125ed565b939094369161075f565b604051611df06021826020808201955f87528051918291018484015e81015f838201520301601f1981018352826102ac565b519020853560f01c956002965f915b818310611e2a5750505003611d1557611e1c60259160289361289d565b959195949095960101010193565b90919297611e48816020611e4060019486013590565b91019a612a35565b93019190611dff565b600190825181550190611e876001600160401b0360208301511683906001600160401b03166001600160401b0319825416179055565b60408101519061ffff60401b835491606060ff60501b91015160501b169260401b169062ffffff60401b191617179055565b9060806005918051805185556001850190611ef76001600160401b0360208301511683906001600160401b03166001600160401b0319825416179055565b60408101519061ffff60401b835491606060ff60501b91015160501b169260401b169062ffffff60401b1916171790556020810151600285015560408101516003850155606081015160048501550151910155565b9160206102dd9294936001600160401b036101208201961681520190610b12565b90610160600c91611f7f815185611e51565b602081015160028501556040810151600385015560608101516004850155611fc2611fad6080830151151590565b600586019060ff801983541691151516179055565b60a0810151600685015560c0810151600785015560e081015160088501556101008101516009850155610120810151600a850155610140810151600b8501550151910155565b9160206102dd9294936001600160401b036102008201961681520190611200565b9060e060089180518051855560018501906120676001600160401b0360208301511683906001600160401b03166001600160401b0319825416179055565b60408101519061ffff60401b835491606060ff60501b91015160501b169260401b169062ffffff60401b1916171790556020810151600285015560408101516003850155606081015160048501556080810151600585015560a0810151600685015560c081015160078501550151910155565b9160206102dd9294936001600160401b036101808201961681520190610c88565b9060c060079180518051855560018501906121396001600160401b0360208301511683906001600160401b03166001600160401b0319825416179055565b60408101519061ffff60401b835491606060ff60501b91015160501b169260401b169062ffffff60401b1916171790556020810151600285015560408101516003850155606081015160048501556080810151600585015560a081015160068501550151910155565b9160206102dd9294936001600160401b0361016082019616815201906105eb565b90604060039180518051855560018501906122016001600160401b0360208301511683906001600160401b03166001600160401b0319825416179055565b838101519061ffff60401b835491606060ff60501b91015160501b1692861b169062ffffff60401b191617179055602081015160028501550151910155565b9160206102dd9294936001600160401b0360e0820196168152019061040c565b91815161226c816113dc565b612275816113dc565b6122fe576122936104d26001611433865f52600260205260405f2090565b6001600160401b038216116122a757505050565b60207ffb12ae848c5dadd8d78a67a33e6edd5c9de9217de2735553c5451a6f6c6fceb792016122e881516122e3865f52600260205260405f2090565b6121c3565b51906122f960405192839283612240565b0390a2565b6001825161230b816113dc565b612314816113dc565b03612399576123336104d26001611433865f52600360205260405f2090565b6001600160401b0382161161234757505050565b60407f7191ffe59869d1cf17cb7c2726e2bd60a37024a55d653026782e80eca977b1df92016123888151612383865f52600360205260405f2090565b6120fb565b51906122f9604051928392836121a2565b600282516123a6816113dc565b6123af816113dc565b03612434576123ce6104d26001611433865f52600460205260405f2090565b6001600160401b038216116123e257505050565b60607f98bf4c5718257f52861df389c8da98969915aac10244557e2fbebe31c25774949201612423815161241e865f52600460205260405f2090565b612029565b51906122f9604051928392836120da565b60038251612441816113dc565b61244a816113dc565b036124cf576124696104d26001611433865f52600560205260405f2090565b6001600160401b0382161161247d57505050565b60807f66e9beacbf647c3bc61691e3291107d4a62979d7845cb7527ca0dcd478e8134f92016124be81516124b9865f52600560205260405f2090565b611f6d565b51906122f960405192839283612008565b600482516124dc816113dc565b6124e5816113dc565b0361150a576125046104d26001611433865f52600660205260405f2090565b6001600160401b0382161161251857505050565b60a07f21654bf502bb4f1c5de999bef2220202e8be7e7bb8febc1307d54f0d840fbb0492016125598151612554865f52600660205260405f2090565b611eb9565b51906122f960405192839283611f4c565b60ff5f805160206132278339815191525460401c161561258657565b631afcd79f60e31b5f5260045ffd5b5f806125b293602081519101845af46125ac6115ec565b916129cb565b90565b9092919283600201806002116116b157116103b1576002019190565b9092919283602501806025116116b157116103b1576025019190565b9093928201938483116116b15784116103b1578101920390565b6040519061261482610259565b5f60e083828152826020820152826040820152826060820152826080820152606060a0820152606060c08201520152565b519060ff821682036103b157565b51906001600160401b03821682036103b157565b519063ffffffff821682036103b157565b51906102dd82610597565b81601f820112156103b15760208151910161269d82610744565b926126ab60405194856102ac565b828452828201116103b157815f926020928386015e8301015290565b81601f820112156103b1578051906126de826110be565b926126ec60405194856102ac565b82845260208085019360071b830101918183116103b157602001925b828410612716575050505090565b6080848303126103b1576020608091604051612731816101e8565b86518152828701518382015261274960408801612645565b604082015261275a60608801612645565b6060820152815201930192612708565b519081151582036103b157565b6080818303126103b15780516001600160401b0381116103b1578101610100818403126103b1576127a66102cd565b906127b081612645565b82526127be60208201612653565b60208301526127cf60408201612667565b60408301526127e060608201612678565b60608301526080810151608083015260a08101516001600160401b0381116103b1578461280e918301612683565b60a083015260c0810151906001600160401b0382116103b1576128358560e09383016126c7565b60c0840152015160e08201529261284e6020830161276a565b9260408301516001600160401b0381116103b157606091612870918501612683565b92015190565b90918060409360208452816020850152848401375f828201840152601f01601f1916010190565b90916128a7611ab1565b506128b336848461075f565b6128bb611ab1565b506128cd6128c882612a73565b611a1c565b6128d5612ada565b906128e08183612a29565b6128e9816113dc565b8061292c57506128fb6125b292612e44565b60208201525b9361292461290e82611a33565b9461291c81870135966116a3565b92369161075f565b016008015190565b612935816113dc565b60018103612954575061294a6125b292612d9d565b6040820152612901565b61295d816113dc565b6002810361297c57506129726125b292612cdc565b6060820152612901565b612985816113dc565b600381036129a4575061299a6125b292612bb6565b6080820152612901565b806129b06004926113dc565b0361150a576129c16125b292612b39565b60a0820152612901565b906129ef57508051156129e057805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580612a20575b612a00575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156129f8565b60058210156113e65752565b90808211612a6d575b604051906020820192600160f81b84526021830152604182015260418152612a676061826102ac565b51902090565b90612a3e565b6003815110612a83576003015190565b60405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b6044820152606490fd5b90815160018201908183116116b15710612a8357016001015190565b612ae2611ab1565b50612aeb612e8d565b612af3612ebc565b612afb612f03565b612b03612f50565b90612b0c612fb9565b9260405194612b1a86610291565b5f8652602086015260408501526060840152608083015260a082015290565b612b4161161b565b50612b4a612fb9565b90612b5481612ff4565b908352612b6181836130b0565b602084015260208101908181116116b157612b7c82846130b0565b6040850152604081018092116116b157606090612b9983856130b0565b82860152018091116116b157612bae916130b0565b608082015290565b612bbe61194c565b50612cd3612bca612f50565b91612ccd612cb8612ca3612c8e612c7a612c66612c52612c33612c1f898c6040612c17612c10612bf985612ff4565b908552612c0681876130b0565b60208601526116a3565b80946130b0565b9101526116a3565b612c29818b6130b0565b60608d01526116a3565b612c4d600160ff612c44848d612abe565b161460808d0152565b6116b6565b612c5c81896130b0565b60a08b01526116a3565b612c7081886130b0565b60c08a01526116a3565b612c848187613109565b60e08901526116a3565b612c988186613109565b6101008801526116a3565b612cad8185613109565b6101208701526116a3565b612cc28184613109565b6101408601526116a3565b90613109565b61016082015290565b612ce461164c565b50612ced612f03565b90612cf781612ff4565b91908352612d0582826130b0565b602084015260208201918281116116b157604090612d2384846130b0565b82860152018092116116b157612d8f612d7b612d67612d5385612d49612d9597876130b0565b60608901526116a3565b612d5d81866130b0565b60808801526116a3565b612d7181856130b0565b60a08701526116a3565b612d8581846130b0565b60c08601526116a3565b906130b0565b60e082015290565b612da56115af565b50612dae612ebc565b90612db881612ff4565b91908352612dc682826130b0565b602084015260208201918281116116b157612de183836130b0565b6040850152604081018093116116b157606090612dfe84846130b0565b82860152018092116116b157612d8f612e2883612e1e612e3c95856130b0565b60808701526116a3565b612e3281846130b0565b60a08601526116a3565b60c082015290565b612e4c61153c565b50612e55612e8d565b90612e5f81612ff4565b908352612e6c81836130b0565b6020840152602081018091116116b157612e85916130b0565b604082015290565b612e9561153c565b50612e9e613161565b60405190612eab82610208565b81525f60208201525f604082015290565b612ec46115af565b50612ecd613161565b60405190612eda82610223565b81525f60208201525f60408201525f60608201525f60808201525f60a08201525f60c082015290565b612f0b61164c565b50612f14613161565b60405190612f2182610259565b81525f60208201525f60408201525f60608201525f60808201525f60a08201525f60c08201525f60e082015290565b612f5861194c565b50612f61613161565b60405190612f6e82610275565b81525f60208201525f60408201525f60608201525f60808201525f60a08201525f60c08201525f60e08201525f6101008201525f6101208201525f6101408201525f61016082015290565b612fc161161b565b50612fca613161565b60405190612fd78261023e565b81525f60208201525f60408201525f60608201525f608082015290565b90612ffd611518565b50613006613161565b916130115f826130b0565b835260288151106130745760288101516001600160401b031660208401526125b290612c4d61306a61306361304660206116c4565b61305e613053828761318e565b61ffff1660408a0152565b6116d2565b8093612abe565b60ff166060860152565b60405162461bcd60e51b8152602060048201526014602482015273746f55696e7436345f6f75744f66426f756e647360601b6044820152606490fd5b90815160208201908183116116b157106130cc57016020015190565b60405162461bcd60e51b8152602060048201526015602482015274746f55696e743235365f6f75744f66426f756e647360581b6044820152606490fd5b90815160208201908183116116b1571061312557016020015190565b60405162461bcd60e51b8152602060048201526014602482015273746f496e743235365f6f75744f66426f756e647360601b6044820152606490fd5b613169611518565b50604051613176816101e8565b5f81525f60208201525f60408201525f606082015290565b90815160028201908183116116b157106131aa57016002015190565b60405162461bcd60e51b8152602060048201526014602482015273746f55696e7431365f6f75744f66426f756e647360601b6044820152606490fdfe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212204a3711fca3c5856cb6d435990f15e65da5266746cdfbd7d5feb5154b5398db1c64736f6c634300081a0033", + "sourceMap": "651:5308:41:-:0;;;;;;;1171:4:25;1163:13;;8837:64:24;651:5308:41;;;;;;7896:76:24;;-1:-1:-1;;;;;;;;;;;651:5308:41;;7985:34:24;7981:146;;-1:-1:-1;651:5308:41;;;;;;;;1163:13:25;651:5308:41;;;;;;;;;;;7981:146:24;-1:-1:-1;;;;;;651:5308:41;-1:-1:-1;;;;;651:5308:41;;;8837:64:24;651:5308:41;;;8087:29:24;;651:5308:41;;8087:29:24;7981:146;;;;7896:76;7938:23;;;-1:-1:-1;7938:23:24;;-1:-1:-1;7938:23:24;651:5308:41;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x60806040526004361015610011575f80fd5b5f3560e01c8063043cc783146101cf5780630e8fd1ba146101ca5780630f01cb51146101c557806332bb41d3146101c05780633a612c32146101bb578063437209a7146101b657806348b6404d146101b157806349c398a4146101ac5780634f1ef286146101a757806352d1902d146101a257806354fd4d501461019d5780635d2c53a7146101985780636306642214610193578063715018a61461018e5780637cfa33dd146101895780638da5cb5b14610184578063ad3cb1cc1461017f578063bdf6afa41461017a578063c12fd47314610175578063c6ac557c14610170578063cb718a9b14610157578063cf8e17bb1461016b578063d47eed4514610166578063d58a8f6d14610161578063d5d89eaf1461015c578063e18910a314610157578063e29ea30f146101525763f2fde38b1461014d575f80fd5b6113b3565b61129e565b610f01565b611132565b611029565b61100f565b610f5f565b610e9c565b610e25565b610cee565b610c49565b610c15565b610b57565b610aab565b610a84565b6109bc565b61097d565b6108fc565b610795565b610646565b6105ce565b6105a3565b61051b565b61043d565b6103dd565b6103b5565b610362565b634e487b7160e01b5f52604160045260245ffd5b608081019081106001600160401b0382111761020357604052565b6101d4565b606081019081106001600160401b0382111761020357604052565b60e081019081106001600160401b0382111761020357604052565b60a081019081106001600160401b0382111761020357604052565b61010081019081106001600160401b0382111761020357604052565b61018081019081106001600160401b0382111761020357604052565b60c081019081106001600160401b0382111761020357604052565b90601f801991011681019081106001600160401b0382111761020357604052565b604051906102dd610100836102ac565b565b604051906102dd610180836102ac565b906040516102fc816101e8565b606060ff600183958054855201546001600160401b038116602085015261ffff8160401c16604085015260501c16910152565b60ff60608092805185526001600160401b03602082015116602086015261ffff6040820151166040860152015116910152565b346103b15760203660031901126103b1576004355f52600260205260c060405f2061038c816102ef565b9060036002820154910154906103a5604051809461032f565b608083015260a0820152f35b5f80fd5b346103b15760203660031901126103b15760206103d36004356113fa565b6040519015158152f35b346103b15760203660031901126103b1576004355f526001602052602060ff60405f2054166040519015158152f35b604060a09161041c84825161032f565b602081015160808501520151910152565b60c0810192916102dd919061040c565b346103b15760403660031901126103b15760243560043561045c61153c565b505f52600260205260405f20906001600160401b036104b060206040519461048386610208565b600361048e826102ef565b918288526002810154848901520154604087015201516001600160401b031690565b161561050c576104e46104de6104d260208551016001600160401b0390511690565b6001600160401b031690565b42611a42565b116104fd576104f9906040519182918261042d565b0390f35b630ee5338360e21b5f5260045ffd5b635a26d5fd60e11b5f5260045ffd5b346103b15760203660031901126103b1576004355f52600360205261014060405f20610546816102ef565b90600281015490600381015460048201546005830154916007600685015494015494610575604051809861032f565b608087015260a086015260c085015260e0840152610100830152610120820152f35b61ffff8116036103b157565b346103b15760403660031901126103b15760206103d36004356105c581610597565b60243590611561565b346103b1575f3660031901126103b1576020600854604051908152f35b60c0610120916105fc84825161032f565b60208101516080850152604081015160a0850152606081015182850152608081015160e085015260a08101516101008501520151910152565b610140810192916102dd91906105eb565b346103b15760403660031901126103b1576024356004356106656115af565b505f52600360205260405f20906001600160401b036106e160206040519461068c86610223565b6007610697826102ef565b91828852600281015484890152600381015460408901526004810154606089015260058101546080890152600681015460a0890152015460c087015201516001600160401b031690565b161561050c576107036104de6104d260208551016001600160401b0390511690565b116104fd576104f99060405191829182610635565b600435906001600160a01b03821682036103b157565b602435906001600160a01b03821682036103b157565b6001600160401b03811161020357601f01601f191660200190565b92919261076b82610744565b9161077960405193846102ac565b8294818452818301116103b1578281602093845f960137010152565b60403660031901126103b1576107a9610718565b6024356001600160401b0381116103b157366023820112156103b1576107d990369060248160040135910161075f565b906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163081149081156108da575b506108cb5761081c611a7e565b6040516352d1902d60e01b8152916020836004816001600160a01b0386165afa5f938161089a575b5061086557634c9c8ce360e01b5f526001600160a01b03821660045260245ffd5b905f805160206132078339815191528303610886576108849250611bac565b005b632a87526960e21b5f52600483905260245ffd5b6108bd91945060203d6020116108c4575b6108b581836102ac565b810190611a64565b925f610844565b503d6108ab565b63703e46dd60e11b5f5260045ffd5b5f80516020613207833981519152546001600160a01b0316141590505f61080f565b346103b1575f3660031901126103b1577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036108cb5760206040515f805160206132078339815191528152f35b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b346103b1575f3660031901126103b1576104f960405161099e6040826102ac565b60058152640312e302e360dc1b602082015260405191829182610953565b346103b15760203660031901126103b1576004356109d8611a7e565b478111610a48575f805160206131e7833981519152545f918291829182916001600160a01b03165af1610a096115ec565b5015610a1157005b60405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606490fd5b60405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606490fd5b346103b1575f3660031901126103b1575f546040516001600160a01b039091168152602090f35b346103b1575f3660031901126103b157610ac3611a7e565b5f805160206131e783398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b608060e091610b2284825161032f565b602081015182850152604081015160a0850152606081015160c08501520151910152565b610100810192916102dd9190610b12565b346103b15760403660031901126103b157602435600435610b7661161b565b505f52600660205260405f20906001600160401b03610bde602060405194610b9d8661023e565b6005610ba8826102ef565b9182885260028101548489015260038101546040890152600481015460608901520154608087015201516001600160401b031690565b161561050c57610c006104de6104d260208551016001600160401b0390511690565b116104fd576104f99060405191829182610b46565b346103b1575f3660031901126103b1575f805160206131e7833981519152546040516001600160a01b039091168152602090f35b346103b1575f3660031901126103b1576104f9604051610c6a6040826102ac565b60058152640352e302e360dc1b602082015260405191829182610953565b60e061014091610c9984825161032f565b60208101516080850152604081015160a0850152606081015160c085015260808101518285015260a081015161010085015260c08101516101208501520151910152565b610160810192916102dd9190610c88565b346103b15760403660031901126103b157602435600435610d0d61164c565b505f52600460205260405f20906001600160401b03610d8f6020610d2f6102cd565b946008610d3b826102ef565b91828852600281015484890152600381015460408901526004810154606089015260058101546080890152600681015460a0890152600781015460c0890152015460e087015201516001600160401b031690565b161561050c57610db16104de6104d260208551016001600160401b0390511690565b116104fd576104f99060405191829182610cdd565b9c9b9a9896949290918d9a989694926101e08c019e610de49161032f565b60808b015260a08a015260c0890152151560e08801526101008701526101208601526101408501526101608401526101808301526101a08201526101c00152565b346103b15760203660031901126103b1576004355f52600560205260405f20610e4d816102ef565b6104f9600283015492600381015490600481015460ff60058301541660068301546007840154600885015491600986015493600a87015495600c600b890154980154986040519c8d9c8d610dc6565b346103b15760203660031901126103b1576004355f52600660205261010060405f20610ec7816102ef565b9060028101549060038101546005600483015492015492610eeb604051809661032f565b608085015260a084015260c083015260e0820152f35b346103b1575f3660031901126103b1576020600754604051908152f35b9491926101409693999897949199610f3b8761016081019c61032f565b608087015260a086015260c085015260e08401526101008301526101208201520152565b346103b15760203660031901126103b1576004355f52600460205260405f20610f87816102ef565b6104f960028301549260038101549060048101546005820154600683015491600860078501549401549460405198899889610f1e565b9060206003198301126103b1576004356001600160401b0381116103b157826023820112156103b1578060040135926001600160401b0384116103b15760248460051b830101116103b1576024019190565b346103b15761101d36610fbd565b505060206040515f8152f35b61103236610fbd565b5f8092601e1981360301915b8385101561109c578460051b820135838112156103b1578201908135916001600160401b0383116103b1576020019082360382136103b15761108e61108860019461109494611b05565b60ff1690565b906116e0565b94019361103e565b6008546110a891611b99565b34106110b057005b62976f7560e21b5f5260045ffd5b6001600160401b0381116102035760051b60200190565b9080601f830112156103b15781356110ec816110be565b926110fa60405194856102ac565b81845260208085019260051b8201019283116103b157602001905b8282106111225750505090565b8135815260209182019101611115565b346103b15760c03660031901126103b15761114b610718565b61115361072e565b90604435916001600160401b0383116103b157366023840112156103b157826004013592611180846110be565b9361118e60405195866102ac565b8085526024602086019160051b830101913683116103b157602401905b8282106111e657505050606435926001600160401b0384116103b1576111d86108849436906004016110d5565b906084359260a435946116ed565b6020809183356111f581610597565b8152019101906111ab565b6101606101c09161121284825161032f565b60208101516080850152604081015160a0850152606081015160c0850152611243608082015160e086019015159052565b60a081015161010085015260c081015161012085015260e0810151610140850152610100810151828501526101208101516101808501526101408101516101a08501520151910152565b6101e0810192916102dd9190611200565b346103b15760403660031901126103b1576024356004356112bd61194c565b505f52600560205260405f2090600c6112d46102df565b926112de816102ef565b845260028101546020850152600381015460408501526004810154606085015261131861130f600583015460ff1690565b15156080860152565b600681015460a0850152600781015460c0850152600881015460e08501526009810154610100850152600a810154610120850152600b81015461014085015201546101608301526001600160401b0361137c6020845101516001600160401b031690565b161561050c5761139e6104de6104d260208551016001600160401b0390511690565b116104fd576104f9906040519182918261128d565b346103b15760203660031901126103b1576108846113cf610718565b6113d7611a7e565b6119ab565b600511156113e657565b634e487b7160e01b5f52602160045260245ffd5b611405815f1a611a1c565b61140e816113dc565b80611447575061144160016114336001600160401b03935f52600260205260405f2090565b01546001600160401b031690565b16151590565b611450816113dc565b60018103611478575061144160016114336001600160401b03935f52600360205260405f2090565b611481816113dc565b600281036114a9575061144160016114336001600160401b03935f52600460205260405f2090565b6114b2816113dc565b600381036114da575061144160016114336001600160401b03935f52600560205260405f2090565b806114e66004926113dc565b0361150a5761144160016114336001600160401b03935f52600660205260405f2090565b62c5984360e11b5f5260045ffd5b60405190611525826101e8565b5f6060838281528260208201528260408201520152565b6040519061154982610208565b5f604083611555611518565b81528260208201520152565b60405160f09190911b6001600160f01b03191660208201908152602282019290925261159a81604281015b03601f1981018352826102ac565b5190205f52600160205260ff60405f20541690565b604051906115bc82610223565b5f60c0836115c8611518565b81528260208201528260408201528260608201528260808201528260a08201520152565b3d15611616573d906115fd82610744565b9161160b60405193846102ac565b82523d5f602084013e565b606090565b604051906116288261023e565b5f608083611634611518565b81528260208201528260408201528260608201520152565b6040519061165982610259565b5f60e083611665611518565b81528260208201528260408201528260608201528260808201528260a08201528260c08201520152565b634e487b7160e01b5f52601160045260245ffd5b90602082018092116116b157565b61168f565b90600182018092116116b157565b90600882018092116116b157565b90600282018092116116b157565b919082018092116116b157565b9391949290945f8051602061322783398151915254956001600160401b0361172b61171e60ff8a60401c1615151590565b986001600160401b031690565b1680159081611845575b600114908161183b575b159081611832575b506118235761178a958761178160016001600160401b03195f805160206132278339815191525416175f8051602061322783398151915255565b6117e957611875565b61179057565b6117ba60ff60401b195f8051602061322783398151915254165f8051602061322783398151915255565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1565b61181e6801000000000000000060ff60401b195f805160206132278339815191525416175f8051602061322783398151915255565b611875565b63f92ee8a960e01b5f5260045ffd5b9050155f611747565b303b15915061173f565b889150611735565b80518210156118615760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b90611891909693969592949561188961256a565b6113d761256a565b61189961256a565b60018060a01b03166bffffffffffffffffffffffff60a01b5f5416175f555f5b8351811015611936578061193061192361ffff6118d86001958961184d565b511661158c6119126118ea868d61184d565b51604051928391602083019586909160229261ffff60f01b9060f01b16825260028201520190565b5190205f52600160205260405f2090565b805460ff19166001179055565b016118b9565b50915092506119476102dd92600755565b600855565b6040519061195982610275565b5f61016083611966611518565b81528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b6001600160a01b03168015611a09575f805160206131e783398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b60ff166004811161150a5760058110156113e65790565b6027198101919082116116b157565b9080821115611a575781039081116116b15790565b9081039081116116b15790565b908160209103126103b1575190565b6040513d5f823e3d90fd5b5f805160206131e7833981519152546001600160a01b03163303611a9e57565b63118cdaa760e01b5f523360045260245ffd5b60405190611abe82610291565b815f8152611aca61153c565b6020820152611ad76115af565b6040820152611ae461164c565b6060820152611af161194c565b608082015260a0611b0061161b565b910152565b906001823560f81c03611b8a576003600283013560f81c0190818110611b4c57611b2e92611c4e565b928291929594925f5b60ff84168110611b5b575050505003611b4c57565b63734fff6760e11b5f5260045ffd5b600160ff91611b7885611b8298611b70611ab1565b508a87611d54565b9190999299612260565b019050611b37565b63a9146eeb60e01b5f5260045ffd5b818102929181159184041417156116b157565b90813b15611c2d575f8051602061320783398151915280546001600160a01b0319166001600160a01b0384169081179091557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115611c1557611c1291612595565b50565b505034611c1e57565b63b398979f60e01b5f5260045ffd5b50634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b611ca392611c5f92818103926125ed565b92905f611c71823560f01c86846125b5565b90611c7a612607565b5082546001600160a01b031690604051809781948293631286d10d60e21b845260048401612876565b03915afa928315611d4f575f905f905f95611d24575b5015611d1557611ce3611cdf611cd4606084015161ffff1690565b608084015190611561565b1590565b611d065760a0015192600201936020840151938051602011611b4c576021015192565b63e60dce7160e01b5f5260045ffd5b63a1a2d59960e01b5f5260045ffd5b915050611d449193503d805f833e611d3c81836102ac565b810190612777565b94929050905f611cb9565b611a73565b82611d6e92949394611d64611ab1565b50818103926125ed565b6021829392013560f01c91602384013560f01c90611dbe611db4611d938486896125d1565b509684602501611da5888289856125ed565b979096810360241901926125ed565b939094369161075f565b604051611df06021826020808201955f87528051918291018484015e81015f838201520301601f1981018352826102ac565b519020853560f01c956002965f915b818310611e2a5750505003611d1557611e1c60259160289361289d565b959195949095960101010193565b90919297611e48816020611e4060019486013590565b91019a612a35565b93019190611dff565b600190825181550190611e876001600160401b0360208301511683906001600160401b03166001600160401b0319825416179055565b60408101519061ffff60401b835491606060ff60501b91015160501b169260401b169062ffffff60401b191617179055565b9060806005918051805185556001850190611ef76001600160401b0360208301511683906001600160401b03166001600160401b0319825416179055565b60408101519061ffff60401b835491606060ff60501b91015160501b169260401b169062ffffff60401b1916171790556020810151600285015560408101516003850155606081015160048501550151910155565b9160206102dd9294936001600160401b036101208201961681520190610b12565b90610160600c91611f7f815185611e51565b602081015160028501556040810151600385015560608101516004850155611fc2611fad6080830151151590565b600586019060ff801983541691151516179055565b60a0810151600685015560c0810151600785015560e081015160088501556101008101516009850155610120810151600a850155610140810151600b8501550151910155565b9160206102dd9294936001600160401b036102008201961681520190611200565b9060e060089180518051855560018501906120676001600160401b0360208301511683906001600160401b03166001600160401b0319825416179055565b60408101519061ffff60401b835491606060ff60501b91015160501b169260401b169062ffffff60401b1916171790556020810151600285015560408101516003850155606081015160048501556080810151600585015560a0810151600685015560c081015160078501550151910155565b9160206102dd9294936001600160401b036101808201961681520190610c88565b9060c060079180518051855560018501906121396001600160401b0360208301511683906001600160401b03166001600160401b0319825416179055565b60408101519061ffff60401b835491606060ff60501b91015160501b169260401b169062ffffff60401b1916171790556020810151600285015560408101516003850155606081015160048501556080810151600585015560a081015160068501550151910155565b9160206102dd9294936001600160401b0361016082019616815201906105eb565b90604060039180518051855560018501906122016001600160401b0360208301511683906001600160401b03166001600160401b0319825416179055565b838101519061ffff60401b835491606060ff60501b91015160501b1692861b169062ffffff60401b191617179055602081015160028501550151910155565b9160206102dd9294936001600160401b0360e0820196168152019061040c565b91815161226c816113dc565b612275816113dc565b6122fe576122936104d26001611433865f52600260205260405f2090565b6001600160401b038216116122a757505050565b60207ffb12ae848c5dadd8d78a67a33e6edd5c9de9217de2735553c5451a6f6c6fceb792016122e881516122e3865f52600260205260405f2090565b6121c3565b51906122f960405192839283612240565b0390a2565b6001825161230b816113dc565b612314816113dc565b03612399576123336104d26001611433865f52600360205260405f2090565b6001600160401b0382161161234757505050565b60407f7191ffe59869d1cf17cb7c2726e2bd60a37024a55d653026782e80eca977b1df92016123888151612383865f52600360205260405f2090565b6120fb565b51906122f9604051928392836121a2565b600282516123a6816113dc565b6123af816113dc565b03612434576123ce6104d26001611433865f52600460205260405f2090565b6001600160401b038216116123e257505050565b60607f98bf4c5718257f52861df389c8da98969915aac10244557e2fbebe31c25774949201612423815161241e865f52600460205260405f2090565b612029565b51906122f9604051928392836120da565b60038251612441816113dc565b61244a816113dc565b036124cf576124696104d26001611433865f52600560205260405f2090565b6001600160401b0382161161247d57505050565b60807f66e9beacbf647c3bc61691e3291107d4a62979d7845cb7527ca0dcd478e8134f92016124be81516124b9865f52600560205260405f2090565b611f6d565b51906122f960405192839283612008565b600482516124dc816113dc565b6124e5816113dc565b0361150a576125046104d26001611433865f52600660205260405f2090565b6001600160401b0382161161251857505050565b60a07f21654bf502bb4f1c5de999bef2220202e8be7e7bb8febc1307d54f0d840fbb0492016125598151612554865f52600660205260405f2090565b611eb9565b51906122f960405192839283611f4c565b60ff5f805160206132278339815191525460401c161561258657565b631afcd79f60e31b5f5260045ffd5b5f806125b293602081519101845af46125ac6115ec565b916129cb565b90565b9092919283600201806002116116b157116103b1576002019190565b9092919283602501806025116116b157116103b1576025019190565b9093928201938483116116b15784116103b1578101920390565b6040519061261482610259565b5f60e083828152826020820152826040820152826060820152826080820152606060a0820152606060c08201520152565b519060ff821682036103b157565b51906001600160401b03821682036103b157565b519063ffffffff821682036103b157565b51906102dd82610597565b81601f820112156103b15760208151910161269d82610744565b926126ab60405194856102ac565b828452828201116103b157815f926020928386015e8301015290565b81601f820112156103b1578051906126de826110be565b926126ec60405194856102ac565b82845260208085019360071b830101918183116103b157602001925b828410612716575050505090565b6080848303126103b1576020608091604051612731816101e8565b86518152828701518382015261274960408801612645565b604082015261275a60608801612645565b6060820152815201930192612708565b519081151582036103b157565b6080818303126103b15780516001600160401b0381116103b1578101610100818403126103b1576127a66102cd565b906127b081612645565b82526127be60208201612653565b60208301526127cf60408201612667565b60408301526127e060608201612678565b60608301526080810151608083015260a08101516001600160401b0381116103b1578461280e918301612683565b60a083015260c0810151906001600160401b0382116103b1576128358560e09383016126c7565b60c0840152015160e08201529261284e6020830161276a565b9260408301516001600160401b0381116103b157606091612870918501612683565b92015190565b90918060409360208452816020850152848401375f828201840152601f01601f1916010190565b90916128a7611ab1565b506128b336848461075f565b6128bb611ab1565b506128cd6128c882612a73565b611a1c565b6128d5612ada565b906128e08183612a29565b6128e9816113dc565b8061292c57506128fb6125b292612e44565b60208201525b9361292461290e82611a33565b9461291c81870135966116a3565b92369161075f565b016008015190565b612935816113dc565b60018103612954575061294a6125b292612d9d565b6040820152612901565b61295d816113dc565b6002810361297c57506129726125b292612cdc565b6060820152612901565b612985816113dc565b600381036129a4575061299a6125b292612bb6565b6080820152612901565b806129b06004926113dc565b0361150a576129c16125b292612b39565b60a0820152612901565b906129ef57508051156129e057805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580612a20575b612a00575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156129f8565b60058210156113e65752565b90808211612a6d575b604051906020820192600160f81b84526021830152604182015260418152612a676061826102ac565b51902090565b90612a3e565b6003815110612a83576003015190565b60405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b6044820152606490fd5b90815160018201908183116116b15710612a8357016001015190565b612ae2611ab1565b50612aeb612e8d565b612af3612ebc565b612afb612f03565b612b03612f50565b90612b0c612fb9565b9260405194612b1a86610291565b5f8652602086015260408501526060840152608083015260a082015290565b612b4161161b565b50612b4a612fb9565b90612b5481612ff4565b908352612b6181836130b0565b602084015260208101908181116116b157612b7c82846130b0565b6040850152604081018092116116b157606090612b9983856130b0565b82860152018091116116b157612bae916130b0565b608082015290565b612bbe61194c565b50612cd3612bca612f50565b91612ccd612cb8612ca3612c8e612c7a612c66612c52612c33612c1f898c6040612c17612c10612bf985612ff4565b908552612c0681876130b0565b60208601526116a3565b80946130b0565b9101526116a3565b612c29818b6130b0565b60608d01526116a3565b612c4d600160ff612c44848d612abe565b161460808d0152565b6116b6565b612c5c81896130b0565b60a08b01526116a3565b612c7081886130b0565b60c08a01526116a3565b612c848187613109565b60e08901526116a3565b612c988186613109565b6101008801526116a3565b612cad8185613109565b6101208701526116a3565b612cc28184613109565b6101408601526116a3565b90613109565b61016082015290565b612ce461164c565b50612ced612f03565b90612cf781612ff4565b91908352612d0582826130b0565b602084015260208201918281116116b157604090612d2384846130b0565b82860152018092116116b157612d8f612d7b612d67612d5385612d49612d9597876130b0565b60608901526116a3565b612d5d81866130b0565b60808801526116a3565b612d7181856130b0565b60a08701526116a3565b612d8581846130b0565b60c08601526116a3565b906130b0565b60e082015290565b612da56115af565b50612dae612ebc565b90612db881612ff4565b91908352612dc682826130b0565b602084015260208201918281116116b157612de183836130b0565b6040850152604081018093116116b157606090612dfe84846130b0565b82860152018092116116b157612d8f612e2883612e1e612e3c95856130b0565b60808701526116a3565b612e3281846130b0565b60a08601526116a3565b60c082015290565b612e4c61153c565b50612e55612e8d565b90612e5f81612ff4565b908352612e6c81836130b0565b6020840152602081018091116116b157612e85916130b0565b604082015290565b612e9561153c565b50612e9e613161565b60405190612eab82610208565b81525f60208201525f604082015290565b612ec46115af565b50612ecd613161565b60405190612eda82610223565b81525f60208201525f60408201525f60608201525f60808201525f60a08201525f60c082015290565b612f0b61164c565b50612f14613161565b60405190612f2182610259565b81525f60208201525f60408201525f60608201525f60808201525f60a08201525f60c08201525f60e082015290565b612f5861194c565b50612f61613161565b60405190612f6e82610275565b81525f60208201525f60408201525f60608201525f60808201525f60a08201525f60c08201525f60e08201525f6101008201525f6101208201525f6101408201525f61016082015290565b612fc161161b565b50612fca613161565b60405190612fd78261023e565b81525f60208201525f60408201525f60608201525f608082015290565b90612ffd611518565b50613006613161565b916130115f826130b0565b835260288151106130745760288101516001600160401b031660208401526125b290612c4d61306a61306361304660206116c4565b61305e613053828761318e565b61ffff1660408a0152565b6116d2565b8093612abe565b60ff166060860152565b60405162461bcd60e51b8152602060048201526014602482015273746f55696e7436345f6f75744f66426f756e647360601b6044820152606490fd5b90815160208201908183116116b157106130cc57016020015190565b60405162461bcd60e51b8152602060048201526015602482015274746f55696e743235365f6f75744f66426f756e647360581b6044820152606490fd5b90815160208201908183116116b1571061312557016020015190565b60405162461bcd60e51b8152602060048201526014602482015273746f496e743235365f6f75744f66426f756e647360601b6044820152606490fd5b613169611518565b50604051613176816101e8565b5f81525f60208201525f60408201525f606082015290565b90815160028201908183116116b157106131aa57016002015190565b60405162461bcd60e51b8152602060048201526014602482015273746f55696e7431365f6f75744f66426f756e647360601b6044820152606490fdfe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212204a3711fca3c5856cb6d435990f15e65da5266746cdfbd7d5feb5154b5398db1c64736f6c634300081a0033", + "sourceMap": "651:5308:41:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;-1:-1:-1;651:5308:41;908:53:42;651:5308:41;;;;-1:-1:-1;651:5308:41;908:53:42;;;:::i;:::-;;;;;;651:5308:41;908:53:42;;651:5308:41;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;651:5308:41;;;;;;;;-1:-1:-1;;651:5308:41;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;651:5308:41;;;;;;-1:-1:-1;651:5308:41;852:50:42;651:5308:41;;;;;-1:-1:-1;651:5308:41;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;;;;;:::i;:::-;;-1:-1:-1;651:5308:41;2741:15;651:5308;;;-1:-1:-1;651:5308:41;;-1:-1:-1;;;;;651:5308:41;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;2741:15;651:5308;;;;;;;;;;;;;2774:23;651:5308;-1:-1:-1;;;;;651:5308:41;;;;;2774:28;2770:90;;2873:46;;2895:23;651:5308;2895:13;;:23;-1:-1:-1;;;;;651:5308:41;;;;;2895:23;-1:-1:-1;;;;;651:5308:41;;;2873:46;2878:15;2873:46;:::i;:::-;:52;2869:111;;651:5308;;;;;;;;;:::i;:::-;;;;2869:111;2948:21;;;-1:-1:-1;2948:21:41;651:5308;-1:-1:-1;2948:21:41;2770:90;2825:24;;;-1:-1:-1;2825:24:41;651:5308;-1:-1:-1;2825:24:41;651:5308;;;;;;-1:-1:-1;;651:5308:41;;;;;;-1:-1:-1;651:5308:41;967:41:42;651:5308:41;;;;-1:-1:-1;651:5308:41;967:41:42;;;:::i;:::-;;;;;651:5308:41;967:41:42;;;;651:5308:41;;967:41:42;;651:5308:41;967:41:42;;;651:5308:41;967:41:42;;;;;651:5308:41;967:41:42;;651:5308:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;812:35;651:5308;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;;;;;:::i;:::-;;-1:-1:-1;651:5308:41;3124:9;651:5308;;;-1:-1:-1;651:5308:41;;-1:-1:-1;;;;;651:5308:41;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;3124:9;651:5308;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3151:23;651:5308;-1:-1:-1;;;;;651:5308:41;;;;;3151:28;3147:90;;3250:46;;3272:23;651:5308;3272:13;;:23;-1:-1:-1;;;;;651:5308:41;;;;;3250:46;:52;3246:111;;651:5308;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;651:5308:41;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;651:5308:41;;;;;;:::o;:::-;-1:-1:-1;;;;;651:5308:41;;;;;;-1:-1:-1;;651:5308:41;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;651:5308:41;;;;;;:::o;:::-;;;-1:-1:-1;;651:5308:41;;;;;;:::i;:::-;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;4692:6:25;651:5308:41;4683:4:25;4675:23;;;:120;;;;651:5308:41;4658:251:25;;;2303:62:23;;:::i;:::-;651:5308:41;;-1:-1:-1;;;6156:52:25;;651:5308:41;;;;;-1:-1:-1;;;;;651:5308:41;;6156:52:25;;-1:-1:-1;;6156:52:25;;;651:5308:41;-1:-1:-1;6152:437:25;;-1:-1:-1;;;;6518:60:25;-1:-1:-1;;;;;651:5308:41;;;;;-1:-1:-1;6518:60:25;6152:437;6250:40;-1:-1:-1;;;;;;;;;;;6250:40:25;;6246:120;;6428:4;;;;:::i;:::-;651:5308:41;6246:120:25;-1:-1:-1;;;;6317:34:25;651:5308:41;;;;;-1:-1:-1;6518:60:25;6156:52;;;;;651:5308:41;6156:52:25;651:5308:41;6156:52:25;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;4658:251;4869:29;;;-1:-1:-1;4869:29:25;651:5308:41;-1:-1:-1;4869:29:25;4675:120;-1:-1:-1;;;;;;;;;;;651:5308:41;-1:-1:-1;;;;;651:5308:41;4753:42:25;;;-1:-1:-1;4675:120:25;;;651:5308:41;;;;;;-1:-1:-1;;651:5308:41;;;;5115:6:25;-1:-1:-1;;;;;651:5308:41;5106:4:25;5098:23;5094:145;;651:5308:41;;;-1:-1:-1;;;;;;;;;;;651:5308:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;651:5308:41;;;;:::o;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;2303:62:23;;:::i;:::-;5526:21:41;5516:31;;651:5308;;-1:-1:-1;;;;;;;;;;;651:5308:41;-1:-1:-1;;;;;;;;;;;;;651:5308:41;5601:31;;;;:::i;:::-;;651:5308;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;;-1:-1:-1;;651:5308:41;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;-1:-1:-1;;651:5308:41;;;;2303:62:23;;:::i;:::-;-1:-1:-1;;;;;;;;;;;651:5308:41;;-1:-1:-1;;;;;;651:5308:41;;;;;;;-1:-1:-1;;;;;651:5308:41;3975:40:23;651:5308:41;;3975:40:23;651:5308:41;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;;;;;:::i;:::-;;-1:-1:-1;651:5308:41;4255:9;651:5308;;;-1:-1:-1;651:5308:41;;-1:-1:-1;;;;;651:5308:41;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4282:23;651:5308;-1:-1:-1;;;;;651:5308:41;;;;;4282:28;4278:90;;4381:46;;4403:23;651:5308;4403:13;;:23;-1:-1:-1;;;;;651:5308:41;;;;;4381:46;:52;4377:111;;651:5308;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;-1:-1:-1;;;;;;;;;;;651:5308:41;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;-1:-1:-1;;651:5308:41;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;;;;;:::i;:::-;;-1:-1:-1;651:5308:41;;;;;-1:-1:-1;651:5308:41;;-1:-1:-1;;;;;651:5308:41;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3561:23;651:5308;-1:-1:-1;;;;;651:5308:41;;;;;3561:28;3557:90;;3660:46;;3682:23;651:5308;3682:13;;:23;-1:-1:-1;;;;;651:5308:41;;;;;3660:46;:52;3656:111;;651:5308;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;-1:-1:-1;651:5308:41;1073:47:42;651:5308:41;;;-1:-1:-1;651:5308:41;1073:47:42;;;:::i;:::-;651:5308:41;1073:47:42;;;651:5308:41;1073:47:42;;;;651:5308:41;1073:47:42;651:5308:41;1073:47:42;;651:5308:41;;1073:47:42;;;651:5308:41;;1073:47:42;;;651:5308:41;1073:47:42;;;651:5308:41;1073:47:42;;;651:5308:41;1073:47:42;;;;651:5308:41;1073:47:42;;;;651:5308:41;1073:47:42;;;;;651:5308:41;1073:47:42;;651:5308:41;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;-1:-1:-1;651:5308:41;1126:41:42;651:5308:41;;;;-1:-1:-1;651:5308:41;1126:41:42;;;:::i;:::-;;;;;651:5308:41;1126:41:42;;;;651:5308:41;1126:41:42;651:5308:41;1126:41:42;;651:5308:41;1126:41:42;;651:5308:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;651:5308:41;;;;;769:37;651:5308;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;-1:-1:-1;651:5308:41;;;;;-1:-1:-1;651:5308:41;1014:53:42;;;:::i;:::-;651:5308:41;1014:53:42;;;651:5308:41;1014:53:42;;;;651:5308:41;1014:53:42;651:5308:41;1014:53:42;;651:5308:41;1014:53:42;;;651:5308:41;1014:53:42;;;651:5308:41;1014:53:42;;;;;651:5308:41;1014:53:42;;651:5308:41;;;;;;;;;:::i;:::-;;;-1:-1:-1;;651:5308:41;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;2447:1;651:5308;;;;;;;:::i;:::-;1916:1;;651:5308;;;;;;;1968:172;1973:13;1988:7;;;;;;651:5308;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;2012:58;2031:39;651:5308;2031:39;2012:58;2031:39;;:::i;:::-;651:5308;;;;2012:58;;;:::i;:::-;651:5308;;1973:13;;;1988:7;2585:20;651:5308;2567:38;;;:::i;:::-;2213:9;:23;2209:88;;651:5308;2209:88;2259:27;;;1916:1;2259:27;651:5308;1916:1;2259:27;651:5308;-1:-1:-1;;;;;651:5308:41;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;651:5308:41;;;;;;:::i;:::-;;;:::i;:::-;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;913:772;651:5308;;;;;;:::i;:::-;;;;;;;913:772;;:::i;651:5308::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;;;;;;;:::i;:::-;;-1:-1:-1;651:5308:41;3896:12;651:5308;;;-1:-1:-1;651:5308:41;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3896:12;651:5308;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;3926:13;;:23;651:5308;-1:-1:-1;;;;;651:5308:41;;;;;3926:28;3922:90;;4025:46;;4047:23;651:5308;4047:13;;:23;-1:-1:-1;;;;;651:5308:41;;;;;4025:46;:52;4021:111;;651:5308;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;651:5308:41;;;;2357:1:23;651:5308:41;;:::i;:::-;2303:62:23;;:::i;:::-;2357:1;:::i;651:5308:41:-;;-1:-1:-1;651:5308:41;;;:::o;:::-;;;;;;;;;;;;4528:793;4623:43;4659:5;651:5308;4659:5;4623:43;:::i;:::-;651:5308;;;:::i;:::-;4680:31;;;4735:19;651:5308;4659:5;4735:19;-1:-1:-1;;;;;4735:19:41;651:5308;;4735:15;651:5308;;;;;;;4735:19;:38;651:5308;-1:-1:-1;;;;;651:5308:41;;;;;4735:43;;4727:52;:::o;4676:639::-;651:5308;;;:::i;:::-;4659:5;4800:25;;4659:5;;4849:13;:32;4659:5;4849:13;-1:-1:-1;;;;;4849:13:41;651:5308;;4849:9;651:5308;;;;;;;4796:519;651:5308;;;:::i;:::-;4920:27;4908:39;;4920:27;;4971:11;:30;4659:5;4971:11;-1:-1:-1;;;;;4971:11:41;651:5308;;4971:7;651:5308;;;;;;;4904:411;651:5308;;;:::i;:::-;5040:16;5028:28;;5040:16;;5080;:35;4659:5;5080:16;-1:-1:-1;;;;;5080:16:41;651:5308;;5080:12;651:5308;;;;;;;5024:291;651:5308;;5154:19;651:5308;;:::i;:::-;5142:31;5154:19;;5197:32;4659:5;5197:13;-1:-1:-1;;;;;5197:13:41;651:5308;;5197:9;651:5308;;;;;;;5138:177;5273:31;;;651:5308;5273:31;5154:19;651:5308;5273:31;651:5308;;;;;;;:::i;:::-;-1:-1:-1;651:5308:41;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;651:5308:41;;;;:::i;:::-;;;;;;;;;;:::o;1210:190:42:-;651:5308:41;;;;;;;-1:-1:-1;;;;;;651:5308:41;1350:41:42;;;651:5308:41;;;;;;;;;;1350:41:42;651:5308:41;;;;1350:41:42;;651:5308:41;;1350:41:42;;;;;;:::i;:::-;651:5308:41;1340:52:42;;-1:-1:-1;651:5308:41;1321:18:42;1350:41;651:5308:41;;;-1:-1:-1;651:5308:41;;;1210:190:42;:::o;651:5308:41:-;;;;;;;:::i;:::-;-1:-1:-1;651:5308:41;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;651:5308:41;;;;:::o;:::-;;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;651:5308:41;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;651:5308:41;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;7607:2:42;651:5308:41;;;;;;;:::o;:::-;;:::i;:::-;;4500:1:48;651:5308:41;;;;;;;:::o;:::-;;13393:1:46;651:5308:41;;;;;;;:::o;:::-;;1968:1:48;651:5308:41;;;;;;;:::o;:::-;;;;;;;;;;:::o;4069:1104:24:-;;;;;;;-1:-1:-1;;;;;;;;;;;651:5308:41;;-1:-1:-1;;;;;651:5308:41;4301:16:24;651:5308:41;;;;;4301:16:24;651:5308:41;;;;4301:16:24;651:5308:41;-1:-1:-1;;;;;651:5308:41;;;;;4726:16:24;;:34;;;;4069:1104;4805:1;4790:16;:50;;;;4069:1104;4855:13;:30;;;;4069:1104;4851:91;;;5055:1;4951:18;;;651:5308:41;-1:-1:-1;;;;;651:5308:41;-1:-1:-1;;;;;;;;;;;651:5308:41;;;-1:-1:-1;;;;;;;;;;;651:5308:41;;4951:18:24;4979:67;;5055:1;:::i;:::-;5066:101;;4069:1104::o;5066:101::-;5100:23;-1:-1:-1;;;651:5308:41;-1:-1:-1;;;;;;;;;;;651:5308:41;;-1:-1:-1;;;;;;;;;;;651:5308:41;;5100:23:24;651:5308:41;;4805:1:24;651:5308:41;;5142:14:24;;651:5308:41;;5142:14:24;4069:1104::o;4979:67::-;5013:22;651:5308:41;-1:-1:-1;;;651:5308:41;-1:-1:-1;;;;;;;;;;;651:5308:41;;;-1:-1:-1;;;;;;;;;;;651:5308:41;;5013:22:24;5055:1;:::i;4851:91::-;4908:23;;;4302:15;4908:23;;4302:15;4908:23;4855:30;4872:13;;;4855:30;;;4790:50;4818:4;4810:25;:30;;-1:-1:-1;4790:50:24;;4726:34;;;-1:-1:-1;4726:34:24;;651:5308:41;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;913:772;;6961:1:24;913:772:41;;;;;;;;6893:76:24;;:::i;:::-;;;:::i;6961:1::-;6893:76;;:::i;:::-;651:5308:41;;;;;;;;;1286:34;651:5308;;;1286:34;651:5308;1286:34;1390:3;651:5308;;1351:37;;;;;1472:29;1409:147;:140;651:5308;1472:29;651:5308;1472:29;;;:::i;:::-;651:5308;;1455:79;;1503:30;;;;:::i;:::-;651:5308;;;1455:79;;;;;;;;651:5308;;;;;;;;;;;;;;;;;;;;1455:79;651:5308;1428:120;;651:5308;;;;;;;;;;1409:140;651:5308;;-1:-1:-1;;651:5308:41;;;;;;1409:147;651:5308;1336:13;;1351:37;;;;;;1576:48;1634:44;1351:37;1576:48;651:5308;;1576:48;1634:44;651:5308;;;;;;;;;:::i;:::-;-1:-1:-1;651:5308:41;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3405:215:23:-;-1:-1:-1;;;;;651:5308:41;3489:22:23;;3485:91;;-1:-1:-1;;;;;;;;;;;651:5308:41;;-1:-1:-1;;;;;;651:5308:41;;;;;;;-1:-1:-1;;;;;651:5308:41;3975:40:23;-1:-1:-1;;3975:40:23;3405:215::o;3485:91::-;3534:31;;;3509:1;3534:31;3509:1;3534:31;651:5308:41;;3509:1:23;3534:31;1237:264:48;651:5308:41;;1352:18:48;1331:40;;1352:18;;651:5308:41;;;;;;1387:28:48;:::o;651:5308:41:-;-1:-1:-1;;651:5308:41;;;;;;;;:::o;5782:175::-;;5864:5;;;;;;651:5308;;;;;;;5885:12;:::o;5860:91::-;651:5308;;;;;;;;5928:12;:::o;651:5308::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;2658:162:23;-1:-1:-1;;;;;;;;;;;651:5308:41;-1:-1:-1;;;;;651:5308:41;966:10:26;2717:23:23;2713:101;;2658:162::o;2713:101::-;2763:40;;;-1:-1:-1;2763:40:23;966:10:26;2763:40:23;651:5308:41;;-1:-1:-1;2763:40:23;651:5308:41;;;;;;;:::i;:::-;;-1:-1:-1;651:5308:41;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;:::o;7694:1114:42:-;;2215:1;1256:95:53;;;;2239:42:42;2235:122;;651:5308:41;;1256:95:53;;;;;651:5308:41;;3611:33:42;;;3607:108;;8116:61;7979:14;8116:61;:::i;:::-;8068:109;;;;;;8216:13;-1:-1:-1;8231:14:42;651:5308:41;;;8231:14:42;;;;8739:24;;;;;8735:66;;7694:1114::o;8735:66::-;3671:29;;;-1:-1:-1;8772:29:42;;-1:-1:-1;8772:29:42;8247:3;2215:1;651:5308:41;;8428:58:42;651:5308:41;8556:11:42;651:5308:41;;;:::i;:::-;;8428:58:42;;;:::i;:::-;8384:102;;;;8556:11;;:::i;:::-;651:5308:41;8216:13:42;;;;2235:122;2312:26;;;-1:-1:-1;2312:26:42;;-1:-1:-1;2312:26:42;651:5308:41;;;;;;;;;;;;;;;;:::o;2274:344:31:-;;1758:29;;:34;1754:119;;-1:-1:-1;;;;;;;;;;;651:5308:41;;-1:-1:-1;;;;;;651:5308:41;-1:-1:-1;;;;;651:5308:41;;;;;;;;2417:36:31;-1:-1:-1;;2417:36:31;651:5308:41;;2468:15:31;:11;;2499:53;;;:::i;:::-;;2274:344::o;2464:148::-;6173:9;;;6169:70;;2274:344::o;6169:70::-;6209:19;;;1791:1;6209:19;;1791:1;6209:19;1754:119;-1:-1:-1;;;;1791:1:31;1815:47;;;-1:-1:-1;;;;;651:5308:41;;;;1815:47:31;651:5308:41;;;1815:47:31;3737:1442:42;1623:43;3737:1442;4008:90;3737:1442;651:5308:41;;;4008:90:42;;:::i;:::-;3998:100;;4121:1;4411:56;1513:95:53;;;;3998:100:42;;4411:56;:::i;:::-;651:5308:41;;;:::i;:::-;-1:-1:-1;651:5308:41;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;1623:43:42;;;;;;:::i;:::-;;;;;;;;;;4121:1;;;;;1623:43;;;3737:1442;1684:6;;1680:61;;1766:62;1767:61;651:5308:41;1785:20:42;;;651:5308:41;;;;;;1807:20:42;;;651:5308:41;1767:61:42;;:::i;:::-;1766:62;;651:5308:41;1766:62:42;1762:135;;4507:13;;;651:5308:41;4228:1:42;651:5308:41;14089:85:52;;;;;651:5308:41;;;14089:85:52;4879:37:42;4875:128;;12388:81:52;;;3737:1442:42;:::o;1762:135::-;1851:35;;;4121:1;1851:35;1623:43;4121:1;1851:35;1680:61;1699:42;;;4121:1;1699:42;1623:43;4121:1;1699:42;1623:43;;;;;;;;;;4121:1;1623:43;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;:::i;5482:1598::-;;5887:70;5482:1598;;;;651:5308:41;;:::i;:::-;;;;;5887:70:42;;:::i;:::-;5995:2;1513:95:53;;;;;;;;651:5308:41;1513:95:53;;;;;6375:63:42;651:5308:41;6613:84:42;6375:63;;;;;:::i;:::-;651:5308:41;;;;;6516:64:42;;;;;;:::i;:::-;651:5308:41;;;;;-1:-1:-1;;651:5308:41;;6613:84:42;:::i;:::-;651:5308:41;;;;;;:::i;:::-;;;716:42:51;5995:2:42;716:42:51;;;;;269:1;-1:-1:-1;269:1:51;;651:5308:41;;269:1:51;;;;;;;651:5308:41;;;-1:-1:-1;651:5308:41;;;;716:42:51;;651:5308:41;;716:42:51;;;;;;:::i;:::-;651:5308:41;460:16:51;;1513:95:53;;;;2066:16:51;6157:1:42;2101:13:51;-1:-1:-1;2096:301:51;2116:18;;;;;;2418:21;;;;6896:61:42;;7007:27;651:5308:41;7007:27:42;7061:2;7007:27;;:::i;:::-;6971:63;;;;;;651:5308:41;;;;;5482:1598:42;:::o;2136:3:51:-;2191:59;;;;2333:49;2191:59;716:42;2191:59;269:1;2191:59;;2804:85:53;;2677:244;;2191:59:51;651:5308:41;;2333:49:51;;:::i;:::-;2136:3;651:5308:41;2101:13:51;;;;651:5308:41;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;-1:-1:-1;;;;;651:5308:41;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;:::o;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;-1:-1:-1;;;;;651:5308:41;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;-1:-1:-1;;;;;651:5308:41;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;-1:-1:-1;;;;;651:5308:41;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;-1:-1:-1;;;;;651:5308:41;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;:::i;8814:1660:42:-;;651:5308:41;;;;;:::i;:::-;;;;:::i;:::-;8956:42:42;;9018:56;651:5308:41;9032:42:42;:23;;651:5308:41;;4735:15;651:5308;;;;;;;9018:56:42;-1:-1:-1;;;;;651:5308:41;;9018:56:42;9014:223;;8952:1516;;;8814:1660::o;9014:223::-;9120:15;9158:64;9120:15;;651:5308:41;9120:15:42;;9094:23;;651:5308:41;;4735:15;651:5308;;;;;;;9094:23:42;651:5308:41;:::i;:::-;9206:15:42;651:5308:41;9158:64:42;651:5308:41;;9158:64:42;;;;;:::i;:::-;;;;8814:1660::o;8952:1516::-;9280:13;651:5308:41;;;;;:::i;:::-;;;;:::i;:::-;9257:36:42;9280:13;;9313:50;9327:36;9280:13;9327:17;;651:5308:41;;4849:9;651:5308;;;;;;;9313:50:42;-1:-1:-1;;;;;651:5308:41;;9313:50:42;9309:205;;9253:1215;;;8814:1660::o;9309:205::-;9403:15;9441:58;9403:15;;651:5308:41;9403:15:42;;9383:17;;651:5308:41;;4849:9;651:5308;;;;;;;9383:17:42;651:5308:41;:::i;:::-;9483:15:42;651:5308:41;9441:58:42;9403:15;651:5308:41;9441:58:42;;;;;:::i;9253:1215::-;9557:27;651:5308:41;;;;;:::i;:::-;;;;:::i;:::-;9534:50:42;9557:27;;9604:48;9618:34;9280:13;9618:15;;651:5308:41;;4971:7;651:5308;;;;;;;9604:48:42;-1:-1:-1;;;;;651:5308:41;;9604:48:42;9600:211;;9530:938;;;651:5308:41:o;9600:211:42:-;9690:13;9726:70;9690:13;;651:5308:41;9690:13:42;;9672:15;;651:5308:41;;4971:7;651:5308;;;;;;;9672:15:42;651:5308:41;:::i;:::-;9782:13:42;651:5308:41;9726:70:42;651:5308:41;;9726:70:42;;;;;:::i;9530:938::-;9854:16;651:5308:41;;;;;:::i;:::-;;;;:::i;:::-;9831:39:42;9854:16;;9890:53;9904:39;9280:13;9904:20;;651:5308:41;;5080:12;651:5308;;;;;;;9890:53:42;-1:-1:-1;;;;;651:5308:41;;9890:53:42;9886:220;;9827:641;;;651:5308:41:o;9886:220:42:-;9986:18;10027:64;9986:18;;651:5308:41;9986:18:42;;9963:20;;651:5308:41;;5080:12;651:5308;;;;;;;9963:20:42;651:5308:41;:::i;:::-;10072:18:42;651:5308:41;10027:64:42;651:5308:41;;10027:64:42;;;;;:::i;9827:641::-;10149:19;651:5308:41;;;;;:::i;:::-;;;;:::i;:::-;10126:42:42;10149:19;;10188:50;10202:36;9280:13;10202:17;;651:5308:41;;5197:9;651:5308;;;;;;;10188:50:42;-1:-1:-1;;;;;651:5308:41;;10188:50:42;10184:205;;10122:346;;;651:5308:41:o;10184:205:42:-;10278:15;10316:58;10278:15;;651:5308:41;10278:15:42;;10258:17;;651:5308:41;;5197:9;651:5308;;;;;;;10258:17:42;651:5308:41;:::i;:::-;10358:15:42;651:5308:41;10316:58:42;651:5308:41;;10316:58:42;;;;;:::i;7084:141:24:-;651:5308:41;-1:-1:-1;;;;;;;;;;;651:5308:41;;;;7150:18:24;7146:73;;7084:141::o;7146:73::-;7191:17;;;-1:-1:-1;7191:17:24;;-1:-1:-1;7191:17:24;3900:253:36;4049:25;3900:253;4091:55;3900:253;4049:25;;;;;;;;;;:::i;:::-;4091:55;;:::i;:::-;3900:253;:::o;541:165:53:-;;;;;651:5308:41;;;;;;;;;;;;;661:38:53;541:165;:::o;:::-;;;;;651:5308:41;;;;;;;;;;;;;661:38:53;541:165;:::o;:::-;;;;651:5308:41;;;;;;;;;;;;;;;;541:165:53;:::o;651:5308:41:-;;;;;;;:::i;:::-;-1:-1:-1;651:5308:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;651:5308:41;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;651:5308:41;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;651:5308:41;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;651:5308:41;;;;:::o;7086:602:42:-;;;651:5308:41;;:::i;:::-;;;;;;;:::i;:::-;;;:::i;:::-;;427:31:48;377:20;;;:::i;:::-;427:31;:::i;:::-;500:42;;:::i;:::-;552:30;;;;;:::i;:::-;651:5308:41;;;:::i;:::-;596:31:48;;;661:19;;7633:48:42;661:19:48;;:::i;:::-;643:15;;;:37;592:605;7427:27:42;651:5308:41;7427:27:42;;;:::i;:::-;7512:75;7597:12;2804:85:53;;;;7597:12:42;;:::i;:::-;651:5308:41;;;;:::i;:::-;13111:81:52;;;;;12989:235;592:605:48;651:5308:41;;;:::i;:::-;713:13:48;701:25;;713:13;;760:19;;7633:48:42;760:19:48;;:::i;:::-;742:15;;;:37;592:605;;697:500;651:5308:41;;;:::i;:::-;308:1:48;800:39;;308:1;;871:33;;7633:48:42;871:33:48;;:::i;:::-;855:13;;;:49;592:605;;796:401;651:5308:41;;;:::i;:::-;937:16:48;925:28;;937:16;;990:22;;7633:48:42;990:22:48;;:::i;:::-;969:18;;;:43;592:605;;921:276;651:5308:41;;1045:19:48;651:5308:41;;:::i;:::-;1033:31:48;1045:19;;1098;7633:48:42;1098:19:48;;:::i;:::-;1080:15;;;:37;592:605;;4421:582:36;;4593:8;;-1:-1:-1;651:5308:41;;5674:21:36;:17;;5846:142;;;;;;5670:385;6025:19;;;5694:1;6025:19;;5694:1;6025:19;4589:408;651:5308:41;;4841:22:36;:49;;;4589:408;4837:119;;4969:17;;:::o;4837:119::-;-1:-1:-1;;;4862:1:36;4917:24;;;-1:-1:-1;;;;;651:5308:41;;;;4917:24:36;651:5308:41;;;4917:24:36;4841:49;4867:18;;;:23;4841:49;;651:5308:41;;;;;;;;:::o;772:254:51:-;;868:15;;;864:81;;772:254;651:5308:41;;966:52:51;;;;651:5308:41;;;;269:1:51;;312;;;651:5308:41;312:1:51;;;651:5308:41;312:1:51;966:52;;;;;;:::i;:::-;651:5308:41;460:16:51;;772:254;:::o;864:81::-;;;;12334:301:46;651:5308:41;;;12436:27:46;651:5308:41;;;12522:81:46;;12334:301;:::o;651:5308:41:-;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;12334:301:46;;651:5308:41;;12462:1:46;651:5308:41;;;;;;;;12436:27:46;651:5308:41;;12522:81:46;12462:1;12522:81;;;12334:301::o;1881:357:45:-;651:5308:41;;:::i;:::-;;2046:22:45;;:::i;:::-;2088:16;;:::i;:::-;2122:14;;:::i;:::-;2159:19;;:::i;:::-;2198:22;;;:::i;:::-;651:5308:41;;;;;;;:::i;:::-;-1:-1:-1;651:5308:41;;1972:259:45;;;651:5308:41;;1972:259:45;;651:5308:41;1972:259:45;;;651:5308:41;1972:259:45;;;651:5308:41;1972:259:45;;;651:5308:41;1881:357:45;:::o;5013:535:48:-;651:5308:41;;:::i;:::-;;5121:42:48;;:::i;:::-;5227:26;;;;:::i;:::-;5201:52;;;5282:21;;;;:::i;:::-;5264:15;;;651:5308:41;5264:15:48;651:5308:41;;;;;;;;5355:21:48;;;;:::i;:::-;5335:17;;;651:5308:41;5335:17:48;651:5308:41;;;;;;;5408:18:48;5429:21;;;;;:::i;:::-;5408:18;;;651:5308:41;;;;;;;5497:21:48;;;:::i;:::-;5482:12;;;651:5308:41;5013:535:48;:::o;3979:1028::-;651:5308:41;;:::i;:::-;;4957:20:48;4096:39;;:::i;:::-;4199:26;4923:11;4857;4792;4726;4660;4587;4511:10;4440:11;4366;4199:26;;4309:23;4335:21;4287:11;4199:26;;;:::i;:::-;4173:52;;;4256:21;;;;:::i;:::-;4236:17;;;651:5308:41;4287:11:48;:::i;:::-;4335:21;;;:::i;:::-;4309:23;;651:5308:41;4366:11:48;:::i;:::-;4409:21;;;;:::i;:::-;4388:18;;;651:5308:41;4440:11:48;:::i;:::-;4462:39;4500:1;651:5308:41;4477:19:48;;;;:::i;:::-;651:5308:41;4477:24:48;4462:12;;;651:5308:41;;4462:39:48;4511:10;:::i;:::-;4556:21;;;;:::i;:::-;4532;;;651:5308:41;4587:11:48;:::i;:::-;4629:21;;;;:::i;:::-;4609:17;;;651:5308:41;4660:11:48;:::i;:::-;4696:20;;;;:::i;:::-;4682:11;;;651:5308:41;4726:11:48;:::i;:::-;4762:20;;;;:::i;:::-;4748:11;;;651:5308:41;4792:11:48;:::i;:::-;4827:20;;;;:::i;:::-;4814:10;;;651:5308:41;4857:11:48;:::i;:::-;4893:20;;;;:::i;:::-;4879:11;;;651:5308:41;4923:11:48;:::i;:::-;4957:20;;:::i;:::-;4945:9;;;651:5308:41;3979:1028:48;:::o;3183:790::-;651:5308:41;;:::i;:::-;;3333:34:48;;:::i;:::-;3431:26;;;;:::i;:::-;3405:52;;;;3487:21;;;;:::i;:::-;3468:16;;;651:5308:41;3468:16:48;651:5308:41;;;;;;;;3540:16:48;3559:21;;;;;:::i;:::-;3540:16;;;651:5308:41;;;;;;;3873:11:48;3803;3732;3662;3631:21;;3922;3631;;;:::i;:::-;3612:16;;;651:5308:41;3662:11:48;:::i;:::-;3701:21;;;;:::i;:::-;3684:14;;;651:5308:41;3732:11:48;:::i;:::-;3772:21;;;;:::i;:::-;3754:15;;;651:5308:41;3803:11:48;:::i;:::-;3842:21;;;;:::i;:::-;3825:14;;;651:5308:41;3873:11:48;:::i;:::-;3922:21;;:::i;:::-;3895:24;;;651:5308:41;3183:790:48;:::o;2496:681::-;651:5308:41;;:::i;:::-;;2604:36:48;;:::i;:::-;2704:26;;;;:::i;:::-;2678:52;;;;2759:21;;;;:::i;:::-;2741:15;;;651:5308:41;2741:15:48;651:5308:41;;;;;;;;2831:21:48;;;;:::i;:::-;2812:16;;;651:5308:41;2812:16:48;651:5308:41;;;;;;;2884:16:48;2903:21;;;;;:::i;:::-;2884:16;;;651:5308:41;;;;;;;3077:11:48;3004;2973:21;;3126;2973;;;:::i;:::-;2956:14;;;651:5308:41;3004:11:48;:::i;:::-;3046:21;;;;:::i;:::-;3026:17;;;651:5308:41;3077:11:48;:::i;3126:21::-;3099:24;;;651:5308:41;2496:681:48;:::o;2094:396::-;651:5308:41;;:::i;:::-;;2214:42:48;;:::i;:::-;2320:26;;;;:::i;:::-;2294:52;;;2371:21;;;;:::i;:::-;2357:11;;;651:5308:41;2357:11:48;651:5308:41;;;;;;;2439:21:48;;;:::i;:::-;2424:12;;;651:5308:41;2094:396:48;:::o;2412:163:45:-;651:5308:41;;:::i;:::-;;2525:20:45;;:::i;:::-;651:5308:41;;;;;;:::i;:::-;;;-1:-1:-1;2503:65:45;;;651:5308:41;-1:-1:-1;651:5308:41;2503:65:45;;651:5308:41;2412:163:45;:::o;2581:314::-;651:5308:41;;:::i;:::-;;2689:20:45;;:::i;:::-;651:5308:41;;;;;;:::i;:::-;;;-1:-1:-1;2660:228:45;;;651:5308:41;-1:-1:-1;651:5308:41;2660:228:45;;651:5308:41;-1:-1:-1;2660:228:45;;;651:5308:41;-1:-1:-1;2660:228:45;;;651:5308:41;-1:-1:-1;2660:228:45;;;651:5308:41;-1:-1:-1;2660:228:45;;;651:5308:41;2581:314:45;:::o;2901:364::-;651:5308:41;;:::i;:::-;;3035:20:45;;:::i;:::-;651:5308:41;;;;;;:::i;:::-;;;-1:-1:-1;2992:266:45;;;651:5308:41;-1:-1:-1;651:5308:41;2992:266:45;;651:5308:41;-1:-1:-1;2992:266:45;;;651:5308:41;-1:-1:-1;2992:266:45;;;651:5308:41;-1:-1:-1;2992:266:45;;;651:5308:41;-1:-1:-1;2992:266:45;;;651:5308:41;-1:-1:-1;2992:266:45;;;651:5308:41;2901:364:45;:::o;3271:440::-;651:5308:41;;:::i;:::-;;3388:20:45;;:::i;:::-;651:5308:41;;;;;;:::i;:::-;;;-1:-1:-1;3356:348:45;;;651:5308:41;-1:-1:-1;651:5308:41;3356:348:45;;651:5308:41;-1:-1:-1;3356:348:45;;;651:5308:41;-1:-1:-1;3356:348:45;;;651:5308:41;-1:-1:-1;3356:348:45;;;651:5308:41;-1:-1:-1;3356:348:45;;;651:5308:41;-1:-1:-1;3356:348:45;;;651:5308:41;-1:-1:-1;3356:348:45;;;651:5308:41;-1:-1:-1;3356:348:45;;;651:5308:41;-1:-1:-1;3356:348:45;;;651:5308:41;-1:-1:-1;3356:348:45;;;651:5308:41;3271:440:45;:::o;3717:188::-;651:5308:41;;:::i;:::-;;3818:20:45;;:::i;:::-;651:5308:41;;;;;;:::i;:::-;;;-1:-1:-1;3802:96:45;;;651:5308:41;-1:-1:-1;651:5308:41;3802:96:45;;651:5308:41;-1:-1:-1;3802:96:45;;;651:5308:41;-1:-1:-1;3802:96:45;;;651:5308:41;3717:188:45;:::o;1507:581:48:-;;651:5308:41;;:::i;:::-;;1655:40:48;;:::i;:::-;1768:21;;5189:1;1768:21;;:::i;:::-;651:5308:41;;;;;13367:27:46;651:5308:41;;;13455:81:46;;;-1:-1:-1;;;;;651:5308:41;1809:2:48;1822:18;;651:5308:41;2036:10:48;;1980:46;2006:19;1959:10;1873;1809:2;1873:10;:::i;:::-;1894:55;1928:20;;;;:::i;:::-;651:5308:41;;1894:24:48;;;651:5308:41;;1894:55:48;1959:10;:::i;:::-;2006:19;;;:::i;:::-;651:5308:41;;1980:17:48;;;651:5308:41;;;;;-1:-1:-1;;;651:5308:41;;1809:2:48;651:5308:41;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;14203:311:46;;651:5308:41;;14335:2:46;651:5308:41;;;;;;;;14309:28:46;651:5308:41;;14400:82:46;14335:2;14400:82;;;14203:311::o;651:5308:41:-;;;-1:-1:-1;;;651:5308:41;;14335:2:46;651:5308:41;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;14520:304:46;;651:5308:41;;14650:2:46;651:5308:41;;;;;;;;14624:28:46;651:5308:41;;14712:81:46;14650:2;14712:81;;;14520:304::o;651:5308:41:-;;;-1:-1:-1;;;651:5308:41;;14650:2:46;651:5308:41;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;;2244:162:45;651:5308:41;;:::i;:::-;;;;;;;:::i;:::-;-1:-1:-1;651:5308:41;;-1:-1:-1;2331:68:45;;;651:5308:41;-1:-1:-1;651:5308:41;2331:68:45;;651:5308:41;-1:-1:-1;2331:68:45;;;651:5308:41;2244:162:45;:::o;12641:305:46:-;;651:5308:41;;12771:1:46;651:5308:41;;;;;;;;12745:27:46;651:5308:41;;12833:81:46;12771:1;12833:81;;;12641:305::o;651:5308:41:-;;;-1:-1:-1;;;651:5308:41;;;;;;;;;;;;-1:-1:-1;;;651:5308:41;;;;;;", + "linkReferences": {}, + "immutableReferences": { + "47242": [ + { "start": 2020, "length": 32 }, + { "start": 2318, "length": 32 } + ] + } + }, + "methodIdentifiers": { + "UPGRADE_INTERFACE_VERSION()": "ad3cb1cc", + "_isValidDataSource(bytes32)": "0f01cb51", + "dataFeedExists(bytes32)": "0e8fd1ba", + "getOptionsNoOlderThan(bytes32,uint256)": "e29ea30f", + "getPerpNoOlderThan(bytes32,uint256)": "7cfa33dd", + "getRealizedVolatilityNoOlderThan(bytes32,uint256)": "bdf6afa4", + "getSpotMedianNoOlderThan(bytes32,uint256)": "32bb41d3", + "getTwapNoOlderThan(bytes32,uint256)": "49c398a4", + "getUpdateFee(bytes[])": "d47eed45", + "getValidTimePeriod()": "e18910a3", + "hyperlane()": "63066422", + "initialize(address,address,uint16[],bytes32[],uint256,uint256)": "d5d89eaf", + "isValidDataSource(uint16,bytes32)": "437209a7", + "optionsFeeds(bytes32)": "c12fd473", + "owner()": "8da5cb5b", + "perpFeeds(bytes32)": "c6ac557c", + "proxiableUUID()": "52d1902d", + "renounceOwnership()": "715018a6", + "rvFeeds(bytes32)": "cf8e17bb", + "singleUpdateFeeInWei()": "48b6404d", + "spotMedianFeeds(bytes32)": "043cc783", + "transferOwnership(address)": "f2fde38b", + "twapFeeds(bytes32)": "3a612c32", + "updateDataFeeds(bytes[])": "d58a8f6d", + "upgradeToAndCall(address,bytes)": "4f1ef286", + "validTimePeriodSeconds()": "cb718a9b", + "version()": "54fd4d50", + "withdraw_funds(uint256)": "5d2c53a7" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DataNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DataStale\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientFee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDataFeedType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidHyperlaneCheckpointRoot\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidUpdateData\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidUpdateDataSource\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidVersion\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"publishTime\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"strikePrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"impliedVolatility\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeToExpiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isCall\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"underlyingPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"optionPrice\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"delta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"gamma\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"vega\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"theta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"rho\",\"type\":\"int256\"}],\"indexed\":false,\"internalType\":\"struct Options\",\"name\":\"options\",\"type\":\"tuple\"}],\"name\":\"OptionsUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"publishTime\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"markPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fundingRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"openInterest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"volume\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct Perp\",\"name\":\"perp\",\"type\":\"tuple\"}],\"name\":\"PerpUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"publishTime\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"volatility\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"highPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lowPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfDataPoints\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct RealizedVolatility\",\"name\":\"realizedVolatility\",\"type\":\"tuple\"}],\"name\":\"RealizedVolatilityUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"publishTime\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"volume\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct SpotMedian\",\"name\":\"spotMedian\",\"type\":\"tuple\"}],\"name\":\"SpotMedianUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"publishTime\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"twapPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalVolume\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfDataPoints\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct TWAP\",\"name\":\"twap\",\"type\":\"tuple\"}],\"name\":\"TWAPUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"_isValidDataSource\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"name\":\"dataFeedExists\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"age\",\"type\":\"uint256\"}],\"name\":\"getOptionsNoOlderThan\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"strikePrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"impliedVolatility\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeToExpiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isCall\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"underlyingPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"optionPrice\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"delta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"gamma\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"vega\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"theta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"rho\",\"type\":\"int256\"}],\"internalType\":\"struct Options\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"age\",\"type\":\"uint256\"}],\"name\":\"getPerpNoOlderThan\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"markPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fundingRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"openInterest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"volume\",\"type\":\"uint256\"}],\"internalType\":\"struct Perp\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"age\",\"type\":\"uint256\"}],\"name\":\"getRealizedVolatilityNoOlderThan\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"volatility\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"highPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lowPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfDataPoints\",\"type\":\"uint256\"}],\"internalType\":\"struct RealizedVolatility\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"age\",\"type\":\"uint256\"}],\"name\":\"getSpotMedianNoOlderThan\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"volume\",\"type\":\"uint256\"}],\"internalType\":\"struct SpotMedian\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"age\",\"type\":\"uint256\"}],\"name\":\"getTwapNoOlderThan\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"twapPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalVolume\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfDataPoints\",\"type\":\"uint256\"}],\"internalType\":\"struct TWAP\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"updateData\",\"type\":\"bytes[]\"}],\"name\":\"getUpdateFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getValidTimePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hyperlane\",\"outputs\":[{\"internalType\":\"contract IHyperlane\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_hyperlane\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initial_owner\",\"type\":\"address\"},{\"internalType\":\"uint16[]\",\"name\":\"_dataSourceEmitterChainIds\",\"type\":\"uint16[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"_dataSourceEmitterAddresses\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"_validTimePeriodSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_singleUpdateFeeInWei\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"chainId\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"emitterAddress\",\"type\":\"bytes32\"}],\"name\":\"isValidDataSource\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"optionsFeeds\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"strikePrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"impliedVolatility\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeToExpiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isCall\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"underlyingPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"optionPrice\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"delta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"gamma\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"vega\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"theta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"rho\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"perpFeeds\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"markPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fundingRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"openInterest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"volume\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"rvFeeds\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"volatility\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"highPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lowPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfDataPoints\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"singleUpdateFeeInWei\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"spotMedianFeeds\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"volume\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"twapFeeds\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"feedId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numberOfSources\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"internalType\":\"struct Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"twapPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalVolume\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfDataPoints\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"updateData\",\"type\":\"bytes[]\"}],\"name\":\"updateDataFeeds\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validTimePeriodSeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw_funds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Pragma Labs\",\"custom:contact\":\"security@pragma.build\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"OptionsUpdate(bytes32,uint64,((bytes32,uint64,uint16,uint8),uint256,uint256,uint256,bool,uint256,uint256,int256,int256,int256,int256,int256))\":{\"details\":\"Emitted when an Options feed with `feedId` has received a fresh update.\",\"params\":{\"feedId\":\"Pragma Feed ID.\",\"options\":\"New Options data.\",\"publishTime\":\"Unix timestamp of the update.\"}},\"PerpUpdate(bytes32,uint64,((bytes32,uint64,uint16,uint8),uint256,uint256,uint256,uint256))\":{\"details\":\"Emitted when a Perp feed with `feedId` has received a fresh update.\",\"params\":{\"feedId\":\"Pragma Feed ID.\",\"perp\":\"New Perp data.\",\"publishTime\":\"Unix timestamp of the update.\"}},\"RealizedVolatilityUpdate(bytes32,uint64,((bytes32,uint64,uint16,uint8),uint256,uint256,uint256,uint256,uint256,uint256,uint256))\":{\"details\":\"Emitted when a Realized Volatility feed with `feedId` has received a fresh update.\",\"params\":{\"feedId\":\"Pragma Feed ID.\",\"publishTime\":\"Unix timestamp of the update.\",\"realizedVolatility\":\"New Realized Volatility data.\"}},\"SpotMedianUpdate(bytes32,uint64,((bytes32,uint64,uint16,uint8),uint256,uint256))\":{\"details\":\"Emitted when a Spot Median feed with `feedId` has received a fresh update.\",\"params\":{\"feedId\":\"Pragma Feed ID.\",\"publishTime\":\"Unix timestamp of the update.\",\"spotMedian\":\"New Spot Median data.\"}},\"TWAPUpdate(bytes32,uint64,((bytes32,uint64,uint16,uint8),uint256,uint256,uint256,uint256,uint256,uint256))\":{\"details\":\"Emitted when a TWAP feed with `feedId` has received a fresh update.\",\"params\":{\"feedId\":\"Pragma Feed ID.\",\"publishTime\":\"Unix timestamp of the update.\",\"twap\":\"New TWAP data.\"}},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"dataFeedExists(bytes32)\":{\"params\":{\"id\":\"The data feed ID.\"},\"returns\":{\"_0\":\"True if the data feed exists, false otherwise.\"}},\"getOptionsNoOlderThan(bytes32,uint256)\":{\"params\":{\"age\":\"The maximum allowed age (in seconds) for the options data.\",\"id\":\"The unique identifier of the options data feed.\"},\"returns\":{\"data\":\"The latest valid Options data, or a revert if no valid data is available within the specified age.\"}},\"getPerpNoOlderThan(bytes32,uint256)\":{\"params\":{\"age\":\"The maximum allowed age (in seconds) for the perpetuals data.\",\"id\":\"The unique identifier of the perpetuals data feed.\"},\"returns\":{\"data\":\"The latest valid Perp data, or a revert if no valid data is available within the specified age.\"}},\"getRealizedVolatilityNoOlderThan(bytes32,uint256)\":{\"params\":{\"age\":\"The maximum allowed age (in seconds) for the volatility data.\",\"id\":\"The unique identifier of the realized volatility data feed.\"},\"returns\":{\"data\":\"The latest valid RealizedVolatility data, or a revert if no valid data is available within the specified age.\"}},\"getSpotMedianNoOlderThan(bytes32,uint256)\":{\"params\":{\"age\":\"The maximum allowed age (in seconds) for the price data.\",\"id\":\"The unique identifier of the data feed.\"},\"returns\":{\"data\":\"The latest valid SpotMedian data, or a revert if no valid data is available within the specified age.\"}},\"getTwapNoOlderThan(bytes32,uint256)\":{\"params\":{\"age\":\"The maximum allowed age (in seconds) for the TWAP data.\",\"id\":\"The unique identifier of the TWAP data feed.\"},\"returns\":{\"data\":\"The latest valid TWAP data, or a revert if no valid data is available within the specified age.\"}},\"getUpdateFee(bytes[])\":{\"params\":{\"updateData\":\"Array of price update data.\"},\"returns\":{\"feeAmount\":\"The required fee in Wei.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"updateDataFeeds(bytes[])\":{\"details\":\"Emits a `DataFeedUpdate` event for each updated data feed.Reverts if the caller has not paid the required fee.\",\"params\":{\"updateData\":\"The data.\"}},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"title\":\"Pragma\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"dataFeedExists(bytes32)\":{\"notice\":\"Checks if a data feed exists.\"},\"getOptionsNoOlderThan(bytes32,uint256)\":{\"notice\":\"Fetches the latest options data that is no older than a specified age.\"},\"getPerpNoOlderThan(bytes32,uint256)\":{\"notice\":\"Fetches the latest perpetuals data that is no older than a specified age.\"},\"getRealizedVolatilityNoOlderThan(bytes32,uint256)\":{\"notice\":\"Fetches the latest realized volatility that is no older than a specified age.\"},\"getSpotMedianNoOlderThan(bytes32,uint256)\":{\"notice\":\"Fetches the latest spot median price that is no older than a specified age.\"},\"getTwapNoOlderThan(bytes32,uint256)\":{\"notice\":\"Fetches the latest TWAP (Time-Weighted Average Price) that is no older than a specified age.\"},\"getUpdateFee(bytes[])\":{\"notice\":\"Returns the required fee to update an array of price updates.\"},\"updateDataFeeds(bytes[])\":{\"notice\":\"Updates data feeds given some update data. Before calling this function, the caller must have paid the required fee. Which can be calculated using the `getUpdateFee` function. Data feeds will only be updated if data is more recent than the current data.\"}},\"notice\":\"The Pragma contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Pragma.sol\":\"Pragma\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x490959f972df54829d0ffacb71fa025429d9b7b9ebd118f418b41e9c0041ef73\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1883bc1a16a88922abccd415d1b41caf00c38ee581ae3e5976018d9c17d2c4b7\",\"dweb:/ipfs/QmP2vzQM8RR8ce675KhuZEaUicAPRMUbPLwBsTpxByvn18\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d\",\"dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0xf5c04a8bf51755681f7db413095377dfd1a05b98b6326fb1da0e9a297057caf0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f57690465f41860906cf84e6970baaacae9d05b8311674812e6b502bb510441e\",\"dweb:/ipfs/Qme5swSUieatWond1BHyZaEztdLAPu67KcoQTeY4pH5wVd\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x5f3770f82f75d132e210b43c071d3feec1bef13c385d1d799763a366e8bda311\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3a50b7702cbd525c4a0fd3c36d1e116432b5f645f84cb25e4473dc9c88a917c5\",\"dweb:/ipfs/QmaN5QKZwgypVK3zAwdgXfsygEeauRYa4sSe4x8yKXDRtV\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x80b4189de089dc632b752b365a16c5063b58cc24da0dd38b82f2c25f56d25c84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81e2717e78844156a86733f1cada84dba906ffe03e4957de12ca219c65e9191b\",\"dweb:/ipfs/QmW8vg3AafPJRo7EC75RQJTtjiaYmfPa4U4sqmEuBXXzaP\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0x1b0625096e82d06abdcf1844172ef78ef54a5e878761f4d905fda07eaf098424\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5cd99f1a4836c07461cb3ea023ae2f6d1d01e80694b764a87623aa7252754756\",\"dweb:/ipfs/QmNPNDuiNU6TJatZcdBcrwixBoo5MSXNDq4kaXhpJLWGpB\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xfd29ed7a01e9ef109cc31542ca0f51ba3e793740570b69172ec3d8bfbb1643b4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99379e0649be8106d2708a2bde73b5cdaba4505f1001f1586b53788bf971d097\",\"dweb:/ipfs/QmV9cCnvFoVzV2cVDW4Zbs3JQ3ehxBcooQS52taVxR637S\"]},\"src/Pragma.sol\":{\"keccak256\":\"0xf89995e23351ab6fbb25f3dc95b885e81bc7b97f7bc8982684595984de420c09\",\"license\":\"Apache 2\",\"urls\":[\"bzz-raw://14b8f09887435dab43cfb0bbc09817b46b410dc6d440c6b5032e8f5601800e1f\",\"dweb:/ipfs/QmZCk31tM9SpGvah3KsGKrYh579c1pBfBpS1ujdueQURvF\"]},\"src/PragmaDecoder.sol\":{\"keccak256\":\"0x7047b7a1f5f77a34a50ab67986bb0c9e7532bcf2a8a2633dc0857ae7acbc5bf5\",\"license\":\"Apache 2\",\"urls\":[\"bzz-raw://3fbba793eec4a3bcb7bfe58768743bd3f611d483b545d5a5c575cf39fab7aacf\",\"dweb:/ipfs/Qma8444uYEFE4aHUV83D4pGaA1211MFr4pn111ynv1BUh5\"]},\"src/interfaces/IHyperlane.sol\":{\"keccak256\":\"0x6dd20bc4d6d8095d325a990f36ad17a7a8368a15d4e0d7b82f2fb9f3cbdb17c9\",\"license\":\"Apache 2\",\"urls\":[\"bzz-raw://1d962f61740af891ede951a01410df5b13c675777fb644cfaefab0a750382bbf\",\"dweb:/ipfs/QmVfFyJ8fxiyzGr729V7aG9tJFLTwSyogTArHvUPyoL5Qg\"]},\"src/interfaces/IPragma.sol\":{\"keccak256\":\"0x6bd6515f3d07ab43963f4e2bb3422ebc7a546e389756f842e54afdd4bcf401e8\",\"license\":\"Apache 2\",\"urls\":[\"bzz-raw://b9f1159fae9808862e13837d3617ae4ef1166d54a3d1d7a5050edbf5cb866b53\",\"dweb:/ipfs/QmefhvLM1jdCt3b7Jfq8qtEeVTXATMo6FWDUsTGg79RRhL\"]},\"src/interfaces/PragmaStructs.sol\":{\"keccak256\":\"0x199822095c5fd1de00f5920e5a4ed95f340322ef499cf346d5ecfadeb5f60269\",\"license\":\"Apache 2\",\"urls\":[\"bzz-raw://36e499944b2f354d4ae5627912f05fa925c398a3b4d5b6c1fec219441eae1850\",\"dweb:/ipfs/QmQa8LyFcmziQ89koJfmjaFVPpgyHcxSjbxoXP1K5GoKGs\"]},\"src/libraries/BytesLib.sol\":{\"keccak256\":\"0x44653e7d858d3ac584836abbc48c9168a92c82561c4f6f8cc233f551fd97ffdc\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://3baaa3305da8ceb5d9ca67f9fbc1c556cedc9838163d3cdda940b937f0eff58d\",\"dweb:/ipfs/QmaKgQZkrnt2tL4VAet3jF3GKwunz87GnhKLawBz1aV3Ma\"]},\"src/libraries/ConstantsLib.sol\":{\"keccak256\":\"0xa839f506eb9cdeb048839e1e98e056b0983b00ead78ec22437379fa828ae9542\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c3ddd94a7b1d1fba7f17ad49397cb0a8528e18356861debb63284edf2c2fbf48\",\"dweb:/ipfs/QmdJd9z9GN4m5mSc3Q5AuCoB7szwqEzC19MB2EkZWvTbWQ\"]},\"src/libraries/DataParser.sol\":{\"keccak256\":\"0xd7e97b4d13ba828dd35bd84cfd419286895fbe0b3dfd003d7db692476e626095\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f762e9b46295eaab78291cfe35fe5061d671bb3ddefead1088b1150bf0fad3c9\",\"dweb:/ipfs/QmYQAYeNUhE3NEryFGNLghGH4T67B4bYJ6hFTn6zcNdXQW\"]},\"src/libraries/ErrorsLib.sol\":{\"keccak256\":\"0xe2d16754bf56c44fb876454e917b9715a0c991c387d9a185f2b06697b6fadf55\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7b30985127a441f4646cfd7225a069d17c9d29b9f2b30f57950f7ac3f234053b\",\"dweb:/ipfs/QmXWK5FcbvC7CbWzAwQaz8s3kT7dYT5edyPng5TEpfAL2D\"]},\"src/libraries/EventsLib.sol\":{\"keccak256\":\"0x7b5212636969cc535216917fb8400701f0c3e6cb6bb111da51914bd8cd5a8677\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://962b195f56ab4228b5a8e8735f4e1d97414a27ecf10ed39f9cf9202efdc92b82\",\"dweb:/ipfs/QmUD4xUjgxuKJ4PihCuGQMrb36dAwabSzCRcLU4mUqf6Gk\"]},\"src/libraries/MerkleTree.sol\":{\"keccak256\":\"0x97160fed5b287dc5375228ff9823e31d257c34f0eccecf4892043c00695e4177\",\"license\":\"Apache 2\",\"urls\":[\"bzz-raw://118d0cce4053b7022e718d1556aab36bec850f0f5f7ac3a9d10dcf85dc6cbd7d\",\"dweb:/ipfs/QmRFFczwXPzJHiwJVJhEDec4SxBrvjt5BYFPsNrYMYw6Y8\"]},\"src/libraries/UnsafeBytesLib.sol\":{\"keccak256\":\"0xc88690f8bb4c5f4478d232c12d7c7e59d527929883524e088d26b1ed47da661e\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://de2ffea160aa099a49de5ab7f4c9df9f9dac945cbad131d96cf6f37f63c185c1\",\"dweb:/ipfs/QmeEobBaUksKwDvMd7Dqvf62snArQjp8ayQfss4EnR1pQF\"]},\"src/libraries/UnsafeCalldataBytesLib.sol\":{\"keccak256\":\"0x5865e707c7b2115ebc8edf2a4d5bb12f30b08ddec7ef54f044098666a202b62b\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://84d84dca1b8c4339156c51a671295f281caad9c79add1e5c4af7aaba67dc7967\",\"dweb:/ipfs/QmNVuCAr5h1Yp5CdzKS9jF2DjLahVh65hiPEyfz1mZTbvY\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { "internalType": "address", "name": "target", "type": "address" } + ], + "type": "error", + "name": "AddressEmptyCode" + }, + { "inputs": [], "type": "error", "name": "DataNotFound" }, + { "inputs": [], "type": "error", "name": "DataStale" }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "type": "error", + "name": "ERC1967InvalidImplementation" + }, + { "inputs": [], "type": "error", "name": "ERC1967NonPayable" }, + { "inputs": [], "type": "error", "name": "FailedCall" }, + { "inputs": [], "type": "error", "name": "InsufficientFee" }, + { "inputs": [], "type": "error", "name": "InvalidDataFeedType" }, + { + "inputs": [], + "type": "error", + "name": "InvalidHyperlaneCheckpointRoot" + }, + { "inputs": [], "type": "error", "name": "InvalidInitialization" }, + { "inputs": [], "type": "error", "name": "InvalidUpdateData" }, + { "inputs": [], "type": "error", "name": "InvalidUpdateDataSource" }, + { "inputs": [], "type": "error", "name": "InvalidVersion" }, + { "inputs": [], "type": "error", "name": "NotInitializing" }, + { + "inputs": [ + { "internalType": "address", "name": "owner", "type": "address" } + ], + "type": "error", + "name": "OwnableInvalidOwner" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "type": "error", + "name": "OwnableUnauthorizedAccount" + }, + { + "inputs": [], + "type": "error", + "name": "UUPSUnauthorizedCallContext" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "slot", "type": "bytes32" } + ], + "type": "error", + "name": "UUPSUnsupportedProxiableUUID" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "version", + "type": "uint64", + "indexed": false + } + ], + "type": "event", + "name": "Initialized", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "feedId", + "type": "bytes32", + "indexed": true + }, + { + "internalType": "uint64", + "name": "publishTime", + "type": "uint64", + "indexed": false + }, + { + "internalType": "struct Options", + "name": "options", + "type": "tuple", + "components": [ + { + "internalType": "struct Metadata", + "name": "metadata", + "type": "tuple", + "components": [ + { + "internalType": "bytes32", + "name": "feedId", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "uint16", + "name": "numberOfSources", + "type": "uint16" + }, + { + "internalType": "uint8", + "name": "decimals", + "type": "uint8" + } + ] + }, + { + "internalType": "uint256", + "name": "strikePrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "impliedVolatility", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeToExpiry", + "type": "uint256" + }, + { "internalType": "bool", "name": "isCall", "type": "bool" }, + { + "internalType": "uint256", + "name": "underlyingPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "optionPrice", + "type": "uint256" + }, + { "internalType": "int256", "name": "delta", "type": "int256" }, + { "internalType": "int256", "name": "gamma", "type": "int256" }, + { "internalType": "int256", "name": "vega", "type": "int256" }, + { "internalType": "int256", "name": "theta", "type": "int256" }, + { "internalType": "int256", "name": "rho", "type": "int256" } + ], + "indexed": false + } + ], + "type": "event", + "name": "OptionsUpdate", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "feedId", + "type": "bytes32", + "indexed": true + }, + { + "internalType": "uint64", + "name": "publishTime", + "type": "uint64", + "indexed": false + }, + { + "internalType": "struct Perp", + "name": "perp", + "type": "tuple", + "components": [ + { + "internalType": "struct Metadata", + "name": "metadata", + "type": "tuple", + "components": [ + { + "internalType": "bytes32", + "name": "feedId", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "uint16", + "name": "numberOfSources", + "type": "uint16" + }, + { + "internalType": "uint8", + "name": "decimals", + "type": "uint8" + } + ] + }, + { + "internalType": "uint256", + "name": "markPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fundingRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "openInterest", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "volume", + "type": "uint256" + } + ], + "indexed": false + } + ], + "type": "event", + "name": "PerpUpdate", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "feedId", + "type": "bytes32", + "indexed": true + }, + { + "internalType": "uint64", + "name": "publishTime", + "type": "uint64", + "indexed": false + }, + { + "internalType": "struct RealizedVolatility", + "name": "realizedVolatility", + "type": "tuple", + "components": [ + { + "internalType": "struct Metadata", + "name": "metadata", + "type": "tuple", + "components": [ + { + "internalType": "bytes32", + "name": "feedId", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "uint16", + "name": "numberOfSources", + "type": "uint16" + }, + { + "internalType": "uint8", + "name": "decimals", + "type": "uint8" + } + ] + }, + { + "internalType": "uint256", + "name": "volatility", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timePeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "highPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lowPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "numberOfDataPoints", + "type": "uint256" + } + ], + "indexed": false + } + ], + "type": "event", + "name": "RealizedVolatilityUpdate", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "feedId", + "type": "bytes32", + "indexed": true + }, + { + "internalType": "uint64", + "name": "publishTime", + "type": "uint64", + "indexed": false + }, + { + "internalType": "struct SpotMedian", + "name": "spotMedian", + "type": "tuple", + "components": [ + { + "internalType": "struct Metadata", + "name": "metadata", + "type": "tuple", + "components": [ + { + "internalType": "bytes32", + "name": "feedId", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "uint16", + "name": "numberOfSources", + "type": "uint16" + }, + { + "internalType": "uint8", + "name": "decimals", + "type": "uint8" + } + ] + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "volume", + "type": "uint256" + } + ], + "indexed": false + } + ], + "type": "event", + "name": "SpotMedianUpdate", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "feedId", + "type": "bytes32", + "indexed": true + }, + { + "internalType": "uint64", + "name": "publishTime", + "type": "uint64", + "indexed": false + }, + { + "internalType": "struct TWAP", + "name": "twap", + "type": "tuple", + "components": [ + { + "internalType": "struct Metadata", + "name": "metadata", + "type": "tuple", + "components": [ + { + "internalType": "bytes32", + "name": "feedId", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "uint16", + "name": "numberOfSources", + "type": "uint16" + }, + { + "internalType": "uint8", + "name": "decimals", + "type": "uint8" + } + ] + }, + { + "internalType": "uint256", + "name": "twapPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timePeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalVolume", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "numberOfDataPoints", + "type": "uint256" + } + ], + "indexed": false + } + ], + "type": "event", + "name": "TWAPUpdate", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "Upgraded", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "UPGRADE_INTERFACE_VERSION", + "outputs": [ + { "internalType": "string", "name": "", "type": "string" } + ] + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ], + "stateMutability": "view", + "type": "function", + "name": "_isValidDataSource", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "id", "type": "bytes32" } + ], + "stateMutability": "view", + "type": "function", + "name": "dataFeedExists", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "id", "type": "bytes32" }, + { "internalType": "uint256", "name": "age", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function", + "name": "getOptionsNoOlderThan", + "outputs": [ + { + "internalType": "struct Options", + "name": "data", + "type": "tuple", + "components": [ + { + "internalType": "struct Metadata", + "name": "metadata", + "type": "tuple", + "components": [ + { + "internalType": "bytes32", + "name": "feedId", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "uint16", + "name": "numberOfSources", + "type": "uint16" + }, + { + "internalType": "uint8", + "name": "decimals", + "type": "uint8" + } + ] + }, + { + "internalType": "uint256", + "name": "strikePrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "impliedVolatility", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeToExpiry", + "type": "uint256" + }, + { "internalType": "bool", "name": "isCall", "type": "bool" }, + { + "internalType": "uint256", + "name": "underlyingPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "optionPrice", + "type": "uint256" + }, + { "internalType": "int256", "name": "delta", "type": "int256" }, + { "internalType": "int256", "name": "gamma", "type": "int256" }, + { "internalType": "int256", "name": "vega", "type": "int256" }, + { "internalType": "int256", "name": "theta", "type": "int256" }, + { "internalType": "int256", "name": "rho", "type": "int256" } + ] + } + ] + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "id", "type": "bytes32" }, + { "internalType": "uint256", "name": "age", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function", + "name": "getPerpNoOlderThan", + "outputs": [ + { + "internalType": "struct Perp", + "name": "data", + "type": "tuple", + "components": [ + { + "internalType": "struct Metadata", + "name": "metadata", + "type": "tuple", + "components": [ + { + "internalType": "bytes32", + "name": "feedId", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "uint16", + "name": "numberOfSources", + "type": "uint16" + }, + { + "internalType": "uint8", + "name": "decimals", + "type": "uint8" + } + ] + }, + { + "internalType": "uint256", + "name": "markPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fundingRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "openInterest", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "volume", + "type": "uint256" + } + ] + } + ] + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "id", "type": "bytes32" }, + { "internalType": "uint256", "name": "age", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function", + "name": "getRealizedVolatilityNoOlderThan", + "outputs": [ + { + "internalType": "struct RealizedVolatility", + "name": "data", + "type": "tuple", + "components": [ + { + "internalType": "struct Metadata", + "name": "metadata", + "type": "tuple", + "components": [ + { + "internalType": "bytes32", + "name": "feedId", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "uint16", + "name": "numberOfSources", + "type": "uint16" + }, + { + "internalType": "uint8", + "name": "decimals", + "type": "uint8" + } + ] + }, + { + "internalType": "uint256", + "name": "volatility", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timePeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "highPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lowPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "numberOfDataPoints", + "type": "uint256" + } + ] + } + ] + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "id", "type": "bytes32" }, + { "internalType": "uint256", "name": "age", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function", + "name": "getSpotMedianNoOlderThan", + "outputs": [ + { + "internalType": "struct SpotMedian", + "name": "data", + "type": "tuple", + "components": [ + { + "internalType": "struct Metadata", + "name": "metadata", + "type": "tuple", + "components": [ + { + "internalType": "bytes32", + "name": "feedId", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "uint16", + "name": "numberOfSources", + "type": "uint16" + }, + { + "internalType": "uint8", + "name": "decimals", + "type": "uint8" + } + ] + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "volume", + "type": "uint256" + } + ] + } + ] + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "id", "type": "bytes32" }, + { "internalType": "uint256", "name": "age", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function", + "name": "getTwapNoOlderThan", + "outputs": [ + { + "internalType": "struct TWAP", + "name": "data", + "type": "tuple", + "components": [ + { + "internalType": "struct Metadata", + "name": "metadata", + "type": "tuple", + "components": [ + { + "internalType": "bytes32", + "name": "feedId", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "uint16", + "name": "numberOfSources", + "type": "uint16" + }, + { + "internalType": "uint8", + "name": "decimals", + "type": "uint8" + } + ] + }, + { + "internalType": "uint256", + "name": "twapPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timePeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalVolume", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "numberOfDataPoints", + "type": "uint256" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "updateData", + "type": "bytes[]" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getUpdateFee", + "outputs": [ + { + "internalType": "uint256", + "name": "feeAmount", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getValidTimePeriod", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "hyperlane", + "outputs": [ + { + "internalType": "contract IHyperlane", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_hyperlane", + "type": "address" + }, + { + "internalType": "address", + "name": "initial_owner", + "type": "address" + }, + { + "internalType": "uint16[]", + "name": "_dataSourceEmitterChainIds", + "type": "uint16[]" + }, + { + "internalType": "bytes32[]", + "name": "_dataSourceEmitterAddresses", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "_validTimePeriodSeconds", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_singleUpdateFeeInWei", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [ + { "internalType": "uint16", "name": "chainId", "type": "uint16" }, + { + "internalType": "bytes32", + "name": "emitterAddress", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isValidDataSource", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ], + "stateMutability": "view", + "type": "function", + "name": "optionsFeeds", + "outputs": [ + { + "internalType": "struct Metadata", + "name": "metadata", + "type": "tuple", + "components": [ + { + "internalType": "bytes32", + "name": "feedId", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "uint16", + "name": "numberOfSources", + "type": "uint16" + }, + { "internalType": "uint8", "name": "decimals", "type": "uint8" } + ] + }, + { + "internalType": "uint256", + "name": "strikePrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "impliedVolatility", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeToExpiry", + "type": "uint256" + }, + { "internalType": "bool", "name": "isCall", "type": "bool" }, + { + "internalType": "uint256", + "name": "underlyingPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "optionPrice", + "type": "uint256" + }, + { "internalType": "int256", "name": "delta", "type": "int256" }, + { "internalType": "int256", "name": "gamma", "type": "int256" }, + { "internalType": "int256", "name": "vega", "type": "int256" }, + { "internalType": "int256", "name": "theta", "type": "int256" }, + { "internalType": "int256", "name": "rho", "type": "int256" } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { "internalType": "address", "name": "", "type": "address" } + ] + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ], + "stateMutability": "view", + "type": "function", + "name": "perpFeeds", + "outputs": [ + { + "internalType": "struct Metadata", + "name": "metadata", + "type": "tuple", + "components": [ + { + "internalType": "bytes32", + "name": "feedId", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "uint16", + "name": "numberOfSources", + "type": "uint16" + }, + { "internalType": "uint8", "name": "decimals", "type": "uint8" } + ] + }, + { + "internalType": "uint256", + "name": "markPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fundingRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "openInterest", + "type": "uint256" + }, + { "internalType": "uint256", "name": "volume", "type": "uint256" } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "proxiableUUID", + "outputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ], + "stateMutability": "view", + "type": "function", + "name": "rvFeeds", + "outputs": [ + { + "internalType": "struct Metadata", + "name": "metadata", + "type": "tuple", + "components": [ + { + "internalType": "bytes32", + "name": "feedId", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "uint16", + "name": "numberOfSources", + "type": "uint16" + }, + { "internalType": "uint8", "name": "decimals", "type": "uint8" } + ] + }, + { + "internalType": "uint256", + "name": "volatility", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timePeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "highPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lowPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "numberOfDataPoints", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "singleUpdateFeeInWei", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ] + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ], + "stateMutability": "view", + "type": "function", + "name": "spotMedianFeeds", + "outputs": [ + { + "internalType": "struct Metadata", + "name": "metadata", + "type": "tuple", + "components": [ + { + "internalType": "bytes32", + "name": "feedId", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "uint16", + "name": "numberOfSources", + "type": "uint16" + }, + { "internalType": "uint8", "name": "decimals", "type": "uint8" } + ] + }, + { "internalType": "uint256", "name": "price", "type": "uint256" }, + { "internalType": "uint256", "name": "volume", "type": "uint256" } + ] + }, + { + "inputs": [ + { "internalType": "address", "name": "newOwner", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ], + "stateMutability": "view", + "type": "function", + "name": "twapFeeds", + "outputs": [ + { + "internalType": "struct Metadata", + "name": "metadata", + "type": "tuple", + "components": [ + { + "internalType": "bytes32", + "name": "feedId", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "uint16", + "name": "numberOfSources", + "type": "uint16" + }, + { "internalType": "uint8", "name": "decimals", "type": "uint8" } + ] + }, + { + "internalType": "uint256", + "name": "twapPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timePeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalVolume", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "numberOfDataPoints", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "updateData", + "type": "bytes[]" + } + ], + "stateMutability": "payable", + "type": "function", + "name": "updateDataFeeds" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "payable", + "type": "function", + "name": "upgradeToAndCall" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "validTimePeriodSeconds", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "version", + "outputs": [ + { "internalType": "string", "name": "", "type": "string" } + ] + }, + { + "inputs": [ + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "withdraw_funds" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "dataFeedExists(bytes32)": { + "params": { "id": "The data feed ID." }, + "returns": { + "_0": "True if the data feed exists, false otherwise." + } + }, + "getOptionsNoOlderThan(bytes32,uint256)": { + "params": { + "age": "The maximum allowed age (in seconds) for the options data.", + "id": "The unique identifier of the options data feed." + }, + "returns": { + "data": "The latest valid Options data, or a revert if no valid data is available within the specified age." + } + }, + "getPerpNoOlderThan(bytes32,uint256)": { + "params": { + "age": "The maximum allowed age (in seconds) for the perpetuals data.", + "id": "The unique identifier of the perpetuals data feed." + }, + "returns": { + "data": "The latest valid Perp data, or a revert if no valid data is available within the specified age." + } + }, + "getRealizedVolatilityNoOlderThan(bytes32,uint256)": { + "params": { + "age": "The maximum allowed age (in seconds) for the volatility data.", + "id": "The unique identifier of the realized volatility data feed." + }, + "returns": { + "data": "The latest valid RealizedVolatility data, or a revert if no valid data is available within the specified age." + } + }, + "getSpotMedianNoOlderThan(bytes32,uint256)": { + "params": { + "age": "The maximum allowed age (in seconds) for the price data.", + "id": "The unique identifier of the data feed." + }, + "returns": { + "data": "The latest valid SpotMedian data, or a revert if no valid data is available within the specified age." + } + }, + "getTwapNoOlderThan(bytes32,uint256)": { + "params": { + "age": "The maximum allowed age (in seconds) for the TWAP data.", + "id": "The unique identifier of the TWAP data feed." + }, + "returns": { + "data": "The latest valid TWAP data, or a revert if no valid data is available within the specified age." + } + }, + "getUpdateFee(bytes[])": { + "params": { "updateData": "Array of price update data." }, + "returns": { "feeAmount": "The required fee in Wei." } + }, + "owner()": { "details": "Returns the address of the current owner." }, + "proxiableUUID()": { + "details": "Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "updateDataFeeds(bytes[])": { + "details": "Emits a `DataFeedUpdate` event for each updated data feed.Reverts if the caller has not paid the required fee.", + "params": { "updateData": "The data." } + }, + "upgradeToAndCall(address,bytes)": { + "custom:oz-upgrades-unsafe-allow-reachable": "delegatecall", + "details": "Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "dataFeedExists(bytes32)": { + "notice": "Checks if a data feed exists." + }, + "getOptionsNoOlderThan(bytes32,uint256)": { + "notice": "Fetches the latest options data that is no older than a specified age." + }, + "getPerpNoOlderThan(bytes32,uint256)": { + "notice": "Fetches the latest perpetuals data that is no older than a specified age." + }, + "getRealizedVolatilityNoOlderThan(bytes32,uint256)": { + "notice": "Fetches the latest realized volatility that is no older than a specified age." + }, + "getSpotMedianNoOlderThan(bytes32,uint256)": { + "notice": "Fetches the latest spot median price that is no older than a specified age." + }, + "getTwapNoOlderThan(bytes32,uint256)": { + "notice": "Fetches the latest TWAP (Time-Weighted Average Price) that is no older than a specified age." + }, + "getUpdateFee(bytes[])": { + "notice": "Returns the required fee to update an array of price updates." + }, + "updateDataFeeds(bytes[])": { + "notice": "Updates data feeds given some update data. Before calling this function, the caller must have paid the required fee. Which can be calculated using the `getUpdateFee` function. Data feeds will only be updated if data is more recent than the current data." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", + "@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/", + "ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/", + "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/", + "forge-std/=lib/forge-std/src/", + "halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/", + "openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/", + "solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/Pragma.sol": "Pragma" }, + "evmVersion": "cancun", + "libraries": {}, + "viaIR": true + }, + "sources": { + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a", + "urls": [ + "bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6", + "dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b", + "urls": [ + "bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609", + "dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol": { + "keccak256": "0x490959f972df54829d0ffacb71fa025429d9b7b9ebd118f418b41e9c0041ef73", + "urls": [ + "bzz-raw://1883bc1a16a88922abccd415d1b41caf00c38ee581ae3e5976018d9c17d2c4b7", + "dweb:/ipfs/QmP2vzQM8RR8ce675KhuZEaUicAPRMUbPLwBsTpxByvn18" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397", + "urls": [ + "bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9", + "dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol": { + "keccak256": "0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486", + "urls": [ + "bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d", + "dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0xf5c04a8bf51755681f7db413095377dfd1a05b98b6326fb1da0e9a297057caf0", + "urls": [ + "bzz-raw://f57690465f41860906cf84e6970baaacae9d05b8311674812e6b502bb510441e", + "dweb:/ipfs/Qme5swSUieatWond1BHyZaEztdLAPu67KcoQTeY4pH5wVd" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol": { + "keccak256": "0x5f3770f82f75d132e210b43c071d3feec1bef13c385d1d799763a366e8bda311", + "urls": [ + "bzz-raw://3a50b7702cbd525c4a0fd3c36d1e116432b5f645f84cb25e4473dc9c88a917c5", + "dweb:/ipfs/QmaN5QKZwgypVK3zAwdgXfsygEeauRYa4sSe4x8yKXDRtV" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c", + "urls": [ + "bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa", + "dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0x80b4189de089dc632b752b365a16c5063b58cc24da0dd38b82f2c25f56d25c84", + "urls": [ + "bzz-raw://81e2717e78844156a86733f1cada84dba906ffe03e4957de12ca219c65e9191b", + "dweb:/ipfs/QmW8vg3AafPJRo7EC75RQJTtjiaYmfPa4U4sqmEuBXXzaP" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol": { + "keccak256": "0x1b0625096e82d06abdcf1844172ef78ef54a5e878761f4d905fda07eaf098424", + "urls": [ + "bzz-raw://5cd99f1a4836c07461cb3ea023ae2f6d1d01e80694b764a87623aa7252754756", + "dweb:/ipfs/QmNPNDuiNU6TJatZcdBcrwixBoo5MSXNDq4kaXhpJLWGpB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xfd29ed7a01e9ef109cc31542ca0f51ba3e793740570b69172ec3d8bfbb1643b4", + "urls": [ + "bzz-raw://99379e0649be8106d2708a2bde73b5cdaba4505f1001f1586b53788bf971d097", + "dweb:/ipfs/QmV9cCnvFoVzV2cVDW4Zbs3JQ3ehxBcooQS52taVxR637S" + ], + "license": "MIT" + }, + "src/Pragma.sol": { + "keccak256": "0xf89995e23351ab6fbb25f3dc95b885e81bc7b97f7bc8982684595984de420c09", + "urls": [ + "bzz-raw://14b8f09887435dab43cfb0bbc09817b46b410dc6d440c6b5032e8f5601800e1f", + "dweb:/ipfs/QmZCk31tM9SpGvah3KsGKrYh579c1pBfBpS1ujdueQURvF" + ], + "license": "Apache 2" + }, + "src/PragmaDecoder.sol": { + "keccak256": "0x7047b7a1f5f77a34a50ab67986bb0c9e7532bcf2a8a2633dc0857ae7acbc5bf5", + "urls": [ + "bzz-raw://3fbba793eec4a3bcb7bfe58768743bd3f611d483b545d5a5c575cf39fab7aacf", + "dweb:/ipfs/Qma8444uYEFE4aHUV83D4pGaA1211MFr4pn111ynv1BUh5" + ], + "license": "Apache 2" + }, + "src/interfaces/IHyperlane.sol": { + "keccak256": "0x6dd20bc4d6d8095d325a990f36ad17a7a8368a15d4e0d7b82f2fb9f3cbdb17c9", + "urls": [ + "bzz-raw://1d962f61740af891ede951a01410df5b13c675777fb644cfaefab0a750382bbf", + "dweb:/ipfs/QmVfFyJ8fxiyzGr729V7aG9tJFLTwSyogTArHvUPyoL5Qg" + ], + "license": "Apache 2" + }, + "src/interfaces/IPragma.sol": { + "keccak256": "0x6bd6515f3d07ab43963f4e2bb3422ebc7a546e389756f842e54afdd4bcf401e8", + "urls": [ + "bzz-raw://b9f1159fae9808862e13837d3617ae4ef1166d54a3d1d7a5050edbf5cb866b53", + "dweb:/ipfs/QmefhvLM1jdCt3b7Jfq8qtEeVTXATMo6FWDUsTGg79RRhL" + ], + "license": "Apache 2" + }, + "src/interfaces/PragmaStructs.sol": { + "keccak256": "0x199822095c5fd1de00f5920e5a4ed95f340322ef499cf346d5ecfadeb5f60269", + "urls": [ + "bzz-raw://36e499944b2f354d4ae5627912f05fa925c398a3b4d5b6c1fec219441eae1850", + "dweb:/ipfs/QmQa8LyFcmziQ89koJfmjaFVPpgyHcxSjbxoXP1K5GoKGs" + ], + "license": "Apache 2" + }, + "src/libraries/BytesLib.sol": { + "keccak256": "0x44653e7d858d3ac584836abbc48c9168a92c82561c4f6f8cc233f551fd97ffdc", + "urls": [ + "bzz-raw://3baaa3305da8ceb5d9ca67f9fbc1c556cedc9838163d3cdda940b937f0eff58d", + "dweb:/ipfs/QmaKgQZkrnt2tL4VAet3jF3GKwunz87GnhKLawBz1aV3Ma" + ], + "license": "Unlicense" + }, + "src/libraries/ConstantsLib.sol": { + "keccak256": "0xa839f506eb9cdeb048839e1e98e056b0983b00ead78ec22437379fa828ae9542", + "urls": [ + "bzz-raw://c3ddd94a7b1d1fba7f17ad49397cb0a8528e18356861debb63284edf2c2fbf48", + "dweb:/ipfs/QmdJd9z9GN4m5mSc3Q5AuCoB7szwqEzC19MB2EkZWvTbWQ" + ], + "license": "GPL-2.0-or-later" + }, + "src/libraries/DataParser.sol": { + "keccak256": "0xd7e97b4d13ba828dd35bd84cfd419286895fbe0b3dfd003d7db692476e626095", + "urls": [ + "bzz-raw://f762e9b46295eaab78291cfe35fe5061d671bb3ddefead1088b1150bf0fad3c9", + "dweb:/ipfs/QmYQAYeNUhE3NEryFGNLghGH4T67B4bYJ6hFTn6zcNdXQW" + ], + "license": "MIT" + }, + "src/libraries/ErrorsLib.sol": { + "keccak256": "0xe2d16754bf56c44fb876454e917b9715a0c991c387d9a185f2b06697b6fadf55", + "urls": [ + "bzz-raw://7b30985127a441f4646cfd7225a069d17c9d29b9f2b30f57950f7ac3f234053b", + "dweb:/ipfs/QmXWK5FcbvC7CbWzAwQaz8s3kT7dYT5edyPng5TEpfAL2D" + ], + "license": "GPL-2.0-or-later" + }, + "src/libraries/EventsLib.sol": { + "keccak256": "0x7b5212636969cc535216917fb8400701f0c3e6cb6bb111da51914bd8cd5a8677", + "urls": [ + "bzz-raw://962b195f56ab4228b5a8e8735f4e1d97414a27ecf10ed39f9cf9202efdc92b82", + "dweb:/ipfs/QmUD4xUjgxuKJ4PihCuGQMrb36dAwabSzCRcLU4mUqf6Gk" + ], + "license": "GPL-2.0-or-later" + }, + "src/libraries/MerkleTree.sol": { + "keccak256": "0x97160fed5b287dc5375228ff9823e31d257c34f0eccecf4892043c00695e4177", + "urls": [ + "bzz-raw://118d0cce4053b7022e718d1556aab36bec850f0f5f7ac3a9d10dcf85dc6cbd7d", + "dweb:/ipfs/QmRFFczwXPzJHiwJVJhEDec4SxBrvjt5BYFPsNrYMYw6Y8" + ], + "license": "Apache 2" + }, + "src/libraries/UnsafeBytesLib.sol": { + "keccak256": "0xc88690f8bb4c5f4478d232c12d7c7e59d527929883524e088d26b1ed47da661e", + "urls": [ + "bzz-raw://de2ffea160aa099a49de5ab7f4c9df9f9dac945cbad131d96cf6f37f63c185c1", + "dweb:/ipfs/QmeEobBaUksKwDvMd7Dqvf62snArQjp8ayQfss4EnR1pQF" + ], + "license": "Unlicense" + }, + "src/libraries/UnsafeCalldataBytesLib.sol": { + "keccak256": "0x5865e707c7b2115ebc8edf2a4d5bb12f30b08ddec7ef54f044098666a202b62b", + "urls": [ + "bzz-raw://84d84dca1b8c4339156c51a671295f281caad9c79add1e5c4af7aaba67dc7967", + "dweb:/ipfs/QmNVuCAr5h1Yp5CdzKS9jF2DjLahVh65hiPEyfz1mZTbvY" + ], + "license": "Unlicense" + } + }, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 49874, + "contract": "src/Pragma.sol:Pragma", + "label": "hyperlane", + "offset": 0, + "slot": "0", + "type": "t_contract(IHyperlane)50691" + }, + { + "astId": 49878, + "contract": "src/Pragma.sol:Pragma", + "label": "_isValidDataSource", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_bytes32,t_bool)" + }, + { + "astId": 49883, + "contract": "src/Pragma.sol:Pragma", + "label": "spotMedianFeeds", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_bytes32,t_struct(SpotMedian)50838_storage)" + }, + { + "astId": 49888, + "contract": "src/Pragma.sol:Pragma", + "label": "twapFeeds", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_bytes32,t_struct(TWAP)50854_storage)" + }, + { + "astId": 49893, + "contract": "src/Pragma.sol:Pragma", + "label": "rvFeeds", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_bytes32,t_struct(RealizedVolatility)50872_storage)" + }, + { + "astId": 49898, + "contract": "src/Pragma.sol:Pragma", + "label": "optionsFeeds", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_bytes32,t_struct(Options)50898_storage)" + }, + { + "astId": 49903, + "contract": "src/Pragma.sol:Pragma", + "label": "perpFeeds", + "offset": 0, + "slot": "6", + "type": "t_mapping(t_bytes32,t_struct(Perp)50910_storage)" + }, + { + "astId": 49277, + "contract": "src/Pragma.sol:Pragma", + "label": "validTimePeriodSeconds", + "offset": 0, + "slot": "7", + "type": "t_uint256" + }, + { + "astId": 49279, + "contract": "src/Pragma.sol:Pragma", + "label": "singleUpdateFeeInWei", + "offset": 0, + "slot": "8", + "type": "t_uint256" + } + ], + "types": { + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IHyperlane)50691": { + "encoding": "inplace", + "label": "contract IHyperlane", + "numberOfBytes": "20" + }, + "t_int256": { + "encoding": "inplace", + "label": "int256", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_bool)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_bytes32,t_struct(Options)50898_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct Options)", + "numberOfBytes": "32", + "value": "t_struct(Options)50898_storage" + }, + "t_mapping(t_bytes32,t_struct(Perp)50910_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct Perp)", + "numberOfBytes": "32", + "value": "t_struct(Perp)50910_storage" + }, + "t_mapping(t_bytes32,t_struct(RealizedVolatility)50872_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct RealizedVolatility)", + "numberOfBytes": "32", + "value": "t_struct(RealizedVolatility)50872_storage" + }, + "t_mapping(t_bytes32,t_struct(SpotMedian)50838_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct SpotMedian)", + "numberOfBytes": "32", + "value": "t_struct(SpotMedian)50838_storage" + }, + "t_mapping(t_bytes32,t_struct(TWAP)50854_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct TWAP)", + "numberOfBytes": "32", + "value": "t_struct(TWAP)50854_storage" + }, + "t_struct(Metadata)50830_storage": { + "encoding": "inplace", + "label": "struct Metadata", + "numberOfBytes": "64", + "members": [ + { + "astId": 50823, + "contract": "src/Pragma.sol:Pragma", + "label": "feedId", + "offset": 0, + "slot": "0", + "type": "t_bytes32" + }, + { + "astId": 50825, + "contract": "src/Pragma.sol:Pragma", + "label": "timestamp", + "offset": 0, + "slot": "1", + "type": "t_uint64" + }, + { + "astId": 50827, + "contract": "src/Pragma.sol:Pragma", + "label": "numberOfSources", + "offset": 8, + "slot": "1", + "type": "t_uint16" + }, + { + "astId": 50829, + "contract": "src/Pragma.sol:Pragma", + "label": "decimals", + "offset": 10, + "slot": "1", + "type": "t_uint8" + } + ] + }, + "t_struct(Options)50898_storage": { + "encoding": "inplace", + "label": "struct Options", + "numberOfBytes": "416", + "members": [ + { + "astId": 50875, + "contract": "src/Pragma.sol:Pragma", + "label": "metadata", + "offset": 0, + "slot": "0", + "type": "t_struct(Metadata)50830_storage" + }, + { + "astId": 50877, + "contract": "src/Pragma.sol:Pragma", + "label": "strikePrice", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 50879, + "contract": "src/Pragma.sol:Pragma", + "label": "impliedVolatility", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 50881, + "contract": "src/Pragma.sol:Pragma", + "label": "timeToExpiry", + "offset": 0, + "slot": "4", + "type": "t_uint256" + }, + { + "astId": 50883, + "contract": "src/Pragma.sol:Pragma", + "label": "isCall", + "offset": 0, + "slot": "5", + "type": "t_bool" + }, + { + "astId": 50885, + "contract": "src/Pragma.sol:Pragma", + "label": "underlyingPrice", + "offset": 0, + "slot": "6", + "type": "t_uint256" + }, + { + "astId": 50887, + "contract": "src/Pragma.sol:Pragma", + "label": "optionPrice", + "offset": 0, + "slot": "7", + "type": "t_uint256" + }, + { + "astId": 50889, + "contract": "src/Pragma.sol:Pragma", + "label": "delta", + "offset": 0, + "slot": "8", + "type": "t_int256" + }, + { + "astId": 50891, + "contract": "src/Pragma.sol:Pragma", + "label": "gamma", + "offset": 0, + "slot": "9", + "type": "t_int256" + }, + { + "astId": 50893, + "contract": "src/Pragma.sol:Pragma", + "label": "vega", + "offset": 0, + "slot": "10", + "type": "t_int256" + }, + { + "astId": 50895, + "contract": "src/Pragma.sol:Pragma", + "label": "theta", + "offset": 0, + "slot": "11", + "type": "t_int256" + }, + { + "astId": 50897, + "contract": "src/Pragma.sol:Pragma", + "label": "rho", + "offset": 0, + "slot": "12", + "type": "t_int256" + } + ] + }, + "t_struct(Perp)50910_storage": { + "encoding": "inplace", + "label": "struct Perp", + "numberOfBytes": "192", + "members": [ + { + "astId": 50901, + "contract": "src/Pragma.sol:Pragma", + "label": "metadata", + "offset": 0, + "slot": "0", + "type": "t_struct(Metadata)50830_storage" + }, + { + "astId": 50903, + "contract": "src/Pragma.sol:Pragma", + "label": "markPrice", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 50905, + "contract": "src/Pragma.sol:Pragma", + "label": "fundingRate", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 50907, + "contract": "src/Pragma.sol:Pragma", + "label": "openInterest", + "offset": 0, + "slot": "4", + "type": "t_uint256" + }, + { + "astId": 50909, + "contract": "src/Pragma.sol:Pragma", + "label": "volume", + "offset": 0, + "slot": "5", + "type": "t_uint256" + } + ] + }, + "t_struct(RealizedVolatility)50872_storage": { + "encoding": "inplace", + "label": "struct RealizedVolatility", + "numberOfBytes": "288", + "members": [ + { + "astId": 50857, + "contract": "src/Pragma.sol:Pragma", + "label": "metadata", + "offset": 0, + "slot": "0", + "type": "t_struct(Metadata)50830_storage" + }, + { + "astId": 50859, + "contract": "src/Pragma.sol:Pragma", + "label": "volatility", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 50861, + "contract": "src/Pragma.sol:Pragma", + "label": "timePeriod", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 50863, + "contract": "src/Pragma.sol:Pragma", + "label": "startPrice", + "offset": 0, + "slot": "4", + "type": "t_uint256" + }, + { + "astId": 50865, + "contract": "src/Pragma.sol:Pragma", + "label": "endPrice", + "offset": 0, + "slot": "5", + "type": "t_uint256" + }, + { + "astId": 50867, + "contract": "src/Pragma.sol:Pragma", + "label": "highPrice", + "offset": 0, + "slot": "6", + "type": "t_uint256" + }, + { + "astId": 50869, + "contract": "src/Pragma.sol:Pragma", + "label": "lowPrice", + "offset": 0, + "slot": "7", + "type": "t_uint256" + }, + { + "astId": 50871, + "contract": "src/Pragma.sol:Pragma", + "label": "numberOfDataPoints", + "offset": 0, + "slot": "8", + "type": "t_uint256" + } + ] + }, + "t_struct(SpotMedian)50838_storage": { + "encoding": "inplace", + "label": "struct SpotMedian", + "numberOfBytes": "128", + "members": [ + { + "astId": 50833, + "contract": "src/Pragma.sol:Pragma", + "label": "metadata", + "offset": 0, + "slot": "0", + "type": "t_struct(Metadata)50830_storage" + }, + { + "astId": 50835, + "contract": "src/Pragma.sol:Pragma", + "label": "price", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 50837, + "contract": "src/Pragma.sol:Pragma", + "label": "volume", + "offset": 0, + "slot": "3", + "type": "t_uint256" + } + ] + }, + "t_struct(TWAP)50854_storage": { + "encoding": "inplace", + "label": "struct TWAP", + "numberOfBytes": "256", + "members": [ + { + "astId": 50841, + "contract": "src/Pragma.sol:Pragma", + "label": "metadata", + "offset": 0, + "slot": "0", + "type": "t_struct(Metadata)50830_storage" + }, + { + "astId": 50843, + "contract": "src/Pragma.sol:Pragma", + "label": "twapPrice", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 50845, + "contract": "src/Pragma.sol:Pragma", + "label": "timePeriod", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 50847, + "contract": "src/Pragma.sol:Pragma", + "label": "startPrice", + "offset": 0, + "slot": "4", + "type": "t_uint256" + }, + { + "astId": 50849, + "contract": "src/Pragma.sol:Pragma", + "label": "endPrice", + "offset": 0, + "slot": "5", + "type": "t_uint256" + }, + { + "astId": 50851, + "contract": "src/Pragma.sol:Pragma", + "label": "totalVolume", + "offset": 0, + "slot": "6", + "type": "t_uint256" + }, + { + "astId": 50853, + "contract": "src/Pragma.sol:Pragma", + "label": "numberOfDataPoints", + "offset": 0, + "slot": "7", + "type": "t_uint256" + } + ] + }, + "t_uint16": { + "encoding": "inplace", + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + }, + "ast": { + "absolutePath": "src/Pragma.sol", + "id": 49850, + "exportedSymbols": { + "BytesLib": [51421], + "ConstantsLib": [51433], + "ContextUpgradeable": [47450], + "DataFeed": [50786], + "DataFeedType": [50788], + "DataParser": [52216], + "DataSource": [50793], + "ERC1967Utils": [47961], + "ErrorsLib": [52236], + "EventsLib": [52302], + "FeedType": [50935], + "HyMsg": [50821], + "IERC1822Proxiable": [47629], + "IHyperlane": [50691], + "IPragma": [50775], + "Initializable": [47222], + "MerkleTree": [52712], + "Metadata": [50830], + "Options": [50898], + "OwnableUpgradeable": [46968], + "ParsedData": [50929], + "Perp": [50910], + "Pragma": [49849], + "PragmaDecoder": [50660], + "RealizedVolatility": [50872], + "Signature": [50802], + "SpotMedian": [50838], + "StructsInitializers": [51062], + "TWAP": [50854], + "UUPSUpgradeable": [47404], + "UnsafeBytesLib": [52936], + "UnsafeCalldataBytesLib": [53118] + }, + "nodeType": "SourceUnit", + "src": "38:5922:41", + "nodes": [ + { + "id": 49253, + "nodeType": "PragmaDirective", + "src": "38:23:41", + "nodes": [], + "literals": ["solidity", "^", "0.8", ".0"] + }, + { + "id": 49256, + "nodeType": "ImportDirective", + "src": "63:59:41", + "nodes": [], + "absolutePath": "src/interfaces/IPragma.sol", + "file": "./interfaces/IPragma.sol", + "nameLocation": "-1:-1:-1", + "scope": 49850, + "sourceUnit": 50776, + "symbolAliases": [ + { + "foreign": { + "id": 49254, + "name": "IPragma", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 50775, + "src": "71:7:41", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 49255, + "name": "DataFeed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 50786, + "src": "80:8:41", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 49257, + "nodeType": "ImportDirective", + "src": "123:75:41", + "nodes": [], + "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", + "file": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", + "nameLocation": "-1:-1:-1", + "scope": 49850, + "sourceUnit": 47223, + "symbolAliases": [], + "unitAlias": "" + }, + { + "id": 49258, + "nodeType": "ImportDirective", + "src": "199:77:41", + "nodes": [], + "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol", + "nameLocation": "-1:-1:-1", + "scope": 49850, + "sourceUnit": 47405, + "symbolAliases": [], + "unitAlias": "" + }, + { + "id": 49259, + "nodeType": "ImportDirective", + "src": "277:75:41", + "nodes": [], + "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol", + "nameLocation": "-1:-1:-1", + "scope": 49850, + "sourceUnit": 46969, + "symbolAliases": [], + "unitAlias": "" + }, + { + "id": 49260, + "nodeType": "ImportDirective", + "src": "353:29:41", + "nodes": [], + "absolutePath": "src/PragmaDecoder.sol", + "file": "./PragmaDecoder.sol", + "nameLocation": "-1:-1:-1", + "scope": 49850, + "sourceUnit": 50661, + "symbolAliases": [], + "unitAlias": "" + }, + { + "id": 49261, + "nodeType": "ImportDirective", + "src": "383:35:41", + "nodes": [], + "absolutePath": "src/libraries/EventsLib.sol", + "file": "./libraries/EventsLib.sol", + "nameLocation": "-1:-1:-1", + "scope": 49850, + "sourceUnit": 52303, + "symbolAliases": [], + "unitAlias": "" + }, + { + "id": 49262, + "nodeType": "ImportDirective", + "src": "419:35:41", + "nodes": [], + "absolutePath": "src/libraries/ErrorsLib.sol", + "file": "./libraries/ErrorsLib.sol", + "nameLocation": "-1:-1:-1", + "scope": 49850, + "sourceUnit": 52237, + "symbolAliases": [], + "unitAlias": "" + }, + { + "id": 49263, + "nodeType": "ImportDirective", + "src": "455:40:41", + "nodes": [], + "absolutePath": "src/interfaces/PragmaStructs.sol", + "file": "./interfaces/PragmaStructs.sol", + "nameLocation": "-1:-1:-1", + "scope": 49850, + "sourceUnit": 51063, + "symbolAliases": [], + "unitAlias": "" + }, + { + "id": 49264, + "nodeType": "ImportDirective", + "src": "496:36:41", + "nodes": [], + "absolutePath": "src/libraries/DataParser.sol", + "file": "./libraries/DataParser.sol", + "nameLocation": "-1:-1:-1", + "scope": 49850, + "sourceUnit": 52217, + "symbolAliases": [], + "unitAlias": "" + }, + { + "id": 49849, + "nodeType": "ContractDefinition", + "src": "651:5308:41", + "nodes": [ + { + "id": 49277, + "nodeType": "VariableDeclaration", + "src": "769:37:41", + "nodes": [], + "constant": false, + "functionSelector": "cb718a9b", + "mutability": "mutable", + "name": "validTimePeriodSeconds", + "nameLocation": "784:22:41", + "scope": 49849, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 49276, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "769:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "public" + }, + { + "id": 49279, + "nodeType": "VariableDeclaration", + "src": "812:35:41", + "nodes": [], + "constant": false, + "functionSelector": "48b6404d", + "mutability": "mutable", + "name": "singleUpdateFeeInWei", + "nameLocation": "827:20:41", + "scope": 49849, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 49278, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "812:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "public" + }, + { + "id": 49286, + "nodeType": "FunctionDefinition", + "src": "854:53:41", + "nodes": [], + "body": { + "id": 49285, + "nodeType": "Block", + "src": "868:39:41", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 49282, + "name": "_disableInitializers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 47190, + "src": "878:20:41", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 49283, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "878:22:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 49284, + "nodeType": "ExpressionStatement", + "src": "878:22:41" + } + ] + }, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nameLocation": "-1:-1:-1", + "parameters": { + "id": 49280, + "nodeType": "ParameterList", + "parameters": [], + "src": "865:2:41" + }, + "returnParameters": { + "id": 49281, + "nodeType": "ParameterList", + "parameters": [], + "src": "868:0:41" + }, + "scope": 49849, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "id": 49356, + "nodeType": "FunctionDefinition", + "src": "913:772:41", + "nodes": [], + "body": { + "id": 49355, + "nodeType": "Block", + "src": "1203:482:41", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 49306, + "name": "initial_owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49290, + "src": "1228:13:41", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 49305, + "name": "__Ownable_init", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 46828, + "src": "1213:14:41", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 49307, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1213:29:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 49308, + "nodeType": "ExpressionStatement", + "src": "1213:29:41" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 49309, + "name": "__UUPSUpgradeable_init", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 47276, + "src": "1252:22:41", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 49310, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1252:24:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 49311, + "nodeType": "ExpressionStatement", + "src": "1252:24:41" + }, + { + "expression": { + "id": 49316, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 49312, + "name": "hyperlane", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49874, + "src": "1286:9:41", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHyperlane_$50691", + "typeString": "contract IHyperlane" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 49314, + "name": "_hyperlane", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49288, + "src": "1309:10:41", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 49313, + "name": "IHyperlane", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 50691, + "src": "1298:10:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IHyperlane_$50691_$", + "typeString": "type(contract IHyperlane)" + } + }, + "id": 49315, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1298:22:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHyperlane_$50691", + "typeString": "contract IHyperlane" + } + }, + "src": "1286:34:41", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHyperlane_$50691", + "typeString": "contract IHyperlane" + } + }, + "id": 49317, + "nodeType": "ExpressionStatement", + "src": "1286:34:41" + }, + { + "body": { + "id": 49345, + "nodeType": "Block", + "src": "1395:172:41", + "statements": [ + { + "expression": { + "id": 49343, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 49329, + "name": "_isValidDataSource", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49878, + "src": "1409:18:41", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", + "typeString": "mapping(bytes32 => bool)" + } + }, + "id": 49341, + "indexExpression": { + "arguments": [ + { + "arguments": [ + { + "baseExpression": { + "id": 49333, + "name": "_dataSourceEmitterChainIds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49293, + "src": "1472:26:41", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr", + "typeString": "uint16[] memory" + } + }, + "id": 49335, + "indexExpression": { + "id": 49334, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49319, + "src": "1499:1:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1472:29:41", + "typeDescriptions": { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + }, + { + "baseExpression": { + "id": 49336, + "name": "_dataSourceEmitterAddresses", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49296, + "src": "1503:27:41", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr", + "typeString": "bytes32[] memory" + } + }, + "id": 49338, + "indexExpression": { + "id": 49337, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49319, + "src": "1531:1:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1503:30:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 49331, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "1455:3:41", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 49332, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "1459:12:41", + "memberName": "encodePacked", + "nodeType": "MemberAccess", + "src": "1455:16:41", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 49339, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1455:79:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 49330, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "1428:9:41", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 49340, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1428:120:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1409:140:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "74727565", + "id": 49342, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1552:4:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1409:147:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 49344, + "nodeType": "ExpressionStatement", + "src": "1409:147:41" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 49325, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 49322, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49319, + "src": "1351:1:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 49323, + "name": "_dataSourceEmitterChainIds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49293, + "src": "1355:26:41", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr", + "typeString": "uint16[] memory" + } + }, + "id": 49324, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1382:6:41", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "1355:33:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1351:37:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 49346, + "initializationExpression": { + "assignments": [49319], + "declarations": [ + { + "constant": false, + "id": 49319, + "mutability": "mutable", + "name": "i", + "nameLocation": "1344:1:41", + "nodeType": "VariableDeclaration", + "scope": 49346, + "src": "1336:9:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 49318, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1336:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 49321, + "initialValue": { + "hexValue": "30", + "id": 49320, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1348:1:41", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "1336:13:41" + }, + "isSimpleCounterLoop": true, + "loopExpression": { + "expression": { + "id": 49327, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "1390:3:41", + "subExpression": { + "id": 49326, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49319, + "src": "1390:1:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 49328, + "nodeType": "ExpressionStatement", + "src": "1390:3:41" + }, + "nodeType": "ForStatement", + "src": "1331:236:41" + }, + { + "expression": { + "id": 49349, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 49347, + "name": "validTimePeriodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49277, + "src": "1576:22:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 49348, + "name": "_validTimePeriodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49298, + "src": "1601:23:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1576:48:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 49350, + "nodeType": "ExpressionStatement", + "src": "1576:48:41" + }, + { + "expression": { + "id": 49353, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 49351, + "name": "singleUpdateFeeInWei", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49279, + "src": "1634:20:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 49352, + "name": "_singleUpdateFeeInWei", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49300, + "src": "1657:21:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1634:44:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 49354, + "nodeType": "ExpressionStatement", + "src": "1634:44:41" + } + ] + }, + "functionSelector": "d5d89eaf", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 49303, + "kind": "modifierInvocation", + "modifierName": { + "id": 49302, + "name": "initializer", + "nameLocations": ["1191:11:41"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 47076, + "src": "1191:11:41" + }, + "nodeType": "ModifierInvocation", + "src": "1191:11:41" + } + ], + "name": "initialize", + "nameLocation": "922:10:41", + "parameters": { + "id": 49301, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 49288, + "mutability": "mutable", + "name": "_hyperlane", + "nameLocation": "950:10:41", + "nodeType": "VariableDeclaration", + "scope": 49356, + "src": "942:18:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 49287, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "942:7:41", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 49290, + "mutability": "mutable", + "name": "initial_owner", + "nameLocation": "978:13:41", + "nodeType": "VariableDeclaration", + "scope": 49356, + "src": "970:21:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 49289, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "970:7:41", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 49293, + "mutability": "mutable", + "name": "_dataSourceEmitterChainIds", + "nameLocation": "1017:26:41", + "nodeType": "VariableDeclaration", + "scope": 49356, + "src": "1001:42:41", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint16_$dyn_memory_ptr", + "typeString": "uint16[]" + }, + "typeName": { + "baseType": { + "id": 49291, + "name": "uint16", + "nodeType": "ElementaryTypeName", + "src": "1001:6:41", + "typeDescriptions": { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + }, + "id": 49292, + "nodeType": "ArrayTypeName", + "src": "1001:8:41", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr", + "typeString": "uint16[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 49296, + "mutability": "mutable", + "name": "_dataSourceEmitterAddresses", + "nameLocation": "1070:27:41", + "nodeType": "VariableDeclaration", + "scope": 49356, + "src": "1053:44:41", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr", + "typeString": "bytes32[]" + }, + "typeName": { + "baseType": { + "id": 49294, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1053:7:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 49295, + "nodeType": "ArrayTypeName", + "src": "1053:9:41", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr", + "typeString": "bytes32[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 49298, + "mutability": "mutable", + "name": "_validTimePeriodSeconds", + "nameLocation": "1115:23:41", + "nodeType": "VariableDeclaration", + "scope": 49356, + "src": "1107:31:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 49297, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1107:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 49300, + "mutability": "mutable", + "name": "_singleUpdateFeeInWei", + "nameLocation": "1156:21:41", + "nodeType": "VariableDeclaration", + "scope": 49356, + "src": "1148:29:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 49299, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1148:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "932:251:41" + }, + "returnParameters": { + "id": 49304, + "nodeType": "ParameterList", + "parameters": [], + "src": "1203:0:41" + }, + "scope": 49849, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "id": 49365, + "nodeType": "FunctionDefinition", + "src": "1691:84:41", + "nodes": [], + "body": { + "id": 49364, + "nodeType": "Block", + "src": "1773:2:41", + "nodes": [], + "statements": [] + }, + "baseFunctions": [47358], + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 49362, + "kind": "modifierInvocation", + "modifierName": { + "id": 49361, + "name": "onlyOwner", + "nameLocations": ["1763:9:41"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 46863, + "src": "1763:9:41" + }, + "nodeType": "ModifierInvocation", + "src": "1763:9:41" + } + ], + "name": "_authorizeUpgrade", + "nameLocation": "1700:17:41", + "overrides": { + "id": 49360, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1754:8:41" + }, + "parameters": { + "id": 49359, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 49358, + "mutability": "mutable", + "name": "newImplementation", + "nameLocation": "1726:17:41", + "nodeType": "VariableDeclaration", + "scope": 49365, + "src": "1718:25:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 49357, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1718:7:41", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1717:27:41" + }, + "returnParameters": { + "id": 49363, + "nodeType": "ParameterList", + "parameters": [], + "src": "1773:0:41" + }, + "scope": 49849, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "id": 49420, + "nodeType": "FunctionDefinition", + "src": "1809:494:41", + "nodes": [], + "body": { + "id": 49419, + "nodeType": "Block", + "src": "1880:423:41", + "nodes": [], + "statements": [ + { + "assignments": [49373], + "declarations": [ + { + "constant": false, + "id": 49373, + "mutability": "mutable", + "name": "totalNumUpdates", + "nameLocation": "1898:15:41", + "nodeType": "VariableDeclaration", + "scope": 49419, + "src": "1890:23:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 49372, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1890:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 49375, + "initialValue": { + "hexValue": "30", + "id": 49374, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1916:1:41", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "1890:27:41" + }, + { + "assignments": [49377], + "declarations": [ + { + "constant": false, + "id": 49377, + "mutability": "mutable", + "name": "len", + "nameLocation": "1935:3:41", + "nodeType": "VariableDeclaration", + "scope": 49419, + "src": "1927:11:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 49376, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1927:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 49380, + "initialValue": { + "expression": { + "id": 49378, + "name": "updateData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49369, + "src": "1941:10:41", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "typeString": "bytes calldata[] calldata" + } + }, + "id": 49379, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1952:6:41", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "1941:17:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1927:31:41" + }, + { + "body": { + "id": 49400, + "nodeType": "Block", + "src": "1998:142:41", + "statements": [ + { + "expression": { + "id": 49394, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 49388, + "name": "totalNumUpdates", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49373, + "src": "2012:15:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "arguments": [ + { + "baseExpression": { + "id": 49390, + "name": "updateData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49369, + "src": "2056:10:41", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "typeString": "bytes calldata[] calldata" + } + }, + "id": 49392, + "indexExpression": { + "id": 49391, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49382, + "src": "2067:1:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2056:13:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + ], + "id": 49389, + "name": "updateDataInfoFromUpdate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 50482, + "src": "2031:24:41", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_calldata_ptr_$returns$_t_uint8_$", + "typeString": "function (bytes calldata) returns (uint8)" + } + }, + "id": 49393, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2031:39:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "src": "2012:58:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 49395, + "nodeType": "ExpressionStatement", + "src": "2012:58:41" + }, + { + "id": 49399, + "nodeType": "UncheckedBlock", + "src": "2084:46:41", + "statements": [ + { + "expression": { + "id": 49397, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "2112:3:41", + "subExpression": { + "id": 49396, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49382, + "src": "2112:1:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 49398, + "nodeType": "ExpressionStatement", + "src": "2112:3:41" + } + ] + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 49387, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 49385, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49382, + "src": "1988:1:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 49386, + "name": "len", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49377, + "src": "1992:3:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1988:7:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 49401, + "initializationExpression": { + "assignments": [49382], + "declarations": [ + { + "constant": false, + "id": 49382, + "mutability": "mutable", + "name": "i", + "nameLocation": "1981:1:41", + "nodeType": "VariableDeclaration", + "scope": 49401, + "src": "1973:9:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 49381, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1973:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 49384, + "initialValue": { + "hexValue": "30", + "id": 49383, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1985:1:41", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "1973:13:41" + }, + "isSimpleCounterLoop": false, + "nodeType": "ForStatement", + "src": "1968:172:41" + }, + { + "assignments": [49403], + "declarations": [ + { + "constant": false, + "id": 49403, + "mutability": "mutable", + "name": "requiredFee", + "nameLocation": "2157:11:41", + "nodeType": "VariableDeclaration", + "scope": 49419, + "src": "2149:19:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 49402, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2149:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 49407, + "initialValue": { + "arguments": [ + { + "id": 49405, + "name": "totalNumUpdates", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49373, + "src": "2183:15:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 49404, + "name": "getTotalFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49444, + "src": "2171:11:41", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) view returns (uint256)" + } + }, + "id": 49406, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2171:28:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2149:50:41" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 49411, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 49408, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "2213:3:41", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 49409, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2217:5:41", + "memberName": "value", + "nodeType": "MemberAccess", + "src": "2213:9:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 49410, + "name": "requiredFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49403, + "src": "2225:11:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2213:23:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 49418, + "nodeType": "IfStatement", + "src": "2209:88:41", + "trueBody": { + "id": 49417, + "nodeType": "Block", + "src": "2238:59:41", + "statements": [ + { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 49412, + "name": "ErrorsLib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 52236, + "src": "2259:9:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ErrorsLib_$52236_$", + "typeString": "type(library ErrorsLib)" + } + }, + "id": 49414, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2269:15:41", + "memberName": "InsufficientFee", + "nodeType": "MemberAccess", + "referencedDeclaration": 52221, + "src": "2259:25:41", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 49415, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2259:27:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 49416, + "nodeType": "RevertStatement", + "src": "2252:34:41" + } + ] + } + } + ] + }, + "baseFunctions": [50702], + "documentation": { + "id": 49366, + "nodeType": "StructuredDocumentation", + "src": "1781:23:41", + "text": "@inheritdoc IPragma" + }, + "functionSelector": "d58a8f6d", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "updateDataFeeds", + "nameLocation": "1818:15:41", + "parameters": { + "id": 49370, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 49369, + "mutability": "mutable", + "name": "updateData", + "nameLocation": "1851:10:41", + "nodeType": "VariableDeclaration", + "scope": 49420, + "src": "1834:27:41", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "typeString": "bytes[]" + }, + "typeName": { + "baseType": { + "id": 49367, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1834:5:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "id": 49368, + "nodeType": "ArrayTypeName", + "src": "1834:7:41", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr", + "typeString": "bytes[]" + } + }, + "visibility": "internal" + } + ], + "src": "1833:29:41" + }, + "returnParameters": { + "id": 49371, + "nodeType": "ParameterList", + "parameters": [], + "src": "1880:0:41" + }, + "scope": 49849, + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + { + "id": 49432, + "nodeType": "FunctionDefinition", + "src": "2337:118:41", + "nodes": [], + "body": { + "id": 49431, + "nodeType": "Block", + "src": "2430:25:41", + "nodes": [], + "statements": [ + { + "expression": { + "hexValue": "30", + "id": 49429, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2447:1:41", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 49428, + "id": 49430, + "nodeType": "Return", + "src": "2440:8:41" + } + ] + }, + "baseFunctions": [50711], + "documentation": { + "id": 49421, + "nodeType": "StructuredDocumentation", + "src": "2309:23:41", + "text": "@inheritdoc IPragma" + }, + "functionSelector": "d47eed45", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getUpdateFee", + "nameLocation": "2346:12:41", + "parameters": { + "id": 49425, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 49424, + "mutability": "mutable", + "name": "updateData", + "nameLocation": "2376:10:41", + "nodeType": "VariableDeclaration", + "scope": 49432, + "src": "2359:27:41", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "typeString": "bytes[]" + }, + "typeName": { + "baseType": { + "id": 49422, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2359:5:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "id": 49423, + "nodeType": "ArrayTypeName", + "src": "2359:7:41", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr", + "typeString": "bytes[]" + } + }, + "visibility": "internal" + } + ], + "src": "2358:29:41" + }, + "returnParameters": { + "id": 49428, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 49427, + "mutability": "mutable", + "name": "feeAmount", + "nameLocation": "2419:9:41", + "nodeType": "VariableDeclaration", + "scope": 49432, + "src": "2411:17:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 49426, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2411:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2410:19:41" + }, + "scope": 49849, + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "id": 49444, + "nodeType": "FunctionDefinition", + "src": "2461:151:41", + "nodes": [], + "body": { + "id": 49443, + "nodeType": "Block", + "src": "2550:62:41", + "nodes": [], + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 49441, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 49439, + "name": "totalNumUpdates", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49434, + "src": "2567:15:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 49440, + "name": "singleUpdateFeeInWei", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49279, + "src": "2585:20:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2567:38:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 49438, + "id": 49442, + "nodeType": "Return", + "src": "2560:45:41" + } + ] + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getTotalFee", + "nameLocation": "2470:11:41", + "parameters": { + "id": 49435, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 49434, + "mutability": "mutable", + "name": "totalNumUpdates", + "nameLocation": "2490:15:41", + "nodeType": "VariableDeclaration", + "scope": 49444, + "src": "2482:23:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 49433, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2482:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2481:25:41" + }, + "returnParameters": { + "id": 49438, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 49437, + "mutability": "mutable", + "name": "requiredFee", + "nameLocation": "2537:11:41", + "nodeType": "VariableDeclaration", + "scope": 49444, + "src": "2529:19:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 49436, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2529:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2528:21:41" + }, + "scope": 49849, + "stateMutability": "view", + "virtual": false, + "visibility": "private" + }, + { + "id": 49491, + "nodeType": "FunctionDefinition", + "src": "2618:389:41", + "nodes": [], + "body": { + "id": 49490, + "nodeType": "Block", + "src": "2724:283:41", + "nodes": [], + "statements": [ + { + "expression": { + "id": 49458, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 49454, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49452, + "src": "2734:4:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SpotMedian_$50838_memory_ptr", + "typeString": "struct SpotMedian memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 49455, + "name": "spotMedianFeeds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49883, + "src": "2741:15:41", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_SpotMedian_$50838_storage_$", + "typeString": "mapping(bytes32 => struct SpotMedian storage ref)" + } + }, + "id": 49457, + "indexExpression": { + "id": 49456, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49446, + "src": "2757:2:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2741:19:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SpotMedian_$50838_storage", + "typeString": "struct SpotMedian storage ref" + } + }, + "src": "2734:26:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SpotMedian_$50838_memory_ptr", + "typeString": "struct SpotMedian memory" + } + }, + "id": 49459, + "nodeType": "ExpressionStatement", + "src": "2734:26:41" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "id": 49464, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "id": 49460, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49452, + "src": "2774:4:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SpotMedian_$50838_memory_ptr", + "typeString": "struct SpotMedian memory" + } + }, + "id": 49461, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2779:8:41", + "memberName": "metadata", + "nodeType": "MemberAccess", + "referencedDeclaration": 50833, + "src": "2774:13:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Metadata_$50830_memory_ptr", + "typeString": "struct Metadata memory" + } + }, + "id": 49462, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2788:9:41", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": 50825, + "src": "2774:23:41", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 49463, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2801:1:41", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2774:28:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 49471, + "nodeType": "IfStatement", + "src": "2770:90:41", + "trueBody": { + "id": 49470, + "nodeType": "Block", + "src": "2804:56:41", + "statements": [ + { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 49465, + "name": "ErrorsLib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 52236, + "src": "2825:9:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ErrorsLib_$52236_$", + "typeString": "type(library ErrorsLib)" + } + }, + "id": 49467, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2835:12:41", + "memberName": "DataNotFound", + "nodeType": "MemberAccess", + "referencedDeclaration": 52233, + "src": "2825:22:41", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 49468, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2825:24:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 49469, + "nodeType": "RevertStatement", + "src": "2818:31:41" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 49480, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "expression": { + "id": 49473, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "2878:5:41", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 49474, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2884:9:41", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "2878:15:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "expression": { + "id": 49475, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49452, + "src": "2895:4:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SpotMedian_$50838_memory_ptr", + "typeString": "struct SpotMedian memory" + } + }, + "id": 49476, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2900:8:41", + "memberName": "metadata", + "nodeType": "MemberAccess", + "referencedDeclaration": 50833, + "src": "2895:13:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Metadata_$50830_memory_ptr", + "typeString": "struct Metadata memory" + } + }, + "id": 49477, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2909:9:41", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": 50825, + "src": "2895:23:41", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 49472, + "name": "diff", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49848, + "src": "2873:4:41", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 49478, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2873:46:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 49479, + "name": "age", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49448, + "src": "2922:3:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2873:52:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 49487, + "nodeType": "IfStatement", + "src": "2869:111:41", + "trueBody": { + "id": 49486, + "nodeType": "Block", + "src": "2927:53:41", + "statements": [ + { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 49481, + "name": "ErrorsLib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 52236, + "src": "2948:9:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ErrorsLib_$52236_$", + "typeString": "type(library ErrorsLib)" + } + }, + "id": 49483, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2958:9:41", + "memberName": "DataStale", + "nodeType": "MemberAccess", + "referencedDeclaration": 52235, + "src": "2948:19:41", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 49484, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2948:21:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 49485, + "nodeType": "RevertStatement", + "src": "2941:28:41" + } + ] + } + }, + { + "expression": { + "id": 49488, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49452, + "src": "2996:4:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SpotMedian_$50838_memory_ptr", + "typeString": "struct SpotMedian memory" + } + }, + "functionReturnParameters": 49453, + "id": 49489, + "nodeType": "Return", + "src": "2989:11:41" + } + ] + }, + "baseFunctions": [50722], + "functionSelector": "32bb41d3", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getSpotMedianNoOlderThan", + "nameLocation": "2627:24:41", + "parameters": { + "id": 49449, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 49446, + "mutability": "mutable", + "name": "id", + "nameLocation": "2660:2:41", + "nodeType": "VariableDeclaration", + "scope": 49491, + "src": "2652:10:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 49445, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2652:7:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 49448, + "mutability": "mutable", + "name": "age", + "nameLocation": "2672:3:41", + "nodeType": "VariableDeclaration", + "scope": 49491, + "src": "2664:11:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 49447, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2664:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2651:25:41" + }, + "returnParameters": { + "id": 49453, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 49452, + "mutability": "mutable", + "name": "data", + "nameLocation": "2718:4:41", + "nodeType": "VariableDeclaration", + "scope": 49491, + "src": "2700:22:41", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SpotMedian_$50838_memory_ptr", + "typeString": "struct SpotMedian" + }, + "typeName": { + "id": 49451, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 49450, + "name": "SpotMedian", + "nameLocations": ["2700:10:41"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 50838, + "src": "2700:10:41" + }, + "referencedDeclaration": 50838, + "src": "2700:10:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SpotMedian_$50838_storage_ptr", + "typeString": "struct SpotMedian" + } + }, + "visibility": "internal" + } + ], + "src": "2699:24:41" + }, + "scope": 49849, + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "id": 49536, + "nodeType": "FunctionDefinition", + "src": "3013:350:41", + "nodes": [], + "body": { + "id": 49535, + "nodeType": "Block", + "src": "3107:256:41", + "nodes": [], + "statements": [ + { + "expression": { + "id": 49505, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 49501, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49499, + "src": "3117:4:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TWAP_$50854_memory_ptr", + "typeString": "struct TWAP memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 49502, + "name": "twapFeeds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49888, + "src": "3124:9:41", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_TWAP_$50854_storage_$", + "typeString": "mapping(bytes32 => struct TWAP storage ref)" + } + }, + "id": 49504, + "indexExpression": { + "id": 49503, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49493, + "src": "3134:2:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3124:13:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TWAP_$50854_storage", + "typeString": "struct TWAP storage ref" + } + }, + "src": "3117:20:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TWAP_$50854_memory_ptr", + "typeString": "struct TWAP memory" + } + }, + "id": 49506, + "nodeType": "ExpressionStatement", + "src": "3117:20:41" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "id": 49511, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "id": 49507, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49499, + "src": "3151:4:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TWAP_$50854_memory_ptr", + "typeString": "struct TWAP memory" + } + }, + "id": 49508, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3156:8:41", + "memberName": "metadata", + "nodeType": "MemberAccess", + "referencedDeclaration": 50841, + "src": "3151:13:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Metadata_$50830_memory_ptr", + "typeString": "struct Metadata memory" + } + }, + "id": 49509, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3165:9:41", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": 50825, + "src": "3151:23:41", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 49510, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3178:1:41", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "3151:28:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 49518, + "nodeType": "IfStatement", + "src": "3147:90:41", + "trueBody": { + "id": 49517, + "nodeType": "Block", + "src": "3181:56:41", + "statements": [ + { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 49512, + "name": "ErrorsLib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 52236, + "src": "3202:9:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ErrorsLib_$52236_$", + "typeString": "type(library ErrorsLib)" + } + }, + "id": 49514, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3212:12:41", + "memberName": "DataNotFound", + "nodeType": "MemberAccess", + "referencedDeclaration": 52233, + "src": "3202:22:41", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 49515, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3202:24:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 49516, + "nodeType": "RevertStatement", + "src": "3195:31:41" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 49527, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "expression": { + "id": 49520, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "3255:5:41", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 49521, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3261:9:41", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "3255:15:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "expression": { + "id": 49522, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49499, + "src": "3272:4:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TWAP_$50854_memory_ptr", + "typeString": "struct TWAP memory" + } + }, + "id": 49523, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3277:8:41", + "memberName": "metadata", + "nodeType": "MemberAccess", + "referencedDeclaration": 50841, + "src": "3272:13:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Metadata_$50830_memory_ptr", + "typeString": "struct Metadata memory" + } + }, + "id": 49524, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3286:9:41", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": 50825, + "src": "3272:23:41", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 49519, + "name": "diff", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49848, + "src": "3250:4:41", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 49525, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3250:46:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 49526, + "name": "age", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49495, + "src": "3299:3:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3250:52:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 49534, + "nodeType": "IfStatement", + "src": "3246:111:41", + "trueBody": { + "id": 49533, + "nodeType": "Block", + "src": "3304:53:41", + "statements": [ + { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 49528, + "name": "ErrorsLib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 52236, + "src": "3325:9:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ErrorsLib_$52236_$", + "typeString": "type(library ErrorsLib)" + } + }, + "id": 49530, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3335:9:41", + "memberName": "DataStale", + "nodeType": "MemberAccess", + "referencedDeclaration": 52235, + "src": "3325:19:41", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 49531, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3325:21:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 49532, + "nodeType": "RevertStatement", + "src": "3318:28:41" + } + ] + } + } + ] + }, + "baseFunctions": [50733], + "functionSelector": "49c398a4", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getTwapNoOlderThan", + "nameLocation": "3022:18:41", + "parameters": { + "id": 49496, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 49493, + "mutability": "mutable", + "name": "id", + "nameLocation": "3049:2:41", + "nodeType": "VariableDeclaration", + "scope": 49536, + "src": "3041:10:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 49492, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3041:7:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 49495, + "mutability": "mutable", + "name": "age", + "nameLocation": "3061:3:41", + "nodeType": "VariableDeclaration", + "scope": 49536, + "src": "3053:11:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 49494, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3053:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3040:25:41" + }, + "returnParameters": { + "id": 49500, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 49499, + "mutability": "mutable", + "name": "data", + "nameLocation": "3101:4:41", + "nodeType": "VariableDeclaration", + "scope": 49536, + "src": "3089:16:41", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TWAP_$50854_memory_ptr", + "typeString": "struct TWAP" + }, + "typeName": { + "id": 49498, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 49497, + "name": "TWAP", + "nameLocations": ["3089:4:41"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 50854, + "src": "3089:4:41" + }, + "referencedDeclaration": 50854, + "src": "3089:4:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TWAP_$50854_storage_ptr", + "typeString": "struct TWAP" + } + }, + "visibility": "internal" + } + ], + "src": "3088:18:41" + }, + "scope": 49849, + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "id": 49581, + "nodeType": "FunctionDefinition", + "src": "3369:404:41", + "nodes": [], + "body": { + "id": 49580, + "nodeType": "Block", + "src": "3519:254:41", + "nodes": [], + "statements": [ + { + "expression": { + "id": 49550, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 49546, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49544, + "src": "3529:4:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RealizedVolatility_$50872_memory_ptr", + "typeString": "struct RealizedVolatility memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 49547, + "name": "rvFeeds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49893, + "src": "3536:7:41", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RealizedVolatility_$50872_storage_$", + "typeString": "mapping(bytes32 => struct RealizedVolatility storage ref)" + } + }, + "id": 49549, + "indexExpression": { + "id": 49548, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49538, + "src": "3544:2:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3536:11:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RealizedVolatility_$50872_storage", + "typeString": "struct RealizedVolatility storage ref" + } + }, + "src": "3529:18:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RealizedVolatility_$50872_memory_ptr", + "typeString": "struct RealizedVolatility memory" + } + }, + "id": 49551, + "nodeType": "ExpressionStatement", + "src": "3529:18:41" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "id": 49556, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "id": 49552, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49544, + "src": "3561:4:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RealizedVolatility_$50872_memory_ptr", + "typeString": "struct RealizedVolatility memory" + } + }, + "id": 49553, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3566:8:41", + "memberName": "metadata", + "nodeType": "MemberAccess", + "referencedDeclaration": 50857, + "src": "3561:13:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Metadata_$50830_memory_ptr", + "typeString": "struct Metadata memory" + } + }, + "id": 49554, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3575:9:41", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": 50825, + "src": "3561:23:41", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 49555, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3588:1:41", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "3561:28:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 49563, + "nodeType": "IfStatement", + "src": "3557:90:41", + "trueBody": { + "id": 49562, + "nodeType": "Block", + "src": "3591:56:41", + "statements": [ + { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 49557, + "name": "ErrorsLib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 52236, + "src": "3612:9:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ErrorsLib_$52236_$", + "typeString": "type(library ErrorsLib)" + } + }, + "id": 49559, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3622:12:41", + "memberName": "DataNotFound", + "nodeType": "MemberAccess", + "referencedDeclaration": 52233, + "src": "3612:22:41", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 49560, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3612:24:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 49561, + "nodeType": "RevertStatement", + "src": "3605:31:41" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 49572, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "expression": { + "id": 49565, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "3665:5:41", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 49566, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3671:9:41", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "3665:15:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "expression": { + "id": 49567, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49544, + "src": "3682:4:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RealizedVolatility_$50872_memory_ptr", + "typeString": "struct RealizedVolatility memory" + } + }, + "id": 49568, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3687:8:41", + "memberName": "metadata", + "nodeType": "MemberAccess", + "referencedDeclaration": 50857, + "src": "3682:13:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Metadata_$50830_memory_ptr", + "typeString": "struct Metadata memory" + } + }, + "id": 49569, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3696:9:41", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": 50825, + "src": "3682:23:41", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 49564, + "name": "diff", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49848, + "src": "3660:4:41", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 49570, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3660:46:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 49571, + "name": "age", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49540, + "src": "3709:3:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3660:52:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 49579, + "nodeType": "IfStatement", + "src": "3656:111:41", + "trueBody": { + "id": 49578, + "nodeType": "Block", + "src": "3714:53:41", + "statements": [ + { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 49573, + "name": "ErrorsLib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 52236, + "src": "3735:9:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ErrorsLib_$52236_$", + "typeString": "type(library ErrorsLib)" + } + }, + "id": 49575, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3745:9:41", + "memberName": "DataStale", + "nodeType": "MemberAccess", + "referencedDeclaration": 52235, + "src": "3735:19:41", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 49576, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3735:21:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 49577, + "nodeType": "RevertStatement", + "src": "3728:28:41" + } + ] + } + } + ] + }, + "baseFunctions": [50744], + "functionSelector": "bdf6afa4", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getRealizedVolatilityNoOlderThan", + "nameLocation": "3378:32:41", + "parameters": { + "id": 49541, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 49538, + "mutability": "mutable", + "name": "id", + "nameLocation": "3419:2:41", + "nodeType": "VariableDeclaration", + "scope": 49581, + "src": "3411:10:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 49537, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3411:7:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 49540, + "mutability": "mutable", + "name": "age", + "nameLocation": "3431:3:41", + "nodeType": "VariableDeclaration", + "scope": 49581, + "src": "3423:11:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 49539, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3423:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3410:25:41" + }, + "returnParameters": { + "id": 49545, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 49544, + "mutability": "mutable", + "name": "data", + "nameLocation": "3509:4:41", + "nodeType": "VariableDeclaration", + "scope": 49581, + "src": "3483:30:41", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RealizedVolatility_$50872_memory_ptr", + "typeString": "struct RealizedVolatility" + }, + "typeName": { + "id": 49543, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 49542, + "name": "RealizedVolatility", + "nameLocations": ["3483:18:41"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 50872, + "src": "3483:18:41" + }, + "referencedDeclaration": 50872, + "src": "3483:18:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RealizedVolatility_$50872_storage_ptr", + "typeString": "struct RealizedVolatility" + } + }, + "visibility": "internal" + } + ], + "src": "3482:32:41" + }, + "scope": 49849, + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "id": 49626, + "nodeType": "FunctionDefinition", + "src": "3779:359:41", + "nodes": [], + "body": { + "id": 49625, + "nodeType": "Block", + "src": "3879:259:41", + "nodes": [], + "statements": [ + { + "expression": { + "id": 49595, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 49591, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49589, + "src": "3889:4:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Options_$50898_memory_ptr", + "typeString": "struct Options memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 49592, + "name": "optionsFeeds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49898, + "src": "3896:12:41", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Options_$50898_storage_$", + "typeString": "mapping(bytes32 => struct Options storage ref)" + } + }, + "id": 49594, + "indexExpression": { + "id": 49593, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49583, + "src": "3909:2:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3896:16:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Options_$50898_storage", + "typeString": "struct Options storage ref" + } + }, + "src": "3889:23:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Options_$50898_memory_ptr", + "typeString": "struct Options memory" + } + }, + "id": 49596, + "nodeType": "ExpressionStatement", + "src": "3889:23:41" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "id": 49601, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "id": 49597, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49589, + "src": "3926:4:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Options_$50898_memory_ptr", + "typeString": "struct Options memory" + } + }, + "id": 49598, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3931:8:41", + "memberName": "metadata", + "nodeType": "MemberAccess", + "referencedDeclaration": 50875, + "src": "3926:13:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Metadata_$50830_memory_ptr", + "typeString": "struct Metadata memory" + } + }, + "id": 49599, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3940:9:41", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": 50825, + "src": "3926:23:41", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 49600, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3953:1:41", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "3926:28:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 49608, + "nodeType": "IfStatement", + "src": "3922:90:41", + "trueBody": { + "id": 49607, + "nodeType": "Block", + "src": "3956:56:41", + "statements": [ + { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 49602, + "name": "ErrorsLib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 52236, + "src": "3977:9:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ErrorsLib_$52236_$", + "typeString": "type(library ErrorsLib)" + } + }, + "id": 49604, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3987:12:41", + "memberName": "DataNotFound", + "nodeType": "MemberAccess", + "referencedDeclaration": 52233, + "src": "3977:22:41", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 49605, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3977:24:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 49606, + "nodeType": "RevertStatement", + "src": "3970:31:41" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 49617, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "expression": { + "id": 49610, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "4030:5:41", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 49611, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4036:9:41", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "4030:15:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "expression": { + "id": 49612, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49589, + "src": "4047:4:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Options_$50898_memory_ptr", + "typeString": "struct Options memory" + } + }, + "id": 49613, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4052:8:41", + "memberName": "metadata", + "nodeType": "MemberAccess", + "referencedDeclaration": 50875, + "src": "4047:13:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Metadata_$50830_memory_ptr", + "typeString": "struct Metadata memory" + } + }, + "id": 49614, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4061:9:41", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": 50825, + "src": "4047:23:41", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 49609, + "name": "diff", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49848, + "src": "4025:4:41", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 49615, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4025:46:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 49616, + "name": "age", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49585, + "src": "4074:3:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4025:52:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 49624, + "nodeType": "IfStatement", + "src": "4021:111:41", + "trueBody": { + "id": 49623, + "nodeType": "Block", + "src": "4079:53:41", + "statements": [ + { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 49618, + "name": "ErrorsLib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 52236, + "src": "4100:9:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ErrorsLib_$52236_$", + "typeString": "type(library ErrorsLib)" + } + }, + "id": 49620, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4110:9:41", + "memberName": "DataStale", + "nodeType": "MemberAccess", + "referencedDeclaration": 52235, + "src": "4100:19:41", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 49621, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4100:21:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 49622, + "nodeType": "RevertStatement", + "src": "4093:28:41" + } + ] + } + } + ] + }, + "baseFunctions": [50755], + "functionSelector": "e29ea30f", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getOptionsNoOlderThan", + "nameLocation": "3788:21:41", + "parameters": { + "id": 49586, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 49583, + "mutability": "mutable", + "name": "id", + "nameLocation": "3818:2:41", + "nodeType": "VariableDeclaration", + "scope": 49626, + "src": "3810:10:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 49582, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3810:7:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 49585, + "mutability": "mutable", + "name": "age", + "nameLocation": "3830:3:41", + "nodeType": "VariableDeclaration", + "scope": 49626, + "src": "3822:11:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 49584, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3822:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3809:25:41" + }, + "returnParameters": { + "id": 49590, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 49589, + "mutability": "mutable", + "name": "data", + "nameLocation": "3873:4:41", + "nodeType": "VariableDeclaration", + "scope": 49626, + "src": "3858:19:41", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Options_$50898_memory_ptr", + "typeString": "struct Options" + }, + "typeName": { + "id": 49588, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 49587, + "name": "Options", + "nameLocations": ["3858:7:41"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 50898, + "src": "3858:7:41" + }, + "referencedDeclaration": 50898, + "src": "3858:7:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Options_$50898_storage_ptr", + "typeString": "struct Options" + } + }, + "visibility": "internal" + } + ], + "src": "3857:21:41" + }, + "scope": 49849, + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "id": 49671, + "nodeType": "FunctionDefinition", + "src": "4144:350:41", + "nodes": [], + "body": { + "id": 49670, + "nodeType": "Block", + "src": "4238:256:41", + "nodes": [], + "statements": [ + { + "expression": { + "id": 49640, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 49636, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49634, + "src": "4248:4:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Perp_$50910_memory_ptr", + "typeString": "struct Perp memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 49637, + "name": "perpFeeds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49903, + "src": "4255:9:41", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Perp_$50910_storage_$", + "typeString": "mapping(bytes32 => struct Perp storage ref)" + } + }, + "id": 49639, + "indexExpression": { + "id": 49638, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49628, + "src": "4265:2:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4255:13:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Perp_$50910_storage", + "typeString": "struct Perp storage ref" + } + }, + "src": "4248:20:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Perp_$50910_memory_ptr", + "typeString": "struct Perp memory" + } + }, + "id": 49641, + "nodeType": "ExpressionStatement", + "src": "4248:20:41" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "id": 49646, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "id": 49642, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49634, + "src": "4282:4:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Perp_$50910_memory_ptr", + "typeString": "struct Perp memory" + } + }, + "id": 49643, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4287:8:41", + "memberName": "metadata", + "nodeType": "MemberAccess", + "referencedDeclaration": 50901, + "src": "4282:13:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Metadata_$50830_memory_ptr", + "typeString": "struct Metadata memory" + } + }, + "id": 49644, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4296:9:41", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": 50825, + "src": "4282:23:41", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 49645, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4309:1:41", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "4282:28:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 49653, + "nodeType": "IfStatement", + "src": "4278:90:41", + "trueBody": { + "id": 49652, + "nodeType": "Block", + "src": "4312:56:41", + "statements": [ + { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 49647, + "name": "ErrorsLib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 52236, + "src": "4333:9:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ErrorsLib_$52236_$", + "typeString": "type(library ErrorsLib)" + } + }, + "id": 49649, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4343:12:41", + "memberName": "DataNotFound", + "nodeType": "MemberAccess", + "referencedDeclaration": 52233, + "src": "4333:22:41", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 49650, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4333:24:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 49651, + "nodeType": "RevertStatement", + "src": "4326:31:41" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 49662, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "expression": { + "id": 49655, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "4386:5:41", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 49656, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4392:9:41", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "4386:15:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "expression": { + "id": 49657, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49634, + "src": "4403:4:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Perp_$50910_memory_ptr", + "typeString": "struct Perp memory" + } + }, + "id": 49658, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4408:8:41", + "memberName": "metadata", + "nodeType": "MemberAccess", + "referencedDeclaration": 50901, + "src": "4403:13:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Metadata_$50830_memory_ptr", + "typeString": "struct Metadata memory" + } + }, + "id": 49659, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4417:9:41", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": 50825, + "src": "4403:23:41", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 49654, + "name": "diff", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49848, + "src": "4381:4:41", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 49660, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4381:46:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 49661, + "name": "age", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49630, + "src": "4430:3:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4381:52:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 49669, + "nodeType": "IfStatement", + "src": "4377:111:41", + "trueBody": { + "id": 49668, + "nodeType": "Block", + "src": "4435:53:41", + "statements": [ + { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 49663, + "name": "ErrorsLib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 52236, + "src": "4456:9:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ErrorsLib_$52236_$", + "typeString": "type(library ErrorsLib)" + } + }, + "id": 49665, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4466:9:41", + "memberName": "DataStale", + "nodeType": "MemberAccess", + "referencedDeclaration": 52235, + "src": "4456:19:41", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 49666, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4456:21:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 49667, + "nodeType": "RevertStatement", + "src": "4449:28:41" + } + ] + } + } + ] + }, + "baseFunctions": [50766], + "functionSelector": "7cfa33dd", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getPerpNoOlderThan", + "nameLocation": "4153:18:41", + "parameters": { + "id": 49631, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 49628, + "mutability": "mutable", + "name": "id", + "nameLocation": "4180:2:41", + "nodeType": "VariableDeclaration", + "scope": 49671, + "src": "4172:10:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 49627, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4172:7:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 49630, + "mutability": "mutable", + "name": "age", + "nameLocation": "4192:3:41", + "nodeType": "VariableDeclaration", + "scope": 49671, + "src": "4184:11:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 49629, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4184:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4171:25:41" + }, + "returnParameters": { + "id": 49635, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 49634, + "mutability": "mutable", + "name": "data", + "nameLocation": "4232:4:41", + "nodeType": "VariableDeclaration", + "scope": 49671, + "src": "4220:16:41", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Perp_$50910_memory_ptr", + "typeString": "struct Perp" + }, + "typeName": { + "id": 49633, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 49632, + "name": "Perp", + "nameLocations": ["4220:4:41"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 50910, + "src": "4220:4:41" + }, + "referencedDeclaration": 50910, + "src": "4220:4:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Perp_$50910_storage_ptr", + "typeString": "struct Perp" + } + }, + "visibility": "internal" + } + ], + "src": "4219:18:41" + }, + "scope": 49849, + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "id": 49774, + "nodeType": "FunctionDefinition", + "src": "4528:793:41", + "nodes": [], + "body": { + "id": 49773, + "nodeType": "Block", + "src": "4593:728:41", + "nodes": [], + "statements": [ + { + "assignments": [49681], + "declarations": [ + { + "constant": false, + "id": 49681, + "mutability": "mutable", + "name": "feedType", + "nameLocation": "4612:8:41", + "nodeType": "VariableDeclaration", + "scope": 49773, + "src": "4603:17:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FeedType_$50935", + "typeString": "enum FeedType" + }, + "typeName": { + "id": 49680, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 49679, + "name": "FeedType", + "nameLocations": ["4603:8:41"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 50935, + "src": "4603:8:41" + }, + "referencedDeclaration": 50935, + "src": "4603:8:41", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FeedType_$50935", + "typeString": "enum FeedType" + } + }, + "visibility": "internal" + } + ], + "id": 49691, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "baseExpression": { + "id": 49686, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49674, + "src": "4659:2:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 49688, + "indexExpression": { + "hexValue": "30", + "id": 49687, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4662:1:41", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4659:5:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + } + ], + "id": 49685, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4653:5:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint8_$", + "typeString": "type(uint8)" + }, + "typeName": { + "id": 49684, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "4653:5:41", + "typeDescriptions": {} + } + }, + "id": 49689, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4653:12:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + } + ], + "expression": { + "argumentTypes": [ + { "typeIdentifier": "t_uint8", "typeString": "uint8" } + ], + "expression": { + "id": 49682, + "name": "DataParser", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 52216, + "src": "4623:10:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_DataParser_$52216_$", + "typeString": "type(library DataParser)" + } + }, + "id": 49683, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4634:18:41", + "memberName": "safeCastToFeedType", + "nodeType": "MemberAccess", + "referencedDeclaration": 51589, + "src": "4623:29:41", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_enum$_FeedType_$50935_$", + "typeString": "function (uint8) pure returns (enum FeedType)" + } + }, + "id": 49690, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4623:43:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_enum$_FeedType_$50935", + "typeString": "enum FeedType" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4603:63:41" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_FeedType_$50935", + "typeString": "enum FeedType" + }, + "id": 49695, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 49692, + "name": "feedType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49681, + "src": "4680:8:41", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FeedType_$50935", + "typeString": "enum FeedType" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 49693, + "name": "FeedType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 50935, + "src": "4692:8:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_FeedType_$50935_$", + "typeString": "type(enum FeedType)" + } + }, + "id": 49694, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "4701:10:41", + "memberName": "SpotMedian", + "nodeType": "MemberAccess", + "referencedDeclaration": 50930, + "src": "4692:19:41", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FeedType_$50935", + "typeString": "enum FeedType" + } + }, + "src": "4680:31:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_FeedType_$50935", + "typeString": "enum FeedType" + }, + "id": 49709, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 49706, + "name": "feedType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49681, + "src": "4800:8:41", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FeedType_$50935", + "typeString": "enum FeedType" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 49707, + "name": "FeedType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 50935, + "src": "4812:8:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_FeedType_$50935_$", + "typeString": "type(enum FeedType)" + } + }, + "id": 49708, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "4821:4:41", + "memberName": "Twap", + "nodeType": "MemberAccess", + "referencedDeclaration": 50931, + "src": "4812:13:41", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FeedType_$50935", + "typeString": "enum FeedType" + } + }, + "src": "4800:25:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_FeedType_$50935", + "typeString": "enum FeedType" + }, + "id": 49723, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 49720, + "name": "feedType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49681, + "src": "4908:8:41", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FeedType_$50935", + "typeString": "enum FeedType" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 49721, + "name": "FeedType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 50935, + "src": "4920:8:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_FeedType_$50935_$", + "typeString": "type(enum FeedType)" + } + }, + "id": 49722, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "4929:18:41", + "memberName": "RealizedVolatility", + "nodeType": "MemberAccess", + "referencedDeclaration": 50932, + "src": "4920:27:41", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FeedType_$50935", + "typeString": "enum FeedType" + } + }, + "src": "4908:39:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_FeedType_$50935", + "typeString": "enum FeedType" + }, + "id": 49737, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 49734, + "name": "feedType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49681, + "src": "5028:8:41", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FeedType_$50935", + "typeString": "enum FeedType" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 49735, + "name": "FeedType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 50935, + "src": "5040:8:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_FeedType_$50935_$", + "typeString": "type(enum FeedType)" + } + }, + "id": 49736, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "5049:7:41", + "memberName": "Options", + "nodeType": "MemberAccess", + "referencedDeclaration": 50933, + "src": "5040:16:41", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FeedType_$50935", + "typeString": "enum FeedType" + } + }, + "src": "5028:28:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_FeedType_$50935", + "typeString": "enum FeedType" + }, + "id": 49751, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 49748, + "name": "feedType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49681, + "src": "5142:8:41", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FeedType_$50935", + "typeString": "enum FeedType" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 49749, + "name": "FeedType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 50935, + "src": "5154:8:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_FeedType_$50935_$", + "typeString": "type(enum FeedType)" + } + }, + "id": 49750, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "5163:10:41", + "memberName": "Perpetuals", + "nodeType": "MemberAccess", + "referencedDeclaration": 50934, + "src": "5154:19:41", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FeedType_$50935", + "typeString": "enum FeedType" + } + }, + "src": "5142:31:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 49767, + "nodeType": "Block", + "src": "5252:63:41", + "statements": [ + { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 49762, + "name": "ErrorsLib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 52236, + "src": "5273:9:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ErrorsLib_$52236_$", + "typeString": "type(library ErrorsLib)" + } + }, + "id": 49764, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5283:19:41", + "memberName": "InvalidDataFeedType", + "nodeType": "MemberAccess", + "referencedDeclaration": 52231, + "src": "5273:29:41", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 49765, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5273:31:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 49766, + "nodeType": "RevertStatement", + "src": "5266:38:41" + } + ] + }, + "id": 49768, + "nodeType": "IfStatement", + "src": "5138:177:41", + "trueBody": { + "id": 49761, + "nodeType": "Block", + "src": "5175:71:41", + "statements": [ + { + "expression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "id": 49758, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "baseExpression": { + "id": 49752, + "name": "perpFeeds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49903, + "src": "5197:9:41", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Perp_$50910_storage_$", + "typeString": "mapping(bytes32 => struct Perp storage ref)" + } + }, + "id": 49754, + "indexExpression": { + "id": 49753, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49674, + "src": "5207:2:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5197:13:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Perp_$50910_storage", + "typeString": "struct Perp storage ref" + } + }, + "id": 49755, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5211:8:41", + "memberName": "metadata", + "nodeType": "MemberAccess", + "referencedDeclaration": 50901, + "src": "5197:22:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Metadata_$50830_storage", + "typeString": "struct Metadata storage ref" + } + }, + "id": 49756, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5220:9:41", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": 50825, + "src": "5197:32:41", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 49757, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5233:1:41", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "5197:37:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 49759, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5196:39:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 49678, + "id": 49760, + "nodeType": "Return", + "src": "5189:46:41" + } + ] + } + }, + "id": 49769, + "nodeType": "IfStatement", + "src": "5024:291:41", + "trueBody": { + "id": 49747, + "nodeType": "Block", + "src": "5058:74:41", + "statements": [ + { + "expression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "id": 49744, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "baseExpression": { + "id": 49738, + "name": "optionsFeeds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49898, + "src": "5080:12:41", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Options_$50898_storage_$", + "typeString": "mapping(bytes32 => struct Options storage ref)" + } + }, + "id": 49740, + "indexExpression": { + "id": 49739, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49674, + "src": "5093:2:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5080:16:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Options_$50898_storage", + "typeString": "struct Options storage ref" + } + }, + "id": 49741, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5097:8:41", + "memberName": "metadata", + "nodeType": "MemberAccess", + "referencedDeclaration": 50875, + "src": "5080:25:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Metadata_$50830_storage", + "typeString": "struct Metadata storage ref" + } + }, + "id": 49742, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5106:9:41", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": 50825, + "src": "5080:35:41", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 49743, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5119:1:41", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "5080:40:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 49745, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5079:42:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 49678, + "id": 49746, + "nodeType": "Return", + "src": "5072:49:41" + } + ] + } + }, + "id": 49770, + "nodeType": "IfStatement", + "src": "4904:411:41", + "trueBody": { + "id": 49733, + "nodeType": "Block", + "src": "4949:69:41", + "statements": [ + { + "expression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "id": 49730, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "baseExpression": { + "id": 49724, + "name": "rvFeeds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49893, + "src": "4971:7:41", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RealizedVolatility_$50872_storage_$", + "typeString": "mapping(bytes32 => struct RealizedVolatility storage ref)" + } + }, + "id": 49726, + "indexExpression": { + "id": 49725, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49674, + "src": "4979:2:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4971:11:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RealizedVolatility_$50872_storage", + "typeString": "struct RealizedVolatility storage ref" + } + }, + "id": 49727, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4983:8:41", + "memberName": "metadata", + "nodeType": "MemberAccess", + "referencedDeclaration": 50857, + "src": "4971:20:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Metadata_$50830_storage", + "typeString": "struct Metadata storage ref" + } + }, + "id": 49728, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4992:9:41", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": 50825, + "src": "4971:30:41", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 49729, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5005:1:41", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "4971:35:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 49731, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4970:37:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 49678, + "id": 49732, + "nodeType": "Return", + "src": "4963:44:41" + } + ] + } + }, + "id": 49771, + "nodeType": "IfStatement", + "src": "4796:519:41", + "trueBody": { + "id": 49719, + "nodeType": "Block", + "src": "4827:71:41", + "statements": [ + { + "expression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "id": 49716, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "baseExpression": { + "id": 49710, + "name": "twapFeeds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49888, + "src": "4849:9:41", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_TWAP_$50854_storage_$", + "typeString": "mapping(bytes32 => struct TWAP storage ref)" + } + }, + "id": 49712, + "indexExpression": { + "id": 49711, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49674, + "src": "4859:2:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4849:13:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TWAP_$50854_storage", + "typeString": "struct TWAP storage ref" + } + }, + "id": 49713, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4863:8:41", + "memberName": "metadata", + "nodeType": "MemberAccess", + "referencedDeclaration": 50841, + "src": "4849:22:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Metadata_$50830_storage", + "typeString": "struct Metadata storage ref" + } + }, + "id": 49714, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4872:9:41", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": 50825, + "src": "4849:32:41", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 49715, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4885:1:41", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "4849:37:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 49717, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4848:39:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 49678, + "id": 49718, + "nodeType": "Return", + "src": "4841:46:41" + } + ] + } + }, + "id": 49772, + "nodeType": "IfStatement", + "src": "4676:639:41", + "trueBody": { + "id": 49705, + "nodeType": "Block", + "src": "4713:77:41", + "statements": [ + { + "expression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "id": 49702, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "baseExpression": { + "id": 49696, + "name": "spotMedianFeeds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49883, + "src": "4735:15:41", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_SpotMedian_$50838_storage_$", + "typeString": "mapping(bytes32 => struct SpotMedian storage ref)" + } + }, + "id": 49698, + "indexExpression": { + "id": 49697, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49674, + "src": "4751:2:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4735:19:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SpotMedian_$50838_storage", + "typeString": "struct SpotMedian storage ref" + } + }, + "id": 49699, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4755:8:41", + "memberName": "metadata", + "nodeType": "MemberAccess", + "referencedDeclaration": 50833, + "src": "4735:28:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Metadata_$50830_storage", + "typeString": "struct Metadata storage ref" + } + }, + "id": 49700, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4764:9:41", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": 50825, + "src": "4735:38:41", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 49701, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4777:1:41", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "4735:43:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 49703, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4734:45:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 49678, + "id": 49704, + "nodeType": "Return", + "src": "4727:52:41" + } + ] + } + } + ] + }, + "baseFunctions": [50774], + "documentation": { + "id": 49672, + "nodeType": "StructuredDocumentation", + "src": "4500:23:41", + "text": "@inheritdoc IPragma" + }, + "functionSelector": "0e8fd1ba", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "dataFeedExists", + "nameLocation": "4537:14:41", + "parameters": { + "id": 49675, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 49674, + "mutability": "mutable", + "name": "id", + "nameLocation": "4560:2:41", + "nodeType": "VariableDeclaration", + "scope": 49774, + "src": "4552:10:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 49673, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4552:7:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "4551:12:41" + }, + "returnParameters": { + "id": 49678, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 49677, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 49774, + "src": "4587:4:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 49676, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4587:4:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "4586:6:41" + }, + "scope": 49849, + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "id": 49782, + "nodeType": "FunctionDefinition", + "src": "5327:106:41", + "nodes": [], + "body": { + "id": 49781, + "nodeType": "Block", + "src": "5387:46:41", + "nodes": [], + "statements": [ + { + "expression": { + "id": 49779, + "name": "validTimePeriodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49277, + "src": "5404:22:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 49778, + "id": 49780, + "nodeType": "Return", + "src": "5397:29:41" + } + ] + }, + "functionSelector": "e18910a3", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getValidTimePeriod", + "nameLocation": "5336:18:41", + "parameters": { + "id": 49775, + "nodeType": "ParameterList", + "parameters": [], + "src": "5354:2:41" + }, + "returnParameters": { + "id": 49778, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 49777, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 49782, + "src": "5378:7:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 49776, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5378:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5377:9:41" + }, + "scope": 49849, + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "id": 49816, + "nodeType": "FunctionDefinition", + "src": "5439:245:41", + "nodes": [], + "body": { + "id": 49815, + "nodeType": "Block", + "src": "5498:186:41", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 49796, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 49790, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49784, + "src": "5516:6:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "expression": { + "arguments": [ + { + "id": 49793, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "5534:4:41", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Pragma_$49849", + "typeString": "contract Pragma" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_Pragma_$49849", + "typeString": "contract Pragma" + } + ], + "id": 49792, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5526:7:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 49791, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5526:7:41", + "typeDescriptions": {} + } + }, + "id": 49794, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5526:13:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 49795, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5540:7:41", + "memberName": "balance", + "nodeType": "MemberAccess", + "src": "5526:21:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5516:31:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "496e73756666696369656e742062616c616e6365", + "id": 49797, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5549:22:41", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5", + "typeString": "literal_string \"Insufficient balance\"" + }, + "value": "Insufficient balance" + } + ], + "expression": { + "argumentTypes": [ + { "typeIdentifier": "t_bool", "typeString": "bool" }, + { + "typeIdentifier": "t_stringliteral_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5", + "typeString": "literal_string \"Insufficient balance\"" + } + ], + "id": 49789, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [-18, -18, -18], + "referencedDeclaration": -18, + "src": "5508:7:41", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 49798, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5508:64:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 49799, + "nodeType": "ExpressionStatement", + "src": "5508:64:41" + }, + { + "assignments": [49801, null], + "declarations": [ + { + "constant": false, + "id": 49801, + "mutability": "mutable", + "name": "success", + "nameLocation": "5588:7:41", + "nodeType": "VariableDeclaration", + "scope": 49815, + "src": "5583:12:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 49800, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5583:4:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + null + ], + "id": 49809, + "initialValue": { + "arguments": [ + { + "hexValue": "", + "id": 49807, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5629:2:41", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + }, + "value": "" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 49802, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 46879, + "src": "5601:5:41", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 49803, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5601:7:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 49804, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5609:4:41", + "memberName": "call", + "nodeType": "MemberAccess", + "src": "5601:12:41", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 49806, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": ["value"], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 49805, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49784, + "src": "5621:6:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "5601:27:41", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 49808, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5601:31:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5582:50:41" + }, + { + "expression": { + "arguments": [ + { + "id": 49811, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49801, + "src": "5650:7:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "5472616e73666572206661696c6564", + "id": 49812, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5659:17:41", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_25adaa6d082ce15f901e0d8a3d393e7462ef9edf2e6bc8321fa14d1615b6fc51", + "typeString": "literal_string \"Transfer failed\"" + }, + "value": "Transfer failed" + } + ], + "expression": { + "argumentTypes": [ + { "typeIdentifier": "t_bool", "typeString": "bool" }, + { + "typeIdentifier": "t_stringliteral_25adaa6d082ce15f901e0d8a3d393e7462ef9edf2e6bc8321fa14d1615b6fc51", + "typeString": "literal_string \"Transfer failed\"" + } + ], + "id": 49810, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [-18, -18, -18], + "referencedDeclaration": -18, + "src": "5642:7:41", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 49813, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5642:35:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 49814, + "nodeType": "ExpressionStatement", + "src": "5642:35:41" + } + ] + }, + "functionSelector": "5d2c53a7", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 49787, + "kind": "modifierInvocation", + "modifierName": { + "id": 49786, + "name": "onlyOwner", + "nameLocations": ["5488:9:41"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 46863, + "src": "5488:9:41" + }, + "nodeType": "ModifierInvocation", + "src": "5488:9:41" + } + ], + "name": "withdraw_funds", + "nameLocation": "5448:14:41", + "parameters": { + "id": 49785, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 49784, + "mutability": "mutable", + "name": "amount", + "nameLocation": "5471:6:41", + "nodeType": "VariableDeclaration", + "scope": 49816, + "src": "5463:14:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 49783, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5463:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5462:16:41" + }, + "returnParameters": { + "id": 49788, + "nodeType": "ParameterList", + "parameters": [], + "src": "5498:0:41" + }, + "scope": 49849, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 49824, + "nodeType": "FunctionDefinition", + "src": "5690:86:41", + "nodes": [], + "body": { + "id": 49823, + "nodeType": "Block", + "src": "5745:31:41", + "nodes": [], + "statements": [ + { + "expression": { + "hexValue": "312e302e30", + "id": 49821, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5762:7:41", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_06c015bd22b4c69690933c1058878ebdfef31f9aaae40bbe86d8a09fe1b2972c", + "typeString": "literal_string \"1.0.0\"" + }, + "value": "1.0.0" + }, + "functionReturnParameters": 49820, + "id": 49822, + "nodeType": "Return", + "src": "5755:14:41" + } + ] + }, + "functionSelector": "54fd4d50", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "version", + "nameLocation": "5699:7:41", + "parameters": { + "id": 49817, + "nodeType": "ParameterList", + "parameters": [], + "src": "5706:2:41" + }, + "returnParameters": { + "id": 49820, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 49819, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 49824, + "src": "5730:13:41", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 49818, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "5730:6:41", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "5729:15:41" + }, + "scope": 49849, + "stateMutability": "pure", + "virtual": false, + "visibility": "public" + }, + { + "id": 49848, + "nodeType": "FunctionDefinition", + "src": "5782:175:41", + "nodes": [], + "body": { + "id": 49847, + "nodeType": "Block", + "src": "5850:107:41", + "nodes": [], + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 49835, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 49833, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49826, + "src": "5864:1:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 49834, + "name": "y", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49828, + "src": "5868:1:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5864:5:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 49845, + "nodeType": "Block", + "src": "5914:37:41", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 49843, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 49841, + "name": "y", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49828, + "src": "5935:1:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 49842, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49826, + "src": "5939:1:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5935:5:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 49832, + "id": 49844, + "nodeType": "Return", + "src": "5928:12:41" + } + ] + }, + "id": 49846, + "nodeType": "IfStatement", + "src": "5860:91:41", + "trueBody": { + "id": 49840, + "nodeType": "Block", + "src": "5871:37:41", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 49838, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 49836, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49826, + "src": "5892:1:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 49837, + "name": "y", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49828, + "src": "5896:1:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5892:5:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 49832, + "id": 49839, + "nodeType": "Return", + "src": "5885:12:41" + } + ] + } + } + ] + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "diff", + "nameLocation": "5791:4:41", + "parameters": { + "id": 49829, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 49826, + "mutability": "mutable", + "name": "x", + "nameLocation": "5804:1:41", + "nodeType": "VariableDeclaration", + "scope": 49848, + "src": "5796:9:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 49825, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5796:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 49828, + "mutability": "mutable", + "name": "y", + "nameLocation": "5815:1:41", + "nodeType": "VariableDeclaration", + "scope": 49848, + "src": "5807:9:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 49827, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5807:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5795:22:41" + }, + "returnParameters": { + "id": 49832, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 49831, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 49848, + "src": "5841:7:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 49830, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5841:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5840:9:41" + }, + "scope": 49849, + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 49266, + "name": "Initializable", + "nameLocations": ["670:13:41"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 47222, + "src": "670:13:41" + }, + "id": 49267, + "nodeType": "InheritanceSpecifier", + "src": "670:13:41" + }, + { + "baseName": { + "id": 49268, + "name": "UUPSUpgradeable", + "nameLocations": ["685:15:41"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 47404, + "src": "685:15:41" + }, + "id": 49269, + "nodeType": "InheritanceSpecifier", + "src": "685:15:41" + }, + { + "baseName": { + "id": 49270, + "name": "OwnableUpgradeable", + "nameLocations": ["702:18:41"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 46968, + "src": "702:18:41" + }, + "id": 49271, + "nodeType": "InheritanceSpecifier", + "src": "702:18:41" + }, + { + "baseName": { + "id": 49272, + "name": "IPragma", + "nameLocations": ["722:7:41"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 50775, + "src": "722:7:41" + }, + "id": 49273, + "nodeType": "InheritanceSpecifier", + "src": "722:7:41" + }, + { + "baseName": { + "id": 49274, + "name": "PragmaDecoder", + "nameLocations": ["731:13:41"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 50660, + "src": "731:13:41" + }, + "id": 49275, + "nodeType": "InheritanceSpecifier", + "src": "731:13:41" + } + ], + "canonicalName": "Pragma", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 49265, + "nodeType": "StructuredDocumentation", + "src": "534:117:41", + "text": "@title Pragma\n @author Pragma Labs\n @custom:contact security@pragma.build\n @notice The Pragma contract." + }, + "fullyImplemented": true, + "linearizedBaseContracts": [ + 49849, 50660, 50775, 46968, 47450, 47404, 47629, 47222 + ], + "name": "Pragma", + "nameLocation": "660:6:41", + "scope": 49850, + "usedErrors": [ + 46804, 46809, 46985, 46988, 47249, 47254, 47687, 47700, 48200, 48492, + 52221, 52223, 52225, 52227, 52229, 52231, 52233, 52235 + ], + "usedEvents": [46815, 46993, 47606, 52261, 52271, 52281, 52291, 52301] + } + ], + "license": "Apache 2" + }, + "id": 41 +} diff --git a/evm_config.yaml b/evm_config.yaml index 58d9881..d3c457b 100644 --- a/evm_config.yaml +++ b/evm_config.yaml @@ -44,4 +44,4 @@ optimism: base: rpc_url: "https://mainnet.base.org" - contract_address: "" \ No newline at end of file + contract_address: "" diff --git a/src/config.rs b/src/config.rs index f5222bf..032d0b9 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,7 +1,7 @@ use std::{ collections::HashMap, fs::File, - path::{Path, PathBuf}, + path::PathBuf, str::FromStr, sync::Arc, time::{Duration, Instant}, @@ -68,6 +68,7 @@ pub struct DataInfo { } #[derive(Debug, Clone)] +#[allow(dead_code)] pub struct EvmConfig { pub name: String, pub pragma: PragmaContract, diff --git a/src/error.rs b/src/error.rs index 9baa475..2c0beb9 100644 --- a/src/error.rs +++ b/src/error.rs @@ -12,7 +12,7 @@ pub enum MonitoringError { OnChain(String), Provider(ProviderError), InvalidTimestamp(u64), - EVM(String), + Evm(String), } impl StdError for MonitoringError {} @@ -28,7 +28,7 @@ impl fmt::Display for MonitoringError { MonitoringError::OnChain(e) => write!(f, "OnChain Error: {}", e), MonitoringError::Provider(e) => write!(f, "Provider Error: {}", e), MonitoringError::InvalidTimestamp(e) => write!(f, "Invalid Timestamp: {}", e), - MonitoringError::EVM(e) => write!(f, "EVM Monitoring Error: {}", e), + MonitoringError::Evm(e) => write!(f, "EVM Monitoring Error: {}", e), } } } diff --git a/src/main.rs b/src/main.rs index 2e403aa..fdce270 100644 --- a/src/main.rs +++ b/src/main.rs @@ -31,7 +31,6 @@ use std::collections::HashMap; use std::time::Duration; use std::{env, vec}; -use alloy::primitives::address; use deadpool::managed::Pool; use diesel_async::pooled_connection::AsyncDieselConnectionManager; use diesel_async::AsyncPgConnection; diff --git a/src/processing/evm.rs b/src/processing/evm.rs index eb6e248..66db670 100644 --- a/src/processing/evm.rs +++ b/src/processing/evm.rs @@ -50,7 +50,7 @@ pub async fn check_feed_update_state() -> Result<(), MonitoringError> { BlockId::Tag(BlockTag::Pending), ) .await - .map_err(|e| MonitoringError::EVM(e.to_string()))?; + .map_err(|e| MonitoringError::Evm(e.to_string()))?; feed_list.remove(0); for chain in evm_config.iter() { @@ -96,7 +96,7 @@ pub async fn check_feed_update_state() -> Result<(), MonitoringError> { .set(result.metadata.timestamp as f64); } va => { - return Err(MonitoringError::EVM(format!( + return Err(MonitoringError::Evm(format!( "unknown variant {va} for main type Unique" ))) } @@ -117,7 +117,7 @@ pub async fn check_feed_update_state() -> Result<(), MonitoringError> { .set(result.metadata.timestamp as f64); } va => { - return Err(MonitoringError::EVM(format!( + return Err(MonitoringError::Evm(format!( "unknown variant {va} for main type Twap" ))) } @@ -138,13 +138,13 @@ pub async fn check_feed_update_state() -> Result<(), MonitoringError> { .set(result.metadata.timestamp as f64); } va => { - return Err(MonitoringError::EVM(format!( + return Err(MonitoringError::Evm(format!( "unknown variant {va} for main type Realized Volatility" ))) } }, va => { - return Err(MonitoringError::EVM(format!( + return Err(MonitoringError::Evm(format!( "unknown variant {va} for main type Unique" ))) } From 6e3f26d47ef09c07a6ba0854aaaf654974518486 Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Thu, 10 Oct 2024 18:00:16 +0200 Subject: [PATCH 06/31] zzzzzz --- src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index fdce270..4ba6fda 100644 --- a/src/main.rs +++ b/src/main.rs @@ -309,7 +309,7 @@ pub(crate) async fn hyperlane_dispatch_monitor( loop { interval.tick().await; // Wait for the next tick - // Skip if indexer is still syncing + // Skip if indexer is still syncing if wait_for_syncing && !indexers_are_synced("pragma_devnet_dispatch_event").await { continue; } From b3748638ef9081accb9523ff42e51dc138a64c1a Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Thu, 10 Oct 2024 18:01:50 +0200 Subject: [PATCH 07/31] remove comment --- src/processing/evm.rs | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/src/processing/evm.rs b/src/processing/evm.rs index 66db670..50102bc 100644 --- a/src/processing/evm.rs +++ b/src/processing/evm.rs @@ -9,30 +9,6 @@ use starknet::providers::Provider; use crate::constants::EVM_TIME_SINCE_LAST_FEED_UPDATE; use crate::{config::get_config, error::MonitoringError}; -// /// Try to construct a FeedType from the provided FeedTypeId. -// fn from_id(id: FeedTypeId) -> Result { -// let main_type = (id & FEED_TYPE_MAIN_MASK) / FEED_TYPE_MAIN_SHIFT; -// let variant = id & FEED_TYPE_VARIANT_MASK; - -// match main_type { -// 0 => match variant { -// 0 => Result::Ok(FeedType::Unique(UniqueVariant::SpotMedian)), -// 1 => Result::Ok(FeedType::Unique(UniqueVariant::PerpMedian)), -// 2 => Result::Ok(FeedType::Unique(UniqueVariant::SpotMean)), -// _ => Result::Err(FeedTypeError::IdConversion('Unknown feed type variant')), -// }, -// 1 => match variant { -// 0 => Result::Ok(FeedType::Twap(TwapVariant::SpotMedianOneDay)), -// _ => Result::Err(FeedTypeError::IdConversion('Unknown feed type variant')), -// }, -// 2 => match variant { -// 0 => Result::Ok(FeedType::RealizedVolatility(RealizedVolatilityVariant::OneWeek)), -// _ => Result::Err(FeedTypeError::IdConversion('Unknown feed type variant')), -// }, -// _ => Result::Err(FeedTypeError::IdConversion('Unknown feed type')), -// } -// } - pub async fn check_feed_update_state() -> Result<(), MonitoringError> { let config = get_config(None).await; let evm_config = config.evm_configs(); From 9033fe7a6c6949866f5233acecd4a65d4c617663 Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Thu, 10 Oct 2024 18:36:58 +0200 Subject: [PATCH 08/31] change to pragma_contract_address --- evm_config.yaml | 24 ++++++++++++------------ src/config.rs | 6 +++--- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/evm_config.yaml b/evm_config.yaml index d3c457b..7c23383 100644 --- a/evm_config.yaml +++ b/evm_config.yaml @@ -1,47 +1,47 @@ mainnet: rpc_url: "https://mainnet.infura.io/v3/${INFURA_PROJECT_ID}" - contract_address: "" + pragma_contract_address: "" sepolia: rpc_url: "https://sepolia.infura.io/v3/${INFURA_PROJECT_ID}" - contract_address: "" + pragma_contract_address: "" holesky: rpc_url: "https://holesky.infura.io/v3/${INFURA_PROJECT_ID}" - contract_address: "0x50fEbf423F5Fc61C2512bb5F9c6B1878d37C50DF" + pragma_contract_address: "0x50fEbf423F5Fc61C2512bb5F9c6B1878d37C50DF" bsc: rpc_url: "https://bsc-dataseed1.defibit.io/" - contract_address: "" + pragma_contract_address: "" bscTestnet: rpc_url: "https://data-seed-prebsc-1-s1.binance.org:8545" - contract_address: "" + pragma_contract_address: "" polygon: rpc_url: "https://polygon-rpc.com/" - contract_address: "" + pragma_contract_address: "" polygonTestnet: rpc_url: "https://rpc-mumbai.maticvigil.com" - contract_address: "" + pragma_contract_address: "" avalanche: rpc_url: "https://api.avax.network/ext/bc/C/rpc" - contract_address: "" + pragma_contract_address: "" fantom: rpc_url: "https://rpc.ftm.tools/" - contract_address: "" + pragma_contract_address: "" arbitrum: rpc_url: "https://arb1.arbitrum.io/rpc" - contract_address: "" + pragma_contract_address: "" optimism: rpc_url: "https://rpc.ankr.com/optimism" - contract_address: "" + pragma_contract_address: "" base: rpc_url: "https://mainnet.base.org" - contract_address: "" + pragma_contract_address: "" diff --git a/src/config.rs b/src/config.rs index 032d0b9..cbf0dad 100644 --- a/src/config.rs +++ b/src/config.rs @@ -95,7 +95,7 @@ impl EvmConfig { #[derive(Debug, Deserialize)] struct EvmChainConfig { rpc_url: String, - contract_address: String, + pragma_contract_address: String, } #[derive(Debug, Clone)] @@ -153,11 +153,11 @@ impl Config { let evm_config = config .into_iter() .filter_map(|(network_name, chain_config)| { - if !chain_config.contract_address.is_empty() { + if !chain_config.pragma_contract_address.is_empty() { match Url::parse(&chain_config.rpc_url) { Ok(rpc_url) => Some(Ok(EvmConfig::new( network_name, - chain_config.contract_address, + chain_config.pragma_contract_address, rpc_url, ))), Err(e) => Some(Err( From 88c3d0f0bafe5aa0ab09de47914acd53d3c9b883 Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Thu, 10 Oct 2024 18:41:03 +0200 Subject: [PATCH 09/31] Update evm.rs --- src/processing/evm.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/processing/evm.rs b/src/processing/evm.rs index 50102bc..e238264 100644 --- a/src/processing/evm.rs +++ b/src/processing/evm.rs @@ -14,7 +14,7 @@ pub async fn check_feed_update_state() -> Result<(), MonitoringError> { let evm_config = config.evm_configs(); let feed_registry_address = config .feed_registry_address() - .expect("failed to retrieve feed registry address"); + .ok_or(MonitoringError::Evm("Failed to parse feed registry address".to_string()))?; let client = &config.network().provider; let mut feed_list = client .call( From c20d8eb8f5c8c5c388440da39aa48b527f6d66fb Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Thu, 10 Oct 2024 18:45:24 +0200 Subject: [PATCH 10/31] refacto --- src/processing/evm.rs | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/processing/evm.rs b/src/processing/evm.rs index e238264..2c971e9 100644 --- a/src/processing/evm.rs +++ b/src/processing/evm.rs @@ -1,21 +1,23 @@ +use std::sync::Arc; + use alloy::hex::FromHex; use alloy::primitives::FixedBytes; +use arc_swap::Guard; use bigdecimal::ToPrimitive; use num_bigint::BigInt; -use starknet::core::types::{BlockId, BlockTag, FunctionCall}; +use starknet::core::types::{BlockId, BlockTag, Felt, FunctionCall}; use starknet::macros::selector; -use starknet::providers::Provider; +use starknet::providers::jsonrpc::HttpTransport; +use starknet::providers::{JsonRpcClient, Provider}; +use crate::config::Config; use crate::constants::EVM_TIME_SINCE_LAST_FEED_UPDATE; use crate::{config::get_config, error::MonitoringError}; -pub async fn check_feed_update_state() -> Result<(), MonitoringError> { - let config = get_config(None).await; - let evm_config = config.evm_configs(); +pub async fn get_all_feed_ids(config: &Guard>, client : &Arc>) -> Vec { let feed_registry_address = config .feed_registry_address() .ok_or(MonitoringError::Evm("Failed to parse feed registry address".to_string()))?; - let client = &config.network().provider; let mut feed_list = client .call( FunctionCall { @@ -28,6 +30,15 @@ pub async fn check_feed_update_state() -> Result<(), MonitoringError> { .await .map_err(|e| MonitoringError::Evm(e.to_string()))?; feed_list.remove(0); + feed_list +} + +pub async fn check_feed_update_state() -> Result<(), MonitoringError> { + let config = get_config(None).await; + let evm_config = config.evm_configs(); + + let client = &config.network().provider; + let feed_list = get_all_feed_ids(&config, client).await; for chain in evm_config.iter() { let fl = feed_list.clone(); From 3feef0302c90b0f6b95bfc18119fb638f78489a6 Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Thu, 10 Oct 2024 19:24:30 +0200 Subject: [PATCH 11/31] quick refacto --- src/processing/evm.rs | 61 +++++++++++++++++++++++++++++++++---------- 1 file changed, 47 insertions(+), 14 deletions(-) diff --git a/src/processing/evm.rs b/src/processing/evm.rs index 2c971e9..9b78dd2 100644 --- a/src/processing/evm.rs +++ b/src/processing/evm.rs @@ -14,7 +14,35 @@ use crate::config::Config; use crate::constants::EVM_TIME_SINCE_LAST_FEED_UPDATE; use crate::{config::get_config, error::MonitoringError}; -pub async fn get_all_feed_ids(config: &Guard>, client : &Arc>) -> Vec { +#[derive(Clone)] +struct FeedId{ + pub feed_id : Felt, + pub main_type: u64, + pub variant: u64, +} + +impl FeedId{ + pub fn new(feed_id: Felt) -> Self { + Self { feed_id: feed_id, main_type: 9999, variant: 999 } + } + + pub fn parse_feed_id(&mut self) -> Result<(), MonitoringError> { + self.main_type = ((self.feed_id.to_bigint() & BigInt::from(65280)) / BigInt::from(256)) + .to_u64() + .ok_or(MonitoringError::Evm("invalid main type".to_string()))?; + self.variant = (self.feed_id.to_bigint() & BigInt::from(255)) + .to_u64() + .ok_or(MonitoringError::Evm(format!("invalid variant for main type {}", self.main_type)))?; + Ok(()) + } + + pub fn to_calldata(&self) -> Result,MonitoringError>{ + alloy::sol_types::private::FixedBytes::from_hex(self.feed_id.to_hex_string()) + .map_err(|e| MonitoringError::Evm(e.to_string())) + } +} + +pub async fn get_all_feed_ids(config: &Guard>, client : &Arc>) -> Result, MonitoringError> { let feed_registry_address = config .feed_registry_address() .ok_or(MonitoringError::Evm("Failed to parse feed registry address".to_string()))?; @@ -30,7 +58,20 @@ pub async fn get_all_feed_ids(config: &Guard>, client : &Arc = feed_list.iter().map(|&feed| {FeedId::new(feed)}).collect(); + for feed in feeds.iter_mut() { + feed.parse_feed_id()?; + } + + Ok(feeds) +} + + + +pub fn monitor_evm_chain() -> Result<(), MonitoringError>{ + + Ok(()) } pub async fn check_feed_update_state() -> Result<(), MonitoringError> { @@ -38,22 +79,14 @@ pub async fn check_feed_update_state() -> Result<(), MonitoringError> { let evm_config = config.evm_configs(); let client = &config.network().provider; - let feed_list = get_all_feed_ids(&config, client).await; + let feed_list = get_all_feed_ids(&config, client).await?; for chain in evm_config.iter() { let fl = feed_list.clone(); for feed in fl.into_iter() { - let main_type = ((feed.to_bigint() & BigInt::from(65280)) / BigInt::from(256)) - .to_u64() - .expect("invalid main type"); - let variant = (feed.to_bigint() & BigInt::from(255)) - .to_u64() - .expect("invalid variant"); - let feed_id_as_calldata: FixedBytes<32> = - alloy::sol_types::private::FixedBytes::from_hex(feed.to_hex_string()) - .expect("failed to parse felt id"); - match main_type { - 0 => match variant { + let feed_id_as_calldata= feed.to_calldata()?; + match feed.main_type { + 0 => match feed.variant { 0 => { let result = chain .pragma From 68cfee7ba7248efba6fbb77730030fd03921fb39 Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Thu, 10 Oct 2024 19:25:50 +0200 Subject: [PATCH 12/31] Update evm.rs --- src/processing/evm.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/processing/evm.rs b/src/processing/evm.rs index 9b78dd2..a1599c4 100644 --- a/src/processing/evm.rs +++ b/src/processing/evm.rs @@ -40,6 +40,10 @@ impl FeedId{ alloy::sol_types::private::FixedBytes::from_hex(self.feed_id.to_hex_string()) .map_err(|e| MonitoringError::Evm(e.to_string())) } + + pub fn to_hex_string(&self) -> String{ + self.feed_id.to_hex_string() + } } pub async fn get_all_feed_ids(config: &Guard>, client : &Arc>) -> Result, MonitoringError> { @@ -121,7 +125,7 @@ pub async fn check_feed_update_state() -> Result<(), MonitoringError> { ))) } }, - 1 => match variant { + 1 => match feed.variant { 0 => { let result = chain .pragma @@ -142,7 +146,7 @@ pub async fn check_feed_update_state() -> Result<(), MonitoringError> { ))) } }, - 2 => match variant { + 2 => match feed.variant { 0 => { let result = chain .pragma From d7483ba6ae1087d4224751cc20d61a5f83fb2664 Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Fri, 11 Oct 2024 16:45:05 +0200 Subject: [PATCH 13/31] cleeeeean --- src/processing/evm.rs | 246 ++++++++++++++++++++++-------------------- 1 file changed, 127 insertions(+), 119 deletions(-) diff --git a/src/processing/evm.rs b/src/processing/evm.rs index a1599c4..b33f3af 100644 --- a/src/processing/evm.rs +++ b/src/processing/evm.rs @@ -10,46 +10,147 @@ use starknet::macros::selector; use starknet::providers::jsonrpc::HttpTransport; use starknet::providers::{JsonRpcClient, Provider}; -use crate::config::Config; +use crate::config::{Config, EvmConfig}; use crate::constants::EVM_TIME_SINCE_LAST_FEED_UPDATE; use crate::{config::get_config, error::MonitoringError}; #[derive(Clone)] -struct FeedId{ - pub feed_id : Felt, - pub main_type: u64, - pub variant: u64, +enum FeedType { + Unique(UniqueVariant), + Twap(TwapVariant), } -impl FeedId{ - pub fn new(feed_id: Felt) -> Self { - Self { feed_id: feed_id, main_type: 9999, variant: 999 } +impl FeedType { + async fn update_data(&self, chain: &EvmConfig, feed_id: FeedId) -> Result<(), MonitoringError> { + match self { + FeedType::Unique(unique_variant) => unique_variant.update_data(chain, feed_id).await, + FeedType::Twap(twap_variant) => twap_variant.update_data(chain, feed_id).await, + } } +} + +#[derive(Clone)] +enum UniqueVariant { + SpotMedian, + PerpMedian, +} + +#[derive(Clone)] +enum TwapVariant { + SpotTwap = 0, +} + +impl TryFrom for FeedType { + type Error = MonitoringError; - pub fn parse_feed_id(&mut self) -> Result<(), MonitoringError> { - self.main_type = ((self.feed_id.to_bigint() & BigInt::from(65280)) / BigInt::from(256)) + fn try_from(feed_id: Felt) -> Result { + let feed_type = ((feed_id.to_bigint() & BigInt::from(65280)) / BigInt::from(256)) .to_u64() .ok_or(MonitoringError::Evm("invalid main type".to_string()))?; - self.variant = (self.feed_id.to_bigint() & BigInt::from(255)) - .to_u64() - .ok_or(MonitoringError::Evm(format!("invalid variant for main type {}", self.main_type)))?; - Ok(()) + let variant = + (feed_id.to_bigint() & BigInt::from(255)) + .to_u64() + .ok_or(MonitoringError::Evm(format!( + "invalid variant for main type {}", + feed_type + )))?; + match feed_type { + 0 => match variant { + 0 => Ok(FeedType::Unique(UniqueVariant::SpotMedian)), + 1 => Ok(FeedType::Unique(UniqueVariant::PerpMedian)), + _ => unreachable!(), + }, + 1 => match variant { + 0 => Ok(FeedType::Twap(TwapVariant::SpotTwap)), + _ => unreachable!(), + }, + _ => unreachable!(), + } } +} - pub fn to_calldata(&self) -> Result,MonitoringError>{ +pub trait Variant: Clone + Send + Sync { + async fn update_data(&self, chain: &EvmConfig, feed_id: FeedId) -> Result<(), MonitoringError>; +} + +impl Variant for UniqueVariant { + async fn update_data(&self, chain: &EvmConfig, feed_id: FeedId) -> Result<(), MonitoringError> { + match self { + UniqueVariant::SpotMedian => { + let result = chain + .pragma + .spotMedianFeeds(feed_id.to_calldata()?) + .call() + .await + .expect("failed to retrieve spot median feed"); + EVM_TIME_SINCE_LAST_FEED_UPDATE + .with_label_values(&[chain.name.as_str(), feed_id.to_hex_string().as_str()]) + .set(result.metadata.timestamp as f64); + Ok(()) + } + UniqueVariant::PerpMedian => { + //TODO: must be changed with real fn + let result = chain + .pragma + .perpFeeds(feed_id.to_calldata()?) + .call() + .await + .expect("failed to retrieve spot perp feed"); + EVM_TIME_SINCE_LAST_FEED_UPDATE + .with_label_values(&[chain.name.as_str(), feed_id.to_hex_string().as_str()]) + .set(result.metadata.timestamp as f64); + Ok(()) + } + } + } +} + +impl Variant for TwapVariant { + async fn update_data(&self, chain: &EvmConfig, feed_id: FeedId) -> Result<(), MonitoringError> { + match self { + TwapVariant::SpotTwap => { + let result = chain + .pragma + .twapFeeds(feed_id.to_calldata()?) + .call() + .await + .expect("failed to retrieve twap feed"); + EVM_TIME_SINCE_LAST_FEED_UPDATE + .with_label_values(&[chain.name.as_str(), feed_id.to_hex_string().as_str()]) + .set(result.metadata.timestamp as f64); + Ok(()) + } + } + } +} + +#[derive(Clone)] +pub struct FeedId { + pub feed_id: Felt, +} + +impl FeedId { + pub fn new(feed_id: Felt) -> Self { + Self { feed_id } + } + + pub fn to_calldata(&self) -> Result, MonitoringError> { alloy::sol_types::private::FixedBytes::from_hex(self.feed_id.to_hex_string()) - .map_err(|e| MonitoringError::Evm(e.to_string())) + .map_err(|e| MonitoringError::Evm(e.to_string())) } - pub fn to_hex_string(&self) -> String{ + pub fn to_hex_string(&self) -> String { self.feed_id.to_hex_string() } } -pub async fn get_all_feed_ids(config: &Guard>, client : &Arc>) -> Result, MonitoringError> { - let feed_registry_address = config - .feed_registry_address() - .ok_or(MonitoringError::Evm("Failed to parse feed registry address".to_string()))?; +pub async fn get_all_feed_ids( + config: &Guard>, + client: &Arc>, +) -> Result, MonitoringError> { + let feed_registry_address = config.feed_registry_address().ok_or(MonitoringError::Evm( + "Failed to parse feed registry address".to_string(), + ))?; let mut feed_list = client .call( FunctionCall { @@ -63,116 +164,23 @@ pub async fn get_all_feed_ids(config: &Guard>, client : &Arc = feed_list.iter().map(|&feed| {FeedId::new(feed)}).collect(); - for feed in feeds.iter_mut() { - feed.parse_feed_id()?; - } + let feedids = feed_list.iter().map(|elem| FeedId::new(*elem)).collect(); - Ok(feeds) -} - - - -pub fn monitor_evm_chain() -> Result<(), MonitoringError>{ - - Ok(()) + Ok(feedids) } pub async fn check_feed_update_state() -> Result<(), MonitoringError> { let config = get_config(None).await; let evm_config = config.evm_configs(); - + let client = &config.network().provider; let feed_list = get_all_feed_ids(&config, client).await?; for chain in evm_config.iter() { let fl = feed_list.clone(); for feed in fl.into_iter() { - let feed_id_as_calldata= feed.to_calldata()?; - match feed.main_type { - 0 => match feed.variant { - 0 => { - let result = chain - .pragma - .spotMedianFeeds(feed_id_as_calldata) - .call() - .await - .expect("failed to retrieve spot median feed"); - EVM_TIME_SINCE_LAST_FEED_UPDATE - .with_label_values(&[ - chain.name.as_str(), - feed.to_hex_string().as_str(), - ]) - .set(result.metadata.timestamp as f64); - } - 1 => { - let result = chain - .pragma - .perpFeeds(feed_id_as_calldata) - .call() - .await - .expect("failed to retrieve spot perp feed"); - EVM_TIME_SINCE_LAST_FEED_UPDATE - .with_label_values(&[ - chain.name.as_str(), - feed.to_hex_string().as_str(), - ]) - .set(result.metadata.timestamp as f64); - } - va => { - return Err(MonitoringError::Evm(format!( - "unknown variant {va} for main type Unique" - ))) - } - }, - 1 => match feed.variant { - 0 => { - let result = chain - .pragma - .twapFeeds(feed_id_as_calldata) - .call() - .await - .expect("failed to retrieve twap feed"); - EVM_TIME_SINCE_LAST_FEED_UPDATE - .with_label_values(&[ - chain.name.as_str(), - feed.to_hex_string().as_str(), - ]) - .set(result.metadata.timestamp as f64); - } - va => { - return Err(MonitoringError::Evm(format!( - "unknown variant {va} for main type Twap" - ))) - } - }, - 2 => match feed.variant { - 0 => { - let result = chain - .pragma - .twapFeeds(feed_id_as_calldata) - .call() - .await - .expect("failed to retrieve twap feed"); - EVM_TIME_SINCE_LAST_FEED_UPDATE - .with_label_values(&[ - chain.name.as_str(), - feed.to_hex_string().as_str(), - ]) - .set(result.metadata.timestamp as f64); - } - va => { - return Err(MonitoringError::Evm(format!( - "unknown variant {va} for main type Realized Volatility" - ))) - } - }, - va => { - return Err(MonitoringError::Evm(format!( - "unknown variant {va} for main type Unique" - ))) - } - }; + let feed_handler = FeedType::try_from(feed.feed_id)?; + feed_handler.update_data(chain, feed).await?; } } From 8a44b8f685a9fe8d7c8be5a693e967dc6d8958b5 Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Fri, 11 Oct 2024 17:18:41 +0200 Subject: [PATCH 14/31] Update evm.rs --- src/processing/evm.rs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/processing/evm.rs b/src/processing/evm.rs index b33f3af..018170a 100644 --- a/src/processing/evm.rs +++ b/src/processing/evm.rs @@ -1,4 +1,5 @@ use std::sync::Arc; +use std::time::{SystemTime, UNIX_EPOCH}; use alloy::hex::FromHex; use alloy::primitives::FixedBytes; @@ -85,7 +86,7 @@ impl Variant for UniqueVariant { .expect("failed to retrieve spot median feed"); EVM_TIME_SINCE_LAST_FEED_UPDATE .with_label_values(&[chain.name.as_str(), feed_id.to_hex_string().as_str()]) - .set(result.metadata.timestamp as f64); + .set(get_time_diff(result.metadata.timestamp)); Ok(()) } UniqueVariant::PerpMedian => { @@ -98,7 +99,7 @@ impl Variant for UniqueVariant { .expect("failed to retrieve spot perp feed"); EVM_TIME_SINCE_LAST_FEED_UPDATE .with_label_values(&[chain.name.as_str(), feed_id.to_hex_string().as_str()]) - .set(result.metadata.timestamp as f64); + .set(get_time_diff(result.metadata.timestamp)); Ok(()) } } @@ -117,7 +118,7 @@ impl Variant for TwapVariant { .expect("failed to retrieve twap feed"); EVM_TIME_SINCE_LAST_FEED_UPDATE .with_label_values(&[chain.name.as_str(), feed_id.to_hex_string().as_str()]) - .set(result.metadata.timestamp as f64); + .set(get_time_diff(result.metadata.timestamp)); Ok(()) } } @@ -169,6 +170,15 @@ pub async fn get_all_feed_ids( Ok(feedids) } +fn get_time_diff(timestamp: u64) -> f64 { + let now = SystemTime::now() + .duration_since(UNIX_EPOCH) + .expect("Time went backwards") + .as_secs_f64(); + + now - timestamp as f64 +} + pub async fn check_feed_update_state() -> Result<(), MonitoringError> { let config = get_config(None).await; let evm_config = config.evm_configs(); From 2355b93a0e343dc4eede2ec62b4411de73261cc0 Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Fri, 11 Oct 2024 18:08:36 +0200 Subject: [PATCH 15/31] Update evm.rs --- src/processing/evm.rs | 56 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 45 insertions(+), 11 deletions(-) diff --git a/src/processing/evm.rs b/src/processing/evm.rs index 018170a..72c8b6b 100644 --- a/src/processing/evm.rs +++ b/src/processing/evm.rs @@ -15,7 +15,7 @@ use crate::config::{Config, EvmConfig}; use crate::constants::EVM_TIME_SINCE_LAST_FEED_UPDATE; use crate::{config::get_config, error::MonitoringError}; -#[derive(Clone)] +#[derive(Clone, PartialEq, Debug)] enum FeedType { Unique(UniqueVariant), Twap(TwapVariant), @@ -30,31 +30,35 @@ impl FeedType { } } -#[derive(Clone)] +#[derive(Clone, PartialEq, Debug)] enum UniqueVariant { SpotMedian, PerpMedian, } -#[derive(Clone)] +#[derive(Clone, PartialEq, Debug)] enum TwapVariant { SpotTwap = 0, } +// let main_type = (id & 0xFF00) / 0x100; +// let variant = id & 0x00FF; + impl TryFrom for FeedType { type Error = MonitoringError; fn try_from(feed_id: Felt) -> Result { - let feed_type = ((feed_id.to_bigint() & BigInt::from(65280)) / BigInt::from(256)) + // Retrieving FeedIdType by dividing as bitshifting on bigint is impossible + let feed_id_type = feed_id.to_bigint() / BigInt::from(2).pow(216); + let feed_type = ((feed_id_type.clone() & BigInt::from(65280)) / BigInt::from(256)) .to_u64() .ok_or(MonitoringError::Evm("invalid main type".to_string()))?; - let variant = - (feed_id.to_bigint() & BigInt::from(255)) - .to_u64() - .ok_or(MonitoringError::Evm(format!( - "invalid variant for main type {}", - feed_type - )))?; + let variant = (feed_id_type & BigInt::from(255)) + .to_u64() + .ok_or(MonitoringError::Evm(format!( + "invalid variant for main type {}", + feed_type + )))?; match feed_type { 0 => match variant { 0 => Ok(FeedType::Unique(UniqueVariant::SpotMedian)), @@ -196,3 +200,33 @@ pub async fn check_feed_update_state() -> Result<(), MonitoringError> { Ok(()) } + +#[cfg(test)] +mod tests { + use starknet::core::types::Felt; + + use crate::processing::evm::{TwapVariant, UniqueVariant}; + + use super::FeedType; + + #[test] + fn feed_id_parse_test() { + let unique_perp_median_feedid = + Felt::from_hex("0x100000000000000000000000000000000000000004254432f555344").unwrap(); + let unique_spot_median_feedid = Felt::from_hex("0x4254432f555344").unwrap(); + let twap_spot_twap_feedid = + Felt::from_hex("0x10000000000000000000000000000000000000000004254432f555344").unwrap(); + assert_eq!( + FeedType::try_from(unique_perp_median_feedid).unwrap(), + FeedType::Unique(UniqueVariant::PerpMedian) + ); + assert_eq!( + FeedType::try_from(unique_spot_median_feedid).unwrap(), + FeedType::Unique(UniqueVariant::SpotMedian) + ); + assert_eq!( + FeedType::try_from(twap_spot_twap_feedid).unwrap(), + FeedType::Twap(TwapVariant::SpotTwap) + ); + } +} From cbfb50ba79b114c2313a66af91ab8f43df980a37 Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Fri, 11 Oct 2024 18:12:00 +0200 Subject: [PATCH 16/31] Update evm.rs --- src/processing/evm.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/processing/evm.rs b/src/processing/evm.rs index 72c8b6b..22bdf25 100644 --- a/src/processing/evm.rs +++ b/src/processing/evm.rs @@ -38,7 +38,7 @@ enum UniqueVariant { #[derive(Clone, PartialEq, Debug)] enum TwapVariant { - SpotTwap = 0, + SpotTwap, } // let main_type = (id & 0xFF00) / 0x100; From 486d597f00817c9d308efbb54dbede39214d2e9e Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Fri, 11 Oct 2024 18:16:05 +0200 Subject: [PATCH 17/31] yes --- .env.example | 1 + src/processing/evm.rs | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.env.example b/.env.example index 5b53a1a..6bb94fc 100644 --- a/.env.example +++ b/.env.example @@ -22,6 +22,7 @@ FUTURE_PAIRS=BTC/USD,ETH/USD,BTC/USDT,ETH/USDT IGNORE_SOURCES=BITSTAMP,DEFILLAMA IGNORE_PUBLISHERS=BINANCE EVM_CONFIG_PATH="./evm_config.yaml" +FEED_REGISTRY_ADDRESS="" # Prometheus TELEGRAM_TOKEN= diff --git a/src/processing/evm.rs b/src/processing/evm.rs index 22bdf25..ff8828d 100644 --- a/src/processing/evm.rs +++ b/src/processing/evm.rs @@ -74,11 +74,11 @@ impl TryFrom for FeedType { } } -pub trait Variant: Clone + Send + Sync { +pub trait DataFetcher: Clone + Send + Sync { async fn update_data(&self, chain: &EvmConfig, feed_id: FeedId) -> Result<(), MonitoringError>; } -impl Variant for UniqueVariant { +impl DataFetcher for UniqueVariant { async fn update_data(&self, chain: &EvmConfig, feed_id: FeedId) -> Result<(), MonitoringError> { match self { UniqueVariant::SpotMedian => { @@ -110,7 +110,7 @@ impl Variant for UniqueVariant { } } -impl Variant for TwapVariant { +impl DataFetcher for TwapVariant { async fn update_data(&self, chain: &EvmConfig, feed_id: FeedId) -> Result<(), MonitoringError> { match self { TwapVariant::SpotTwap => { From fb3fd2a768b894c04f2f6c2266b2a5a20bccf027 Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Fri, 11 Oct 2024 18:31:09 +0200 Subject: [PATCH 18/31] Update evm.rs --- src/processing/evm.rs | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/src/processing/evm.rs b/src/processing/evm.rs index ff8828d..86400fd 100644 --- a/src/processing/evm.rs +++ b/src/processing/evm.rs @@ -15,6 +15,33 @@ use crate::config::{Config, EvmConfig}; use crate::constants::EVM_TIME_SINCE_LAST_FEED_UPDATE; use crate::{config::get_config, error::MonitoringError}; +#[derive(Clone)] +struct Feed { + feed_id: FeedId, + feed_type: FeedType, +} + +impl TryFrom for Feed { + type Error = MonitoringError; + + fn try_from(feed_id: FeedId) -> Result{ + let feed_type = FeedType::try_from(feed_id.feed_id)?; + Ok(Self { + feed_id, + feed_type: feed_type, + }) + } +} + +impl Feed { + async fn update_data(self, chain: &EvmConfig) -> Result<(), MonitoringError> { + match self.feed_type { + FeedType::Unique(unique_variant) => unique_variant.update_data(chain, self.feed_id).await, + FeedType::Twap(twap_variant) => twap_variant.update_data(chain, self.feed_id).await, + } + } +} + #[derive(Clone, PartialEq, Debug)] enum FeedType { Unique(UniqueVariant), @@ -192,9 +219,9 @@ pub async fn check_feed_update_state() -> Result<(), MonitoringError> { for chain in evm_config.iter() { let fl = feed_list.clone(); - for feed in fl.into_iter() { - let feed_handler = FeedType::try_from(feed.feed_id)?; - feed_handler.update_data(chain, feed).await?; + for feedid in fl.into_iter() { + let feed = Feed::try_from(feedid)?; + feed.update_data(chain).await?; } } From 2669d2877bae8573b0f97c153918e59388242e79 Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Fri, 11 Oct 2024 18:32:46 +0200 Subject: [PATCH 19/31] Update evm.rs --- src/processing/evm.rs | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/src/processing/evm.rs b/src/processing/evm.rs index 86400fd..b26b366 100644 --- a/src/processing/evm.rs +++ b/src/processing/evm.rs @@ -34,10 +34,10 @@ impl TryFrom for Feed { } impl Feed { - async fn update_data(self, chain: &EvmConfig) -> Result<(), MonitoringError> { + async fn get_latest_data(self, chain: &EvmConfig) -> Result<(), MonitoringError> { match self.feed_type { - FeedType::Unique(unique_variant) => unique_variant.update_data(chain, self.feed_id).await, - FeedType::Twap(twap_variant) => twap_variant.update_data(chain, self.feed_id).await, + FeedType::Unique(unique_variant) => unique_variant.get_latest_data(chain, self.feed_id).await, + FeedType::Twap(twap_variant) => twap_variant.get_latest_data(chain, self.feed_id).await, } } } @@ -48,15 +48,6 @@ enum FeedType { Twap(TwapVariant), } -impl FeedType { - async fn update_data(&self, chain: &EvmConfig, feed_id: FeedId) -> Result<(), MonitoringError> { - match self { - FeedType::Unique(unique_variant) => unique_variant.update_data(chain, feed_id).await, - FeedType::Twap(twap_variant) => twap_variant.update_data(chain, feed_id).await, - } - } -} - #[derive(Clone, PartialEq, Debug)] enum UniqueVariant { SpotMedian, @@ -102,11 +93,11 @@ impl TryFrom for FeedType { } pub trait DataFetcher: Clone + Send + Sync { - async fn update_data(&self, chain: &EvmConfig, feed_id: FeedId) -> Result<(), MonitoringError>; + async fn get_latest_data(&self, chain: &EvmConfig, feed_id: FeedId) -> Result<(), MonitoringError>; } impl DataFetcher for UniqueVariant { - async fn update_data(&self, chain: &EvmConfig, feed_id: FeedId) -> Result<(), MonitoringError> { + async fn get_latest_data(&self, chain: &EvmConfig, feed_id: FeedId) -> Result<(), MonitoringError> { match self { UniqueVariant::SpotMedian => { let result = chain @@ -138,7 +129,7 @@ impl DataFetcher for UniqueVariant { } impl DataFetcher for TwapVariant { - async fn update_data(&self, chain: &EvmConfig, feed_id: FeedId) -> Result<(), MonitoringError> { + async fn get_latest_data(&self, chain: &EvmConfig, feed_id: FeedId) -> Result<(), MonitoringError> { match self { TwapVariant::SpotTwap => { let result = chain @@ -221,7 +212,7 @@ pub async fn check_feed_update_state() -> Result<(), MonitoringError> { let fl = feed_list.clone(); for feedid in fl.into_iter() { let feed = Feed::try_from(feedid)?; - feed.update_data(chain).await?; + feed.get_latest_data(chain).await?; } } From ea2b344e06fb81c5682bf44a2fdb35d274092153 Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Fri, 11 Oct 2024 18:34:18 +0200 Subject: [PATCH 20/31] Update evm.rs --- src/processing/evm.rs | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/src/processing/evm.rs b/src/processing/evm.rs index b26b366..3c8acd1 100644 --- a/src/processing/evm.rs +++ b/src/processing/evm.rs @@ -51,7 +51,6 @@ enum FeedType { #[derive(Clone, PartialEq, Debug)] enum UniqueVariant { SpotMedian, - PerpMedian, } #[derive(Clone, PartialEq, Debug)] @@ -80,7 +79,6 @@ impl TryFrom for FeedType { match feed_type { 0 => match variant { 0 => Ok(FeedType::Unique(UniqueVariant::SpotMedian)), - 1 => Ok(FeedType::Unique(UniqueVariant::PerpMedian)), _ => unreachable!(), }, 1 => match variant { @@ -111,19 +109,6 @@ impl DataFetcher for UniqueVariant { .set(get_time_diff(result.metadata.timestamp)); Ok(()) } - UniqueVariant::PerpMedian => { - //TODO: must be changed with real fn - let result = chain - .pragma - .perpFeeds(feed_id.to_calldata()?) - .call() - .await - .expect("failed to retrieve spot perp feed"); - EVM_TIME_SINCE_LAST_FEED_UPDATE - .with_label_values(&[chain.name.as_str(), feed_id.to_hex_string().as_str()]) - .set(get_time_diff(result.metadata.timestamp)); - Ok(()) - } } } } @@ -229,15 +214,9 @@ mod tests { #[test] fn feed_id_parse_test() { - let unique_perp_median_feedid = - Felt::from_hex("0x100000000000000000000000000000000000000004254432f555344").unwrap(); let unique_spot_median_feedid = Felt::from_hex("0x4254432f555344").unwrap(); let twap_spot_twap_feedid = Felt::from_hex("0x10000000000000000000000000000000000000000004254432f555344").unwrap(); - assert_eq!( - FeedType::try_from(unique_perp_median_feedid).unwrap(), - FeedType::Unique(UniqueVariant::PerpMedian) - ); assert_eq!( FeedType::try_from(unique_spot_median_feedid).unwrap(), FeedType::Unique(UniqueVariant::SpotMedian) From a06ecc3dd8fe4eaeb1fc501ff158baa19184620f Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Fri, 11 Oct 2024 18:36:06 +0200 Subject: [PATCH 21/31] Update evm.rs --- src/processing/evm.rs | 37 +------------------------------------ 1 file changed, 1 insertion(+), 36 deletions(-) diff --git a/src/processing/evm.rs b/src/processing/evm.rs index 3c8acd1..cf31ef3 100644 --- a/src/processing/evm.rs +++ b/src/processing/evm.rs @@ -37,7 +37,6 @@ impl Feed { async fn get_latest_data(self, chain: &EvmConfig) -> Result<(), MonitoringError> { match self.feed_type { FeedType::Unique(unique_variant) => unique_variant.get_latest_data(chain, self.feed_id).await, - FeedType::Twap(twap_variant) => twap_variant.get_latest_data(chain, self.feed_id).await, } } } @@ -45,7 +44,6 @@ impl Feed { #[derive(Clone, PartialEq, Debug)] enum FeedType { Unique(UniqueVariant), - Twap(TwapVariant), } #[derive(Clone, PartialEq, Debug)] @@ -53,11 +51,6 @@ enum UniqueVariant { SpotMedian, } -#[derive(Clone, PartialEq, Debug)] -enum TwapVariant { - SpotTwap, -} - // let main_type = (id & 0xFF00) / 0x100; // let variant = id & 0x00FF; @@ -81,10 +74,6 @@ impl TryFrom for FeedType { 0 => Ok(FeedType::Unique(UniqueVariant::SpotMedian)), _ => unreachable!(), }, - 1 => match variant { - 0 => Ok(FeedType::Twap(TwapVariant::SpotTwap)), - _ => unreachable!(), - }, _ => unreachable!(), } } @@ -113,24 +102,6 @@ impl DataFetcher for UniqueVariant { } } -impl DataFetcher for TwapVariant { - async fn get_latest_data(&self, chain: &EvmConfig, feed_id: FeedId) -> Result<(), MonitoringError> { - match self { - TwapVariant::SpotTwap => { - let result = chain - .pragma - .twapFeeds(feed_id.to_calldata()?) - .call() - .await - .expect("failed to retrieve twap feed"); - EVM_TIME_SINCE_LAST_FEED_UPDATE - .with_label_values(&[chain.name.as_str(), feed_id.to_hex_string().as_str()]) - .set(get_time_diff(result.metadata.timestamp)); - Ok(()) - } - } - } -} #[derive(Clone)] pub struct FeedId { @@ -208,22 +179,16 @@ pub async fn check_feed_update_state() -> Result<(), MonitoringError> { mod tests { use starknet::core::types::Felt; - use crate::processing::evm::{TwapVariant, UniqueVariant}; + use crate::processing::evm::UniqueVariant; use super::FeedType; #[test] fn feed_id_parse_test() { let unique_spot_median_feedid = Felt::from_hex("0x4254432f555344").unwrap(); - let twap_spot_twap_feedid = - Felt::from_hex("0x10000000000000000000000000000000000000000004254432f555344").unwrap(); assert_eq!( FeedType::try_from(unique_spot_median_feedid).unwrap(), FeedType::Unique(UniqueVariant::SpotMedian) ); - assert_eq!( - FeedType::try_from(twap_spot_twap_feedid).unwrap(), - FeedType::Twap(TwapVariant::SpotTwap) - ); } } From 054b226be51c61e50dedf0d9e12861389bb743c1 Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Fri, 11 Oct 2024 18:39:08 +0200 Subject: [PATCH 22/31] Update evm.rs --- src/processing/evm.rs | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/processing/evm.rs b/src/processing/evm.rs index cf31ef3..757c76b 100644 --- a/src/processing/evm.rs +++ b/src/processing/evm.rs @@ -25,7 +25,7 @@ impl TryFrom for Feed { type Error = MonitoringError; fn try_from(feed_id: FeedId) -> Result{ - let feed_type = FeedType::try_from(feed_id.feed_id)?; + let feed_type = FeedType::try_from(feed_id.0)?; Ok(Self { feed_id, feed_type: feed_type, @@ -104,22 +104,20 @@ impl DataFetcher for UniqueVariant { #[derive(Clone)] -pub struct FeedId { - pub feed_id: Felt, -} +pub struct FeedId(Felt); impl FeedId { pub fn new(feed_id: Felt) -> Self { - Self { feed_id } + Self(feed_id) } pub fn to_calldata(&self) -> Result, MonitoringError> { - alloy::sol_types::private::FixedBytes::from_hex(self.feed_id.to_hex_string()) + alloy::sol_types::private::FixedBytes::from_hex(self.to_hex_string()) .map_err(|e| MonitoringError::Evm(e.to_string())) } pub fn to_hex_string(&self) -> String { - self.feed_id.to_hex_string() + self.0.to_hex_string() } } From 92eda7d416d86c0fe0976fc56e96cb67fa800b96 Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Fri, 11 Oct 2024 18:40:04 +0200 Subject: [PATCH 23/31] Update evm.rs --- src/processing/evm.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/processing/evm.rs b/src/processing/evm.rs index 757c76b..8038f2a 100644 --- a/src/processing/evm.rs +++ b/src/processing/evm.rs @@ -147,10 +147,7 @@ pub async fn get_all_feed_ids( } fn get_time_diff(timestamp: u64) -> f64 { - let now = SystemTime::now() - .duration_since(UNIX_EPOCH) - .expect("Time went backwards") - .as_secs_f64(); + let now = chrono::Utc::now().timestamp() as f64; now - timestamp as f64 } From 30977eb33531b75521d509ffea907cceed908ecf Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Fri, 11 Oct 2024 18:49:33 +0200 Subject: [PATCH 24/31] yy --- src/cairo/mod.rs | 1 + src/cairo/types.rs | 124 ++++++++++++++++++++++++++++++++++++++++ src/main.rs | 2 + src/processing/evm.rs | 130 ++---------------------------------------- src/utils.rs | 7 +++ 5 files changed, 139 insertions(+), 125 deletions(-) create mode 100644 src/cairo/mod.rs create mode 100644 src/cairo/types.rs diff --git a/src/cairo/mod.rs b/src/cairo/mod.rs new file mode 100644 index 0000000..cd40856 --- /dev/null +++ b/src/cairo/mod.rs @@ -0,0 +1 @@ +pub mod types; diff --git a/src/cairo/types.rs b/src/cairo/types.rs new file mode 100644 index 0000000..5802c28 --- /dev/null +++ b/src/cairo/types.rs @@ -0,0 +1,124 @@ +use alloy::{hex::FromHex, primitives::FixedBytes}; +use bigdecimal::ToPrimitive; +use num_bigint::BigInt; +use starknet::core::types::Felt; + +use crate::{ + config::EvmConfig, constants::EVM_TIME_SINCE_LAST_FEED_UPDATE, error::MonitoringError, + utils::get_time_diff, +}; + +#[derive(Clone)] +pub struct Feed { + feed_id: FeedId, + feed_type: FeedType, +} + +impl TryFrom for Feed { + type Error = MonitoringError; + + fn try_from(feed_id: FeedId) -> Result { + let feed_type = FeedType::try_from(feed_id.0)?; + Ok(Self { + feed_id, + feed_type, + }) + } +} + +impl Feed { + pub async fn get_latest_data(self, chain: &EvmConfig) -> Result<(), MonitoringError> { + match self.feed_type { + FeedType::Unique(unique_variant) => { + unique_variant.get_latest_data(chain, self.feed_id).await + } + } + } +} + +#[derive(Clone, PartialEq, Debug)] +pub enum FeedType { + Unique(UniqueVariant), +} + +#[derive(Clone, PartialEq, Debug)] +pub enum UniqueVariant { + SpotMedian, +} + +// let main_type = (id & 0xFF00) / 0x100; +// let variant = id & 0x00FF; + +impl TryFrom for FeedType { + type Error = MonitoringError; + + fn try_from(feed_id: Felt) -> Result { + // Retrieving FeedIdType by dividing as bitshifting on bigint is impossible + let feed_id_type = feed_id.to_bigint() / BigInt::from(2).pow(216); + let feed_type = ((feed_id_type.clone() & BigInt::from(65280)) / BigInt::from(256)) + .to_u64() + .ok_or(MonitoringError::Evm("invalid main type".to_string()))?; + let variant = (feed_id_type & BigInt::from(255)) + .to_u64() + .ok_or(MonitoringError::Evm(format!( + "invalid variant for main type {}", + feed_type + )))?; + match feed_type { + 0 => match variant { + 0 => Ok(FeedType::Unique(UniqueVariant::SpotMedian)), + _ => unreachable!(), + }, + _ => unreachable!(), + } + } +} + +pub trait DataFetcher: Clone + Send + Sync { + async fn get_latest_data( + &self, + chain: &EvmConfig, + feed_id: FeedId, + ) -> Result<(), MonitoringError>; +} + +impl DataFetcher for UniqueVariant { + async fn get_latest_data( + &self, + chain: &EvmConfig, + feed_id: FeedId, + ) -> Result<(), MonitoringError> { + match self { + UniqueVariant::SpotMedian => { + let result = chain + .pragma + .spotMedianFeeds(feed_id.to_calldata()?) + .call() + .await + .expect("failed to retrieve spot median feed"); + EVM_TIME_SINCE_LAST_FEED_UPDATE + .with_label_values(&[chain.name.as_str(), feed_id.to_hex_string().as_str()]) + .set(get_time_diff(result.metadata.timestamp)); + Ok(()) + } + } + } +} + +#[derive(Clone)] +pub struct FeedId(Felt); + +impl FeedId { + pub fn new(feed_id: Felt) -> Self { + Self(feed_id) + } + + pub fn to_calldata(&self) -> Result, MonitoringError> { + alloy::sol_types::private::FixedBytes::from_hex(self.to_hex_string()) + .map_err(|e| MonitoringError::Evm(e.to_string())) + } + + pub fn to_hex_string(&self) -> String { + self.0.to_hex_string() + } +} diff --git a/src/main.rs b/src/main.rs index 4ba6fda..ad9c4a0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -23,6 +23,8 @@ mod types; mod utils; // Evm Config utils mod evm; +// Cairo utils +mod cairo; #[cfg(test)] mod tests; diff --git a/src/processing/evm.rs b/src/processing/evm.rs index 8038f2a..0134606 100644 --- a/src/processing/evm.rs +++ b/src/processing/evm.rs @@ -1,126 +1,14 @@ -use std::sync::Arc; -use std::time::{SystemTime, UNIX_EPOCH}; - -use alloy::hex::FromHex; -use alloy::primitives::FixedBytes; use arc_swap::Guard; -use bigdecimal::ToPrimitive; -use num_bigint::BigInt; -use starknet::core::types::{BlockId, BlockTag, Felt, FunctionCall}; +use starknet::core::types::{BlockId, BlockTag, FunctionCall}; use starknet::macros::selector; use starknet::providers::jsonrpc::HttpTransport; use starknet::providers::{JsonRpcClient, Provider}; +use std::sync::Arc; -use crate::config::{Config, EvmConfig}; -use crate::constants::EVM_TIME_SINCE_LAST_FEED_UPDATE; +use crate::cairo::types::{Feed, FeedId}; +use crate::config::Config; use crate::{config::get_config, error::MonitoringError}; -#[derive(Clone)] -struct Feed { - feed_id: FeedId, - feed_type: FeedType, -} - -impl TryFrom for Feed { - type Error = MonitoringError; - - fn try_from(feed_id: FeedId) -> Result{ - let feed_type = FeedType::try_from(feed_id.0)?; - Ok(Self { - feed_id, - feed_type: feed_type, - }) - } -} - -impl Feed { - async fn get_latest_data(self, chain: &EvmConfig) -> Result<(), MonitoringError> { - match self.feed_type { - FeedType::Unique(unique_variant) => unique_variant.get_latest_data(chain, self.feed_id).await, - } - } -} - -#[derive(Clone, PartialEq, Debug)] -enum FeedType { - Unique(UniqueVariant), -} - -#[derive(Clone, PartialEq, Debug)] -enum UniqueVariant { - SpotMedian, -} - -// let main_type = (id & 0xFF00) / 0x100; -// let variant = id & 0x00FF; - -impl TryFrom for FeedType { - type Error = MonitoringError; - - fn try_from(feed_id: Felt) -> Result { - // Retrieving FeedIdType by dividing as bitshifting on bigint is impossible - let feed_id_type = feed_id.to_bigint() / BigInt::from(2).pow(216); - let feed_type = ((feed_id_type.clone() & BigInt::from(65280)) / BigInt::from(256)) - .to_u64() - .ok_or(MonitoringError::Evm("invalid main type".to_string()))?; - let variant = (feed_id_type & BigInt::from(255)) - .to_u64() - .ok_or(MonitoringError::Evm(format!( - "invalid variant for main type {}", - feed_type - )))?; - match feed_type { - 0 => match variant { - 0 => Ok(FeedType::Unique(UniqueVariant::SpotMedian)), - _ => unreachable!(), - }, - _ => unreachable!(), - } - } -} - -pub trait DataFetcher: Clone + Send + Sync { - async fn get_latest_data(&self, chain: &EvmConfig, feed_id: FeedId) -> Result<(), MonitoringError>; -} - -impl DataFetcher for UniqueVariant { - async fn get_latest_data(&self, chain: &EvmConfig, feed_id: FeedId) -> Result<(), MonitoringError> { - match self { - UniqueVariant::SpotMedian => { - let result = chain - .pragma - .spotMedianFeeds(feed_id.to_calldata()?) - .call() - .await - .expect("failed to retrieve spot median feed"); - EVM_TIME_SINCE_LAST_FEED_UPDATE - .with_label_values(&[chain.name.as_str(), feed_id.to_hex_string().as_str()]) - .set(get_time_diff(result.metadata.timestamp)); - Ok(()) - } - } - } -} - - -#[derive(Clone)] -pub struct FeedId(Felt); - -impl FeedId { - pub fn new(feed_id: Felt) -> Self { - Self(feed_id) - } - - pub fn to_calldata(&self) -> Result, MonitoringError> { - alloy::sol_types::private::FixedBytes::from_hex(self.to_hex_string()) - .map_err(|e| MonitoringError::Evm(e.to_string())) - } - - pub fn to_hex_string(&self) -> String { - self.0.to_hex_string() - } -} - pub async fn get_all_feed_ids( config: &Guard>, client: &Arc>, @@ -146,12 +34,6 @@ pub async fn get_all_feed_ids( Ok(feedids) } -fn get_time_diff(timestamp: u64) -> f64 { - let now = chrono::Utc::now().timestamp() as f64; - - now - timestamp as f64 -} - pub async fn check_feed_update_state() -> Result<(), MonitoringError> { let config = get_config(None).await; let evm_config = config.evm_configs(); @@ -174,9 +56,7 @@ pub async fn check_feed_update_state() -> Result<(), MonitoringError> { mod tests { use starknet::core::types::Felt; - use crate::processing::evm::UniqueVariant; - - use super::FeedType; + use crate::cairo::types::{FeedType, UniqueVariant}; #[test] fn feed_id_parse_test() { diff --git a/src/utils.rs b/src/utils.rs index 2f0225f..cb5dc2a 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -57,3 +57,10 @@ pub(crate) fn log_monitoring_results(results: HashMap bool { LONG_TAIL_ASSETS.contains_key(pair) } + +#[allow(dead_code)] +pub fn get_time_diff(timestamp: u64) -> f64 { + let now = chrono::Utc::now().timestamp() as f64; + + now - timestamp as f64 +} From 2bd7bd4df4b63385e5a62ee0697d1b500425a2be Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Fri, 11 Oct 2024 18:58:11 +0200 Subject: [PATCH 25/31] d --- src/cairo/types.rs | 14 +++++--------- src/processing/evm.rs | 9 +++++++-- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/cairo/types.rs b/src/cairo/types.rs index 5802c28..b9fa015 100644 --- a/src/cairo/types.rs +++ b/src/cairo/types.rs @@ -4,8 +4,7 @@ use num_bigint::BigInt; use starknet::core::types::Felt; use crate::{ - config::EvmConfig, constants::EVM_TIME_SINCE_LAST_FEED_UPDATE, error::MonitoringError, - utils::get_time_diff, + config::EvmConfig, error::MonitoringError, }; #[derive(Clone)] @@ -27,7 +26,7 @@ impl TryFrom for Feed { } impl Feed { - pub async fn get_latest_data(self, chain: &EvmConfig) -> Result<(), MonitoringError> { + pub async fn get_latest_data(self, chain: &EvmConfig) -> Result { match self.feed_type { FeedType::Unique(unique_variant) => { unique_variant.get_latest_data(chain, self.feed_id).await @@ -79,7 +78,7 @@ pub trait DataFetcher: Clone + Send + Sync { &self, chain: &EvmConfig, feed_id: FeedId, - ) -> Result<(), MonitoringError>; + ) -> Result; } impl DataFetcher for UniqueVariant { @@ -87,7 +86,7 @@ impl DataFetcher for UniqueVariant { &self, chain: &EvmConfig, feed_id: FeedId, - ) -> Result<(), MonitoringError> { + ) -> Result { match self { UniqueVariant::SpotMedian => { let result = chain @@ -96,10 +95,7 @@ impl DataFetcher for UniqueVariant { .call() .await .expect("failed to retrieve spot median feed"); - EVM_TIME_SINCE_LAST_FEED_UPDATE - .with_label_values(&[chain.name.as_str(), feed_id.to_hex_string().as_str()]) - .set(get_time_diff(result.metadata.timestamp)); - Ok(()) + Ok(result.metadata.timestamp) } } } diff --git a/src/processing/evm.rs b/src/processing/evm.rs index 0134606..7746c1b 100644 --- a/src/processing/evm.rs +++ b/src/processing/evm.rs @@ -7,6 +7,8 @@ use std::sync::Arc; use crate::cairo::types::{Feed, FeedId}; use crate::config::Config; +use crate::constants::EVM_TIME_SINCE_LAST_FEED_UPDATE; +use crate::utils::get_time_diff; use crate::{config::get_config, error::MonitoringError}; pub async fn get_all_feed_ids( @@ -44,8 +46,11 @@ pub async fn check_feed_update_state() -> Result<(), MonitoringError> { for chain in evm_config.iter() { let fl = feed_list.clone(); for feedid in fl.into_iter() { - let feed = Feed::try_from(feedid)?; - feed.get_latest_data(chain).await?; + let feed = Feed::try_from(feedid.clone())?; + let latest_data = feed.get_latest_data(chain).await?; + EVM_TIME_SINCE_LAST_FEED_UPDATE + .with_label_values(&[chain.name.as_str(), feedid.to_hex_string().as_str()]) + .set(get_time_diff(latest_data)); } } From ad0006b619ba8c46f004021b6571530bb67c1f88 Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Fri, 11 Oct 2024 18:59:57 +0200 Subject: [PATCH 26/31] Update evm_config.yaml --- evm_config.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/evm_config.yaml b/evm_config.yaml index 7c23383..53e6e8b 100644 --- a/evm_config.yaml +++ b/evm_config.yaml @@ -1,13 +1,13 @@ mainnet: - rpc_url: "https://mainnet.infura.io/v3/${INFURA_PROJECT_ID}" + rpc_url: "https://rpc.mevblocker.io" pragma_contract_address: "" sepolia: - rpc_url: "https://sepolia.infura.io/v3/${INFURA_PROJECT_ID}" + rpc_url: "https://sepolia.drpc.org" pragma_contract_address: "" holesky: - rpc_url: "https://holesky.infura.io/v3/${INFURA_PROJECT_ID}" + rpc_url: "https://holesky.drpc.org" pragma_contract_address: "0x50fEbf423F5Fc61C2512bb5F9c6B1878d37C50DF" bsc: From d8e84d6d8a57d437f18be40481d143f4da9d87bc Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Fri, 11 Oct 2024 19:04:32 +0200 Subject: [PATCH 27/31] s --- src/cairo/types.rs | 12 +++++------- src/processing/evm.rs | 2 +- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/cairo/types.rs b/src/cairo/types.rs index b9fa015..04d35da 100644 --- a/src/cairo/types.rs +++ b/src/cairo/types.rs @@ -3,9 +3,7 @@ use bigdecimal::ToPrimitive; use num_bigint::BigInt; use starknet::core::types::Felt; -use crate::{ - config::EvmConfig, error::MonitoringError, -}; +use crate::{config::EvmConfig, error::MonitoringError}; #[derive(Clone)] pub struct Feed { @@ -26,10 +24,10 @@ impl TryFrom for Feed { } impl Feed { - pub async fn get_latest_data(self, chain: &EvmConfig) -> Result { + pub async fn get_latest_update_timestamp(self, chain: &EvmConfig) -> Result { match self.feed_type { FeedType::Unique(unique_variant) => { - unique_variant.get_latest_data(chain, self.feed_id).await + unique_variant.get_latest_update_timestamp(chain, self.feed_id).await } } } @@ -74,7 +72,7 @@ impl TryFrom for FeedType { } pub trait DataFetcher: Clone + Send + Sync { - async fn get_latest_data( + async fn get_latest_update_timestamp( &self, chain: &EvmConfig, feed_id: FeedId, @@ -82,7 +80,7 @@ pub trait DataFetcher: Clone + Send + Sync { } impl DataFetcher for UniqueVariant { - async fn get_latest_data( + async fn get_latest_update_timestamp( &self, chain: &EvmConfig, feed_id: FeedId, diff --git a/src/processing/evm.rs b/src/processing/evm.rs index 7746c1b..ea6d7c1 100644 --- a/src/processing/evm.rs +++ b/src/processing/evm.rs @@ -47,7 +47,7 @@ pub async fn check_feed_update_state() -> Result<(), MonitoringError> { let fl = feed_list.clone(); for feedid in fl.into_iter() { let feed = Feed::try_from(feedid.clone())?; - let latest_data = feed.get_latest_data(chain).await?; + let latest_data = feed.get_latest_update_timestamp(chain).await?; EVM_TIME_SINCE_LAST_FEED_UPDATE .with_label_values(&[chain.name.as_str(), feedid.to_hex_string().as_str()]) .set(get_time_diff(latest_data)); From c20eab604d663eb7060789fe7784664cb9f3fb02 Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Fri, 11 Oct 2024 19:05:23 +0200 Subject: [PATCH 28/31] s --- src/cairo/types.rs | 5 +---- src/processing/evm.rs | 4 ++-- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/cairo/types.rs b/src/cairo/types.rs index 04d35da..7b74339 100644 --- a/src/cairo/types.rs +++ b/src/cairo/types.rs @@ -16,10 +16,7 @@ impl TryFrom for Feed { fn try_from(feed_id: FeedId) -> Result { let feed_type = FeedType::try_from(feed_id.0)?; - Ok(Self { - feed_id, - feed_type, - }) + Ok(Self {feed_id, feed_type }) } } diff --git a/src/processing/evm.rs b/src/processing/evm.rs index ea6d7c1..33f74ab 100644 --- a/src/processing/evm.rs +++ b/src/processing/evm.rs @@ -49,8 +49,8 @@ pub async fn check_feed_update_state() -> Result<(), MonitoringError> { let feed = Feed::try_from(feedid.clone())?; let latest_data = feed.get_latest_update_timestamp(chain).await?; EVM_TIME_SINCE_LAST_FEED_UPDATE - .with_label_values(&[chain.name.as_str(), feedid.to_hex_string().as_str()]) - .set(get_time_diff(latest_data)); + .with_label_values(&[chain.name.as_str(), feedid.to_hex_string().as_str()]) + .set(get_time_diff(latest_data)); } } From 7bc7caa730dd05d6ba918f428700416016279007 Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Fri, 11 Oct 2024 19:06:45 +0200 Subject: [PATCH 29/31] f adel --- src/processing/evm.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/processing/evm.rs b/src/processing/evm.rs index 33f74ab..f34850e 100644 --- a/src/processing/evm.rs +++ b/src/processing/evm.rs @@ -47,10 +47,10 @@ pub async fn check_feed_update_state() -> Result<(), MonitoringError> { let fl = feed_list.clone(); for feedid in fl.into_iter() { let feed = Feed::try_from(feedid.clone())?; - let latest_data = feed.get_latest_update_timestamp(chain).await?; + let latest_update_timestamp = feed.get_latest_update_timestamp(chain).await?; EVM_TIME_SINCE_LAST_FEED_UPDATE .with_label_values(&[chain.name.as_str(), feedid.to_hex_string().as_str()]) - .set(get_time_diff(latest_data)); + .set(get_time_diff(latest_update_timestamp)); } } From 03893494c98687303decceb06cfcaa5d7b85dbe7 Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Fri, 11 Oct 2024 19:08:37 +0200 Subject: [PATCH 30/31] JE SAIS --- src/cairo/types.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/cairo/types.rs b/src/cairo/types.rs index 7b74339..d10d65a 100644 --- a/src/cairo/types.rs +++ b/src/cairo/types.rs @@ -16,7 +16,7 @@ impl TryFrom for Feed { fn try_from(feed_id: FeedId) -> Result { let feed_type = FeedType::try_from(feed_id.0)?; - Ok(Self {feed_id, feed_type }) + Ok(Self { feed_id, feed_type }) } } @@ -24,7 +24,9 @@ impl Feed { pub async fn get_latest_update_timestamp(self, chain: &EvmConfig) -> Result { match self.feed_type { FeedType::Unique(unique_variant) => { - unique_variant.get_latest_update_timestamp(chain, self.feed_id).await + unique_variant + .get_latest_update_timestamp(chain, self.feed_id) + .await } } } From d466840245b289e1b60ca19f8059d9a38c4b9fbb Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Fri, 11 Oct 2024 19:11:37 +0200 Subject: [PATCH 31/31] moai --- src/cairo/types.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/cairo/types.rs b/src/cairo/types.rs index d10d65a..f1e75b5 100644 --- a/src/cairo/types.rs +++ b/src/cairo/types.rs @@ -21,7 +21,10 @@ impl TryFrom for Feed { } impl Feed { - pub async fn get_latest_update_timestamp(self, chain: &EvmConfig) -> Result { + pub async fn get_latest_update_timestamp( + self, + chain: &EvmConfig, + ) -> Result { match self.feed_type { FeedType::Unique(unique_variant) => { unique_variant