criterion 1.6.4.1 → 1.6.5.0
raw patch · 41 files changed
+7650/−7639 lines, 41 filesdep −parsecdep −timedep −vector-algorithmsdep ~aesondep ~deepseqsetup-changedPVP ok
version bump matches the API change (PVP)
Dependencies removed: parsec, time, vector-algorithms
Dependency ranges changed: aeson, deepseq
API changes (from Hackage documentation)
Files
- Criterion.hs +71/−71
- Criterion/Analysis.hs +261/−261
- Criterion/EmbeddedData.hs +29/−29
- Criterion/IO.hs +119/−119
- Criterion/IO/Printf.hs +102/−102
- Criterion/Internal.hs +241/−241
- Criterion/Main.hs +284/−284
- Criterion/Main/Options.hs +249/−249
- Criterion/Monad.hs +56/−56
- Criterion/Monad/Internal.hs +45/−45
- Criterion/Report.hs +313/−313
- Criterion/Types.hs +336/−336
- LICENSE +26/−26
- README.markdown +660/−660
- Setup.lhs +3/−3
- app/Options.hs +51/−51
- app/Report.hs +32/−32
- changelog.md +386/−381
- criterion.cabal +204/−208
- examples/BadReadFile.hs +17/−17
- examples/Comparison.hs +7/−7
- examples/ConduitVsPipes.hs +34/−34
- examples/ExtensibleCLI.hs +38/−38
- examples/Fibber.hs +23/−23
- examples/GoodReadFile.hs +12/−12
- examples/Judy.hs +47/−47
- examples/LICENSE +26/−26
- examples/Maps.hs +82/−82
- examples/Overhead.hs +35/−35
- examples/Quotes.hs +12/−12
- examples/criterion-examples.cabal +135/−137
- templates/criterion.css +143/−143
- templates/criterion.js +870/−870
- templates/default.tpl +139/−139
- templates/json.tpl +1/−1
- tests/Cleanup.hs +123/−111
- tests/Properties.hs +34/−34
- tests/Sanity.hs +55/−55
- tests/Tests.hs +45/−45
- www/fibber.html +1159/−1159
- www/report.html +1145/−1145
Criterion.hs view
@@ -1,71 +1,71 @@-{-# LANGUAGE RecordWildCards #-} --- | --- Module : Criterion --- Copyright : (c) 2009-2014 Bryan O'Sullivan --- --- License : BSD-style --- Maintainer : bos@serpentine.com --- Stability : experimental --- Portability : GHC --- --- Core benchmarking code. - -module Criterion - ( - -- * Benchmarkable code - Benchmarkable - -- * Creating a benchmark suite - , Benchmark - , env - , envWithCleanup - , perBatchEnv - , perBatchEnvWithCleanup - , perRunEnv - , perRunEnvWithCleanup - , toBenchmarkable - , bench - , bgroup - -- ** Running a benchmark - , nf - , whnf - , nfIO - , whnfIO - , nfAppIO - , whnfAppIO - -- * For interactive use - , benchmark - , benchmarkWith - , benchmark' - , benchmarkWith' - ) where - -import Control.Monad (void) -import Criterion.IO.Printf (note) -import Criterion.Internal (runAndAnalyseOne) -import Criterion.Main.Options (defaultConfig) -import Criterion.Measurement (initializeTime) -import Criterion.Monad (withConfig) -import Criterion.Types - --- | Run a benchmark interactively, and analyse its performance. -benchmark :: Benchmarkable -> IO () -benchmark bm = void $ benchmark' bm - --- | Run a benchmark interactively, analyse its performance, and --- return the analysis. -benchmark' :: Benchmarkable -> IO Report -benchmark' = benchmarkWith' defaultConfig - --- | Run a benchmark interactively, and analyse its performance. -benchmarkWith :: Config -> Benchmarkable -> IO () -benchmarkWith cfg bm = void $ benchmarkWith' cfg bm - --- | Run a benchmark interactively, analyse its performance, and --- return the analysis. -benchmarkWith' :: Config -> Benchmarkable -> IO Report -benchmarkWith' cfg bm = do - initializeTime - withConfig cfg $ do - _ <- note "benchmarking...\n" - Analysed rpt <- runAndAnalyseOne 0 "function" bm - return rpt +{-# LANGUAGE RecordWildCards #-}+-- |+-- Module : Criterion+-- Copyright : (c) 2009-2014 Bryan O'Sullivan+--+-- License : BSD-style+-- Maintainer : bos@serpentine.com+-- Stability : experimental+-- Portability : GHC+--+-- Core benchmarking code.++module Criterion+ (+ -- * Benchmarkable code+ Benchmarkable+ -- * Creating a benchmark suite+ , Benchmark+ , env+ , envWithCleanup+ , perBatchEnv+ , perBatchEnvWithCleanup+ , perRunEnv+ , perRunEnvWithCleanup+ , toBenchmarkable+ , bench+ , bgroup+ -- ** Running a benchmark+ , nf+ , whnf+ , nfIO+ , whnfIO+ , nfAppIO+ , whnfAppIO+ -- * For interactive use+ , benchmark+ , benchmarkWith+ , benchmark'+ , benchmarkWith'+ ) where++import Control.Monad (void)+import Criterion.IO.Printf (note)+import Criterion.Internal (runAndAnalyseOne)+import Criterion.Main.Options (defaultConfig)+import Criterion.Measurement (initializeTime)+import Criterion.Monad (withConfig)+import Criterion.Types++-- | Run a benchmark interactively, and analyse its performance.+benchmark :: Benchmarkable -> IO ()+benchmark bm = void $ benchmark' bm++-- | Run a benchmark interactively, analyse its performance, and+-- return the analysis.+benchmark' :: Benchmarkable -> IO Report+benchmark' = benchmarkWith' defaultConfig++-- | Run a benchmark interactively, and analyse its performance.+benchmarkWith :: Config -> Benchmarkable -> IO ()+benchmarkWith cfg bm = void $ benchmarkWith' cfg bm++-- | Run a benchmark interactively, analyse its performance, and+-- return the analysis.+benchmarkWith' :: Config -> Benchmarkable -> IO Report+benchmarkWith' cfg bm = do+ initializeTime+ withConfig cfg $ do+ _ <- note "benchmarking...\n"+ Analysed rpt <- runAndAnalyseOne 0 "function" bm+ return rpt
Criterion/Analysis.hs view
@@ -1,261 +1,261 @@-{-# LANGUAGE Trustworthy #-} -{-# LANGUAGE BangPatterns, DeriveDataTypeable, RecordWildCards #-} - --- | --- Module : Criterion.Analysis --- Copyright : (c) 2009-2014 Bryan O'Sullivan --- --- License : BSD-style --- Maintainer : bos@serpentine.com --- Stability : experimental --- Portability : GHC --- --- Analysis code for benchmarks. - -module Criterion.Analysis - ( - Outliers(..) - , OutlierEffect(..) - , OutlierVariance(..) - , SampleAnalysis(..) - , analyseSample - , scale - , analyseMean - , countOutliers - , classifyOutliers - , noteOutliers - , outlierVariance - , resolveAccessors - , validateAccessors - , regress - ) where - -import Control.Arrow (second) -import Control.Monad (unless, when) -import Control.Monad.Reader (ask) -import Control.Monad.Trans -import Control.Monad.Trans.Except -import Criterion.IO.Printf (note, prolix) -import Criterion.Measurement (secs, threshold) -import Criterion.Monad (Criterion, getGen) -import Criterion.Types -import Data.Int (Int64) -import Data.List.NonEmpty (NonEmpty(..)) -import Data.Maybe (fromJust) -import Prelude () -import Prelude.Compat -import Statistics.Function (sort) -import Statistics.Quantile (weightedAvg) -import Statistics.Regression (bootstrapRegress, olsRegress) -import Statistics.Resampling (Estimator(..),resample) -import Statistics.Sample (mean) -import Statistics.Sample.KernelDensity (kde) -import Statistics.Types (Sample) -import System.Random.MWC (GenIO) -import qualified Data.List as List -import qualified Data.List.NonEmpty as NE -import qualified Data.Map as Map -import qualified Data.Vector as V -import qualified Data.Vector.Generic as G -import qualified Data.Vector.Unboxed as U -import qualified Statistics.Resampling.Bootstrap as B -import qualified Statistics.Types as B - --- | Classify outliers in a data set, using the boxplot technique. -classifyOutliers :: Sample -> Outliers -classifyOutliers sa = U.foldl' ((. outlier) . mappend) mempty ssa - where outlier e = Outliers { - samplesSeen = 1 - , lowSevere = if e <= loS && e < hiM then 1 else 0 - , lowMild = if e > loS && e <= loM then 1 else 0 - , highMild = if e >= hiM && e < hiS then 1 else 0 - , highSevere = if e >= hiS && e > loM then 1 else 0 - } - !loS = q1 - (iqr * 3) - !loM = q1 - (iqr * 1.5) - !hiM = q3 + (iqr * 1.5) - !hiS = q3 + (iqr * 3) - q1 = weightedAvg 1 4 ssa - q3 = weightedAvg 3 4 ssa - ssa = sort sa - iqr = q3 - q1 - --- | Compute the extent to which outliers in the sample data affect --- the sample mean and standard deviation. -outlierVariance - :: B.Estimate B.ConfInt Double -- ^ Bootstrap estimate of sample mean. - -> B.Estimate B.ConfInt Double -- ^ Bootstrap estimate of sample - -- standard deviation. - -> Double -- ^ Number of original iterations. - -> OutlierVariance -outlierVariance µ σ a = OutlierVariance effect desc varOutMin - where - ( effect, desc ) | varOutMin < 0.01 = (Unaffected, "no") - | varOutMin < 0.1 = (Slight, "a slight") - | varOutMin < 0.5 = (Moderate, "a moderate") - | otherwise = (Severe, "a severe") - varOutMin = (minBy varOut 1 (minBy cMax 0 µgMin)) / σb2 - varOut c = (ac / a) * (σb2 - ac * σg2) where ac = a - c - σb = B.estPoint σ - µa = B.estPoint µ / a - µgMin = µa / 2 - σg = min (µgMin / 4) (σb / sqrt a) - σg2 = σg * σg - σb2 = σb * σb - minBy f q r = min (f q) (f r) - cMax x = fromIntegral (floor (-2 * k0 / (k1 + sqrt det)) :: Int) - where - k1 = σb2 - a * σg2 + ad - k0 = -a * ad - ad = a * d - d = k * k where k = µa - x - det = k1 * k1 - 4 * σg2 * k0 - --- | Count the total number of outliers in a sample. -countOutliers :: Outliers -> Int64 -countOutliers (Outliers _ a b c d) = a + b + c + d -{-# INLINE countOutliers #-} - --- | Display the mean of a 'Sample', and characterise the outliers --- present in the sample. -analyseMean :: Sample - -> Int -- ^ Number of iterations used to - -- compute the sample. - -> Criterion Double -analyseMean a iters = do - let µ = mean a - _ <- note "mean is %s (%d iterations)\n" (secs µ) iters - noteOutliers . classifyOutliers $ a - return µ - --- | Multiply the 'Estimate's in an analysis by the given value, using --- 'B.scale'. -scale :: Double -- ^ Value to multiply by. - -> SampleAnalysis -> SampleAnalysis -scale f s@SampleAnalysis{..} = s { - anMean = B.scale f anMean - , anStdDev = B.scale f anStdDev - } - --- | Perform an analysis of a measurement. -analyseSample :: Int -- ^ Experiment number. - -> String -- ^ Experiment name. - -> V.Vector Measured -- ^ Sample data. - -> ExceptT String Criterion Report -analyseSample i name meas = do - Config{..} <- ask - let ests = [Mean,StdDev] - -- The use of filter here throws away very-low-quality - -- measurements when bootstrapping the mean and standard - -- deviations. Without this, the numbers look nonsensical when - -- very brief actions are measured. - stime = measure (measTime . rescale) . - G.filter ((>= threshold) . measTime) $ meas - n = G.length meas - s = G.length stime - _ <- lift $ prolix "bootstrapping with %d of %d samples (%d%%)\n" - s n ((s * 100) `quot` n) - gen <- lift getGen - rs <- mapM (\(ps,r) -> regress gen ps r meas) $ - ((["iters"],"time"):regressions) - resamps <- liftIO $ resample gen ests resamples stime - (estMean,estStdDev) <- case B.bootstrapBCA confInterval stime resamps of - [estMean',estStdDev'] -> return (estMean',estStdDev') - ests' -> throwE $ "analyseSample: Expected two estimation functions, received: " ++ show ests' - let ov = outlierVariance estMean estStdDev (fromIntegral n) - an = SampleAnalysis { - anRegress = rs - , anMean = estMean - , anStdDev = estStdDev - , anOutlierVar = ov - } - return Report { - reportNumber = i - , reportName = name - , reportKeys = measureKeys - , reportMeasured = meas - , reportAnalysis = an - , reportOutliers = classifyOutliers stime - , reportKDEs = [uncurry (KDE "time") (kde 128 stime)] - } - --- | Regress the given predictors against the responder. --- --- Errors may be returned under various circumstances, such as invalid --- names or lack of needed data. --- --- See 'olsRegress' for details of the regression performed. -regress :: GenIO - -> [String] -- ^ Predictor names. - -> String -- ^ Responder name. - -> V.Vector Measured - -> ExceptT String Criterion Regression -regress gen predNames respName meas = do - when (G.null meas) $ - throwE "no measurements" - accs <- ExceptT . return $ validateAccessors predNames respName - let unmeasured = [n | (n, Nothing) <- map (second ($ G.head meas)) accs] - unless (null unmeasured) $ - throwE $ "no data available for " ++ renderNames unmeasured - (r,ps) <- case map ((`measure` meas) . (fromJust .) . snd) accs of - (r':ps') -> return (r',ps') - [] -> throwE "regress: Expected at least one accessor" - Config{..} <- ask - (coeffs,r2) <- liftIO $ - bootstrapRegress gen resamples confInterval olsRegress ps r - return Regression { - regResponder = respName - , regCoeffs = Map.fromList (zip (predNames ++ ["y"]) (G.toList coeffs)) - , regRSquare = r2 - } - -singleton :: NonEmpty a -> Bool -singleton (_ :| []) = True -singleton _ = False - --- | Given a list of accessor names (see 'measureKeys'), return either --- a mapping from accessor name to function or an error message if --- any names are wrong. -resolveAccessors :: [String] - -> Either String [(String, Measured -> Maybe Double)] -resolveAccessors names = - case unresolved of - [] -> Right [(n, a) | (n, Just (a,_)) <- accessors] - _ -> Left $ "unknown metric " ++ renderNames unresolved - where - unresolved = [n | (n, Nothing) <- accessors] - accessors = flip map names $ \n -> (n, Map.lookup n measureAccessors) - --- | Given predictor and responder names, do some basic validation, --- then hand back the relevant accessors. -validateAccessors :: [String] -- ^ Predictor names. - -> String -- ^ Responder name. - -> Either String [(String, Measured -> Maybe Double)] -validateAccessors predNames respName = do - when (null predNames) $ - Left "no predictors specified" - let names = respName:predNames - dups = map NE.head . List.filter (not . singleton) . - NE.group . List.sort $ names - unless (null dups) $ - Left $ "duplicated metric " ++ renderNames dups - resolveAccessors names - -renderNames :: [String] -> String -renderNames = List.intercalate ", " . map show - --- | Display a report of the 'Outliers' present in a 'Sample'. -noteOutliers :: Outliers -> Criterion () -noteOutliers o = do - let frac n = (100::Double) * fromIntegral n / fromIntegral (samplesSeen o) - check :: Int64 -> Double -> String -> Criterion () - check k t d = when (frac k > t) $ - note " %d (%.1g%%) %s\n" k (frac k) d - outCount = countOutliers o - when (outCount > 0) $ do - _ <- note "found %d outliers among %d samples (%.1g%%)\n" - outCount (samplesSeen o) (frac outCount) - check (lowSevere o) 0 "low severe" - check (lowMild o) 1 "low mild" - check (highMild o) 1 "high mild" - check (highSevere o) 0 "high severe" +{-# LANGUAGE Trustworthy #-}+{-# LANGUAGE BangPatterns, DeriveDataTypeable, RecordWildCards #-}++-- |+-- Module : Criterion.Analysis+-- Copyright : (c) 2009-2014 Bryan O'Sullivan+--+-- License : BSD-style+-- Maintainer : bos@serpentine.com+-- Stability : experimental+-- Portability : GHC+--+-- Analysis code for benchmarks.++module Criterion.Analysis+ (+ Outliers(..)+ , OutlierEffect(..)+ , OutlierVariance(..)+ , SampleAnalysis(..)+ , analyseSample+ , scale+ , analyseMean+ , countOutliers+ , classifyOutliers+ , noteOutliers+ , outlierVariance+ , resolveAccessors+ , validateAccessors+ , regress+ ) where++import Control.Arrow (second)+import Control.Monad (unless, when)+import Control.Monad.Reader (ask)+import Control.Monad.Trans+import Control.Monad.Trans.Except+import Criterion.IO.Printf (note, prolix)+import Criterion.Measurement (secs, threshold)+import Criterion.Monad (Criterion, getGen)+import Criterion.Types+import Data.Int (Int64)+import Data.List.NonEmpty (NonEmpty(..))+import Data.Maybe (fromJust)+import Prelude ()+import Prelude.Compat+import Statistics.Function (sort)+import Statistics.Quantile (weightedAvg)+import Statistics.Regression (bootstrapRegress, olsRegress)+import Statistics.Resampling (Estimator(..),resample)+import Statistics.Sample (mean)+import Statistics.Sample.KernelDensity (kde)+import Statistics.Types (Sample)+import System.Random.MWC (GenIO)+import qualified Data.List as List+import qualified Data.List.NonEmpty as NE+import qualified Data.Map as Map+import qualified Data.Vector as V+import qualified Data.Vector.Generic as G+import qualified Data.Vector.Unboxed as U+import qualified Statistics.Resampling.Bootstrap as B+import qualified Statistics.Types as B++-- | Classify outliers in a data set, using the boxplot technique.+classifyOutliers :: Sample -> Outliers+classifyOutliers sa = U.foldl' ((. outlier) . mappend) mempty ssa+ where outlier e = Outliers {+ samplesSeen = 1+ , lowSevere = if e <= loS && e < hiM then 1 else 0+ , lowMild = if e > loS && e <= loM then 1 else 0+ , highMild = if e >= hiM && e < hiS then 1 else 0+ , highSevere = if e >= hiS && e > loM then 1 else 0+ }+ !loS = q1 - (iqr * 3)+ !loM = q1 - (iqr * 1.5)+ !hiM = q3 + (iqr * 1.5)+ !hiS = q3 + (iqr * 3)+ q1 = weightedAvg 1 4 ssa+ q3 = weightedAvg 3 4 ssa+ ssa = sort sa+ iqr = q3 - q1++-- | Compute the extent to which outliers in the sample data affect+-- the sample mean and standard deviation.+outlierVariance+ :: B.Estimate B.ConfInt Double -- ^ Bootstrap estimate of sample mean.+ -> B.Estimate B.ConfInt Double -- ^ Bootstrap estimate of sample+ -- standard deviation.+ -> Double -- ^ Number of original iterations.+ -> OutlierVariance+outlierVariance µ σ a = OutlierVariance effect desc varOutMin+ where+ ( effect, desc ) | varOutMin < 0.01 = (Unaffected, "no")+ | varOutMin < 0.1 = (Slight, "a slight")+ | varOutMin < 0.5 = (Moderate, "a moderate")+ | otherwise = (Severe, "a severe")+ varOutMin = (minBy varOut 1 (minBy cMax 0 µgMin)) / σb2+ varOut c = (ac / a) * (σb2 - ac * σg2) where ac = a - c+ σb = B.estPoint σ+ µa = B.estPoint µ / a+ µgMin = µa / 2+ σg = min (µgMin / 4) (σb / sqrt a)+ σg2 = σg * σg+ σb2 = σb * σb+ minBy f q r = min (f q) (f r)+ cMax x = fromIntegral (floor (-2 * k0 / (k1 + sqrt det)) :: Int)+ where+ k1 = σb2 - a * σg2 + ad+ k0 = -a * ad+ ad = a * d+ d = k * k where k = µa - x+ det = k1 * k1 - 4 * σg2 * k0++-- | Count the total number of outliers in a sample.+countOutliers :: Outliers -> Int64+countOutliers (Outliers _ a b c d) = a + b + c + d+{-# INLINE countOutliers #-}++-- | Display the mean of a 'Sample', and characterise the outliers+-- present in the sample.+analyseMean :: Sample+ -> Int -- ^ Number of iterations used to+ -- compute the sample.+ -> Criterion Double+analyseMean a iters = do+ let µ = mean a+ _ <- note "mean is %s (%d iterations)\n" (secs µ) iters+ noteOutliers . classifyOutliers $ a+ return µ++-- | Multiply the 'Estimate's in an analysis by the given value, using+-- 'B.scale'.+scale :: Double -- ^ Value to multiply by.+ -> SampleAnalysis -> SampleAnalysis+scale f s@SampleAnalysis{..} = s {+ anMean = B.scale f anMean+ , anStdDev = B.scale f anStdDev+ }++-- | Perform an analysis of a measurement.+analyseSample :: Int -- ^ Experiment number.+ -> String -- ^ Experiment name.+ -> V.Vector Measured -- ^ Sample data.+ -> ExceptT String Criterion Report+analyseSample i name meas = do+ Config{..} <- ask+ let ests = [Mean,StdDev]+ -- The use of filter here throws away very-low-quality+ -- measurements when bootstrapping the mean and standard+ -- deviations. Without this, the numbers look nonsensical when+ -- very brief actions are measured.+ stime = measure (measTime . rescale) .+ G.filter ((>= threshold) . measTime) $ meas+ n = G.length meas+ s = G.length stime+ _ <- lift $ prolix "bootstrapping with %d of %d samples (%d%%)\n"+ s n ((s * 100) `quot` n)+ gen <- lift getGen+ rs <- mapM (\(ps,r) -> regress gen ps r meas) $+ ((["iters"],"time"):regressions)+ resamps <- liftIO $ resample gen ests resamples stime+ (estMean,estStdDev) <- case B.bootstrapBCA confInterval stime resamps of+ [estMean',estStdDev'] -> return (estMean',estStdDev')+ ests' -> throwE $ "analyseSample: Expected two estimation functions, received: " ++ show ests'+ let ov = outlierVariance estMean estStdDev (fromIntegral n)+ an = SampleAnalysis {+ anRegress = rs+ , anMean = estMean+ , anStdDev = estStdDev+ , anOutlierVar = ov+ }+ return Report {+ reportNumber = i+ , reportName = name+ , reportKeys = measureKeys+ , reportMeasured = meas+ , reportAnalysis = an+ , reportOutliers = classifyOutliers stime+ , reportKDEs = [uncurry (KDE "time") (kde 128 stime)]+ }++-- | Regress the given predictors against the responder.+--+-- Errors may be returned under various circumstances, such as invalid+-- names or lack of needed data.+--+-- See 'olsRegress' for details of the regression performed.+regress :: GenIO+ -> [String] -- ^ Predictor names.+ -> String -- ^ Responder name.+ -> V.Vector Measured+ -> ExceptT String Criterion Regression+regress gen predNames respName meas = do+ when (G.null meas) $+ throwE "no measurements"+ accs <- ExceptT . return $ validateAccessors predNames respName+ let unmeasured = [n | (n, Nothing) <- map (second ($ G.head meas)) accs]+ unless (null unmeasured) $+ throwE $ "no data available for " ++ renderNames unmeasured+ (r,ps) <- case map ((`measure` meas) . (fromJust .) . snd) accs of+ (r':ps') -> return (r',ps')+ [] -> throwE "regress: Expected at least one accessor"+ Config{..} <- ask+ (coeffs,r2) <- liftIO $+ bootstrapRegress gen resamples confInterval olsRegress ps r+ return Regression {+ regResponder = respName+ , regCoeffs = Map.fromList (zip (predNames ++ ["y"]) (G.toList coeffs))+ , regRSquare = r2+ }++singleton :: NonEmpty a -> Bool+singleton (_ :| []) = True+singleton _ = False++-- | Given a list of accessor names (see 'measureKeys'), return either+-- a mapping from accessor name to function or an error message if+-- any names are wrong.+resolveAccessors :: [String]+ -> Either String [(String, Measured -> Maybe Double)]+resolveAccessors names =+ case unresolved of+ [] -> Right [(n, a) | (n, Just (a,_)) <- accessors]+ _ -> Left $ "unknown metric " ++ renderNames unresolved+ where+ unresolved = [n | (n, Nothing) <- accessors]+ accessors = flip map names $ \n -> (n, Map.lookup n measureAccessors)++-- | Given predictor and responder names, do some basic validation,+-- then hand back the relevant accessors.+validateAccessors :: [String] -- ^ Predictor names.+ -> String -- ^ Responder name.+ -> Either String [(String, Measured -> Maybe Double)]+validateAccessors predNames respName = do+ when (null predNames) $+ Left "no predictors specified"+ let names = respName:predNames+ dups = map NE.head . List.filter (not . singleton) .+ NE.group . List.sort $ names+ unless (null dups) $+ Left $ "duplicated metric " ++ renderNames dups+ resolveAccessors names++renderNames :: [String] -> String+renderNames = List.intercalate ", " . map show++-- | Display a report of the 'Outliers' present in a 'Sample'.+noteOutliers :: Outliers -> Criterion ()+noteOutliers o = do+ let frac n = (100::Double) * fromIntegral n / fromIntegral (samplesSeen o)+ check :: Int64 -> Double -> String -> Criterion ()+ check k t d = when (frac k > t) $+ note " %d (%.1g%%) %s\n" k (frac k) d+ outCount = countOutliers o+ when (outCount > 0) $ do+ _ <- note "found %d outliers among %d samples (%.1g%%)\n"+ outCount (samplesSeen o) (frac outCount)+ check (lowSevere o) 0 "low severe"+ check (lowMild o) 1 "low mild"+ check (highMild o) 1 "high mild"+ check (highSevere o) 0 "high severe"
Criterion/EmbeddedData.hs view
@@ -1,29 +1,29 @@-{-# LANGUAGE TemplateHaskell #-} - --- | --- Module : Criterion.EmbeddedData --- Copyright : (c) 2017 Ryan Scott --- --- License : BSD-style --- Maintainer : bos@serpentine.com --- Stability : experimental --- Portability : GHC --- --- When the @embed-data-files@ @Cabal@ flag is enabled, this module exports --- the contents of various files (the @data-files@ from @criterion.cabal@, as --- well as a minimized version of Chart.js) embedded as a 'ByteString'. -module Criterion.EmbeddedData - ( dataFiles - , chartContents - ) where - -import Data.ByteString (ByteString) -import Data.FileEmbed (embedDir, embedFile) -import Language.Haskell.TH.Syntax (runIO) -import qualified Language.Javascript.Chart as Chart - -dataFiles :: [(FilePath, ByteString)] -dataFiles = $(embedDir "templates") - -chartContents :: ByteString -chartContents = $(embedFile =<< runIO (Chart.file Chart.Chart)) +{-# LANGUAGE TemplateHaskell #-}++-- |+-- Module : Criterion.EmbeddedData+-- Copyright : (c) 2017 Ryan Scott+--+-- License : BSD-style+-- Maintainer : bos@serpentine.com+-- Stability : experimental+-- Portability : GHC+--+-- When the @embed-data-files@ @Cabal@ flag is enabled, this module exports+-- the contents of various files (the @data-files@ from @criterion.cabal@, as+-- well as a minimized version of Chart.js) embedded as a 'ByteString'.+module Criterion.EmbeddedData+ ( dataFiles+ , chartContents+ ) where++import Data.ByteString (ByteString)+import Data.FileEmbed (embedDir, embedFile)+import Language.Haskell.TH.Syntax (runIO)+import qualified Language.Javascript.Chart as Chart++dataFiles :: [(FilePath, ByteString)]+dataFiles = $(embedDir "templates")++chartContents :: ByteString+chartContents = $(embedFile =<< runIO (Chart.file Chart.Chart))
Criterion/IO.hs view
@@ -1,119 +1,119 @@-{-# LANGUAGE Trustworthy #-} -{-# LANGUAGE OverloadedStrings #-} - --- | --- Module : Criterion.IO --- Copyright : (c) 2009-2014 Bryan O'Sullivan --- --- License : BSD-style --- Maintainer : bos@serpentine.com --- Stability : experimental --- Portability : GHC --- --- Input and output actions. - -module Criterion.IO - ( - header - , headerRoot - , critVersion - , hGetRecords - , hPutRecords - , readRecords - , writeRecords - , ReportFileContents - , readJSONReports - , writeJSONReports - ) where - -import qualified Data.Aeson as Aeson -import Data.Binary (Binary(..), encode) -import Data.Binary.Get (runGetOrFail) -import Data.Binary.Put (putByteString, putWord16be, runPut) -import qualified Data.ByteString.Char8 as B -import Criterion.Types (Report(..)) -import Data.List (intercalate) -import Data.Version (Version(..)) -import Paths_criterion (version) -import System.IO (Handle, IOMode(..), withFile, hPutStrLn, stderr) -import qualified Data.ByteString.Lazy as L - --- | The header identifies a criterion data file. This contains --- version information; there is no expectation of cross-version --- compatibility. -header :: L.ByteString -header = runPut $ do - putByteString (B.pack headerRoot) - mapM_ (putWord16be . fromIntegral) (versionBranch version) - --- | The magic string we expect to start off the header. -headerRoot :: String -headerRoot = "criterion" - --- | The current version of criterion, encoded into a string that is --- used in files. -critVersion :: String -critVersion = intercalate "." $ map show $ versionBranch version - --- | Read all records from the given 'Handle'. -hGetRecords :: Binary a => Handle -> IO (Either String [a]) -hGetRecords handle = do - bs <- L.hGet handle (fromIntegral (L.length header)) - if bs == header - then Right `fmap` readAll handle - else return $ Left $ "unexpected header, expected criterion version: "++show (versionBranch version) - --- | Write records to the given 'Handle'. -hPutRecords :: Binary a => Handle -> [a] -> IO () -hPutRecords handle rs = do - L.hPut handle header - mapM_ (L.hPut handle . encode) rs - --- | Read all records from the given file. -readRecords :: Binary a => FilePath -> IO (Either String [a]) -readRecords path = withFile path ReadMode hGetRecords - --- | Write records to the given file. -writeRecords :: Binary a => FilePath -> [a] -> IO () -writeRecords path rs = withFile path WriteMode (flip hPutRecords rs) - -readAll :: Binary a => Handle -> IO [a] -readAll handle = do - let go bs - | L.null bs = return [] - | otherwise = case runGetOrFail get bs of - Left (_, _, err) -> fail err - Right (bs', _, a) -> (a:) `fmap` go bs' - go =<< L.hGetContents handle - --- | On disk we store (name,version,reports), where --- 'version' is the version of Criterion used to generate the file. -type ReportFileContents = (String,String,[Report]) - --- | Alternative file IO with JSON instances. Read a list of reports --- from a .json file produced by criterion. --- --- If the version does not match exactly, this issues a warning. -readJSONReports :: FilePath -> IO (Either String ReportFileContents) -readJSONReports path = - do bstr <- L.readFile path - let res = Aeson.eitherDecode bstr - case res of - Left _ -> return res - Right (tg,vers,_) - | tg == headerRoot && vers == critVersion -> return res - | otherwise -> - do hPutStrLn stderr $ "Warning, readJSONReports: mismatched header, expected " - ++ show (headerRoot,critVersion) ++ " received " ++ show (tg,vers) - return res - --- | Write a list of reports to a JSON file. Includes a header, which --- includes the current Criterion version number. This should be --- the inverse of `readJSONReports`. -writeJSONReports :: FilePath -> [Report] -> IO () -writeJSONReports fn rs = - let payload :: ReportFileContents - payload = (headerRoot, critVersion, rs) - in L.writeFile fn $ Aeson.encode payload - - +{-# LANGUAGE Trustworthy #-}+{-# LANGUAGE OverloadedStrings #-}++-- |+-- Module : Criterion.IO+-- Copyright : (c) 2009-2014 Bryan O'Sullivan+--+-- License : BSD-style+-- Maintainer : bos@serpentine.com+-- Stability : experimental+-- Portability : GHC+--+-- Input and output actions.++module Criterion.IO+ (+ header+ , headerRoot+ , critVersion+ , hGetRecords+ , hPutRecords+ , readRecords+ , writeRecords+ , ReportFileContents+ , readJSONReports+ , writeJSONReports+ ) where++import qualified Data.Aeson as Aeson+import Data.Binary (Binary(..), encode)+import Data.Binary.Get (runGetOrFail)+import Data.Binary.Put (putByteString, putWord16be, runPut)+import qualified Data.ByteString.Char8 as B+import Criterion.Types (Report(..))+import Data.List (intercalate)+import Data.Version (Version(..))+import Paths_criterion (version)+import System.IO (Handle, IOMode(..), withFile, hPutStrLn, stderr)+import qualified Data.ByteString.Lazy as L++-- | The header identifies a criterion data file. This contains+-- version information; there is no expectation of cross-version+-- compatibility.+header :: L.ByteString+header = runPut $ do+ putByteString (B.pack headerRoot)+ mapM_ (putWord16be . fromIntegral) (versionBranch version)++-- | The magic string we expect to start off the header.+headerRoot :: String+headerRoot = "criterion"++-- | The current version of criterion, encoded into a string that is+-- used in files.+critVersion :: String+critVersion = intercalate "." $ map show $ versionBranch version++-- | Read all records from the given 'Handle'.+hGetRecords :: Binary a => Handle -> IO (Either String [a])+hGetRecords handle = do+ bs <- L.hGet handle (fromIntegral (L.length header))+ if bs == header+ then Right `fmap` readAll handle+ else return $ Left $ "unexpected header, expected criterion version: "++show (versionBranch version)++-- | Write records to the given 'Handle'.+hPutRecords :: Binary a => Handle -> [a] -> IO ()+hPutRecords handle rs = do+ L.hPut handle header+ mapM_ (L.hPut handle . encode) rs++-- | Read all records from the given file.+readRecords :: Binary a => FilePath -> IO (Either String [a])+readRecords path = withFile path ReadMode hGetRecords++-- | Write records to the given file.+writeRecords :: Binary a => FilePath -> [a] -> IO ()+writeRecords path rs = withFile path WriteMode (flip hPutRecords rs)++readAll :: Binary a => Handle -> IO [a]+readAll handle = do+ let go bs+ | L.null bs = return []+ | otherwise = case runGetOrFail get bs of+ Left (_, _, err) -> fail err+ Right (bs', _, a) -> (a:) `fmap` go bs'+ go =<< L.hGetContents handle++-- | On disk we store (name,version,reports), where+-- 'version' is the version of Criterion used to generate the file.+type ReportFileContents = (String,String,[Report])++-- | Alternative file IO with JSON instances. Read a list of reports+-- from a .json file produced by criterion.+--+-- If the version does not match exactly, this issues a warning.+readJSONReports :: FilePath -> IO (Either String ReportFileContents)+readJSONReports path =+ do bstr <- L.readFile path+ let res = Aeson.eitherDecode bstr+ case res of+ Left _ -> return res+ Right (tg,vers,_)+ | tg == headerRoot && vers == critVersion -> return res+ | otherwise ->+ do hPutStrLn stderr $ "Warning, readJSONReports: mismatched header, expected "+ ++ show (headerRoot,critVersion) ++ " received " ++ show (tg,vers)+ return res++-- | Write a list of reports to a JSON file. Includes a header, which+-- includes the current Criterion version number. This should be+-- the inverse of `readJSONReports`.+writeJSONReports :: FilePath -> [Report] -> IO ()+writeJSONReports fn rs =+ let payload :: ReportFileContents+ payload = (headerRoot, critVersion, rs)+ in L.writeFile fn $ Aeson.encode payload++
Criterion/IO/Printf.hs view
@@ -1,102 +1,102 @@-{-# LANGUAGE Trustworthy #-} --- | --- Module : Criterion.IO.Printf --- Copyright : (c) 2009-2014 Bryan O'Sullivan --- --- License : BSD-style --- Maintainer : bos@serpentine.com --- Stability : experimental --- Portability : GHC --- --- Input and output actions. - -{-# LANGUAGE FlexibleInstances, Rank2Types, TypeSynonymInstances #-} -module Criterion.IO.Printf - ( - CritHPrintfType - , note - , printError - , prolix - , writeCsv - ) where - -import Control.Monad (when) -import Control.Monad.Reader (ask, asks) -import Control.Monad.Trans (liftIO) -import Criterion.Monad (Criterion) -import Criterion.Types (Config(csvFile, verbosity), Verbosity(..)) -import Data.Foldable (forM_) -import System.IO (Handle, hFlush, stderr, stdout) -import Text.Printf (PrintfArg) -import qualified Data.ByteString.Lazy as B -import qualified Data.Csv as Csv -import qualified Text.Printf (HPrintfType, hPrintf) - --- First item is the action to print now, given all the arguments --- gathered together so far. The second item is the function that --- will take a further argument and give back a new PrintfCont. -data PrintfCont = PrintfCont (IO ()) (forall a . PrintfArg a => a -> PrintfCont) - --- | An internal class that acts like Printf/HPrintf. --- --- The implementation is visible to the rest of the program, but the --- details of the class are not. -class CritHPrintfType a where - chPrintfImpl :: (Config -> Bool) -> PrintfCont -> a - - -instance CritHPrintfType (Criterion a) where - chPrintfImpl check (PrintfCont final _) - = do x <- ask - when (check x) (liftIO (final >> hFlush stderr >> hFlush stdout)) - return undefined - -instance CritHPrintfType (IO a) where - chPrintfImpl _ (PrintfCont final _) - = final >> hFlush stderr >> hFlush stdout >> return undefined - -instance (CritHPrintfType r, PrintfArg a) => CritHPrintfType (a -> r) where - chPrintfImpl check (PrintfCont _ anotherArg) x - = chPrintfImpl check (anotherArg x) - -chPrintf :: CritHPrintfType r => (Config -> Bool) -> Handle -> String -> r -chPrintf shouldPrint h s - = chPrintfImpl shouldPrint (make (Text.Printf.hPrintf h s) - (Text.Printf.hPrintf h s)) - where - make :: IO () -> (forall a r. (PrintfArg a, Text.Printf.HPrintfType r) => - a -> r) -> PrintfCont - make curCall curCall' = PrintfCont curCall (\x -> make (curCall' x) - (curCall' x)) - -{- A demonstration of how to write printf in this style, in case it is -ever needed - in fututre: - -cPrintf :: CritHPrintfType r => (Config -> Bool) -> String -> r -cPrintf shouldPrint s - = chPrintfImpl shouldPrint (make (Text.Printf.printf s) - (Text.Printf.printf s)) - where - make :: IO () -> (forall a r. (PrintfArg a, Text.Printf.PrintfType r) => a -> r) -> PrintfCont - make curCall curCall' = PrintfCont curCall (\x -> make (curCall' x) (curCall' x)) --} - --- | Print a \"normal\" note. -note :: (CritHPrintfType r) => String -> r -note = chPrintf ((> Quiet) . verbosity) stdout - --- | Print verbose output. -prolix :: (CritHPrintfType r) => String -> r -prolix = chPrintf ((== Verbose) . verbosity) stdout - --- | Print an error message. -printError :: (CritHPrintfType r) => String -> r -printError = chPrintf (const True) stderr - --- | Write a record to a CSV file. -writeCsv :: Csv.ToRecord a => a -> Criterion () -writeCsv val = do - csv <- asks csvFile - forM_ csv $ \fn -> - liftIO . B.appendFile fn . Csv.encode $ [val] +{-# LANGUAGE Trustworthy #-}+-- |+-- Module : Criterion.IO.Printf+-- Copyright : (c) 2009-2014 Bryan O'Sullivan+--+-- License : BSD-style+-- Maintainer : bos@serpentine.com+-- Stability : experimental+-- Portability : GHC+--+-- Input and output actions.++{-# LANGUAGE FlexibleInstances, Rank2Types, TypeSynonymInstances #-}+module Criterion.IO.Printf+ (+ CritHPrintfType+ , note+ , printError+ , prolix+ , writeCsv+ ) where++import Control.Monad (when)+import Control.Monad.Reader (ask, asks)+import Control.Monad.Trans (liftIO)+import Criterion.Monad (Criterion)+import Criterion.Types (Config(csvFile, verbosity), Verbosity(..))+import Data.Foldable (forM_)+import System.IO (Handle, hFlush, stderr, stdout)+import Text.Printf (PrintfArg)+import qualified Data.ByteString.Lazy as B+import qualified Data.Csv as Csv+import qualified Text.Printf (HPrintfType, hPrintf)++-- First item is the action to print now, given all the arguments+-- gathered together so far. The second item is the function that+-- will take a further argument and give back a new PrintfCont.+data PrintfCont = PrintfCont (IO ()) (forall a . PrintfArg a => a -> PrintfCont)++-- | An internal class that acts like Printf/HPrintf.+--+-- The implementation is visible to the rest of the program, but the+-- details of the class are not.+class CritHPrintfType a where+ chPrintfImpl :: (Config -> Bool) -> PrintfCont -> a+++instance CritHPrintfType (Criterion a) where+ chPrintfImpl check (PrintfCont final _)+ = do x <- ask+ when (check x) (liftIO (final >> hFlush stderr >> hFlush stdout))+ return undefined++instance CritHPrintfType (IO a) where+ chPrintfImpl _ (PrintfCont final _)+ = final >> hFlush stderr >> hFlush stdout >> return undefined++instance (CritHPrintfType r, PrintfArg a) => CritHPrintfType (a -> r) where+ chPrintfImpl check (PrintfCont _ anotherArg) x+ = chPrintfImpl check (anotherArg x)++chPrintf :: CritHPrintfType r => (Config -> Bool) -> Handle -> String -> r+chPrintf shouldPrint h s+ = chPrintfImpl shouldPrint (make (Text.Printf.hPrintf h s)+ (Text.Printf.hPrintf h s))+ where+ make :: IO () -> (forall a r. (PrintfArg a, Text.Printf.HPrintfType r) =>+ a -> r) -> PrintfCont+ make curCall curCall' = PrintfCont curCall (\x -> make (curCall' x)+ (curCall' x))++{- A demonstration of how to write printf in this style, in case it is+ever needed+ in fututre:++cPrintf :: CritHPrintfType r => (Config -> Bool) -> String -> r+cPrintf shouldPrint s+ = chPrintfImpl shouldPrint (make (Text.Printf.printf s)+ (Text.Printf.printf s))+ where+ make :: IO () -> (forall a r. (PrintfArg a, Text.Printf.PrintfType r) => a -> r) -> PrintfCont+ make curCall curCall' = PrintfCont curCall (\x -> make (curCall' x) (curCall' x))+-}++-- | Print a \"normal\" note.+note :: (CritHPrintfType r) => String -> r+note = chPrintf ((> Quiet) . verbosity) stdout++-- | Print verbose output.+prolix :: (CritHPrintfType r) => String -> r+prolix = chPrintf ((== Verbose) . verbosity) stdout++-- | Print an error message.+printError :: (CritHPrintfType r) => String -> r+printError = chPrintf (const True) stderr++-- | Write a record to a CSV file.+writeCsv :: Csv.ToRecord a => a -> Criterion ()+writeCsv val = do+ csv <- asks csvFile+ forM_ csv $ \fn ->+ liftIO . B.appendFile fn . Csv.encode $ [val]
Criterion/Internal.hs view
@@ -1,241 +1,241 @@-{-# LANGUAGE BangPatterns, RecordWildCards #-} --- | --- Module : Criterion --- Copyright : (c) 2009-2014 Bryan O'Sullivan --- --- License : BSD-style --- Maintainer : bos@serpentine.com --- Stability : experimental --- Portability : GHC --- --- Core benchmarking code. - -module Criterion.Internal - ( - runAndAnalyse - , runAndAnalyseOne - , runOne - , runFixedIters - ) where - -import qualified Data.Aeson as Aeson -import Control.DeepSeq (rnf) -import Control.Exception (evaluate) -import Control.Monad (foldM, forM_, void, when, unless) -import Control.Monad.Catch (MonadMask, finally) -import Control.Monad.Reader (ask, asks) -import Control.Monad.Trans (MonadIO, liftIO) -import Control.Monad.Trans.Except -import qualified Data.Binary as Binary -import Data.Int (Int64) -import qualified Data.ByteString.Lazy.Char8 as L -import Criterion.Analysis (analyseSample, noteOutliers) -import Criterion.IO (header, headerRoot, critVersion, readJSONReports, writeJSONReports) -import Criterion.IO.Printf (note, printError, prolix, writeCsv) -import Criterion.Measurement (runBenchmark, runBenchmarkable_, secs) -import Criterion.Monad (Criterion) -import Criterion.Report (report) -import Criterion.Types hiding (measure) -import Criterion.Measurement.Types.Internal (fakeEnvironment) -import qualified Data.Map as Map -import qualified Data.Vector as V -import Statistics.Types (Estimate(..),ConfInt(..),confidenceInterval,cl95,confidenceLevel) -import System.Directory (getTemporaryDirectory, removeFile) -import System.IO (IOMode(..), hClose, openTempFile, openFile, hPutStr, openBinaryFile) -import Text.Printf (printf) - --- | Run a single benchmark. -runOne :: Int -> String -> Benchmarkable -> Criterion DataRecord -runOne i desc bm = do - Config{..} <- ask - (meas,timeTaken) <- liftIO $ runBenchmark bm timeLimit - when (timeTaken > timeLimit * 1.25) . - void $ prolix "measurement took %s\n" (secs timeTaken) - return (Measurement i desc meas) - --- | Analyse a single benchmark. -analyseOne :: Int -> String -> V.Vector Measured -> Criterion DataRecord -analyseOne i desc meas = do - Config{..} <- ask - _ <- prolix "analysing with %d resamples\n" resamples - erp <- runExceptT $ analyseSample i desc meas - case erp of - Left err -> printError "*** Error: %s\n" err - Right rpt@Report{..} -> do - let SampleAnalysis{..} = reportAnalysis - OutlierVariance{..} = anOutlierVar - wibble = case ovEffect of - Unaffected -> "unaffected" :: String - Slight -> "slightly inflated" - Moderate -> "moderately inflated" - Severe -> "severely inflated" - (builtin, others) = splitAt 1 anRegress - let r2 n = printf "%.3f R\178" n - forM_ builtin $ \Regression{..} -> - case Map.lookup "iters" regCoeffs of - Nothing -> return () - Just t -> bs secs "time" t >> bs r2 "" regRSquare - bs secs "mean" anMean - bs secs "std dev" anStdDev - forM_ others $ \Regression{..} -> do - _ <- bs r2 (regResponder ++ ":") regRSquare - forM_ (Map.toList regCoeffs) $ \(prd,val) -> - bs (printf "%.3g") (" " ++ prd) val - writeCsv - (desc, - estPoint anMean, fst $ confidenceInterval anMean, snd $ confidenceInterval anMean, - estPoint anStdDev, fst $ confidenceInterval anStdDev, snd $ confidenceInterval anStdDev - ) - when (verbosity == Verbose || (ovEffect > Slight && verbosity > Quiet)) $ do - when (verbosity == Verbose) $ noteOutliers reportOutliers - _ <- note "variance introduced by outliers: %d%% (%s)\n" - (round (ovFraction * 100) :: Int) wibble - return () - _ <- note "\n" - return (Analysed rpt) - where bs :: (Double -> String) -> String -> Estimate ConfInt Double -> Criterion () - bs f metric e@Estimate{..} = - note "%-20s %-10s (%s .. %s%s)\n" metric - (f estPoint) (f $ fst $ confidenceInterval e) (f $ snd $ confidenceInterval e) - (let cl = confIntCL estError - str | cl == cl95 = "" - | otherwise = printf ", ci %.3f" (confidenceLevel cl) - in str - ) - - --- | Run a single benchmark and analyse its performance. -runAndAnalyseOne :: Int -> String -> Benchmarkable -> Criterion DataRecord -runAndAnalyseOne i desc bm = do - Measurement _ _ meas <- runOne i desc bm - analyseOne i desc meas - --- | Run, and analyse, one or more benchmarks. -runAndAnalyse :: (String -> Bool) -- ^ A predicate that chooses - -- whether to run a benchmark by its - -- name. - -> Benchmark - -> Criterion () -runAndAnalyse select bs = do - mbJsonFile <- asks jsonFile - (jsonFile, handle) <- liftIO $ - case mbJsonFile of - Nothing -> do - tmpDir <- getTemporaryDirectory - openTempFile tmpDir "criterion.json" - Just file -> do - handle <- openFile file WriteMode - return (file, handle) - -- The type we write to the file is ReportFileContents, a triple. - -- But here we ASSUME that the tuple will become a JSON array. - -- This assumption lets us stream the reports to the file incrementally: - liftIO $ hPutStr handle $ "[ \"" ++ headerRoot ++ "\", " ++ - "\"" ++ critVersion ++ "\", [ " - - for select bs $ \idx desc bm -> do - _ <- note "benchmarking %s\n" desc - Analysed rpt <- runAndAnalyseOne idx desc bm - unless (idx == 0) $ - liftIO $ hPutStr handle ", " - liftIO $ L.hPut handle (Aeson.encode (rpt::Report)) - - liftIO $ hPutStr handle " ] ]\n" - liftIO $ hClose handle - - rpts <- liftIO $ do - res <- readJSONReports jsonFile - case res of - Left err -> error $ "error reading file "++jsonFile++":\n "++show err - Right (_,_,rs) -> - case mbJsonFile of - Just _ -> return rs - _ -> removeFile jsonFile >> return rs - - rawReport rpts - report rpts - json rpts - junit rpts - - --- | Write out raw binary report files. This has some bugs, including and not --- limited to #68, and may be slated for deprecation. -rawReport :: [Report] -> Criterion () -rawReport reports = do - mbRawFile <- asks rawDataFile - case mbRawFile of - Nothing -> return () - Just file -> liftIO $ do - handle <- openBinaryFile file ReadWriteMode - L.hPut handle header - forM_ reports $ \rpt -> - L.hPut handle (Binary.encode rpt) - hClose handle - - --- | Run a benchmark without analysing its performance. -runFixedIters :: Int64 -- ^ Number of loop iterations to run. - -> (String -> Bool) -- ^ A predicate that chooses - -- whether to run a benchmark by its - -- name. - -> Benchmark - -> Criterion () -runFixedIters iters select bs = - for select bs $ \_idx desc bm -> do - _ <- note "benchmarking %s\n" desc - liftIO $ runBenchmarkable_ bm iters - --- | Iterate over benchmarks. -for :: (MonadMask m, MonadIO m) => (String -> Bool) -> Benchmark - -> (Int -> String -> Benchmarkable -> m ()) -> m () -for select bs0 handle = go (0::Int) ("", bs0) >> return () - where - go !idx (pfx, Environment mkenv cleanenv mkbench) - | shouldRun pfx mkbench = do - e <- liftIO $ do - ee <- mkenv - evaluate (rnf ee) - return ee - go idx (pfx, mkbench e) `finally` liftIO (cleanenv e) - | otherwise = return idx - go idx (pfx, Benchmark desc b) - | select desc' = do handle idx desc' b; return $! idx + 1 - | otherwise = return idx - where desc' = addPrefix pfx desc - go idx (pfx, BenchGroup desc bs) = - foldM go idx [(addPrefix pfx desc, b) | b <- bs] - - shouldRun pfx mkbench = - any (select . addPrefix pfx) . benchNames . mkbench $ fakeEnvironment - --- | Write summary JSON file (if applicable) -json :: [Report] -> Criterion () -json rs - = do jsonOpt <- asks jsonFile - case jsonOpt of - Just fn -> liftIO $ writeJSONReports fn rs - Nothing -> return () - --- | Write summary JUnit file (if applicable) -junit :: [Report] -> Criterion () -junit rs - = do junitOpt <- asks junitFile - case junitOpt of - Just fn -> liftIO $ writeFile fn msg - Nothing -> return () - where - msg = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" ++ - printf "<testsuite name=\"Criterion benchmarks\" tests=\"%d\">\n" - (length rs) ++ - concatMap single rs ++ - "</testsuite>\n" - single Report{..} = printf " <testcase name=\"%s\" time=\"%f\" />\n" - (attrEsc reportName) (estPoint $ anMean $ reportAnalysis) - attrEsc = concatMap esc - where - esc '\'' = "'" - esc '"' = """ - esc '<' = "<" - esc '>' = ">" - esc '&' = "&" - esc c = [c] - +{-# LANGUAGE BangPatterns, RecordWildCards #-}+-- |+-- Module : Criterion+-- Copyright : (c) 2009-2014 Bryan O'Sullivan+--+-- License : BSD-style+-- Maintainer : bos@serpentine.com+-- Stability : experimental+-- Portability : GHC+--+-- Core benchmarking code.++module Criterion.Internal+ (+ runAndAnalyse+ , runAndAnalyseOne+ , runOne+ , runFixedIters+ ) where++import qualified Data.Aeson as Aeson+import Control.DeepSeq (rnf)+import Control.Exception (evaluate)+import Control.Monad (foldM, forM_, void, when, unless)+import Control.Monad.Catch (MonadMask, finally)+import Control.Monad.Reader (ask, asks)+import Control.Monad.Trans (MonadIO, liftIO)+import Control.Monad.Trans.Except+import qualified Data.Binary as Binary+import Data.Int (Int64)+import qualified Data.ByteString.Lazy.Char8 as L+import Criterion.Analysis (analyseSample, noteOutliers)+import Criterion.IO (header, headerRoot, critVersion, readJSONReports, writeJSONReports)+import Criterion.IO.Printf (note, printError, prolix, writeCsv)+import Criterion.Measurement (runBenchmark, runBenchmarkable_, secs)+import Criterion.Monad (Criterion)+import Criterion.Report (report)+import Criterion.Types hiding (measure)+import Criterion.Measurement.Types.Internal (fakeEnvironment)+import qualified Data.Map as Map+import qualified Data.Vector as V+import Statistics.Types (Estimate(..),ConfInt(..),confidenceInterval,cl95,confidenceLevel)+import System.Directory (getTemporaryDirectory, removeFile)+import System.IO (IOMode(..), hClose, openTempFile, openFile, hPutStr, openBinaryFile)+import Text.Printf (printf)++-- | Run a single benchmark.+runOne :: Int -> String -> Benchmarkable -> Criterion DataRecord+runOne i desc bm = do+ Config{..} <- ask+ (meas,timeTaken) <- liftIO $ runBenchmark bm timeLimit+ when (timeTaken > timeLimit * 1.25) .+ void $ prolix "measurement took %s\n" (secs timeTaken)+ return (Measurement i desc meas)++-- | Analyse a single benchmark.+analyseOne :: Int -> String -> V.Vector Measured -> Criterion DataRecord+analyseOne i desc meas = do+ Config{..} <- ask+ _ <- prolix "analysing with %d resamples\n" resamples+ erp <- runExceptT $ analyseSample i desc meas+ case erp of+ Left err -> printError "*** Error: %s\n" err+ Right rpt@Report{..} -> do+ let SampleAnalysis{..} = reportAnalysis+ OutlierVariance{..} = anOutlierVar+ wibble = case ovEffect of+ Unaffected -> "unaffected" :: String+ Slight -> "slightly inflated"+ Moderate -> "moderately inflated"+ Severe -> "severely inflated"+ (builtin, others) = splitAt 1 anRegress+ let r2 n = printf "%.3f R\178" n+ forM_ builtin $ \Regression{..} ->+ case Map.lookup "iters" regCoeffs of+ Nothing -> return ()+ Just t -> bs secs "time" t >> bs r2 "" regRSquare+ bs secs "mean" anMean+ bs secs "std dev" anStdDev+ forM_ others $ \Regression{..} -> do+ _ <- bs r2 (regResponder ++ ":") regRSquare+ forM_ (Map.toList regCoeffs) $ \(prd,val) ->+ bs (printf "%.3g") (" " ++ prd) val+ writeCsv+ (desc,+ estPoint anMean, fst $ confidenceInterval anMean, snd $ confidenceInterval anMean,+ estPoint anStdDev, fst $ confidenceInterval anStdDev, snd $ confidenceInterval anStdDev+ )+ when (verbosity == Verbose || (ovEffect > Slight && verbosity > Quiet)) $ do+ when (verbosity == Verbose) $ noteOutliers reportOutliers+ _ <- note "variance introduced by outliers: %d%% (%s)\n"+ (round (ovFraction * 100) :: Int) wibble+ return ()+ _ <- note "\n"+ return (Analysed rpt)+ where bs :: (Double -> String) -> String -> Estimate ConfInt Double -> Criterion ()+ bs f metric e@Estimate{..} =+ note "%-20s %-10s (%s .. %s%s)\n" metric+ (f estPoint) (f $ fst $ confidenceInterval e) (f $ snd $ confidenceInterval e)+ (let cl = confIntCL estError+ str | cl == cl95 = ""+ | otherwise = printf ", ci %.3f" (confidenceLevel cl)+ in str+ )+++-- | Run a single benchmark and analyse its performance.+runAndAnalyseOne :: Int -> String -> Benchmarkable -> Criterion DataRecord+runAndAnalyseOne i desc bm = do+ Measurement _ _ meas <- runOne i desc bm+ analyseOne i desc meas++-- | Run, and analyse, one or more benchmarks.+runAndAnalyse :: (String -> Bool) -- ^ A predicate that chooses+ -- whether to run a benchmark by its+ -- name.+ -> Benchmark+ -> Criterion ()+runAndAnalyse select bs = do+ mbJsonFile <- asks jsonFile+ (jsonFile, handle) <- liftIO $+ case mbJsonFile of+ Nothing -> do+ tmpDir <- getTemporaryDirectory+ openTempFile tmpDir "criterion.json"+ Just file -> do+ handle <- openFile file WriteMode+ return (file, handle)+ -- The type we write to the file is ReportFileContents, a triple.+ -- But here we ASSUME that the tuple will become a JSON array.+ -- This assumption lets us stream the reports to the file incrementally:+ liftIO $ hPutStr handle $ "[ \"" ++ headerRoot ++ "\", " +++ "\"" ++ critVersion ++ "\", [ "++ for select bs $ \idx desc bm -> do+ _ <- note "benchmarking %s\n" desc+ Analysed rpt <- runAndAnalyseOne idx desc bm+ unless (idx == 0) $+ liftIO $ hPutStr handle ", "+ liftIO $ L.hPut handle (Aeson.encode (rpt::Report))++ liftIO $ hPutStr handle " ] ]\n"+ liftIO $ hClose handle++ rpts <- liftIO $ do+ res <- readJSONReports jsonFile+ case res of+ Left err -> error $ "error reading file "++jsonFile++":\n "++show err+ Right (_,_,rs) ->+ case mbJsonFile of+ Just _ -> return rs+ _ -> removeFile jsonFile >> return rs++ rawReport rpts+ report rpts+ json rpts+ junit rpts+++-- | Write out raw binary report files. This has some bugs, including and not+-- limited to #68, and may be slated for deprecation.+rawReport :: [Report] -> Criterion ()+rawReport reports = do+ mbRawFile <- asks rawDataFile+ case mbRawFile of+ Nothing -> return ()+ Just file -> liftIO $ do+ handle <- openBinaryFile file ReadWriteMode+ L.hPut handle header+ forM_ reports $ \rpt ->+ L.hPut handle (Binary.encode rpt)+ hClose handle+++-- | Run a benchmark without analysing its performance.+runFixedIters :: Int64 -- ^ Number of loop iterations to run.+ -> (String -> Bool) -- ^ A predicate that chooses+ -- whether to run a benchmark by its+ -- name.+ -> Benchmark+ -> Criterion ()+runFixedIters iters select bs =+ for select bs $ \_idx desc bm -> do+ _ <- note "benchmarking %s\n" desc+ liftIO $ runBenchmarkable_ bm iters++-- | Iterate over benchmarks.+for :: (MonadMask m, MonadIO m) => (String -> Bool) -> Benchmark+ -> (Int -> String -> Benchmarkable -> m ()) -> m ()+for select bs0 handle = go (0::Int) ("", bs0) >> return ()+ where+ go !idx (pfx, Environment mkenv cleanenv mkbench)+ | shouldRun pfx mkbench = do+ e <- liftIO $ do+ ee <- mkenv+ evaluate (rnf ee)+ return ee+ go idx (pfx, mkbench e) `finally` liftIO (cleanenv e)+ | otherwise = return idx+ go idx (pfx, Benchmark desc b)+ | select desc' = do handle idx desc' b; return $! idx + 1+ | otherwise = return idx+ where desc' = addPrefix pfx desc+ go idx (pfx, BenchGroup desc bs) =+ foldM go idx [(addPrefix pfx desc, b) | b <- bs]++ shouldRun pfx mkbench =+ any (select . addPrefix pfx) . benchNames . mkbench $ fakeEnvironment++-- | Write summary JSON file (if applicable)+json :: [Report] -> Criterion ()+json rs+ = do jsonOpt <- asks jsonFile+ case jsonOpt of+ Just fn -> liftIO $ writeJSONReports fn rs+ Nothing -> return ()++-- | Write summary JUnit file (if applicable)+junit :: [Report] -> Criterion ()+junit rs+ = do junitOpt <- asks junitFile+ case junitOpt of+ Just fn -> liftIO $ writeFile fn msg+ Nothing -> return ()+ where+ msg = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +++ printf "<testsuite name=\"Criterion benchmarks\" tests=\"%d\">\n"+ (length rs) +++ concatMap single rs +++ "</testsuite>\n"+ single Report{..} = printf " <testcase name=\"%s\" time=\"%f\" />\n"+ (attrEsc reportName) (estPoint $ anMean $ reportAnalysis)+ attrEsc = concatMap esc+ where+ esc '\'' = "'"+ esc '"' = """+ esc '<' = "<"+ esc '>' = ">"+ esc '&' = "&"+ esc c = [c]+
Criterion/Main.hs view
@@ -1,284 +1,284 @@-{-# LANGUAGE Trustworthy #-} - --- | --- Module : Criterion.Main --- Copyright : (c) 2009-2014 Bryan O'Sullivan --- --- License : BSD-style --- Maintainer : bos@serpentine.com --- Stability : experimental --- Portability : GHC --- --- Wrappers for compiling and running benchmarks quickly and easily. --- See 'defaultMain' below for an example. --- --- All of the 'IO'-returning functions in this module initialize the timer --- before measuring time (refer to the documentation for 'initializeTime' --- for more details). - -module Criterion.Main - ( - -- * How to write benchmarks - -- $bench - - -- ** Benchmarking IO actions - -- $io - - -- ** Benchmarking pure code - -- $pure - - -- ** Fully evaluating a result - -- $rnf - - -- * Types - Benchmarkable - , Benchmark - -- * Creating a benchmark suite - , env - , envWithCleanup - , perBatchEnv - , perBatchEnvWithCleanup - , perRunEnv - , perRunEnvWithCleanup - , toBenchmarkable - , bench - , bgroup - -- ** Running a benchmark - , nf - , whnf - , nfIO - , whnfIO - , nfAppIO - , whnfAppIO - -- * Turning a suite of benchmarks into a program - , defaultMain - , defaultMainWith - , defaultConfig - -- * Other useful code - , makeMatcher - , runMode - ) where - -import Control.Monad (unless) -import Control.Monad.Trans (liftIO) -import Criterion.IO.Printf (printError, writeCsv) -import Criterion.Internal (runAndAnalyse, runFixedIters) -import Criterion.Main.Options (MatchType(..), Mode(..), defaultConfig, describe, - versionInfo) -import Criterion.Measurement (initializeTime) -import Criterion.Monad (withConfig) -import Criterion.Types -import Data.Char (toLower) -import Data.List (isInfixOf, isPrefixOf, sort, stripPrefix) -import Data.Maybe (fromMaybe) -import Options.Applicative (execParser) -import System.Environment (getProgName) -import System.Exit (ExitCode(..), exitWith) -import System.FilePath.Glob - --- | An entry point that can be used as a @main@ function. --- --- > import Criterion.Main --- > --- > fib :: Int -> Int --- > fib 0 = 0 --- > fib 1 = 1 --- > fib n = fib (n-1) + fib (n-2) --- > --- > main = defaultMain [ --- > bgroup "fib" [ bench "10" $ whnf fib 10 --- > , bench "35" $ whnf fib 35 --- > , bench "37" $ whnf fib 37 --- > ] --- > ] -defaultMain :: [Benchmark] -> IO () -defaultMain = defaultMainWith defaultConfig - --- | Create a function that can tell if a name given on the command --- line matches a benchmark. -makeMatcher :: MatchType - -> [String] - -- ^ Command line arguments. - -> Either String (String -> Bool) -makeMatcher matchKind args = - case matchKind of - Prefix -> Right $ \b -> null args || any (`isPrefixOf` b) args - Glob -> - let compOptions = compDefault { errorRecovery = False } - in case mapM (tryCompileWith compOptions) args of - Left errMsg -> Left . fromMaybe errMsg . stripPrefix "compile :: " $ - errMsg - Right ps -> Right $ \b -> null ps || any (`match` b) ps - Pattern -> Right $ \b -> null args || any (`isInfixOf` b) args - IPattern -> Right $ \b -> null args || any (`isInfixOf` map toLower b) (map (map toLower) args) - -selectBenches :: MatchType -> [String] -> Benchmark -> IO (String -> Bool) -selectBenches matchType benches bsgroup = do - toRun <- either parseError return . makeMatcher matchType $ benches - unless (null benches || any toRun (benchNames bsgroup)) $ - parseError "none of the specified names matches a benchmark" - return toRun - --- | An entry point that can be used as a @main@ function, with --- configurable defaults. --- --- Example: --- --- > import Criterion.Main.Options --- > import Criterion.Main --- > --- > myConfig = defaultConfig { --- > -- Resample 10 times for bootstrapping --- > resamples = 10 --- > } --- > --- > main = defaultMainWith myConfig [ --- > bench "fib 30" $ whnf fib 30 --- > ] --- --- If you save the above example as @\"Fib.hs\"@, you should be able --- to compile it as follows: --- --- > ghc -O --make Fib --- --- Run @\"Fib --help\"@ on the command line to get a list of command --- line options. -defaultMainWith :: Config - -> [Benchmark] - -> IO () -defaultMainWith defCfg bs = do - wat <- execParser (describe defCfg) - runMode wat bs - --- | Run a set of 'Benchmark's with the given 'Mode'. --- --- This can be useful if you have a 'Mode' from some other source (e.g. from a --- one in your benchmark driver's command-line parser). -runMode :: Mode -> [Benchmark] -> IO () -runMode wat bs = - case wat of - List -> mapM_ putStrLn . sort . concatMap benchNames $ bs - Version -> putStrLn versionInfo - RunIters cfg iters matchType benches -> do - shouldRun <- selectBenches matchType benches bsgroup - withConfig cfg $ - runFixedIters iters shouldRun bsgroup - Run cfg matchType benches -> do - shouldRun <- selectBenches matchType benches bsgroup - withConfig cfg $ do - writeCsv ("Name","Mean","MeanLB","MeanUB","Stddev","StddevLB", - "StddevUB") - liftIO initializeTime - runAndAnalyse shouldRun bsgroup - where bsgroup = BenchGroup "" bs - --- | Display an error message from a command line parsing failure, and --- exit. -parseError :: String -> IO a -parseError msg = do - _ <- printError "Error: %s\n" msg - _ <- printError "Run \"%s --help\" for usage information\n" =<< getProgName - exitWith (ExitFailure 64) - --- $bench --- --- The 'Benchmarkable' type is a container for code that can be --- benchmarked. The value inside must run a benchmark the given --- number of times. We are most interested in benchmarking two --- things: --- --- * 'IO' actions. Most 'IO' actions can be benchmarked directly. --- --- * Pure functions. GHC optimises aggressively when compiling with --- @-O@, so it is easy to write innocent-looking benchmark code that --- doesn't measure the performance of a pure function at all. We --- work around this by benchmarking both a function and its final --- argument together. - --- $io --- --- Most 'IO' actions can be benchmarked easily using one of the following --- two functions: --- --- @ --- 'nfIO' :: 'NFData' a => 'IO' a -> 'Benchmarkable' --- 'whnfIO' :: 'IO' a -> 'Benchmarkable' --- @ --- --- In certain corner cases, you may find it useful to use the following --- variants, which take the input as a separate argument: --- --- @ --- 'nfAppIO' :: 'NFData' b => (a -> 'IO' b) -> a -> 'Benchmarkable' --- 'whnfAppIO' :: (a -> 'IO' b) -> a -> 'Benchmarkable' --- @ --- --- This is useful when the bulk of the work performed by the function is --- not bound by IO, but rather by pure computations that may optimize away if --- the argument is known statically, as in 'nfIO'/'whnfIO'. - --- $pure --- --- Because GHC optimises aggressively when compiling with @-O@, it is --- potentially easy to write innocent-looking benchmark code that will --- only be evaluated once, for which all but the first iteration of --- the timing loop will be timing the cost of doing nothing. --- --- To work around this, we provide two functions for benchmarking pure --- code. --- --- The first will cause results to be fully evaluated to normal form --- (NF): --- --- @ --- 'nf' :: 'NFData' b => (a -> b) -> a -> 'Benchmarkable' --- @ --- --- The second will cause results to be evaluated to weak head normal --- form (the Haskell default): --- --- @ --- 'whnf' :: (a -> b) -> a -> 'Benchmarkable' --- @ --- --- As both of these types suggest, when you want to benchmark a --- function, you must supply two values: --- --- * The first element is the function, saturated with all but its --- last argument. --- --- * The second element is the last argument to the function. --- --- Here is an example that makes the use of these functions clearer. --- Suppose we want to benchmark the following function: --- --- @ --- firstN :: Int -> [Int] --- firstN k = take k [(0::Int)..] --- @ --- --- So in the easy case, we construct a benchmark as follows: --- --- @ --- 'nf' firstN 1000 --- @ - --- $rnf --- --- The 'whnf' harness for evaluating a pure function only evaluates --- the result to weak head normal form (WHNF). If you need the result --- evaluated all the way to normal form, use the 'nf' function to --- force its complete evaluation. --- --- Using the @firstN@ example from earlier, to naive eyes it might --- /appear/ that the following code ought to benchmark the production --- of the first 1000 list elements: --- --- @ --- 'whnf' firstN 1000 --- @ --- --- Since we are using 'whnf', in this case the result will only be --- forced until it reaches WHNF, so what this would /actually/ --- benchmark is merely how long it takes to produce the first list --- element! +{-# LANGUAGE Trustworthy #-}++-- |+-- Module : Criterion.Main+-- Copyright : (c) 2009-2014 Bryan O'Sullivan+--+-- License : BSD-style+-- Maintainer : bos@serpentine.com+-- Stability : experimental+-- Portability : GHC+--+-- Wrappers for compiling and running benchmarks quickly and easily.+-- See 'defaultMain' below for an example.+--+-- All of the 'IO'-returning functions in this module initialize the timer+-- before measuring time (refer to the documentation for 'initializeTime'+-- for more details).++module Criterion.Main+ (+ -- * How to write benchmarks+ -- $bench++ -- ** Benchmarking IO actions+ -- $io++ -- ** Benchmarking pure code+ -- $pure++ -- ** Fully evaluating a result+ -- $rnf++ -- * Types+ Benchmarkable+ , Benchmark+ -- * Creating a benchmark suite+ , env+ , envWithCleanup+ , perBatchEnv+ , perBatchEnvWithCleanup+ , perRunEnv+ , perRunEnvWithCleanup+ , toBenchmarkable+ , bench+ , bgroup+ -- ** Running a benchmark+ , nf+ , whnf+ , nfIO+ , whnfIO+ , nfAppIO+ , whnfAppIO+ -- * Turning a suite of benchmarks into a program+ , defaultMain+ , defaultMainWith+ , defaultConfig+ -- * Other useful code+ , makeMatcher+ , runMode+ ) where++import Control.Monad (unless)+import Control.Monad.Trans (liftIO)+import Criterion.IO.Printf (printError, writeCsv)+import Criterion.Internal (runAndAnalyse, runFixedIters)+import Criterion.Main.Options (MatchType(..), Mode(..), defaultConfig, describe,+ versionInfo)+import Criterion.Measurement (initializeTime)+import Criterion.Monad (withConfig)+import Criterion.Types+import Data.Char (toLower)+import Data.List (isInfixOf, isPrefixOf, sort, stripPrefix)+import Data.Maybe (fromMaybe)+import Options.Applicative (execParser)+import System.Environment (getProgName)+import System.Exit (ExitCode(..), exitWith)+import System.FilePath.Glob++-- | An entry point that can be used as a @main@ function.+--+-- > import Criterion.Main+-- >+-- > fib :: Int -> Int+-- > fib 0 = 0+-- > fib 1 = 1+-- > fib n = fib (n-1) + fib (n-2)+-- >+-- > main = defaultMain [+-- > bgroup "fib" [ bench "10" $ whnf fib 10+-- > , bench "35" $ whnf fib 35+-- > , bench "37" $ whnf fib 37+-- > ]+-- > ]+defaultMain :: [Benchmark] -> IO ()+defaultMain = defaultMainWith defaultConfig++-- | Create a function that can tell if a name given on the command+-- line matches a benchmark.+makeMatcher :: MatchType+ -> [String]+ -- ^ Command line arguments.+ -> Either String (String -> Bool)+makeMatcher matchKind args =+ case matchKind of+ Prefix -> Right $ \b -> null args || any (`isPrefixOf` b) args+ Glob ->+ let compOptions = compDefault { errorRecovery = False }+ in case mapM (tryCompileWith compOptions) args of+ Left errMsg -> Left . fromMaybe errMsg . stripPrefix "compile :: " $+ errMsg+ Right ps -> Right $ \b -> null ps || any (`match` b) ps+ Pattern -> Right $ \b -> null args || any (`isInfixOf` b) args+ IPattern -> Right $ \b -> null args || any (`isInfixOf` map toLower b) (map (map toLower) args)++selectBenches :: MatchType -> [String] -> Benchmark -> IO (String -> Bool)+selectBenches matchType benches bsgroup = do+ toRun <- either parseError return . makeMatcher matchType $ benches+ unless (null benches || any toRun (benchNames bsgroup)) $+ parseError "none of the specified names matches a benchmark"+ return toRun++-- | An entry point that can be used as a @main@ function, with+-- configurable defaults.+--+-- Example:+--+-- > import Criterion.Main.Options+-- > import Criterion.Main+-- >+-- > myConfig = defaultConfig {+-- > -- Resample 10 times for bootstrapping+-- > resamples = 10+-- > }+-- >+-- > main = defaultMainWith myConfig [+-- > bench "fib 30" $ whnf fib 30+-- > ]+--+-- If you save the above example as @\"Fib.hs\"@, you should be able+-- to compile it as follows:+--+-- > ghc -O --make Fib+--+-- Run @\"Fib --help\"@ on the command line to get a list of command+-- line options.+defaultMainWith :: Config+ -> [Benchmark]+ -> IO ()+defaultMainWith defCfg bs = do+ wat <- execParser (describe defCfg)+ runMode wat bs++-- | Run a set of 'Benchmark's with the given 'Mode'.+--+-- This can be useful if you have a 'Mode' from some other source (e.g. from a+-- one in your benchmark driver's command-line parser).+runMode :: Mode -> [Benchmark] -> IO ()+runMode wat bs =+ case wat of+ List -> mapM_ putStrLn . sort . concatMap benchNames $ bs+ Version -> putStrLn versionInfo+ RunIters cfg iters matchType benches -> do+ shouldRun <- selectBenches matchType benches bsgroup+ withConfig cfg $+ runFixedIters iters shouldRun bsgroup+ Run cfg matchType benches -> do+ shouldRun <- selectBenches matchType benches bsgroup+ withConfig cfg $ do+ writeCsv ("Name","Mean","MeanLB","MeanUB","Stddev","StddevLB",+ "StddevUB")+ liftIO initializeTime+ runAndAnalyse shouldRun bsgroup+ where bsgroup = BenchGroup "" bs++-- | Display an error message from a command line parsing failure, and+-- exit.+parseError :: String -> IO a+parseError msg = do+ _ <- printError "Error: %s\n" msg+ _ <- printError "Run \"%s --help\" for usage information\n" =<< getProgName+ exitWith (ExitFailure 64)++-- $bench+--+-- The 'Benchmarkable' type is a container for code that can be+-- benchmarked. The value inside must run a benchmark the given+-- number of times. We are most interested in benchmarking two+-- things:+--+-- * 'IO' actions. Most 'IO' actions can be benchmarked directly.+--+-- * Pure functions. GHC optimises aggressively when compiling with+-- @-O@, so it is easy to write innocent-looking benchmark code that+-- doesn't measure the performance of a pure function at all. We+-- work around this by benchmarking both a function and its final+-- argument together.++-- $io+--+-- Most 'IO' actions can be benchmarked easily using one of the following+-- two functions:+--+-- @+-- 'nfIO' :: 'NFData' a => 'IO' a -> 'Benchmarkable'+-- 'whnfIO' :: 'IO' a -> 'Benchmarkable'+-- @+--+-- In certain corner cases, you may find it useful to use the following+-- variants, which take the input as a separate argument:+--+-- @+-- 'nfAppIO' :: 'NFData' b => (a -> 'IO' b) -> a -> 'Benchmarkable'+-- 'whnfAppIO' :: (a -> 'IO' b) -> a -> 'Benchmarkable'+-- @+--+-- This is useful when the bulk of the work performed by the function is+-- not bound by IO, but rather by pure computations that may optimize away if+-- the argument is known statically, as in 'nfIO'/'whnfIO'.++-- $pure+--+-- Because GHC optimises aggressively when compiling with @-O@, it is+-- potentially easy to write innocent-looking benchmark code that will+-- only be evaluated once, for which all but the first iteration of+-- the timing loop will be timing the cost of doing nothing.+--+-- To work around this, we provide two functions for benchmarking pure+-- code.+--+-- The first will cause results to be fully evaluated to normal form+-- (NF):+--+-- @+-- 'nf' :: 'NFData' b => (a -> b) -> a -> 'Benchmarkable'+-- @+--+-- The second will cause results to be evaluated to weak head normal+-- form (the Haskell default):+--+-- @+-- 'whnf' :: (a -> b) -> a -> 'Benchmarkable'+-- @+--+-- As both of these types suggest, when you want to benchmark a+-- function, you must supply two values:+--+-- * The first element is the function, saturated with all but its+-- last argument.+--+-- * The second element is the last argument to the function.+--+-- Here is an example that makes the use of these functions clearer.+-- Suppose we want to benchmark the following function:+--+-- @+-- firstN :: Int -> [Int]+-- firstN k = take k [(0::Int)..]+-- @+--+-- So in the easy case, we construct a benchmark as follows:+--+-- @+-- 'nf' firstN 1000+-- @++-- $rnf+--+-- The 'whnf' harness for evaluating a pure function only evaluates+-- the result to weak head normal form (WHNF). If you need the result+-- evaluated all the way to normal form, use the 'nf' function to+-- force its complete evaluation.+--+-- Using the @firstN@ example from earlier, to naive eyes it might+-- /appear/ that the following code ought to benchmark the production+-- of the first 1000 list elements:+--+-- @+-- 'whnf' firstN 1000+-- @+--+-- Since we are using 'whnf', in this case the result will only be+-- forced until it reaches WHNF, so what this would /actually/+-- benchmark is merely how long it takes to produce the first list+-- element!
Criterion/Main/Options.hs view
@@ -1,249 +1,249 @@-{-# LANGUAGE DeriveDataTypeable, DeriveGeneric, RecordWildCards #-} - --- | --- Module : Criterion.Main.Options --- Copyright : (c) 2014 Bryan O'Sullivan --- --- License : BSD-style --- Maintainer : bos@serpentine.com --- Stability : experimental --- Portability : GHC --- --- Benchmarking command-line configuration. - -module Criterion.Main.Options - ( - Mode(..) - , MatchType(..) - , defaultConfig - , parseWith - , config - , describe - , describeWith - , versionInfo - ) where - -import Control.Monad (when) -import Criterion.Analysis (validateAccessors) -import Criterion.Types (Config(..), Verbosity(..), measureAccessors, - measureKeys) -import Data.Char (isSpace, toLower) -import Data.Data (Data) -import Data.Int (Int64) -import Data.List (isPrefixOf) -import Data.Version (showVersion) -import GHC.Generics (Generic) -import Options.Applicative -import Options.Applicative.Help (Chunk(..), tabulate) -import Options.Applicative.Help.Pretty ((.$.)) -import Options.Applicative.Types -import Paths_criterion (version) -import Prelude () -import Prelude.Compat -import Prettyprinter (Doc, pretty) -import Prettyprinter.Render.Terminal (AnsiStyle) -import Statistics.Types (mkCL,cl95) -import qualified Data.Map as M - --- | How to match a benchmark name. -data MatchType = Prefix - -- ^ Match by prefix. For example, a prefix of - -- @\"foo\"@ will match @\"foobar\"@. - | Glob - -- ^ Match by Unix-style glob pattern. When using this match - -- type, benchmark names are treated as if they were - -- file-paths. For example, the glob patterns @\"*/ba*\"@ and - -- @\"*/*\"@ will match @\"foo/bar\"@, but @\"*\"@ or @\"*bar\"@ - -- __will not__. - | Pattern - -- ^ Match by searching given substring in benchmark - -- paths. - | IPattern - -- ^ Same as 'Pattern', but case insensitive. - deriving (Eq, Ord, Bounded, Enum, Read, Show, Data, - Generic) - --- | Execution mode for a benchmark program. -data Mode = List - -- ^ List all benchmarks. - | Version - -- ^ Print the version. - | RunIters Config Int64 MatchType [String] - -- ^ Run the given benchmarks, without collecting or - -- analysing performance numbers. - | Run Config MatchType [String] - -- ^ Run and analyse the given benchmarks. - deriving (Eq, Read, Show, Data, Generic) - --- | Default benchmarking configuration. -defaultConfig :: Config -defaultConfig = Config { - confInterval = cl95 - , timeLimit = 5 - , resamples = 1000 - , regressions = [] - , rawDataFile = Nothing - , reportFile = Nothing - , csvFile = Nothing - , jsonFile = Nothing - , junitFile = Nothing - , verbosity = Normal - , template = "default" - } - --- | Parse a command line. -parseWith :: Config - -- ^ Default configuration to use if options are not - -- explicitly specified. - -> Parser Mode -parseWith cfg = - runOrRunIters <|> - (List <$ switch (long "list" <> short 'l' <> help "List benchmarks")) <|> - (Version <$ switch (long "version" <> help "Show version info")) - where - runOrRunIters :: Parser Mode - runOrRunIters = - -- Because Run and RunIters are separate Modes, it's tempting to - -- split them out into their own Parsers and choose between them - -- using (<|>), i.e., - -- - -- (Run <$> config cfg <*> ...) - -- <|> (RunIters <$> config cfg <*> (... "iters") <*> ...) - -- - -- This is possible, but it has the unfortunate consequence of - -- invoking the same Parsers (e.g., @config@) multiple times. As a - -- result, the help text for each Parser would be duplicated when the - -- user runs --help. See #168. - -- - -- To avoid this problem, we combine Run and RunIters into a single - -- Parser that only runs each of its sub-Parsers once. The trick is - -- to make the Parser for "iters" (the key difference between Run and - -- RunIters) an optional Parser. If the Parser yields Nothing, select - -- Run, and if the Parser yields Just, select RunIters. - -- - -- This is admittedly a bit of a design smell, as the idiomatic way - -- to handle this would be to turn Run and RunIters into subcommands - -- rather than options. That way, each subcommand would have its own - -- --help prompt, thereby avoiding the need to deduplicate the help - -- text. Unfortunately, this would require breaking the CLI interface - -- of every criterion-based program, which seems like a leap too far. - -- The solution used here, while a bit grimy, gets the job done while - -- keeping Run and RunIters as options. - (\cfg' mbIters -> - case mbIters of - Just iters -> RunIters cfg' iters - Nothing -> Run cfg') - <$> config cfg - <*> optional (option auto - (long "iters" <> short 'n' <> metavar "ITERS" <> - help "Run benchmarks, don't analyse")) - <*> option match - (long "match" <> short 'm' <> metavar "MATCH" <> value Prefix <> - help "How to match benchmark names (\"prefix\", \"glob\", \"pattern\", or \"ipattern\")") - <*> many (argument str (metavar "NAME...")) - --- | Parse a configuration. -config :: Config -> Parser Config -config Config{..} = Config - <$> option (mkCL <$> range 0.001 0.999) - (long "ci" <> short 'I' <> metavar "CI" <> value confInterval <> - help "Confidence interval") - <*> option (range 0.1 86400) - (long "time-limit" <> short 'L' <> metavar "SECS" <> value timeLimit <> - help "Time limit to run a benchmark") - <*> option (range 1 1000000) - (long "resamples" <> metavar "COUNT" <> value resamples <> - help "Number of bootstrap resamples to perform") - <*> manyDefault regressions - (option regressParams - (long "regress" <> metavar "RESP:PRED.." <> - help "Regressions to perform")) - <*> outputOption rawDataFile (long "raw" <> - help "File to write raw data to") - <*> outputOption reportFile (long "output" <> short 'o' <> - help "File to write report to") - <*> outputOption csvFile (long "csv" <> - help "File to write CSV summary to") - <*> outputOption jsonFile (long "json" <> - help "File to write JSON summary to") - <*> outputOption junitFile (long "junit" <> - help "File to write JUnit summary to") - <*> (toEnum <$> option (range 0 2) - (long "verbosity" <> short 'v' <> metavar "LEVEL" <> - value (fromEnum verbosity) <> - help "Verbosity level")) - <*> strOption (long "template" <> short 't' <> metavar "FILE" <> - value template <> - help "Template to use for report") - -manyDefault :: [a] -> Parser a -> Parser [a] -manyDefault def m = set_default <$> many m - where - set_default [] = def - set_default xs = xs - -outputOption :: Maybe String -> Mod OptionFields String -> Parser (Maybe String) -outputOption file m = - optional (strOption (m <> metavar "FILE" <> maybe mempty value file)) - -range :: (Show a, Read a, Ord a) => a -> a -> ReadM a -range lo hi = do - s <- readerAsk - case reads s of - [(i, "")] - | i >= lo && i <= hi -> return i - | otherwise -> readerError $ show i ++ " is outside range " ++ - show (lo,hi) - _ -> readerError $ show s ++ " is not a number" - -match :: ReadM MatchType -match = do - m <- readerAsk - case map toLower m of - mm | mm `isPrefixOf` "pfx" -> return Prefix - | mm `isPrefixOf` "prefix" -> return Prefix - | mm `isPrefixOf` "glob" -> return Glob - | mm `isPrefixOf` "pattern" -> return Pattern - | mm `isPrefixOf` "ipattern" -> return IPattern - | otherwise -> readerError $ - show m ++ " is not a known match type" - ++ "Try \"prefix\", \"pattern\", \"ipattern\" or \"glob\"." - -regressParams :: ReadM ([String], String) -regressParams = do - m <- readerAsk - let repl ',' = ' ' - repl c = c - tidy = reverse . dropWhile isSpace . reverse . dropWhile isSpace - (r,ps) = break (==':') m - when (null r) $ - readerError "no responder specified" - when (null ps) $ - readerError "no predictors specified" - let ret = (words . map repl . drop 1 $ ps, tidy r) - either readerError (const (return ret)) $ uncurry validateAccessors ret - --- | Flesh out a command-line parser. -describe :: Config -> ParserInfo Mode -describe cfg = describeWith $ parseWith cfg - --- | Flesh out command-line information using a custom 'Parser'. -describeWith :: Parser a -> ParserInfo a -describeWith parser = info (helper <*> parser) $ - header ("Microbenchmark suite - " <> versionInfo) <> - fullDesc <> - footerDoc (unChunk regressionHelp) - --- | A string describing the version of this benchmark (really, the --- version of criterion that was used to build it). -versionInfo :: String -versionInfo = "built with criterion " <> showVersion version - --- We sort not by name, but by likely frequency of use. -regressionHelp :: Chunk (Doc AnsiStyle) -regressionHelp = - fmap (pretty "Regression metrics (for use with --regress):" .$.) $ - tabulate - (prefTabulateFill defaultPrefs) - [(pretty n, pretty d) | (n,(_,d)) <- map f measureKeys] - where f k = (k, measureAccessors M.! k) +{-# LANGUAGE DeriveDataTypeable, DeriveGeneric, RecordWildCards #-}++-- |+-- Module : Criterion.Main.Options+-- Copyright : (c) 2014 Bryan O'Sullivan+--+-- License : BSD-style+-- Maintainer : bos@serpentine.com+-- Stability : experimental+-- Portability : GHC+--+-- Benchmarking command-line configuration.++module Criterion.Main.Options+ (+ Mode(..)+ , MatchType(..)+ , defaultConfig+ , parseWith+ , config+ , describe+ , describeWith+ , versionInfo+ ) where++import Control.Monad (when)+import Criterion.Analysis (validateAccessors)+import Criterion.Types (Config(..), Verbosity(..), measureAccessors,+ measureKeys)+import Data.Char (isSpace, toLower)+import Data.Data (Data)+import Data.Int (Int64)+import Data.List (isPrefixOf)+import Data.Version (showVersion)+import GHC.Generics (Generic)+import Options.Applicative+import Options.Applicative.Help (Chunk(..), tabulate)+import Options.Applicative.Help.Pretty ((.$.))+import Options.Applicative.Types+import Paths_criterion (version)+import Prelude ()+import Prelude.Compat+import Prettyprinter (Doc, pretty)+import Prettyprinter.Render.Terminal (AnsiStyle)+import Statistics.Types (mkCL,cl95)+import qualified Data.Map as M++-- | How to match a benchmark name.+data MatchType = Prefix+ -- ^ Match by prefix. For example, a prefix of+ -- @\"foo\"@ will match @\"foobar\"@.+ | Glob+ -- ^ Match by Unix-style glob pattern. When using this match+ -- type, benchmark names are treated as if they were+ -- file-paths. For example, the glob patterns @\"*/ba*\"@ and+ -- @\"*/*\"@ will match @\"foo/bar\"@, but @\"*\"@ or @\"*bar\"@+ -- __will not__.+ | Pattern+ -- ^ Match by searching given substring in benchmark+ -- paths.+ | IPattern+ -- ^ Same as 'Pattern', but case insensitive.+ deriving (Eq, Ord, Bounded, Enum, Read, Show, Data,+ Generic)++-- | Execution mode for a benchmark program.+data Mode = List+ -- ^ List all benchmarks.+ | Version+ -- ^ Print the version.+ | RunIters Config Int64 MatchType [String]+ -- ^ Run the given benchmarks, without collecting or+ -- analysing performance numbers.+ | Run Config MatchType [String]+ -- ^ Run and analyse the given benchmarks.+ deriving (Eq, Read, Show, Data, Generic)++-- | Default benchmarking configuration.+defaultConfig :: Config+defaultConfig = Config {+ confInterval = cl95+ , timeLimit = 5+ , resamples = 1000+ , regressions = []+ , rawDataFile = Nothing+ , reportFile = Nothing+ , csvFile = Nothing+ , jsonFile = Nothing+ , junitFile = Nothing+ , verbosity = Normal+ , template = "default"+ }++-- | Parse a command line.+parseWith :: Config+ -- ^ Default configuration to use if options are not+ -- explicitly specified.+ -> Parser Mode+parseWith cfg =+ runOrRunIters <|>+ (List <$ switch (long "list" <> short 'l' <> help "List benchmarks")) <|>+ (Version <$ switch (long "version" <> help "Show version info"))+ where+ runOrRunIters :: Parser Mode+ runOrRunIters =+ -- Because Run and RunIters are separate Modes, it's tempting to+ -- split them out into their own Parsers and choose between them+ -- using (<|>), i.e.,+ --+ -- (Run <$> config cfg <*> ...)+ -- <|> (RunIters <$> config cfg <*> (... "iters") <*> ...)+ --+ -- This is possible, but it has the unfortunate consequence of+ -- invoking the same Parsers (e.g., @config@) multiple times. As a+ -- result, the help text for each Parser would be duplicated when the+ -- user runs --help. See #168.+ --+ -- To avoid this problem, we combine Run and RunIters into a single+ -- Parser that only runs each of its sub-Parsers once. The trick is+ -- to make the Parser for "iters" (the key difference between Run and+ -- RunIters) an optional Parser. If the Parser yields Nothing, select+ -- Run, and if the Parser yields Just, select RunIters.+ --+ -- This is admittedly a bit of a design smell, as the idiomatic way+ -- to handle this would be to turn Run and RunIters into subcommands+ -- rather than options. That way, each subcommand would have its own+ -- --help prompt, thereby avoiding the need to deduplicate the help+ -- text. Unfortunately, this would require breaking the CLI interface+ -- of every criterion-based program, which seems like a leap too far.+ -- The solution used here, while a bit grimy, gets the job done while+ -- keeping Run and RunIters as options.+ (\cfg' mbIters ->+ case mbIters of+ Just iters -> RunIters cfg' iters+ Nothing -> Run cfg')+ <$> config cfg+ <*> optional (option auto+ (long "iters" <> short 'n' <> metavar "ITERS" <>+ help "Run benchmarks, don't analyse"))+ <*> option match+ (long "match" <> short 'm' <> metavar "MATCH" <> value Prefix <>+ help "How to match benchmark names (\"prefix\", \"glob\", \"pattern\", or \"ipattern\")")+ <*> many (argument str (metavar "NAME..."))++-- | Parse a configuration.+config :: Config -> Parser Config+config Config{..} = Config+ <$> option (mkCL <$> range 0.001 0.999)+ (long "ci" <> short 'I' <> metavar "CI" <> value confInterval <>+ help "Confidence interval")+ <*> option (range 0.1 86400)+ (long "time-limit" <> short 'L' <> metavar "SECS" <> value timeLimit <>+ help "Time limit to run a benchmark")+ <*> option (range 1 1000000)+ (long "resamples" <> metavar "COUNT" <> value resamples <>+ help "Number of bootstrap resamples to perform")+ <*> manyDefault regressions+ (option regressParams+ (long "regress" <> metavar "RESP:PRED.." <>+ help "Regressions to perform"))+ <*> outputOption rawDataFile (long "raw" <>+ help "File to write raw data to")+ <*> outputOption reportFile (long "output" <> short 'o' <>+ help "File to write report to")+ <*> outputOption csvFile (long "csv" <>+ help "File to write CSV summary to")+ <*> outputOption jsonFile (long "json" <>+ help "File to write JSON summary to")+ <*> outputOption junitFile (long "junit" <>+ help "File to write JUnit summary to")+ <*> (toEnum <$> option (range 0 2)+ (long "verbosity" <> short 'v' <> metavar "LEVEL" <>+ value (fromEnum verbosity) <>+ help "Verbosity level"))+ <*> strOption (long "template" <> short 't' <> metavar "FILE" <>+ value template <>+ help "Template to use for report")++manyDefault :: [a] -> Parser a -> Parser [a]+manyDefault def m = set_default <$> many m+ where+ set_default [] = def+ set_default xs = xs++outputOption :: Maybe String -> Mod OptionFields String -> Parser (Maybe String)+outputOption file m =+ optional (strOption (m <> metavar "FILE" <> maybe mempty value file))++range :: (Show a, Read a, Ord a) => a -> a -> ReadM a+range lo hi = do+ s <- readerAsk+ case reads s of+ [(i, "")]+ | i >= lo && i <= hi -> return i+ | otherwise -> readerError $ show i ++ " is outside range " +++ show (lo,hi)+ _ -> readerError $ show s ++ " is not a number"++match :: ReadM MatchType+match = do+ m <- readerAsk+ case map toLower m of+ mm | mm `isPrefixOf` "pfx" -> return Prefix+ | mm `isPrefixOf` "prefix" -> return Prefix+ | mm `isPrefixOf` "glob" -> return Glob+ | mm `isPrefixOf` "pattern" -> return Pattern+ | mm `isPrefixOf` "ipattern" -> return IPattern+ | otherwise -> readerError $+ show m ++ " is not a known match type"+ ++ "Try \"prefix\", \"pattern\", \"ipattern\" or \"glob\"."++regressParams :: ReadM ([String], String)+regressParams = do+ m <- readerAsk+ let repl ',' = ' '+ repl c = c+ tidy = reverse . dropWhile isSpace . reverse . dropWhile isSpace+ (r,ps) = break (==':') m+ when (null r) $+ readerError "no responder specified"+ when (null ps) $+ readerError "no predictors specified"+ let ret = (words . map repl . drop 1 $ ps, tidy r)+ either readerError (const (return ret)) $ uncurry validateAccessors ret++-- | Flesh out a command-line parser.+describe :: Config -> ParserInfo Mode+describe cfg = describeWith $ parseWith cfg++-- | Flesh out command-line information using a custom 'Parser'.+describeWith :: Parser a -> ParserInfo a+describeWith parser = info (helper <*> parser) $+ header ("Microbenchmark suite - " <> versionInfo) <>+ fullDesc <>+ footerDoc (unChunk regressionHelp)++-- | A string describing the version of this benchmark (really, the+-- version of criterion that was used to build it).+versionInfo :: String+versionInfo = "built with criterion " <> showVersion version++-- We sort not by name, but by likely frequency of use.+regressionHelp :: Chunk (Doc AnsiStyle)+regressionHelp =+ fmap (pretty "Regression metrics (for use with --regress):" .$.) $+ tabulate+ (prefTabulateFill defaultPrefs)+ [(pretty n, pretty d) | (n,(_,d)) <- map f measureKeys]+ where f k = (k, measureAccessors M.! k)
Criterion/Monad.hs view
@@ -1,56 +1,56 @@-{-# LANGUAGE Trustworthy #-} --- | --- Module : Criterion.Monad --- Copyright : (c) 2009 Neil Brown --- --- License : BSD-style --- Maintainer : bos@serpentine.com --- Stability : experimental --- Portability : GHC --- --- The environment in which most criterion code executes. -module Criterion.Monad - ( - Criterion - , withConfig - , getGen - ) where - -import Control.Monad.Reader (asks, runReaderT) -import Control.Monad.Trans (liftIO) -import Criterion.Monad.Internal (Criterion(..), Crit(..)) -import Criterion.Types hiding (measure) -import Data.IORef (IORef, newIORef, readIORef, writeIORef) -import System.IO.CodePage (withCP65001) -import System.Random.MWC (GenIO, createSystemRandom) - --- | Run a 'Criterion' action with the given 'Config'. -withConfig :: Config -> Criterion a -> IO a -withConfig cfg (Criterion act) = withCP65001 $ do - g <- newIORef Nothing - runReaderT act (Crit cfg g) - --- | Return a random number generator, creating one if necessary. --- --- This is not currently thread-safe, but in a harmless way (we might --- call 'createSystemRandom' more than once if multiple threads race). -getGen :: Criterion GenIO -getGen = memoise gen createSystemRandom - --- | Memoise the result of an 'IO' action. --- --- This is not currently thread-safe, but hopefully in a harmless way. --- We might call the given action more than once if multiple threads --- race, so our caller's job is to write actions that can be run --- multiple times safely. -memoise :: (Crit -> IORef (Maybe a)) -> IO a -> Criterion a -memoise ref generate = do - r <- Criterion $ asks ref - liftIO $ do - mv <- readIORef r - case mv of - Just rv -> return rv - Nothing -> do - rv <- generate - writeIORef r (Just rv) - return rv +{-# LANGUAGE Trustworthy #-}+-- |+-- Module : Criterion.Monad+-- Copyright : (c) 2009 Neil Brown+--+-- License : BSD-style+-- Maintainer : bos@serpentine.com+-- Stability : experimental+-- Portability : GHC+--+-- The environment in which most criterion code executes.+module Criterion.Monad+ (+ Criterion+ , withConfig+ , getGen+ ) where++import Control.Monad.Reader (asks, runReaderT)+import Control.Monad.Trans (liftIO)+import Criterion.Monad.Internal (Criterion(..), Crit(..))+import Criterion.Types hiding (measure)+import Data.IORef (IORef, newIORef, readIORef, writeIORef)+import System.IO.CodePage (withCP65001)+import System.Random.MWC (GenIO, createSystemRandom)++-- | Run a 'Criterion' action with the given 'Config'.+withConfig :: Config -> Criterion a -> IO a+withConfig cfg (Criterion act) = withCP65001 $ do+ g <- newIORef Nothing+ runReaderT act (Crit cfg g)++-- | Return a random number generator, creating one if necessary.+--+-- This is not currently thread-safe, but in a harmless way (we might+-- call 'createSystemRandom' more than once if multiple threads race).+getGen :: Criterion GenIO+getGen = memoise gen createSystemRandom++-- | Memoise the result of an 'IO' action.+--+-- This is not currently thread-safe, but hopefully in a harmless way.+-- We might call the given action more than once if multiple threads+-- race, so our caller's job is to write actions that can be run+-- multiple times safely.+memoise :: (Crit -> IORef (Maybe a)) -> IO a -> Criterion a+memoise ref generate = do+ r <- Criterion $ asks ref+ liftIO $ do+ mv <- readIORef r+ case mv of+ Just rv -> return rv+ Nothing -> do+ rv <- generate+ writeIORef r (Just rv)+ return rv
Criterion/Monad/Internal.hs view
@@ -1,45 +1,45 @@-{-# LANGUAGE GeneralizedNewtypeDeriving, MultiParamTypeClasses #-} -{-# OPTIONS_GHC -funbox-strict-fields #-} - --- | --- Module : Criterion.Monad.Internal --- Copyright : (c) 2009 Neil Brown --- --- License : BSD-style --- Maintainer : bos@serpentine.com --- Stability : experimental --- Portability : GHC --- --- The environment in which most criterion code executes. -module Criterion.Monad.Internal - ( - Criterion(..) - , Crit(..) - ) where - -import Control.Monad.Catch (MonadThrow, MonadCatch, MonadMask) -import qualified Control.Monad.Fail as Fail (MonadFail(..)) -import Control.Monad.Reader (MonadReader(..), ReaderT) -import Control.Monad.Trans (MonadIO) -import Control.Monad.Trans.Instances () -import Criterion.Types (Config) -import Data.IORef (IORef) -import Prelude () -import Prelude.Compat -import System.Random.MWC (GenIO) - -data Crit = Crit { - config :: !Config - , gen :: !(IORef (Maybe GenIO)) - } - --- | The monad in which most criterion code executes. -newtype Criterion a = Criterion { - runCriterion :: ReaderT Crit IO a - } deriving ( Functor, Applicative, Monad, Fail.MonadFail, MonadIO - , MonadThrow, MonadCatch, MonadMask ) - -instance MonadReader Config Criterion where - ask = config `fmap` Criterion ask - local f = Criterion . local fconfig . runCriterion - where fconfig c = c { config = f (config c) } +{-# LANGUAGE GeneralizedNewtypeDeriving, MultiParamTypeClasses #-}+{-# OPTIONS_GHC -funbox-strict-fields #-}++-- |+-- Module : Criterion.Monad.Internal+-- Copyright : (c) 2009 Neil Brown+--+-- License : BSD-style+-- Maintainer : bos@serpentine.com+-- Stability : experimental+-- Portability : GHC+--+-- The environment in which most criterion code executes.+module Criterion.Monad.Internal+ (+ Criterion(..)+ , Crit(..)+ ) where++import Control.Monad.Catch (MonadThrow, MonadCatch, MonadMask)+import qualified Control.Monad.Fail as Fail (MonadFail(..))+import Control.Monad.Reader (MonadReader(..), ReaderT)+import Control.Monad.Trans (MonadIO)+import Control.Monad.Trans.Instances ()+import Criterion.Types (Config)+import Data.IORef (IORef)+import Prelude ()+import Prelude.Compat+import System.Random.MWC (GenIO)++data Crit = Crit {+ config :: !Config+ , gen :: !(IORef (Maybe GenIO))+ }++-- | The monad in which most criterion code executes.+newtype Criterion a = Criterion {+ runCriterion :: ReaderT Crit IO a+ } deriving ( Functor, Applicative, Monad, Fail.MonadFail, MonadIO+ , MonadThrow, MonadCatch, MonadMask )++instance MonadReader Config Criterion where+ ask = config `fmap` Criterion ask+ local f = Criterion . local fconfig . runCriterion+ where fconfig c = c { config = f (config c) }
Criterion/Report.hs view
@@ -1,313 +1,313 @@-{-# LANGUAGE CPP #-} -{-# LANGUAGE DeriveDataTypeable #-} -{-# LANGUAGE DeriveGeneric #-} -{-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE RecordWildCards #-} -{-# LANGUAGE ScopedTypeVariables #-} -{-# LANGUAGE Trustworthy #-} - --- | --- Module : Criterion.Report --- Copyright : (c) 2009-2014 Bryan O'Sullivan --- --- License : BSD-style --- Maintainer : bos@serpentine.com --- Stability : experimental --- Portability : GHC --- --- Reporting functions. - -module Criterion.Report - ( - formatReport - , report - , tidyTails - -- * Rendering helper functions - , TemplateException(..) - , loadTemplate - , includeFile - , getTemplateDir - , vector - , vector2 - ) where - -import Control.Exception (Exception, IOException, throwIO) -import Control.Monad (mplus) -import Control.Monad.IO.Class (MonadIO(liftIO)) -import Control.Monad.Reader (ask) -import Criterion.Monad (Criterion) -import Criterion.Types -import Data.Aeson (ToJSON (..), Value(..), object, (.=), Value) -import qualified Data.Aeson.Key as Key -import Data.Aeson.Text (encodeToLazyText) -import Data.Data (Data) -import Data.Foldable (forM_) -import GHC.Generics (Generic) -import Paths_criterion (getDataFileName) -import Statistics.Function (minMax) -import System.Directory (doesFileExist) -import System.FilePath ((</>), (<.>), isPathSeparator) -import System.IO (hPutStrLn, stderr) -import Text.Microstache (Key (..), Node (..), Template (..), - compileMustacheText, displayMustacheWarning, renderMustacheW) -import Prelude () -import Prelude.Compat -import qualified Control.Exception as E -import qualified Data.Text as T -#if defined(EMBED) -import qualified Data.Text.Lazy.Encoding as TLE -#endif -import qualified Data.Text.IO as T -import qualified Data.Text.Lazy as TL -import qualified Data.Text.Lazy.IO as TL -import qualified Data.Vector.Generic as G -import qualified Data.Vector.Unboxed as U - -#if defined(EMBED) -import Criterion.EmbeddedData (dataFiles, chartContents) -import qualified Data.ByteString.Lazy as BL -import qualified Data.Text.Encoding as TE -#else -import qualified Language.Javascript.Chart as Chart -#endif - --- | Trim long flat tails from a KDE plot. -tidyTails :: KDE -> KDE -tidyTails KDE{..} = KDE { kdeType = kdeType - , kdeValues = G.slice front winSize kdeValues - , kdePDF = G.slice front winSize kdePDF - } - where tiny = uncurry subtract (minMax kdePDF) * 0.005 - omitTiny = G.length . G.takeWhile ((<= tiny) . abs) - front = omitTiny kdePDF - back = omitTiny . G.reverse $ kdePDF - winSize = G.length kdePDF - front - back - --- | Return the path to the template and other files used for --- generating reports. --- --- When the @-fembed-data-files@ @Cabal@ flag is enabled, this simply --- returns the empty path. -getTemplateDir :: IO FilePath -#if defined(EMBED) -getTemplateDir = pure "" -#else -getTemplateDir = getDataFileName "templates" -#endif - --- | Write out a series of 'Report' values to a single file, if --- configured to do so. -report :: [Report] -> Criterion () -report reports = do - Config{..} <- ask - forM_ reportFile $ \name -> liftIO $ do - td <- getTemplateDir - tpl <- loadTemplate [td,"."] template - TL.writeFile name =<< formatReport reports tpl - --- | Escape JSON string aimed to be embedded in an HTML <script> tag. Notably --- < and > are replaced with their unicode escape sequences such that closing --- the <script> tag from within the JSON data is disallowed, i.e, the character --- sequence "</" is made impossible. --- --- Moreover, & is escaped to avoid HTML character references (&<code>;), + is --- escaped to avoid UTF-7 attacks (should only affect old versions of IE), and --- \0 is escaped to allow it to be represented in JSON, as the NUL character is --- disallowed in JSON but valid in Haskell characters. --- --- The following characters are replaced with their unicode escape sequences --- (\uXXXX): --- <, >, &, +, \x2028 (line separator), \x2029 (paragraph separator), and \0 --- (null terminator) --- --- Other characters are such as \\ (backslash) and \n (newline) are not escaped --- as the JSON serializer @encodeToLazyText@ already escapes them when they --- occur inside JSON strings and they cause no issues with respect to HTML --- safety when used outside of strings in the JSON-encoded payload. --- --- If the resulting JSON-encoded Text is embedded in an HTML attribute, extra --- care is required to also escape quotes with character references in the --- final JSON payload. --- See <https://html.spec.whatwg.org/multipage/syntax.html#syntax-attributes> --- for details on how to escape attribute values. -escapeJSON :: Char -> TL.Text -escapeJSON '<' = "\\u003c" -- ban closing of the script tag by making </ impossible -escapeJSON '>' = "\\u003e" -- encode tags with unicode escape sequences -escapeJSON '\x2028' = "\\u2028" -- line separator -escapeJSON '\x2029' = "\\u2029" -- paragraph separator -escapeJSON '&' = "\\u0026" -- avoid HTML entities -escapeJSON '+' = "\\u002b" -- + can be used in UTF-7 escape sequences -escapeJSON '\0' = "\\u0000" -- make null characters explicit -escapeJSON c = TL.singleton c - --- | Format a series of 'Report' values using the given Mustache template. -formatReport :: [Report] - -> TL.Text -- ^ Mustache template. - -> IO TL.Text -formatReport reports templateName = do - template0 <- case compileMustacheText "tpl" templateName of - Left err -> fail (show err) -- TODO: throw a template exception? - Right x -> return x - - criterionJS <- readDataFile "criterion.js" - criterionCSS <- readDataFile "criterion.css" - chartJS <- chartFileContents - - -- includes, only top level - templates <- getTemplateDir - template <- includeTemplate (includeFile [templates]) template0 - - let context = object - [ "json" .= reportsJSON reports - , "js-criterion" .= criterionJS - , "js-chart" .= chartJS - , "criterion-css" .= criterionCSS - ] - - let (warnings, formatted) = renderMustacheW template context - -- If there were any issues during mustache template rendering, make sure - -- to inform the user. See #127. - forM_ warnings $ \warning -> do - criterionWarning $ displayMustacheWarning warning - return formatted - where - reportsJSON :: [Report] -> T.Text - reportsJSON = TL.toStrict . TL.concatMap escapeJSON . encodeToLazyText - - chartFileContents :: IO T.Text -#if defined(EMBED) - chartFileContents = pure $ TE.decodeUtf8 chartContents -#else - chartFileContents = T.readFile =<< Chart.file Chart.Chart -#endif - - readDataFile :: FilePath -> IO T.Text - readDataFile fp = - (T.readFile =<< getDataFileName ("templates" </> fp)) -#if defined(EMBED) - `E.catch` \(e :: IOException) -> - maybe (throwIO e) - (pure . TE.decodeUtf8) - (lookup fp dataFiles) -#endif - - includeTemplate :: (FilePath -> IO T.Text) -> Template -> IO Template - includeTemplate f Template {..} = fmap - (Template templateActual) - (traverse (traverse (includeNode f)) templateCache) - - includeNode :: (FilePath -> IO T.Text) -> Node -> IO Node - includeNode f (Section (Key ["include"]) [TextBlock fp]) = - fmap TextBlock (f (T.unpack fp)) - includeNode _ n = return n - -criterionWarning :: String -> IO () -criterionWarning msg = - hPutStrLn stderr $ unlines - [ "criterion: warning:" - , " " ++ msg - ] - --- | Render the elements of a vector. --- --- It will substitute each value in the vector for @x@ in the --- following Mustache template: --- --- > {{#foo}} --- > {{x}} --- > {{/foo}} -vector :: (G.Vector v a, ToJSON a) => - T.Text -- ^ Name to use when substituting. - -> v a - -> Value -{-# SPECIALIZE vector :: T.Text -> U.Vector Double -> Value #-} -vector name v = toJSON . map val . G.toList $ v where - val i = object [ Key.fromText name .= i ] - - --- | Render the elements of two vectors. -vector2 :: (G.Vector v a, G.Vector v b, ToJSON a, ToJSON b) => - T.Text -- ^ Name for elements from the first vector. - -> T.Text -- ^ Name for elements from the second vector. - -> v a -- ^ First vector. - -> v b -- ^ Second vector. - -> Value -{-# SPECIALIZE vector2 :: T.Text -> T.Text -> U.Vector Double -> U.Vector Double - -> Value #-} -vector2 name1 name2 v1 v2 = toJSON $ zipWith val (G.toList v1) (G.toList v2) where - val i j = object - [ Key.fromText name1 .= i - , Key.fromText name2 .= j - ] - --- | Attempt to include the contents of a file based on a search path. --- Returns 'B.empty' if the search fails or the file could not be read. --- --- Intended for preprocessing Mustache files, e.g. replacing sections --- --- @ --- {{#include}}file.txt{{/include} --- @ --- --- with file contents. -includeFile :: (MonadIO m) => - [FilePath] -- ^ Directories to search. - -> FilePath -- ^ Name of the file to search for. - -> m T.Text -{-# SPECIALIZE includeFile :: [FilePath] -> FilePath -> IO T.Text #-} -includeFile searchPath name = liftIO $ foldr go (return T.empty) searchPath - where go dir next = do - let path = dir </> name - T.readFile path `E.catch` \(_::IOException) -> next - --- | A problem arose with a template. -data TemplateException = - TemplateNotFound FilePath -- ^ The template could not be found. - deriving (Eq, Read, Show, Data, Generic) - -instance Exception TemplateException - --- | Load a Mustache template file. --- --- If the name is an absolute or relative path, the search path is --- /not/ used, and the name is treated as a literal path. --- --- If the @-fembed-data-files@ @Cabal@ flag is enabled, this also checks --- the embedded @data-files@ from @criterion.cabal@. --- --- This function throws a 'TemplateException' if the template could --- not be found, or an 'IOException' if no template could be loaded. -loadTemplate :: [FilePath] -- ^ Search path. - -> FilePath -- ^ Name of template file. - -> IO TL.Text -loadTemplate paths name - | any isPathSeparator name = readFileCheckEmbedded name - | otherwise = go Nothing paths - where go me (p:ps) = do - let cur = p </> name <.> "tpl" - x <- doesFileExist' cur - if x - then readFileCheckEmbedded cur `E.catch` \e -> go (me `mplus` Just e) ps - else go me ps - go (Just e) _ = throwIO (e::IOException) - go _ _ = throwIO . TemplateNotFound $ name - - doesFileExist' :: FilePath -> IO Bool - doesFileExist' fp = do - e <- doesFileExist fp - pure $ e -#if defined(EMBED) - || (fp `elem` map fst dataFiles) -#endif - --- A version of 'readFile' that falls back on the embedded 'dataFiles' --- from @criterion.cabal@. -readFileCheckEmbedded :: FilePath -> IO TL.Text -readFileCheckEmbedded fp = - TL.readFile fp -#if defined(EMBED) - `E.catch` \(e :: IOException) -> - maybe (throwIO e) - (pure . TLE.decodeUtf8 . BL.fromStrict) - (lookup fp dataFiles) -#endif +{-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE Trustworthy #-}++-- |+-- Module : Criterion.Report+-- Copyright : (c) 2009-2014 Bryan O'Sullivan+--+-- License : BSD-style+-- Maintainer : bos@serpentine.com+-- Stability : experimental+-- Portability : GHC+--+-- Reporting functions.++module Criterion.Report+ (+ formatReport+ , report+ , tidyTails+ -- * Rendering helper functions+ , TemplateException(..)+ , loadTemplate+ , includeFile+ , getTemplateDir+ , vector+ , vector2+ ) where++import Control.Exception (Exception, IOException, throwIO)+import Control.Monad (mplus)+import Control.Monad.IO.Class (MonadIO(liftIO))+import Control.Monad.Reader (ask)+import Criterion.Monad (Criterion)+import Criterion.Types+import Data.Aeson (ToJSON (..), Value(..), object, (.=), Value)+import qualified Data.Aeson.Key as Key+import Data.Aeson.Text (encodeToLazyText)+import Data.Data (Data)+import Data.Foldable (forM_)+import GHC.Generics (Generic)+import Paths_criterion (getDataFileName)+import Statistics.Function (minMax)+import System.Directory (doesFileExist)+import System.FilePath ((</>), (<.>), isPathSeparator)+import System.IO (hPutStrLn, stderr)+import Text.Microstache (Key (..), Node (..), Template (..),+ compileMustacheText, displayMustacheWarning, renderMustacheW)+import Prelude ()+import Prelude.Compat+import qualified Control.Exception as E+import qualified Data.Text as T+#if defined(EMBED)+import qualified Data.Text.Lazy.Encoding as TLE+#endif+import qualified Data.Text.IO as T+import qualified Data.Text.Lazy as TL+import qualified Data.Text.Lazy.IO as TL+import qualified Data.Vector.Generic as G+import qualified Data.Vector.Unboxed as U++#if defined(EMBED)+import Criterion.EmbeddedData (dataFiles, chartContents)+import qualified Data.ByteString.Lazy as BL+import qualified Data.Text.Encoding as TE+#else+import qualified Language.Javascript.Chart as Chart+#endif++-- | Trim long flat tails from a KDE plot.+tidyTails :: KDE -> KDE+tidyTails KDE{..} = KDE { kdeType = kdeType+ , kdeValues = G.slice front winSize kdeValues+ , kdePDF = G.slice front winSize kdePDF+ }+ where tiny = uncurry subtract (minMax kdePDF) * 0.005+ omitTiny = G.length . G.takeWhile ((<= tiny) . abs)+ front = omitTiny kdePDF+ back = omitTiny . G.reverse $ kdePDF+ winSize = G.length kdePDF - front - back++-- | Return the path to the template and other files used for+-- generating reports.+--+-- When the @-fembed-data-files@ @Cabal@ flag is enabled, this simply+-- returns the empty path.+getTemplateDir :: IO FilePath+#if defined(EMBED)+getTemplateDir = pure ""+#else+getTemplateDir = getDataFileName "templates"+#endif++-- | Write out a series of 'Report' values to a single file, if+-- configured to do so.+report :: [Report] -> Criterion ()+report reports = do+ Config{..} <- ask+ forM_ reportFile $ \name -> liftIO $ do+ td <- getTemplateDir+ tpl <- loadTemplate [td,"."] template+ TL.writeFile name =<< formatReport reports tpl++-- | Escape JSON string aimed to be embedded in an HTML <script> tag. Notably+-- < and > are replaced with their unicode escape sequences such that closing+-- the <script> tag from within the JSON data is disallowed, i.e, the character+-- sequence "</" is made impossible.+--+-- Moreover, & is escaped to avoid HTML character references (&<code>;), + is+-- escaped to avoid UTF-7 attacks (should only affect old versions of IE), and+-- \0 is escaped to allow it to be represented in JSON, as the NUL character is+-- disallowed in JSON but valid in Haskell characters.+--+-- The following characters are replaced with their unicode escape sequences+-- (\uXXXX):+-- <, >, &, +, \x2028 (line separator), \x2029 (paragraph separator), and \0+-- (null terminator)+--+-- Other characters are such as \\ (backslash) and \n (newline) are not escaped+-- as the JSON serializer @encodeToLazyText@ already escapes them when they+-- occur inside JSON strings and they cause no issues with respect to HTML+-- safety when used outside of strings in the JSON-encoded payload.+--+-- If the resulting JSON-encoded Text is embedded in an HTML attribute, extra+-- care is required to also escape quotes with character references in the+-- final JSON payload.+-- See <https://html.spec.whatwg.org/multipage/syntax.html#syntax-attributes>+-- for details on how to escape attribute values.+escapeJSON :: Char -> TL.Text+escapeJSON '<' = "\\u003c" -- ban closing of the script tag by making </ impossible+escapeJSON '>' = "\\u003e" -- encode tags with unicode escape sequences+escapeJSON '\x2028' = "\\u2028" -- line separator+escapeJSON '\x2029' = "\\u2029" -- paragraph separator+escapeJSON '&' = "\\u0026" -- avoid HTML entities+escapeJSON '+' = "\\u002b" -- + can be used in UTF-7 escape sequences+escapeJSON '\0' = "\\u0000" -- make null characters explicit+escapeJSON c = TL.singleton c++-- | Format a series of 'Report' values using the given Mustache template.+formatReport :: [Report]+ -> TL.Text -- ^ Mustache template.+ -> IO TL.Text+formatReport reports templateName = do+ template0 <- case compileMustacheText "tpl" templateName of+ Left err -> fail (show err) -- TODO: throw a template exception?+ Right x -> return x++ criterionJS <- readDataFile "criterion.js"+ criterionCSS <- readDataFile "criterion.css"+ chartJS <- chartFileContents++ -- includes, only top level+ templates <- getTemplateDir+ template <- includeTemplate (includeFile [templates]) template0++ let context = object+ [ "json" .= reportsJSON reports+ , "js-criterion" .= criterionJS+ , "js-chart" .= chartJS+ , "criterion-css" .= criterionCSS+ ]++ let (warnings, formatted) = renderMustacheW template context+ -- If there were any issues during mustache template rendering, make sure+ -- to inform the user. See #127.+ forM_ warnings $ \warning -> do+ criterionWarning $ displayMustacheWarning warning+ return formatted+ where+ reportsJSON :: [Report] -> T.Text+ reportsJSON = TL.toStrict . TL.concatMap escapeJSON . encodeToLazyText++ chartFileContents :: IO T.Text+#if defined(EMBED)+ chartFileContents = pure $ TE.decodeUtf8 chartContents+#else+ chartFileContents = T.readFile =<< Chart.file Chart.Chart+#endif++ readDataFile :: FilePath -> IO T.Text+ readDataFile fp =+ (T.readFile =<< getDataFileName ("templates" </> fp))+#if defined(EMBED)+ `E.catch` \(e :: IOException) ->+ maybe (throwIO e)+ (pure . TE.decodeUtf8)+ (lookup fp dataFiles)+#endif++ includeTemplate :: (FilePath -> IO T.Text) -> Template -> IO Template+ includeTemplate f Template {..} = fmap+ (Template templateActual)+ (traverse (traverse (includeNode f)) templateCache)++ includeNode :: (FilePath -> IO T.Text) -> Node -> IO Node+ includeNode f (Section (Key ["include"]) [TextBlock fp]) =+ fmap TextBlock (f (T.unpack fp))+ includeNode _ n = return n++criterionWarning :: String -> IO ()+criterionWarning msg =+ hPutStrLn stderr $ unlines+ [ "criterion: warning:"+ , " " ++ msg+ ]++-- | Render the elements of a vector.+--+-- It will substitute each value in the vector for @x@ in the+-- following Mustache template:+--+-- > {{#foo}}+-- > {{x}}+-- > {{/foo}}+vector :: (G.Vector v a, ToJSON a) =>+ T.Text -- ^ Name to use when substituting.+ -> v a+ -> Value+{-# SPECIALIZE vector :: T.Text -> U.Vector Double -> Value #-}+vector name v = toJSON . map val . G.toList $ v where+ val i = object [ Key.fromText name .= i ]+++-- | Render the elements of two vectors.+vector2 :: (G.Vector v a, G.Vector v b, ToJSON a, ToJSON b) =>+ T.Text -- ^ Name for elements from the first vector.+ -> T.Text -- ^ Name for elements from the second vector.+ -> v a -- ^ First vector.+ -> v b -- ^ Second vector.+ -> Value+{-# SPECIALIZE vector2 :: T.Text -> T.Text -> U.Vector Double -> U.Vector Double+ -> Value #-}+vector2 name1 name2 v1 v2 = toJSON $ zipWith val (G.toList v1) (G.toList v2) where+ val i j = object+ [ Key.fromText name1 .= i+ , Key.fromText name2 .= j+ ]++-- | Attempt to include the contents of a file based on a search path.+-- Returns 'B.empty' if the search fails or the file could not be read.+--+-- Intended for preprocessing Mustache files, e.g. replacing sections+--+-- @+-- {{#include}}file.txt{{/include}+-- @+--+-- with file contents.+includeFile :: (MonadIO m) =>+ [FilePath] -- ^ Directories to search.+ -> FilePath -- ^ Name of the file to search for.+ -> m T.Text+{-# SPECIALIZE includeFile :: [FilePath] -> FilePath -> IO T.Text #-}+includeFile searchPath name = liftIO $ foldr go (return T.empty) searchPath+ where go dir next = do+ let path = dir </> name+ T.readFile path `E.catch` \(_::IOException) -> next++-- | A problem arose with a template.+data TemplateException =+ TemplateNotFound FilePath -- ^ The template could not be found.+ deriving (Eq, Read, Show, Data, Generic)++instance Exception TemplateException++-- | Load a Mustache template file.+--+-- If the name is an absolute or relative path, the search path is+-- /not/ used, and the name is treated as a literal path.+--+-- If the @-fembed-data-files@ @Cabal@ flag is enabled, this also checks+-- the embedded @data-files@ from @criterion.cabal@.+--+-- This function throws a 'TemplateException' if the template could+-- not be found, or an 'IOException' if no template could be loaded.+loadTemplate :: [FilePath] -- ^ Search path.+ -> FilePath -- ^ Name of template file.+ -> IO TL.Text+loadTemplate paths name+ | any isPathSeparator name = readFileCheckEmbedded name+ | otherwise = go Nothing paths+ where go me (p:ps) = do+ let cur = p </> name <.> "tpl"+ x <- doesFileExist' cur+ if x+ then readFileCheckEmbedded cur `E.catch` \e -> go (me `mplus` Just e) ps+ else go me ps+ go (Just e) _ = throwIO (e::IOException)+ go _ _ = throwIO . TemplateNotFound $ name++ doesFileExist' :: FilePath -> IO Bool+ doesFileExist' fp = do+ e <- doesFileExist fp+ pure $ e+#if defined(EMBED)+ || (fp `elem` map fst dataFiles)+#endif++-- A version of 'readFile' that falls back on the embedded 'dataFiles'+-- from @criterion.cabal@.+readFileCheckEmbedded :: FilePath -> IO TL.Text+readFileCheckEmbedded fp =+ TL.readFile fp+#if defined(EMBED)+ `E.catch` \(e :: IOException) ->+ maybe (throwIO e)+ (pure . TLE.decodeUtf8 . BL.fromStrict)+ (lookup fp dataFiles)+#endif
Criterion/Types.hs view
@@ -1,336 +1,336 @@-{-# LANGUAGE CPP #-} -{-# LANGUAGE Trustworthy #-} -{-# LANGUAGE RankNTypes #-} -{-# LANGUAGE DeriveDataTypeable, DeriveGeneric, GADTs, RecordWildCards #-} -{-# OPTIONS_GHC -funbox-strict-fields #-} - --- | --- Module : Criterion.Types --- Copyright : (c) 2009-2014 Bryan O'Sullivan --- --- License : BSD-style --- Maintainer : bos@serpentine.com --- Stability : experimental --- Portability : GHC --- --- Types for benchmarking. --- --- The core type is 'Benchmarkable', which admits both pure functions --- and 'IO' actions. --- --- For a pure function of type @a -> b@, the benchmarking harness --- calls this function repeatedly, each time with a different 'Int64' --- argument (the number of times to run the function in a loop), and --- reduces the result the function returns to weak head normal form. --- --- For an action of type @IO a@, the benchmarking harness calls the --- action repeatedly, but does not reduce the result. - -module Criterion.Types - ( - -- * Configuration - Config(..) - , Verbosity(..) - -- * Benchmark descriptions - , Benchmarkable(..) - , Benchmark(..) - -- * Measurements - , Measured(..) - , fromInt - , toInt - , fromDouble - , toDouble - , measureAccessors - , measureKeys - , measure - , rescale - -- * Benchmark construction - , env - , envWithCleanup - , perBatchEnv - , perBatchEnvWithCleanup - , perRunEnv - , perRunEnvWithCleanup - , toBenchmarkable - , bench - , bgroup - , addPrefix - , benchNames - -- ** Evaluation control - , nf - , whnf - , nfIO - , whnfIO - , nfAppIO - , whnfAppIO - -- * Result types - , Outliers(..) - , OutlierEffect(..) - , OutlierVariance(..) - , Regression(..) - , KDE(..) - , Report(..) - , SampleAnalysis(..) - , DataRecord(..) - ) where - -import Control.DeepSeq (NFData(rnf)) -import Criterion.Measurement.Types -import Data.Aeson (FromJSON(..), ToJSON(..)) -import Data.Binary (Binary(..), putWord8, getWord8) -import Data.Binary.Orphans () -import Data.Data (Data) -import Data.Int (Int64) -import Data.Map (Map) -import GHC.Generics (Generic) -import Prelude () -import Prelude.Compat -import qualified Data.Vector as V -import qualified Data.Vector.Unboxed as U -import qualified Statistics.Types as St -import Statistics.Resampling.Bootstrap () - --- | Control the amount of information displayed. -data Verbosity = Quiet - | Normal - | Verbose - deriving (Eq, Ord, Bounded, Enum, Read, Show, Data, - Generic) - --- | Top-level benchmarking configuration. -data Config = Config { - confInterval :: St.CL Double - -- ^ Confidence interval for bootstrap estimation (greater than - -- 0, less than 1). - , timeLimit :: Double - -- ^ Number of seconds to run a single benchmark. (In practice, - -- execution time will very slightly exceed this limit.) - , resamples :: Int - -- ^ Number of resamples to perform when bootstrapping. - , regressions :: [([String], String)] - -- ^ Regressions to perform. - , rawDataFile :: Maybe FilePath - -- ^ File to write binary measurement and analysis data to. If - -- not specified, this will be a temporary file. - , reportFile :: Maybe FilePath - -- ^ File to write report output to, with template expanded. - , csvFile :: Maybe FilePath - -- ^ File to write CSV summary to. - , jsonFile :: Maybe FilePath - -- ^ File to write JSON-formatted results to. - , junitFile :: Maybe FilePath - -- ^ File to write JUnit-compatible XML results to. - , verbosity :: Verbosity - -- ^ Verbosity level to use when running and analysing - -- benchmarks. - , template :: FilePath - -- ^ Template file to use if writing a report. - } deriving (Eq, Read, Show, Data, Generic) - - --- | Outliers from sample data, calculated using the boxplot --- technique. -data Outliers = Outliers { - samplesSeen :: !Int64 - , lowSevere :: !Int64 - -- ^ More than 3 times the interquartile range (IQR) below the - -- first quartile. - , lowMild :: !Int64 - -- ^ Between 1.5 and 3 times the IQR below the first quartile. - , highMild :: !Int64 - -- ^ Between 1.5 and 3 times the IQR above the third quartile. - , highSevere :: !Int64 - -- ^ More than 3 times the IQR above the third quartile. - } deriving (Eq, Read, Show, Data, Generic) - -instance FromJSON Outliers -instance ToJSON Outliers - -instance Binary Outliers where - put (Outliers v w x y z) = put v >> put w >> put x >> put y >> put z - get = Outliers <$> get <*> get <*> get <*> get <*> get -instance NFData Outliers - --- | A description of the extent to which outliers in the sample data --- affect the sample mean and standard deviation. -data OutlierEffect = Unaffected -- ^ Less than 1% effect. - | Slight -- ^ Between 1% and 10%. - | Moderate -- ^ Between 10% and 50%. - | Severe -- ^ Above 50% (i.e. measurements - -- are useless). - deriving (Eq, Ord, Read, Show, Data, Generic) - -instance FromJSON OutlierEffect -instance ToJSON OutlierEffect - -instance Binary OutlierEffect where - put Unaffected = putWord8 0 - put Slight = putWord8 1 - put Moderate = putWord8 2 - put Severe = putWord8 3 - get = do - i <- getWord8 - case i of - 0 -> return Unaffected - 1 -> return Slight - 2 -> return Moderate - 3 -> return Severe - _ -> fail $ "get for OutlierEffect: unexpected " ++ show i -instance NFData OutlierEffect - -instance Semigroup Outliers where - (<>) = addOutliers - -instance Monoid Outliers where - mempty = Outliers 0 0 0 0 0 -#if !(MIN_VERSION_base(4,11,0)) - mappend = addOutliers -#endif - -addOutliers :: Outliers -> Outliers -> Outliers -addOutliers (Outliers s a b c d) (Outliers t w x y z) = - Outliers (s+t) (a+w) (b+x) (c+y) (d+z) -{-# INLINE addOutliers #-} - --- | Analysis of the extent to which outliers in a sample affect its --- standard deviation (and to some extent, its mean). -data OutlierVariance = OutlierVariance { - ovEffect :: OutlierEffect - -- ^ Qualitative description of effect. - , ovDesc :: String - -- ^ Brief textual description of effect. - , ovFraction :: Double - -- ^ Quantitative description of effect (a fraction between 0 and 1). - } deriving (Eq, Read, Show, Data, Generic) - -instance FromJSON OutlierVariance -instance ToJSON OutlierVariance - -instance Binary OutlierVariance where - put (OutlierVariance x y z) = put x >> put y >> put z - get = OutlierVariance <$> get <*> get <*> get - -instance NFData OutlierVariance where - rnf OutlierVariance{..} = rnf ovEffect `seq` rnf ovDesc `seq` rnf ovFraction - --- | Results of a linear regression. -data Regression = Regression { - regResponder :: String - -- ^ Name of the responding variable. - , regCoeffs :: Map String (St.Estimate St.ConfInt Double) - -- ^ Map from name to value of predictor coefficients. - , regRSquare :: St.Estimate St.ConfInt Double - -- ^ R² goodness-of-fit estimate. - } deriving (Eq, Read, Show, Generic) - -instance FromJSON Regression -instance ToJSON Regression - -instance Binary Regression where - put Regression{..} = - put regResponder >> put regCoeffs >> put regRSquare - get = Regression <$> get <*> get <*> get - -instance NFData Regression where - rnf Regression{..} = - rnf regResponder `seq` rnf regCoeffs `seq` rnf regRSquare - --- | Result of a bootstrap analysis of a non-parametric sample. -data SampleAnalysis = SampleAnalysis { - anRegress :: [Regression] - -- ^ Estimates calculated via linear regression. - , anMean :: St.Estimate St.ConfInt Double - -- ^ Estimated mean. - , anStdDev :: St.Estimate St.ConfInt Double - -- ^ Estimated standard deviation. - , anOutlierVar :: OutlierVariance - -- ^ Description of the effects of outliers on the estimated - -- variance. - } deriving (Eq, Read, Show, Generic) - -instance FromJSON SampleAnalysis -instance ToJSON SampleAnalysis - -instance Binary SampleAnalysis where - put SampleAnalysis{..} = do - put anRegress; put anMean; put anStdDev; put anOutlierVar - get = SampleAnalysis <$> get <*> get <*> get <*> get - -instance NFData SampleAnalysis where - rnf SampleAnalysis{..} = - rnf anRegress `seq` rnf anMean `seq` - rnf anStdDev `seq` rnf anOutlierVar - --- | Data for a KDE chart of performance. -data KDE = KDE { - kdeType :: String - , kdeValues :: U.Vector Double - , kdePDF :: U.Vector Double - } deriving (Eq, Read, Show, Data, Generic) - -instance FromJSON KDE -instance ToJSON KDE - -instance Binary KDE where - put KDE{..} = put kdeType >> put kdeValues >> put kdePDF - get = KDE <$> get <*> get <*> get - -instance NFData KDE where - rnf KDE{..} = rnf kdeType `seq` rnf kdeValues `seq` rnf kdePDF - --- | Report of a sample analysis. -data Report = Report { - reportNumber :: Int - -- ^ A simple index indicating that this is the /n/th report. - , reportName :: String - -- ^ The name of this report. - , reportKeys :: [String] - -- ^ See 'measureKeys'. - , reportMeasured :: V.Vector Measured - -- ^ Raw measurements. - , reportAnalysis :: SampleAnalysis - -- ^ Report analysis. - , reportOutliers :: Outliers - -- ^ Analysis of outliers. - , reportKDEs :: [KDE] - -- ^ Data for a KDE of times. - } deriving (Eq, Read, Show, Generic) - -instance FromJSON Report -instance ToJSON Report - -instance Binary Report where - put Report{..} = - put reportNumber >> put reportName >> put reportKeys >> - put reportMeasured >> put reportAnalysis >> put reportOutliers >> - put reportKDEs - - get = Report <$> get <*> get <*> get <*> get <*> get <*> get <*> get - -instance NFData Report where - rnf Report{..} = - rnf reportNumber `seq` rnf reportName `seq` rnf reportKeys `seq` - rnf reportMeasured `seq` rnf reportAnalysis `seq` rnf reportOutliers `seq` - rnf reportKDEs - -data DataRecord = Measurement Int String (V.Vector Measured) - | Analysed Report - deriving (Eq, Read, Show, Generic) - -instance Binary DataRecord where - put (Measurement i n v) = putWord8 0 >> put i >> put n >> put v - put (Analysed r) = putWord8 1 >> put r - - get = do - w <- getWord8 - case w of - 0 -> Measurement <$> get <*> get <*> get - 1 -> Analysed <$> get - _ -> error ("bad tag " ++ show w) - -instance NFData DataRecord where - rnf (Measurement i n v) = rnf i `seq` rnf n `seq` rnf v - rnf (Analysed r) = rnf r - -instance FromJSON DataRecord -instance ToJSON DataRecord +{-# LANGUAGE CPP #-}+{-# LANGUAGE Trustworthy #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE DeriveDataTypeable, DeriveGeneric, GADTs, RecordWildCards #-}+{-# OPTIONS_GHC -funbox-strict-fields #-}++-- |+-- Module : Criterion.Types+-- Copyright : (c) 2009-2014 Bryan O'Sullivan+--+-- License : BSD-style+-- Maintainer : bos@serpentine.com+-- Stability : experimental+-- Portability : GHC+--+-- Types for benchmarking.+--+-- The core type is 'Benchmarkable', which admits both pure functions+-- and 'IO' actions.+--+-- For a pure function of type @a -> b@, the benchmarking harness+-- calls this function repeatedly, each time with a different 'Int64'+-- argument (the number of times to run the function in a loop), and+-- reduces the result the function returns to weak head normal form.+--+-- For an action of type @IO a@, the benchmarking harness calls the+-- action repeatedly, but does not reduce the result.++module Criterion.Types+ (+ -- * Configuration+ Config(..)+ , Verbosity(..)+ -- * Benchmark descriptions+ , Benchmarkable(..)+ , Benchmark(..)+ -- * Measurements+ , Measured(..)+ , fromInt+ , toInt+ , fromDouble+ , toDouble+ , measureAccessors+ , measureKeys+ , measure+ , rescale+ -- * Benchmark construction+ , env+ , envWithCleanup+ , perBatchEnv+ , perBatchEnvWithCleanup+ , perRunEnv+ , perRunEnvWithCleanup+ , toBenchmarkable+ , bench+ , bgroup+ , addPrefix+ , benchNames+ -- ** Evaluation control+ , nf+ , whnf+ , nfIO+ , whnfIO+ , nfAppIO+ , whnfAppIO+ -- * Result types+ , Outliers(..)+ , OutlierEffect(..)+ , OutlierVariance(..)+ , Regression(..)+ , KDE(..)+ , Report(..)+ , SampleAnalysis(..)+ , DataRecord(..)+ ) where++import Control.DeepSeq (NFData(rnf))+import Criterion.Measurement.Types+import Data.Aeson (FromJSON(..), ToJSON(..))+import Data.Binary (Binary(..), putWord8, getWord8)+import Data.Binary.Orphans ()+import Data.Data (Data)+import Data.Int (Int64)+import Data.Map (Map)+import GHC.Generics (Generic)+import Prelude ()+import Prelude.Compat+import qualified Data.Vector as V+import qualified Data.Vector.Unboxed as U+import qualified Statistics.Types as St+import Statistics.Resampling.Bootstrap ()++-- | Control the amount of information displayed.+data Verbosity = Quiet+ | Normal+ | Verbose+ deriving (Eq, Ord, Bounded, Enum, Read, Show, Data,+ Generic)++-- | Top-level benchmarking configuration.+data Config = Config {+ confInterval :: St.CL Double+ -- ^ Confidence interval for bootstrap estimation (greater than+ -- 0, less than 1).+ , timeLimit :: Double+ -- ^ Number of seconds to run a single benchmark. (In practice,+ -- execution time will very slightly exceed this limit.)+ , resamples :: Int+ -- ^ Number of resamples to perform when bootstrapping.+ , regressions :: [([String], String)]+ -- ^ Regressions to perform.+ , rawDataFile :: Maybe FilePath+ -- ^ File to write binary measurement and analysis data to. If+ -- not specified, this will be a temporary file.+ , reportFile :: Maybe FilePath+ -- ^ File to write report output to, with template expanded.+ , csvFile :: Maybe FilePath+ -- ^ File to write CSV summary to.+ , jsonFile :: Maybe FilePath+ -- ^ File to write JSON-formatted results to.+ , junitFile :: Maybe FilePath+ -- ^ File to write JUnit-compatible XML results to.+ , verbosity :: Verbosity+ -- ^ Verbosity level to use when running and analysing+ -- benchmarks.+ , template :: FilePath+ -- ^ Template file to use if writing a report.+ } deriving (Eq, Read, Show, Data, Generic)+++-- | Outliers from sample data, calculated using the boxplot+-- technique.+data Outliers = Outliers {+ samplesSeen :: !Int64+ , lowSevere :: !Int64+ -- ^ More than 3 times the interquartile range (IQR) below the+ -- first quartile.+ , lowMild :: !Int64+ -- ^ Between 1.5 and 3 times the IQR below the first quartile.+ , highMild :: !Int64+ -- ^ Between 1.5 and 3 times the IQR above the third quartile.+ , highSevere :: !Int64+ -- ^ More than 3 times the IQR above the third quartile.+ } deriving (Eq, Read, Show, Data, Generic)++instance FromJSON Outliers+instance ToJSON Outliers++instance Binary Outliers where+ put (Outliers v w x y z) = put v >> put w >> put x >> put y >> put z+ get = Outliers <$> get <*> get <*> get <*> get <*> get+instance NFData Outliers++-- | A description of the extent to which outliers in the sample data+-- affect the sample mean and standard deviation.+data OutlierEffect = Unaffected -- ^ Less than 1% effect.+ | Slight -- ^ Between 1% and 10%.+ | Moderate -- ^ Between 10% and 50%.+ | Severe -- ^ Above 50% (i.e. measurements+ -- are useless).+ deriving (Eq, Ord, Read, Show, Data, Generic)++instance FromJSON OutlierEffect+instance ToJSON OutlierEffect++instance Binary OutlierEffect where+ put Unaffected = putWord8 0+ put Slight = putWord8 1+ put Moderate = putWord8 2+ put Severe = putWord8 3+ get = do+ i <- getWord8+ case i of+ 0 -> return Unaffected+ 1 -> return Slight+ 2 -> return Moderate+ 3 -> return Severe+ _ -> fail $ "get for OutlierEffect: unexpected " ++ show i+instance NFData OutlierEffect++instance Semigroup Outliers where+ (<>) = addOutliers++instance Monoid Outliers where+ mempty = Outliers 0 0 0 0 0+#if !(MIN_VERSION_base(4,11,0))+ mappend = addOutliers+#endif++addOutliers :: Outliers -> Outliers -> Outliers+addOutliers (Outliers s a b c d) (Outliers t w x y z) =+ Outliers (s+t) (a+w) (b+x) (c+y) (d+z)+{-# INLINE addOutliers #-}++-- | Analysis of the extent to which outliers in a sample affect its+-- standard deviation (and to some extent, its mean).+data OutlierVariance = OutlierVariance {+ ovEffect :: OutlierEffect+ -- ^ Qualitative description of effect.+ , ovDesc :: String+ -- ^ Brief textual description of effect.+ , ovFraction :: Double+ -- ^ Quantitative description of effect (a fraction between 0 and 1).+ } deriving (Eq, Read, Show, Data, Generic)++instance FromJSON OutlierVariance+instance ToJSON OutlierVariance++instance Binary OutlierVariance where+ put (OutlierVariance x y z) = put x >> put y >> put z+ get = OutlierVariance <$> get <*> get <*> get++instance NFData OutlierVariance where+ rnf OutlierVariance{..} = rnf ovEffect `seq` rnf ovDesc `seq` rnf ovFraction++-- | Results of a linear regression.+data Regression = Regression {+ regResponder :: String+ -- ^ Name of the responding variable.+ , regCoeffs :: Map String (St.Estimate St.ConfInt Double)+ -- ^ Map from name to value of predictor coefficients.+ , regRSquare :: St.Estimate St.ConfInt Double+ -- ^ R² goodness-of-fit estimate.+ } deriving (Eq, Read, Show, Generic)++instance FromJSON Regression+instance ToJSON Regression++instance Binary Regression where+ put Regression{..} =+ put regResponder >> put regCoeffs >> put regRSquare+ get = Regression <$> get <*> get <*> get++instance NFData Regression where+ rnf Regression{..} =+ rnf regResponder `seq` rnf regCoeffs `seq` rnf regRSquare++-- | Result of a bootstrap analysis of a non-parametric sample.+data SampleAnalysis = SampleAnalysis {+ anRegress :: [Regression]+ -- ^ Estimates calculated via linear regression.+ , anMean :: St.Estimate St.ConfInt Double+ -- ^ Estimated mean.+ , anStdDev :: St.Estimate St.ConfInt Double+ -- ^ Estimated standard deviation.+ , anOutlierVar :: OutlierVariance+ -- ^ Description of the effects of outliers on the estimated+ -- variance.+ } deriving (Eq, Read, Show, Generic)++instance FromJSON SampleAnalysis+instance ToJSON SampleAnalysis++instance Binary SampleAnalysis where+ put SampleAnalysis{..} = do+ put anRegress; put anMean; put anStdDev; put anOutlierVar+ get = SampleAnalysis <$> get <*> get <*> get <*> get++instance NFData SampleAnalysis where+ rnf SampleAnalysis{..} =+ rnf anRegress `seq` rnf anMean `seq`+ rnf anStdDev `seq` rnf anOutlierVar++-- | Data for a KDE chart of performance.+data KDE = KDE {+ kdeType :: String+ , kdeValues :: U.Vector Double+ , kdePDF :: U.Vector Double+ } deriving (Eq, Read, Show, Data, Generic)++instance FromJSON KDE+instance ToJSON KDE++instance Binary KDE where+ put KDE{..} = put kdeType >> put kdeValues >> put kdePDF+ get = KDE <$> get <*> get <*> get++instance NFData KDE where+ rnf KDE{..} = rnf kdeType `seq` rnf kdeValues `seq` rnf kdePDF++-- | Report of a sample analysis.+data Report = Report {+ reportNumber :: Int+ -- ^ A simple index indicating that this is the /n/th report.+ , reportName :: String+ -- ^ The name of this report.+ , reportKeys :: [String]+ -- ^ See 'measureKeys'.+ , reportMeasured :: V.Vector Measured+ -- ^ Raw measurements.+ , reportAnalysis :: SampleAnalysis+ -- ^ Report analysis.+ , reportOutliers :: Outliers+ -- ^ Analysis of outliers.+ , reportKDEs :: [KDE]+ -- ^ Data for a KDE of times.+ } deriving (Eq, Read, Show, Generic)++instance FromJSON Report+instance ToJSON Report++instance Binary Report where+ put Report{..} =+ put reportNumber >> put reportName >> put reportKeys >>+ put reportMeasured >> put reportAnalysis >> put reportOutliers >>+ put reportKDEs++ get = Report <$> get <*> get <*> get <*> get <*> get <*> get <*> get++instance NFData Report where+ rnf Report{..} =+ rnf reportNumber `seq` rnf reportName `seq` rnf reportKeys `seq`+ rnf reportMeasured `seq` rnf reportAnalysis `seq` rnf reportOutliers `seq`+ rnf reportKDEs++data DataRecord = Measurement Int String (V.Vector Measured)+ | Analysed Report+ deriving (Eq, Read, Show, Generic)++instance Binary DataRecord where+ put (Measurement i n v) = putWord8 0 >> put i >> put n >> put v+ put (Analysed r) = putWord8 1 >> put r++ get = do+ w <- getWord8+ case w of+ 0 -> Measurement <$> get <*> get <*> get+ 1 -> Analysed <$> get+ _ -> error ("bad tag " ++ show w)++instance NFData DataRecord where+ rnf (Measurement i n v) = rnf i `seq` rnf n `seq` rnf v+ rnf (Analysed r) = rnf r++instance FromJSON DataRecord+instance ToJSON DataRecord
LICENSE view
@@ -1,26 +1,26 @@-Copyright (c) 2009, 2010 Bryan O'Sullivan -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +Copyright (c) 2009, 2010 Bryan O'Sullivan+All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions+are met:++ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
README.markdown view
@@ -1,660 +1,660 @@-# Criterion: robust, reliable performance measurement - -[](https://hackage.haskell.org/package/criterion) [](https://github.com/haskell/criterion/actions?query=workflow%3AHaskell-CI) - -`criterion` is a library that makes accurate microbenchmarking in -Haskell easy. - -<a href="https://hackage.haskell.org/package/criterion/src/www/fibber.html" target="_blank"><img src="https://hackage.haskell.org/package/criterion/src/www/fibber-screenshot.png"></a> - - -## Features - -* The simple API hides a lot of automation and details that you - shouldn't need to worry about. - -* Sophisticated, high-resolution analysis which can accurately measure - operations that run in as little as a few hundred picoseconds. - -* [Output to active HTML](https://hackage.haskell.org/package/criterion/src/www/report.html) (with JavaScript charts), CSV, - and JSON. Write your own report templates to customize exactly how - your results are presented. - -* Linear regression model that allows measuring the effects of garbage - collection and other factors. - -* Measurements are cross-validated to ensure that sources of - significant noise (usually other activity on the system) can be - identified. - - -To get started, read the [tutorial below](#tutorial), and take a look -at the programs in the [examples -directory](https://github.com/haskell/criterion/tree/master/examples). - - -## Credits and contacts - -This library is written by Bryan O'Sullivan -(<bos@serpentine.com>) and maintained by Ryan Scott (<ryan.gl.scott@gmail.com>). -Please report bugs via the -[GitHub issue tracker](https://github.com/haskell/criterion/issues). - - -# Tutorial - - -## Getting started - -Here's `Fibber.hs`: a simple and complete benchmark, measuring the performance of -the ever-ridiculous `fib` function. - -```haskell -{- cabal: -build-depends: base, criterion --} - -import Criterion.Main - --- The function we're benchmarking. -fib :: Int -> Int -fib m | m < 0 = error "negative!" - | otherwise = go m - where - go 0 = 0 - go 1 = 1 - go n = go (n - 1) + go (n - 2) - --- Our benchmark harness. -main = defaultMain [ - bgroup "fib" [ bench "1" $ whnf fib 1 - , bench "5" $ whnf fib 5 - , bench "9" $ whnf fib 9 - , bench "11" $ whnf fib 11 - ] - ] -``` -([examples/Fibber.hs](https://github.com/haskell/criterion/blob/master/examples/Fibber.hs)) - -The -[`defaultMain`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#v:defaultMain) -function takes a list of -[`Benchmark`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#t:Benchmark) -values, each of which describes a function to benchmark. (We'll come -back to `bench` and `whnf` shortly, don't worry.) - -To maximise our convenience, `defaultMain` will parse command line -arguments and then run any benchmarks we ask. Let's run our benchmark -program (it might take some time if you never used Criterion before, since -the library has to be downloaded and compiled). - -``` -$ cabal run Fibber.hs -benchmarking fib/1 -time 13.77 ns (13.49 ns .. 14.07 ns) - 0.998 R² (0.997 R² .. 1.000 R²) -mean 13.56 ns (13.49 ns .. 13.70 ns) -std dev 305.1 ps (64.14 ps .. 532.5 ps) -variance introduced by outliers: 36% (moderately inflated) - -benchmarking fib/5 -time 173.9 ns (172.8 ns .. 175.6 ns) - 1.000 R² (0.999 R² .. 1.000 R²) -mean 173.8 ns (173.1 ns .. 175.4 ns) -std dev 3.149 ns (1.842 ns .. 5.954 ns) -variance introduced by outliers: 23% (moderately inflated) - -benchmarking fib/9 -time 1.219 μs (1.214 μs .. 1.228 μs) - 1.000 R² (1.000 R² .. 1.000 R²) -mean 1.219 μs (1.216 μs .. 1.223 μs) -std dev 12.43 ns (9.907 ns .. 17.29 ns) - -benchmarking fib/11 -time 3.253 μs (3.246 μs .. 3.260 μs) - 1.000 R² (1.000 R² .. 1.000 R²) -mean 3.248 μs (3.243 μs .. 3.254 μs) -std dev 18.94 ns (16.57 ns .. 21.95 ns) - -``` - -Even better, the `--output` option directs our program to write a -report to the file [`fibber.html`](fibber.html). - -```shellsession -$ cabal run Fibber.hs -- --output fibber.html -...similar output as before... -``` - -Click on the image to see a complete report. If you mouse over the data -points in the charts, you'll see that they are *live*, giving additional -information about what's being displayed. - -<a href="https://hackage.haskell.org/package/criterion/src/www/fibber.html" target="_blank"><img src="https://hackage.haskell.org/package/criterion/src/www/fibber-screenshot.png"></a> - - -### Understanding charts - -A report begins with a summary of all the numbers measured. -Underneath is a breakdown of every benchmark, each with two charts and -some explanation. - -The chart on the left is a -[kernel density estimate](https://en.wikipedia.org/wiki/Kernel_density_estimation) -(also known as a KDE) of time measurements. This graphs the -*probability* of any given time measurement occurring. A spike -indicates that a measurement of a particular time occurred; its height -indicates how often that measurement was repeated. - -> [!NOTE] -> **Why not use a histogram?** -> -> A more popular alternative to the KDE for this kind of display is the -> [histogram](https://en.wikipedia.org/wiki/Histogram). Why do we use a -> KDE instead? In order to get good information out of a histogram, you -> have to -> [choose a suitable bin size](https://en.wikipedia.org/wiki/Histogram#Number_of_bins_and_width). -> This is a fiddly manual task. In contrast, a KDE is likely to be -> informative immediately, with no configuration required. - -The chart on the right contains the raw measurements from which the -kernel density estimate was built. The $x$ axis indicates the number -of loop iterations, while the $y$ axis shows measured execution time -for the given number of iterations. The line “behind” the values is a -linear regression generated from this data. Ideally, all measurements -will be on (or very near) this line. - - -### Understanding the data under a chart - -Underneath the chart for each benchmark is a small table of -information that looks like this. - -| | lower bound | estimate | upper bound | -|----------------------|-------------|------------|-------------| -| OLS regression | 31.0 ms | 37.4 ms | 42.9 ms | -| R² goodness-of-fit | 0.887 | 0.942 | 0.994 | -| Mean execution time | 34.8 ms | 37.0 ms | 43.1 ms | -| Standard deviation | 2.11 ms | 6.49 ms | 11.0 ms | - -The second row is the result of a linear regression run on the measurements displayed in the right-hand chart. - -* “**OLS regression**” estimates the time needed for a single - execution of the activity being benchmarked, using an - [ordinary least-squares regression model](https://en.wikipedia.org/wiki/Ordinary_least_squares). - This number should be similar to the “mean execution time” row a - couple of rows beneath. The OLS estimate is usually more accurate - than the mean, as it more effectively eliminates measurement - overhead and other constant factors. - -* “**R² goodness-of-fit**” is a measure of how accurately the linear - regression model fits the observed measurements. If the measurements - are not too noisy, R² should lie between 0.99 and 1, indicating an - excellent fit. If the number is below 0.99, something is confounding - the accuracy of the linear model. A value below 0.9 is outright - worrisome. - -* “**Mean execution time**” and “**Standard deviation**” are - statistics calculated (more or less) from execution time divided by - number of iterations. - -On either side of the main column of values are greyed-out lower and -upper bounds. These measure the *accuracy* of the main estimate using -a statistical technique called -[*bootstrapping*](https://en.wikipedia.org/wiki/Bootstrapping_(statistics)). This -tells us that when randomly resampling the data, 95% of estimates fell -within between the lower and upper bounds. When the main estimate is -of good quality, the lower and upper bounds will be close to its -value. - - -## Reading command line output - -Before you look at HTML reports, you'll probably start by inspecting -the report that criterion prints in your terminal window. - -``` -benchmarking ByteString/HashMap/random -time 4.046 ms (4.020 ms .. 4.072 ms) - 1.000 R² (1.000 R² .. 1.000 R²) -mean 4.017 ms (4.010 ms .. 4.027 ms) -std dev 27.12 μs (20.45 μs .. 38.17 μs) -``` - -The first column is a name; the second is an estimate. The third and -fourth, in parentheses, are the 95% lower and upper bounds on the -estimate. - -* `time` corresponds to the “OLS regression” field in the HTML table - above. - -* `R²` is the goodness-of-fit metric for `time`. - -* `mean` and `std dev` have the same meanings as “Mean execution time” - and “Standard deviation” in the HTML table. - - -## How to write a benchmark suite - -A criterion benchmark suite consists of a series of -[`Benchmark`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#t:Benchmark) -values. - -```haskell -main = defaultMain [ - bgroup "fib" [ bench "1" $ whnf fib 1 - , bench "5" $ whnf fib 5 - , bench "9" $ whnf fib 9 - , bench "11" $ whnf fib 11 - ] - ] -``` - - -We group related benchmarks together using the -[`bgroup`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#v:bgroup) -function. Its first argument is a name for the group of benchmarks. - -```haskell -bgroup :: String -> [Benchmark] -> Benchmark -``` - -All the magic happens with the -[`bench`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#v:bench) -function. The first argument to `bench` is a name that describes the -activity we're benchmarking. - -```haskell -bench :: String -> Benchmarkable -> Benchmark -bench = Benchmark -``` - -The -[`Benchmarkable`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#t:Benchmarkable) -type is a container for code that can be benchmarked. - -By default, criterion allows two kinds of code to be benchmarked. - -* Any `IO` action can be benchmarked directly. - -* With a little trickery, we can benchmark pure functions. - - -### Benchmarking an `IO` action - -This function shows how we can benchmark an `IO` action. - -```haskell -import Criterion.Main - -main = defaultMain [ - bench "readFile" $ nfIO (readFile "GoodReadFile.hs") - ] -``` -([examples/GoodReadFile.hs](https://github.com/haskell/criterion/blob/master/examples/GoodReadFile.hs)) - -We use -[`nfIO`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#v:nfIO) -to specify that after we run the `IO` action, its result must be -evaluated to <span id="normal-form">normal form</span>, i.e. so that -all of its internal constructors are fully evaluated, and it contains -no thunks. - -```haskell -nfIO :: NFData a => IO a -> Benchmarkable -``` - -Rules of thumb for when to use `nfIO`: - -* Any time that lazy I/O is involved, use `nfIO` to avoid resource - leaks. - -* If you're not sure how much evaluation will have been performed on - the result of an action, use `nfIO` to be certain that it's fully - evaluated. - - -### `IO` and `seq` - -In addition to `nfIO`, criterion provides a -[`whnfIO`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#v:whnfIO) -function that evaluates the result of an action only deep enough for -the outermost constructor to be known (using `seq`). This is known as -<span id="weak-head-normal-form">**weak head normal form** (WHNF)</span>. - -```haskell -whnfIO :: IO a -> Benchmarkable -``` - -This function is useful if your `IO` action returns a simple value -like an `Int`, or something more complex like a -[`Map`](http://hackage.haskell.org/package/containers/docs/Data-Map-Lazy.html#t:Map) -where evaluating the outermost constructor will do “enough work”. - - -## Be careful with lazy I/O! - -Experienced Haskell programmers don't use lazy I/O very often, and -here's an example of why: if you try to run the benchmark below, it -will probably *crash*. - -```haskell -import Criterion.Main - -main = defaultMain [ - bench "whnfIO readFile" $ whnfIO (readFile "BadReadFile.hs") - ] -``` -([examples/BadReadFile.hs](https://github.com/haskell/criterion/blob/master/examples/BadReadFile.hs)) - -The reason for the crash is that `readFile` reads the contents of a -file lazily: it can't close the file handle until whoever opened the -file reads the whole thing. Since `whnfIO` only evaluates the very -first constructor after the file is opened, the benchmarking loop -causes a large number of open files to accumulate, until the -inevitable occurs: - -```shellsession -$ ./BadReadFile -benchmarking whnfIO readFile -openFile: resource exhausted (Too many open files) -``` - - -## Beware “pretend” I/O! - -GHC is an aggressive compiler. If you have an `IO` action that -doesn't really interact with the outside world, *and* it has just the -right structure, GHC may notice that a substantial amount of its -computation can be memoised via “let-floating”. - -There exists a -[somewhat contrived example](https://github.com/haskell/criterion/blob/master/examples/ConduitVsPipes.hs) -of this problem, where the first two benchmarks run between 40 and -40,000 times faster than they “should”. - -As always, if you see numbers that look wildly out of whack, you -shouldn't rejoice that you have magically achieved fast -performance—be skeptical and investigate! - - -> [!TIP] -> **Defeating let-floating** -> -> Fortunately for this particular misbehaving benchmark suite, GHC has -> an option named -> [`-fno-full-laziness`](https://downloads.haskell.org/ghc/latest/docs/users_guide/using-optimisation.html#ghc-flag-ffull-laziness) -> that will turn off let-floating and restore the first two benchmarks -> to performing in line with the second two. -> -> You should not react by simply throwing `-fno-full-laziness` into -> every GHC-and-criterion command line, as let-floating helps with -> performance more often than it hurts with benchmarking. - - -## Benchmarking pure functions - -Lazy evaluation makes it tricky to benchmark pure code. If we tried to -saturate a function with all of its arguments and evaluate it -repeatedly, laziness would ensure that we'd only do “real work” the -first time through our benchmarking loop. The expression would be -overwritten with that result, and no further work would happen on -subsequent loops through our benchmarking harness. - -We can defeat laziness by benchmarking an *unsaturated* function—one -that has been given *all but one* of its arguments. - -This is why the -[`nf`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#v:nf) -function accepts two arguments: the first is the almost-saturated -function we want to benchmark, and the second is the final argument to -give it. - -```haskell -nf :: NFData b => (a -> b) -> a -> Benchmarkable -``` - -As the -[`NFData`](http://hackage.haskell.org/package/deepseq/docs/Control-DeepSeq.html#t:NFData) -constraint suggests, `nf` applies the argument to the function, then -evaluates the result to <a href="#normal-form">normal form</a>. - -The -[`whnf`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#v:whnf) -function evaluates the result of a function only to <a -href="#weak-head-normal-form">weak head normal form</a> (WHNF). - -```haskell -whnf :: (a -> b) -> a -> Benchmarkable -``` - -If we go back to our first example, we can now fully understand what's -going on. - -```haskell -main = defaultMain [ - bgroup "fib" [ bench "1" $ whnf fib 1 - , bench "5" $ whnf fib 5 - , bench "9" $ whnf fib 9 - , bench "11" $ whnf fib 11 - ] - ] -``` -([examples/Fibber.hs](https://github.com/haskell/criterion/blob/master/examples/Fibber.hs)) - -We can get away with using `whnf` here because we know that an -`Int` has only one constructor, so there's no deeper buried -structure that we'd have to reach using `nf`. - -As with benchmarking `IO` actions, there's no clear-cut case for when -to use `whfn` versus `nf`, especially when a result may be lazily -generated. - -Guidelines for thinking about when to use `nf` or `whnf`: - -* If a result is a lazy structure (or a mix of strict and lazy, such - as a balanced tree with lazy leaves), how much of it would a - real-world caller use? You should be trying to evaluate as much of - the result as a realistic consumer would. Blindly using `nf` could - cause way too much unnecessary computation. - -* If a result is something simple like an `Int`, you're probably safe - using `whnf`—but then again, there should be no additional cost to - using `nf` in these cases. - - -## Using the criterion command line - -By default, a criterion benchmark suite simply runs all of its -benchmarks. However, criterion accepts a number of arguments to -control its behaviour. Run your program with `--help` for a complete -list. - - -### Specifying benchmarks to run - -The most common thing you'll want to do is specify which benchmarks -you want to run. You can do this by simply enumerating each -benchmark. - -```shellsession -$ ./Fibber 'fib/fib 1' -``` - -By default, any names you specify are treated as prefixes to match, so -you can specify an entire group of benchmarks via a name like -`"fib/"`. Use the `--match` option to control this behaviour. There are -currently four ways to configure `--match`: - -* `--match prefix`: Check if the given string is a prefix of a benchmark - path. For instance, `"foo"` will match `"foobar"`. - -* `--match glob`: Use the given string as a Unix-style glob pattern. Bear in - mind that performing a glob match on benchmarks names is done as if they were - file paths, so for instance both `"*/ba*"` and `"*/*"` will match `"foo/bar"`, - but neither `"*"` nor `"*bar"` will match `"foo/bar"`. - -* `--match pattern`: Check if the given string is a substring (not necessarily - just a prefix) of a benchmark path. For instance `"ooba"` will match - `"foobar"`. - -* `--match ipattern`: Check if the given string is a substring (not necessarily - just a prefix) of a benchmark path, but in a case-insensitive fashion. For - instance, `"oObA"` will match `"foobar"`. - -### Listing benchmarks - -If you've forgotten the names of your benchmarks, run your program -with `--list` and it will print them all. - - -### How long to spend measuring data - -By default, each benchmark runs for 5 seconds. - -You can control this using the `--time-limit` option, which specifies -the minimum number of seconds (decimal fractions are acceptable) that -a benchmark will spend gathering data. The actual amount of time -spent may be longer, if more data is needed. - - -### Writing out data - -Criterion provides several ways to save data. - -The friendliest is as HTML, using `--output`. Files written using -`--output` are actually generated from Mustache-style templates. The -only other template provided by default is `json`, so if you run with -`--template json --output mydata.json`, you'll get a big JSON dump of -your data. - -You can also write out a basic CSV file using `--csv`, a JSON file using -`--json`, and a JUnit-compatible XML file using `--junit`. (The contents -of these files are likely to change in the not-too-distant future.) - - -## Linear regression - -If you want to perform linear regressions on metrics other than -elapsed time, use the `--regress` option. This can be tricky to use -if you are not familiar with linear regression, but here's a thumbnail -sketch. - -The purpose of linear regression is to predict how much one variable -(the *responder*) will change in response to a change in one or more -others (the *predictors*). - -On each step through a benchmark loop, criterion changes the number of -iterations. This is the most obvious choice for a predictor -variable. This variable is named `iters`. - -If we want to regress CPU time (`cpuTime`) against iterations, we can -use `cpuTime:iters` as the argument to `--regress`. This generates -some additional output on the command line: - -``` -time 31.31 ms (30.44 ms .. 32.22 ms) - 0.997 R² (0.994 R² .. 0.999 R²) -mean 30.56 ms (30.01 ms .. 30.99 ms) -std dev 1.029 ms (754.3 μs .. 1.503 ms) - -cpuTime: 0.997 R² (0.994 R² .. 0.999 R²) - iters 3.129e-2 (3.039e-2 .. 3.221e-2) - y -4.698e-3 (-1.194e-2 .. 1.329e-3) -``` - -After the block of normal data, we see a series of new rows. - -On the first line of the new block is an R² goodness-of-fit measure, -so we can see how well our choice of regression fits the data. - -On the second line, we get the slope of the `cpuTime`/`iters` curve, -or (stated another way) how much `cpuTime` each iteration costs. - -The last entry is the $y$-axis intercept. - - -### Measuring garbage collector statistics - -By default, GHC does not collect statistics about the operation of its -garbage collector. If you want to measure and regress against GC -statistics, you must explicitly enable statistics collection at -runtime using `+RTS -T`. - - -### Useful regressions - -| regression | `--regress` | notes -| -------------------------------|------------------- |----------- -| CPU cycles | `cycles:iters` | -| Bytes allocated | `allocated:iters` | `+RTS -T` -| Number of garbage collections | `numGcs:iters` | `+RTS -T` -| CPU frequency | `cycles:time` | - - -## Tips, tricks, and pitfalls - -While criterion tries hard to automate as much of the benchmarking -process as possible, there are some things you will want to pay -attention to. - -* Measurements are only as good as the environment in which they're - gathered. Try to make sure your computer is quiet when measuring - data. - -* Be judicious in when you choose `nf` and `whnf`. Always think about - what the result of a function is, and how much of it you want to - evaluate. - -* Simply rerunning a benchmark can lead to variations of a few percent - in numbers. This variation can have many causes, including address - space layout randomization, recompilation between runs, cache - effects, CPU thermal throttling, and the phase of the moon. Don't - treat your first measurement as golden! - -* Keep an eye out for completely bogus numbers, as in the case of - `-fno-full-laziness` above. - -* When you need trustworthy results from a benchmark suite, run each - measurement as a separate invocation of your program. When you run - a number of benchmarks during a single program invocation, you will - sometimes see them interfere with each other. - - -### How to sniff out bogus results - -If some external factors are making your measurements noisy, criterion -tries to make it easy to tell. At the level of raw data, noisy -measurements will show up as “outliers”, but you shouldn't need to -inspect the raw data directly. - -The easiest yellow flag to spot is the R² goodness-of-fit measure -dropping below 0.9. If this happens, scrutinise your data carefully. - -Another easy pattern to look for is severe outliers in the raw -measurement chart when you're using `--output`. These should be easy -to spot: they'll be points sitting far from the linear regression line -(usually above it). - -If the lower and upper bounds on an estimate aren't “tight” (close to -the estimate), this suggests that noise might be having some kind of -negative effect. - -A warning about “variance introduced by outliers” may be printed. -This indicates the degree to which the standard deviation is inflated -by outlying measurements, as in the following snippet (notice that the -lower and upper bounds aren't all that tight, too). - -``` -std dev 652.0 ps (507.7 ps .. 942.1 ps) -variance introduced by outliers: 91% (severely inflated) -``` - -## Generating (HTML) reports from previous benchmarks with criterion-report - -If you want to post-process benchmark data before generating a HTML report you -can use the `criterion-report` executable to generate HTML reports from -criterion generated JSON. To store the benchmark results run criterion with the -`--json` flag to specify where to store the results. You can then use: -`criterion-report data.json report.html` to generate a HTML report of the data. -`criterion-report` also accepts the `--template` flag accepted by criterion. +# Criterion: robust, reliable performance measurement++[](https://hackage.haskell.org/package/criterion) [](https://github.com/haskell/criterion/actions?query=workflow%3AHaskell-CI)++`criterion` is a library that makes accurate microbenchmarking in+Haskell easy.++<a href="https://hackage.haskell.org/package/criterion/src/www/fibber.html" target="_blank"><img src="https://hackage.haskell.org/package/criterion/src/www/fibber-screenshot.png"></a>+++## Features++* The simple API hides a lot of automation and details that you+ shouldn't need to worry about.++* Sophisticated, high-resolution analysis which can accurately measure+ operations that run in as little as a few hundred picoseconds.++* [Output to active HTML](https://hackage.haskell.org/package/criterion/src/www/report.html) (with JavaScript charts), CSV,+ and JSON. Write your own report templates to customize exactly how+ your results are presented.++* Linear regression model that allows measuring the effects of garbage+ collection and other factors.++* Measurements are cross-validated to ensure that sources of+ significant noise (usually other activity on the system) can be+ identified.+++To get started, read the [tutorial below](#tutorial), and take a look+at the programs in the [examples+directory](https://github.com/haskell/criterion/tree/master/examples).+++## Credits and contacts++This library is written by Bryan O'Sullivan+(<bos@serpentine.com>) and maintained by Ryan Scott (<ryan.gl.scott@gmail.com>).+Please report bugs via the+[GitHub issue tracker](https://github.com/haskell/criterion/issues).+++# Tutorial+++## Getting started++Here's `Fibber.hs`: a simple and complete benchmark, measuring the performance of+the ever-ridiculous `fib` function.++```haskell+{- cabal:+build-depends: base, criterion+-}++import Criterion.Main++-- The function we're benchmarking.+fib :: Int -> Int+fib m | m < 0 = error "negative!"+ | otherwise = go m+ where+ go 0 = 0+ go 1 = 1+ go n = go (n - 1) + go (n - 2)++-- Our benchmark harness.+main = defaultMain [+ bgroup "fib" [ bench "1" $ whnf fib 1+ , bench "5" $ whnf fib 5+ , bench "9" $ whnf fib 9+ , bench "11" $ whnf fib 11+ ]+ ]+```+([examples/Fibber.hs](https://github.com/haskell/criterion/blob/master/examples/Fibber.hs))++The+[`defaultMain`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#v:defaultMain)+function takes a list of+[`Benchmark`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#t:Benchmark)+values, each of which describes a function to benchmark. (We'll come+back to `bench` and `whnf` shortly, don't worry.)++To maximise our convenience, `defaultMain` will parse command line+arguments and then run any benchmarks we ask. Let's run our benchmark+program (it might take some time if you never used Criterion before, since+the library has to be downloaded and compiled).++```+$ cabal run Fibber.hs+benchmarking fib/1+time 13.77 ns (13.49 ns .. 14.07 ns)+ 0.998 R² (0.997 R² .. 1.000 R²)+mean 13.56 ns (13.49 ns .. 13.70 ns)+std dev 305.1 ps (64.14 ps .. 532.5 ps)+variance introduced by outliers: 36% (moderately inflated)++benchmarking fib/5+time 173.9 ns (172.8 ns .. 175.6 ns)+ 1.000 R² (0.999 R² .. 1.000 R²)+mean 173.8 ns (173.1 ns .. 175.4 ns)+std dev 3.149 ns (1.842 ns .. 5.954 ns)+variance introduced by outliers: 23% (moderately inflated)++benchmarking fib/9+time 1.219 μs (1.214 μs .. 1.228 μs)+ 1.000 R² (1.000 R² .. 1.000 R²)+mean 1.219 μs (1.216 μs .. 1.223 μs)+std dev 12.43 ns (9.907 ns .. 17.29 ns)++benchmarking fib/11+time 3.253 μs (3.246 μs .. 3.260 μs)+ 1.000 R² (1.000 R² .. 1.000 R²)+mean 3.248 μs (3.243 μs .. 3.254 μs)+std dev 18.94 ns (16.57 ns .. 21.95 ns)++```++Even better, the `--output` option directs our program to write a+report to the file [`fibber.html`](fibber.html).++```shellsession+$ cabal run Fibber.hs -- --output fibber.html+...similar output as before...+```++Click on the image to see a complete report. If you mouse over the data+points in the charts, you'll see that they are *live*, giving additional+information about what's being displayed.++<a href="https://hackage.haskell.org/package/criterion/src/www/fibber.html" target="_blank"><img src="https://hackage.haskell.org/package/criterion/src/www/fibber-screenshot.png"></a>+++### Understanding charts++A report begins with a summary of all the numbers measured.+Underneath is a breakdown of every benchmark, each with two charts and+some explanation.++The chart on the left is a+[kernel density estimate](https://en.wikipedia.org/wiki/Kernel_density_estimation)+(also known as a KDE) of time measurements. This graphs the+*probability* of any given time measurement occurring. A spike+indicates that a measurement of a particular time occurred; its height+indicates how often that measurement was repeated.++> [!NOTE]+> **Why not use a histogram?**+> +> A more popular alternative to the KDE for this kind of display is the+> [histogram](https://en.wikipedia.org/wiki/Histogram). Why do we use a+> KDE instead? In order to get good information out of a histogram, you+> have to+> [choose a suitable bin size](https://en.wikipedia.org/wiki/Histogram#Number_of_bins_and_width).+> This is a fiddly manual task. In contrast, a KDE is likely to be+> informative immediately, with no configuration required.++The chart on the right contains the raw measurements from which the+kernel density estimate was built. The $x$ axis indicates the number+of loop iterations, while the $y$ axis shows measured execution time+for the given number of iterations. The line “behind” the values is a+linear regression generated from this data. Ideally, all measurements+will be on (or very near) this line.+++### Understanding the data under a chart++Underneath the chart for each benchmark is a small table of+information that looks like this.++| | lower bound | estimate | upper bound |+|----------------------|-------------|------------|-------------|+| OLS regression | 31.0 ms | 37.4 ms | 42.9 ms |+| R² goodness-of-fit | 0.887 | 0.942 | 0.994 |+| Mean execution time | 34.8 ms | 37.0 ms | 43.1 ms |+| Standard deviation | 2.11 ms | 6.49 ms | 11.0 ms |++The second row is the result of a linear regression run on the measurements displayed in the right-hand chart.++* “**OLS regression**” estimates the time needed for a single+ execution of the activity being benchmarked, using an+ [ordinary least-squares regression model](https://en.wikipedia.org/wiki/Ordinary_least_squares).+ This number should be similar to the “mean execution time” row a+ couple of rows beneath. The OLS estimate is usually more accurate+ than the mean, as it more effectively eliminates measurement+ overhead and other constant factors.++* “**R² goodness-of-fit**” is a measure of how accurately the linear+ regression model fits the observed measurements. If the measurements+ are not too noisy, R² should lie between 0.99 and 1, indicating an+ excellent fit. If the number is below 0.99, something is confounding+ the accuracy of the linear model. A value below 0.9 is outright+ worrisome.++* “**Mean execution time**” and “**Standard deviation**” are+ statistics calculated (more or less) from execution time divided by+ number of iterations.++On either side of the main column of values are greyed-out lower and+upper bounds. These measure the *accuracy* of the main estimate using+a statistical technique called+[*bootstrapping*](https://en.wikipedia.org/wiki/Bootstrapping_(statistics)). This+tells us that when randomly resampling the data, 95% of estimates fell+within between the lower and upper bounds. When the main estimate is+of good quality, the lower and upper bounds will be close to its+value.+++## Reading command line output++Before you look at HTML reports, you'll probably start by inspecting+the report that criterion prints in your terminal window.++```+benchmarking ByteString/HashMap/random+time 4.046 ms (4.020 ms .. 4.072 ms)+ 1.000 R² (1.000 R² .. 1.000 R²)+mean 4.017 ms (4.010 ms .. 4.027 ms)+std dev 27.12 μs (20.45 μs .. 38.17 μs)+```++The first column is a name; the second is an estimate. The third and+fourth, in parentheses, are the 95% lower and upper bounds on the+estimate.++* `time` corresponds to the “OLS regression” field in the HTML table+ above.++* `R²` is the goodness-of-fit metric for `time`.++* `mean` and `std dev` have the same meanings as “Mean execution time”+ and “Standard deviation” in the HTML table.+++## How to write a benchmark suite++A criterion benchmark suite consists of a series of+[`Benchmark`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#t:Benchmark)+values.++```haskell+main = defaultMain [+ bgroup "fib" [ bench "1" $ whnf fib 1+ , bench "5" $ whnf fib 5+ , bench "9" $ whnf fib 9+ , bench "11" $ whnf fib 11+ ]+ ]+```+++We group related benchmarks together using the+[`bgroup`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#v:bgroup)+function. Its first argument is a name for the group of benchmarks.++```haskell+bgroup :: String -> [Benchmark] -> Benchmark+```++All the magic happens with the+[`bench`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#v:bench)+function. The first argument to `bench` is a name that describes the+activity we're benchmarking.++```haskell+bench :: String -> Benchmarkable -> Benchmark+bench = Benchmark+```++The+[`Benchmarkable`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#t:Benchmarkable)+type is a container for code that can be benchmarked.++By default, criterion allows two kinds of code to be benchmarked.++* Any `IO` action can be benchmarked directly.++* With a little trickery, we can benchmark pure functions.+++### Benchmarking an `IO` action++This function shows how we can benchmark an `IO` action.++```haskell+import Criterion.Main++main = defaultMain [+ bench "readFile" $ nfIO (readFile "GoodReadFile.hs")+ ]+```+([examples/GoodReadFile.hs](https://github.com/haskell/criterion/blob/master/examples/GoodReadFile.hs))++We use+[`nfIO`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#v:nfIO)+to specify that after we run the `IO` action, its result must be+evaluated to <span id="normal-form">normal form</span>, i.e. so that+all of its internal constructors are fully evaluated, and it contains+no thunks.++```haskell+nfIO :: NFData a => IO a -> Benchmarkable+```++Rules of thumb for when to use `nfIO`:++* Any time that lazy I/O is involved, use `nfIO` to avoid resource+ leaks.++* If you're not sure how much evaluation will have been performed on+ the result of an action, use `nfIO` to be certain that it's fully+ evaluated.+++### `IO` and `seq`++In addition to `nfIO`, criterion provides a+[`whnfIO`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#v:whnfIO)+function that evaluates the result of an action only deep enough for+the outermost constructor to be known (using `seq`). This is known as+<span id="weak-head-normal-form">**weak head normal form** (WHNF)</span>.++```haskell+whnfIO :: IO a -> Benchmarkable+```++This function is useful if your `IO` action returns a simple value+like an `Int`, or something more complex like a+[`Map`](http://hackage.haskell.org/package/containers/docs/Data-Map-Lazy.html#t:Map)+where evaluating the outermost constructor will do “enough work”.+++## Be careful with lazy I/O!++Experienced Haskell programmers don't use lazy I/O very often, and+here's an example of why: if you try to run the benchmark below, it+will probably *crash*.++```haskell+import Criterion.Main++main = defaultMain [+ bench "whnfIO readFile" $ whnfIO (readFile "BadReadFile.hs")+ ]+```+([examples/BadReadFile.hs](https://github.com/haskell/criterion/blob/master/examples/BadReadFile.hs))++The reason for the crash is that `readFile` reads the contents of a+file lazily: it can't close the file handle until whoever opened the+file reads the whole thing. Since `whnfIO` only evaluates the very+first constructor after the file is opened, the benchmarking loop+causes a large number of open files to accumulate, until the+inevitable occurs:++```shellsession+$ ./BadReadFile+benchmarking whnfIO readFile+openFile: resource exhausted (Too many open files)+```+++## Beware “pretend” I/O!++GHC is an aggressive compiler. If you have an `IO` action that+doesn't really interact with the outside world, *and* it has just the+right structure, GHC may notice that a substantial amount of its+computation can be memoised via “let-floating”.++There exists a+[somewhat contrived example](https://github.com/haskell/criterion/blob/master/examples/ConduitVsPipes.hs)+of this problem, where the first two benchmarks run between 40 and+40,000 times faster than they “should”.++As always, if you see numbers that look wildly out of whack, you+shouldn't rejoice that you have magically achieved fast+performance—be skeptical and investigate!+++> [!TIP]+> **Defeating let-floating**+> +> Fortunately for this particular misbehaving benchmark suite, GHC has+> an option named+> [`-fno-full-laziness`](https://downloads.haskell.org/ghc/latest/docs/users_guide/using-optimisation.html#ghc-flag-ffull-laziness)+> that will turn off let-floating and restore the first two benchmarks+> to performing in line with the second two.+>+> You should not react by simply throwing `-fno-full-laziness` into+> every GHC-and-criterion command line, as let-floating helps with+> performance more often than it hurts with benchmarking.+++## Benchmarking pure functions++Lazy evaluation makes it tricky to benchmark pure code. If we tried to+saturate a function with all of its arguments and evaluate it+repeatedly, laziness would ensure that we'd only do “real work” the+first time through our benchmarking loop. The expression would be+overwritten with that result, and no further work would happen on+subsequent loops through our benchmarking harness.++We can defeat laziness by benchmarking an *unsaturated* function—one+that has been given *all but one* of its arguments.++This is why the+[`nf`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#v:nf)+function accepts two arguments: the first is the almost-saturated+function we want to benchmark, and the second is the final argument to+give it.++```haskell+nf :: NFData b => (a -> b) -> a -> Benchmarkable+```++As the+[`NFData`](http://hackage.haskell.org/package/deepseq/docs/Control-DeepSeq.html#t:NFData)+constraint suggests, `nf` applies the argument to the function, then+evaluates the result to <a href="#normal-form">normal form</a>.++The+[`whnf`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#v:whnf)+function evaluates the result of a function only to <a+href="#weak-head-normal-form">weak head normal form</a> (WHNF).++```haskell+whnf :: (a -> b) -> a -> Benchmarkable+```++If we go back to our first example, we can now fully understand what's+going on.++```haskell+main = defaultMain [+ bgroup "fib" [ bench "1" $ whnf fib 1+ , bench "5" $ whnf fib 5+ , bench "9" $ whnf fib 9+ , bench "11" $ whnf fib 11+ ]+ ]+```+([examples/Fibber.hs](https://github.com/haskell/criterion/blob/master/examples/Fibber.hs))++We can get away with using `whnf` here because we know that an+`Int` has only one constructor, so there's no deeper buried+structure that we'd have to reach using `nf`.++As with benchmarking `IO` actions, there's no clear-cut case for when+to use `whfn` versus `nf`, especially when a result may be lazily+generated.++Guidelines for thinking about when to use `nf` or `whnf`:++* If a result is a lazy structure (or a mix of strict and lazy, such+ as a balanced tree with lazy leaves), how much of it would a+ real-world caller use? You should be trying to evaluate as much of+ the result as a realistic consumer would. Blindly using `nf` could+ cause way too much unnecessary computation.++* If a result is something simple like an `Int`, you're probably safe+ using `whnf`—but then again, there should be no additional cost to+ using `nf` in these cases.+++## Using the criterion command line++By default, a criterion benchmark suite simply runs all of its+benchmarks. However, criterion accepts a number of arguments to+control its behaviour. Run your program with `--help` for a complete+list.+++### Specifying benchmarks to run++The most common thing you'll want to do is specify which benchmarks+you want to run. You can do this by simply enumerating each+benchmark.++```shellsession+$ ./Fibber 'fib/fib 1'+```++By default, any names you specify are treated as prefixes to match, so+you can specify an entire group of benchmarks via a name like+`"fib/"`. Use the `--match` option to control this behaviour. There are+currently four ways to configure `--match`:++* `--match prefix`: Check if the given string is a prefix of a benchmark+ path. For instance, `"foo"` will match `"foobar"`.++* `--match glob`: Use the given string as a Unix-style glob pattern. Bear in+ mind that performing a glob match on benchmarks names is done as if they were+ file paths, so for instance both `"*/ba*"` and `"*/*"` will match `"foo/bar"`,+ but neither `"*"` nor `"*bar"` will match `"foo/bar"`.++* `--match pattern`: Check if the given string is a substring (not necessarily+ just a prefix) of a benchmark path. For instance `"ooba"` will match+ `"foobar"`.++* `--match ipattern`: Check if the given string is a substring (not necessarily+ just a prefix) of a benchmark path, but in a case-insensitive fashion. For+ instance, `"oObA"` will match `"foobar"`.++### Listing benchmarks++If you've forgotten the names of your benchmarks, run your program+with `--list` and it will print them all.+++### How long to spend measuring data++By default, each benchmark runs for 5 seconds.++You can control this using the `--time-limit` option, which specifies+the minimum number of seconds (decimal fractions are acceptable) that+a benchmark will spend gathering data. The actual amount of time+spent may be longer, if more data is needed.+++### Writing out data++Criterion provides several ways to save data.++The friendliest is as HTML, using `--output`. Files written using+`--output` are actually generated from Mustache-style templates. The+only other template provided by default is `json`, so if you run with+`--template json --output mydata.json`, you'll get a big JSON dump of+your data.++You can also write out a basic CSV file using `--csv`, a JSON file using+`--json`, and a JUnit-compatible XML file using `--junit`. (The contents+of these files are likely to change in the not-too-distant future.)+++## Linear regression++If you want to perform linear regressions on metrics other than+elapsed time, use the `--regress` option. This can be tricky to use+if you are not familiar with linear regression, but here's a thumbnail+sketch.++The purpose of linear regression is to predict how much one variable+(the *responder*) will change in response to a change in one or more+others (the *predictors*).++On each step through a benchmark loop, criterion changes the number of+iterations. This is the most obvious choice for a predictor+variable. This variable is named `iters`.++If we want to regress CPU time (`cpuTime`) against iterations, we can+use `cpuTime:iters` as the argument to `--regress`. This generates+some additional output on the command line:++```+time 31.31 ms (30.44 ms .. 32.22 ms)+ 0.997 R² (0.994 R² .. 0.999 R²)+mean 30.56 ms (30.01 ms .. 30.99 ms)+std dev 1.029 ms (754.3 μs .. 1.503 ms)++cpuTime: 0.997 R² (0.994 R² .. 0.999 R²)+ iters 3.129e-2 (3.039e-2 .. 3.221e-2)+ y -4.698e-3 (-1.194e-2 .. 1.329e-3)+```++After the block of normal data, we see a series of new rows.++On the first line of the new block is an R² goodness-of-fit measure,+so we can see how well our choice of regression fits the data.++On the second line, we get the slope of the `cpuTime`/`iters` curve,+or (stated another way) how much `cpuTime` each iteration costs.++The last entry is the $y$-axis intercept.+++### Measuring garbage collector statistics++By default, GHC does not collect statistics about the operation of its+garbage collector. If you want to measure and regress against GC+statistics, you must explicitly enable statistics collection at+runtime using `+RTS -T`.+++### Useful regressions++| regression | `--regress` | notes+| -------------------------------|------------------- |-----------+| CPU cycles | `cycles:iters` |+| Bytes allocated | `allocated:iters` | `+RTS -T`+| Number of garbage collections | `numGcs:iters` | `+RTS -T`+| CPU frequency | `cycles:time` |+++## Tips, tricks, and pitfalls++While criterion tries hard to automate as much of the benchmarking+process as possible, there are some things you will want to pay+attention to.++* Measurements are only as good as the environment in which they're+ gathered. Try to make sure your computer is quiet when measuring+ data.++* Be judicious in when you choose `nf` and `whnf`. Always think about+ what the result of a function is, and how much of it you want to+ evaluate.++* Simply rerunning a benchmark can lead to variations of a few percent+ in numbers. This variation can have many causes, including address+ space layout randomization, recompilation between runs, cache+ effects, CPU thermal throttling, and the phase of the moon. Don't+ treat your first measurement as golden!++* Keep an eye out for completely bogus numbers, as in the case of+ `-fno-full-laziness` above.++* When you need trustworthy results from a benchmark suite, run each+ measurement as a separate invocation of your program. When you run+ a number of benchmarks during a single program invocation, you will+ sometimes see them interfere with each other.+++### How to sniff out bogus results++If some external factors are making your measurements noisy, criterion+tries to make it easy to tell. At the level of raw data, noisy+measurements will show up as “outliers”, but you shouldn't need to+inspect the raw data directly.++The easiest yellow flag to spot is the R² goodness-of-fit measure+dropping below 0.9. If this happens, scrutinise your data carefully.++Another easy pattern to look for is severe outliers in the raw+measurement chart when you're using `--output`. These should be easy+to spot: they'll be points sitting far from the linear regression line+(usually above it).++If the lower and upper bounds on an estimate aren't “tight” (close to+the estimate), this suggests that noise might be having some kind of+negative effect.++A warning about “variance introduced by outliers” may be printed.+This indicates the degree to which the standard deviation is inflated+by outlying measurements, as in the following snippet (notice that the+lower and upper bounds aren't all that tight, too).++```+std dev 652.0 ps (507.7 ps .. 942.1 ps)+variance introduced by outliers: 91% (severely inflated)+```++## Generating (HTML) reports from previous benchmarks with criterion-report++If you want to post-process benchmark data before generating a HTML report you+can use the `criterion-report` executable to generate HTML reports from+criterion generated JSON. To store the benchmark results run criterion with the+`--json` flag to specify where to store the results. You can then use:+`criterion-report data.json report.html` to generate a HTML report of the data.+`criterion-report` also accepts the `--template` flag accepted by criterion.
Setup.lhs view
@@ -1,3 +1,3 @@-#!/usr/bin/env runhaskell -> import Distribution.Simple -> main = defaultMain +#!/usr/bin/env runhaskell+> import Distribution.Simple+> main = defaultMain
app/Options.hs view
@@ -1,51 +1,51 @@-{-# LANGUAGE DeriveDataTypeable, DeriveGeneric, RecordWildCards #-} -module Options - ( - CommandLine(..) - , commandLine - , parseCommandLine - , versionInfo - ) where - -import Data.Data (Data) -import Data.Version (showVersion) -import GHC.Generics (Generic) -import Paths_criterion (version) -import Prelude () -import Prelude.Compat -import Options.Applicative - -data CommandLine - = Report { jsonFile :: FilePath, outputFile :: FilePath, templateFile :: FilePath } - | Version - deriving (Eq, Read, Show, Data, Generic) - -reportOptions :: Parser CommandLine -reportOptions = Report <$> measurements <*> outputFile <*> templateFile - where - measurements = strArgument $ mconcat - [metavar "INPUT-JSON", help "Json file to read Criterion output from."] - - outputFile = strArgument $ mconcat - [metavar "OUTPUT-FILE", help "File to output formatted report too."] - - templateFile = strOption $ mconcat - [ long "template", short 't', metavar "FILE", value "default", - help "Template to use for report." ] - -parseCommand :: Parser CommandLine -parseCommand = - (Version <$ switch (long "version" <> help "Show version info")) <|> - (subparser $ - command "report" (info reportOptions (progDesc "Generate report."))) - -commandLine :: ParserInfo CommandLine -commandLine = info (helper <*> parseCommand) $ - header versionInfo <> - fullDesc - -parseCommandLine :: IO CommandLine -parseCommandLine = execParser commandLine - -versionInfo :: String -versionInfo = "criterion " ++ showVersion version +{-# LANGUAGE DeriveDataTypeable, DeriveGeneric, RecordWildCards #-}+module Options+ (+ CommandLine(..)+ , commandLine+ , parseCommandLine+ , versionInfo+ ) where++import Data.Data (Data)+import Data.Version (showVersion)+import GHC.Generics (Generic)+import Paths_criterion (version)+import Prelude ()+import Prelude.Compat+import Options.Applicative++data CommandLine+ = Report { jsonFile :: FilePath, outputFile :: FilePath, templateFile :: FilePath }+ | Version+ deriving (Eq, Read, Show, Data, Generic)++reportOptions :: Parser CommandLine+reportOptions = Report <$> measurements <*> outputFile <*> templateFile+ where+ measurements = strArgument $ mconcat+ [metavar "INPUT-JSON", help "Json file to read Criterion output from."]++ outputFile = strArgument $ mconcat+ [metavar "OUTPUT-FILE", help "File to output formatted report too."]++ templateFile = strOption $ mconcat+ [ long "template", short 't', metavar "FILE", value "default",+ help "Template to use for report." ]++parseCommand :: Parser CommandLine+parseCommand =+ (Version <$ switch (long "version" <> help "Show version info")) <|>+ (subparser $+ command "report" (info reportOptions (progDesc "Generate report.")))++commandLine :: ParserInfo CommandLine+commandLine = info (helper <*> parseCommand) $+ header versionInfo <>+ fullDesc++parseCommandLine :: IO CommandLine+parseCommandLine = execParser commandLine++versionInfo :: String+versionInfo = "criterion " ++ showVersion version
app/Report.hs view
@@ -1,32 +1,32 @@-{-# LANGUAGE RecordWildCards #-} -module Main (main) where - -import System.Exit (exitSuccess, exitFailure) -import System.IO (hPutStrLn, stderr) - -import Criterion.IO (readJSONReports) -import Criterion.Main (defaultConfig) -import Criterion.Monad (withConfig) -import Criterion.Report (report) -import Criterion.Types (Config(reportFile, template)) - -import Options - -main :: IO () -main = do - cmd <- parseCommandLine - case cmd of - Version -> putStrLn versionInfo >> exitSuccess - Report{..} -> do - let config = defaultConfig - { reportFile = Just outputFile - , template = templateFile - } - - res <- readJSONReports jsonFile - case res of - Left err -> do - hPutStrLn stderr $ "Error reading file: " ++ jsonFile - hPutStrLn stderr $ " " ++ show err - exitFailure - Right (_,_,rpts) -> withConfig config $ report rpts +{-# LANGUAGE RecordWildCards #-}+module Main (main) where++import System.Exit (exitSuccess, exitFailure)+import System.IO (hPutStrLn, stderr)++import Criterion.IO (readJSONReports)+import Criterion.Main (defaultConfig)+import Criterion.Monad (withConfig)+import Criterion.Report (report)+import Criterion.Types (Config(reportFile, template))++import Options++main :: IO ()+main = do+ cmd <- parseCommandLine+ case cmd of+ Version -> putStrLn versionInfo >> exitSuccess+ Report{..} -> do+ let config = defaultConfig+ { reportFile = Just outputFile+ , template = templateFile+ }++ res <- readJSONReports jsonFile+ case res of+ Left err -> do+ hPutStrLn stderr $ "Error reading file: " ++ jsonFile+ hPutStrLn stderr $ " " ++ show err+ exitFailure+ Right (_,_,rpts) -> withConfig config $ report rpts
changelog.md view
@@ -1,381 +1,386 @@-1.6.4.1 - -* Merge tutorial into README. - -1.6.4.0 - -* Drop support for pre-8.0 versions of GHC. - -1.6.3.0 - -* Remove a use of the partial `head` function within `criterion`. - -1.6.2.0 - -* Require `optparse-applicative-0.18.*` as the minimum and add an explicit - dependency on `prettyprinter` and `prettyprinter-ansi-terminal`. - -1.6.1.0 - -* Support building with `optparse-applicative-0.18.*`. - -1.6.0.0 - -* `criterion-measurement-0.2.0.0` adds the `measPeakMbAllocated` field to - `Measured` for reporting maximum megabytes allocated. Since `criterion` - re-exports `Measured` from `Criterion.Types`, this change affects `criterion` - as well. Naturally, this affects the behavior of `Measured`'s `{To,From}JSON` - and `Binary` instances. -* Fix a bug in which the `--help` text for the `--match` option was printed - twice in `criterion` applications. - -1.5.13.0 - -* Allow building with `optparse-applicative-0.17.*`. - -1.5.12.0 - -* Fix a bug introduced in version 1.5.9.0 in which benchmark names that include - double quotes would produce broken HTML reports. - -1.5.11.0 - -* Allow building with `aeson-2.0.0.0`. - -1.5.10.0 - -* Fix a bug in which the `defaultMainWith` function would not use the - `regressions` values specified in the `Config` argument. This bug only - affected `criterion` the library—uses of the `--regressions` flag from - `criterion` executables themselves were unaffected. - -1.5.9.0 - -* Fix a bug where HTML reports failed to escape JSON properly. - -1.5.8.0 - -* The HTML reports have been reworked. - - * The `flot` plotting library (`js-flot` on Hackage) has been replaced by - `Chart.js` (`js-chart`). - * Most practical changes focus on improving the functionality of the overview - chart: - * It now supports logarithmic scale (#213). The scale can be toggled by - clicking the x-axis. - * Manual zooming has been replaced by clicking to focus a single bar. - * It now supports a variety of sort orders. - * The legend can now be toggled on/off and is hidden by default. - * Clicking the name of a group in the legend shows/hides all bars in that - group. - * The regression line on the scatter plot shows confidence interval. - * Better support for mobile and print. - * JSON escaping has been made more robust by no longer directly injecting - reports as JavaScript code. - -1.5.7.0 - -* Warn if an HTML report name contains newlines, and replace newlines with - whitespace to avoid syntax errors in the report itself. - -1.5.6.2 - -* Use unescaped HTML in the `json.tpl` template. - -1.5.6.1 - -* Bundle `criterion-examples`' `LICENSE` file. - -1.5.6.0 - -* Allow building with `base-compat-batteries-0.11`. - -1.5.5.0 - -* Fix the build on old GHCs with the `embed-data-files` flag. -* Require `transformers-compat-0.6.4` or later. - -1.5.4.0 - -* Add `parserWith`, which allows creating a `criterion` command-line interface - using a custom `optparse-applicative` `Parser`. This is usefule for sitations - where one wants to add additional command-line arguments to the default ones - that `criterion` provides. - - For an example of how to use `parserWith`, refer to - `examples/ExtensibleCLI.hs`. - -* Tweak the way the graph in the HTML overview zooms: - - * Zooming all the way out resets to the default view (instead of continuing - to zoom out towards empty space). - * Panning all the way to the right resets to the default view in which zero - is left-aligned (instead of continuing to pan off the edge of the graph). - * Panning and zooming only affecs the x-axis, so all results remain in-frame. - -1.5.3.0 - -* Make more functions (e.g., `runMode`) able to print the `µ` character on - non-UTF-8 encodings. - -1.5.2.0 - -* Fix a bug in which HTML reports would render incorrectly when including - benchmark names containing apostrophes. - -* Only incur a dependency on `fail` on old GHCs. - -1.5.1.0 - -* Add a `MonadFail Criterion` instance. - -* Add some documentation in `Criterion.Main` about `criterion-measurement`'s - new `nfAppIO` and `whnfAppIO` functions, which `criterion` reexports. - -1.5.0.0 - -* Move the measurement functionality of `criterion` into a standalone package, - `criterion-measurement`. In particular, `cbits/` and `Criterion.Measurement` - are now in `criterion-measurement`, along with the relevant definitions of - `Criterion.Types` and `Criterion.Types.Internal` (both of which are now under - the `Criterion.Measurement.*` namespace). - Consequently, `criterion` now depends on `criterion-measurement`. - - This will let other libraries (e.g. alternative statistical analysis - front-ends) to import the measurement functionality alone as a lightweight - dependency. - -* Fix a bug on macOS and Windows where using `runAndAnalyse` and other - lower-level benchmarking functions would result in an infinite loop. - -1.4.1.0 - -* Use `base-compat-batteries`. - -1.4.0.0 - -* We now do three samples for statistics: - - * `performMinorGC` before the first sample, to ensure it's up to date. - * Take another sample after the action, without a garbage collection, so we - can gather legitimate readings on GC-related statistics. - * Then `performMinorGC` and sample once more, so we can get up-to-date - readings on other metrics. - - The type of `applyGCStatistics` has changed accordingly. Before, it was: - - ```haskell - Maybe GCStatistics -- ^ Statistics gathered at the end of a run. - -> Maybe GCStatistics -- ^ Statistics gathered at the beginning of a run. - -> Measured -> Measured - ``` - - Now, it is: - - ```haskell - Maybe GCStatistics -- ^ Statistics gathered at the end of a run, post-GC. - -> Maybe GCStatistics -- ^ Statistics gathered at the end of a run, pre-GC. - -> Maybe GCStatistics -- ^ Statistics gathered at the beginning of a run. - -> Measured -> Measured - ``` - - When diffing `GCStatistics` in `applyGCStatistics`, we carefully choose - whether to diff against the end stats pre- or post-GC. - -* Use `performMinorGC` rather than `performGC` to update garbage collection - statistics. This improves the benchmark performance of fast functions on large - objects. - -* Fix a bug in the `ToJSON Measured` instance which duplicated the - mutator CPU seconds where GC CPU seconds should go. - -* Fix a bug in sample analysis which incorrectly accounted for overhead - causing runtime errors and invalid results. Accordingly, the buggy - `getOverhead` function has been removed. - -* Fix a bug in `Measurement.measure` which inflated the reported time taken - for `perRun` benchmarks. - -* Reduce overhead of `nf`, `whnf`, `nfIO`, and `whnfIO` by removing allocation - from the central loops. - -1.3.0.0 - -* `criterion` was previously reporting the following statistics incorrectly - on GHC 8.2 and later: - - * `gcStatsBytesAllocated` - * `gcStatsBytesCopied` - * `gcStatsGcCpuSeconds` - * `gcStatsGcWallSeconds` - - This has been fixed. - -* The type signature of `runBenchmarkable` has changed from: - - ```haskell - Benchmarkable -> Int64 -> (a -> a -> a) -> (IO () -> IO a) -> IO a - ``` - - to: - - ```haskell - Benchmarkable -> Int64 -> (a -> a -> a) -> (Int64 -> IO () -> IO a) -> IO a - ``` - - The extra `Int64` argument represents how many iterations are being timed. - -* Remove the deprecated `getGCStats` and `applyGCStats` functions (which have - been replaced by `getGCStatistics` and `applyGCStatistics`). -* Remove the deprecated `forceGC` field of `Config`, as well as the - corresponding `--no-gc` command-line option. -* The header in generated JSON output mistakenly used the string `"criterio"`. - This has been corrected to `"criterion"`. - -1.2.6.0 - -* Add error bars and zoomable navigation to generated HTML report graphs. - - (Note that there have been reports that this feature can be somewhat unruly - when using macOS and Firefox simultaneously. See - https://github.com/flot/flot/issues/1554 for more details.) - -* Use a predetermined set of cycling colors for benchmark groups in HTML - reports. This avoids a bug in earlier versions of `criterion` where benchmark - group colors could be chosen that were almost completely white, which made - them impossible to distinguish from the background. - -1.2.5.0 - -* Add an `-fembed-data-files` flag. Enabling this option will embed the - `data-files` from `criterion.cabal` directly into the binary, producing - a relocatable executable. (This has the downside of increasing the binary - size significantly, so be warned.) - -1.2.4.0 - -* Fix issue where `--help` would display duplicate options. - -1.2.3.0 - -* Add a `Semigroup` instance for `Outliers`. - -* Improve the error messages that are thrown when forcing nonexistent - benchmark environments. - -* Explicitly mark `forceGC` as deprecated. `forceGC` has not had any effect - for several releases, and it will be removed in the next major `criterion` - release. - -1.2.2.0 - -* Important bugfix: versions 1.2.0.0 and 1.2.1.0 were incorrectly displaying - the lower and upper bounds for measured values on HTML reports. - -* Have `criterion` emit warnings if suspicious things happen during mustache - template substitution when creating HTML reports. This can be useful when - using custom templates with the `--template` flag. - -1.2.1.0 - -* Add `GCStatistics`, `getGCStatistics`, and `applyGCStatistics` to - `Criterion.Measurement`. These are inteded to replace `GCStats` (which has - been deprecated in `base` and will be removed in GHC 8.4), as well as - `getGCStats` and `applyGCStats`, which have also been deprecated and will be - removed in the next major `criterion` release. - -* Add new matchers for the `--match` flag: - * `--match pattern`, which matches by searching for a given substring in - benchmark paths. - * `--match ipattern`, which is like `--match pattern` but case-insensitive. - -* Export `Criterion.Main.Options.config`. - -* Export `Criterion.toBenchmarkable`, which behaves like the `Benchmarkable` - constructor did prior to `criterion-1.2.0.0`. - -1.2.0.0 - -* Use `statistics-0.14`. - -* Replace the `hastache` dependency with `microstache`. - -* Add support for per-run allocation/cleanup of the environment with - `perRunEnv` and `perRunEnvWithCleanup`, - -* Add support for per-batch allocation/cleanup with - `perBatchEnv` and `perBatchEnvWithCleanup`. - -* Add `envWithCleanup`, a variant of `env` with cleanup support. - -* Add the `criterion-report` executable, which creates reports from previously - created JSON files. - -1.1.4.0 - -* Unicode output is now correctly printed on Windows. - -* Add Safe Haskell annotations. - -* Add `--json` option for writing reports in JSON rather than binary - format. Also: various bugfixes related to this. - -* Use the `js-jquery` and `js-flot` libraries to substitute in JavaScript code - into the default HTML report template. - -* Use the `code-page` library to ensure that `criterion` prints out Unicode - characters (like ², which `criterion` uses in reports) in a UTF-8-compatible - code page on Windows. - -* Give an explicit implementation for `get` in the `Binary Regression` - instance. This should fix sporadic `criterion` failures with older versions - of `binary`. - -* Use `tasty` instead of `test-framework` in the test suites. - -* Restore support for 32-bit Intel CPUs. - -* Restore build compatibilty with GHC 7.4. - -1.1.1.0 - -* If a benchmark uses `Criterion.env` in a non-lazy way, and you try - to use `--list` to list benchmark names, you'll now get an - understandable error message instead of something cryptic. - -* We now flush stdout and stderr after printing messages, so that - output is printed promptly even when piped (e.g. into a pager). - -* A new function `runMode` allows custom benchmarking applications to - run benchmarks with control over the `Mode` used. - -* Added support for Linux on non-Intel CPUs. - -* This version supports GHC 8. - -* The `--only-run` option for benchmarks is renamed to `--iters`. - -1.1.0.0 - -* The dependency on the either package has been dropped in favour of a - dependency on transformers-compat. This greatly reduces the number - of packages criterion depends on. This shouldn't affect the - user-visible API. - -* The documentation claimed that environments were created only when - needed, but this wasn't implemented. (gh-76) - -* The package now compiles with GHC 7.10. - -* On Windows with a non-Unicode code page, printing results used to - cause a crash. (gh-55) - -1.0.2.0 - -* Bump lower bound on optparse-applicative to 0.11 to handle yet more - annoying API churn. - -1.0.1.0 - -* Added a lower bound of 0.10 on the optparse-applicative dependency, - as there were major API changes between 0.9 and 0.10. +1.6.5.0++* Make the test suite work with `tasty-1.5.4` or later.+* Remove unused `parsec`, `time`, and `vector-algorithms` dependencies.++1.6.4.1++* Merge tutorial into README.++1.6.4.0++* Drop support for pre-8.0 versions of GHC.++1.6.3.0++* Remove a use of the partial `head` function within `criterion`.++1.6.2.0++* Require `optparse-applicative-0.18.*` as the minimum and add an explicit+ dependency on `prettyprinter` and `prettyprinter-ansi-terminal`.++1.6.1.0++* Support building with `optparse-applicative-0.18.*`.++1.6.0.0++* `criterion-measurement-0.2.0.0` adds the `measPeakMbAllocated` field to+ `Measured` for reporting maximum megabytes allocated. Since `criterion`+ re-exports `Measured` from `Criterion.Types`, this change affects `criterion`+ as well. Naturally, this affects the behavior of `Measured`'s `{To,From}JSON`+ and `Binary` instances.+* Fix a bug in which the `--help` text for the `--match` option was printed+ twice in `criterion` applications.++1.5.13.0++* Allow building with `optparse-applicative-0.17.*`.++1.5.12.0++* Fix a bug introduced in version 1.5.9.0 in which benchmark names that include+ double quotes would produce broken HTML reports.++1.5.11.0++* Allow building with `aeson-2.0.0.0`.++1.5.10.0++* Fix a bug in which the `defaultMainWith` function would not use the+ `regressions` values specified in the `Config` argument. This bug only+ affected `criterion` the library—uses of the `--regressions` flag from+ `criterion` executables themselves were unaffected.++1.5.9.0++* Fix a bug where HTML reports failed to escape JSON properly.++1.5.8.0++* The HTML reports have been reworked.++ * The `flot` plotting library (`js-flot` on Hackage) has been replaced by+ `Chart.js` (`js-chart`).+ * Most practical changes focus on improving the functionality of the overview+ chart:+ * It now supports logarithmic scale (#213). The scale can be toggled by+ clicking the x-axis.+ * Manual zooming has been replaced by clicking to focus a single bar.+ * It now supports a variety of sort orders.+ * The legend can now be toggled on/off and is hidden by default.+ * Clicking the name of a group in the legend shows/hides all bars in that+ group.+ * The regression line on the scatter plot shows confidence interval.+ * Better support for mobile and print.+ * JSON escaping has been made more robust by no longer directly injecting+ reports as JavaScript code.++1.5.7.0++* Warn if an HTML report name contains newlines, and replace newlines with+ whitespace to avoid syntax errors in the report itself.++1.5.6.2++* Use unescaped HTML in the `json.tpl` template.++1.5.6.1++* Bundle `criterion-examples`' `LICENSE` file.++1.5.6.0++* Allow building with `base-compat-batteries-0.11`.++1.5.5.0++* Fix the build on old GHCs with the `embed-data-files` flag.+* Require `transformers-compat-0.6.4` or later.++1.5.4.0++* Add `parserWith`, which allows creating a `criterion` command-line interface+ using a custom `optparse-applicative` `Parser`. This is usefule for sitations+ where one wants to add additional command-line arguments to the default ones+ that `criterion` provides.++ For an example of how to use `parserWith`, refer to+ `examples/ExtensibleCLI.hs`.++* Tweak the way the graph in the HTML overview zooms:++ * Zooming all the way out resets to the default view (instead of continuing+ to zoom out towards empty space).+ * Panning all the way to the right resets to the default view in which zero+ is left-aligned (instead of continuing to pan off the edge of the graph).+ * Panning and zooming only affecs the x-axis, so all results remain in-frame.++1.5.3.0++* Make more functions (e.g., `runMode`) able to print the `µ` character on+ non-UTF-8 encodings.++1.5.2.0++* Fix a bug in which HTML reports would render incorrectly when including+ benchmark names containing apostrophes.++* Only incur a dependency on `fail` on old GHCs.++1.5.1.0++* Add a `MonadFail Criterion` instance.++* Add some documentation in `Criterion.Main` about `criterion-measurement`'s+ new `nfAppIO` and `whnfAppIO` functions, which `criterion` reexports.++1.5.0.0++* Move the measurement functionality of `criterion` into a standalone package,+ `criterion-measurement`. In particular, `cbits/` and `Criterion.Measurement`+ are now in `criterion-measurement`, along with the relevant definitions of+ `Criterion.Types` and `Criterion.Types.Internal` (both of which are now under+ the `Criterion.Measurement.*` namespace).+ Consequently, `criterion` now depends on `criterion-measurement`.++ This will let other libraries (e.g. alternative statistical analysis+ front-ends) to import the measurement functionality alone as a lightweight+ dependency.++* Fix a bug on macOS and Windows where using `runAndAnalyse` and other+ lower-level benchmarking functions would result in an infinite loop.++1.4.1.0++* Use `base-compat-batteries`.++1.4.0.0++* We now do three samples for statistics:++ * `performMinorGC` before the first sample, to ensure it's up to date.+ * Take another sample after the action, without a garbage collection, so we+ can gather legitimate readings on GC-related statistics.+ * Then `performMinorGC` and sample once more, so we can get up-to-date+ readings on other metrics.++ The type of `applyGCStatistics` has changed accordingly. Before, it was:++ ```haskell+ Maybe GCStatistics -- ^ Statistics gathered at the end of a run.+ -> Maybe GCStatistics -- ^ Statistics gathered at the beginning of a run.+ -> Measured -> Measured+ ```++ Now, it is:++ ```haskell+ Maybe GCStatistics -- ^ Statistics gathered at the end of a run, post-GC.+ -> Maybe GCStatistics -- ^ Statistics gathered at the end of a run, pre-GC.+ -> Maybe GCStatistics -- ^ Statistics gathered at the beginning of a run.+ -> Measured -> Measured+ ```++ When diffing `GCStatistics` in `applyGCStatistics`, we carefully choose+ whether to diff against the end stats pre- or post-GC.++* Use `performMinorGC` rather than `performGC` to update garbage collection+ statistics. This improves the benchmark performance of fast functions on large+ objects.++* Fix a bug in the `ToJSON Measured` instance which duplicated the+ mutator CPU seconds where GC CPU seconds should go.++* Fix a bug in sample analysis which incorrectly accounted for overhead+ causing runtime errors and invalid results. Accordingly, the buggy+ `getOverhead` function has been removed.++* Fix a bug in `Measurement.measure` which inflated the reported time taken+ for `perRun` benchmarks.++* Reduce overhead of `nf`, `whnf`, `nfIO`, and `whnfIO` by removing allocation+ from the central loops.++1.3.0.0++* `criterion` was previously reporting the following statistics incorrectly+ on GHC 8.2 and later:++ * `gcStatsBytesAllocated`+ * `gcStatsBytesCopied`+ * `gcStatsGcCpuSeconds`+ * `gcStatsGcWallSeconds`++ This has been fixed.++* The type signature of `runBenchmarkable` has changed from:++ ```haskell+ Benchmarkable -> Int64 -> (a -> a -> a) -> (IO () -> IO a) -> IO a+ ```++ to:++ ```haskell+ Benchmarkable -> Int64 -> (a -> a -> a) -> (Int64 -> IO () -> IO a) -> IO a+ ```++ The extra `Int64` argument represents how many iterations are being timed.++* Remove the deprecated `getGCStats` and `applyGCStats` functions (which have+ been replaced by `getGCStatistics` and `applyGCStatistics`).+* Remove the deprecated `forceGC` field of `Config`, as well as the+ corresponding `--no-gc` command-line option.+* The header in generated JSON output mistakenly used the string `"criterio"`.+ This has been corrected to `"criterion"`.++1.2.6.0++* Add error bars and zoomable navigation to generated HTML report graphs.++ (Note that there have been reports that this feature can be somewhat unruly+ when using macOS and Firefox simultaneously. See+ https://github.com/flot/flot/issues/1554 for more details.)++* Use a predetermined set of cycling colors for benchmark groups in HTML+ reports. This avoids a bug in earlier versions of `criterion` where benchmark+ group colors could be chosen that were almost completely white, which made+ them impossible to distinguish from the background.++1.2.5.0++* Add an `-fembed-data-files` flag. Enabling this option will embed the+ `data-files` from `criterion.cabal` directly into the binary, producing+ a relocatable executable. (This has the downside of increasing the binary+ size significantly, so be warned.)++1.2.4.0++* Fix issue where `--help` would display duplicate options.++1.2.3.0++* Add a `Semigroup` instance for `Outliers`.++* Improve the error messages that are thrown when forcing nonexistent+ benchmark environments.++* Explicitly mark `forceGC` as deprecated. `forceGC` has not had any effect+ for several releases, and it will be removed in the next major `criterion`+ release.++1.2.2.0++* Important bugfix: versions 1.2.0.0 and 1.2.1.0 were incorrectly displaying+ the lower and upper bounds for measured values on HTML reports.++* Have `criterion` emit warnings if suspicious things happen during mustache+ template substitution when creating HTML reports. This can be useful when+ using custom templates with the `--template` flag.++1.2.1.0++* Add `GCStatistics`, `getGCStatistics`, and `applyGCStatistics` to+ `Criterion.Measurement`. These are inteded to replace `GCStats` (which has+ been deprecated in `base` and will be removed in GHC 8.4), as well as+ `getGCStats` and `applyGCStats`, which have also been deprecated and will be+ removed in the next major `criterion` release.++* Add new matchers for the `--match` flag:+ * `--match pattern`, which matches by searching for a given substring in+ benchmark paths.+ * `--match ipattern`, which is like `--match pattern` but case-insensitive.++* Export `Criterion.Main.Options.config`.++* Export `Criterion.toBenchmarkable`, which behaves like the `Benchmarkable`+ constructor did prior to `criterion-1.2.0.0`.++1.2.0.0++* Use `statistics-0.14`.++* Replace the `hastache` dependency with `microstache`.++* Add support for per-run allocation/cleanup of the environment with+ `perRunEnv` and `perRunEnvWithCleanup`,++* Add support for per-batch allocation/cleanup with+ `perBatchEnv` and `perBatchEnvWithCleanup`.++* Add `envWithCleanup`, a variant of `env` with cleanup support.++* Add the `criterion-report` executable, which creates reports from previously+ created JSON files.++1.1.4.0++* Unicode output is now correctly printed on Windows.++* Add Safe Haskell annotations.++* Add `--json` option for writing reports in JSON rather than binary+ format. Also: various bugfixes related to this.++* Use the `js-jquery` and `js-flot` libraries to substitute in JavaScript code+ into the default HTML report template.++* Use the `code-page` library to ensure that `criterion` prints out Unicode+ characters (like ², which `criterion` uses in reports) in a UTF-8-compatible+ code page on Windows.++* Give an explicit implementation for `get` in the `Binary Regression`+ instance. This should fix sporadic `criterion` failures with older versions+ of `binary`.++* Use `tasty` instead of `test-framework` in the test suites.++* Restore support for 32-bit Intel CPUs.++* Restore build compatibilty with GHC 7.4.++1.1.1.0++* If a benchmark uses `Criterion.env` in a non-lazy way, and you try+ to use `--list` to list benchmark names, you'll now get an+ understandable error message instead of something cryptic.++* We now flush stdout and stderr after printing messages, so that+ output is printed promptly even when piped (e.g. into a pager).++* A new function `runMode` allows custom benchmarking applications to+ run benchmarks with control over the `Mode` used.++* Added support for Linux on non-Intel CPUs.++* This version supports GHC 8.++* The `--only-run` option for benchmarks is renamed to `--iters`.++1.1.0.0++* The dependency on the either package has been dropped in favour of a+ dependency on transformers-compat. This greatly reduces the number+ of packages criterion depends on. This shouldn't affect the+ user-visible API.++* The documentation claimed that environments were created only when+ needed, but this wasn't implemented. (gh-76)++* The package now compiles with GHC 7.10.++* On Windows with a non-Unicode code page, printing results used to+ cause a crash. (gh-55)++1.0.2.0++* Bump lower bound on optparse-applicative to 0.11 to handle yet more+ annoying API churn.++1.0.1.0++* Added a lower bound of 0.10 on the optparse-applicative dependency,+ as there were major API changes between 0.9 and 0.10.
criterion.cabal view
@@ -1,208 +1,204 @@-name: criterion -version: 1.6.4.1 -synopsis: Robust, reliable performance measurement and analysis -license: BSD3 -license-file: LICENSE -author: Bryan O'Sullivan <bos@serpentine.com> -maintainer: Ryan Scott <ryan.gl.scott@gmail.com> -copyright: 2009-present Bryan O'Sullivan and others -category: Development, Performance, Testing, Benchmarking -homepage: https://github.com/haskell/criterion -bug-reports: https://github.com/haskell/criterion/issues -build-type: Simple -cabal-version: >= 1.10 -extra-source-files: - README.markdown - changelog.md - examples/LICENSE - examples/*.cabal - examples/*.hs - www/fibber.html - www/report.html - www/fibber-screenshot.png -tested-with: - GHC==8.0.2, - GHC==8.2.2, - GHC==8.4.4, - GHC==8.6.5, - GHC==8.8.4, - GHC==8.10.7, - GHC==9.0.2, - GHC==9.2.8, - GHC==9.4.8, - GHC==9.6.7, - GHC==9.8.4, - GHC==9.10.2, - GHC==9.12.2 - -data-files: - templates/*.css - templates/*.tpl - templates/*.js - -description: - This library provides a powerful but simple way to measure software - performance. It consists of both a framework for executing and - analysing benchmarks and a set of driver functions that makes it - easy to build and run benchmarks, and to analyse their results. - . - The fastest way to get started is to read the - <https://github.com/haskell/criterion/blob/master/README.markdown#tutorial online tutorial>, - followed by the documentation and examples in the "Criterion.Main" - module. - -flag fast - description: compile without optimizations - default: False - manual: True - -flag embed-data-files - description: Embed the data files in the binary for a relocatable executable. - (Warning: This will increase the executable size significantly.) - default: False - manual: True - -library - exposed-modules: - Criterion - Criterion.Analysis - Criterion.IO - Criterion.IO.Printf - Criterion.Internal - Criterion.Main - Criterion.Main.Options - Criterion.Monad - Criterion.Report - Criterion.Types - - other-modules: - Criterion.Monad.Internal - - other-modules: - Paths_criterion - - build-depends: - aeson >= 2 && < 2.3, - base >= 4.9 && < 5, - base-compat-batteries >= 0.10 && < 0.15, - binary >= 0.8.3.0, - binary-orphans >= 1.0.1 && < 1.1, - bytestring >= 0.10.8.1 && < 1.0, - cassava >= 0.3.0.0, - code-page, - containers, - criterion-measurement >= 0.2 && < 0.3, - deepseq >= 1.1.0.0, - directory, - exceptions >= 0.8.2 && < 0.11, - filepath, - Glob >= 0.7.2, - microstache >= 1.0.1 && < 1.1, - js-chart >= 2.9.4 && < 3, - mtl >= 2, - mwc-random >= 0.8.0.3, - optparse-applicative >= 0.18 && < 0.20, - parsec >= 3.1.0, - prettyprinter >= 1.7 && < 1.8, - prettyprinter-ansi-terminal >= 1.1 && < 1.2, - statistics >= 0.14 && < 0.17, - text >= 0.11, - time, - transformers, - transformers-compat >= 0.6.4, - vector >= 0.7.1, - vector-algorithms >= 0.4 - - default-language: Haskell2010 - ghc-options: -Wall -funbox-strict-fields -Wtabs - if flag(fast) - ghc-options: -O0 - else - ghc-options: -O2 - - if flag(embed-data-files) - other-modules: Criterion.EmbeddedData - build-depends: file-embed < 0.1, - template-haskell - cpp-options: "-DEMBED" - -Executable criterion-report - Default-Language: Haskell2010 - GHC-Options: -Wall -rtsopts - Main-Is: Report.hs - Other-Modules: Options - Paths_criterion - Hs-Source-Dirs: app - - Build-Depends: - base, - base-compat-batteries, - criterion, - optparse-applicative >= 0.13 - -test-suite sanity - type: exitcode-stdio-1.0 - hs-source-dirs: tests - main-is: Sanity.hs - default-language: Haskell2010 - ghc-options: -Wall -rtsopts - if flag(fast) - ghc-options: -O0 - else - ghc-options: -O2 - - build-depends: - HUnit, - base, - bytestring, - criterion, - deepseq, - tasty, - tasty-hunit - -test-suite tests - type: exitcode-stdio-1.0 - hs-source-dirs: tests - main-is: Tests.hs - default-language: Haskell2010 - other-modules: Properties - - ghc-options: - -Wall -threaded -O0 -rtsopts - - build-depends: - QuickCheck >= 2.4, - base, - base-compat-batteries, - criterion, - statistics, - HUnit, - tasty, - tasty-hunit, - tasty-quickcheck, - vector, - aeson - -test-suite cleanup - type: exitcode-stdio-1.0 - hs-source-dirs: tests - default-language: Haskell2010 - main-is: Cleanup.hs - - ghc-options: - -Wall -threaded -O0 -rtsopts - - build-depends: - HUnit, - base, - base-compat, - bytestring, - criterion, - deepseq, - directory, - tasty, - tasty-hunit - -source-repository head - type: git - location: https://github.com/haskell/criterion.git +name: criterion+version: 1.6.5.0+synopsis: Robust, reliable performance measurement and analysis+license: BSD3+license-file: LICENSE+author: Bryan O'Sullivan <bos@serpentine.com>+maintainer: Ryan Scott <ryan.gl.scott@gmail.com>+copyright: 2009-present Bryan O'Sullivan and others+category: Development, Performance, Testing, Benchmarking+homepage: https://github.com/haskell/criterion+bug-reports: https://github.com/haskell/criterion/issues+build-type: Simple+cabal-version: >= 1.10+extra-source-files:+ README.markdown+ changelog.md+ examples/LICENSE+ examples/*.cabal+ examples/*.hs+ www/fibber.html+ www/report.html+ www/fibber-screenshot.png+tested-with:+ GHC==8.0.2,+ GHC==8.2.2,+ GHC==8.4.4,+ GHC==8.6.5,+ GHC==8.8.4,+ GHC==8.10.7,+ GHC==9.0.2,+ GHC==9.2.8,+ GHC==9.4.8,+ GHC==9.6.7,+ GHC==9.8.4,+ GHC==9.10.3,+ GHC==9.12.2++data-files:+ templates/*.css+ templates/*.tpl+ templates/*.js++description:+ This library provides a powerful but simple way to measure software+ performance. It consists of both a framework for executing and+ analysing benchmarks and a set of driver functions that makes it+ easy to build and run benchmarks, and to analyse their results.+ .+ The fastest way to get started is to read the+ <https://github.com/haskell/criterion/blob/master/README.markdown#tutorial online tutorial>,+ followed by the documentation and examples in the "Criterion.Main"+ module.++flag fast+ description: compile without optimizations+ default: False+ manual: True++flag embed-data-files+ description: Embed the data files in the binary for a relocatable executable.+ (Warning: This will increase the executable size significantly.)+ default: False+ manual: True++library+ exposed-modules:+ Criterion+ Criterion.Analysis+ Criterion.IO+ Criterion.IO.Printf+ Criterion.Internal+ Criterion.Main+ Criterion.Main.Options+ Criterion.Monad+ Criterion.Report+ Criterion.Types++ other-modules:+ Criterion.Monad.Internal++ other-modules:+ Paths_criterion++ build-depends:+ aeson >= 2 && < 2.3,+ base >= 4.9 && < 5,+ base-compat-batteries >= 0.10 && < 0.16,+ binary >= 0.8.3.0,+ binary-orphans >= 1.0.1 && < 1.1,+ bytestring >= 0.10.8.1 && < 1.0,+ cassava >= 0.3.0.0,+ code-page,+ containers,+ criterion-measurement >= 0.2 && < 0.3,+ deepseq >= 1.1.0.0,+ directory,+ exceptions >= 0.8.2 && < 0.11,+ filepath,+ Glob >= 0.7.2,+ microstache >= 1.0.1 && < 1.1,+ js-chart >= 2.9.4 && < 3,+ mtl >= 2,+ mwc-random >= 0.8.0.3,+ optparse-applicative >= 0.18 && < 0.20,+ prettyprinter >= 1.7 && < 1.8,+ prettyprinter-ansi-terminal >= 1.1 && < 1.2,+ statistics >= 0.14 && < 0.17,+ text >= 0.11,+ transformers,+ transformers-compat >= 0.6.4,+ vector >= 0.7.1++ default-language: Haskell2010+ ghc-options: -Wall -funbox-strict-fields -Wtabs+ if flag(fast)+ ghc-options: -O0+ else+ ghc-options: -O2++ if flag(embed-data-files)+ other-modules: Criterion.EmbeddedData+ build-depends: file-embed < 0.1,+ template-haskell+ cpp-options: "-DEMBED"++Executable criterion-report+ Default-Language: Haskell2010+ GHC-Options: -Wall -rtsopts+ Main-Is: Report.hs+ Other-Modules: Options+ Paths_criterion+ Hs-Source-Dirs: app++ Build-Depends:+ base,+ base-compat-batteries,+ criterion,+ optparse-applicative >= 0.13++test-suite sanity+ type: exitcode-stdio-1.0+ hs-source-dirs: tests+ main-is: Sanity.hs+ default-language: Haskell2010+ ghc-options: -Wall -rtsopts+ if flag(fast)+ ghc-options: -O0+ else+ ghc-options: -O2++ build-depends:+ HUnit,+ base,+ bytestring,+ criterion,+ tasty,+ tasty-hunit++test-suite tests+ type: exitcode-stdio-1.0+ hs-source-dirs: tests+ main-is: Tests.hs+ default-language: Haskell2010+ other-modules: Properties++ ghc-options:+ -Wall -threaded -O0 -rtsopts++ build-depends:+ QuickCheck >= 2.4,+ base,+ base-compat-batteries,+ criterion,+ statistics,+ HUnit,+ tasty,+ tasty-hunit,+ tasty-quickcheck,+ vector,+ aeson++test-suite cleanup+ type: exitcode-stdio-1.0+ hs-source-dirs: tests+ default-language: Haskell2010+ main-is: Cleanup.hs++ ghc-options:+ -Wall -threaded -O0 -rtsopts++ build-depends:+ HUnit,+ base,+ base-compat,+ bytestring,+ criterion,+ deepseq,+ directory,+ tasty,+ tasty-hunit++source-repository head+ type: git+ location: https://github.com/haskell/criterion.git
examples/BadReadFile.hs view
@@ -1,17 +1,17 @@--- This example demonstrates the peril of trying to benchmark a --- function that performs lazy I/O. - -import Criterion.Main - -main :: IO () -main = defaultMain [ - -- By using whnfIO, when the benchmark loop goes through an - -- iteration, we inspect only the first constructor returned after - -- the file is opened. Since the entire file must be read in - -- order for it to be closed, this causes file handles to leak, - -- and our benchmark will probably crash while running with an - -- error like this: - -- - -- openFile: resource exhausted (Too many open files) - bench "whnfIO readFile" $ whnfIO (readFile "BadReadFile.hs") - ] +-- This example demonstrates the peril of trying to benchmark a+-- function that performs lazy I/O.++import Criterion.Main++main :: IO ()+main = defaultMain [+ -- By using whnfIO, when the benchmark loop goes through an+ -- iteration, we inspect only the first constructor returned after+ -- the file is opened. Since the entire file must be read in+ -- order for it to be closed, this causes file handles to leak,+ -- and our benchmark will probably crash while running with an+ -- error like this:+ --+ -- openFile: resource exhausted (Too many open files)+ bench "whnfIO readFile" $ whnfIO (readFile "BadReadFile.hs")+ ]
examples/Comparison.hs view
@@ -1,7 +1,7 @@-import Criterion.Main - -main = defaultMain [ - bench "exp" $ whnf exp (2 :: Double) - , bench "log" $ whnf log (2 :: Double) - , bench "sqrt" $ whnf sqrt (2 :: Double) - ] +import Criterion.Main++main = defaultMain [+ bench "exp" $ whnf exp (2 :: Double)+ , bench "log" $ whnf log (2 :: Double)+ , bench "sqrt" $ whnf sqrt (2 :: Double)+ ]
examples/ConduitVsPipes.hs view
@@ -1,34 +1,34 @@--- Contributed by Gabriella Gonzales as a test case for --- https://github.com/haskell/criterion/issues/35 --- --- The numbers reported by this benchmark can be made "more correct" --- by compiling with the -fno-full-laziness option. - -import Criterion.Main (bench, bgroup, defaultMain, nfIO, whnf) -import Data.Conduit (runConduit, (.|)) -import Data.Functor.Identity (Identity(..)) -import Pipes ((>->), discard, each, for, runEffect) -import qualified Data.Conduit.List as C -import qualified Pipes.Prelude as P - -criterion :: Int -> IO () -criterion n = defaultMain - [ bgroup "IO" - [ -- This will appear to run in just a few nanoseconds. - bench "pipes" $ nfIO (pipes n) - -- In contrast, this should take ~10 microseconds. Which is - -- also wrong, as it happens. - , bench "conduit" $ nfIO (conduit n) - ] - , bgroup "Identity" - [ bench "pipes" $ whnf (runIdentity . pipes ) n - , bench "conduit" $ whnf (runIdentity . conduit) n - ] - ] - -pipes, conduit :: (Monad m) => Int -> m () -pipes n = runEffect $ for (each [1..n] >-> P.map (+1) >-> P.filter even) discard -conduit n = runConduit $ C.sourceList [1..n] .| C.map (+1) .| C.filter even .| C.sinkNull - -main :: IO () -main = criterion 10000 +-- Contributed by Gabriella Gonzales as a test case for+-- https://github.com/haskell/criterion/issues/35+--+-- The numbers reported by this benchmark can be made "more correct"+-- by compiling with the -fno-full-laziness option.++import Criterion.Main (bench, bgroup, defaultMain, nfIO, whnf)+import Data.Conduit (runConduit, (.|))+import Data.Functor.Identity (Identity(..))+import Pipes ((>->), discard, each, for, runEffect)+import qualified Data.Conduit.List as C+import qualified Pipes.Prelude as P++criterion :: Int -> IO ()+criterion n = defaultMain+ [ bgroup "IO"+ [ -- This will appear to run in just a few nanoseconds.+ bench "pipes" $ nfIO (pipes n)+ -- In contrast, this should take ~10 microseconds. Which is+ -- also wrong, as it happens.+ , bench "conduit" $ nfIO (conduit n)+ ]+ , bgroup "Identity"+ [ bench "pipes" $ whnf (runIdentity . pipes ) n+ , bench "conduit" $ whnf (runIdentity . conduit) n+ ]+ ]++pipes, conduit :: (Monad m) => Int -> m ()+pipes n = runEffect $ for (each [1..n] >-> P.map (+1) >-> P.filter even) discard+conduit n = runConduit $ C.sourceList [1..n] .| C.map (+1) .| C.filter even .| C.sinkNull++main :: IO ()+main = criterion 10000
examples/ExtensibleCLI.hs view
@@ -1,38 +1,38 @@-module Main where - -import Criterion.Main -import Criterion.Main.Options -import Options.Applicative -import Prelude () -import Prelude.Compat - -data CustomArgs = CustomArgs - { -- This data type adds two new arguments, listed below. - customArg1 :: Int - , customArg2 :: String - - -- The remaining arguments come from criterion itself. - , criterionArgs :: Mode - } - -customParser :: Parser CustomArgs -customParser = CustomArgs - <$> option auto - ( long "custom-arg1" - <> value 42 - <> metavar "INT" - <> help "Custom argument 1" ) - <*> strOption - ( long "custom-arg2" - <> value "Benchmark name" - <> metavar "STR" - <> help "Custom argument 2" ) - <*> parseWith defaultConfig - -main :: IO () -main = do - args <- execParser $ describeWith customParser - putStrLn $ "custom-arg1: " ++ show (customArg1 args) - putStrLn $ "custom-arg2: " ++ customArg2 args - runMode (criterionArgs args) - [ bench (customArg2 args) $ whnf id $ customArg1 args ] +module Main where++import Criterion.Main+import Criterion.Main.Options+import Options.Applicative+import Prelude ()+import Prelude.Compat++data CustomArgs = CustomArgs+ { -- This data type adds two new arguments, listed below.+ customArg1 :: Int+ , customArg2 :: String++ -- The remaining arguments come from criterion itself.+ , criterionArgs :: Mode+ }++customParser :: Parser CustomArgs+customParser = CustomArgs+ <$> option auto+ ( long "custom-arg1"+ <> value 42+ <> metavar "INT"+ <> help "Custom argument 1" )+ <*> strOption+ ( long "custom-arg2"+ <> value "Benchmark name"+ <> metavar "STR"+ <> help "Custom argument 2" )+ <*> parseWith defaultConfig++main :: IO ()+main = do+ args <- execParser $ describeWith customParser+ putStrLn $ "custom-arg1: " ++ show (customArg1 args)+ putStrLn $ "custom-arg2: " ++ customArg2 args+ runMode (criterionArgs args)+ [ bench (customArg2 args) $ whnf id $ customArg1 args ]
examples/Fibber.hs view
@@ -1,23 +1,23 @@-{- cabal: -build-depends: base, criterion --} - -import Criterion.Main - --- The function we're benchmarking. -fib :: Int -> Int -fib m | m < 0 = error "negative!" - | otherwise = go m - where - go 0 = 0 - go 1 = 1 - go n = go (n-1) + go (n-2) - -main :: IO () -main = defaultMain [ - bgroup "fib" [ bench "1" $ whnf fib 1 - , bench "5" $ whnf fib 5 - , bench "9" $ whnf fib 9 - , bench "11" $ whnf fib 11 - ] - ] +{- cabal:+build-depends: base, criterion+-}++import Criterion.Main++-- The function we're benchmarking.+fib :: Int -> Int+fib m | m < 0 = error "negative!"+ | otherwise = go m+ where+ go 0 = 0+ go 1 = 1+ go n = go (n-1) + go (n-2)++main :: IO ()+main = defaultMain [+ bgroup "fib" [ bench "1" $ whnf fib 1+ , bench "5" $ whnf fib 5+ , bench "9" $ whnf fib 9+ , bench "11" $ whnf fib 11+ ]+ ]
examples/GoodReadFile.hs view
@@ -1,12 +1,12 @@--- This example demonstrates how to correctly benchmark a function --- that performs lazy I/O. - -import Criterion.Main - -main :: IO () -main = defaultMain [ - -- Because we are using nfIO here, the entire file will be read on - -- each benchmark loop iteration. This will cause the associated - -- file handle to be eagerly closed every time. - bench "nfIO readFile" $ nfIO (readFile "GoodReadFile.hs") - ] +-- This example demonstrates how to correctly benchmark a function+-- that performs lazy I/O.++import Criterion.Main++main :: IO ()+main = defaultMain [+ -- Because we are using nfIO here, the entire file will be read on+ -- each benchmark loop iteration. This will cause the associated+ -- file handle to be eagerly closed every time.+ bench "nfIO readFile" $ nfIO (readFile "GoodReadFile.hs")+ ]
examples/Judy.hs view
@@ -1,47 +1,47 @@-{-# LANGUAGE FlexibleInstances, ScopedTypeVariables #-} -{-# OPTIONS_GHC -fno-full-laziness #-} - --- cabal install judy - -import Control.Monad (forM_) -import Criterion.Config -import Criterion.Main -import Criterion.Types -import qualified Data.IntMap as I -import qualified Data.Judy as J -import qualified Data.Map as M -import qualified Data.IntMap as I -import Data.List (foldl') - --- An example of how to specify a configuration value. -myConfig = defaultConfig { cfgPerformGC = ljust True } - -main = defaultMainWith myConfig (return ()) [ - bgroup "judy" [ - bench "insert 1M" $ whnf testit 1000000 - , bench "insert 10M" $ whnf testit 10000000 - , bench "insert 100M" $ whnf testit 100000000 - ], - bgroup "map" [ - bench "insert 100k" $ whnf testmap 100000 - , bench "insert 1M" $ whnf testmap 1000000 - ], - bgroup "intmap" [ - bench "insert 100k" $ whnf testintmap 100000 - , bench "insert 1M" $ whnf testintmap 1000000 - ] - ] - -testit n = do - j <- J.new :: IO (J.JudyL Int) - forM_ [1..n] $ \n -> J.insert n (fromIntegral n :: Int) j - v <- J.lookup 100 j - v `seq` return () - -testmap :: Int -> M.Map Int Int -testmap n = - foldl' (\m k -> M.insert k 1 m) M.empty [0..n] - -testintmap :: Int -> I.IntMap Int -testintmap n = - foldl' (\m k -> I.insert k 1 m) I.empty [0..n] +{-# LANGUAGE FlexibleInstances, ScopedTypeVariables #-}+{-# OPTIONS_GHC -fno-full-laziness #-}++-- cabal install judy++import Control.Monad (forM_)+import Criterion.Config+import Criterion.Main+import Criterion.Types+import qualified Data.IntMap as I+import qualified Data.Judy as J+import qualified Data.Map as M+import qualified Data.IntMap as I+import Data.List (foldl')++-- An example of how to specify a configuration value.+myConfig = defaultConfig { cfgPerformGC = ljust True }++main = defaultMainWith myConfig (return ()) [+ bgroup "judy" [+ bench "insert 1M" $ whnf testit 1000000+ , bench "insert 10M" $ whnf testit 10000000+ , bench "insert 100M" $ whnf testit 100000000+ ],+ bgroup "map" [+ bench "insert 100k" $ whnf testmap 100000+ , bench "insert 1M" $ whnf testmap 1000000+ ],+ bgroup "intmap" [+ bench "insert 100k" $ whnf testintmap 100000+ , bench "insert 1M" $ whnf testintmap 1000000+ ]+ ]++testit n = do+ j <- J.new :: IO (J.JudyL Int)+ forM_ [1..n] $ \n -> J.insert n (fromIntegral n :: Int) j+ v <- J.lookup 100 j+ v `seq` return ()++testmap :: Int -> M.Map Int Int+testmap n =+ foldl' (\m k -> M.insert k 1 m) M.empty [0..n]++testintmap :: Int -> I.IntMap Int+testintmap n =+ foldl' (\m k -> I.insert k 1 m) I.empty [0..n]
examples/LICENSE view
@@ -1,26 +1,26 @@-Copyright (c) 2009, 2010 Bryan O'Sullivan -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +Copyright (c) 2009, 2010 Bryan O'Sullivan+All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions+are met:++ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
examples/Maps.hs view
@@ -1,82 +1,82 @@--- Benchmark the cost of creating various types of map. - -{-# LANGUAGE FlexibleContexts, ScopedTypeVariables #-} - -import Criterion.Main -import Data.ByteString (ByteString, pack) -import Data.Hashable (Hashable) -import System.Random.MWC -import qualified Data.HashMap.Lazy as H -import qualified Data.IntMap as I -import qualified Data.Map as M -import qualified Data.Vector as V -import qualified Data.Vector.Algorithms.Intro as I -import qualified Data.Vector.Generic as G -import qualified Data.Vector.Unboxed as U - -type V = U.Vector Int -type B = V.Vector ByteString - -numbers :: IO (V, V, V) -numbers = do - gen <- createSystemRandom - random <- uniformVector gen 40000 - let sorted = G.modify I.sort random - revsorted = G.reverse sorted - return (random, sorted, revsorted) - -strings :: IO (B, B, B) -strings = do - gen <- createSystemRandom - random <- V.replicateM 10000 $ - (pack . U.toList) `fmap` (uniformVector gen =<< uniformR (1,16) gen) - let sorted = G.modify I.sort random - revsorted = G.reverse sorted - return (random, sorted, revsorted) - -main :: IO () -main = defaultMain [ - env numbers $ \ ~(random,sorted,revsorted) -> - bgroup "Int" [ - bgroup "IntMap" [ - bench "sorted" $ whnf intmap sorted - , bench "random" $ whnf intmap random - , bench "revsorted" $ whnf intmap revsorted - ] - , bgroup "Map" [ - bench "sorted" $ whnf mmap sorted - , bench "random" $ whnf mmap random - , bench "revsorted" $ whnf mmap revsorted - ] - , bgroup "HashMap" [ - bench "sorted" $ whnf hashmap sorted - , bench "random" $ whnf hashmap random - , bench "revsorted" $ whnf hashmap revsorted - ] - ] - , env strings $ \ ~(random,sorted,revsorted) -> - bgroup "ByteString" [ - bgroup "Map" [ - bench "sorted" $ whnf mmap sorted - , bench "random" $ whnf mmap random - , bench "revsorted" $ whnf mmap revsorted - ] - , bgroup "HashMap" [ - bench "sorted" $ whnf hashmap sorted - , bench "random" $ whnf hashmap random - , bench "revsorted" $ whnf hashmap revsorted - ] - ] - ] - -hashmap :: (G.Vector v k, Hashable k, Eq k) => v k -> H.HashMap k Int -hashmap xs = G.foldl' (\m k -> H.insert k value m) H.empty xs - -intmap :: G.Vector v Int => v Int -> I.IntMap Int -intmap xs = G.foldl' (\m k -> I.insert k value m) I.empty xs - -mmap :: (G.Vector v k, Ord k) => v k -> M.Map k Int -mmap xs = G.foldl' (\m k -> M.insert k value m) M.empty xs - -value :: Int -value = 31337 +-- Benchmark the cost of creating various types of map.++{-# LANGUAGE FlexibleContexts, ScopedTypeVariables #-}++import Criterion.Main+import Data.ByteString (ByteString, pack)+import Data.Hashable (Hashable)+import System.Random.MWC+import qualified Data.HashMap.Lazy as H+import qualified Data.IntMap as I+import qualified Data.Map as M+import qualified Data.Vector as V+import qualified Data.Vector.Algorithms.Intro as I+import qualified Data.Vector.Generic as G+import qualified Data.Vector.Unboxed as U++type V = U.Vector Int+type B = V.Vector ByteString++numbers :: IO (V, V, V)+numbers = do+ gen <- createSystemRandom+ random <- uniformVector gen 40000+ let sorted = G.modify I.sort random+ revsorted = G.reverse sorted+ return (random, sorted, revsorted)++strings :: IO (B, B, B)+strings = do+ gen <- createSystemRandom+ random <- V.replicateM 10000 $+ (pack . U.toList) `fmap` (uniformVector gen =<< uniformR (1,16) gen)+ let sorted = G.modify I.sort random+ revsorted = G.reverse sorted+ return (random, sorted, revsorted)++main :: IO ()+main = defaultMain [+ env numbers $ \ ~(random,sorted,revsorted) ->+ bgroup "Int" [+ bgroup "IntMap" [+ bench "sorted" $ whnf intmap sorted+ , bench "random" $ whnf intmap random+ , bench "revsorted" $ whnf intmap revsorted+ ]+ , bgroup "Map" [+ bench "sorted" $ whnf mmap sorted+ , bench "random" $ whnf mmap random+ , bench "revsorted" $ whnf mmap revsorted+ ]+ , bgroup "HashMap" [+ bench "sorted" $ whnf hashmap sorted+ , bench "random" $ whnf hashmap random+ , bench "revsorted" $ whnf hashmap revsorted+ ]+ ]+ , env strings $ \ ~(random,sorted,revsorted) ->+ bgroup "ByteString" [+ bgroup "Map" [+ bench "sorted" $ whnf mmap sorted+ , bench "random" $ whnf mmap random+ , bench "revsorted" $ whnf mmap revsorted+ ]+ , bgroup "HashMap" [+ bench "sorted" $ whnf hashmap sorted+ , bench "random" $ whnf hashmap random+ , bench "revsorted" $ whnf hashmap revsorted+ ]+ ]+ ]++hashmap :: (G.Vector v k, Hashable k, Eq k) => v k -> H.HashMap k Int+hashmap xs = G.foldl' (\m k -> H.insert k value m) H.empty xs++intmap :: G.Vector v Int => v Int -> I.IntMap Int+intmap xs = G.foldl' (\m k -> I.insert k value m) I.empty xs++mmap :: (G.Vector v k, Ord k) => v k -> M.Map k Int+mmap xs = G.foldl' (\m k -> M.insert k value m) M.empty xs++value :: Int+value = 31337
examples/Overhead.hs view
@@ -1,35 +1,35 @@--- This benchmark measures the timing overhead added by the various --- functions we use to measure performance. - -{-# LANGUAGE CPP #-} - -module Main (main) where - -import Criterion.Main -import Criterion.Measurement as M -import GHC.Stats as GHC - -main :: IO () -main = do - M.initializeTime -- Need to do this before calling M.getTime - statsEnabled <- getRTSStatsEnabled - defaultMain $ [ - bench "measure" $ whnfIO (M.measure (whnfIO $ return ()) 1) - , bench "getTime" $ whnfIO M.getTime - , bench "getCPUTime" $ whnfIO M.getCPUTime - , bench "getCycles" $ whnfIO M.getCycles - , bench "M.getGCStatistics" $ whnfIO M.getGCStatistics - ] ++ if statsEnabled - then [bench -#if MIN_VERSION_base(4,10,0) - "GHC.getRTSStats" $ whnfIO GHC.getRTSStats -#else - "GHC.getGCStats" $ whnfIO GHC.getGCStats -#endif - ] - else [] - -#if !MIN_VERSION_base(4,10,0) -getRTSStatsEnabled :: IO Bool -getRTSStatsEnabled = getGCStatsEnabled -#endif +-- This benchmark measures the timing overhead added by the various+-- functions we use to measure performance.++{-# LANGUAGE CPP #-}++module Main (main) where++import Criterion.Main+import Criterion.Measurement as M+import GHC.Stats as GHC++main :: IO ()+main = do+ M.initializeTime -- Need to do this before calling M.getTime+ statsEnabled <- getRTSStatsEnabled+ defaultMain $ [+ bench "measure" $ whnfIO (M.measure (whnfIO $ return ()) 1)+ , bench "getTime" $ whnfIO M.getTime+ , bench "getCPUTime" $ whnfIO M.getCPUTime+ , bench "getCycles" $ whnfIO M.getCycles+ , bench "M.getGCStatistics" $ whnfIO M.getGCStatistics+ ] ++ if statsEnabled+ then [bench+#if MIN_VERSION_base(4,10,0)+ "GHC.getRTSStats" $ whnfIO GHC.getRTSStats+#else+ "GHC.getGCStats" $ whnfIO GHC.getGCStats+#endif+ ]+ else []++#if !MIN_VERSION_base(4,10,0)+getRTSStatsEnabled :: IO Bool+getRTSStatsEnabled = getGCStatsEnabled+#endif
examples/Quotes.hs view
@@ -1,12 +1,12 @@-module Main where - -import Criterion -import Criterion.Main - -main :: IO () -main = defaultMain - [ env (return ()) $ - \ ~() -> bgroup "\"oops\"" [bench "dummy" $ nf id ()] - , env (return ()) $ - \ ~() -> bgroup "'oops'" [bench "dummy" $ nf id ()] - ] +module Main where++import Criterion+import Criterion.Main++main :: IO ()+main = defaultMain+ [ env (return ()) $+ \ ~() -> bgroup "\"oops\"" [bench "dummy" $ nf id ()]+ , env (return ()) $+ \ ~() -> bgroup "'oops'" [bench "dummy" $ nf id ()]+ ]
examples/criterion-examples.cabal view
@@ -1,137 +1,135 @@-name: criterion-examples -version: 0 -synopsis: Examples for the criterion benchmarking system -description: Examples for the criterion benchmarking system. -homepage: https://github.com/haskell/criterion -license: BSD3 -license-file: LICENSE -author: Bryan O'Sullivan <bos@serpentine.com> -maintainer: Bryan O'Sullivan <bos@serpentine.com> -category: Benchmarks -build-type: Simple -cabal-version: >=1.10 -tested-with: - GHC==8.0.2, - GHC==8.2.2, - GHC==8.4.4, - GHC==8.6.5, - GHC==8.8.4, - GHC==8.10.7, - GHC==9.0.2, - GHC==9.2.8, - GHC==9.4.8, - GHC==9.6.7, - GHC==9.8.4, - GHC==9.10.2, - GHC==9.12.2 - -flag conduit-vs-pipes - default: True - -flag maps - default: True - -executable fibber - main-is: Fibber.hs - - default-language: Haskell2010 - ghc-options: -Wall -rtsopts - build-depends: - base >= 4.9 && < 5, - criterion - -executable conduit-vs-pipes - if !flag(conduit-vs-pipes) - buildable: False - - main-is: ConduitVsPipes.hs - - default-language: Haskell2010 - ghc-options: -Wall -rtsopts - build-depends: - base >= 4.9 && < 5, - conduit >= 1.2.13.1, - criterion, - pipes >= 4.3.5, - transformers - -executable maps - if !flag(maps) - buildable: False - - main-is: Maps.hs - - default-language: Haskell2010 - ghc-options: -Wall -rtsopts - build-depends: - base >= 4.9 && < 5, - bytestring, - containers, - criterion, - deepseq, - hashable, - mwc-random >= 0.13.1, - unordered-containers, - vector, - vector-algorithms - -executable overhead - main-is: Overhead.hs - - default-language: Haskell2010 - ghc-options: -Wall -rtsopts - build-depends: - base >= 4.9 && < 5, - criterion, - criterion-measurement - -executable bad-read-file - main-is: BadReadFile.hs - - default-language: Haskell2010 - ghc-options: -Wall -rtsopts - build-depends: - base >= 4.9 && < 5, - criterion - -executable good-read-file - main-is: GoodReadFile.hs - - default-language: Haskell2010 - ghc-options: -Wall -rtsopts - build-depends: - base >= 4.9 && < 5, - criterion - -executable extensible-cli - main-is: ExtensibleCLI.hs - - default-language: Haskell2010 - ghc-options: -Wall -rtsopts - build-depends: - base >= 4.9 && < 5, - base-compat-batteries, - criterion, - optparse-applicative - -executable quotes - main-is: Quotes.hs - - default-language: Haskell2010 - ghc-options: -Wall -rtsopts - build-depends: - base >= 4.9 && < 5, - criterion - --- Cannot uncomment due to https://github.com/haskell/cabal/issues/1725 --- --- executable judy --- main-is: Judy.hs --- --- buildable: False --- default-language: Haskell2010 --- ghc-options: -Wall -rtsopts --- build-depends: --- base >= 4.9 && < 5, --- criterion, --- judy +name: criterion-examples+version: 0+synopsis: Examples for the criterion benchmarking system+description: Examples for the criterion benchmarking system.+homepage: https://github.com/haskell/criterion+license: BSD3+license-file: LICENSE+author: Bryan O'Sullivan <bos@serpentine.com>+maintainer: Bryan O'Sullivan <bos@serpentine.com>+category: Benchmarks+build-type: Simple+cabal-version: >=1.10+tested-with:+ GHC==8.0.2,+ GHC==8.2.2,+ GHC==8.4.4,+ GHC==8.6.5,+ GHC==8.8.4,+ GHC==8.10.7,+ GHC==9.0.2,+ GHC==9.2.8,+ GHC==9.4.8,+ GHC==9.6.7,+ GHC==9.8.4,+ GHC==9.10.3,+ GHC==9.12.2++flag conduit-vs-pipes+ default: True++flag maps+ default: True++executable fibber+ main-is: Fibber.hs++ default-language: Haskell2010+ ghc-options: -Wall -rtsopts+ build-depends:+ base >= 4.9 && < 5,+ criterion++executable conduit-vs-pipes+ if !flag(conduit-vs-pipes)+ buildable: False++ main-is: ConduitVsPipes.hs++ default-language: Haskell2010+ ghc-options: -Wall -rtsopts+ build-depends:+ base >= 4.9 && < 5,+ conduit >= 1.2.13.1,+ criterion,+ pipes >= 4.3.5++executable maps+ if !flag(maps)+ buildable: False++ main-is: Maps.hs++ default-language: Haskell2010+ ghc-options: -Wall -rtsopts+ build-depends:+ base >= 4.9 && < 5,+ bytestring,+ containers,+ criterion,+ hashable,+ mwc-random >= 0.13.1,+ unordered-containers,+ vector,+ vector-algorithms++executable overhead+ main-is: Overhead.hs++ default-language: Haskell2010+ ghc-options: -Wall -rtsopts+ build-depends:+ base >= 4.9 && < 5,+ criterion,+ criterion-measurement++executable bad-read-file+ main-is: BadReadFile.hs++ default-language: Haskell2010+ ghc-options: -Wall -rtsopts+ build-depends:+ base >= 4.9 && < 5,+ criterion++executable good-read-file+ main-is: GoodReadFile.hs++ default-language: Haskell2010+ ghc-options: -Wall -rtsopts+ build-depends:+ base >= 4.9 && < 5,+ criterion++executable extensible-cli+ main-is: ExtensibleCLI.hs++ default-language: Haskell2010+ ghc-options: -Wall -rtsopts+ build-depends:+ base >= 4.9 && < 5,+ base-compat-batteries,+ criterion,+ optparse-applicative++executable quotes+ main-is: Quotes.hs++ default-language: Haskell2010+ ghc-options: -Wall -rtsopts+ build-depends:+ base >= 4.9 && < 5,+ criterion++-- Cannot uncomment due to https://github.com/haskell/cabal/issues/1725+--+-- executable judy+-- main-is: Judy.hs+--+-- buildable: False+-- default-language: Haskell2010+-- ghc-options: -Wall -rtsopts+-- build-depends:+-- base >= 4.9 && < 5,+-- criterion,+-- judy
templates/criterion.css view
@@ -1,143 +1,143 @@-html,body { - padding: 0; margin: 0; - font-family: sans-serif; -} -* { - -webkit-tap-highlight-color: transparent; -} -div.scatter, div.kde { - position: relative; - display: inline-block; - box-sizing: border-box; - width: 50%; - padding: 0 2em; -} -.content, .explanation { - margin: auto; - max-width: 1000px; - padding: 0 20px; -} - -#legend-toggle { - cursor: pointer; -} - -.overview-info { - float:right; -} - -.overview-info a { - display: inline-block; - margin-left: 10px; -} -.overview-info .info { - font-size: 120%; - font-weight: 400; - vertical-align: middle; - line-height: 1em; -} -.chevron { - position:relative; - color: black; - display:block; - transition-property: transform; - transition-duration: 400ms; - line-height: 1em; - font-size: 180%; -} -.chevron.right { - transform: scale(-1,1); -} -.chevron::before { - vertical-align: middle; - content:"\2039"; -} - -select { - outline: none; - border:none; - background: transparent; -} - -footer .content { - padding: 0; -} - -span#explain-interactivity { - display-block: inline; - float: right; - color: #444; - font-size: 0.7em; -} - -@media screen and (max-width: 800px) { - div.scatter, div.kde { - width: 100%; - display: block; - } - .report-details .outliers { - margin: auto; - } - .report-details table { - margin: auto; - } -} -table.analysis .low, table.analysis .high { - opacity: 0.5; -} -.report-details { - margin: 2em 0; - page-break-inside: avoid; -} -a, a:hover, a:visited, a:active { - text-decoration: none; - color: #309ef2; -} -h1.title { - font-weight: 600; -} -h1 { - font-weight: 400; -} -#overview-chart { - width: 100%; /*height is determined by number of rows in JavaScript */ -} -footer { - background: #777777; - color: #ffffff; - padding: 20px; -} -footer a, footer a:hover, footer a:visited, footer a:active { - text-decoration: underline; - color: #fff; -} - -.explanation { - margin-top: 3em; -} - -.explanation h1 { - font-size: 2.6em; -} - -#grokularation.explanation li { - margin: 1em 0; -} - -#controls-explanation.explanation em { - font-weight: 600; - font-style: normal; -} - -@media print { - footer { - background: transparent; - color: black; - } - footer a, footer a:hover, footer a:visited, footer a:active { - color: #309ef2; - } - .no-print { - display: none; - } -} +html,body {+ padding: 0; margin: 0;+ font-family: sans-serif;+}+* {+ -webkit-tap-highlight-color: transparent;+}+div.scatter, div.kde {+ position: relative;+ display: inline-block;+ box-sizing: border-box;+ width: 50%;+ padding: 0 2em;+}+.content, .explanation {+ margin: auto;+ max-width: 1000px;+ padding: 0 20px;+}++#legend-toggle {+ cursor: pointer;+}++.overview-info {+ float:right;+}++.overview-info a {+ display: inline-block;+ margin-left: 10px;+}+.overview-info .info {+ font-size: 120%;+ font-weight: 400;+ vertical-align: middle;+ line-height: 1em;+}+.chevron {+ position:relative;+ color: black;+ display:block;+ transition-property: transform;+ transition-duration: 400ms;+ line-height: 1em;+ font-size: 180%;+}+.chevron.right {+ transform: scale(-1,1);+}+.chevron::before {+ vertical-align: middle;+ content:"\2039";+}++select {+ outline: none;+ border:none;+ background: transparent;+}++footer .content {+ padding: 0;+}++span#explain-interactivity {+ display-block: inline;+ float: right;+ color: #444;+ font-size: 0.7em;+}++@media screen and (max-width: 800px) {+ div.scatter, div.kde {+ width: 100%;+ display: block;+ }+ .report-details .outliers {+ margin: auto;+ }+ .report-details table {+ margin: auto;+ }+}+table.analysis .low, table.analysis .high {+ opacity: 0.5;+}+.report-details {+ margin: 2em 0;+ page-break-inside: avoid;+}+a, a:hover, a:visited, a:active {+ text-decoration: none;+ color: #309ef2;+}+h1.title {+ font-weight: 600;+}+h1 {+ font-weight: 400;+}+#overview-chart {+ width: 100%; /*height is determined by number of rows in JavaScript */+}+footer {+ background: #777777;+ color: #ffffff;+ padding: 20px;+}+footer a, footer a:hover, footer a:visited, footer a:active {+ text-decoration: underline;+ color: #fff;+}++.explanation {+ margin-top: 3em;+}++.explanation h1 {+ font-size: 2.6em;+}++#grokularation.explanation li {+ margin: 1em 0;+}++#controls-explanation.explanation em {+ font-weight: 600;+ font-style: normal;+}++@media print {+ footer {+ background: transparent;+ color: black;+ }+ footer a, footer a:hover, footer a:visited, footer a:active {+ color: #309ef2;+ }+ .no-print {+ display: none;+ }+}
templates/criterion.js view
@@ -1,870 +1,870 @@-(function() { - 'use strict'; - window.addEventListener('beforeprint', function() { - for (var id in Chart.instances) { - Chart.instances[id].resize(); - } - }, false); - - var errorBarPlugin = (function () { - function drawErrorBar(chart, ctx, low, high, y, height, color) { - ctx.save(); - ctx.lineWidth = 3; - ctx.strokeStyle = color; - var area = chart.chartArea; - ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top); - ctx.clip(); - ctx.beginPath(); - ctx.moveTo(low, y - height); - ctx.lineTo(low, y + height); - ctx.moveTo(low, y); - ctx.lineTo(high, y); - ctx.moveTo(high, y - height); - ctx.lineTo(high, y + height); - ctx.stroke(); - ctx.restore(); - } - // Avoid sudden jumps in error bars when switching - // between linear and logarithmic scale - function conservativeError(vx, mx, now, final, scale) { - var finalDiff = Math.abs(mx - final); - var diff = Math.abs(vx - now); - return (diff > finalDiff) ? vx + scale * finalDiff : now; - } - return { - afterDatasetDraw: function(chart, easingOptions) { - var ctx = chart.ctx; - var easing = easingOptions.easingValue; - chart.data.datasets.forEach(function(d, i) { - var bars = chart.getDatasetMeta(i).data; - var axis = chart.scales[chart.options.scales.xAxes[0].id]; - bars.forEach(function(b, j) { - var value = axis.getValueForPixel(b._view.x); - var final = axis.getValueForPixel(b._model.x); - var errorBar = d.errorBars[j]; - var low = axis.getPixelForValue(value - errorBar.minus); - var high = axis.getPixelForValue(value + errorBar.plus); - var finalLow = axis.getPixelForValue(final - errorBar.minus); - var finalHigh = axis.getPixelForValue(final + errorBar.plus); - var l = easing === 1 ? finalLow : - conservativeError(b._view.x, b._model.x, low, - finalLow, -1.0); - var h = easing === 1 ? finalHigh : - conservativeError(b._view.x, b._model.x, - high, finalHigh, 1.0); - drawErrorBar(chart, ctx, l, h, b._view.y, 4, errorBar.color); - }); - }); - }, - }; - })(); - - // Formats the ticks on the X-axis on the scatter plot - var iterFormatter = function() { - var denom = 0; - return function(iters, index, values) { - if (iters == 0) { - return ''; - } - if (index == values.length - 1) { - return ''; - } - var power; - if (iters >= 1e9) { - denom = 1e9; - power = '⁹'; - } else if (iters >= 1e6) { - denom = 1e6; - power = '⁶'; - } else if (iters >= 1e3) { - denom = 1e3; - power = '³'; - } else { - denom = 1; - } - if (denom > 1) { - var value = (iters / denom).toFixed(); - return String(value) + '×10' + power; - } else { - return String(iters); - } - }; - }; - - var colors = ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"]; - var errorColors = ["#cda220", "#8fb8d8", "#ab2b2b", "#2d872d", "#7420cd"]; - - - // Positions tooltips at cursor. Required for overview since the bars may - // extend past the canvas width. - Chart.Tooltip.positioners.cursor = function(_elems, position) { - return position; - } - - function axisType(logaxis) { - return logaxis ? 'logarithmic' : 'linear'; - } - - function reportSort(a, b) { - return a.reportNumber - b.reportNumber; - } - - // adds groupNumber and group fields to reports; - // returns list of list of reports, grouped by group - function groupReports(reports) { - - function reportGroup(report) { - var parts = report.groups.slice(); - parts.pop(); - return parts.join('/'); - } - - var groups = []; - reports.forEach(function(report) { - report.group = reportGroup(report); - if (groups.length === 0) { - groups.push([report]); - } else { - var prevGroup = groups[groups.length - 1]; - var prevGroupName = prevGroup[0].group; - if (prevGroupName === report.group) { - prevGroup.push(report); - } else { - groups.push([report]); - } - } - report.groupNumber = groups.length - 1; - }); - return groups; - } - - // compares 2 arrays lexicographically - function lex(aParts, bParts) { - for(var i = 0; i < aParts.length && i < bParts.length; i++) { - var x = aParts[i]; - var y = bParts[i]; - if (x < y) { - return -1; - } - if (y < x) { - return 1; - } - } - return aParts.length - bParts.length; - } - function lexicalSort(a, b) { - return lex(a.groups, b.groups); - } - - function reverseLexicalSort(a, b) { - return lex(a.groups.slice().reverse(), b.groups.slice().reverse()); - } - - function durationSort(a, b) { - return a.reportAnalysis.anMean.estPoint - b.reportAnalysis.anMean.estPoint; - } - function reverseDurationSort(a,b) { - return -durationSort(a,b); - } - - function timeUnits(secs) { - if (secs < 0) - return timeUnits(-secs); - else if (secs >= 1e9) - return [1e-9, "Gs"]; - else if (secs >= 1e6) - return [1e-6, "Ms"]; - else if (secs >= 1) - return [1, "s"]; - else if (secs >= 1e-3) - return [1e3, "ms"]; - else if (secs >= 1e-6) - return [1e6, "\u03bcs"]; - else if (secs >= 1e-9) - return [1e9, "ns"]; - else if (secs >= 1e-12) - return [1e12, "ps"]; - return [1, "s"]; - } - - function formatUnit(raw, unit, precision) { - var v = precision ? raw.toPrecision(precision) : Math.round(raw); - var label = String(v) + ' ' + unit; - return label; - } - - function formatTime(value, precision) { - var units = timeUnits(value); - var scale = units[0]; - return formatUnit(value * scale, units[1], precision); - } - - // pure function that produces the 'data' object of the overview chart - function overviewData(state, reports) { - var order = state.order; - var sorter = order === 'report-index' ? reportSort - : order === 'lex' ? lexicalSort - : order === 'colex' ? reverseLexicalSort - : order === 'duration' ? durationSort - : order === 'rev-duration' ? reverseDurationSort - : reportSort; - var sortedReports = reports.filter(function(report) { - return !state.hidden[report.groupNumber]; - }).slice().sort(sorter); - var data = sortedReports.map(function(report) { - return report.reportAnalysis.anMean.estPoint; - }); - var labels = sortedReports.map(function(report) { - return report.groups.join(' / '); - }); - var upperBound = function(report) { - var est = report.reportAnalysis.anMean; - return est.estPoint + est.estError.confIntUDX; - }; - var errorBars = sortedReports.map(function(report) { - var est = report.reportAnalysis.anMean; - return { - minus: est.estError.confIntLDX, - plus: est.estError.confIntUDX, - color: errorColors[report.groupNumber % errorColors.length] - }; - }); - var top = sortedReports.map(upperBound).reduce(function(a, b) { - return Math.max(a, b); - }, 0); - var scale = top; - if(state.activeReport !== null) { - reports.forEach(function(report) { - if(report.reportNumber === state.activeReport) { - scale = upperBound(report); - } - }); - } - - return { - labels: labels, - top: top, - max: scale * 1.1, - reports: sortedReports, - datasets: [{ - borderWidth: 1, - backgroundColor: sortedReports.map(function(report) { - var active = report.reportNumber === state.activeReport; - var alpha = active ? 'ff' : 'a0'; - var color = colors[report.groupNumber % colors.length] + alpha; - if (active) { - return Chart.helpers.getHoverColor(color); - } else { - return color; - } - }), - barThickness: 16, - barPercentage: 0.8, - data: data, - errorBars: errorBars, - minBarLength: 2, - }] - }; - } - - function inside(box, point) { - return (point.x >= box.left && point.x <= box.right && point.y >= box.top && - point.y <= box.bottom); - } - - function overviewHover(event, elems) { - var chart = this; - var xAxis = chart.scales[chart.options.scales.xAxes[0].id]; - var yAxis = chart.scales[chart.options.scales.yAxes[0].id]; - var point = Chart.helpers.getRelativePosition(event, chart); - var over = - (inside(xAxis, point) || inside(yAxis, point) || elems.length > 0); - if (over) { - chart.canvas.style.cursor = "pointer"; - } else { - chart.canvas.style.cursor = "default"; - } - } - - // Re-renders the overview after clicking/sorting - function renderOverview(state, reports, chart) { - var data = overviewData(state, reports); - var xaxis = chart.options.scales.xAxes[0]; - xaxis.ticks.max = data.max; - chart.config.data.datasets[0].backgroundColor = data.datasets[0].backgroundColor; - chart.config.data.datasets[0].errorBars = data.datasets[0].errorBars; - chart.config.data.datasets[0].data = data.datasets[0].data; - chart.options.scales.xAxes[0].type = axisType(state.logaxis); - chart.options.legend.display = state.legend; - chart.data.labels = data.labels; - chart.update(); - } - - function overviewClick(state, reports) { - return function(event, elems) { - var chart = this; - var xAxis = chart.scales[chart.options.scales.xAxes[0].id]; - var yAxis = chart.scales[chart.options.scales.yAxes[0].id]; - var point = Chart.helpers.getRelativePosition(event, chart); - var sorted = overviewData(state, reports).reports; - - function activateBar(index) { - // Trying to activate active bar disables instead - if (sorted[index].reportNumber === state.activeReport) { - state.activeReport = null; - } else { - state.activeReport = sorted[index].reportNumber; - } - } - - if (inside(xAxis, point)) { - state.activeReport = null; - state.logaxis = !state.logaxis; - renderOverview(state, reports, chart); - } else if (inside(yAxis, point)) { - var index = yAxis.getValueForPixel(point.y); - activateBar(index); - renderOverview(state, reports, chart); - } else if (elems.length > 0) { - var elem = elems[0]; - var index = elem._index; - activateBar(index); - state.logaxis = false; - renderOverview(state, reports, chart); - } else if(inside(chart.chartArea, point)) { - state.activeReport = null; - renderOverview(state, reports, chart); - } - }; - } - - // listener for sort drop-down - function overviewSort(state, reports, chart) { - return function(event) { - state.order = event.currentTarget.value; - renderOverview(state, reports, chart); - }; - } - - // Returns a formatter for the ticks on the X-axis of the overview - function overviewTick(state) { - return function(value, index, values) { - var label = formatTime(value); - if (state.logaxis) { - const remain = Math.round(value / - (Math.pow(10, Math.floor(Chart.helpers.log10(value))))); - if (index === values.length - 1) { - // Draw endpoint if we don't span a full order of magnitude - if (values[index] / values[1] < 10) { - return label; - } else { - return ''; - } - } - if (remain === 1) { - return label; - } - return ''; - } else { - // Don't show the right endpoint - if (index === values.length - 1) { - return ''; - } - return label; - } - } - } - - function mkOverview(reports) { - var canvas = document.createElement('canvas'); - - var state = { - logaxis: false, - activeReport: null, - order: 'index', - hidden: {}, - legend: false, - }; - - - var data = overviewData(state, reports); - var chart = new Chart(canvas.getContext('2d'), { - type: 'horizontalBar', - data: data, - plugins: [errorBarPlugin], - options: { - onHover: overviewHover, - onClick: overviewClick(state, reports), - onResize: function(chart, size) { - if (size.width < 800) { - chart.options.scales.yAxes[0].ticks.mirror = true; - chart.options.scales.yAxes[0].ticks.padding = -10; - chart.options.scales.yAxes[0].ticks.fontColor = '#000'; - } else { - chart.options.scales.yAxes[0].ticks.fontColor = '#666'; - chart.options.scales.yAxes[0].ticks.mirror = false; - chart.options.scales.yAxes[0].ticks.padding = 0; - } - }, - elements: { - rectangle: { - borderWidth: 2, - }, - }, - scales: { - yAxes: [{ - ticks: { - // make sure we draw the ticks above the error bars - z: 2, - } - }], - xAxes: [{ - display: true, - type: axisType(state.logaxis), - ticks: { - autoSkip: false, - min: 0, - max: data.top * 1.1, - minRotation: 0, - maxRotation: 0, - callback: overviewTick(state), - } - }] - }, - responsive: true, - maintainAspectRatio: false, - legend: { - display: state.legend, - position: 'right', - onLeave: function() { - chart.canvas.style.cursor = 'default'; - }, - onHover: function() { - chart.canvas.style.cursor = 'pointer'; - }, - onClick: function(_event, item) { - // toggle hidden - state.hidden[item.groupNumber] = !state.hidden[item.groupNumber]; - renderOverview(state, reports, chart); - }, - labels: { - boxWidth: 12, - generateLabels: function() { - var groups = []; - var groupNames = []; - reports.forEach(function(report) { - var index = groups.indexOf(report.groupNumber); - if (index === -1) { - groups.push(report.groupNumber); - var groupName = report.groups.slice(0,report.groups.length-1).join(' / '); - groupNames.push(groupName); - } - }); - return groups.map(function(groupNumber, index) { - var color = colors[groupNumber % colors.length]; - return { - text: groupNames[index], - fillStyle: color, - hidden: state.hidden[groupNumber], - groupNumber: groupNumber, - }; - }); - }, - }, - }, - tooltips: { - position: 'cursor', - callbacks: { - label: function(item) { - return formatTime(item.xLabel, 3); - }, - }, - }, - title: { - display: false, - text: 'Chart.js Horizontal Bar Chart' - } - } - }); - document.getElementById('sort-overview') - .addEventListener('change', overviewSort(state, reports, chart)); - var toggle = document.getElementById('legend-toggle'); - toggle.addEventListener('mouseup', function () { - state.legend = !state.legend; - if(state.legend) { - toggle.classList.add('right'); - } else { - toggle.classList.remove('right'); - } - renderOverview(state, reports, chart); - }) - return canvas; - } - - function mkKDE(report) { - var canvas = document.createElement('canvas'); - var mean = report.reportAnalysis.anMean.estPoint; - var units = timeUnits(mean); - var scale = units[0]; - var reportKDE = report.reportKDEs[0]; - var data = reportKDE.kdeValues.map(function(time, index) { - var pdf = reportKDE.kdePDF[index]; - return { - x: time * scale, - y: pdf - }; - }); - var chart = new Chart(canvas.getContext('2d'), { - type: 'line', - data: { - datasets: [{ - label: 'KDE', - borderColor: colors[0], - borderWidth: 2, - backgroundColor: '#00000000', - data: data, - hoverBorderWidth: 1, - pointHitRadius: 8, - }, - { - label: 'mean' - } - ], - }, - plugins: [{ - afterDraw: function(chart) { - var ctx = chart.ctx; - var area = chart.chartArea; - var axis = chart.scales[chart.options.scales.xAxes[0].id]; - var value = axis.getPixelForValue(mean * scale); - ctx.save(); - ctx.strokeStyle = colors[1]; - ctx.lineWidth = 2; - ctx.beginPath(); - ctx.moveTo(value, area.top); - ctx.lineTo(value, area.bottom); - ctx.stroke(); - ctx.restore(); - }, - }], - options: { - title: { - display: true, - text: report.groups.join(' / ') + ' — time densities', - }, - elements: { - point: { - radius: 0, - hitRadius: 0 - } - }, - scales: { - xAxes: [{ - display: true, - type: 'linear', - scaleLabel: { - display: false, - labelString: 'Time' - }, - ticks: { - min: reportKDE.kdeValues[0] * scale, - max: reportKDE.kdeValues[reportKDE.kdeValues.length - 1] * scale, - callback: function(value, index, values) { - // Don't show endpoints - if (index === 0 || index === values.length - 1) { - return ''; - } - var str = String(value) + ' ' + units[1]; - return str; - }, - } - }], - yAxes: [{ - display: true, - type: 'linear', - ticks: { - min: 0, - callback: function() { - return ''; - }, - }, - }] - }, - responsive: true, - legend: { - display: false, - position: 'right', - }, - tooltips: { - mode: 'nearest', - callbacks: { - title: function() { - return ''; - }, - label: function( - item) { - return formatUnit(item.xLabel, units[1], 3); - }, - }, - }, - hover: { - intersect: false - }, - } - }); - return canvas; - } - - function mkScatter(report) { - - // collect the measured value for a given regression - function getMeasured(key) { - var ix = report.reportKeys.indexOf(key); - return report.reportMeasured.map(function(x) { - return x[ix]; - }); - } - - var canvas = document.createElement('canvas'); - var times = getMeasured("time"); - var iters = getMeasured("iters"); - var lastIter = iters[iters.length - 1]; - var olsTime = report.reportAnalysis.anRegress[0].regCoeffs.iters; - var dataPoints = times.map(function(time, i) { - return { - x: iters[i], - y: time - } - }); - var formatter = iterFormatter(); - var chart = new Chart(canvas.getContext('2d'), { - type: 'scatter', - data: { - datasets: [{ - data: dataPoints, - label: 'scatter', - borderWidth: 2, - pointHitRadius: 8, - borderColor: colors[1], - backgroundColor: '#fff', - }, - { - data: [ - {x: 0, y: 0 }, - { x: lastIter, y: olsTime.estPoint * lastIter } - ], - label: 'regression', - type: 'line', - backgroundColor: "#00000000", - borderColor: colors[0], - pointRadius: 0, - }, - { - data: [{ - x: 0, - y: 0 - }, { - x: lastIter, - y: (olsTime.estPoint - olsTime.estError.confIntLDX) * lastIter, - }], - label: 'lower', - type: 'line', - fill: 1, - borderWidth: 0, - pointRadius: 0, - borderColor: '#00000000', - backgroundColor: colors[0] + '33', - }, - { - data: [{ - x: 0, - y: 0 - }, { - x: lastIter, - y: (olsTime.estPoint + olsTime.estError.confIntUDX) * lastIter, - }], - label: 'upper', - type: 'line', - fill: 1, - borderWidth: 0, - borderColor: '#00000000', - pointRadius: 0, - backgroundColor: colors[0] + '33', - }, - ], - }, - options: { - title: { - display: true, - text: report.groups.join(' / ') + ' — time per iteration', - }, - scales: { - yAxes: [{ - display: true, - type: 'linear', - scaleLabel: { - display: false, - labelString: 'Time' - }, - ticks: { - callback: function(value, index, values) { - return formatTime(value); - }, - } - }], - xAxes: [{ - display: true, - type: 'linear', - scaleLabel: { - display: false, - labelString: 'Iterations' - }, - ticks: { - callback: formatter, - max: lastIter, - } - }], - }, - legend: { - display: false, - }, - tooltips: { - callbacks: { - label: function(ttitem, ttdata) { - var iters = ttitem.xLabel; - var duration = ttitem.yLabel; - return formatTime(duration, 3) + ' / ' + - iters.toLocaleString() + ' iters'; - }, - }, - }, - } - }); - return canvas; - } - - // Create an HTML Element with attributes and child nodes - function elem(tag, props, children) { - var node = document.createElement(tag); - if (children) { - children.forEach(function(child) { - if (typeof child === 'string') { - var txt = document.createTextNode(child); - node.appendChild(txt); - } else { - node.appendChild(child); - } - }); - } - Object.assign(node, props); - return node; - } - - function bounds(analysis) { - var mean = analysis.estPoint; - return { - low: mean - analysis.estError.confIntLDX, - mean: mean, - high: mean + analysis.estError.confIntUDX - }; - } - - function confidence(level) { - return String(1 - level) + ' confidence level'; - } - - function mkOutliers(report) { - var outliers = report.reportAnalysis.anOutlierVar; - return elem('div', {className: 'outliers'}, [ - elem('p', {}, [ - 'Outlying measurements have ', - outliers.ovDesc, - ' (', String((outliers.ovFraction * 100).toPrecision(3)), '%)', - ' effect on estimated standard deviation.' - ]) - ]); - } - - function mkTable(report) { - var analysis = report.reportAnalysis; - var timep4 = function(t) { - return formatTime(t, 3) - }; - var idformatter = function(t) { - return t.toPrecision(3) - }; - var rows = [ - Object.assign({ - label: 'OLS regression', - formatter: timep4 - }, - bounds(analysis.anRegress[0].regCoeffs.iters)), - Object.assign({ - label: 'R² goodness-of-fit', - formatter: idformatter - }, - bounds(analysis.anRegress[0].regRSquare)), - Object.assign({ - label: 'Mean execution time', - formatter: timep4 - }, - bounds(analysis.anMean)), - Object.assign({ - label: 'Standard deviation', - formatter: timep4 - }, - bounds(analysis.anStdDev)), - ]; - return elem('table', { - className: 'analysis' - }, [ - elem('thead', {}, [ - elem('tr', {}, [ - elem('th'), - elem('th', { - className: 'low', - title: confidence(analysis.anRegress[0].regCoeffs.iters.estError.confIntCL) - }, ['lower bound']), - elem('th', {}, ['estimate']), - elem('th', { - className: 'high', - title: confidence(analysis.anRegress[0].regCoeffs.iters.estError.confIntCL) - }, ['upper bound']), - ]) - ]), - elem('tbody', {}, rows.map(function(row) { - return elem('tr', {}, [ - elem('td', {}, [row.label]), - elem('td', {className: 'low'}, [row.formatter(row.low, 4)]), - elem('td', {}, [row.formatter(row.mean)]), - elem('td', {className: 'high'}, [row.formatter(row.high, 4)]), - ]); - })) - ]); - } - document.addEventListener('DOMContentLoaded', function() { - var rawJSON = document.getElementById('report-data').text; - var reportData = JSON.parse(rawJSON) - .map(function(report) { - report.groups = report.reportName.split('/'); - return report; - }); - groupReports(reportData); - var overview = document.getElementById('overview-chart'); - var overviewLineHeight = 16 * 1.25; - overview.style.height = - String(overviewLineHeight * reportData.length + 36) + 'px'; - overview.appendChild(mkOverview(reportData.slice())); - var reports = document.getElementById('reports'); - reportData.forEach(function(report, i) { - var id = 'report_' + String(i); - reports.appendChild( - elem('div', {id: id, className: 'report-details'}, [ - elem('h1', {}, [elem('a', {href: '#' + id}, [report.groups.join(' / ')])]), - elem('div', {className: 'kde'}, [mkKDE(report)]), - elem('div', {className: 'scatter'}, [mkScatter(report)]), - mkTable(report), mkOutliers(report) - ])); - }); - }, false); -})(); +(function() {+ 'use strict';+ window.addEventListener('beforeprint', function() {+ for (var id in Chart.instances) {+ Chart.instances[id].resize();+ }+ }, false);++ var errorBarPlugin = (function () {+ function drawErrorBar(chart, ctx, low, high, y, height, color) {+ ctx.save();+ ctx.lineWidth = 3;+ ctx.strokeStyle = color;+ var area = chart.chartArea;+ ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);+ ctx.clip();+ ctx.beginPath();+ ctx.moveTo(low, y - height);+ ctx.lineTo(low, y + height);+ ctx.moveTo(low, y);+ ctx.lineTo(high, y);+ ctx.moveTo(high, y - height);+ ctx.lineTo(high, y + height);+ ctx.stroke();+ ctx.restore();+ }+ // Avoid sudden jumps in error bars when switching+ // between linear and logarithmic scale+ function conservativeError(vx, mx, now, final, scale) {+ var finalDiff = Math.abs(mx - final);+ var diff = Math.abs(vx - now);+ return (diff > finalDiff) ? vx + scale * finalDiff : now;+ }+ return {+ afterDatasetDraw: function(chart, easingOptions) {+ var ctx = chart.ctx;+ var easing = easingOptions.easingValue;+ chart.data.datasets.forEach(function(d, i) {+ var bars = chart.getDatasetMeta(i).data;+ var axis = chart.scales[chart.options.scales.xAxes[0].id];+ bars.forEach(function(b, j) {+ var value = axis.getValueForPixel(b._view.x);+ var final = axis.getValueForPixel(b._model.x);+ var errorBar = d.errorBars[j];+ var low = axis.getPixelForValue(value - errorBar.minus);+ var high = axis.getPixelForValue(value + errorBar.plus);+ var finalLow = axis.getPixelForValue(final - errorBar.minus);+ var finalHigh = axis.getPixelForValue(final + errorBar.plus);+ var l = easing === 1 ? finalLow :+ conservativeError(b._view.x, b._model.x, low,+ finalLow, -1.0);+ var h = easing === 1 ? finalHigh :+ conservativeError(b._view.x, b._model.x,+ high, finalHigh, 1.0);+ drawErrorBar(chart, ctx, l, h, b._view.y, 4, errorBar.color);+ });+ });+ },+ };+ })();++ // Formats the ticks on the X-axis on the scatter plot+ var iterFormatter = function() {+ var denom = 0;+ return function(iters, index, values) {+ if (iters == 0) {+ return '';+ }+ if (index == values.length - 1) {+ return '';+ }+ var power;+ if (iters >= 1e9) {+ denom = 1e9;+ power = '⁹';+ } else if (iters >= 1e6) {+ denom = 1e6;+ power = '⁶';+ } else if (iters >= 1e3) {+ denom = 1e3;+ power = '³';+ } else {+ denom = 1;+ }+ if (denom > 1) {+ var value = (iters / denom).toFixed();+ return String(value) + '×10' + power;+ } else {+ return String(iters);+ }+ };+ };++ var colors = ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"];+ var errorColors = ["#cda220", "#8fb8d8", "#ab2b2b", "#2d872d", "#7420cd"];+++ // Positions tooltips at cursor. Required for overview since the bars may+ // extend past the canvas width.+ Chart.Tooltip.positioners.cursor = function(_elems, position) {+ return position;+ }++ function axisType(logaxis) {+ return logaxis ? 'logarithmic' : 'linear';+ }++ function reportSort(a, b) {+ return a.reportNumber - b.reportNumber;+ }++ // adds groupNumber and group fields to reports;+ // returns list of list of reports, grouped by group+ function groupReports(reports) {++ function reportGroup(report) {+ var parts = report.groups.slice();+ parts.pop();+ return parts.join('/');+ }++ var groups = [];+ reports.forEach(function(report) {+ report.group = reportGroup(report);+ if (groups.length === 0) {+ groups.push([report]);+ } else {+ var prevGroup = groups[groups.length - 1];+ var prevGroupName = prevGroup[0].group;+ if (prevGroupName === report.group) {+ prevGroup.push(report);+ } else {+ groups.push([report]);+ }+ }+ report.groupNumber = groups.length - 1;+ });+ return groups;+ }++ // compares 2 arrays lexicographically+ function lex(aParts, bParts) {+ for(var i = 0; i < aParts.length && i < bParts.length; i++) {+ var x = aParts[i];+ var y = bParts[i];+ if (x < y) {+ return -1;+ }+ if (y < x) {+ return 1;+ }+ }+ return aParts.length - bParts.length;+ }+ function lexicalSort(a, b) {+ return lex(a.groups, b.groups);+ }++ function reverseLexicalSort(a, b) {+ return lex(a.groups.slice().reverse(), b.groups.slice().reverse());+ }++ function durationSort(a, b) {+ return a.reportAnalysis.anMean.estPoint - b.reportAnalysis.anMean.estPoint;+ }+ function reverseDurationSort(a,b) {+ return -durationSort(a,b);+ }++ function timeUnits(secs) {+ if (secs < 0)+ return timeUnits(-secs);+ else if (secs >= 1e9)+ return [1e-9, "Gs"];+ else if (secs >= 1e6)+ return [1e-6, "Ms"];+ else if (secs >= 1)+ return [1, "s"];+ else if (secs >= 1e-3)+ return [1e3, "ms"];+ else if (secs >= 1e-6)+ return [1e6, "\u03bcs"];+ else if (secs >= 1e-9)+ return [1e9, "ns"];+ else if (secs >= 1e-12)+ return [1e12, "ps"];+ return [1, "s"];+ }++ function formatUnit(raw, unit, precision) {+ var v = precision ? raw.toPrecision(precision) : Math.round(raw);+ var label = String(v) + ' ' + unit;+ return label;+ }++ function formatTime(value, precision) {+ var units = timeUnits(value);+ var scale = units[0];+ return formatUnit(value * scale, units[1], precision);+ }++ // pure function that produces the 'data' object of the overview chart+ function overviewData(state, reports) {+ var order = state.order;+ var sorter = order === 'report-index' ? reportSort+ : order === 'lex' ? lexicalSort+ : order === 'colex' ? reverseLexicalSort+ : order === 'duration' ? durationSort+ : order === 'rev-duration' ? reverseDurationSort+ : reportSort;+ var sortedReports = reports.filter(function(report) {+ return !state.hidden[report.groupNumber];+ }).slice().sort(sorter);+ var data = sortedReports.map(function(report) {+ return report.reportAnalysis.anMean.estPoint;+ });+ var labels = sortedReports.map(function(report) {+ return report.groups.join(' / ');+ });+ var upperBound = function(report) {+ var est = report.reportAnalysis.anMean;+ return est.estPoint + est.estError.confIntUDX;+ };+ var errorBars = sortedReports.map(function(report) {+ var est = report.reportAnalysis.anMean;+ return {+ minus: est.estError.confIntLDX,+ plus: est.estError.confIntUDX,+ color: errorColors[report.groupNumber % errorColors.length]+ };+ });+ var top = sortedReports.map(upperBound).reduce(function(a, b) {+ return Math.max(a, b);+ }, 0);+ var scale = top;+ if(state.activeReport !== null) {+ reports.forEach(function(report) {+ if(report.reportNumber === state.activeReport) {+ scale = upperBound(report);+ }+ });+ }++ return {+ labels: labels,+ top: top,+ max: scale * 1.1,+ reports: sortedReports,+ datasets: [{+ borderWidth: 1,+ backgroundColor: sortedReports.map(function(report) {+ var active = report.reportNumber === state.activeReport;+ var alpha = active ? 'ff' : 'a0';+ var color = colors[report.groupNumber % colors.length] + alpha;+ if (active) {+ return Chart.helpers.getHoverColor(color);+ } else {+ return color;+ }+ }),+ barThickness: 16,+ barPercentage: 0.8,+ data: data,+ errorBars: errorBars,+ minBarLength: 2,+ }]+ };+ }++ function inside(box, point) {+ return (point.x >= box.left && point.x <= box.right && point.y >= box.top &&+ point.y <= box.bottom);+ }++ function overviewHover(event, elems) {+ var chart = this;+ var xAxis = chart.scales[chart.options.scales.xAxes[0].id];+ var yAxis = chart.scales[chart.options.scales.yAxes[0].id];+ var point = Chart.helpers.getRelativePosition(event, chart);+ var over =+ (inside(xAxis, point) || inside(yAxis, point) || elems.length > 0);+ if (over) {+ chart.canvas.style.cursor = "pointer";+ } else {+ chart.canvas.style.cursor = "default";+ }+ }++ // Re-renders the overview after clicking/sorting+ function renderOverview(state, reports, chart) {+ var data = overviewData(state, reports);+ var xaxis = chart.options.scales.xAxes[0];+ xaxis.ticks.max = data.max;+ chart.config.data.datasets[0].backgroundColor = data.datasets[0].backgroundColor;+ chart.config.data.datasets[0].errorBars = data.datasets[0].errorBars;+ chart.config.data.datasets[0].data = data.datasets[0].data;+ chart.options.scales.xAxes[0].type = axisType(state.logaxis);+ chart.options.legend.display = state.legend;+ chart.data.labels = data.labels;+ chart.update();+ }++ function overviewClick(state, reports) {+ return function(event, elems) {+ var chart = this;+ var xAxis = chart.scales[chart.options.scales.xAxes[0].id];+ var yAxis = chart.scales[chart.options.scales.yAxes[0].id];+ var point = Chart.helpers.getRelativePosition(event, chart);+ var sorted = overviewData(state, reports).reports;++ function activateBar(index) {+ // Trying to activate active bar disables instead+ if (sorted[index].reportNumber === state.activeReport) {+ state.activeReport = null;+ } else {+ state.activeReport = sorted[index].reportNumber;+ }+ }++ if (inside(xAxis, point)) {+ state.activeReport = null;+ state.logaxis = !state.logaxis;+ renderOverview(state, reports, chart);+ } else if (inside(yAxis, point)) {+ var index = yAxis.getValueForPixel(point.y);+ activateBar(index);+ renderOverview(state, reports, chart);+ } else if (elems.length > 0) {+ var elem = elems[0];+ var index = elem._index;+ activateBar(index);+ state.logaxis = false;+ renderOverview(state, reports, chart);+ } else if(inside(chart.chartArea, point)) {+ state.activeReport = null;+ renderOverview(state, reports, chart);+ }+ };+ }++ // listener for sort drop-down+ function overviewSort(state, reports, chart) {+ return function(event) {+ state.order = event.currentTarget.value;+ renderOverview(state, reports, chart);+ };+ }++ // Returns a formatter for the ticks on the X-axis of the overview+ function overviewTick(state) {+ return function(value, index, values) {+ var label = formatTime(value);+ if (state.logaxis) {+ const remain = Math.round(value /+ (Math.pow(10, Math.floor(Chart.helpers.log10(value)))));+ if (index === values.length - 1) {+ // Draw endpoint if we don't span a full order of magnitude+ if (values[index] / values[1] < 10) {+ return label;+ } else {+ return '';+ }+ }+ if (remain === 1) {+ return label;+ }+ return '';+ } else {+ // Don't show the right endpoint+ if (index === values.length - 1) {+ return '';+ }+ return label;+ }+ }+ }++ function mkOverview(reports) {+ var canvas = document.createElement('canvas');++ var state = {+ logaxis: false,+ activeReport: null,+ order: 'index',+ hidden: {},+ legend: false,+ };+++ var data = overviewData(state, reports);+ var chart = new Chart(canvas.getContext('2d'), {+ type: 'horizontalBar',+ data: data,+ plugins: [errorBarPlugin],+ options: {+ onHover: overviewHover,+ onClick: overviewClick(state, reports),+ onResize: function(chart, size) {+ if (size.width < 800) {+ chart.options.scales.yAxes[0].ticks.mirror = true;+ chart.options.scales.yAxes[0].ticks.padding = -10;+ chart.options.scales.yAxes[0].ticks.fontColor = '#000';+ } else {+ chart.options.scales.yAxes[0].ticks.fontColor = '#666';+ chart.options.scales.yAxes[0].ticks.mirror = false;+ chart.options.scales.yAxes[0].ticks.padding = 0;+ }+ },+ elements: {+ rectangle: {+ borderWidth: 2,+ },+ },+ scales: {+ yAxes: [{+ ticks: {+ // make sure we draw the ticks above the error bars+ z: 2,+ }+ }],+ xAxes: [{+ display: true,+ type: axisType(state.logaxis),+ ticks: {+ autoSkip: false,+ min: 0,+ max: data.top * 1.1,+ minRotation: 0,+ maxRotation: 0,+ callback: overviewTick(state),+ }+ }]+ },+ responsive: true,+ maintainAspectRatio: false,+ legend: {+ display: state.legend,+ position: 'right',+ onLeave: function() {+ chart.canvas.style.cursor = 'default';+ },+ onHover: function() {+ chart.canvas.style.cursor = 'pointer';+ },+ onClick: function(_event, item) {+ // toggle hidden+ state.hidden[item.groupNumber] = !state.hidden[item.groupNumber];+ renderOverview(state, reports, chart);+ },+ labels: {+ boxWidth: 12,+ generateLabels: function() {+ var groups = [];+ var groupNames = [];+ reports.forEach(function(report) {+ var index = groups.indexOf(report.groupNumber);+ if (index === -1) {+ groups.push(report.groupNumber);+ var groupName = report.groups.slice(0,report.groups.length-1).join(' / ');+ groupNames.push(groupName);+ }+ });+ return groups.map(function(groupNumber, index) {+ var color = colors[groupNumber % colors.length];+ return {+ text: groupNames[index],+ fillStyle: color,+ hidden: state.hidden[groupNumber],+ groupNumber: groupNumber,+ };+ });+ },+ },+ },+ tooltips: {+ position: 'cursor',+ callbacks: {+ label: function(item) {+ return formatTime(item.xLabel, 3);+ },+ },+ },+ title: {+ display: false,+ text: 'Chart.js Horizontal Bar Chart'+ }+ }+ });+ document.getElementById('sort-overview')+ .addEventListener('change', overviewSort(state, reports, chart));+ var toggle = document.getElementById('legend-toggle');+ toggle.addEventListener('mouseup', function () {+ state.legend = !state.legend;+ if(state.legend) {+ toggle.classList.add('right');+ } else {+ toggle.classList.remove('right');+ }+ renderOverview(state, reports, chart);+ })+ return canvas;+ }++ function mkKDE(report) {+ var canvas = document.createElement('canvas');+ var mean = report.reportAnalysis.anMean.estPoint;+ var units = timeUnits(mean);+ var scale = units[0];+ var reportKDE = report.reportKDEs[0];+ var data = reportKDE.kdeValues.map(function(time, index) {+ var pdf = reportKDE.kdePDF[index];+ return {+ x: time * scale,+ y: pdf+ };+ });+ var chart = new Chart(canvas.getContext('2d'), {+ type: 'line',+ data: {+ datasets: [{+ label: 'KDE',+ borderColor: colors[0],+ borderWidth: 2,+ backgroundColor: '#00000000',+ data: data,+ hoverBorderWidth: 1,+ pointHitRadius: 8,+ },+ {+ label: 'mean'+ }+ ],+ },+ plugins: [{+ afterDraw: function(chart) {+ var ctx = chart.ctx;+ var area = chart.chartArea;+ var axis = chart.scales[chart.options.scales.xAxes[0].id];+ var value = axis.getPixelForValue(mean * scale);+ ctx.save();+ ctx.strokeStyle = colors[1];+ ctx.lineWidth = 2;+ ctx.beginPath();+ ctx.moveTo(value, area.top);+ ctx.lineTo(value, area.bottom);+ ctx.stroke();+ ctx.restore();+ },+ }],+ options: {+ title: {+ display: true,+ text: report.groups.join(' / ') + ' — time densities',+ },+ elements: {+ point: {+ radius: 0,+ hitRadius: 0+ }+ },+ scales: {+ xAxes: [{+ display: true,+ type: 'linear',+ scaleLabel: {+ display: false,+ labelString: 'Time'+ },+ ticks: {+ min: reportKDE.kdeValues[0] * scale,+ max: reportKDE.kdeValues[reportKDE.kdeValues.length - 1] * scale,+ callback: function(value, index, values) {+ // Don't show endpoints+ if (index === 0 || index === values.length - 1) {+ return '';+ }+ var str = String(value) + ' ' + units[1];+ return str;+ },+ }+ }],+ yAxes: [{+ display: true,+ type: 'linear',+ ticks: {+ min: 0,+ callback: function() {+ return '';+ },+ },+ }]+ },+ responsive: true,+ legend: {+ display: false,+ position: 'right',+ },+ tooltips: {+ mode: 'nearest',+ callbacks: {+ title: function() {+ return '';+ },+ label: function(+ item) {+ return formatUnit(item.xLabel, units[1], 3);+ },+ },+ },+ hover: {+ intersect: false+ },+ }+ });+ return canvas;+ }++ function mkScatter(report) {++ // collect the measured value for a given regression+ function getMeasured(key) {+ var ix = report.reportKeys.indexOf(key);+ return report.reportMeasured.map(function(x) {+ return x[ix];+ });+ }++ var canvas = document.createElement('canvas');+ var times = getMeasured("time");+ var iters = getMeasured("iters");+ var lastIter = iters[iters.length - 1];+ var olsTime = report.reportAnalysis.anRegress[0].regCoeffs.iters;+ var dataPoints = times.map(function(time, i) {+ return {+ x: iters[i],+ y: time+ }+ });+ var formatter = iterFormatter();+ var chart = new Chart(canvas.getContext('2d'), {+ type: 'scatter',+ data: {+ datasets: [{+ data: dataPoints,+ label: 'scatter',+ borderWidth: 2,+ pointHitRadius: 8,+ borderColor: colors[1],+ backgroundColor: '#fff',+ },+ {+ data: [+ {x: 0, y: 0 },+ { x: lastIter, y: olsTime.estPoint * lastIter }+ ],+ label: 'regression',+ type: 'line',+ backgroundColor: "#00000000",+ borderColor: colors[0],+ pointRadius: 0,+ },+ {+ data: [{+ x: 0,+ y: 0+ }, {+ x: lastIter,+ y: (olsTime.estPoint - olsTime.estError.confIntLDX) * lastIter,+ }],+ label: 'lower',+ type: 'line',+ fill: 1,+ borderWidth: 0,+ pointRadius: 0,+ borderColor: '#00000000',+ backgroundColor: colors[0] + '33',+ },+ {+ data: [{+ x: 0,+ y: 0+ }, {+ x: lastIter,+ y: (olsTime.estPoint + olsTime.estError.confIntUDX) * lastIter,+ }],+ label: 'upper',+ type: 'line',+ fill: 1,+ borderWidth: 0,+ borderColor: '#00000000',+ pointRadius: 0,+ backgroundColor: colors[0] + '33',+ },+ ],+ },+ options: {+ title: {+ display: true,+ text: report.groups.join(' / ') + ' — time per iteration',+ },+ scales: {+ yAxes: [{+ display: true,+ type: 'linear',+ scaleLabel: {+ display: false,+ labelString: 'Time'+ },+ ticks: {+ callback: function(value, index, values) {+ return formatTime(value);+ },+ }+ }],+ xAxes: [{+ display: true,+ type: 'linear',+ scaleLabel: {+ display: false,+ labelString: 'Iterations'+ },+ ticks: {+ callback: formatter,+ max: lastIter,+ }+ }],+ },+ legend: {+ display: false,+ },+ tooltips: {+ callbacks: {+ label: function(ttitem, ttdata) {+ var iters = ttitem.xLabel;+ var duration = ttitem.yLabel;+ return formatTime(duration, 3) + ' / ' ++ iters.toLocaleString() + ' iters';+ },+ },+ },+ }+ });+ return canvas;+ }++ // Create an HTML Element with attributes and child nodes+ function elem(tag, props, children) {+ var node = document.createElement(tag);+ if (children) {+ children.forEach(function(child) {+ if (typeof child === 'string') {+ var txt = document.createTextNode(child);+ node.appendChild(txt);+ } else {+ node.appendChild(child);+ }+ });+ }+ Object.assign(node, props);+ return node;+ }++ function bounds(analysis) {+ var mean = analysis.estPoint;+ return {+ low: mean - analysis.estError.confIntLDX,+ mean: mean,+ high: mean + analysis.estError.confIntUDX+ };+ }++ function confidence(level) {+ return String(1 - level) + ' confidence level';+ }++ function mkOutliers(report) {+ var outliers = report.reportAnalysis.anOutlierVar;+ return elem('div', {className: 'outliers'}, [+ elem('p', {}, [+ 'Outlying measurements have ',+ outliers.ovDesc,+ ' (', String((outliers.ovFraction * 100).toPrecision(3)), '%)',+ ' effect on estimated standard deviation.'+ ])+ ]);+ }++ function mkTable(report) {+ var analysis = report.reportAnalysis;+ var timep4 = function(t) {+ return formatTime(t, 3)+ };+ var idformatter = function(t) {+ return t.toPrecision(3)+ };+ var rows = [+ Object.assign({+ label: 'OLS regression',+ formatter: timep4+ },+ bounds(analysis.anRegress[0].regCoeffs.iters)),+ Object.assign({+ label: 'R² goodness-of-fit',+ formatter: idformatter+ },+ bounds(analysis.anRegress[0].regRSquare)),+ Object.assign({+ label: 'Mean execution time',+ formatter: timep4+ },+ bounds(analysis.anMean)),+ Object.assign({+ label: 'Standard deviation',+ formatter: timep4+ },+ bounds(analysis.anStdDev)),+ ];+ return elem('table', {+ className: 'analysis'+ }, [+ elem('thead', {}, [+ elem('tr', {}, [+ elem('th'),+ elem('th', {+ className: 'low',+ title: confidence(analysis.anRegress[0].regCoeffs.iters.estError.confIntCL)+ }, ['lower bound']),+ elem('th', {}, ['estimate']),+ elem('th', {+ className: 'high',+ title: confidence(analysis.anRegress[0].regCoeffs.iters.estError.confIntCL)+ }, ['upper bound']),+ ])+ ]),+ elem('tbody', {}, rows.map(function(row) {+ return elem('tr', {}, [+ elem('td', {}, [row.label]),+ elem('td', {className: 'low'}, [row.formatter(row.low, 4)]),+ elem('td', {}, [row.formatter(row.mean)]),+ elem('td', {className: 'high'}, [row.formatter(row.high, 4)]),+ ]);+ }))+ ]);+ }+ document.addEventListener('DOMContentLoaded', function() {+ var rawJSON = document.getElementById('report-data').text;+ var reportData = JSON.parse(rawJSON)+ .map(function(report) {+ report.groups = report.reportName.split('/');+ return report;+ });+ groupReports(reportData);+ var overview = document.getElementById('overview-chart');+ var overviewLineHeight = 16 * 1.25;+ overview.style.height =+ String(overviewLineHeight * reportData.length + 36) + 'px';+ overview.appendChild(mkOverview(reportData.slice()));+ var reports = document.getElementById('reports');+ reportData.forEach(function(report, i) {+ var id = 'report_' + String(i);+ reports.appendChild(+ elem('div', {id: id, className: 'report-details'}, [+ elem('h1', {}, [elem('a', {href: '#' + id}, [report.groups.join(' / ')])]),+ elem('div', {className: 'kde'}, [mkKDE(report)]),+ elem('div', {className: 'scatter'}, [mkScatter(report)]),+ mkTable(report), mkOutliers(report)+ ]));+ });+ }, false);+})();
templates/default.tpl view
@@ -1,139 +1,139 @@-<!doctype html> -<html> -<head> - <meta charset="utf-8"/> - <title>criterion report</title> - <script> - {{{js-chart}}} - {{{js-criterion}}} - </script> - <style> - {{{criterion-css}}} - </style> - <script type="application/json" id="report-data"> - {{{json}}} - </script> - <meta name="viewport" content="width=device-width, initial-scale=1"> -</head> -<body> - <div class="content"> - <h1 class='title'>criterion performance measurements</h1> - <p class="no-print"><a href="#grokularation">want to understand this report?</a></p> - <h1 id="overview"><a href="#overview">overview</a></h1> - <div class="no-print"> - <select id="sort-overview" class="select"> - <option value="report-index">index</option> - <option value="lex">lexical</option> - <option value="colex">colexical</option> - <option value="duration">time ascending</option> - <option value="rev-duration">time descending</option> - </select> - <span class="overview-info"> - <a href="#controls-explanation" class="info" title="click bar/label to zoom; x-axis to toggle logarithmic scale; background to reset">ⓘ</a> - <a id="legend-toggle" class="chevron button"></a> - </span> - </div> - <aside id="overview-chart"></aside> - <main id="reports"></main> - </div> - - <aside id="controls-explanation" class="explanation no-print"> - <h1><a href="#controls-explanation">controls</a></h1> - - <p> - The overview chart can be controlled by clicking the following elements: - <ul> - <li><em>a bar or its label</em> zooms the x-axis to that bar</li> - <li><em>the background</em> resets zoom to the entire chart</li> - <li><em>the x-axis</em> toggles between linear and logarithmic scale</li> - <li><em>the chevron</em> in the top-right toggles the the legend</li> - <li><em>a group name in the legend</em> shows/hides that group</li> - </ul> - </p> - - <p> - The overview chart supports the following sort orders: - <ul> - <li><em>index</em> order is the order as the benchmarks are defined in criterion</li> - <li><em>lexical</em> order sorts <a href="https://en.wikipedia.org/wiki/Lexicographic_order#Motivation_and_definition">groups left-to-right</a>, alphabetically</li> - <li><em>colexical</em> order sorts <a href="https://en.wikipedia.org/wiki/Lexicographic_order#Colexicographic_order">groups right-to-left</a>, alphabetically</li> - <li><em>time ascending/descending</em> order sorts by the estimated mean execution time</li> - </ul> - </p> - - </aside> - - <aside id="grokularation" class="explanation"> - - <h1><a>understanding this report</a></h1> - - <p> - In this report, each function benchmarked by criterion is assigned a section of its own. - <span class="no-print">The charts in each section are active; if you hover your mouse over data points and annotations, you will see more details.</span> - </p> - - <ul> - <li> - The chart on the left is a <a href="http://en.wikipedia.org/wiki/Kernel_density_estimation">kernel density estimate</a> (also known as a KDE) of time measurements. - This graphs the probability of any given time measurement occurring. - A spike indicates that a measurement of a particular time occurred; its height indicates how often that measurement was repeated. - </li> - - <li> - The chart on the right is the raw data from which the kernel density estimate is built. - The <em>x</em>-axis indicates the number of loop iterations, while the <em>y</em>-axis shows measured execution time for the given number of loop iterations. - The line behind the values is the linear regression estimate of execution time for a given number of iterations. - Ideally, all measurements will be on (or very near) this line. - The transparent area behind it shows the confidence interval for the execution time estimate. - </li> - </ul> - - <p> - Under the charts is a small table. - The first two rows are the results of a linear regression run on the measurements displayed in the right-hand chart. - </p> - - <ul> - <li> - <em>OLS regression</em> indicates the time estimated for a single loop iteration using an ordinary least-squares regression model. - This number is more accurate than the <em>mean</em> estimate below it, as it more effectively eliminates measurement overhead and other constant factors. - </li> - <li> - <em>R<sup>2</sup>; goodness-of-fit</em> is a measure of how accurately the linear regression model fits the observed measurements. - If the measurements are not too noisy, R<sup>2</sup>; should lie between 0.99 and 1, indicating an excellent fit. - If the number is below 0.99, something is confounding the accuracy of the linear model. - </li> - <li> - <em>Mean execution time</em> and <em>standard deviation</em> are statistics calculated from execution time divided by number of iterations. - </li> - </ul> - - <p> - We use a statistical technique called the <a href="http://en.wikipedia.org/wiki/Bootstrapping_(statistics)">bootstrap</a> to provide confidence intervals on our estimates. - The bootstrap-derived upper and lower bounds on estimates let you see how accurate we believe those estimates to be. - <span class="no-print">(Hover the mouse over the table headers to see the confidence levels.)</span> - </p> - - <p> - A noisy benchmarking environment can cause some or many measurements to fall far from the mean. - These outlying measurements can have a significant inflationary effect on the estimate of the standard deviation. - We calculate and display an estimate of the extent to which the standard deviation has been inflated by outliers. - </p> - - </aside> - - <footer> - <div class="content"> - <h1 class="colophon-header">colophon</h1> - <p> - This report was created using the <a href="http://hackage.haskell.org/package/criterion">criterion</a> - benchmark execution and performance analysis tool. - </p> - <p> - Criterion is developed and maintained - by <a href="http://www.serpentine.com/blog/">Bryan O'Sullivan</a>. - </p> - </div> - </footer> -</body> -</html> +<!doctype html>+<html>+<head>+ <meta charset="utf-8"/>+ <title>criterion report</title>+ <script>+ {{{js-chart}}}+ {{{js-criterion}}}+ </script>+ <style>+ {{{criterion-css}}}+ </style>+ <script type="application/json" id="report-data">+ {{{json}}}+ </script>+ <meta name="viewport" content="width=device-width, initial-scale=1">+</head>+<body>+ <div class="content">+ <h1 class='title'>criterion performance measurements</h1>+ <p class="no-print"><a href="#grokularation">want to understand this report?</a></p>+ <h1 id="overview"><a href="#overview">overview</a></h1>+ <div class="no-print">+ <select id="sort-overview" class="select">+ <option value="report-index">index</option>+ <option value="lex">lexical</option>+ <option value="colex">colexical</option>+ <option value="duration">time ascending</option>+ <option value="rev-duration">time descending</option>+ </select>+ <span class="overview-info">+ <a href="#controls-explanation" class="info" title="click bar/label to zoom; x-axis to toggle logarithmic scale; background to reset">ⓘ</a>+ <a id="legend-toggle" class="chevron button"></a>+ </span>+ </div>+ <aside id="overview-chart"></aside>+ <main id="reports"></main>+ </div>++ <aside id="controls-explanation" class="explanation no-print">+ <h1><a href="#controls-explanation">controls</a></h1>++ <p>+ The overview chart can be controlled by clicking the following elements:+ <ul>+ <li><em>a bar or its label</em> zooms the x-axis to that bar</li>+ <li><em>the background</em> resets zoom to the entire chart</li>+ <li><em>the x-axis</em> toggles between linear and logarithmic scale</li>+ <li><em>the chevron</em> in the top-right toggles the the legend</li>+ <li><em>a group name in the legend</em> shows/hides that group</li>+ </ul>+ </p>++ <p>+ The overview chart supports the following sort orders:+ <ul>+ <li><em>index</em> order is the order as the benchmarks are defined in criterion</li>+ <li><em>lexical</em> order sorts <a href="https://en.wikipedia.org/wiki/Lexicographic_order#Motivation_and_definition">groups left-to-right</a>, alphabetically</li>+ <li><em>colexical</em> order sorts <a href="https://en.wikipedia.org/wiki/Lexicographic_order#Colexicographic_order">groups right-to-left</a>, alphabetically</li>+ <li><em>time ascending/descending</em> order sorts by the estimated mean execution time</li>+ </ul>+ </p>++ </aside>++ <aside id="grokularation" class="explanation">++ <h1><a>understanding this report</a></h1>++ <p>+ In this report, each function benchmarked by criterion is assigned a section of its own.+ <span class="no-print">The charts in each section are active; if you hover your mouse over data points and annotations, you will see more details.</span>+ </p>++ <ul>+ <li>+ The chart on the left is a <a href="http://en.wikipedia.org/wiki/Kernel_density_estimation">kernel density estimate</a> (also known as a KDE) of time measurements.+ This graphs the probability of any given time measurement occurring.+ A spike indicates that a measurement of a particular time occurred; its height indicates how often that measurement was repeated.+ </li>++ <li>+ The chart on the right is the raw data from which the kernel density estimate is built.+ The <em>x</em>-axis indicates the number of loop iterations, while the <em>y</em>-axis shows measured execution time for the given number of loop iterations.+ The line behind the values is the linear regression estimate of execution time for a given number of iterations.+ Ideally, all measurements will be on (or very near) this line.+ The transparent area behind it shows the confidence interval for the execution time estimate.+ </li>+ </ul>++ <p>+ Under the charts is a small table.+ The first two rows are the results of a linear regression run on the measurements displayed in the right-hand chart.+ </p>++ <ul>+ <li>+ <em>OLS regression</em> indicates the time estimated for a single loop iteration using an ordinary least-squares regression model.+ This number is more accurate than the <em>mean</em> estimate below it, as it more effectively eliminates measurement overhead and other constant factors.+ </li>+ <li>+ <em>R<sup>2</sup>; goodness-of-fit</em> is a measure of how accurately the linear regression model fits the observed measurements.+ If the measurements are not too noisy, R<sup>2</sup>; should lie between 0.99 and 1, indicating an excellent fit.+ If the number is below 0.99, something is confounding the accuracy of the linear model.+ </li>+ <li>+ <em>Mean execution time</em> and <em>standard deviation</em> are statistics calculated from execution time divided by number of iterations.+ </li>+ </ul>++ <p>+ We use a statistical technique called the <a href="http://en.wikipedia.org/wiki/Bootstrapping_(statistics)">bootstrap</a> to provide confidence intervals on our estimates.+ The bootstrap-derived upper and lower bounds on estimates let you see how accurate we believe those estimates to be.+ <span class="no-print">(Hover the mouse over the table headers to see the confidence levels.)</span>+ </p>++ <p>+ A noisy benchmarking environment can cause some or many measurements to fall far from the mean.+ These outlying measurements can have a significant inflationary effect on the estimate of the standard deviation.+ We calculate and display an estimate of the extent to which the standard deviation has been inflated by outliers.+ </p>++ </aside>++ <footer>+ <div class="content">+ <h1 class="colophon-header">colophon</h1>+ <p>+ This report was created using the <a href="http://hackage.haskell.org/package/criterion">criterion</a>+ benchmark execution and performance analysis tool.+ </p>+ <p>+ Criterion is developed and maintained+ by <a href="http://www.serpentine.com/blog/">Bryan O'Sullivan</a>.+ </p>+ </div>+ </footer>+</body>+</html>
templates/json.tpl view
@@ -1,1 +1,1 @@-{{{json}}} +{{{json}}}
tests/Cleanup.hs view
@@ -1,111 +1,123 @@-{-# LANGUAGE BangPatterns #-} -{-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE ScopedTypeVariables #-} -{-# OPTIONS_GHC -Wno-orphans #-} - -import Criterion.Main (Benchmark, bench, nfIO) -import Criterion.Types (Config(..), Verbosity(Quiet)) -import Control.DeepSeq (NFData(..)) -import Control.Exception (Exception, try, throwIO) -import Control.Monad (when) -import Data.ByteString (ByteString) -import Prelude () -import Prelude.Compat -import System.Directory (doesFileExist, removeFile) -import System.Environment (withArgs) -import System.IO ( Handle, IOMode(ReadWriteMode), SeekMode(AbsoluteSeek) - , hClose, hFileSize, hSeek, openFile) -import Test.Tasty (TestTree, defaultMain, testGroup) -import Test.Tasty.HUnit (testCase) -import Test.HUnit (assertFailure) -import qualified Criterion.Main as C -import qualified Data.ByteString as BS - -instance NFData Handle where - rnf !_ = () - -data CheckResult = ShouldThrow | WrongData deriving Show - -instance Exception CheckResult - -type BenchmarkWithFile = - String -> IO Handle -> (Handle -> IO ()) -> (Handle -> IO ()) -> Benchmark - -perRun :: BenchmarkWithFile -perRun name alloc clean work = - bench name $ C.perRunEnvWithCleanup alloc clean work - -perBatch :: BenchmarkWithFile -perBatch name alloc clean work = - bench name $ C.perBatchEnvWithCleanup (const alloc) (const clean) work - -envWithCleanup :: BenchmarkWithFile -envWithCleanup name alloc clean work = - C.envWithCleanup alloc clean $ bench name . nfIO . work - -testCleanup :: Bool -> String -> BenchmarkWithFile -> TestTree -testCleanup shouldFail name withEnvClean = testCase name $ do - existsBefore <- doesFileExist testFile - when existsBefore $ failTest "Input file already exists" - - result <- runTest . withEnvClean name alloc clean $ \hnd -> do - result <- hFileSize hnd >>= BS.hGet hnd . fromIntegral - resetHandle hnd - when (result /= testData) $ throwIO WrongData - when shouldFail $ throwIO ShouldThrow - - case result of - Left WrongData -> failTest "Incorrect result read from file" - Left ShouldThrow -> return () - Right _ | shouldFail -> failTest "Failed to throw exception" - | otherwise -> return () - - existsAfter <- doesFileExist testFile - when existsAfter $ do - removeFile testFile - failTest "Failed to delete file" - where - testFile :: String - testFile = "tmp" - - testData :: ByteString - testData = "blah" - - runTest :: Benchmark -> IO (Either CheckResult ()) - runTest = withArgs (["-n","1"]) . try . C.defaultMainWith config . pure - where - config = C.defaultConfig { verbosity = Quiet , timeLimit = 1 } - - failTest :: String -> IO () - failTest s = assertFailure $ s ++ " in test: " ++ name ++ "!" - - resetHandle :: Handle -> IO () - resetHandle hnd = hSeek hnd AbsoluteSeek 0 - - alloc :: IO Handle - alloc = do - hnd <- openFile testFile ReadWriteMode - BS.hPut hnd testData - resetHandle hnd - return hnd - - clean :: Handle -> IO () - clean hnd = do - hClose hnd - removeFile testFile - -testSuccess :: String -> BenchmarkWithFile -> TestTree -testSuccess = testCleanup False - -testFailure :: String -> BenchmarkWithFile -> TestTree -testFailure = testCleanup True - -main :: IO () -main = defaultMain $ testGroup "cleanup" - [ testSuccess "perRun Success" perRun - , testFailure "perRun Failure" perRun - , testSuccess "perBatch Success" perBatch - , testFailure "perBatch Failure" perBatch - , testSuccess "envWithCleanup Success" envWithCleanup - , testFailure "envWithCleanup Failure" envWithCleanup - ] +{-# LANGUAGE CPP #-}+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# OPTIONS_GHC -Wno-orphans #-}++import Criterion.Main (Benchmark, bench, nfIO)+import Criterion.Types (Config(..), Verbosity(Quiet))+import Control.DeepSeq (NFData(..))+import Control.Exception (Exception, try, throwIO)+import Control.Monad (when)+import Data.ByteString (ByteString)+import Prelude ()+import Prelude.Compat+import System.Directory (doesFileExist, removeFile)+import System.Environment (withArgs)+import System.IO ( Handle, IOMode(ReadWriteMode), SeekMode(AbsoluteSeek)+ , hClose, hFileSize, hSeek, openFile)+import Test.Tasty (TestTree, defaultMain)+#if MIN_VERSION_tasty(1,5,4)+import Test.Tasty (inOrderTestGroup)+#else+import Test.Tasty (TestName, testGroup)+#endif+import Test.Tasty.HUnit (testCase)+import Test.HUnit (assertFailure)+import qualified Criterion.Main as C+import qualified Data.ByteString as BS++instance NFData Handle where+ rnf !_ = ()++data CheckResult = ShouldThrow | WrongData deriving Show++instance Exception CheckResult++type BenchmarkWithFile =+ String -> IO Handle -> (Handle -> IO ()) -> (Handle -> IO ()) -> Benchmark++perRun :: BenchmarkWithFile+perRun name alloc clean work =+ bench name $ C.perRunEnvWithCleanup alloc clean work++perBatch :: BenchmarkWithFile+perBatch name alloc clean work =+ bench name $ C.perBatchEnvWithCleanup (const alloc) (const clean) work++envWithCleanup :: BenchmarkWithFile+envWithCleanup name alloc clean work =+ C.envWithCleanup alloc clean $ bench name . nfIO . work++testCleanup :: Bool -> String -> BenchmarkWithFile -> TestTree+testCleanup shouldFail name withEnvClean = testCase name $ do+ existsBefore <- doesFileExist testFile+ when existsBefore $ failTest "Input file already exists"++ result <- runTest . withEnvClean name alloc clean $ \hnd -> do+ result <- hFileSize hnd >>= BS.hGet hnd . fromIntegral+ resetHandle hnd+ when (result /= testData) $ throwIO WrongData+ when shouldFail $ throwIO ShouldThrow++ case result of+ Left WrongData -> failTest "Incorrect result read from file"+ Left ShouldThrow -> return ()+ Right _ | shouldFail -> failTest "Failed to throw exception"+ | otherwise -> return ()++ existsAfter <- doesFileExist testFile+ when existsAfter $ do+ removeFile testFile+ failTest "Failed to delete file"+ where+ testFile :: String+ testFile = "tmp"++ testData :: ByteString+ testData = "blah"++ runTest :: Benchmark -> IO (Either CheckResult ())+ runTest = withArgs (["-n","1"]) . try . C.defaultMainWith config . pure+ where+ config = C.defaultConfig { verbosity = Quiet , timeLimit = 1 }++ failTest :: String -> IO ()+ failTest s = assertFailure $ s ++ " in test: " ++ name ++ "!"++ resetHandle :: Handle -> IO ()+ resetHandle hnd = hSeek hnd AbsoluteSeek 0++ alloc :: IO Handle+ alloc = do+ hnd <- openFile testFile ReadWriteMode+ BS.hPut hnd testData+ resetHandle hnd+ return hnd++ clean :: Handle -> IO ()+ clean hnd = do+ hClose hnd+ removeFile testFile++testSuccess :: String -> BenchmarkWithFile -> TestTree+testSuccess = testCleanup False++testFailure :: String -> BenchmarkWithFile -> TestTree+testFailure = testCleanup True++-- before 1.5.4, tasty would not execute tests in parallel without +RTS -N+#if !MIN_VERSION_tasty(1,5,4)+inOrderTestGroup :: TestName -> [TestTree] -> TestTree+inOrderTestGroup = testGroup+#endif++main :: IO ()+main = defaultMain $ inOrderTestGroup "cleanup"+ [ testSuccess "perRun Success" perRun+ , testFailure "perRun Failure" perRun+ , testSuccess "perBatch Success" perBatch+ , testFailure "perBatch Failure" perBatch+ , testSuccess "envWithCleanup Success" envWithCleanup+ , testFailure "envWithCleanup Failure" envWithCleanup+ ]
tests/Properties.hs view
@@ -1,34 +1,34 @@-{-# LANGUAGE CPP #-} -{-# OPTIONS_GHC -Wno-orphans #-} - -module Properties (tests) where - -import Control.Applicative as A ((<$>)) -import Criterion.Analysis -import Prelude () -import Prelude.Compat -import Statistics.Types (Sample) -import Test.Tasty (TestTree, testGroup) -import Test.Tasty.QuickCheck (testProperty) -import Test.QuickCheck -import qualified Data.Vector.Generic as G -import qualified Data.Vector.Unboxed as U - -instance (Arbitrary a, U.Unbox a) => Arbitrary (U.Vector a) where - arbitrary = U.fromList A.<$> arbitrary - shrink = map U.fromList . shrink . U.toList - -outlier_bucketing :: Double -> Sample -> Bool -outlier_bucketing y ys = - countOutliers (classifyOutliers xs) <= fromIntegral (G.length xs) - where xs = U.cons y ys - -outlier_bucketing_weighted :: Double -> Sample -> Bool -outlier_bucketing_weighted x xs = - outlier_bucketing x (xs <> G.replicate (G.length xs * 10) 0) - -tests :: TestTree -tests = testGroup "Properties" [ - testProperty "outlier_bucketing" outlier_bucketing - , testProperty "outlier_bucketing_weighted" outlier_bucketing_weighted - ] +{-# LANGUAGE CPP #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Properties (tests) where++import Control.Applicative as A ((<$>))+import Criterion.Analysis+import Prelude ()+import Prelude.Compat+import Statistics.Types (Sample)+import Test.Tasty (TestTree, testGroup)+import Test.Tasty.QuickCheck (testProperty)+import Test.QuickCheck+import qualified Data.Vector.Generic as G+import qualified Data.Vector.Unboxed as U++instance (Arbitrary a, U.Unbox a) => Arbitrary (U.Vector a) where+ arbitrary = U.fromList A.<$> arbitrary+ shrink = map U.fromList . shrink . U.toList++outlier_bucketing :: Double -> Sample -> Bool+outlier_bucketing y ys =+ countOutliers (classifyOutliers xs) <= fromIntegral (G.length xs)+ where xs = U.cons y ys++outlier_bucketing_weighted :: Double -> Sample -> Bool+outlier_bucketing_weighted x xs =+ outlier_bucketing x (xs <> G.replicate (G.length xs * 10) 0)++tests :: TestTree+tests = testGroup "Properties" [+ testProperty "outlier_bucketing" outlier_bucketing+ , testProperty "outlier_bucketing_weighted" outlier_bucketing_weighted+ ]
tests/Sanity.hs view
@@ -1,55 +1,55 @@-{-# LANGUAGE ScopedTypeVariables #-} - -import Criterion.Main (bench, bgroup, env, whnf) -import System.Environment (getEnv, withArgs) -import System.Timeout (timeout) -import Test.Tasty (defaultMain) -import Test.Tasty.HUnit (testCase) -import Test.HUnit (Assertion, assertFailure) -import qualified Criterion.Main as C -import qualified Control.Exception as E -import qualified Data.ByteString as B - -fib :: Int -> Int -fib = sum . go - where go 0 = [0] - go 1 = [1] - go n = go (n-1) ++ go (n-2) - --- Additional arguments to include along with the ARGS environment variable. -extraArgs :: [String] -extraArgs = [ "--raw=sanity.dat", "--json=sanity.json", "--csv=sanity.csv" - , "--output=sanity.html", "--junit=sanity.junit" ] - -sanity :: Assertion -sanity = do - args <- getArgEnv - withArgs (extraArgs ++ args) $ do - let tooLong = 30 - wat <- timeout (tooLong * 1000000) $ - C.defaultMain [ - bgroup "fib" [ - bench "fib 10" $ whnf fib 10 - , bench "fib 22" $ whnf fib 22 - ] - , env (return (replicate 1024 0)) $ \xs -> - bgroup "length . filter" [ - bench "string" $ whnf (length . filter (==0)) xs - , env (return (B.pack xs)) $ \bs -> - bench "bytestring" $ whnf (B.length . B.filter (==0)) bs - ] - ] - case wat of - Just () -> return () - Nothing -> assertFailure $ "killed for running longer than " ++ - show tooLong ++ " seconds!" - -main :: IO () -main = defaultMain $ testCase "sanity" sanity - --- This is a workaround to in pass arguments that sneak past --- test-framework to get to criterion. -getArgEnv :: IO [String] -getArgEnv = - fmap words (getEnv "ARGS") `E.catch` - \(_ :: E.SomeException) -> return [] +{-# LANGUAGE ScopedTypeVariables #-}++import Criterion.Main (bench, bgroup, env, whnf)+import System.Environment (getEnv, withArgs)+import System.Timeout (timeout)+import Test.Tasty (defaultMain)+import Test.Tasty.HUnit (testCase)+import Test.HUnit (Assertion, assertFailure)+import qualified Criterion.Main as C+import qualified Control.Exception as E+import qualified Data.ByteString as B++fib :: Int -> Int+fib = sum . go+ where go 0 = [0]+ go 1 = [1]+ go n = go (n-1) ++ go (n-2)++-- Additional arguments to include along with the ARGS environment variable.+extraArgs :: [String]+extraArgs = [ "--raw=sanity.dat", "--json=sanity.json", "--csv=sanity.csv"+ , "--output=sanity.html", "--junit=sanity.junit" ]++sanity :: Assertion+sanity = do+ args <- getArgEnv+ withArgs (extraArgs ++ args) $ do+ let tooLong = 30+ wat <- timeout (tooLong * 1000000) $+ C.defaultMain [+ bgroup "fib" [+ bench "fib 10" $ whnf fib 10+ , bench "fib 22" $ whnf fib 22+ ]+ , env (return (replicate 1024 0)) $ \xs ->+ bgroup "length . filter" [+ bench "string" $ whnf (length . filter (==0)) xs+ , env (return (B.pack xs)) $ \bs ->+ bench "bytestring" $ whnf (B.length . B.filter (==0)) bs+ ]+ ]+ case wat of+ Just () -> return ()+ Nothing -> assertFailure $ "killed for running longer than " +++ show tooLong ++ " seconds!"++main :: IO ()+main = defaultMain $ testCase "sanity" sanity++-- This is a workaround to in pass arguments that sneak past+-- test-framework to get to criterion.+getArgEnv :: IO [String]+getArgEnv =+ fmap words (getEnv "ARGS") `E.catch`+ \(_ :: E.SomeException) -> return []
tests/Tests.hs view
@@ -1,45 +1,45 @@-module Main (main) where - -import Criterion.Types -import qualified Data.Aeson as Aeson -import qualified Data.Vector as V -import Properties -import Statistics.Types (estimateFromErr, mkCL) -import Test.Tasty (defaultMain, testGroup) -import Test.Tasty.HUnit (testCase) -import Test.HUnit - -r1 :: Report -r1 = Report 0 "" [] v1 s1 (Outliers 0 0 0 0 0) [] - where - m1 = Measured 4.613000783137977e-05 3.500000000000378e-05 31432 1 0 0 0 0 0.0 0.0 0.0 0.0 - v1 = V.fromList [m1] - est1 = estimateFromErr 0.0 (0.0, 0.0) (mkCL 0.0) - s1 = SampleAnalysis [] est1 est1 (OutlierVariance Unaffected "" 0.0) - -m2 :: Measured -m2 = Measured {measTime = 1.1438998626545072e-5 - , measCpuTime = 1.2000000001677336e-5 - , measCycles = 6208 - , measIters = 1 - - , measAllocated = minBound - , measPeakMbAllocated = minBound - , measNumGcs = minBound - , measBytesCopied = minBound - - , measMutatorWallSeconds = -1/0 - , measMutatorCpuSeconds = -1/0 - , measGcWallSeconds = -1/0 - , measGcCpuSeconds = -1/0} - -main :: IO () -main = defaultMain $ testGroup "Tests" - [ Properties.tests - , testCase "json-roundtrip1" - (assertEqual "round trip simple Measured" - (Right m2) (Aeson.eitherDecode (Aeson.encode m2))) - , testCase "json-roundtrip2" - (assertEqual "round trip simple Report" - (Right r1) (Aeson.eitherDecode (Aeson.encode r1))) - ] +module Main (main) where++import Criterion.Types+import qualified Data.Aeson as Aeson+import qualified Data.Vector as V+import Properties+import Statistics.Types (estimateFromErr, mkCL)+import Test.Tasty (defaultMain, testGroup)+import Test.Tasty.HUnit (testCase)+import Test.HUnit++r1 :: Report+r1 = Report 0 "" [] v1 s1 (Outliers 0 0 0 0 0) []+ where+ m1 = Measured 4.613000783137977e-05 3.500000000000378e-05 31432 1 0 0 0 0 0.0 0.0 0.0 0.0+ v1 = V.fromList [m1]+ est1 = estimateFromErr 0.0 (0.0, 0.0) (mkCL 0.0)+ s1 = SampleAnalysis [] est1 est1 (OutlierVariance Unaffected "" 0.0)++m2 :: Measured+m2 = Measured {measTime = 1.1438998626545072e-5+ , measCpuTime = 1.2000000001677336e-5+ , measCycles = 6208+ , measIters = 1++ , measAllocated = minBound+ , measPeakMbAllocated = minBound+ , measNumGcs = minBound+ , measBytesCopied = minBound++ , measMutatorWallSeconds = -1/0+ , measMutatorCpuSeconds = -1/0+ , measGcWallSeconds = -1/0+ , measGcCpuSeconds = -1/0}++main :: IO ()+main = defaultMain $ testGroup "Tests"+ [ Properties.tests+ , testCase "json-roundtrip1"+ (assertEqual "round trip simple Measured"+ (Right m2) (Aeson.eitherDecode (Aeson.encode m2)))+ , testCase "json-roundtrip2"+ (assertEqual "round trip simple Report"+ (Right r1) (Aeson.eitherDecode (Aeson.encode r1)))+ ]
www/fibber.html view
@@ -1,1159 +1,1159 @@-<!doctype html> -<html> -<head> - <meta charset="utf-8"/> - <title>criterion report</title> - <script> - /*! - * Chart.js v2.9.4 - * https://www.chartjs.org - * (c) 2020 Chart.js Contributors - * Released under the MIT License - */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(function(){try{return require("moment")}catch(t){}}()):"function"==typeof define&&define.amd?define(["require"],(function(t){return e(function(){try{return t("moment")}catch(t){}}())})):(t=t||self).Chart=e(t.moment)}(this,(function(t){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var e={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},n=function(t,e){return t(e={exports:{}},e.exports),e.exports}((function(t){var n={};for(var i in e)e.hasOwnProperty(i)&&(n[e[i]]=i);var a=t.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var r in a)if(a.hasOwnProperty(r)){if(!("channels"in a[r]))throw new Error("missing channels property: "+r);if(!("labels"in a[r]))throw new Error("missing channel labels property: "+r);if(a[r].labels.length!==a[r].channels)throw new Error("channel and label counts mismatch: "+r);var o=a[r].channels,s=a[r].labels;delete a[r].channels,delete a[r].labels,Object.defineProperty(a[r],"channels",{value:o}),Object.defineProperty(a[r],"labels",{value:s})}a.rgb.hsl=function(t){var e,n,i=t[0]/255,a=t[1]/255,r=t[2]/255,o=Math.min(i,a,r),s=Math.max(i,a,r),l=s-o;return s===o?e=0:i===s?e=(a-r)/l:a===s?e=2+(r-i)/l:r===s&&(e=4+(i-a)/l),(e=Math.min(60*e,360))<0&&(e+=360),n=(o+s)/2,[e,100*(s===o?0:n<=.5?l/(s+o):l/(2-s-o)),100*n]},a.rgb.hsv=function(t){var e,n,i,a,r,o=t[0]/255,s=t[1]/255,l=t[2]/255,u=Math.max(o,s,l),d=u-Math.min(o,s,l),h=function(t){return(u-t)/6/d+.5};return 0===d?a=r=0:(r=d/u,e=h(o),n=h(s),i=h(l),o===u?a=i-n:s===u?a=1/3+e-i:l===u&&(a=2/3+n-e),a<0?a+=1:a>1&&(a-=1)),[360*a,100*r,100*u]},a.rgb.hwb=function(t){var e=t[0],n=t[1],i=t[2];return[a.rgb.hsl(t)[0],100*(1/255*Math.min(e,Math.min(n,i))),100*(i=1-1/255*Math.max(e,Math.max(n,i)))]},a.rgb.cmyk=function(t){var e,n=t[0]/255,i=t[1]/255,a=t[2]/255;return[100*((1-n-(e=Math.min(1-n,1-i,1-a)))/(1-e)||0),100*((1-i-e)/(1-e)||0),100*((1-a-e)/(1-e)||0),100*e]},a.rgb.keyword=function(t){var i=n[t];if(i)return i;var a,r,o,s=1/0;for(var l in e)if(e.hasOwnProperty(l)){var u=e[l],d=(r=t,o=u,Math.pow(r[0]-o[0],2)+Math.pow(r[1]-o[1],2)+Math.pow(r[2]-o[2],2));d<s&&(s=d,a=l)}return a},a.keyword.rgb=function(t){return e[t]},a.rgb.xyz=function(t){var e=t[0]/255,n=t[1]/255,i=t[2]/255;return[100*(.4124*(e=e>.04045?Math.pow((e+.055)/1.055,2.4):e/12.92)+.3576*(n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.1805*(i=i>.04045?Math.pow((i+.055)/1.055,2.4):i/12.92)),100*(.2126*e+.7152*n+.0722*i),100*(.0193*e+.1192*n+.9505*i)]},a.rgb.lab=function(t){var e=a.rgb.xyz(t),n=e[0],i=e[1],r=e[2];return i/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116)-16,500*(n-i),200*(i-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},a.hsl.rgb=function(t){var e,n,i,a,r,o=t[0]/360,s=t[1]/100,l=t[2]/100;if(0===s)return[r=255*l,r,r];e=2*l-(n=l<.5?l*(1+s):l+s-l*s),a=[0,0,0];for(var u=0;u<3;u++)(i=o+1/3*-(u-1))<0&&i++,i>1&&i--,r=6*i<1?e+6*(n-e)*i:2*i<1?n:3*i<2?e+(n-e)*(2/3-i)*6:e,a[u]=255*r;return a},a.hsl.hsv=function(t){var e=t[0],n=t[1]/100,i=t[2]/100,a=n,r=Math.max(i,.01);return n*=(i*=2)<=1?i:2-i,a*=r<=1?r:2-r,[e,100*(0===i?2*a/(r+a):2*n/(i+n)),100*((i+n)/2)]},a.hsv.rgb=function(t){var e=t[0]/60,n=t[1]/100,i=t[2]/100,a=Math.floor(e)%6,r=e-Math.floor(e),o=255*i*(1-n),s=255*i*(1-n*r),l=255*i*(1-n*(1-r));switch(i*=255,a){case 0:return[i,l,o];case 1:return[s,i,o];case 2:return[o,i,l];case 3:return[o,s,i];case 4:return[l,o,i];case 5:return[i,o,s]}},a.hsv.hsl=function(t){var e,n,i,a=t[0],r=t[1]/100,o=t[2]/100,s=Math.max(o,.01);return i=(2-r)*o,n=r*s,[a,100*(n=(n/=(e=(2-r)*s)<=1?e:2-e)||0),100*(i/=2)]},a.hwb.rgb=function(t){var e,n,i,a,r,o,s,l=t[0]/360,u=t[1]/100,d=t[2]/100,h=u+d;switch(h>1&&(u/=h,d/=h),i=6*l-(e=Math.floor(6*l)),0!=(1&e)&&(i=1-i),a=u+i*((n=1-d)-u),e){default:case 6:case 0:r=n,o=a,s=u;break;case 1:r=a,o=n,s=u;break;case 2:r=u,o=n,s=a;break;case 3:r=u,o=a,s=n;break;case 4:r=a,o=u,s=n;break;case 5:r=n,o=u,s=a}return[255*r,255*o,255*s]},a.cmyk.rgb=function(t){var e=t[0]/100,n=t[1]/100,i=t[2]/100,a=t[3]/100;return[255*(1-Math.min(1,e*(1-a)+a)),255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,i*(1-a)+a))]},a.xyz.rgb=function(t){var e,n,i,a=t[0]/100,r=t[1]/100,o=t[2]/100;return n=-.9689*a+1.8758*r+.0415*o,i=.0557*a+-.204*r+1.057*o,e=(e=3.2406*a+-1.5372*r+-.4986*o)>.0031308?1.055*Math.pow(e,1/2.4)-.055:12.92*e,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,i=i>.0031308?1.055*Math.pow(i,1/2.4)-.055:12.92*i,[255*(e=Math.min(Math.max(0,e),1)),255*(n=Math.min(Math.max(0,n),1)),255*(i=Math.min(Math.max(0,i),1))]},a.xyz.lab=function(t){var e=t[0],n=t[1],i=t[2];return n/=100,i/=108.883,e=(e/=95.047)>.008856?Math.pow(e,1/3):7.787*e+16/116,[116*(n=n>.008856?Math.pow(n,1/3):7.787*n+16/116)-16,500*(e-n),200*(n-(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116))]},a.lab.xyz=function(t){var e,n,i,a=t[0];e=t[1]/500+(n=(a+16)/116),i=n-t[2]/200;var r=Math.pow(n,3),o=Math.pow(e,3),s=Math.pow(i,3);return n=r>.008856?r:(n-16/116)/7.787,e=o>.008856?o:(e-16/116)/7.787,i=s>.008856?s:(i-16/116)/7.787,[e*=95.047,n*=100,i*=108.883]},a.lab.lch=function(t){var e,n=t[0],i=t[1],a=t[2];return(e=360*Math.atan2(a,i)/2/Math.PI)<0&&(e+=360),[n,Math.sqrt(i*i+a*a),e]},a.lch.lab=function(t){var e,n=t[0],i=t[1];return e=t[2]/360*2*Math.PI,[n,i*Math.cos(e),i*Math.sin(e)]},a.rgb.ansi16=function(t){var e=t[0],n=t[1],i=t[2],r=1 in arguments?arguments[1]:a.rgb.hsv(t)[2];if(0===(r=Math.round(r/50)))return 30;var o=30+(Math.round(i/255)<<2|Math.round(n/255)<<1|Math.round(e/255));return 2===r&&(o+=60),o},a.hsv.ansi16=function(t){return a.rgb.ansi16(a.hsv.rgb(t),t[2])},a.rgb.ansi256=function(t){var e=t[0],n=t[1],i=t[2];return e===n&&n===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(n/255*5)+Math.round(i/255*5)},a.ansi16.rgb=function(t){var e=t%10;if(0===e||7===e)return t>50&&(e+=3.5),[e=e/10.5*255,e,e];var n=.5*(1+~~(t>50));return[(1&e)*n*255,(e>>1&1)*n*255,(e>>2&1)*n*255]},a.ansi256.rgb=function(t){if(t>=232){var e=10*(t-232)+8;return[e,e,e]}var n;return t-=16,[Math.floor(t/36)/5*255,Math.floor((n=t%36)/6)/5*255,n%6/5*255]},a.rgb.hex=function(t){var e=(((255&Math.round(t[0]))<<16)+((255&Math.round(t[1]))<<8)+(255&Math.round(t[2]))).toString(16).toUpperCase();return"000000".substring(e.length)+e},a.hex.rgb=function(t){var e=t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];var n=e[0];3===e[0].length&&(n=n.split("").map((function(t){return t+t})).join(""));var i=parseInt(n,16);return[i>>16&255,i>>8&255,255&i]},a.rgb.hcg=function(t){var e,n=t[0]/255,i=t[1]/255,a=t[2]/255,r=Math.max(Math.max(n,i),a),o=Math.min(Math.min(n,i),a),s=r-o;return e=s<=0?0:r===n?(i-a)/s%6:r===i?2+(a-n)/s:4+(n-i)/s+4,e/=6,[360*(e%=1),100*s,100*(s<1?o/(1-s):0)]},a.hsl.hcg=function(t){var e=t[1]/100,n=t[2]/100,i=1,a=0;return(i=n<.5?2*e*n:2*e*(1-n))<1&&(a=(n-.5*i)/(1-i)),[t[0],100*i,100*a]},a.hsv.hcg=function(t){var e=t[1]/100,n=t[2]/100,i=e*n,a=0;return i<1&&(a=(n-i)/(1-i)),[t[0],100*i,100*a]},a.hcg.rgb=function(t){var e=t[0]/360,n=t[1]/100,i=t[2]/100;if(0===n)return[255*i,255*i,255*i];var a,r=[0,0,0],o=e%1*6,s=o%1,l=1-s;switch(Math.floor(o)){case 0:r[0]=1,r[1]=s,r[2]=0;break;case 1:r[0]=l,r[1]=1,r[2]=0;break;case 2:r[0]=0,r[1]=1,r[2]=s;break;case 3:r[0]=0,r[1]=l,r[2]=1;break;case 4:r[0]=s,r[1]=0,r[2]=1;break;default:r[0]=1,r[1]=0,r[2]=l}return a=(1-n)*i,[255*(n*r[0]+a),255*(n*r[1]+a),255*(n*r[2]+a)]},a.hcg.hsv=function(t){var e=t[1]/100,n=e+t[2]/100*(1-e),i=0;return n>0&&(i=e/n),[t[0],100*i,100*n]},a.hcg.hsl=function(t){var e=t[1]/100,n=t[2]/100*(1-e)+.5*e,i=0;return n>0&&n<.5?i=e/(2*n):n>=.5&&n<1&&(i=e/(2*(1-n))),[t[0],100*i,100*n]},a.hcg.hwb=function(t){var e=t[1]/100,n=e+t[2]/100*(1-e);return[t[0],100*(n-e),100*(1-n)]},a.hwb.hcg=function(t){var e=t[1]/100,n=1-t[2]/100,i=n-e,a=0;return i<1&&(a=(n-i)/(1-i)),[t[0],100*i,100*a]},a.apple.rgb=function(t){return[t[0]/65535*255,t[1]/65535*255,t[2]/65535*255]},a.rgb.apple=function(t){return[t[0]/255*65535,t[1]/255*65535,t[2]/255*65535]},a.gray.rgb=function(t){return[t[0]/100*255,t[0]/100*255,t[0]/100*255]},a.gray.hsl=a.gray.hsv=function(t){return[0,0,t[0]]},a.gray.hwb=function(t){return[0,100,t[0]]},a.gray.cmyk=function(t){return[0,0,0,t[0]]},a.gray.lab=function(t){return[t[0],0,0]},a.gray.hex=function(t){var e=255&Math.round(t[0]/100*255),n=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(n.length)+n},a.rgb.gray=function(t){return[(t[0]+t[1]+t[2])/3/255*100]}}));n.rgb,n.hsl,n.hsv,n.hwb,n.cmyk,n.xyz,n.lab,n.lch,n.hex,n.keyword,n.ansi16,n.ansi256,n.hcg,n.apple,n.gray;function i(t){var e=function(){for(var t={},e=Object.keys(n),i=e.length,a=0;a<i;a++)t[e[a]]={distance:-1,parent:null};return t}(),i=[t];for(e[t].distance=0;i.length;)for(var a=i.pop(),r=Object.keys(n[a]),o=r.length,s=0;s<o;s++){var l=r[s],u=e[l];-1===u.distance&&(u.distance=e[a].distance+1,u.parent=a,i.unshift(l))}return e}function a(t,e){return function(n){return e(t(n))}}function r(t,e){for(var i=[e[t].parent,t],r=n[e[t].parent][t],o=e[t].parent;e[o].parent;)i.unshift(e[o].parent),r=a(n[e[o].parent][o],r),o=e[o].parent;return r.conversion=i,r}var o={};Object.keys(n).forEach((function(t){o[t]={},Object.defineProperty(o[t],"channels",{value:n[t].channels}),Object.defineProperty(o[t],"labels",{value:n[t].labels});var e=function(t){for(var e=i(t),n={},a=Object.keys(e),o=a.length,s=0;s<o;s++){var l=a[s];null!==e[l].parent&&(n[l]=r(l,e))}return n}(t);Object.keys(e).forEach((function(n){var i=e[n];o[t][n]=function(t){var e=function(e){if(null==e)return e;arguments.length>1&&(e=Array.prototype.slice.call(arguments));var n=t(e);if("object"==typeof n)for(var i=n.length,a=0;a<i;a++)n[a]=Math.round(n[a]);return n};return"conversion"in t&&(e.conversion=t.conversion),e}(i),o[t][n].raw=function(t){var e=function(e){return null==e?e:(arguments.length>1&&(e=Array.prototype.slice.call(arguments)),t(e))};return"conversion"in t&&(e.conversion=t.conversion),e}(i)}))}));var s=o,l={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},u={getRgba:d,getHsla:h,getRgb:function(t){var e=d(t);return e&&e.slice(0,3)},getHsl:function(t){var e=h(t);return e&&e.slice(0,3)},getHwb:c,getAlpha:function(t){var e=d(t);if(e)return e[3];if(e=h(t))return e[3];if(e=c(t))return e[3]},hexString:function(t,e){e=void 0!==e&&3===t.length?e:t[3];return"#"+v(t[0])+v(t[1])+v(t[2])+(e>=0&&e<1?v(Math.round(255*e)):"")},rgbString:function(t,e){if(e<1||t[3]&&t[3]<1)return f(t,e);return"rgb("+t[0]+", "+t[1]+", "+t[2]+")"},rgbaString:f,percentString:function(t,e){if(e<1||t[3]&&t[3]<1)return g(t,e);var n=Math.round(t[0]/255*100),i=Math.round(t[1]/255*100),a=Math.round(t[2]/255*100);return"rgb("+n+"%, "+i+"%, "+a+"%)"},percentaString:g,hslString:function(t,e){if(e<1||t[3]&&t[3]<1)return p(t,e);return"hsl("+t[0]+", "+t[1]+"%, "+t[2]+"%)"},hslaString:p,hwbString:function(t,e){void 0===e&&(e=void 0!==t[3]?t[3]:1);return"hwb("+t[0]+", "+t[1]+"%, "+t[2]+"%"+(void 0!==e&&1!==e?", "+e:"")+")"},keyword:function(t){return b[t.slice(0,3)]}};function d(t){if(t){var e=[0,0,0],n=1,i=t.match(/^#([a-fA-F0-9]{3,4})$/i),a="";if(i){a=(i=i[1])[3];for(var r=0;r<e.length;r++)e[r]=parseInt(i[r]+i[r],16);a&&(n=Math.round(parseInt(a+a,16)/255*100)/100)}else if(i=t.match(/^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i)){a=i[2],i=i[1];for(r=0;r<e.length;r++)e[r]=parseInt(i.slice(2*r,2*r+2),16);a&&(n=Math.round(parseInt(a,16)/255*100)/100)}else if(i=t.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(r=0;r<e.length;r++)e[r]=parseInt(i[r+1]);n=parseFloat(i[4])}else if(i=t.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(r=0;r<e.length;r++)e[r]=Math.round(2.55*parseFloat(i[r+1]));n=parseFloat(i[4])}else if(i=t.match(/(\w+)/)){if("transparent"==i[1])return[0,0,0,0];if(!(e=l[i[1]]))return}for(r=0;r<e.length;r++)e[r]=m(e[r],0,255);return n=n||0==n?m(n,0,1):1,e[3]=n,e}}function h(t){if(t){var e=t.match(/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var n=parseFloat(e[4]);return[m(parseInt(e[1]),0,360),m(parseFloat(e[2]),0,100),m(parseFloat(e[3]),0,100),m(isNaN(n)?1:n,0,1)]}}}function c(t){if(t){var e=t.match(/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var n=parseFloat(e[4]);return[m(parseInt(e[1]),0,360),m(parseFloat(e[2]),0,100),m(parseFloat(e[3]),0,100),m(isNaN(n)?1:n,0,1)]}}}function f(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"rgba("+t[0]+", "+t[1]+", "+t[2]+", "+e+")"}function g(t,e){return"rgba("+Math.round(t[0]/255*100)+"%, "+Math.round(t[1]/255*100)+"%, "+Math.round(t[2]/255*100)+"%, "+(e||t[3]||1)+")"}function p(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hsla("+t[0]+", "+t[1]+"%, "+t[2]+"%, "+e+")"}function m(t,e,n){return Math.min(Math.max(e,t),n)}function v(t){var e=t.toString(16).toUpperCase();return e.length<2?"0"+e:e}var b={};for(var x in l)b[l[x]]=x;var y=function(t){return t instanceof y?t:this instanceof y?(this.valid=!1,this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1},void("string"==typeof t?(e=u.getRgba(t))?this.setValues("rgb",e):(e=u.getHsla(t))?this.setValues("hsl",e):(e=u.getHwb(t))&&this.setValues("hwb",e):"object"==typeof t&&(void 0!==(e=t).r||void 0!==e.red?this.setValues("rgb",e):void 0!==e.l||void 0!==e.lightness?this.setValues("hsl",e):void 0!==e.v||void 0!==e.value?this.setValues("hsv",e):void 0!==e.w||void 0!==e.whiteness?this.setValues("hwb",e):void 0===e.c&&void 0===e.cyan||this.setValues("cmyk",e)))):new y(t);var e};y.prototype={isValid:function(){return this.valid},rgb:function(){return this.setSpace("rgb",arguments)},hsl:function(){return this.setSpace("hsl",arguments)},hsv:function(){return this.setSpace("hsv",arguments)},hwb:function(){return this.setSpace("hwb",arguments)},cmyk:function(){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){var t=this.values;return 1!==t.alpha?t.hwb.concat([t.alpha]):t.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var t=this.values;return t.rgb.concat([t.alpha])},hslaArray:function(){var t=this.values;return t.hsl.concat([t.alpha])},alpha:function(t){return void 0===t?this.values.alpha:(this.setValues("alpha",t),this)},red:function(t){return this.setChannel("rgb",0,t)},green:function(t){return this.setChannel("rgb",1,t)},blue:function(t){return this.setChannel("rgb",2,t)},hue:function(t){return t&&(t=(t%=360)<0?360+t:t),this.setChannel("hsl",0,t)},saturation:function(t){return this.setChannel("hsl",1,t)},lightness:function(t){return this.setChannel("hsl",2,t)},saturationv:function(t){return this.setChannel("hsv",1,t)},whiteness:function(t){return this.setChannel("hwb",1,t)},blackness:function(t){return this.setChannel("hwb",2,t)},value:function(t){return this.setChannel("hsv",2,t)},cyan:function(t){return this.setChannel("cmyk",0,t)},magenta:function(t){return this.setChannel("cmyk",1,t)},yellow:function(t){return this.setChannel("cmyk",2,t)},black:function(t){return this.setChannel("cmyk",3,t)},hexString:function(){return u.hexString(this.values.rgb)},rgbString:function(){return u.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return u.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return u.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return u.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return u.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return u.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return u.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var t=this.values.rgb;return t[0]<<16|t[1]<<8|t[2]},luminosity:function(){for(var t=this.values.rgb,e=[],n=0;n<t.length;n++){var i=t[n]/255;e[n]=i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4)}return.2126*e[0]+.7152*e[1]+.0722*e[2]},contrast:function(t){var e=this.luminosity(),n=t.luminosity();return e>n?(e+.05)/(n+.05):(n+.05)/(e+.05)},level:function(t){var e=this.contrast(t);return e>=7.1?"AAA":e>=4.5?"AA":""},dark:function(){var t=this.values.rgb;return(299*t[0]+587*t[1]+114*t[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var t=[],e=0;e<3;e++)t[e]=255-this.values.rgb[e];return this.setValues("rgb",t),this},lighten:function(t){var e=this.values.hsl;return e[2]+=e[2]*t,this.setValues("hsl",e),this},darken:function(t){var e=this.values.hsl;return e[2]-=e[2]*t,this.setValues("hsl",e),this},saturate:function(t){var e=this.values.hsl;return e[1]+=e[1]*t,this.setValues("hsl",e),this},desaturate:function(t){var e=this.values.hsl;return e[1]-=e[1]*t,this.setValues("hsl",e),this},whiten:function(t){var e=this.values.hwb;return e[1]+=e[1]*t,this.setValues("hwb",e),this},blacken:function(t){var e=this.values.hwb;return e[2]+=e[2]*t,this.setValues("hwb",e),this},greyscale:function(){var t=this.values.rgb,e=.3*t[0]+.59*t[1]+.11*t[2];return this.setValues("rgb",[e,e,e]),this},clearer:function(t){var e=this.values.alpha;return this.setValues("alpha",e-e*t),this},opaquer:function(t){var e=this.values.alpha;return this.setValues("alpha",e+e*t),this},rotate:function(t){var e=this.values.hsl,n=(e[0]+t)%360;return e[0]=n<0?360+n:n,this.setValues("hsl",e),this},mix:function(t,e){var n=t,i=void 0===e?.5:e,a=2*i-1,r=this.alpha()-n.alpha(),o=((a*r==-1?a:(a+r)/(1+a*r))+1)/2,s=1-o;return this.rgb(o*this.red()+s*n.red(),o*this.green()+s*n.green(),o*this.blue()+s*n.blue()).alpha(this.alpha()*i+n.alpha()*(1-i))},toJSON:function(){return this.rgb()},clone:function(){var t,e,n=new y,i=this.values,a=n.values;for(var r in i)i.hasOwnProperty(r)&&(t=i[r],"[object Array]"===(e={}.toString.call(t))?a[r]=t.slice(0):"[object Number]"===e?a[r]=t:console.error("unexpected color value:",t));return n}},y.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},y.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},y.prototype.getValues=function(t){for(var e=this.values,n={},i=0;i<t.length;i++)n[t.charAt(i)]=e[t][i];return 1!==e.alpha&&(n.a=e.alpha),n},y.prototype.setValues=function(t,e){var n,i,a=this.values,r=this.spaces,o=this.maxes,l=1;if(this.valid=!0,"alpha"===t)l=e;else if(e.length)a[t]=e.slice(0,t.length),l=e[t.length];else if(void 0!==e[t.charAt(0)]){for(n=0;n<t.length;n++)a[t][n]=e[t.charAt(n)];l=e.a}else if(void 0!==e[r[t][0]]){var u=r[t];for(n=0;n<t.length;n++)a[t][n]=e[u[n]];l=e.alpha}if(a.alpha=Math.max(0,Math.min(1,void 0===l?a.alpha:l)),"alpha"===t)return!1;for(n=0;n<t.length;n++)i=Math.max(0,Math.min(o[t][n],a[t][n])),a[t][n]=Math.round(i);for(var d in r)d!==t&&(a[d]=s[t][d](a[t]));return!0},y.prototype.setSpace=function(t,e){var n=e[0];return void 0===n?this.getValues(t):("number"==typeof n&&(n=Array.prototype.slice.call(e)),this.setValues(t,n),this)},y.prototype.setChannel=function(t,e,n){var i=this.values[t];return void 0===n?i[e]:n===i[e]?this:(i[e]=n,this.setValues(t,i),this)},"undefined"!=typeof window&&(window.Color=y);var _=y;function k(t){return-1===["__proto__","prototype","constructor"].indexOf(t)}var w,M={noop:function(){},uid:(w=0,function(){return w++}),isNullOrUndef:function(t){return null==t},isArray:function(t){if(Array.isArray&&Array.isArray(t))return!0;var e=Object.prototype.toString.call(t);return"[object"===e.substr(0,7)&&"Array]"===e.substr(-6)},isObject:function(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)},isFinite:function(t){return("number"==typeof t||t instanceof Number)&&isFinite(t)},valueOrDefault:function(t,e){return void 0===t?e:t},valueAtIndexOrDefault:function(t,e,n){return M.valueOrDefault(M.isArray(t)?t[e]:t,n)},callback:function(t,e,n){if(t&&"function"==typeof t.call)return t.apply(n,e)},each:function(t,e,n,i){var a,r,o;if(M.isArray(t))if(r=t.length,i)for(a=r-1;a>=0;a--)e.call(n,t[a],a);else for(a=0;a<r;a++)e.call(n,t[a],a);else if(M.isObject(t))for(r=(o=Object.keys(t)).length,a=0;a<r;a++)e.call(n,t[o[a]],o[a])},arrayEquals:function(t,e){var n,i,a,r;if(!t||!e||t.length!==e.length)return!1;for(n=0,i=t.length;n<i;++n)if(a=t[n],r=e[n],a instanceof Array&&r instanceof Array){if(!M.arrayEquals(a,r))return!1}else if(a!==r)return!1;return!0},clone:function(t){if(M.isArray(t))return t.map(M.clone);if(M.isObject(t)){for(var e=Object.create(t),n=Object.keys(t),i=n.length,a=0;a<i;++a)e[n[a]]=M.clone(t[n[a]]);return e}return t},_merger:function(t,e,n,i){if(k(t)){var a=e[t],r=n[t];M.isObject(a)&&M.isObject(r)?M.merge(a,r,i):e[t]=M.clone(r)}},_mergerIf:function(t,e,n){if(k(t)){var i=e[t],a=n[t];M.isObject(i)&&M.isObject(a)?M.mergeIf(i,a):e.hasOwnProperty(t)||(e[t]=M.clone(a))}},merge:function(t,e,n){var i,a,r,o,s,l=M.isArray(e)?e:[e],u=l.length;if(!M.isObject(t))return t;for(i=(n=n||{}).merger||M._merger,a=0;a<u;++a)if(e=l[a],M.isObject(e))for(s=0,o=(r=Object.keys(e)).length;s<o;++s)i(r[s],t,e,n);return t},mergeIf:function(t,e){return M.merge(t,e,{merger:M._mergerIf})},extend:Object.assign||function(t){return M.merge(t,[].slice.call(arguments,1),{merger:function(t,e,n){e[t]=n[t]}})},inherits:function(t){var e=this,n=t&&t.hasOwnProperty("constructor")?t.constructor:function(){return e.apply(this,arguments)},i=function(){this.constructor=n};return i.prototype=e.prototype,n.prototype=new i,n.extend=M.inherits,t&&M.extend(n.prototype,t),n.__super__=e.prototype,n},_deprecated:function(t,e,n,i){void 0!==e&&console.warn(t+': "'+n+'" is deprecated. Please use "'+i+'" instead')}},S=M;M.callCallback=M.callback,M.indexOf=function(t,e,n){return Array.prototype.indexOf.call(t,e,n)},M.getValueOrDefault=M.valueOrDefault,M.getValueAtIndexOrDefault=M.valueAtIndexOrDefault;var C={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return-t*(t-2)},easeInOutQuad:function(t){return(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1)},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return(t-=1)*t*t+1},easeInOutCubic:function(t){return(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return-((t-=1)*t*t*t-1)},easeInOutQuart:function(t){return(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return(t-=1)*t*t*t*t+1},easeInOutQuint:function(t){return(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},easeInSine:function(t){return 1-Math.cos(t*(Math.PI/2))},easeOutSine:function(t){return Math.sin(t*(Math.PI/2))},easeInOutSine:function(t){return-.5*(Math.cos(Math.PI*t)-1)},easeInExpo:function(t){return 0===t?0:Math.pow(2,10*(t-1))},easeOutExpo:function(t){return 1===t?1:1-Math.pow(2,-10*t)},easeInOutExpo:function(t){return 0===t?0:1===t?1:(t/=.5)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*--t))},easeInCirc:function(t){return t>=1?t:-(Math.sqrt(1-t*t)-1)},easeOutCirc:function(t){return Math.sqrt(1-(t-=1)*t)},easeInOutCirc:function(t){return(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},easeInElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===t?1:(n||(n=.3),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),-i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n))},easeOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===t?1:(n||(n=.3),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),i*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/n)+1)},easeInOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:2==(t/=.5)?1:(n||(n=.45),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),t<1?i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*-.5:i*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*.5+1)},easeInBack:function(t){var e=1.70158;return t*t*((e+1)*t-e)},easeOutBack:function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack:function(t){var e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:function(t){return 1-C.easeOutBounce(1-t)},easeOutBounce:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},easeInOutBounce:function(t){return t<.5?.5*C.easeInBounce(2*t):.5*C.easeOutBounce(2*t-1)+.5}},P={effects:C};S.easingEffects=C;var A=Math.PI,D=A/180,T=2*A,I=A/2,F=A/4,O=2*A/3,L={clear:function(t){t.ctx.clearRect(0,0,t.width,t.height)},roundedRect:function(t,e,n,i,a,r){if(r){var o=Math.min(r,a/2,i/2),s=e+o,l=n+o,u=e+i-o,d=n+a-o;t.moveTo(e,l),s<u&&l<d?(t.arc(s,l,o,-A,-I),t.arc(u,l,o,-I,0),t.arc(u,d,o,0,I),t.arc(s,d,o,I,A)):s<u?(t.moveTo(s,n),t.arc(u,l,o,-I,I),t.arc(s,l,o,I,A+I)):l<d?(t.arc(s,l,o,-A,0),t.arc(s,d,o,0,A)):t.arc(s,l,o,-A,A),t.closePath(),t.moveTo(e,n)}else t.rect(e,n,i,a)},drawPoint:function(t,e,n,i,a,r){var o,s,l,u,d,h=(r||0)*D;if(e&&"object"==typeof e&&("[object HTMLImageElement]"===(o=e.toString())||"[object HTMLCanvasElement]"===o))return t.save(),t.translate(i,a),t.rotate(h),t.drawImage(e,-e.width/2,-e.height/2,e.width,e.height),void t.restore();if(!(isNaN(n)||n<=0)){switch(t.beginPath(),e){default:t.arc(i,a,n,0,T),t.closePath();break;case"triangle":t.moveTo(i+Math.sin(h)*n,a-Math.cos(h)*n),h+=O,t.lineTo(i+Math.sin(h)*n,a-Math.cos(h)*n),h+=O,t.lineTo(i+Math.sin(h)*n,a-Math.cos(h)*n),t.closePath();break;case"rectRounded":u=n-(d=.516*n),s=Math.cos(h+F)*u,l=Math.sin(h+F)*u,t.arc(i-s,a-l,d,h-A,h-I),t.arc(i+l,a-s,d,h-I,h),t.arc(i+s,a+l,d,h,h+I),t.arc(i-l,a+s,d,h+I,h+A),t.closePath();break;case"rect":if(!r){u=Math.SQRT1_2*n,t.rect(i-u,a-u,2*u,2*u);break}h+=F;case"rectRot":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+l,a-s),t.lineTo(i+s,a+l),t.lineTo(i-l,a+s),t.closePath();break;case"crossRot":h+=F;case"cross":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s);break;case"star":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s),h+=F,s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s);break;case"line":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l);break;case"dash":t.moveTo(i,a),t.lineTo(i+Math.cos(h)*n,a+Math.sin(h)*n)}t.fill(),t.stroke()}},_isPointInArea:function(t,e){return t.x>e.left-1e-6&&t.x<e.right+1e-6&&t.y>e.top-1e-6&&t.y<e.bottom+1e-6},clipArea:function(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()},unclipArea:function(t){t.restore()},lineTo:function(t,e,n,i){var a=n.steppedLine;if(a){if("middle"===a){var r=(e.x+n.x)/2;t.lineTo(r,i?n.y:e.y),t.lineTo(r,i?e.y:n.y)}else"after"===a&&!i||"after"!==a&&i?t.lineTo(e.x,n.y):t.lineTo(n.x,e.y);t.lineTo(n.x,n.y)}else n.tension?t.bezierCurveTo(i?e.controlPointPreviousX:e.controlPointNextX,i?e.controlPointPreviousY:e.controlPointNextY,i?n.controlPointNextX:n.controlPointPreviousX,i?n.controlPointNextY:n.controlPointPreviousY,n.x,n.y):t.lineTo(n.x,n.y)}},R=L;S.clear=L.clear,S.drawRoundedRectangle=function(t){t.beginPath(),L.roundedRect.apply(L,arguments)};var z={_set:function(t,e){return S.merge(this[t]||(this[t]={}),e)}};z._set("global",{defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:"normal",defaultLineHeight:1.2,showLines:!0});var N=z,B=S.valueOrDefault;var E={toLineHeight:function(t,e){var n=(""+t).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);if(!n||"normal"===n[1])return 1.2*e;switch(t=+n[2],n[3]){case"px":return t;case"%":t/=100}return e*t},toPadding:function(t){var e,n,i,a;return S.isObject(t)?(e=+t.top||0,n=+t.right||0,i=+t.bottom||0,a=+t.left||0):e=n=i=a=+t||0,{top:e,right:n,bottom:i,left:a,height:e+i,width:a+n}},_parseFont:function(t){var e=N.global,n=B(t.fontSize,e.defaultFontSize),i={family:B(t.fontFamily,e.defaultFontFamily),lineHeight:S.options.toLineHeight(B(t.lineHeight,e.defaultLineHeight),n),size:n,style:B(t.fontStyle,e.defaultFontStyle),weight:null,string:""};return i.string=function(t){return!t||S.isNullOrUndef(t.size)||S.isNullOrUndef(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}(i),i},resolve:function(t,e,n,i){var a,r,o,s=!0;for(a=0,r=t.length;a<r;++a)if(void 0!==(o=t[a])&&(void 0!==e&&"function"==typeof o&&(o=o(e),s=!1),void 0!==n&&S.isArray(o)&&(o=o[n],s=!1),void 0!==o))return i&&!s&&(i.cacheable=!1),o}},W={_factorize:function(t){var e,n=[],i=Math.sqrt(t);for(e=1;e<i;e++)t%e==0&&(n.push(e),n.push(t/e));return i===(0|i)&&n.push(i),n.sort((function(t,e){return t-e})).pop(),n},log10:Math.log10||function(t){var e=Math.log(t)*Math.LOG10E,n=Math.round(e);return t===Math.pow(10,n)?n:e}},V=W;S.log10=W.log10;var H=S,j=P,q=R,U=E,Y=V,G={getRtlAdapter:function(t,e,n){return t?function(t,e){return{x:function(n){return t+t+e-n},setWidth:function(t){e=t},textAlign:function(t){return"center"===t?t:"right"===t?"left":"right"},xPlus:function(t,e){return t-e},leftForLtr:function(t,e){return t-e}}}(e,n):{x:function(t){return t},setWidth:function(t){},textAlign:function(t){return t},xPlus:function(t,e){return t+e},leftForLtr:function(t,e){return t}}},overrideTextDirection:function(t,e){var n,i;"ltr"!==e&&"rtl"!==e||(i=[(n=t.canvas.style).getPropertyValue("direction"),n.getPropertyPriority("direction")],n.setProperty("direction",e,"important"),t.prevTextDirection=i)},restoreTextDirection:function(t){var e=t.prevTextDirection;void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}};H.easing=j,H.canvas=q,H.options=U,H.math=Y,H.rtl=G;var X=function(t){H.extend(this,t),this.initialize.apply(this,arguments)};H.extend(X.prototype,{_type:void 0,initialize:function(){this.hidden=!1},pivot:function(){var t=this;return t._view||(t._view=H.extend({},t._model)),t._start={},t},transition:function(t){var e=this,n=e._model,i=e._start,a=e._view;return n&&1!==t?(a||(a=e._view={}),i||(i=e._start={}),function(t,e,n,i){var a,r,o,s,l,u,d,h,c,f=Object.keys(n);for(a=0,r=f.length;a<r;++a)if(u=n[o=f[a]],e.hasOwnProperty(o)||(e[o]=u),(s=e[o])!==u&&"_"!==o[0]){if(t.hasOwnProperty(o)||(t[o]=s),(d=typeof u)===typeof(l=t[o]))if("string"===d){if((h=_(l)).valid&&(c=_(u)).valid){e[o]=c.mix(h,i).rgbString();continue}}else if(H.isFinite(l)&&H.isFinite(u)){e[o]=l+(u-l)*i;continue}e[o]=u}}(i,a,n,t),e):(e._view=H.extend({},n),e._start=null,e)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return H.isNumber(this._model.x)&&H.isNumber(this._model.y)}}),X.extend=H.inherits;var K=X,Z=K.extend({chart:null,currentStep:0,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),$=Z;Object.defineProperty(Z.prototype,"animationObject",{get:function(){return this}}),Object.defineProperty(Z.prototype,"chartInstance",{get:function(){return this.chart},set:function(t){this.chart=t}}),N._set("global",{animation:{duration:1e3,easing:"easeOutQuart",onProgress:H.noop,onComplete:H.noop}});var J={animations:[],request:null,addAnimation:function(t,e,n,i){var a,r,o=this.animations;for(e.chart=t,e.startTime=Date.now(),e.duration=n,i||(t.animating=!0),a=0,r=o.length;a<r;++a)if(o[a].chart===t)return void(o[a]=e);o.push(e),1===o.length&&this.requestAnimationFrame()},cancelAnimation:function(t){var e=H.findIndex(this.animations,(function(e){return e.chart===t}));-1!==e&&(this.animations.splice(e,1),t.animating=!1)},requestAnimationFrame:function(){var t=this;null===t.request&&(t.request=H.requestAnimFrame.call(window,(function(){t.request=null,t.startDigest()})))},startDigest:function(){this.advance(),this.animations.length>0&&this.requestAnimationFrame()},advance:function(){for(var t,e,n,i,a=this.animations,r=0;r<a.length;)e=(t=a[r]).chart,n=t.numSteps,i=Math.floor((Date.now()-t.startTime)/t.duration*n)+1,t.currentStep=Math.min(i,n),H.callback(t.render,[e,t],e),H.callback(t.onAnimationProgress,[t],e),t.currentStep>=n?(H.callback(t.onAnimationComplete,[t],e),e.animating=!1,a.splice(r,1)):++r}},Q=H.options.resolve,tt=["push","pop","shift","splice","unshift"];function et(t,e){var n=t._chartjs;if(n){var i=n.listeners,a=i.indexOf(e);-1!==a&&i.splice(a,1),i.length>0||(tt.forEach((function(e){delete t[e]})),delete t._chartjs)}}var nt=function(t,e){this.initialize(t,e)};H.extend(nt.prototype,{datasetElementType:null,dataElementType:null,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth"],_dataElementOptions:["backgroundColor","borderColor","borderWidth","pointStyle"],initialize:function(t,e){var n=this;n.chart=t,n.index=e,n.linkScales(),n.addElements(),n._type=n.getMeta().type},updateIndex:function(t){this.index=t},linkScales:function(){var t=this.getMeta(),e=this.chart,n=e.scales,i=this.getDataset(),a=e.options.scales;null!==t.xAxisID&&t.xAxisID in n&&!i.xAxisID||(t.xAxisID=i.xAxisID||a.xAxes[0].id),null!==t.yAxisID&&t.yAxisID in n&&!i.yAxisID||(t.yAxisID=i.yAxisID||a.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(t){return this.chart.scales[t]},_getValueScaleId:function(){return this.getMeta().yAxisID},_getIndexScaleId:function(){return this.getMeta().xAxisID},_getValueScale:function(){return this.getScaleForId(this._getValueScaleId())},_getIndexScale:function(){return this.getScaleForId(this._getIndexScaleId())},reset:function(){this._update(!0)},destroy:function(){this._data&&et(this._data,this)},createMetaDataset:function(){var t=this.datasetElementType;return t&&new t({_chart:this.chart,_datasetIndex:this.index})},createMetaData:function(t){var e=this.dataElementType;return e&&new e({_chart:this.chart,_datasetIndex:this.index,_index:t})},addElements:function(){var t,e,n=this.getMeta(),i=this.getDataset().data||[],a=n.data;for(t=0,e=i.length;t<e;++t)a[t]=a[t]||this.createMetaData(t);n.dataset=n.dataset||this.createMetaDataset()},addElementAndReset:function(t){var e=this.createMetaData(t);this.getMeta().data.splice(t,0,e),this.updateElement(e,t,!0)},buildOrUpdateElements:function(){var t,e,n=this,i=n.getDataset(),a=i.data||(i.data=[]);n._data!==a&&(n._data&&et(n._data,n),a&&Object.isExtensible(a)&&(e=n,(t=a)._chartjs?t._chartjs.listeners.push(e):(Object.defineProperty(t,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),tt.forEach((function(e){var n="onData"+e.charAt(0).toUpperCase()+e.slice(1),i=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:function(){var e=Array.prototype.slice.call(arguments),a=i.apply(this,e);return H.each(t._chartjs.listeners,(function(t){"function"==typeof t[n]&&t[n].apply(t,e)})),a}})})))),n._data=a),n.resyncElements()},_configure:function(){this._config=H.merge(Object.create(null),[this.chart.options.datasets[this._type],this.getDataset()],{merger:function(t,e,n){"_meta"!==t&&"data"!==t&&H._merger(t,e,n)}})},_update:function(t){this._configure(),this._cachedDataOpts=null,this.update(t)},update:H.noop,transition:function(t){for(var e=this.getMeta(),n=e.data||[],i=n.length,a=0;a<i;++a)n[a].transition(t);e.dataset&&e.dataset.transition(t)},draw:function(){var t=this.getMeta(),e=t.data||[],n=e.length,i=0;for(t.dataset&&t.dataset.draw();i<n;++i)e[i].draw()},getStyle:function(t){var e,n=this.getMeta(),i=n.dataset;return this._configure(),i&&void 0===t?e=this._resolveDatasetElementOptions(i||{}):(t=t||0,e=this._resolveDataElementOptions(n.data[t]||{},t)),!1!==e.fill&&null!==e.fill||(e.backgroundColor=e.borderColor),e},_resolveDatasetElementOptions:function(t,e){var n,i,a,r,o=this,s=o.chart,l=o._config,u=t.custom||{},d=s.options.elements[o.datasetElementType.prototype._type]||{},h=o._datasetElementOptions,c={},f={chart:s,dataset:o.getDataset(),datasetIndex:o.index,hover:e};for(n=0,i=h.length;n<i;++n)a=h[n],r=e?"hover"+a.charAt(0).toUpperCase()+a.slice(1):a,c[a]=Q([u[r],l[r],d[r]],f);return c},_resolveDataElementOptions:function(t,e){var n=this,i=t&&t.custom,a=n._cachedDataOpts;if(a&&!i)return a;var r,o,s,l,u=n.chart,d=n._config,h=u.options.elements[n.dataElementType.prototype._type]||{},c=n._dataElementOptions,f={},g={chart:u,dataIndex:e,dataset:n.getDataset(),datasetIndex:n.index},p={cacheable:!i};if(i=i||{},H.isArray(c))for(o=0,s=c.length;o<s;++o)f[l=c[o]]=Q([i[l],d[l],h[l]],g,e,p);else for(o=0,s=(r=Object.keys(c)).length;o<s;++o)f[l=r[o]]=Q([i[l],d[c[l]],d[l],h[l]],g,e,p);return p.cacheable&&(n._cachedDataOpts=Object.freeze(f)),f},removeHoverStyle:function(t){H.merge(t._model,t.$previousStyle||{}),delete t.$previousStyle},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],n=t._index,i=t.custom||{},a=t._model,r=H.getHoverColor;t.$previousStyle={backgroundColor:a.backgroundColor,borderColor:a.borderColor,borderWidth:a.borderWidth},a.backgroundColor=Q([i.hoverBackgroundColor,e.hoverBackgroundColor,r(a.backgroundColor)],void 0,n),a.borderColor=Q([i.hoverBorderColor,e.hoverBorderColor,r(a.borderColor)],void 0,n),a.borderWidth=Q([i.hoverBorderWidth,e.hoverBorderWidth,a.borderWidth],void 0,n)},_removeDatasetHoverStyle:function(){var t=this.getMeta().dataset;t&&this.removeHoverStyle(t)},_setDatasetHoverStyle:function(){var t,e,n,i,a,r,o=this.getMeta().dataset,s={};if(o){for(r=o._model,a=this._resolveDatasetElementOptions(o,!0),t=0,e=(i=Object.keys(a)).length;t<e;++t)s[n=i[t]]=r[n],r[n]=a[n];o.$previousStyle=s}},resyncElements:function(){var t=this.getMeta(),e=this.getDataset().data,n=t.data.length,i=e.length;i<n?t.data.splice(i,n-i):i>n&&this.insertElements(n,i-n)},insertElements:function(t,e){for(var n=0;n<e;++n)this.addElementAndReset(t+n)},onDataPush:function(){var t=arguments.length;this.insertElements(this.getDataset().data.length-t,t)},onDataPop:function(){this.getMeta().data.pop()},onDataShift:function(){this.getMeta().data.shift()},onDataSplice:function(t,e){this.getMeta().data.splice(t,e),this.insertElements(t,arguments.length-2)},onDataUnshift:function(){this.insertElements(0,arguments.length)}}),nt.extend=H.inherits;var it=nt,at=2*Math.PI;function rt(t,e){var n=e.startAngle,i=e.endAngle,a=e.pixelMargin,r=a/e.outerRadius,o=e.x,s=e.y;t.beginPath(),t.arc(o,s,e.outerRadius,n-r,i+r),e.innerRadius>a?(r=a/e.innerRadius,t.arc(o,s,e.innerRadius-a,i+r,n-r,!0)):t.arc(o,s,a,i+Math.PI/2,n-Math.PI/2),t.closePath(),t.clip()}function ot(t,e,n){var i="inner"===e.borderAlign;i?(t.lineWidth=2*e.borderWidth,t.lineJoin="round"):(t.lineWidth=e.borderWidth,t.lineJoin="bevel"),n.fullCircles&&function(t,e,n,i){var a,r=n.endAngle;for(i&&(n.endAngle=n.startAngle+at,rt(t,n),n.endAngle=r,n.endAngle===n.startAngle&&n.fullCircles&&(n.endAngle+=at,n.fullCircles--)),t.beginPath(),t.arc(n.x,n.y,n.innerRadius,n.startAngle+at,n.startAngle,!0),a=0;a<n.fullCircles;++a)t.stroke();for(t.beginPath(),t.arc(n.x,n.y,e.outerRadius,n.startAngle,n.startAngle+at),a=0;a<n.fullCircles;++a)t.stroke()}(t,e,n,i),i&&rt(t,n),t.beginPath(),t.arc(n.x,n.y,e.outerRadius,n.startAngle,n.endAngle),t.arc(n.x,n.y,n.innerRadius,n.endAngle,n.startAngle,!0),t.closePath(),t.stroke()}N._set("global",{elements:{arc:{backgroundColor:N.global.defaultColor,borderColor:"#fff",borderWidth:2,borderAlign:"center"}}});var st=K.extend({_type:"arc",inLabelRange:function(t){var e=this._view;return!!e&&Math.pow(t-e.x,2)<Math.pow(e.radius+e.hoverRadius,2)},inRange:function(t,e){var n=this._view;if(n){for(var i=H.getAngleFromPoint(n,{x:t,y:e}),a=i.angle,r=i.distance,o=n.startAngle,s=n.endAngle;s<o;)s+=at;for(;a>s;)a-=at;for(;a<o;)a+=at;var l=a>=o&&a<=s,u=r>=n.innerRadius&&r<=n.outerRadius;return l&&u}return!1},getCenterPoint:function(){var t=this._view,e=(t.startAngle+t.endAngle)/2,n=(t.innerRadius+t.outerRadius)/2;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},getArea:function(){var t=this._view;return Math.PI*((t.endAngle-t.startAngle)/(2*Math.PI))*(Math.pow(t.outerRadius,2)-Math.pow(t.innerRadius,2))},tooltipPosition:function(){var t=this._view,e=t.startAngle+(t.endAngle-t.startAngle)/2,n=(t.outerRadius-t.innerRadius)/2+t.innerRadius;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},draw:function(){var t,e=this._chart.ctx,n=this._view,i="inner"===n.borderAlign?.33:0,a={x:n.x,y:n.y,innerRadius:n.innerRadius,outerRadius:Math.max(n.outerRadius-i,0),pixelMargin:i,startAngle:n.startAngle,endAngle:n.endAngle,fullCircles:Math.floor(n.circumference/at)};if(e.save(),e.fillStyle=n.backgroundColor,e.strokeStyle=n.borderColor,a.fullCircles){for(a.endAngle=a.startAngle+at,e.beginPath(),e.arc(a.x,a.y,a.outerRadius,a.startAngle,a.endAngle),e.arc(a.x,a.y,a.innerRadius,a.endAngle,a.startAngle,!0),e.closePath(),t=0;t<a.fullCircles;++t)e.fill();a.endAngle=a.startAngle+n.circumference%at}e.beginPath(),e.arc(a.x,a.y,a.outerRadius,a.startAngle,a.endAngle),e.arc(a.x,a.y,a.innerRadius,a.endAngle,a.startAngle,!0),e.closePath(),e.fill(),n.borderWidth&&ot(e,n,a),e.restore()}}),lt=H.valueOrDefault,ut=N.global.defaultColor;N._set("global",{elements:{line:{tension:.4,backgroundColor:ut,borderWidth:3,borderColor:ut,borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",capBezierPoints:!0,fill:!0}}});var dt=K.extend({_type:"line",draw:function(){var t,e,n,i=this,a=i._view,r=i._chart.ctx,o=a.spanGaps,s=i._children.slice(),l=N.global,u=l.elements.line,d=-1,h=i._loop;if(s.length){if(i._loop){for(t=0;t<s.length;++t)if(e=H.previousItem(s,t),!s[t]._view.skip&&e._view.skip){s=s.slice(t).concat(s.slice(0,t)),h=o;break}h&&s.push(s[0])}for(r.save(),r.lineCap=a.borderCapStyle||u.borderCapStyle,r.setLineDash&&r.setLineDash(a.borderDash||u.borderDash),r.lineDashOffset=lt(a.borderDashOffset,u.borderDashOffset),r.lineJoin=a.borderJoinStyle||u.borderJoinStyle,r.lineWidth=lt(a.borderWidth,u.borderWidth),r.strokeStyle=a.borderColor||l.defaultColor,r.beginPath(),(n=s[0]._view).skip||(r.moveTo(n.x,n.y),d=0),t=1;t<s.length;++t)n=s[t]._view,e=-1===d?H.previousItem(s,t):s[d],n.skip||(d!==t-1&&!o||-1===d?r.moveTo(n.x,n.y):H.canvas.lineTo(r,e._view,n),d=t);h&&r.closePath(),r.stroke(),r.restore()}}}),ht=H.valueOrDefault,ct=N.global.defaultColor;function ft(t){var e=this._view;return!!e&&Math.abs(t-e.x)<e.radius+e.hitRadius}N._set("global",{elements:{point:{radius:3,pointStyle:"circle",backgroundColor:ct,borderColor:ct,borderWidth:1,hitRadius:1,hoverRadius:4,hoverBorderWidth:1}}});var gt=K.extend({_type:"point",inRange:function(t,e){var n=this._view;return!!n&&Math.pow(t-n.x,2)+Math.pow(e-n.y,2)<Math.pow(n.hitRadius+n.radius,2)},inLabelRange:ft,inXRange:ft,inYRange:function(t){var e=this._view;return!!e&&Math.abs(t-e.y)<e.radius+e.hitRadius},getCenterPoint:function(){var t=this._view;return{x:t.x,y:t.y}},getArea:function(){return Math.PI*Math.pow(this._view.radius,2)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y,padding:t.radius+t.borderWidth}},draw:function(t){var e=this._view,n=this._chart.ctx,i=e.pointStyle,a=e.rotation,r=e.radius,o=e.x,s=e.y,l=N.global,u=l.defaultColor;e.skip||(void 0===t||H.canvas._isPointInArea(e,t))&&(n.strokeStyle=e.borderColor||u,n.lineWidth=ht(e.borderWidth,l.elements.point.borderWidth),n.fillStyle=e.backgroundColor||u,H.canvas.drawPoint(n,i,r,o,s,a))}}),pt=N.global.defaultColor;function mt(t){return t&&void 0!==t.width}function vt(t){var e,n,i,a,r;return mt(t)?(r=t.width/2,e=t.x-r,n=t.x+r,i=Math.min(t.y,t.base),a=Math.max(t.y,t.base)):(r=t.height/2,e=Math.min(t.x,t.base),n=Math.max(t.x,t.base),i=t.y-r,a=t.y+r),{left:e,top:i,right:n,bottom:a}}function bt(t,e,n){return t===e?n:t===n?e:t}function xt(t,e,n){var i,a,r,o,s=t.borderWidth,l=function(t){var e=t.borderSkipped,n={};return e?(t.horizontal?t.base>t.x&&(e=bt(e,"left","right")):t.base<t.y&&(e=bt(e,"bottom","top")),n[e]=!0,n):n}(t);return H.isObject(s)?(i=+s.top||0,a=+s.right||0,r=+s.bottom||0,o=+s.left||0):i=a=r=o=+s||0,{t:l.top||i<0?0:i>n?n:i,r:l.right||a<0?0:a>e?e:a,b:l.bottom||r<0?0:r>n?n:r,l:l.left||o<0?0:o>e?e:o}}function yt(t,e,n){var i=null===e,a=null===n,r=!(!t||i&&a)&&vt(t);return r&&(i||e>=r.left&&e<=r.right)&&(a||n>=r.top&&n<=r.bottom)}N._set("global",{elements:{rectangle:{backgroundColor:pt,borderColor:pt,borderSkipped:"bottom",borderWidth:0}}});var _t=K.extend({_type:"rectangle",draw:function(){var t=this._chart.ctx,e=this._view,n=function(t){var e=vt(t),n=e.right-e.left,i=e.bottom-e.top,a=xt(t,n/2,i/2);return{outer:{x:e.left,y:e.top,w:n,h:i},inner:{x:e.left+a.l,y:e.top+a.t,w:n-a.l-a.r,h:i-a.t-a.b}}}(e),i=n.outer,a=n.inner;t.fillStyle=e.backgroundColor,t.fillRect(i.x,i.y,i.w,i.h),i.w===a.w&&i.h===a.h||(t.save(),t.beginPath(),t.rect(i.x,i.y,i.w,i.h),t.clip(),t.fillStyle=e.borderColor,t.rect(a.x,a.y,a.w,a.h),t.fill("evenodd"),t.restore())},height:function(){var t=this._view;return t.base-t.y},inRange:function(t,e){return yt(this._view,t,e)},inLabelRange:function(t,e){var n=this._view;return mt(n)?yt(n,t,null):yt(n,null,e)},inXRange:function(t){return yt(this._view,t,null)},inYRange:function(t){return yt(this._view,null,t)},getCenterPoint:function(){var t,e,n=this._view;return mt(n)?(t=n.x,e=(n.y+n.base)/2):(t=(n.x+n.base)/2,e=n.y),{x:t,y:e}},getArea:function(){var t=this._view;return mt(t)?t.width*Math.abs(t.y-t.base):t.height*Math.abs(t.x-t.base)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y}}}),kt={},wt=st,Mt=dt,St=gt,Ct=_t;kt.Arc=wt,kt.Line=Mt,kt.Point=St,kt.Rectangle=Ct;var Pt=H._deprecated,At=H.valueOrDefault;function Dt(t,e,n){var i,a,r=n.barThickness,o=e.stackCount,s=e.pixels[t],l=H.isNullOrUndef(r)?function(t,e){var n,i,a,r,o=t._length;for(a=1,r=e.length;a<r;++a)o=Math.min(o,Math.abs(e[a]-e[a-1]));for(a=0,r=t.getTicks().length;a<r;++a)i=t.getPixelForTick(a),o=a>0?Math.min(o,Math.abs(i-n)):o,n=i;return o}(e.scale,e.pixels):-1;return H.isNullOrUndef(r)?(i=l*n.categoryPercentage,a=n.barPercentage):(i=r*o,a=1),{chunk:i/o,ratio:a,start:s-i/2}}N._set("bar",{hover:{mode:"label"},scales:{xAxes:[{type:"category",offset:!0,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}}),N._set("global",{datasets:{bar:{categoryPercentage:.8,barPercentage:.9}}});var Tt=it.extend({dataElementType:kt.Rectangle,_dataElementOptions:["backgroundColor","borderColor","borderSkipped","borderWidth","barPercentage","barThickness","categoryPercentage","maxBarThickness","minBarLength"],initialize:function(){var t,e,n=this;it.prototype.initialize.apply(n,arguments),(t=n.getMeta()).stack=n.getDataset().stack,t.bar=!0,e=n._getIndexScale().options,Pt("bar chart",e.barPercentage,"scales.[x/y]Axes.barPercentage","dataset.barPercentage"),Pt("bar chart",e.barThickness,"scales.[x/y]Axes.barThickness","dataset.barThickness"),Pt("bar chart",e.categoryPercentage,"scales.[x/y]Axes.categoryPercentage","dataset.categoryPercentage"),Pt("bar chart",n._getValueScale().options.minBarLength,"scales.[x/y]Axes.minBarLength","dataset.minBarLength"),Pt("bar chart",e.maxBarThickness,"scales.[x/y]Axes.maxBarThickness","dataset.maxBarThickness")},update:function(t){var e,n,i=this.getMeta().data;for(this._ruler=this.getRuler(),e=0,n=i.length;e<n;++e)this.updateElement(i[e],e,t)},updateElement:function(t,e,n){var i=this,a=i.getMeta(),r=i.getDataset(),o=i._resolveDataElementOptions(t,e);t._xScale=i.getScaleForId(a.xAxisID),t._yScale=i.getScaleForId(a.yAxisID),t._datasetIndex=i.index,t._index=e,t._model={backgroundColor:o.backgroundColor,borderColor:o.borderColor,borderSkipped:o.borderSkipped,borderWidth:o.borderWidth,datasetLabel:r.label,label:i.chart.data.labels[e]},H.isArray(r.data[e])&&(t._model.borderSkipped=null),i._updateElementGeometry(t,e,n,o),t.pivot()},_updateElementGeometry:function(t,e,n,i){var a=this,r=t._model,o=a._getValueScale(),s=o.getBasePixel(),l=o.isHorizontal(),u=a._ruler||a.getRuler(),d=a.calculateBarValuePixels(a.index,e,i),h=a.calculateBarIndexPixels(a.index,e,u,i);r.horizontal=l,r.base=n?s:d.base,r.x=l?n?s:d.head:h.center,r.y=l?h.center:n?s:d.head,r.height=l?h.size:void 0,r.width=l?void 0:h.size},_getStacks:function(t){var e,n,i=this._getIndexScale(),a=i._getMatchingVisibleMetas(this._type),r=i.options.stacked,o=a.length,s=[];for(e=0;e<o&&(n=a[e],(!1===r||-1===s.indexOf(n.stack)||void 0===r&&void 0===n.stack)&&s.push(n.stack),n.index!==t);++e);return s},getStackCount:function(){return this._getStacks().length},getStackIndex:function(t,e){var n=this._getStacks(t),i=void 0!==e?n.indexOf(e):-1;return-1===i?n.length-1:i},getRuler:function(){var t,e,n=this._getIndexScale(),i=[];for(t=0,e=this.getMeta().data.length;t<e;++t)i.push(n.getPixelForValue(null,t,this.index));return{pixels:i,start:n._startPixel,end:n._endPixel,stackCount:this.getStackCount(),scale:n}},calculateBarValuePixels:function(t,e,n){var i,a,r,o,s,l,u,d=this.chart,h=this._getValueScale(),c=h.isHorizontal(),f=d.data.datasets,g=h._getMatchingVisibleMetas(this._type),p=h._parseValue(f[t].data[e]),m=n.minBarLength,v=h.options.stacked,b=this.getMeta().stack,x=void 0===p.start?0:p.max>=0&&p.min>=0?p.min:p.max,y=void 0===p.start?p.end:p.max>=0&&p.min>=0?p.max-p.min:p.min-p.max,_=g.length;if(v||void 0===v&&void 0!==b)for(i=0;i<_&&(a=g[i]).index!==t;++i)a.stack===b&&(r=void 0===(u=h._parseValue(f[a.index].data[e])).start?u.end:u.min>=0&&u.max>=0?u.max:u.min,(p.min<0&&r<0||p.max>=0&&r>0)&&(x+=r));return o=h.getPixelForValue(x),l=(s=h.getPixelForValue(x+y))-o,void 0!==m&&Math.abs(l)<m&&(l=m,s=y>=0&&!c||y<0&&c?o-m:o+m),{size:l,base:o,head:s,center:s+l/2}},calculateBarIndexPixels:function(t,e,n,i){var a="flex"===i.barThickness?function(t,e,n){var i,a=e.pixels,r=a[t],o=t>0?a[t-1]:null,s=t<a.length-1?a[t+1]:null,l=n.categoryPercentage;return null===o&&(o=r-(null===s?e.end-e.start:s-r)),null===s&&(s=r+r-o),i=r-(r-Math.min(o,s))/2*l,{chunk:Math.abs(s-o)/2*l/e.stackCount,ratio:n.barPercentage,start:i}}(e,n,i):Dt(e,n,i),r=this.getStackIndex(t,this.getMeta().stack),o=a.start+a.chunk*r+a.chunk/2,s=Math.min(At(i.maxBarThickness,1/0),a.chunk*a.ratio);return{base:o-s/2,head:o+s/2,center:o,size:s}},draw:function(){var t=this.chart,e=this._getValueScale(),n=this.getMeta().data,i=this.getDataset(),a=n.length,r=0;for(H.canvas.clipArea(t.ctx,t.chartArea);r<a;++r){var o=e._parseValue(i.data[r]);isNaN(o.min)||isNaN(o.max)||n[r].draw()}H.canvas.unclipArea(t.ctx)},_resolveDataElementOptions:function(){var t=this,e=H.extend({},it.prototype._resolveDataElementOptions.apply(t,arguments)),n=t._getIndexScale().options,i=t._getValueScale().options;return e.barPercentage=At(n.barPercentage,e.barPercentage),e.barThickness=At(n.barThickness,e.barThickness),e.categoryPercentage=At(n.categoryPercentage,e.categoryPercentage),e.maxBarThickness=At(n.maxBarThickness,e.maxBarThickness),e.minBarLength=At(i.minBarLength,e.minBarLength),e}}),It=H.valueOrDefault,Ft=H.options.resolve;N._set("bubble",{hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-0"}],yAxes:[{type:"linear",position:"left",id:"y-axis-0"}]},tooltips:{callbacks:{title:function(){return""},label:function(t,e){var n=e.datasets[t.datasetIndex].label||"",i=e.datasets[t.datasetIndex].data[t.index];return n+": ("+t.xLabel+", "+t.yLabel+", "+i.r+")"}}}});var Ot=it.extend({dataElementType:kt.Point,_dataElementOptions:["backgroundColor","borderColor","borderWidth","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","hoverRadius","hitRadius","pointStyle","rotation"],update:function(t){var e=this,n=e.getMeta().data;H.each(n,(function(n,i){e.updateElement(n,i,t)}))},updateElement:function(t,e,n){var i=this,a=i.getMeta(),r=t.custom||{},o=i.getScaleForId(a.xAxisID),s=i.getScaleForId(a.yAxisID),l=i._resolveDataElementOptions(t,e),u=i.getDataset().data[e],d=i.index,h=n?o.getPixelForDecimal(.5):o.getPixelForValue("object"==typeof u?u:NaN,e,d),c=n?s.getBasePixel():s.getPixelForValue(u,e,d);t._xScale=o,t._yScale=s,t._options=l,t._datasetIndex=d,t._index=e,t._model={backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,hitRadius:l.hitRadius,pointStyle:l.pointStyle,rotation:l.rotation,radius:n?0:l.radius,skip:r.skip||isNaN(h)||isNaN(c),x:h,y:c},t.pivot()},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=It(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=It(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=It(n.hoverBorderWidth,n.borderWidth),e.radius=n.radius+n.hoverRadius},_resolveDataElementOptions:function(t,e){var n=this,i=n.chart,a=n.getDataset(),r=t.custom||{},o=a.data[e]||{},s=it.prototype._resolveDataElementOptions.apply(n,arguments),l={chart:i,dataIndex:e,dataset:a,datasetIndex:n.index};return n._cachedDataOpts===s&&(s=H.extend({},s)),s.radius=Ft([r.radius,o.r,n._config.radius,i.options.elements.point.radius],l,e),s}}),Lt=H.valueOrDefault,Rt=Math.PI,zt=2*Rt,Nt=Rt/2;N._set("doughnut",{animation:{animateRotate:!0,animateScale:!1},hover:{mode:"single"},legendCallback:function(t){var e,n,i,a=document.createElement("ul"),r=t.data,o=r.datasets,s=r.labels;if(a.setAttribute("class",t.id+"-legend"),o.length)for(e=0,n=o[0].data.length;e<n;++e)(i=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=o[0].backgroundColor[e],s[e]&&i.appendChild(document.createTextNode(s[e]));return a.outerHTML},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map((function(n,i){var a=t.getDatasetMeta(0),r=a.controller.getStyle(i);return{text:n,fillStyle:r.backgroundColor,strokeStyle:r.borderColor,lineWidth:r.borderWidth,hidden:isNaN(e.datasets[0].data[i])||a.data[i].hidden,index:i}})):[]}},onClick:function(t,e){var n,i,a,r=e.index,o=this.chart;for(n=0,i=(o.data.datasets||[]).length;n<i;++n)(a=o.getDatasetMeta(n)).data[r]&&(a.data[r].hidden=!a.data[r].hidden);o.update()}},cutoutPercentage:50,rotation:-Nt,circumference:zt,tooltips:{callbacks:{title:function(){return""},label:function(t,e){var n=e.labels[t.index],i=": "+e.datasets[t.datasetIndex].data[t.index];return H.isArray(n)?(n=n.slice())[0]+=i:n+=i,n}}}});var Bt=it.extend({dataElementType:kt.Arc,linkScales:H.noop,_dataElementOptions:["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"],getRingIndex:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&++e;return e},update:function(t){var e,n,i,a,r=this,o=r.chart,s=o.chartArea,l=o.options,u=1,d=1,h=0,c=0,f=r.getMeta(),g=f.data,p=l.cutoutPercentage/100||0,m=l.circumference,v=r._getRingWeight(r.index);if(m<zt){var b=l.rotation%zt,x=(b+=b>=Rt?-zt:b<-Rt?zt:0)+m,y=Math.cos(b),_=Math.sin(b),k=Math.cos(x),w=Math.sin(x),M=b<=0&&x>=0||x>=zt,S=b<=Nt&&x>=Nt||x>=zt+Nt,C=b<=-Nt&&x>=-Nt||x>=Rt+Nt,P=b===-Rt||x>=Rt?-1:Math.min(y,y*p,k,k*p),A=C?-1:Math.min(_,_*p,w,w*p),D=M?1:Math.max(y,y*p,k,k*p),T=S?1:Math.max(_,_*p,w,w*p);u=(D-P)/2,d=(T-A)/2,h=-(D+P)/2,c=-(T+A)/2}for(i=0,a=g.length;i<a;++i)g[i]._options=r._resolveDataElementOptions(g[i],i);for(o.borderWidth=r.getMaxBorderWidth(),e=(s.right-s.left-o.borderWidth)/u,n=(s.bottom-s.top-o.borderWidth)/d,o.outerRadius=Math.max(Math.min(e,n)/2,0),o.innerRadius=Math.max(o.outerRadius*p,0),o.radiusLength=(o.outerRadius-o.innerRadius)/(r._getVisibleDatasetWeightTotal()||1),o.offsetX=h*o.outerRadius,o.offsetY=c*o.outerRadius,f.total=r.calculateTotal(),r.outerRadius=o.outerRadius-o.radiusLength*r._getRingWeightOffset(r.index),r.innerRadius=Math.max(r.outerRadius-o.radiusLength*v,0),i=0,a=g.length;i<a;++i)r.updateElement(g[i],i,t)},updateElement:function(t,e,n){var i=this,a=i.chart,r=a.chartArea,o=a.options,s=o.animation,l=(r.left+r.right)/2,u=(r.top+r.bottom)/2,d=o.rotation,h=o.rotation,c=i.getDataset(),f=n&&s.animateRotate?0:t.hidden?0:i.calculateCircumference(c.data[e])*(o.circumference/zt),g=n&&s.animateScale?0:i.innerRadius,p=n&&s.animateScale?0:i.outerRadius,m=t._options||{};H.extend(t,{_datasetIndex:i.index,_index:e,_model:{backgroundColor:m.backgroundColor,borderColor:m.borderColor,borderWidth:m.borderWidth,borderAlign:m.borderAlign,x:l+a.offsetX,y:u+a.offsetY,startAngle:d,endAngle:h,circumference:f,outerRadius:p,innerRadius:g,label:H.valueAtIndexOrDefault(c.label,e,a.data.labels[e])}});var v=t._model;n&&s.animateRotate||(v.startAngle=0===e?o.rotation:i.getMeta().data[e-1]._model.endAngle,v.endAngle=v.startAngle+v.circumference),t.pivot()},calculateTotal:function(){var t,e=this.getDataset(),n=this.getMeta(),i=0;return H.each(n.data,(function(n,a){t=e.data[a],isNaN(t)||n.hidden||(i+=Math.abs(t))})),i},calculateCircumference:function(t){var e=this.getMeta().total;return e>0&&!isNaN(t)?zt*(Math.abs(t)/e):0},getMaxBorderWidth:function(t){var e,n,i,a,r,o,s,l,u=0,d=this.chart;if(!t)for(e=0,n=d.data.datasets.length;e<n;++e)if(d.isDatasetVisible(e)){t=(i=d.getDatasetMeta(e)).data,e!==this.index&&(r=i.controller);break}if(!t)return 0;for(e=0,n=t.length;e<n;++e)a=t[e],r?(r._configure(),o=r._resolveDataElementOptions(a,e)):o=a._options,"inner"!==o.borderAlign&&(s=o.borderWidth,u=(l=o.hoverBorderWidth)>(u=s>u?s:u)?l:u);return u},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=Lt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Lt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Lt(n.hoverBorderWidth,n.borderWidth)},_getRingWeightOffset:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&(e+=this._getRingWeight(n));return e},_getRingWeight:function(t){return Math.max(Lt(this.chart.data.datasets[t].weight,1),0)},_getVisibleDatasetWeightTotal:function(){return this._getRingWeightOffset(this.chart.data.datasets.length)}});N._set("horizontalBar",{hover:{mode:"index",axis:"y"},scales:{xAxes:[{type:"linear",position:"bottom"}],yAxes:[{type:"category",position:"left",offset:!0,gridLines:{offsetGridLines:!0}}]},elements:{rectangle:{borderSkipped:"left"}},tooltips:{mode:"index",axis:"y"}}),N._set("global",{datasets:{horizontalBar:{categoryPercentage:.8,barPercentage:.9}}});var Et=Tt.extend({_getValueScaleId:function(){return this.getMeta().xAxisID},_getIndexScaleId:function(){return this.getMeta().yAxisID}}),Wt=H.valueOrDefault,Vt=H.options.resolve,Ht=H.canvas._isPointInArea;function jt(t,e){var n=t&&t.options.ticks||{},i=n.reverse,a=void 0===n.min?e:0,r=void 0===n.max?e:0;return{start:i?r:a,end:i?a:r}}function qt(t,e,n){var i=n/2,a=jt(t,i),r=jt(e,i);return{top:r.end,right:a.end,bottom:r.start,left:a.start}}function Ut(t){var e,n,i,a;return H.isObject(t)?(e=t.top,n=t.right,i=t.bottom,a=t.left):e=n=i=a=t,{top:e,right:n,bottom:i,left:a}}N._set("line",{showLines:!0,spanGaps:!1,hover:{mode:"label"},scales:{xAxes:[{type:"category",id:"x-axis-0"}],yAxes:[{type:"linear",id:"y-axis-0"}]}});var Yt=it.extend({datasetElementType:kt.Line,dataElementType:kt.Point,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth","cubicInterpolationMode","fill"],_dataElementOptions:{backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},update:function(t){var e,n,i=this,a=i.getMeta(),r=a.dataset,o=a.data||[],s=i.chart.options,l=i._config,u=i._showLine=Wt(l.showLine,s.showLines);for(i._xScale=i.getScaleForId(a.xAxisID),i._yScale=i.getScaleForId(a.yAxisID),u&&(void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),r._scale=i._yScale,r._datasetIndex=i.index,r._children=o,r._model=i._resolveDatasetElementOptions(r),r.pivot()),e=0,n=o.length;e<n;++e)i.updateElement(o[e],e,t);for(u&&0!==r._model.tension&&i.updateBezierControlPoints(),e=0,n=o.length;e<n;++e)o[e].pivot()},updateElement:function(t,e,n){var i,a,r=this,o=r.getMeta(),s=t.custom||{},l=r.getDataset(),u=r.index,d=l.data[e],h=r._xScale,c=r._yScale,f=o.dataset._model,g=r._resolveDataElementOptions(t,e);i=h.getPixelForValue("object"==typeof d?d:NaN,e,u),a=n?c.getBasePixel():r.calculatePointY(d,e,u),t._xScale=h,t._yScale=c,t._options=g,t._datasetIndex=u,t._index=e,t._model={x:i,y:a,skip:s.skip||isNaN(i)||isNaN(a),radius:g.radius,pointStyle:g.pointStyle,rotation:g.rotation,backgroundColor:g.backgroundColor,borderColor:g.borderColor,borderWidth:g.borderWidth,tension:Wt(s.tension,f?f.tension:0),steppedLine:!!f&&f.steppedLine,hitRadius:g.hitRadius}},_resolveDatasetElementOptions:function(t){var e=this,n=e._config,i=t.custom||{},a=e.chart.options,r=a.elements.line,o=it.prototype._resolveDatasetElementOptions.apply(e,arguments);return o.spanGaps=Wt(n.spanGaps,a.spanGaps),o.tension=Wt(n.lineTension,r.tension),o.steppedLine=Vt([i.steppedLine,n.steppedLine,r.stepped]),o.clip=Ut(Wt(n.clip,qt(e._xScale,e._yScale,o.borderWidth))),o},calculatePointY:function(t,e,n){var i,a,r,o,s,l,u,d=this.chart,h=this._yScale,c=0,f=0;if(h.options.stacked){for(s=+h.getRightValue(t),u=(l=d._getSortedVisibleDatasetMetas()).length,i=0;i<u&&(r=l[i]).index!==n;++i)a=d.data.datasets[r.index],"line"===r.type&&r.yAxisID===h.id&&((o=+h.getRightValue(a.data[e]))<0?f+=o||0:c+=o||0);return s<0?h.getPixelForValue(f+s):h.getPixelForValue(c+s)}return h.getPixelForValue(t)},updateBezierControlPoints:function(){var t,e,n,i,a=this.chart,r=this.getMeta(),o=r.dataset._model,s=a.chartArea,l=r.data||[];function u(t,e,n){return Math.max(Math.min(t,n),e)}if(o.spanGaps&&(l=l.filter((function(t){return!t._model.skip}))),"monotone"===o.cubicInterpolationMode)H.splineCurveMonotone(l);else for(t=0,e=l.length;t<e;++t)n=l[t]._model,i=H.splineCurve(H.previousItem(l,t)._model,n,H.nextItem(l,t)._model,o.tension),n.controlPointPreviousX=i.previous.x,n.controlPointPreviousY=i.previous.y,n.controlPointNextX=i.next.x,n.controlPointNextY=i.next.y;if(a.options.elements.line.capBezierPoints)for(t=0,e=l.length;t<e;++t)n=l[t]._model,Ht(n,s)&&(t>0&&Ht(l[t-1]._model,s)&&(n.controlPointPreviousX=u(n.controlPointPreviousX,s.left,s.right),n.controlPointPreviousY=u(n.controlPointPreviousY,s.top,s.bottom)),t<l.length-1&&Ht(l[t+1]._model,s)&&(n.controlPointNextX=u(n.controlPointNextX,s.left,s.right),n.controlPointNextY=u(n.controlPointNextY,s.top,s.bottom)))},draw:function(){var t,e=this.chart,n=this.getMeta(),i=n.data||[],a=e.chartArea,r=e.canvas,o=0,s=i.length;for(this._showLine&&(t=n.dataset._model.clip,H.canvas.clipArea(e.ctx,{left:!1===t.left?0:a.left-t.left,right:!1===t.right?r.width:a.right+t.right,top:!1===t.top?0:a.top-t.top,bottom:!1===t.bottom?r.height:a.bottom+t.bottom}),n.dataset.draw(),H.canvas.unclipArea(e.ctx));o<s;++o)i[o].draw(a)},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Wt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Wt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Wt(n.hoverBorderWidth,n.borderWidth),e.radius=Wt(n.hoverRadius,n.radius)}}),Gt=H.options.resolve;N._set("polarArea",{scale:{type:"radialLinear",angleLines:{display:!1},gridLines:{circular:!0},pointLabels:{display:!1},ticks:{beginAtZero:!0}},animation:{animateRotate:!0,animateScale:!0},startAngle:-.5*Math.PI,legendCallback:function(t){var e,n,i,a=document.createElement("ul"),r=t.data,o=r.datasets,s=r.labels;if(a.setAttribute("class",t.id+"-legend"),o.length)for(e=0,n=o[0].data.length;e<n;++e)(i=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=o[0].backgroundColor[e],s[e]&&i.appendChild(document.createTextNode(s[e]));return a.outerHTML},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map((function(n,i){var a=t.getDatasetMeta(0),r=a.controller.getStyle(i);return{text:n,fillStyle:r.backgroundColor,strokeStyle:r.borderColor,lineWidth:r.borderWidth,hidden:isNaN(e.datasets[0].data[i])||a.data[i].hidden,index:i}})):[]}},onClick:function(t,e){var n,i,a,r=e.index,o=this.chart;for(n=0,i=(o.data.datasets||[]).length;n<i;++n)(a=o.getDatasetMeta(n)).data[r].hidden=!a.data[r].hidden;o.update()}},tooltips:{callbacks:{title:function(){return""},label:function(t,e){return e.labels[t.index]+": "+t.yLabel}}}});var Xt=it.extend({dataElementType:kt.Arc,linkScales:H.noop,_dataElementOptions:["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"],_getIndexScaleId:function(){return this.chart.scale.id},_getValueScaleId:function(){return this.chart.scale.id},update:function(t){var e,n,i,a=this,r=a.getDataset(),o=a.getMeta(),s=a.chart.options.startAngle||0,l=a._starts=[],u=a._angles=[],d=o.data;for(a._updateRadius(),o.count=a.countVisibleElements(),e=0,n=r.data.length;e<n;e++)l[e]=s,i=a._computeAngle(e),u[e]=i,s+=i;for(e=0,n=d.length;e<n;++e)d[e]._options=a._resolveDataElementOptions(d[e],e),a.updateElement(d[e],e,t)},_updateRadius:function(){var t=this,e=t.chart,n=e.chartArea,i=e.options,a=Math.min(n.right-n.left,n.bottom-n.top);e.outerRadius=Math.max(a/2,0),e.innerRadius=Math.max(i.cutoutPercentage?e.outerRadius/100*i.cutoutPercentage:1,0),e.radiusLength=(e.outerRadius-e.innerRadius)/e.getVisibleDatasetCount(),t.outerRadius=e.outerRadius-e.radiusLength*t.index,t.innerRadius=t.outerRadius-e.radiusLength},updateElement:function(t,e,n){var i=this,a=i.chart,r=i.getDataset(),o=a.options,s=o.animation,l=a.scale,u=a.data.labels,d=l.xCenter,h=l.yCenter,c=o.startAngle,f=t.hidden?0:l.getDistanceFromCenterForValue(r.data[e]),g=i._starts[e],p=g+(t.hidden?0:i._angles[e]),m=s.animateScale?0:l.getDistanceFromCenterForValue(r.data[e]),v=t._options||{};H.extend(t,{_datasetIndex:i.index,_index:e,_scale:l,_model:{backgroundColor:v.backgroundColor,borderColor:v.borderColor,borderWidth:v.borderWidth,borderAlign:v.borderAlign,x:d,y:h,innerRadius:0,outerRadius:n?m:f,startAngle:n&&s.animateRotate?c:g,endAngle:n&&s.animateRotate?c:p,label:H.valueAtIndexOrDefault(u,e,u[e])}}),t.pivot()},countVisibleElements:function(){var t=this.getDataset(),e=this.getMeta(),n=0;return H.each(e.data,(function(e,i){isNaN(t.data[i])||e.hidden||n++})),n},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor,a=H.valueOrDefault;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=a(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=a(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=a(n.hoverBorderWidth,n.borderWidth)},_computeAngle:function(t){var e=this,n=this.getMeta().count,i=e.getDataset(),a=e.getMeta();if(isNaN(i.data[t])||a.data[t].hidden)return 0;var r={chart:e.chart,dataIndex:t,dataset:i,datasetIndex:e.index};return Gt([e.chart.options.elements.arc.angle,2*Math.PI/n],r,t)}});N._set("pie",H.clone(N.doughnut)),N._set("pie",{cutoutPercentage:0});var Kt=Bt,Zt=H.valueOrDefault;N._set("radar",{spanGaps:!1,scale:{type:"radialLinear"},elements:{line:{fill:"start",tension:0}}});var $t=it.extend({datasetElementType:kt.Line,dataElementType:kt.Point,linkScales:H.noop,_datasetElementOptions:["backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","fill"],_dataElementOptions:{backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},_getIndexScaleId:function(){return this.chart.scale.id},_getValueScaleId:function(){return this.chart.scale.id},update:function(t){var e,n,i=this,a=i.getMeta(),r=a.dataset,o=a.data||[],s=i.chart.scale,l=i._config;for(void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),r._scale=s,r._datasetIndex=i.index,r._children=o,r._loop=!0,r._model=i._resolveDatasetElementOptions(r),r.pivot(),e=0,n=o.length;e<n;++e)i.updateElement(o[e],e,t);for(i.updateBezierControlPoints(),e=0,n=o.length;e<n;++e)o[e].pivot()},updateElement:function(t,e,n){var i=this,a=t.custom||{},r=i.getDataset(),o=i.chart.scale,s=o.getPointPositionForValue(e,r.data[e]),l=i._resolveDataElementOptions(t,e),u=i.getMeta().dataset._model,d=n?o.xCenter:s.x,h=n?o.yCenter:s.y;t._scale=o,t._options=l,t._datasetIndex=i.index,t._index=e,t._model={x:d,y:h,skip:a.skip||isNaN(d)||isNaN(h),radius:l.radius,pointStyle:l.pointStyle,rotation:l.rotation,backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,tension:Zt(a.tension,u?u.tension:0),hitRadius:l.hitRadius}},_resolveDatasetElementOptions:function(){var t=this,e=t._config,n=t.chart.options,i=it.prototype._resolveDatasetElementOptions.apply(t,arguments);return i.spanGaps=Zt(e.spanGaps,n.spanGaps),i.tension=Zt(e.lineTension,n.elements.line.tension),i},updateBezierControlPoints:function(){var t,e,n,i,a=this.getMeta(),r=this.chart.chartArea,o=a.data||[];function s(t,e,n){return Math.max(Math.min(t,n),e)}for(a.dataset._model.spanGaps&&(o=o.filter((function(t){return!t._model.skip}))),t=0,e=o.length;t<e;++t)n=o[t]._model,i=H.splineCurve(H.previousItem(o,t,!0)._model,n,H.nextItem(o,t,!0)._model,n.tension),n.controlPointPreviousX=s(i.previous.x,r.left,r.right),n.controlPointPreviousY=s(i.previous.y,r.top,r.bottom),n.controlPointNextX=s(i.next.x,r.left,r.right),n.controlPointNextY=s(i.next.y,r.top,r.bottom)},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Zt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Zt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Zt(n.hoverBorderWidth,n.borderWidth),e.radius=Zt(n.hoverRadius,n.radius)}});N._set("scatter",{hover:{mode:"single"},scales:{xAxes:[{id:"x-axis-1",type:"linear",position:"bottom"}],yAxes:[{id:"y-axis-1",type:"linear",position:"left"}]},tooltips:{callbacks:{title:function(){return""},label:function(t){return"("+t.xLabel+", "+t.yLabel+")"}}}}),N._set("global",{datasets:{scatter:{showLine:!1}}});var Jt={bar:Tt,bubble:Ot,doughnut:Bt,horizontalBar:Et,line:Yt,polarArea:Xt,pie:Kt,radar:$t,scatter:Yt};function Qt(t,e){return t.native?{x:t.x,y:t.y}:H.getRelativePosition(t,e)}function te(t,e){var n,i,a,r,o,s,l=t._getSortedVisibleDatasetMetas();for(i=0,r=l.length;i<r;++i)for(a=0,o=(n=l[i].data).length;a<o;++a)(s=n[a])._view.skip||e(s)}function ee(t,e){var n=[];return te(t,(function(t){t.inRange(e.x,e.y)&&n.push(t)})),n}function ne(t,e,n,i){var a=Number.POSITIVE_INFINITY,r=[];return te(t,(function(t){if(!n||t.inRange(e.x,e.y)){var o=t.getCenterPoint(),s=i(e,o);s<a?(r=[t],a=s):s===a&&r.push(t)}})),r}function ie(t){var e=-1!==t.indexOf("x"),n=-1!==t.indexOf("y");return function(t,i){var a=e?Math.abs(t.x-i.x):0,r=n?Math.abs(t.y-i.y):0;return Math.sqrt(Math.pow(a,2)+Math.pow(r,2))}}function ae(t,e,n){var i=Qt(e,t);n.axis=n.axis||"x";var a=ie(n.axis),r=n.intersect?ee(t,i):ne(t,i,!1,a),o=[];return r.length?(t._getSortedVisibleDatasetMetas().forEach((function(t){var e=t.data[r[0]._index];e&&!e._view.skip&&o.push(e)})),o):[]}var re={modes:{single:function(t,e){var n=Qt(e,t),i=[];return te(t,(function(t){if(t.inRange(n.x,n.y))return i.push(t),i})),i.slice(0,1)},label:ae,index:ae,dataset:function(t,e,n){var i=Qt(e,t);n.axis=n.axis||"xy";var a=ie(n.axis),r=n.intersect?ee(t,i):ne(t,i,!1,a);return r.length>0&&(r=t.getDatasetMeta(r[0]._datasetIndex).data),r},"x-axis":function(t,e){return ae(t,e,{intersect:!1})},point:function(t,e){return ee(t,Qt(e,t))},nearest:function(t,e,n){var i=Qt(e,t);n.axis=n.axis||"xy";var a=ie(n.axis);return ne(t,i,n.intersect,a)},x:function(t,e,n){var i=Qt(e,t),a=[],r=!1;return te(t,(function(t){t.inXRange(i.x)&&a.push(t),t.inRange(i.x,i.y)&&(r=!0)})),n.intersect&&!r&&(a=[]),a},y:function(t,e,n){var i=Qt(e,t),a=[],r=!1;return te(t,(function(t){t.inYRange(i.y)&&a.push(t),t.inRange(i.x,i.y)&&(r=!0)})),n.intersect&&!r&&(a=[]),a}}},oe=H.extend;function se(t,e){return H.where(t,(function(t){return t.pos===e}))}function le(t,e){return t.sort((function(t,n){var i=e?n:t,a=e?t:n;return i.weight===a.weight?i.index-a.index:i.weight-a.weight}))}function ue(t,e,n,i){return Math.max(t[n],e[n])+Math.max(t[i],e[i])}function de(t,e,n){var i,a,r=n.box,o=t.maxPadding;if(n.size&&(t[n.pos]-=n.size),n.size=n.horizontal?r.height:r.width,t[n.pos]+=n.size,r.getPadding){var s=r.getPadding();o.top=Math.max(o.top,s.top),o.left=Math.max(o.left,s.left),o.bottom=Math.max(o.bottom,s.bottom),o.right=Math.max(o.right,s.right)}if(i=e.outerWidth-ue(o,t,"left","right"),a=e.outerHeight-ue(o,t,"top","bottom"),i!==t.w||a!==t.h){t.w=i,t.h=a;var l=n.horizontal?[i,t.w]:[a,t.h];return!(l[0]===l[1]||isNaN(l[0])&&isNaN(l[1]))}}function he(t,e){var n=e.maxPadding;function i(t){var i={left:0,top:0,right:0,bottom:0};return t.forEach((function(t){i[t]=Math.max(e[t],n[t])})),i}return i(t?["left","right"]:["top","bottom"])}function ce(t,e,n){var i,a,r,o,s,l,u=[];for(i=0,a=t.length;i<a;++i)(o=(r=t[i]).box).update(r.width||e.w,r.height||e.h,he(r.horizontal,e)),de(e,n,r)&&(l=!0,u.length&&(s=!0)),o.fullWidth||u.push(r);return s&&ce(u,e,n)||l}function fe(t,e,n){var i,a,r,o,s=n.padding,l=e.x,u=e.y;for(i=0,a=t.length;i<a;++i)o=(r=t[i]).box,r.horizontal?(o.left=o.fullWidth?s.left:e.left,o.right=o.fullWidth?n.outerWidth-s.right:e.left+e.w,o.top=u,o.bottom=u+o.height,o.width=o.right-o.left,u=o.bottom):(o.left=l,o.right=l+o.width,o.top=e.top,o.bottom=e.top+e.h,o.height=o.bottom-o.top,l=o.right);e.x=l,e.y=u}N._set("global",{layout:{padding:{top:0,right:0,bottom:0,left:0}}});var ge,pe={defaults:{},addBox:function(t,e){t.boxes||(t.boxes=[]),e.fullWidth=e.fullWidth||!1,e.position=e.position||"top",e.weight=e.weight||0,e._layers=e._layers||function(){return[{z:0,draw:function(){e.draw.apply(e,arguments)}}]},t.boxes.push(e)},removeBox:function(t,e){var n=t.boxes?t.boxes.indexOf(e):-1;-1!==n&&t.boxes.splice(n,1)},configure:function(t,e,n){for(var i,a=["fullWidth","position","weight"],r=a.length,o=0;o<r;++o)i=a[o],n.hasOwnProperty(i)&&(e[i]=n[i])},update:function(t,e,n){if(t){var i=t.options.layout||{},a=H.options.toPadding(i.padding),r=e-a.width,o=n-a.height,s=function(t){var e=function(t){var e,n,i,a=[];for(e=0,n=(t||[]).length;e<n;++e)i=t[e],a.push({index:e,box:i,pos:i.position,horizontal:i.isHorizontal(),weight:i.weight});return a}(t),n=le(se(e,"left"),!0),i=le(se(e,"right")),a=le(se(e,"top"),!0),r=le(se(e,"bottom"));return{leftAndTop:n.concat(a),rightAndBottom:i.concat(r),chartArea:se(e,"chartArea"),vertical:n.concat(i),horizontal:a.concat(r)}}(t.boxes),l=s.vertical,u=s.horizontal,d=Object.freeze({outerWidth:e,outerHeight:n,padding:a,availableWidth:r,vBoxMaxWidth:r/2/l.length,hBoxMaxHeight:o/2}),h=oe({maxPadding:oe({},a),w:r,h:o,x:a.left,y:a.top},a);!function(t,e){var n,i,a;for(n=0,i=t.length;n<i;++n)(a=t[n]).width=a.horizontal?a.box.fullWidth&&e.availableWidth:e.vBoxMaxWidth,a.height=a.horizontal&&e.hBoxMaxHeight}(l.concat(u),d),ce(l,h,d),ce(u,h,d)&&ce(l,h,d),function(t){var e=t.maxPadding;function n(n){var i=Math.max(e[n]-t[n],0);return t[n]+=i,i}t.y+=n("top"),t.x+=n("left"),n("right"),n("bottom")}(h),fe(s.leftAndTop,h,d),h.x+=h.w,h.y+=h.h,fe(s.rightAndBottom,h,d),t.chartArea={left:h.left,top:h.top,right:h.left+h.w,bottom:h.top+h.h},H.each(s.chartArea,(function(e){var n=e.box;oe(n,t.chartArea),n.update(h.w,h.h)}))}}},me=(ge=Object.freeze({__proto__:null,default:"@keyframes chartjs-render-animation{from{opacity:.99}to{opacity:1}}.chartjs-render-monitor{animation:chartjs-render-animation 1ms}.chartjs-size-monitor,.chartjs-size-monitor-expand,.chartjs-size-monitor-shrink{position:absolute;direction:ltr;left:0;top:0;right:0;bottom:0;overflow:hidden;pointer-events:none;visibility:hidden;z-index:-1}.chartjs-size-monitor-expand>div{position:absolute;width:1000000px;height:1000000px;left:0;top:0}.chartjs-size-monitor-shrink>div{position:absolute;width:200%;height:200%;left:0;top:0}"}))&&ge.default||ge,ve="$chartjs",be="chartjs-size-monitor",xe="chartjs-render-monitor",ye="chartjs-render-animation",_e=["animationstart","webkitAnimationStart"],ke={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"};function we(t,e){var n=H.getStyle(t,e),i=n&&n.match(/^(\d+)(\.\d+)?px$/);return i?Number(i[1]):void 0}var Me=!!function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("e",null,e)}catch(t){}return t}()&&{passive:!0};function Se(t,e,n){t.addEventListener(e,n,Me)}function Ce(t,e,n){t.removeEventListener(e,n,Me)}function Pe(t,e,n,i,a){return{type:t,chart:e,native:a||null,x:void 0!==n?n:null,y:void 0!==i?i:null}}function Ae(t){var e=document.createElement("div");return e.className=t||"",e}function De(t,e,n){var i,a,r,o,s=t[ve]||(t[ve]={}),l=s.resizer=function(t){var e=Ae(be),n=Ae(be+"-expand"),i=Ae(be+"-shrink");n.appendChild(Ae()),i.appendChild(Ae()),e.appendChild(n),e.appendChild(i),e._reset=function(){n.scrollLeft=1e6,n.scrollTop=1e6,i.scrollLeft=1e6,i.scrollTop=1e6};var a=function(){e._reset(),t()};return Se(n,"scroll",a.bind(n,"expand")),Se(i,"scroll",a.bind(i,"shrink")),e}((i=function(){if(s.resizer){var i=n.options.maintainAspectRatio&&t.parentNode,a=i?i.clientWidth:0;e(Pe("resize",n)),i&&i.clientWidth<a&&n.canvas&&e(Pe("resize",n))}},r=!1,o=[],function(){o=Array.prototype.slice.call(arguments),a=a||this,r||(r=!0,H.requestAnimFrame.call(window,(function(){r=!1,i.apply(a,o)})))}));!function(t,e){var n=t[ve]||(t[ve]={}),i=n.renderProxy=function(t){t.animationName===ye&&e()};H.each(_e,(function(e){Se(t,e,i)})),n.reflow=!!t.offsetParent,t.classList.add(xe)}(t,(function(){if(s.resizer){var e=t.parentNode;e&&e!==l.parentNode&&e.insertBefore(l,e.firstChild),l._reset()}}))}function Te(t){var e=t[ve]||{},n=e.resizer;delete e.resizer,function(t){var e=t[ve]||{},n=e.renderProxy;n&&(H.each(_e,(function(e){Ce(t,e,n)})),delete e.renderProxy),t.classList.remove(xe)}(t),n&&n.parentNode&&n.parentNode.removeChild(n)}var Ie={disableCSSInjection:!1,_enabled:"undefined"!=typeof window&&"undefined"!=typeof document,_ensureLoaded:function(t){if(!this.disableCSSInjection){var e=t.getRootNode?t.getRootNode():document;!function(t,e){var n=t[ve]||(t[ve]={});if(!n.containsStyles){n.containsStyles=!0,e="/* Chart.js */\n"+e;var i=document.createElement("style");i.setAttribute("type","text/css"),i.appendChild(document.createTextNode(e)),t.appendChild(i)}}(e.host?e:document.head,me)}},acquireContext:function(t,e){"string"==typeof t?t=document.getElementById(t):t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas);var n=t&&t.getContext&&t.getContext("2d");return n&&n.canvas===t?(this._ensureLoaded(t),function(t,e){var n=t.style,i=t.getAttribute("height"),a=t.getAttribute("width");if(t[ve]={initial:{height:i,width:a,style:{display:n.display,height:n.height,width:n.width}}},n.display=n.display||"block",null===a||""===a){var r=we(t,"width");void 0!==r&&(t.width=r)}if(null===i||""===i)if(""===t.style.height)t.height=t.width/(e.options.aspectRatio||2);else{var o=we(t,"height");void 0!==r&&(t.height=o)}}(t,e),n):null},releaseContext:function(t){var e=t.canvas;if(e[ve]){var n=e[ve].initial;["height","width"].forEach((function(t){var i=n[t];H.isNullOrUndef(i)?e.removeAttribute(t):e.setAttribute(t,i)})),H.each(n.style||{},(function(t,n){e.style[n]=t})),e.width=e.width,delete e[ve]}},addEventListener:function(t,e,n){var i=t.canvas;if("resize"!==e){var a=n[ve]||(n[ve]={});Se(i,e,(a.proxies||(a.proxies={}))[t.id+"_"+e]=function(e){n(function(t,e){var n=ke[t.type]||t.type,i=H.getRelativePosition(t,e);return Pe(n,e,i.x,i.y,t)}(e,t))})}else De(i,n,t)},removeEventListener:function(t,e,n){var i=t.canvas;if("resize"!==e){var a=((n[ve]||{}).proxies||{})[t.id+"_"+e];a&&Ce(i,e,a)}else Te(i)}};H.addEvent=Se,H.removeEvent=Ce;var Fe=Ie._enabled?Ie:{acquireContext:function(t){return t&&t.canvas&&(t=t.canvas),t&&t.getContext("2d")||null}},Oe=H.extend({initialize:function(){},acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}},Fe);N._set("global",{plugins:{}});var Le={_plugins:[],_cacheId:0,register:function(t){var e=this._plugins;[].concat(t).forEach((function(t){-1===e.indexOf(t)&&e.push(t)})),this._cacheId++},unregister:function(t){var e=this._plugins;[].concat(t).forEach((function(t){var n=e.indexOf(t);-1!==n&&e.splice(n,1)})),this._cacheId++},clear:function(){this._plugins=[],this._cacheId++},count:function(){return this._plugins.length},getAll:function(){return this._plugins},notify:function(t,e,n){var i,a,r,o,s,l=this.descriptors(t),u=l.length;for(i=0;i<u;++i)if("function"==typeof(s=(r=(a=l[i]).plugin)[e])&&((o=[t].concat(n||[])).push(a.options),!1===s.apply(r,o)))return!1;return!0},descriptors:function(t){var e=t.$plugins||(t.$plugins={});if(e.id===this._cacheId)return e.descriptors;var n=[],i=[],a=t&&t.config||{},r=a.options&&a.options.plugins||{};return this._plugins.concat(a.plugins||[]).forEach((function(t){if(-1===n.indexOf(t)){var e=t.id,a=r[e];!1!==a&&(!0===a&&(a=H.clone(N.global.plugins[e])),n.push(t),i.push({plugin:t,options:a||{}}))}})),e.descriptors=i,e.id=this._cacheId,i},_invalidate:function(t){delete t.$plugins}},Re={constructors:{},defaults:{},registerScaleType:function(t,e,n){this.constructors[t]=e,this.defaults[t]=H.clone(n)},getScaleConstructor:function(t){return this.constructors.hasOwnProperty(t)?this.constructors[t]:void 0},getScaleDefaults:function(t){return this.defaults.hasOwnProperty(t)?H.merge(Object.create(null),[N.scale,this.defaults[t]]):{}},updateScaleDefaults:function(t,e){this.defaults.hasOwnProperty(t)&&(this.defaults[t]=H.extend(this.defaults[t],e))},addScalesToLayout:function(t){H.each(t.scales,(function(e){e.fullWidth=e.options.fullWidth,e.position=e.options.position,e.weight=e.options.weight,pe.addBox(t,e)}))}},ze=H.valueOrDefault,Ne=H.rtl.getRtlAdapter;N._set("global",{tooltips:{enabled:!0,custom:null,mode:"nearest",position:"average",intersect:!0,backgroundColor:"rgba(0,0,0,0.8)",titleFontStyle:"bold",titleSpacing:2,titleMarginBottom:6,titleFontColor:"#fff",titleAlign:"left",bodySpacing:2,bodyFontColor:"#fff",bodyAlign:"left",footerFontStyle:"bold",footerSpacing:2,footerMarginTop:6,footerFontColor:"#fff",footerAlign:"left",yPadding:6,xPadding:6,caretPadding:2,caretSize:5,cornerRadius:6,multiKeyBackground:"#fff",displayColors:!0,borderColor:"rgba(0,0,0,0)",borderWidth:0,callbacks:{beforeTitle:H.noop,title:function(t,e){var n="",i=e.labels,a=i?i.length:0;if(t.length>0){var r=t[0];r.label?n=r.label:r.xLabel?n=r.xLabel:a>0&&r.index<a&&(n=i[r.index])}return n},afterTitle:H.noop,beforeBody:H.noop,beforeLabel:H.noop,label:function(t,e){var n=e.datasets[t.datasetIndex].label||"";return n&&(n+=": "),H.isNullOrUndef(t.value)?n+=t.yLabel:n+=t.value,n},labelColor:function(t,e){var n=e.getDatasetMeta(t.datasetIndex).data[t.index]._view;return{borderColor:n.borderColor,backgroundColor:n.backgroundColor}},labelTextColor:function(){return this._options.bodyFontColor},afterLabel:H.noop,afterBody:H.noop,beforeFooter:H.noop,footer:H.noop,afterFooter:H.noop}}});var Be={average:function(t){if(!t.length)return!1;var e,n,i=0,a=0,r=0;for(e=0,n=t.length;e<n;++e){var o=t[e];if(o&&o.hasValue()){var s=o.tooltipPosition();i+=s.x,a+=s.y,++r}}return{x:i/r,y:a/r}},nearest:function(t,e){var n,i,a,r=e.x,o=e.y,s=Number.POSITIVE_INFINITY;for(n=0,i=t.length;n<i;++n){var l=t[n];if(l&&l.hasValue()){var u=l.getCenterPoint(),d=H.distanceBetweenPoints(e,u);d<s&&(s=d,a=l)}}if(a){var h=a.tooltipPosition();r=h.x,o=h.y}return{x:r,y:o}}};function Ee(t,e){return e&&(H.isArray(e)?Array.prototype.push.apply(t,e):t.push(e)),t}function We(t){return("string"==typeof t||t instanceof String)&&t.indexOf("\n")>-1?t.split("\n"):t}function Ve(t){var e=N.global;return{xPadding:t.xPadding,yPadding:t.yPadding,xAlign:t.xAlign,yAlign:t.yAlign,rtl:t.rtl,textDirection:t.textDirection,bodyFontColor:t.bodyFontColor,_bodyFontFamily:ze(t.bodyFontFamily,e.defaultFontFamily),_bodyFontStyle:ze(t.bodyFontStyle,e.defaultFontStyle),_bodyAlign:t.bodyAlign,bodyFontSize:ze(t.bodyFontSize,e.defaultFontSize),bodySpacing:t.bodySpacing,titleFontColor:t.titleFontColor,_titleFontFamily:ze(t.titleFontFamily,e.defaultFontFamily),_titleFontStyle:ze(t.titleFontStyle,e.defaultFontStyle),titleFontSize:ze(t.titleFontSize,e.defaultFontSize),_titleAlign:t.titleAlign,titleSpacing:t.titleSpacing,titleMarginBottom:t.titleMarginBottom,footerFontColor:t.footerFontColor,_footerFontFamily:ze(t.footerFontFamily,e.defaultFontFamily),_footerFontStyle:ze(t.footerFontStyle,e.defaultFontStyle),footerFontSize:ze(t.footerFontSize,e.defaultFontSize),_footerAlign:t.footerAlign,footerSpacing:t.footerSpacing,footerMarginTop:t.footerMarginTop,caretSize:t.caretSize,cornerRadius:t.cornerRadius,backgroundColor:t.backgroundColor,opacity:0,legendColorBackground:t.multiKeyBackground,displayColors:t.displayColors,borderColor:t.borderColor,borderWidth:t.borderWidth}}function He(t,e){return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-t.xPadding:t.x+t.xPadding}function je(t){return Ee([],We(t))}var qe=K.extend({initialize:function(){this._model=Ve(this._options),this._lastActive=[]},getTitle:function(){var t=this,e=t._options,n=e.callbacks,i=n.beforeTitle.apply(t,arguments),a=n.title.apply(t,arguments),r=n.afterTitle.apply(t,arguments),o=[];return o=Ee(o,We(i)),o=Ee(o,We(a)),o=Ee(o,We(r))},getBeforeBody:function(){return je(this._options.callbacks.beforeBody.apply(this,arguments))},getBody:function(t,e){var n=this,i=n._options.callbacks,a=[];return H.each(t,(function(t){var r={before:[],lines:[],after:[]};Ee(r.before,We(i.beforeLabel.call(n,t,e))),Ee(r.lines,i.label.call(n,t,e)),Ee(r.after,We(i.afterLabel.call(n,t,e))),a.push(r)})),a},getAfterBody:function(){return je(this._options.callbacks.afterBody.apply(this,arguments))},getFooter:function(){var t=this,e=t._options.callbacks,n=e.beforeFooter.apply(t,arguments),i=e.footer.apply(t,arguments),a=e.afterFooter.apply(t,arguments),r=[];return r=Ee(r,We(n)),r=Ee(r,We(i)),r=Ee(r,We(a))},update:function(t){var e,n,i,a,r,o,s,l,u,d,h=this,c=h._options,f=h._model,g=h._model=Ve(c),p=h._active,m=h._data,v={xAlign:f.xAlign,yAlign:f.yAlign},b={x:f.x,y:f.y},x={width:f.width,height:f.height},y={x:f.caretX,y:f.caretY};if(p.length){g.opacity=1;var _=[],k=[];y=Be[c.position].call(h,p,h._eventPosition);var w=[];for(e=0,n=p.length;e<n;++e)w.push((i=p[e],a=void 0,r=void 0,o=void 0,s=void 0,l=void 0,u=void 0,d=void 0,a=i._xScale,r=i._yScale||i._scale,o=i._index,s=i._datasetIndex,l=i._chart.getDatasetMeta(s).controller,u=l._getIndexScale(),d=l._getValueScale(),{xLabel:a?a.getLabelForIndex(o,s):"",yLabel:r?r.getLabelForIndex(o,s):"",label:u?""+u.getLabelForIndex(o,s):"",value:d?""+d.getLabelForIndex(o,s):"",index:o,datasetIndex:s,x:i._model.x,y:i._model.y}));c.filter&&(w=w.filter((function(t){return c.filter(t,m)}))),c.itemSort&&(w=w.sort((function(t,e){return c.itemSort(t,e,m)}))),H.each(w,(function(t){_.push(c.callbacks.labelColor.call(h,t,h._chart)),k.push(c.callbacks.labelTextColor.call(h,t,h._chart))})),g.title=h.getTitle(w,m),g.beforeBody=h.getBeforeBody(w,m),g.body=h.getBody(w,m),g.afterBody=h.getAfterBody(w,m),g.footer=h.getFooter(w,m),g.x=y.x,g.y=y.y,g.caretPadding=c.caretPadding,g.labelColors=_,g.labelTextColors=k,g.dataPoints=w,x=function(t,e){var n=t._chart.ctx,i=2*e.yPadding,a=0,r=e.body,o=r.reduce((function(t,e){return t+e.before.length+e.lines.length+e.after.length}),0);o+=e.beforeBody.length+e.afterBody.length;var s=e.title.length,l=e.footer.length,u=e.titleFontSize,d=e.bodyFontSize,h=e.footerFontSize;i+=s*u,i+=s?(s-1)*e.titleSpacing:0,i+=s?e.titleMarginBottom:0,i+=o*d,i+=o?(o-1)*e.bodySpacing:0,i+=l?e.footerMarginTop:0,i+=l*h,i+=l?(l-1)*e.footerSpacing:0;var c=0,f=function(t){a=Math.max(a,n.measureText(t).width+c)};return n.font=H.fontString(u,e._titleFontStyle,e._titleFontFamily),H.each(e.title,f),n.font=H.fontString(d,e._bodyFontStyle,e._bodyFontFamily),H.each(e.beforeBody.concat(e.afterBody),f),c=e.displayColors?d+2:0,H.each(r,(function(t){H.each(t.before,f),H.each(t.lines,f),H.each(t.after,f)})),c=0,n.font=H.fontString(h,e._footerFontStyle,e._footerFontFamily),H.each(e.footer,f),{width:a+=2*e.xPadding,height:i}}(this,g),b=function(t,e,n,i){var a=t.x,r=t.y,o=t.caretSize,s=t.caretPadding,l=t.cornerRadius,u=n.xAlign,d=n.yAlign,h=o+s,c=l+s;return"right"===u?a-=e.width:"center"===u&&((a-=e.width/2)+e.width>i.width&&(a=i.width-e.width),a<0&&(a=0)),"top"===d?r+=h:r-="bottom"===d?e.height+h:e.height/2,"center"===d?"left"===u?a+=h:"right"===u&&(a-=h):"left"===u?a-=c:"right"===u&&(a+=c),{x:a,y:r}}(g,x,v=function(t,e){var n,i,a,r,o,s=t._model,l=t._chart,u=t._chart.chartArea,d="center",h="center";s.y<e.height?h="top":s.y>l.height-e.height&&(h="bottom");var c=(u.left+u.right)/2,f=(u.top+u.bottom)/2;"center"===h?(n=function(t){return t<=c},i=function(t){return t>c}):(n=function(t){return t<=e.width/2},i=function(t){return t>=l.width-e.width/2}),a=function(t){return t+e.width+s.caretSize+s.caretPadding>l.width},r=function(t){return t-e.width-s.caretSize-s.caretPadding<0},o=function(t){return t<=f?"top":"bottom"},n(s.x)?(d="left",a(s.x)&&(d="center",h=o(s.y))):i(s.x)&&(d="right",r(s.x)&&(d="center",h=o(s.y)));var g=t._options;return{xAlign:g.xAlign?g.xAlign:d,yAlign:g.yAlign?g.yAlign:h}}(this,x),h._chart)}else g.opacity=0;return g.xAlign=v.xAlign,g.yAlign=v.yAlign,g.x=b.x,g.y=b.y,g.width=x.width,g.height=x.height,g.caretX=y.x,g.caretY=y.y,h._model=g,t&&c.custom&&c.custom.call(h,g),h},drawCaret:function(t,e){var n=this._chart.ctx,i=this._view,a=this.getCaretPosition(t,e,i);n.lineTo(a.x1,a.y1),n.lineTo(a.x2,a.y2),n.lineTo(a.x3,a.y3)},getCaretPosition:function(t,e,n){var i,a,r,o,s,l,u=n.caretSize,d=n.cornerRadius,h=n.xAlign,c=n.yAlign,f=t.x,g=t.y,p=e.width,m=e.height;if("center"===c)s=g+m/2,"left"===h?(a=(i=f)-u,r=i,o=s+u,l=s-u):(a=(i=f+p)+u,r=i,o=s-u,l=s+u);else if("left"===h?(i=(a=f+d+u)-u,r=a+u):"right"===h?(i=(a=f+p-d-u)-u,r=a+u):(i=(a=n.caretX)-u,r=a+u),"top"===c)s=(o=g)-u,l=o;else{s=(o=g+m)+u,l=o;var v=r;r=i,i=v}return{x1:i,x2:a,x3:r,y1:o,y2:s,y3:l}},drawTitle:function(t,e,n){var i,a,r,o=e.title,s=o.length;if(s){var l=Ne(e.rtl,e.x,e.width);for(t.x=He(e,e._titleAlign),n.textAlign=l.textAlign(e._titleAlign),n.textBaseline="middle",i=e.titleFontSize,a=e.titleSpacing,n.fillStyle=e.titleFontColor,n.font=H.fontString(i,e._titleFontStyle,e._titleFontFamily),r=0;r<s;++r)n.fillText(o[r],l.x(t.x),t.y+i/2),t.y+=i+a,r+1===s&&(t.y+=e.titleMarginBottom-a)}},drawBody:function(t,e,n){var i,a,r,o,s,l,u,d,h=e.bodyFontSize,c=e.bodySpacing,f=e._bodyAlign,g=e.body,p=e.displayColors,m=0,v=p?He(e,"left"):0,b=Ne(e.rtl,e.x,e.width),x=function(e){n.fillText(e,b.x(t.x+m),t.y+h/2),t.y+=h+c},y=b.textAlign(f);for(n.textAlign=f,n.textBaseline="middle",n.font=H.fontString(h,e._bodyFontStyle,e._bodyFontFamily),t.x=He(e,y),n.fillStyle=e.bodyFontColor,H.each(e.beforeBody,x),m=p&&"right"!==y?"center"===f?h/2+1:h+2:0,s=0,u=g.length;s<u;++s){for(i=g[s],a=e.labelTextColors[s],r=e.labelColors[s],n.fillStyle=a,H.each(i.before,x),l=0,d=(o=i.lines).length;l<d;++l){if(p){var _=b.x(v);n.fillStyle=e.legendColorBackground,n.fillRect(b.leftForLtr(_,h),t.y,h,h),n.lineWidth=1,n.strokeStyle=r.borderColor,n.strokeRect(b.leftForLtr(_,h),t.y,h,h),n.fillStyle=r.backgroundColor,n.fillRect(b.leftForLtr(b.xPlus(_,1),h-2),t.y+1,h-2,h-2),n.fillStyle=a}x(o[l])}H.each(i.after,x)}m=0,H.each(e.afterBody,x),t.y-=c},drawFooter:function(t,e,n){var i,a,r=e.footer,o=r.length;if(o){var s=Ne(e.rtl,e.x,e.width);for(t.x=He(e,e._footerAlign),t.y+=e.footerMarginTop,n.textAlign=s.textAlign(e._footerAlign),n.textBaseline="middle",i=e.footerFontSize,n.fillStyle=e.footerFontColor,n.font=H.fontString(i,e._footerFontStyle,e._footerFontFamily),a=0;a<o;++a)n.fillText(r[a],s.x(t.x),t.y+i/2),t.y+=i+e.footerSpacing}},drawBackground:function(t,e,n,i){n.fillStyle=e.backgroundColor,n.strokeStyle=e.borderColor,n.lineWidth=e.borderWidth;var a=e.xAlign,r=e.yAlign,o=t.x,s=t.y,l=i.width,u=i.height,d=e.cornerRadius;n.beginPath(),n.moveTo(o+d,s),"top"===r&&this.drawCaret(t,i),n.lineTo(o+l-d,s),n.quadraticCurveTo(o+l,s,o+l,s+d),"center"===r&&"right"===a&&this.drawCaret(t,i),n.lineTo(o+l,s+u-d),n.quadraticCurveTo(o+l,s+u,o+l-d,s+u),"bottom"===r&&this.drawCaret(t,i),n.lineTo(o+d,s+u),n.quadraticCurveTo(o,s+u,o,s+u-d),"center"===r&&"left"===a&&this.drawCaret(t,i),n.lineTo(o,s+d),n.quadraticCurveTo(o,s,o+d,s),n.closePath(),n.fill(),e.borderWidth>0&&n.stroke()},draw:function(){var t=this._chart.ctx,e=this._view;if(0!==e.opacity){var n={width:e.width,height:e.height},i={x:e.x,y:e.y},a=Math.abs(e.opacity<.001)?0:e.opacity,r=e.title.length||e.beforeBody.length||e.body.length||e.afterBody.length||e.footer.length;this._options.enabled&&r&&(t.save(),t.globalAlpha=a,this.drawBackground(i,e,t,n),i.y+=e.yPadding,H.rtl.overrideTextDirection(t,e.textDirection),this.drawTitle(i,e,t),this.drawBody(i,e,t),this.drawFooter(i,e,t),H.rtl.restoreTextDirection(t,e.textDirection),t.restore())}},handleEvent:function(t){var e,n=this,i=n._options;return n._lastActive=n._lastActive||[],"mouseout"===t.type?n._active=[]:(n._active=n._chart.getElementsAtEventForMode(t,i.mode,i),i.reverse&&n._active.reverse()),(e=!H.arrayEquals(n._active,n._lastActive))&&(n._lastActive=n._active,(i.enabled||i.custom)&&(n._eventPosition={x:t.x,y:t.y},n.update(!0),n.pivot())),e}}),Ue=Be,Ye=qe;Ye.positioners=Ue;var Ge=H.valueOrDefault;function Xe(){return H.merge(Object.create(null),[].slice.call(arguments),{merger:function(t,e,n,i){if("xAxes"===t||"yAxes"===t){var a,r,o,s=n[t].length;for(e[t]||(e[t]=[]),a=0;a<s;++a)o=n[t][a],r=Ge(o.type,"xAxes"===t?"category":"linear"),a>=e[t].length&&e[t].push({}),!e[t][a].type||o.type&&o.type!==e[t][a].type?H.merge(e[t][a],[Re.getScaleDefaults(r),o]):H.merge(e[t][a],o)}else H._merger(t,e,n,i)}})}function Ke(){return H.merge(Object.create(null),[].slice.call(arguments),{merger:function(t,e,n,i){var a=e[t]||Object.create(null),r=n[t];"scales"===t?e[t]=Xe(a,r):"scale"===t?e[t]=H.merge(a,[Re.getScaleDefaults(r.type),r]):H._merger(t,e,n,i)}})}function Ze(t){var e=t.options;H.each(t.scales,(function(e){pe.removeBox(t,e)})),e=Ke(N.global,N[t.config.type],e),t.options=t.config.options=e,t.ensureScalesHaveIDs(),t.buildOrUpdateScales(),t.tooltip._options=e.tooltips,t.tooltip.initialize()}function $e(t,e,n){var i,a=function(t){return t.id===i};do{i=e+n++}while(H.findIndex(t,a)>=0);return i}function Je(t){return"top"===t||"bottom"===t}function Qe(t,e){return function(n,i){return n[t]===i[t]?n[e]-i[e]:n[t]-i[t]}}N._set("global",{elements:{},events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,maintainAspectRatio:!0,responsive:!0,responsiveAnimationDuration:0});var tn=function(t,e){return this.construct(t,e),this};H.extend(tn.prototype,{construct:function(t,e){var n=this;e=function(t){var e=(t=t||Object.create(null)).data=t.data||{};return e.datasets=e.datasets||[],e.labels=e.labels||[],t.options=Ke(N.global,N[t.type],t.options||{}),t}(e);var i=Oe.acquireContext(t,e),a=i&&i.canvas,r=a&&a.height,o=a&&a.width;n.id=H.uid(),n.ctx=i,n.canvas=a,n.config=e,n.width=o,n.height=r,n.aspectRatio=r?o/r:null,n.options=e.options,n._bufferedRender=!1,n._layers=[],n.chart=n,n.controller=n,tn.instances[n.id]=n,Object.defineProperty(n,"data",{get:function(){return n.config.data},set:function(t){n.config.data=t}}),i&&a?(n.initialize(),n.update()):console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var t=this;return Le.notify(t,"beforeInit"),H.retinaScale(t,t.options.devicePixelRatio),t.bindEvents(),t.options.responsive&&t.resize(!0),t.initToolTip(),Le.notify(t,"afterInit"),t},clear:function(){return H.canvas.clear(this),this},stop:function(){return J.cancelAnimation(this),this},resize:function(t){var e=this,n=e.options,i=e.canvas,a=n.maintainAspectRatio&&e.aspectRatio||null,r=Math.max(0,Math.floor(H.getMaximumWidth(i))),o=Math.max(0,Math.floor(a?r/a:H.getMaximumHeight(i)));if((e.width!==r||e.height!==o)&&(i.width=e.width=r,i.height=e.height=o,i.style.width=r+"px",i.style.height=o+"px",H.retinaScale(e,n.devicePixelRatio),!t)){var s={width:r,height:o};Le.notify(e,"resize",[s]),n.onResize&&n.onResize(e,s),e.stop(),e.update({duration:n.responsiveAnimationDuration})}},ensureScalesHaveIDs:function(){var t=this.options,e=t.scales||{},n=t.scale;H.each(e.xAxes,(function(t,n){t.id||(t.id=$e(e.xAxes,"x-axis-",n))})),H.each(e.yAxes,(function(t,n){t.id||(t.id=$e(e.yAxes,"y-axis-",n))})),n&&(n.id=n.id||"scale")},buildOrUpdateScales:function(){var t=this,e=t.options,n=t.scales||{},i=[],a=Object.keys(n).reduce((function(t,e){return t[e]=!1,t}),{});e.scales&&(i=i.concat((e.scales.xAxes||[]).map((function(t){return{options:t,dtype:"category",dposition:"bottom"}})),(e.scales.yAxes||[]).map((function(t){return{options:t,dtype:"linear",dposition:"left"}})))),e.scale&&i.push({options:e.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),H.each(i,(function(e){var i=e.options,r=i.id,o=Ge(i.type,e.dtype);Je(i.position)!==Je(e.dposition)&&(i.position=e.dposition),a[r]=!0;var s=null;if(r in n&&n[r].type===o)(s=n[r]).options=i,s.ctx=t.ctx,s.chart=t;else{var l=Re.getScaleConstructor(o);if(!l)return;s=new l({id:r,type:o,options:i,ctx:t.ctx,chart:t}),n[s.id]=s}s.mergeTicksOptions(),e.isDefault&&(t.scale=s)})),H.each(a,(function(t,e){t||delete n[e]})),t.scales=n,Re.addScalesToLayout(this)},buildOrUpdateControllers:function(){var t,e,n=this,i=[],a=n.data.datasets;for(t=0,e=a.length;t<e;t++){var r=a[t],o=n.getDatasetMeta(t),s=r.type||n.config.type;if(o.type&&o.type!==s&&(n.destroyDatasetMeta(t),o=n.getDatasetMeta(t)),o.type=s,o.order=r.order||0,o.index=t,o.controller)o.controller.updateIndex(t),o.controller.linkScales();else{var l=Jt[o.type];if(void 0===l)throw new Error('"'+o.type+'" is not a chart type.');o.controller=new l(n,t),i.push(o.controller)}}return i},resetElements:function(){var t=this;H.each(t.data.datasets,(function(e,n){t.getDatasetMeta(n).controller.reset()}),t)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(t){var e,n,i=this;if(t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]}),Ze(i),Le._invalidate(i),!1!==Le.notify(i,"beforeUpdate")){i.tooltip._data=i.data;var a=i.buildOrUpdateControllers();for(e=0,n=i.data.datasets.length;e<n;e++)i.getDatasetMeta(e).controller.buildOrUpdateElements();i.updateLayout(),i.options.animation&&i.options.animation.duration&&H.each(a,(function(t){t.reset()})),i.updateDatasets(),i.tooltip.initialize(),i.lastActive=[],Le.notify(i,"afterUpdate"),i._layers.sort(Qe("z","_idx")),i._bufferedRender?i._bufferedRequest={duration:t.duration,easing:t.easing,lazy:t.lazy}:i.render(t)}},updateLayout:function(){var t=this;!1!==Le.notify(t,"beforeLayout")&&(pe.update(this,this.width,this.height),t._layers=[],H.each(t.boxes,(function(e){e._configure&&e._configure(),t._layers.push.apply(t._layers,e._layers())}),t),t._layers.forEach((function(t,e){t._idx=e})),Le.notify(t,"afterScaleUpdate"),Le.notify(t,"afterLayout"))},updateDatasets:function(){if(!1!==Le.notify(this,"beforeDatasetsUpdate")){for(var t=0,e=this.data.datasets.length;t<e;++t)this.updateDataset(t);Le.notify(this,"afterDatasetsUpdate")}},updateDataset:function(t){var e=this.getDatasetMeta(t),n={meta:e,index:t};!1!==Le.notify(this,"beforeDatasetUpdate",[n])&&(e.controller._update(),Le.notify(this,"afterDatasetUpdate",[n]))},render:function(t){var e=this;t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]});var n=e.options.animation,i=Ge(t.duration,n&&n.duration),a=t.lazy;if(!1!==Le.notify(e,"beforeRender")){var r=function(t){Le.notify(e,"afterRender"),H.callback(n&&n.onComplete,[t],e)};if(n&&i){var o=new $({numSteps:i/16.66,easing:t.easing||n.easing,render:function(t,e){var n=H.easing.effects[e.easing],i=e.currentStep,a=i/e.numSteps;t.draw(n(a),a,i)},onAnimationProgress:n.onProgress,onAnimationComplete:r});J.addAnimation(e,o,i,a)}else e.draw(),r(new $({numSteps:0,chart:e}));return e}},draw:function(t){var e,n,i=this;if(i.clear(),H.isNullOrUndef(t)&&(t=1),i.transition(t),!(i.width<=0||i.height<=0)&&!1!==Le.notify(i,"beforeDraw",[t])){for(n=i._layers,e=0;e<n.length&&n[e].z<=0;++e)n[e].draw(i.chartArea);for(i.drawDatasets(t);e<n.length;++e)n[e].draw(i.chartArea);i._drawTooltip(t),Le.notify(i,"afterDraw",[t])}},transition:function(t){for(var e=0,n=(this.data.datasets||[]).length;e<n;++e)this.isDatasetVisible(e)&&this.getDatasetMeta(e).controller.transition(t);this.tooltip.transition(t)},_getSortedDatasetMetas:function(t){var e,n,i=[];for(e=0,n=(this.data.datasets||[]).length;e<n;++e)t&&!this.isDatasetVisible(e)||i.push(this.getDatasetMeta(e));return i.sort(Qe("order","index")),i},_getSortedVisibleDatasetMetas:function(){return this._getSortedDatasetMetas(!0)},drawDatasets:function(t){var e,n;if(!1!==Le.notify(this,"beforeDatasetsDraw",[t])){for(n=(e=this._getSortedVisibleDatasetMetas()).length-1;n>=0;--n)this.drawDataset(e[n],t);Le.notify(this,"afterDatasetsDraw",[t])}},drawDataset:function(t,e){var n={meta:t,index:t.index,easingValue:e};!1!==Le.notify(this,"beforeDatasetDraw",[n])&&(t.controller.draw(e),Le.notify(this,"afterDatasetDraw",[n]))},_drawTooltip:function(t){var e=this.tooltip,n={tooltip:e,easingValue:t};!1!==Le.notify(this,"beforeTooltipDraw",[n])&&(e.draw(),Le.notify(this,"afterTooltipDraw",[n]))},getElementAtEvent:function(t){return re.modes.single(this,t)},getElementsAtEvent:function(t){return re.modes.label(this,t,{intersect:!0})},getElementsAtXAxis:function(t){return re.modes["x-axis"](this,t,{intersect:!0})},getElementsAtEventForMode:function(t,e,n){var i=re.modes[e];return"function"==typeof i?i(this,t,n):[]},getDatasetAtEvent:function(t){return re.modes.dataset(this,t,{intersect:!0})},getDatasetMeta:function(t){var e=this.data.datasets[t];e._meta||(e._meta={});var n=e._meta[this.id];return n||(n=e._meta[this.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e.order||0,index:t}),n},getVisibleDatasetCount:function(){for(var t=0,e=0,n=this.data.datasets.length;e<n;++e)this.isDatasetVisible(e)&&t++;return t},isDatasetVisible:function(t){var e=this.getDatasetMeta(t);return"boolean"==typeof e.hidden?!e.hidden:!this.data.datasets[t].hidden},generateLegend:function(){return this.options.legendCallback(this)},destroyDatasetMeta:function(t){var e=this.id,n=this.data.datasets[t],i=n._meta&&n._meta[e];i&&(i.controller.destroy(),delete n._meta[e])},destroy:function(){var t,e,n=this,i=n.canvas;for(n.stop(),t=0,e=n.data.datasets.length;t<e;++t)n.destroyDatasetMeta(t);i&&(n.unbindEvents(),H.canvas.clear(n),Oe.releaseContext(n.ctx),n.canvas=null,n.ctx=null),Le.notify(n,"destroy"),delete tn.instances[n.id]},toBase64Image:function(){return this.canvas.toDataURL.apply(this.canvas,arguments)},initToolTip:function(){var t=this;t.tooltip=new Ye({_chart:t,_chartInstance:t,_data:t.data,_options:t.options.tooltips},t)},bindEvents:function(){var t=this,e=t._listeners={},n=function(){t.eventHandler.apply(t,arguments)};H.each(t.options.events,(function(i){Oe.addEventListener(t,i,n),e[i]=n})),t.options.responsive&&(n=function(){t.resize()},Oe.addEventListener(t,"resize",n),e.resize=n)},unbindEvents:function(){var t=this,e=t._listeners;e&&(delete t._listeners,H.each(e,(function(e,n){Oe.removeEventListener(t,n,e)})))},updateHoverStyle:function(t,e,n){var i,a,r,o=n?"set":"remove";for(a=0,r=t.length;a<r;++a)(i=t[a])&&this.getDatasetMeta(i._datasetIndex).controller[o+"HoverStyle"](i);"dataset"===e&&this.getDatasetMeta(t[0]._datasetIndex).controller["_"+o+"DatasetHoverStyle"]()},eventHandler:function(t){var e=this,n=e.tooltip;if(!1!==Le.notify(e,"beforeEvent",[t])){e._bufferedRender=!0,e._bufferedRequest=null;var i=e.handleEvent(t);n&&(i=n._start?n.handleEvent(t):i|n.handleEvent(t)),Le.notify(e,"afterEvent",[t]);var a=e._bufferedRequest;return a?e.render(a):i&&!e.animating&&(e.stop(),e.render({duration:e.options.hover.animationDuration,lazy:!0})),e._bufferedRender=!1,e._bufferedRequest=null,e}},handleEvent:function(t){var e,n=this,i=n.options||{},a=i.hover;return n.lastActive=n.lastActive||[],"mouseout"===t.type?n.active=[]:n.active=n.getElementsAtEventForMode(t,a.mode,a),H.callback(i.onHover||i.hover.onHover,[t.native,n.active],n),"mouseup"!==t.type&&"click"!==t.type||i.onClick&&i.onClick.call(n,t.native,n.active),n.lastActive.length&&n.updateHoverStyle(n.lastActive,a.mode,!1),n.active.length&&a.mode&&n.updateHoverStyle(n.active,a.mode,!0),e=!H.arrayEquals(n.active,n.lastActive),n.lastActive=n.active,e}}),tn.instances={};var en=tn;tn.Controller=tn,tn.types={},H.configMerge=Ke,H.scaleMerge=Xe;function nn(){throw new Error("This method is not implemented: either no adapter can be found or an incomplete integration was provided.")}function an(t){this.options=t||{}}H.extend(an.prototype,{formats:nn,parse:nn,format:nn,add:nn,diff:nn,startOf:nn,endOf:nn,_create:function(t){return t}}),an.override=function(t){H.extend(an.prototype,t)};var rn={_date:an},on={formatters:{values:function(t){return H.isArray(t)?t:""+t},linear:function(t,e,n){var i=n.length>3?n[2]-n[1]:n[1]-n[0];Math.abs(i)>1&&t!==Math.floor(t)&&(i=t-Math.floor(t));var a=H.log10(Math.abs(i)),r="";if(0!==t)if(Math.max(Math.abs(n[0]),Math.abs(n[n.length-1]))<1e-4){var o=H.log10(Math.abs(t)),s=Math.floor(o)-Math.floor(a);s=Math.max(Math.min(s,20),0),r=t.toExponential(s)}else{var l=-1*Math.floor(a);l=Math.max(Math.min(l,20),0),r=t.toFixed(l)}else r="0";return r},logarithmic:function(t,e,n){var i=t/Math.pow(10,Math.floor(H.log10(t)));return 0===t?"0":1===i||2===i||5===i||0===e||e===n.length-1?t.toExponential():""}}},sn=H.isArray,ln=H.isNullOrUndef,un=H.valueOrDefault,dn=H.valueAtIndexOrDefault;function hn(t,e,n){var i,a=t.getTicks().length,r=Math.min(e,a-1),o=t.getPixelForTick(r),s=t._startPixel,l=t._endPixel;if(!(n&&(i=1===a?Math.max(o-s,l-o):0===e?(t.getPixelForTick(1)-o)/2:(o-t.getPixelForTick(r-1))/2,(o+=r<e?i:-i)<s-1e-6||o>l+1e-6)))return o}function cn(t,e,n,i){var a,r,o,s,l,u,d,h,c,f,g,p,m,v=n.length,b=[],x=[],y=[],_=0,k=0;for(a=0;a<v;++a){if(s=n[a].label,l=n[a].major?e.major:e.minor,t.font=u=l.string,d=i[u]=i[u]||{data:{},gc:[]},h=l.lineHeight,c=f=0,ln(s)||sn(s)){if(sn(s))for(r=0,o=s.length;r<o;++r)g=s[r],ln(g)||sn(g)||(c=H.measureText(t,d.data,d.gc,c,g),f+=h)}else c=H.measureText(t,d.data,d.gc,c,s),f=h;b.push(c),x.push(f),y.push(h/2),_=Math.max(c,_),k=Math.max(f,k)}function w(t){return{width:b[t]||0,height:x[t]||0,offset:y[t]||0}}return function(t,e){H.each(t,(function(t){var n,i=t.gc,a=i.length/2;if(a>e){for(n=0;n<a;++n)delete t.data[i[n]];i.splice(0,a)}}))}(i,v),p=b.indexOf(_),m=x.indexOf(k),{first:w(0),last:w(v-1),widest:w(p),highest:w(m)}}function fn(t){return t.drawTicks?t.tickMarkLength:0}function gn(t){var e,n;return t.display?(e=H.options._parseFont(t),n=H.options.toPadding(t.padding),e.lineHeight+n.height):0}function pn(t,e){return H.extend(H.options._parseFont({fontFamily:un(e.fontFamily,t.fontFamily),fontSize:un(e.fontSize,t.fontSize),fontStyle:un(e.fontStyle,t.fontStyle),lineHeight:un(e.lineHeight,t.lineHeight)}),{color:H.options.resolve([e.fontColor,t.fontColor,N.global.defaultFontColor])})}function mn(t){var e=pn(t,t.minor);return{minor:e,major:t.major.enabled?pn(t,t.major):e}}function vn(t){var e,n,i,a=[];for(n=0,i=t.length;n<i;++n)void 0!==(e=t[n])._index&&a.push(e);return a}function bn(t,e,n,i){var a,r,o,s,l=un(n,0),u=Math.min(un(i,t.length),t.length),d=0;for(e=Math.ceil(e),i&&(e=(a=i-n)/Math.floor(a/e)),s=l;s<0;)d++,s=Math.round(l+d*e);for(r=Math.max(l,0);r<u;r++)o=t[r],r===s?(o._index=r,d++,s=Math.round(l+d*e)):delete o.label}N._set("scale",{display:!0,position:"left",offset:!1,gridLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:"rgba(0,0,0,0.25)",zeroLineBorderDash:[],zeroLineBorderDashOffset:0,offsetGridLines:!1,borderDash:[],borderDashOffset:0},scaleLabel:{display:!1,labelString:"",padding:{top:4,bottom:4}},ticks:{beginAtZero:!1,minRotation:0,maxRotation:50,mirror:!1,padding:0,reverse:!1,display:!0,autoSkip:!0,autoSkipPadding:0,labelOffset:0,callback:on.formatters.values,minor:{},major:{}}});var xn=K.extend({zeroLineIndex:0,getPadding:function(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}},getTicks:function(){return this._ticks},_getLabels:function(){var t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]},mergeTicksOptions:function(){},beforeUpdate:function(){H.callback(this.options.beforeUpdate,[this])},update:function(t,e,n){var i,a,r,o,s,l=this,u=l.options.ticks,d=u.sampleSize;if(l.beforeUpdate(),l.maxWidth=t,l.maxHeight=e,l.margins=H.extend({left:0,right:0,top:0,bottom:0},n),l._ticks=null,l.ticks=null,l._labelSizes=null,l._maxLabelLines=0,l.longestLabelWidth=0,l.longestTextCache=l.longestTextCache||{},l._gridLineItems=null,l._labelItems=null,l.beforeSetDimensions(),l.setDimensions(),l.afterSetDimensions(),l.beforeDataLimits(),l.determineDataLimits(),l.afterDataLimits(),l.beforeBuildTicks(),o=l.buildTicks()||[],(!(o=l.afterBuildTicks(o)||o)||!o.length)&&l.ticks)for(o=[],i=0,a=l.ticks.length;i<a;++i)o.push({value:l.ticks[i],major:!1});return l._ticks=o,s=d<o.length,r=l._convertTicksToLabels(s?function(t,e){for(var n=[],i=t.length/e,a=0,r=t.length;a<r;a+=i)n.push(t[Math.floor(a)]);return n}(o,d):o),l._configure(),l.beforeCalculateTickRotation(),l.calculateTickRotation(),l.afterCalculateTickRotation(),l.beforeFit(),l.fit(),l.afterFit(),l._ticksToDraw=u.display&&(u.autoSkip||"auto"===u.source)?l._autoSkip(o):o,s&&(r=l._convertTicksToLabels(l._ticksToDraw)),l.ticks=r,l.afterUpdate(),l.minSize},_configure:function(){var t,e,n=this,i=n.options.ticks.reverse;n.isHorizontal()?(t=n.left,e=n.right):(t=n.top,e=n.bottom,i=!i),n._startPixel=t,n._endPixel=e,n._reversePixels=i,n._length=e-t},afterUpdate:function(){H.callback(this.options.afterUpdate,[this])},beforeSetDimensions:function(){H.callback(this.options.beforeSetDimensions,[this])},setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0},afterSetDimensions:function(){H.callback(this.options.afterSetDimensions,[this])},beforeDataLimits:function(){H.callback(this.options.beforeDataLimits,[this])},determineDataLimits:H.noop,afterDataLimits:function(){H.callback(this.options.afterDataLimits,[this])},beforeBuildTicks:function(){H.callback(this.options.beforeBuildTicks,[this])},buildTicks:H.noop,afterBuildTicks:function(t){var e=this;return sn(t)&&t.length?H.callback(e.options.afterBuildTicks,[e,t]):(e.ticks=H.callback(e.options.afterBuildTicks,[e,e.ticks])||e.ticks,t)},beforeTickToLabelConversion:function(){H.callback(this.options.beforeTickToLabelConversion,[this])},convertTicksToLabels:function(){var t=this.options.ticks;this.ticks=this.ticks.map(t.userCallback||t.callback,this)},afterTickToLabelConversion:function(){H.callback(this.options.afterTickToLabelConversion,[this])},beforeCalculateTickRotation:function(){H.callback(this.options.beforeCalculateTickRotation,[this])},calculateTickRotation:function(){var t,e,n,i,a,r,o,s=this,l=s.options,u=l.ticks,d=s.getTicks().length,h=u.minRotation||0,c=u.maxRotation,f=h;!s._isVisible()||!u.display||h>=c||d<=1||!s.isHorizontal()?s.labelRotation=h:(e=(t=s._getLabelSizes()).widest.width,n=t.highest.height-t.highest.offset,i=Math.min(s.maxWidth,s.chart.width-e),e+6>(a=l.offset?s.maxWidth/d:i/(d-1))&&(a=i/(d-(l.offset?.5:1)),r=s.maxHeight-fn(l.gridLines)-u.padding-gn(l.scaleLabel),o=Math.sqrt(e*e+n*n),f=H.toDegrees(Math.min(Math.asin(Math.min((t.highest.height+6)/a,1)),Math.asin(Math.min(r/o,1))-Math.asin(n/o))),f=Math.max(h,Math.min(c,f))),s.labelRotation=f)},afterCalculateTickRotation:function(){H.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){H.callback(this.options.beforeFit,[this])},fit:function(){var t=this,e=t.minSize={width:0,height:0},n=t.chart,i=t.options,a=i.ticks,r=i.scaleLabel,o=i.gridLines,s=t._isVisible(),l="bottom"===i.position,u=t.isHorizontal();if(u?e.width=t.maxWidth:s&&(e.width=fn(o)+gn(r)),u?s&&(e.height=fn(o)+gn(r)):e.height=t.maxHeight,a.display&&s){var d=mn(a),h=t._getLabelSizes(),c=h.first,f=h.last,g=h.widest,p=h.highest,m=.4*d.minor.lineHeight,v=a.padding;if(u){var b=0!==t.labelRotation,x=H.toRadians(t.labelRotation),y=Math.cos(x),_=Math.sin(x),k=_*g.width+y*(p.height-(b?p.offset:0))+(b?0:m);e.height=Math.min(t.maxHeight,e.height+k+v);var w,M,S=t.getPixelForTick(0)-t.left,C=t.right-t.getPixelForTick(t.getTicks().length-1);b?(w=l?y*c.width+_*c.offset:_*(c.height-c.offset),M=l?_*(f.height-f.offset):y*f.width+_*f.offset):(w=c.width/2,M=f.width/2),t.paddingLeft=Math.max((w-S)*t.width/(t.width-S),0)+3,t.paddingRight=Math.max((M-C)*t.width/(t.width-C),0)+3}else{var P=a.mirror?0:g.width+v+m;e.width=Math.min(t.maxWidth,e.width+P),t.paddingTop=c.height/2,t.paddingBottom=f.height/2}}t.handleMargins(),u?(t.width=t._length=n.width-t.margins.left-t.margins.right,t.height=e.height):(t.width=e.width,t.height=t._length=n.height-t.margins.top-t.margins.bottom)},handleMargins:function(){var t=this;t.margins&&(t.margins.left=Math.max(t.paddingLeft,t.margins.left),t.margins.top=Math.max(t.paddingTop,t.margins.top),t.margins.right=Math.max(t.paddingRight,t.margins.right),t.margins.bottom=Math.max(t.paddingBottom,t.margins.bottom))},afterFit:function(){H.callback(this.options.afterFit,[this])},isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(t){if(ln(t))return NaN;if(("number"==typeof t||t instanceof Number)&&!isFinite(t))return NaN;if(t)if(this.isHorizontal()){if(void 0!==t.x)return this.getRightValue(t.x)}else if(void 0!==t.y)return this.getRightValue(t.y);return t},_convertTicksToLabels:function(t){var e,n,i,a=this;for(a.ticks=t.map((function(t){return t.value})),a.beforeTickToLabelConversion(),e=a.convertTicksToLabels(t)||a.ticks,a.afterTickToLabelConversion(),n=0,i=t.length;n<i;++n)t[n].label=e[n];return e},_getLabelSizes:function(){var t=this,e=t._labelSizes;return e||(t._labelSizes=e=cn(t.ctx,mn(t.options.ticks),t.getTicks(),t.longestTextCache),t.longestLabelWidth=e.widest.width),e},_parseValue:function(t){var e,n,i,a;return sn(t)?(e=+this.getRightValue(t[0]),n=+this.getRightValue(t[1]),i=Math.min(e,n),a=Math.max(e,n)):(e=void 0,n=t=+this.getRightValue(t),i=t,a=t),{min:i,max:a,start:e,end:n}},_getScaleLabel:function(t){var e=this._parseValue(t);return void 0!==e.start?"["+e.start+", "+e.end+"]":+this.getRightValue(t)},getLabelForIndex:H.noop,getPixelForValue:H.noop,getValueForPixel:H.noop,getPixelForTick:function(t){var e=this.options.offset,n=this._ticks.length,i=1/Math.max(n-(e?0:1),1);return t<0||t>n-1?null:this.getPixelForDecimal(t*i+(e?i/2:0))},getPixelForDecimal:function(t){return this._reversePixels&&(t=1-t),this._startPixel+t*this._length},getDecimalForPixel:function(t){var e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var t=this.min,e=this.max;return this.beginAtZero?0:t<0&&e<0?e:t>0&&e>0?t:0},_autoSkip:function(t){var e,n,i,a,r=this.options.ticks,o=this._length,s=r.maxTicksLimit||o/this._tickSize()+1,l=r.major.enabled?function(t){var e,n,i=[];for(e=0,n=t.length;e<n;e++)t[e].major&&i.push(e);return i}(t):[],u=l.length,d=l[0],h=l[u-1];if(u>s)return function(t,e,n){var i,a,r=0,o=e[0];for(n=Math.ceil(n),i=0;i<t.length;i++)a=t[i],i===o?(a._index=i,o=e[++r*n]):delete a.label}(t,l,u/s),vn(t);if(i=function(t,e,n,i){var a,r,o,s,l=function(t){var e,n,i=t.length;if(i<2)return!1;for(n=t[0],e=1;e<i;++e)if(t[e]-t[e-1]!==n)return!1;return n}(t),u=(e.length-1)/i;if(!l)return Math.max(u,1);for(o=0,s=(a=H.math._factorize(l)).length-1;o<s;o++)if((r=a[o])>u)return r;return Math.max(u,1)}(l,t,0,s),u>0){for(e=0,n=u-1;e<n;e++)bn(t,i,l[e],l[e+1]);return a=u>1?(h-d)/(u-1):null,bn(t,i,H.isNullOrUndef(a)?0:d-a,d),bn(t,i,h,H.isNullOrUndef(a)?t.length:h+a),vn(t)}return bn(t,i),vn(t)},_tickSize:function(){var t=this.options.ticks,e=H.toRadians(this.labelRotation),n=Math.abs(Math.cos(e)),i=Math.abs(Math.sin(e)),a=this._getLabelSizes(),r=t.autoSkipPadding||0,o=a?a.widest.width+r:0,s=a?a.highest.height+r:0;return this.isHorizontal()?s*n>o*i?o/n:s/i:s*i<o*n?s/n:o/i},_isVisible:function(){var t,e,n,i=this.chart,a=this.options.display;if("auto"!==a)return!!a;for(t=0,e=i.data.datasets.length;t<e;++t)if(i.isDatasetVisible(t)&&((n=i.getDatasetMeta(t)).xAxisID===this.id||n.yAxisID===this.id))return!0;return!1},_computeGridLineItems:function(t){var e,n,i,a,r,o,s,l,u,d,h,c,f,g,p,m,v,b=this,x=b.chart,y=b.options,_=y.gridLines,k=y.position,w=_.offsetGridLines,M=b.isHorizontal(),S=b._ticksToDraw,C=S.length+(w?1:0),P=fn(_),A=[],D=_.drawBorder?dn(_.lineWidth,0,0):0,T=D/2,I=H._alignPixel,F=function(t){return I(x,t,D)};for("top"===k?(e=F(b.bottom),s=b.bottom-P,u=e-T,h=F(t.top)+T,f=t.bottom):"bottom"===k?(e=F(b.top),h=t.top,f=F(t.bottom)-T,s=e+T,u=b.top+P):"left"===k?(e=F(b.right),o=b.right-P,l=e-T,d=F(t.left)+T,c=t.right):(e=F(b.left),d=t.left,c=F(t.right)-T,o=e+T,l=b.left+P),n=0;n<C;++n)i=S[n]||{},ln(i.label)&&n<S.length||(n===b.zeroLineIndex&&y.offset===w?(g=_.zeroLineWidth,p=_.zeroLineColor,m=_.zeroLineBorderDash||[],v=_.zeroLineBorderDashOffset||0):(g=dn(_.lineWidth,n,1),p=dn(_.color,n,"rgba(0,0,0,0.1)"),m=_.borderDash||[],v=_.borderDashOffset||0),void 0!==(a=hn(b,i._index||n,w))&&(r=I(x,a,g),M?o=l=d=c=r:s=u=h=f=r,A.push({tx1:o,ty1:s,tx2:l,ty2:u,x1:d,y1:h,x2:c,y2:f,width:g,color:p,borderDash:m,borderDashOffset:v})));return A.ticksLength=C,A.borderValue=e,A},_computeLabelItems:function(){var t,e,n,i,a,r,o,s,l,u,d,h,c=this,f=c.options,g=f.ticks,p=f.position,m=g.mirror,v=c.isHorizontal(),b=c._ticksToDraw,x=mn(g),y=g.padding,_=fn(f.gridLines),k=-H.toRadians(c.labelRotation),w=[];for("top"===p?(r=c.bottom-_-y,o=k?"left":"center"):"bottom"===p?(r=c.top+_+y,o=k?"right":"center"):"left"===p?(a=c.right-(m?0:_)-y,o=m?"left":"right"):(a=c.left+(m?0:_)+y,o=m?"right":"left"),t=0,e=b.length;t<e;++t)i=(n=b[t]).label,ln(i)||(s=c.getPixelForTick(n._index||t)+g.labelOffset,u=(l=n.major?x.major:x.minor).lineHeight,d=sn(i)?i.length:1,v?(a=s,h="top"===p?((k?1:.5)-d)*u:(k?0:.5)*u):(r=s,h=(1-d)*u/2),w.push({x:a,y:r,rotation:k,label:i,font:l,textOffset:h,textAlign:o}));return w},_drawGrid:function(t){var e=this,n=e.options.gridLines;if(n.display){var i,a,r,o,s,l=e.ctx,u=e.chart,d=H._alignPixel,h=n.drawBorder?dn(n.lineWidth,0,0):0,c=e._gridLineItems||(e._gridLineItems=e._computeGridLineItems(t));for(r=0,o=c.length;r<o;++r)i=(s=c[r]).width,a=s.color,i&&a&&(l.save(),l.lineWidth=i,l.strokeStyle=a,l.setLineDash&&(l.setLineDash(s.borderDash),l.lineDashOffset=s.borderDashOffset),l.beginPath(),n.drawTicks&&(l.moveTo(s.tx1,s.ty1),l.lineTo(s.tx2,s.ty2)),n.drawOnChartArea&&(l.moveTo(s.x1,s.y1),l.lineTo(s.x2,s.y2)),l.stroke(),l.restore());if(h){var f,g,p,m,v=h,b=dn(n.lineWidth,c.ticksLength-1,1),x=c.borderValue;e.isHorizontal()?(f=d(u,e.left,v)-v/2,g=d(u,e.right,b)+b/2,p=m=x):(p=d(u,e.top,v)-v/2,m=d(u,e.bottom,b)+b/2,f=g=x),l.lineWidth=h,l.strokeStyle=dn(n.color,0),l.beginPath(),l.moveTo(f,p),l.lineTo(g,m),l.stroke()}}},_drawLabels:function(){var t=this;if(t.options.ticks.display){var e,n,i,a,r,o,s,l,u=t.ctx,d=t._labelItems||(t._labelItems=t._computeLabelItems());for(e=0,i=d.length;e<i;++e){if(o=(r=d[e]).font,u.save(),u.translate(r.x,r.y),u.rotate(r.rotation),u.font=o.string,u.fillStyle=o.color,u.textBaseline="middle",u.textAlign=r.textAlign,s=r.label,l=r.textOffset,sn(s))for(n=0,a=s.length;n<a;++n)u.fillText(""+s[n],0,l),l+=o.lineHeight;else u.fillText(s,0,l);u.restore()}}},_drawTitle:function(){var t=this,e=t.ctx,n=t.options,i=n.scaleLabel;if(i.display){var a,r,o=un(i.fontColor,N.global.defaultFontColor),s=H.options._parseFont(i),l=H.options.toPadding(i.padding),u=s.lineHeight/2,d=n.position,h=0;if(t.isHorizontal())a=t.left+t.width/2,r="bottom"===d?t.bottom-u-l.bottom:t.top+u+l.top;else{var c="left"===d;a=c?t.left+u+l.top:t.right-u-l.top,r=t.top+t.height/2,h=c?-.5*Math.PI:.5*Math.PI}e.save(),e.translate(a,r),e.rotate(h),e.textAlign="center",e.textBaseline="middle",e.fillStyle=o,e.font=s.string,e.fillText(i.labelString,0,0),e.restore()}},draw:function(t){this._isVisible()&&(this._drawGrid(t),this._drawTitle(),this._drawLabels())},_layers:function(){var t=this,e=t.options,n=e.ticks&&e.ticks.z||0,i=e.gridLines&&e.gridLines.z||0;return t._isVisible()&&n!==i&&t.draw===t._draw?[{z:i,draw:function(){t._drawGrid.apply(t,arguments),t._drawTitle.apply(t,arguments)}},{z:n,draw:function(){t._drawLabels.apply(t,arguments)}}]:[{z:n,draw:function(){t.draw.apply(t,arguments)}}]},_getMatchingVisibleMetas:function(t){var e=this,n=e.isHorizontal();return e.chart._getSortedVisibleDatasetMetas().filter((function(i){return(!t||i.type===t)&&(n?i.xAxisID===e.id:i.yAxisID===e.id)}))}});xn.prototype._draw=xn.prototype.draw;var yn=xn,_n=H.isNullOrUndef,kn=yn.extend({determineDataLimits:function(){var t,e=this,n=e._getLabels(),i=e.options.ticks,a=i.min,r=i.max,o=0,s=n.length-1;void 0!==a&&(t=n.indexOf(a))>=0&&(o=t),void 0!==r&&(t=n.indexOf(r))>=0&&(s=t),e.minIndex=o,e.maxIndex=s,e.min=n[o],e.max=n[s]},buildTicks:function(){var t=this._getLabels(),e=this.minIndex,n=this.maxIndex;this.ticks=0===e&&n===t.length-1?t:t.slice(e,n+1)},getLabelForIndex:function(t,e){var n=this.chart;return n.getDatasetMeta(e).controller._getValueScaleId()===this.id?this.getRightValue(n.data.datasets[e].data[t]):this._getLabels()[t]},_configure:function(){var t=this,e=t.options.offset,n=t.ticks;yn.prototype._configure.call(t),t.isHorizontal()||(t._reversePixels=!t._reversePixels),n&&(t._startValue=t.minIndex-(e?.5:0),t._valueRange=Math.max(n.length-(e?0:1),1))},getPixelForValue:function(t,e,n){var i,a,r,o=this;return _n(e)||_n(n)||(t=o.chart.data.datasets[n].data[e]),_n(t)||(i=o.isHorizontal()?t.x:t.y),(void 0!==i||void 0!==t&&isNaN(e))&&(a=o._getLabels(),t=H.valueOrDefault(i,t),e=-1!==(r=a.indexOf(t))?r:e,isNaN(e)&&(e=t)),o.getPixelForDecimal((e-o._startValue)/o._valueRange)},getPixelForTick:function(t){var e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t],t+this.minIndex)},getValueForPixel:function(t){var e=Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange);return Math.min(Math.max(e,0),this.ticks.length-1)},getBasePixel:function(){return this.bottom}}),wn={position:"bottom"};kn._defaults=wn;var Mn=H.noop,Sn=H.isNullOrUndef;var Cn=yn.extend({getRightValue:function(t){return"string"==typeof t?+t:yn.prototype.getRightValue.call(this,t)},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;if(e.beginAtZero){var n=H.sign(t.min),i=H.sign(t.max);n<0&&i<0?t.max=0:n>0&&i>0&&(t.min=0)}var a=void 0!==e.min||void 0!==e.suggestedMin,r=void 0!==e.max||void 0!==e.suggestedMax;void 0!==e.min?t.min=e.min:void 0!==e.suggestedMin&&(null===t.min?t.min=e.suggestedMin:t.min=Math.min(t.min,e.suggestedMin)),void 0!==e.max?t.max=e.max:void 0!==e.suggestedMax&&(null===t.max?t.max=e.suggestedMax:t.max=Math.max(t.max,e.suggestedMax)),a!==r&&t.min>=t.max&&(a?t.max=t.min+1:t.min=t.max-1),t.min===t.max&&(t.max++,e.beginAtZero||t.min--)},getTickLimit:function(){var t,e=this.options.ticks,n=e.stepSize,i=e.maxTicksLimit;return n?t=Math.ceil(this.max/n)-Math.floor(this.min/n)+1:(t=this._computeTickLimit(),i=i||11),i&&(t=Math.min(i,t)),t},_computeTickLimit:function(){return Number.POSITIVE_INFINITY},handleDirectionalChanges:Mn,buildTicks:function(){var t=this,e=t.options.ticks,n=t.getTickLimit(),i={maxTicks:n=Math.max(2,n),min:e.min,max:e.max,precision:e.precision,stepSize:H.valueOrDefault(e.fixedStepSize,e.stepSize)},a=t.ticks=function(t,e){var n,i,a,r,o=[],s=t.stepSize,l=s||1,u=t.maxTicks-1,d=t.min,h=t.max,c=t.precision,f=e.min,g=e.max,p=H.niceNum((g-f)/u/l)*l;if(p<1e-14&&Sn(d)&&Sn(h))return[f,g];(r=Math.ceil(g/p)-Math.floor(f/p))>u&&(p=H.niceNum(r*p/u/l)*l),s||Sn(c)?n=Math.pow(10,H._decimalPlaces(p)):(n=Math.pow(10,c),p=Math.ceil(p*n)/n),i=Math.floor(f/p)*p,a=Math.ceil(g/p)*p,s&&(!Sn(d)&&H.almostWhole(d/p,p/1e3)&&(i=d),!Sn(h)&&H.almostWhole(h/p,p/1e3)&&(a=h)),r=(a-i)/p,r=H.almostEquals(r,Math.round(r),p/1e3)?Math.round(r):Math.ceil(r),i=Math.round(i*n)/n,a=Math.round(a*n)/n,o.push(Sn(d)?i:d);for(var m=1;m<r;++m)o.push(Math.round((i+m*p)*n)/n);return o.push(Sn(h)?a:h),o}(i,t);t.handleDirectionalChanges(),t.max=H.max(a),t.min=H.min(a),e.reverse?(a.reverse(),t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max)},convertTicksToLabels:function(){var t=this;t.ticksAsNumbers=t.ticks.slice(),t.zeroLineIndex=t.ticks.indexOf(0),yn.prototype.convertTicksToLabels.call(t)},_configure:function(){var t,e=this,n=e.getTicks(),i=e.min,a=e.max;yn.prototype._configure.call(e),e.options.offset&&n.length&&(i-=t=(a-i)/Math.max(n.length-1,1)/2,a+=t),e._startValue=i,e._endValue=a,e._valueRange=a-i}}),Pn={position:"left",ticks:{callback:on.formatters.linear}};function An(t,e,n,i){var a,r,o=t.options,s=function(t,e,n){var i=[n.type,void 0===e&&void 0===n.stack?n.index:"",n.stack].join(".");return void 0===t[i]&&(t[i]={pos:[],neg:[]}),t[i]}(e,o.stacked,n),l=s.pos,u=s.neg,d=i.length;for(a=0;a<d;++a)r=t._parseValue(i[a]),isNaN(r.min)||isNaN(r.max)||n.data[a].hidden||(l[a]=l[a]||0,u[a]=u[a]||0,o.relativePoints?l[a]=100:r.min<0||r.max<0?u[a]+=r.min:l[a]+=r.max)}function Dn(t,e,n){var i,a,r=n.length;for(i=0;i<r;++i)a=t._parseValue(n[i]),isNaN(a.min)||isNaN(a.max)||e.data[i].hidden||(t.min=Math.min(t.min,a.min),t.max=Math.max(t.max,a.max))}var Tn=Cn.extend({determineDataLimits:function(){var t,e,n,i,a=this,r=a.options,o=a.chart.data.datasets,s=a._getMatchingVisibleMetas(),l=r.stacked,u={},d=s.length;if(a.min=Number.POSITIVE_INFINITY,a.max=Number.NEGATIVE_INFINITY,void 0===l)for(t=0;!l&&t<d;++t)l=void 0!==(e=s[t]).stack;for(t=0;t<d;++t)n=o[(e=s[t]).index].data,l?An(a,u,e,n):Dn(a,e,n);H.each(u,(function(t){i=t.pos.concat(t.neg),a.min=Math.min(a.min,H.min(i)),a.max=Math.max(a.max,H.max(i))})),a.min=H.isFinite(a.min)&&!isNaN(a.min)?a.min:0,a.max=H.isFinite(a.max)&&!isNaN(a.max)?a.max:1,a.handleTickRangeOptions()},_computeTickLimit:function(){var t;return this.isHorizontal()?Math.ceil(this.width/40):(t=H.options._parseFont(this.options.ticks),Math.ceil(this.height/t.lineHeight))},handleDirectionalChanges:function(){this.isHorizontal()||this.ticks.reverse()},getLabelForIndex:function(t,e){return this._getScaleLabel(this.chart.data.datasets[e].data[t])},getPixelForValue:function(t){return this.getPixelForDecimal((+this.getRightValue(t)-this._startValue)/this._valueRange)},getValueForPixel:function(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange},getPixelForTick:function(t){var e=this.ticksAsNumbers;return t<0||t>e.length-1?null:this.getPixelForValue(e[t])}}),In=Pn;Tn._defaults=In;var Fn=H.valueOrDefault,On=H.math.log10;var Ln={position:"left",ticks:{callback:on.formatters.logarithmic}};function Rn(t,e){return H.isFinite(t)&&t>=0?t:e}var zn=yn.extend({determineDataLimits:function(){var t,e,n,i,a,r,o=this,s=o.options,l=o.chart,u=l.data.datasets,d=o.isHorizontal();function h(t){return d?t.xAxisID===o.id:t.yAxisID===o.id}o.min=Number.POSITIVE_INFINITY,o.max=Number.NEGATIVE_INFINITY,o.minNotZero=Number.POSITIVE_INFINITY;var c=s.stacked;if(void 0===c)for(t=0;t<u.length;t++)if(e=l.getDatasetMeta(t),l.isDatasetVisible(t)&&h(e)&&void 0!==e.stack){c=!0;break}if(s.stacked||c){var f={};for(t=0;t<u.length;t++){var g=[(e=l.getDatasetMeta(t)).type,void 0===s.stacked&&void 0===e.stack?t:"",e.stack].join(".");if(l.isDatasetVisible(t)&&h(e))for(void 0===f[g]&&(f[g]=[]),a=0,r=(i=u[t].data).length;a<r;a++){var p=f[g];n=o._parseValue(i[a]),isNaN(n.min)||isNaN(n.max)||e.data[a].hidden||n.min<0||n.max<0||(p[a]=p[a]||0,p[a]+=n.max)}}H.each(f,(function(t){if(t.length>0){var e=H.min(t),n=H.max(t);o.min=Math.min(o.min,e),o.max=Math.max(o.max,n)}}))}else for(t=0;t<u.length;t++)if(e=l.getDatasetMeta(t),l.isDatasetVisible(t)&&h(e))for(a=0,r=(i=u[t].data).length;a<r;a++)n=o._parseValue(i[a]),isNaN(n.min)||isNaN(n.max)||e.data[a].hidden||n.min<0||n.max<0||(o.min=Math.min(n.min,o.min),o.max=Math.max(n.max,o.max),0!==n.min&&(o.minNotZero=Math.min(n.min,o.minNotZero)));o.min=H.isFinite(o.min)?o.min:null,o.max=H.isFinite(o.max)?o.max:null,o.minNotZero=H.isFinite(o.minNotZero)?o.minNotZero:null,this.handleTickRangeOptions()},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;t.min=Rn(e.min,t.min),t.max=Rn(e.max,t.max),t.min===t.max&&(0!==t.min&&null!==t.min?(t.min=Math.pow(10,Math.floor(On(t.min))-1),t.max=Math.pow(10,Math.floor(On(t.max))+1)):(t.min=1,t.max=10)),null===t.min&&(t.min=Math.pow(10,Math.floor(On(t.max))-1)),null===t.max&&(t.max=0!==t.min?Math.pow(10,Math.floor(On(t.min))+1):10),null===t.minNotZero&&(t.min>0?t.minNotZero=t.min:t.max<1?t.minNotZero=Math.pow(10,Math.floor(On(t.max))):t.minNotZero=1)},buildTicks:function(){var t=this,e=t.options.ticks,n=!t.isHorizontal(),i={min:Rn(e.min),max:Rn(e.max)},a=t.ticks=function(t,e){var n,i,a=[],r=Fn(t.min,Math.pow(10,Math.floor(On(e.min)))),o=Math.floor(On(e.max)),s=Math.ceil(e.max/Math.pow(10,o));0===r?(n=Math.floor(On(e.minNotZero)),i=Math.floor(e.minNotZero/Math.pow(10,n)),a.push(r),r=i*Math.pow(10,n)):(n=Math.floor(On(r)),i=Math.floor(r/Math.pow(10,n)));var l=n<0?Math.pow(10,Math.abs(n)):1;do{a.push(r),10===++i&&(i=1,l=++n>=0?1:l),r=Math.round(i*Math.pow(10,n)*l)/l}while(n<o||n===o&&i<s);var u=Fn(t.max,r);return a.push(u),a}(i,t);t.max=H.max(a),t.min=H.min(a),e.reverse?(n=!n,t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max),n&&a.reverse()},convertTicksToLabels:function(){this.tickValues=this.ticks.slice(),yn.prototype.convertTicksToLabels.call(this)},getLabelForIndex:function(t,e){return this._getScaleLabel(this.chart.data.datasets[e].data[t])},getPixelForTick:function(t){var e=this.tickValues;return t<0||t>e.length-1?null:this.getPixelForValue(e[t])},_getFirstTickValue:function(t){var e=Math.floor(On(t));return Math.floor(t/Math.pow(10,e))*Math.pow(10,e)},_configure:function(){var t=this,e=t.min,n=0;yn.prototype._configure.call(t),0===e&&(e=t._getFirstTickValue(t.minNotZero),n=Fn(t.options.ticks.fontSize,N.global.defaultFontSize)/t._length),t._startValue=On(e),t._valueOffset=n,t._valueRange=(On(t.max)-On(e))/(1-n)},getPixelForValue:function(t){var e=this,n=0;return(t=+e.getRightValue(t))>e.min&&t>0&&(n=(On(t)-e._startValue)/e._valueRange+e._valueOffset),e.getPixelForDecimal(n)},getValueForPixel:function(t){var e=this,n=e.getDecimalForPixel(t);return 0===n&&0===e.min?0:Math.pow(10,e._startValue+(n-e._valueOffset)*e._valueRange)}}),Nn=Ln;zn._defaults=Nn;var Bn=H.valueOrDefault,En=H.valueAtIndexOrDefault,Wn=H.options.resolve,Vn={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,borderDash:[],borderDashOffset:0},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:on.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(t){return t}}};function Hn(t){var e=t.ticks;return e.display&&t.display?Bn(e.fontSize,N.global.defaultFontSize)+2*e.backdropPaddingY:0}function jn(t,e,n,i,a){return t===i||t===a?{start:e-n/2,end:e+n/2}:t<i||t>a?{start:e-n,end:e}:{start:e,end:e+n}}function qn(t){return 0===t||180===t?"center":t<180?"left":"right"}function Un(t,e,n,i){var a,r,o=n.y+i/2;if(H.isArray(e))for(a=0,r=e.length;a<r;++a)t.fillText(e[a],n.x,o),o+=i;else t.fillText(e,n.x,o)}function Yn(t,e,n){90===t||270===t?n.y-=e.h/2:(t>270||t<90)&&(n.y-=e.h)}function Gn(t){return H.isNumber(t)?t:0}var Xn=Cn.extend({setDimensions:function(){var t=this;t.width=t.maxWidth,t.height=t.maxHeight,t.paddingTop=Hn(t.options)/2,t.xCenter=Math.floor(t.width/2),t.yCenter=Math.floor((t.height-t.paddingTop)/2),t.drawingArea=Math.min(t.height-t.paddingTop,t.width)/2},determineDataLimits:function(){var t=this,e=t.chart,n=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;H.each(e.data.datasets,(function(a,r){if(e.isDatasetVisible(r)){var o=e.getDatasetMeta(r);H.each(a.data,(function(e,a){var r=+t.getRightValue(e);isNaN(r)||o.data[a].hidden||(n=Math.min(r,n),i=Math.max(r,i))}))}})),t.min=n===Number.POSITIVE_INFINITY?0:n,t.max=i===Number.NEGATIVE_INFINITY?0:i,t.handleTickRangeOptions()},_computeTickLimit:function(){return Math.ceil(this.drawingArea/Hn(this.options))},convertTicksToLabels:function(){var t=this;Cn.prototype.convertTicksToLabels.call(t),t.pointLabels=t.chart.data.labels.map((function(){var e=H.callback(t.options.pointLabels.callback,arguments,t);return e||0===e?e:""}))},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},fit:function(){var t=this.options;t.display&&t.pointLabels.display?function(t){var e,n,i,a=H.options._parseFont(t.options.pointLabels),r={l:0,r:t.width,t:0,b:t.height-t.paddingTop},o={};t.ctx.font=a.string,t._pointLabelSizes=[];var s,l,u,d=t.chart.data.labels.length;for(e=0;e<d;e++){i=t.getPointPosition(e,t.drawingArea+5),s=t.ctx,l=a.lineHeight,u=t.pointLabels[e],n=H.isArray(u)?{w:H.longestText(s,s.font,u),h:u.length*l}:{w:s.measureText(u).width,h:l},t._pointLabelSizes[e]=n;var h=t.getIndexAngle(e),c=H.toDegrees(h)%360,f=jn(c,i.x,n.w,0,180),g=jn(c,i.y,n.h,90,270);f.start<r.l&&(r.l=f.start,o.l=h),f.end>r.r&&(r.r=f.end,o.r=h),g.start<r.t&&(r.t=g.start,o.t=h),g.end>r.b&&(r.b=g.end,o.b=h)}t.setReductions(t.drawingArea,r,o)}(this):this.setCenterPoint(0,0,0,0)},setReductions:function(t,e,n){var i=this,a=e.l/Math.sin(n.l),r=Math.max(e.r-i.width,0)/Math.sin(n.r),o=-e.t/Math.cos(n.t),s=-Math.max(e.b-(i.height-i.paddingTop),0)/Math.cos(n.b);a=Gn(a),r=Gn(r),o=Gn(o),s=Gn(s),i.drawingArea=Math.min(Math.floor(t-(a+r)/2),Math.floor(t-(o+s)/2)),i.setCenterPoint(a,r,o,s)},setCenterPoint:function(t,e,n,i){var a=this,r=a.width-e-a.drawingArea,o=t+a.drawingArea,s=n+a.drawingArea,l=a.height-a.paddingTop-i-a.drawingArea;a.xCenter=Math.floor((o+r)/2+a.left),a.yCenter=Math.floor((s+l)/2+a.top+a.paddingTop)},getIndexAngle:function(t){var e=this.chart,n=(t*(360/e.data.labels.length)+((e.options||{}).startAngle||0))%360;return(n<0?n+360:n)*Math.PI*2/360},getDistanceFromCenterForValue:function(t){var e=this;if(H.isNullOrUndef(t))return NaN;var n=e.drawingArea/(e.max-e.min);return e.options.ticks.reverse?(e.max-t)*n:(t-e.min)*n},getPointPosition:function(t,e){var n=this.getIndexAngle(t)-Math.PI/2;return{x:Math.cos(n)*e+this.xCenter,y:Math.sin(n)*e+this.yCenter}},getPointPositionForValue:function(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))},getBasePosition:function(t){var e=this.min,n=this.max;return this.getPointPositionForValue(t||0,this.beginAtZero?0:e<0&&n<0?n:e>0&&n>0?e:0)},_drawGrid:function(){var t,e,n,i=this,a=i.ctx,r=i.options,o=r.gridLines,s=r.angleLines,l=Bn(s.lineWidth,o.lineWidth),u=Bn(s.color,o.color);if(r.pointLabels.display&&function(t){var e=t.ctx,n=t.options,i=n.pointLabels,a=Hn(n),r=t.getDistanceFromCenterForValue(n.ticks.reverse?t.min:t.max),o=H.options._parseFont(i);e.save(),e.font=o.string,e.textBaseline="middle";for(var s=t.chart.data.labels.length-1;s>=0;s--){var l=0===s?a/2:0,u=t.getPointPosition(s,r+l+5),d=En(i.fontColor,s,N.global.defaultFontColor);e.fillStyle=d;var h=t.getIndexAngle(s),c=H.toDegrees(h);e.textAlign=qn(c),Yn(c,t._pointLabelSizes[s],u),Un(e,t.pointLabels[s],u,o.lineHeight)}e.restore()}(i),o.display&&H.each(i.ticks,(function(t,n){0!==n&&(e=i.getDistanceFromCenterForValue(i.ticksAsNumbers[n]),function(t,e,n,i){var a,r=t.ctx,o=e.circular,s=t.chart.data.labels.length,l=En(e.color,i-1),u=En(e.lineWidth,i-1);if((o||s)&&l&&u){if(r.save(),r.strokeStyle=l,r.lineWidth=u,r.setLineDash&&(r.setLineDash(e.borderDash||[]),r.lineDashOffset=e.borderDashOffset||0),r.beginPath(),o)r.arc(t.xCenter,t.yCenter,n,0,2*Math.PI);else{a=t.getPointPosition(0,n),r.moveTo(a.x,a.y);for(var d=1;d<s;d++)a=t.getPointPosition(d,n),r.lineTo(a.x,a.y)}r.closePath(),r.stroke(),r.restore()}}(i,o,e,n))})),s.display&&l&&u){for(a.save(),a.lineWidth=l,a.strokeStyle=u,a.setLineDash&&(a.setLineDash(Wn([s.borderDash,o.borderDash,[]])),a.lineDashOffset=Wn([s.borderDashOffset,o.borderDashOffset,0])),t=i.chart.data.labels.length-1;t>=0;t--)e=i.getDistanceFromCenterForValue(r.ticks.reverse?i.min:i.max),n=i.getPointPosition(t,e),a.beginPath(),a.moveTo(i.xCenter,i.yCenter),a.lineTo(n.x,n.y),a.stroke();a.restore()}},_drawLabels:function(){var t=this,e=t.ctx,n=t.options.ticks;if(n.display){var i,a,r=t.getIndexAngle(0),o=H.options._parseFont(n),s=Bn(n.fontColor,N.global.defaultFontColor);e.save(),e.font=o.string,e.translate(t.xCenter,t.yCenter),e.rotate(r),e.textAlign="center",e.textBaseline="middle",H.each(t.ticks,(function(r,l){(0!==l||n.reverse)&&(i=t.getDistanceFromCenterForValue(t.ticksAsNumbers[l]),n.showLabelBackdrop&&(a=e.measureText(r).width,e.fillStyle=n.backdropColor,e.fillRect(-a/2-n.backdropPaddingX,-i-o.size/2-n.backdropPaddingY,a+2*n.backdropPaddingX,o.size+2*n.backdropPaddingY)),e.fillStyle=s,e.fillText(r,0,-i))})),e.restore()}},_drawTitle:H.noop}),Kn=Vn;Xn._defaults=Kn;var Zn=H._deprecated,$n=H.options.resolve,Jn=H.valueOrDefault,Qn=Number.MIN_SAFE_INTEGER||-9007199254740991,ti=Number.MAX_SAFE_INTEGER||9007199254740991,ei={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},ni=Object.keys(ei);function ii(t,e){return t-e}function ai(t){return H.valueOrDefault(t.time.min,t.ticks.min)}function ri(t){return H.valueOrDefault(t.time.max,t.ticks.max)}function oi(t,e,n,i){var a=function(t,e,n){for(var i,a,r,o=0,s=t.length-1;o>=0&&o<=s;){if(a=t[(i=o+s>>1)-1]||null,r=t[i],!a)return{lo:null,hi:r};if(r[e]<n)o=i+1;else{if(!(a[e]>n))return{lo:a,hi:r};s=i-1}}return{lo:r,hi:null}}(t,e,n),r=a.lo?a.hi?a.lo:t[t.length-2]:t[0],o=a.lo?a.hi?a.hi:t[t.length-1]:t[1],s=o[e]-r[e],l=s?(n-r[e])/s:0,u=(o[i]-r[i])*l;return r[i]+u}function si(t,e){var n=t._adapter,i=t.options.time,a=i.parser,r=a||i.format,o=e;return"function"==typeof a&&(o=a(o)),H.isFinite(o)||(o="string"==typeof r?n.parse(o,r):n.parse(o)),null!==o?+o:(a||"function"!=typeof r||(o=r(e),H.isFinite(o)||(o=n.parse(o))),o)}function li(t,e){if(H.isNullOrUndef(e))return null;var n=t.options.time,i=si(t,t.getRightValue(e));return null===i?i:(n.round&&(i=+t._adapter.startOf(i,n.round)),i)}function ui(t,e,n,i){var a,r,o,s=ni.length;for(a=ni.indexOf(t);a<s-1;++a)if(o=(r=ei[ni[a]]).steps?r.steps:ti,r.common&&Math.ceil((n-e)/(o*r.size))<=i)return ni[a];return ni[s-1]}function di(t,e,n){var i,a,r=[],o={},s=e.length;for(i=0;i<s;++i)o[a=e[i]]=i,r.push({value:a,major:!1});return 0!==s&&n?function(t,e,n,i){var a,r,o=t._adapter,s=+o.startOf(e[0].value,i),l=e[e.length-1].value;for(a=s;a<=l;a=+o.add(a,1,i))(r=n[a])>=0&&(e[r].major=!0);return e}(t,r,o,n):r}var hi=yn.extend({initialize:function(){this.mergeTicksOptions(),yn.prototype.initialize.call(this)},update:function(){var t=this,e=t.options,n=e.time||(e.time={}),i=t._adapter=new rn._date(e.adapters.date);return Zn("time scale",n.format,"time.format","time.parser"),Zn("time scale",n.min,"time.min","ticks.min"),Zn("time scale",n.max,"time.max","ticks.max"),H.mergeIf(n.displayFormats,i.formats()),yn.prototype.update.apply(t,arguments)},getRightValue:function(t){return t&&void 0!==t.t&&(t=t.t),yn.prototype.getRightValue.call(this,t)},determineDataLimits:function(){var t,e,n,i,a,r,o,s=this,l=s.chart,u=s._adapter,d=s.options,h=d.time.unit||"day",c=ti,f=Qn,g=[],p=[],m=[],v=s._getLabels();for(t=0,n=v.length;t<n;++t)m.push(li(s,v[t]));for(t=0,n=(l.data.datasets||[]).length;t<n;++t)if(l.isDatasetVisible(t))if(a=l.data.datasets[t].data,H.isObject(a[0]))for(p[t]=[],e=0,i=a.length;e<i;++e)r=li(s,a[e]),g.push(r),p[t][e]=r;else p[t]=m.slice(0),o||(g=g.concat(m),o=!0);else p[t]=[];m.length&&(c=Math.min(c,m[0]),f=Math.max(f,m[m.length-1])),g.length&&(g=n>1?function(t){var e,n,i,a={},r=[];for(e=0,n=t.length;e<n;++e)a[i=t[e]]||(a[i]=!0,r.push(i));return r}(g).sort(ii):g.sort(ii),c=Math.min(c,g[0]),f=Math.max(f,g[g.length-1])),c=li(s,ai(d))||c,f=li(s,ri(d))||f,c=c===ti?+u.startOf(Date.now(),h):c,f=f===Qn?+u.endOf(Date.now(),h)+1:f,s.min=Math.min(c,f),s.max=Math.max(c+1,f),s._table=[],s._timestamps={data:g,datasets:p,labels:m}},buildTicks:function(){var t,e,n,i=this,a=i.min,r=i.max,o=i.options,s=o.ticks,l=o.time,u=i._timestamps,d=[],h=i.getLabelCapacity(a),c=s.source,f=o.distribution;for(u="data"===c||"auto"===c&&"series"===f?u.data:"labels"===c?u.labels:function(t,e,n,i){var a,r=t._adapter,o=t.options,s=o.time,l=s.unit||ui(s.minUnit,e,n,i),u=$n([s.stepSize,s.unitStepSize,1]),d="week"===l&&s.isoWeekday,h=e,c=[];if(d&&(h=+r.startOf(h,"isoWeek",d)),h=+r.startOf(h,d?"day":l),r.diff(n,e,l)>1e5*u)throw e+" and "+n+" are too far apart with stepSize of "+u+" "+l;for(a=h;a<n;a=+r.add(a,u,l))c.push(a);return a!==n&&"ticks"!==o.bounds||c.push(a),c}(i,a,r,h),"ticks"===o.bounds&&u.length&&(a=u[0],r=u[u.length-1]),a=li(i,ai(o))||a,r=li(i,ri(o))||r,t=0,e=u.length;t<e;++t)(n=u[t])>=a&&n<=r&&d.push(n);return i.min=a,i.max=r,i._unit=l.unit||(s.autoSkip?ui(l.minUnit,i.min,i.max,h):function(t,e,n,i,a){var r,o;for(r=ni.length-1;r>=ni.indexOf(n);r--)if(o=ni[r],ei[o].common&&t._adapter.diff(a,i,o)>=e-1)return o;return ni[n?ni.indexOf(n):0]}(i,d.length,l.minUnit,i.min,i.max)),i._majorUnit=s.major.enabled&&"year"!==i._unit?function(t){for(var e=ni.indexOf(t)+1,n=ni.length;e<n;++e)if(ei[ni[e]].common)return ni[e]}(i._unit):void 0,i._table=function(t,e,n,i){if("linear"===i||!t.length)return[{time:e,pos:0},{time:n,pos:1}];var a,r,o,s,l,u=[],d=[e];for(a=0,r=t.length;a<r;++a)(s=t[a])>e&&s<n&&d.push(s);for(d.push(n),a=0,r=d.length;a<r;++a)l=d[a+1],o=d[a-1],s=d[a],void 0!==o&&void 0!==l&&Math.round((l+o)/2)===s||u.push({time:s,pos:a/(r-1)});return u}(i._timestamps.data,a,r,f),i._offsets=function(t,e,n,i,a){var r,o,s=0,l=0;return a.offset&&e.length&&(r=oi(t,"time",e[0],"pos"),s=1===e.length?1-r:(oi(t,"time",e[1],"pos")-r)/2,o=oi(t,"time",e[e.length-1],"pos"),l=1===e.length?o:(o-oi(t,"time",e[e.length-2],"pos"))/2),{start:s,end:l,factor:1/(s+1+l)}}(i._table,d,0,0,o),s.reverse&&d.reverse(),di(i,d,i._majorUnit)},getLabelForIndex:function(t,e){var n=this,i=n._adapter,a=n.chart.data,r=n.options.time,o=a.labels&&t<a.labels.length?a.labels[t]:"",s=a.datasets[e].data[t];return H.isObject(s)&&(o=n.getRightValue(s)),r.tooltipFormat?i.format(si(n,o),r.tooltipFormat):"string"==typeof o?o:i.format(si(n,o),r.displayFormats.datetime)},tickFormatFunction:function(t,e,n,i){var a=this._adapter,r=this.options,o=r.time.displayFormats,s=o[this._unit],l=this._majorUnit,u=o[l],d=n[e],h=r.ticks,c=l&&u&&d&&d.major,f=a.format(t,i||(c?u:s)),g=c?h.major:h.minor,p=$n([g.callback,g.userCallback,h.callback,h.userCallback]);return p?p(f,e,n):f},convertTicksToLabels:function(t){var e,n,i=[];for(e=0,n=t.length;e<n;++e)i.push(this.tickFormatFunction(t[e].value,e,t));return i},getPixelForOffset:function(t){var e=this._offsets,n=oi(this._table,"time",t,"pos");return this.getPixelForDecimal((e.start+n)*e.factor)},getPixelForValue:function(t,e,n){var i=null;if(void 0!==e&&void 0!==n&&(i=this._timestamps.datasets[n][e]),null===i&&(i=li(this,t)),null!==i)return this.getPixelForOffset(i)},getPixelForTick:function(t){var e=this.getTicks();return t>=0&&t<e.length?this.getPixelForOffset(e[t].value):null},getValueForPixel:function(t){var e=this._offsets,n=this.getDecimalForPixel(t)/e.factor-e.end,i=oi(this._table,"pos",n,"time");return this._adapter._create(i)},_getLabelSize:function(t){var e=this.options.ticks,n=this.ctx.measureText(t).width,i=H.toRadians(this.isHorizontal()?e.maxRotation:e.minRotation),a=Math.cos(i),r=Math.sin(i),o=Jn(e.fontSize,N.global.defaultFontSize);return{w:n*a+o*r,h:n*r+o*a}},getLabelWidth:function(t){return this._getLabelSize(t).w},getLabelCapacity:function(t){var e=this,n=e.options.time,i=n.displayFormats,a=i[n.unit]||i.millisecond,r=e.tickFormatFunction(t,0,di(e,[t],e._majorUnit),a),o=e._getLabelSize(r),s=Math.floor(e.isHorizontal()?e.width/o.w:e.height/o.h);return e.options.offset&&s--,s>0?s:1}}),ci={position:"bottom",distribution:"linear",bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{autoSkip:!1,source:"auto",major:{enabled:!1}}};hi._defaults=ci;var fi={category:kn,linear:Tn,logarithmic:zn,radialLinear:Xn,time:hi},gi={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};rn._date.override("function"==typeof t?{_id:"moment",formats:function(){return gi},parse:function(e,n){return"string"==typeof e&&"string"==typeof n?e=t(e,n):e instanceof t||(e=t(e)),e.isValid()?e.valueOf():null},format:function(e,n){return t(e).format(n)},add:function(e,n,i){return t(e).add(n,i).valueOf()},diff:function(e,n,i){return t(e).diff(t(n),i)},startOf:function(e,n,i){return e=t(e),"isoWeek"===n?e.isoWeekday(i).valueOf():e.startOf(n).valueOf()},endOf:function(e,n){return t(e).endOf(n).valueOf()},_create:function(e){return t(e)}}:{}),N._set("global",{plugins:{filler:{propagate:!0}}});var pi={dataset:function(t){var e=t.fill,n=t.chart,i=n.getDatasetMeta(e),a=i&&n.isDatasetVisible(e)&&i.dataset._children||[],r=a.length||0;return r?function(t,e){return e<r&&a[e]._view||null}:null},boundary:function(t){var e=t.boundary,n=e?e.x:null,i=e?e.y:null;return H.isArray(e)?function(t,n){return e[n]}:function(t){return{x:null===n?t.x:n,y:null===i?t.y:i}}}};function mi(t,e,n){var i,a=t._model||{},r=a.fill;if(void 0===r&&(r=!!a.backgroundColor),!1===r||null===r)return!1;if(!0===r)return"origin";if(i=parseFloat(r,10),isFinite(i)&&Math.floor(i)===i)return"-"!==r[0]&&"+"!==r[0]||(i=e+i),!(i===e||i<0||i>=n)&&i;switch(r){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return r;default:return!1}}function vi(t){return(t.el._scale||{}).getPointPositionForValue?function(t){var e,n,i,a,r,o=t.el._scale,s=o.options,l=o.chart.data.labels.length,u=t.fill,d=[];if(!l)return null;for(e=s.ticks.reverse?o.max:o.min,n=s.ticks.reverse?o.min:o.max,i=o.getPointPositionForValue(0,e),a=0;a<l;++a)r="start"===u||"end"===u?o.getPointPositionForValue(a,"start"===u?e:n):o.getBasePosition(a),s.gridLines.circular&&(r.cx=i.x,r.cy=i.y,r.angle=o.getIndexAngle(a)-Math.PI/2),d.push(r);return d}(t):function(t){var e,n=t.el._model||{},i=t.el._scale||{},a=t.fill,r=null;if(isFinite(a))return null;if("start"===a?r=void 0===n.scaleBottom?i.bottom:n.scaleBottom:"end"===a?r=void 0===n.scaleTop?i.top:n.scaleTop:void 0!==n.scaleZero?r=n.scaleZero:i.getBasePixel&&(r=i.getBasePixel()),null!=r){if(void 0!==r.x&&void 0!==r.y)return r;if(H.isFinite(r))return{x:(e=i.isHorizontal())?r:null,y:e?null:r}}return null}(t)}function bi(t,e,n){var i,a=t[e].fill,r=[e];if(!n)return a;for(;!1!==a&&-1===r.indexOf(a);){if(!isFinite(a))return a;if(!(i=t[a]))return!1;if(i.visible)return a;r.push(a),a=i.fill}return!1}function xi(t){var e=t.fill,n="dataset";return!1===e?null:(isFinite(e)||(n="boundary"),pi[n](t))}function yi(t){return t&&!t.skip}function _i(t,e,n,i,a){var r,o,s,l;if(i&&a){for(t.moveTo(e[0].x,e[0].y),r=1;r<i;++r)H.canvas.lineTo(t,e[r-1],e[r]);if(void 0===n[0].angle)for(t.lineTo(n[a-1].x,n[a-1].y),r=a-1;r>0;--r)H.canvas.lineTo(t,n[r],n[r-1],!0);else for(o=n[0].cx,s=n[0].cy,l=Math.sqrt(Math.pow(n[0].x-o,2)+Math.pow(n[0].y-s,2)),r=a-1;r>0;--r)t.arc(o,s,l,n[r].angle,n[r-1].angle,!0)}}function ki(t,e,n,i,a,r){var o,s,l,u,d,h,c,f,g=e.length,p=i.spanGaps,m=[],v=[],b=0,x=0;for(t.beginPath(),o=0,s=g;o<s;++o)d=n(u=e[l=o%g]._view,l,i),h=yi(u),c=yi(d),r&&void 0===f&&h&&(s=g+(f=o+1)),h&&c?(b=m.push(u),x=v.push(d)):b&&x&&(p?(h&&m.push(u),c&&v.push(d)):(_i(t,m,v,b,x),b=x=0,m=[],v=[]));_i(t,m,v,b,x),t.closePath(),t.fillStyle=a,t.fill()}var wi={id:"filler",afterDatasetsUpdate:function(t,e){var n,i,a,r,o=(t.data.datasets||[]).length,s=e.propagate,l=[];for(i=0;i<o;++i)r=null,(a=(n=t.getDatasetMeta(i)).dataset)&&a._model&&a instanceof kt.Line&&(r={visible:t.isDatasetVisible(i),fill:mi(a,i,o),chart:t,el:a}),n.$filler=r,l.push(r);for(i=0;i<o;++i)(r=l[i])&&(r.fill=bi(l,i,s),r.boundary=vi(r),r.mapper=xi(r))},beforeDatasetsDraw:function(t){var e,n,i,a,r,o,s,l=t._getSortedVisibleDatasetMetas(),u=t.ctx;for(n=l.length-1;n>=0;--n)(e=l[n].$filler)&&e.visible&&(a=(i=e.el)._view,r=i._children||[],o=e.mapper,s=a.backgroundColor||N.global.defaultColor,o&&s&&r.length&&(H.canvas.clipArea(u,t.chartArea),ki(u,r,o,a,s,i._loop),H.canvas.unclipArea(u)))}},Mi=H.rtl.getRtlAdapter,Si=H.noop,Ci=H.valueOrDefault;function Pi(t,e){return t.usePointStyle&&t.boxWidth>e?e:t.boxWidth}N._set("global",{legend:{display:!0,position:"top",align:"center",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(t,e){var n=e.datasetIndex,i=this.chart,a=i.getDatasetMeta(n);a.hidden=null===a.hidden?!i.data.datasets[n].hidden:null,i.update()},onHover:null,onLeave:null,labels:{boxWidth:40,padding:10,generateLabels:function(t){var e=t.data.datasets,n=t.options.legend||{},i=n.labels&&n.labels.usePointStyle;return t._getSortedDatasetMetas().map((function(n){var a=n.controller.getStyle(i?0:void 0);return{text:e[n.index].label,fillStyle:a.backgroundColor,hidden:!t.isDatasetVisible(n.index),lineCap:a.borderCapStyle,lineDash:a.borderDash,lineDashOffset:a.borderDashOffset,lineJoin:a.borderJoinStyle,lineWidth:a.borderWidth,strokeStyle:a.borderColor,pointStyle:a.pointStyle,rotation:a.rotation,datasetIndex:n.index}}),this)}}},legendCallback:function(t){var e,n,i,a=document.createElement("ul"),r=t.data.datasets;for(a.setAttribute("class",t.id+"-legend"),e=0,n=r.length;e<n;e++)(i=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=r[e].backgroundColor,r[e].label&&i.appendChild(document.createTextNode(r[e].label));return a.outerHTML}});var Ai=K.extend({initialize:function(t){H.extend(this,t),this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1},beforeUpdate:Si,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:Si,beforeSetDimensions:Si,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:Si,beforeBuildLabels:Si,buildLabels:function(){var t=this,e=t.options.labels||{},n=H.callback(e.generateLabels,[t.chart],t)||[];e.filter&&(n=n.filter((function(n){return e.filter(n,t.chart.data)}))),t.options.reverse&&n.reverse(),t.legendItems=n},afterBuildLabels:Si,beforeFit:Si,fit:function(){var t=this,e=t.options,n=e.labels,i=e.display,a=t.ctx,r=H.options._parseFont(n),o=r.size,s=t.legendHitBoxes=[],l=t.minSize,u=t.isHorizontal();if(u?(l.width=t.maxWidth,l.height=i?10:0):(l.width=i?10:0,l.height=t.maxHeight),i){if(a.font=r.string,u){var d=t.lineWidths=[0],h=0;a.textAlign="left",a.textBaseline="middle",H.each(t.legendItems,(function(t,e){var i=Pi(n,o)+o/2+a.measureText(t.text).width;(0===e||d[d.length-1]+i+2*n.padding>l.width)&&(h+=o+n.padding,d[d.length-(e>0?0:1)]=0),s[e]={left:0,top:0,width:i,height:o},d[d.length-1]+=i+n.padding})),l.height+=h}else{var c=n.padding,f=t.columnWidths=[],g=t.columnHeights=[],p=n.padding,m=0,v=0;H.each(t.legendItems,(function(t,e){var i=Pi(n,o)+o/2+a.measureText(t.text).width;e>0&&v+o+2*c>l.height&&(p+=m+n.padding,f.push(m),g.push(v),m=0,v=0),m=Math.max(m,i),v+=o+c,s[e]={left:0,top:0,width:i,height:o}})),p+=m,f.push(m),g.push(v),l.width+=p}t.width=l.width,t.height=l.height}else t.width=l.width=t.height=l.height=0},afterFit:Si,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var t=this,e=t.options,n=e.labels,i=N.global,a=i.defaultColor,r=i.elements.line,o=t.height,s=t.columnHeights,l=t.width,u=t.lineWidths;if(e.display){var d,h=Mi(e.rtl,t.left,t.minSize.width),c=t.ctx,f=Ci(n.fontColor,i.defaultFontColor),g=H.options._parseFont(n),p=g.size;c.textAlign=h.textAlign("left"),c.textBaseline="middle",c.lineWidth=.5,c.strokeStyle=f,c.fillStyle=f,c.font=g.string;var m=Pi(n,p),v=t.legendHitBoxes,b=function(t,i){switch(e.align){case"start":return n.padding;case"end":return t-i;default:return(t-i+n.padding)/2}},x=t.isHorizontal();d=x?{x:t.left+b(l,u[0]),y:t.top+n.padding,line:0}:{x:t.left+n.padding,y:t.top+b(o,s[0]),line:0},H.rtl.overrideTextDirection(t.ctx,e.textDirection);var y=p+n.padding;H.each(t.legendItems,(function(e,i){var f=c.measureText(e.text).width,g=m+p/2+f,_=d.x,k=d.y;h.setWidth(t.minSize.width),x?i>0&&_+g+n.padding>t.left+t.minSize.width&&(k=d.y+=y,d.line++,_=d.x=t.left+b(l,u[d.line])):i>0&&k+y>t.top+t.minSize.height&&(_=d.x=_+t.columnWidths[d.line]+n.padding,d.line++,k=d.y=t.top+b(o,s[d.line]));var w=h.x(_);!function(t,e,i){if(!(isNaN(m)||m<=0)){c.save();var o=Ci(i.lineWidth,r.borderWidth);if(c.fillStyle=Ci(i.fillStyle,a),c.lineCap=Ci(i.lineCap,r.borderCapStyle),c.lineDashOffset=Ci(i.lineDashOffset,r.borderDashOffset),c.lineJoin=Ci(i.lineJoin,r.borderJoinStyle),c.lineWidth=o,c.strokeStyle=Ci(i.strokeStyle,a),c.setLineDash&&c.setLineDash(Ci(i.lineDash,r.borderDash)),n&&n.usePointStyle){var s=m*Math.SQRT2/2,l=h.xPlus(t,m/2),u=e+p/2;H.canvas.drawPoint(c,i.pointStyle,s,l,u,i.rotation)}else c.fillRect(h.leftForLtr(t,m),e,m,p),0!==o&&c.strokeRect(h.leftForLtr(t,m),e,m,p);c.restore()}}(w,k,e),v[i].left=h.leftForLtr(w,v[i].width),v[i].top=k,function(t,e,n,i){var a=p/2,r=h.xPlus(t,m+a),o=e+a;c.fillText(n.text,r,o),n.hidden&&(c.beginPath(),c.lineWidth=2,c.moveTo(r,o),c.lineTo(h.xPlus(r,i),o),c.stroke())}(w,k,e,f),x?d.x+=g+n.padding:d.y+=y})),H.rtl.restoreTextDirection(t.ctx,e.textDirection)}},_getLegendItemAt:function(t,e){var n,i,a,r=this;if(t>=r.left&&t<=r.right&&e>=r.top&&e<=r.bottom)for(a=r.legendHitBoxes,n=0;n<a.length;++n)if(t>=(i=a[n]).left&&t<=i.left+i.width&&e>=i.top&&e<=i.top+i.height)return r.legendItems[n];return null},handleEvent:function(t){var e,n=this,i=n.options,a="mouseup"===t.type?"click":t.type;if("mousemove"===a){if(!i.onHover&&!i.onLeave)return}else{if("click"!==a)return;if(!i.onClick)return}e=n._getLegendItemAt(t.x,t.y),"click"===a?e&&i.onClick&&i.onClick.call(n,t.native,e):(i.onLeave&&e!==n._hoveredItem&&(n._hoveredItem&&i.onLeave.call(n,t.native,n._hoveredItem),n._hoveredItem=e),i.onHover&&e&&i.onHover.call(n,t.native,e))}});function Di(t,e){var n=new Ai({ctx:t.ctx,options:e,chart:t});pe.configure(t,n,e),pe.addBox(t,n),t.legend=n}var Ti={id:"legend",_element:Ai,beforeInit:function(t){var e=t.options.legend;e&&Di(t,e)},beforeUpdate:function(t){var e=t.options.legend,n=t.legend;e?(H.mergeIf(e,N.global.legend),n?(pe.configure(t,n,e),n.options=e):Di(t,e)):n&&(pe.removeBox(t,n),delete t.legend)},afterEvent:function(t,e){var n=t.legend;n&&n.handleEvent(e)}},Ii=H.noop;N._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,padding:10,position:"top",text:"",weight:2e3}});var Fi=K.extend({initialize:function(t){H.extend(this,t),this.legendHitBoxes=[]},beforeUpdate:Ii,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:Ii,beforeSetDimensions:Ii,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:Ii,beforeBuildLabels:Ii,buildLabels:Ii,afterBuildLabels:Ii,beforeFit:Ii,fit:function(){var t,e=this,n=e.options,i=e.minSize={},a=e.isHorizontal();n.display?(t=(H.isArray(n.text)?n.text.length:1)*H.options._parseFont(n).lineHeight+2*n.padding,e.width=i.width=a?e.maxWidth:t,e.height=i.height=a?t:e.maxHeight):e.width=i.width=e.height=i.height=0},afterFit:Ii,isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},draw:function(){var t=this,e=t.ctx,n=t.options;if(n.display){var i,a,r,o=H.options._parseFont(n),s=o.lineHeight,l=s/2+n.padding,u=0,d=t.top,h=t.left,c=t.bottom,f=t.right;e.fillStyle=H.valueOrDefault(n.fontColor,N.global.defaultFontColor),e.font=o.string,t.isHorizontal()?(a=h+(f-h)/2,r=d+l,i=f-h):(a="left"===n.position?h+l:f-l,r=d+(c-d)/2,i=c-d,u=Math.PI*("left"===n.position?-.5:.5)),e.save(),e.translate(a,r),e.rotate(u),e.textAlign="center",e.textBaseline="middle";var g=n.text;if(H.isArray(g))for(var p=0,m=0;m<g.length;++m)e.fillText(g[m],0,p,i),p+=s;else e.fillText(g,0,0,i);e.restore()}}});function Oi(t,e){var n=new Fi({ctx:t.ctx,options:e,chart:t});pe.configure(t,n,e),pe.addBox(t,n),t.titleBlock=n}var Li={},Ri=wi,zi=Ti,Ni={id:"title",_element:Fi,beforeInit:function(t){var e=t.options.title;e&&Oi(t,e)},beforeUpdate:function(t){var e=t.options.title,n=t.titleBlock;e?(H.mergeIf(e,N.global.title),n?(pe.configure(t,n,e),n.options=e):Oi(t,e)):n&&(pe.removeBox(t,n),delete t.titleBlock)}};for(var Bi in Li.filler=Ri,Li.legend=zi,Li.title=Ni,en.helpers=H,function(){function t(t,e,n){var i;return"string"==typeof t?(i=parseInt(t,10),-1!==t.indexOf("%")&&(i=i/100*e.parentNode[n])):i=t,i}function e(t){return null!=t&&"none"!==t}function n(n,i,a){var r=document.defaultView,o=H._getParentNode(n),s=r.getComputedStyle(n)[i],l=r.getComputedStyle(o)[i],u=e(s),d=e(l),h=Number.POSITIVE_INFINITY;return u||d?Math.min(u?t(s,n,a):h,d?t(l,o,a):h):"none"}H.where=function(t,e){if(H.isArray(t)&&Array.prototype.filter)return t.filter(e);var n=[];return H.each(t,(function(t){e(t)&&n.push(t)})),n},H.findIndex=Array.prototype.findIndex?function(t,e,n){return t.findIndex(e,n)}:function(t,e,n){n=void 0===n?t:n;for(var i=0,a=t.length;i<a;++i)if(e.call(n,t[i],i,t))return i;return-1},H.findNextWhere=function(t,e,n){H.isNullOrUndef(n)&&(n=-1);for(var i=n+1;i<t.length;i++){var a=t[i];if(e(a))return a}},H.findPreviousWhere=function(t,e,n){H.isNullOrUndef(n)&&(n=t.length);for(var i=n-1;i>=0;i--){var a=t[i];if(e(a))return a}},H.isNumber=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},H.almostEquals=function(t,e,n){return Math.abs(t-e)<n},H.almostWhole=function(t,e){var n=Math.round(t);return n-e<=t&&n+e>=t},H.max=function(t){return t.reduce((function(t,e){return isNaN(e)?t:Math.max(t,e)}),Number.NEGATIVE_INFINITY)},H.min=function(t){return t.reduce((function(t,e){return isNaN(e)?t:Math.min(t,e)}),Number.POSITIVE_INFINITY)},H.sign=Math.sign?function(t){return Math.sign(t)}:function(t){return 0===(t=+t)||isNaN(t)?t:t>0?1:-1},H.toRadians=function(t){return t*(Math.PI/180)},H.toDegrees=function(t){return t*(180/Math.PI)},H._decimalPlaces=function(t){if(H.isFinite(t)){for(var e=1,n=0;Math.round(t*e)/e!==t;)e*=10,n++;return n}},H.getAngleFromPoint=function(t,e){var n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),r=Math.atan2(i,n);return r<-.5*Math.PI&&(r+=2*Math.PI),{angle:r,distance:a}},H.distanceBetweenPoints=function(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))},H.aliasPixel=function(t){return t%2==0?0:.5},H._alignPixel=function(t,e,n){var i=t.currentDevicePixelRatio,a=n/2;return Math.round((e-a)*i)/i+a},H.splineCurve=function(t,e,n,i){var a=t.skip?e:t,r=e,o=n.skip?e:n,s=Math.sqrt(Math.pow(r.x-a.x,2)+Math.pow(r.y-a.y,2)),l=Math.sqrt(Math.pow(o.x-r.x,2)+Math.pow(o.y-r.y,2)),u=s/(s+l),d=l/(s+l),h=i*(u=isNaN(u)?0:u),c=i*(d=isNaN(d)?0:d);return{previous:{x:r.x-h*(o.x-a.x),y:r.y-h*(o.y-a.y)},next:{x:r.x+c*(o.x-a.x),y:r.y+c*(o.y-a.y)}}},H.EPSILON=Number.EPSILON||1e-14,H.splineCurveMonotone=function(t){var e,n,i,a,r,o,s,l,u,d=(t||[]).map((function(t){return{model:t._model,deltaK:0,mK:0}})),h=d.length;for(e=0;e<h;++e)if(!(i=d[e]).model.skip){if(n=e>0?d[e-1]:null,(a=e<h-1?d[e+1]:null)&&!a.model.skip){var c=a.model.x-i.model.x;i.deltaK=0!==c?(a.model.y-i.model.y)/c:0}!n||n.model.skip?i.mK=i.deltaK:!a||a.model.skip?i.mK=n.deltaK:this.sign(n.deltaK)!==this.sign(i.deltaK)?i.mK=0:i.mK=(n.deltaK+i.deltaK)/2}for(e=0;e<h-1;++e)i=d[e],a=d[e+1],i.model.skip||a.model.skip||(H.almostEquals(i.deltaK,0,this.EPSILON)?i.mK=a.mK=0:(r=i.mK/i.deltaK,o=a.mK/i.deltaK,(l=Math.pow(r,2)+Math.pow(o,2))<=9||(s=3/Math.sqrt(l),i.mK=r*s*i.deltaK,a.mK=o*s*i.deltaK)));for(e=0;e<h;++e)(i=d[e]).model.skip||(n=e>0?d[e-1]:null,a=e<h-1?d[e+1]:null,n&&!n.model.skip&&(u=(i.model.x-n.model.x)/3,i.model.controlPointPreviousX=i.model.x-u,i.model.controlPointPreviousY=i.model.y-u*i.mK),a&&!a.model.skip&&(u=(a.model.x-i.model.x)/3,i.model.controlPointNextX=i.model.x+u,i.model.controlPointNextY=i.model.y+u*i.mK))},H.nextItem=function(t,e,n){return n?e>=t.length-1?t[0]:t[e+1]:e>=t.length-1?t[t.length-1]:t[e+1]},H.previousItem=function(t,e,n){return n?e<=0?t[t.length-1]:t[e-1]:e<=0?t[0]:t[e-1]},H.niceNum=function(t,e){var n=Math.floor(H.log10(t)),i=t/Math.pow(10,n);return(e?i<1.5?1:i<3?2:i<7?5:10:i<=1?1:i<=2?2:i<=5?5:10)*Math.pow(10,n)},H.requestAnimFrame="undefined"==typeof window?function(t){t()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)},H.getRelativePosition=function(t,e){var n,i,a=t.originalEvent||t,r=t.target||t.srcElement,o=r.getBoundingClientRect(),s=a.touches;s&&s.length>0?(n=s[0].clientX,i=s[0].clientY):(n=a.clientX,i=a.clientY);var l=parseFloat(H.getStyle(r,"padding-left")),u=parseFloat(H.getStyle(r,"padding-top")),d=parseFloat(H.getStyle(r,"padding-right")),h=parseFloat(H.getStyle(r,"padding-bottom")),c=o.right-o.left-l-d,f=o.bottom-o.top-u-h;return{x:n=Math.round((n-o.left-l)/c*r.width/e.currentDevicePixelRatio),y:i=Math.round((i-o.top-u)/f*r.height/e.currentDevicePixelRatio)}},H.getConstraintWidth=function(t){return n(t,"max-width","clientWidth")},H.getConstraintHeight=function(t){return n(t,"max-height","clientHeight")},H._calculatePadding=function(t,e,n){return(e=H.getStyle(t,e)).indexOf("%")>-1?n*parseInt(e,10)/100:parseInt(e,10)},H._getParentNode=function(t){var e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e},H.getMaximumWidth=function(t){var e=H._getParentNode(t);if(!e)return t.clientWidth;var n=e.clientWidth,i=n-H._calculatePadding(e,"padding-left",n)-H._calculatePadding(e,"padding-right",n),a=H.getConstraintWidth(t);return isNaN(a)?i:Math.min(i,a)},H.getMaximumHeight=function(t){var e=H._getParentNode(t);if(!e)return t.clientHeight;var n=e.clientHeight,i=n-H._calculatePadding(e,"padding-top",n)-H._calculatePadding(e,"padding-bottom",n),a=H.getConstraintHeight(t);return isNaN(a)?i:Math.min(i,a)},H.getStyle=function(t,e){return t.currentStyle?t.currentStyle[e]:document.defaultView.getComputedStyle(t,null).getPropertyValue(e)},H.retinaScale=function(t,e){var n=t.currentDevicePixelRatio=e||"undefined"!=typeof window&&window.devicePixelRatio||1;if(1!==n){var i=t.canvas,a=t.height,r=t.width;i.height=a*n,i.width=r*n,t.ctx.scale(n,n),i.style.height||i.style.width||(i.style.height=a+"px",i.style.width=r+"px")}},H.fontString=function(t,e,n){return e+" "+t+"px "+n},H.longestText=function(t,e,n,i){var a=(i=i||{}).data=i.data||{},r=i.garbageCollect=i.garbageCollect||[];i.font!==e&&(a=i.data={},r=i.garbageCollect=[],i.font=e),t.font=e;var o,s,l,u,d,h=0,c=n.length;for(o=0;o<c;o++)if(null!=(u=n[o])&&!0!==H.isArray(u))h=H.measureText(t,a,r,h,u);else if(H.isArray(u))for(s=0,l=u.length;s<l;s++)null==(d=u[s])||H.isArray(d)||(h=H.measureText(t,a,r,h,d));var f=r.length/2;if(f>n.length){for(o=0;o<f;o++)delete a[r[o]];r.splice(0,f)}return h},H.measureText=function(t,e,n,i,a){var r=e[a];return r||(r=e[a]=t.measureText(a).width,n.push(a)),r>i&&(i=r),i},H.numberOfLabelLines=function(t){var e=1;return H.each(t,(function(t){H.isArray(t)&&t.length>e&&(e=t.length)})),e},H.color=_?function(t){return t instanceof CanvasGradient&&(t=N.global.defaultColor),_(t)}:function(t){return console.error("Color.js not found!"),t},H.getHoverColor=function(t){return t instanceof CanvasPattern||t instanceof CanvasGradient?t:H.color(t).saturate(.5).darken(.1).rgbString()}}(),en._adapters=rn,en.Animation=$,en.animationService=J,en.controllers=Jt,en.DatasetController=it,en.defaults=N,en.Element=K,en.elements=kt,en.Interaction=re,en.layouts=pe,en.platform=Oe,en.plugins=Le,en.Scale=yn,en.scaleService=Re,en.Ticks=on,en.Tooltip=Ye,en.helpers.each(fi,(function(t,e){en.scaleService.registerScaleType(e,t,t._defaults)})),Li)Li.hasOwnProperty(Bi)&&en.plugins.register(Li[Bi]);en.platform.initialize();var Ei=en;return"undefined"!=typeof window&&(window.Chart=en),en.Chart=en,en.Legend=Li.legend._element,en.Title=Li.title._element,en.pluginService=en.plugins,en.PluginBase=en.Element.extend({}),en.canvasHelpers=en.helpers.canvas,en.layoutService=en.layouts,en.LinearScaleBase=Cn,en.helpers.each(["Bar","Bubble","Doughnut","Line","PolarArea","Radar","Scatter"],(function(t){en[t]=function(e,n){return new en(e,en.helpers.merge(n||{},{type:t.charAt(0).toLowerCase()+t.slice(1)}))}})),Ei})); - - (function() { - 'use strict'; - window.addEventListener('beforeprint', function() { - for (var id in Chart.instances) { - Chart.instances[id].resize(); - } - }, false); - - var errorBarPlugin = (function () { - function drawErrorBar(chart, ctx, low, high, y, height, color) { - ctx.save(); - ctx.lineWidth = 3; - ctx.strokeStyle = color; - var area = chart.chartArea; - ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top); - ctx.clip(); - ctx.beginPath(); - ctx.moveTo(low, y - height); - ctx.lineTo(low, y + height); - ctx.moveTo(low, y); - ctx.lineTo(high, y); - ctx.moveTo(high, y - height); - ctx.lineTo(high, y + height); - ctx.stroke(); - ctx.restore(); - } - // Avoid sudden jumps in error bars when switching - // between linear and logarithmic scale - function conservativeError(vx, mx, now, final, scale) { - var finalDiff = Math.abs(mx - final); - var diff = Math.abs(vx - now); - return (diff > finalDiff) ? vx + scale * finalDiff : now; - } - return { - afterDatasetDraw: function(chart, easingOptions) { - var ctx = chart.ctx; - var easing = easingOptions.easingValue; - chart.data.datasets.forEach(function(d, i) { - var bars = chart.getDatasetMeta(i).data; - var axis = chart.scales[chart.options.scales.xAxes[0].id]; - bars.forEach(function(b, j) { - var value = axis.getValueForPixel(b._view.x); - var final = axis.getValueForPixel(b._model.x); - var errorBar = d.errorBars[j]; - var low = axis.getPixelForValue(value - errorBar.minus); - var high = axis.getPixelForValue(value + errorBar.plus); - var finalLow = axis.getPixelForValue(final - errorBar.minus); - var finalHigh = axis.getPixelForValue(final + errorBar.plus); - var l = easing === 1 ? finalLow : - conservativeError(b._view.x, b._model.x, low, - finalLow, -1.0); - var h = easing === 1 ? finalHigh : - conservativeError(b._view.x, b._model.x, - high, finalHigh, 1.0); - drawErrorBar(chart, ctx, l, h, b._view.y, 4, errorBar.color); - }); - }); - }, - }; - })(); - - // Formats the ticks on the X-axis on the scatter plot - var iterFormatter = function() { - var denom = 0; - return function(iters, index, values) { - if (iters == 0) { - return ''; - } - if (index == values.length - 1) { - return ''; - } - var power; - if (iters >= 1e9) { - denom = 1e9; - power = '⁹'; - } else if (iters >= 1e6) { - denom = 1e6; - power = '⁶'; - } else if (iters >= 1e3) { - denom = 1e3; - power = '³'; - } else { - denom = 1; - } - if (denom > 1) { - var value = (iters / denom).toFixed(); - return String(value) + '×10' + power; - } else { - return String(iters); - } - }; - }; - - var colors = ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"]; - var errorColors = ["#cda220", "#8fb8d8", "#ab2b2b", "#2d872d", "#7420cd"]; - - - // Positions tooltips at cursor. Required for overview since the bars may - // extend past the canvas width. - Chart.Tooltip.positioners.cursor = function(_elems, position) { - return position; - } - - function axisType(logaxis) { - return logaxis ? 'logarithmic' : 'linear'; - } - - function reportSort(a, b) { - return a.reportNumber - b.reportNumber; - } - - // adds groupNumber and group fields to reports; - // returns list of list of reports, grouped by group - function groupReports(reports) { - - function reportGroup(report) { - var parts = report.groups.slice(); - parts.pop(); - return parts.join('/'); - } - - var groups = []; - reports.forEach(function(report) { - report.group = reportGroup(report); - if (groups.length === 0) { - groups.push([report]); - } else { - var prevGroup = groups[groups.length - 1]; - var prevGroupName = prevGroup[0].group; - if (prevGroupName === report.group) { - prevGroup.push(report); - } else { - groups.push([report]); - } - } - report.groupNumber = groups.length - 1; - }); - return groups; - } - - // compares 2 arrays lexicographically - function lex(aParts, bParts) { - for(var i = 0; i < aParts.length && i < bParts.length; i++) { - var x = aParts[i]; - var y = bParts[i]; - if (x < y) { - return -1; - } - if (y < x) { - return 1; - } - } - return aParts.length - bParts.length; - } - function lexicalSort(a, b) { - return lex(a.groups, b.groups); - } - - function reverseLexicalSort(a, b) { - return lex(a.groups.slice().reverse(), b.groups.slice().reverse()); - } - - function durationSort(a, b) { - return a.reportAnalysis.anMean.estPoint - b.reportAnalysis.anMean.estPoint; - } - function reverseDurationSort(a,b) { - return -durationSort(a,b); - } - - function timeUnits(secs) { - if (secs < 0) - return timeUnits(-secs); - else if (secs >= 1e9) - return [1e-9, "Gs"]; - else if (secs >= 1e6) - return [1e-6, "Ms"]; - else if (secs >= 1) - return [1, "s"]; - else if (secs >= 1e-3) - return [1e3, "ms"]; - else if (secs >= 1e-6) - return [1e6, "\u03bcs"]; - else if (secs >= 1e-9) - return [1e9, "ns"]; - else if (secs >= 1e-12) - return [1e12, "ps"]; - return [1, "s"]; - } - - function formatUnit(raw, unit, precision) { - var v = precision ? raw.toPrecision(precision) : Math.round(raw); - var label = String(v) + ' ' + unit; - return label; - } - - function formatTime(value, precision) { - var units = timeUnits(value); - var scale = units[0]; - return formatUnit(value * scale, units[1], precision); - } - - // pure function that produces the 'data' object of the overview chart - function overviewData(state, reports) { - var order = state.order; - var sorter = order === 'report-index' ? reportSort - : order === 'lex' ? lexicalSort - : order === 'colex' ? reverseLexicalSort - : order === 'duration' ? durationSort - : order === 'rev-duration' ? reverseDurationSort - : reportSort; - var sortedReports = reports.filter(function(report) { - return !state.hidden[report.groupNumber]; - }).slice().sort(sorter); - var data = sortedReports.map(function(report) { - return report.reportAnalysis.anMean.estPoint; - }); - var labels = sortedReports.map(function(report) { - return report.groups.join(' / '); - }); - var upperBound = function(report) { - var est = report.reportAnalysis.anMean; - return est.estPoint + est.estError.confIntUDX; - }; - var errorBars = sortedReports.map(function(report) { - var est = report.reportAnalysis.anMean; - return { - minus: est.estError.confIntLDX, - plus: est.estError.confIntUDX, - color: errorColors[report.groupNumber % errorColors.length] - }; - }); - var top = sortedReports.map(upperBound).reduce(function(a, b) { - return Math.max(a, b); - }, 0); - var scale = top; - if(state.activeReport !== null) { - reports.forEach(function(report) { - if(report.reportNumber === state.activeReport) { - scale = upperBound(report); - } - }); - } - - return { - labels: labels, - top: top, - max: scale * 1.1, - reports: sortedReports, - datasets: [{ - borderWidth: 1, - backgroundColor: sortedReports.map(function(report) { - var active = report.reportNumber === state.activeReport; - var alpha = active ? 'ff' : 'a0'; - var color = colors[report.groupNumber % colors.length] + alpha; - if (active) { - return Chart.helpers.getHoverColor(color); - } else { - return color; - } - }), - barThickness: 16, - barPercentage: 0.8, - data: data, - errorBars: errorBars, - minBarLength: 2, - }] - }; - } - - function inside(box, point) { - return (point.x >= box.left && point.x <= box.right && point.y >= box.top && - point.y <= box.bottom); - } - - function overviewHover(event, elems) { - var chart = this; - var xAxis = chart.scales[chart.options.scales.xAxes[0].id]; - var yAxis = chart.scales[chart.options.scales.yAxes[0].id]; - var point = Chart.helpers.getRelativePosition(event, chart); - var over = - (inside(xAxis, point) || inside(yAxis, point) || elems.length > 0); - if (over) { - chart.canvas.style.cursor = "pointer"; - } else { - chart.canvas.style.cursor = "default"; - } - } - - // Re-renders the overview after clicking/sorting - function renderOverview(state, reports, chart) { - var data = overviewData(state, reports); - var xaxis = chart.options.scales.xAxes[0]; - xaxis.ticks.max = data.max; - chart.config.data.datasets[0].backgroundColor = data.datasets[0].backgroundColor; - chart.config.data.datasets[0].errorBars = data.datasets[0].errorBars; - chart.config.data.datasets[0].data = data.datasets[0].data; - chart.options.scales.xAxes[0].type = axisType(state.logaxis); - chart.options.legend.display = state.legend; - chart.data.labels = data.labels; - chart.update(); - } - - function overviewClick(state, reports) { - return function(event, elems) { - var chart = this; - var xAxis = chart.scales[chart.options.scales.xAxes[0].id]; - var yAxis = chart.scales[chart.options.scales.yAxes[0].id]; - var point = Chart.helpers.getRelativePosition(event, chart); - var sorted = overviewData(state, reports).reports; - - function activateBar(index) { - // Trying to activate active bar disables instead - if (sorted[index].reportNumber === state.activeReport) { - state.activeReport = null; - } else { - state.activeReport = sorted[index].reportNumber; - } - } - - if (inside(xAxis, point)) { - state.activeReport = null; - state.logaxis = !state.logaxis; - renderOverview(state, reports, chart); - } else if (inside(yAxis, point)) { - var index = yAxis.getValueForPixel(point.y); - activateBar(index); - renderOverview(state, reports, chart); - } else if (elems.length > 0) { - var elem = elems[0]; - var index = elem._index; - activateBar(index); - state.logaxis = false; - renderOverview(state, reports, chart); - } else if(inside(chart.chartArea, point)) { - state.activeReport = null; - renderOverview(state, reports, chart); - } - }; - } - - // listener for sort drop-down - function overviewSort(state, reports, chart) { - return function(event) { - state.order = event.currentTarget.value; - renderOverview(state, reports, chart); - }; - } - - // Returns a formatter for the ticks on the X-axis of the overview - function overviewTick(state) { - return function(value, index, values) { - var label = formatTime(value); - if (state.logaxis) { - const remain = Math.round(value / - (Math.pow(10, Math.floor(Chart.helpers.log10(value))))); - if (index === values.length - 1) { - // Draw endpoint if we don't span a full order of magnitude - if (values[index] / values[1] < 10) { - return label; - } else { - return ''; - } - } - if (remain === 1) { - return label; - } - return ''; - } else { - // Don't show the right endpoint - if (index === values.length - 1) { - return ''; - } - return label; - } - } - } - - function mkOverview(reports) { - var canvas = document.createElement('canvas'); - - var state = { - logaxis: false, - activeReport: null, - order: 'index', - hidden: {}, - legend: false, - }; - - - var data = overviewData(state, reports); - var chart = new Chart(canvas.getContext('2d'), { - type: 'horizontalBar', - data: data, - plugins: [errorBarPlugin], - options: { - onHover: overviewHover, - onClick: overviewClick(state, reports), - onResize: function(chart, size) { - if (size.width < 800) { - chart.options.scales.yAxes[0].ticks.mirror = true; - chart.options.scales.yAxes[0].ticks.padding = -10; - chart.options.scales.yAxes[0].ticks.fontColor = '#000'; - } else { - chart.options.scales.yAxes[0].ticks.fontColor = '#666'; - chart.options.scales.yAxes[0].ticks.mirror = false; - chart.options.scales.yAxes[0].ticks.padding = 0; - } - }, - elements: { - rectangle: { - borderWidth: 2, - }, - }, - scales: { - yAxes: [{ - ticks: { - // make sure we draw the ticks above the error bars - z: 2, - } - }], - xAxes: [{ - display: true, - type: axisType(state.logaxis), - ticks: { - autoSkip: false, - min: 0, - max: data.top * 1.1, - minRotation: 0, - maxRotation: 0, - callback: overviewTick(state), - } - }] - }, - responsive: true, - maintainAspectRatio: false, - legend: { - display: state.legend, - position: 'right', - onLeave: function() { - chart.canvas.style.cursor = 'default'; - }, - onHover: function() { - chart.canvas.style.cursor = 'pointer'; - }, - onClick: function(_event, item) { - // toggle hidden - state.hidden[item.groupNumber] = !state.hidden[item.groupNumber]; - renderOverview(state, reports, chart); - }, - labels: { - boxWidth: 12, - generateLabels: function() { - var groups = []; - var groupNames = []; - reports.forEach(function(report) { - var index = groups.indexOf(report.groupNumber); - if (index === -1) { - groups.push(report.groupNumber); - var groupName = report.groups.slice(0,report.groups.length-1).join(' / '); - groupNames.push(groupName); - } - }); - return groups.map(function(groupNumber, index) { - var color = colors[groupNumber % colors.length]; - return { - text: groupNames[index], - fillStyle: color, - hidden: state.hidden[groupNumber], - groupNumber: groupNumber, - }; - }); - }, - }, - }, - tooltips: { - position: 'cursor', - callbacks: { - label: function(item) { - return formatTime(item.xLabel, 3); - }, - }, - }, - title: { - display: false, - text: 'Chart.js Horizontal Bar Chart' - } - } - }); - document.getElementById('sort-overview') - .addEventListener('change', overviewSort(state, reports, chart)); - var toggle = document.getElementById('legend-toggle'); - toggle.addEventListener('mouseup', function () { - state.legend = !state.legend; - if(state.legend) { - toggle.classList.add('right'); - } else { - toggle.classList.remove('right'); - } - renderOverview(state, reports, chart); - }) - return canvas; - } - - function mkKDE(report) { - var canvas = document.createElement('canvas'); - var mean = report.reportAnalysis.anMean.estPoint; - var units = timeUnits(mean); - var scale = units[0]; - var reportKDE = report.reportKDEs[0]; - var data = reportKDE.kdeValues.map(function(time, index) { - var pdf = reportKDE.kdePDF[index]; - return { - x: time * scale, - y: pdf - }; - }); - var chart = new Chart(canvas.getContext('2d'), { - type: 'line', - data: { - datasets: [{ - label: 'KDE', - borderColor: colors[0], - borderWidth: 2, - backgroundColor: '#00000000', - data: data, - hoverBorderWidth: 1, - pointHitRadius: 8, - }, - { - label: 'mean' - } - ], - }, - plugins: [{ - afterDraw: function(chart) { - var ctx = chart.ctx; - var area = chart.chartArea; - var axis = chart.scales[chart.options.scales.xAxes[0].id]; - var value = axis.getPixelForValue(mean * scale); - ctx.save(); - ctx.strokeStyle = colors[1]; - ctx.lineWidth = 2; - ctx.beginPath(); - ctx.moveTo(value, area.top); - ctx.lineTo(value, area.bottom); - ctx.stroke(); - ctx.restore(); - }, - }], - options: { - title: { - display: true, - text: report.groups.join(' / ') + ' — time densities', - }, - elements: { - point: { - radius: 0, - hitRadius: 0 - } - }, - scales: { - xAxes: [{ - display: true, - type: 'linear', - scaleLabel: { - display: false, - labelString: 'Time' - }, - ticks: { - min: reportKDE.kdeValues[0] * scale, - max: reportKDE.kdeValues[reportKDE.kdeValues.length - 1] * scale, - callback: function(value, index, values) { - // Don't show endpoints - if (index === 0 || index === values.length - 1) { - return ''; - } - var str = String(value) + ' ' + units[1]; - return str; - }, - } - }], - yAxes: [{ - display: true, - type: 'linear', - ticks: { - min: 0, - callback: function() { - return ''; - }, - }, - }] - }, - responsive: true, - legend: { - display: false, - position: 'right', - }, - tooltips: { - mode: 'nearest', - callbacks: { - title: function() { - return ''; - }, - label: function( - item) { - return formatUnit(item.xLabel, units[1], 3); - }, - }, - }, - hover: { - intersect: false - }, - } - }); - return canvas; - } - - function mkScatter(report) { - - // collect the measured value for a given regression - function getMeasured(key) { - var ix = report.reportKeys.indexOf(key); - return report.reportMeasured.map(function(x) { - return x[ix]; - }); - } - - var canvas = document.createElement('canvas'); - var times = getMeasured("time"); - var iters = getMeasured("iters"); - var lastIter = iters[iters.length - 1]; - var olsTime = report.reportAnalysis.anRegress[0].regCoeffs.iters; - var dataPoints = times.map(function(time, i) { - return { - x: iters[i], - y: time - } - }); - var formatter = iterFormatter(); - var chart = new Chart(canvas.getContext('2d'), { - type: 'scatter', - data: { - datasets: [{ - data: dataPoints, - label: 'scatter', - borderWidth: 2, - pointHitRadius: 8, - borderColor: colors[1], - backgroundColor: '#fff', - }, - { - data: [ - {x: 0, y: 0 }, - { x: lastIter, y: olsTime.estPoint * lastIter } - ], - label: 'regression', - type: 'line', - backgroundColor: "#00000000", - borderColor: colors[0], - pointRadius: 0, - }, - { - data: [{ - x: 0, - y: 0 - }, { - x: lastIter, - y: (olsTime.estPoint - olsTime.estError.confIntLDX) * lastIter, - }], - label: 'lower', - type: 'line', - fill: 1, - borderWidth: 0, - pointRadius: 0, - borderColor: '#00000000', - backgroundColor: colors[0] + '33', - }, - { - data: [{ - x: 0, - y: 0 - }, { - x: lastIter, - y: (olsTime.estPoint + olsTime.estError.confIntUDX) * lastIter, - }], - label: 'upper', - type: 'line', - fill: 1, - borderWidth: 0, - borderColor: '#00000000', - pointRadius: 0, - backgroundColor: colors[0] + '33', - }, - ], - }, - options: { - title: { - display: true, - text: report.groups.join(' / ') + ' — time per iteration', - }, - scales: { - yAxes: [{ - display: true, - type: 'linear', - scaleLabel: { - display: false, - labelString: 'Time' - }, - ticks: { - callback: function(value, index, values) { - return formatTime(value); - }, - } - }], - xAxes: [{ - display: true, - type: 'linear', - scaleLabel: { - display: false, - labelString: 'Iterations' - }, - ticks: { - callback: formatter, - max: lastIter, - } - }], - }, - legend: { - display: false, - }, - tooltips: { - callbacks: { - label: function(ttitem, ttdata) { - var iters = ttitem.xLabel; - var duration = ttitem.yLabel; - return formatTime(duration, 3) + ' / ' + - iters.toLocaleString() + ' iters'; - }, - }, - }, - } - }); - return canvas; - } - - // Create an HTML Element with attributes and child nodes - function elem(tag, props, children) { - var node = document.createElement(tag); - if (children) { - children.forEach(function(child) { - if (typeof child === 'string') { - var txt = document.createTextNode(child); - node.appendChild(txt); - } else { - node.appendChild(child); - } - }); - } - Object.assign(node, props); - return node; - } - - function bounds(analysis) { - var mean = analysis.estPoint; - return { - low: mean - analysis.estError.confIntLDX, - mean: mean, - high: mean + analysis.estError.confIntUDX - }; - } - - function confidence(level) { - return String(1 - level) + ' confidence level'; - } - - function mkOutliers(report) { - var outliers = report.reportAnalysis.anOutlierVar; - return elem('div', {className: 'outliers'}, [ - elem('p', {}, [ - 'Outlying measurements have ', - outliers.ovDesc, - ' (', String((outliers.ovFraction * 100).toPrecision(3)), '%)', - ' effect on estimated standard deviation.' - ]) - ]); - } - - function mkTable(report) { - var analysis = report.reportAnalysis; - var timep4 = function(t) { - return formatTime(t, 3) - }; - var idformatter = function(t) { - return t.toPrecision(3) - }; - var rows = [ - Object.assign({ - label: 'OLS regression', - formatter: timep4 - }, - bounds(analysis.anRegress[0].regCoeffs.iters)), - Object.assign({ - label: 'R² goodness-of-fit', - formatter: idformatter - }, - bounds(analysis.anRegress[0].regRSquare)), - Object.assign({ - label: 'Mean execution time', - formatter: timep4 - }, - bounds(analysis.anMean)), - Object.assign({ - label: 'Standard deviation', - formatter: timep4 - }, - bounds(analysis.anStdDev)), - ]; - return elem('table', { - className: 'analysis' - }, [ - elem('thead', {}, [ - elem('tr', {}, [ - elem('th'), - elem('th', { - className: 'low', - title: confidence(analysis.anRegress[0].regCoeffs.iters.estError.confIntCL) - }, ['lower bound']), - elem('th', {}, ['estimate']), - elem('th', { - className: 'high', - title: confidence(analysis.anRegress[0].regCoeffs.iters.estError.confIntCL) - }, ['upper bound']), - ]) - ]), - elem('tbody', {}, rows.map(function(row) { - return elem('tr', {}, [ - elem('td', {}, [row.label]), - elem('td', {className: 'low'}, [row.formatter(row.low, 4)]), - elem('td', {}, [row.formatter(row.mean)]), - elem('td', {className: 'high'}, [row.formatter(row.high, 4)]), - ]); - })) - ]); - } - document.addEventListener('DOMContentLoaded', function() { - var rawJSON = document.getElementById('report-data').text; - var reportData = JSON.parse(rawJSON) - .map(function(report) { - report.groups = report.reportName.split('/'); - return report; - }); - groupReports(reportData); - var overview = document.getElementById('overview-chart'); - var overviewLineHeight = 16 * 1.25; - overview.style.height = - String(overviewLineHeight * reportData.length + 36) + 'px'; - overview.appendChild(mkOverview(reportData.slice())); - var reports = document.getElementById('reports'); - reportData.forEach(function(report, i) { - var id = 'report_' + String(i); - reports.appendChild( - elem('div', {id: id, className: 'report-details'}, [ - elem('h1', {}, [elem('a', {href: '#' + id}, [report.groups.join(' / ')])]), - elem('div', {className: 'kde'}, [mkKDE(report)]), - elem('div', {className: 'scatter'}, [mkScatter(report)]), - mkTable(report), mkOutliers(report) - ])); - }); - }, false); -})(); - - </script> - <style> - html,body { - padding: 0; margin: 0; - font-family: sans-serif; -} -* { - -webkit-tap-highlight-color: transparent; -} -div.scatter, div.kde { - position: relative; - display: inline-block; - box-sizing: border-box; - width: 50%; - padding: 0 2em; -} -.content, .explanation { - margin: auto; - max-width: 1000px; - padding: 0 20px; -} - -#legend-toggle { - cursor: pointer; -} - -.overview-info { - float:right; -} - -.overview-info a { - display: inline-block; - margin-left: 10px; -} -.overview-info .info { - font-size: 120%; - font-weight: 400; - vertical-align: middle; - line-height: 1em; -} -.chevron { - position:relative; - color: black; - display:block; - transition-property: transform; - transition-duration: 400ms; - line-height: 1em; - font-size: 180%; -} -.chevron.right { - transform: scale(-1,1); -} -.chevron::before { - vertical-align: middle; - content:"\2039"; -} - -select { - outline: none; - border:none; - background: transparent; -} - -footer .content { - padding: 0; -} - -span#explain-interactivity { - display-block: inline; - float: right; - color: #444; - font-size: 0.7em; -} - -@media screen and (max-width: 800px) { - div.scatter, div.kde { - width: 100%; - display: block; - } - .report-details .outliers { - margin: auto; - } - .report-details table { - margin: auto; - } -} -table.analysis .low, table.analysis .high { - opacity: 0.5; -} -.report-details { - margin: 2em 0; - page-break-inside: avoid; -} -a, a:hover, a:visited, a:active { - text-decoration: none; - color: #309ef2; -} -h1.title { - font-weight: 600; -} -h1 { - font-weight: 400; -} -#overview-chart { - width: 100%; /*height is determined by number of rows in JavaScript */ -} -footer { - background: #777777; - color: #ffffff; - padding: 20px; -} -footer a, footer a:hover, footer a:visited, footer a:active { - text-decoration: underline; - color: #fff; -} - -.explanation { - margin-top: 3em; -} - -.explanation h1 { - font-size: 2.6em; -} - -#grokularation.explanation li { - margin: 1em 0; -} - -#controls-explanation.explanation em { - font-weight: 600; - font-style: normal; -} - -@media print { - footer { - background: transparent; - color: black; - } - footer a, footer a:hover, footer a:visited, footer a:active { - color: #309ef2; - } - .no-print { - display: none; - } -} - - </style> - <script type="application/json" id="report-data"> - [{"reportAnalysis":{"anMean":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.5918709355982327e-11,"confIntUDX":2.9607390233713285e-11},"estPoint":9.106360888572829e-9},"anOutlierVar":{"ovDesc":"a slight","ovEffect":"Slight","ovFraction":6.737143023159825e-2},"anRegress":[{"regCoeffs":{"iters":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.6763788761244487e-11,"confIntUDX":1.6468105142732684e-11},"estPoint":9.096614263095112e-9},"y":{"estError":{"confIntCL":5.0e-2,"confIntLDX":5.7868969216318594e-5,"confIntUDX":5.3873819469498e-5},"estPoint":-1.89965930799961e-4}},"regRSquare":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.1530397141645832e-4,"confIntUDX":6.189785882004806e-5},"estPoint":0.9998424977692931},"regResponder":"time"}],"anStdDev":{"estError":{"confIntCL":5.0e-2,"confIntLDX":3.1940524528690886e-11,"confIntUDX":6.843837978395988e-11},"estPoint":7.27346604075967e-11}},"reportKDEs":[{"kdePDF":[9.931606075488966e8,1.0446311483745661e9,1.1464845639902506e9,1.2965437618608782e9,1.491547637557964e9,1.727179362628494e9,1.998136110213061e9,2.2982568299065623e9,2.620717970608426e9,2.9582966052431026e9,3.303688038174394e9,3.649852937184193e9,3.9903596668450484e9,4.31968283935058e9,4.633420512813919e9,4.928400385004462e9,5.202659063138075e9,5.455296200087194e9,5.686224155673746e9,5.895850465898425e9,6.084741408592668e9,6.253317736089339e9,6.401627077830508e9,6.52922242308152e9,6.635155299567513e9,6.718070115960201e9,6.7763675603010025e9,6.808394233799898e9,6.812615352872726e9,6.787737335532024e9,6.732764732156293e9,6.646996596909848e9,6.529985569037385e9,6.381493856597582e9,6.201481156386637e9,5.990150166223097e9,5.748058301478973e9,5.476284019000945e9,5.176617992812801e9,4.85173783236445e9,4.505322859430657e9,4.142073069456993e9,3.7676118941272745e9,3.3882721733002987e9,3.010784556149582e9,2.641903442299702e9,2.2880147745562897e9,1.954771361231472e9,1.6467954437233305e9,1.3674767504643753e9,1.1188798578844686e9,9.017600120116296e8,7.15673955964767e8,5.591633247823689e8,4.299835043065657e8,3.253503869132641e8,2.4218045502268296e8,1.7730498138150364e8,1.2764564554527739e8,9.034542869571006e7,6.285441349903045e7,4.29745477478034e7,2.8870311074783392e7,1.9053600175646566e7,1.2351255644524533e7,7862832.293523749,4914830.48186121,3015990.9532654574,1816671.7589945681,1073948.7195011273,623002.4922210469,354598.2259269887,198001.38800569507,108450.78055980211,58261.76645420628,30696.71066565336,15863.40139928159,8047.139692022314,4023.107564696037,2018.721815444101,1095.546339864918,797.0964160039194,965.7646637602897,1673.7654005465572,3244.3449793213904,6365.1275956224035,12319.268362039442,23385.05350289781,43482.41151544118,79175.31160885778,141169.37035284,246467.67007506167,421353.8574208979,705344.4473682788,1156172.7788911723,1855715.6798094162,2916536.115642558,4488389.43567646,6763648.023156671,9980190.449160652,1.4419962338167649e7,2.0401262981384832e7,2.826297453225845e7,3.833954552916834e7,5.092663124875632e7,6.6238850702506244e7,8.436299044722326e7,1.0521188300608647e8,1.2848572100459903e8,1.5364830502573544e8,1.7992528832738453e8,2.0632966605884564e8,2.3171661122398487e8,2.5486563990265465e8,2.7458362770757973e8,2.898182045255506e8,2.9976833755220944e8,3.0397810114449865e8,3.024010060477763e8,2.954256653350271e8,2.8385843975927883e8,2.688641717828093e8,2.5187123788457197e8,2.3445110785056865e8,2.1818489202187002e8,2.045298706102621e8,1.9469798460383764e8,1.8955621319835737e8],"kdeType":"time","kdeValues":[8.978554056224653e-9,8.982955739396322e-9,8.987357422567991e-9,8.991759105739662e-9,8.996160788911331e-9,9.000562472083e-9,9.00496415525467e-9,9.00936583842634e-9,9.01376752159801e-9,9.018169204769678e-9,9.022570887941347e-9,9.026972571113017e-9,9.031374254284687e-9,9.035775937456356e-9,9.040177620628026e-9,9.044579303799695e-9,9.048980986971365e-9,9.053382670143035e-9,9.057784353314704e-9,9.062186036486373e-9,9.066587719658042e-9,9.070989402829713e-9,9.075391086001382e-9,9.079792769173051e-9,9.08419445234472e-9,9.08859613551639e-9,9.09299781868806e-9,9.097399501859729e-9,9.101801185031398e-9,9.106202868203067e-9,9.110604551374738e-9,9.115006234546407e-9,9.119407917718076e-9,9.123809600889745e-9,9.128211284061414e-9,9.132612967233085e-9,9.137014650404754e-9,9.141416333576423e-9,9.145818016748092e-9,9.150219699919763e-9,9.154621383091432e-9,9.159023066263101e-9,9.16342474943477e-9,9.16782643260644e-9,9.17222811577811e-9,9.17662979894978e-9,9.181031482121449e-9,9.185433165293118e-9,9.189834848464789e-9,9.194236531636458e-9,9.198638214808127e-9,9.203039897979796e-9,9.207441581151465e-9,9.211843264323136e-9,9.216244947494805e-9,9.220646630666474e-9,9.225048313838143e-9,9.229449997009814e-9,9.233851680181483e-9,9.238253363353152e-9,9.242655046524821e-9,9.24705672969649e-9,9.251458412868161e-9,9.25586009603983e-9,9.2602617792115e-9,9.264663462383168e-9,9.269065145554839e-9,9.273466828726508e-9,9.277868511898177e-9,9.282270195069846e-9,9.286671878241516e-9,9.291073561413186e-9,9.295475244584855e-9,9.299876927756525e-9,9.304278610928194e-9,9.308680294099864e-9,9.313081977271534e-9,9.317483660443203e-9,9.321885343614872e-9,9.326287026786541e-9,9.330688709958212e-9,9.33509039312988e-9,9.33949207630155e-9,9.343893759473219e-9,9.34829544264489e-9,9.352697125816559e-9,9.357098808988228e-9,9.361500492159897e-9,9.365902175331566e-9,9.370303858503237e-9,9.374705541674906e-9,9.379107224846575e-9,9.383508908018244e-9,9.387910591189915e-9,9.392312274361584e-9,9.396713957533253e-9,9.401115640704922e-9,9.405517323876592e-9,9.409919007048262e-9,9.414320690219931e-9,9.4187223733916e-9,9.42312405656327e-9,9.42752573973494e-9,9.43192742290661e-9,9.436329106078279e-9,9.440730789249948e-9,9.445132472421617e-9,9.449534155593288e-9,9.453935838764957e-9,9.458337521936626e-9,9.462739205108295e-9,9.467140888279964e-9,9.471542571451635e-9,9.475944254623304e-9,9.480345937794973e-9,9.484747620966642e-9,9.489149304138313e-9,9.493550987309982e-9,9.497952670481651e-9,9.50235435365332e-9,9.506756036824991e-9,9.51115771999666e-9,9.51555940316833e-9,9.519961086339998e-9,9.524362769511667e-9,9.528764452683338e-9,9.533166135855007e-9,9.537567819026676e-9]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","peakMbAllocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportMeasured":[[2.9859947971999645e-6,2.184000000000127e-6,5577,1,null,null,null,null,null,null,null,null],[1.3720127753913403e-6,1.2830000000003602e-6,3927,2,null,null,null,null,null,null,null,null],[1.201988197863102e-6,1.081999999999906e-6,3366,3,null,null,null,null,null,null,null,null],[1.0619987733662128e-6,9.809999999997251e-7,2970,4,null,null,null,null,null,null,null,null],[1.0119983926415443e-6,9.4199999999987e-7,2970,5,null,null,null,null,null,null,null,null],[1.1119991540908813e-6,1.0209999999999213e-6,3201,6,null,null,null,null,null,null,null,null],[1.1119991540908813e-6,1.0320000000002029e-6,3201,7,null,null,null,null,null,null,null,null],[1.1220108717679977e-6,1.0620000000000247e-6,3267,8,null,null,null,null,null,null,null,null],[1.152046024799347e-6,1.0520000000000841e-6,3234,9,null,null,null,null,null,null,null,null],[1.2020464055240154e-6,1.1419999999999833e-6,3432,10,null,null,null,null,null,null,null,null],[1.2630480341613293e-6,1.1719999999998051e-6,3531,11,null,null,null,null,null,null,null,null],[1.2119999155402184e-6,1.151999999999924e-6,3597,12,null,null,null,null,null,null,null,null],[1.2620002962648869e-6,1.1819999999997458e-6,3729,13,null,null,null,null,null,null,null,null],[1.201988197863102e-6,1.1820000000001794e-6,3696,14,null,null,null,null,null,null,null,null],[1.2519885785877705e-6,1.2120000000000013e-6,3762,15,null,null,null,null,null,null,null,null],[1.2730015441775322e-6,1.2230000000002829e-6,3795,16,null,null,null,null,null,null,null,null],[1.3629905879497528e-6,1.3020000000003341e-6,3993,17,null,null,null,null,null,null,null,null],[1.3320241123437881e-6,1.313000000000182e-6,4026,18,null,null,null,null,null,null,null,null],[1.3530370779335499e-6,1.313000000000182e-6,4125,19,null,null,null,null,null,null,null,null],[1.402979250997305e-6,1.381999999999859e-6,4257,20,null,null,null,null,null,null,null,null],[1.4030374586582184e-6,1.3620000000004115e-6,4191,21,null,null,null,null,null,null,null,null],[1.4530378393828869e-6,1.4220000000000552e-6,4356,22,null,null,null,null,null,null,null,null],[1.4730030670762062e-6,1.4319999999999958e-6,4455,23,null,null,null,null,null,null,null,null],[1.4829565770924091e-6,1.4229999999999625e-6,4488,25,null,null,null,null,null,null,null,null],[1.5529803931713104e-6,1.5229999999998023e-6,4785,26,null,null,null,null,null,null,null,null],[1.5529803931713104e-6,1.5130000000002954e-6,4686,27,null,null,null,null,null,null,null,null],[1.642969436943531e-6,1.6330000000000164e-6,5016,28,null,null,null,null,null,null,null,null],[1.653039362281561e-6,1.6030000000001945e-6,5049,30,null,null,null,null,null,null,null,null],[1.634005457162857e-6,1.6029999999997609e-6,5082,31,null,null,null,null,null,null,null,null],[1.7039710655808449e-6,1.6629999999998382e-6,5247,33,null,null,null,null,null,null,null,null],[1.7829588614404202e-6,1.7339999999997635e-6,5544,35,null,null,null,null,null,null,null,null],[1.8529826775193214e-6,1.8140000000001558e-6,5544,36,null,null,null,null,null,null,null,null],[1.8430291675031185e-6,1.8039999999997815e-6,5643,38,null,null,null,null,null,null,null,null],[1.924054231494665e-6,1.8829999999998327e-6,5841,40,null,null,null,null,null,null,null,null],[1.9730068743228912e-6,1.9340000000003105e-6,6039,42,null,null,null,null,null,null,null,null],[2.003973349928856e-6,1.9840000000000135e-6,6336,44,null,null,null,null,null,null,null,null],[2.062995918095112e-6,2.0340000000001503e-6,6468,47,null,null,null,null,null,null,null,null],[2.134009264409542e-6,2.093999999999794e-6,6666,49,null,null,null,null,null,null,null,null],[2.173997927457094e-6,2.1240000000000495e-6,6798,52,null,null,null,null,null,null,null,null],[2.2840104065835476e-6,2.2139999999999486e-6,6963,54,null,null,null,null,null,null,null,null],[2.4239998310804367e-6,2.305000000000189e-6,7293,57,null,null,null,null,null,null,null,null],[2.394022885710001e-6,2.344000000000044e-6,7524,60,null,null,null,null,null,null,null,null],[2.5150366127490997e-6,2.4640000000001987e-6,7854,63,null,null,null,null,null,null,null,null],[2.574990503489971e-6,2.5150000000002427e-6,8184,66,null,null,null,null,null,null,null,null],[2.6249908842146397e-6,2.5850000000002607e-6,8283,69,null,null,null,null,null,null,null,null],[2.774992026388645e-6,2.745000000000178e-6,8613,73,null,null,null,null,null,null,null,null],[2.8249924071133137e-6,2.785000000000374e-6,8943,76,null,null,null,null,null,null,null,null],[2.94495839625597e-6,2.8949999999997207e-6,9240,80,null,null,null,null,null,null,null,null],[3.075983840972185e-6,3.035999999999664e-6,9735,84,null,null,null,null,null,null,null,null],[3.4259865060448647e-6,3.375999999999813e-6,10956,89,null,null,null,null,null,null,null,null],[3.4159747883677483e-6,3.3860000000001875e-6,10857,93,null,null,null,null,null,null,null,null],[3.5170232877135277e-6,3.4869999999999346e-6,11220,98,null,null,null,null,null,null,null,null],[3.627035766839981e-6,3.585999999999867e-6,11484,103,null,null,null,null,null,null,null,null],[3.7569552659988403e-6,3.706999999999929e-6,11979,108,null,null,null,null,null,null,null,null],[3.867025952786207e-6,3.817999999999617e-6,12309,113,null,null,null,null,null,null,null,null],[4.018016625195742e-6,3.957000000000179e-6,12804,119,null,null,null,null,null,null,null,null],[4.167028237134218e-6,4.127999999999944e-6,13365,125,null,null,null,null,null,null,null,null],[4.347995854914188e-6,4.289000000000202e-6,13959,131,null,null,null,null,null,null,null,null],[4.537985660135746e-6,4.478000000000034e-6,14421,138,null,null,null,null,null,null,null,null],[4.6289642341434956e-6,4.5890000000001555e-6,14883,144,null,null,null,null,null,null,null,null],[4.878966137766838e-6,4.858999999999853e-6,15642,152,null,null,null,null,null,null,null,null],[5.028967279940844e-6,5.0199999999996775e-6,16203,159,null,null,null,null,null,null,null,null],[5.299982149153948e-6,5.280000000000302e-6,17061,167,null,null,null,null,null,null,null,null],[5.540030542761087e-6,5.509999999999803e-6,17820,176,null,null,null,null,null,null,null,null],[5.770998541265726e-6,5.710999999999824e-6,18645,185,null,null,null,null,null,null,null,null],[6.002024747431278e-6,5.961000000000074e-6,19305,194,null,null,null,null,null,null,null,null],[6.27199187874794e-6,6.251999999999994e-6,20229,204,null,null,null,null,null,null,null,null],[6.491958629339933e-6,6.432000000000226e-6,20988,214,null,null,null,null,null,null,null,null],[6.893009413033724e-6,6.782999999999789e-6,21978,224,null,null,null,null,null,null,null,null],[7.072987500578165e-6,7.04299999999998e-6,23001,236,null,null,null,null,null,null,null,null],[7.354014087468386e-6,7.323000000000052e-6,23859,247,null,null,null,null,null,null,null,null],[7.784983608871698e-6,7.744999999999974e-6,25245,260,null,null,null,null,null,null,null,null],[8.164963219314814e-6,8.136000000000167e-6,26433,273,null,null,null,null,null,null,null,null],[8.466013241559267e-6,8.414999999999898e-6,27390,287,null,null,null,null,null,null,null,null],[8.847040589898825e-6,8.81699999999994e-6,28743,301,null,null,null,null,null,null,null,null],[9.206996764987707e-6,9.16700000000003e-6,29964,316,null,null,null,null,null,null,null,null],[9.6180010586977e-6,9.597999999999985e-6,31350,332,null,null,null,null,null,null,null,null],[1.0108982678502798e-5,1.0079000000000077e-5,32901,348,null,null,null,null,null,null,null,null],[1.0489951819181442e-5,1.0449999999999956e-5,34287,366,null,null,null,null,null,null,null,null],[1.0970979928970337e-5,1.0931000000000048e-5,35772,384,null,null,null,null,null,null,null,null],[1.1480995453894138e-5,1.1460999999999937e-5,37422,403,null,null,null,null,null,null,null,null],[1.203297870233655e-5,1.1982000000000225e-5,39204,424,null,null,null,null,null,null,null,null],[1.2612959835678339e-5,1.2563000000000157e-5,41085,445,null,null,null,null,null,null,null,null],[1.317501300945878e-5,1.3123999999999775e-5,42966,467,null,null,null,null,null,null,null,null],[1.379597233608365e-5,1.3776000000000066e-5,45144,490,null,null,null,null,null,null,null,null],[1.4497025404125452e-5,1.4427000000000016e-5,47157,515,null,null,null,null,null,null,null,null],[1.516897464171052e-5,1.5108000000000222e-5,49533,541,null,null,null,null,null,null,null,null],[1.583003904670477e-5,1.57899999999999e-5,51777,568,null,null,null,null,null,null,null,null],[1.661101123318076e-5,1.6561000000000006e-5,54318,596,null,null,null,null,null,null,null,null],[1.7373007722198963e-5,1.7342000000000052e-5,56793,626,null,null,null,null,null,null,null,null],[1.8163991626352072e-5,1.8153999999999827e-5,59499,657,null,null,null,null,null,null,null,null],[1.902499934658408e-5,1.902599999999968e-5,62601,690,null,null,null,null,null,null,null,null],[1.9957020413130522e-5,1.9937000000000253e-5,65538,725,null,null,null,null,null,null,null,null],[2.0938983652740717e-5,2.0889000000000064e-5,68673,761,null,null,null,null,null,null,null,null],[2.1881016436964273e-5,2.188100000000007e-5,71808,799,null,null,null,null,null,null,null,null],[2.296303864568472e-5,2.2943000000000095e-5,75405,839,null,null,null,null,null,null,null,null],[2.422597026452422e-5,2.4175999999999885e-5,79332,881,null,null,null,null,null,null,null,null],[2.527696778997779e-5,2.5278000000000106e-5,83061,925,null,null,null,null,null,null,null,null],[2.650899114087224e-5,2.6500000000000048e-5,86955,972,null,null,null,null,null,null,null,null],[2.779200440272689e-5,2.7782000000000067e-5,91146,1020,null,null,null,null,null,null,null,null],[2.9263959731906652e-5,2.9243999999999885e-5,96129,1071,null,null,null,null,null,null,null,null],[3.059697337448597e-5,3.057699999999995e-5,100848,1125,null,null,null,null,null,null,null,null],[3.2028998248279095e-5,3.2000000000000344e-5,105171,1181,null,null,null,null,null,null,null,null],[3.357295645400882e-5,3.357300000000028e-5,110220,1240,null,null,null,null,null,null,null,null],[5.012302426621318e-5,5.016400000000011e-5,165165,1302,null,null,null,null,null,null,null,null],[3.6999001167714596e-5,3.6998999999999366e-5,121572,1367,null,null,null,null,null,null,null,null],[3.8743019104003906e-5,3.8732999999999997e-5,127281,1436,null,null,null,null,null,null,null,null],[4.057603655382991e-5,4.052499999999959e-5,133320,1507,null,null,null,null,null,null,null,null],[4.261900903657079e-5,4.2588999999999995e-5,139953,1583,null,null,null,null,null,null,null,null],[4.486303078010678e-5,4.482399999999973e-5,147642,1662,null,null,null,null,null,null,null,null],[4.767900099977851e-5,4.766999999999966e-5,155133,1745,null,null,null,null,null,null,null,null],[4.917202750220895e-5,4.9162000000000164e-5,161733,1832,null,null,null,null,null,null,null,null],[5.167600465938449e-5,5.165700000000009e-5,169884,1924,null,null,null,null,null,null,null,null],[5.425198469310999e-5,5.420199999999972e-5,178233,2020,null,null,null,null,null,null,null,null],[5.678599700331688e-5,5.674599999999988e-5,186780,2121,null,null,null,null,null,null,null,null],[5.9721001889556646e-5,5.970200000000002e-5,196284,2227,null,null,null,null,null,null,null,null],[6.253703031688929e-5,6.252699999999972e-5,205722,2339,null,null,null,null,null,null,null,null],[6.572302663698792e-5,6.572300000000017e-5,216249,2456,null,null,null,null,null,null,null,null],[6.883795140311122e-5,6.883900000000023e-5,226380,2579,null,null,null,null,null,null,null,null],[7.222499698400497e-5,7.222500000000041e-5,237600,2708,null,null,null,null,null,null,null,null],[6.405904423445463e-5,6.398899999999954e-5,210309,2843,null,null,null,null,null,null,null,null],[2.3743952624499798e-5,2.364399999999975e-5,77385,2985,null,null,null,null,null,null,null,null],[2.2141030058264732e-5,2.214200000000017e-5,72864,3134,null,null,null,null,null,null,null,null],[2.3212982341647148e-5,2.3213000000000227e-5,76428,3291,null,null,null,null,null,null,null,null],[2.4375971406698227e-5,2.436500000000015e-5,80223,3456,null,null,null,null,null,null,null,null],[2.5618006475269794e-5,2.561799999999982e-5,84315,3629,null,null,null,null,null,null,null,null],[2.8363021556288004e-5,2.837299999999994e-5,93423,3810,null,null,null,null,null,null,null,null],[3.0687020625919104e-5,3.067800000000013e-5,101013,4001,null,null,null,null,null,null,null,null],[3.1539006158709526e-5,3.154899999999964e-5,103950,4201,null,null,null,null,null,null,null,null],[3.268098225817084e-5,3.268100000000055e-5,107580,4411,null,null,null,null,null,null,null,null],[3.450398799031973e-5,3.4524000000000186e-5,113751,4631,null,null,null,null,null,null,null,null],[3.666797420009971e-5,3.669900000000028e-5,120879,4863,null,null,null,null,null,null,null,null],[3.8141035474836826e-5,3.816199999999957e-5,125697,5106,null,null,null,null,null,null,null,null],[4.0164974052459e-5,4.0186000000000215e-5,132363,5361,null,null,null,null,null,null,null,null],[4.172802437096834e-5,4.1748000000000306e-5,137544,5629,null,null,null,null,null,null,null,null],[4.3902022298425436e-5,4.394300000000028e-5,144804,5911,null,null,null,null,null,null,null,null],[4.723801976069808e-5,4.72789999999999e-5,155760,6207,null,null,null,null,null,null,null,null],[4.709698259830475e-5,4.712799999999958e-5,155232,6517,null,null,null,null,null,null,null,null],[4.9632973968982697e-5,4.966300000000014e-5,163680,6843,null,null,null,null,null,null,null,null],[5.179701838642359e-5,5.183700000000076e-5,170808,7185,null,null,null,null,null,null,null,null],[5.471199983730912e-5,5.477300000000015e-5,180477,7544,null,null,null,null,null,null,null,null],[5.782797234132886e-5,5.786900000000032e-5,190674,7921,null,null,null,null,null,null,null,null],[5.9600977692753077e-5,5.9662000000000256e-5,196581,8318,null,null,null,null,null,null,null,null],[6.358901737257838e-5,6.364899999999982e-5,209748,8733,null,null,null,null,null,null,null,null],[6.672402378171682e-5,6.678500000000063e-5,220011,9170,null,null,null,null,null,null,null,null],[7.018097676336765e-5,7.023199999999993e-5,231528,9629,null,null,null,null,null,null,null,null],[7.272500079125166e-5,7.278600000000003e-5,239844,10110,null,null,null,null,null,null,null,null],[7.671298226341605e-5,7.678399999999988e-5,252978,10616,null,null,null,null,null,null,null,null],[8.08810000307858e-5,8.094200000000051e-5,266772,11146,null,null,null,null,null,null,null,null],[8.372700540348887e-5,8.378699999999923e-5,276111,11704,null,null,null,null,null,null,null,null],[8.852500468492508e-5,8.859599999999981e-5,291918,12289,null,null,null,null,null,null,null,null],[9.31830145418644e-5,9.325499999999955e-5,307197,12903,null,null,null,null,null,null,null,null],[9.790301555767655e-5,9.796300000000039e-5,322872,13549,null,null,null,null,null,null,null,null],[1.0296201799064875e-4,1.0304300000000058e-4,339504,14226,null,null,null,null,null,null,null,null],[1.0808097431436181e-4,1.0815299999999972e-4,356367,14937,null,null,null,null,null,null,null,null],[1.1277996236458421e-4,1.1284100000000068e-4,371877,15684,null,null,null,null,null,null,null,null],[1.1815998004749417e-4,1.1822099999999995e-4,389532,16469,null,null,null,null,null,null,null,null],[1.2447196058928967e-4,1.2455300000000034e-4,410388,17292,null,null,null,null,null,null,null,null],[1.3103499077260494e-4,1.3111600000000057e-4,432003,18157,null,null,null,null,null,null,null,null],[1.383880153298378e-4,1.384699999999999e-4,456192,19065,null,null,null,null,null,null,null,null],[1.4522101264446974e-4,1.45292e-4,478665,20018,null,null,null,null,null,null,null,null],[1.5211402205750346e-4,1.52185e-4,501435,21019,null,null,null,null,null,null,null,null],[1.6178202349692583e-4,1.6183300000000012e-4,533214,22070,null,null,null,null,null,null,null,null],[1.624730066396296e-4,1.6253400000000064e-4,535557,23173,null,null,null,null,null,null,null,null],[1.7752096755430102e-4,1.7757299999999858e-4,585123,24332,null,null,null,null,null,null,null,null],[1.8194998847320676e-4,1.8201000000000155e-4,599709,25549,null,null,null,null,null,null,null,null],[1.907559926621616e-4,1.9081699999999938e-4,628815,26826,null,null,null,null,null,null,null,null],[2.0026403944939375e-4,2.003349999999994e-4,660066,28167,null,null,null,null,null,null,null,null],[2.1026202011853456e-4,2.1033399999999952e-4,693033,29576,null,null,null,null,null,null,null,null],[2.207320067100227e-4,2.2078400000000165e-4,727518,31054,null,null,null,null,null,null,null,null],[2.292379504069686e-4,2.2929899999999878e-4,755469,32607,null,null,null,null,null,null,null,null],[2.3785297526046634e-4,2.3793499999999988e-4,783915,34238,null,null,null,null,null,null,null,null],[2.4973496329039335e-4,2.49797999999999e-4,822987,35950,null,null,null,null,null,null,null,null],[2.6241905288770795e-4,2.624820000000014e-4,864798,37747,null,null,null,null,null,null,null,null],[2.7514301473274827e-4,2.751949999999989e-4,906675,39634,null,null,null,null,null,null,null,null],[3.041769959963858e-4,3.0426000000000064e-4,1002408,41616,null,null,null,null,null,null,null,null],[3.146069939248264e-4,3.146590000000001e-4,1036629,43697,null,null,null,null,null,null,null,null],[3.297440125606954e-4,3.298169999999996e-4,1086591,45882,null,null,null,null,null,null,null,null],[3.4820003202185035e-4,3.482620000000002e-4,1147212,48176,null,null,null,null,null,null,null,null],[3.6996096605435014e-4,3.700429999999987e-4,1219185,50585,null,null,null,null,null,null,null,null],[3.89526947401464e-4,3.895900000000004e-4,1283502,53114,null,null,null,null,null,null,null,null],[4.089929861947894e-4,4.0905599999999966e-4,1347555,55770,null,null,null,null,null,null,null,null],[4.279380082152784e-4,4.280120000000002e-4,1409991,58558,null,null,null,null,null,null,null,null],[4.677620017901063e-4,4.6793599999999866e-4,1543674,61486,null,null,null,null,null,null,null,null],[5.022970144636929e-4,5.023709999999997e-4,1654983,64561,null,null,null,null,null,null,null,null],[5.037890514358878e-4,5.038330000000004e-4,1659735,67789,null,null,null,null,null,null,null,null],[5.253000417724252e-4,5.253640000000004e-4,1730751,71178,null,null,null,null,null,null,null,null],[5.584919708780944e-4,5.585559999999982e-4,1839981,74737,null,null,null,null,null,null,null,null],[5.789300194010139e-4,5.79004000000001e-4,1907433,78474,null,null,null,null,null,null,null,null],[6.074730190448463e-4,6.075370000000017e-4,2001351,82398,null,null,null,null,null,null,null,null],[6.277309730648994e-4,6.277950000000004e-4,2068110,86518,null,null,null,null,null,null,null,null],[6.561529589816928e-4,6.562090000000013e-4,2161566,90843,null,null,null,null,null,null,null,null],[6.887339986860752e-4,6.88809999999998e-4,2268981,95386,null,null,null,null,null,null,null,null],[7.265550084412098e-4,7.266000000000009e-4,2393523,100155,null,null,null,null,null,null,null,null],[7.803859771229327e-4,7.804609999999997e-4,2570964,105163,null,null,null,null,null,null,null,null],[8.119750418700278e-4,8.120310000000013e-4,2674881,110421,null,null,null,null,null,null,null,null],[8.376420009881258e-4,8.37708999999999e-4,2759427,115942,null,null,null,null,null,null,null,null],[8.790089632384479e-4,8.790759999999995e-4,2895717,121739,null,null,null,null,null,null,null,null],[9.422269649803638e-4,9.42303999999998e-4,3104013,127826,null,null,null,null,null,null,null,null],[1.03670300450176e-3,1.0367810000000005e-3,3415170,134217,null,null,null,null,null,null,null,null],[1.0511210421100259e-3,1.0511979999999997e-3,3462690,140928,null,null,null,null,null,null,null,null],[1.0980780352838337e-3,1.0981559999999994e-3,3617757,147975,null,null,null,null,null,null,null,null],[1.1848200228996575e-3,1.1848780000000003e-3,3903108,155373,null,null,null,null,null,null,null,null],[1.2174200383014977e-3,1.2174999999999998e-3,4010424,163142,null,null,null,null,null,null,null,null],[1.316634996328503e-3,1.3166949999999997e-3,4337223,171299,null,null,null,null,null,null,null,null],[1.4903200208209455e-3,1.4903900000000012e-3,4909311,179864,null,null,null,null,null,null,null,null],[1.5586370136588812e-3,1.5587289999999948e-3,5134371,188858,null,null,null,null,null,null,null,null],[1.610192994121462e-3,1.6102750000000013e-3,5304123,198300,null,null,null,null,null,null,null,null],[1.714357000309974e-3,1.7144399999999976e-3,5647323,208215,null,null,null,null,null,null,null,null],[1.7925130086950958e-3,1.7925869999999983e-3,5904657,218626,null,null,null,null,null,null,null,null],[1.8997430452145636e-3,1.899816999999998e-3,6257955,229558,null,null,null,null,null,null,null,null],[2.0159700070507824e-3,2.0160349999999994e-3,6640623,241036,null,null,null,null,null,null,null,null],[2.134780981577933e-3,2.134857000000004e-3,7032102,253087,null,null,null,null,null,null,null,null],[2.1779019734822214e-3,2.1779680000000023e-3,7174035,265742,null,null,null,null,null,null,null,null],[2.3244559997692704e-3,2.324532000000004e-3,7656825,279029,null,null,null,null,null,null,null,null],[2.398522978182882e-3,2.398601e-3,7900794,292980,null,null,null,null,null,null,null,null],[2.5498250033706427e-3,2.549893999999997e-3,8399094,307629,null,null,null,null,null,null,null,null],[2.668687026016414e-3,2.668786999999999e-3,8790705,323011,null,null,null,null,null,null,null,null],[2.7719700010493398e-3,2.7720509999999976e-3,9130836,339161,null,null,null,null,null,null,null,null],[2.939321973826736e-3,2.9394040000000066e-3,9682134,356119,null,null,null,null,null,null,null,null],[3.0518610146827996e-3,3.051944000000001e-3,10052823,373925,null,null,null,null,null,null,null,null],[3.1971129938028753e-3,3.197196999999999e-3,10531191,392622,null,null,null,null,null,null,null,null],[3.3623609924688935e-3,3.3624659999999945e-3,11075559,412253,null,null,null,null,null,null,null,null],[3.5384090151637793e-3,3.538505999999997e-3,11655435,432866,null,null,null,null,null,null,null,null],[3.69921897072345e-3,3.6993169999999936e-3,12185085,454509,null,null,null,null,null,null,null,null],[3.8921490195207298e-3,3.8922379999999923e-3,12820533,477234,null,null,null,null,null,null,null,null],[4.083676030859351e-3,4.083767000000002e-3,13451427,501096,null,null,null,null,null,null,null,null],[4.291393968742341e-3,4.291496000000006e-3,14135649,526151,null,null,null,null,null,null,null,null],[4.5067850151099265e-3,4.506879000000005e-3,14845083,552458,null,null,null,null,null,null,null,null],[4.781036986969411e-3,4.781151999999997e-3,15748524,580081,null,null,null,null,null,null,null,null],[4.970660957042128e-3,4.970757999999992e-3,16373016,609086,null,null,null,null,null,null,null,null],[5.210368020925671e-3,5.210486e-3,17162574,639540,null,null,null,null,null,null,null,null],[5.471844982821494e-3,5.471965999999995e-3,18023874,671517,null,null,null,null,null,null,null,null],[5.742268986068666e-3,5.742382000000004e-3,18914643,705093,null,null,null,null,null,null,null,null],[6.031569966580719e-3,6.031654000000011e-3,19867419,740347,null,null,null,null,null,null,null,null],[6.337188999168575e-3,6.33729600000002e-3,20874150,777365,null,null,null,null,null,null,null,null],[6.658619036898017e-3,6.658737999999997e-3,21932955,816233,null,null,null,null,null,null,null,null],[6.9919200032018125e-3,6.992042000000004e-3,23030733,857045,null,null,null,null,null,null,null,null],[7.334538968279958e-3,7.334662999999991e-3,24159333,899897,null,null,null,null,null,null,null,null],[7.72284297272563e-3,7.722961e-3,25438347,944892,null,null,null,null,null,null,null,null],[8.110958035103977e-3,8.111067999999999e-3,26716602,992136,null,null,null,null,null,null,null,null],[8.519057999365032e-3,8.51919100000001e-3,28060857,1041743,null,null,null,null,null,null,null,null],[9.049738000612706e-3,9.049976000000015e-3,29809362,1093831,null,null,null,null,null,null,null,null],[9.382657997775823e-3,9.382789000000002e-3,30905325,1148522,null,null,null,null,null,null,null,null],[9.854088013526052e-3,9.854240999999986e-3,32458305,1205948,null,null,null,null,null,null,null,null],[1.0322000016458333e-2,1.0322137000000009e-2,33999405,1266246,null,null,null,null,null,null,null,null],[1.0891443002037704e-2,1.0891593999999977e-2,35875191,1329558,null,null,null,null,null,null,null,null],[1.1401584022678435e-2,1.1401719000000005e-2,37555386,1396036,null,null,null,null,null,null,null,null],[1.1973269982263446e-2,1.197342899999998e-2,39438564,1465838,null,null,null,null,null,null,null,null],[1.2587225995957851e-2,1.258737900000001e-2,41460771,1539130,null,null,null,null,null,null,null,null],[1.3198696018662304e-2,1.3198843999999987e-2,43474926,1616086,null,null,null,null,null,null,null,null],[1.3863054977264255e-2,1.3863228000000005e-2,45663222,1696890,null,null,null,null,null,null,null,null],[1.4567888982128352e-2,1.4568057999999995e-2,47984805,1781735,null,null,null,null,null,null,null,null],[1.5372741036117077e-2,1.5372965000000016e-2,50636091,1870822,null,null,null,null,null,null,null,null],[1.6047809971496463e-2,1.6047999000000035e-2,52859400,1964363,null,null,null,null,null,null,null,null],[1.68577489675954e-2,1.6857944999999985e-2,55527285,2062581,null,null,null,null,null,null,null,null],[1.7932684044353664e-2,1.7933048000000007e-2,59068845,2165710,null,null,null,null,null,null,null,null],[1.858933997573331e-2,1.858954800000001e-2,61230774,2273996,null,null,null,null,null,null,null,null],[1.9519192981533706e-2,1.951939800000002e-2,64293603,2387695,null,null,null,null,null,null,null,null],[2.0560456032399088e-2,2.056076899999998e-2,67723821,2507080,null,null,null,null,null,null,null,null],[2.1535142965149134e-2,2.153538300000002e-2,70933863,2632434,null,null,null,null,null,null,null,null],[2.2682933951728046e-2,2.268316199999998e-2,74714508,2764056,null,null,null,null,null,null,null,null],[2.3774439992848784e-2,2.377467600000005e-2,78309759,2902259,null,null,null,null,null,null,null,null],[2.4924944969825447e-2,2.4925191000000013e-2,82099380,3047372,null,null,null,null,null,null,null,null],[3.036867902847007e-2,3.0369775999999904e-2,100033296,3199740,null,null,null,null,null,null,null,null],[3.0574041011277586e-2,3.0574417999999937e-2,100707057,3359727,null,null,null,null,null,null,null,null],[3.1890206038951874e-2,3.189054300000005e-2,105041904,3527714,null,null,null,null,null,null,null,null],[3.3934498031158e-2,3.3931794000000015e-2,111776115,3704100,null,null,null,null,null,null,null,null],[3.533452999545261e-2,3.533499200000001e-2,116387502,3889305,null,null,null,null,null,null,null,null],[3.685817099176347e-2,3.6858515000000036e-2,121405614,4083770,null,null,null,null,null,null,null,null],[3.8699414988514036e-2,3.8699821999999995e-2,127470453,4287958,null,null,null,null,null,null,null,null],[4.083123098826036e-2,4.083161499999999e-2,134492259,4502356,null,null,null,null,null,null,null,null],[4.337995400419459e-2,4.338044699999999e-2,142887855,4727474,null,null,null,null,null,null,null,null],[4.5395844033919275e-2,4.539630100000003e-2,149527587,4963848,null,null,null,null,null,null,null,null],[4.77365399710834e-2,4.773458999999991e-2,157237839,5212040,null,null,null,null,null,null,null,null],[4.9544300010893494e-2,4.954481900000007e-2,163191996,5472642,null,null,null,null,null,null,null,null],[5.2063490031287074e-2,5.2063996e-2,171489747,5746274,null,null,null,null,null,null,null,null],[5.445809499360621e-2,5.4458600000000024e-2,179377110,6033588,null,null,null,null,null,null,null,null],[5.78279200126417e-2,5.782849899999998e-2,190476957,6335268,null,null,null,null,null,null,null,null],[6.084545800695196e-2,6.0846069999999974e-2,200416557,6652031,null,null,null,null,null,null,null,null],[6.384176603751257e-2,6.384235999999999e-2,210285636,6984633,null,null,null,null,null,null,null,null],[6.660954799735919e-2,6.661014200000004e-2,219402183,7333864,null,null,null,null,null,null,null,null],[6.95765310083516e-2,6.95771380000001e-2,229174968,7700558,null,null,null,null,null,null,null,null],[7.366417499724776e-2,7.36648820000001e-2,242639331,8085585,null,null,null,null,null,null,null,null],[7.751908397767693e-2,7.751557099999995e-2,255336675,8489865,null,null,null,null,null,null,null,null],[8.111650496721268e-2,8.111720600000005e-2,267185787,8914358,null,null,null,null,null,null,null,null],[8.518016198650002e-2,8.51809750000001e-2,280571346,9360076,null,null,null,null,null,null,null,null],[8.914823300438002e-2,8.914908500000007e-2,293641656,9828080,null,null,null,null,null,null,null,null],[9.34192180284299e-2,9.342002199999988e-2,307709061,10319484,null,null,null,null,null,null,null,null],[9.867934900103137e-2,9.868026100000016e-2,325035711,10835458,null,null,null,null,null,null,null,null],[0.10399009298998863,0.10399100500000014,342528120,11377231,null,null,null,null,null,null,null,null],[0.10917620599502698,0.10917719600000009,359610702,11946092,null,null,null,null,null,null,null,null],[0.11496545298723504,0.11496801899999998,378685263,12543397,null,null,null,null,null,null,null,null],[0.11922384501667693,0.11922490899999971,392705874,13170567,null,null,null,null,null,null,null,null],[0.1258279909961857,0.12582455700000006,414458682,13829095,null,null,null,null,null,null,null,null],[0.1320721060037613,0.13207447000000005,435030156,14520550,null,null,null,null,null,null,null,null],[0.1393518340191804,0.13935448100000025,459008979,15246578,null,null,null,null,null,null,null,null],[0.14501006697537377,0.14501131299999992,477641736,16008907,null,null,null,null,null,null,null,null],[0.1533388089737855,0.15334022800000024,505075692,16809352,null,null,null,null,null,null,null,null],[0.16058630601037294,0.16059004199999993,528955878,17649820,null,null,null,null,null,null,null,null],[0.1696129809715785,0.1696153220000003,558683004,18532311,null,null,null,null,null,null,null,null],[0.1769879759522155,0.17698957999999987,582972258,19458926,null,null,null,null,null,null,null,null],[0.1861679860157892,0.18617129200000004,613215768,20431872,null,null,null,null,null,null,null,null],[0.19564638298470527,0.1956496689999998,644435913,21453466,null,null,null,null,null,null,null,null],[0.2049338149954565,0.20493568599999978,675022161,22526139,null,null,null,null,null,null,null,null],[0.214223189977929,0.2142251599999998,705620025,23652446,null,null,null,null,null,null,null,null],[0.22455388703383505,0.22455564300000042,739646292,24835069,null,null,null,null,null,null,null,null],[0.23659971298184246,0.2365938639999996,779324502,26076822,null,null,null,null,null,null,null,null]],"reportName":"fib/1","reportNumber":0,"reportOutliers":{"highMild":0,"highSevere":1,"lowMild":0,"lowSevere":0,"samplesSeen":44}},{"reportAnalysis":{"anMean":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.4639016642762622e-10,"confIntUDX":2.1670345260269087e-10},"estPoint":2.4729011445781207e-8},"anOutlierVar":{"ovDesc":"a moderate","ovEffect":"Moderate","ovFraction":0.36557582003817074},"anRegress":[{"regCoeffs":{"iters":{"estError":{"confIntCL":5.0e-2,"confIntLDX":2.5776555757917e-10,"confIntUDX":2.961541932491451e-10},"estPoint":2.4944687628466725e-8},"y":{"estError":{"confIntCL":5.0e-2,"confIntLDX":9.759173441256622e-5,"confIntUDX":7.327400413269949e-5},"estPoint":-5.027601299366412e-5}},"regRSquare":{"estError":{"confIntCL":5.0e-2,"confIntLDX":4.522295681896882e-5,"confIntUDX":1.844665932593248e-4},"estPoint":0.9992739833517263},"regResponder":"time"}],"anStdDev":{"estError":{"confIntCL":5.0e-2,"confIntLDX":9.656665140957106e-11,"confIntUDX":5.290221906756506e-11},"estPoint":5.812261496408389e-10}},"reportKDEs":[{"kdePDF":[-25.033060231416904,471.87721293456934,7934.124858778293,127930.45319806116,1412061.346520924,1.1077764392941294e7,6.233129370328541e7,2.5629713032143623e8,7.899823653082111e8,1.8815655400092204e9,3.564033530117799e9,5.481770206663521e9,6.927359738730565e9,7.22527424514244e9,6.215560201028286e9,4.452052732677399e9,2.8457586379722295e9,1.9348454192488823e9,1.594267022072115e9,1.4542940473538778e9,1.3030050633789275e9,1.1043340056067436e9,9.358100677366215e8,8.962853451772625e8,9.277135991558222e8,8.454140099618506e8,5.956708689054052e8,3.2603919686349016e8,1.970481137240725e8,2.4362745682386443e8,3.761964358371315e8,4.456346929150531e8,3.709349714806778e8,2.1477966976330283e8,8.6414559139467e7,2.415627063543913e7,4691436.321117351,633100.9554126489,59295.240049212116,3914.150593529916,128.95819955401882,49.00821402111042,-41.08150919938445,38.994140897648805,-36.85440275838137,34.776604804716676,-32.7551219528178,30.7895343529821,-28.880379979720317,27.027923444048145,-25.23164348532409,23.490039575118793,-21.80062823949053,20.16005965210942,-18.56417906151408,17.00817320999244,-15.486611470234786,13.993533487949298,-12.522444599434126,11.066331973169167,-9.617618705586521,8.16810480705756,-6.708881546468919,5.230188726646448,-3.721286732949173,2.1702230932883806,-0.5636264266692081,-1.1136063031004921,2.878645595380913,-4.7511287464240395,6.753642337162726,-8.912228654612539,11.256973450316835,-13.822549250503599,16.648714781815666,-19.780532251611056,23.26811658942905,-27.16346056925755,31.646960137924637,-30.903148116382834,216.75293522649707,3817.6686415191775,59401.33469750879,632984.1762799734,4691564.901964832,2.41561229352846e7,8.641453588106756e7,2.14775455086061e8,3.708719526340991e8,4.4494207872407115e8,3.708719553903246e8,2.147754495359412e8,8.64145443013773e7,2.4156111527951457e7,4691579.456550821,632966.2670567362,59422.85766551803,3792.2179403069385,246.6368317886657,-59.671629616678445,257.59207046422495,4153.781963386106,67514.4638789105,759752.145457279,6084446.254522076,3.4931623052918054e7,1.4549490574895728e8,4.465698725648631e8,1.0310107440369058e9,1.8380744207237566e9,2.610263940880715e9,3.0471790187068405e9,3.004599623047369e9,2.583510303117147e9,2.0691896182992766e9,1.6912978534152453e9,1.4185357764903119e9,1.0896734779131424e9,6.82837669371261e8,3.2673895038146025e8,1.153890368389826e8,2.9488744496974308e7,5384323.547791064,696209.8209623827,63433.20502040137,4013.7537630110273,199.6779084861687,-0.6058604912350835],"kdeType":"time","kdeValues":[2.414797231110446e-8,2.4160956617807207e-8,2.417394092450995e-8,2.4186925231212694e-8,2.419990953791544e-8,2.4212893844618184e-8,2.4225878151320926e-8,2.423886245802367e-8,2.4251846764726417e-8,2.4264831071429162e-8,2.4277815378131904e-8,2.429079968483465e-8,2.4303783991537394e-8,2.4316768298240136e-8,2.432975260494288e-8,2.4342736911645627e-8,2.4355721218348372e-8,2.4368705525051114e-8,2.438168983175386e-8,2.4394674138456604e-8,2.440765844515935e-8,2.442064275186209e-8,2.4433627058564837e-8,2.4446611365267582e-8,2.4459595671970324e-8,2.447257997867307e-8,2.4485564285375814e-8,2.449854859207856e-8,2.45115328987813e-8,2.4524517205484047e-8,2.4537501512186792e-8,2.4550485818889534e-8,2.456347012559228e-8,2.4576454432295024e-8,2.458943873899777e-8,2.460242304570051e-8,2.4615407352403257e-8,2.4628391659106002e-8,2.4641375965808747e-8,2.465436027251149e-8,2.4667344579214234e-8,2.468032888591698e-8,2.469331319261972e-8,2.4706297499322466e-8,2.4719281806025212e-8,2.4732266112727957e-8,2.47452504194307e-8,2.4758234726133444e-8,2.477121903283619e-8,2.4784203339538935e-8,2.4797187646241676e-8,2.4810171952944422e-8,2.4823156259647167e-8,2.483614056634991e-8,2.4849124873052654e-8,2.48621091797554e-8,2.4875093486458145e-8,2.4888077793160886e-8,2.4901062099863632e-8,2.4914046406566377e-8,2.492703071326912e-8,2.4940015019971864e-8,2.495299932667461e-8,2.4965983633377355e-8,2.4978967940080096e-8,2.4991952246782842e-8,2.5004936553485587e-8,2.5017920860188332e-8,2.5030905166891074e-8,2.504388947359382e-8,2.5056873780296565e-8,2.5069858086999306e-8,2.5082842393702052e-8,2.5095826700404797e-8,2.5108811007107542e-8,2.5121795313810284e-8,2.513477962051303e-8,2.5147763927215775e-8,2.516074823391852e-8,2.5173732540621262e-8,2.5186716847324007e-8,2.5199701154026752e-8,2.5212685460729494e-8,2.522566976743224e-8,2.5238654074134985e-8,2.525163838083773e-8,2.5264622687540472e-8,2.5277606994243217e-8,2.5290591300945962e-8,2.5303575607648704e-8,2.531655991435145e-8,2.5329544221054195e-8,2.534252852775694e-8,2.5355512834459682e-8,2.5368497141162427e-8,2.5381481447865172e-8,2.5394465754567917e-8,2.540745006127066e-8,2.5420434367973404e-8,2.543341867467615e-8,2.544640298137889e-8,2.5459387288081637e-8,2.5472371594784382e-8,2.5485355901487127e-8,2.549834020818987e-8,2.5511324514892614e-8,2.552430882159536e-8,2.5537293128298105e-8,2.5550277435000847e-8,2.5563261741703592e-8,2.5576246048406337e-8,2.558923035510908e-8,2.5602214661811824e-8,2.561519896851457e-8,2.5628183275217315e-8,2.5641167581920057e-8,2.5654151888622802e-8,2.5667136195325547e-8,2.568012050202829e-8,2.5693104808731034e-8,2.570608911543378e-8,2.5719073422136525e-8,2.5732057728839267e-8,2.5745042035542012e-8,2.5758026342244757e-8,2.5771010648947503e-8,2.5783994955650244e-8,2.579697926235299e-8]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","peakMbAllocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportMeasured":[[1.1220108717679977e-6,7.109999993204497e-7,1683,1,null,null,null,null,null,null,null,null],[4.2997999116778374e-7,3.8100000043783666e-7,1221,2,null,null,null,null,null,null,null,null],[3.6100391298532486e-7,3.4000000059819513e-7,1056,3,null,null,null,null,null,null,null,null],[3.600143827497959e-7,3.5099999973198237e-7,1089,4,null,null,null,null,null,null,null,null],[3.8102734833955765e-7,3.49999999649242e-7,1056,5,null,null,null,null,null,null,null,null],[3.909808583557606e-7,3.8099999954965824e-7,1221,6,null,null,null,null,null,null,null,null],[4.200264811515808e-7,4.1100000025551253e-7,1287,7,null,null,null,null,null,null,null,null],[4.4103944674134254e-7,4.3000000005122274e-7,1386,8,null,null,null,null,null,null,null,null],[4.909816198050976e-7,4.709999998908643e-7,1518,9,null,null,null,null,null,null,null,null],[5.00993337482214e-7,4.809999998300896e-7,1617,10,null,null,null,null,null,null,null,null],[5.509937182068825e-7,5.30999999526216e-7,1716,11,null,null,null,null,null,null,null,null],[5.509937182068825e-7,5.410000003536197e-7,1716,12,null,null,null,null,null,null,null,null],[6.00994098931551e-7,5.710000001712956e-7,1815,13,null,null,null,null,null,null,null,null],[6.210175342857838e-7,6.009999999889715e-7,1947,14,null,null,null,null,null,null,null,null],[6.509944796562195e-7,6.41000000634051e-7,1980,15,null,null,null,null,null,null,null,null],[6.710179150104523e-7,6.509999996850979e-7,2046,16,null,null,null,null,null,null,null,null],[6.909831427037716e-7,6.719999996462889e-7,2145,17,null,null,null,null,null,null,null,null],[7.310300134122372e-7,7.120000002913685e-7,2310,18,null,null,null,null,null,null,null,null],[7.709604687988758e-7,7.420000001090443e-7,2376,19,null,null,null,null,null,null,null,null],[7.810303941369057e-7,7.719999999267202e-7,2442,20,null,null,null,null,null,null,null,null],[8.119968697428703e-7,7.819999998659455e-7,2574,21,null,null,null,null,null,null,null,null],[8.320203050971031e-7,8.219999996228466e-7,11649,22,null,null,null,null,null,null,null,null],[9.320210665464401e-7,9.21999999903278e-7,3003,23,null,null,null,null,null,null,null,null],[9.320210665464401e-7,9.020000000248274e-7,2904,25,null,null,null,null,null,null,null,null],[9.710201993584633e-7,9.509999996382135e-7,3069,26,null,null,null,null,null,null,null,null],[9.720097295939922e-7,9.619999996601791e-7,3102,27,null,null,null,null,null,null,null,null],[1.001986674964428e-6,9.91999999477855e-7,3168,28,null,null,null,null,null,null,null,null],[1.0619987733662128e-6,1.0420000000621599e-6,3366,30,null,null,null,null,null,null,null,null],[1.0919757187366486e-6,1.0619999999406105e-6,3465,31,null,null,null,null,null,null,null,null],[1.133012119680643e-6,1.1219999995759622e-6,3630,33,null,null,null,null,null,null,null,null],[1.192034687846899e-6,1.1820000000994924e-6,3828,35,null,null,null,null,null,null,null,null],[1.2219534255564213e-6,1.2129999999999086e-6,3927,36,null,null,null,null,null,null,null,null],[1.292035449296236e-6,1.2730000005234388e-6,4158,38,null,null,null,null,null,null,null,null],[1.333013642579317e-6,1.31300000028034e-6,4290,40,null,null,null,null,null,null,null,null],[1.3830140233039856e-6,1.3629999999764664e-6,4488,42,null,null,null,null,null,null,null,null],[1.4430261217057705e-6,1.4330000004392218e-6,4653,44,null,null,null,null,null,null,null,null],[1.5230034478008747e-6,1.5119999998702838e-6,4917,47,null,null,null,null,null,null,null,null],[1.5730038285255432e-6,1.5629999996491506e-6,5115,49,null,null,null,null,null,null,null,null],[1.6729463823139668e-6,1.6430000000511313e-6,5412,52,null,null,null,null,null,null,null,null],[1.7130514606833458e-6,1.7030000005746615e-6,5544,54,null,null,null,null,null,null,null,null],[1.8139835447072983e-6,1.7930000000276891e-6,5841,57,null,null,null,null,null,null,null,null],[1.894019078463316e-6,1.8829999994807167e-6,6138,60,null,null,null,null,null,null,null,null],[1.9639846868813038e-6,1.952999999943472e-6,6369,63,null,null,null,null,null,null,null,null],[2.0440202206373215e-6,2.024000000488968e-6,6633,66,null,null,null,null,null,null,null,null],[2.134009264409542e-6,2.123999999881221e-6,6930,69,null,null,null,null,null,null,null,null],[2.263986971229315e-6,2.2340000001008775e-6,7293,73,null,null,null,null,null,null,null,null],[2.334010787308216e-6,2.31499999969742e-6,7590,76,null,null,null,null,null,null,null,null],[2.425047568976879e-6,2.4149999999778515e-6,7920,80,null,null,null,null,null,null,null,null],[2.555025275796652e-6,2.5350000001367334e-6,8283,84,null,null,null,null,null,null,null,null],[3.0249939300119877e-6,3.0060000000275977e-6,9900,89,null,null,null,null,null,null,null,null],[2.855027560144663e-6,2.835000000089849e-6,9306,93,null,null,null,null,null,null,null,null],[2.9549701139330864e-6,2.9450000003095056e-6,9603,98,null,null,null,null,null,null,null,null],[3.105960786342621e-6,3.0860000004295784e-6,10098,103,null,null,null,null,null,null,null,null],[3.25602013617754e-6,3.2259999995787325e-6,10560,108,null,null,null,null,null,null,null,null],[3.3659744076430798e-6,3.356000000565018e-6,10989,113,null,null,null,null,null,null,null,null],[3.5470002330839634e-6,3.5369999995538137e-6,11583,119,null,null,null,null,null,null,null,null],[3.69601184502244e-6,3.6760000003965843e-6,12078,125,null,null,null,null,null,null,null,null],[3.857014235109091e-6,3.8469999994461546e-6,12639,131,null,null,null,null,null,null,null,null],[4.058005288243294e-6,4.047000000007017e-6,13266,138,null,null,null,null,null,null,null,null],[4.217028617858887e-6,4.208000000005541e-6,13794,144,null,null,null,null,null,null,null,null],[4.447996616363525e-6,4.437999999495901e-6,14553,152,null,null,null,null,null,null,null,null],[4.667963366955519e-6,4.649000000078729e-6,15246,159,null,null,null,null,null,null,null,null],[4.869012627750635e-6,4.849000000639592e-6,15906,167,null,null,null,null,null,null,null,null],[5.139969289302826e-6,5.128999999826078e-6,16830,176,null,null,null,null,null,null,null,null],[5.390029400587082e-6,5.359999999399179e-6,17622,185,null,null,null,null,null,null,null,null],[5.620007868856192e-6,5.601000000687861e-6,18414,194,null,null,null,null,null,null,null,null],[5.901034455746412e-6,5.880999999874348e-6,19305,204,null,null,null,null,null,null,null,null],[6.192014552652836e-6,6.1719999999709785e-6,20229,214,null,null,null,null,null,null,null,null],[6.471993401646614e-6,6.461999999984869e-6,21219,224,null,null,null,null,null,null,null,null],[6.793008651584387e-6,6.783000000787354e-6,22242,236,null,null,null,null,null,null,null,null],[7.104012183845043e-6,7.0939999998742564e-6,23265,247,null,null,null,null,null,null,null,null],[7.483991794288158e-6,7.474000000229353e-6,24519,260,null,null,null,null,null,null,null,null],[7.824040949344635e-6,7.814000000827548e-6,25674,273,null,null,null,null,null,null,null,null],[8.20501009002328e-6,8.195000000377206e-6,26928,287,null,null,null,null,null,null,null,null],[8.616014383733273e-6,8.60599999974454e-6,28248,301,null,null,null,null,null,null,null,null],[9.01601742953062e-6,9.007000000060827e-6,29568,316,null,null,null,null,null,null,null,null],[9.457988198846579e-6,9.448000000134016e-6,31053,332,null,null,null,null,null,null,null,null],[9.91899287328124e-6,9.908000000002914e-6,32604,348,null,null,null,null,null,null,null,null],[1.0409974493086338e-5,1.039899999977223e-5,34188,366,null,null,null,null,null,null,null,null],[1.0910967830568552e-5,1.089999999948077e-5,35838,384,null,null,null,null,null,null,null,null],[1.1452008038759232e-5,1.1431999999977904e-5,37587,403,null,null,null,null,null,null,null,null],[1.2033036909997463e-5,1.202300000002765e-5,39567,424,null,null,null,null,null,null,null,null],[1.2614007573574781e-5,1.2594000000198946e-5,41448,445,null,null,null,null,null,null,null,null],[1.3204000424593687e-5,1.3193999999216999e-5,43395,467,null,null,null,null,null,null,null,null],[1.3855984434485435e-5,1.3845999999873015e-5,45573,490,null,null,null,null,null,null,null,null],[1.4556979294866323e-5,1.4558000000164384e-5,47850,515,null,null,null,null,null,null,null,null],[1.5277997590601444e-5,1.5268999999484834e-5,50193,541,null,null,null,null,null,null,null,null],[1.602998236194253e-5,1.6010000000399316e-5,52701,568,null,null,null,null,null,null,null,null],[1.6811012756079435e-5,1.6790999999294343e-5,55242,596,null,null,null,null,null,null,null,null],[1.7642974853515625e-5,1.7642999999623044e-5,58047,626,null,null,null,null,null,null,null,null],[1.848494866862893e-5,1.848500000001252e-5,60786,657,null,null,null,null,null,null,null,null],[1.942599192261696e-5,1.9426000000599686e-5,63921,690,null,null,null,null,null,null,null,null],[2.0388048142194748e-5,2.037800000032064e-5,67089,725,null,null,null,null,null,null,null,null],[2.138002309948206e-5,2.137999999973772e-5,70356,761,null,null,null,null,null,null,null,null],[2.2432010155171156e-5,2.2431999999739105e-5,73821,799,null,null,null,null,null,null,null,null],[2.3544009309262037e-5,2.3533999999436617e-5,77451,839,null,null,null,null,null,null,null,null],[2.4726963602006435e-5,2.4726999999558075e-5,81378,881,null,null,null,null,null,null,null,null],[2.5938032194972038e-5,2.5928999999536018e-5,85371,925,null,null,null,null,null,null,null,null],[2.7260975912213326e-5,2.7260999999612068e-5,89727,972,null,null,null,null,null,null,null,null],[2.8593000024557114e-5,2.8593999999770858e-5,94149,1020,null,null,null,null,null,null,null,null],[3.00369574688375e-5,3.00269999993219e-5,98835,1071,null,null,null,null,null,null,null,null],[3.154895966872573e-5,3.154900000001959e-5,103851,1125,null,null,null,null,null,null,null,null],[3.3070973586291075e-5,3.307199999991184e-5,108900,1181,null,null,null,null,null,null,null,null],[3.471499076113105e-5,3.4705000000023745e-5,114246,1240,null,null,null,null,null,null,null,null],[3.642798401415348e-5,3.642799999958868e-5,119889,1302,null,null,null,null,null,null,null,null],[3.823102451860905e-5,3.823199999963833e-5,125895,1367,null,null,null,null,null,null,null,null],[4.01550205424428e-5,4.015499999976413e-5,132165,1436,null,null,null,null,null,null,null,null],[4.2118015699088573e-5,4.21079999997076e-5,138666,1507,null,null,null,null,null,null,null,null],[4.424300277605653e-5,4.424299999961079e-5,145662,1583,null,null,null,null,null,null,null,null],[4.863098729401827e-5,4.8641000000237966e-5,160215,1662,null,null,null,null,null,null,null,null],[4.875101149082184e-5,4.8750999999569444e-5,160545,1745,null,null,null,null,null,null,null,null],[5.116499960422516e-5,5.11760000003747e-5,168498,1832,null,null,null,null,null,null,null,null],[5.370000144466758e-5,5.370099999968403e-5,176847,1924,null,null,null,null,null,null,null,null],[5.636498099192977e-5,5.636599999991887e-5,185658,2020,null,null,null,null,null,null,null,null],[5.9180951211601496e-5,5.918000000004753e-5,194898,2121,null,null,null,null,null,null,null,null],[6.214599125087261e-5,6.214600000031822e-5,204633,2227,null,null,null,null,null,null,null,null],[6.526097422465682e-5,6.525199999973808e-5,214896,2339,null,null,null,null,null,null,null,null],[6.850797217339277e-5,6.849800000008344e-5,225621,2456,null,null,null,null,null,null,null,null],[7.190497126430273e-5,7.191500000036655e-5,236808,2579,null,null,null,null,null,null,null,null],[7.549097063019872e-5,7.550100000042193e-5,248688,2708,null,null,null,null,null,null,null,null],[7.924699457362294e-5,7.925899999960961e-5,261030,2843,null,null,null,null,null,null,null,null],[8.32049991004169e-5,8.320600000022438e-5,274032,2985,null,null,null,null,null,null,null,null],[8.733296999707818e-5,8.733399999982794e-5,287595,3134,null,null,null,null,null,null,null,null],[9.17009892873466e-5,9.170199999974926e-5,301983,3291,null,null,null,null,null,null,null,null],[9.627902181819081e-5,9.628000000017067e-5,317130,3456,null,null,null,null,null,null,null,null],[1.0111898882314563e-4,1.0111899999998286e-4,333036,3629,null,null,null,null,null,null,null,null],[1.0612799087539315e-4,1.061289999997328e-4,349569,3810,null,null,null,null,null,null,null,null],[1.1144799645990133e-4,1.1145900000020248e-4,367059,4001,null,null,null,null,null,null,null,null],[1.1698796879500151e-4,1.1698899999945667e-4,385341,4201,null,null,null,null,null,null,null,null],[1.2283900287002325e-4,1.2285000000034074e-4,404646,4411,null,null,null,null,null,null,null,null],[1.2893998064100742e-4,1.2897100000053285e-4,424776,4631,null,null,null,null,null,null,null,null],[1.3539200881496072e-4,1.3542299999969032e-4,446127,4863,null,null,null,null,null,null,null,null],[1.4218600699678063e-4,1.4220699999967223e-4,468468,5106,null,null,null,null,null,null,null,null],[1.4924799324944615e-4,1.4928900000032996e-4,491700,5361,null,null,null,null,null,null,null,null],[1.56712019816041e-4,1.5675399999981465e-4,516318,5629,null,null,null,null,null,null,null,null],[1.6456696903333068e-4,1.6459900000054262e-4,542223,5911,null,null,null,null,null,null,null,null],[1.7280294559895992e-4,1.7284299999964503e-4,569382,6207,null,null,null,null,null,null,null,null],[1.8137803999707103e-4,1.8143000000048204e-4,597729,6517,null,null,null,null,null,null,null,null],[1.9045500084757805e-4,1.9049700000017822e-4,627528,6843,null,null,null,null,null,null,null,null],[1.999730011448264e-4,2.000149999998868e-4,659010,7185,null,null,null,null,null,null,null,null],[2.1001201821491122e-4,2.1006299999992706e-4,692043,7544,null,null,null,null,null,null,null,null],[2.2042100317776203e-4,2.2047299999972125e-4,726363,7921,null,null,null,null,null,null,null,null],[2.338959602639079e-4,2.339380000000446e-4,770616,8318,null,null,null,null,null,null,null,null],[2.4533801479265094e-4,2.4538999999990097e-4,808500,8733,null,null,null,null,null,null,null,null],[2.5517598260194063e-4,2.5523800000026853e-4,840840,9170,null,null,null,null,null,null,null,null],[2.6803999207913876e-4,2.6809100000058095e-4,883179,9629,null,null,null,null,null,null,null,null],[2.814849722199142e-4,2.815370000002204e-4,927564,10110,null,null,null,null,null,null,null,null],[2.9551098123192787e-4,2.955729999998269e-4,973797,10616,null,null,null,null,null,null,null,null],[3.097070148214698e-4,3.0974999999955344e-4,1020459,11146,null,null,null,null,null,null,null,null],[3.240240039303899e-4,3.2408700000008395e-4,1067715,11704,null,null,null,null,null,null,null,null],[3.404549788683653e-4,3.4050699999976786e-4,1121802,12289,null,null,null,null,null,null,null,null],[3.5735598066821694e-4,3.574100000003355e-4,1177407,12903,null,null,null,null,null,null,null,null],[3.7583097582682967e-4,3.759030000001218e-4,1238391,13549,null,null,null,null,null,null,null,null],[4.032220458611846e-4,4.032949999999147e-4,1328646,14226,null,null,null,null,null,null,null,null],[4.35382011346519e-4,4.355760000001041e-4,1438371,14937,null,null,null,null,null,null,null,null],[4.7347298823297024e-4,4.735670000002301e-4,1560075,15684,null,null,null,null,null,null,null,null],[4.711890360340476e-4,4.7125299999972725e-4,1552485,16469,null,null,null,null,null,null,null,null],[4.926690016873181e-4,4.927229999998062e-4,1623171,17292,null,null,null,null,null,null,null,null],[5.16803003847599e-4,5.168879999999376e-4,1702668,18157,null,null,null,null,null,null,null,null],[5.425310228019953e-4,5.426159999997182e-4,1787511,19065,null,null,null,null,null,null,null,null],[5.588220083154738e-4,5.588660000004353e-4,1841103,20018,null,null,null,null,null,null,null,null],[5.818450008518994e-4,5.819099999992972e-4,1916970,21019,null,null,null,null,null,null,null,null],[6.157280295155942e-4,6.157829999997588e-4,2028411,22070,null,null,null,null,null,null,null,null],[6.603809888474643e-4,6.604570000003918e-4,2175657,23173,null,null,null,null,null,null,null,null],[6.939350278116763e-4,6.939990000001117e-4,2286174,24332,null,null,null,null,null,null,null,null],[7.108759600669146e-4,7.109410000003535e-4,2341944,25549,null,null,null,null,null,null,null,null],[7.437770254909992e-4,7.438530000003496e-4,2450349,26826,null,null,null,null,null,null,null,null],[7.80866015702486e-4,7.809319999996234e-4,2572548,28167,null,null,null,null,null,null,null,null],[8.356189937330782e-4,8.356950000001362e-4,2752893,29576,null,null,null,null,null,null,null,null],[8.850510348565876e-4,8.851380000001186e-4,2915715,31054,null,null,null,null,null,null,null,null],[9.072209941223264e-4,9.072890000005884e-4,2988711,32607,null,null,null,null,null,null,null,null],[9.894350077956915e-4,9.895430000002037e-4,3259608,34238,null,null,null,null,null,null,null,null],[1.0583139955997467e-3,1.0583809999999971e-3,3487011,35950,null,null,null,null,null,null,null,null],[1.0933089652098715e-3,1.0934069999999352e-3,3601818,37747,null,null,null,null,null,null,null,null],[1.1605540057644248e-3,1.1611340000001746e-3,3830871,39634,null,null,null,null,null,null,null,null],[1.2148360256105661e-3,1.214885000000443e-3,4001679,41616,null,null,null,null,null,null,null,null],[1.2682650121860206e-3,1.2680239999998122e-3,4176942,43697,null,null,null,null,null,null,null,null],[1.3147220015525818e-3,1.3147820000005694e-3,4330887,45882,null,null,null,null,null,null,null,null],[1.3914559967815876e-3,1.3915060000000423e-3,4583370,48176,null,null,null,null,null,null,null,null],[1.449362956918776e-3,1.4494540000002942e-3,4774506,50585,null,null,null,null,null,null,null,null],[1.495618955232203e-3,1.4956909999996881e-3,4926735,53114,null,null,null,null,null,null,null,null],[1.5599590260535479e-3,1.5600509999993406e-3,5138793,55770,null,null,null,null,null,null,null,null],[1.6359509900212288e-3,1.6360440000005028e-3,5389098,58558,null,null,null,null,null,null,null,null],[1.717503007967025e-3,1.7175859999998266e-3,5657718,61486,null,null,null,null,null,null,null,null],[1.8506619962863624e-3,1.8507449999995984e-3,6096321,64561,null,null,null,null,null,null,null,null],[1.9595249905250967e-3,1.95962999999999e-3,6454899,67789,null,null,null,null,null,null,null,null],[2.038571983575821e-3,2.0386470000000045e-3,6715269,71178,null,null,null,null,null,null,null,null],[2.1695360192097723e-3,2.1696219999993716e-3,7146579,74737,null,null,null,null,null,null,null,null],[2.2472109994851053e-3,2.2472979999994536e-3,7402461,78474,null,null,null,null,null,null,null,null],[2.3032159660942852e-3,2.303323000000468e-3,7586997,82398,null,null,null,null,null,null,null,null],[2.4569520028308034e-3,2.457029999999527e-3,8093283,86518,null,null,null,null,null,null,null,null],[2.5408989749848843e-3,2.5409779999998605e-3,8369757,90843,null,null,null,null,null,null,null,null],[2.6689469814300537e-3,2.6690470000003685e-3,8791497,95386,null,null,null,null,null,null,null,null],[2.802106027957052e-3,2.8021870000003446e-3,9230100,100155,null,null,null,null,null,null,null,null],[3.0183690250851214e-3,3.0184520000000603e-3,9942570,105163,null,null,null,null,null,null,null,null],[3.0882700229994953e-3,3.0883619999997336e-3,10172712,110421,null,null,null,null,null,null,null,null],[3.201149986125529e-3,3.201245000000519e-3,10544523,115942,null,null,null,null,null,null,null,null],[2.9520150274038315e-3,2.952106999999593e-3,9724011,121739,null,null,null,null,null,null,null,null],[3.1020959722809494e-3,3.102188999999811e-3,10218318,127826,null,null,null,null,null,null,null,null],[3.2553619821555912e-3,3.2554359999998894e-3,10723119,134217,null,null,null,null,null,null,null,null],[3.419075976125896e-3,3.4191720000000814e-3,11262372,140928,null,null,null,null,null,null,null,null],[3.588431980460882e-3,3.588530000000034e-3,11820303,147975,null,null,null,null,null,null,null,null],[3.7730970070697367e-3,3.7731850000000122e-3,12428493,155373,null,null,null,null,null,null,null,null],[3.964533971156925e-3,3.964614000000033e-3,13058991,163142,null,null,null,null,null,null,null,null],[4.152233945205808e-3,4.152334999999674e-3,13677312,171299,null,null,null,null,null,null,null,null],[4.396218981128186e-3,4.38949999999938e-3,14480994,179864,null,null,null,null,null,null,null,null],[4.608013958204538e-3,4.6081079999993335e-3,15178515,188858,null,null,null,null,null,null,null,null],[4.8116829711943865e-3,4.81178999999976e-3,15849471,198300,null,null,null,null,null,null,null,null],[5.057181988377124e-3,5.057288999999798e-3,16658037,208215,null,null,null,null,null,null,null,null],[5.314111011102796e-3,5.314199999999936e-3,17504223,218626,null,null,null,null,null,null,null,null],[5.582020967267454e-3,5.582131999999795e-3,18386775,229558,null,null,null,null,null,null,null,null],[5.859828961547464e-3,5.859931999999901e-3,19301667,241036,null,null,null,null,null,null,null,null],[6.144660001154989e-3,6.144786000000124e-3,20240055,253087,null,null,null,null,null,null,null,null],[6.451231020037085e-3,6.451350000000744e-3,21249789,265742,null,null,null,null,null,null,null,null],[6.780846975743771e-3,6.780977000000021e-3,22335687,279029,null,null,null,null,null,null,null,null],[7.106222969014198e-3,7.10634699999968e-3,23407329,292980,null,null,null,null,null,null,null,null],[7.483688008505851e-3,7.483792999999572e-3,24650505,307629,null,null,null,null,null,null,null,null],[7.842916995286942e-3,7.843055000000376e-3,25833885,323011,null,null,null,null,null,null,null,null],[8.231642015744e-3,8.231762999999503e-3,27114186,339161,null,null,null,null,null,null,null,null],[8.645844005513936e-3,8.645968999999809e-3,28478571,356119,null,null,null,null,null,null,null,null],[9.086596022825688e-3,9.086725000000406e-3,29930241,373925,null,null,null,null,null,null,null,null],[9.55191400134936e-3,9.552045999999592e-3,31463025,392622,null,null,null,null,null,null,null,null],[1.0013355000410229e-2,1.0013499000000259e-2,32982906,412253,null,null,null,null,null,null,null,null],[1.059920695843175e-2,1.0599436000000573e-2,34913043,432866,null,null,null,null,null,null,null,null],[1.1071338027250022e-2,1.1071481000000105e-2,36467673,454509,null,null,null,null,null,null,null,null],[1.1590857000555843e-2,1.1591002999999489e-2,38178954,477234,null,null,null,null,null,null,null,null],[1.2174506031442434e-2,1.2174656000000006e-2,40101303,501096,null,null,null,null,null,null,null,null],[1.2792046996764839e-2,1.2792201999999975e-2,42135390,526151,null,null,null,null,null,null,null,null],[1.3417874986771494e-2,1.3418044999999879e-2,44196900,552458,null,null,null,null,null,null,null,null],[1.4248274033889174e-2,1.424844899999922e-2,46932105,580081,null,null,null,null,null,null,null,null],[1.4854745008051395e-2,1.485494499999973e-2,48929727,609086,null,null,null,null,null,null,null,null],[1.5565299021545798e-2,1.5565484999999768e-2,51270153,639540,null,null,null,null,null,null,null,null],[1.63057409808971e-2,1.630599200000038e-2,53709117,671517,null,null,null,null,null,null,null,null],[1.7397496034391224e-2,1.7398217000000216e-2,57306843,705093,null,null,null,null,null,null,null,null],[1.801024901214987e-2,1.8010432999999715e-2,59323308,740347,null,null,null,null,null,null,null,null],[1.888897898606956e-2,1.888919900000019e-2,62217903,777365,null,null,null,null,null,null,null,null],[1.988355297362432e-2,1.9883780999999878e-2,65493813,816233,null,null,null,null,null,null,null,null],[2.0825710031203926e-2,2.0825935000000406e-2,68597100,857045,null,null,null,null,null,null,null,null],[2.2223929001484066e-2,2.2224573999999997e-2,73204296,899897,null,null,null,null,null,null,null,null],[2.3176544986199588e-2,2.317709700000048e-2,76341738,944892,null,null,null,null,null,null,null,null],[2.410111902281642e-2,2.410193900000035e-2,79387737,992136,null,null,null,null,null,null,null,null],[2.5368262024130672e-2,2.5368529999999723e-2,83559564,1041743,null,null,null,null,null,null,null,null],[2.7295517036691308e-2,2.7295990000000714e-2,89908566,1093831,null,null,null,null,null,null,null,null],[2.8167893004138023e-2,2.8168183000000013e-2,92781084,1148522,null,null,null,null,null,null,null,null],[2.9317578009795398e-2,2.931786500000033e-2,96568065,1205948,null,null,null,null,null,null,null,null],[3.0783672002144158e-2,3.0783961000000026e-2,101397021,1266246,null,null,null,null,null,null,null,null],[3.2468824996612966e-2,3.2469757999999516e-2,106951218,1329558,null,null,null,null,null,null,null,null],[3.4044572967104614e-2,3.404487600000028e-2,112137729,1396036,null,null,null,null,null,null,null,null],[3.598321898607537e-2,3.598372699999963e-2,118524384,1465838,null,null,null,null,null,null,null,null],[3.7679462984669954e-2,3.767985299999932e-2,124111053,1539130,null,null,null,null,null,null,null,null],[3.9541966980323195e-2,3.9542381000000404e-2,130245885,1616086,null,null,null,null,null,null,null,null],[4.124537401366979e-2,4.1245789999999616e-2,135856644,1696890,null,null,null,null,null,null,null,null],[4.3289995985105634e-2,4.32903979999999e-2,142590987,1781735,null,null,null,null,null,null,null,null],[4.5471495017409325e-2,4.5471923000000025e-2,149776572,1870822,null,null,null,null,null,null,null,null],[4.7792432946152985e-2,4.7792918999999934e-2,157421781,1964363,null,null,null,null,null,null,null,null],[5.0295241991989315e-2,5.029573499999973e-2,165665511,2062581,null,null,null,null,null,null,null,null],[5.2595111017581075e-2,5.259558100000028e-2,173240661,2165710,null,null,null,null,null,null,null,null],[5.5277973995544016e-2,5.5278453999999755e-2,182077533,2273996,null,null,null,null,null,null,null,null],[5.8021020027808845e-2,5.802152000000049e-2,191112768,2387695,null,null,null,null,null,null,null,null],[6.095867801923305e-2,6.0959242000000025e-2,200789259,2507080,null,null,null,null,null,null,null,null],[6.405672599794343e-2,6.405281299999999e-2,210993618,2632434,null,null,null,null,null,null,null,null],[6.718005199218169e-2,6.718063000000019e-2,221281170,2764056,null,null,null,null,null,null,null,null],[7.063243095763028e-2,7.063312499999963e-2,232653333,2902259,null,null,null,null,null,null,null,null],[7.40192270022817e-2,7.401983699999981e-2,243808257,3047372,null,null,null,null,null,null,null,null],[7.780699199065566e-2,7.78076590000003e-2,256284732,3199740,null,null,null,null,null,null,null,null],[8.200011198641732e-2,8.200089000000066e-2,270096585,3359727,null,null,null,null,null,null,null,null],[8.577892900211737e-2,8.577972599999928e-2,282543492,3527714,null,null,null,null,null,null,null,null],[9.023066097870469e-2,9.023142199999956e-2,297206349,3704100,null,null,null,null,null,null,null,null],[9.45879080099985e-2,9.458880000000036e-2,311559039,3889305,null,null,null,null,null,null,null,null],[9.937034698668867e-2,9.937120500000063e-2,327311226,4083770,null,null,null,null,null,null,null,null],[0.1095963490079157,0.10959725300000045,360993930,4287958,null,null,null,null,null,null,null,null],[0.11552848300198093,0.11552953999999982,380534154,4502356,null,null,null,null,null,null,null,null],[0.12088419101200998,0.1208851580000001,398174172,4727474,null,null,null,null,null,null,null,null],[0.12702564499340951,0.1270267279999997,418403667,4963848,null,null,null,null,null,null,null,null],[0.13329898501979187,0.13330005400000022,439066914,5212040,null,null,null,null,null,null,null,null],[0.140186870994512,0.14018804200000012,461754711,5472642,null,null,null,null,null,null,null,null],[0.14730693999445066,0.1473082140000006,485207250,5746274,null,null,null,null,null,null,null,null],[0.1544275899650529,0.154428875999999,508661472,6033588,null,null,null,null,null,null,null,null],[0.16206919099204242,0.16207050400000078,533831661,6335268,null,null,null,null,null,null,null,null],[0.17039759398903698,0.17039912999999984,561264627,6652031,null,null,null,null,null,null,null,null],[0.17910854000365362,0.179110231000001,589957599,6984633,null,null,null,null,null,null,null,null],[0.1877509289770387,0.1877493459999986,618423465,7333864,null,null,null,null,null,null,null,null],[0.19484114198712632,0.19484273800000018,641777466,7700558,null,null,null,null,null,null,null,null],[0.1967731750337407,0.1967748260000004,648141582,8085585,null,null,null,null,null,null,null,null],[0.20656140998471528,0.20656309399999984,680382054,8489865,null,null,null,null,null,null,null,null],[0.21691621298668906,0.21691797200000096,714489534,8914358,null,null,null,null,null,null,null,null],[0.22754845197778195,0.22755028999999993,749510289,9360076,null,null,null,null,null,null,null,null]],"reportName":"fib/5","reportNumber":1,"reportOutliers":{"highMild":0,"highSevere":0,"lowMild":0,"lowSevere":0,"samplesSeen":42}},{"reportAnalysis":{"anMean":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.2193049137878224e-9,"confIntUDX":9.656405683572824e-10},"estPoint":1.376154926895251e-7},"anOutlierVar":{"ovDesc":"a moderate","ovEffect":"Moderate","ovFraction":0.38620218919276267},"anRegress":[{"regCoeffs":{"iters":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.7086514387624945e-9,"confIntUDX":1.6862717006331852e-9},"estPoint":1.3645055682224533e-7},"y":{"estError":{"confIntCL":5.0e-2,"confIntLDX":8.395999648006277e-5,"confIntUDX":1.1090499541057712e-4},"estPoint":1.5062483839598762e-4}},"regRSquare":{"estError":{"confIntCL":5.0e-2,"confIntLDX":2.452948645059738e-4,"confIntUDX":4.1552799766231274e-4},"estPoint":0.999005998202595},"regResponder":"time"}],"anStdDev":{"estError":{"confIntCL":5.0e-2,"confIntLDX":7.019182474873841e-10,"confIntUDX":5.272290500819154e-10},"estPoint":3.595410700809442e-9}},"reportKDEs":[{"kdePDF":[5.274041638793628,111.13240968360849,1695.2383614313376,18849.995856274472,151953.77677751292,888638.738075093,3770465.0986158806,1.1615193689312074e7,2.604573840019683e7,4.2924992653846964e7,5.383755031218667e7,5.726678832160708e7,6.349985919530781e7,8.028021940340853e7,9.890440019936185e7,1.0532498343584022e8,1.01342397357232e8,1.0271408767561758e8,1.17182064745088e8,1.3407929163912627e8,1.3686908750733107e8,1.214281619684658e8,9.757712899317943e7,7.416566024415341e7,5.34944006833291e7,4.015401039212305e7,4.1543946818613544e7,5.728722236307025e7,7.59643666474708e7,8.407293963439395e7,7.596098048371162e7,5.724941342531396e7,4.1238353039582565e7,3.83581170247591e7,4.580512753837311e7,5.008773235666174e7,4.205690158951087e7,2.604584692508606e7,1.2484868536130628e7,7537432.037720749,1.2483178035632545e7,2.60269978730671e7,4.1904952579042666e7,4.919921028692312e7,4.203646808523235e7,2.676346395636231e7,1.5363306622683438e7,1.5363307497428445e7,2.67634576596896e7,4.203635846673908e7,4.9197513225379564e7,4.188610492479977e7,2.5875046821242146e7,1.1594652873699171e7,3768659.4373543635,888522.290300119,151948.59252795813,18849.856343822496,1694.9117065527298,111.72696077494949,4.214315793431429,1.2013679346270916,-1.0216822539083192,1.0408957442526592,-1.0660004856336855,1.1023423408375737,-1.1455898667575724,1.3897845725922273,3.9582686708456922,112.05488742925337,1694.5064554621529,18850.345629960262,151948.01108188598,888522.9686671675,3768658.4623361826,1.1594648552844806e7,2.5874935076113727e7,4.188441016318299e7,4.91786630924939e7,4.188441088334783e7,2.587495159056892e7,1.159501342963226e7,3774436.2646145844,955804.9433138748,729489.8218103116,3692274.535586301,1.7420796002569996e7,6.202838431349826e7,1.67230222528094e8,3.4444233533297324e8,5.475200039364114e8,6.802536661495528e8,6.73135123261824e8,5.479218503799253e8,3.888878925056097e8,2.6474696802362826e8,1.925804744539135e8,1.578864134102267e8,1.468145483659374e8,1.559660832954353e8,1.7986018954396734e8,2.0136480350005192e8,2.0298579930257565e8,1.8511085411088043e8,1.6338752783393455e8,1.4783892498728317e8,1.3426812388482302e8,1.1564701084040293e8,9.23838212465019e7,7.278691280684687e7,6.804131811566412e7,8.054822880054186e7,9.589117024674831e7,9.574080436263388e7,7.950774896400969e7,6.336348482247712e7,5.724941711394983e7,5.383595688994364e7,4.292488496705503e7,2.604573495958621e7,1.1615192122526279e7,3770466.264521857,888637.7736333845,151954.5480886748,18849.4069585961,1695.653117943465,110.88590343047127,5.355819889129055],"kdeType":"time","kdeValues":[1.2935309605942562e-7,1.2946083835532028e-7,1.2956858065121497e-7,1.2967632294710963e-7,1.2978406524300432e-7,1.2989180753889898e-7,1.2999954983479364e-7,1.3010729213068833e-7,1.30215034426583e-7,1.3032277672247768e-7,1.3043051901837234e-7,1.3053826131426703e-7,1.306460036101617e-7,1.3075374590605636e-7,1.3086148820195104e-7,1.309692304978457e-7,1.310769727937404e-7,1.3118471508963506e-7,1.3129245738552972e-7,1.314001996814244e-7,1.3150794197731907e-7,1.3161568427321376e-7,1.3172342656910842e-7,1.3183116886500308e-7,1.3193891116089777e-7,1.3204665345679243e-7,1.3215439575268712e-7,1.3226213804858178e-7,1.3236988034447644e-7,1.3247762264037113e-7,1.325853649362658e-7,1.3269310723216048e-7,1.3280084952805514e-7,1.3290859182394983e-7,1.330163341198445e-7,1.3312407641573916e-7,1.3323181871163384e-7,1.333395610075285e-7,1.334473033034232e-7,1.3355504559931786e-7,1.3366278789521252e-7,1.337705301911072e-7,1.3387827248700187e-7,1.3398601478289656e-7,1.3409375707879122e-7,1.3420149937468588e-7,1.3430924167058057e-7,1.3441698396647523e-7,1.3452472626236992e-7,1.3463246855826458e-7,1.3474021085415924e-7,1.3484795315005393e-7,1.349556954459486e-7,1.3506343774184328e-7,1.3517118003773794e-7,1.3527892233363263e-7,1.353866646295273e-7,1.3549440692542195e-7,1.3560214922131664e-7,1.357098915172113e-7,1.35817633813106e-7,1.3592537610900066e-7,1.3603311840489532e-7,1.3614086070079e-7,1.3624860299668467e-7,1.3635634529257936e-7,1.3646408758847402e-7,1.3657182988436868e-7,1.3667957218026337e-7,1.3678731447615803e-7,1.3689505677205272e-7,1.3700279906794738e-7,1.3711054136384204e-7,1.3721828365973673e-7,1.373260259556314e-7,1.3743376825152608e-7,1.3754151054742074e-7,1.3764925284331543e-7,1.377569951392101e-7,1.3786473743510475e-7,1.3797247973099944e-7,1.380802220268941e-7,1.381879643227888e-7,1.3829570661868345e-7,1.3840344891457812e-7,1.385111912104728e-7,1.3861893350636747e-7,1.3872667580226215e-7,1.3883441809815682e-7,1.3894216039405148e-7,1.3904990268994617e-7,1.3915764498584083e-7,1.3926538728173552e-7,1.3937312957763018e-7,1.3948087187352487e-7,1.3958861416941953e-7,1.396963564653142e-7,1.3980409876120888e-7,1.3991184105710354e-7,1.4001958335299823e-7,1.401273256488929e-7,1.4023506794478755e-7,1.4034281024068224e-7,1.404505525365769e-7,1.405582948324716e-7,1.4066603712836625e-7,1.4077377942426092e-7,1.408815217201556e-7,1.4098926401605027e-7,1.4109700631194495e-7,1.4120474860783962e-7,1.413124909037343e-7,1.4142023319962897e-7,1.4152797549552363e-7,1.4163571779141832e-7,1.4174346008731298e-7,1.4185120238320764e-7,1.4195894467910233e-7,1.42066686974997e-7,1.4217442927089168e-7,1.4228217156678634e-7,1.4238991386268103e-7,1.424976561585757e-7,1.4260539845447035e-7,1.4271314075036504e-7,1.428208830462597e-7,1.429286253421544e-7,1.4303636763804905e-7]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","peakMbAllocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportMeasured":[[1.4730030670762062e-6,8.810000000636364e-7,2178,1,null,null,null,null,null,null,null,null],[7.210182957351208e-7,7.019999994639647e-7,2277,2,null,null,null,null,null,null,null,null],[7.810303941369057e-7,7.509999999655292e-7,2409,3,null,null,null,null,null,null,null,null],[8.92032403498888e-7,8.820000001463768e-7,2838,4,null,null,null,null,null,null,null,null],[1.0619987733662128e-6,1.0419999991739815e-6,3399,5,null,null,null,null,null,null,null,null],[1.23301288112998e-6,1.2119999990289898e-6,3960,6,null,null,null,null,null,null,null,null],[1.3730023056268692e-6,1.3619999990055476e-6,4455,7,null,null,null,null,null,null,null,null],[1.533015165477991e-6,1.5130000008412026e-6,4983,8,null,null,null,null,null,null,null,null],[1.6840058378875256e-6,1.682999998919854e-6,5478,9,null,null,null,null,null,null,null,null],[1.8539722077548504e-6,1.8429999997238156e-6,6006,10,null,null,null,null,null,null,null,null],[2.0239967852830887e-6,2.0139999996615643e-6,6633,11,null,null,null,null,null,null,null,null],[2.1840096451342106e-6,2.1740000004655258e-6,7062,12,null,null,null,null,null,null,null,null],[2.343964297324419e-6,2.3240000004420835e-6,7623,13,null,null,null,null,null,null,null,null],[2.503977157175541e-6,2.505000001207236e-6,8151,14,null,null,null,null,null,null,null,null],[2.655026037245989e-6,2.644999998580033e-6,8646,15,null,null,null,null,null,null,null,null],[2.8259819373488426e-6,2.8150000002113984e-6,9207,16,null,null,null,null,null,null,null,null],[2.9859947971999645e-6,2.9660000002706965e-6,9702,17,null,null,null,null,null,null,null,null],[3.145949449390173e-6,3.136000000125705e-6,10263,18,null,null,null,null,null,null,null,null],[3.326043952256441e-6,3.316000000808117e-6,10791,19,null,null,null,null,null,null,null,null],[3.4660333767533302e-6,3.4570000000400114e-6,11286,20,null,null,null,null,null,null,null,null],[3.6159763112664223e-6,3.617000000843973e-6,11847,21,null,null,null,null,null,null,null,null],[3.797002136707306e-6,3.7870000006989812e-6,12375,22,null,null,null,null,null,null,null,null],[3.947003278881311e-6,3.936999998899182e-6,12903,23,null,null,null,null,null,null,null,null],[4.258006811141968e-6,4.247999999762442e-6,13926,25,null,null,null,null,null,null,null,null],[4.427973181009293e-6,4.41799999961745e-6,14487,26,null,null,null,null,null,null,null,null],[4.558998625725508e-6,4.547999999715557e-6,14916,27,null,null,null,null,null,null,null,null],[4.73798718303442e-6,4.718999999653306e-6,15510,28,null,null,null,null,null,null,null,null],[5.059002432972193e-6,5.050000000395016e-6,16566,30,null,null,null,null,null,null,null,null],[5.220004823058844e-6,5.200000000371574e-6,17061,31,null,null,null,null,null,null,null,null],[5.541020072996616e-6,5.52000000020314e-6,18117,33,null,null,null,null,null,null,null,null],[5.85097586736083e-6,5.840000000034706e-6,19173,35,null,null,null,null,null,null,null,null],[6.021000444889069e-6,6.021000000799859e-6,19767,36,null,null,null,null,null,null,null,null],[6.352027412503958e-6,6.341999998937808e-6,20823,38,null,null,null,null,null,null,null,null],[6.642017979174852e-6,6.6329999999226175e-6,21813,40,null,null,null,null,null,null,null,null],[7.002963684499264e-6,6.9629999988052305e-6,22902,42,null,null,null,null,null,null,null,null],[7.314025424420834e-6,7.304000000374344e-6,23991,44,null,null,null,null,null,null,null,null],[7.78399407863617e-6,7.775000000265209e-6,25542,47,null,null,null,null,null,null,null,null],[8.105009328573942e-6,8.085999999352111e-6,26565,49,null,null,null,null,null,null,null,null],[8.585979230701923e-6,8.575999999038686e-6,28182,52,null,null,null,null,null,null,null,null],[8.89599323272705e-6,8.876000000768158e-6,29238,54,null,null,null,null,null,null,null,null],[9.417999535799026e-6,9.408000000377115e-6,30987,57,null,null,null,null,null,null,null,null],[9.908981155604124e-6,9.888999999319026e-6,32538,60,null,null,null,null,null,null,null,null],[1.035997411236167e-5,1.0350000000158843e-5,33990,63,null,null,null,null,null,null,null,null],[1.0850024409592152e-5,1.0840999999928158e-5,35673,66,null,null,null,null,null,null,null,null],[1.132104080170393e-5,1.1311000001512639e-5,37224,69,null,null,null,null,null,null,null,null],[1.1971977073699236e-5,1.1963000000392299e-5,39303,73,null,null,null,null,null,null,null,null],[1.2432981748133898e-5,1.242399999945576e-5,40887,76,null,null,null,null,null,null,null,null],[1.3084965758025646e-5,1.3075000000029036e-5,43032,80,null,null,null,null,null,null,null,null],[1.373601844534278e-5,1.3716000001551265e-5,45144,84,null,null,null,null,null,null,null,null],[1.4607969205826521e-5,1.4587999999093881e-5,48015,89,null,null,null,null,null,null,null,null],[1.5209021512418985e-5,1.5198999999910257e-5,50028,93,null,null,null,null,null,null,null,null],[1.5989993698894978e-5,1.5979999998805283e-5,52602,98,null,null,null,null,null,null,null,null],[1.680100103840232e-5,1.6791999998488905e-5,55209,103,null,null,null,null,null,null,null,null],[1.7623009625822306e-5,1.7602999999866142e-5,57948,108,null,null,null,null,null,null,null,null],[1.8403981812298298e-5,1.8393999999588573e-5,60555,113,null,null,null,null,null,null,null,null],[1.9366038031876087e-5,1.9345999998421348e-5,63657,119,null,null,null,null,null,null,null,null],[2.0337989553809166e-5,2.0327999999736335e-5,66891,125,null,null,null,null,null,null,null,null],[2.6780006010085344e-5,2.7240999999733617e-5,91179,131,null,null,null,null,null,null,null,null],[3.2450014259666204e-5,3.265199999979984e-5,108141,138,null,null,null,null,null,null,null,null],[3.719900269061327e-5,3.7811000000331774e-5,127875,144,null,null,null,null,null,null,null,null],[3.485498018562794e-5,3.494499999945333e-5,115170,152,null,null,null,null,null,null,null,null],[3.6187004297971725e-5,3.627799999961212e-5,119625,159,null,null,null,null,null,null,null,null],[3.8743019104003906e-5,3.902300000113712e-5,129030,167,null,null,null,null,null,null,null,null],[3.612699219956994e-5,3.608799999987866e-5,118701,176,null,null,null,null,null,null,null,null],[3.008596831932664e-5,3.0055999999945016e-5,98901,185,null,null,null,null,null,null,null,null],[3.1449017114937305e-5,3.142899999986071e-5,103422,194,null,null,null,null,null,null,null,null],[3.3051008358597755e-5,3.304100000001142e-5,108735,204,null,null,null,null,null,null,null,null],[3.4653989132493734e-5,3.463500000044917e-5,113982,214,null,null,null,null,null,null,null,null],[3.6258017644286156e-5,3.624800000068262e-5,119295,224,null,null,null,null,null,null,null,null],[3.817200195044279e-5,3.817099999992024e-5,125598,236,null,null,null,null,null,null,null,null],[3.994500730186701e-5,3.9935000000212995e-5,131406,247,null,null,null,null,null,null,null,null],[4.20489814132452e-5,4.204900000104317e-5,138402,260,null,null,null,null,null,null,null,null],[4.412198904901743e-5,4.411199999942994e-5,145299,273,null,null,null,null,null,null,null,null],[4.6396045945584774e-5,4.639700000019786e-5,152757,287,null,null,null,null,null,null,null,null],[4.865095252171159e-5,4.863200000038148e-5,160116,301,null,null,null,null,null,null,null,null],[5.1036011427640915e-5,5.103600000033737e-5,168036,316,null,null,null,null,null,null,null,null],[5.3640047553926706e-5,5.362099999928205e-5,176517,332,null,null,null,null,null,null,null,null],[5.6194025091826916e-5,5.6185000000041896e-5,185031,348,null,null,null,null,null,null,null,null],[5.907996091991663e-5,5.906999999893969e-5,194502,366,null,null,null,null,null,null,null,null],[6.197602488100529e-5,6.195600000147294e-5,204039,384,null,null,null,null,null,null,null,null],[6.504100747406483e-5,6.50209999992768e-5,214137,403,null,null,null,null,null,null,null,null],[6.840704008936882e-5,6.840800000063041e-5,225258,424,null,null,null,null,null,null,null,null],[7.179402746260166e-5,7.178399999929752e-5,236379,445,null,null,null,null,null,null,null,null],[7.533002644777298e-5,7.533099999967874e-5,248028,467,null,null,null,null,null,null,null,null],[7.901701610535383e-5,7.899800000110702e-5,260172,490,null,null,null,null,null,null,null,null],[8.304498624056578e-5,8.303499999939845e-5,273471,515,null,null,null,null,null,null,null,null],[8.52489611133933e-5,8.526000000053102e-5,280764,541,null,null,null,null,null,null,null,null],[8.903699927031994e-5,8.904699999945365e-5,293238,568,null,null,null,null,null,null,null,null],[9.344401769340038e-5,9.34350000001416e-5,307692,596,null,null,null,null,null,null,null,null],[9.811302879825234e-5,9.8114000000038e-5,323136,626,null,null,null,null,null,null,null,null],[1.0295200627297163e-4,1.0294199999982823e-4,339075,657,null,null,null,null,null,null,null,null],[1.0822201147675514e-4,1.082130000007453e-4,356367,690,null,null,null,null,null,null,null,null],[1.1359096970409155e-4,1.1359299999824657e-4,374055,725,null,null,null,null,null,null,null,null],[1.1921202531084418e-4,1.1920299999879092e-4,392601,761,null,null,null,null,null,null,null,null],[1.2516300193965435e-4,1.2515499999921076e-4,412203,799,null,null,null,null,null,null,null,null],[1.3139494694769382e-4,1.3139600000044993e-4,432729,839,null,null,null,null,null,null,null,null],[1.379769528284669e-4,1.379690000007372e-4,454410,881,null,null,null,null,null,null,null,null],[1.448499970138073e-4,1.4484100000089484e-4,477048,925,null,null,null,null,null,null,null,null],[1.5219399938359857e-4,1.5219500000007713e-4,501237,972,null,null,null,null,null,null,null,null],[1.5971797984093428e-4,1.5970900000006338e-4,525987,1020,null,null,null,null,null,null,null,null],[1.6769301146268845e-4,1.676939999999405e-4,552288,1071,null,null,null,null,null,null,null,null],[1.7612904775887728e-4,1.761189999989199e-4,580107,1125,null,null,null,null,null,null,null,null],[1.848650281317532e-4,1.8485600000062163e-4,608850,1181,null,null,null,null,null,null,null,null],[1.9409204833209515e-4,1.94093000001061e-4,639210,1240,null,null,null,null,null,null,null,null],[2.0666600903496146e-4,2.0666700000049332e-4,680757,1302,null,null,null,null,null,null,null,null],[2.141490112990141e-4,2.141409999989463e-4,705309,1367,null,null,null,null,null,null,null,null],[2.310710260644555e-4,2.3106199999922694e-4,761046,1436,null,null,null,null,null,null,null,null],[2.425220445729792e-4,2.4252400000079888e-4,798765,1507,null,null,null,null,null,null,null,null],[2.575300168246031e-4,2.575520000007714e-4,848364,1583,null,null,null,null,null,null,null,null],[2.6740902103483677e-4,2.674099999993018e-4,880770,1662,null,null,null,null,null,null,null,null],[2.793209860101342e-4,2.793329999999372e-4,920073,1745,null,null,null,null,null,null,null,null],[2.866850118152797e-4,2.866869999991195e-4,944262,1832,null,null,null,null,null,null,null,null],[3.0124204931780696e-4,3.0124399999920115e-4,992178,1924,null,null,null,null,null,null,null,null],[3.1627999851480126e-4,3.1628200000000106e-4,1041744,2020,null,null,null,null,null,null,null,null],[3.3191900001838803e-4,3.3192100000078995e-4,1093257,2121,null,null,null,null,null,null,null,null],[3.4848996438086033e-4,3.484930000006159e-4,1147872,2227,null,null,null,null,null,null,null,null],[3.660930087789893e-4,3.6611500000027775e-4,1205919,2339,null,null,null,null,null,null,null,null],[3.870819928124547e-4,3.870950000006701e-4,1274988,2456,null,null,null,null,null,null,null,null],[4.223980358801782e-4,4.2244099999955154e-4,1391445,2579,null,null,null,null,null,null,null,null],[4.4336699647828937e-4,4.434399999997396e-4,1460778,2708,null,null,null,null,null,null,null,null],[4.481659852899611e-4,4.4819999999923255e-4,1476288,2843,null,null,null,null,null,null,null,null],[4.688040353357792e-4,4.688379999997494e-4,1544268,2985,null,null,null,null,null,null,null,null],[4.916980396956205e-4,4.917200000011945e-4,1619739,3134,null,null,null,null,null,null,null,null],[5.163030000403523e-4,5.163269999997055e-4,1700688,3291,null,null,null,null,null,null,null,null],[5.407779826782644e-4,5.40793000000761e-4,1781241,3456,null,null,null,null,null,null,null,null],[5.599639844149351e-4,5.599889999992058e-4,1844502,3629,null,null,null,null,null,null,null,null],[5.857429932802916e-4,5.857670000004589e-4,1929477,3810,null,null,null,null,null,null,null,null],[6.276000058278441e-4,6.276349999989606e-4,2067318,4001,null,null,null,null,null,null,null,null],[6.588390097022057e-4,6.588640000000368e-4,2170179,4201,null,null,null,null,null,null,null,null],[6.813709624111652e-4,6.813960000009445e-4,2244429,4411,null,null,null,null,null,null,null,null],[7.299010176211596e-4,7.299560000006977e-4,2404446,4631,null,null,null,null,null,null,null,null],[7.681730203330517e-4,7.683580000001911e-4,2531595,4863,null,null,null,null,null,null,null,null],[7.419140310958028e-4,7.420499999994945e-4,2444112,5106,null,null,null,null,null,null,null,null],[7.965550175867975e-4,7.968119999990364e-4,2625249,5361,null,null,null,null,null,null,null,null],[8.496150257997215e-4,8.497310000006308e-4,2799060,5629,null,null,null,null,null,null,null,null],[8.452670299448073e-4,8.453429999999429e-4,2784606,5911,null,null,null,null,null,null,null,null],[8.78868973813951e-4,8.794469999990895e-4,2898357,6207,null,null,null,null,null,null,null,null],[9.246249683201313e-4,9.246819999990663e-4,3045834,6517,null,null,null,null,null,null,null,null],[9.734359919093549e-4,9.735030000008749e-4,3206676,6843,null,null,null,null,null,null,null,null],[9.98673029243946e-4,9.987200000001195e-4,3289803,7185,null,null,null,null,null,null,null,null],[1.0826190118677914e-3,1.0828679999992374e-3,3566805,7544,null,null,null,null,null,null,null,null],[1.1323909857310355e-3,1.1324800000007684e-3,3730320,7921,null,null,null,null,null,null,null,null],[1.1668360093608499e-3,1.1669049999998293e-3,3843774,8318,null,null,null,null,null,null,null,null],[1.2142250197939575e-3,1.2142930000003105e-3,3999765,8733,null,null,null,null,null,null,null,null],[1.2770619941875339e-3,1.277151000000032e-3,4206807,9170,null,null,null,null,null,null,null,null],[1.33850600104779e-3,1.3385659999993749e-3,4409097,9629,null,null,null,null,null,null,null,null],[1.4171929797157645e-3,1.417253000001395e-3,4668345,10110,null,null,null,null,null,null,null,null],[1.521287951618433e-3,1.5213890000005392e-3,5011380,10616,null,null,null,null,null,null,null,null],[1.5573640121147037e-3,1.5574259999997508e-3,5130015,11146,null,null,null,null,null,null,null,null],[1.6300400020554662e-3,1.6301229999999833e-3,5369397,11704,null,null,null,null,null,null,null,null],[1.7080659745261073e-3,1.70814800000052e-3,5626434,12289,null,null,null,null,null,null,null,null],[1.7935250070877373e-3,1.793608000001612e-3,5907957,12903,null,null,null,null,null,null,null,null],[1.934778003487736e-3,1.9348819999986944e-3,6373488,13549,null,null,null,null,null,null,null,null],[2.0268099615350366e-3,2.0275269999991963e-3,6689100,14226,null,null,null,null,null,null,null,null],[2.2565789986401796e-3,2.256836000000817e-3,7433943,14937,null,null,null,null,null,null,null,null],[2.209179976489395e-3,2.209235999998782e-3,7276863,15684,null,null,null,null,null,null,null,null],[2.3631879594177008e-3,2.3632960000004033e-3,7784502,16469,null,null,null,null,null,null,null,null],[2.437244984321296e-3,2.437343000000425e-3,8028339,17292,null,null,null,null,null,null,null,null],[2.5413199909962714e-3,2.5414189999999337e-3,8371209,18157,null,null,null,null,null,null,null,null],[2.7044540038332343e-3,2.7045539999992485e-3,8908548,19065,null,null,null,null,null,null,null,null],[2.9367770184762776e-3,2.9371799999999837e-3,9675171,20018,null,null,null,null,null,null,null,null],[2.9696680139750242e-3,2.9697610000010144e-3,9781926,21019,null,null,null,null,null,null,null,null],[3.1307890312746167e-3,3.1308820000006676e-3,10312797,22070,null,null,null,null,null,null,null,null],[3.323348006233573e-3,3.323604000000202e-3,10947750,23173,null,null,null,null,null,null,null,null],[3.4292659838683903e-3,3.429390999999171e-3,11296131,24332,null,null,null,null,null,null,null,null],[3.641621966380626e-3,3.641768999999684e-3,11995698,25549,null,null,null,null,null,null,null,null],[3.7911100080236793e-3,3.7912190000000123e-3,12487893,26826,null,null,null,null,null,null,null,null],[4.059530969243497e-3,4.059792000001394e-3,13372887,28167,null,null,null,null,null,null,null,null],[4.1613809880800545e-3,4.16151199999959e-3,13707474,29576,null,null,null,null,null,null,null,null],[4.3987639946863055e-3,4.398866000000723e-3,14489310,31054,null,null,null,null,null,null,null,null],[4.597544961143285e-3,4.597678999999744e-3,15144195,32607,null,null,null,null,null,null,null,null],[4.930394992697984e-3,4.930672000000413e-3,16241313,34238,null,null,null,null,null,null,null,null],[5.076997971627861e-3,5.077186000001177e-3,16723476,35950,null,null,null,null,null,null,null,null],[5.328618048224598e-3,5.328768000000039e-3,17552271,37747,null,null,null,null,null,null,null,null],[5.565528990700841e-3,5.565640999998678e-3,18332424,39634,null,null,null,null,null,null,null,null],[5.864278005901724e-3,5.864421000000064e-3,19316616,41616,null,null,null,null,null,null,null,null],[6.235509004909545e-3,6.235786000001298e-3,20540091,43697,null,null,null,null,null,null,null,null],[6.58121396554634e-3,6.581472999998894e-3,21678591,45882,null,null,null,null,null,null,null,null],[6.759385985787958e-3,6.759487000000064e-3,22264671,48176,null,null,null,null,null,null,null,null],[7.168840034864843e-3,7.169102999998955e-3,23614173,50585,null,null,null,null,null,null,null,null],[7.5189220369793475e-3,7.519077999999624e-3,24766698,53114,null,null,null,null,null,null,null,null],[8.178182994015515e-3,8.178794000000877e-3,26940111,55770,null,null,null,null,null,null,null,null],[8.314376987982541e-3,8.314609000001028e-3,27387294,58558,null,null,null,null,null,null,null,null],[8.698303019627929e-3,8.698587999999674e-3,28652019,61486,null,null,null,null,null,null,null,null],[9.058744995854795e-3,9.059032999999772e-3,29839161,64561,null,null,null,null,null,null,null,null],[9.52253898140043e-3,9.522830999999954e-3,31366962,67789,null,null,null,null,null,null,null,null],[9.89998399745673e-3,9.900177000000454e-3,32609478,71178,null,null,null,null,null,null,null,null],[1.0492128029000014e-2,1.0492377000000275e-2,34560306,74737,null,null,null,null,null,null,null,null],[1.0929913958534598e-2,1.0930115999999046e-2,36002142,78474,null,null,null,null,null,null,null,null],[1.146121503552422e-2,1.1461411000000865e-2,37752099,82398,null,null,null,null,null,null,null,null],[1.2112280004657805e-2,1.2112450000000052e-2,39896472,86518,null,null,null,null,null,null,null,null],[1.2712750001810491e-2,1.2712913999999742e-2,41874228,90843,null,null,null,null,null,null,null,null],[1.3264138018712401e-2,1.3264305999999948e-2,43690482,95386,null,null,null,null,null,null,null,null],[1.3926793995779008e-2,1.3926956999998907e-2,45873135,100155,null,null,null,null,null,null,null,null],[1.4672403980512172e-2,1.4672593000000234e-2,48329127,105163,null,null,null,null,null,null,null,null],[1.5414868015795946e-2,1.5415223999999839e-2,50775285,110421,null,null,null,null,null,null,null,null],[1.6251509019639343e-2,1.6251780999999355e-2,53531148,115942,null,null,null,null,null,null,null,null],[1.7377498967107385e-2,1.7377938999999287e-2,57240315,121739,null,null,null,null,null,null,null,null],[1.8077393993735313e-2,1.80777489999997e-2,59545299,127826,null,null,null,null,null,null,null,null],[1.9001688982825726e-2,1.9002050000000992e-2,62589846,134217,null,null,null,null,null,null,null,null],[2.0112009020522237e-2,2.0112808999998677e-2,66249249,140928,null,null,null,null,null,null,null,null],[2.1213764033745974e-2,2.1214171999998754e-2,69876279,147975,null,null,null,null,null,null,null,null],[2.186688204528764e-2,2.186726400000083e-2,72027252,155373,null,null,null,null,null,null,null,null],[2.3046952963341027e-2,2.3047374000000787e-2,75914454,163142,null,null,null,null,null,null,null,null],[2.4132738006301224e-2,2.4133126999998922e-2,79490697,171299,null,null,null,null,null,null,null,null],[2.5351941003464162e-2,2.5352511000001243e-2,83507028,179864,null,null,null,null,null,null,null,null],[2.6376353052910417e-2,2.637675799999961e-2,86880750,188858,null,null,null,null,null,null,null,null],[2.770113304723054e-2,2.7701568999999537e-2,91244340,198300,null,null,null,null,null,null,null,null],[2.8953999979421496e-2,2.895427500000025e-2,95370363,208215,null,null,null,null,null,null,null,null],[3.0401739990338683e-2,3.040201600000003e-2,100138830,218626,null,null,null,null,null,null,null,null],[3.19638240034692e-2,3.1964119999999596e-2,105284190,229558,null,null,null,null,null,null,null,null],[3.3782574988435954e-2,3.378307599999886e-2,111275967,241036,null,null,null,null,null,null,null,null],[3.525351901771501e-2,3.525393000000143e-2,116120334,253087,null,null,null,null,null,null,null,null],[3.7300786993000656e-2,3.73013240000013e-2,122864412,265742,null,null,null,null,null,null,null,null],[3.759087796788663e-2,3.7591387000000864e-2,123819795,279029,null,null,null,null,null,null,null,null],[3.862346400273964e-2,3.862401000000126e-2,127221039,292980,null,null,null,null,null,null,null,null],[4.307731002336368e-2,4.3077870000001184e-2,141891255,307629,null,null,null,null,null,null,null,null],[4.542434704490006e-2,4.542491400000159e-2,149621967,323011,null,null,null,null,null,null,null,null],[4.753767797956243e-2,4.75382720000006e-2,156583053,339161,null,null,null,null,null,null,null,null],[4.954897001152858e-2,4.954939799999991e-2,163207044,356119,null,null,null,null,null,null,null,null],[5.20598019938916e-2,5.206032899999968e-2,171477669,373925,null,null,null,null,null,null,null,null],[5.459958896972239e-2,5.460005399999979e-2,179843037,392622,null,null,null,null,null,null,null,null],[5.7404200022574514e-2,5.740471600000063e-2,189081090,412253,null,null,null,null,null,null,null,null],[6.0218719008844346e-2,6.021925599999989e-2,198352407,432866,null,null,null,null,null,null,null,null],[6.350560899591073e-2,6.350631100000115e-2,209178882,454509,null,null,null,null,null,null,null,null],[6.640846299706027e-2,6.640907600000112e-2,218739807,477234,null,null,null,null,null,null,null,null],[6.96786810294725e-2,6.967925899999905e-2,229511172,501096,null,null,null,null,null,null,null,null],[7.32172720017843e-2,7.321790399999983e-2,241166871,526151,null,null,null,null,null,null,null,null],[7.690582104260102e-2,7.690653100000056e-2,253316745,552458,null,null,null,null,null,null,null,null],[7.774039695505053e-2,7.774103500000074e-2,256065084,580081,null,null,null,null,null,null,null,null],[7.948168396251276e-2,7.948235499999967e-2,261800880,609086,null,null,null,null,null,null,null,null],[8.478159899823368e-2,8.478237899999996e-2,279258309,639540,null,null,null,null,null,null,null,null],[9.367603802820668e-2,9.367699300000076e-2,308556006,671517,null,null,null,null,null,null,null,null],[9.834435401717201e-2,9.834532500000037e-2,323932356,705093,null,null,null,null,null,null,null,null],[0.10421636595856398,0.10421737899999961,343273854,740347,null,null,null,null,null,null,null,null],[0.11002359597478062,0.11002625599999938,362407617,777365,null,null,null,null,null,null,null,null],[0.11397561599733308,0.11397716400000135,375421068,816233,null,null,null,null,null,null,null,null],[0.121198587003164,0.12118870699999817,399217038,857045,null,null,null,null,null,null,null,null],[0.12627688801148906,0.1262784159999999,415945926,899897,null,null,null,null,null,null,null,null],[0.13407648500287905,0.1340789030000007,441632400,944892,null,null,null,null,null,null,null,null],[0.1398223610012792,0.13982398000000096,460556316,992136,null,null,null,null,null,null,null,null],[0.13869051000801846,0.13868671,456826590,1041743,null,null,null,null,null,null,null,null],[0.14371057297103107,0.14371202900000135,473362329,1093831,null,null,null,null,null,null,null,null],[0.15108612802578136,0.15108824100000007,497658249,1148522,null,null,null,null,null,null,null,null],[0.15961019496899098,0.15960696099999971,525736101,1205948,null,null,null,null,null,null,null,null],[0.1666181159671396,0.16661959300000007,548815641,1266246,null,null,null,null,null,null,null,null],[0.17424910800764337,0.17425046000000144,573949959,1329558,null,null,null,null,null,null,null,null],[0.18271611799718812,0.18271773500000066,601840206,1396036,null,null,null,null,null,null,null,null],[0.2019869289943017,0.20198508100000012,665316927,1465838,null,null,null,null,null,null,null,null],[0.21409867703914642,0.2141004070000001,705208746,1539130,null,null,null,null,null,null,null,null],[0.22524451499339193,0.2252370500000005,741921675,1616086,null,null,null,null,null,null,null,null],[0.23609086294891313,0.23609268499999914,777647145,1696890,null,null,null,null,null,null,null,null]],"reportName":"fib/9","reportNumber":2,"reportOutliers":{"highMild":0,"highSevere":0,"lowMild":0,"lowSevere":0,"samplesSeen":43}},{"reportAnalysis":{"anMean":{"estError":{"confIntCL":5.0e-2,"confIntLDX":6.972724273344782e-9,"confIntUDX":5.576911944060881e-9},"estPoint":4.226666874091772e-7},"anOutlierVar":{"ovDesc":"a severe","ovEffect":"Severe","ovFraction":0.6900424181913867},"anRegress":[{"regCoeffs":{"iters":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.0901821438900934e-8,"confIntUDX":9.124065800415636e-9},"estPoint":4.2157588416047557e-7},"y":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.8343236679209873e-4,"confIntUDX":2.7526673522396795e-4},"estPoint":3.963274344893427e-5}},"regRSquare":{"estError":{"confIntCL":5.0e-2,"confIntLDX":5.05381984497677e-4,"confIntUDX":9.685035127019459e-4},"estPoint":0.9966606983180731},"regResponder":"time"}],"anStdDev":{"estError":{"confIntCL":5.0e-2,"confIntLDX":2.3897342214180667e-9,"confIntUDX":1.3569897101299865e-9},"estPoint":2.1516391528570672e-8}},"reportKDEs":[{"kdePDF":[4857.110325267976,21598.18597236797,94230.18728354711,351191.2822281225,1114867.5462024566,3019174.6133149876,6991040.225760366,1.388931566301834e7,2.380238056020613e7,3.548189445714173e7,4.66152044723692e7,5.503073001124021e7,5.988933372700311e7,6.174520366407014e7,6.151450868640542e7,5.952731071179665e7,5.555700602186013e7,4.95198905142526e7,4.1961872799638115e7,3.392343594874278e7,2.643023637503173e7,2.0051615361233085e7,1.4815792095918287e7,1.0484358973847957e7,6900735.918659116,4097004.5543140555,2141194.7876034337,968914.4658673848,375758.2001148299,124135.43520735284,34811.60553730431,8270.219934552764,1662.5348818836544,282.61461118898933,40.61191060331729,4.974986801162251,1.0117194283255995,4.971575694342204,40.56463532559086,282.0615613507969,1657.0537523715332,8224.171534698986,34483.41732764665,122149.30724718176,365539.48059410416,924145.0560895158,1973824.6602569704,3561554.288570179,5429166.225426622,6991804.570512427,7606905.038862844,6991804.573714361,5429166.269278959,3561554.7943250467,1973829.5879690729,924185.617512065,365821.5419566735,123806.36098921977,42707.588861864635,42707.58886197547,123806.36098912539,365821.54195675766,924185.617511963,1973829.587969148,3561554.7943249256,5429166.269279046,6991804.573714242,7606905.038862965,6991804.57051231,5429166.225426751,3561554.288570053,1973824.660257112,924145.0560893771,365539.4805942604,122149.30724704191,34483.4173278142,8224.171534081606,1657.0537421739575,282.0613623681876,40.561423209173185,4.9277222336178435,0.5059549074105679,4.708654940848701e-2,4.748620787333499e-2,0.5128288423371777,5.0228801851494245,41.67733822534036,293.158015309595,1750.7056217098207,8895.755373162627,38581.35835601203,143464.60620844323,460259.7765587267,1284727.2251765893,3153611.2926078807,6892222.617010959,1.3578926779419497e7,2.4364081886950802e7,4.004969259419271e7,6.039980678789595e7,8.3453924284074e7,1.05459526031231e8,1.2187691925845402e8,1.2909516492699948e8,1.25799878236897e8,1.1319504542265898e8,9.423202998092853e7,7.257167046857736e7,5.175203980536676e7,3.455123350120077e7,2.2465014145494286e7,1.5470650280869197e7,1.2326373603162467e7,1.134519816830013e7,1.1168634318278806e7,1.1044227465206923e7,1.0601781383625878e7,9591559.685330069,7918022.452445185,5795044.309515921,3683750.7034307593,2008313.6500622493,932369.7905211367,367196.6258736365,122431.87781820631,34528.90687170118,8269.663892070705,1939.6647127149931],"kdeType":"time","kdeValues":[3.8703445261938077e-7,3.87539246696559e-7,3.880440407737372e-7,3.8854883485091535e-7,3.8905362892809356e-7,3.8955842300527177e-7,3.9006321708245e-7,3.9056801115962814e-7,3.9107280523680636e-7,3.9157759931398457e-7,3.920823933911628e-7,3.92587187468341e-7,3.9309198154551915e-7,3.9359677562269736e-7,3.9410156969987557e-7,3.946063637770538e-7,3.9511115785423194e-7,3.9561595193141016e-7,3.9612074600858837e-7,3.966255400857666e-7,3.971303341629448e-7,3.9763512824012295e-7,3.9813992231730116e-7,3.9864471639447937e-7,3.991495104716576e-7,3.9965430454883574e-7,4.0015909862601396e-7,4.0066389270319217e-7,4.011686867803704e-7,4.016734808575486e-7,4.0217827493472675e-7,4.0268306901190496e-7,4.0318786308908317e-7,4.036926571662614e-7,4.0419745124343954e-7,4.0470224532061775e-7,4.0520703939779597e-7,4.057118334749742e-7,4.062166275521524e-7,4.0672142162933055e-7,4.0722621570650876e-7,4.0773100978368697e-7,4.082358038608652e-7,4.0874059793804334e-7,4.0924539201522155e-7,4.0975018609239977e-7,4.10254980169578e-7,4.107597742467562e-7,4.1126456832393435e-7,4.1176936240111256e-7,4.1227415647829077e-7,4.12778950555469e-7,4.1328374463264714e-7,4.1378853870982535e-7,4.1429333278700357e-7,4.147981268641818e-7,4.1530292094136e-7,4.1580771501853815e-7,4.1631250909571636e-7,4.1681730317289457e-7,4.173220972500728e-7,4.1782689132725094e-7,4.1833168540442915e-7,4.1883647948160737e-7,4.193412735587856e-7,4.198460676359638e-7,4.2035086171314195e-7,4.2085565579032016e-7,4.2136044986749837e-7,4.218652439446766e-7,4.2237003802185474e-7,4.2287483209903295e-7,4.2337962617621117e-7,4.238844202533894e-7,4.243892143305676e-7,4.248940084077458e-7,4.2539880248492396e-7,4.2590359656210217e-7,4.264083906392804e-7,4.269131847164586e-7,4.2741797879363675e-7,4.2792277287081497e-7,4.284275669479932e-7,4.289323610251714e-7,4.294371551023496e-7,4.2994194917952776e-7,4.3044674325670597e-7,4.309515373338842e-7,4.314563314110624e-7,4.3196112548824055e-7,4.3246591956541877e-7,4.32970713642597e-7,4.334755077197752e-7,4.339803017969534e-7,4.3448509587413156e-7,4.3498988995130977e-7,4.35494684028488e-7,4.359994781056662e-7,4.3650427218284435e-7,4.3700906626002256e-7,4.375138603372008e-7,4.38018654414379e-7,4.385234484915572e-7,4.3902824256873536e-7,4.3953303664591357e-7,4.400378307230918e-7,4.4054262480027e-7,4.4104741887744815e-7,4.4155221295462636e-7,4.420570070318046e-7,4.425618011089828e-7,4.43066595186161e-7,4.4357138926333916e-7,4.4407618334051737e-7,4.445809774176956e-7,4.450857714948738e-7,4.4559056557205195e-7,4.4609535964923016e-7,4.466001537264084e-7,4.471049478035866e-7,4.476097418807648e-7,4.4811453595794296e-7,4.4861933003512117e-7,4.491241241122994e-7,4.496289181894776e-7,4.5013371226665575e-7,4.5063850634383396e-7,4.511433004210122e-7]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","peakMbAllocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportMeasured":[[1.734006218612194e-6,1.5030000000137989e-6,4191,1,null,null,null,null,null,null,null,null],[1.2620002962648869e-6,1.241999999734844e-6,3993,2,null,null,null,null,null,null,null,null],[1.6329577192664146e-6,1.6239999993672427e-6,5280,3,null,null,null,null,null,null,null,null],[2.073997166007757e-6,2.053000001112082e-6,6666,4,null,null,null,null,null,null,null,null],[2.5249901227653027e-6,2.504999999430879e-6,8184,5,null,null,null,null,null,null,null,null],[2.974993549287319e-6,2.955999999443293e-6,9636,6,null,null,null,null,null,null,null,null],[3.427034243941307e-6,3.405999999372966e-6,11187,7,null,null,null,null,null,null,null,null],[3.88704938814044e-6,3.858000001244477e-6,12672,8,null,null,null,null,null,null,null,null],[4.338973667472601e-6,4.30800000117415e-6,14157,9,null,null,null,null,null,null,null,null],[4.7889770939946175e-6,4.778999999288658e-6,15708,10,null,null,null,null,null,null,null,null],[5.23001654073596e-6,5.219000000167284e-6,17160,11,null,null,null,null,null,null,null,null],[5.691021215170622e-6,5.6709999984860815e-6,18612,12,null,null,null,null,null,null,null,null],[6.152025889605284e-6,6.142000000153303e-6,20130,13,null,null,null,null,null,null,null,null],[6.613030564039946e-6,6.593000000165716e-6,21648,14,null,null,null,null,null,null,null,null],[7.062975782901049e-6,7.054000001005534e-6,23133,15,null,null,null,null,null,null,null,null],[7.503957021981478e-6,7.4840000010567564e-6,24585,16,null,null,null,null,null,null,null,null],[7.983995601534843e-6,7.964999999998668e-6,26169,17,null,null,null,null,null,null,null,null],[8.425966370850801e-6,8.416000000011081e-6,27621,18,null,null,null,null,null,null,null,null],[8.867005817592144e-6,8.846000000062304e-6,29106,19,null,null,null,null,null,null,null,null],[9.328010492026806e-6,9.307000000902121e-6,30591,20,null,null,null,null,null,null,null,null],[9.807990863919258e-6,9.78900000170313e-6,32175,21,null,null,null,null,null,null,null,null],[1.0229006875306368e-5,1.0220000000060736e-5,33594,22,null,null,null,null,null,null,null,null],[1.0689953342080116e-5,1.0679999999041456e-5,35112,23,null,null,null,null,null,null,null,null],[1.1581985745579004e-5,1.1572000000015237e-5,38049,25,null,null,null,null,null,null,null,null],[1.206202432513237e-5,1.204199999982336e-5,39600,26,null,null,null,null,null,null,null,null],[1.2492993846535683e-5,1.2483000000784727e-5,41052,27,null,null,null,null,null,null,null,null],[1.2953998520970345e-5,1.2943999999848188e-5,42603,28,null,null,null,null,null,null,null,null],[1.3845972716808319e-5,1.3836000000821969e-5,45507,30,null,null,null,null,null,null,null,null],[1.4327000826597214e-5,1.4296999999885429e-5,47025,31,null,null,null,null,null,null,null,null],[1.521798549219966e-5,1.520800000065492e-5,49995,33,null,null,null,null,null,null,null,null],[1.613004133105278e-5,1.610999999890339e-5,53031,35,null,null,null,null,null,null,null,null],[1.6581034287810326e-5,1.6570999999743208e-5,54516,36,null,null,null,null,null,null,null,null],[1.750304363667965e-5,1.748300000059544e-5,57519,38,null,null,null,null,null,null,null,null],[1.8413993529975414e-5,1.839400000136493e-5,60489,40,null,null,null,null,null,null,null,null],[1.931603765115142e-5,1.9306000000440804e-5,63525,42,null,null,null,null,null,null,null,null],[2.0198000129312277e-5,2.018700000050444e-5,66429,44,null,null,null,null,null,null,null,null],[2.159102587029338e-5,2.1560000000420132e-5,70983,47,null,null,null,null,null,null,null,null],[2.251198748126626e-5,2.2472000001272363e-5,73920,49,null,null,null,null,null,null,null,null],[2.3833999875932932e-5,2.3823999999450507e-5,78408,52,null,null,null,null,null,null,null,null],[2.4746055714786053e-5,2.473700000038548e-5,81411,54,null,null,null,null,null,null,null,null],[2.611899981275201e-5,2.610900000021843e-5,85899,57,null,null,null,null,null,null,null,null],[2.7481000870466232e-5,2.7450999999345527e-5,90387,60,null,null,null,null,null,null,null,null],[2.8843991458415985e-5,2.884399999913967e-5,94875,63,null,null,null,null,null,null,null,null],[3.019697032868862e-5,3.0187000000125863e-5,99330,66,null,null,null,null,null,null,null,null],[3.154895966872573e-5,3.1540000000163104e-5,103851,69,null,null,null,null,null,null,null,null],[3.339204704388976e-5,3.337300000083587e-5,109857,73,null,null,null,null,null,null,null,null],[3.4744967706501484e-5,3.473499999984142e-5,114378,76,null,null,null,null,null,null,null,null],[3.656797343865037e-5,3.654799999885938e-5,120318,80,null,null,null,null,null,null,null,null],[3.8372003473341465e-5,3.836199999973644e-5,126291,84,null,null,null,null,null,null,null,null],[4.070601426064968e-5,4.0686000000178524e-5,133947,89,null,null,null,null,null,null,null,null],[4.2478961404412985e-5,4.246900000026699e-5,139854,93,null,null,null,null,null,null,null,null],[4.47329948656261e-5,4.4724000000329056e-5,147246,98,null,null,null,null,null,null,null,null],[4.702701698988676e-5,4.7018000000065285e-5,154803,103,null,null,null,null,null,null,null,null],[4.930200520902872e-5,4.9291999999923064e-5,162261,108,null,null,null,null,null,null,null,null],[5.092500941827893e-5,5.090500000015652e-5,167574,113,null,null,null,null,null,null,null,null],[5.279801553115249e-5,5.2767999999758786e-5,173745,119,null,null,null,null,null,null,null,null],[5.543295992538333e-5,5.5414000000197916e-5,182490,125,null,null,null,null,null,null,null,null],[5.808897549286485e-5,5.805899999877795e-5,191202,131,null,null,null,null,null,null,null,null],[6.118498276919127e-5,6.116399999989142e-5,201366,138,null,null,null,null,null,null,null,null],[6.380898412317038e-5,6.37989999994204e-5,210078,144,null,null,null,null,null,null,null,null],[6.734603084623814e-5,6.733600000075057e-5,221727,152,null,null,null,null,null,null,null,null],[7.044099038466811e-5,7.042200000029197e-5,231858,159,null,null,null,null,null,null,null,null],[7.396697765216231e-5,7.395799999976305e-5,243507,167,null,null,null,null,null,null,null,null],[7.79549591243267e-5,7.793600000027823e-5,256674,176,null,null,null,null,null,null,null,null],[8.420698577538133e-5,8.420800000052964e-5,277365,185,null,null,null,null,null,null,null,null],[8.589000208303332e-5,8.58710000013474e-5,282744,194,null,null,null,null,null,null,null,null],[9.02980100363493e-5,9.027900000013744e-5,297297,204,null,null,null,null,null,null,null,null],[9.470595978200436e-5,9.469700000153125e-5,311850,214,null,null,null,null,null,null,null,null],[9.912502719089389e-5,9.910600000040404e-5,326403,224,null,null,null,null,null,null,null,null],[1.0441499762237072e-4,1.0441599999921891e-4,343827,236,null,null,null,null,null,null,null,null],[1.0927300900220871e-4,1.0924500000086823e-4,359766,247,null,null,null,null,null,null,null,null],[1.1504505528137088e-4,1.1502599999957397e-4,378807,260,null,null,null,null,null,null,null,null],[1.207650057040155e-4,1.2073600000128692e-4,397650,273,null,null,null,null,null,null,null,null],[1.269369968213141e-4,1.2691799999942077e-4,417978,287,null,null,null,null,null,null,null,null],[1.331180101260543e-4,1.330890000001972e-4,438306,301,null,null,null,null,null,null,null,null],[1.3974105240777135e-4,1.3973199999917085e-4,460185,316,null,null,null,null,null,null,null,null],[1.4679401647299528e-4,1.467849999983173e-4,483384,332,null,null,null,null,null,null,null,null],[1.5387701569125056e-4,1.5386799999994594e-4,506781,348,null,null,null,null,null,null,null,null],[1.6182195395231247e-4,1.618119999999834e-4,532950,366,null,null,null,null,null,null,null,null],[1.6974599566310644e-4,1.6973800000030792e-4,559053,384,null,null,null,null,null,null,null,null],[1.7814204329624772e-4,1.781229999995304e-4,586641,403,null,null,null,null,null,null,null,null],[1.874089939519763e-4,1.8740099999980941e-4,617199,424,null,null,null,null,null,null,null,null],[1.9669695757329464e-4,1.9667900000008842e-4,647790,445,null,null,null,null,null,null,null,null],[2.0639505237340927e-4,2.063770000013676e-4,679734,467,null,null,null,null,null,null,null,null],[2.1655397722497582e-4,2.165359999999339e-4,713196,490,null,null,null,null,null,null,null,null],[2.2760499268770218e-4,2.2758599999939122e-4,749529,515,null,null,null,null,null,null,null,null],[2.39066022913903e-4,2.3904700000088042e-4,787314,541,null,null,null,null,null,null,null,null],[2.5097798788920045e-4,2.509600000006884e-4,826584,568,null,null,null,null,null,null,null,null],[2.6334100402891636e-4,2.633330000012535e-4,867306,596,null,null,null,null,null,null,null,null],[2.7631502598524094e-4,2.7632799999999236e-4,910173,626,null,null,null,null,null,null,null,null],[2.877869992516935e-4,2.8777900000065415e-4,947826,657,null,null,null,null,null,null,null,null],[3.0225299997255206e-4,3.02256000001222e-4,995577,690,null,null,null,null,null,null,null,null],[3.195960307493806e-4,3.196079999998602e-4,1052832,725,null,null,null,null,null,null,null,null],[3.3249997068196535e-4,3.3251300000003425e-4,1095204,761,null,null,null,null,null,null,null,null],[3.480389714241028e-4,3.4802200000072503e-4,1146288,799,null,null,null,null,null,null,null,null],[3.654619795270264e-4,3.6545399999887707e-4,1203708,839,null,null,null,null,null,null,null,null],[3.838359843939543e-4,3.8382800000036355e-4,1264197,881,null,null,null,null,null,null,null,null],[4.0305202128365636e-4,4.0305499999959693e-4,1327557,925,null,null,null,null,null,null,null,null],[4.2343896348029375e-4,4.2343199999983483e-4,1394613,972,null,null,null,null,null,null,null,null],[4.4421799248084426e-4,4.442119999996663e-4,1463088,1020,null,null,null,null,null,null,null,null],[5.11122983880341e-4,5.113770000004791e-4,1685343,1071,null,null,null,null,null,null,null,null],[5.649129743687809e-4,5.657790000004326e-4,1864863,1125,null,null,null,null,null,null,null,null],[5.288660177029669e-4,5.288500000002472e-4,1741905,1181,null,null,null,null,null,null,null,null],[5.445950082503259e-4,5.445890000004283e-4,1793748,1240,null,null,null,null,null,null,null,null],[5.719070322811604e-4,5.719309999996369e-4,1883739,1302,null,null,null,null,null,null,null,null],[6.003300077281892e-4,6.0035399999947e-4,1977459,1367,null,null,null,null,null,null,null,null],[6.305960123427212e-4,6.305910000001802e-4,2077053,1436,null,null,null,null,null,null,null,null],[6.651509902440012e-4,6.651649999991349e-4,2190936,1507,null,null,null,null,null,null,null,null],[6.952270050533116e-4,6.952319999999901e-4,2289936,1583,null,null,null,null,null,null,null,null],[7.303129532374442e-4,7.303069999995415e-4,2405469,1662,null,null,null,null,null,null,null,null],[7.662390125915408e-4,7.662439999993609e-4,2523840,1745,null,null,null,null,null,null,null,null],[8.012339822016656e-4,8.012699999984108e-4,2639307,1832,null,null,null,null,null,null,null,null],[8.372419979423285e-4,8.372479999998461e-4,2757744,1924,null,null,null,null,null,null,null,null],[8.778069750405848e-4,8.778130000006712e-4,2891295,2020,null,null,null,null,null,null,null,null],[1.0285580065101385e-3,1.0288670000004885e-3,3389529,2121,null,null,null,null,null,null,null,null],[1.006507023703307e-3,1.0065249999993142e-3,3315378,2227,null,null,null,null,null,null,null,null],[1.0589450248517096e-3,1.0589730000010178e-3,3488067,2339,null,null,null,null,null,null,null,null],[1.1090689804404974e-3,1.1090660000014907e-3,3652968,2456,null,null,null,null,null,null,null,null],[1.1725460062734783e-3,1.1739479999999247e-3,3867270,2579,null,null,null,null,null,null,null,null],[1.2398220133036375e-3,1.240453000001196e-3,4086522,2708,null,null,null,null,null,null,null,null],[1.2719820369966328e-3,1.2720109999992957e-3,4190175,2843,null,null,null,null,null,null,null,null],[1.3195210485719144e-3,1.3195699999997146e-3,4346463,2985,null,null,null,null,null,null,null,null],[1.3700150302611291e-3,1.3700359999990752e-3,4512651,3134,null,null,null,null,null,null,null,null],[1.461666019167751e-3,1.4617269999988025e-3,4814667,3291,null,null,null,null,null,null,null,null],[1.5308150323107839e-3,1.5308269999998458e-3,5042235,3456,null,null,null,null,null,null,null,null],[1.584184996318072e-3,1.5842769999991901e-3,5218290,3629,null,null,null,null,null,null,null,null],[1.6983869718387723e-3,1.6986299999999233e-3,5595546,3810,null,null,null,null,null,null,null,null],[1.8204250372946262e-3,1.8203680000006273e-3,5993922,4001,null,null,null,null,null,null,null,null],[1.882841985207051e-3,1.8828849999987796e-3,6201987,4201,null,null,null,null,null,null,null,null],[1.97368097724393e-3,1.9738359999994515e-3,6501792,4411,null,null,null,null,null,null,null,null],[2.050864975899458e-3,2.0509299999993402e-3,6755562,4631,null,null,null,null,null,null,null,null],[2.1352230105549097e-3,2.1352879999998464e-3,7033422,4863,null,null,null,null,null,null,null,null],[2.273850957863033e-3,2.2739280000010353e-3,7489944,5106,null,null,null,null,null,null,null,null],[2.3465660051442683e-3,2.346624000001185e-3,7729425,5361,null,null,null,null,null,null,null,null],[2.458445029333234e-3,2.458483000001621e-3,8097903,5629,null,null,null,null,null,null,null,null],[2.5955300079658628e-3,2.5956100000001925e-3,8549541,5911,null,null,null,null,null,null,null,null],[2.729500993154943e-3,2.7295610000006576e-3,8990619,6207,null,null,null,null,null,null,null,null],[2.8775259852409363e-3,2.877597999999537e-3,9478425,6517,null,null,null,null,null,null,null,null],[3.027426020707935e-3,3.027498999999878e-3,9972138,6843,null,null,null,null,null,null,null,null],[3.1726370216347277e-3,3.1727110000012715e-3,10450374,7185,null,null,null,null,null,null,null,null],[3.291138040367514e-3,3.291232000000477e-3,10840731,7544,null,null,null,null,null,null,null,null],[3.4446140052750707e-3,3.44469000000025e-3,11346159,7921,null,null,null,null,null,null,null,null],[3.6377739743329585e-3,3.6378510000005804e-3,11982597,8318,null,null,null,null,null,null,null,null],[3.830633999314159e-3,3.8307319999990597e-3,12617913,8733,null,null,null,null,null,null,null,null],[4.0053100092336535e-3,4.005399000000409e-3,13193235,9170,null,null,null,null,null,null,null,null],[4.236862005200237e-3,4.236983000000194e-3,13956063,9629,null,null,null,null,null,null,null,null],[4.456611990462989e-3,4.456714999999889e-3,14679555,10110,null,null,null,null,null,null,null,null],[4.697209980804473e-3,4.697315999999674e-3,15472149,10616,null,null,null,null,null,null,null,null],[4.925485991407186e-3,4.925592999999395e-3,16224153,11146,null,null,null,null,null,null,null,null],[5.1727870013564825e-3,5.172885000000349e-3,17038824,11704,null,null,null,null,null,null,null,null],[5.3797230357304215e-3,5.379823000000172e-3,17720307,12289,null,null,null,null,null,null,null,null],[5.697716027498245e-3,5.697818999999882e-3,18767727,12903,null,null,null,null,null,null,null,null],[5.980243033263832e-3,5.98034799999958e-3,19698228,13549,null,null,null,null,null,null,null,null],[6.215341039933264e-3,6.215467999998836e-3,20472804,14226,null,null,null,null,null,null,null,null],[6.516443972941488e-3,6.51655199999901e-3,21464388,14937,null,null,null,null,null,null,null,null],[6.845708005130291e-3,6.8458380000002705e-3,22549131,15684,null,null,null,null,null,null,null,null],[7.189076975919306e-3,7.189211000000029e-3,23680140,16469,null,null,null,null,null,null,null,null],[7.66272097826004e-3,7.6628480000007215e-3,25240248,17292,null,null,null,null,null,null,null,null],[8.039874024689198e-3,8.034735000000737e-3,26482500,18157,null,null,null,null,null,null,null,null],[8.420703990850598e-3,8.420837000000958e-3,27736863,19065,null,null,null,null,null,null,null,null],[8.830268983729184e-3,8.830394000000297e-3,29085771,20018,null,null,null,null,null,null,null,null],[9.308790962677449e-3,9.308940000000376e-3,30662016,21019,null,null,null,null,null,null,null,null],[9.766754985321313e-3,9.766887999999696e-3,32170512,22070,null,null,null,null,null,null,null,null],[1.0183693026192486e-2,1.0183818999999872e-2,33543807,23173,null,null,null,null,null,null,null,null],[1.0633692028932273e-2,1.0633821000000765e-2,35026101,24332,null,null,null,null,null,null,null,null],[1.1242226988542825e-2,1.1242370999999807e-2,37030587,25549,null,null,null,null,null,null,null,null],[1.185463898582384e-2,1.18554280000005e-2,39050022,26826,null,null,null,null,null,null,null,null],[1.2504380021709949e-2,1.250454400000045e-2,41187927,28167,null,null,null,null,null,null,null,null],[1.3187765958718956e-2,1.3187923000000268e-2,43438725,29576,null,null,null,null,null,null,null,null],[1.3616184995044023e-2,1.3616344999999086e-2,44849937,31054,null,null,null,null,null,null,null,null],[1.429392903810367e-2,1.4294064999999634e-2,47082189,32607,null,null,null,null,null,null,null,null],[1.500673801638186e-2,1.500689999999949e-2,49430172,34238,null,null,null,null,null,null,null,null],[1.5821908018551767e-2,1.582210599999989e-2,52115316,35950,null,null,null,null,null,null,null,null],[1.6529787972103804e-2,1.653002099999945e-2,54451188,37747,null,null,null,null,null,null,null,null],[1.7364203988108784e-2,1.736436400000052e-2,57195237,39634,null,null,null,null,null,null,null,null],[1.8206144974101335e-2,1.8206359999998867e-2,59968689,41616,null,null,null,null,null,null,null,null],[1.9180441973730922e-2,1.9172479999999936e-2,63177642,43697,null,null,null,null,null,null,null,null],[2.009375498164445e-2,2.0093963999999076e-2,66186087,45882,null,null,null,null,null,null,null,null],[2.1129538014065474e-2,2.1129743999999562e-2,69597594,48176,null,null,null,null,null,null,null,null],[2.248708897968754e-2,2.248731499999934e-2,74069457,50585,null,null,null,null,null,null,null,null],[2.3606094997376204e-2,2.3606531000002207e-2,77756184,53114,null,null,null,null,null,null,null,null],[2.480761695187539e-2,2.480795099999966e-2,81713907,55770,null,null,null,null,null,null,null,null],[2.590688696363941e-2,2.590717899999717e-2,85333644,58558,null,null,null,null,null,null,null,null],[2.701885998249054e-2,2.701915099999752e-2,88996446,61486,null,null,null,null,null,null,null,null],[2.831632102606818e-2,2.8316561000000462e-2,93269781,64561,null,null,null,null,null,null,null,null],[2.9760804027318954e-2,2.9761075999999775e-2,98027787,67789,null,null,null,null,null,null,null,null],[3.12592190457508e-2,3.125951099999824e-2,102963366,71178,null,null,null,null,null,null,null,null],[3.278847201727331e-2,3.2788775000000214e-2,108000486,74737,null,null,null,null,null,null,null,null],[3.450718603562564e-2,3.4507492000003026e-2,113661537,78474,null,null,null,null,null,null,null,null],[3.6112571018747985e-2,3.6112899000002585e-2,118949556,82398,null,null,null,null,null,null,null,null],[3.792292601428926e-2,3.792329799999905e-2,124912755,86518,null,null,null,null,null,null,null,null],[3.9800018013920635e-2,3.980038299999933e-2,131095437,90843,null,null,null,null,null,null,null,null],[4.19951020157896e-2,4.1995474000000144e-2,138325671,95386,null,null,null,null,null,null,null,null],[4.395701101748273e-2,4.395739699999979e-2,144787896,100155,null,null,null,null,null,null,null,null],[4.60954190348275e-2,4.609192399999884e-2,151831812,105163,null,null,null,null,null,null,null,null],[4.833476495696232e-2,4.83351540000001e-2,159207576,110421,null,null,null,null,null,null,null,null],[5.059339804574847e-2,5.0593822999999816e-2,166647096,115942,null,null,null,null,null,null,null,null],[5.364891601493582e-2,5.364955499999979e-2,176712525,121739,null,null,null,null,null,null,null,null],[5.605629499768838e-2,5.605679199999969e-2,184641138,127826,null,null,null,null,null,null,null,null],[5.8864302991423756e-2,5.8864809999999324e-2,193890312,134217,null,null,null,null,null,null,null,null],[6.2030026980210096e-2,6.203066800000201e-2,204318213,140928,null,null,null,null,null,null,null,null],[6.498762301634997e-2,6.498815499999822e-2,214059516,147975,null,null,null,null,null,null,null,null],[6.824409600812942e-2,6.824202800000023e-2,224785869,155373,null,null,null,null,null,null,null,null],[7.13241709745489e-2,7.132474999999872e-2,234931059,163142,null,null,null,null,null,null,null,null],[7.524762797402218e-2,7.524829699999813e-2,247854618,171299,null,null,null,null,null,null,null,null],[7.866603299044073e-2,7.866668699999835e-2,259114152,179864,null,null,null,null,null,null,null,null],[7.78742769616656e-2,7.787506500000063e-2,256507053,188858,null,null,null,null,null,null,null,null],[7.825527800014243e-2,7.82560580000009e-2,257761878,198300,null,null,null,null,null,null,null,null],[8.179860602831468e-2,8.179931299999765e-2,269432361,208215,null,null,null,null,null,null,null,null],[8.625966601539403e-2,8.626036599999765e-2,284126370,218626,null,null,null,null,null,null,null,null],[9.022438997635618e-2,9.022524899999951e-2,297186219,229558,null,null,null,null,null,null,null,null],[9.546850004699081e-2,9.546942900000133e-2,314459541,241036,null,null,null,null,null,null,null,null],[9.989500499796122e-2,9.989594800000035e-2,329039766,253087,null,null,null,null,null,null,null,null],[0.10462252300931141,0.10462353000000135,344611641,265742,null,null,null,null,null,null,null,null],[0.1095868709962815,0.10958775499999973,360962613,279029,null,null,null,null,null,null,null,null],[0.11499033903237432,0.11499130300000004,378760998,292980,null,null,null,null,null,null,null,null],[0.12070650001987815,0.12070745600000166,397588884,307629,null,null,null,null,null,null,null,null],[0.12716227996861562,0.12716331399999703,418853358,323011,null,null,null,null,null,null,null,null],[0.13425873505184427,0.13425995100000065,442228875,339161,null,null,null,null,null,null,null,null],[0.14080686698434874,0.14080807199999867,463796949,356119,null,null,null,null,null,null,null,null],[0.14889366901479661,0.1488956960000003,490437915,373925,null,null,null,null,null,null,null,null],[0.15581089997431263,0.15581319900000068,513221610,392622,null,null,null,null,null,null,null,null],[0.17354262998560444,0.17354564099999692,571628805,412253,null,null,null,null,null,null,null,null],[0.19113452796591446,0.19113642800000008,629569512,432866,null,null,null,null,null,null,null,null],[0.2016421360312961,0.20164449399999995,664181496,454509,null,null,null,null,null,null,null,null],[0.21275134501047432,0.21275311400000163,700771137,477234,null,null,null,null,null,null,null,null],[0.22062326601007953,0.22062496299999879,726699303,501096,null,null,null,null,null,null,null,null],[0.23095548601122573,0.23095728899999912,760732170,526151,null,null,null,null,null,null,null,null],[0.243025005038362,0.24302704999999847,800488161,552458,null,null,null,null,null,null,null,null]],"reportName":"fib/11","reportNumber":3,"reportOutliers":{"highMild":0,"highSevere":0,"lowMild":0,"lowSevere":0,"samplesSeen":43}}] - </script> - <meta name="viewport" content="width=device-width, initial-scale=1"> -</head> -<body> - <div class="content"> - <h1 class='title'>criterion performance measurements</h1> - <p class="no-print"><a href="#grokularation">want to understand this report?</a></p> - <h1 id="overview"><a href="#overview">overview</a></h1> - <div class="no-print"> - <select id="sort-overview" class="select"> - <option value="report-index">index</option> - <option value="lex">lexical</option> - <option value="colex">colexical</option> - <option value="duration">time ascending</option> - <option value="rev-duration">time descending</option> - </select> - <span class="overview-info"> - <a href="#controls-explanation" class="info" title="click bar/label to zoom; x-axis to toggle logarithmic scale; background to reset">ⓘ</a> - <a id="legend-toggle" class="chevron button"></a> - </span> - </div> - <aside id="overview-chart"></aside> - <main id="reports"></main> - </div> - - <aside id="controls-explanation" class="explanation no-print"> - <h1><a href="#controls-explanation">controls</a></h1> - - <p> - The overview chart can be controlled by clicking the following elements: - <ul> - <li><em>a bar or its label</em> zooms the x-axis to that bar</li> - <li><em>the background</em> resets zoom to the entire chart</li> - <li><em>the x-axis</em> toggles between linear and logarithmic scale</li> - <li><em>the chevron</em> in the top-right toggles the the legend</li> - <li><em>a group name in the legend</em> shows/hides that group</li> - </ul> - </p> - - <p> - The overview chart supports the following sort orders: - <ul> - <li><em>index</em> order is the order as the benchmarks are defined in criterion</li> - <li><em>lexical</em> order sorts <a href="https://en.wikipedia.org/wiki/Lexicographic_order#Motivation_and_definition">groups left-to-right</a>, alphabetically</li> - <li><em>colexical</em> order sorts <a href="https://en.wikipedia.org/wiki/Lexicographic_order#Colexicographic_order">groups right-to-left</a>, alphabetically</li> - <li><em>time ascending/descending</em> order sorts by the estimated mean execution time</li> - </ul> - </p> - - </aside> - - <aside id="grokularation" class="explanation"> - - <h1><a>understanding this report</a></h1> - - <p> - In this report, each function benchmarked by criterion is assigned a section of its own. - <span class="no-print">The charts in each section are active; if you hover your mouse over data points and annotations, you will see more details.</span> - </p> - - <ul> - <li> - The chart on the left is a <a href="http://en.wikipedia.org/wiki/Kernel_density_estimation">kernel density estimate</a> (also known as a KDE) of time measurements. - This graphs the probability of any given time measurement occurring. - A spike indicates that a measurement of a particular time occurred; its height indicates how often that measurement was repeated. - </li> - - <li> - The chart on the right is the raw data from which the kernel density estimate is built. - The <em>x</em>-axis indicates the number of loop iterations, while the <em>y</em>-axis shows measured execution time for the given number of loop iterations. - The line behind the values is the linear regression estimate of execution time for a given number of iterations. - Ideally, all measurements will be on (or very near) this line. - The transparent area behind it shows the confidence interval for the execution time estimate. - </li> - </ul> - - <p> - Under the charts is a small table. - The first two rows are the results of a linear regression run on the measurements displayed in the right-hand chart. - </p> - - <ul> - <li> - <em>OLS regression</em> indicates the time estimated for a single loop iteration using an ordinary least-squares regression model. - This number is more accurate than the <em>mean</em> estimate below it, as it more effectively eliminates measurement overhead and other constant factors. - </li> - <li> - <em>R<sup>2</sup>; goodness-of-fit</em> is a measure of how accurately the linear regression model fits the observed measurements. - If the measurements are not too noisy, R<sup>2</sup>; should lie between 0.99 and 1, indicating an excellent fit. - If the number is below 0.99, something is confounding the accuracy of the linear model. - </li> - <li> - <em>Mean execution time</em> and <em>standard deviation</em> are statistics calculated from execution time divided by number of iterations. - </li> - </ul> - - <p> - We use a statistical technique called the <a href="http://en.wikipedia.org/wiki/Bootstrapping_(statistics)">bootstrap</a> to provide confidence intervals on our estimates. - The bootstrap-derived upper and lower bounds on estimates let you see how accurate we believe those estimates to be. - <span class="no-print">(Hover the mouse over the table headers to see the confidence levels.)</span> - </p> - - <p> - A noisy benchmarking environment can cause some or many measurements to fall far from the mean. - These outlying measurements can have a significant inflationary effect on the estimate of the standard deviation. - We calculate and display an estimate of the extent to which the standard deviation has been inflated by outliers. - </p> - - </aside> - - <footer> - <div class="content"> - <h1 class="colophon-header">colophon</h1> - <p> - This report was created using the <a href="http://hackage.haskell.org/package/criterion">criterion</a> - benchmark execution and performance analysis tool. - </p> - <p> - Criterion is developed and maintained - by <a href="http://www.serpentine.com/blog/">Bryan O'Sullivan</a>. - </p> - </div> - </footer> -</body> -</html> +<!doctype html>+<html>+<head>+ <meta charset="utf-8"/>+ <title>criterion report</title>+ <script>+ /*!+ * Chart.js v2.9.4+ * https://www.chartjs.org+ * (c) 2020 Chart.js Contributors+ * Released under the MIT License+ */+!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(function(){try{return require("moment")}catch(t){}}()):"function"==typeof define&&define.amd?define(["require"],(function(t){return e(function(){try{return t("moment")}catch(t){}}())})):(t=t||self).Chart=e(t.moment)}(this,(function(t){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var e={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},n=function(t,e){return t(e={exports:{}},e.exports),e.exports}((function(t){var n={};for(var i in e)e.hasOwnProperty(i)&&(n[e[i]]=i);var a=t.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var r in a)if(a.hasOwnProperty(r)){if(!("channels"in a[r]))throw new Error("missing channels property: "+r);if(!("labels"in a[r]))throw new Error("missing channel labels property: "+r);if(a[r].labels.length!==a[r].channels)throw new Error("channel and label counts mismatch: "+r);var o=a[r].channels,s=a[r].labels;delete a[r].channels,delete a[r].labels,Object.defineProperty(a[r],"channels",{value:o}),Object.defineProperty(a[r],"labels",{value:s})}a.rgb.hsl=function(t){var e,n,i=t[0]/255,a=t[1]/255,r=t[2]/255,o=Math.min(i,a,r),s=Math.max(i,a,r),l=s-o;return s===o?e=0:i===s?e=(a-r)/l:a===s?e=2+(r-i)/l:r===s&&(e=4+(i-a)/l),(e=Math.min(60*e,360))<0&&(e+=360),n=(o+s)/2,[e,100*(s===o?0:n<=.5?l/(s+o):l/(2-s-o)),100*n]},a.rgb.hsv=function(t){var e,n,i,a,r,o=t[0]/255,s=t[1]/255,l=t[2]/255,u=Math.max(o,s,l),d=u-Math.min(o,s,l),h=function(t){return(u-t)/6/d+.5};return 0===d?a=r=0:(r=d/u,e=h(o),n=h(s),i=h(l),o===u?a=i-n:s===u?a=1/3+e-i:l===u&&(a=2/3+n-e),a<0?a+=1:a>1&&(a-=1)),[360*a,100*r,100*u]},a.rgb.hwb=function(t){var e=t[0],n=t[1],i=t[2];return[a.rgb.hsl(t)[0],100*(1/255*Math.min(e,Math.min(n,i))),100*(i=1-1/255*Math.max(e,Math.max(n,i)))]},a.rgb.cmyk=function(t){var e,n=t[0]/255,i=t[1]/255,a=t[2]/255;return[100*((1-n-(e=Math.min(1-n,1-i,1-a)))/(1-e)||0),100*((1-i-e)/(1-e)||0),100*((1-a-e)/(1-e)||0),100*e]},a.rgb.keyword=function(t){var i=n[t];if(i)return i;var a,r,o,s=1/0;for(var l in e)if(e.hasOwnProperty(l)){var u=e[l],d=(r=t,o=u,Math.pow(r[0]-o[0],2)+Math.pow(r[1]-o[1],2)+Math.pow(r[2]-o[2],2));d<s&&(s=d,a=l)}return a},a.keyword.rgb=function(t){return e[t]},a.rgb.xyz=function(t){var e=t[0]/255,n=t[1]/255,i=t[2]/255;return[100*(.4124*(e=e>.04045?Math.pow((e+.055)/1.055,2.4):e/12.92)+.3576*(n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.1805*(i=i>.04045?Math.pow((i+.055)/1.055,2.4):i/12.92)),100*(.2126*e+.7152*n+.0722*i),100*(.0193*e+.1192*n+.9505*i)]},a.rgb.lab=function(t){var e=a.rgb.xyz(t),n=e[0],i=e[1],r=e[2];return i/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116)-16,500*(n-i),200*(i-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},a.hsl.rgb=function(t){var e,n,i,a,r,o=t[0]/360,s=t[1]/100,l=t[2]/100;if(0===s)return[r=255*l,r,r];e=2*l-(n=l<.5?l*(1+s):l+s-l*s),a=[0,0,0];for(var u=0;u<3;u++)(i=o+1/3*-(u-1))<0&&i++,i>1&&i--,r=6*i<1?e+6*(n-e)*i:2*i<1?n:3*i<2?e+(n-e)*(2/3-i)*6:e,a[u]=255*r;return a},a.hsl.hsv=function(t){var e=t[0],n=t[1]/100,i=t[2]/100,a=n,r=Math.max(i,.01);return n*=(i*=2)<=1?i:2-i,a*=r<=1?r:2-r,[e,100*(0===i?2*a/(r+a):2*n/(i+n)),100*((i+n)/2)]},a.hsv.rgb=function(t){var e=t[0]/60,n=t[1]/100,i=t[2]/100,a=Math.floor(e)%6,r=e-Math.floor(e),o=255*i*(1-n),s=255*i*(1-n*r),l=255*i*(1-n*(1-r));switch(i*=255,a){case 0:return[i,l,o];case 1:return[s,i,o];case 2:return[o,i,l];case 3:return[o,s,i];case 4:return[l,o,i];case 5:return[i,o,s]}},a.hsv.hsl=function(t){var e,n,i,a=t[0],r=t[1]/100,o=t[2]/100,s=Math.max(o,.01);return i=(2-r)*o,n=r*s,[a,100*(n=(n/=(e=(2-r)*s)<=1?e:2-e)||0),100*(i/=2)]},a.hwb.rgb=function(t){var e,n,i,a,r,o,s,l=t[0]/360,u=t[1]/100,d=t[2]/100,h=u+d;switch(h>1&&(u/=h,d/=h),i=6*l-(e=Math.floor(6*l)),0!=(1&e)&&(i=1-i),a=u+i*((n=1-d)-u),e){default:case 6:case 0:r=n,o=a,s=u;break;case 1:r=a,o=n,s=u;break;case 2:r=u,o=n,s=a;break;case 3:r=u,o=a,s=n;break;case 4:r=a,o=u,s=n;break;case 5:r=n,o=u,s=a}return[255*r,255*o,255*s]},a.cmyk.rgb=function(t){var e=t[0]/100,n=t[1]/100,i=t[2]/100,a=t[3]/100;return[255*(1-Math.min(1,e*(1-a)+a)),255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,i*(1-a)+a))]},a.xyz.rgb=function(t){var e,n,i,a=t[0]/100,r=t[1]/100,o=t[2]/100;return n=-.9689*a+1.8758*r+.0415*o,i=.0557*a+-.204*r+1.057*o,e=(e=3.2406*a+-1.5372*r+-.4986*o)>.0031308?1.055*Math.pow(e,1/2.4)-.055:12.92*e,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,i=i>.0031308?1.055*Math.pow(i,1/2.4)-.055:12.92*i,[255*(e=Math.min(Math.max(0,e),1)),255*(n=Math.min(Math.max(0,n),1)),255*(i=Math.min(Math.max(0,i),1))]},a.xyz.lab=function(t){var e=t[0],n=t[1],i=t[2];return n/=100,i/=108.883,e=(e/=95.047)>.008856?Math.pow(e,1/3):7.787*e+16/116,[116*(n=n>.008856?Math.pow(n,1/3):7.787*n+16/116)-16,500*(e-n),200*(n-(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116))]},a.lab.xyz=function(t){var e,n,i,a=t[0];e=t[1]/500+(n=(a+16)/116),i=n-t[2]/200;var r=Math.pow(n,3),o=Math.pow(e,3),s=Math.pow(i,3);return n=r>.008856?r:(n-16/116)/7.787,e=o>.008856?o:(e-16/116)/7.787,i=s>.008856?s:(i-16/116)/7.787,[e*=95.047,n*=100,i*=108.883]},a.lab.lch=function(t){var e,n=t[0],i=t[1],a=t[2];return(e=360*Math.atan2(a,i)/2/Math.PI)<0&&(e+=360),[n,Math.sqrt(i*i+a*a),e]},a.lch.lab=function(t){var e,n=t[0],i=t[1];return e=t[2]/360*2*Math.PI,[n,i*Math.cos(e),i*Math.sin(e)]},a.rgb.ansi16=function(t){var e=t[0],n=t[1],i=t[2],r=1 in arguments?arguments[1]:a.rgb.hsv(t)[2];if(0===(r=Math.round(r/50)))return 30;var o=30+(Math.round(i/255)<<2|Math.round(n/255)<<1|Math.round(e/255));return 2===r&&(o+=60),o},a.hsv.ansi16=function(t){return a.rgb.ansi16(a.hsv.rgb(t),t[2])},a.rgb.ansi256=function(t){var e=t[0],n=t[1],i=t[2];return e===n&&n===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(n/255*5)+Math.round(i/255*5)},a.ansi16.rgb=function(t){var e=t%10;if(0===e||7===e)return t>50&&(e+=3.5),[e=e/10.5*255,e,e];var n=.5*(1+~~(t>50));return[(1&e)*n*255,(e>>1&1)*n*255,(e>>2&1)*n*255]},a.ansi256.rgb=function(t){if(t>=232){var e=10*(t-232)+8;return[e,e,e]}var n;return t-=16,[Math.floor(t/36)/5*255,Math.floor((n=t%36)/6)/5*255,n%6/5*255]},a.rgb.hex=function(t){var e=(((255&Math.round(t[0]))<<16)+((255&Math.round(t[1]))<<8)+(255&Math.round(t[2]))).toString(16).toUpperCase();return"000000".substring(e.length)+e},a.hex.rgb=function(t){var e=t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];var n=e[0];3===e[0].length&&(n=n.split("").map((function(t){return t+t})).join(""));var i=parseInt(n,16);return[i>>16&255,i>>8&255,255&i]},a.rgb.hcg=function(t){var e,n=t[0]/255,i=t[1]/255,a=t[2]/255,r=Math.max(Math.max(n,i),a),o=Math.min(Math.min(n,i),a),s=r-o;return e=s<=0?0:r===n?(i-a)/s%6:r===i?2+(a-n)/s:4+(n-i)/s+4,e/=6,[360*(e%=1),100*s,100*(s<1?o/(1-s):0)]},a.hsl.hcg=function(t){var e=t[1]/100,n=t[2]/100,i=1,a=0;return(i=n<.5?2*e*n:2*e*(1-n))<1&&(a=(n-.5*i)/(1-i)),[t[0],100*i,100*a]},a.hsv.hcg=function(t){var e=t[1]/100,n=t[2]/100,i=e*n,a=0;return i<1&&(a=(n-i)/(1-i)),[t[0],100*i,100*a]},a.hcg.rgb=function(t){var e=t[0]/360,n=t[1]/100,i=t[2]/100;if(0===n)return[255*i,255*i,255*i];var a,r=[0,0,0],o=e%1*6,s=o%1,l=1-s;switch(Math.floor(o)){case 0:r[0]=1,r[1]=s,r[2]=0;break;case 1:r[0]=l,r[1]=1,r[2]=0;break;case 2:r[0]=0,r[1]=1,r[2]=s;break;case 3:r[0]=0,r[1]=l,r[2]=1;break;case 4:r[0]=s,r[1]=0,r[2]=1;break;default:r[0]=1,r[1]=0,r[2]=l}return a=(1-n)*i,[255*(n*r[0]+a),255*(n*r[1]+a),255*(n*r[2]+a)]},a.hcg.hsv=function(t){var e=t[1]/100,n=e+t[2]/100*(1-e),i=0;return n>0&&(i=e/n),[t[0],100*i,100*n]},a.hcg.hsl=function(t){var e=t[1]/100,n=t[2]/100*(1-e)+.5*e,i=0;return n>0&&n<.5?i=e/(2*n):n>=.5&&n<1&&(i=e/(2*(1-n))),[t[0],100*i,100*n]},a.hcg.hwb=function(t){var e=t[1]/100,n=e+t[2]/100*(1-e);return[t[0],100*(n-e),100*(1-n)]},a.hwb.hcg=function(t){var e=t[1]/100,n=1-t[2]/100,i=n-e,a=0;return i<1&&(a=(n-i)/(1-i)),[t[0],100*i,100*a]},a.apple.rgb=function(t){return[t[0]/65535*255,t[1]/65535*255,t[2]/65535*255]},a.rgb.apple=function(t){return[t[0]/255*65535,t[1]/255*65535,t[2]/255*65535]},a.gray.rgb=function(t){return[t[0]/100*255,t[0]/100*255,t[0]/100*255]},a.gray.hsl=a.gray.hsv=function(t){return[0,0,t[0]]},a.gray.hwb=function(t){return[0,100,t[0]]},a.gray.cmyk=function(t){return[0,0,0,t[0]]},a.gray.lab=function(t){return[t[0],0,0]},a.gray.hex=function(t){var e=255&Math.round(t[0]/100*255),n=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(n.length)+n},a.rgb.gray=function(t){return[(t[0]+t[1]+t[2])/3/255*100]}}));n.rgb,n.hsl,n.hsv,n.hwb,n.cmyk,n.xyz,n.lab,n.lch,n.hex,n.keyword,n.ansi16,n.ansi256,n.hcg,n.apple,n.gray;function i(t){var e=function(){for(var t={},e=Object.keys(n),i=e.length,a=0;a<i;a++)t[e[a]]={distance:-1,parent:null};return t}(),i=[t];for(e[t].distance=0;i.length;)for(var a=i.pop(),r=Object.keys(n[a]),o=r.length,s=0;s<o;s++){var l=r[s],u=e[l];-1===u.distance&&(u.distance=e[a].distance+1,u.parent=a,i.unshift(l))}return e}function a(t,e){return function(n){return e(t(n))}}function r(t,e){for(var i=[e[t].parent,t],r=n[e[t].parent][t],o=e[t].parent;e[o].parent;)i.unshift(e[o].parent),r=a(n[e[o].parent][o],r),o=e[o].parent;return r.conversion=i,r}var o={};Object.keys(n).forEach((function(t){o[t]={},Object.defineProperty(o[t],"channels",{value:n[t].channels}),Object.defineProperty(o[t],"labels",{value:n[t].labels});var e=function(t){for(var e=i(t),n={},a=Object.keys(e),o=a.length,s=0;s<o;s++){var l=a[s];null!==e[l].parent&&(n[l]=r(l,e))}return n}(t);Object.keys(e).forEach((function(n){var i=e[n];o[t][n]=function(t){var e=function(e){if(null==e)return e;arguments.length>1&&(e=Array.prototype.slice.call(arguments));var n=t(e);if("object"==typeof n)for(var i=n.length,a=0;a<i;a++)n[a]=Math.round(n[a]);return n};return"conversion"in t&&(e.conversion=t.conversion),e}(i),o[t][n].raw=function(t){var e=function(e){return null==e?e:(arguments.length>1&&(e=Array.prototype.slice.call(arguments)),t(e))};return"conversion"in t&&(e.conversion=t.conversion),e}(i)}))}));var s=o,l={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},u={getRgba:d,getHsla:h,getRgb:function(t){var e=d(t);return e&&e.slice(0,3)},getHsl:function(t){var e=h(t);return e&&e.slice(0,3)},getHwb:c,getAlpha:function(t){var e=d(t);if(e)return e[3];if(e=h(t))return e[3];if(e=c(t))return e[3]},hexString:function(t,e){e=void 0!==e&&3===t.length?e:t[3];return"#"+v(t[0])+v(t[1])+v(t[2])+(e>=0&&e<1?v(Math.round(255*e)):"")},rgbString:function(t,e){if(e<1||t[3]&&t[3]<1)return f(t,e);return"rgb("+t[0]+", "+t[1]+", "+t[2]+")"},rgbaString:f,percentString:function(t,e){if(e<1||t[3]&&t[3]<1)return g(t,e);var n=Math.round(t[0]/255*100),i=Math.round(t[1]/255*100),a=Math.round(t[2]/255*100);return"rgb("+n+"%, "+i+"%, "+a+"%)"},percentaString:g,hslString:function(t,e){if(e<1||t[3]&&t[3]<1)return p(t,e);return"hsl("+t[0]+", "+t[1]+"%, "+t[2]+"%)"},hslaString:p,hwbString:function(t,e){void 0===e&&(e=void 0!==t[3]?t[3]:1);return"hwb("+t[0]+", "+t[1]+"%, "+t[2]+"%"+(void 0!==e&&1!==e?", "+e:"")+")"},keyword:function(t){return b[t.slice(0,3)]}};function d(t){if(t){var e=[0,0,0],n=1,i=t.match(/^#([a-fA-F0-9]{3,4})$/i),a="";if(i){a=(i=i[1])[3];for(var r=0;r<e.length;r++)e[r]=parseInt(i[r]+i[r],16);a&&(n=Math.round(parseInt(a+a,16)/255*100)/100)}else if(i=t.match(/^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i)){a=i[2],i=i[1];for(r=0;r<e.length;r++)e[r]=parseInt(i.slice(2*r,2*r+2),16);a&&(n=Math.round(parseInt(a,16)/255*100)/100)}else if(i=t.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(r=0;r<e.length;r++)e[r]=parseInt(i[r+1]);n=parseFloat(i[4])}else if(i=t.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(r=0;r<e.length;r++)e[r]=Math.round(2.55*parseFloat(i[r+1]));n=parseFloat(i[4])}else if(i=t.match(/(\w+)/)){if("transparent"==i[1])return[0,0,0,0];if(!(e=l[i[1]]))return}for(r=0;r<e.length;r++)e[r]=m(e[r],0,255);return n=n||0==n?m(n,0,1):1,e[3]=n,e}}function h(t){if(t){var e=t.match(/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var n=parseFloat(e[4]);return[m(parseInt(e[1]),0,360),m(parseFloat(e[2]),0,100),m(parseFloat(e[3]),0,100),m(isNaN(n)?1:n,0,1)]}}}function c(t){if(t){var e=t.match(/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var n=parseFloat(e[4]);return[m(parseInt(e[1]),0,360),m(parseFloat(e[2]),0,100),m(parseFloat(e[3]),0,100),m(isNaN(n)?1:n,0,1)]}}}function f(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"rgba("+t[0]+", "+t[1]+", "+t[2]+", "+e+")"}function g(t,e){return"rgba("+Math.round(t[0]/255*100)+"%, "+Math.round(t[1]/255*100)+"%, "+Math.round(t[2]/255*100)+"%, "+(e||t[3]||1)+")"}function p(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hsla("+t[0]+", "+t[1]+"%, "+t[2]+"%, "+e+")"}function m(t,e,n){return Math.min(Math.max(e,t),n)}function v(t){var e=t.toString(16).toUpperCase();return e.length<2?"0"+e:e}var b={};for(var x in l)b[l[x]]=x;var y=function(t){return t instanceof y?t:this instanceof y?(this.valid=!1,this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1},void("string"==typeof t?(e=u.getRgba(t))?this.setValues("rgb",e):(e=u.getHsla(t))?this.setValues("hsl",e):(e=u.getHwb(t))&&this.setValues("hwb",e):"object"==typeof t&&(void 0!==(e=t).r||void 0!==e.red?this.setValues("rgb",e):void 0!==e.l||void 0!==e.lightness?this.setValues("hsl",e):void 0!==e.v||void 0!==e.value?this.setValues("hsv",e):void 0!==e.w||void 0!==e.whiteness?this.setValues("hwb",e):void 0===e.c&&void 0===e.cyan||this.setValues("cmyk",e)))):new y(t);var e};y.prototype={isValid:function(){return this.valid},rgb:function(){return this.setSpace("rgb",arguments)},hsl:function(){return this.setSpace("hsl",arguments)},hsv:function(){return this.setSpace("hsv",arguments)},hwb:function(){return this.setSpace("hwb",arguments)},cmyk:function(){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){var t=this.values;return 1!==t.alpha?t.hwb.concat([t.alpha]):t.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var t=this.values;return t.rgb.concat([t.alpha])},hslaArray:function(){var t=this.values;return t.hsl.concat([t.alpha])},alpha:function(t){return void 0===t?this.values.alpha:(this.setValues("alpha",t),this)},red:function(t){return this.setChannel("rgb",0,t)},green:function(t){return this.setChannel("rgb",1,t)},blue:function(t){return this.setChannel("rgb",2,t)},hue:function(t){return t&&(t=(t%=360)<0?360+t:t),this.setChannel("hsl",0,t)},saturation:function(t){return this.setChannel("hsl",1,t)},lightness:function(t){return this.setChannel("hsl",2,t)},saturationv:function(t){return this.setChannel("hsv",1,t)},whiteness:function(t){return this.setChannel("hwb",1,t)},blackness:function(t){return this.setChannel("hwb",2,t)},value:function(t){return this.setChannel("hsv",2,t)},cyan:function(t){return this.setChannel("cmyk",0,t)},magenta:function(t){return this.setChannel("cmyk",1,t)},yellow:function(t){return this.setChannel("cmyk",2,t)},black:function(t){return this.setChannel("cmyk",3,t)},hexString:function(){return u.hexString(this.values.rgb)},rgbString:function(){return u.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return u.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return u.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return u.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return u.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return u.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return u.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var t=this.values.rgb;return t[0]<<16|t[1]<<8|t[2]},luminosity:function(){for(var t=this.values.rgb,e=[],n=0;n<t.length;n++){var i=t[n]/255;e[n]=i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4)}return.2126*e[0]+.7152*e[1]+.0722*e[2]},contrast:function(t){var e=this.luminosity(),n=t.luminosity();return e>n?(e+.05)/(n+.05):(n+.05)/(e+.05)},level:function(t){var e=this.contrast(t);return e>=7.1?"AAA":e>=4.5?"AA":""},dark:function(){var t=this.values.rgb;return(299*t[0]+587*t[1]+114*t[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var t=[],e=0;e<3;e++)t[e]=255-this.values.rgb[e];return this.setValues("rgb",t),this},lighten:function(t){var e=this.values.hsl;return e[2]+=e[2]*t,this.setValues("hsl",e),this},darken:function(t){var e=this.values.hsl;return e[2]-=e[2]*t,this.setValues("hsl",e),this},saturate:function(t){var e=this.values.hsl;return e[1]+=e[1]*t,this.setValues("hsl",e),this},desaturate:function(t){var e=this.values.hsl;return e[1]-=e[1]*t,this.setValues("hsl",e),this},whiten:function(t){var e=this.values.hwb;return e[1]+=e[1]*t,this.setValues("hwb",e),this},blacken:function(t){var e=this.values.hwb;return e[2]+=e[2]*t,this.setValues("hwb",e),this},greyscale:function(){var t=this.values.rgb,e=.3*t[0]+.59*t[1]+.11*t[2];return this.setValues("rgb",[e,e,e]),this},clearer:function(t){var e=this.values.alpha;return this.setValues("alpha",e-e*t),this},opaquer:function(t){var e=this.values.alpha;return this.setValues("alpha",e+e*t),this},rotate:function(t){var e=this.values.hsl,n=(e[0]+t)%360;return e[0]=n<0?360+n:n,this.setValues("hsl",e),this},mix:function(t,e){var n=t,i=void 0===e?.5:e,a=2*i-1,r=this.alpha()-n.alpha(),o=((a*r==-1?a:(a+r)/(1+a*r))+1)/2,s=1-o;return this.rgb(o*this.red()+s*n.red(),o*this.green()+s*n.green(),o*this.blue()+s*n.blue()).alpha(this.alpha()*i+n.alpha()*(1-i))},toJSON:function(){return this.rgb()},clone:function(){var t,e,n=new y,i=this.values,a=n.values;for(var r in i)i.hasOwnProperty(r)&&(t=i[r],"[object Array]"===(e={}.toString.call(t))?a[r]=t.slice(0):"[object Number]"===e?a[r]=t:console.error("unexpected color value:",t));return n}},y.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},y.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},y.prototype.getValues=function(t){for(var e=this.values,n={},i=0;i<t.length;i++)n[t.charAt(i)]=e[t][i];return 1!==e.alpha&&(n.a=e.alpha),n},y.prototype.setValues=function(t,e){var n,i,a=this.values,r=this.spaces,o=this.maxes,l=1;if(this.valid=!0,"alpha"===t)l=e;else if(e.length)a[t]=e.slice(0,t.length),l=e[t.length];else if(void 0!==e[t.charAt(0)]){for(n=0;n<t.length;n++)a[t][n]=e[t.charAt(n)];l=e.a}else if(void 0!==e[r[t][0]]){var u=r[t];for(n=0;n<t.length;n++)a[t][n]=e[u[n]];l=e.alpha}if(a.alpha=Math.max(0,Math.min(1,void 0===l?a.alpha:l)),"alpha"===t)return!1;for(n=0;n<t.length;n++)i=Math.max(0,Math.min(o[t][n],a[t][n])),a[t][n]=Math.round(i);for(var d in r)d!==t&&(a[d]=s[t][d](a[t]));return!0},y.prototype.setSpace=function(t,e){var n=e[0];return void 0===n?this.getValues(t):("number"==typeof n&&(n=Array.prototype.slice.call(e)),this.setValues(t,n),this)},y.prototype.setChannel=function(t,e,n){var i=this.values[t];return void 0===n?i[e]:n===i[e]?this:(i[e]=n,this.setValues(t,i),this)},"undefined"!=typeof window&&(window.Color=y);var _=y;function k(t){return-1===["__proto__","prototype","constructor"].indexOf(t)}var w,M={noop:function(){},uid:(w=0,function(){return w++}),isNullOrUndef:function(t){return null==t},isArray:function(t){if(Array.isArray&&Array.isArray(t))return!0;var e=Object.prototype.toString.call(t);return"[object"===e.substr(0,7)&&"Array]"===e.substr(-6)},isObject:function(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)},isFinite:function(t){return("number"==typeof t||t instanceof Number)&&isFinite(t)},valueOrDefault:function(t,e){return void 0===t?e:t},valueAtIndexOrDefault:function(t,e,n){return M.valueOrDefault(M.isArray(t)?t[e]:t,n)},callback:function(t,e,n){if(t&&"function"==typeof t.call)return t.apply(n,e)},each:function(t,e,n,i){var a,r,o;if(M.isArray(t))if(r=t.length,i)for(a=r-1;a>=0;a--)e.call(n,t[a],a);else for(a=0;a<r;a++)e.call(n,t[a],a);else if(M.isObject(t))for(r=(o=Object.keys(t)).length,a=0;a<r;a++)e.call(n,t[o[a]],o[a])},arrayEquals:function(t,e){var n,i,a,r;if(!t||!e||t.length!==e.length)return!1;for(n=0,i=t.length;n<i;++n)if(a=t[n],r=e[n],a instanceof Array&&r instanceof Array){if(!M.arrayEquals(a,r))return!1}else if(a!==r)return!1;return!0},clone:function(t){if(M.isArray(t))return t.map(M.clone);if(M.isObject(t)){for(var e=Object.create(t),n=Object.keys(t),i=n.length,a=0;a<i;++a)e[n[a]]=M.clone(t[n[a]]);return e}return t},_merger:function(t,e,n,i){if(k(t)){var a=e[t],r=n[t];M.isObject(a)&&M.isObject(r)?M.merge(a,r,i):e[t]=M.clone(r)}},_mergerIf:function(t,e,n){if(k(t)){var i=e[t],a=n[t];M.isObject(i)&&M.isObject(a)?M.mergeIf(i,a):e.hasOwnProperty(t)||(e[t]=M.clone(a))}},merge:function(t,e,n){var i,a,r,o,s,l=M.isArray(e)?e:[e],u=l.length;if(!M.isObject(t))return t;for(i=(n=n||{}).merger||M._merger,a=0;a<u;++a)if(e=l[a],M.isObject(e))for(s=0,o=(r=Object.keys(e)).length;s<o;++s)i(r[s],t,e,n);return t},mergeIf:function(t,e){return M.merge(t,e,{merger:M._mergerIf})},extend:Object.assign||function(t){return M.merge(t,[].slice.call(arguments,1),{merger:function(t,e,n){e[t]=n[t]}})},inherits:function(t){var e=this,n=t&&t.hasOwnProperty("constructor")?t.constructor:function(){return e.apply(this,arguments)},i=function(){this.constructor=n};return i.prototype=e.prototype,n.prototype=new i,n.extend=M.inherits,t&&M.extend(n.prototype,t),n.__super__=e.prototype,n},_deprecated:function(t,e,n,i){void 0!==e&&console.warn(t+': "'+n+'" is deprecated. Please use "'+i+'" instead')}},S=M;M.callCallback=M.callback,M.indexOf=function(t,e,n){return Array.prototype.indexOf.call(t,e,n)},M.getValueOrDefault=M.valueOrDefault,M.getValueAtIndexOrDefault=M.valueAtIndexOrDefault;var C={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return-t*(t-2)},easeInOutQuad:function(t){return(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1)},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return(t-=1)*t*t+1},easeInOutCubic:function(t){return(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return-((t-=1)*t*t*t-1)},easeInOutQuart:function(t){return(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return(t-=1)*t*t*t*t+1},easeInOutQuint:function(t){return(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},easeInSine:function(t){return 1-Math.cos(t*(Math.PI/2))},easeOutSine:function(t){return Math.sin(t*(Math.PI/2))},easeInOutSine:function(t){return-.5*(Math.cos(Math.PI*t)-1)},easeInExpo:function(t){return 0===t?0:Math.pow(2,10*(t-1))},easeOutExpo:function(t){return 1===t?1:1-Math.pow(2,-10*t)},easeInOutExpo:function(t){return 0===t?0:1===t?1:(t/=.5)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*--t))},easeInCirc:function(t){return t>=1?t:-(Math.sqrt(1-t*t)-1)},easeOutCirc:function(t){return Math.sqrt(1-(t-=1)*t)},easeInOutCirc:function(t){return(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},easeInElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===t?1:(n||(n=.3),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),-i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n))},easeOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===t?1:(n||(n=.3),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),i*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/n)+1)},easeInOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:2==(t/=.5)?1:(n||(n=.45),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),t<1?i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*-.5:i*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*.5+1)},easeInBack:function(t){var e=1.70158;return t*t*((e+1)*t-e)},easeOutBack:function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack:function(t){var e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:function(t){return 1-C.easeOutBounce(1-t)},easeOutBounce:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},easeInOutBounce:function(t){return t<.5?.5*C.easeInBounce(2*t):.5*C.easeOutBounce(2*t-1)+.5}},P={effects:C};S.easingEffects=C;var A=Math.PI,D=A/180,T=2*A,I=A/2,F=A/4,O=2*A/3,L={clear:function(t){t.ctx.clearRect(0,0,t.width,t.height)},roundedRect:function(t,e,n,i,a,r){if(r){var o=Math.min(r,a/2,i/2),s=e+o,l=n+o,u=e+i-o,d=n+a-o;t.moveTo(e,l),s<u&&l<d?(t.arc(s,l,o,-A,-I),t.arc(u,l,o,-I,0),t.arc(u,d,o,0,I),t.arc(s,d,o,I,A)):s<u?(t.moveTo(s,n),t.arc(u,l,o,-I,I),t.arc(s,l,o,I,A+I)):l<d?(t.arc(s,l,o,-A,0),t.arc(s,d,o,0,A)):t.arc(s,l,o,-A,A),t.closePath(),t.moveTo(e,n)}else t.rect(e,n,i,a)},drawPoint:function(t,e,n,i,a,r){var o,s,l,u,d,h=(r||0)*D;if(e&&"object"==typeof e&&("[object HTMLImageElement]"===(o=e.toString())||"[object HTMLCanvasElement]"===o))return t.save(),t.translate(i,a),t.rotate(h),t.drawImage(e,-e.width/2,-e.height/2,e.width,e.height),void t.restore();if(!(isNaN(n)||n<=0)){switch(t.beginPath(),e){default:t.arc(i,a,n,0,T),t.closePath();break;case"triangle":t.moveTo(i+Math.sin(h)*n,a-Math.cos(h)*n),h+=O,t.lineTo(i+Math.sin(h)*n,a-Math.cos(h)*n),h+=O,t.lineTo(i+Math.sin(h)*n,a-Math.cos(h)*n),t.closePath();break;case"rectRounded":u=n-(d=.516*n),s=Math.cos(h+F)*u,l=Math.sin(h+F)*u,t.arc(i-s,a-l,d,h-A,h-I),t.arc(i+l,a-s,d,h-I,h),t.arc(i+s,a+l,d,h,h+I),t.arc(i-l,a+s,d,h+I,h+A),t.closePath();break;case"rect":if(!r){u=Math.SQRT1_2*n,t.rect(i-u,a-u,2*u,2*u);break}h+=F;case"rectRot":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+l,a-s),t.lineTo(i+s,a+l),t.lineTo(i-l,a+s),t.closePath();break;case"crossRot":h+=F;case"cross":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s);break;case"star":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s),h+=F,s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s);break;case"line":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l);break;case"dash":t.moveTo(i,a),t.lineTo(i+Math.cos(h)*n,a+Math.sin(h)*n)}t.fill(),t.stroke()}},_isPointInArea:function(t,e){return t.x>e.left-1e-6&&t.x<e.right+1e-6&&t.y>e.top-1e-6&&t.y<e.bottom+1e-6},clipArea:function(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()},unclipArea:function(t){t.restore()},lineTo:function(t,e,n,i){var a=n.steppedLine;if(a){if("middle"===a){var r=(e.x+n.x)/2;t.lineTo(r,i?n.y:e.y),t.lineTo(r,i?e.y:n.y)}else"after"===a&&!i||"after"!==a&&i?t.lineTo(e.x,n.y):t.lineTo(n.x,e.y);t.lineTo(n.x,n.y)}else n.tension?t.bezierCurveTo(i?e.controlPointPreviousX:e.controlPointNextX,i?e.controlPointPreviousY:e.controlPointNextY,i?n.controlPointNextX:n.controlPointPreviousX,i?n.controlPointNextY:n.controlPointPreviousY,n.x,n.y):t.lineTo(n.x,n.y)}},R=L;S.clear=L.clear,S.drawRoundedRectangle=function(t){t.beginPath(),L.roundedRect.apply(L,arguments)};var z={_set:function(t,e){return S.merge(this[t]||(this[t]={}),e)}};z._set("global",{defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:"normal",defaultLineHeight:1.2,showLines:!0});var N=z,B=S.valueOrDefault;var E={toLineHeight:function(t,e){var n=(""+t).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);if(!n||"normal"===n[1])return 1.2*e;switch(t=+n[2],n[3]){case"px":return t;case"%":t/=100}return e*t},toPadding:function(t){var e,n,i,a;return S.isObject(t)?(e=+t.top||0,n=+t.right||0,i=+t.bottom||0,a=+t.left||0):e=n=i=a=+t||0,{top:e,right:n,bottom:i,left:a,height:e+i,width:a+n}},_parseFont:function(t){var e=N.global,n=B(t.fontSize,e.defaultFontSize),i={family:B(t.fontFamily,e.defaultFontFamily),lineHeight:S.options.toLineHeight(B(t.lineHeight,e.defaultLineHeight),n),size:n,style:B(t.fontStyle,e.defaultFontStyle),weight:null,string:""};return i.string=function(t){return!t||S.isNullOrUndef(t.size)||S.isNullOrUndef(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}(i),i},resolve:function(t,e,n,i){var a,r,o,s=!0;for(a=0,r=t.length;a<r;++a)if(void 0!==(o=t[a])&&(void 0!==e&&"function"==typeof o&&(o=o(e),s=!1),void 0!==n&&S.isArray(o)&&(o=o[n],s=!1),void 0!==o))return i&&!s&&(i.cacheable=!1),o}},W={_factorize:function(t){var e,n=[],i=Math.sqrt(t);for(e=1;e<i;e++)t%e==0&&(n.push(e),n.push(t/e));return i===(0|i)&&n.push(i),n.sort((function(t,e){return t-e})).pop(),n},log10:Math.log10||function(t){var e=Math.log(t)*Math.LOG10E,n=Math.round(e);return t===Math.pow(10,n)?n:e}},V=W;S.log10=W.log10;var H=S,j=P,q=R,U=E,Y=V,G={getRtlAdapter:function(t,e,n){return t?function(t,e){return{x:function(n){return t+t+e-n},setWidth:function(t){e=t},textAlign:function(t){return"center"===t?t:"right"===t?"left":"right"},xPlus:function(t,e){return t-e},leftForLtr:function(t,e){return t-e}}}(e,n):{x:function(t){return t},setWidth:function(t){},textAlign:function(t){return t},xPlus:function(t,e){return t+e},leftForLtr:function(t,e){return t}}},overrideTextDirection:function(t,e){var n,i;"ltr"!==e&&"rtl"!==e||(i=[(n=t.canvas.style).getPropertyValue("direction"),n.getPropertyPriority("direction")],n.setProperty("direction",e,"important"),t.prevTextDirection=i)},restoreTextDirection:function(t){var e=t.prevTextDirection;void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}};H.easing=j,H.canvas=q,H.options=U,H.math=Y,H.rtl=G;var X=function(t){H.extend(this,t),this.initialize.apply(this,arguments)};H.extend(X.prototype,{_type:void 0,initialize:function(){this.hidden=!1},pivot:function(){var t=this;return t._view||(t._view=H.extend({},t._model)),t._start={},t},transition:function(t){var e=this,n=e._model,i=e._start,a=e._view;return n&&1!==t?(a||(a=e._view={}),i||(i=e._start={}),function(t,e,n,i){var a,r,o,s,l,u,d,h,c,f=Object.keys(n);for(a=0,r=f.length;a<r;++a)if(u=n[o=f[a]],e.hasOwnProperty(o)||(e[o]=u),(s=e[o])!==u&&"_"!==o[0]){if(t.hasOwnProperty(o)||(t[o]=s),(d=typeof u)===typeof(l=t[o]))if("string"===d){if((h=_(l)).valid&&(c=_(u)).valid){e[o]=c.mix(h,i).rgbString();continue}}else if(H.isFinite(l)&&H.isFinite(u)){e[o]=l+(u-l)*i;continue}e[o]=u}}(i,a,n,t),e):(e._view=H.extend({},n),e._start=null,e)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return H.isNumber(this._model.x)&&H.isNumber(this._model.y)}}),X.extend=H.inherits;var K=X,Z=K.extend({chart:null,currentStep:0,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),$=Z;Object.defineProperty(Z.prototype,"animationObject",{get:function(){return this}}),Object.defineProperty(Z.prototype,"chartInstance",{get:function(){return this.chart},set:function(t){this.chart=t}}),N._set("global",{animation:{duration:1e3,easing:"easeOutQuart",onProgress:H.noop,onComplete:H.noop}});var J={animations:[],request:null,addAnimation:function(t,e,n,i){var a,r,o=this.animations;for(e.chart=t,e.startTime=Date.now(),e.duration=n,i||(t.animating=!0),a=0,r=o.length;a<r;++a)if(o[a].chart===t)return void(o[a]=e);o.push(e),1===o.length&&this.requestAnimationFrame()},cancelAnimation:function(t){var e=H.findIndex(this.animations,(function(e){return e.chart===t}));-1!==e&&(this.animations.splice(e,1),t.animating=!1)},requestAnimationFrame:function(){var t=this;null===t.request&&(t.request=H.requestAnimFrame.call(window,(function(){t.request=null,t.startDigest()})))},startDigest:function(){this.advance(),this.animations.length>0&&this.requestAnimationFrame()},advance:function(){for(var t,e,n,i,a=this.animations,r=0;r<a.length;)e=(t=a[r]).chart,n=t.numSteps,i=Math.floor((Date.now()-t.startTime)/t.duration*n)+1,t.currentStep=Math.min(i,n),H.callback(t.render,[e,t],e),H.callback(t.onAnimationProgress,[t],e),t.currentStep>=n?(H.callback(t.onAnimationComplete,[t],e),e.animating=!1,a.splice(r,1)):++r}},Q=H.options.resolve,tt=["push","pop","shift","splice","unshift"];function et(t,e){var n=t._chartjs;if(n){var i=n.listeners,a=i.indexOf(e);-1!==a&&i.splice(a,1),i.length>0||(tt.forEach((function(e){delete t[e]})),delete t._chartjs)}}var nt=function(t,e){this.initialize(t,e)};H.extend(nt.prototype,{datasetElementType:null,dataElementType:null,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth"],_dataElementOptions:["backgroundColor","borderColor","borderWidth","pointStyle"],initialize:function(t,e){var n=this;n.chart=t,n.index=e,n.linkScales(),n.addElements(),n._type=n.getMeta().type},updateIndex:function(t){this.index=t},linkScales:function(){var t=this.getMeta(),e=this.chart,n=e.scales,i=this.getDataset(),a=e.options.scales;null!==t.xAxisID&&t.xAxisID in n&&!i.xAxisID||(t.xAxisID=i.xAxisID||a.xAxes[0].id),null!==t.yAxisID&&t.yAxisID in n&&!i.yAxisID||(t.yAxisID=i.yAxisID||a.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(t){return this.chart.scales[t]},_getValueScaleId:function(){return this.getMeta().yAxisID},_getIndexScaleId:function(){return this.getMeta().xAxisID},_getValueScale:function(){return this.getScaleForId(this._getValueScaleId())},_getIndexScale:function(){return this.getScaleForId(this._getIndexScaleId())},reset:function(){this._update(!0)},destroy:function(){this._data&&et(this._data,this)},createMetaDataset:function(){var t=this.datasetElementType;return t&&new t({_chart:this.chart,_datasetIndex:this.index})},createMetaData:function(t){var e=this.dataElementType;return e&&new e({_chart:this.chart,_datasetIndex:this.index,_index:t})},addElements:function(){var t,e,n=this.getMeta(),i=this.getDataset().data||[],a=n.data;for(t=0,e=i.length;t<e;++t)a[t]=a[t]||this.createMetaData(t);n.dataset=n.dataset||this.createMetaDataset()},addElementAndReset:function(t){var e=this.createMetaData(t);this.getMeta().data.splice(t,0,e),this.updateElement(e,t,!0)},buildOrUpdateElements:function(){var t,e,n=this,i=n.getDataset(),a=i.data||(i.data=[]);n._data!==a&&(n._data&&et(n._data,n),a&&Object.isExtensible(a)&&(e=n,(t=a)._chartjs?t._chartjs.listeners.push(e):(Object.defineProperty(t,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),tt.forEach((function(e){var n="onData"+e.charAt(0).toUpperCase()+e.slice(1),i=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:function(){var e=Array.prototype.slice.call(arguments),a=i.apply(this,e);return H.each(t._chartjs.listeners,(function(t){"function"==typeof t[n]&&t[n].apply(t,e)})),a}})})))),n._data=a),n.resyncElements()},_configure:function(){this._config=H.merge(Object.create(null),[this.chart.options.datasets[this._type],this.getDataset()],{merger:function(t,e,n){"_meta"!==t&&"data"!==t&&H._merger(t,e,n)}})},_update:function(t){this._configure(),this._cachedDataOpts=null,this.update(t)},update:H.noop,transition:function(t){for(var e=this.getMeta(),n=e.data||[],i=n.length,a=0;a<i;++a)n[a].transition(t);e.dataset&&e.dataset.transition(t)},draw:function(){var t=this.getMeta(),e=t.data||[],n=e.length,i=0;for(t.dataset&&t.dataset.draw();i<n;++i)e[i].draw()},getStyle:function(t){var e,n=this.getMeta(),i=n.dataset;return this._configure(),i&&void 0===t?e=this._resolveDatasetElementOptions(i||{}):(t=t||0,e=this._resolveDataElementOptions(n.data[t]||{},t)),!1!==e.fill&&null!==e.fill||(e.backgroundColor=e.borderColor),e},_resolveDatasetElementOptions:function(t,e){var n,i,a,r,o=this,s=o.chart,l=o._config,u=t.custom||{},d=s.options.elements[o.datasetElementType.prototype._type]||{},h=o._datasetElementOptions,c={},f={chart:s,dataset:o.getDataset(),datasetIndex:o.index,hover:e};for(n=0,i=h.length;n<i;++n)a=h[n],r=e?"hover"+a.charAt(0).toUpperCase()+a.slice(1):a,c[a]=Q([u[r],l[r],d[r]],f);return c},_resolveDataElementOptions:function(t,e){var n=this,i=t&&t.custom,a=n._cachedDataOpts;if(a&&!i)return a;var r,o,s,l,u=n.chart,d=n._config,h=u.options.elements[n.dataElementType.prototype._type]||{},c=n._dataElementOptions,f={},g={chart:u,dataIndex:e,dataset:n.getDataset(),datasetIndex:n.index},p={cacheable:!i};if(i=i||{},H.isArray(c))for(o=0,s=c.length;o<s;++o)f[l=c[o]]=Q([i[l],d[l],h[l]],g,e,p);else for(o=0,s=(r=Object.keys(c)).length;o<s;++o)f[l=r[o]]=Q([i[l],d[c[l]],d[l],h[l]],g,e,p);return p.cacheable&&(n._cachedDataOpts=Object.freeze(f)),f},removeHoverStyle:function(t){H.merge(t._model,t.$previousStyle||{}),delete t.$previousStyle},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],n=t._index,i=t.custom||{},a=t._model,r=H.getHoverColor;t.$previousStyle={backgroundColor:a.backgroundColor,borderColor:a.borderColor,borderWidth:a.borderWidth},a.backgroundColor=Q([i.hoverBackgroundColor,e.hoverBackgroundColor,r(a.backgroundColor)],void 0,n),a.borderColor=Q([i.hoverBorderColor,e.hoverBorderColor,r(a.borderColor)],void 0,n),a.borderWidth=Q([i.hoverBorderWidth,e.hoverBorderWidth,a.borderWidth],void 0,n)},_removeDatasetHoverStyle:function(){var t=this.getMeta().dataset;t&&this.removeHoverStyle(t)},_setDatasetHoverStyle:function(){var t,e,n,i,a,r,o=this.getMeta().dataset,s={};if(o){for(r=o._model,a=this._resolveDatasetElementOptions(o,!0),t=0,e=(i=Object.keys(a)).length;t<e;++t)s[n=i[t]]=r[n],r[n]=a[n];o.$previousStyle=s}},resyncElements:function(){var t=this.getMeta(),e=this.getDataset().data,n=t.data.length,i=e.length;i<n?t.data.splice(i,n-i):i>n&&this.insertElements(n,i-n)},insertElements:function(t,e){for(var n=0;n<e;++n)this.addElementAndReset(t+n)},onDataPush:function(){var t=arguments.length;this.insertElements(this.getDataset().data.length-t,t)},onDataPop:function(){this.getMeta().data.pop()},onDataShift:function(){this.getMeta().data.shift()},onDataSplice:function(t,e){this.getMeta().data.splice(t,e),this.insertElements(t,arguments.length-2)},onDataUnshift:function(){this.insertElements(0,arguments.length)}}),nt.extend=H.inherits;var it=nt,at=2*Math.PI;function rt(t,e){var n=e.startAngle,i=e.endAngle,a=e.pixelMargin,r=a/e.outerRadius,o=e.x,s=e.y;t.beginPath(),t.arc(o,s,e.outerRadius,n-r,i+r),e.innerRadius>a?(r=a/e.innerRadius,t.arc(o,s,e.innerRadius-a,i+r,n-r,!0)):t.arc(o,s,a,i+Math.PI/2,n-Math.PI/2),t.closePath(),t.clip()}function ot(t,e,n){var i="inner"===e.borderAlign;i?(t.lineWidth=2*e.borderWidth,t.lineJoin="round"):(t.lineWidth=e.borderWidth,t.lineJoin="bevel"),n.fullCircles&&function(t,e,n,i){var a,r=n.endAngle;for(i&&(n.endAngle=n.startAngle+at,rt(t,n),n.endAngle=r,n.endAngle===n.startAngle&&n.fullCircles&&(n.endAngle+=at,n.fullCircles--)),t.beginPath(),t.arc(n.x,n.y,n.innerRadius,n.startAngle+at,n.startAngle,!0),a=0;a<n.fullCircles;++a)t.stroke();for(t.beginPath(),t.arc(n.x,n.y,e.outerRadius,n.startAngle,n.startAngle+at),a=0;a<n.fullCircles;++a)t.stroke()}(t,e,n,i),i&&rt(t,n),t.beginPath(),t.arc(n.x,n.y,e.outerRadius,n.startAngle,n.endAngle),t.arc(n.x,n.y,n.innerRadius,n.endAngle,n.startAngle,!0),t.closePath(),t.stroke()}N._set("global",{elements:{arc:{backgroundColor:N.global.defaultColor,borderColor:"#fff",borderWidth:2,borderAlign:"center"}}});var st=K.extend({_type:"arc",inLabelRange:function(t){var e=this._view;return!!e&&Math.pow(t-e.x,2)<Math.pow(e.radius+e.hoverRadius,2)},inRange:function(t,e){var n=this._view;if(n){for(var i=H.getAngleFromPoint(n,{x:t,y:e}),a=i.angle,r=i.distance,o=n.startAngle,s=n.endAngle;s<o;)s+=at;for(;a>s;)a-=at;for(;a<o;)a+=at;var l=a>=o&&a<=s,u=r>=n.innerRadius&&r<=n.outerRadius;return l&&u}return!1},getCenterPoint:function(){var t=this._view,e=(t.startAngle+t.endAngle)/2,n=(t.innerRadius+t.outerRadius)/2;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},getArea:function(){var t=this._view;return Math.PI*((t.endAngle-t.startAngle)/(2*Math.PI))*(Math.pow(t.outerRadius,2)-Math.pow(t.innerRadius,2))},tooltipPosition:function(){var t=this._view,e=t.startAngle+(t.endAngle-t.startAngle)/2,n=(t.outerRadius-t.innerRadius)/2+t.innerRadius;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},draw:function(){var t,e=this._chart.ctx,n=this._view,i="inner"===n.borderAlign?.33:0,a={x:n.x,y:n.y,innerRadius:n.innerRadius,outerRadius:Math.max(n.outerRadius-i,0),pixelMargin:i,startAngle:n.startAngle,endAngle:n.endAngle,fullCircles:Math.floor(n.circumference/at)};if(e.save(),e.fillStyle=n.backgroundColor,e.strokeStyle=n.borderColor,a.fullCircles){for(a.endAngle=a.startAngle+at,e.beginPath(),e.arc(a.x,a.y,a.outerRadius,a.startAngle,a.endAngle),e.arc(a.x,a.y,a.innerRadius,a.endAngle,a.startAngle,!0),e.closePath(),t=0;t<a.fullCircles;++t)e.fill();a.endAngle=a.startAngle+n.circumference%at}e.beginPath(),e.arc(a.x,a.y,a.outerRadius,a.startAngle,a.endAngle),e.arc(a.x,a.y,a.innerRadius,a.endAngle,a.startAngle,!0),e.closePath(),e.fill(),n.borderWidth&&ot(e,n,a),e.restore()}}),lt=H.valueOrDefault,ut=N.global.defaultColor;N._set("global",{elements:{line:{tension:.4,backgroundColor:ut,borderWidth:3,borderColor:ut,borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",capBezierPoints:!0,fill:!0}}});var dt=K.extend({_type:"line",draw:function(){var t,e,n,i=this,a=i._view,r=i._chart.ctx,o=a.spanGaps,s=i._children.slice(),l=N.global,u=l.elements.line,d=-1,h=i._loop;if(s.length){if(i._loop){for(t=0;t<s.length;++t)if(e=H.previousItem(s,t),!s[t]._view.skip&&e._view.skip){s=s.slice(t).concat(s.slice(0,t)),h=o;break}h&&s.push(s[0])}for(r.save(),r.lineCap=a.borderCapStyle||u.borderCapStyle,r.setLineDash&&r.setLineDash(a.borderDash||u.borderDash),r.lineDashOffset=lt(a.borderDashOffset,u.borderDashOffset),r.lineJoin=a.borderJoinStyle||u.borderJoinStyle,r.lineWidth=lt(a.borderWidth,u.borderWidth),r.strokeStyle=a.borderColor||l.defaultColor,r.beginPath(),(n=s[0]._view).skip||(r.moveTo(n.x,n.y),d=0),t=1;t<s.length;++t)n=s[t]._view,e=-1===d?H.previousItem(s,t):s[d],n.skip||(d!==t-1&&!o||-1===d?r.moveTo(n.x,n.y):H.canvas.lineTo(r,e._view,n),d=t);h&&r.closePath(),r.stroke(),r.restore()}}}),ht=H.valueOrDefault,ct=N.global.defaultColor;function ft(t){var e=this._view;return!!e&&Math.abs(t-e.x)<e.radius+e.hitRadius}N._set("global",{elements:{point:{radius:3,pointStyle:"circle",backgroundColor:ct,borderColor:ct,borderWidth:1,hitRadius:1,hoverRadius:4,hoverBorderWidth:1}}});var gt=K.extend({_type:"point",inRange:function(t,e){var n=this._view;return!!n&&Math.pow(t-n.x,2)+Math.pow(e-n.y,2)<Math.pow(n.hitRadius+n.radius,2)},inLabelRange:ft,inXRange:ft,inYRange:function(t){var e=this._view;return!!e&&Math.abs(t-e.y)<e.radius+e.hitRadius},getCenterPoint:function(){var t=this._view;return{x:t.x,y:t.y}},getArea:function(){return Math.PI*Math.pow(this._view.radius,2)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y,padding:t.radius+t.borderWidth}},draw:function(t){var e=this._view,n=this._chart.ctx,i=e.pointStyle,a=e.rotation,r=e.radius,o=e.x,s=e.y,l=N.global,u=l.defaultColor;e.skip||(void 0===t||H.canvas._isPointInArea(e,t))&&(n.strokeStyle=e.borderColor||u,n.lineWidth=ht(e.borderWidth,l.elements.point.borderWidth),n.fillStyle=e.backgroundColor||u,H.canvas.drawPoint(n,i,r,o,s,a))}}),pt=N.global.defaultColor;function mt(t){return t&&void 0!==t.width}function vt(t){var e,n,i,a,r;return mt(t)?(r=t.width/2,e=t.x-r,n=t.x+r,i=Math.min(t.y,t.base),a=Math.max(t.y,t.base)):(r=t.height/2,e=Math.min(t.x,t.base),n=Math.max(t.x,t.base),i=t.y-r,a=t.y+r),{left:e,top:i,right:n,bottom:a}}function bt(t,e,n){return t===e?n:t===n?e:t}function xt(t,e,n){var i,a,r,o,s=t.borderWidth,l=function(t){var e=t.borderSkipped,n={};return e?(t.horizontal?t.base>t.x&&(e=bt(e,"left","right")):t.base<t.y&&(e=bt(e,"bottom","top")),n[e]=!0,n):n}(t);return H.isObject(s)?(i=+s.top||0,a=+s.right||0,r=+s.bottom||0,o=+s.left||0):i=a=r=o=+s||0,{t:l.top||i<0?0:i>n?n:i,r:l.right||a<0?0:a>e?e:a,b:l.bottom||r<0?0:r>n?n:r,l:l.left||o<0?0:o>e?e:o}}function yt(t,e,n){var i=null===e,a=null===n,r=!(!t||i&&a)&&vt(t);return r&&(i||e>=r.left&&e<=r.right)&&(a||n>=r.top&&n<=r.bottom)}N._set("global",{elements:{rectangle:{backgroundColor:pt,borderColor:pt,borderSkipped:"bottom",borderWidth:0}}});var _t=K.extend({_type:"rectangle",draw:function(){var t=this._chart.ctx,e=this._view,n=function(t){var e=vt(t),n=e.right-e.left,i=e.bottom-e.top,a=xt(t,n/2,i/2);return{outer:{x:e.left,y:e.top,w:n,h:i},inner:{x:e.left+a.l,y:e.top+a.t,w:n-a.l-a.r,h:i-a.t-a.b}}}(e),i=n.outer,a=n.inner;t.fillStyle=e.backgroundColor,t.fillRect(i.x,i.y,i.w,i.h),i.w===a.w&&i.h===a.h||(t.save(),t.beginPath(),t.rect(i.x,i.y,i.w,i.h),t.clip(),t.fillStyle=e.borderColor,t.rect(a.x,a.y,a.w,a.h),t.fill("evenodd"),t.restore())},height:function(){var t=this._view;return t.base-t.y},inRange:function(t,e){return yt(this._view,t,e)},inLabelRange:function(t,e){var n=this._view;return mt(n)?yt(n,t,null):yt(n,null,e)},inXRange:function(t){return yt(this._view,t,null)},inYRange:function(t){return yt(this._view,null,t)},getCenterPoint:function(){var t,e,n=this._view;return mt(n)?(t=n.x,e=(n.y+n.base)/2):(t=(n.x+n.base)/2,e=n.y),{x:t,y:e}},getArea:function(){var t=this._view;return mt(t)?t.width*Math.abs(t.y-t.base):t.height*Math.abs(t.x-t.base)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y}}}),kt={},wt=st,Mt=dt,St=gt,Ct=_t;kt.Arc=wt,kt.Line=Mt,kt.Point=St,kt.Rectangle=Ct;var Pt=H._deprecated,At=H.valueOrDefault;function Dt(t,e,n){var i,a,r=n.barThickness,o=e.stackCount,s=e.pixels[t],l=H.isNullOrUndef(r)?function(t,e){var n,i,a,r,o=t._length;for(a=1,r=e.length;a<r;++a)o=Math.min(o,Math.abs(e[a]-e[a-1]));for(a=0,r=t.getTicks().length;a<r;++a)i=t.getPixelForTick(a),o=a>0?Math.min(o,Math.abs(i-n)):o,n=i;return o}(e.scale,e.pixels):-1;return H.isNullOrUndef(r)?(i=l*n.categoryPercentage,a=n.barPercentage):(i=r*o,a=1),{chunk:i/o,ratio:a,start:s-i/2}}N._set("bar",{hover:{mode:"label"},scales:{xAxes:[{type:"category",offset:!0,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}}),N._set("global",{datasets:{bar:{categoryPercentage:.8,barPercentage:.9}}});var Tt=it.extend({dataElementType:kt.Rectangle,_dataElementOptions:["backgroundColor","borderColor","borderSkipped","borderWidth","barPercentage","barThickness","categoryPercentage","maxBarThickness","minBarLength"],initialize:function(){var t,e,n=this;it.prototype.initialize.apply(n,arguments),(t=n.getMeta()).stack=n.getDataset().stack,t.bar=!0,e=n._getIndexScale().options,Pt("bar chart",e.barPercentage,"scales.[x/y]Axes.barPercentage","dataset.barPercentage"),Pt("bar chart",e.barThickness,"scales.[x/y]Axes.barThickness","dataset.barThickness"),Pt("bar chart",e.categoryPercentage,"scales.[x/y]Axes.categoryPercentage","dataset.categoryPercentage"),Pt("bar chart",n._getValueScale().options.minBarLength,"scales.[x/y]Axes.minBarLength","dataset.minBarLength"),Pt("bar chart",e.maxBarThickness,"scales.[x/y]Axes.maxBarThickness","dataset.maxBarThickness")},update:function(t){var e,n,i=this.getMeta().data;for(this._ruler=this.getRuler(),e=0,n=i.length;e<n;++e)this.updateElement(i[e],e,t)},updateElement:function(t,e,n){var i=this,a=i.getMeta(),r=i.getDataset(),o=i._resolveDataElementOptions(t,e);t._xScale=i.getScaleForId(a.xAxisID),t._yScale=i.getScaleForId(a.yAxisID),t._datasetIndex=i.index,t._index=e,t._model={backgroundColor:o.backgroundColor,borderColor:o.borderColor,borderSkipped:o.borderSkipped,borderWidth:o.borderWidth,datasetLabel:r.label,label:i.chart.data.labels[e]},H.isArray(r.data[e])&&(t._model.borderSkipped=null),i._updateElementGeometry(t,e,n,o),t.pivot()},_updateElementGeometry:function(t,e,n,i){var a=this,r=t._model,o=a._getValueScale(),s=o.getBasePixel(),l=o.isHorizontal(),u=a._ruler||a.getRuler(),d=a.calculateBarValuePixels(a.index,e,i),h=a.calculateBarIndexPixels(a.index,e,u,i);r.horizontal=l,r.base=n?s:d.base,r.x=l?n?s:d.head:h.center,r.y=l?h.center:n?s:d.head,r.height=l?h.size:void 0,r.width=l?void 0:h.size},_getStacks:function(t){var e,n,i=this._getIndexScale(),a=i._getMatchingVisibleMetas(this._type),r=i.options.stacked,o=a.length,s=[];for(e=0;e<o&&(n=a[e],(!1===r||-1===s.indexOf(n.stack)||void 0===r&&void 0===n.stack)&&s.push(n.stack),n.index!==t);++e);return s},getStackCount:function(){return this._getStacks().length},getStackIndex:function(t,e){var n=this._getStacks(t),i=void 0!==e?n.indexOf(e):-1;return-1===i?n.length-1:i},getRuler:function(){var t,e,n=this._getIndexScale(),i=[];for(t=0,e=this.getMeta().data.length;t<e;++t)i.push(n.getPixelForValue(null,t,this.index));return{pixels:i,start:n._startPixel,end:n._endPixel,stackCount:this.getStackCount(),scale:n}},calculateBarValuePixels:function(t,e,n){var i,a,r,o,s,l,u,d=this.chart,h=this._getValueScale(),c=h.isHorizontal(),f=d.data.datasets,g=h._getMatchingVisibleMetas(this._type),p=h._parseValue(f[t].data[e]),m=n.minBarLength,v=h.options.stacked,b=this.getMeta().stack,x=void 0===p.start?0:p.max>=0&&p.min>=0?p.min:p.max,y=void 0===p.start?p.end:p.max>=0&&p.min>=0?p.max-p.min:p.min-p.max,_=g.length;if(v||void 0===v&&void 0!==b)for(i=0;i<_&&(a=g[i]).index!==t;++i)a.stack===b&&(r=void 0===(u=h._parseValue(f[a.index].data[e])).start?u.end:u.min>=0&&u.max>=0?u.max:u.min,(p.min<0&&r<0||p.max>=0&&r>0)&&(x+=r));return o=h.getPixelForValue(x),l=(s=h.getPixelForValue(x+y))-o,void 0!==m&&Math.abs(l)<m&&(l=m,s=y>=0&&!c||y<0&&c?o-m:o+m),{size:l,base:o,head:s,center:s+l/2}},calculateBarIndexPixels:function(t,e,n,i){var a="flex"===i.barThickness?function(t,e,n){var i,a=e.pixels,r=a[t],o=t>0?a[t-1]:null,s=t<a.length-1?a[t+1]:null,l=n.categoryPercentage;return null===o&&(o=r-(null===s?e.end-e.start:s-r)),null===s&&(s=r+r-o),i=r-(r-Math.min(o,s))/2*l,{chunk:Math.abs(s-o)/2*l/e.stackCount,ratio:n.barPercentage,start:i}}(e,n,i):Dt(e,n,i),r=this.getStackIndex(t,this.getMeta().stack),o=a.start+a.chunk*r+a.chunk/2,s=Math.min(At(i.maxBarThickness,1/0),a.chunk*a.ratio);return{base:o-s/2,head:o+s/2,center:o,size:s}},draw:function(){var t=this.chart,e=this._getValueScale(),n=this.getMeta().data,i=this.getDataset(),a=n.length,r=0;for(H.canvas.clipArea(t.ctx,t.chartArea);r<a;++r){var o=e._parseValue(i.data[r]);isNaN(o.min)||isNaN(o.max)||n[r].draw()}H.canvas.unclipArea(t.ctx)},_resolveDataElementOptions:function(){var t=this,e=H.extend({},it.prototype._resolveDataElementOptions.apply(t,arguments)),n=t._getIndexScale().options,i=t._getValueScale().options;return e.barPercentage=At(n.barPercentage,e.barPercentage),e.barThickness=At(n.barThickness,e.barThickness),e.categoryPercentage=At(n.categoryPercentage,e.categoryPercentage),e.maxBarThickness=At(n.maxBarThickness,e.maxBarThickness),e.minBarLength=At(i.minBarLength,e.minBarLength),e}}),It=H.valueOrDefault,Ft=H.options.resolve;N._set("bubble",{hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-0"}],yAxes:[{type:"linear",position:"left",id:"y-axis-0"}]},tooltips:{callbacks:{title:function(){return""},label:function(t,e){var n=e.datasets[t.datasetIndex].label||"",i=e.datasets[t.datasetIndex].data[t.index];return n+": ("+t.xLabel+", "+t.yLabel+", "+i.r+")"}}}});var Ot=it.extend({dataElementType:kt.Point,_dataElementOptions:["backgroundColor","borderColor","borderWidth","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","hoverRadius","hitRadius","pointStyle","rotation"],update:function(t){var e=this,n=e.getMeta().data;H.each(n,(function(n,i){e.updateElement(n,i,t)}))},updateElement:function(t,e,n){var i=this,a=i.getMeta(),r=t.custom||{},o=i.getScaleForId(a.xAxisID),s=i.getScaleForId(a.yAxisID),l=i._resolveDataElementOptions(t,e),u=i.getDataset().data[e],d=i.index,h=n?o.getPixelForDecimal(.5):o.getPixelForValue("object"==typeof u?u:NaN,e,d),c=n?s.getBasePixel():s.getPixelForValue(u,e,d);t._xScale=o,t._yScale=s,t._options=l,t._datasetIndex=d,t._index=e,t._model={backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,hitRadius:l.hitRadius,pointStyle:l.pointStyle,rotation:l.rotation,radius:n?0:l.radius,skip:r.skip||isNaN(h)||isNaN(c),x:h,y:c},t.pivot()},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=It(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=It(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=It(n.hoverBorderWidth,n.borderWidth),e.radius=n.radius+n.hoverRadius},_resolveDataElementOptions:function(t,e){var n=this,i=n.chart,a=n.getDataset(),r=t.custom||{},o=a.data[e]||{},s=it.prototype._resolveDataElementOptions.apply(n,arguments),l={chart:i,dataIndex:e,dataset:a,datasetIndex:n.index};return n._cachedDataOpts===s&&(s=H.extend({},s)),s.radius=Ft([r.radius,o.r,n._config.radius,i.options.elements.point.radius],l,e),s}}),Lt=H.valueOrDefault,Rt=Math.PI,zt=2*Rt,Nt=Rt/2;N._set("doughnut",{animation:{animateRotate:!0,animateScale:!1},hover:{mode:"single"},legendCallback:function(t){var e,n,i,a=document.createElement("ul"),r=t.data,o=r.datasets,s=r.labels;if(a.setAttribute("class",t.id+"-legend"),o.length)for(e=0,n=o[0].data.length;e<n;++e)(i=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=o[0].backgroundColor[e],s[e]&&i.appendChild(document.createTextNode(s[e]));return a.outerHTML},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map((function(n,i){var a=t.getDatasetMeta(0),r=a.controller.getStyle(i);return{text:n,fillStyle:r.backgroundColor,strokeStyle:r.borderColor,lineWidth:r.borderWidth,hidden:isNaN(e.datasets[0].data[i])||a.data[i].hidden,index:i}})):[]}},onClick:function(t,e){var n,i,a,r=e.index,o=this.chart;for(n=0,i=(o.data.datasets||[]).length;n<i;++n)(a=o.getDatasetMeta(n)).data[r]&&(a.data[r].hidden=!a.data[r].hidden);o.update()}},cutoutPercentage:50,rotation:-Nt,circumference:zt,tooltips:{callbacks:{title:function(){return""},label:function(t,e){var n=e.labels[t.index],i=": "+e.datasets[t.datasetIndex].data[t.index];return H.isArray(n)?(n=n.slice())[0]+=i:n+=i,n}}}});var Bt=it.extend({dataElementType:kt.Arc,linkScales:H.noop,_dataElementOptions:["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"],getRingIndex:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&++e;return e},update:function(t){var e,n,i,a,r=this,o=r.chart,s=o.chartArea,l=o.options,u=1,d=1,h=0,c=0,f=r.getMeta(),g=f.data,p=l.cutoutPercentage/100||0,m=l.circumference,v=r._getRingWeight(r.index);if(m<zt){var b=l.rotation%zt,x=(b+=b>=Rt?-zt:b<-Rt?zt:0)+m,y=Math.cos(b),_=Math.sin(b),k=Math.cos(x),w=Math.sin(x),M=b<=0&&x>=0||x>=zt,S=b<=Nt&&x>=Nt||x>=zt+Nt,C=b<=-Nt&&x>=-Nt||x>=Rt+Nt,P=b===-Rt||x>=Rt?-1:Math.min(y,y*p,k,k*p),A=C?-1:Math.min(_,_*p,w,w*p),D=M?1:Math.max(y,y*p,k,k*p),T=S?1:Math.max(_,_*p,w,w*p);u=(D-P)/2,d=(T-A)/2,h=-(D+P)/2,c=-(T+A)/2}for(i=0,a=g.length;i<a;++i)g[i]._options=r._resolveDataElementOptions(g[i],i);for(o.borderWidth=r.getMaxBorderWidth(),e=(s.right-s.left-o.borderWidth)/u,n=(s.bottom-s.top-o.borderWidth)/d,o.outerRadius=Math.max(Math.min(e,n)/2,0),o.innerRadius=Math.max(o.outerRadius*p,0),o.radiusLength=(o.outerRadius-o.innerRadius)/(r._getVisibleDatasetWeightTotal()||1),o.offsetX=h*o.outerRadius,o.offsetY=c*o.outerRadius,f.total=r.calculateTotal(),r.outerRadius=o.outerRadius-o.radiusLength*r._getRingWeightOffset(r.index),r.innerRadius=Math.max(r.outerRadius-o.radiusLength*v,0),i=0,a=g.length;i<a;++i)r.updateElement(g[i],i,t)},updateElement:function(t,e,n){var i=this,a=i.chart,r=a.chartArea,o=a.options,s=o.animation,l=(r.left+r.right)/2,u=(r.top+r.bottom)/2,d=o.rotation,h=o.rotation,c=i.getDataset(),f=n&&s.animateRotate?0:t.hidden?0:i.calculateCircumference(c.data[e])*(o.circumference/zt),g=n&&s.animateScale?0:i.innerRadius,p=n&&s.animateScale?0:i.outerRadius,m=t._options||{};H.extend(t,{_datasetIndex:i.index,_index:e,_model:{backgroundColor:m.backgroundColor,borderColor:m.borderColor,borderWidth:m.borderWidth,borderAlign:m.borderAlign,x:l+a.offsetX,y:u+a.offsetY,startAngle:d,endAngle:h,circumference:f,outerRadius:p,innerRadius:g,label:H.valueAtIndexOrDefault(c.label,e,a.data.labels[e])}});var v=t._model;n&&s.animateRotate||(v.startAngle=0===e?o.rotation:i.getMeta().data[e-1]._model.endAngle,v.endAngle=v.startAngle+v.circumference),t.pivot()},calculateTotal:function(){var t,e=this.getDataset(),n=this.getMeta(),i=0;return H.each(n.data,(function(n,a){t=e.data[a],isNaN(t)||n.hidden||(i+=Math.abs(t))})),i},calculateCircumference:function(t){var e=this.getMeta().total;return e>0&&!isNaN(t)?zt*(Math.abs(t)/e):0},getMaxBorderWidth:function(t){var e,n,i,a,r,o,s,l,u=0,d=this.chart;if(!t)for(e=0,n=d.data.datasets.length;e<n;++e)if(d.isDatasetVisible(e)){t=(i=d.getDatasetMeta(e)).data,e!==this.index&&(r=i.controller);break}if(!t)return 0;for(e=0,n=t.length;e<n;++e)a=t[e],r?(r._configure(),o=r._resolveDataElementOptions(a,e)):o=a._options,"inner"!==o.borderAlign&&(s=o.borderWidth,u=(l=o.hoverBorderWidth)>(u=s>u?s:u)?l:u);return u},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=Lt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Lt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Lt(n.hoverBorderWidth,n.borderWidth)},_getRingWeightOffset:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&(e+=this._getRingWeight(n));return e},_getRingWeight:function(t){return Math.max(Lt(this.chart.data.datasets[t].weight,1),0)},_getVisibleDatasetWeightTotal:function(){return this._getRingWeightOffset(this.chart.data.datasets.length)}});N._set("horizontalBar",{hover:{mode:"index",axis:"y"},scales:{xAxes:[{type:"linear",position:"bottom"}],yAxes:[{type:"category",position:"left",offset:!0,gridLines:{offsetGridLines:!0}}]},elements:{rectangle:{borderSkipped:"left"}},tooltips:{mode:"index",axis:"y"}}),N._set("global",{datasets:{horizontalBar:{categoryPercentage:.8,barPercentage:.9}}});var Et=Tt.extend({_getValueScaleId:function(){return this.getMeta().xAxisID},_getIndexScaleId:function(){return this.getMeta().yAxisID}}),Wt=H.valueOrDefault,Vt=H.options.resolve,Ht=H.canvas._isPointInArea;function jt(t,e){var n=t&&t.options.ticks||{},i=n.reverse,a=void 0===n.min?e:0,r=void 0===n.max?e:0;return{start:i?r:a,end:i?a:r}}function qt(t,e,n){var i=n/2,a=jt(t,i),r=jt(e,i);return{top:r.end,right:a.end,bottom:r.start,left:a.start}}function Ut(t){var e,n,i,a;return H.isObject(t)?(e=t.top,n=t.right,i=t.bottom,a=t.left):e=n=i=a=t,{top:e,right:n,bottom:i,left:a}}N._set("line",{showLines:!0,spanGaps:!1,hover:{mode:"label"},scales:{xAxes:[{type:"category",id:"x-axis-0"}],yAxes:[{type:"linear",id:"y-axis-0"}]}});var Yt=it.extend({datasetElementType:kt.Line,dataElementType:kt.Point,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth","cubicInterpolationMode","fill"],_dataElementOptions:{backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},update:function(t){var e,n,i=this,a=i.getMeta(),r=a.dataset,o=a.data||[],s=i.chart.options,l=i._config,u=i._showLine=Wt(l.showLine,s.showLines);for(i._xScale=i.getScaleForId(a.xAxisID),i._yScale=i.getScaleForId(a.yAxisID),u&&(void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),r._scale=i._yScale,r._datasetIndex=i.index,r._children=o,r._model=i._resolveDatasetElementOptions(r),r.pivot()),e=0,n=o.length;e<n;++e)i.updateElement(o[e],e,t);for(u&&0!==r._model.tension&&i.updateBezierControlPoints(),e=0,n=o.length;e<n;++e)o[e].pivot()},updateElement:function(t,e,n){var i,a,r=this,o=r.getMeta(),s=t.custom||{},l=r.getDataset(),u=r.index,d=l.data[e],h=r._xScale,c=r._yScale,f=o.dataset._model,g=r._resolveDataElementOptions(t,e);i=h.getPixelForValue("object"==typeof d?d:NaN,e,u),a=n?c.getBasePixel():r.calculatePointY(d,e,u),t._xScale=h,t._yScale=c,t._options=g,t._datasetIndex=u,t._index=e,t._model={x:i,y:a,skip:s.skip||isNaN(i)||isNaN(a),radius:g.radius,pointStyle:g.pointStyle,rotation:g.rotation,backgroundColor:g.backgroundColor,borderColor:g.borderColor,borderWidth:g.borderWidth,tension:Wt(s.tension,f?f.tension:0),steppedLine:!!f&&f.steppedLine,hitRadius:g.hitRadius}},_resolveDatasetElementOptions:function(t){var e=this,n=e._config,i=t.custom||{},a=e.chart.options,r=a.elements.line,o=it.prototype._resolveDatasetElementOptions.apply(e,arguments);return o.spanGaps=Wt(n.spanGaps,a.spanGaps),o.tension=Wt(n.lineTension,r.tension),o.steppedLine=Vt([i.steppedLine,n.steppedLine,r.stepped]),o.clip=Ut(Wt(n.clip,qt(e._xScale,e._yScale,o.borderWidth))),o},calculatePointY:function(t,e,n){var i,a,r,o,s,l,u,d=this.chart,h=this._yScale,c=0,f=0;if(h.options.stacked){for(s=+h.getRightValue(t),u=(l=d._getSortedVisibleDatasetMetas()).length,i=0;i<u&&(r=l[i]).index!==n;++i)a=d.data.datasets[r.index],"line"===r.type&&r.yAxisID===h.id&&((o=+h.getRightValue(a.data[e]))<0?f+=o||0:c+=o||0);return s<0?h.getPixelForValue(f+s):h.getPixelForValue(c+s)}return h.getPixelForValue(t)},updateBezierControlPoints:function(){var t,e,n,i,a=this.chart,r=this.getMeta(),o=r.dataset._model,s=a.chartArea,l=r.data||[];function u(t,e,n){return Math.max(Math.min(t,n),e)}if(o.spanGaps&&(l=l.filter((function(t){return!t._model.skip}))),"monotone"===o.cubicInterpolationMode)H.splineCurveMonotone(l);else for(t=0,e=l.length;t<e;++t)n=l[t]._model,i=H.splineCurve(H.previousItem(l,t)._model,n,H.nextItem(l,t)._model,o.tension),n.controlPointPreviousX=i.previous.x,n.controlPointPreviousY=i.previous.y,n.controlPointNextX=i.next.x,n.controlPointNextY=i.next.y;if(a.options.elements.line.capBezierPoints)for(t=0,e=l.length;t<e;++t)n=l[t]._model,Ht(n,s)&&(t>0&&Ht(l[t-1]._model,s)&&(n.controlPointPreviousX=u(n.controlPointPreviousX,s.left,s.right),n.controlPointPreviousY=u(n.controlPointPreviousY,s.top,s.bottom)),t<l.length-1&&Ht(l[t+1]._model,s)&&(n.controlPointNextX=u(n.controlPointNextX,s.left,s.right),n.controlPointNextY=u(n.controlPointNextY,s.top,s.bottom)))},draw:function(){var t,e=this.chart,n=this.getMeta(),i=n.data||[],a=e.chartArea,r=e.canvas,o=0,s=i.length;for(this._showLine&&(t=n.dataset._model.clip,H.canvas.clipArea(e.ctx,{left:!1===t.left?0:a.left-t.left,right:!1===t.right?r.width:a.right+t.right,top:!1===t.top?0:a.top-t.top,bottom:!1===t.bottom?r.height:a.bottom+t.bottom}),n.dataset.draw(),H.canvas.unclipArea(e.ctx));o<s;++o)i[o].draw(a)},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Wt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Wt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Wt(n.hoverBorderWidth,n.borderWidth),e.radius=Wt(n.hoverRadius,n.radius)}}),Gt=H.options.resolve;N._set("polarArea",{scale:{type:"radialLinear",angleLines:{display:!1},gridLines:{circular:!0},pointLabels:{display:!1},ticks:{beginAtZero:!0}},animation:{animateRotate:!0,animateScale:!0},startAngle:-.5*Math.PI,legendCallback:function(t){var e,n,i,a=document.createElement("ul"),r=t.data,o=r.datasets,s=r.labels;if(a.setAttribute("class",t.id+"-legend"),o.length)for(e=0,n=o[0].data.length;e<n;++e)(i=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=o[0].backgroundColor[e],s[e]&&i.appendChild(document.createTextNode(s[e]));return a.outerHTML},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map((function(n,i){var a=t.getDatasetMeta(0),r=a.controller.getStyle(i);return{text:n,fillStyle:r.backgroundColor,strokeStyle:r.borderColor,lineWidth:r.borderWidth,hidden:isNaN(e.datasets[0].data[i])||a.data[i].hidden,index:i}})):[]}},onClick:function(t,e){var n,i,a,r=e.index,o=this.chart;for(n=0,i=(o.data.datasets||[]).length;n<i;++n)(a=o.getDatasetMeta(n)).data[r].hidden=!a.data[r].hidden;o.update()}},tooltips:{callbacks:{title:function(){return""},label:function(t,e){return e.labels[t.index]+": "+t.yLabel}}}});var Xt=it.extend({dataElementType:kt.Arc,linkScales:H.noop,_dataElementOptions:["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"],_getIndexScaleId:function(){return this.chart.scale.id},_getValueScaleId:function(){return this.chart.scale.id},update:function(t){var e,n,i,a=this,r=a.getDataset(),o=a.getMeta(),s=a.chart.options.startAngle||0,l=a._starts=[],u=a._angles=[],d=o.data;for(a._updateRadius(),o.count=a.countVisibleElements(),e=0,n=r.data.length;e<n;e++)l[e]=s,i=a._computeAngle(e),u[e]=i,s+=i;for(e=0,n=d.length;e<n;++e)d[e]._options=a._resolveDataElementOptions(d[e],e),a.updateElement(d[e],e,t)},_updateRadius:function(){var t=this,e=t.chart,n=e.chartArea,i=e.options,a=Math.min(n.right-n.left,n.bottom-n.top);e.outerRadius=Math.max(a/2,0),e.innerRadius=Math.max(i.cutoutPercentage?e.outerRadius/100*i.cutoutPercentage:1,0),e.radiusLength=(e.outerRadius-e.innerRadius)/e.getVisibleDatasetCount(),t.outerRadius=e.outerRadius-e.radiusLength*t.index,t.innerRadius=t.outerRadius-e.radiusLength},updateElement:function(t,e,n){var i=this,a=i.chart,r=i.getDataset(),o=a.options,s=o.animation,l=a.scale,u=a.data.labels,d=l.xCenter,h=l.yCenter,c=o.startAngle,f=t.hidden?0:l.getDistanceFromCenterForValue(r.data[e]),g=i._starts[e],p=g+(t.hidden?0:i._angles[e]),m=s.animateScale?0:l.getDistanceFromCenterForValue(r.data[e]),v=t._options||{};H.extend(t,{_datasetIndex:i.index,_index:e,_scale:l,_model:{backgroundColor:v.backgroundColor,borderColor:v.borderColor,borderWidth:v.borderWidth,borderAlign:v.borderAlign,x:d,y:h,innerRadius:0,outerRadius:n?m:f,startAngle:n&&s.animateRotate?c:g,endAngle:n&&s.animateRotate?c:p,label:H.valueAtIndexOrDefault(u,e,u[e])}}),t.pivot()},countVisibleElements:function(){var t=this.getDataset(),e=this.getMeta(),n=0;return H.each(e.data,(function(e,i){isNaN(t.data[i])||e.hidden||n++})),n},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor,a=H.valueOrDefault;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=a(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=a(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=a(n.hoverBorderWidth,n.borderWidth)},_computeAngle:function(t){var e=this,n=this.getMeta().count,i=e.getDataset(),a=e.getMeta();if(isNaN(i.data[t])||a.data[t].hidden)return 0;var r={chart:e.chart,dataIndex:t,dataset:i,datasetIndex:e.index};return Gt([e.chart.options.elements.arc.angle,2*Math.PI/n],r,t)}});N._set("pie",H.clone(N.doughnut)),N._set("pie",{cutoutPercentage:0});var Kt=Bt,Zt=H.valueOrDefault;N._set("radar",{spanGaps:!1,scale:{type:"radialLinear"},elements:{line:{fill:"start",tension:0}}});var $t=it.extend({datasetElementType:kt.Line,dataElementType:kt.Point,linkScales:H.noop,_datasetElementOptions:["backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","fill"],_dataElementOptions:{backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},_getIndexScaleId:function(){return this.chart.scale.id},_getValueScaleId:function(){return this.chart.scale.id},update:function(t){var e,n,i=this,a=i.getMeta(),r=a.dataset,o=a.data||[],s=i.chart.scale,l=i._config;for(void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),r._scale=s,r._datasetIndex=i.index,r._children=o,r._loop=!0,r._model=i._resolveDatasetElementOptions(r),r.pivot(),e=0,n=o.length;e<n;++e)i.updateElement(o[e],e,t);for(i.updateBezierControlPoints(),e=0,n=o.length;e<n;++e)o[e].pivot()},updateElement:function(t,e,n){var i=this,a=t.custom||{},r=i.getDataset(),o=i.chart.scale,s=o.getPointPositionForValue(e,r.data[e]),l=i._resolveDataElementOptions(t,e),u=i.getMeta().dataset._model,d=n?o.xCenter:s.x,h=n?o.yCenter:s.y;t._scale=o,t._options=l,t._datasetIndex=i.index,t._index=e,t._model={x:d,y:h,skip:a.skip||isNaN(d)||isNaN(h),radius:l.radius,pointStyle:l.pointStyle,rotation:l.rotation,backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,tension:Zt(a.tension,u?u.tension:0),hitRadius:l.hitRadius}},_resolveDatasetElementOptions:function(){var t=this,e=t._config,n=t.chart.options,i=it.prototype._resolveDatasetElementOptions.apply(t,arguments);return i.spanGaps=Zt(e.spanGaps,n.spanGaps),i.tension=Zt(e.lineTension,n.elements.line.tension),i},updateBezierControlPoints:function(){var t,e,n,i,a=this.getMeta(),r=this.chart.chartArea,o=a.data||[];function s(t,e,n){return Math.max(Math.min(t,n),e)}for(a.dataset._model.spanGaps&&(o=o.filter((function(t){return!t._model.skip}))),t=0,e=o.length;t<e;++t)n=o[t]._model,i=H.splineCurve(H.previousItem(o,t,!0)._model,n,H.nextItem(o,t,!0)._model,n.tension),n.controlPointPreviousX=s(i.previous.x,r.left,r.right),n.controlPointPreviousY=s(i.previous.y,r.top,r.bottom),n.controlPointNextX=s(i.next.x,r.left,r.right),n.controlPointNextY=s(i.next.y,r.top,r.bottom)},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Zt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Zt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Zt(n.hoverBorderWidth,n.borderWidth),e.radius=Zt(n.hoverRadius,n.radius)}});N._set("scatter",{hover:{mode:"single"},scales:{xAxes:[{id:"x-axis-1",type:"linear",position:"bottom"}],yAxes:[{id:"y-axis-1",type:"linear",position:"left"}]},tooltips:{callbacks:{title:function(){return""},label:function(t){return"("+t.xLabel+", "+t.yLabel+")"}}}}),N._set("global",{datasets:{scatter:{showLine:!1}}});var Jt={bar:Tt,bubble:Ot,doughnut:Bt,horizontalBar:Et,line:Yt,polarArea:Xt,pie:Kt,radar:$t,scatter:Yt};function Qt(t,e){return t.native?{x:t.x,y:t.y}:H.getRelativePosition(t,e)}function te(t,e){var n,i,a,r,o,s,l=t._getSortedVisibleDatasetMetas();for(i=0,r=l.length;i<r;++i)for(a=0,o=(n=l[i].data).length;a<o;++a)(s=n[a])._view.skip||e(s)}function ee(t,e){var n=[];return te(t,(function(t){t.inRange(e.x,e.y)&&n.push(t)})),n}function ne(t,e,n,i){var a=Number.POSITIVE_INFINITY,r=[];return te(t,(function(t){if(!n||t.inRange(e.x,e.y)){var o=t.getCenterPoint(),s=i(e,o);s<a?(r=[t],a=s):s===a&&r.push(t)}})),r}function ie(t){var e=-1!==t.indexOf("x"),n=-1!==t.indexOf("y");return function(t,i){var a=e?Math.abs(t.x-i.x):0,r=n?Math.abs(t.y-i.y):0;return Math.sqrt(Math.pow(a,2)+Math.pow(r,2))}}function ae(t,e,n){var i=Qt(e,t);n.axis=n.axis||"x";var a=ie(n.axis),r=n.intersect?ee(t,i):ne(t,i,!1,a),o=[];return r.length?(t._getSortedVisibleDatasetMetas().forEach((function(t){var e=t.data[r[0]._index];e&&!e._view.skip&&o.push(e)})),o):[]}var re={modes:{single:function(t,e){var n=Qt(e,t),i=[];return te(t,(function(t){if(t.inRange(n.x,n.y))return i.push(t),i})),i.slice(0,1)},label:ae,index:ae,dataset:function(t,e,n){var i=Qt(e,t);n.axis=n.axis||"xy";var a=ie(n.axis),r=n.intersect?ee(t,i):ne(t,i,!1,a);return r.length>0&&(r=t.getDatasetMeta(r[0]._datasetIndex).data),r},"x-axis":function(t,e){return ae(t,e,{intersect:!1})},point:function(t,e){return ee(t,Qt(e,t))},nearest:function(t,e,n){var i=Qt(e,t);n.axis=n.axis||"xy";var a=ie(n.axis);return ne(t,i,n.intersect,a)},x:function(t,e,n){var i=Qt(e,t),a=[],r=!1;return te(t,(function(t){t.inXRange(i.x)&&a.push(t),t.inRange(i.x,i.y)&&(r=!0)})),n.intersect&&!r&&(a=[]),a},y:function(t,e,n){var i=Qt(e,t),a=[],r=!1;return te(t,(function(t){t.inYRange(i.y)&&a.push(t),t.inRange(i.x,i.y)&&(r=!0)})),n.intersect&&!r&&(a=[]),a}}},oe=H.extend;function se(t,e){return H.where(t,(function(t){return t.pos===e}))}function le(t,e){return t.sort((function(t,n){var i=e?n:t,a=e?t:n;return i.weight===a.weight?i.index-a.index:i.weight-a.weight}))}function ue(t,e,n,i){return Math.max(t[n],e[n])+Math.max(t[i],e[i])}function de(t,e,n){var i,a,r=n.box,o=t.maxPadding;if(n.size&&(t[n.pos]-=n.size),n.size=n.horizontal?r.height:r.width,t[n.pos]+=n.size,r.getPadding){var s=r.getPadding();o.top=Math.max(o.top,s.top),o.left=Math.max(o.left,s.left),o.bottom=Math.max(o.bottom,s.bottom),o.right=Math.max(o.right,s.right)}if(i=e.outerWidth-ue(o,t,"left","right"),a=e.outerHeight-ue(o,t,"top","bottom"),i!==t.w||a!==t.h){t.w=i,t.h=a;var l=n.horizontal?[i,t.w]:[a,t.h];return!(l[0]===l[1]||isNaN(l[0])&&isNaN(l[1]))}}function he(t,e){var n=e.maxPadding;function i(t){var i={left:0,top:0,right:0,bottom:0};return t.forEach((function(t){i[t]=Math.max(e[t],n[t])})),i}return i(t?["left","right"]:["top","bottom"])}function ce(t,e,n){var i,a,r,o,s,l,u=[];for(i=0,a=t.length;i<a;++i)(o=(r=t[i]).box).update(r.width||e.w,r.height||e.h,he(r.horizontal,e)),de(e,n,r)&&(l=!0,u.length&&(s=!0)),o.fullWidth||u.push(r);return s&&ce(u,e,n)||l}function fe(t,e,n){var i,a,r,o,s=n.padding,l=e.x,u=e.y;for(i=0,a=t.length;i<a;++i)o=(r=t[i]).box,r.horizontal?(o.left=o.fullWidth?s.left:e.left,o.right=o.fullWidth?n.outerWidth-s.right:e.left+e.w,o.top=u,o.bottom=u+o.height,o.width=o.right-o.left,u=o.bottom):(o.left=l,o.right=l+o.width,o.top=e.top,o.bottom=e.top+e.h,o.height=o.bottom-o.top,l=o.right);e.x=l,e.y=u}N._set("global",{layout:{padding:{top:0,right:0,bottom:0,left:0}}});var ge,pe={defaults:{},addBox:function(t,e){t.boxes||(t.boxes=[]),e.fullWidth=e.fullWidth||!1,e.position=e.position||"top",e.weight=e.weight||0,e._layers=e._layers||function(){return[{z:0,draw:function(){e.draw.apply(e,arguments)}}]},t.boxes.push(e)},removeBox:function(t,e){var n=t.boxes?t.boxes.indexOf(e):-1;-1!==n&&t.boxes.splice(n,1)},configure:function(t,e,n){for(var i,a=["fullWidth","position","weight"],r=a.length,o=0;o<r;++o)i=a[o],n.hasOwnProperty(i)&&(e[i]=n[i])},update:function(t,e,n){if(t){var i=t.options.layout||{},a=H.options.toPadding(i.padding),r=e-a.width,o=n-a.height,s=function(t){var e=function(t){var e,n,i,a=[];for(e=0,n=(t||[]).length;e<n;++e)i=t[e],a.push({index:e,box:i,pos:i.position,horizontal:i.isHorizontal(),weight:i.weight});return a}(t),n=le(se(e,"left"),!0),i=le(se(e,"right")),a=le(se(e,"top"),!0),r=le(se(e,"bottom"));return{leftAndTop:n.concat(a),rightAndBottom:i.concat(r),chartArea:se(e,"chartArea"),vertical:n.concat(i),horizontal:a.concat(r)}}(t.boxes),l=s.vertical,u=s.horizontal,d=Object.freeze({outerWidth:e,outerHeight:n,padding:a,availableWidth:r,vBoxMaxWidth:r/2/l.length,hBoxMaxHeight:o/2}),h=oe({maxPadding:oe({},a),w:r,h:o,x:a.left,y:a.top},a);!function(t,e){var n,i,a;for(n=0,i=t.length;n<i;++n)(a=t[n]).width=a.horizontal?a.box.fullWidth&&e.availableWidth:e.vBoxMaxWidth,a.height=a.horizontal&&e.hBoxMaxHeight}(l.concat(u),d),ce(l,h,d),ce(u,h,d)&&ce(l,h,d),function(t){var e=t.maxPadding;function n(n){var i=Math.max(e[n]-t[n],0);return t[n]+=i,i}t.y+=n("top"),t.x+=n("left"),n("right"),n("bottom")}(h),fe(s.leftAndTop,h,d),h.x+=h.w,h.y+=h.h,fe(s.rightAndBottom,h,d),t.chartArea={left:h.left,top:h.top,right:h.left+h.w,bottom:h.top+h.h},H.each(s.chartArea,(function(e){var n=e.box;oe(n,t.chartArea),n.update(h.w,h.h)}))}}},me=(ge=Object.freeze({__proto__:null,default:"@keyframes chartjs-render-animation{from{opacity:.99}to{opacity:1}}.chartjs-render-monitor{animation:chartjs-render-animation 1ms}.chartjs-size-monitor,.chartjs-size-monitor-expand,.chartjs-size-monitor-shrink{position:absolute;direction:ltr;left:0;top:0;right:0;bottom:0;overflow:hidden;pointer-events:none;visibility:hidden;z-index:-1}.chartjs-size-monitor-expand>div{position:absolute;width:1000000px;height:1000000px;left:0;top:0}.chartjs-size-monitor-shrink>div{position:absolute;width:200%;height:200%;left:0;top:0}"}))&&ge.default||ge,ve="$chartjs",be="chartjs-size-monitor",xe="chartjs-render-monitor",ye="chartjs-render-animation",_e=["animationstart","webkitAnimationStart"],ke={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"};function we(t,e){var n=H.getStyle(t,e),i=n&&n.match(/^(\d+)(\.\d+)?px$/);return i?Number(i[1]):void 0}var Me=!!function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("e",null,e)}catch(t){}return t}()&&{passive:!0};function Se(t,e,n){t.addEventListener(e,n,Me)}function Ce(t,e,n){t.removeEventListener(e,n,Me)}function Pe(t,e,n,i,a){return{type:t,chart:e,native:a||null,x:void 0!==n?n:null,y:void 0!==i?i:null}}function Ae(t){var e=document.createElement("div");return e.className=t||"",e}function De(t,e,n){var i,a,r,o,s=t[ve]||(t[ve]={}),l=s.resizer=function(t){var e=Ae(be),n=Ae(be+"-expand"),i=Ae(be+"-shrink");n.appendChild(Ae()),i.appendChild(Ae()),e.appendChild(n),e.appendChild(i),e._reset=function(){n.scrollLeft=1e6,n.scrollTop=1e6,i.scrollLeft=1e6,i.scrollTop=1e6};var a=function(){e._reset(),t()};return Se(n,"scroll",a.bind(n,"expand")),Se(i,"scroll",a.bind(i,"shrink")),e}((i=function(){if(s.resizer){var i=n.options.maintainAspectRatio&&t.parentNode,a=i?i.clientWidth:0;e(Pe("resize",n)),i&&i.clientWidth<a&&n.canvas&&e(Pe("resize",n))}},r=!1,o=[],function(){o=Array.prototype.slice.call(arguments),a=a||this,r||(r=!0,H.requestAnimFrame.call(window,(function(){r=!1,i.apply(a,o)})))}));!function(t,e){var n=t[ve]||(t[ve]={}),i=n.renderProxy=function(t){t.animationName===ye&&e()};H.each(_e,(function(e){Se(t,e,i)})),n.reflow=!!t.offsetParent,t.classList.add(xe)}(t,(function(){if(s.resizer){var e=t.parentNode;e&&e!==l.parentNode&&e.insertBefore(l,e.firstChild),l._reset()}}))}function Te(t){var e=t[ve]||{},n=e.resizer;delete e.resizer,function(t){var e=t[ve]||{},n=e.renderProxy;n&&(H.each(_e,(function(e){Ce(t,e,n)})),delete e.renderProxy),t.classList.remove(xe)}(t),n&&n.parentNode&&n.parentNode.removeChild(n)}var Ie={disableCSSInjection:!1,_enabled:"undefined"!=typeof window&&"undefined"!=typeof document,_ensureLoaded:function(t){if(!this.disableCSSInjection){var e=t.getRootNode?t.getRootNode():document;!function(t,e){var n=t[ve]||(t[ve]={});if(!n.containsStyles){n.containsStyles=!0,e="/* Chart.js */\n"+e;var i=document.createElement("style");i.setAttribute("type","text/css"),i.appendChild(document.createTextNode(e)),t.appendChild(i)}}(e.host?e:document.head,me)}},acquireContext:function(t,e){"string"==typeof t?t=document.getElementById(t):t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas);var n=t&&t.getContext&&t.getContext("2d");return n&&n.canvas===t?(this._ensureLoaded(t),function(t,e){var n=t.style,i=t.getAttribute("height"),a=t.getAttribute("width");if(t[ve]={initial:{height:i,width:a,style:{display:n.display,height:n.height,width:n.width}}},n.display=n.display||"block",null===a||""===a){var r=we(t,"width");void 0!==r&&(t.width=r)}if(null===i||""===i)if(""===t.style.height)t.height=t.width/(e.options.aspectRatio||2);else{var o=we(t,"height");void 0!==r&&(t.height=o)}}(t,e),n):null},releaseContext:function(t){var e=t.canvas;if(e[ve]){var n=e[ve].initial;["height","width"].forEach((function(t){var i=n[t];H.isNullOrUndef(i)?e.removeAttribute(t):e.setAttribute(t,i)})),H.each(n.style||{},(function(t,n){e.style[n]=t})),e.width=e.width,delete e[ve]}},addEventListener:function(t,e,n){var i=t.canvas;if("resize"!==e){var a=n[ve]||(n[ve]={});Se(i,e,(a.proxies||(a.proxies={}))[t.id+"_"+e]=function(e){n(function(t,e){var n=ke[t.type]||t.type,i=H.getRelativePosition(t,e);return Pe(n,e,i.x,i.y,t)}(e,t))})}else De(i,n,t)},removeEventListener:function(t,e,n){var i=t.canvas;if("resize"!==e){var a=((n[ve]||{}).proxies||{})[t.id+"_"+e];a&&Ce(i,e,a)}else Te(i)}};H.addEvent=Se,H.removeEvent=Ce;var Fe=Ie._enabled?Ie:{acquireContext:function(t){return t&&t.canvas&&(t=t.canvas),t&&t.getContext("2d")||null}},Oe=H.extend({initialize:function(){},acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}},Fe);N._set("global",{plugins:{}});var Le={_plugins:[],_cacheId:0,register:function(t){var e=this._plugins;[].concat(t).forEach((function(t){-1===e.indexOf(t)&&e.push(t)})),this._cacheId++},unregister:function(t){var e=this._plugins;[].concat(t).forEach((function(t){var n=e.indexOf(t);-1!==n&&e.splice(n,1)})),this._cacheId++},clear:function(){this._plugins=[],this._cacheId++},count:function(){return this._plugins.length},getAll:function(){return this._plugins},notify:function(t,e,n){var i,a,r,o,s,l=this.descriptors(t),u=l.length;for(i=0;i<u;++i)if("function"==typeof(s=(r=(a=l[i]).plugin)[e])&&((o=[t].concat(n||[])).push(a.options),!1===s.apply(r,o)))return!1;return!0},descriptors:function(t){var e=t.$plugins||(t.$plugins={});if(e.id===this._cacheId)return e.descriptors;var n=[],i=[],a=t&&t.config||{},r=a.options&&a.options.plugins||{};return this._plugins.concat(a.plugins||[]).forEach((function(t){if(-1===n.indexOf(t)){var e=t.id,a=r[e];!1!==a&&(!0===a&&(a=H.clone(N.global.plugins[e])),n.push(t),i.push({plugin:t,options:a||{}}))}})),e.descriptors=i,e.id=this._cacheId,i},_invalidate:function(t){delete t.$plugins}},Re={constructors:{},defaults:{},registerScaleType:function(t,e,n){this.constructors[t]=e,this.defaults[t]=H.clone(n)},getScaleConstructor:function(t){return this.constructors.hasOwnProperty(t)?this.constructors[t]:void 0},getScaleDefaults:function(t){return this.defaults.hasOwnProperty(t)?H.merge(Object.create(null),[N.scale,this.defaults[t]]):{}},updateScaleDefaults:function(t,e){this.defaults.hasOwnProperty(t)&&(this.defaults[t]=H.extend(this.defaults[t],e))},addScalesToLayout:function(t){H.each(t.scales,(function(e){e.fullWidth=e.options.fullWidth,e.position=e.options.position,e.weight=e.options.weight,pe.addBox(t,e)}))}},ze=H.valueOrDefault,Ne=H.rtl.getRtlAdapter;N._set("global",{tooltips:{enabled:!0,custom:null,mode:"nearest",position:"average",intersect:!0,backgroundColor:"rgba(0,0,0,0.8)",titleFontStyle:"bold",titleSpacing:2,titleMarginBottom:6,titleFontColor:"#fff",titleAlign:"left",bodySpacing:2,bodyFontColor:"#fff",bodyAlign:"left",footerFontStyle:"bold",footerSpacing:2,footerMarginTop:6,footerFontColor:"#fff",footerAlign:"left",yPadding:6,xPadding:6,caretPadding:2,caretSize:5,cornerRadius:6,multiKeyBackground:"#fff",displayColors:!0,borderColor:"rgba(0,0,0,0)",borderWidth:0,callbacks:{beforeTitle:H.noop,title:function(t,e){var n="",i=e.labels,a=i?i.length:0;if(t.length>0){var r=t[0];r.label?n=r.label:r.xLabel?n=r.xLabel:a>0&&r.index<a&&(n=i[r.index])}return n},afterTitle:H.noop,beforeBody:H.noop,beforeLabel:H.noop,label:function(t,e){var n=e.datasets[t.datasetIndex].label||"";return n&&(n+=": "),H.isNullOrUndef(t.value)?n+=t.yLabel:n+=t.value,n},labelColor:function(t,e){var n=e.getDatasetMeta(t.datasetIndex).data[t.index]._view;return{borderColor:n.borderColor,backgroundColor:n.backgroundColor}},labelTextColor:function(){return this._options.bodyFontColor},afterLabel:H.noop,afterBody:H.noop,beforeFooter:H.noop,footer:H.noop,afterFooter:H.noop}}});var Be={average:function(t){if(!t.length)return!1;var e,n,i=0,a=0,r=0;for(e=0,n=t.length;e<n;++e){var o=t[e];if(o&&o.hasValue()){var s=o.tooltipPosition();i+=s.x,a+=s.y,++r}}return{x:i/r,y:a/r}},nearest:function(t,e){var n,i,a,r=e.x,o=e.y,s=Number.POSITIVE_INFINITY;for(n=0,i=t.length;n<i;++n){var l=t[n];if(l&&l.hasValue()){var u=l.getCenterPoint(),d=H.distanceBetweenPoints(e,u);d<s&&(s=d,a=l)}}if(a){var h=a.tooltipPosition();r=h.x,o=h.y}return{x:r,y:o}}};function Ee(t,e){return e&&(H.isArray(e)?Array.prototype.push.apply(t,e):t.push(e)),t}function We(t){return("string"==typeof t||t instanceof String)&&t.indexOf("\n")>-1?t.split("\n"):t}function Ve(t){var e=N.global;return{xPadding:t.xPadding,yPadding:t.yPadding,xAlign:t.xAlign,yAlign:t.yAlign,rtl:t.rtl,textDirection:t.textDirection,bodyFontColor:t.bodyFontColor,_bodyFontFamily:ze(t.bodyFontFamily,e.defaultFontFamily),_bodyFontStyle:ze(t.bodyFontStyle,e.defaultFontStyle),_bodyAlign:t.bodyAlign,bodyFontSize:ze(t.bodyFontSize,e.defaultFontSize),bodySpacing:t.bodySpacing,titleFontColor:t.titleFontColor,_titleFontFamily:ze(t.titleFontFamily,e.defaultFontFamily),_titleFontStyle:ze(t.titleFontStyle,e.defaultFontStyle),titleFontSize:ze(t.titleFontSize,e.defaultFontSize),_titleAlign:t.titleAlign,titleSpacing:t.titleSpacing,titleMarginBottom:t.titleMarginBottom,footerFontColor:t.footerFontColor,_footerFontFamily:ze(t.footerFontFamily,e.defaultFontFamily),_footerFontStyle:ze(t.footerFontStyle,e.defaultFontStyle),footerFontSize:ze(t.footerFontSize,e.defaultFontSize),_footerAlign:t.footerAlign,footerSpacing:t.footerSpacing,footerMarginTop:t.footerMarginTop,caretSize:t.caretSize,cornerRadius:t.cornerRadius,backgroundColor:t.backgroundColor,opacity:0,legendColorBackground:t.multiKeyBackground,displayColors:t.displayColors,borderColor:t.borderColor,borderWidth:t.borderWidth}}function He(t,e){return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-t.xPadding:t.x+t.xPadding}function je(t){return Ee([],We(t))}var qe=K.extend({initialize:function(){this._model=Ve(this._options),this._lastActive=[]},getTitle:function(){var t=this,e=t._options,n=e.callbacks,i=n.beforeTitle.apply(t,arguments),a=n.title.apply(t,arguments),r=n.afterTitle.apply(t,arguments),o=[];return o=Ee(o,We(i)),o=Ee(o,We(a)),o=Ee(o,We(r))},getBeforeBody:function(){return je(this._options.callbacks.beforeBody.apply(this,arguments))},getBody:function(t,e){var n=this,i=n._options.callbacks,a=[];return H.each(t,(function(t){var r={before:[],lines:[],after:[]};Ee(r.before,We(i.beforeLabel.call(n,t,e))),Ee(r.lines,i.label.call(n,t,e)),Ee(r.after,We(i.afterLabel.call(n,t,e))),a.push(r)})),a},getAfterBody:function(){return je(this._options.callbacks.afterBody.apply(this,arguments))},getFooter:function(){var t=this,e=t._options.callbacks,n=e.beforeFooter.apply(t,arguments),i=e.footer.apply(t,arguments),a=e.afterFooter.apply(t,arguments),r=[];return r=Ee(r,We(n)),r=Ee(r,We(i)),r=Ee(r,We(a))},update:function(t){var e,n,i,a,r,o,s,l,u,d,h=this,c=h._options,f=h._model,g=h._model=Ve(c),p=h._active,m=h._data,v={xAlign:f.xAlign,yAlign:f.yAlign},b={x:f.x,y:f.y},x={width:f.width,height:f.height},y={x:f.caretX,y:f.caretY};if(p.length){g.opacity=1;var _=[],k=[];y=Be[c.position].call(h,p,h._eventPosition);var w=[];for(e=0,n=p.length;e<n;++e)w.push((i=p[e],a=void 0,r=void 0,o=void 0,s=void 0,l=void 0,u=void 0,d=void 0,a=i._xScale,r=i._yScale||i._scale,o=i._index,s=i._datasetIndex,l=i._chart.getDatasetMeta(s).controller,u=l._getIndexScale(),d=l._getValueScale(),{xLabel:a?a.getLabelForIndex(o,s):"",yLabel:r?r.getLabelForIndex(o,s):"",label:u?""+u.getLabelForIndex(o,s):"",value:d?""+d.getLabelForIndex(o,s):"",index:o,datasetIndex:s,x:i._model.x,y:i._model.y}));c.filter&&(w=w.filter((function(t){return c.filter(t,m)}))),c.itemSort&&(w=w.sort((function(t,e){return c.itemSort(t,e,m)}))),H.each(w,(function(t){_.push(c.callbacks.labelColor.call(h,t,h._chart)),k.push(c.callbacks.labelTextColor.call(h,t,h._chart))})),g.title=h.getTitle(w,m),g.beforeBody=h.getBeforeBody(w,m),g.body=h.getBody(w,m),g.afterBody=h.getAfterBody(w,m),g.footer=h.getFooter(w,m),g.x=y.x,g.y=y.y,g.caretPadding=c.caretPadding,g.labelColors=_,g.labelTextColors=k,g.dataPoints=w,x=function(t,e){var n=t._chart.ctx,i=2*e.yPadding,a=0,r=e.body,o=r.reduce((function(t,e){return t+e.before.length+e.lines.length+e.after.length}),0);o+=e.beforeBody.length+e.afterBody.length;var s=e.title.length,l=e.footer.length,u=e.titleFontSize,d=e.bodyFontSize,h=e.footerFontSize;i+=s*u,i+=s?(s-1)*e.titleSpacing:0,i+=s?e.titleMarginBottom:0,i+=o*d,i+=o?(o-1)*e.bodySpacing:0,i+=l?e.footerMarginTop:0,i+=l*h,i+=l?(l-1)*e.footerSpacing:0;var c=0,f=function(t){a=Math.max(a,n.measureText(t).width+c)};return n.font=H.fontString(u,e._titleFontStyle,e._titleFontFamily),H.each(e.title,f),n.font=H.fontString(d,e._bodyFontStyle,e._bodyFontFamily),H.each(e.beforeBody.concat(e.afterBody),f),c=e.displayColors?d+2:0,H.each(r,(function(t){H.each(t.before,f),H.each(t.lines,f),H.each(t.after,f)})),c=0,n.font=H.fontString(h,e._footerFontStyle,e._footerFontFamily),H.each(e.footer,f),{width:a+=2*e.xPadding,height:i}}(this,g),b=function(t,e,n,i){var a=t.x,r=t.y,o=t.caretSize,s=t.caretPadding,l=t.cornerRadius,u=n.xAlign,d=n.yAlign,h=o+s,c=l+s;return"right"===u?a-=e.width:"center"===u&&((a-=e.width/2)+e.width>i.width&&(a=i.width-e.width),a<0&&(a=0)),"top"===d?r+=h:r-="bottom"===d?e.height+h:e.height/2,"center"===d?"left"===u?a+=h:"right"===u&&(a-=h):"left"===u?a-=c:"right"===u&&(a+=c),{x:a,y:r}}(g,x,v=function(t,e){var n,i,a,r,o,s=t._model,l=t._chart,u=t._chart.chartArea,d="center",h="center";s.y<e.height?h="top":s.y>l.height-e.height&&(h="bottom");var c=(u.left+u.right)/2,f=(u.top+u.bottom)/2;"center"===h?(n=function(t){return t<=c},i=function(t){return t>c}):(n=function(t){return t<=e.width/2},i=function(t){return t>=l.width-e.width/2}),a=function(t){return t+e.width+s.caretSize+s.caretPadding>l.width},r=function(t){return t-e.width-s.caretSize-s.caretPadding<0},o=function(t){return t<=f?"top":"bottom"},n(s.x)?(d="left",a(s.x)&&(d="center",h=o(s.y))):i(s.x)&&(d="right",r(s.x)&&(d="center",h=o(s.y)));var g=t._options;return{xAlign:g.xAlign?g.xAlign:d,yAlign:g.yAlign?g.yAlign:h}}(this,x),h._chart)}else g.opacity=0;return g.xAlign=v.xAlign,g.yAlign=v.yAlign,g.x=b.x,g.y=b.y,g.width=x.width,g.height=x.height,g.caretX=y.x,g.caretY=y.y,h._model=g,t&&c.custom&&c.custom.call(h,g),h},drawCaret:function(t,e){var n=this._chart.ctx,i=this._view,a=this.getCaretPosition(t,e,i);n.lineTo(a.x1,a.y1),n.lineTo(a.x2,a.y2),n.lineTo(a.x3,a.y3)},getCaretPosition:function(t,e,n){var i,a,r,o,s,l,u=n.caretSize,d=n.cornerRadius,h=n.xAlign,c=n.yAlign,f=t.x,g=t.y,p=e.width,m=e.height;if("center"===c)s=g+m/2,"left"===h?(a=(i=f)-u,r=i,o=s+u,l=s-u):(a=(i=f+p)+u,r=i,o=s-u,l=s+u);else if("left"===h?(i=(a=f+d+u)-u,r=a+u):"right"===h?(i=(a=f+p-d-u)-u,r=a+u):(i=(a=n.caretX)-u,r=a+u),"top"===c)s=(o=g)-u,l=o;else{s=(o=g+m)+u,l=o;var v=r;r=i,i=v}return{x1:i,x2:a,x3:r,y1:o,y2:s,y3:l}},drawTitle:function(t,e,n){var i,a,r,o=e.title,s=o.length;if(s){var l=Ne(e.rtl,e.x,e.width);for(t.x=He(e,e._titleAlign),n.textAlign=l.textAlign(e._titleAlign),n.textBaseline="middle",i=e.titleFontSize,a=e.titleSpacing,n.fillStyle=e.titleFontColor,n.font=H.fontString(i,e._titleFontStyle,e._titleFontFamily),r=0;r<s;++r)n.fillText(o[r],l.x(t.x),t.y+i/2),t.y+=i+a,r+1===s&&(t.y+=e.titleMarginBottom-a)}},drawBody:function(t,e,n){var i,a,r,o,s,l,u,d,h=e.bodyFontSize,c=e.bodySpacing,f=e._bodyAlign,g=e.body,p=e.displayColors,m=0,v=p?He(e,"left"):0,b=Ne(e.rtl,e.x,e.width),x=function(e){n.fillText(e,b.x(t.x+m),t.y+h/2),t.y+=h+c},y=b.textAlign(f);for(n.textAlign=f,n.textBaseline="middle",n.font=H.fontString(h,e._bodyFontStyle,e._bodyFontFamily),t.x=He(e,y),n.fillStyle=e.bodyFontColor,H.each(e.beforeBody,x),m=p&&"right"!==y?"center"===f?h/2+1:h+2:0,s=0,u=g.length;s<u;++s){for(i=g[s],a=e.labelTextColors[s],r=e.labelColors[s],n.fillStyle=a,H.each(i.before,x),l=0,d=(o=i.lines).length;l<d;++l){if(p){var _=b.x(v);n.fillStyle=e.legendColorBackground,n.fillRect(b.leftForLtr(_,h),t.y,h,h),n.lineWidth=1,n.strokeStyle=r.borderColor,n.strokeRect(b.leftForLtr(_,h),t.y,h,h),n.fillStyle=r.backgroundColor,n.fillRect(b.leftForLtr(b.xPlus(_,1),h-2),t.y+1,h-2,h-2),n.fillStyle=a}x(o[l])}H.each(i.after,x)}m=0,H.each(e.afterBody,x),t.y-=c},drawFooter:function(t,e,n){var i,a,r=e.footer,o=r.length;if(o){var s=Ne(e.rtl,e.x,e.width);for(t.x=He(e,e._footerAlign),t.y+=e.footerMarginTop,n.textAlign=s.textAlign(e._footerAlign),n.textBaseline="middle",i=e.footerFontSize,n.fillStyle=e.footerFontColor,n.font=H.fontString(i,e._footerFontStyle,e._footerFontFamily),a=0;a<o;++a)n.fillText(r[a],s.x(t.x),t.y+i/2),t.y+=i+e.footerSpacing}},drawBackground:function(t,e,n,i){n.fillStyle=e.backgroundColor,n.strokeStyle=e.borderColor,n.lineWidth=e.borderWidth;var a=e.xAlign,r=e.yAlign,o=t.x,s=t.y,l=i.width,u=i.height,d=e.cornerRadius;n.beginPath(),n.moveTo(o+d,s),"top"===r&&this.drawCaret(t,i),n.lineTo(o+l-d,s),n.quadraticCurveTo(o+l,s,o+l,s+d),"center"===r&&"right"===a&&this.drawCaret(t,i),n.lineTo(o+l,s+u-d),n.quadraticCurveTo(o+l,s+u,o+l-d,s+u),"bottom"===r&&this.drawCaret(t,i),n.lineTo(o+d,s+u),n.quadraticCurveTo(o,s+u,o,s+u-d),"center"===r&&"left"===a&&this.drawCaret(t,i),n.lineTo(o,s+d),n.quadraticCurveTo(o,s,o+d,s),n.closePath(),n.fill(),e.borderWidth>0&&n.stroke()},draw:function(){var t=this._chart.ctx,e=this._view;if(0!==e.opacity){var n={width:e.width,height:e.height},i={x:e.x,y:e.y},a=Math.abs(e.opacity<.001)?0:e.opacity,r=e.title.length||e.beforeBody.length||e.body.length||e.afterBody.length||e.footer.length;this._options.enabled&&r&&(t.save(),t.globalAlpha=a,this.drawBackground(i,e,t,n),i.y+=e.yPadding,H.rtl.overrideTextDirection(t,e.textDirection),this.drawTitle(i,e,t),this.drawBody(i,e,t),this.drawFooter(i,e,t),H.rtl.restoreTextDirection(t,e.textDirection),t.restore())}},handleEvent:function(t){var e,n=this,i=n._options;return n._lastActive=n._lastActive||[],"mouseout"===t.type?n._active=[]:(n._active=n._chart.getElementsAtEventForMode(t,i.mode,i),i.reverse&&n._active.reverse()),(e=!H.arrayEquals(n._active,n._lastActive))&&(n._lastActive=n._active,(i.enabled||i.custom)&&(n._eventPosition={x:t.x,y:t.y},n.update(!0),n.pivot())),e}}),Ue=Be,Ye=qe;Ye.positioners=Ue;var Ge=H.valueOrDefault;function Xe(){return H.merge(Object.create(null),[].slice.call(arguments),{merger:function(t,e,n,i){if("xAxes"===t||"yAxes"===t){var a,r,o,s=n[t].length;for(e[t]||(e[t]=[]),a=0;a<s;++a)o=n[t][a],r=Ge(o.type,"xAxes"===t?"category":"linear"),a>=e[t].length&&e[t].push({}),!e[t][a].type||o.type&&o.type!==e[t][a].type?H.merge(e[t][a],[Re.getScaleDefaults(r),o]):H.merge(e[t][a],o)}else H._merger(t,e,n,i)}})}function Ke(){return H.merge(Object.create(null),[].slice.call(arguments),{merger:function(t,e,n,i){var a=e[t]||Object.create(null),r=n[t];"scales"===t?e[t]=Xe(a,r):"scale"===t?e[t]=H.merge(a,[Re.getScaleDefaults(r.type),r]):H._merger(t,e,n,i)}})}function Ze(t){var e=t.options;H.each(t.scales,(function(e){pe.removeBox(t,e)})),e=Ke(N.global,N[t.config.type],e),t.options=t.config.options=e,t.ensureScalesHaveIDs(),t.buildOrUpdateScales(),t.tooltip._options=e.tooltips,t.tooltip.initialize()}function $e(t,e,n){var i,a=function(t){return t.id===i};do{i=e+n++}while(H.findIndex(t,a)>=0);return i}function Je(t){return"top"===t||"bottom"===t}function Qe(t,e){return function(n,i){return n[t]===i[t]?n[e]-i[e]:n[t]-i[t]}}N._set("global",{elements:{},events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,maintainAspectRatio:!0,responsive:!0,responsiveAnimationDuration:0});var tn=function(t,e){return this.construct(t,e),this};H.extend(tn.prototype,{construct:function(t,e){var n=this;e=function(t){var e=(t=t||Object.create(null)).data=t.data||{};return e.datasets=e.datasets||[],e.labels=e.labels||[],t.options=Ke(N.global,N[t.type],t.options||{}),t}(e);var i=Oe.acquireContext(t,e),a=i&&i.canvas,r=a&&a.height,o=a&&a.width;n.id=H.uid(),n.ctx=i,n.canvas=a,n.config=e,n.width=o,n.height=r,n.aspectRatio=r?o/r:null,n.options=e.options,n._bufferedRender=!1,n._layers=[],n.chart=n,n.controller=n,tn.instances[n.id]=n,Object.defineProperty(n,"data",{get:function(){return n.config.data},set:function(t){n.config.data=t}}),i&&a?(n.initialize(),n.update()):console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var t=this;return Le.notify(t,"beforeInit"),H.retinaScale(t,t.options.devicePixelRatio),t.bindEvents(),t.options.responsive&&t.resize(!0),t.initToolTip(),Le.notify(t,"afterInit"),t},clear:function(){return H.canvas.clear(this),this},stop:function(){return J.cancelAnimation(this),this},resize:function(t){var e=this,n=e.options,i=e.canvas,a=n.maintainAspectRatio&&e.aspectRatio||null,r=Math.max(0,Math.floor(H.getMaximumWidth(i))),o=Math.max(0,Math.floor(a?r/a:H.getMaximumHeight(i)));if((e.width!==r||e.height!==o)&&(i.width=e.width=r,i.height=e.height=o,i.style.width=r+"px",i.style.height=o+"px",H.retinaScale(e,n.devicePixelRatio),!t)){var s={width:r,height:o};Le.notify(e,"resize",[s]),n.onResize&&n.onResize(e,s),e.stop(),e.update({duration:n.responsiveAnimationDuration})}},ensureScalesHaveIDs:function(){var t=this.options,e=t.scales||{},n=t.scale;H.each(e.xAxes,(function(t,n){t.id||(t.id=$e(e.xAxes,"x-axis-",n))})),H.each(e.yAxes,(function(t,n){t.id||(t.id=$e(e.yAxes,"y-axis-",n))})),n&&(n.id=n.id||"scale")},buildOrUpdateScales:function(){var t=this,e=t.options,n=t.scales||{},i=[],a=Object.keys(n).reduce((function(t,e){return t[e]=!1,t}),{});e.scales&&(i=i.concat((e.scales.xAxes||[]).map((function(t){return{options:t,dtype:"category",dposition:"bottom"}})),(e.scales.yAxes||[]).map((function(t){return{options:t,dtype:"linear",dposition:"left"}})))),e.scale&&i.push({options:e.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),H.each(i,(function(e){var i=e.options,r=i.id,o=Ge(i.type,e.dtype);Je(i.position)!==Je(e.dposition)&&(i.position=e.dposition),a[r]=!0;var s=null;if(r in n&&n[r].type===o)(s=n[r]).options=i,s.ctx=t.ctx,s.chart=t;else{var l=Re.getScaleConstructor(o);if(!l)return;s=new l({id:r,type:o,options:i,ctx:t.ctx,chart:t}),n[s.id]=s}s.mergeTicksOptions(),e.isDefault&&(t.scale=s)})),H.each(a,(function(t,e){t||delete n[e]})),t.scales=n,Re.addScalesToLayout(this)},buildOrUpdateControllers:function(){var t,e,n=this,i=[],a=n.data.datasets;for(t=0,e=a.length;t<e;t++){var r=a[t],o=n.getDatasetMeta(t),s=r.type||n.config.type;if(o.type&&o.type!==s&&(n.destroyDatasetMeta(t),o=n.getDatasetMeta(t)),o.type=s,o.order=r.order||0,o.index=t,o.controller)o.controller.updateIndex(t),o.controller.linkScales();else{var l=Jt[o.type];if(void 0===l)throw new Error('"'+o.type+'" is not a chart type.');o.controller=new l(n,t),i.push(o.controller)}}return i},resetElements:function(){var t=this;H.each(t.data.datasets,(function(e,n){t.getDatasetMeta(n).controller.reset()}),t)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(t){var e,n,i=this;if(t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]}),Ze(i),Le._invalidate(i),!1!==Le.notify(i,"beforeUpdate")){i.tooltip._data=i.data;var a=i.buildOrUpdateControllers();for(e=0,n=i.data.datasets.length;e<n;e++)i.getDatasetMeta(e).controller.buildOrUpdateElements();i.updateLayout(),i.options.animation&&i.options.animation.duration&&H.each(a,(function(t){t.reset()})),i.updateDatasets(),i.tooltip.initialize(),i.lastActive=[],Le.notify(i,"afterUpdate"),i._layers.sort(Qe("z","_idx")),i._bufferedRender?i._bufferedRequest={duration:t.duration,easing:t.easing,lazy:t.lazy}:i.render(t)}},updateLayout:function(){var t=this;!1!==Le.notify(t,"beforeLayout")&&(pe.update(this,this.width,this.height),t._layers=[],H.each(t.boxes,(function(e){e._configure&&e._configure(),t._layers.push.apply(t._layers,e._layers())}),t),t._layers.forEach((function(t,e){t._idx=e})),Le.notify(t,"afterScaleUpdate"),Le.notify(t,"afterLayout"))},updateDatasets:function(){if(!1!==Le.notify(this,"beforeDatasetsUpdate")){for(var t=0,e=this.data.datasets.length;t<e;++t)this.updateDataset(t);Le.notify(this,"afterDatasetsUpdate")}},updateDataset:function(t){var e=this.getDatasetMeta(t),n={meta:e,index:t};!1!==Le.notify(this,"beforeDatasetUpdate",[n])&&(e.controller._update(),Le.notify(this,"afterDatasetUpdate",[n]))},render:function(t){var e=this;t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]});var n=e.options.animation,i=Ge(t.duration,n&&n.duration),a=t.lazy;if(!1!==Le.notify(e,"beforeRender")){var r=function(t){Le.notify(e,"afterRender"),H.callback(n&&n.onComplete,[t],e)};if(n&&i){var o=new $({numSteps:i/16.66,easing:t.easing||n.easing,render:function(t,e){var n=H.easing.effects[e.easing],i=e.currentStep,a=i/e.numSteps;t.draw(n(a),a,i)},onAnimationProgress:n.onProgress,onAnimationComplete:r});J.addAnimation(e,o,i,a)}else e.draw(),r(new $({numSteps:0,chart:e}));return e}},draw:function(t){var e,n,i=this;if(i.clear(),H.isNullOrUndef(t)&&(t=1),i.transition(t),!(i.width<=0||i.height<=0)&&!1!==Le.notify(i,"beforeDraw",[t])){for(n=i._layers,e=0;e<n.length&&n[e].z<=0;++e)n[e].draw(i.chartArea);for(i.drawDatasets(t);e<n.length;++e)n[e].draw(i.chartArea);i._drawTooltip(t),Le.notify(i,"afterDraw",[t])}},transition:function(t){for(var e=0,n=(this.data.datasets||[]).length;e<n;++e)this.isDatasetVisible(e)&&this.getDatasetMeta(e).controller.transition(t);this.tooltip.transition(t)},_getSortedDatasetMetas:function(t){var e,n,i=[];for(e=0,n=(this.data.datasets||[]).length;e<n;++e)t&&!this.isDatasetVisible(e)||i.push(this.getDatasetMeta(e));return i.sort(Qe("order","index")),i},_getSortedVisibleDatasetMetas:function(){return this._getSortedDatasetMetas(!0)},drawDatasets:function(t){var e,n;if(!1!==Le.notify(this,"beforeDatasetsDraw",[t])){for(n=(e=this._getSortedVisibleDatasetMetas()).length-1;n>=0;--n)this.drawDataset(e[n],t);Le.notify(this,"afterDatasetsDraw",[t])}},drawDataset:function(t,e){var n={meta:t,index:t.index,easingValue:e};!1!==Le.notify(this,"beforeDatasetDraw",[n])&&(t.controller.draw(e),Le.notify(this,"afterDatasetDraw",[n]))},_drawTooltip:function(t){var e=this.tooltip,n={tooltip:e,easingValue:t};!1!==Le.notify(this,"beforeTooltipDraw",[n])&&(e.draw(),Le.notify(this,"afterTooltipDraw",[n]))},getElementAtEvent:function(t){return re.modes.single(this,t)},getElementsAtEvent:function(t){return re.modes.label(this,t,{intersect:!0})},getElementsAtXAxis:function(t){return re.modes["x-axis"](this,t,{intersect:!0})},getElementsAtEventForMode:function(t,e,n){var i=re.modes[e];return"function"==typeof i?i(this,t,n):[]},getDatasetAtEvent:function(t){return re.modes.dataset(this,t,{intersect:!0})},getDatasetMeta:function(t){var e=this.data.datasets[t];e._meta||(e._meta={});var n=e._meta[this.id];return n||(n=e._meta[this.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e.order||0,index:t}),n},getVisibleDatasetCount:function(){for(var t=0,e=0,n=this.data.datasets.length;e<n;++e)this.isDatasetVisible(e)&&t++;return t},isDatasetVisible:function(t){var e=this.getDatasetMeta(t);return"boolean"==typeof e.hidden?!e.hidden:!this.data.datasets[t].hidden},generateLegend:function(){return this.options.legendCallback(this)},destroyDatasetMeta:function(t){var e=this.id,n=this.data.datasets[t],i=n._meta&&n._meta[e];i&&(i.controller.destroy(),delete n._meta[e])},destroy:function(){var t,e,n=this,i=n.canvas;for(n.stop(),t=0,e=n.data.datasets.length;t<e;++t)n.destroyDatasetMeta(t);i&&(n.unbindEvents(),H.canvas.clear(n),Oe.releaseContext(n.ctx),n.canvas=null,n.ctx=null),Le.notify(n,"destroy"),delete tn.instances[n.id]},toBase64Image:function(){return this.canvas.toDataURL.apply(this.canvas,arguments)},initToolTip:function(){var t=this;t.tooltip=new Ye({_chart:t,_chartInstance:t,_data:t.data,_options:t.options.tooltips},t)},bindEvents:function(){var t=this,e=t._listeners={},n=function(){t.eventHandler.apply(t,arguments)};H.each(t.options.events,(function(i){Oe.addEventListener(t,i,n),e[i]=n})),t.options.responsive&&(n=function(){t.resize()},Oe.addEventListener(t,"resize",n),e.resize=n)},unbindEvents:function(){var t=this,e=t._listeners;e&&(delete t._listeners,H.each(e,(function(e,n){Oe.removeEventListener(t,n,e)})))},updateHoverStyle:function(t,e,n){var i,a,r,o=n?"set":"remove";for(a=0,r=t.length;a<r;++a)(i=t[a])&&this.getDatasetMeta(i._datasetIndex).controller[o+"HoverStyle"](i);"dataset"===e&&this.getDatasetMeta(t[0]._datasetIndex).controller["_"+o+"DatasetHoverStyle"]()},eventHandler:function(t){var e=this,n=e.tooltip;if(!1!==Le.notify(e,"beforeEvent",[t])){e._bufferedRender=!0,e._bufferedRequest=null;var i=e.handleEvent(t);n&&(i=n._start?n.handleEvent(t):i|n.handleEvent(t)),Le.notify(e,"afterEvent",[t]);var a=e._bufferedRequest;return a?e.render(a):i&&!e.animating&&(e.stop(),e.render({duration:e.options.hover.animationDuration,lazy:!0})),e._bufferedRender=!1,e._bufferedRequest=null,e}},handleEvent:function(t){var e,n=this,i=n.options||{},a=i.hover;return n.lastActive=n.lastActive||[],"mouseout"===t.type?n.active=[]:n.active=n.getElementsAtEventForMode(t,a.mode,a),H.callback(i.onHover||i.hover.onHover,[t.native,n.active],n),"mouseup"!==t.type&&"click"!==t.type||i.onClick&&i.onClick.call(n,t.native,n.active),n.lastActive.length&&n.updateHoverStyle(n.lastActive,a.mode,!1),n.active.length&&a.mode&&n.updateHoverStyle(n.active,a.mode,!0),e=!H.arrayEquals(n.active,n.lastActive),n.lastActive=n.active,e}}),tn.instances={};var en=tn;tn.Controller=tn,tn.types={},H.configMerge=Ke,H.scaleMerge=Xe;function nn(){throw new Error("This method is not implemented: either no adapter can be found or an incomplete integration was provided.")}function an(t){this.options=t||{}}H.extend(an.prototype,{formats:nn,parse:nn,format:nn,add:nn,diff:nn,startOf:nn,endOf:nn,_create:function(t){return t}}),an.override=function(t){H.extend(an.prototype,t)};var rn={_date:an},on={formatters:{values:function(t){return H.isArray(t)?t:""+t},linear:function(t,e,n){var i=n.length>3?n[2]-n[1]:n[1]-n[0];Math.abs(i)>1&&t!==Math.floor(t)&&(i=t-Math.floor(t));var a=H.log10(Math.abs(i)),r="";if(0!==t)if(Math.max(Math.abs(n[0]),Math.abs(n[n.length-1]))<1e-4){var o=H.log10(Math.abs(t)),s=Math.floor(o)-Math.floor(a);s=Math.max(Math.min(s,20),0),r=t.toExponential(s)}else{var l=-1*Math.floor(a);l=Math.max(Math.min(l,20),0),r=t.toFixed(l)}else r="0";return r},logarithmic:function(t,e,n){var i=t/Math.pow(10,Math.floor(H.log10(t)));return 0===t?"0":1===i||2===i||5===i||0===e||e===n.length-1?t.toExponential():""}}},sn=H.isArray,ln=H.isNullOrUndef,un=H.valueOrDefault,dn=H.valueAtIndexOrDefault;function hn(t,e,n){var i,a=t.getTicks().length,r=Math.min(e,a-1),o=t.getPixelForTick(r),s=t._startPixel,l=t._endPixel;if(!(n&&(i=1===a?Math.max(o-s,l-o):0===e?(t.getPixelForTick(1)-o)/2:(o-t.getPixelForTick(r-1))/2,(o+=r<e?i:-i)<s-1e-6||o>l+1e-6)))return o}function cn(t,e,n,i){var a,r,o,s,l,u,d,h,c,f,g,p,m,v=n.length,b=[],x=[],y=[],_=0,k=0;for(a=0;a<v;++a){if(s=n[a].label,l=n[a].major?e.major:e.minor,t.font=u=l.string,d=i[u]=i[u]||{data:{},gc:[]},h=l.lineHeight,c=f=0,ln(s)||sn(s)){if(sn(s))for(r=0,o=s.length;r<o;++r)g=s[r],ln(g)||sn(g)||(c=H.measureText(t,d.data,d.gc,c,g),f+=h)}else c=H.measureText(t,d.data,d.gc,c,s),f=h;b.push(c),x.push(f),y.push(h/2),_=Math.max(c,_),k=Math.max(f,k)}function w(t){return{width:b[t]||0,height:x[t]||0,offset:y[t]||0}}return function(t,e){H.each(t,(function(t){var n,i=t.gc,a=i.length/2;if(a>e){for(n=0;n<a;++n)delete t.data[i[n]];i.splice(0,a)}}))}(i,v),p=b.indexOf(_),m=x.indexOf(k),{first:w(0),last:w(v-1),widest:w(p),highest:w(m)}}function fn(t){return t.drawTicks?t.tickMarkLength:0}function gn(t){var e,n;return t.display?(e=H.options._parseFont(t),n=H.options.toPadding(t.padding),e.lineHeight+n.height):0}function pn(t,e){return H.extend(H.options._parseFont({fontFamily:un(e.fontFamily,t.fontFamily),fontSize:un(e.fontSize,t.fontSize),fontStyle:un(e.fontStyle,t.fontStyle),lineHeight:un(e.lineHeight,t.lineHeight)}),{color:H.options.resolve([e.fontColor,t.fontColor,N.global.defaultFontColor])})}function mn(t){var e=pn(t,t.minor);return{minor:e,major:t.major.enabled?pn(t,t.major):e}}function vn(t){var e,n,i,a=[];for(n=0,i=t.length;n<i;++n)void 0!==(e=t[n])._index&&a.push(e);return a}function bn(t,e,n,i){var a,r,o,s,l=un(n,0),u=Math.min(un(i,t.length),t.length),d=0;for(e=Math.ceil(e),i&&(e=(a=i-n)/Math.floor(a/e)),s=l;s<0;)d++,s=Math.round(l+d*e);for(r=Math.max(l,0);r<u;r++)o=t[r],r===s?(o._index=r,d++,s=Math.round(l+d*e)):delete o.label}N._set("scale",{display:!0,position:"left",offset:!1,gridLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:"rgba(0,0,0,0.25)",zeroLineBorderDash:[],zeroLineBorderDashOffset:0,offsetGridLines:!1,borderDash:[],borderDashOffset:0},scaleLabel:{display:!1,labelString:"",padding:{top:4,bottom:4}},ticks:{beginAtZero:!1,minRotation:0,maxRotation:50,mirror:!1,padding:0,reverse:!1,display:!0,autoSkip:!0,autoSkipPadding:0,labelOffset:0,callback:on.formatters.values,minor:{},major:{}}});var xn=K.extend({zeroLineIndex:0,getPadding:function(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}},getTicks:function(){return this._ticks},_getLabels:function(){var t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]},mergeTicksOptions:function(){},beforeUpdate:function(){H.callback(this.options.beforeUpdate,[this])},update:function(t,e,n){var i,a,r,o,s,l=this,u=l.options.ticks,d=u.sampleSize;if(l.beforeUpdate(),l.maxWidth=t,l.maxHeight=e,l.margins=H.extend({left:0,right:0,top:0,bottom:0},n),l._ticks=null,l.ticks=null,l._labelSizes=null,l._maxLabelLines=0,l.longestLabelWidth=0,l.longestTextCache=l.longestTextCache||{},l._gridLineItems=null,l._labelItems=null,l.beforeSetDimensions(),l.setDimensions(),l.afterSetDimensions(),l.beforeDataLimits(),l.determineDataLimits(),l.afterDataLimits(),l.beforeBuildTicks(),o=l.buildTicks()||[],(!(o=l.afterBuildTicks(o)||o)||!o.length)&&l.ticks)for(o=[],i=0,a=l.ticks.length;i<a;++i)o.push({value:l.ticks[i],major:!1});return l._ticks=o,s=d<o.length,r=l._convertTicksToLabels(s?function(t,e){for(var n=[],i=t.length/e,a=0,r=t.length;a<r;a+=i)n.push(t[Math.floor(a)]);return n}(o,d):o),l._configure(),l.beforeCalculateTickRotation(),l.calculateTickRotation(),l.afterCalculateTickRotation(),l.beforeFit(),l.fit(),l.afterFit(),l._ticksToDraw=u.display&&(u.autoSkip||"auto"===u.source)?l._autoSkip(o):o,s&&(r=l._convertTicksToLabels(l._ticksToDraw)),l.ticks=r,l.afterUpdate(),l.minSize},_configure:function(){var t,e,n=this,i=n.options.ticks.reverse;n.isHorizontal()?(t=n.left,e=n.right):(t=n.top,e=n.bottom,i=!i),n._startPixel=t,n._endPixel=e,n._reversePixels=i,n._length=e-t},afterUpdate:function(){H.callback(this.options.afterUpdate,[this])},beforeSetDimensions:function(){H.callback(this.options.beforeSetDimensions,[this])},setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0},afterSetDimensions:function(){H.callback(this.options.afterSetDimensions,[this])},beforeDataLimits:function(){H.callback(this.options.beforeDataLimits,[this])},determineDataLimits:H.noop,afterDataLimits:function(){H.callback(this.options.afterDataLimits,[this])},beforeBuildTicks:function(){H.callback(this.options.beforeBuildTicks,[this])},buildTicks:H.noop,afterBuildTicks:function(t){var e=this;return sn(t)&&t.length?H.callback(e.options.afterBuildTicks,[e,t]):(e.ticks=H.callback(e.options.afterBuildTicks,[e,e.ticks])||e.ticks,t)},beforeTickToLabelConversion:function(){H.callback(this.options.beforeTickToLabelConversion,[this])},convertTicksToLabels:function(){var t=this.options.ticks;this.ticks=this.ticks.map(t.userCallback||t.callback,this)},afterTickToLabelConversion:function(){H.callback(this.options.afterTickToLabelConversion,[this])},beforeCalculateTickRotation:function(){H.callback(this.options.beforeCalculateTickRotation,[this])},calculateTickRotation:function(){var t,e,n,i,a,r,o,s=this,l=s.options,u=l.ticks,d=s.getTicks().length,h=u.minRotation||0,c=u.maxRotation,f=h;!s._isVisible()||!u.display||h>=c||d<=1||!s.isHorizontal()?s.labelRotation=h:(e=(t=s._getLabelSizes()).widest.width,n=t.highest.height-t.highest.offset,i=Math.min(s.maxWidth,s.chart.width-e),e+6>(a=l.offset?s.maxWidth/d:i/(d-1))&&(a=i/(d-(l.offset?.5:1)),r=s.maxHeight-fn(l.gridLines)-u.padding-gn(l.scaleLabel),o=Math.sqrt(e*e+n*n),f=H.toDegrees(Math.min(Math.asin(Math.min((t.highest.height+6)/a,1)),Math.asin(Math.min(r/o,1))-Math.asin(n/o))),f=Math.max(h,Math.min(c,f))),s.labelRotation=f)},afterCalculateTickRotation:function(){H.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){H.callback(this.options.beforeFit,[this])},fit:function(){var t=this,e=t.minSize={width:0,height:0},n=t.chart,i=t.options,a=i.ticks,r=i.scaleLabel,o=i.gridLines,s=t._isVisible(),l="bottom"===i.position,u=t.isHorizontal();if(u?e.width=t.maxWidth:s&&(e.width=fn(o)+gn(r)),u?s&&(e.height=fn(o)+gn(r)):e.height=t.maxHeight,a.display&&s){var d=mn(a),h=t._getLabelSizes(),c=h.first,f=h.last,g=h.widest,p=h.highest,m=.4*d.minor.lineHeight,v=a.padding;if(u){var b=0!==t.labelRotation,x=H.toRadians(t.labelRotation),y=Math.cos(x),_=Math.sin(x),k=_*g.width+y*(p.height-(b?p.offset:0))+(b?0:m);e.height=Math.min(t.maxHeight,e.height+k+v);var w,M,S=t.getPixelForTick(0)-t.left,C=t.right-t.getPixelForTick(t.getTicks().length-1);b?(w=l?y*c.width+_*c.offset:_*(c.height-c.offset),M=l?_*(f.height-f.offset):y*f.width+_*f.offset):(w=c.width/2,M=f.width/2),t.paddingLeft=Math.max((w-S)*t.width/(t.width-S),0)+3,t.paddingRight=Math.max((M-C)*t.width/(t.width-C),0)+3}else{var P=a.mirror?0:g.width+v+m;e.width=Math.min(t.maxWidth,e.width+P),t.paddingTop=c.height/2,t.paddingBottom=f.height/2}}t.handleMargins(),u?(t.width=t._length=n.width-t.margins.left-t.margins.right,t.height=e.height):(t.width=e.width,t.height=t._length=n.height-t.margins.top-t.margins.bottom)},handleMargins:function(){var t=this;t.margins&&(t.margins.left=Math.max(t.paddingLeft,t.margins.left),t.margins.top=Math.max(t.paddingTop,t.margins.top),t.margins.right=Math.max(t.paddingRight,t.margins.right),t.margins.bottom=Math.max(t.paddingBottom,t.margins.bottom))},afterFit:function(){H.callback(this.options.afterFit,[this])},isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(t){if(ln(t))return NaN;if(("number"==typeof t||t instanceof Number)&&!isFinite(t))return NaN;if(t)if(this.isHorizontal()){if(void 0!==t.x)return this.getRightValue(t.x)}else if(void 0!==t.y)return this.getRightValue(t.y);return t},_convertTicksToLabels:function(t){var e,n,i,a=this;for(a.ticks=t.map((function(t){return t.value})),a.beforeTickToLabelConversion(),e=a.convertTicksToLabels(t)||a.ticks,a.afterTickToLabelConversion(),n=0,i=t.length;n<i;++n)t[n].label=e[n];return e},_getLabelSizes:function(){var t=this,e=t._labelSizes;return e||(t._labelSizes=e=cn(t.ctx,mn(t.options.ticks),t.getTicks(),t.longestTextCache),t.longestLabelWidth=e.widest.width),e},_parseValue:function(t){var e,n,i,a;return sn(t)?(e=+this.getRightValue(t[0]),n=+this.getRightValue(t[1]),i=Math.min(e,n),a=Math.max(e,n)):(e=void 0,n=t=+this.getRightValue(t),i=t,a=t),{min:i,max:a,start:e,end:n}},_getScaleLabel:function(t){var e=this._parseValue(t);return void 0!==e.start?"["+e.start+", "+e.end+"]":+this.getRightValue(t)},getLabelForIndex:H.noop,getPixelForValue:H.noop,getValueForPixel:H.noop,getPixelForTick:function(t){var e=this.options.offset,n=this._ticks.length,i=1/Math.max(n-(e?0:1),1);return t<0||t>n-1?null:this.getPixelForDecimal(t*i+(e?i/2:0))},getPixelForDecimal:function(t){return this._reversePixels&&(t=1-t),this._startPixel+t*this._length},getDecimalForPixel:function(t){var e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var t=this.min,e=this.max;return this.beginAtZero?0:t<0&&e<0?e:t>0&&e>0?t:0},_autoSkip:function(t){var e,n,i,a,r=this.options.ticks,o=this._length,s=r.maxTicksLimit||o/this._tickSize()+1,l=r.major.enabled?function(t){var e,n,i=[];for(e=0,n=t.length;e<n;e++)t[e].major&&i.push(e);return i}(t):[],u=l.length,d=l[0],h=l[u-1];if(u>s)return function(t,e,n){var i,a,r=0,o=e[0];for(n=Math.ceil(n),i=0;i<t.length;i++)a=t[i],i===o?(a._index=i,o=e[++r*n]):delete a.label}(t,l,u/s),vn(t);if(i=function(t,e,n,i){var a,r,o,s,l=function(t){var e,n,i=t.length;if(i<2)return!1;for(n=t[0],e=1;e<i;++e)if(t[e]-t[e-1]!==n)return!1;return n}(t),u=(e.length-1)/i;if(!l)return Math.max(u,1);for(o=0,s=(a=H.math._factorize(l)).length-1;o<s;o++)if((r=a[o])>u)return r;return Math.max(u,1)}(l,t,0,s),u>0){for(e=0,n=u-1;e<n;e++)bn(t,i,l[e],l[e+1]);return a=u>1?(h-d)/(u-1):null,bn(t,i,H.isNullOrUndef(a)?0:d-a,d),bn(t,i,h,H.isNullOrUndef(a)?t.length:h+a),vn(t)}return bn(t,i),vn(t)},_tickSize:function(){var t=this.options.ticks,e=H.toRadians(this.labelRotation),n=Math.abs(Math.cos(e)),i=Math.abs(Math.sin(e)),a=this._getLabelSizes(),r=t.autoSkipPadding||0,o=a?a.widest.width+r:0,s=a?a.highest.height+r:0;return this.isHorizontal()?s*n>o*i?o/n:s/i:s*i<o*n?s/n:o/i},_isVisible:function(){var t,e,n,i=this.chart,a=this.options.display;if("auto"!==a)return!!a;for(t=0,e=i.data.datasets.length;t<e;++t)if(i.isDatasetVisible(t)&&((n=i.getDatasetMeta(t)).xAxisID===this.id||n.yAxisID===this.id))return!0;return!1},_computeGridLineItems:function(t){var e,n,i,a,r,o,s,l,u,d,h,c,f,g,p,m,v,b=this,x=b.chart,y=b.options,_=y.gridLines,k=y.position,w=_.offsetGridLines,M=b.isHorizontal(),S=b._ticksToDraw,C=S.length+(w?1:0),P=fn(_),A=[],D=_.drawBorder?dn(_.lineWidth,0,0):0,T=D/2,I=H._alignPixel,F=function(t){return I(x,t,D)};for("top"===k?(e=F(b.bottom),s=b.bottom-P,u=e-T,h=F(t.top)+T,f=t.bottom):"bottom"===k?(e=F(b.top),h=t.top,f=F(t.bottom)-T,s=e+T,u=b.top+P):"left"===k?(e=F(b.right),o=b.right-P,l=e-T,d=F(t.left)+T,c=t.right):(e=F(b.left),d=t.left,c=F(t.right)-T,o=e+T,l=b.left+P),n=0;n<C;++n)i=S[n]||{},ln(i.label)&&n<S.length||(n===b.zeroLineIndex&&y.offset===w?(g=_.zeroLineWidth,p=_.zeroLineColor,m=_.zeroLineBorderDash||[],v=_.zeroLineBorderDashOffset||0):(g=dn(_.lineWidth,n,1),p=dn(_.color,n,"rgba(0,0,0,0.1)"),m=_.borderDash||[],v=_.borderDashOffset||0),void 0!==(a=hn(b,i._index||n,w))&&(r=I(x,a,g),M?o=l=d=c=r:s=u=h=f=r,A.push({tx1:o,ty1:s,tx2:l,ty2:u,x1:d,y1:h,x2:c,y2:f,width:g,color:p,borderDash:m,borderDashOffset:v})));return A.ticksLength=C,A.borderValue=e,A},_computeLabelItems:function(){var t,e,n,i,a,r,o,s,l,u,d,h,c=this,f=c.options,g=f.ticks,p=f.position,m=g.mirror,v=c.isHorizontal(),b=c._ticksToDraw,x=mn(g),y=g.padding,_=fn(f.gridLines),k=-H.toRadians(c.labelRotation),w=[];for("top"===p?(r=c.bottom-_-y,o=k?"left":"center"):"bottom"===p?(r=c.top+_+y,o=k?"right":"center"):"left"===p?(a=c.right-(m?0:_)-y,o=m?"left":"right"):(a=c.left+(m?0:_)+y,o=m?"right":"left"),t=0,e=b.length;t<e;++t)i=(n=b[t]).label,ln(i)||(s=c.getPixelForTick(n._index||t)+g.labelOffset,u=(l=n.major?x.major:x.minor).lineHeight,d=sn(i)?i.length:1,v?(a=s,h="top"===p?((k?1:.5)-d)*u:(k?0:.5)*u):(r=s,h=(1-d)*u/2),w.push({x:a,y:r,rotation:k,label:i,font:l,textOffset:h,textAlign:o}));return w},_drawGrid:function(t){var e=this,n=e.options.gridLines;if(n.display){var i,a,r,o,s,l=e.ctx,u=e.chart,d=H._alignPixel,h=n.drawBorder?dn(n.lineWidth,0,0):0,c=e._gridLineItems||(e._gridLineItems=e._computeGridLineItems(t));for(r=0,o=c.length;r<o;++r)i=(s=c[r]).width,a=s.color,i&&a&&(l.save(),l.lineWidth=i,l.strokeStyle=a,l.setLineDash&&(l.setLineDash(s.borderDash),l.lineDashOffset=s.borderDashOffset),l.beginPath(),n.drawTicks&&(l.moveTo(s.tx1,s.ty1),l.lineTo(s.tx2,s.ty2)),n.drawOnChartArea&&(l.moveTo(s.x1,s.y1),l.lineTo(s.x2,s.y2)),l.stroke(),l.restore());if(h){var f,g,p,m,v=h,b=dn(n.lineWidth,c.ticksLength-1,1),x=c.borderValue;e.isHorizontal()?(f=d(u,e.left,v)-v/2,g=d(u,e.right,b)+b/2,p=m=x):(p=d(u,e.top,v)-v/2,m=d(u,e.bottom,b)+b/2,f=g=x),l.lineWidth=h,l.strokeStyle=dn(n.color,0),l.beginPath(),l.moveTo(f,p),l.lineTo(g,m),l.stroke()}}},_drawLabels:function(){var t=this;if(t.options.ticks.display){var e,n,i,a,r,o,s,l,u=t.ctx,d=t._labelItems||(t._labelItems=t._computeLabelItems());for(e=0,i=d.length;e<i;++e){if(o=(r=d[e]).font,u.save(),u.translate(r.x,r.y),u.rotate(r.rotation),u.font=o.string,u.fillStyle=o.color,u.textBaseline="middle",u.textAlign=r.textAlign,s=r.label,l=r.textOffset,sn(s))for(n=0,a=s.length;n<a;++n)u.fillText(""+s[n],0,l),l+=o.lineHeight;else u.fillText(s,0,l);u.restore()}}},_drawTitle:function(){var t=this,e=t.ctx,n=t.options,i=n.scaleLabel;if(i.display){var a,r,o=un(i.fontColor,N.global.defaultFontColor),s=H.options._parseFont(i),l=H.options.toPadding(i.padding),u=s.lineHeight/2,d=n.position,h=0;if(t.isHorizontal())a=t.left+t.width/2,r="bottom"===d?t.bottom-u-l.bottom:t.top+u+l.top;else{var c="left"===d;a=c?t.left+u+l.top:t.right-u-l.top,r=t.top+t.height/2,h=c?-.5*Math.PI:.5*Math.PI}e.save(),e.translate(a,r),e.rotate(h),e.textAlign="center",e.textBaseline="middle",e.fillStyle=o,e.font=s.string,e.fillText(i.labelString,0,0),e.restore()}},draw:function(t){this._isVisible()&&(this._drawGrid(t),this._drawTitle(),this._drawLabels())},_layers:function(){var t=this,e=t.options,n=e.ticks&&e.ticks.z||0,i=e.gridLines&&e.gridLines.z||0;return t._isVisible()&&n!==i&&t.draw===t._draw?[{z:i,draw:function(){t._drawGrid.apply(t,arguments),t._drawTitle.apply(t,arguments)}},{z:n,draw:function(){t._drawLabels.apply(t,arguments)}}]:[{z:n,draw:function(){t.draw.apply(t,arguments)}}]},_getMatchingVisibleMetas:function(t){var e=this,n=e.isHorizontal();return e.chart._getSortedVisibleDatasetMetas().filter((function(i){return(!t||i.type===t)&&(n?i.xAxisID===e.id:i.yAxisID===e.id)}))}});xn.prototype._draw=xn.prototype.draw;var yn=xn,_n=H.isNullOrUndef,kn=yn.extend({determineDataLimits:function(){var t,e=this,n=e._getLabels(),i=e.options.ticks,a=i.min,r=i.max,o=0,s=n.length-1;void 0!==a&&(t=n.indexOf(a))>=0&&(o=t),void 0!==r&&(t=n.indexOf(r))>=0&&(s=t),e.minIndex=o,e.maxIndex=s,e.min=n[o],e.max=n[s]},buildTicks:function(){var t=this._getLabels(),e=this.minIndex,n=this.maxIndex;this.ticks=0===e&&n===t.length-1?t:t.slice(e,n+1)},getLabelForIndex:function(t,e){var n=this.chart;return n.getDatasetMeta(e).controller._getValueScaleId()===this.id?this.getRightValue(n.data.datasets[e].data[t]):this._getLabels()[t]},_configure:function(){var t=this,e=t.options.offset,n=t.ticks;yn.prototype._configure.call(t),t.isHorizontal()||(t._reversePixels=!t._reversePixels),n&&(t._startValue=t.minIndex-(e?.5:0),t._valueRange=Math.max(n.length-(e?0:1),1))},getPixelForValue:function(t,e,n){var i,a,r,o=this;return _n(e)||_n(n)||(t=o.chart.data.datasets[n].data[e]),_n(t)||(i=o.isHorizontal()?t.x:t.y),(void 0!==i||void 0!==t&&isNaN(e))&&(a=o._getLabels(),t=H.valueOrDefault(i,t),e=-1!==(r=a.indexOf(t))?r:e,isNaN(e)&&(e=t)),o.getPixelForDecimal((e-o._startValue)/o._valueRange)},getPixelForTick:function(t){var e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t],t+this.minIndex)},getValueForPixel:function(t){var e=Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange);return Math.min(Math.max(e,0),this.ticks.length-1)},getBasePixel:function(){return this.bottom}}),wn={position:"bottom"};kn._defaults=wn;var Mn=H.noop,Sn=H.isNullOrUndef;var Cn=yn.extend({getRightValue:function(t){return"string"==typeof t?+t:yn.prototype.getRightValue.call(this,t)},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;if(e.beginAtZero){var n=H.sign(t.min),i=H.sign(t.max);n<0&&i<0?t.max=0:n>0&&i>0&&(t.min=0)}var a=void 0!==e.min||void 0!==e.suggestedMin,r=void 0!==e.max||void 0!==e.suggestedMax;void 0!==e.min?t.min=e.min:void 0!==e.suggestedMin&&(null===t.min?t.min=e.suggestedMin:t.min=Math.min(t.min,e.suggestedMin)),void 0!==e.max?t.max=e.max:void 0!==e.suggestedMax&&(null===t.max?t.max=e.suggestedMax:t.max=Math.max(t.max,e.suggestedMax)),a!==r&&t.min>=t.max&&(a?t.max=t.min+1:t.min=t.max-1),t.min===t.max&&(t.max++,e.beginAtZero||t.min--)},getTickLimit:function(){var t,e=this.options.ticks,n=e.stepSize,i=e.maxTicksLimit;return n?t=Math.ceil(this.max/n)-Math.floor(this.min/n)+1:(t=this._computeTickLimit(),i=i||11),i&&(t=Math.min(i,t)),t},_computeTickLimit:function(){return Number.POSITIVE_INFINITY},handleDirectionalChanges:Mn,buildTicks:function(){var t=this,e=t.options.ticks,n=t.getTickLimit(),i={maxTicks:n=Math.max(2,n),min:e.min,max:e.max,precision:e.precision,stepSize:H.valueOrDefault(e.fixedStepSize,e.stepSize)},a=t.ticks=function(t,e){var n,i,a,r,o=[],s=t.stepSize,l=s||1,u=t.maxTicks-1,d=t.min,h=t.max,c=t.precision,f=e.min,g=e.max,p=H.niceNum((g-f)/u/l)*l;if(p<1e-14&&Sn(d)&&Sn(h))return[f,g];(r=Math.ceil(g/p)-Math.floor(f/p))>u&&(p=H.niceNum(r*p/u/l)*l),s||Sn(c)?n=Math.pow(10,H._decimalPlaces(p)):(n=Math.pow(10,c),p=Math.ceil(p*n)/n),i=Math.floor(f/p)*p,a=Math.ceil(g/p)*p,s&&(!Sn(d)&&H.almostWhole(d/p,p/1e3)&&(i=d),!Sn(h)&&H.almostWhole(h/p,p/1e3)&&(a=h)),r=(a-i)/p,r=H.almostEquals(r,Math.round(r),p/1e3)?Math.round(r):Math.ceil(r),i=Math.round(i*n)/n,a=Math.round(a*n)/n,o.push(Sn(d)?i:d);for(var m=1;m<r;++m)o.push(Math.round((i+m*p)*n)/n);return o.push(Sn(h)?a:h),o}(i,t);t.handleDirectionalChanges(),t.max=H.max(a),t.min=H.min(a),e.reverse?(a.reverse(),t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max)},convertTicksToLabels:function(){var t=this;t.ticksAsNumbers=t.ticks.slice(),t.zeroLineIndex=t.ticks.indexOf(0),yn.prototype.convertTicksToLabels.call(t)},_configure:function(){var t,e=this,n=e.getTicks(),i=e.min,a=e.max;yn.prototype._configure.call(e),e.options.offset&&n.length&&(i-=t=(a-i)/Math.max(n.length-1,1)/2,a+=t),e._startValue=i,e._endValue=a,e._valueRange=a-i}}),Pn={position:"left",ticks:{callback:on.formatters.linear}};function An(t,e,n,i){var a,r,o=t.options,s=function(t,e,n){var i=[n.type,void 0===e&&void 0===n.stack?n.index:"",n.stack].join(".");return void 0===t[i]&&(t[i]={pos:[],neg:[]}),t[i]}(e,o.stacked,n),l=s.pos,u=s.neg,d=i.length;for(a=0;a<d;++a)r=t._parseValue(i[a]),isNaN(r.min)||isNaN(r.max)||n.data[a].hidden||(l[a]=l[a]||0,u[a]=u[a]||0,o.relativePoints?l[a]=100:r.min<0||r.max<0?u[a]+=r.min:l[a]+=r.max)}function Dn(t,e,n){var i,a,r=n.length;for(i=0;i<r;++i)a=t._parseValue(n[i]),isNaN(a.min)||isNaN(a.max)||e.data[i].hidden||(t.min=Math.min(t.min,a.min),t.max=Math.max(t.max,a.max))}var Tn=Cn.extend({determineDataLimits:function(){var t,e,n,i,a=this,r=a.options,o=a.chart.data.datasets,s=a._getMatchingVisibleMetas(),l=r.stacked,u={},d=s.length;if(a.min=Number.POSITIVE_INFINITY,a.max=Number.NEGATIVE_INFINITY,void 0===l)for(t=0;!l&&t<d;++t)l=void 0!==(e=s[t]).stack;for(t=0;t<d;++t)n=o[(e=s[t]).index].data,l?An(a,u,e,n):Dn(a,e,n);H.each(u,(function(t){i=t.pos.concat(t.neg),a.min=Math.min(a.min,H.min(i)),a.max=Math.max(a.max,H.max(i))})),a.min=H.isFinite(a.min)&&!isNaN(a.min)?a.min:0,a.max=H.isFinite(a.max)&&!isNaN(a.max)?a.max:1,a.handleTickRangeOptions()},_computeTickLimit:function(){var t;return this.isHorizontal()?Math.ceil(this.width/40):(t=H.options._parseFont(this.options.ticks),Math.ceil(this.height/t.lineHeight))},handleDirectionalChanges:function(){this.isHorizontal()||this.ticks.reverse()},getLabelForIndex:function(t,e){return this._getScaleLabel(this.chart.data.datasets[e].data[t])},getPixelForValue:function(t){return this.getPixelForDecimal((+this.getRightValue(t)-this._startValue)/this._valueRange)},getValueForPixel:function(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange},getPixelForTick:function(t){var e=this.ticksAsNumbers;return t<0||t>e.length-1?null:this.getPixelForValue(e[t])}}),In=Pn;Tn._defaults=In;var Fn=H.valueOrDefault,On=H.math.log10;var Ln={position:"left",ticks:{callback:on.formatters.logarithmic}};function Rn(t,e){return H.isFinite(t)&&t>=0?t:e}var zn=yn.extend({determineDataLimits:function(){var t,e,n,i,a,r,o=this,s=o.options,l=o.chart,u=l.data.datasets,d=o.isHorizontal();function h(t){return d?t.xAxisID===o.id:t.yAxisID===o.id}o.min=Number.POSITIVE_INFINITY,o.max=Number.NEGATIVE_INFINITY,o.minNotZero=Number.POSITIVE_INFINITY;var c=s.stacked;if(void 0===c)for(t=0;t<u.length;t++)if(e=l.getDatasetMeta(t),l.isDatasetVisible(t)&&h(e)&&void 0!==e.stack){c=!0;break}if(s.stacked||c){var f={};for(t=0;t<u.length;t++){var g=[(e=l.getDatasetMeta(t)).type,void 0===s.stacked&&void 0===e.stack?t:"",e.stack].join(".");if(l.isDatasetVisible(t)&&h(e))for(void 0===f[g]&&(f[g]=[]),a=0,r=(i=u[t].data).length;a<r;a++){var p=f[g];n=o._parseValue(i[a]),isNaN(n.min)||isNaN(n.max)||e.data[a].hidden||n.min<0||n.max<0||(p[a]=p[a]||0,p[a]+=n.max)}}H.each(f,(function(t){if(t.length>0){var e=H.min(t),n=H.max(t);o.min=Math.min(o.min,e),o.max=Math.max(o.max,n)}}))}else for(t=0;t<u.length;t++)if(e=l.getDatasetMeta(t),l.isDatasetVisible(t)&&h(e))for(a=0,r=(i=u[t].data).length;a<r;a++)n=o._parseValue(i[a]),isNaN(n.min)||isNaN(n.max)||e.data[a].hidden||n.min<0||n.max<0||(o.min=Math.min(n.min,o.min),o.max=Math.max(n.max,o.max),0!==n.min&&(o.minNotZero=Math.min(n.min,o.minNotZero)));o.min=H.isFinite(o.min)?o.min:null,o.max=H.isFinite(o.max)?o.max:null,o.minNotZero=H.isFinite(o.minNotZero)?o.minNotZero:null,this.handleTickRangeOptions()},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;t.min=Rn(e.min,t.min),t.max=Rn(e.max,t.max),t.min===t.max&&(0!==t.min&&null!==t.min?(t.min=Math.pow(10,Math.floor(On(t.min))-1),t.max=Math.pow(10,Math.floor(On(t.max))+1)):(t.min=1,t.max=10)),null===t.min&&(t.min=Math.pow(10,Math.floor(On(t.max))-1)),null===t.max&&(t.max=0!==t.min?Math.pow(10,Math.floor(On(t.min))+1):10),null===t.minNotZero&&(t.min>0?t.minNotZero=t.min:t.max<1?t.minNotZero=Math.pow(10,Math.floor(On(t.max))):t.minNotZero=1)},buildTicks:function(){var t=this,e=t.options.ticks,n=!t.isHorizontal(),i={min:Rn(e.min),max:Rn(e.max)},a=t.ticks=function(t,e){var n,i,a=[],r=Fn(t.min,Math.pow(10,Math.floor(On(e.min)))),o=Math.floor(On(e.max)),s=Math.ceil(e.max/Math.pow(10,o));0===r?(n=Math.floor(On(e.minNotZero)),i=Math.floor(e.minNotZero/Math.pow(10,n)),a.push(r),r=i*Math.pow(10,n)):(n=Math.floor(On(r)),i=Math.floor(r/Math.pow(10,n)));var l=n<0?Math.pow(10,Math.abs(n)):1;do{a.push(r),10===++i&&(i=1,l=++n>=0?1:l),r=Math.round(i*Math.pow(10,n)*l)/l}while(n<o||n===o&&i<s);var u=Fn(t.max,r);return a.push(u),a}(i,t);t.max=H.max(a),t.min=H.min(a),e.reverse?(n=!n,t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max),n&&a.reverse()},convertTicksToLabels:function(){this.tickValues=this.ticks.slice(),yn.prototype.convertTicksToLabels.call(this)},getLabelForIndex:function(t,e){return this._getScaleLabel(this.chart.data.datasets[e].data[t])},getPixelForTick:function(t){var e=this.tickValues;return t<0||t>e.length-1?null:this.getPixelForValue(e[t])},_getFirstTickValue:function(t){var e=Math.floor(On(t));return Math.floor(t/Math.pow(10,e))*Math.pow(10,e)},_configure:function(){var t=this,e=t.min,n=0;yn.prototype._configure.call(t),0===e&&(e=t._getFirstTickValue(t.minNotZero),n=Fn(t.options.ticks.fontSize,N.global.defaultFontSize)/t._length),t._startValue=On(e),t._valueOffset=n,t._valueRange=(On(t.max)-On(e))/(1-n)},getPixelForValue:function(t){var e=this,n=0;return(t=+e.getRightValue(t))>e.min&&t>0&&(n=(On(t)-e._startValue)/e._valueRange+e._valueOffset),e.getPixelForDecimal(n)},getValueForPixel:function(t){var e=this,n=e.getDecimalForPixel(t);return 0===n&&0===e.min?0:Math.pow(10,e._startValue+(n-e._valueOffset)*e._valueRange)}}),Nn=Ln;zn._defaults=Nn;var Bn=H.valueOrDefault,En=H.valueAtIndexOrDefault,Wn=H.options.resolve,Vn={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,borderDash:[],borderDashOffset:0},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:on.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(t){return t}}};function Hn(t){var e=t.ticks;return e.display&&t.display?Bn(e.fontSize,N.global.defaultFontSize)+2*e.backdropPaddingY:0}function jn(t,e,n,i,a){return t===i||t===a?{start:e-n/2,end:e+n/2}:t<i||t>a?{start:e-n,end:e}:{start:e,end:e+n}}function qn(t){return 0===t||180===t?"center":t<180?"left":"right"}function Un(t,e,n,i){var a,r,o=n.y+i/2;if(H.isArray(e))for(a=0,r=e.length;a<r;++a)t.fillText(e[a],n.x,o),o+=i;else t.fillText(e,n.x,o)}function Yn(t,e,n){90===t||270===t?n.y-=e.h/2:(t>270||t<90)&&(n.y-=e.h)}function Gn(t){return H.isNumber(t)?t:0}var Xn=Cn.extend({setDimensions:function(){var t=this;t.width=t.maxWidth,t.height=t.maxHeight,t.paddingTop=Hn(t.options)/2,t.xCenter=Math.floor(t.width/2),t.yCenter=Math.floor((t.height-t.paddingTop)/2),t.drawingArea=Math.min(t.height-t.paddingTop,t.width)/2},determineDataLimits:function(){var t=this,e=t.chart,n=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;H.each(e.data.datasets,(function(a,r){if(e.isDatasetVisible(r)){var o=e.getDatasetMeta(r);H.each(a.data,(function(e,a){var r=+t.getRightValue(e);isNaN(r)||o.data[a].hidden||(n=Math.min(r,n),i=Math.max(r,i))}))}})),t.min=n===Number.POSITIVE_INFINITY?0:n,t.max=i===Number.NEGATIVE_INFINITY?0:i,t.handleTickRangeOptions()},_computeTickLimit:function(){return Math.ceil(this.drawingArea/Hn(this.options))},convertTicksToLabels:function(){var t=this;Cn.prototype.convertTicksToLabels.call(t),t.pointLabels=t.chart.data.labels.map((function(){var e=H.callback(t.options.pointLabels.callback,arguments,t);return e||0===e?e:""}))},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},fit:function(){var t=this.options;t.display&&t.pointLabels.display?function(t){var e,n,i,a=H.options._parseFont(t.options.pointLabels),r={l:0,r:t.width,t:0,b:t.height-t.paddingTop},o={};t.ctx.font=a.string,t._pointLabelSizes=[];var s,l,u,d=t.chart.data.labels.length;for(e=0;e<d;e++){i=t.getPointPosition(e,t.drawingArea+5),s=t.ctx,l=a.lineHeight,u=t.pointLabels[e],n=H.isArray(u)?{w:H.longestText(s,s.font,u),h:u.length*l}:{w:s.measureText(u).width,h:l},t._pointLabelSizes[e]=n;var h=t.getIndexAngle(e),c=H.toDegrees(h)%360,f=jn(c,i.x,n.w,0,180),g=jn(c,i.y,n.h,90,270);f.start<r.l&&(r.l=f.start,o.l=h),f.end>r.r&&(r.r=f.end,o.r=h),g.start<r.t&&(r.t=g.start,o.t=h),g.end>r.b&&(r.b=g.end,o.b=h)}t.setReductions(t.drawingArea,r,o)}(this):this.setCenterPoint(0,0,0,0)},setReductions:function(t,e,n){var i=this,a=e.l/Math.sin(n.l),r=Math.max(e.r-i.width,0)/Math.sin(n.r),o=-e.t/Math.cos(n.t),s=-Math.max(e.b-(i.height-i.paddingTop),0)/Math.cos(n.b);a=Gn(a),r=Gn(r),o=Gn(o),s=Gn(s),i.drawingArea=Math.min(Math.floor(t-(a+r)/2),Math.floor(t-(o+s)/2)),i.setCenterPoint(a,r,o,s)},setCenterPoint:function(t,e,n,i){var a=this,r=a.width-e-a.drawingArea,o=t+a.drawingArea,s=n+a.drawingArea,l=a.height-a.paddingTop-i-a.drawingArea;a.xCenter=Math.floor((o+r)/2+a.left),a.yCenter=Math.floor((s+l)/2+a.top+a.paddingTop)},getIndexAngle:function(t){var e=this.chart,n=(t*(360/e.data.labels.length)+((e.options||{}).startAngle||0))%360;return(n<0?n+360:n)*Math.PI*2/360},getDistanceFromCenterForValue:function(t){var e=this;if(H.isNullOrUndef(t))return NaN;var n=e.drawingArea/(e.max-e.min);return e.options.ticks.reverse?(e.max-t)*n:(t-e.min)*n},getPointPosition:function(t,e){var n=this.getIndexAngle(t)-Math.PI/2;return{x:Math.cos(n)*e+this.xCenter,y:Math.sin(n)*e+this.yCenter}},getPointPositionForValue:function(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))},getBasePosition:function(t){var e=this.min,n=this.max;return this.getPointPositionForValue(t||0,this.beginAtZero?0:e<0&&n<0?n:e>0&&n>0?e:0)},_drawGrid:function(){var t,e,n,i=this,a=i.ctx,r=i.options,o=r.gridLines,s=r.angleLines,l=Bn(s.lineWidth,o.lineWidth),u=Bn(s.color,o.color);if(r.pointLabels.display&&function(t){var e=t.ctx,n=t.options,i=n.pointLabels,a=Hn(n),r=t.getDistanceFromCenterForValue(n.ticks.reverse?t.min:t.max),o=H.options._parseFont(i);e.save(),e.font=o.string,e.textBaseline="middle";for(var s=t.chart.data.labels.length-1;s>=0;s--){var l=0===s?a/2:0,u=t.getPointPosition(s,r+l+5),d=En(i.fontColor,s,N.global.defaultFontColor);e.fillStyle=d;var h=t.getIndexAngle(s),c=H.toDegrees(h);e.textAlign=qn(c),Yn(c,t._pointLabelSizes[s],u),Un(e,t.pointLabels[s],u,o.lineHeight)}e.restore()}(i),o.display&&H.each(i.ticks,(function(t,n){0!==n&&(e=i.getDistanceFromCenterForValue(i.ticksAsNumbers[n]),function(t,e,n,i){var a,r=t.ctx,o=e.circular,s=t.chart.data.labels.length,l=En(e.color,i-1),u=En(e.lineWidth,i-1);if((o||s)&&l&&u){if(r.save(),r.strokeStyle=l,r.lineWidth=u,r.setLineDash&&(r.setLineDash(e.borderDash||[]),r.lineDashOffset=e.borderDashOffset||0),r.beginPath(),o)r.arc(t.xCenter,t.yCenter,n,0,2*Math.PI);else{a=t.getPointPosition(0,n),r.moveTo(a.x,a.y);for(var d=1;d<s;d++)a=t.getPointPosition(d,n),r.lineTo(a.x,a.y)}r.closePath(),r.stroke(),r.restore()}}(i,o,e,n))})),s.display&&l&&u){for(a.save(),a.lineWidth=l,a.strokeStyle=u,a.setLineDash&&(a.setLineDash(Wn([s.borderDash,o.borderDash,[]])),a.lineDashOffset=Wn([s.borderDashOffset,o.borderDashOffset,0])),t=i.chart.data.labels.length-1;t>=0;t--)e=i.getDistanceFromCenterForValue(r.ticks.reverse?i.min:i.max),n=i.getPointPosition(t,e),a.beginPath(),a.moveTo(i.xCenter,i.yCenter),a.lineTo(n.x,n.y),a.stroke();a.restore()}},_drawLabels:function(){var t=this,e=t.ctx,n=t.options.ticks;if(n.display){var i,a,r=t.getIndexAngle(0),o=H.options._parseFont(n),s=Bn(n.fontColor,N.global.defaultFontColor);e.save(),e.font=o.string,e.translate(t.xCenter,t.yCenter),e.rotate(r),e.textAlign="center",e.textBaseline="middle",H.each(t.ticks,(function(r,l){(0!==l||n.reverse)&&(i=t.getDistanceFromCenterForValue(t.ticksAsNumbers[l]),n.showLabelBackdrop&&(a=e.measureText(r).width,e.fillStyle=n.backdropColor,e.fillRect(-a/2-n.backdropPaddingX,-i-o.size/2-n.backdropPaddingY,a+2*n.backdropPaddingX,o.size+2*n.backdropPaddingY)),e.fillStyle=s,e.fillText(r,0,-i))})),e.restore()}},_drawTitle:H.noop}),Kn=Vn;Xn._defaults=Kn;var Zn=H._deprecated,$n=H.options.resolve,Jn=H.valueOrDefault,Qn=Number.MIN_SAFE_INTEGER||-9007199254740991,ti=Number.MAX_SAFE_INTEGER||9007199254740991,ei={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},ni=Object.keys(ei);function ii(t,e){return t-e}function ai(t){return H.valueOrDefault(t.time.min,t.ticks.min)}function ri(t){return H.valueOrDefault(t.time.max,t.ticks.max)}function oi(t,e,n,i){var a=function(t,e,n){for(var i,a,r,o=0,s=t.length-1;o>=0&&o<=s;){if(a=t[(i=o+s>>1)-1]||null,r=t[i],!a)return{lo:null,hi:r};if(r[e]<n)o=i+1;else{if(!(a[e]>n))return{lo:a,hi:r};s=i-1}}return{lo:r,hi:null}}(t,e,n),r=a.lo?a.hi?a.lo:t[t.length-2]:t[0],o=a.lo?a.hi?a.hi:t[t.length-1]:t[1],s=o[e]-r[e],l=s?(n-r[e])/s:0,u=(o[i]-r[i])*l;return r[i]+u}function si(t,e){var n=t._adapter,i=t.options.time,a=i.parser,r=a||i.format,o=e;return"function"==typeof a&&(o=a(o)),H.isFinite(o)||(o="string"==typeof r?n.parse(o,r):n.parse(o)),null!==o?+o:(a||"function"!=typeof r||(o=r(e),H.isFinite(o)||(o=n.parse(o))),o)}function li(t,e){if(H.isNullOrUndef(e))return null;var n=t.options.time,i=si(t,t.getRightValue(e));return null===i?i:(n.round&&(i=+t._adapter.startOf(i,n.round)),i)}function ui(t,e,n,i){var a,r,o,s=ni.length;for(a=ni.indexOf(t);a<s-1;++a)if(o=(r=ei[ni[a]]).steps?r.steps:ti,r.common&&Math.ceil((n-e)/(o*r.size))<=i)return ni[a];return ni[s-1]}function di(t,e,n){var i,a,r=[],o={},s=e.length;for(i=0;i<s;++i)o[a=e[i]]=i,r.push({value:a,major:!1});return 0!==s&&n?function(t,e,n,i){var a,r,o=t._adapter,s=+o.startOf(e[0].value,i),l=e[e.length-1].value;for(a=s;a<=l;a=+o.add(a,1,i))(r=n[a])>=0&&(e[r].major=!0);return e}(t,r,o,n):r}var hi=yn.extend({initialize:function(){this.mergeTicksOptions(),yn.prototype.initialize.call(this)},update:function(){var t=this,e=t.options,n=e.time||(e.time={}),i=t._adapter=new rn._date(e.adapters.date);return Zn("time scale",n.format,"time.format","time.parser"),Zn("time scale",n.min,"time.min","ticks.min"),Zn("time scale",n.max,"time.max","ticks.max"),H.mergeIf(n.displayFormats,i.formats()),yn.prototype.update.apply(t,arguments)},getRightValue:function(t){return t&&void 0!==t.t&&(t=t.t),yn.prototype.getRightValue.call(this,t)},determineDataLimits:function(){var t,e,n,i,a,r,o,s=this,l=s.chart,u=s._adapter,d=s.options,h=d.time.unit||"day",c=ti,f=Qn,g=[],p=[],m=[],v=s._getLabels();for(t=0,n=v.length;t<n;++t)m.push(li(s,v[t]));for(t=0,n=(l.data.datasets||[]).length;t<n;++t)if(l.isDatasetVisible(t))if(a=l.data.datasets[t].data,H.isObject(a[0]))for(p[t]=[],e=0,i=a.length;e<i;++e)r=li(s,a[e]),g.push(r),p[t][e]=r;else p[t]=m.slice(0),o||(g=g.concat(m),o=!0);else p[t]=[];m.length&&(c=Math.min(c,m[0]),f=Math.max(f,m[m.length-1])),g.length&&(g=n>1?function(t){var e,n,i,a={},r=[];for(e=0,n=t.length;e<n;++e)a[i=t[e]]||(a[i]=!0,r.push(i));return r}(g).sort(ii):g.sort(ii),c=Math.min(c,g[0]),f=Math.max(f,g[g.length-1])),c=li(s,ai(d))||c,f=li(s,ri(d))||f,c=c===ti?+u.startOf(Date.now(),h):c,f=f===Qn?+u.endOf(Date.now(),h)+1:f,s.min=Math.min(c,f),s.max=Math.max(c+1,f),s._table=[],s._timestamps={data:g,datasets:p,labels:m}},buildTicks:function(){var t,e,n,i=this,a=i.min,r=i.max,o=i.options,s=o.ticks,l=o.time,u=i._timestamps,d=[],h=i.getLabelCapacity(a),c=s.source,f=o.distribution;for(u="data"===c||"auto"===c&&"series"===f?u.data:"labels"===c?u.labels:function(t,e,n,i){var a,r=t._adapter,o=t.options,s=o.time,l=s.unit||ui(s.minUnit,e,n,i),u=$n([s.stepSize,s.unitStepSize,1]),d="week"===l&&s.isoWeekday,h=e,c=[];if(d&&(h=+r.startOf(h,"isoWeek",d)),h=+r.startOf(h,d?"day":l),r.diff(n,e,l)>1e5*u)throw e+" and "+n+" are too far apart with stepSize of "+u+" "+l;for(a=h;a<n;a=+r.add(a,u,l))c.push(a);return a!==n&&"ticks"!==o.bounds||c.push(a),c}(i,a,r,h),"ticks"===o.bounds&&u.length&&(a=u[0],r=u[u.length-1]),a=li(i,ai(o))||a,r=li(i,ri(o))||r,t=0,e=u.length;t<e;++t)(n=u[t])>=a&&n<=r&&d.push(n);return i.min=a,i.max=r,i._unit=l.unit||(s.autoSkip?ui(l.minUnit,i.min,i.max,h):function(t,e,n,i,a){var r,o;for(r=ni.length-1;r>=ni.indexOf(n);r--)if(o=ni[r],ei[o].common&&t._adapter.diff(a,i,o)>=e-1)return o;return ni[n?ni.indexOf(n):0]}(i,d.length,l.minUnit,i.min,i.max)),i._majorUnit=s.major.enabled&&"year"!==i._unit?function(t){for(var e=ni.indexOf(t)+1,n=ni.length;e<n;++e)if(ei[ni[e]].common)return ni[e]}(i._unit):void 0,i._table=function(t,e,n,i){if("linear"===i||!t.length)return[{time:e,pos:0},{time:n,pos:1}];var a,r,o,s,l,u=[],d=[e];for(a=0,r=t.length;a<r;++a)(s=t[a])>e&&s<n&&d.push(s);for(d.push(n),a=0,r=d.length;a<r;++a)l=d[a+1],o=d[a-1],s=d[a],void 0!==o&&void 0!==l&&Math.round((l+o)/2)===s||u.push({time:s,pos:a/(r-1)});return u}(i._timestamps.data,a,r,f),i._offsets=function(t,e,n,i,a){var r,o,s=0,l=0;return a.offset&&e.length&&(r=oi(t,"time",e[0],"pos"),s=1===e.length?1-r:(oi(t,"time",e[1],"pos")-r)/2,o=oi(t,"time",e[e.length-1],"pos"),l=1===e.length?o:(o-oi(t,"time",e[e.length-2],"pos"))/2),{start:s,end:l,factor:1/(s+1+l)}}(i._table,d,0,0,o),s.reverse&&d.reverse(),di(i,d,i._majorUnit)},getLabelForIndex:function(t,e){var n=this,i=n._adapter,a=n.chart.data,r=n.options.time,o=a.labels&&t<a.labels.length?a.labels[t]:"",s=a.datasets[e].data[t];return H.isObject(s)&&(o=n.getRightValue(s)),r.tooltipFormat?i.format(si(n,o),r.tooltipFormat):"string"==typeof o?o:i.format(si(n,o),r.displayFormats.datetime)},tickFormatFunction:function(t,e,n,i){var a=this._adapter,r=this.options,o=r.time.displayFormats,s=o[this._unit],l=this._majorUnit,u=o[l],d=n[e],h=r.ticks,c=l&&u&&d&&d.major,f=a.format(t,i||(c?u:s)),g=c?h.major:h.minor,p=$n([g.callback,g.userCallback,h.callback,h.userCallback]);return p?p(f,e,n):f},convertTicksToLabels:function(t){var e,n,i=[];for(e=0,n=t.length;e<n;++e)i.push(this.tickFormatFunction(t[e].value,e,t));return i},getPixelForOffset:function(t){var e=this._offsets,n=oi(this._table,"time",t,"pos");return this.getPixelForDecimal((e.start+n)*e.factor)},getPixelForValue:function(t,e,n){var i=null;if(void 0!==e&&void 0!==n&&(i=this._timestamps.datasets[n][e]),null===i&&(i=li(this,t)),null!==i)return this.getPixelForOffset(i)},getPixelForTick:function(t){var e=this.getTicks();return t>=0&&t<e.length?this.getPixelForOffset(e[t].value):null},getValueForPixel:function(t){var e=this._offsets,n=this.getDecimalForPixel(t)/e.factor-e.end,i=oi(this._table,"pos",n,"time");return this._adapter._create(i)},_getLabelSize:function(t){var e=this.options.ticks,n=this.ctx.measureText(t).width,i=H.toRadians(this.isHorizontal()?e.maxRotation:e.minRotation),a=Math.cos(i),r=Math.sin(i),o=Jn(e.fontSize,N.global.defaultFontSize);return{w:n*a+o*r,h:n*r+o*a}},getLabelWidth:function(t){return this._getLabelSize(t).w},getLabelCapacity:function(t){var e=this,n=e.options.time,i=n.displayFormats,a=i[n.unit]||i.millisecond,r=e.tickFormatFunction(t,0,di(e,[t],e._majorUnit),a),o=e._getLabelSize(r),s=Math.floor(e.isHorizontal()?e.width/o.w:e.height/o.h);return e.options.offset&&s--,s>0?s:1}}),ci={position:"bottom",distribution:"linear",bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{autoSkip:!1,source:"auto",major:{enabled:!1}}};hi._defaults=ci;var fi={category:kn,linear:Tn,logarithmic:zn,radialLinear:Xn,time:hi},gi={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};rn._date.override("function"==typeof t?{_id:"moment",formats:function(){return gi},parse:function(e,n){return"string"==typeof e&&"string"==typeof n?e=t(e,n):e instanceof t||(e=t(e)),e.isValid()?e.valueOf():null},format:function(e,n){return t(e).format(n)},add:function(e,n,i){return t(e).add(n,i).valueOf()},diff:function(e,n,i){return t(e).diff(t(n),i)},startOf:function(e,n,i){return e=t(e),"isoWeek"===n?e.isoWeekday(i).valueOf():e.startOf(n).valueOf()},endOf:function(e,n){return t(e).endOf(n).valueOf()},_create:function(e){return t(e)}}:{}),N._set("global",{plugins:{filler:{propagate:!0}}});var pi={dataset:function(t){var e=t.fill,n=t.chart,i=n.getDatasetMeta(e),a=i&&n.isDatasetVisible(e)&&i.dataset._children||[],r=a.length||0;return r?function(t,e){return e<r&&a[e]._view||null}:null},boundary:function(t){var e=t.boundary,n=e?e.x:null,i=e?e.y:null;return H.isArray(e)?function(t,n){return e[n]}:function(t){return{x:null===n?t.x:n,y:null===i?t.y:i}}}};function mi(t,e,n){var i,a=t._model||{},r=a.fill;if(void 0===r&&(r=!!a.backgroundColor),!1===r||null===r)return!1;if(!0===r)return"origin";if(i=parseFloat(r,10),isFinite(i)&&Math.floor(i)===i)return"-"!==r[0]&&"+"!==r[0]||(i=e+i),!(i===e||i<0||i>=n)&&i;switch(r){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return r;default:return!1}}function vi(t){return(t.el._scale||{}).getPointPositionForValue?function(t){var e,n,i,a,r,o=t.el._scale,s=o.options,l=o.chart.data.labels.length,u=t.fill,d=[];if(!l)return null;for(e=s.ticks.reverse?o.max:o.min,n=s.ticks.reverse?o.min:o.max,i=o.getPointPositionForValue(0,e),a=0;a<l;++a)r="start"===u||"end"===u?o.getPointPositionForValue(a,"start"===u?e:n):o.getBasePosition(a),s.gridLines.circular&&(r.cx=i.x,r.cy=i.y,r.angle=o.getIndexAngle(a)-Math.PI/2),d.push(r);return d}(t):function(t){var e,n=t.el._model||{},i=t.el._scale||{},a=t.fill,r=null;if(isFinite(a))return null;if("start"===a?r=void 0===n.scaleBottom?i.bottom:n.scaleBottom:"end"===a?r=void 0===n.scaleTop?i.top:n.scaleTop:void 0!==n.scaleZero?r=n.scaleZero:i.getBasePixel&&(r=i.getBasePixel()),null!=r){if(void 0!==r.x&&void 0!==r.y)return r;if(H.isFinite(r))return{x:(e=i.isHorizontal())?r:null,y:e?null:r}}return null}(t)}function bi(t,e,n){var i,a=t[e].fill,r=[e];if(!n)return a;for(;!1!==a&&-1===r.indexOf(a);){if(!isFinite(a))return a;if(!(i=t[a]))return!1;if(i.visible)return a;r.push(a),a=i.fill}return!1}function xi(t){var e=t.fill,n="dataset";return!1===e?null:(isFinite(e)||(n="boundary"),pi[n](t))}function yi(t){return t&&!t.skip}function _i(t,e,n,i,a){var r,o,s,l;if(i&&a){for(t.moveTo(e[0].x,e[0].y),r=1;r<i;++r)H.canvas.lineTo(t,e[r-1],e[r]);if(void 0===n[0].angle)for(t.lineTo(n[a-1].x,n[a-1].y),r=a-1;r>0;--r)H.canvas.lineTo(t,n[r],n[r-1],!0);else for(o=n[0].cx,s=n[0].cy,l=Math.sqrt(Math.pow(n[0].x-o,2)+Math.pow(n[0].y-s,2)),r=a-1;r>0;--r)t.arc(o,s,l,n[r].angle,n[r-1].angle,!0)}}function ki(t,e,n,i,a,r){var o,s,l,u,d,h,c,f,g=e.length,p=i.spanGaps,m=[],v=[],b=0,x=0;for(t.beginPath(),o=0,s=g;o<s;++o)d=n(u=e[l=o%g]._view,l,i),h=yi(u),c=yi(d),r&&void 0===f&&h&&(s=g+(f=o+1)),h&&c?(b=m.push(u),x=v.push(d)):b&&x&&(p?(h&&m.push(u),c&&v.push(d)):(_i(t,m,v,b,x),b=x=0,m=[],v=[]));_i(t,m,v,b,x),t.closePath(),t.fillStyle=a,t.fill()}var wi={id:"filler",afterDatasetsUpdate:function(t,e){var n,i,a,r,o=(t.data.datasets||[]).length,s=e.propagate,l=[];for(i=0;i<o;++i)r=null,(a=(n=t.getDatasetMeta(i)).dataset)&&a._model&&a instanceof kt.Line&&(r={visible:t.isDatasetVisible(i),fill:mi(a,i,o),chart:t,el:a}),n.$filler=r,l.push(r);for(i=0;i<o;++i)(r=l[i])&&(r.fill=bi(l,i,s),r.boundary=vi(r),r.mapper=xi(r))},beforeDatasetsDraw:function(t){var e,n,i,a,r,o,s,l=t._getSortedVisibleDatasetMetas(),u=t.ctx;for(n=l.length-1;n>=0;--n)(e=l[n].$filler)&&e.visible&&(a=(i=e.el)._view,r=i._children||[],o=e.mapper,s=a.backgroundColor||N.global.defaultColor,o&&s&&r.length&&(H.canvas.clipArea(u,t.chartArea),ki(u,r,o,a,s,i._loop),H.canvas.unclipArea(u)))}},Mi=H.rtl.getRtlAdapter,Si=H.noop,Ci=H.valueOrDefault;function Pi(t,e){return t.usePointStyle&&t.boxWidth>e?e:t.boxWidth}N._set("global",{legend:{display:!0,position:"top",align:"center",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(t,e){var n=e.datasetIndex,i=this.chart,a=i.getDatasetMeta(n);a.hidden=null===a.hidden?!i.data.datasets[n].hidden:null,i.update()},onHover:null,onLeave:null,labels:{boxWidth:40,padding:10,generateLabels:function(t){var e=t.data.datasets,n=t.options.legend||{},i=n.labels&&n.labels.usePointStyle;return t._getSortedDatasetMetas().map((function(n){var a=n.controller.getStyle(i?0:void 0);return{text:e[n.index].label,fillStyle:a.backgroundColor,hidden:!t.isDatasetVisible(n.index),lineCap:a.borderCapStyle,lineDash:a.borderDash,lineDashOffset:a.borderDashOffset,lineJoin:a.borderJoinStyle,lineWidth:a.borderWidth,strokeStyle:a.borderColor,pointStyle:a.pointStyle,rotation:a.rotation,datasetIndex:n.index}}),this)}}},legendCallback:function(t){var e,n,i,a=document.createElement("ul"),r=t.data.datasets;for(a.setAttribute("class",t.id+"-legend"),e=0,n=r.length;e<n;e++)(i=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=r[e].backgroundColor,r[e].label&&i.appendChild(document.createTextNode(r[e].label));return a.outerHTML}});var Ai=K.extend({initialize:function(t){H.extend(this,t),this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1},beforeUpdate:Si,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:Si,beforeSetDimensions:Si,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:Si,beforeBuildLabels:Si,buildLabels:function(){var t=this,e=t.options.labels||{},n=H.callback(e.generateLabels,[t.chart],t)||[];e.filter&&(n=n.filter((function(n){return e.filter(n,t.chart.data)}))),t.options.reverse&&n.reverse(),t.legendItems=n},afterBuildLabels:Si,beforeFit:Si,fit:function(){var t=this,e=t.options,n=e.labels,i=e.display,a=t.ctx,r=H.options._parseFont(n),o=r.size,s=t.legendHitBoxes=[],l=t.minSize,u=t.isHorizontal();if(u?(l.width=t.maxWidth,l.height=i?10:0):(l.width=i?10:0,l.height=t.maxHeight),i){if(a.font=r.string,u){var d=t.lineWidths=[0],h=0;a.textAlign="left",a.textBaseline="middle",H.each(t.legendItems,(function(t,e){var i=Pi(n,o)+o/2+a.measureText(t.text).width;(0===e||d[d.length-1]+i+2*n.padding>l.width)&&(h+=o+n.padding,d[d.length-(e>0?0:1)]=0),s[e]={left:0,top:0,width:i,height:o},d[d.length-1]+=i+n.padding})),l.height+=h}else{var c=n.padding,f=t.columnWidths=[],g=t.columnHeights=[],p=n.padding,m=0,v=0;H.each(t.legendItems,(function(t,e){var i=Pi(n,o)+o/2+a.measureText(t.text).width;e>0&&v+o+2*c>l.height&&(p+=m+n.padding,f.push(m),g.push(v),m=0,v=0),m=Math.max(m,i),v+=o+c,s[e]={left:0,top:0,width:i,height:o}})),p+=m,f.push(m),g.push(v),l.width+=p}t.width=l.width,t.height=l.height}else t.width=l.width=t.height=l.height=0},afterFit:Si,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var t=this,e=t.options,n=e.labels,i=N.global,a=i.defaultColor,r=i.elements.line,o=t.height,s=t.columnHeights,l=t.width,u=t.lineWidths;if(e.display){var d,h=Mi(e.rtl,t.left,t.minSize.width),c=t.ctx,f=Ci(n.fontColor,i.defaultFontColor),g=H.options._parseFont(n),p=g.size;c.textAlign=h.textAlign("left"),c.textBaseline="middle",c.lineWidth=.5,c.strokeStyle=f,c.fillStyle=f,c.font=g.string;var m=Pi(n,p),v=t.legendHitBoxes,b=function(t,i){switch(e.align){case"start":return n.padding;case"end":return t-i;default:return(t-i+n.padding)/2}},x=t.isHorizontal();d=x?{x:t.left+b(l,u[0]),y:t.top+n.padding,line:0}:{x:t.left+n.padding,y:t.top+b(o,s[0]),line:0},H.rtl.overrideTextDirection(t.ctx,e.textDirection);var y=p+n.padding;H.each(t.legendItems,(function(e,i){var f=c.measureText(e.text).width,g=m+p/2+f,_=d.x,k=d.y;h.setWidth(t.minSize.width),x?i>0&&_+g+n.padding>t.left+t.minSize.width&&(k=d.y+=y,d.line++,_=d.x=t.left+b(l,u[d.line])):i>0&&k+y>t.top+t.minSize.height&&(_=d.x=_+t.columnWidths[d.line]+n.padding,d.line++,k=d.y=t.top+b(o,s[d.line]));var w=h.x(_);!function(t,e,i){if(!(isNaN(m)||m<=0)){c.save();var o=Ci(i.lineWidth,r.borderWidth);if(c.fillStyle=Ci(i.fillStyle,a),c.lineCap=Ci(i.lineCap,r.borderCapStyle),c.lineDashOffset=Ci(i.lineDashOffset,r.borderDashOffset),c.lineJoin=Ci(i.lineJoin,r.borderJoinStyle),c.lineWidth=o,c.strokeStyle=Ci(i.strokeStyle,a),c.setLineDash&&c.setLineDash(Ci(i.lineDash,r.borderDash)),n&&n.usePointStyle){var s=m*Math.SQRT2/2,l=h.xPlus(t,m/2),u=e+p/2;H.canvas.drawPoint(c,i.pointStyle,s,l,u,i.rotation)}else c.fillRect(h.leftForLtr(t,m),e,m,p),0!==o&&c.strokeRect(h.leftForLtr(t,m),e,m,p);c.restore()}}(w,k,e),v[i].left=h.leftForLtr(w,v[i].width),v[i].top=k,function(t,e,n,i){var a=p/2,r=h.xPlus(t,m+a),o=e+a;c.fillText(n.text,r,o),n.hidden&&(c.beginPath(),c.lineWidth=2,c.moveTo(r,o),c.lineTo(h.xPlus(r,i),o),c.stroke())}(w,k,e,f),x?d.x+=g+n.padding:d.y+=y})),H.rtl.restoreTextDirection(t.ctx,e.textDirection)}},_getLegendItemAt:function(t,e){var n,i,a,r=this;if(t>=r.left&&t<=r.right&&e>=r.top&&e<=r.bottom)for(a=r.legendHitBoxes,n=0;n<a.length;++n)if(t>=(i=a[n]).left&&t<=i.left+i.width&&e>=i.top&&e<=i.top+i.height)return r.legendItems[n];return null},handleEvent:function(t){var e,n=this,i=n.options,a="mouseup"===t.type?"click":t.type;if("mousemove"===a){if(!i.onHover&&!i.onLeave)return}else{if("click"!==a)return;if(!i.onClick)return}e=n._getLegendItemAt(t.x,t.y),"click"===a?e&&i.onClick&&i.onClick.call(n,t.native,e):(i.onLeave&&e!==n._hoveredItem&&(n._hoveredItem&&i.onLeave.call(n,t.native,n._hoveredItem),n._hoveredItem=e),i.onHover&&e&&i.onHover.call(n,t.native,e))}});function Di(t,e){var n=new Ai({ctx:t.ctx,options:e,chart:t});pe.configure(t,n,e),pe.addBox(t,n),t.legend=n}var Ti={id:"legend",_element:Ai,beforeInit:function(t){var e=t.options.legend;e&&Di(t,e)},beforeUpdate:function(t){var e=t.options.legend,n=t.legend;e?(H.mergeIf(e,N.global.legend),n?(pe.configure(t,n,e),n.options=e):Di(t,e)):n&&(pe.removeBox(t,n),delete t.legend)},afterEvent:function(t,e){var n=t.legend;n&&n.handleEvent(e)}},Ii=H.noop;N._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,padding:10,position:"top",text:"",weight:2e3}});var Fi=K.extend({initialize:function(t){H.extend(this,t),this.legendHitBoxes=[]},beforeUpdate:Ii,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:Ii,beforeSetDimensions:Ii,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:Ii,beforeBuildLabels:Ii,buildLabels:Ii,afterBuildLabels:Ii,beforeFit:Ii,fit:function(){var t,e=this,n=e.options,i=e.minSize={},a=e.isHorizontal();n.display?(t=(H.isArray(n.text)?n.text.length:1)*H.options._parseFont(n).lineHeight+2*n.padding,e.width=i.width=a?e.maxWidth:t,e.height=i.height=a?t:e.maxHeight):e.width=i.width=e.height=i.height=0},afterFit:Ii,isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},draw:function(){var t=this,e=t.ctx,n=t.options;if(n.display){var i,a,r,o=H.options._parseFont(n),s=o.lineHeight,l=s/2+n.padding,u=0,d=t.top,h=t.left,c=t.bottom,f=t.right;e.fillStyle=H.valueOrDefault(n.fontColor,N.global.defaultFontColor),e.font=o.string,t.isHorizontal()?(a=h+(f-h)/2,r=d+l,i=f-h):(a="left"===n.position?h+l:f-l,r=d+(c-d)/2,i=c-d,u=Math.PI*("left"===n.position?-.5:.5)),e.save(),e.translate(a,r),e.rotate(u),e.textAlign="center",e.textBaseline="middle";var g=n.text;if(H.isArray(g))for(var p=0,m=0;m<g.length;++m)e.fillText(g[m],0,p,i),p+=s;else e.fillText(g,0,0,i);e.restore()}}});function Oi(t,e){var n=new Fi({ctx:t.ctx,options:e,chart:t});pe.configure(t,n,e),pe.addBox(t,n),t.titleBlock=n}var Li={},Ri=wi,zi=Ti,Ni={id:"title",_element:Fi,beforeInit:function(t){var e=t.options.title;e&&Oi(t,e)},beforeUpdate:function(t){var e=t.options.title,n=t.titleBlock;e?(H.mergeIf(e,N.global.title),n?(pe.configure(t,n,e),n.options=e):Oi(t,e)):n&&(pe.removeBox(t,n),delete t.titleBlock)}};for(var Bi in Li.filler=Ri,Li.legend=zi,Li.title=Ni,en.helpers=H,function(){function t(t,e,n){var i;return"string"==typeof t?(i=parseInt(t,10),-1!==t.indexOf("%")&&(i=i/100*e.parentNode[n])):i=t,i}function e(t){return null!=t&&"none"!==t}function n(n,i,a){var r=document.defaultView,o=H._getParentNode(n),s=r.getComputedStyle(n)[i],l=r.getComputedStyle(o)[i],u=e(s),d=e(l),h=Number.POSITIVE_INFINITY;return u||d?Math.min(u?t(s,n,a):h,d?t(l,o,a):h):"none"}H.where=function(t,e){if(H.isArray(t)&&Array.prototype.filter)return t.filter(e);var n=[];return H.each(t,(function(t){e(t)&&n.push(t)})),n},H.findIndex=Array.prototype.findIndex?function(t,e,n){return t.findIndex(e,n)}:function(t,e,n){n=void 0===n?t:n;for(var i=0,a=t.length;i<a;++i)if(e.call(n,t[i],i,t))return i;return-1},H.findNextWhere=function(t,e,n){H.isNullOrUndef(n)&&(n=-1);for(var i=n+1;i<t.length;i++){var a=t[i];if(e(a))return a}},H.findPreviousWhere=function(t,e,n){H.isNullOrUndef(n)&&(n=t.length);for(var i=n-1;i>=0;i--){var a=t[i];if(e(a))return a}},H.isNumber=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},H.almostEquals=function(t,e,n){return Math.abs(t-e)<n},H.almostWhole=function(t,e){var n=Math.round(t);return n-e<=t&&n+e>=t},H.max=function(t){return t.reduce((function(t,e){return isNaN(e)?t:Math.max(t,e)}),Number.NEGATIVE_INFINITY)},H.min=function(t){return t.reduce((function(t,e){return isNaN(e)?t:Math.min(t,e)}),Number.POSITIVE_INFINITY)},H.sign=Math.sign?function(t){return Math.sign(t)}:function(t){return 0===(t=+t)||isNaN(t)?t:t>0?1:-1},H.toRadians=function(t){return t*(Math.PI/180)},H.toDegrees=function(t){return t*(180/Math.PI)},H._decimalPlaces=function(t){if(H.isFinite(t)){for(var e=1,n=0;Math.round(t*e)/e!==t;)e*=10,n++;return n}},H.getAngleFromPoint=function(t,e){var n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),r=Math.atan2(i,n);return r<-.5*Math.PI&&(r+=2*Math.PI),{angle:r,distance:a}},H.distanceBetweenPoints=function(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))},H.aliasPixel=function(t){return t%2==0?0:.5},H._alignPixel=function(t,e,n){var i=t.currentDevicePixelRatio,a=n/2;return Math.round((e-a)*i)/i+a},H.splineCurve=function(t,e,n,i){var a=t.skip?e:t,r=e,o=n.skip?e:n,s=Math.sqrt(Math.pow(r.x-a.x,2)+Math.pow(r.y-a.y,2)),l=Math.sqrt(Math.pow(o.x-r.x,2)+Math.pow(o.y-r.y,2)),u=s/(s+l),d=l/(s+l),h=i*(u=isNaN(u)?0:u),c=i*(d=isNaN(d)?0:d);return{previous:{x:r.x-h*(o.x-a.x),y:r.y-h*(o.y-a.y)},next:{x:r.x+c*(o.x-a.x),y:r.y+c*(o.y-a.y)}}},H.EPSILON=Number.EPSILON||1e-14,H.splineCurveMonotone=function(t){var e,n,i,a,r,o,s,l,u,d=(t||[]).map((function(t){return{model:t._model,deltaK:0,mK:0}})),h=d.length;for(e=0;e<h;++e)if(!(i=d[e]).model.skip){if(n=e>0?d[e-1]:null,(a=e<h-1?d[e+1]:null)&&!a.model.skip){var c=a.model.x-i.model.x;i.deltaK=0!==c?(a.model.y-i.model.y)/c:0}!n||n.model.skip?i.mK=i.deltaK:!a||a.model.skip?i.mK=n.deltaK:this.sign(n.deltaK)!==this.sign(i.deltaK)?i.mK=0:i.mK=(n.deltaK+i.deltaK)/2}for(e=0;e<h-1;++e)i=d[e],a=d[e+1],i.model.skip||a.model.skip||(H.almostEquals(i.deltaK,0,this.EPSILON)?i.mK=a.mK=0:(r=i.mK/i.deltaK,o=a.mK/i.deltaK,(l=Math.pow(r,2)+Math.pow(o,2))<=9||(s=3/Math.sqrt(l),i.mK=r*s*i.deltaK,a.mK=o*s*i.deltaK)));for(e=0;e<h;++e)(i=d[e]).model.skip||(n=e>0?d[e-1]:null,a=e<h-1?d[e+1]:null,n&&!n.model.skip&&(u=(i.model.x-n.model.x)/3,i.model.controlPointPreviousX=i.model.x-u,i.model.controlPointPreviousY=i.model.y-u*i.mK),a&&!a.model.skip&&(u=(a.model.x-i.model.x)/3,i.model.controlPointNextX=i.model.x+u,i.model.controlPointNextY=i.model.y+u*i.mK))},H.nextItem=function(t,e,n){return n?e>=t.length-1?t[0]:t[e+1]:e>=t.length-1?t[t.length-1]:t[e+1]},H.previousItem=function(t,e,n){return n?e<=0?t[t.length-1]:t[e-1]:e<=0?t[0]:t[e-1]},H.niceNum=function(t,e){var n=Math.floor(H.log10(t)),i=t/Math.pow(10,n);return(e?i<1.5?1:i<3?2:i<7?5:10:i<=1?1:i<=2?2:i<=5?5:10)*Math.pow(10,n)},H.requestAnimFrame="undefined"==typeof window?function(t){t()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)},H.getRelativePosition=function(t,e){var n,i,a=t.originalEvent||t,r=t.target||t.srcElement,o=r.getBoundingClientRect(),s=a.touches;s&&s.length>0?(n=s[0].clientX,i=s[0].clientY):(n=a.clientX,i=a.clientY);var l=parseFloat(H.getStyle(r,"padding-left")),u=parseFloat(H.getStyle(r,"padding-top")),d=parseFloat(H.getStyle(r,"padding-right")),h=parseFloat(H.getStyle(r,"padding-bottom")),c=o.right-o.left-l-d,f=o.bottom-o.top-u-h;return{x:n=Math.round((n-o.left-l)/c*r.width/e.currentDevicePixelRatio),y:i=Math.round((i-o.top-u)/f*r.height/e.currentDevicePixelRatio)}},H.getConstraintWidth=function(t){return n(t,"max-width","clientWidth")},H.getConstraintHeight=function(t){return n(t,"max-height","clientHeight")},H._calculatePadding=function(t,e,n){return(e=H.getStyle(t,e)).indexOf("%")>-1?n*parseInt(e,10)/100:parseInt(e,10)},H._getParentNode=function(t){var e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e},H.getMaximumWidth=function(t){var e=H._getParentNode(t);if(!e)return t.clientWidth;var n=e.clientWidth,i=n-H._calculatePadding(e,"padding-left",n)-H._calculatePadding(e,"padding-right",n),a=H.getConstraintWidth(t);return isNaN(a)?i:Math.min(i,a)},H.getMaximumHeight=function(t){var e=H._getParentNode(t);if(!e)return t.clientHeight;var n=e.clientHeight,i=n-H._calculatePadding(e,"padding-top",n)-H._calculatePadding(e,"padding-bottom",n),a=H.getConstraintHeight(t);return isNaN(a)?i:Math.min(i,a)},H.getStyle=function(t,e){return t.currentStyle?t.currentStyle[e]:document.defaultView.getComputedStyle(t,null).getPropertyValue(e)},H.retinaScale=function(t,e){var n=t.currentDevicePixelRatio=e||"undefined"!=typeof window&&window.devicePixelRatio||1;if(1!==n){var i=t.canvas,a=t.height,r=t.width;i.height=a*n,i.width=r*n,t.ctx.scale(n,n),i.style.height||i.style.width||(i.style.height=a+"px",i.style.width=r+"px")}},H.fontString=function(t,e,n){return e+" "+t+"px "+n},H.longestText=function(t,e,n,i){var a=(i=i||{}).data=i.data||{},r=i.garbageCollect=i.garbageCollect||[];i.font!==e&&(a=i.data={},r=i.garbageCollect=[],i.font=e),t.font=e;var o,s,l,u,d,h=0,c=n.length;for(o=0;o<c;o++)if(null!=(u=n[o])&&!0!==H.isArray(u))h=H.measureText(t,a,r,h,u);else if(H.isArray(u))for(s=0,l=u.length;s<l;s++)null==(d=u[s])||H.isArray(d)||(h=H.measureText(t,a,r,h,d));var f=r.length/2;if(f>n.length){for(o=0;o<f;o++)delete a[r[o]];r.splice(0,f)}return h},H.measureText=function(t,e,n,i,a){var r=e[a];return r||(r=e[a]=t.measureText(a).width,n.push(a)),r>i&&(i=r),i},H.numberOfLabelLines=function(t){var e=1;return H.each(t,(function(t){H.isArray(t)&&t.length>e&&(e=t.length)})),e},H.color=_?function(t){return t instanceof CanvasGradient&&(t=N.global.defaultColor),_(t)}:function(t){return console.error("Color.js not found!"),t},H.getHoverColor=function(t){return t instanceof CanvasPattern||t instanceof CanvasGradient?t:H.color(t).saturate(.5).darken(.1).rgbString()}}(),en._adapters=rn,en.Animation=$,en.animationService=J,en.controllers=Jt,en.DatasetController=it,en.defaults=N,en.Element=K,en.elements=kt,en.Interaction=re,en.layouts=pe,en.platform=Oe,en.plugins=Le,en.Scale=yn,en.scaleService=Re,en.Ticks=on,en.Tooltip=Ye,en.helpers.each(fi,(function(t,e){en.scaleService.registerScaleType(e,t,t._defaults)})),Li)Li.hasOwnProperty(Bi)&&en.plugins.register(Li[Bi]);en.platform.initialize();var Ei=en;return"undefined"!=typeof window&&(window.Chart=en),en.Chart=en,en.Legend=Li.legend._element,en.Title=Li.title._element,en.pluginService=en.plugins,en.PluginBase=en.Element.extend({}),en.canvasHelpers=en.helpers.canvas,en.layoutService=en.layouts,en.LinearScaleBase=Cn,en.helpers.each(["Bar","Bubble","Doughnut","Line","PolarArea","Radar","Scatter"],(function(t){en[t]=function(e,n){return new en(e,en.helpers.merge(n||{},{type:t.charAt(0).toLowerCase()+t.slice(1)}))}})),Ei}));++ (function() {+ 'use strict';+ window.addEventListener('beforeprint', function() {+ for (var id in Chart.instances) {+ Chart.instances[id].resize();+ }+ }, false);++ var errorBarPlugin = (function () {+ function drawErrorBar(chart, ctx, low, high, y, height, color) {+ ctx.save();+ ctx.lineWidth = 3;+ ctx.strokeStyle = color;+ var area = chart.chartArea;+ ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);+ ctx.clip();+ ctx.beginPath();+ ctx.moveTo(low, y - height);+ ctx.lineTo(low, y + height);+ ctx.moveTo(low, y);+ ctx.lineTo(high, y);+ ctx.moveTo(high, y - height);+ ctx.lineTo(high, y + height);+ ctx.stroke();+ ctx.restore();+ }+ // Avoid sudden jumps in error bars when switching+ // between linear and logarithmic scale+ function conservativeError(vx, mx, now, final, scale) {+ var finalDiff = Math.abs(mx - final);+ var diff = Math.abs(vx - now);+ return (diff > finalDiff) ? vx + scale * finalDiff : now;+ }+ return {+ afterDatasetDraw: function(chart, easingOptions) {+ var ctx = chart.ctx;+ var easing = easingOptions.easingValue;+ chart.data.datasets.forEach(function(d, i) {+ var bars = chart.getDatasetMeta(i).data;+ var axis = chart.scales[chart.options.scales.xAxes[0].id];+ bars.forEach(function(b, j) {+ var value = axis.getValueForPixel(b._view.x);+ var final = axis.getValueForPixel(b._model.x);+ var errorBar = d.errorBars[j];+ var low = axis.getPixelForValue(value - errorBar.minus);+ var high = axis.getPixelForValue(value + errorBar.plus);+ var finalLow = axis.getPixelForValue(final - errorBar.minus);+ var finalHigh = axis.getPixelForValue(final + errorBar.plus);+ var l = easing === 1 ? finalLow :+ conservativeError(b._view.x, b._model.x, low,+ finalLow, -1.0);+ var h = easing === 1 ? finalHigh :+ conservativeError(b._view.x, b._model.x,+ high, finalHigh, 1.0);+ drawErrorBar(chart, ctx, l, h, b._view.y, 4, errorBar.color);+ });+ });+ },+ };+ })();++ // Formats the ticks on the X-axis on the scatter plot+ var iterFormatter = function() {+ var denom = 0;+ return function(iters, index, values) {+ if (iters == 0) {+ return '';+ }+ if (index == values.length - 1) {+ return '';+ }+ var power;+ if (iters >= 1e9) {+ denom = 1e9;+ power = '⁹';+ } else if (iters >= 1e6) {+ denom = 1e6;+ power = '⁶';+ } else if (iters >= 1e3) {+ denom = 1e3;+ power = '³';+ } else {+ denom = 1;+ }+ if (denom > 1) {+ var value = (iters / denom).toFixed();+ return String(value) + '×10' + power;+ } else {+ return String(iters);+ }+ };+ };++ var colors = ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"];+ var errorColors = ["#cda220", "#8fb8d8", "#ab2b2b", "#2d872d", "#7420cd"];+++ // Positions tooltips at cursor. Required for overview since the bars may+ // extend past the canvas width.+ Chart.Tooltip.positioners.cursor = function(_elems, position) {+ return position;+ }++ function axisType(logaxis) {+ return logaxis ? 'logarithmic' : 'linear';+ }++ function reportSort(a, b) {+ return a.reportNumber - b.reportNumber;+ }++ // adds groupNumber and group fields to reports;+ // returns list of list of reports, grouped by group+ function groupReports(reports) {++ function reportGroup(report) {+ var parts = report.groups.slice();+ parts.pop();+ return parts.join('/');+ }++ var groups = [];+ reports.forEach(function(report) {+ report.group = reportGroup(report);+ if (groups.length === 0) {+ groups.push([report]);+ } else {+ var prevGroup = groups[groups.length - 1];+ var prevGroupName = prevGroup[0].group;+ if (prevGroupName === report.group) {+ prevGroup.push(report);+ } else {+ groups.push([report]);+ }+ }+ report.groupNumber = groups.length - 1;+ });+ return groups;+ }++ // compares 2 arrays lexicographically+ function lex(aParts, bParts) {+ for(var i = 0; i < aParts.length && i < bParts.length; i++) {+ var x = aParts[i];+ var y = bParts[i];+ if (x < y) {+ return -1;+ }+ if (y < x) {+ return 1;+ }+ }+ return aParts.length - bParts.length;+ }+ function lexicalSort(a, b) {+ return lex(a.groups, b.groups);+ }++ function reverseLexicalSort(a, b) {+ return lex(a.groups.slice().reverse(), b.groups.slice().reverse());+ }++ function durationSort(a, b) {+ return a.reportAnalysis.anMean.estPoint - b.reportAnalysis.anMean.estPoint;+ }+ function reverseDurationSort(a,b) {+ return -durationSort(a,b);+ }++ function timeUnits(secs) {+ if (secs < 0)+ return timeUnits(-secs);+ else if (secs >= 1e9)+ return [1e-9, "Gs"];+ else if (secs >= 1e6)+ return [1e-6, "Ms"];+ else if (secs >= 1)+ return [1, "s"];+ else if (secs >= 1e-3)+ return [1e3, "ms"];+ else if (secs >= 1e-6)+ return [1e6, "\u03bcs"];+ else if (secs >= 1e-9)+ return [1e9, "ns"];+ else if (secs >= 1e-12)+ return [1e12, "ps"];+ return [1, "s"];+ }++ function formatUnit(raw, unit, precision) {+ var v = precision ? raw.toPrecision(precision) : Math.round(raw);+ var label = String(v) + ' ' + unit;+ return label;+ }++ function formatTime(value, precision) {+ var units = timeUnits(value);+ var scale = units[0];+ return formatUnit(value * scale, units[1], precision);+ }++ // pure function that produces the 'data' object of the overview chart+ function overviewData(state, reports) {+ var order = state.order;+ var sorter = order === 'report-index' ? reportSort+ : order === 'lex' ? lexicalSort+ : order === 'colex' ? reverseLexicalSort+ : order === 'duration' ? durationSort+ : order === 'rev-duration' ? reverseDurationSort+ : reportSort;+ var sortedReports = reports.filter(function(report) {+ return !state.hidden[report.groupNumber];+ }).slice().sort(sorter);+ var data = sortedReports.map(function(report) {+ return report.reportAnalysis.anMean.estPoint;+ });+ var labels = sortedReports.map(function(report) {+ return report.groups.join(' / ');+ });+ var upperBound = function(report) {+ var est = report.reportAnalysis.anMean;+ return est.estPoint + est.estError.confIntUDX;+ };+ var errorBars = sortedReports.map(function(report) {+ var est = report.reportAnalysis.anMean;+ return {+ minus: est.estError.confIntLDX,+ plus: est.estError.confIntUDX,+ color: errorColors[report.groupNumber % errorColors.length]+ };+ });+ var top = sortedReports.map(upperBound).reduce(function(a, b) {+ return Math.max(a, b);+ }, 0);+ var scale = top;+ if(state.activeReport !== null) {+ reports.forEach(function(report) {+ if(report.reportNumber === state.activeReport) {+ scale = upperBound(report);+ }+ });+ }++ return {+ labels: labels,+ top: top,+ max: scale * 1.1,+ reports: sortedReports,+ datasets: [{+ borderWidth: 1,+ backgroundColor: sortedReports.map(function(report) {+ var active = report.reportNumber === state.activeReport;+ var alpha = active ? 'ff' : 'a0';+ var color = colors[report.groupNumber % colors.length] + alpha;+ if (active) {+ return Chart.helpers.getHoverColor(color);+ } else {+ return color;+ }+ }),+ barThickness: 16,+ barPercentage: 0.8,+ data: data,+ errorBars: errorBars,+ minBarLength: 2,+ }]+ };+ }++ function inside(box, point) {+ return (point.x >= box.left && point.x <= box.right && point.y >= box.top &&+ point.y <= box.bottom);+ }++ function overviewHover(event, elems) {+ var chart = this;+ var xAxis = chart.scales[chart.options.scales.xAxes[0].id];+ var yAxis = chart.scales[chart.options.scales.yAxes[0].id];+ var point = Chart.helpers.getRelativePosition(event, chart);+ var over =+ (inside(xAxis, point) || inside(yAxis, point) || elems.length > 0);+ if (over) {+ chart.canvas.style.cursor = "pointer";+ } else {+ chart.canvas.style.cursor = "default";+ }+ }++ // Re-renders the overview after clicking/sorting+ function renderOverview(state, reports, chart) {+ var data = overviewData(state, reports);+ var xaxis = chart.options.scales.xAxes[0];+ xaxis.ticks.max = data.max;+ chart.config.data.datasets[0].backgroundColor = data.datasets[0].backgroundColor;+ chart.config.data.datasets[0].errorBars = data.datasets[0].errorBars;+ chart.config.data.datasets[0].data = data.datasets[0].data;+ chart.options.scales.xAxes[0].type = axisType(state.logaxis);+ chart.options.legend.display = state.legend;+ chart.data.labels = data.labels;+ chart.update();+ }++ function overviewClick(state, reports) {+ return function(event, elems) {+ var chart = this;+ var xAxis = chart.scales[chart.options.scales.xAxes[0].id];+ var yAxis = chart.scales[chart.options.scales.yAxes[0].id];+ var point = Chart.helpers.getRelativePosition(event, chart);+ var sorted = overviewData(state, reports).reports;++ function activateBar(index) {+ // Trying to activate active bar disables instead+ if (sorted[index].reportNumber === state.activeReport) {+ state.activeReport = null;+ } else {+ state.activeReport = sorted[index].reportNumber;+ }+ }++ if (inside(xAxis, point)) {+ state.activeReport = null;+ state.logaxis = !state.logaxis;+ renderOverview(state, reports, chart);+ } else if (inside(yAxis, point)) {+ var index = yAxis.getValueForPixel(point.y);+ activateBar(index);+ renderOverview(state, reports, chart);+ } else if (elems.length > 0) {+ var elem = elems[0];+ var index = elem._index;+ activateBar(index);+ state.logaxis = false;+ renderOverview(state, reports, chart);+ } else if(inside(chart.chartArea, point)) {+ state.activeReport = null;+ renderOverview(state, reports, chart);+ }+ };+ }++ // listener for sort drop-down+ function overviewSort(state, reports, chart) {+ return function(event) {+ state.order = event.currentTarget.value;+ renderOverview(state, reports, chart);+ };+ }++ // Returns a formatter for the ticks on the X-axis of the overview+ function overviewTick(state) {+ return function(value, index, values) {+ var label = formatTime(value);+ if (state.logaxis) {+ const remain = Math.round(value /+ (Math.pow(10, Math.floor(Chart.helpers.log10(value)))));+ if (index === values.length - 1) {+ // Draw endpoint if we don't span a full order of magnitude+ if (values[index] / values[1] < 10) {+ return label;+ } else {+ return '';+ }+ }+ if (remain === 1) {+ return label;+ }+ return '';+ } else {+ // Don't show the right endpoint+ if (index === values.length - 1) {+ return '';+ }+ return label;+ }+ }+ }++ function mkOverview(reports) {+ var canvas = document.createElement('canvas');++ var state = {+ logaxis: false,+ activeReport: null,+ order: 'index',+ hidden: {},+ legend: false,+ };+++ var data = overviewData(state, reports);+ var chart = new Chart(canvas.getContext('2d'), {+ type: 'horizontalBar',+ data: data,+ plugins: [errorBarPlugin],+ options: {+ onHover: overviewHover,+ onClick: overviewClick(state, reports),+ onResize: function(chart, size) {+ if (size.width < 800) {+ chart.options.scales.yAxes[0].ticks.mirror = true;+ chart.options.scales.yAxes[0].ticks.padding = -10;+ chart.options.scales.yAxes[0].ticks.fontColor = '#000';+ } else {+ chart.options.scales.yAxes[0].ticks.fontColor = '#666';+ chart.options.scales.yAxes[0].ticks.mirror = false;+ chart.options.scales.yAxes[0].ticks.padding = 0;+ }+ },+ elements: {+ rectangle: {+ borderWidth: 2,+ },+ },+ scales: {+ yAxes: [{+ ticks: {+ // make sure we draw the ticks above the error bars+ z: 2,+ }+ }],+ xAxes: [{+ display: true,+ type: axisType(state.logaxis),+ ticks: {+ autoSkip: false,+ min: 0,+ max: data.top * 1.1,+ minRotation: 0,+ maxRotation: 0,+ callback: overviewTick(state),+ }+ }]+ },+ responsive: true,+ maintainAspectRatio: false,+ legend: {+ display: state.legend,+ position: 'right',+ onLeave: function() {+ chart.canvas.style.cursor = 'default';+ },+ onHover: function() {+ chart.canvas.style.cursor = 'pointer';+ },+ onClick: function(_event, item) {+ // toggle hidden+ state.hidden[item.groupNumber] = !state.hidden[item.groupNumber];+ renderOverview(state, reports, chart);+ },+ labels: {+ boxWidth: 12,+ generateLabels: function() {+ var groups = [];+ var groupNames = [];+ reports.forEach(function(report) {+ var index = groups.indexOf(report.groupNumber);+ if (index === -1) {+ groups.push(report.groupNumber);+ var groupName = report.groups.slice(0,report.groups.length-1).join(' / ');+ groupNames.push(groupName);+ }+ });+ return groups.map(function(groupNumber, index) {+ var color = colors[groupNumber % colors.length];+ return {+ text: groupNames[index],+ fillStyle: color,+ hidden: state.hidden[groupNumber],+ groupNumber: groupNumber,+ };+ });+ },+ },+ },+ tooltips: {+ position: 'cursor',+ callbacks: {+ label: function(item) {+ return formatTime(item.xLabel, 3);+ },+ },+ },+ title: {+ display: false,+ text: 'Chart.js Horizontal Bar Chart'+ }+ }+ });+ document.getElementById('sort-overview')+ .addEventListener('change', overviewSort(state, reports, chart));+ var toggle = document.getElementById('legend-toggle');+ toggle.addEventListener('mouseup', function () {+ state.legend = !state.legend;+ if(state.legend) {+ toggle.classList.add('right');+ } else {+ toggle.classList.remove('right');+ }+ renderOverview(state, reports, chart);+ })+ return canvas;+ }++ function mkKDE(report) {+ var canvas = document.createElement('canvas');+ var mean = report.reportAnalysis.anMean.estPoint;+ var units = timeUnits(mean);+ var scale = units[0];+ var reportKDE = report.reportKDEs[0];+ var data = reportKDE.kdeValues.map(function(time, index) {+ var pdf = reportKDE.kdePDF[index];+ return {+ x: time * scale,+ y: pdf+ };+ });+ var chart = new Chart(canvas.getContext('2d'), {+ type: 'line',+ data: {+ datasets: [{+ label: 'KDE',+ borderColor: colors[0],+ borderWidth: 2,+ backgroundColor: '#00000000',+ data: data,+ hoverBorderWidth: 1,+ pointHitRadius: 8,+ },+ {+ label: 'mean'+ }+ ],+ },+ plugins: [{+ afterDraw: function(chart) {+ var ctx = chart.ctx;+ var area = chart.chartArea;+ var axis = chart.scales[chart.options.scales.xAxes[0].id];+ var value = axis.getPixelForValue(mean * scale);+ ctx.save();+ ctx.strokeStyle = colors[1];+ ctx.lineWidth = 2;+ ctx.beginPath();+ ctx.moveTo(value, area.top);+ ctx.lineTo(value, area.bottom);+ ctx.stroke();+ ctx.restore();+ },+ }],+ options: {+ title: {+ display: true,+ text: report.groups.join(' / ') + ' — time densities',+ },+ elements: {+ point: {+ radius: 0,+ hitRadius: 0+ }+ },+ scales: {+ xAxes: [{+ display: true,+ type: 'linear',+ scaleLabel: {+ display: false,+ labelString: 'Time'+ },+ ticks: {+ min: reportKDE.kdeValues[0] * scale,+ max: reportKDE.kdeValues[reportKDE.kdeValues.length - 1] * scale,+ callback: function(value, index, values) {+ // Don't show endpoints+ if (index === 0 || index === values.length - 1) {+ return '';+ }+ var str = String(value) + ' ' + units[1];+ return str;+ },+ }+ }],+ yAxes: [{+ display: true,+ type: 'linear',+ ticks: {+ min: 0,+ callback: function() {+ return '';+ },+ },+ }]+ },+ responsive: true,+ legend: {+ display: false,+ position: 'right',+ },+ tooltips: {+ mode: 'nearest',+ callbacks: {+ title: function() {+ return '';+ },+ label: function(+ item) {+ return formatUnit(item.xLabel, units[1], 3);+ },+ },+ },+ hover: {+ intersect: false+ },+ }+ });+ return canvas;+ }++ function mkScatter(report) {++ // collect the measured value for a given regression+ function getMeasured(key) {+ var ix = report.reportKeys.indexOf(key);+ return report.reportMeasured.map(function(x) {+ return x[ix];+ });+ }++ var canvas = document.createElement('canvas');+ var times = getMeasured("time");+ var iters = getMeasured("iters");+ var lastIter = iters[iters.length - 1];+ var olsTime = report.reportAnalysis.anRegress[0].regCoeffs.iters;+ var dataPoints = times.map(function(time, i) {+ return {+ x: iters[i],+ y: time+ }+ });+ var formatter = iterFormatter();+ var chart = new Chart(canvas.getContext('2d'), {+ type: 'scatter',+ data: {+ datasets: [{+ data: dataPoints,+ label: 'scatter',+ borderWidth: 2,+ pointHitRadius: 8,+ borderColor: colors[1],+ backgroundColor: '#fff',+ },+ {+ data: [+ {x: 0, y: 0 },+ { x: lastIter, y: olsTime.estPoint * lastIter }+ ],+ label: 'regression',+ type: 'line',+ backgroundColor: "#00000000",+ borderColor: colors[0],+ pointRadius: 0,+ },+ {+ data: [{+ x: 0,+ y: 0+ }, {+ x: lastIter,+ y: (olsTime.estPoint - olsTime.estError.confIntLDX) * lastIter,+ }],+ label: 'lower',+ type: 'line',+ fill: 1,+ borderWidth: 0,+ pointRadius: 0,+ borderColor: '#00000000',+ backgroundColor: colors[0] + '33',+ },+ {+ data: [{+ x: 0,+ y: 0+ }, {+ x: lastIter,+ y: (olsTime.estPoint + olsTime.estError.confIntUDX) * lastIter,+ }],+ label: 'upper',+ type: 'line',+ fill: 1,+ borderWidth: 0,+ borderColor: '#00000000',+ pointRadius: 0,+ backgroundColor: colors[0] + '33',+ },+ ],+ },+ options: {+ title: {+ display: true,+ text: report.groups.join(' / ') + ' — time per iteration',+ },+ scales: {+ yAxes: [{+ display: true,+ type: 'linear',+ scaleLabel: {+ display: false,+ labelString: 'Time'+ },+ ticks: {+ callback: function(value, index, values) {+ return formatTime(value);+ },+ }+ }],+ xAxes: [{+ display: true,+ type: 'linear',+ scaleLabel: {+ display: false,+ labelString: 'Iterations'+ },+ ticks: {+ callback: formatter,+ max: lastIter,+ }+ }],+ },+ legend: {+ display: false,+ },+ tooltips: {+ callbacks: {+ label: function(ttitem, ttdata) {+ var iters = ttitem.xLabel;+ var duration = ttitem.yLabel;+ return formatTime(duration, 3) + ' / ' ++ iters.toLocaleString() + ' iters';+ },+ },+ },+ }+ });+ return canvas;+ }++ // Create an HTML Element with attributes and child nodes+ function elem(tag, props, children) {+ var node = document.createElement(tag);+ if (children) {+ children.forEach(function(child) {+ if (typeof child === 'string') {+ var txt = document.createTextNode(child);+ node.appendChild(txt);+ } else {+ node.appendChild(child);+ }+ });+ }+ Object.assign(node, props);+ return node;+ }++ function bounds(analysis) {+ var mean = analysis.estPoint;+ return {+ low: mean - analysis.estError.confIntLDX,+ mean: mean,+ high: mean + analysis.estError.confIntUDX+ };+ }++ function confidence(level) {+ return String(1 - level) + ' confidence level';+ }++ function mkOutliers(report) {+ var outliers = report.reportAnalysis.anOutlierVar;+ return elem('div', {className: 'outliers'}, [+ elem('p', {}, [+ 'Outlying measurements have ',+ outliers.ovDesc,+ ' (', String((outliers.ovFraction * 100).toPrecision(3)), '%)',+ ' effect on estimated standard deviation.'+ ])+ ]);+ }++ function mkTable(report) {+ var analysis = report.reportAnalysis;+ var timep4 = function(t) {+ return formatTime(t, 3)+ };+ var idformatter = function(t) {+ return t.toPrecision(3)+ };+ var rows = [+ Object.assign({+ label: 'OLS regression',+ formatter: timep4+ },+ bounds(analysis.anRegress[0].regCoeffs.iters)),+ Object.assign({+ label: 'R² goodness-of-fit',+ formatter: idformatter+ },+ bounds(analysis.anRegress[0].regRSquare)),+ Object.assign({+ label: 'Mean execution time',+ formatter: timep4+ },+ bounds(analysis.anMean)),+ Object.assign({+ label: 'Standard deviation',+ formatter: timep4+ },+ bounds(analysis.anStdDev)),+ ];+ return elem('table', {+ className: 'analysis'+ }, [+ elem('thead', {}, [+ elem('tr', {}, [+ elem('th'),+ elem('th', {+ className: 'low',+ title: confidence(analysis.anRegress[0].regCoeffs.iters.estError.confIntCL)+ }, ['lower bound']),+ elem('th', {}, ['estimate']),+ elem('th', {+ className: 'high',+ title: confidence(analysis.anRegress[0].regCoeffs.iters.estError.confIntCL)+ }, ['upper bound']),+ ])+ ]),+ elem('tbody', {}, rows.map(function(row) {+ return elem('tr', {}, [+ elem('td', {}, [row.label]),+ elem('td', {className: 'low'}, [row.formatter(row.low, 4)]),+ elem('td', {}, [row.formatter(row.mean)]),+ elem('td', {className: 'high'}, [row.formatter(row.high, 4)]),+ ]);+ }))+ ]);+ }+ document.addEventListener('DOMContentLoaded', function() {+ var rawJSON = document.getElementById('report-data').text;+ var reportData = JSON.parse(rawJSON)+ .map(function(report) {+ report.groups = report.reportName.split('/');+ return report;+ });+ groupReports(reportData);+ var overview = document.getElementById('overview-chart');+ var overviewLineHeight = 16 * 1.25;+ overview.style.height =+ String(overviewLineHeight * reportData.length + 36) + 'px';+ overview.appendChild(mkOverview(reportData.slice()));+ var reports = document.getElementById('reports');+ reportData.forEach(function(report, i) {+ var id = 'report_' + String(i);+ reports.appendChild(+ elem('div', {id: id, className: 'report-details'}, [+ elem('h1', {}, [elem('a', {href: '#' + id}, [report.groups.join(' / ')])]),+ elem('div', {className: 'kde'}, [mkKDE(report)]),+ elem('div', {className: 'scatter'}, [mkScatter(report)]),+ mkTable(report), mkOutliers(report)+ ]));+ });+ }, false);+})();++ </script>+ <style>+ html,body {+ padding: 0; margin: 0;+ font-family: sans-serif;+}+* {+ -webkit-tap-highlight-color: transparent;+}+div.scatter, div.kde {+ position: relative;+ display: inline-block;+ box-sizing: border-box;+ width: 50%;+ padding: 0 2em;+}+.content, .explanation {+ margin: auto;+ max-width: 1000px;+ padding: 0 20px;+}++#legend-toggle {+ cursor: pointer;+}++.overview-info {+ float:right;+}++.overview-info a {+ display: inline-block;+ margin-left: 10px;+}+.overview-info .info {+ font-size: 120%;+ font-weight: 400;+ vertical-align: middle;+ line-height: 1em;+}+.chevron {+ position:relative;+ color: black;+ display:block;+ transition-property: transform;+ transition-duration: 400ms;+ line-height: 1em;+ font-size: 180%;+}+.chevron.right {+ transform: scale(-1,1);+}+.chevron::before {+ vertical-align: middle;+ content:"\2039";+}++select {+ outline: none;+ border:none;+ background: transparent;+}++footer .content {+ padding: 0;+}++span#explain-interactivity {+ display-block: inline;+ float: right;+ color: #444;+ font-size: 0.7em;+}++@media screen and (max-width: 800px) {+ div.scatter, div.kde {+ width: 100%;+ display: block;+ }+ .report-details .outliers {+ margin: auto;+ }+ .report-details table {+ margin: auto;+ }+}+table.analysis .low, table.analysis .high {+ opacity: 0.5;+}+.report-details {+ margin: 2em 0;+ page-break-inside: avoid;+}+a, a:hover, a:visited, a:active {+ text-decoration: none;+ color: #309ef2;+}+h1.title {+ font-weight: 600;+}+h1 {+ font-weight: 400;+}+#overview-chart {+ width: 100%; /*height is determined by number of rows in JavaScript */+}+footer {+ background: #777777;+ color: #ffffff;+ padding: 20px;+}+footer a, footer a:hover, footer a:visited, footer a:active {+ text-decoration: underline;+ color: #fff;+}++.explanation {+ margin-top: 3em;+}++.explanation h1 {+ font-size: 2.6em;+}++#grokularation.explanation li {+ margin: 1em 0;+}++#controls-explanation.explanation em {+ font-weight: 600;+ font-style: normal;+}++@media print {+ footer {+ background: transparent;+ color: black;+ }+ footer a, footer a:hover, footer a:visited, footer a:active {+ color: #309ef2;+ }+ .no-print {+ display: none;+ }+}++ </style>+ <script type="application/json" id="report-data">+ [{"reportAnalysis":{"anMean":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.5918709355982327e-11,"confIntUDX":2.9607390233713285e-11},"estPoint":9.106360888572829e-9},"anOutlierVar":{"ovDesc":"a slight","ovEffect":"Slight","ovFraction":6.737143023159825e-2},"anRegress":[{"regCoeffs":{"iters":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.6763788761244487e-11,"confIntUDX":1.6468105142732684e-11},"estPoint":9.096614263095112e-9},"y":{"estError":{"confIntCL":5.0e-2,"confIntLDX":5.7868969216318594e-5,"confIntUDX":5.3873819469498e-5},"estPoint":-1.89965930799961e-4}},"regRSquare":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.1530397141645832e-4,"confIntUDX":6.189785882004806e-5},"estPoint":0.9998424977692931},"regResponder":"time"}],"anStdDev":{"estError":{"confIntCL":5.0e-2,"confIntLDX":3.1940524528690886e-11,"confIntUDX":6.843837978395988e-11},"estPoint":7.27346604075967e-11}},"reportKDEs":[{"kdePDF":[9.931606075488966e8,1.0446311483745661e9,1.1464845639902506e9,1.2965437618608782e9,1.491547637557964e9,1.727179362628494e9,1.998136110213061e9,2.2982568299065623e9,2.620717970608426e9,2.9582966052431026e9,3.303688038174394e9,3.649852937184193e9,3.9903596668450484e9,4.31968283935058e9,4.633420512813919e9,4.928400385004462e9,5.202659063138075e9,5.455296200087194e9,5.686224155673746e9,5.895850465898425e9,6.084741408592668e9,6.253317736089339e9,6.401627077830508e9,6.52922242308152e9,6.635155299567513e9,6.718070115960201e9,6.7763675603010025e9,6.808394233799898e9,6.812615352872726e9,6.787737335532024e9,6.732764732156293e9,6.646996596909848e9,6.529985569037385e9,6.381493856597582e9,6.201481156386637e9,5.990150166223097e9,5.748058301478973e9,5.476284019000945e9,5.176617992812801e9,4.85173783236445e9,4.505322859430657e9,4.142073069456993e9,3.7676118941272745e9,3.3882721733002987e9,3.010784556149582e9,2.641903442299702e9,2.2880147745562897e9,1.954771361231472e9,1.6467954437233305e9,1.3674767504643753e9,1.1188798578844686e9,9.017600120116296e8,7.15673955964767e8,5.591633247823689e8,4.299835043065657e8,3.253503869132641e8,2.4218045502268296e8,1.7730498138150364e8,1.2764564554527739e8,9.034542869571006e7,6.285441349903045e7,4.29745477478034e7,2.8870311074783392e7,1.9053600175646566e7,1.2351255644524533e7,7862832.293523749,4914830.48186121,3015990.9532654574,1816671.7589945681,1073948.7195011273,623002.4922210469,354598.2259269887,198001.38800569507,108450.78055980211,58261.76645420628,30696.71066565336,15863.40139928159,8047.139692022314,4023.107564696037,2018.721815444101,1095.546339864918,797.0964160039194,965.7646637602897,1673.7654005465572,3244.3449793213904,6365.1275956224035,12319.268362039442,23385.05350289781,43482.41151544118,79175.31160885778,141169.37035284,246467.67007506167,421353.8574208979,705344.4473682788,1156172.7788911723,1855715.6798094162,2916536.115642558,4488389.43567646,6763648.023156671,9980190.449160652,1.4419962338167649e7,2.0401262981384832e7,2.826297453225845e7,3.833954552916834e7,5.092663124875632e7,6.6238850702506244e7,8.436299044722326e7,1.0521188300608647e8,1.2848572100459903e8,1.5364830502573544e8,1.7992528832738453e8,2.0632966605884564e8,2.3171661122398487e8,2.5486563990265465e8,2.7458362770757973e8,2.898182045255506e8,2.9976833755220944e8,3.0397810114449865e8,3.024010060477763e8,2.954256653350271e8,2.8385843975927883e8,2.688641717828093e8,2.5187123788457197e8,2.3445110785056865e8,2.1818489202187002e8,2.045298706102621e8,1.9469798460383764e8,1.8955621319835737e8],"kdeType":"time","kdeValues":[8.978554056224653e-9,8.982955739396322e-9,8.987357422567991e-9,8.991759105739662e-9,8.996160788911331e-9,9.000562472083e-9,9.00496415525467e-9,9.00936583842634e-9,9.01376752159801e-9,9.018169204769678e-9,9.022570887941347e-9,9.026972571113017e-9,9.031374254284687e-9,9.035775937456356e-9,9.040177620628026e-9,9.044579303799695e-9,9.048980986971365e-9,9.053382670143035e-9,9.057784353314704e-9,9.062186036486373e-9,9.066587719658042e-9,9.070989402829713e-9,9.075391086001382e-9,9.079792769173051e-9,9.08419445234472e-9,9.08859613551639e-9,9.09299781868806e-9,9.097399501859729e-9,9.101801185031398e-9,9.106202868203067e-9,9.110604551374738e-9,9.115006234546407e-9,9.119407917718076e-9,9.123809600889745e-9,9.128211284061414e-9,9.132612967233085e-9,9.137014650404754e-9,9.141416333576423e-9,9.145818016748092e-9,9.150219699919763e-9,9.154621383091432e-9,9.159023066263101e-9,9.16342474943477e-9,9.16782643260644e-9,9.17222811577811e-9,9.17662979894978e-9,9.181031482121449e-9,9.185433165293118e-9,9.189834848464789e-9,9.194236531636458e-9,9.198638214808127e-9,9.203039897979796e-9,9.207441581151465e-9,9.211843264323136e-9,9.216244947494805e-9,9.220646630666474e-9,9.225048313838143e-9,9.229449997009814e-9,9.233851680181483e-9,9.238253363353152e-9,9.242655046524821e-9,9.24705672969649e-9,9.251458412868161e-9,9.25586009603983e-9,9.2602617792115e-9,9.264663462383168e-9,9.269065145554839e-9,9.273466828726508e-9,9.277868511898177e-9,9.282270195069846e-9,9.286671878241516e-9,9.291073561413186e-9,9.295475244584855e-9,9.299876927756525e-9,9.304278610928194e-9,9.308680294099864e-9,9.313081977271534e-9,9.317483660443203e-9,9.321885343614872e-9,9.326287026786541e-9,9.330688709958212e-9,9.33509039312988e-9,9.33949207630155e-9,9.343893759473219e-9,9.34829544264489e-9,9.352697125816559e-9,9.357098808988228e-9,9.361500492159897e-9,9.365902175331566e-9,9.370303858503237e-9,9.374705541674906e-9,9.379107224846575e-9,9.383508908018244e-9,9.387910591189915e-9,9.392312274361584e-9,9.396713957533253e-9,9.401115640704922e-9,9.405517323876592e-9,9.409919007048262e-9,9.414320690219931e-9,9.4187223733916e-9,9.42312405656327e-9,9.42752573973494e-9,9.43192742290661e-9,9.436329106078279e-9,9.440730789249948e-9,9.445132472421617e-9,9.449534155593288e-9,9.453935838764957e-9,9.458337521936626e-9,9.462739205108295e-9,9.467140888279964e-9,9.471542571451635e-9,9.475944254623304e-9,9.480345937794973e-9,9.484747620966642e-9,9.489149304138313e-9,9.493550987309982e-9,9.497952670481651e-9,9.50235435365332e-9,9.506756036824991e-9,9.51115771999666e-9,9.51555940316833e-9,9.519961086339998e-9,9.524362769511667e-9,9.528764452683338e-9,9.533166135855007e-9,9.537567819026676e-9]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","peakMbAllocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportMeasured":[[2.9859947971999645e-6,2.184000000000127e-6,5577,1,null,null,null,null,null,null,null,null],[1.3720127753913403e-6,1.2830000000003602e-6,3927,2,null,null,null,null,null,null,null,null],[1.201988197863102e-6,1.081999999999906e-6,3366,3,null,null,null,null,null,null,null,null],[1.0619987733662128e-6,9.809999999997251e-7,2970,4,null,null,null,null,null,null,null,null],[1.0119983926415443e-6,9.4199999999987e-7,2970,5,null,null,null,null,null,null,null,null],[1.1119991540908813e-6,1.0209999999999213e-6,3201,6,null,null,null,null,null,null,null,null],[1.1119991540908813e-6,1.0320000000002029e-6,3201,7,null,null,null,null,null,null,null,null],[1.1220108717679977e-6,1.0620000000000247e-6,3267,8,null,null,null,null,null,null,null,null],[1.152046024799347e-6,1.0520000000000841e-6,3234,9,null,null,null,null,null,null,null,null],[1.2020464055240154e-6,1.1419999999999833e-6,3432,10,null,null,null,null,null,null,null,null],[1.2630480341613293e-6,1.1719999999998051e-6,3531,11,null,null,null,null,null,null,null,null],[1.2119999155402184e-6,1.151999999999924e-6,3597,12,null,null,null,null,null,null,null,null],[1.2620002962648869e-6,1.1819999999997458e-6,3729,13,null,null,null,null,null,null,null,null],[1.201988197863102e-6,1.1820000000001794e-6,3696,14,null,null,null,null,null,null,null,null],[1.2519885785877705e-6,1.2120000000000013e-6,3762,15,null,null,null,null,null,null,null,null],[1.2730015441775322e-6,1.2230000000002829e-6,3795,16,null,null,null,null,null,null,null,null],[1.3629905879497528e-6,1.3020000000003341e-6,3993,17,null,null,null,null,null,null,null,null],[1.3320241123437881e-6,1.313000000000182e-6,4026,18,null,null,null,null,null,null,null,null],[1.3530370779335499e-6,1.313000000000182e-6,4125,19,null,null,null,null,null,null,null,null],[1.402979250997305e-6,1.381999999999859e-6,4257,20,null,null,null,null,null,null,null,null],[1.4030374586582184e-6,1.3620000000004115e-6,4191,21,null,null,null,null,null,null,null,null],[1.4530378393828869e-6,1.4220000000000552e-6,4356,22,null,null,null,null,null,null,null,null],[1.4730030670762062e-6,1.4319999999999958e-6,4455,23,null,null,null,null,null,null,null,null],[1.4829565770924091e-6,1.4229999999999625e-6,4488,25,null,null,null,null,null,null,null,null],[1.5529803931713104e-6,1.5229999999998023e-6,4785,26,null,null,null,null,null,null,null,null],[1.5529803931713104e-6,1.5130000000002954e-6,4686,27,null,null,null,null,null,null,null,null],[1.642969436943531e-6,1.6330000000000164e-6,5016,28,null,null,null,null,null,null,null,null],[1.653039362281561e-6,1.6030000000001945e-6,5049,30,null,null,null,null,null,null,null,null],[1.634005457162857e-6,1.6029999999997609e-6,5082,31,null,null,null,null,null,null,null,null],[1.7039710655808449e-6,1.6629999999998382e-6,5247,33,null,null,null,null,null,null,null,null],[1.7829588614404202e-6,1.7339999999997635e-6,5544,35,null,null,null,null,null,null,null,null],[1.8529826775193214e-6,1.8140000000001558e-6,5544,36,null,null,null,null,null,null,null,null],[1.8430291675031185e-6,1.8039999999997815e-6,5643,38,null,null,null,null,null,null,null,null],[1.924054231494665e-6,1.8829999999998327e-6,5841,40,null,null,null,null,null,null,null,null],[1.9730068743228912e-6,1.9340000000003105e-6,6039,42,null,null,null,null,null,null,null,null],[2.003973349928856e-6,1.9840000000000135e-6,6336,44,null,null,null,null,null,null,null,null],[2.062995918095112e-6,2.0340000000001503e-6,6468,47,null,null,null,null,null,null,null,null],[2.134009264409542e-6,2.093999999999794e-6,6666,49,null,null,null,null,null,null,null,null],[2.173997927457094e-6,2.1240000000000495e-6,6798,52,null,null,null,null,null,null,null,null],[2.2840104065835476e-6,2.2139999999999486e-6,6963,54,null,null,null,null,null,null,null,null],[2.4239998310804367e-6,2.305000000000189e-6,7293,57,null,null,null,null,null,null,null,null],[2.394022885710001e-6,2.344000000000044e-6,7524,60,null,null,null,null,null,null,null,null],[2.5150366127490997e-6,2.4640000000001987e-6,7854,63,null,null,null,null,null,null,null,null],[2.574990503489971e-6,2.5150000000002427e-6,8184,66,null,null,null,null,null,null,null,null],[2.6249908842146397e-6,2.5850000000002607e-6,8283,69,null,null,null,null,null,null,null,null],[2.774992026388645e-6,2.745000000000178e-6,8613,73,null,null,null,null,null,null,null,null],[2.8249924071133137e-6,2.785000000000374e-6,8943,76,null,null,null,null,null,null,null,null],[2.94495839625597e-6,2.8949999999997207e-6,9240,80,null,null,null,null,null,null,null,null],[3.075983840972185e-6,3.035999999999664e-6,9735,84,null,null,null,null,null,null,null,null],[3.4259865060448647e-6,3.375999999999813e-6,10956,89,null,null,null,null,null,null,null,null],[3.4159747883677483e-6,3.3860000000001875e-6,10857,93,null,null,null,null,null,null,null,null],[3.5170232877135277e-6,3.4869999999999346e-6,11220,98,null,null,null,null,null,null,null,null],[3.627035766839981e-6,3.585999999999867e-6,11484,103,null,null,null,null,null,null,null,null],[3.7569552659988403e-6,3.706999999999929e-6,11979,108,null,null,null,null,null,null,null,null],[3.867025952786207e-6,3.817999999999617e-6,12309,113,null,null,null,null,null,null,null,null],[4.018016625195742e-6,3.957000000000179e-6,12804,119,null,null,null,null,null,null,null,null],[4.167028237134218e-6,4.127999999999944e-6,13365,125,null,null,null,null,null,null,null,null],[4.347995854914188e-6,4.289000000000202e-6,13959,131,null,null,null,null,null,null,null,null],[4.537985660135746e-6,4.478000000000034e-6,14421,138,null,null,null,null,null,null,null,null],[4.6289642341434956e-6,4.5890000000001555e-6,14883,144,null,null,null,null,null,null,null,null],[4.878966137766838e-6,4.858999999999853e-6,15642,152,null,null,null,null,null,null,null,null],[5.028967279940844e-6,5.0199999999996775e-6,16203,159,null,null,null,null,null,null,null,null],[5.299982149153948e-6,5.280000000000302e-6,17061,167,null,null,null,null,null,null,null,null],[5.540030542761087e-6,5.509999999999803e-6,17820,176,null,null,null,null,null,null,null,null],[5.770998541265726e-6,5.710999999999824e-6,18645,185,null,null,null,null,null,null,null,null],[6.002024747431278e-6,5.961000000000074e-6,19305,194,null,null,null,null,null,null,null,null],[6.27199187874794e-6,6.251999999999994e-6,20229,204,null,null,null,null,null,null,null,null],[6.491958629339933e-6,6.432000000000226e-6,20988,214,null,null,null,null,null,null,null,null],[6.893009413033724e-6,6.782999999999789e-6,21978,224,null,null,null,null,null,null,null,null],[7.072987500578165e-6,7.04299999999998e-6,23001,236,null,null,null,null,null,null,null,null],[7.354014087468386e-6,7.323000000000052e-6,23859,247,null,null,null,null,null,null,null,null],[7.784983608871698e-6,7.744999999999974e-6,25245,260,null,null,null,null,null,null,null,null],[8.164963219314814e-6,8.136000000000167e-6,26433,273,null,null,null,null,null,null,null,null],[8.466013241559267e-6,8.414999999999898e-6,27390,287,null,null,null,null,null,null,null,null],[8.847040589898825e-6,8.81699999999994e-6,28743,301,null,null,null,null,null,null,null,null],[9.206996764987707e-6,9.16700000000003e-6,29964,316,null,null,null,null,null,null,null,null],[9.6180010586977e-6,9.597999999999985e-6,31350,332,null,null,null,null,null,null,null,null],[1.0108982678502798e-5,1.0079000000000077e-5,32901,348,null,null,null,null,null,null,null,null],[1.0489951819181442e-5,1.0449999999999956e-5,34287,366,null,null,null,null,null,null,null,null],[1.0970979928970337e-5,1.0931000000000048e-5,35772,384,null,null,null,null,null,null,null,null],[1.1480995453894138e-5,1.1460999999999937e-5,37422,403,null,null,null,null,null,null,null,null],[1.203297870233655e-5,1.1982000000000225e-5,39204,424,null,null,null,null,null,null,null,null],[1.2612959835678339e-5,1.2563000000000157e-5,41085,445,null,null,null,null,null,null,null,null],[1.317501300945878e-5,1.3123999999999775e-5,42966,467,null,null,null,null,null,null,null,null],[1.379597233608365e-5,1.3776000000000066e-5,45144,490,null,null,null,null,null,null,null,null],[1.4497025404125452e-5,1.4427000000000016e-5,47157,515,null,null,null,null,null,null,null,null],[1.516897464171052e-5,1.5108000000000222e-5,49533,541,null,null,null,null,null,null,null,null],[1.583003904670477e-5,1.57899999999999e-5,51777,568,null,null,null,null,null,null,null,null],[1.661101123318076e-5,1.6561000000000006e-5,54318,596,null,null,null,null,null,null,null,null],[1.7373007722198963e-5,1.7342000000000052e-5,56793,626,null,null,null,null,null,null,null,null],[1.8163991626352072e-5,1.8153999999999827e-5,59499,657,null,null,null,null,null,null,null,null],[1.902499934658408e-5,1.902599999999968e-5,62601,690,null,null,null,null,null,null,null,null],[1.9957020413130522e-5,1.9937000000000253e-5,65538,725,null,null,null,null,null,null,null,null],[2.0938983652740717e-5,2.0889000000000064e-5,68673,761,null,null,null,null,null,null,null,null],[2.1881016436964273e-5,2.188100000000007e-5,71808,799,null,null,null,null,null,null,null,null],[2.296303864568472e-5,2.2943000000000095e-5,75405,839,null,null,null,null,null,null,null,null],[2.422597026452422e-5,2.4175999999999885e-5,79332,881,null,null,null,null,null,null,null,null],[2.527696778997779e-5,2.5278000000000106e-5,83061,925,null,null,null,null,null,null,null,null],[2.650899114087224e-5,2.6500000000000048e-5,86955,972,null,null,null,null,null,null,null,null],[2.779200440272689e-5,2.7782000000000067e-5,91146,1020,null,null,null,null,null,null,null,null],[2.9263959731906652e-5,2.9243999999999885e-5,96129,1071,null,null,null,null,null,null,null,null],[3.059697337448597e-5,3.057699999999995e-5,100848,1125,null,null,null,null,null,null,null,null],[3.2028998248279095e-5,3.2000000000000344e-5,105171,1181,null,null,null,null,null,null,null,null],[3.357295645400882e-5,3.357300000000028e-5,110220,1240,null,null,null,null,null,null,null,null],[5.012302426621318e-5,5.016400000000011e-5,165165,1302,null,null,null,null,null,null,null,null],[3.6999001167714596e-5,3.6998999999999366e-5,121572,1367,null,null,null,null,null,null,null,null],[3.8743019104003906e-5,3.8732999999999997e-5,127281,1436,null,null,null,null,null,null,null,null],[4.057603655382991e-5,4.052499999999959e-5,133320,1507,null,null,null,null,null,null,null,null],[4.261900903657079e-5,4.2588999999999995e-5,139953,1583,null,null,null,null,null,null,null,null],[4.486303078010678e-5,4.482399999999973e-5,147642,1662,null,null,null,null,null,null,null,null],[4.767900099977851e-5,4.766999999999966e-5,155133,1745,null,null,null,null,null,null,null,null],[4.917202750220895e-5,4.9162000000000164e-5,161733,1832,null,null,null,null,null,null,null,null],[5.167600465938449e-5,5.165700000000009e-5,169884,1924,null,null,null,null,null,null,null,null],[5.425198469310999e-5,5.420199999999972e-5,178233,2020,null,null,null,null,null,null,null,null],[5.678599700331688e-5,5.674599999999988e-5,186780,2121,null,null,null,null,null,null,null,null],[5.9721001889556646e-5,5.970200000000002e-5,196284,2227,null,null,null,null,null,null,null,null],[6.253703031688929e-5,6.252699999999972e-5,205722,2339,null,null,null,null,null,null,null,null],[6.572302663698792e-5,6.572300000000017e-5,216249,2456,null,null,null,null,null,null,null,null],[6.883795140311122e-5,6.883900000000023e-5,226380,2579,null,null,null,null,null,null,null,null],[7.222499698400497e-5,7.222500000000041e-5,237600,2708,null,null,null,null,null,null,null,null],[6.405904423445463e-5,6.398899999999954e-5,210309,2843,null,null,null,null,null,null,null,null],[2.3743952624499798e-5,2.364399999999975e-5,77385,2985,null,null,null,null,null,null,null,null],[2.2141030058264732e-5,2.214200000000017e-5,72864,3134,null,null,null,null,null,null,null,null],[2.3212982341647148e-5,2.3213000000000227e-5,76428,3291,null,null,null,null,null,null,null,null],[2.4375971406698227e-5,2.436500000000015e-5,80223,3456,null,null,null,null,null,null,null,null],[2.5618006475269794e-5,2.561799999999982e-5,84315,3629,null,null,null,null,null,null,null,null],[2.8363021556288004e-5,2.837299999999994e-5,93423,3810,null,null,null,null,null,null,null,null],[3.0687020625919104e-5,3.067800000000013e-5,101013,4001,null,null,null,null,null,null,null,null],[3.1539006158709526e-5,3.154899999999964e-5,103950,4201,null,null,null,null,null,null,null,null],[3.268098225817084e-5,3.268100000000055e-5,107580,4411,null,null,null,null,null,null,null,null],[3.450398799031973e-5,3.4524000000000186e-5,113751,4631,null,null,null,null,null,null,null,null],[3.666797420009971e-5,3.669900000000028e-5,120879,4863,null,null,null,null,null,null,null,null],[3.8141035474836826e-5,3.816199999999957e-5,125697,5106,null,null,null,null,null,null,null,null],[4.0164974052459e-5,4.0186000000000215e-5,132363,5361,null,null,null,null,null,null,null,null],[4.172802437096834e-5,4.1748000000000306e-5,137544,5629,null,null,null,null,null,null,null,null],[4.3902022298425436e-5,4.394300000000028e-5,144804,5911,null,null,null,null,null,null,null,null],[4.723801976069808e-5,4.72789999999999e-5,155760,6207,null,null,null,null,null,null,null,null],[4.709698259830475e-5,4.712799999999958e-5,155232,6517,null,null,null,null,null,null,null,null],[4.9632973968982697e-5,4.966300000000014e-5,163680,6843,null,null,null,null,null,null,null,null],[5.179701838642359e-5,5.183700000000076e-5,170808,7185,null,null,null,null,null,null,null,null],[5.471199983730912e-5,5.477300000000015e-5,180477,7544,null,null,null,null,null,null,null,null],[5.782797234132886e-5,5.786900000000032e-5,190674,7921,null,null,null,null,null,null,null,null],[5.9600977692753077e-5,5.9662000000000256e-5,196581,8318,null,null,null,null,null,null,null,null],[6.358901737257838e-5,6.364899999999982e-5,209748,8733,null,null,null,null,null,null,null,null],[6.672402378171682e-5,6.678500000000063e-5,220011,9170,null,null,null,null,null,null,null,null],[7.018097676336765e-5,7.023199999999993e-5,231528,9629,null,null,null,null,null,null,null,null],[7.272500079125166e-5,7.278600000000003e-5,239844,10110,null,null,null,null,null,null,null,null],[7.671298226341605e-5,7.678399999999988e-5,252978,10616,null,null,null,null,null,null,null,null],[8.08810000307858e-5,8.094200000000051e-5,266772,11146,null,null,null,null,null,null,null,null],[8.372700540348887e-5,8.378699999999923e-5,276111,11704,null,null,null,null,null,null,null,null],[8.852500468492508e-5,8.859599999999981e-5,291918,12289,null,null,null,null,null,null,null,null],[9.31830145418644e-5,9.325499999999955e-5,307197,12903,null,null,null,null,null,null,null,null],[9.790301555767655e-5,9.796300000000039e-5,322872,13549,null,null,null,null,null,null,null,null],[1.0296201799064875e-4,1.0304300000000058e-4,339504,14226,null,null,null,null,null,null,null,null],[1.0808097431436181e-4,1.0815299999999972e-4,356367,14937,null,null,null,null,null,null,null,null],[1.1277996236458421e-4,1.1284100000000068e-4,371877,15684,null,null,null,null,null,null,null,null],[1.1815998004749417e-4,1.1822099999999995e-4,389532,16469,null,null,null,null,null,null,null,null],[1.2447196058928967e-4,1.2455300000000034e-4,410388,17292,null,null,null,null,null,null,null,null],[1.3103499077260494e-4,1.3111600000000057e-4,432003,18157,null,null,null,null,null,null,null,null],[1.383880153298378e-4,1.384699999999999e-4,456192,19065,null,null,null,null,null,null,null,null],[1.4522101264446974e-4,1.45292e-4,478665,20018,null,null,null,null,null,null,null,null],[1.5211402205750346e-4,1.52185e-4,501435,21019,null,null,null,null,null,null,null,null],[1.6178202349692583e-4,1.6183300000000012e-4,533214,22070,null,null,null,null,null,null,null,null],[1.624730066396296e-4,1.6253400000000064e-4,535557,23173,null,null,null,null,null,null,null,null],[1.7752096755430102e-4,1.7757299999999858e-4,585123,24332,null,null,null,null,null,null,null,null],[1.8194998847320676e-4,1.8201000000000155e-4,599709,25549,null,null,null,null,null,null,null,null],[1.907559926621616e-4,1.9081699999999938e-4,628815,26826,null,null,null,null,null,null,null,null],[2.0026403944939375e-4,2.003349999999994e-4,660066,28167,null,null,null,null,null,null,null,null],[2.1026202011853456e-4,2.1033399999999952e-4,693033,29576,null,null,null,null,null,null,null,null],[2.207320067100227e-4,2.2078400000000165e-4,727518,31054,null,null,null,null,null,null,null,null],[2.292379504069686e-4,2.2929899999999878e-4,755469,32607,null,null,null,null,null,null,null,null],[2.3785297526046634e-4,2.3793499999999988e-4,783915,34238,null,null,null,null,null,null,null,null],[2.4973496329039335e-4,2.49797999999999e-4,822987,35950,null,null,null,null,null,null,null,null],[2.6241905288770795e-4,2.624820000000014e-4,864798,37747,null,null,null,null,null,null,null,null],[2.7514301473274827e-4,2.751949999999989e-4,906675,39634,null,null,null,null,null,null,null,null],[3.041769959963858e-4,3.0426000000000064e-4,1002408,41616,null,null,null,null,null,null,null,null],[3.146069939248264e-4,3.146590000000001e-4,1036629,43697,null,null,null,null,null,null,null,null],[3.297440125606954e-4,3.298169999999996e-4,1086591,45882,null,null,null,null,null,null,null,null],[3.4820003202185035e-4,3.482620000000002e-4,1147212,48176,null,null,null,null,null,null,null,null],[3.6996096605435014e-4,3.700429999999987e-4,1219185,50585,null,null,null,null,null,null,null,null],[3.89526947401464e-4,3.895900000000004e-4,1283502,53114,null,null,null,null,null,null,null,null],[4.089929861947894e-4,4.0905599999999966e-4,1347555,55770,null,null,null,null,null,null,null,null],[4.279380082152784e-4,4.280120000000002e-4,1409991,58558,null,null,null,null,null,null,null,null],[4.677620017901063e-4,4.6793599999999866e-4,1543674,61486,null,null,null,null,null,null,null,null],[5.022970144636929e-4,5.023709999999997e-4,1654983,64561,null,null,null,null,null,null,null,null],[5.037890514358878e-4,5.038330000000004e-4,1659735,67789,null,null,null,null,null,null,null,null],[5.253000417724252e-4,5.253640000000004e-4,1730751,71178,null,null,null,null,null,null,null,null],[5.584919708780944e-4,5.585559999999982e-4,1839981,74737,null,null,null,null,null,null,null,null],[5.789300194010139e-4,5.79004000000001e-4,1907433,78474,null,null,null,null,null,null,null,null],[6.074730190448463e-4,6.075370000000017e-4,2001351,82398,null,null,null,null,null,null,null,null],[6.277309730648994e-4,6.277950000000004e-4,2068110,86518,null,null,null,null,null,null,null,null],[6.561529589816928e-4,6.562090000000013e-4,2161566,90843,null,null,null,null,null,null,null,null],[6.887339986860752e-4,6.88809999999998e-4,2268981,95386,null,null,null,null,null,null,null,null],[7.265550084412098e-4,7.266000000000009e-4,2393523,100155,null,null,null,null,null,null,null,null],[7.803859771229327e-4,7.804609999999997e-4,2570964,105163,null,null,null,null,null,null,null,null],[8.119750418700278e-4,8.120310000000013e-4,2674881,110421,null,null,null,null,null,null,null,null],[8.376420009881258e-4,8.37708999999999e-4,2759427,115942,null,null,null,null,null,null,null,null],[8.790089632384479e-4,8.790759999999995e-4,2895717,121739,null,null,null,null,null,null,null,null],[9.422269649803638e-4,9.42303999999998e-4,3104013,127826,null,null,null,null,null,null,null,null],[1.03670300450176e-3,1.0367810000000005e-3,3415170,134217,null,null,null,null,null,null,null,null],[1.0511210421100259e-3,1.0511979999999997e-3,3462690,140928,null,null,null,null,null,null,null,null],[1.0980780352838337e-3,1.0981559999999994e-3,3617757,147975,null,null,null,null,null,null,null,null],[1.1848200228996575e-3,1.1848780000000003e-3,3903108,155373,null,null,null,null,null,null,null,null],[1.2174200383014977e-3,1.2174999999999998e-3,4010424,163142,null,null,null,null,null,null,null,null],[1.316634996328503e-3,1.3166949999999997e-3,4337223,171299,null,null,null,null,null,null,null,null],[1.4903200208209455e-3,1.4903900000000012e-3,4909311,179864,null,null,null,null,null,null,null,null],[1.5586370136588812e-3,1.5587289999999948e-3,5134371,188858,null,null,null,null,null,null,null,null],[1.610192994121462e-3,1.6102750000000013e-3,5304123,198300,null,null,null,null,null,null,null,null],[1.714357000309974e-3,1.7144399999999976e-3,5647323,208215,null,null,null,null,null,null,null,null],[1.7925130086950958e-3,1.7925869999999983e-3,5904657,218626,null,null,null,null,null,null,null,null],[1.8997430452145636e-3,1.899816999999998e-3,6257955,229558,null,null,null,null,null,null,null,null],[2.0159700070507824e-3,2.0160349999999994e-3,6640623,241036,null,null,null,null,null,null,null,null],[2.134780981577933e-3,2.134857000000004e-3,7032102,253087,null,null,null,null,null,null,null,null],[2.1779019734822214e-3,2.1779680000000023e-3,7174035,265742,null,null,null,null,null,null,null,null],[2.3244559997692704e-3,2.324532000000004e-3,7656825,279029,null,null,null,null,null,null,null,null],[2.398522978182882e-3,2.398601e-3,7900794,292980,null,null,null,null,null,null,null,null],[2.5498250033706427e-3,2.549893999999997e-3,8399094,307629,null,null,null,null,null,null,null,null],[2.668687026016414e-3,2.668786999999999e-3,8790705,323011,null,null,null,null,null,null,null,null],[2.7719700010493398e-3,2.7720509999999976e-3,9130836,339161,null,null,null,null,null,null,null,null],[2.939321973826736e-3,2.9394040000000066e-3,9682134,356119,null,null,null,null,null,null,null,null],[3.0518610146827996e-3,3.051944000000001e-3,10052823,373925,null,null,null,null,null,null,null,null],[3.1971129938028753e-3,3.197196999999999e-3,10531191,392622,null,null,null,null,null,null,null,null],[3.3623609924688935e-3,3.3624659999999945e-3,11075559,412253,null,null,null,null,null,null,null,null],[3.5384090151637793e-3,3.538505999999997e-3,11655435,432866,null,null,null,null,null,null,null,null],[3.69921897072345e-3,3.6993169999999936e-3,12185085,454509,null,null,null,null,null,null,null,null],[3.8921490195207298e-3,3.8922379999999923e-3,12820533,477234,null,null,null,null,null,null,null,null],[4.083676030859351e-3,4.083767000000002e-3,13451427,501096,null,null,null,null,null,null,null,null],[4.291393968742341e-3,4.291496000000006e-3,14135649,526151,null,null,null,null,null,null,null,null],[4.5067850151099265e-3,4.506879000000005e-3,14845083,552458,null,null,null,null,null,null,null,null],[4.781036986969411e-3,4.781151999999997e-3,15748524,580081,null,null,null,null,null,null,null,null],[4.970660957042128e-3,4.970757999999992e-3,16373016,609086,null,null,null,null,null,null,null,null],[5.210368020925671e-3,5.210486e-3,17162574,639540,null,null,null,null,null,null,null,null],[5.471844982821494e-3,5.471965999999995e-3,18023874,671517,null,null,null,null,null,null,null,null],[5.742268986068666e-3,5.742382000000004e-3,18914643,705093,null,null,null,null,null,null,null,null],[6.031569966580719e-3,6.031654000000011e-3,19867419,740347,null,null,null,null,null,null,null,null],[6.337188999168575e-3,6.33729600000002e-3,20874150,777365,null,null,null,null,null,null,null,null],[6.658619036898017e-3,6.658737999999997e-3,21932955,816233,null,null,null,null,null,null,null,null],[6.9919200032018125e-3,6.992042000000004e-3,23030733,857045,null,null,null,null,null,null,null,null],[7.334538968279958e-3,7.334662999999991e-3,24159333,899897,null,null,null,null,null,null,null,null],[7.72284297272563e-3,7.722961e-3,25438347,944892,null,null,null,null,null,null,null,null],[8.110958035103977e-3,8.111067999999999e-3,26716602,992136,null,null,null,null,null,null,null,null],[8.519057999365032e-3,8.51919100000001e-3,28060857,1041743,null,null,null,null,null,null,null,null],[9.049738000612706e-3,9.049976000000015e-3,29809362,1093831,null,null,null,null,null,null,null,null],[9.382657997775823e-3,9.382789000000002e-3,30905325,1148522,null,null,null,null,null,null,null,null],[9.854088013526052e-3,9.854240999999986e-3,32458305,1205948,null,null,null,null,null,null,null,null],[1.0322000016458333e-2,1.0322137000000009e-2,33999405,1266246,null,null,null,null,null,null,null,null],[1.0891443002037704e-2,1.0891593999999977e-2,35875191,1329558,null,null,null,null,null,null,null,null],[1.1401584022678435e-2,1.1401719000000005e-2,37555386,1396036,null,null,null,null,null,null,null,null],[1.1973269982263446e-2,1.197342899999998e-2,39438564,1465838,null,null,null,null,null,null,null,null],[1.2587225995957851e-2,1.258737900000001e-2,41460771,1539130,null,null,null,null,null,null,null,null],[1.3198696018662304e-2,1.3198843999999987e-2,43474926,1616086,null,null,null,null,null,null,null,null],[1.3863054977264255e-2,1.3863228000000005e-2,45663222,1696890,null,null,null,null,null,null,null,null],[1.4567888982128352e-2,1.4568057999999995e-2,47984805,1781735,null,null,null,null,null,null,null,null],[1.5372741036117077e-2,1.5372965000000016e-2,50636091,1870822,null,null,null,null,null,null,null,null],[1.6047809971496463e-2,1.6047999000000035e-2,52859400,1964363,null,null,null,null,null,null,null,null],[1.68577489675954e-2,1.6857944999999985e-2,55527285,2062581,null,null,null,null,null,null,null,null],[1.7932684044353664e-2,1.7933048000000007e-2,59068845,2165710,null,null,null,null,null,null,null,null],[1.858933997573331e-2,1.858954800000001e-2,61230774,2273996,null,null,null,null,null,null,null,null],[1.9519192981533706e-2,1.951939800000002e-2,64293603,2387695,null,null,null,null,null,null,null,null],[2.0560456032399088e-2,2.056076899999998e-2,67723821,2507080,null,null,null,null,null,null,null,null],[2.1535142965149134e-2,2.153538300000002e-2,70933863,2632434,null,null,null,null,null,null,null,null],[2.2682933951728046e-2,2.268316199999998e-2,74714508,2764056,null,null,null,null,null,null,null,null],[2.3774439992848784e-2,2.377467600000005e-2,78309759,2902259,null,null,null,null,null,null,null,null],[2.4924944969825447e-2,2.4925191000000013e-2,82099380,3047372,null,null,null,null,null,null,null,null],[3.036867902847007e-2,3.0369775999999904e-2,100033296,3199740,null,null,null,null,null,null,null,null],[3.0574041011277586e-2,3.0574417999999937e-2,100707057,3359727,null,null,null,null,null,null,null,null],[3.1890206038951874e-2,3.189054300000005e-2,105041904,3527714,null,null,null,null,null,null,null,null],[3.3934498031158e-2,3.3931794000000015e-2,111776115,3704100,null,null,null,null,null,null,null,null],[3.533452999545261e-2,3.533499200000001e-2,116387502,3889305,null,null,null,null,null,null,null,null],[3.685817099176347e-2,3.6858515000000036e-2,121405614,4083770,null,null,null,null,null,null,null,null],[3.8699414988514036e-2,3.8699821999999995e-2,127470453,4287958,null,null,null,null,null,null,null,null],[4.083123098826036e-2,4.083161499999999e-2,134492259,4502356,null,null,null,null,null,null,null,null],[4.337995400419459e-2,4.338044699999999e-2,142887855,4727474,null,null,null,null,null,null,null,null],[4.5395844033919275e-2,4.539630100000003e-2,149527587,4963848,null,null,null,null,null,null,null,null],[4.77365399710834e-2,4.773458999999991e-2,157237839,5212040,null,null,null,null,null,null,null,null],[4.9544300010893494e-2,4.954481900000007e-2,163191996,5472642,null,null,null,null,null,null,null,null],[5.2063490031287074e-2,5.2063996e-2,171489747,5746274,null,null,null,null,null,null,null,null],[5.445809499360621e-2,5.4458600000000024e-2,179377110,6033588,null,null,null,null,null,null,null,null],[5.78279200126417e-2,5.782849899999998e-2,190476957,6335268,null,null,null,null,null,null,null,null],[6.084545800695196e-2,6.0846069999999974e-2,200416557,6652031,null,null,null,null,null,null,null,null],[6.384176603751257e-2,6.384235999999999e-2,210285636,6984633,null,null,null,null,null,null,null,null],[6.660954799735919e-2,6.661014200000004e-2,219402183,7333864,null,null,null,null,null,null,null,null],[6.95765310083516e-2,6.95771380000001e-2,229174968,7700558,null,null,null,null,null,null,null,null],[7.366417499724776e-2,7.36648820000001e-2,242639331,8085585,null,null,null,null,null,null,null,null],[7.751908397767693e-2,7.751557099999995e-2,255336675,8489865,null,null,null,null,null,null,null,null],[8.111650496721268e-2,8.111720600000005e-2,267185787,8914358,null,null,null,null,null,null,null,null],[8.518016198650002e-2,8.51809750000001e-2,280571346,9360076,null,null,null,null,null,null,null,null],[8.914823300438002e-2,8.914908500000007e-2,293641656,9828080,null,null,null,null,null,null,null,null],[9.34192180284299e-2,9.342002199999988e-2,307709061,10319484,null,null,null,null,null,null,null,null],[9.867934900103137e-2,9.868026100000016e-2,325035711,10835458,null,null,null,null,null,null,null,null],[0.10399009298998863,0.10399100500000014,342528120,11377231,null,null,null,null,null,null,null,null],[0.10917620599502698,0.10917719600000009,359610702,11946092,null,null,null,null,null,null,null,null],[0.11496545298723504,0.11496801899999998,378685263,12543397,null,null,null,null,null,null,null,null],[0.11922384501667693,0.11922490899999971,392705874,13170567,null,null,null,null,null,null,null,null],[0.1258279909961857,0.12582455700000006,414458682,13829095,null,null,null,null,null,null,null,null],[0.1320721060037613,0.13207447000000005,435030156,14520550,null,null,null,null,null,null,null,null],[0.1393518340191804,0.13935448100000025,459008979,15246578,null,null,null,null,null,null,null,null],[0.14501006697537377,0.14501131299999992,477641736,16008907,null,null,null,null,null,null,null,null],[0.1533388089737855,0.15334022800000024,505075692,16809352,null,null,null,null,null,null,null,null],[0.16058630601037294,0.16059004199999993,528955878,17649820,null,null,null,null,null,null,null,null],[0.1696129809715785,0.1696153220000003,558683004,18532311,null,null,null,null,null,null,null,null],[0.1769879759522155,0.17698957999999987,582972258,19458926,null,null,null,null,null,null,null,null],[0.1861679860157892,0.18617129200000004,613215768,20431872,null,null,null,null,null,null,null,null],[0.19564638298470527,0.1956496689999998,644435913,21453466,null,null,null,null,null,null,null,null],[0.2049338149954565,0.20493568599999978,675022161,22526139,null,null,null,null,null,null,null,null],[0.214223189977929,0.2142251599999998,705620025,23652446,null,null,null,null,null,null,null,null],[0.22455388703383505,0.22455564300000042,739646292,24835069,null,null,null,null,null,null,null,null],[0.23659971298184246,0.2365938639999996,779324502,26076822,null,null,null,null,null,null,null,null]],"reportName":"fib/1","reportNumber":0,"reportOutliers":{"highMild":0,"highSevere":1,"lowMild":0,"lowSevere":0,"samplesSeen":44}},{"reportAnalysis":{"anMean":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.4639016642762622e-10,"confIntUDX":2.1670345260269087e-10},"estPoint":2.4729011445781207e-8},"anOutlierVar":{"ovDesc":"a moderate","ovEffect":"Moderate","ovFraction":0.36557582003817074},"anRegress":[{"regCoeffs":{"iters":{"estError":{"confIntCL":5.0e-2,"confIntLDX":2.5776555757917e-10,"confIntUDX":2.961541932491451e-10},"estPoint":2.4944687628466725e-8},"y":{"estError":{"confIntCL":5.0e-2,"confIntLDX":9.759173441256622e-5,"confIntUDX":7.327400413269949e-5},"estPoint":-5.027601299366412e-5}},"regRSquare":{"estError":{"confIntCL":5.0e-2,"confIntLDX":4.522295681896882e-5,"confIntUDX":1.844665932593248e-4},"estPoint":0.9992739833517263},"regResponder":"time"}],"anStdDev":{"estError":{"confIntCL":5.0e-2,"confIntLDX":9.656665140957106e-11,"confIntUDX":5.290221906756506e-11},"estPoint":5.812261496408389e-10}},"reportKDEs":[{"kdePDF":[-25.033060231416904,471.87721293456934,7934.124858778293,127930.45319806116,1412061.346520924,1.1077764392941294e7,6.233129370328541e7,2.5629713032143623e8,7.899823653082111e8,1.8815655400092204e9,3.564033530117799e9,5.481770206663521e9,6.927359738730565e9,7.22527424514244e9,6.215560201028286e9,4.452052732677399e9,2.8457586379722295e9,1.9348454192488823e9,1.594267022072115e9,1.4542940473538778e9,1.3030050633789275e9,1.1043340056067436e9,9.358100677366215e8,8.962853451772625e8,9.277135991558222e8,8.454140099618506e8,5.956708689054052e8,3.2603919686349016e8,1.970481137240725e8,2.4362745682386443e8,3.761964358371315e8,4.456346929150531e8,3.709349714806778e8,2.1477966976330283e8,8.6414559139467e7,2.415627063543913e7,4691436.321117351,633100.9554126489,59295.240049212116,3914.150593529916,128.95819955401882,49.00821402111042,-41.08150919938445,38.994140897648805,-36.85440275838137,34.776604804716676,-32.7551219528178,30.7895343529821,-28.880379979720317,27.027923444048145,-25.23164348532409,23.490039575118793,-21.80062823949053,20.16005965210942,-18.56417906151408,17.00817320999244,-15.486611470234786,13.993533487949298,-12.522444599434126,11.066331973169167,-9.617618705586521,8.16810480705756,-6.708881546468919,5.230188726646448,-3.721286732949173,2.1702230932883806,-0.5636264266692081,-1.1136063031004921,2.878645595380913,-4.7511287464240395,6.753642337162726,-8.912228654612539,11.256973450316835,-13.822549250503599,16.648714781815666,-19.780532251611056,23.26811658942905,-27.16346056925755,31.646960137924637,-30.903148116382834,216.75293522649707,3817.6686415191775,59401.33469750879,632984.1762799734,4691564.901964832,2.41561229352846e7,8.641453588106756e7,2.14775455086061e8,3.708719526340991e8,4.4494207872407115e8,3.708719553903246e8,2.147754495359412e8,8.64145443013773e7,2.4156111527951457e7,4691579.456550821,632966.2670567362,59422.85766551803,3792.2179403069385,246.6368317886657,-59.671629616678445,257.59207046422495,4153.781963386106,67514.4638789105,759752.145457279,6084446.254522076,3.4931623052918054e7,1.4549490574895728e8,4.465698725648631e8,1.0310107440369058e9,1.8380744207237566e9,2.610263940880715e9,3.0471790187068405e9,3.004599623047369e9,2.583510303117147e9,2.0691896182992766e9,1.6912978534152453e9,1.4185357764903119e9,1.0896734779131424e9,6.82837669371261e8,3.2673895038146025e8,1.153890368389826e8,2.9488744496974308e7,5384323.547791064,696209.8209623827,63433.20502040137,4013.7537630110273,199.6779084861687,-0.6058604912350835],"kdeType":"time","kdeValues":[2.414797231110446e-8,2.4160956617807207e-8,2.417394092450995e-8,2.4186925231212694e-8,2.419990953791544e-8,2.4212893844618184e-8,2.4225878151320926e-8,2.423886245802367e-8,2.4251846764726417e-8,2.4264831071429162e-8,2.4277815378131904e-8,2.429079968483465e-8,2.4303783991537394e-8,2.4316768298240136e-8,2.432975260494288e-8,2.4342736911645627e-8,2.4355721218348372e-8,2.4368705525051114e-8,2.438168983175386e-8,2.4394674138456604e-8,2.440765844515935e-8,2.442064275186209e-8,2.4433627058564837e-8,2.4446611365267582e-8,2.4459595671970324e-8,2.447257997867307e-8,2.4485564285375814e-8,2.449854859207856e-8,2.45115328987813e-8,2.4524517205484047e-8,2.4537501512186792e-8,2.4550485818889534e-8,2.456347012559228e-8,2.4576454432295024e-8,2.458943873899777e-8,2.460242304570051e-8,2.4615407352403257e-8,2.4628391659106002e-8,2.4641375965808747e-8,2.465436027251149e-8,2.4667344579214234e-8,2.468032888591698e-8,2.469331319261972e-8,2.4706297499322466e-8,2.4719281806025212e-8,2.4732266112727957e-8,2.47452504194307e-8,2.4758234726133444e-8,2.477121903283619e-8,2.4784203339538935e-8,2.4797187646241676e-8,2.4810171952944422e-8,2.4823156259647167e-8,2.483614056634991e-8,2.4849124873052654e-8,2.48621091797554e-8,2.4875093486458145e-8,2.4888077793160886e-8,2.4901062099863632e-8,2.4914046406566377e-8,2.492703071326912e-8,2.4940015019971864e-8,2.495299932667461e-8,2.4965983633377355e-8,2.4978967940080096e-8,2.4991952246782842e-8,2.5004936553485587e-8,2.5017920860188332e-8,2.5030905166891074e-8,2.504388947359382e-8,2.5056873780296565e-8,2.5069858086999306e-8,2.5082842393702052e-8,2.5095826700404797e-8,2.5108811007107542e-8,2.5121795313810284e-8,2.513477962051303e-8,2.5147763927215775e-8,2.516074823391852e-8,2.5173732540621262e-8,2.5186716847324007e-8,2.5199701154026752e-8,2.5212685460729494e-8,2.522566976743224e-8,2.5238654074134985e-8,2.525163838083773e-8,2.5264622687540472e-8,2.5277606994243217e-8,2.5290591300945962e-8,2.5303575607648704e-8,2.531655991435145e-8,2.5329544221054195e-8,2.534252852775694e-8,2.5355512834459682e-8,2.5368497141162427e-8,2.5381481447865172e-8,2.5394465754567917e-8,2.540745006127066e-8,2.5420434367973404e-8,2.543341867467615e-8,2.544640298137889e-8,2.5459387288081637e-8,2.5472371594784382e-8,2.5485355901487127e-8,2.549834020818987e-8,2.5511324514892614e-8,2.552430882159536e-8,2.5537293128298105e-8,2.5550277435000847e-8,2.5563261741703592e-8,2.5576246048406337e-8,2.558923035510908e-8,2.5602214661811824e-8,2.561519896851457e-8,2.5628183275217315e-8,2.5641167581920057e-8,2.5654151888622802e-8,2.5667136195325547e-8,2.568012050202829e-8,2.5693104808731034e-8,2.570608911543378e-8,2.5719073422136525e-8,2.5732057728839267e-8,2.5745042035542012e-8,2.5758026342244757e-8,2.5771010648947503e-8,2.5783994955650244e-8,2.579697926235299e-8]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","peakMbAllocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportMeasured":[[1.1220108717679977e-6,7.109999993204497e-7,1683,1,null,null,null,null,null,null,null,null],[4.2997999116778374e-7,3.8100000043783666e-7,1221,2,null,null,null,null,null,null,null,null],[3.6100391298532486e-7,3.4000000059819513e-7,1056,3,null,null,null,null,null,null,null,null],[3.600143827497959e-7,3.5099999973198237e-7,1089,4,null,null,null,null,null,null,null,null],[3.8102734833955765e-7,3.49999999649242e-7,1056,5,null,null,null,null,null,null,null,null],[3.909808583557606e-7,3.8099999954965824e-7,1221,6,null,null,null,null,null,null,null,null],[4.200264811515808e-7,4.1100000025551253e-7,1287,7,null,null,null,null,null,null,null,null],[4.4103944674134254e-7,4.3000000005122274e-7,1386,8,null,null,null,null,null,null,null,null],[4.909816198050976e-7,4.709999998908643e-7,1518,9,null,null,null,null,null,null,null,null],[5.00993337482214e-7,4.809999998300896e-7,1617,10,null,null,null,null,null,null,null,null],[5.509937182068825e-7,5.30999999526216e-7,1716,11,null,null,null,null,null,null,null,null],[5.509937182068825e-7,5.410000003536197e-7,1716,12,null,null,null,null,null,null,null,null],[6.00994098931551e-7,5.710000001712956e-7,1815,13,null,null,null,null,null,null,null,null],[6.210175342857838e-7,6.009999999889715e-7,1947,14,null,null,null,null,null,null,null,null],[6.509944796562195e-7,6.41000000634051e-7,1980,15,null,null,null,null,null,null,null,null],[6.710179150104523e-7,6.509999996850979e-7,2046,16,null,null,null,null,null,null,null,null],[6.909831427037716e-7,6.719999996462889e-7,2145,17,null,null,null,null,null,null,null,null],[7.310300134122372e-7,7.120000002913685e-7,2310,18,null,null,null,null,null,null,null,null],[7.709604687988758e-7,7.420000001090443e-7,2376,19,null,null,null,null,null,null,null,null],[7.810303941369057e-7,7.719999999267202e-7,2442,20,null,null,null,null,null,null,null,null],[8.119968697428703e-7,7.819999998659455e-7,2574,21,null,null,null,null,null,null,null,null],[8.320203050971031e-7,8.219999996228466e-7,11649,22,null,null,null,null,null,null,null,null],[9.320210665464401e-7,9.21999999903278e-7,3003,23,null,null,null,null,null,null,null,null],[9.320210665464401e-7,9.020000000248274e-7,2904,25,null,null,null,null,null,null,null,null],[9.710201993584633e-7,9.509999996382135e-7,3069,26,null,null,null,null,null,null,null,null],[9.720097295939922e-7,9.619999996601791e-7,3102,27,null,null,null,null,null,null,null,null],[1.001986674964428e-6,9.91999999477855e-7,3168,28,null,null,null,null,null,null,null,null],[1.0619987733662128e-6,1.0420000000621599e-6,3366,30,null,null,null,null,null,null,null,null],[1.0919757187366486e-6,1.0619999999406105e-6,3465,31,null,null,null,null,null,null,null,null],[1.133012119680643e-6,1.1219999995759622e-6,3630,33,null,null,null,null,null,null,null,null],[1.192034687846899e-6,1.1820000000994924e-6,3828,35,null,null,null,null,null,null,null,null],[1.2219534255564213e-6,1.2129999999999086e-6,3927,36,null,null,null,null,null,null,null,null],[1.292035449296236e-6,1.2730000005234388e-6,4158,38,null,null,null,null,null,null,null,null],[1.333013642579317e-6,1.31300000028034e-6,4290,40,null,null,null,null,null,null,null,null],[1.3830140233039856e-6,1.3629999999764664e-6,4488,42,null,null,null,null,null,null,null,null],[1.4430261217057705e-6,1.4330000004392218e-6,4653,44,null,null,null,null,null,null,null,null],[1.5230034478008747e-6,1.5119999998702838e-6,4917,47,null,null,null,null,null,null,null,null],[1.5730038285255432e-6,1.5629999996491506e-6,5115,49,null,null,null,null,null,null,null,null],[1.6729463823139668e-6,1.6430000000511313e-6,5412,52,null,null,null,null,null,null,null,null],[1.7130514606833458e-6,1.7030000005746615e-6,5544,54,null,null,null,null,null,null,null,null],[1.8139835447072983e-6,1.7930000000276891e-6,5841,57,null,null,null,null,null,null,null,null],[1.894019078463316e-6,1.8829999994807167e-6,6138,60,null,null,null,null,null,null,null,null],[1.9639846868813038e-6,1.952999999943472e-6,6369,63,null,null,null,null,null,null,null,null],[2.0440202206373215e-6,2.024000000488968e-6,6633,66,null,null,null,null,null,null,null,null],[2.134009264409542e-6,2.123999999881221e-6,6930,69,null,null,null,null,null,null,null,null],[2.263986971229315e-6,2.2340000001008775e-6,7293,73,null,null,null,null,null,null,null,null],[2.334010787308216e-6,2.31499999969742e-6,7590,76,null,null,null,null,null,null,null,null],[2.425047568976879e-6,2.4149999999778515e-6,7920,80,null,null,null,null,null,null,null,null],[2.555025275796652e-6,2.5350000001367334e-6,8283,84,null,null,null,null,null,null,null,null],[3.0249939300119877e-6,3.0060000000275977e-6,9900,89,null,null,null,null,null,null,null,null],[2.855027560144663e-6,2.835000000089849e-6,9306,93,null,null,null,null,null,null,null,null],[2.9549701139330864e-6,2.9450000003095056e-6,9603,98,null,null,null,null,null,null,null,null],[3.105960786342621e-6,3.0860000004295784e-6,10098,103,null,null,null,null,null,null,null,null],[3.25602013617754e-6,3.2259999995787325e-6,10560,108,null,null,null,null,null,null,null,null],[3.3659744076430798e-6,3.356000000565018e-6,10989,113,null,null,null,null,null,null,null,null],[3.5470002330839634e-6,3.5369999995538137e-6,11583,119,null,null,null,null,null,null,null,null],[3.69601184502244e-6,3.6760000003965843e-6,12078,125,null,null,null,null,null,null,null,null],[3.857014235109091e-6,3.8469999994461546e-6,12639,131,null,null,null,null,null,null,null,null],[4.058005288243294e-6,4.047000000007017e-6,13266,138,null,null,null,null,null,null,null,null],[4.217028617858887e-6,4.208000000005541e-6,13794,144,null,null,null,null,null,null,null,null],[4.447996616363525e-6,4.437999999495901e-6,14553,152,null,null,null,null,null,null,null,null],[4.667963366955519e-6,4.649000000078729e-6,15246,159,null,null,null,null,null,null,null,null],[4.869012627750635e-6,4.849000000639592e-6,15906,167,null,null,null,null,null,null,null,null],[5.139969289302826e-6,5.128999999826078e-6,16830,176,null,null,null,null,null,null,null,null],[5.390029400587082e-6,5.359999999399179e-6,17622,185,null,null,null,null,null,null,null,null],[5.620007868856192e-6,5.601000000687861e-6,18414,194,null,null,null,null,null,null,null,null],[5.901034455746412e-6,5.880999999874348e-6,19305,204,null,null,null,null,null,null,null,null],[6.192014552652836e-6,6.1719999999709785e-6,20229,214,null,null,null,null,null,null,null,null],[6.471993401646614e-6,6.461999999984869e-6,21219,224,null,null,null,null,null,null,null,null],[6.793008651584387e-6,6.783000000787354e-6,22242,236,null,null,null,null,null,null,null,null],[7.104012183845043e-6,7.0939999998742564e-6,23265,247,null,null,null,null,null,null,null,null],[7.483991794288158e-6,7.474000000229353e-6,24519,260,null,null,null,null,null,null,null,null],[7.824040949344635e-6,7.814000000827548e-6,25674,273,null,null,null,null,null,null,null,null],[8.20501009002328e-6,8.195000000377206e-6,26928,287,null,null,null,null,null,null,null,null],[8.616014383733273e-6,8.60599999974454e-6,28248,301,null,null,null,null,null,null,null,null],[9.01601742953062e-6,9.007000000060827e-6,29568,316,null,null,null,null,null,null,null,null],[9.457988198846579e-6,9.448000000134016e-6,31053,332,null,null,null,null,null,null,null,null],[9.91899287328124e-6,9.908000000002914e-6,32604,348,null,null,null,null,null,null,null,null],[1.0409974493086338e-5,1.039899999977223e-5,34188,366,null,null,null,null,null,null,null,null],[1.0910967830568552e-5,1.089999999948077e-5,35838,384,null,null,null,null,null,null,null,null],[1.1452008038759232e-5,1.1431999999977904e-5,37587,403,null,null,null,null,null,null,null,null],[1.2033036909997463e-5,1.202300000002765e-5,39567,424,null,null,null,null,null,null,null,null],[1.2614007573574781e-5,1.2594000000198946e-5,41448,445,null,null,null,null,null,null,null,null],[1.3204000424593687e-5,1.3193999999216999e-5,43395,467,null,null,null,null,null,null,null,null],[1.3855984434485435e-5,1.3845999999873015e-5,45573,490,null,null,null,null,null,null,null,null],[1.4556979294866323e-5,1.4558000000164384e-5,47850,515,null,null,null,null,null,null,null,null],[1.5277997590601444e-5,1.5268999999484834e-5,50193,541,null,null,null,null,null,null,null,null],[1.602998236194253e-5,1.6010000000399316e-5,52701,568,null,null,null,null,null,null,null,null],[1.6811012756079435e-5,1.6790999999294343e-5,55242,596,null,null,null,null,null,null,null,null],[1.7642974853515625e-5,1.7642999999623044e-5,58047,626,null,null,null,null,null,null,null,null],[1.848494866862893e-5,1.848500000001252e-5,60786,657,null,null,null,null,null,null,null,null],[1.942599192261696e-5,1.9426000000599686e-5,63921,690,null,null,null,null,null,null,null,null],[2.0388048142194748e-5,2.037800000032064e-5,67089,725,null,null,null,null,null,null,null,null],[2.138002309948206e-5,2.137999999973772e-5,70356,761,null,null,null,null,null,null,null,null],[2.2432010155171156e-5,2.2431999999739105e-5,73821,799,null,null,null,null,null,null,null,null],[2.3544009309262037e-5,2.3533999999436617e-5,77451,839,null,null,null,null,null,null,null,null],[2.4726963602006435e-5,2.4726999999558075e-5,81378,881,null,null,null,null,null,null,null,null],[2.5938032194972038e-5,2.5928999999536018e-5,85371,925,null,null,null,null,null,null,null,null],[2.7260975912213326e-5,2.7260999999612068e-5,89727,972,null,null,null,null,null,null,null,null],[2.8593000024557114e-5,2.8593999999770858e-5,94149,1020,null,null,null,null,null,null,null,null],[3.00369574688375e-5,3.00269999993219e-5,98835,1071,null,null,null,null,null,null,null,null],[3.154895966872573e-5,3.154900000001959e-5,103851,1125,null,null,null,null,null,null,null,null],[3.3070973586291075e-5,3.307199999991184e-5,108900,1181,null,null,null,null,null,null,null,null],[3.471499076113105e-5,3.4705000000023745e-5,114246,1240,null,null,null,null,null,null,null,null],[3.642798401415348e-5,3.642799999958868e-5,119889,1302,null,null,null,null,null,null,null,null],[3.823102451860905e-5,3.823199999963833e-5,125895,1367,null,null,null,null,null,null,null,null],[4.01550205424428e-5,4.015499999976413e-5,132165,1436,null,null,null,null,null,null,null,null],[4.2118015699088573e-5,4.21079999997076e-5,138666,1507,null,null,null,null,null,null,null,null],[4.424300277605653e-5,4.424299999961079e-5,145662,1583,null,null,null,null,null,null,null,null],[4.863098729401827e-5,4.8641000000237966e-5,160215,1662,null,null,null,null,null,null,null,null],[4.875101149082184e-5,4.8750999999569444e-5,160545,1745,null,null,null,null,null,null,null,null],[5.116499960422516e-5,5.11760000003747e-5,168498,1832,null,null,null,null,null,null,null,null],[5.370000144466758e-5,5.370099999968403e-5,176847,1924,null,null,null,null,null,null,null,null],[5.636498099192977e-5,5.636599999991887e-5,185658,2020,null,null,null,null,null,null,null,null],[5.9180951211601496e-5,5.918000000004753e-5,194898,2121,null,null,null,null,null,null,null,null],[6.214599125087261e-5,6.214600000031822e-5,204633,2227,null,null,null,null,null,null,null,null],[6.526097422465682e-5,6.525199999973808e-5,214896,2339,null,null,null,null,null,null,null,null],[6.850797217339277e-5,6.849800000008344e-5,225621,2456,null,null,null,null,null,null,null,null],[7.190497126430273e-5,7.191500000036655e-5,236808,2579,null,null,null,null,null,null,null,null],[7.549097063019872e-5,7.550100000042193e-5,248688,2708,null,null,null,null,null,null,null,null],[7.924699457362294e-5,7.925899999960961e-5,261030,2843,null,null,null,null,null,null,null,null],[8.32049991004169e-5,8.320600000022438e-5,274032,2985,null,null,null,null,null,null,null,null],[8.733296999707818e-5,8.733399999982794e-5,287595,3134,null,null,null,null,null,null,null,null],[9.17009892873466e-5,9.170199999974926e-5,301983,3291,null,null,null,null,null,null,null,null],[9.627902181819081e-5,9.628000000017067e-5,317130,3456,null,null,null,null,null,null,null,null],[1.0111898882314563e-4,1.0111899999998286e-4,333036,3629,null,null,null,null,null,null,null,null],[1.0612799087539315e-4,1.061289999997328e-4,349569,3810,null,null,null,null,null,null,null,null],[1.1144799645990133e-4,1.1145900000020248e-4,367059,4001,null,null,null,null,null,null,null,null],[1.1698796879500151e-4,1.1698899999945667e-4,385341,4201,null,null,null,null,null,null,null,null],[1.2283900287002325e-4,1.2285000000034074e-4,404646,4411,null,null,null,null,null,null,null,null],[1.2893998064100742e-4,1.2897100000053285e-4,424776,4631,null,null,null,null,null,null,null,null],[1.3539200881496072e-4,1.3542299999969032e-4,446127,4863,null,null,null,null,null,null,null,null],[1.4218600699678063e-4,1.4220699999967223e-4,468468,5106,null,null,null,null,null,null,null,null],[1.4924799324944615e-4,1.4928900000032996e-4,491700,5361,null,null,null,null,null,null,null,null],[1.56712019816041e-4,1.5675399999981465e-4,516318,5629,null,null,null,null,null,null,null,null],[1.6456696903333068e-4,1.6459900000054262e-4,542223,5911,null,null,null,null,null,null,null,null],[1.7280294559895992e-4,1.7284299999964503e-4,569382,6207,null,null,null,null,null,null,null,null],[1.8137803999707103e-4,1.8143000000048204e-4,597729,6517,null,null,null,null,null,null,null,null],[1.9045500084757805e-4,1.9049700000017822e-4,627528,6843,null,null,null,null,null,null,null,null],[1.999730011448264e-4,2.000149999998868e-4,659010,7185,null,null,null,null,null,null,null,null],[2.1001201821491122e-4,2.1006299999992706e-4,692043,7544,null,null,null,null,null,null,null,null],[2.2042100317776203e-4,2.2047299999972125e-4,726363,7921,null,null,null,null,null,null,null,null],[2.338959602639079e-4,2.339380000000446e-4,770616,8318,null,null,null,null,null,null,null,null],[2.4533801479265094e-4,2.4538999999990097e-4,808500,8733,null,null,null,null,null,null,null,null],[2.5517598260194063e-4,2.5523800000026853e-4,840840,9170,null,null,null,null,null,null,null,null],[2.6803999207913876e-4,2.6809100000058095e-4,883179,9629,null,null,null,null,null,null,null,null],[2.814849722199142e-4,2.815370000002204e-4,927564,10110,null,null,null,null,null,null,null,null],[2.9551098123192787e-4,2.955729999998269e-4,973797,10616,null,null,null,null,null,null,null,null],[3.097070148214698e-4,3.0974999999955344e-4,1020459,11146,null,null,null,null,null,null,null,null],[3.240240039303899e-4,3.2408700000008395e-4,1067715,11704,null,null,null,null,null,null,null,null],[3.404549788683653e-4,3.4050699999976786e-4,1121802,12289,null,null,null,null,null,null,null,null],[3.5735598066821694e-4,3.574100000003355e-4,1177407,12903,null,null,null,null,null,null,null,null],[3.7583097582682967e-4,3.759030000001218e-4,1238391,13549,null,null,null,null,null,null,null,null],[4.032220458611846e-4,4.032949999999147e-4,1328646,14226,null,null,null,null,null,null,null,null],[4.35382011346519e-4,4.355760000001041e-4,1438371,14937,null,null,null,null,null,null,null,null],[4.7347298823297024e-4,4.735670000002301e-4,1560075,15684,null,null,null,null,null,null,null,null],[4.711890360340476e-4,4.7125299999972725e-4,1552485,16469,null,null,null,null,null,null,null,null],[4.926690016873181e-4,4.927229999998062e-4,1623171,17292,null,null,null,null,null,null,null,null],[5.16803003847599e-4,5.168879999999376e-4,1702668,18157,null,null,null,null,null,null,null,null],[5.425310228019953e-4,5.426159999997182e-4,1787511,19065,null,null,null,null,null,null,null,null],[5.588220083154738e-4,5.588660000004353e-4,1841103,20018,null,null,null,null,null,null,null,null],[5.818450008518994e-4,5.819099999992972e-4,1916970,21019,null,null,null,null,null,null,null,null],[6.157280295155942e-4,6.157829999997588e-4,2028411,22070,null,null,null,null,null,null,null,null],[6.603809888474643e-4,6.604570000003918e-4,2175657,23173,null,null,null,null,null,null,null,null],[6.939350278116763e-4,6.939990000001117e-4,2286174,24332,null,null,null,null,null,null,null,null],[7.108759600669146e-4,7.109410000003535e-4,2341944,25549,null,null,null,null,null,null,null,null],[7.437770254909992e-4,7.438530000003496e-4,2450349,26826,null,null,null,null,null,null,null,null],[7.80866015702486e-4,7.809319999996234e-4,2572548,28167,null,null,null,null,null,null,null,null],[8.356189937330782e-4,8.356950000001362e-4,2752893,29576,null,null,null,null,null,null,null,null],[8.850510348565876e-4,8.851380000001186e-4,2915715,31054,null,null,null,null,null,null,null,null],[9.072209941223264e-4,9.072890000005884e-4,2988711,32607,null,null,null,null,null,null,null,null],[9.894350077956915e-4,9.895430000002037e-4,3259608,34238,null,null,null,null,null,null,null,null],[1.0583139955997467e-3,1.0583809999999971e-3,3487011,35950,null,null,null,null,null,null,null,null],[1.0933089652098715e-3,1.0934069999999352e-3,3601818,37747,null,null,null,null,null,null,null,null],[1.1605540057644248e-3,1.1611340000001746e-3,3830871,39634,null,null,null,null,null,null,null,null],[1.2148360256105661e-3,1.214885000000443e-3,4001679,41616,null,null,null,null,null,null,null,null],[1.2682650121860206e-3,1.2680239999998122e-3,4176942,43697,null,null,null,null,null,null,null,null],[1.3147220015525818e-3,1.3147820000005694e-3,4330887,45882,null,null,null,null,null,null,null,null],[1.3914559967815876e-3,1.3915060000000423e-3,4583370,48176,null,null,null,null,null,null,null,null],[1.449362956918776e-3,1.4494540000002942e-3,4774506,50585,null,null,null,null,null,null,null,null],[1.495618955232203e-3,1.4956909999996881e-3,4926735,53114,null,null,null,null,null,null,null,null],[1.5599590260535479e-3,1.5600509999993406e-3,5138793,55770,null,null,null,null,null,null,null,null],[1.6359509900212288e-3,1.6360440000005028e-3,5389098,58558,null,null,null,null,null,null,null,null],[1.717503007967025e-3,1.7175859999998266e-3,5657718,61486,null,null,null,null,null,null,null,null],[1.8506619962863624e-3,1.8507449999995984e-3,6096321,64561,null,null,null,null,null,null,null,null],[1.9595249905250967e-3,1.95962999999999e-3,6454899,67789,null,null,null,null,null,null,null,null],[2.038571983575821e-3,2.0386470000000045e-3,6715269,71178,null,null,null,null,null,null,null,null],[2.1695360192097723e-3,2.1696219999993716e-3,7146579,74737,null,null,null,null,null,null,null,null],[2.2472109994851053e-3,2.2472979999994536e-3,7402461,78474,null,null,null,null,null,null,null,null],[2.3032159660942852e-3,2.303323000000468e-3,7586997,82398,null,null,null,null,null,null,null,null],[2.4569520028308034e-3,2.457029999999527e-3,8093283,86518,null,null,null,null,null,null,null,null],[2.5408989749848843e-3,2.5409779999998605e-3,8369757,90843,null,null,null,null,null,null,null,null],[2.6689469814300537e-3,2.6690470000003685e-3,8791497,95386,null,null,null,null,null,null,null,null],[2.802106027957052e-3,2.8021870000003446e-3,9230100,100155,null,null,null,null,null,null,null,null],[3.0183690250851214e-3,3.0184520000000603e-3,9942570,105163,null,null,null,null,null,null,null,null],[3.0882700229994953e-3,3.0883619999997336e-3,10172712,110421,null,null,null,null,null,null,null,null],[3.201149986125529e-3,3.201245000000519e-3,10544523,115942,null,null,null,null,null,null,null,null],[2.9520150274038315e-3,2.952106999999593e-3,9724011,121739,null,null,null,null,null,null,null,null],[3.1020959722809494e-3,3.102188999999811e-3,10218318,127826,null,null,null,null,null,null,null,null],[3.2553619821555912e-3,3.2554359999998894e-3,10723119,134217,null,null,null,null,null,null,null,null],[3.419075976125896e-3,3.4191720000000814e-3,11262372,140928,null,null,null,null,null,null,null,null],[3.588431980460882e-3,3.588530000000034e-3,11820303,147975,null,null,null,null,null,null,null,null],[3.7730970070697367e-3,3.7731850000000122e-3,12428493,155373,null,null,null,null,null,null,null,null],[3.964533971156925e-3,3.964614000000033e-3,13058991,163142,null,null,null,null,null,null,null,null],[4.152233945205808e-3,4.152334999999674e-3,13677312,171299,null,null,null,null,null,null,null,null],[4.396218981128186e-3,4.38949999999938e-3,14480994,179864,null,null,null,null,null,null,null,null],[4.608013958204538e-3,4.6081079999993335e-3,15178515,188858,null,null,null,null,null,null,null,null],[4.8116829711943865e-3,4.81178999999976e-3,15849471,198300,null,null,null,null,null,null,null,null],[5.057181988377124e-3,5.057288999999798e-3,16658037,208215,null,null,null,null,null,null,null,null],[5.314111011102796e-3,5.314199999999936e-3,17504223,218626,null,null,null,null,null,null,null,null],[5.582020967267454e-3,5.582131999999795e-3,18386775,229558,null,null,null,null,null,null,null,null],[5.859828961547464e-3,5.859931999999901e-3,19301667,241036,null,null,null,null,null,null,null,null],[6.144660001154989e-3,6.144786000000124e-3,20240055,253087,null,null,null,null,null,null,null,null],[6.451231020037085e-3,6.451350000000744e-3,21249789,265742,null,null,null,null,null,null,null,null],[6.780846975743771e-3,6.780977000000021e-3,22335687,279029,null,null,null,null,null,null,null,null],[7.106222969014198e-3,7.10634699999968e-3,23407329,292980,null,null,null,null,null,null,null,null],[7.483688008505851e-3,7.483792999999572e-3,24650505,307629,null,null,null,null,null,null,null,null],[7.842916995286942e-3,7.843055000000376e-3,25833885,323011,null,null,null,null,null,null,null,null],[8.231642015744e-3,8.231762999999503e-3,27114186,339161,null,null,null,null,null,null,null,null],[8.645844005513936e-3,8.645968999999809e-3,28478571,356119,null,null,null,null,null,null,null,null],[9.086596022825688e-3,9.086725000000406e-3,29930241,373925,null,null,null,null,null,null,null,null],[9.55191400134936e-3,9.552045999999592e-3,31463025,392622,null,null,null,null,null,null,null,null],[1.0013355000410229e-2,1.0013499000000259e-2,32982906,412253,null,null,null,null,null,null,null,null],[1.059920695843175e-2,1.0599436000000573e-2,34913043,432866,null,null,null,null,null,null,null,null],[1.1071338027250022e-2,1.1071481000000105e-2,36467673,454509,null,null,null,null,null,null,null,null],[1.1590857000555843e-2,1.1591002999999489e-2,38178954,477234,null,null,null,null,null,null,null,null],[1.2174506031442434e-2,1.2174656000000006e-2,40101303,501096,null,null,null,null,null,null,null,null],[1.2792046996764839e-2,1.2792201999999975e-2,42135390,526151,null,null,null,null,null,null,null,null],[1.3417874986771494e-2,1.3418044999999879e-2,44196900,552458,null,null,null,null,null,null,null,null],[1.4248274033889174e-2,1.424844899999922e-2,46932105,580081,null,null,null,null,null,null,null,null],[1.4854745008051395e-2,1.485494499999973e-2,48929727,609086,null,null,null,null,null,null,null,null],[1.5565299021545798e-2,1.5565484999999768e-2,51270153,639540,null,null,null,null,null,null,null,null],[1.63057409808971e-2,1.630599200000038e-2,53709117,671517,null,null,null,null,null,null,null,null],[1.7397496034391224e-2,1.7398217000000216e-2,57306843,705093,null,null,null,null,null,null,null,null],[1.801024901214987e-2,1.8010432999999715e-2,59323308,740347,null,null,null,null,null,null,null,null],[1.888897898606956e-2,1.888919900000019e-2,62217903,777365,null,null,null,null,null,null,null,null],[1.988355297362432e-2,1.9883780999999878e-2,65493813,816233,null,null,null,null,null,null,null,null],[2.0825710031203926e-2,2.0825935000000406e-2,68597100,857045,null,null,null,null,null,null,null,null],[2.2223929001484066e-2,2.2224573999999997e-2,73204296,899897,null,null,null,null,null,null,null,null],[2.3176544986199588e-2,2.317709700000048e-2,76341738,944892,null,null,null,null,null,null,null,null],[2.410111902281642e-2,2.410193900000035e-2,79387737,992136,null,null,null,null,null,null,null,null],[2.5368262024130672e-2,2.5368529999999723e-2,83559564,1041743,null,null,null,null,null,null,null,null],[2.7295517036691308e-2,2.7295990000000714e-2,89908566,1093831,null,null,null,null,null,null,null,null],[2.8167893004138023e-2,2.8168183000000013e-2,92781084,1148522,null,null,null,null,null,null,null,null],[2.9317578009795398e-2,2.931786500000033e-2,96568065,1205948,null,null,null,null,null,null,null,null],[3.0783672002144158e-2,3.0783961000000026e-2,101397021,1266246,null,null,null,null,null,null,null,null],[3.2468824996612966e-2,3.2469757999999516e-2,106951218,1329558,null,null,null,null,null,null,null,null],[3.4044572967104614e-2,3.404487600000028e-2,112137729,1396036,null,null,null,null,null,null,null,null],[3.598321898607537e-2,3.598372699999963e-2,118524384,1465838,null,null,null,null,null,null,null,null],[3.7679462984669954e-2,3.767985299999932e-2,124111053,1539130,null,null,null,null,null,null,null,null],[3.9541966980323195e-2,3.9542381000000404e-2,130245885,1616086,null,null,null,null,null,null,null,null],[4.124537401366979e-2,4.1245789999999616e-2,135856644,1696890,null,null,null,null,null,null,null,null],[4.3289995985105634e-2,4.32903979999999e-2,142590987,1781735,null,null,null,null,null,null,null,null],[4.5471495017409325e-2,4.5471923000000025e-2,149776572,1870822,null,null,null,null,null,null,null,null],[4.7792432946152985e-2,4.7792918999999934e-2,157421781,1964363,null,null,null,null,null,null,null,null],[5.0295241991989315e-2,5.029573499999973e-2,165665511,2062581,null,null,null,null,null,null,null,null],[5.2595111017581075e-2,5.259558100000028e-2,173240661,2165710,null,null,null,null,null,null,null,null],[5.5277973995544016e-2,5.5278453999999755e-2,182077533,2273996,null,null,null,null,null,null,null,null],[5.8021020027808845e-2,5.802152000000049e-2,191112768,2387695,null,null,null,null,null,null,null,null],[6.095867801923305e-2,6.0959242000000025e-2,200789259,2507080,null,null,null,null,null,null,null,null],[6.405672599794343e-2,6.405281299999999e-2,210993618,2632434,null,null,null,null,null,null,null,null],[6.718005199218169e-2,6.718063000000019e-2,221281170,2764056,null,null,null,null,null,null,null,null],[7.063243095763028e-2,7.063312499999963e-2,232653333,2902259,null,null,null,null,null,null,null,null],[7.40192270022817e-2,7.401983699999981e-2,243808257,3047372,null,null,null,null,null,null,null,null],[7.780699199065566e-2,7.78076590000003e-2,256284732,3199740,null,null,null,null,null,null,null,null],[8.200011198641732e-2,8.200089000000066e-2,270096585,3359727,null,null,null,null,null,null,null,null],[8.577892900211737e-2,8.577972599999928e-2,282543492,3527714,null,null,null,null,null,null,null,null],[9.023066097870469e-2,9.023142199999956e-2,297206349,3704100,null,null,null,null,null,null,null,null],[9.45879080099985e-2,9.458880000000036e-2,311559039,3889305,null,null,null,null,null,null,null,null],[9.937034698668867e-2,9.937120500000063e-2,327311226,4083770,null,null,null,null,null,null,null,null],[0.1095963490079157,0.10959725300000045,360993930,4287958,null,null,null,null,null,null,null,null],[0.11552848300198093,0.11552953999999982,380534154,4502356,null,null,null,null,null,null,null,null],[0.12088419101200998,0.1208851580000001,398174172,4727474,null,null,null,null,null,null,null,null],[0.12702564499340951,0.1270267279999997,418403667,4963848,null,null,null,null,null,null,null,null],[0.13329898501979187,0.13330005400000022,439066914,5212040,null,null,null,null,null,null,null,null],[0.140186870994512,0.14018804200000012,461754711,5472642,null,null,null,null,null,null,null,null],[0.14730693999445066,0.1473082140000006,485207250,5746274,null,null,null,null,null,null,null,null],[0.1544275899650529,0.154428875999999,508661472,6033588,null,null,null,null,null,null,null,null],[0.16206919099204242,0.16207050400000078,533831661,6335268,null,null,null,null,null,null,null,null],[0.17039759398903698,0.17039912999999984,561264627,6652031,null,null,null,null,null,null,null,null],[0.17910854000365362,0.179110231000001,589957599,6984633,null,null,null,null,null,null,null,null],[0.1877509289770387,0.1877493459999986,618423465,7333864,null,null,null,null,null,null,null,null],[0.19484114198712632,0.19484273800000018,641777466,7700558,null,null,null,null,null,null,null,null],[0.1967731750337407,0.1967748260000004,648141582,8085585,null,null,null,null,null,null,null,null],[0.20656140998471528,0.20656309399999984,680382054,8489865,null,null,null,null,null,null,null,null],[0.21691621298668906,0.21691797200000096,714489534,8914358,null,null,null,null,null,null,null,null],[0.22754845197778195,0.22755028999999993,749510289,9360076,null,null,null,null,null,null,null,null]],"reportName":"fib/5","reportNumber":1,"reportOutliers":{"highMild":0,"highSevere":0,"lowMild":0,"lowSevere":0,"samplesSeen":42}},{"reportAnalysis":{"anMean":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.2193049137878224e-9,"confIntUDX":9.656405683572824e-10},"estPoint":1.376154926895251e-7},"anOutlierVar":{"ovDesc":"a moderate","ovEffect":"Moderate","ovFraction":0.38620218919276267},"anRegress":[{"regCoeffs":{"iters":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.7086514387624945e-9,"confIntUDX":1.6862717006331852e-9},"estPoint":1.3645055682224533e-7},"y":{"estError":{"confIntCL":5.0e-2,"confIntLDX":8.395999648006277e-5,"confIntUDX":1.1090499541057712e-4},"estPoint":1.5062483839598762e-4}},"regRSquare":{"estError":{"confIntCL":5.0e-2,"confIntLDX":2.452948645059738e-4,"confIntUDX":4.1552799766231274e-4},"estPoint":0.999005998202595},"regResponder":"time"}],"anStdDev":{"estError":{"confIntCL":5.0e-2,"confIntLDX":7.019182474873841e-10,"confIntUDX":5.272290500819154e-10},"estPoint":3.595410700809442e-9}},"reportKDEs":[{"kdePDF":[5.274041638793628,111.13240968360849,1695.2383614313376,18849.995856274472,151953.77677751292,888638.738075093,3770465.0986158806,1.1615193689312074e7,2.604573840019683e7,4.2924992653846964e7,5.383755031218667e7,5.726678832160708e7,6.349985919530781e7,8.028021940340853e7,9.890440019936185e7,1.0532498343584022e8,1.01342397357232e8,1.0271408767561758e8,1.17182064745088e8,1.3407929163912627e8,1.3686908750733107e8,1.214281619684658e8,9.757712899317943e7,7.416566024415341e7,5.34944006833291e7,4.015401039212305e7,4.1543946818613544e7,5.728722236307025e7,7.59643666474708e7,8.407293963439395e7,7.596098048371162e7,5.724941342531396e7,4.1238353039582565e7,3.83581170247591e7,4.580512753837311e7,5.008773235666174e7,4.205690158951087e7,2.604584692508606e7,1.2484868536130628e7,7537432.037720749,1.2483178035632545e7,2.60269978730671e7,4.1904952579042666e7,4.919921028692312e7,4.203646808523235e7,2.676346395636231e7,1.5363306622683438e7,1.5363307497428445e7,2.67634576596896e7,4.203635846673908e7,4.9197513225379564e7,4.188610492479977e7,2.5875046821242146e7,1.1594652873699171e7,3768659.4373543635,888522.290300119,151948.59252795813,18849.856343822496,1694.9117065527298,111.72696077494949,4.214315793431429,1.2013679346270916,-1.0216822539083192,1.0408957442526592,-1.0660004856336855,1.1023423408375737,-1.1455898667575724,1.3897845725922273,3.9582686708456922,112.05488742925337,1694.5064554621529,18850.345629960262,151948.01108188598,888522.9686671675,3768658.4623361826,1.1594648552844806e7,2.5874935076113727e7,4.188441016318299e7,4.91786630924939e7,4.188441088334783e7,2.587495159056892e7,1.159501342963226e7,3774436.2646145844,955804.9433138748,729489.8218103116,3692274.535586301,1.7420796002569996e7,6.202838431349826e7,1.67230222528094e8,3.4444233533297324e8,5.475200039364114e8,6.802536661495528e8,6.73135123261824e8,5.479218503799253e8,3.888878925056097e8,2.6474696802362826e8,1.925804744539135e8,1.578864134102267e8,1.468145483659374e8,1.559660832954353e8,1.7986018954396734e8,2.0136480350005192e8,2.0298579930257565e8,1.8511085411088043e8,1.6338752783393455e8,1.4783892498728317e8,1.3426812388482302e8,1.1564701084040293e8,9.23838212465019e7,7.278691280684687e7,6.804131811566412e7,8.054822880054186e7,9.589117024674831e7,9.574080436263388e7,7.950774896400969e7,6.336348482247712e7,5.724941711394983e7,5.383595688994364e7,4.292488496705503e7,2.604573495958621e7,1.1615192122526279e7,3770466.264521857,888637.7736333845,151954.5480886748,18849.4069585961,1695.653117943465,110.88590343047127,5.355819889129055],"kdeType":"time","kdeValues":[1.2935309605942562e-7,1.2946083835532028e-7,1.2956858065121497e-7,1.2967632294710963e-7,1.2978406524300432e-7,1.2989180753889898e-7,1.2999954983479364e-7,1.3010729213068833e-7,1.30215034426583e-7,1.3032277672247768e-7,1.3043051901837234e-7,1.3053826131426703e-7,1.306460036101617e-7,1.3075374590605636e-7,1.3086148820195104e-7,1.309692304978457e-7,1.310769727937404e-7,1.3118471508963506e-7,1.3129245738552972e-7,1.314001996814244e-7,1.3150794197731907e-7,1.3161568427321376e-7,1.3172342656910842e-7,1.3183116886500308e-7,1.3193891116089777e-7,1.3204665345679243e-7,1.3215439575268712e-7,1.3226213804858178e-7,1.3236988034447644e-7,1.3247762264037113e-7,1.325853649362658e-7,1.3269310723216048e-7,1.3280084952805514e-7,1.3290859182394983e-7,1.330163341198445e-7,1.3312407641573916e-7,1.3323181871163384e-7,1.333395610075285e-7,1.334473033034232e-7,1.3355504559931786e-7,1.3366278789521252e-7,1.337705301911072e-7,1.3387827248700187e-7,1.3398601478289656e-7,1.3409375707879122e-7,1.3420149937468588e-7,1.3430924167058057e-7,1.3441698396647523e-7,1.3452472626236992e-7,1.3463246855826458e-7,1.3474021085415924e-7,1.3484795315005393e-7,1.349556954459486e-7,1.3506343774184328e-7,1.3517118003773794e-7,1.3527892233363263e-7,1.353866646295273e-7,1.3549440692542195e-7,1.3560214922131664e-7,1.357098915172113e-7,1.35817633813106e-7,1.3592537610900066e-7,1.3603311840489532e-7,1.3614086070079e-7,1.3624860299668467e-7,1.3635634529257936e-7,1.3646408758847402e-7,1.3657182988436868e-7,1.3667957218026337e-7,1.3678731447615803e-7,1.3689505677205272e-7,1.3700279906794738e-7,1.3711054136384204e-7,1.3721828365973673e-7,1.373260259556314e-7,1.3743376825152608e-7,1.3754151054742074e-7,1.3764925284331543e-7,1.377569951392101e-7,1.3786473743510475e-7,1.3797247973099944e-7,1.380802220268941e-7,1.381879643227888e-7,1.3829570661868345e-7,1.3840344891457812e-7,1.385111912104728e-7,1.3861893350636747e-7,1.3872667580226215e-7,1.3883441809815682e-7,1.3894216039405148e-7,1.3904990268994617e-7,1.3915764498584083e-7,1.3926538728173552e-7,1.3937312957763018e-7,1.3948087187352487e-7,1.3958861416941953e-7,1.396963564653142e-7,1.3980409876120888e-7,1.3991184105710354e-7,1.4001958335299823e-7,1.401273256488929e-7,1.4023506794478755e-7,1.4034281024068224e-7,1.404505525365769e-7,1.405582948324716e-7,1.4066603712836625e-7,1.4077377942426092e-7,1.408815217201556e-7,1.4098926401605027e-7,1.4109700631194495e-7,1.4120474860783962e-7,1.413124909037343e-7,1.4142023319962897e-7,1.4152797549552363e-7,1.4163571779141832e-7,1.4174346008731298e-7,1.4185120238320764e-7,1.4195894467910233e-7,1.42066686974997e-7,1.4217442927089168e-7,1.4228217156678634e-7,1.4238991386268103e-7,1.424976561585757e-7,1.4260539845447035e-7,1.4271314075036504e-7,1.428208830462597e-7,1.429286253421544e-7,1.4303636763804905e-7]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","peakMbAllocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportMeasured":[[1.4730030670762062e-6,8.810000000636364e-7,2178,1,null,null,null,null,null,null,null,null],[7.210182957351208e-7,7.019999994639647e-7,2277,2,null,null,null,null,null,null,null,null],[7.810303941369057e-7,7.509999999655292e-7,2409,3,null,null,null,null,null,null,null,null],[8.92032403498888e-7,8.820000001463768e-7,2838,4,null,null,null,null,null,null,null,null],[1.0619987733662128e-6,1.0419999991739815e-6,3399,5,null,null,null,null,null,null,null,null],[1.23301288112998e-6,1.2119999990289898e-6,3960,6,null,null,null,null,null,null,null,null],[1.3730023056268692e-6,1.3619999990055476e-6,4455,7,null,null,null,null,null,null,null,null],[1.533015165477991e-6,1.5130000008412026e-6,4983,8,null,null,null,null,null,null,null,null],[1.6840058378875256e-6,1.682999998919854e-6,5478,9,null,null,null,null,null,null,null,null],[1.8539722077548504e-6,1.8429999997238156e-6,6006,10,null,null,null,null,null,null,null,null],[2.0239967852830887e-6,2.0139999996615643e-6,6633,11,null,null,null,null,null,null,null,null],[2.1840096451342106e-6,2.1740000004655258e-6,7062,12,null,null,null,null,null,null,null,null],[2.343964297324419e-6,2.3240000004420835e-6,7623,13,null,null,null,null,null,null,null,null],[2.503977157175541e-6,2.505000001207236e-6,8151,14,null,null,null,null,null,null,null,null],[2.655026037245989e-6,2.644999998580033e-6,8646,15,null,null,null,null,null,null,null,null],[2.8259819373488426e-6,2.8150000002113984e-6,9207,16,null,null,null,null,null,null,null,null],[2.9859947971999645e-6,2.9660000002706965e-6,9702,17,null,null,null,null,null,null,null,null],[3.145949449390173e-6,3.136000000125705e-6,10263,18,null,null,null,null,null,null,null,null],[3.326043952256441e-6,3.316000000808117e-6,10791,19,null,null,null,null,null,null,null,null],[3.4660333767533302e-6,3.4570000000400114e-6,11286,20,null,null,null,null,null,null,null,null],[3.6159763112664223e-6,3.617000000843973e-6,11847,21,null,null,null,null,null,null,null,null],[3.797002136707306e-6,3.7870000006989812e-6,12375,22,null,null,null,null,null,null,null,null],[3.947003278881311e-6,3.936999998899182e-6,12903,23,null,null,null,null,null,null,null,null],[4.258006811141968e-6,4.247999999762442e-6,13926,25,null,null,null,null,null,null,null,null],[4.427973181009293e-6,4.41799999961745e-6,14487,26,null,null,null,null,null,null,null,null],[4.558998625725508e-6,4.547999999715557e-6,14916,27,null,null,null,null,null,null,null,null],[4.73798718303442e-6,4.718999999653306e-6,15510,28,null,null,null,null,null,null,null,null],[5.059002432972193e-6,5.050000000395016e-6,16566,30,null,null,null,null,null,null,null,null],[5.220004823058844e-6,5.200000000371574e-6,17061,31,null,null,null,null,null,null,null,null],[5.541020072996616e-6,5.52000000020314e-6,18117,33,null,null,null,null,null,null,null,null],[5.85097586736083e-6,5.840000000034706e-6,19173,35,null,null,null,null,null,null,null,null],[6.021000444889069e-6,6.021000000799859e-6,19767,36,null,null,null,null,null,null,null,null],[6.352027412503958e-6,6.341999998937808e-6,20823,38,null,null,null,null,null,null,null,null],[6.642017979174852e-6,6.6329999999226175e-6,21813,40,null,null,null,null,null,null,null,null],[7.002963684499264e-6,6.9629999988052305e-6,22902,42,null,null,null,null,null,null,null,null],[7.314025424420834e-6,7.304000000374344e-6,23991,44,null,null,null,null,null,null,null,null],[7.78399407863617e-6,7.775000000265209e-6,25542,47,null,null,null,null,null,null,null,null],[8.105009328573942e-6,8.085999999352111e-6,26565,49,null,null,null,null,null,null,null,null],[8.585979230701923e-6,8.575999999038686e-6,28182,52,null,null,null,null,null,null,null,null],[8.89599323272705e-6,8.876000000768158e-6,29238,54,null,null,null,null,null,null,null,null],[9.417999535799026e-6,9.408000000377115e-6,30987,57,null,null,null,null,null,null,null,null],[9.908981155604124e-6,9.888999999319026e-6,32538,60,null,null,null,null,null,null,null,null],[1.035997411236167e-5,1.0350000000158843e-5,33990,63,null,null,null,null,null,null,null,null],[1.0850024409592152e-5,1.0840999999928158e-5,35673,66,null,null,null,null,null,null,null,null],[1.132104080170393e-5,1.1311000001512639e-5,37224,69,null,null,null,null,null,null,null,null],[1.1971977073699236e-5,1.1963000000392299e-5,39303,73,null,null,null,null,null,null,null,null],[1.2432981748133898e-5,1.242399999945576e-5,40887,76,null,null,null,null,null,null,null,null],[1.3084965758025646e-5,1.3075000000029036e-5,43032,80,null,null,null,null,null,null,null,null],[1.373601844534278e-5,1.3716000001551265e-5,45144,84,null,null,null,null,null,null,null,null],[1.4607969205826521e-5,1.4587999999093881e-5,48015,89,null,null,null,null,null,null,null,null],[1.5209021512418985e-5,1.5198999999910257e-5,50028,93,null,null,null,null,null,null,null,null],[1.5989993698894978e-5,1.5979999998805283e-5,52602,98,null,null,null,null,null,null,null,null],[1.680100103840232e-5,1.6791999998488905e-5,55209,103,null,null,null,null,null,null,null,null],[1.7623009625822306e-5,1.7602999999866142e-5,57948,108,null,null,null,null,null,null,null,null],[1.8403981812298298e-5,1.8393999999588573e-5,60555,113,null,null,null,null,null,null,null,null],[1.9366038031876087e-5,1.9345999998421348e-5,63657,119,null,null,null,null,null,null,null,null],[2.0337989553809166e-5,2.0327999999736335e-5,66891,125,null,null,null,null,null,null,null,null],[2.6780006010085344e-5,2.7240999999733617e-5,91179,131,null,null,null,null,null,null,null,null],[3.2450014259666204e-5,3.265199999979984e-5,108141,138,null,null,null,null,null,null,null,null],[3.719900269061327e-5,3.7811000000331774e-5,127875,144,null,null,null,null,null,null,null,null],[3.485498018562794e-5,3.494499999945333e-5,115170,152,null,null,null,null,null,null,null,null],[3.6187004297971725e-5,3.627799999961212e-5,119625,159,null,null,null,null,null,null,null,null],[3.8743019104003906e-5,3.902300000113712e-5,129030,167,null,null,null,null,null,null,null,null],[3.612699219956994e-5,3.608799999987866e-5,118701,176,null,null,null,null,null,null,null,null],[3.008596831932664e-5,3.0055999999945016e-5,98901,185,null,null,null,null,null,null,null,null],[3.1449017114937305e-5,3.142899999986071e-5,103422,194,null,null,null,null,null,null,null,null],[3.3051008358597755e-5,3.304100000001142e-5,108735,204,null,null,null,null,null,null,null,null],[3.4653989132493734e-5,3.463500000044917e-5,113982,214,null,null,null,null,null,null,null,null],[3.6258017644286156e-5,3.624800000068262e-5,119295,224,null,null,null,null,null,null,null,null],[3.817200195044279e-5,3.817099999992024e-5,125598,236,null,null,null,null,null,null,null,null],[3.994500730186701e-5,3.9935000000212995e-5,131406,247,null,null,null,null,null,null,null,null],[4.20489814132452e-5,4.204900000104317e-5,138402,260,null,null,null,null,null,null,null,null],[4.412198904901743e-5,4.411199999942994e-5,145299,273,null,null,null,null,null,null,null,null],[4.6396045945584774e-5,4.639700000019786e-5,152757,287,null,null,null,null,null,null,null,null],[4.865095252171159e-5,4.863200000038148e-5,160116,301,null,null,null,null,null,null,null,null],[5.1036011427640915e-5,5.103600000033737e-5,168036,316,null,null,null,null,null,null,null,null],[5.3640047553926706e-5,5.362099999928205e-5,176517,332,null,null,null,null,null,null,null,null],[5.6194025091826916e-5,5.6185000000041896e-5,185031,348,null,null,null,null,null,null,null,null],[5.907996091991663e-5,5.906999999893969e-5,194502,366,null,null,null,null,null,null,null,null],[6.197602488100529e-5,6.195600000147294e-5,204039,384,null,null,null,null,null,null,null,null],[6.504100747406483e-5,6.50209999992768e-5,214137,403,null,null,null,null,null,null,null,null],[6.840704008936882e-5,6.840800000063041e-5,225258,424,null,null,null,null,null,null,null,null],[7.179402746260166e-5,7.178399999929752e-5,236379,445,null,null,null,null,null,null,null,null],[7.533002644777298e-5,7.533099999967874e-5,248028,467,null,null,null,null,null,null,null,null],[7.901701610535383e-5,7.899800000110702e-5,260172,490,null,null,null,null,null,null,null,null],[8.304498624056578e-5,8.303499999939845e-5,273471,515,null,null,null,null,null,null,null,null],[8.52489611133933e-5,8.526000000053102e-5,280764,541,null,null,null,null,null,null,null,null],[8.903699927031994e-5,8.904699999945365e-5,293238,568,null,null,null,null,null,null,null,null],[9.344401769340038e-5,9.34350000001416e-5,307692,596,null,null,null,null,null,null,null,null],[9.811302879825234e-5,9.8114000000038e-5,323136,626,null,null,null,null,null,null,null,null],[1.0295200627297163e-4,1.0294199999982823e-4,339075,657,null,null,null,null,null,null,null,null],[1.0822201147675514e-4,1.082130000007453e-4,356367,690,null,null,null,null,null,null,null,null],[1.1359096970409155e-4,1.1359299999824657e-4,374055,725,null,null,null,null,null,null,null,null],[1.1921202531084418e-4,1.1920299999879092e-4,392601,761,null,null,null,null,null,null,null,null],[1.2516300193965435e-4,1.2515499999921076e-4,412203,799,null,null,null,null,null,null,null,null],[1.3139494694769382e-4,1.3139600000044993e-4,432729,839,null,null,null,null,null,null,null,null],[1.379769528284669e-4,1.379690000007372e-4,454410,881,null,null,null,null,null,null,null,null],[1.448499970138073e-4,1.4484100000089484e-4,477048,925,null,null,null,null,null,null,null,null],[1.5219399938359857e-4,1.5219500000007713e-4,501237,972,null,null,null,null,null,null,null,null],[1.5971797984093428e-4,1.5970900000006338e-4,525987,1020,null,null,null,null,null,null,null,null],[1.6769301146268845e-4,1.676939999999405e-4,552288,1071,null,null,null,null,null,null,null,null],[1.7612904775887728e-4,1.761189999989199e-4,580107,1125,null,null,null,null,null,null,null,null],[1.848650281317532e-4,1.8485600000062163e-4,608850,1181,null,null,null,null,null,null,null,null],[1.9409204833209515e-4,1.94093000001061e-4,639210,1240,null,null,null,null,null,null,null,null],[2.0666600903496146e-4,2.0666700000049332e-4,680757,1302,null,null,null,null,null,null,null,null],[2.141490112990141e-4,2.141409999989463e-4,705309,1367,null,null,null,null,null,null,null,null],[2.310710260644555e-4,2.3106199999922694e-4,761046,1436,null,null,null,null,null,null,null,null],[2.425220445729792e-4,2.4252400000079888e-4,798765,1507,null,null,null,null,null,null,null,null],[2.575300168246031e-4,2.575520000007714e-4,848364,1583,null,null,null,null,null,null,null,null],[2.6740902103483677e-4,2.674099999993018e-4,880770,1662,null,null,null,null,null,null,null,null],[2.793209860101342e-4,2.793329999999372e-4,920073,1745,null,null,null,null,null,null,null,null],[2.866850118152797e-4,2.866869999991195e-4,944262,1832,null,null,null,null,null,null,null,null],[3.0124204931780696e-4,3.0124399999920115e-4,992178,1924,null,null,null,null,null,null,null,null],[3.1627999851480126e-4,3.1628200000000106e-4,1041744,2020,null,null,null,null,null,null,null,null],[3.3191900001838803e-4,3.3192100000078995e-4,1093257,2121,null,null,null,null,null,null,null,null],[3.4848996438086033e-4,3.484930000006159e-4,1147872,2227,null,null,null,null,null,null,null,null],[3.660930087789893e-4,3.6611500000027775e-4,1205919,2339,null,null,null,null,null,null,null,null],[3.870819928124547e-4,3.870950000006701e-4,1274988,2456,null,null,null,null,null,null,null,null],[4.223980358801782e-4,4.2244099999955154e-4,1391445,2579,null,null,null,null,null,null,null,null],[4.4336699647828937e-4,4.434399999997396e-4,1460778,2708,null,null,null,null,null,null,null,null],[4.481659852899611e-4,4.4819999999923255e-4,1476288,2843,null,null,null,null,null,null,null,null],[4.688040353357792e-4,4.688379999997494e-4,1544268,2985,null,null,null,null,null,null,null,null],[4.916980396956205e-4,4.917200000011945e-4,1619739,3134,null,null,null,null,null,null,null,null],[5.163030000403523e-4,5.163269999997055e-4,1700688,3291,null,null,null,null,null,null,null,null],[5.407779826782644e-4,5.40793000000761e-4,1781241,3456,null,null,null,null,null,null,null,null],[5.599639844149351e-4,5.599889999992058e-4,1844502,3629,null,null,null,null,null,null,null,null],[5.857429932802916e-4,5.857670000004589e-4,1929477,3810,null,null,null,null,null,null,null,null],[6.276000058278441e-4,6.276349999989606e-4,2067318,4001,null,null,null,null,null,null,null,null],[6.588390097022057e-4,6.588640000000368e-4,2170179,4201,null,null,null,null,null,null,null,null],[6.813709624111652e-4,6.813960000009445e-4,2244429,4411,null,null,null,null,null,null,null,null],[7.299010176211596e-4,7.299560000006977e-4,2404446,4631,null,null,null,null,null,null,null,null],[7.681730203330517e-4,7.683580000001911e-4,2531595,4863,null,null,null,null,null,null,null,null],[7.419140310958028e-4,7.420499999994945e-4,2444112,5106,null,null,null,null,null,null,null,null],[7.965550175867975e-4,7.968119999990364e-4,2625249,5361,null,null,null,null,null,null,null,null],[8.496150257997215e-4,8.497310000006308e-4,2799060,5629,null,null,null,null,null,null,null,null],[8.452670299448073e-4,8.453429999999429e-4,2784606,5911,null,null,null,null,null,null,null,null],[8.78868973813951e-4,8.794469999990895e-4,2898357,6207,null,null,null,null,null,null,null,null],[9.246249683201313e-4,9.246819999990663e-4,3045834,6517,null,null,null,null,null,null,null,null],[9.734359919093549e-4,9.735030000008749e-4,3206676,6843,null,null,null,null,null,null,null,null],[9.98673029243946e-4,9.987200000001195e-4,3289803,7185,null,null,null,null,null,null,null,null],[1.0826190118677914e-3,1.0828679999992374e-3,3566805,7544,null,null,null,null,null,null,null,null],[1.1323909857310355e-3,1.1324800000007684e-3,3730320,7921,null,null,null,null,null,null,null,null],[1.1668360093608499e-3,1.1669049999998293e-3,3843774,8318,null,null,null,null,null,null,null,null],[1.2142250197939575e-3,1.2142930000003105e-3,3999765,8733,null,null,null,null,null,null,null,null],[1.2770619941875339e-3,1.277151000000032e-3,4206807,9170,null,null,null,null,null,null,null,null],[1.33850600104779e-3,1.3385659999993749e-3,4409097,9629,null,null,null,null,null,null,null,null],[1.4171929797157645e-3,1.417253000001395e-3,4668345,10110,null,null,null,null,null,null,null,null],[1.521287951618433e-3,1.5213890000005392e-3,5011380,10616,null,null,null,null,null,null,null,null],[1.5573640121147037e-3,1.5574259999997508e-3,5130015,11146,null,null,null,null,null,null,null,null],[1.6300400020554662e-3,1.6301229999999833e-3,5369397,11704,null,null,null,null,null,null,null,null],[1.7080659745261073e-3,1.70814800000052e-3,5626434,12289,null,null,null,null,null,null,null,null],[1.7935250070877373e-3,1.793608000001612e-3,5907957,12903,null,null,null,null,null,null,null,null],[1.934778003487736e-3,1.9348819999986944e-3,6373488,13549,null,null,null,null,null,null,null,null],[2.0268099615350366e-3,2.0275269999991963e-3,6689100,14226,null,null,null,null,null,null,null,null],[2.2565789986401796e-3,2.256836000000817e-3,7433943,14937,null,null,null,null,null,null,null,null],[2.209179976489395e-3,2.209235999998782e-3,7276863,15684,null,null,null,null,null,null,null,null],[2.3631879594177008e-3,2.3632960000004033e-3,7784502,16469,null,null,null,null,null,null,null,null],[2.437244984321296e-3,2.437343000000425e-3,8028339,17292,null,null,null,null,null,null,null,null],[2.5413199909962714e-3,2.5414189999999337e-3,8371209,18157,null,null,null,null,null,null,null,null],[2.7044540038332343e-3,2.7045539999992485e-3,8908548,19065,null,null,null,null,null,null,null,null],[2.9367770184762776e-3,2.9371799999999837e-3,9675171,20018,null,null,null,null,null,null,null,null],[2.9696680139750242e-3,2.9697610000010144e-3,9781926,21019,null,null,null,null,null,null,null,null],[3.1307890312746167e-3,3.1308820000006676e-3,10312797,22070,null,null,null,null,null,null,null,null],[3.323348006233573e-3,3.323604000000202e-3,10947750,23173,null,null,null,null,null,null,null,null],[3.4292659838683903e-3,3.429390999999171e-3,11296131,24332,null,null,null,null,null,null,null,null],[3.641621966380626e-3,3.641768999999684e-3,11995698,25549,null,null,null,null,null,null,null,null],[3.7911100080236793e-3,3.7912190000000123e-3,12487893,26826,null,null,null,null,null,null,null,null],[4.059530969243497e-3,4.059792000001394e-3,13372887,28167,null,null,null,null,null,null,null,null],[4.1613809880800545e-3,4.16151199999959e-3,13707474,29576,null,null,null,null,null,null,null,null],[4.3987639946863055e-3,4.398866000000723e-3,14489310,31054,null,null,null,null,null,null,null,null],[4.597544961143285e-3,4.597678999999744e-3,15144195,32607,null,null,null,null,null,null,null,null],[4.930394992697984e-3,4.930672000000413e-3,16241313,34238,null,null,null,null,null,null,null,null],[5.076997971627861e-3,5.077186000001177e-3,16723476,35950,null,null,null,null,null,null,null,null],[5.328618048224598e-3,5.328768000000039e-3,17552271,37747,null,null,null,null,null,null,null,null],[5.565528990700841e-3,5.565640999998678e-3,18332424,39634,null,null,null,null,null,null,null,null],[5.864278005901724e-3,5.864421000000064e-3,19316616,41616,null,null,null,null,null,null,null,null],[6.235509004909545e-3,6.235786000001298e-3,20540091,43697,null,null,null,null,null,null,null,null],[6.58121396554634e-3,6.581472999998894e-3,21678591,45882,null,null,null,null,null,null,null,null],[6.759385985787958e-3,6.759487000000064e-3,22264671,48176,null,null,null,null,null,null,null,null],[7.168840034864843e-3,7.169102999998955e-3,23614173,50585,null,null,null,null,null,null,null,null],[7.5189220369793475e-3,7.519077999999624e-3,24766698,53114,null,null,null,null,null,null,null,null],[8.178182994015515e-3,8.178794000000877e-3,26940111,55770,null,null,null,null,null,null,null,null],[8.314376987982541e-3,8.314609000001028e-3,27387294,58558,null,null,null,null,null,null,null,null],[8.698303019627929e-3,8.698587999999674e-3,28652019,61486,null,null,null,null,null,null,null,null],[9.058744995854795e-3,9.059032999999772e-3,29839161,64561,null,null,null,null,null,null,null,null],[9.52253898140043e-3,9.522830999999954e-3,31366962,67789,null,null,null,null,null,null,null,null],[9.89998399745673e-3,9.900177000000454e-3,32609478,71178,null,null,null,null,null,null,null,null],[1.0492128029000014e-2,1.0492377000000275e-2,34560306,74737,null,null,null,null,null,null,null,null],[1.0929913958534598e-2,1.0930115999999046e-2,36002142,78474,null,null,null,null,null,null,null,null],[1.146121503552422e-2,1.1461411000000865e-2,37752099,82398,null,null,null,null,null,null,null,null],[1.2112280004657805e-2,1.2112450000000052e-2,39896472,86518,null,null,null,null,null,null,null,null],[1.2712750001810491e-2,1.2712913999999742e-2,41874228,90843,null,null,null,null,null,null,null,null],[1.3264138018712401e-2,1.3264305999999948e-2,43690482,95386,null,null,null,null,null,null,null,null],[1.3926793995779008e-2,1.3926956999998907e-2,45873135,100155,null,null,null,null,null,null,null,null],[1.4672403980512172e-2,1.4672593000000234e-2,48329127,105163,null,null,null,null,null,null,null,null],[1.5414868015795946e-2,1.5415223999999839e-2,50775285,110421,null,null,null,null,null,null,null,null],[1.6251509019639343e-2,1.6251780999999355e-2,53531148,115942,null,null,null,null,null,null,null,null],[1.7377498967107385e-2,1.7377938999999287e-2,57240315,121739,null,null,null,null,null,null,null,null],[1.8077393993735313e-2,1.80777489999997e-2,59545299,127826,null,null,null,null,null,null,null,null],[1.9001688982825726e-2,1.9002050000000992e-2,62589846,134217,null,null,null,null,null,null,null,null],[2.0112009020522237e-2,2.0112808999998677e-2,66249249,140928,null,null,null,null,null,null,null,null],[2.1213764033745974e-2,2.1214171999998754e-2,69876279,147975,null,null,null,null,null,null,null,null],[2.186688204528764e-2,2.186726400000083e-2,72027252,155373,null,null,null,null,null,null,null,null],[2.3046952963341027e-2,2.3047374000000787e-2,75914454,163142,null,null,null,null,null,null,null,null],[2.4132738006301224e-2,2.4133126999998922e-2,79490697,171299,null,null,null,null,null,null,null,null],[2.5351941003464162e-2,2.5352511000001243e-2,83507028,179864,null,null,null,null,null,null,null,null],[2.6376353052910417e-2,2.637675799999961e-2,86880750,188858,null,null,null,null,null,null,null,null],[2.770113304723054e-2,2.7701568999999537e-2,91244340,198300,null,null,null,null,null,null,null,null],[2.8953999979421496e-2,2.895427500000025e-2,95370363,208215,null,null,null,null,null,null,null,null],[3.0401739990338683e-2,3.040201600000003e-2,100138830,218626,null,null,null,null,null,null,null,null],[3.19638240034692e-2,3.1964119999999596e-2,105284190,229558,null,null,null,null,null,null,null,null],[3.3782574988435954e-2,3.378307599999886e-2,111275967,241036,null,null,null,null,null,null,null,null],[3.525351901771501e-2,3.525393000000143e-2,116120334,253087,null,null,null,null,null,null,null,null],[3.7300786993000656e-2,3.73013240000013e-2,122864412,265742,null,null,null,null,null,null,null,null],[3.759087796788663e-2,3.7591387000000864e-2,123819795,279029,null,null,null,null,null,null,null,null],[3.862346400273964e-2,3.862401000000126e-2,127221039,292980,null,null,null,null,null,null,null,null],[4.307731002336368e-2,4.3077870000001184e-2,141891255,307629,null,null,null,null,null,null,null,null],[4.542434704490006e-2,4.542491400000159e-2,149621967,323011,null,null,null,null,null,null,null,null],[4.753767797956243e-2,4.75382720000006e-2,156583053,339161,null,null,null,null,null,null,null,null],[4.954897001152858e-2,4.954939799999991e-2,163207044,356119,null,null,null,null,null,null,null,null],[5.20598019938916e-2,5.206032899999968e-2,171477669,373925,null,null,null,null,null,null,null,null],[5.459958896972239e-2,5.460005399999979e-2,179843037,392622,null,null,null,null,null,null,null,null],[5.7404200022574514e-2,5.740471600000063e-2,189081090,412253,null,null,null,null,null,null,null,null],[6.0218719008844346e-2,6.021925599999989e-2,198352407,432866,null,null,null,null,null,null,null,null],[6.350560899591073e-2,6.350631100000115e-2,209178882,454509,null,null,null,null,null,null,null,null],[6.640846299706027e-2,6.640907600000112e-2,218739807,477234,null,null,null,null,null,null,null,null],[6.96786810294725e-2,6.967925899999905e-2,229511172,501096,null,null,null,null,null,null,null,null],[7.32172720017843e-2,7.321790399999983e-2,241166871,526151,null,null,null,null,null,null,null,null],[7.690582104260102e-2,7.690653100000056e-2,253316745,552458,null,null,null,null,null,null,null,null],[7.774039695505053e-2,7.774103500000074e-2,256065084,580081,null,null,null,null,null,null,null,null],[7.948168396251276e-2,7.948235499999967e-2,261800880,609086,null,null,null,null,null,null,null,null],[8.478159899823368e-2,8.478237899999996e-2,279258309,639540,null,null,null,null,null,null,null,null],[9.367603802820668e-2,9.367699300000076e-2,308556006,671517,null,null,null,null,null,null,null,null],[9.834435401717201e-2,9.834532500000037e-2,323932356,705093,null,null,null,null,null,null,null,null],[0.10421636595856398,0.10421737899999961,343273854,740347,null,null,null,null,null,null,null,null],[0.11002359597478062,0.11002625599999938,362407617,777365,null,null,null,null,null,null,null,null],[0.11397561599733308,0.11397716400000135,375421068,816233,null,null,null,null,null,null,null,null],[0.121198587003164,0.12118870699999817,399217038,857045,null,null,null,null,null,null,null,null],[0.12627688801148906,0.1262784159999999,415945926,899897,null,null,null,null,null,null,null,null],[0.13407648500287905,0.1340789030000007,441632400,944892,null,null,null,null,null,null,null,null],[0.1398223610012792,0.13982398000000096,460556316,992136,null,null,null,null,null,null,null,null],[0.13869051000801846,0.13868671,456826590,1041743,null,null,null,null,null,null,null,null],[0.14371057297103107,0.14371202900000135,473362329,1093831,null,null,null,null,null,null,null,null],[0.15108612802578136,0.15108824100000007,497658249,1148522,null,null,null,null,null,null,null,null],[0.15961019496899098,0.15960696099999971,525736101,1205948,null,null,null,null,null,null,null,null],[0.1666181159671396,0.16661959300000007,548815641,1266246,null,null,null,null,null,null,null,null],[0.17424910800764337,0.17425046000000144,573949959,1329558,null,null,null,null,null,null,null,null],[0.18271611799718812,0.18271773500000066,601840206,1396036,null,null,null,null,null,null,null,null],[0.2019869289943017,0.20198508100000012,665316927,1465838,null,null,null,null,null,null,null,null],[0.21409867703914642,0.2141004070000001,705208746,1539130,null,null,null,null,null,null,null,null],[0.22524451499339193,0.2252370500000005,741921675,1616086,null,null,null,null,null,null,null,null],[0.23609086294891313,0.23609268499999914,777647145,1696890,null,null,null,null,null,null,null,null]],"reportName":"fib/9","reportNumber":2,"reportOutliers":{"highMild":0,"highSevere":0,"lowMild":0,"lowSevere":0,"samplesSeen":43}},{"reportAnalysis":{"anMean":{"estError":{"confIntCL":5.0e-2,"confIntLDX":6.972724273344782e-9,"confIntUDX":5.576911944060881e-9},"estPoint":4.226666874091772e-7},"anOutlierVar":{"ovDesc":"a severe","ovEffect":"Severe","ovFraction":0.6900424181913867},"anRegress":[{"regCoeffs":{"iters":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.0901821438900934e-8,"confIntUDX":9.124065800415636e-9},"estPoint":4.2157588416047557e-7},"y":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.8343236679209873e-4,"confIntUDX":2.7526673522396795e-4},"estPoint":3.963274344893427e-5}},"regRSquare":{"estError":{"confIntCL":5.0e-2,"confIntLDX":5.05381984497677e-4,"confIntUDX":9.685035127019459e-4},"estPoint":0.9966606983180731},"regResponder":"time"}],"anStdDev":{"estError":{"confIntCL":5.0e-2,"confIntLDX":2.3897342214180667e-9,"confIntUDX":1.3569897101299865e-9},"estPoint":2.1516391528570672e-8}},"reportKDEs":[{"kdePDF":[4857.110325267976,21598.18597236797,94230.18728354711,351191.2822281225,1114867.5462024566,3019174.6133149876,6991040.225760366,1.388931566301834e7,2.380238056020613e7,3.548189445714173e7,4.66152044723692e7,5.503073001124021e7,5.988933372700311e7,6.174520366407014e7,6.151450868640542e7,5.952731071179665e7,5.555700602186013e7,4.95198905142526e7,4.1961872799638115e7,3.392343594874278e7,2.643023637503173e7,2.0051615361233085e7,1.4815792095918287e7,1.0484358973847957e7,6900735.918659116,4097004.5543140555,2141194.7876034337,968914.4658673848,375758.2001148299,124135.43520735284,34811.60553730431,8270.219934552764,1662.5348818836544,282.61461118898933,40.61191060331729,4.974986801162251,1.0117194283255995,4.971575694342204,40.56463532559086,282.0615613507969,1657.0537523715332,8224.171534698986,34483.41732764665,122149.30724718176,365539.48059410416,924145.0560895158,1973824.6602569704,3561554.288570179,5429166.225426622,6991804.570512427,7606905.038862844,6991804.573714361,5429166.269278959,3561554.7943250467,1973829.5879690729,924185.617512065,365821.5419566735,123806.36098921977,42707.588861864635,42707.58886197547,123806.36098912539,365821.54195675766,924185.617511963,1973829.587969148,3561554.7943249256,5429166.269279046,6991804.573714242,7606905.038862965,6991804.57051231,5429166.225426751,3561554.288570053,1973824.660257112,924145.0560893771,365539.4805942604,122149.30724704191,34483.4173278142,8224.171534081606,1657.0537421739575,282.0613623681876,40.561423209173185,4.9277222336178435,0.5059549074105679,4.708654940848701e-2,4.748620787333499e-2,0.5128288423371777,5.0228801851494245,41.67733822534036,293.158015309595,1750.7056217098207,8895.755373162627,38581.35835601203,143464.60620844323,460259.7765587267,1284727.2251765893,3153611.2926078807,6892222.617010959,1.3578926779419497e7,2.4364081886950802e7,4.004969259419271e7,6.039980678789595e7,8.3453924284074e7,1.05459526031231e8,1.2187691925845402e8,1.2909516492699948e8,1.25799878236897e8,1.1319504542265898e8,9.423202998092853e7,7.257167046857736e7,5.175203980536676e7,3.455123350120077e7,2.2465014145494286e7,1.5470650280869197e7,1.2326373603162467e7,1.134519816830013e7,1.1168634318278806e7,1.1044227465206923e7,1.0601781383625878e7,9591559.685330069,7918022.452445185,5795044.309515921,3683750.7034307593,2008313.6500622493,932369.7905211367,367196.6258736365,122431.87781820631,34528.90687170118,8269.663892070705,1939.6647127149931],"kdeType":"time","kdeValues":[3.8703445261938077e-7,3.87539246696559e-7,3.880440407737372e-7,3.8854883485091535e-7,3.8905362892809356e-7,3.8955842300527177e-7,3.9006321708245e-7,3.9056801115962814e-7,3.9107280523680636e-7,3.9157759931398457e-7,3.920823933911628e-7,3.92587187468341e-7,3.9309198154551915e-7,3.9359677562269736e-7,3.9410156969987557e-7,3.946063637770538e-7,3.9511115785423194e-7,3.9561595193141016e-7,3.9612074600858837e-7,3.966255400857666e-7,3.971303341629448e-7,3.9763512824012295e-7,3.9813992231730116e-7,3.9864471639447937e-7,3.991495104716576e-7,3.9965430454883574e-7,4.0015909862601396e-7,4.0066389270319217e-7,4.011686867803704e-7,4.016734808575486e-7,4.0217827493472675e-7,4.0268306901190496e-7,4.0318786308908317e-7,4.036926571662614e-7,4.0419745124343954e-7,4.0470224532061775e-7,4.0520703939779597e-7,4.057118334749742e-7,4.062166275521524e-7,4.0672142162933055e-7,4.0722621570650876e-7,4.0773100978368697e-7,4.082358038608652e-7,4.0874059793804334e-7,4.0924539201522155e-7,4.0975018609239977e-7,4.10254980169578e-7,4.107597742467562e-7,4.1126456832393435e-7,4.1176936240111256e-7,4.1227415647829077e-7,4.12778950555469e-7,4.1328374463264714e-7,4.1378853870982535e-7,4.1429333278700357e-7,4.147981268641818e-7,4.1530292094136e-7,4.1580771501853815e-7,4.1631250909571636e-7,4.1681730317289457e-7,4.173220972500728e-7,4.1782689132725094e-7,4.1833168540442915e-7,4.1883647948160737e-7,4.193412735587856e-7,4.198460676359638e-7,4.2035086171314195e-7,4.2085565579032016e-7,4.2136044986749837e-7,4.218652439446766e-7,4.2237003802185474e-7,4.2287483209903295e-7,4.2337962617621117e-7,4.238844202533894e-7,4.243892143305676e-7,4.248940084077458e-7,4.2539880248492396e-7,4.2590359656210217e-7,4.264083906392804e-7,4.269131847164586e-7,4.2741797879363675e-7,4.2792277287081497e-7,4.284275669479932e-7,4.289323610251714e-7,4.294371551023496e-7,4.2994194917952776e-7,4.3044674325670597e-7,4.309515373338842e-7,4.314563314110624e-7,4.3196112548824055e-7,4.3246591956541877e-7,4.32970713642597e-7,4.334755077197752e-7,4.339803017969534e-7,4.3448509587413156e-7,4.3498988995130977e-7,4.35494684028488e-7,4.359994781056662e-7,4.3650427218284435e-7,4.3700906626002256e-7,4.375138603372008e-7,4.38018654414379e-7,4.385234484915572e-7,4.3902824256873536e-7,4.3953303664591357e-7,4.400378307230918e-7,4.4054262480027e-7,4.4104741887744815e-7,4.4155221295462636e-7,4.420570070318046e-7,4.425618011089828e-7,4.43066595186161e-7,4.4357138926333916e-7,4.4407618334051737e-7,4.445809774176956e-7,4.450857714948738e-7,4.4559056557205195e-7,4.4609535964923016e-7,4.466001537264084e-7,4.471049478035866e-7,4.476097418807648e-7,4.4811453595794296e-7,4.4861933003512117e-7,4.491241241122994e-7,4.496289181894776e-7,4.5013371226665575e-7,4.5063850634383396e-7,4.511433004210122e-7]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","peakMbAllocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportMeasured":[[1.734006218612194e-6,1.5030000000137989e-6,4191,1,null,null,null,null,null,null,null,null],[1.2620002962648869e-6,1.241999999734844e-6,3993,2,null,null,null,null,null,null,null,null],[1.6329577192664146e-6,1.6239999993672427e-6,5280,3,null,null,null,null,null,null,null,null],[2.073997166007757e-6,2.053000001112082e-6,6666,4,null,null,null,null,null,null,null,null],[2.5249901227653027e-6,2.504999999430879e-6,8184,5,null,null,null,null,null,null,null,null],[2.974993549287319e-6,2.955999999443293e-6,9636,6,null,null,null,null,null,null,null,null],[3.427034243941307e-6,3.405999999372966e-6,11187,7,null,null,null,null,null,null,null,null],[3.88704938814044e-6,3.858000001244477e-6,12672,8,null,null,null,null,null,null,null,null],[4.338973667472601e-6,4.30800000117415e-6,14157,9,null,null,null,null,null,null,null,null],[4.7889770939946175e-6,4.778999999288658e-6,15708,10,null,null,null,null,null,null,null,null],[5.23001654073596e-6,5.219000000167284e-6,17160,11,null,null,null,null,null,null,null,null],[5.691021215170622e-6,5.6709999984860815e-6,18612,12,null,null,null,null,null,null,null,null],[6.152025889605284e-6,6.142000000153303e-6,20130,13,null,null,null,null,null,null,null,null],[6.613030564039946e-6,6.593000000165716e-6,21648,14,null,null,null,null,null,null,null,null],[7.062975782901049e-6,7.054000001005534e-6,23133,15,null,null,null,null,null,null,null,null],[7.503957021981478e-6,7.4840000010567564e-6,24585,16,null,null,null,null,null,null,null,null],[7.983995601534843e-6,7.964999999998668e-6,26169,17,null,null,null,null,null,null,null,null],[8.425966370850801e-6,8.416000000011081e-6,27621,18,null,null,null,null,null,null,null,null],[8.867005817592144e-6,8.846000000062304e-6,29106,19,null,null,null,null,null,null,null,null],[9.328010492026806e-6,9.307000000902121e-6,30591,20,null,null,null,null,null,null,null,null],[9.807990863919258e-6,9.78900000170313e-6,32175,21,null,null,null,null,null,null,null,null],[1.0229006875306368e-5,1.0220000000060736e-5,33594,22,null,null,null,null,null,null,null,null],[1.0689953342080116e-5,1.0679999999041456e-5,35112,23,null,null,null,null,null,null,null,null],[1.1581985745579004e-5,1.1572000000015237e-5,38049,25,null,null,null,null,null,null,null,null],[1.206202432513237e-5,1.204199999982336e-5,39600,26,null,null,null,null,null,null,null,null],[1.2492993846535683e-5,1.2483000000784727e-5,41052,27,null,null,null,null,null,null,null,null],[1.2953998520970345e-5,1.2943999999848188e-5,42603,28,null,null,null,null,null,null,null,null],[1.3845972716808319e-5,1.3836000000821969e-5,45507,30,null,null,null,null,null,null,null,null],[1.4327000826597214e-5,1.4296999999885429e-5,47025,31,null,null,null,null,null,null,null,null],[1.521798549219966e-5,1.520800000065492e-5,49995,33,null,null,null,null,null,null,null,null],[1.613004133105278e-5,1.610999999890339e-5,53031,35,null,null,null,null,null,null,null,null],[1.6581034287810326e-5,1.6570999999743208e-5,54516,36,null,null,null,null,null,null,null,null],[1.750304363667965e-5,1.748300000059544e-5,57519,38,null,null,null,null,null,null,null,null],[1.8413993529975414e-5,1.839400000136493e-5,60489,40,null,null,null,null,null,null,null,null],[1.931603765115142e-5,1.9306000000440804e-5,63525,42,null,null,null,null,null,null,null,null],[2.0198000129312277e-5,2.018700000050444e-5,66429,44,null,null,null,null,null,null,null,null],[2.159102587029338e-5,2.1560000000420132e-5,70983,47,null,null,null,null,null,null,null,null],[2.251198748126626e-5,2.2472000001272363e-5,73920,49,null,null,null,null,null,null,null,null],[2.3833999875932932e-5,2.3823999999450507e-5,78408,52,null,null,null,null,null,null,null,null],[2.4746055714786053e-5,2.473700000038548e-5,81411,54,null,null,null,null,null,null,null,null],[2.611899981275201e-5,2.610900000021843e-5,85899,57,null,null,null,null,null,null,null,null],[2.7481000870466232e-5,2.7450999999345527e-5,90387,60,null,null,null,null,null,null,null,null],[2.8843991458415985e-5,2.884399999913967e-5,94875,63,null,null,null,null,null,null,null,null],[3.019697032868862e-5,3.0187000000125863e-5,99330,66,null,null,null,null,null,null,null,null],[3.154895966872573e-5,3.1540000000163104e-5,103851,69,null,null,null,null,null,null,null,null],[3.339204704388976e-5,3.337300000083587e-5,109857,73,null,null,null,null,null,null,null,null],[3.4744967706501484e-5,3.473499999984142e-5,114378,76,null,null,null,null,null,null,null,null],[3.656797343865037e-5,3.654799999885938e-5,120318,80,null,null,null,null,null,null,null,null],[3.8372003473341465e-5,3.836199999973644e-5,126291,84,null,null,null,null,null,null,null,null],[4.070601426064968e-5,4.0686000000178524e-5,133947,89,null,null,null,null,null,null,null,null],[4.2478961404412985e-5,4.246900000026699e-5,139854,93,null,null,null,null,null,null,null,null],[4.47329948656261e-5,4.4724000000329056e-5,147246,98,null,null,null,null,null,null,null,null],[4.702701698988676e-5,4.7018000000065285e-5,154803,103,null,null,null,null,null,null,null,null],[4.930200520902872e-5,4.9291999999923064e-5,162261,108,null,null,null,null,null,null,null,null],[5.092500941827893e-5,5.090500000015652e-5,167574,113,null,null,null,null,null,null,null,null],[5.279801553115249e-5,5.2767999999758786e-5,173745,119,null,null,null,null,null,null,null,null],[5.543295992538333e-5,5.5414000000197916e-5,182490,125,null,null,null,null,null,null,null,null],[5.808897549286485e-5,5.805899999877795e-5,191202,131,null,null,null,null,null,null,null,null],[6.118498276919127e-5,6.116399999989142e-5,201366,138,null,null,null,null,null,null,null,null],[6.380898412317038e-5,6.37989999994204e-5,210078,144,null,null,null,null,null,null,null,null],[6.734603084623814e-5,6.733600000075057e-5,221727,152,null,null,null,null,null,null,null,null],[7.044099038466811e-5,7.042200000029197e-5,231858,159,null,null,null,null,null,null,null,null],[7.396697765216231e-5,7.395799999976305e-5,243507,167,null,null,null,null,null,null,null,null],[7.79549591243267e-5,7.793600000027823e-5,256674,176,null,null,null,null,null,null,null,null],[8.420698577538133e-5,8.420800000052964e-5,277365,185,null,null,null,null,null,null,null,null],[8.589000208303332e-5,8.58710000013474e-5,282744,194,null,null,null,null,null,null,null,null],[9.02980100363493e-5,9.027900000013744e-5,297297,204,null,null,null,null,null,null,null,null],[9.470595978200436e-5,9.469700000153125e-5,311850,214,null,null,null,null,null,null,null,null],[9.912502719089389e-5,9.910600000040404e-5,326403,224,null,null,null,null,null,null,null,null],[1.0441499762237072e-4,1.0441599999921891e-4,343827,236,null,null,null,null,null,null,null,null],[1.0927300900220871e-4,1.0924500000086823e-4,359766,247,null,null,null,null,null,null,null,null],[1.1504505528137088e-4,1.1502599999957397e-4,378807,260,null,null,null,null,null,null,null,null],[1.207650057040155e-4,1.2073600000128692e-4,397650,273,null,null,null,null,null,null,null,null],[1.269369968213141e-4,1.2691799999942077e-4,417978,287,null,null,null,null,null,null,null,null],[1.331180101260543e-4,1.330890000001972e-4,438306,301,null,null,null,null,null,null,null,null],[1.3974105240777135e-4,1.3973199999917085e-4,460185,316,null,null,null,null,null,null,null,null],[1.4679401647299528e-4,1.467849999983173e-4,483384,332,null,null,null,null,null,null,null,null],[1.5387701569125056e-4,1.5386799999994594e-4,506781,348,null,null,null,null,null,null,null,null],[1.6182195395231247e-4,1.618119999999834e-4,532950,366,null,null,null,null,null,null,null,null],[1.6974599566310644e-4,1.6973800000030792e-4,559053,384,null,null,null,null,null,null,null,null],[1.7814204329624772e-4,1.781229999995304e-4,586641,403,null,null,null,null,null,null,null,null],[1.874089939519763e-4,1.8740099999980941e-4,617199,424,null,null,null,null,null,null,null,null],[1.9669695757329464e-4,1.9667900000008842e-4,647790,445,null,null,null,null,null,null,null,null],[2.0639505237340927e-4,2.063770000013676e-4,679734,467,null,null,null,null,null,null,null,null],[2.1655397722497582e-4,2.165359999999339e-4,713196,490,null,null,null,null,null,null,null,null],[2.2760499268770218e-4,2.2758599999939122e-4,749529,515,null,null,null,null,null,null,null,null],[2.39066022913903e-4,2.3904700000088042e-4,787314,541,null,null,null,null,null,null,null,null],[2.5097798788920045e-4,2.509600000006884e-4,826584,568,null,null,null,null,null,null,null,null],[2.6334100402891636e-4,2.633330000012535e-4,867306,596,null,null,null,null,null,null,null,null],[2.7631502598524094e-4,2.7632799999999236e-4,910173,626,null,null,null,null,null,null,null,null],[2.877869992516935e-4,2.8777900000065415e-4,947826,657,null,null,null,null,null,null,null,null],[3.0225299997255206e-4,3.02256000001222e-4,995577,690,null,null,null,null,null,null,null,null],[3.195960307493806e-4,3.196079999998602e-4,1052832,725,null,null,null,null,null,null,null,null],[3.3249997068196535e-4,3.3251300000003425e-4,1095204,761,null,null,null,null,null,null,null,null],[3.480389714241028e-4,3.4802200000072503e-4,1146288,799,null,null,null,null,null,null,null,null],[3.654619795270264e-4,3.6545399999887707e-4,1203708,839,null,null,null,null,null,null,null,null],[3.838359843939543e-4,3.8382800000036355e-4,1264197,881,null,null,null,null,null,null,null,null],[4.0305202128365636e-4,4.0305499999959693e-4,1327557,925,null,null,null,null,null,null,null,null],[4.2343896348029375e-4,4.2343199999983483e-4,1394613,972,null,null,null,null,null,null,null,null],[4.4421799248084426e-4,4.442119999996663e-4,1463088,1020,null,null,null,null,null,null,null,null],[5.11122983880341e-4,5.113770000004791e-4,1685343,1071,null,null,null,null,null,null,null,null],[5.649129743687809e-4,5.657790000004326e-4,1864863,1125,null,null,null,null,null,null,null,null],[5.288660177029669e-4,5.288500000002472e-4,1741905,1181,null,null,null,null,null,null,null,null],[5.445950082503259e-4,5.445890000004283e-4,1793748,1240,null,null,null,null,null,null,null,null],[5.719070322811604e-4,5.719309999996369e-4,1883739,1302,null,null,null,null,null,null,null,null],[6.003300077281892e-4,6.0035399999947e-4,1977459,1367,null,null,null,null,null,null,null,null],[6.305960123427212e-4,6.305910000001802e-4,2077053,1436,null,null,null,null,null,null,null,null],[6.651509902440012e-4,6.651649999991349e-4,2190936,1507,null,null,null,null,null,null,null,null],[6.952270050533116e-4,6.952319999999901e-4,2289936,1583,null,null,null,null,null,null,null,null],[7.303129532374442e-4,7.303069999995415e-4,2405469,1662,null,null,null,null,null,null,null,null],[7.662390125915408e-4,7.662439999993609e-4,2523840,1745,null,null,null,null,null,null,null,null],[8.012339822016656e-4,8.012699999984108e-4,2639307,1832,null,null,null,null,null,null,null,null],[8.372419979423285e-4,8.372479999998461e-4,2757744,1924,null,null,null,null,null,null,null,null],[8.778069750405848e-4,8.778130000006712e-4,2891295,2020,null,null,null,null,null,null,null,null],[1.0285580065101385e-3,1.0288670000004885e-3,3389529,2121,null,null,null,null,null,null,null,null],[1.006507023703307e-3,1.0065249999993142e-3,3315378,2227,null,null,null,null,null,null,null,null],[1.0589450248517096e-3,1.0589730000010178e-3,3488067,2339,null,null,null,null,null,null,null,null],[1.1090689804404974e-3,1.1090660000014907e-3,3652968,2456,null,null,null,null,null,null,null,null],[1.1725460062734783e-3,1.1739479999999247e-3,3867270,2579,null,null,null,null,null,null,null,null],[1.2398220133036375e-3,1.240453000001196e-3,4086522,2708,null,null,null,null,null,null,null,null],[1.2719820369966328e-3,1.2720109999992957e-3,4190175,2843,null,null,null,null,null,null,null,null],[1.3195210485719144e-3,1.3195699999997146e-3,4346463,2985,null,null,null,null,null,null,null,null],[1.3700150302611291e-3,1.3700359999990752e-3,4512651,3134,null,null,null,null,null,null,null,null],[1.461666019167751e-3,1.4617269999988025e-3,4814667,3291,null,null,null,null,null,null,null,null],[1.5308150323107839e-3,1.5308269999998458e-3,5042235,3456,null,null,null,null,null,null,null,null],[1.584184996318072e-3,1.5842769999991901e-3,5218290,3629,null,null,null,null,null,null,null,null],[1.6983869718387723e-3,1.6986299999999233e-3,5595546,3810,null,null,null,null,null,null,null,null],[1.8204250372946262e-3,1.8203680000006273e-3,5993922,4001,null,null,null,null,null,null,null,null],[1.882841985207051e-3,1.8828849999987796e-3,6201987,4201,null,null,null,null,null,null,null,null],[1.97368097724393e-3,1.9738359999994515e-3,6501792,4411,null,null,null,null,null,null,null,null],[2.050864975899458e-3,2.0509299999993402e-3,6755562,4631,null,null,null,null,null,null,null,null],[2.1352230105549097e-3,2.1352879999998464e-3,7033422,4863,null,null,null,null,null,null,null,null],[2.273850957863033e-3,2.2739280000010353e-3,7489944,5106,null,null,null,null,null,null,null,null],[2.3465660051442683e-3,2.346624000001185e-3,7729425,5361,null,null,null,null,null,null,null,null],[2.458445029333234e-3,2.458483000001621e-3,8097903,5629,null,null,null,null,null,null,null,null],[2.5955300079658628e-3,2.5956100000001925e-3,8549541,5911,null,null,null,null,null,null,null,null],[2.729500993154943e-3,2.7295610000006576e-3,8990619,6207,null,null,null,null,null,null,null,null],[2.8775259852409363e-3,2.877597999999537e-3,9478425,6517,null,null,null,null,null,null,null,null],[3.027426020707935e-3,3.027498999999878e-3,9972138,6843,null,null,null,null,null,null,null,null],[3.1726370216347277e-3,3.1727110000012715e-3,10450374,7185,null,null,null,null,null,null,null,null],[3.291138040367514e-3,3.291232000000477e-3,10840731,7544,null,null,null,null,null,null,null,null],[3.4446140052750707e-3,3.44469000000025e-3,11346159,7921,null,null,null,null,null,null,null,null],[3.6377739743329585e-3,3.6378510000005804e-3,11982597,8318,null,null,null,null,null,null,null,null],[3.830633999314159e-3,3.8307319999990597e-3,12617913,8733,null,null,null,null,null,null,null,null],[4.0053100092336535e-3,4.005399000000409e-3,13193235,9170,null,null,null,null,null,null,null,null],[4.236862005200237e-3,4.236983000000194e-3,13956063,9629,null,null,null,null,null,null,null,null],[4.456611990462989e-3,4.456714999999889e-3,14679555,10110,null,null,null,null,null,null,null,null],[4.697209980804473e-3,4.697315999999674e-3,15472149,10616,null,null,null,null,null,null,null,null],[4.925485991407186e-3,4.925592999999395e-3,16224153,11146,null,null,null,null,null,null,null,null],[5.1727870013564825e-3,5.172885000000349e-3,17038824,11704,null,null,null,null,null,null,null,null],[5.3797230357304215e-3,5.379823000000172e-3,17720307,12289,null,null,null,null,null,null,null,null],[5.697716027498245e-3,5.697818999999882e-3,18767727,12903,null,null,null,null,null,null,null,null],[5.980243033263832e-3,5.98034799999958e-3,19698228,13549,null,null,null,null,null,null,null,null],[6.215341039933264e-3,6.215467999998836e-3,20472804,14226,null,null,null,null,null,null,null,null],[6.516443972941488e-3,6.51655199999901e-3,21464388,14937,null,null,null,null,null,null,null,null],[6.845708005130291e-3,6.8458380000002705e-3,22549131,15684,null,null,null,null,null,null,null,null],[7.189076975919306e-3,7.189211000000029e-3,23680140,16469,null,null,null,null,null,null,null,null],[7.66272097826004e-3,7.6628480000007215e-3,25240248,17292,null,null,null,null,null,null,null,null],[8.039874024689198e-3,8.034735000000737e-3,26482500,18157,null,null,null,null,null,null,null,null],[8.420703990850598e-3,8.420837000000958e-3,27736863,19065,null,null,null,null,null,null,null,null],[8.830268983729184e-3,8.830394000000297e-3,29085771,20018,null,null,null,null,null,null,null,null],[9.308790962677449e-3,9.308940000000376e-3,30662016,21019,null,null,null,null,null,null,null,null],[9.766754985321313e-3,9.766887999999696e-3,32170512,22070,null,null,null,null,null,null,null,null],[1.0183693026192486e-2,1.0183818999999872e-2,33543807,23173,null,null,null,null,null,null,null,null],[1.0633692028932273e-2,1.0633821000000765e-2,35026101,24332,null,null,null,null,null,null,null,null],[1.1242226988542825e-2,1.1242370999999807e-2,37030587,25549,null,null,null,null,null,null,null,null],[1.185463898582384e-2,1.18554280000005e-2,39050022,26826,null,null,null,null,null,null,null,null],[1.2504380021709949e-2,1.250454400000045e-2,41187927,28167,null,null,null,null,null,null,null,null],[1.3187765958718956e-2,1.3187923000000268e-2,43438725,29576,null,null,null,null,null,null,null,null],[1.3616184995044023e-2,1.3616344999999086e-2,44849937,31054,null,null,null,null,null,null,null,null],[1.429392903810367e-2,1.4294064999999634e-2,47082189,32607,null,null,null,null,null,null,null,null],[1.500673801638186e-2,1.500689999999949e-2,49430172,34238,null,null,null,null,null,null,null,null],[1.5821908018551767e-2,1.582210599999989e-2,52115316,35950,null,null,null,null,null,null,null,null],[1.6529787972103804e-2,1.653002099999945e-2,54451188,37747,null,null,null,null,null,null,null,null],[1.7364203988108784e-2,1.736436400000052e-2,57195237,39634,null,null,null,null,null,null,null,null],[1.8206144974101335e-2,1.8206359999998867e-2,59968689,41616,null,null,null,null,null,null,null,null],[1.9180441973730922e-2,1.9172479999999936e-2,63177642,43697,null,null,null,null,null,null,null,null],[2.009375498164445e-2,2.0093963999999076e-2,66186087,45882,null,null,null,null,null,null,null,null],[2.1129538014065474e-2,2.1129743999999562e-2,69597594,48176,null,null,null,null,null,null,null,null],[2.248708897968754e-2,2.248731499999934e-2,74069457,50585,null,null,null,null,null,null,null,null],[2.3606094997376204e-2,2.3606531000002207e-2,77756184,53114,null,null,null,null,null,null,null,null],[2.480761695187539e-2,2.480795099999966e-2,81713907,55770,null,null,null,null,null,null,null,null],[2.590688696363941e-2,2.590717899999717e-2,85333644,58558,null,null,null,null,null,null,null,null],[2.701885998249054e-2,2.701915099999752e-2,88996446,61486,null,null,null,null,null,null,null,null],[2.831632102606818e-2,2.8316561000000462e-2,93269781,64561,null,null,null,null,null,null,null,null],[2.9760804027318954e-2,2.9761075999999775e-2,98027787,67789,null,null,null,null,null,null,null,null],[3.12592190457508e-2,3.125951099999824e-2,102963366,71178,null,null,null,null,null,null,null,null],[3.278847201727331e-2,3.2788775000000214e-2,108000486,74737,null,null,null,null,null,null,null,null],[3.450718603562564e-2,3.4507492000003026e-2,113661537,78474,null,null,null,null,null,null,null,null],[3.6112571018747985e-2,3.6112899000002585e-2,118949556,82398,null,null,null,null,null,null,null,null],[3.792292601428926e-2,3.792329799999905e-2,124912755,86518,null,null,null,null,null,null,null,null],[3.9800018013920635e-2,3.980038299999933e-2,131095437,90843,null,null,null,null,null,null,null,null],[4.19951020157896e-2,4.1995474000000144e-2,138325671,95386,null,null,null,null,null,null,null,null],[4.395701101748273e-2,4.395739699999979e-2,144787896,100155,null,null,null,null,null,null,null,null],[4.60954190348275e-2,4.609192399999884e-2,151831812,105163,null,null,null,null,null,null,null,null],[4.833476495696232e-2,4.83351540000001e-2,159207576,110421,null,null,null,null,null,null,null,null],[5.059339804574847e-2,5.0593822999999816e-2,166647096,115942,null,null,null,null,null,null,null,null],[5.364891601493582e-2,5.364955499999979e-2,176712525,121739,null,null,null,null,null,null,null,null],[5.605629499768838e-2,5.605679199999969e-2,184641138,127826,null,null,null,null,null,null,null,null],[5.8864302991423756e-2,5.8864809999999324e-2,193890312,134217,null,null,null,null,null,null,null,null],[6.2030026980210096e-2,6.203066800000201e-2,204318213,140928,null,null,null,null,null,null,null,null],[6.498762301634997e-2,6.498815499999822e-2,214059516,147975,null,null,null,null,null,null,null,null],[6.824409600812942e-2,6.824202800000023e-2,224785869,155373,null,null,null,null,null,null,null,null],[7.13241709745489e-2,7.132474999999872e-2,234931059,163142,null,null,null,null,null,null,null,null],[7.524762797402218e-2,7.524829699999813e-2,247854618,171299,null,null,null,null,null,null,null,null],[7.866603299044073e-2,7.866668699999835e-2,259114152,179864,null,null,null,null,null,null,null,null],[7.78742769616656e-2,7.787506500000063e-2,256507053,188858,null,null,null,null,null,null,null,null],[7.825527800014243e-2,7.82560580000009e-2,257761878,198300,null,null,null,null,null,null,null,null],[8.179860602831468e-2,8.179931299999765e-2,269432361,208215,null,null,null,null,null,null,null,null],[8.625966601539403e-2,8.626036599999765e-2,284126370,218626,null,null,null,null,null,null,null,null],[9.022438997635618e-2,9.022524899999951e-2,297186219,229558,null,null,null,null,null,null,null,null],[9.546850004699081e-2,9.546942900000133e-2,314459541,241036,null,null,null,null,null,null,null,null],[9.989500499796122e-2,9.989594800000035e-2,329039766,253087,null,null,null,null,null,null,null,null],[0.10462252300931141,0.10462353000000135,344611641,265742,null,null,null,null,null,null,null,null],[0.1095868709962815,0.10958775499999973,360962613,279029,null,null,null,null,null,null,null,null],[0.11499033903237432,0.11499130300000004,378760998,292980,null,null,null,null,null,null,null,null],[0.12070650001987815,0.12070745600000166,397588884,307629,null,null,null,null,null,null,null,null],[0.12716227996861562,0.12716331399999703,418853358,323011,null,null,null,null,null,null,null,null],[0.13425873505184427,0.13425995100000065,442228875,339161,null,null,null,null,null,null,null,null],[0.14080686698434874,0.14080807199999867,463796949,356119,null,null,null,null,null,null,null,null],[0.14889366901479661,0.1488956960000003,490437915,373925,null,null,null,null,null,null,null,null],[0.15581089997431263,0.15581319900000068,513221610,392622,null,null,null,null,null,null,null,null],[0.17354262998560444,0.17354564099999692,571628805,412253,null,null,null,null,null,null,null,null],[0.19113452796591446,0.19113642800000008,629569512,432866,null,null,null,null,null,null,null,null],[0.2016421360312961,0.20164449399999995,664181496,454509,null,null,null,null,null,null,null,null],[0.21275134501047432,0.21275311400000163,700771137,477234,null,null,null,null,null,null,null,null],[0.22062326601007953,0.22062496299999879,726699303,501096,null,null,null,null,null,null,null,null],[0.23095548601122573,0.23095728899999912,760732170,526151,null,null,null,null,null,null,null,null],[0.243025005038362,0.24302704999999847,800488161,552458,null,null,null,null,null,null,null,null]],"reportName":"fib/11","reportNumber":3,"reportOutliers":{"highMild":0,"highSevere":0,"lowMild":0,"lowSevere":0,"samplesSeen":43}}]+ </script>+ <meta name="viewport" content="width=device-width, initial-scale=1">+</head>+<body>+ <div class="content">+ <h1 class='title'>criterion performance measurements</h1>+ <p class="no-print"><a href="#grokularation">want to understand this report?</a></p>+ <h1 id="overview"><a href="#overview">overview</a></h1>+ <div class="no-print">+ <select id="sort-overview" class="select">+ <option value="report-index">index</option>+ <option value="lex">lexical</option>+ <option value="colex">colexical</option>+ <option value="duration">time ascending</option>+ <option value="rev-duration">time descending</option>+ </select>+ <span class="overview-info">+ <a href="#controls-explanation" class="info" title="click bar/label to zoom; x-axis to toggle logarithmic scale; background to reset">ⓘ</a>+ <a id="legend-toggle" class="chevron button"></a>+ </span>+ </div>+ <aside id="overview-chart"></aside>+ <main id="reports"></main>+ </div>++ <aside id="controls-explanation" class="explanation no-print">+ <h1><a href="#controls-explanation">controls</a></h1>++ <p>+ The overview chart can be controlled by clicking the following elements:+ <ul>+ <li><em>a bar or its label</em> zooms the x-axis to that bar</li>+ <li><em>the background</em> resets zoom to the entire chart</li>+ <li><em>the x-axis</em> toggles between linear and logarithmic scale</li>+ <li><em>the chevron</em> in the top-right toggles the the legend</li>+ <li><em>a group name in the legend</em> shows/hides that group</li>+ </ul>+ </p>++ <p>+ The overview chart supports the following sort orders:+ <ul>+ <li><em>index</em> order is the order as the benchmarks are defined in criterion</li>+ <li><em>lexical</em> order sorts <a href="https://en.wikipedia.org/wiki/Lexicographic_order#Motivation_and_definition">groups left-to-right</a>, alphabetically</li>+ <li><em>colexical</em> order sorts <a href="https://en.wikipedia.org/wiki/Lexicographic_order#Colexicographic_order">groups right-to-left</a>, alphabetically</li>+ <li><em>time ascending/descending</em> order sorts by the estimated mean execution time</li>+ </ul>+ </p>++ </aside>++ <aside id="grokularation" class="explanation">++ <h1><a>understanding this report</a></h1>++ <p>+ In this report, each function benchmarked by criterion is assigned a section of its own.+ <span class="no-print">The charts in each section are active; if you hover your mouse over data points and annotations, you will see more details.</span>+ </p>++ <ul>+ <li>+ The chart on the left is a <a href="http://en.wikipedia.org/wiki/Kernel_density_estimation">kernel density estimate</a> (also known as a KDE) of time measurements.+ This graphs the probability of any given time measurement occurring.+ A spike indicates that a measurement of a particular time occurred; its height indicates how often that measurement was repeated.+ </li>++ <li>+ The chart on the right is the raw data from which the kernel density estimate is built.+ The <em>x</em>-axis indicates the number of loop iterations, while the <em>y</em>-axis shows measured execution time for the given number of loop iterations.+ The line behind the values is the linear regression estimate of execution time for a given number of iterations.+ Ideally, all measurements will be on (or very near) this line.+ The transparent area behind it shows the confidence interval for the execution time estimate.+ </li>+ </ul>++ <p>+ Under the charts is a small table.+ The first two rows are the results of a linear regression run on the measurements displayed in the right-hand chart.+ </p>++ <ul>+ <li>+ <em>OLS regression</em> indicates the time estimated for a single loop iteration using an ordinary least-squares regression model.+ This number is more accurate than the <em>mean</em> estimate below it, as it more effectively eliminates measurement overhead and other constant factors.+ </li>+ <li>+ <em>R<sup>2</sup>; goodness-of-fit</em> is a measure of how accurately the linear regression model fits the observed measurements.+ If the measurements are not too noisy, R<sup>2</sup>; should lie between 0.99 and 1, indicating an excellent fit.+ If the number is below 0.99, something is confounding the accuracy of the linear model.+ </li>+ <li>+ <em>Mean execution time</em> and <em>standard deviation</em> are statistics calculated from execution time divided by number of iterations.+ </li>+ </ul>++ <p>+ We use a statistical technique called the <a href="http://en.wikipedia.org/wiki/Bootstrapping_(statistics)">bootstrap</a> to provide confidence intervals on our estimates.+ The bootstrap-derived upper and lower bounds on estimates let you see how accurate we believe those estimates to be.+ <span class="no-print">(Hover the mouse over the table headers to see the confidence levels.)</span>+ </p>++ <p>+ A noisy benchmarking environment can cause some or many measurements to fall far from the mean.+ These outlying measurements can have a significant inflationary effect on the estimate of the standard deviation.+ We calculate and display an estimate of the extent to which the standard deviation has been inflated by outliers.+ </p>++ </aside>++ <footer>+ <div class="content">+ <h1 class="colophon-header">colophon</h1>+ <p>+ This report was created using the <a href="http://hackage.haskell.org/package/criterion">criterion</a>+ benchmark execution and performance analysis tool.+ </p>+ <p>+ Criterion is developed and maintained+ by <a href="http://www.serpentine.com/blog/">Bryan O'Sullivan</a>.+ </p>+ </div>+ </footer>+</body>+</html>
www/report.html view
@@ -1,1145 +1,1145 @@-<!doctype html> -<html> -<head> - <meta charset="utf-8"/> - <title>criterion report</title> - <script> - /*! - * Chart.js v2.9.4 - * https://www.chartjs.org - * (c) 2020 Chart.js Contributors - * Released under the MIT License - */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(function(){try{return require("moment")}catch(t){}}()):"function"==typeof define&&define.amd?define(["require"],(function(t){return e(function(){try{return t("moment")}catch(t){}}())})):(t=t||self).Chart=e(t.moment)}(this,(function(t){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var e={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},n=function(t,e){return t(e={exports:{}},e.exports),e.exports}((function(t){var n={};for(var i in e)e.hasOwnProperty(i)&&(n[e[i]]=i);var a=t.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var r in a)if(a.hasOwnProperty(r)){if(!("channels"in a[r]))throw new Error("missing channels property: "+r);if(!("labels"in a[r]))throw new Error("missing channel labels property: "+r);if(a[r].labels.length!==a[r].channels)throw new Error("channel and label counts mismatch: "+r);var o=a[r].channels,s=a[r].labels;delete a[r].channels,delete a[r].labels,Object.defineProperty(a[r],"channels",{value:o}),Object.defineProperty(a[r],"labels",{value:s})}a.rgb.hsl=function(t){var e,n,i=t[0]/255,a=t[1]/255,r=t[2]/255,o=Math.min(i,a,r),s=Math.max(i,a,r),l=s-o;return s===o?e=0:i===s?e=(a-r)/l:a===s?e=2+(r-i)/l:r===s&&(e=4+(i-a)/l),(e=Math.min(60*e,360))<0&&(e+=360),n=(o+s)/2,[e,100*(s===o?0:n<=.5?l/(s+o):l/(2-s-o)),100*n]},a.rgb.hsv=function(t){var e,n,i,a,r,o=t[0]/255,s=t[1]/255,l=t[2]/255,u=Math.max(o,s,l),d=u-Math.min(o,s,l),h=function(t){return(u-t)/6/d+.5};return 0===d?a=r=0:(r=d/u,e=h(o),n=h(s),i=h(l),o===u?a=i-n:s===u?a=1/3+e-i:l===u&&(a=2/3+n-e),a<0?a+=1:a>1&&(a-=1)),[360*a,100*r,100*u]},a.rgb.hwb=function(t){var e=t[0],n=t[1],i=t[2];return[a.rgb.hsl(t)[0],100*(1/255*Math.min(e,Math.min(n,i))),100*(i=1-1/255*Math.max(e,Math.max(n,i)))]},a.rgb.cmyk=function(t){var e,n=t[0]/255,i=t[1]/255,a=t[2]/255;return[100*((1-n-(e=Math.min(1-n,1-i,1-a)))/(1-e)||0),100*((1-i-e)/(1-e)||0),100*((1-a-e)/(1-e)||0),100*e]},a.rgb.keyword=function(t){var i=n[t];if(i)return i;var a,r,o,s=1/0;for(var l in e)if(e.hasOwnProperty(l)){var u=e[l],d=(r=t,o=u,Math.pow(r[0]-o[0],2)+Math.pow(r[1]-o[1],2)+Math.pow(r[2]-o[2],2));d<s&&(s=d,a=l)}return a},a.keyword.rgb=function(t){return e[t]},a.rgb.xyz=function(t){var e=t[0]/255,n=t[1]/255,i=t[2]/255;return[100*(.4124*(e=e>.04045?Math.pow((e+.055)/1.055,2.4):e/12.92)+.3576*(n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.1805*(i=i>.04045?Math.pow((i+.055)/1.055,2.4):i/12.92)),100*(.2126*e+.7152*n+.0722*i),100*(.0193*e+.1192*n+.9505*i)]},a.rgb.lab=function(t){var e=a.rgb.xyz(t),n=e[0],i=e[1],r=e[2];return i/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116)-16,500*(n-i),200*(i-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},a.hsl.rgb=function(t){var e,n,i,a,r,o=t[0]/360,s=t[1]/100,l=t[2]/100;if(0===s)return[r=255*l,r,r];e=2*l-(n=l<.5?l*(1+s):l+s-l*s),a=[0,0,0];for(var u=0;u<3;u++)(i=o+1/3*-(u-1))<0&&i++,i>1&&i--,r=6*i<1?e+6*(n-e)*i:2*i<1?n:3*i<2?e+(n-e)*(2/3-i)*6:e,a[u]=255*r;return a},a.hsl.hsv=function(t){var e=t[0],n=t[1]/100,i=t[2]/100,a=n,r=Math.max(i,.01);return n*=(i*=2)<=1?i:2-i,a*=r<=1?r:2-r,[e,100*(0===i?2*a/(r+a):2*n/(i+n)),100*((i+n)/2)]},a.hsv.rgb=function(t){var e=t[0]/60,n=t[1]/100,i=t[2]/100,a=Math.floor(e)%6,r=e-Math.floor(e),o=255*i*(1-n),s=255*i*(1-n*r),l=255*i*(1-n*(1-r));switch(i*=255,a){case 0:return[i,l,o];case 1:return[s,i,o];case 2:return[o,i,l];case 3:return[o,s,i];case 4:return[l,o,i];case 5:return[i,o,s]}},a.hsv.hsl=function(t){var e,n,i,a=t[0],r=t[1]/100,o=t[2]/100,s=Math.max(o,.01);return i=(2-r)*o,n=r*s,[a,100*(n=(n/=(e=(2-r)*s)<=1?e:2-e)||0),100*(i/=2)]},a.hwb.rgb=function(t){var e,n,i,a,r,o,s,l=t[0]/360,u=t[1]/100,d=t[2]/100,h=u+d;switch(h>1&&(u/=h,d/=h),i=6*l-(e=Math.floor(6*l)),0!=(1&e)&&(i=1-i),a=u+i*((n=1-d)-u),e){default:case 6:case 0:r=n,o=a,s=u;break;case 1:r=a,o=n,s=u;break;case 2:r=u,o=n,s=a;break;case 3:r=u,o=a,s=n;break;case 4:r=a,o=u,s=n;break;case 5:r=n,o=u,s=a}return[255*r,255*o,255*s]},a.cmyk.rgb=function(t){var e=t[0]/100,n=t[1]/100,i=t[2]/100,a=t[3]/100;return[255*(1-Math.min(1,e*(1-a)+a)),255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,i*(1-a)+a))]},a.xyz.rgb=function(t){var e,n,i,a=t[0]/100,r=t[1]/100,o=t[2]/100;return n=-.9689*a+1.8758*r+.0415*o,i=.0557*a+-.204*r+1.057*o,e=(e=3.2406*a+-1.5372*r+-.4986*o)>.0031308?1.055*Math.pow(e,1/2.4)-.055:12.92*e,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,i=i>.0031308?1.055*Math.pow(i,1/2.4)-.055:12.92*i,[255*(e=Math.min(Math.max(0,e),1)),255*(n=Math.min(Math.max(0,n),1)),255*(i=Math.min(Math.max(0,i),1))]},a.xyz.lab=function(t){var e=t[0],n=t[1],i=t[2];return n/=100,i/=108.883,e=(e/=95.047)>.008856?Math.pow(e,1/3):7.787*e+16/116,[116*(n=n>.008856?Math.pow(n,1/3):7.787*n+16/116)-16,500*(e-n),200*(n-(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116))]},a.lab.xyz=function(t){var e,n,i,a=t[0];e=t[1]/500+(n=(a+16)/116),i=n-t[2]/200;var r=Math.pow(n,3),o=Math.pow(e,3),s=Math.pow(i,3);return n=r>.008856?r:(n-16/116)/7.787,e=o>.008856?o:(e-16/116)/7.787,i=s>.008856?s:(i-16/116)/7.787,[e*=95.047,n*=100,i*=108.883]},a.lab.lch=function(t){var e,n=t[0],i=t[1],a=t[2];return(e=360*Math.atan2(a,i)/2/Math.PI)<0&&(e+=360),[n,Math.sqrt(i*i+a*a),e]},a.lch.lab=function(t){var e,n=t[0],i=t[1];return e=t[2]/360*2*Math.PI,[n,i*Math.cos(e),i*Math.sin(e)]},a.rgb.ansi16=function(t){var e=t[0],n=t[1],i=t[2],r=1 in arguments?arguments[1]:a.rgb.hsv(t)[2];if(0===(r=Math.round(r/50)))return 30;var o=30+(Math.round(i/255)<<2|Math.round(n/255)<<1|Math.round(e/255));return 2===r&&(o+=60),o},a.hsv.ansi16=function(t){return a.rgb.ansi16(a.hsv.rgb(t),t[2])},a.rgb.ansi256=function(t){var e=t[0],n=t[1],i=t[2];return e===n&&n===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(n/255*5)+Math.round(i/255*5)},a.ansi16.rgb=function(t){var e=t%10;if(0===e||7===e)return t>50&&(e+=3.5),[e=e/10.5*255,e,e];var n=.5*(1+~~(t>50));return[(1&e)*n*255,(e>>1&1)*n*255,(e>>2&1)*n*255]},a.ansi256.rgb=function(t){if(t>=232){var e=10*(t-232)+8;return[e,e,e]}var n;return t-=16,[Math.floor(t/36)/5*255,Math.floor((n=t%36)/6)/5*255,n%6/5*255]},a.rgb.hex=function(t){var e=(((255&Math.round(t[0]))<<16)+((255&Math.round(t[1]))<<8)+(255&Math.round(t[2]))).toString(16).toUpperCase();return"000000".substring(e.length)+e},a.hex.rgb=function(t){var e=t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];var n=e[0];3===e[0].length&&(n=n.split("").map((function(t){return t+t})).join(""));var i=parseInt(n,16);return[i>>16&255,i>>8&255,255&i]},a.rgb.hcg=function(t){var e,n=t[0]/255,i=t[1]/255,a=t[2]/255,r=Math.max(Math.max(n,i),a),o=Math.min(Math.min(n,i),a),s=r-o;return e=s<=0?0:r===n?(i-a)/s%6:r===i?2+(a-n)/s:4+(n-i)/s+4,e/=6,[360*(e%=1),100*s,100*(s<1?o/(1-s):0)]},a.hsl.hcg=function(t){var e=t[1]/100,n=t[2]/100,i=1,a=0;return(i=n<.5?2*e*n:2*e*(1-n))<1&&(a=(n-.5*i)/(1-i)),[t[0],100*i,100*a]},a.hsv.hcg=function(t){var e=t[1]/100,n=t[2]/100,i=e*n,a=0;return i<1&&(a=(n-i)/(1-i)),[t[0],100*i,100*a]},a.hcg.rgb=function(t){var e=t[0]/360,n=t[1]/100,i=t[2]/100;if(0===n)return[255*i,255*i,255*i];var a,r=[0,0,0],o=e%1*6,s=o%1,l=1-s;switch(Math.floor(o)){case 0:r[0]=1,r[1]=s,r[2]=0;break;case 1:r[0]=l,r[1]=1,r[2]=0;break;case 2:r[0]=0,r[1]=1,r[2]=s;break;case 3:r[0]=0,r[1]=l,r[2]=1;break;case 4:r[0]=s,r[1]=0,r[2]=1;break;default:r[0]=1,r[1]=0,r[2]=l}return a=(1-n)*i,[255*(n*r[0]+a),255*(n*r[1]+a),255*(n*r[2]+a)]},a.hcg.hsv=function(t){var e=t[1]/100,n=e+t[2]/100*(1-e),i=0;return n>0&&(i=e/n),[t[0],100*i,100*n]},a.hcg.hsl=function(t){var e=t[1]/100,n=t[2]/100*(1-e)+.5*e,i=0;return n>0&&n<.5?i=e/(2*n):n>=.5&&n<1&&(i=e/(2*(1-n))),[t[0],100*i,100*n]},a.hcg.hwb=function(t){var e=t[1]/100,n=e+t[2]/100*(1-e);return[t[0],100*(n-e),100*(1-n)]},a.hwb.hcg=function(t){var e=t[1]/100,n=1-t[2]/100,i=n-e,a=0;return i<1&&(a=(n-i)/(1-i)),[t[0],100*i,100*a]},a.apple.rgb=function(t){return[t[0]/65535*255,t[1]/65535*255,t[2]/65535*255]},a.rgb.apple=function(t){return[t[0]/255*65535,t[1]/255*65535,t[2]/255*65535]},a.gray.rgb=function(t){return[t[0]/100*255,t[0]/100*255,t[0]/100*255]},a.gray.hsl=a.gray.hsv=function(t){return[0,0,t[0]]},a.gray.hwb=function(t){return[0,100,t[0]]},a.gray.cmyk=function(t){return[0,0,0,t[0]]},a.gray.lab=function(t){return[t[0],0,0]},a.gray.hex=function(t){var e=255&Math.round(t[0]/100*255),n=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(n.length)+n},a.rgb.gray=function(t){return[(t[0]+t[1]+t[2])/3/255*100]}}));n.rgb,n.hsl,n.hsv,n.hwb,n.cmyk,n.xyz,n.lab,n.lch,n.hex,n.keyword,n.ansi16,n.ansi256,n.hcg,n.apple,n.gray;function i(t){var e=function(){for(var t={},e=Object.keys(n),i=e.length,a=0;a<i;a++)t[e[a]]={distance:-1,parent:null};return t}(),i=[t];for(e[t].distance=0;i.length;)for(var a=i.pop(),r=Object.keys(n[a]),o=r.length,s=0;s<o;s++){var l=r[s],u=e[l];-1===u.distance&&(u.distance=e[a].distance+1,u.parent=a,i.unshift(l))}return e}function a(t,e){return function(n){return e(t(n))}}function r(t,e){for(var i=[e[t].parent,t],r=n[e[t].parent][t],o=e[t].parent;e[o].parent;)i.unshift(e[o].parent),r=a(n[e[o].parent][o],r),o=e[o].parent;return r.conversion=i,r}var o={};Object.keys(n).forEach((function(t){o[t]={},Object.defineProperty(o[t],"channels",{value:n[t].channels}),Object.defineProperty(o[t],"labels",{value:n[t].labels});var e=function(t){for(var e=i(t),n={},a=Object.keys(e),o=a.length,s=0;s<o;s++){var l=a[s];null!==e[l].parent&&(n[l]=r(l,e))}return n}(t);Object.keys(e).forEach((function(n){var i=e[n];o[t][n]=function(t){var e=function(e){if(null==e)return e;arguments.length>1&&(e=Array.prototype.slice.call(arguments));var n=t(e);if("object"==typeof n)for(var i=n.length,a=0;a<i;a++)n[a]=Math.round(n[a]);return n};return"conversion"in t&&(e.conversion=t.conversion),e}(i),o[t][n].raw=function(t){var e=function(e){return null==e?e:(arguments.length>1&&(e=Array.prototype.slice.call(arguments)),t(e))};return"conversion"in t&&(e.conversion=t.conversion),e}(i)}))}));var s=o,l={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},u={getRgba:d,getHsla:h,getRgb:function(t){var e=d(t);return e&&e.slice(0,3)},getHsl:function(t){var e=h(t);return e&&e.slice(0,3)},getHwb:c,getAlpha:function(t){var e=d(t);if(e)return e[3];if(e=h(t))return e[3];if(e=c(t))return e[3]},hexString:function(t,e){e=void 0!==e&&3===t.length?e:t[3];return"#"+v(t[0])+v(t[1])+v(t[2])+(e>=0&&e<1?v(Math.round(255*e)):"")},rgbString:function(t,e){if(e<1||t[3]&&t[3]<1)return f(t,e);return"rgb("+t[0]+", "+t[1]+", "+t[2]+")"},rgbaString:f,percentString:function(t,e){if(e<1||t[3]&&t[3]<1)return g(t,e);var n=Math.round(t[0]/255*100),i=Math.round(t[1]/255*100),a=Math.round(t[2]/255*100);return"rgb("+n+"%, "+i+"%, "+a+"%)"},percentaString:g,hslString:function(t,e){if(e<1||t[3]&&t[3]<1)return p(t,e);return"hsl("+t[0]+", "+t[1]+"%, "+t[2]+"%)"},hslaString:p,hwbString:function(t,e){void 0===e&&(e=void 0!==t[3]?t[3]:1);return"hwb("+t[0]+", "+t[1]+"%, "+t[2]+"%"+(void 0!==e&&1!==e?", "+e:"")+")"},keyword:function(t){return b[t.slice(0,3)]}};function d(t){if(t){var e=[0,0,0],n=1,i=t.match(/^#([a-fA-F0-9]{3,4})$/i),a="";if(i){a=(i=i[1])[3];for(var r=0;r<e.length;r++)e[r]=parseInt(i[r]+i[r],16);a&&(n=Math.round(parseInt(a+a,16)/255*100)/100)}else if(i=t.match(/^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i)){a=i[2],i=i[1];for(r=0;r<e.length;r++)e[r]=parseInt(i.slice(2*r,2*r+2),16);a&&(n=Math.round(parseInt(a,16)/255*100)/100)}else if(i=t.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(r=0;r<e.length;r++)e[r]=parseInt(i[r+1]);n=parseFloat(i[4])}else if(i=t.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(r=0;r<e.length;r++)e[r]=Math.round(2.55*parseFloat(i[r+1]));n=parseFloat(i[4])}else if(i=t.match(/(\w+)/)){if("transparent"==i[1])return[0,0,0,0];if(!(e=l[i[1]]))return}for(r=0;r<e.length;r++)e[r]=m(e[r],0,255);return n=n||0==n?m(n,0,1):1,e[3]=n,e}}function h(t){if(t){var e=t.match(/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var n=parseFloat(e[4]);return[m(parseInt(e[1]),0,360),m(parseFloat(e[2]),0,100),m(parseFloat(e[3]),0,100),m(isNaN(n)?1:n,0,1)]}}}function c(t){if(t){var e=t.match(/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var n=parseFloat(e[4]);return[m(parseInt(e[1]),0,360),m(parseFloat(e[2]),0,100),m(parseFloat(e[3]),0,100),m(isNaN(n)?1:n,0,1)]}}}function f(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"rgba("+t[0]+", "+t[1]+", "+t[2]+", "+e+")"}function g(t,e){return"rgba("+Math.round(t[0]/255*100)+"%, "+Math.round(t[1]/255*100)+"%, "+Math.round(t[2]/255*100)+"%, "+(e||t[3]||1)+")"}function p(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hsla("+t[0]+", "+t[1]+"%, "+t[2]+"%, "+e+")"}function m(t,e,n){return Math.min(Math.max(e,t),n)}function v(t){var e=t.toString(16).toUpperCase();return e.length<2?"0"+e:e}var b={};for(var x in l)b[l[x]]=x;var y=function(t){return t instanceof y?t:this instanceof y?(this.valid=!1,this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1},void("string"==typeof t?(e=u.getRgba(t))?this.setValues("rgb",e):(e=u.getHsla(t))?this.setValues("hsl",e):(e=u.getHwb(t))&&this.setValues("hwb",e):"object"==typeof t&&(void 0!==(e=t).r||void 0!==e.red?this.setValues("rgb",e):void 0!==e.l||void 0!==e.lightness?this.setValues("hsl",e):void 0!==e.v||void 0!==e.value?this.setValues("hsv",e):void 0!==e.w||void 0!==e.whiteness?this.setValues("hwb",e):void 0===e.c&&void 0===e.cyan||this.setValues("cmyk",e)))):new y(t);var e};y.prototype={isValid:function(){return this.valid},rgb:function(){return this.setSpace("rgb",arguments)},hsl:function(){return this.setSpace("hsl",arguments)},hsv:function(){return this.setSpace("hsv",arguments)},hwb:function(){return this.setSpace("hwb",arguments)},cmyk:function(){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){var t=this.values;return 1!==t.alpha?t.hwb.concat([t.alpha]):t.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var t=this.values;return t.rgb.concat([t.alpha])},hslaArray:function(){var t=this.values;return t.hsl.concat([t.alpha])},alpha:function(t){return void 0===t?this.values.alpha:(this.setValues("alpha",t),this)},red:function(t){return this.setChannel("rgb",0,t)},green:function(t){return this.setChannel("rgb",1,t)},blue:function(t){return this.setChannel("rgb",2,t)},hue:function(t){return t&&(t=(t%=360)<0?360+t:t),this.setChannel("hsl",0,t)},saturation:function(t){return this.setChannel("hsl",1,t)},lightness:function(t){return this.setChannel("hsl",2,t)},saturationv:function(t){return this.setChannel("hsv",1,t)},whiteness:function(t){return this.setChannel("hwb",1,t)},blackness:function(t){return this.setChannel("hwb",2,t)},value:function(t){return this.setChannel("hsv",2,t)},cyan:function(t){return this.setChannel("cmyk",0,t)},magenta:function(t){return this.setChannel("cmyk",1,t)},yellow:function(t){return this.setChannel("cmyk",2,t)},black:function(t){return this.setChannel("cmyk",3,t)},hexString:function(){return u.hexString(this.values.rgb)},rgbString:function(){return u.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return u.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return u.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return u.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return u.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return u.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return u.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var t=this.values.rgb;return t[0]<<16|t[1]<<8|t[2]},luminosity:function(){for(var t=this.values.rgb,e=[],n=0;n<t.length;n++){var i=t[n]/255;e[n]=i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4)}return.2126*e[0]+.7152*e[1]+.0722*e[2]},contrast:function(t){var e=this.luminosity(),n=t.luminosity();return e>n?(e+.05)/(n+.05):(n+.05)/(e+.05)},level:function(t){var e=this.contrast(t);return e>=7.1?"AAA":e>=4.5?"AA":""},dark:function(){var t=this.values.rgb;return(299*t[0]+587*t[1]+114*t[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var t=[],e=0;e<3;e++)t[e]=255-this.values.rgb[e];return this.setValues("rgb",t),this},lighten:function(t){var e=this.values.hsl;return e[2]+=e[2]*t,this.setValues("hsl",e),this},darken:function(t){var e=this.values.hsl;return e[2]-=e[2]*t,this.setValues("hsl",e),this},saturate:function(t){var e=this.values.hsl;return e[1]+=e[1]*t,this.setValues("hsl",e),this},desaturate:function(t){var e=this.values.hsl;return e[1]-=e[1]*t,this.setValues("hsl",e),this},whiten:function(t){var e=this.values.hwb;return e[1]+=e[1]*t,this.setValues("hwb",e),this},blacken:function(t){var e=this.values.hwb;return e[2]+=e[2]*t,this.setValues("hwb",e),this},greyscale:function(){var t=this.values.rgb,e=.3*t[0]+.59*t[1]+.11*t[2];return this.setValues("rgb",[e,e,e]),this},clearer:function(t){var e=this.values.alpha;return this.setValues("alpha",e-e*t),this},opaquer:function(t){var e=this.values.alpha;return this.setValues("alpha",e+e*t),this},rotate:function(t){var e=this.values.hsl,n=(e[0]+t)%360;return e[0]=n<0?360+n:n,this.setValues("hsl",e),this},mix:function(t,e){var n=t,i=void 0===e?.5:e,a=2*i-1,r=this.alpha()-n.alpha(),o=((a*r==-1?a:(a+r)/(1+a*r))+1)/2,s=1-o;return this.rgb(o*this.red()+s*n.red(),o*this.green()+s*n.green(),o*this.blue()+s*n.blue()).alpha(this.alpha()*i+n.alpha()*(1-i))},toJSON:function(){return this.rgb()},clone:function(){var t,e,n=new y,i=this.values,a=n.values;for(var r in i)i.hasOwnProperty(r)&&(t=i[r],"[object Array]"===(e={}.toString.call(t))?a[r]=t.slice(0):"[object Number]"===e?a[r]=t:console.error("unexpected color value:",t));return n}},y.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},y.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},y.prototype.getValues=function(t){for(var e=this.values,n={},i=0;i<t.length;i++)n[t.charAt(i)]=e[t][i];return 1!==e.alpha&&(n.a=e.alpha),n},y.prototype.setValues=function(t,e){var n,i,a=this.values,r=this.spaces,o=this.maxes,l=1;if(this.valid=!0,"alpha"===t)l=e;else if(e.length)a[t]=e.slice(0,t.length),l=e[t.length];else if(void 0!==e[t.charAt(0)]){for(n=0;n<t.length;n++)a[t][n]=e[t.charAt(n)];l=e.a}else if(void 0!==e[r[t][0]]){var u=r[t];for(n=0;n<t.length;n++)a[t][n]=e[u[n]];l=e.alpha}if(a.alpha=Math.max(0,Math.min(1,void 0===l?a.alpha:l)),"alpha"===t)return!1;for(n=0;n<t.length;n++)i=Math.max(0,Math.min(o[t][n],a[t][n])),a[t][n]=Math.round(i);for(var d in r)d!==t&&(a[d]=s[t][d](a[t]));return!0},y.prototype.setSpace=function(t,e){var n=e[0];return void 0===n?this.getValues(t):("number"==typeof n&&(n=Array.prototype.slice.call(e)),this.setValues(t,n),this)},y.prototype.setChannel=function(t,e,n){var i=this.values[t];return void 0===n?i[e]:n===i[e]?this:(i[e]=n,this.setValues(t,i),this)},"undefined"!=typeof window&&(window.Color=y);var _=y;function k(t){return-1===["__proto__","prototype","constructor"].indexOf(t)}var w,M={noop:function(){},uid:(w=0,function(){return w++}),isNullOrUndef:function(t){return null==t},isArray:function(t){if(Array.isArray&&Array.isArray(t))return!0;var e=Object.prototype.toString.call(t);return"[object"===e.substr(0,7)&&"Array]"===e.substr(-6)},isObject:function(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)},isFinite:function(t){return("number"==typeof t||t instanceof Number)&&isFinite(t)},valueOrDefault:function(t,e){return void 0===t?e:t},valueAtIndexOrDefault:function(t,e,n){return M.valueOrDefault(M.isArray(t)?t[e]:t,n)},callback:function(t,e,n){if(t&&"function"==typeof t.call)return t.apply(n,e)},each:function(t,e,n,i){var a,r,o;if(M.isArray(t))if(r=t.length,i)for(a=r-1;a>=0;a--)e.call(n,t[a],a);else for(a=0;a<r;a++)e.call(n,t[a],a);else if(M.isObject(t))for(r=(o=Object.keys(t)).length,a=0;a<r;a++)e.call(n,t[o[a]],o[a])},arrayEquals:function(t,e){var n,i,a,r;if(!t||!e||t.length!==e.length)return!1;for(n=0,i=t.length;n<i;++n)if(a=t[n],r=e[n],a instanceof Array&&r instanceof Array){if(!M.arrayEquals(a,r))return!1}else if(a!==r)return!1;return!0},clone:function(t){if(M.isArray(t))return t.map(M.clone);if(M.isObject(t)){for(var e=Object.create(t),n=Object.keys(t),i=n.length,a=0;a<i;++a)e[n[a]]=M.clone(t[n[a]]);return e}return t},_merger:function(t,e,n,i){if(k(t)){var a=e[t],r=n[t];M.isObject(a)&&M.isObject(r)?M.merge(a,r,i):e[t]=M.clone(r)}},_mergerIf:function(t,e,n){if(k(t)){var i=e[t],a=n[t];M.isObject(i)&&M.isObject(a)?M.mergeIf(i,a):e.hasOwnProperty(t)||(e[t]=M.clone(a))}},merge:function(t,e,n){var i,a,r,o,s,l=M.isArray(e)?e:[e],u=l.length;if(!M.isObject(t))return t;for(i=(n=n||{}).merger||M._merger,a=0;a<u;++a)if(e=l[a],M.isObject(e))for(s=0,o=(r=Object.keys(e)).length;s<o;++s)i(r[s],t,e,n);return t},mergeIf:function(t,e){return M.merge(t,e,{merger:M._mergerIf})},extend:Object.assign||function(t){return M.merge(t,[].slice.call(arguments,1),{merger:function(t,e,n){e[t]=n[t]}})},inherits:function(t){var e=this,n=t&&t.hasOwnProperty("constructor")?t.constructor:function(){return e.apply(this,arguments)},i=function(){this.constructor=n};return i.prototype=e.prototype,n.prototype=new i,n.extend=M.inherits,t&&M.extend(n.prototype,t),n.__super__=e.prototype,n},_deprecated:function(t,e,n,i){void 0!==e&&console.warn(t+': "'+n+'" is deprecated. Please use "'+i+'" instead')}},S=M;M.callCallback=M.callback,M.indexOf=function(t,e,n){return Array.prototype.indexOf.call(t,e,n)},M.getValueOrDefault=M.valueOrDefault,M.getValueAtIndexOrDefault=M.valueAtIndexOrDefault;var C={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return-t*(t-2)},easeInOutQuad:function(t){return(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1)},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return(t-=1)*t*t+1},easeInOutCubic:function(t){return(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return-((t-=1)*t*t*t-1)},easeInOutQuart:function(t){return(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return(t-=1)*t*t*t*t+1},easeInOutQuint:function(t){return(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},easeInSine:function(t){return 1-Math.cos(t*(Math.PI/2))},easeOutSine:function(t){return Math.sin(t*(Math.PI/2))},easeInOutSine:function(t){return-.5*(Math.cos(Math.PI*t)-1)},easeInExpo:function(t){return 0===t?0:Math.pow(2,10*(t-1))},easeOutExpo:function(t){return 1===t?1:1-Math.pow(2,-10*t)},easeInOutExpo:function(t){return 0===t?0:1===t?1:(t/=.5)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*--t))},easeInCirc:function(t){return t>=1?t:-(Math.sqrt(1-t*t)-1)},easeOutCirc:function(t){return Math.sqrt(1-(t-=1)*t)},easeInOutCirc:function(t){return(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},easeInElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===t?1:(n||(n=.3),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),-i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n))},easeOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===t?1:(n||(n=.3),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),i*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/n)+1)},easeInOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:2==(t/=.5)?1:(n||(n=.45),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),t<1?i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*-.5:i*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*.5+1)},easeInBack:function(t){var e=1.70158;return t*t*((e+1)*t-e)},easeOutBack:function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack:function(t){var e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:function(t){return 1-C.easeOutBounce(1-t)},easeOutBounce:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},easeInOutBounce:function(t){return t<.5?.5*C.easeInBounce(2*t):.5*C.easeOutBounce(2*t-1)+.5}},P={effects:C};S.easingEffects=C;var A=Math.PI,D=A/180,T=2*A,I=A/2,F=A/4,O=2*A/3,L={clear:function(t){t.ctx.clearRect(0,0,t.width,t.height)},roundedRect:function(t,e,n,i,a,r){if(r){var o=Math.min(r,a/2,i/2),s=e+o,l=n+o,u=e+i-o,d=n+a-o;t.moveTo(e,l),s<u&&l<d?(t.arc(s,l,o,-A,-I),t.arc(u,l,o,-I,0),t.arc(u,d,o,0,I),t.arc(s,d,o,I,A)):s<u?(t.moveTo(s,n),t.arc(u,l,o,-I,I),t.arc(s,l,o,I,A+I)):l<d?(t.arc(s,l,o,-A,0),t.arc(s,d,o,0,A)):t.arc(s,l,o,-A,A),t.closePath(),t.moveTo(e,n)}else t.rect(e,n,i,a)},drawPoint:function(t,e,n,i,a,r){var o,s,l,u,d,h=(r||0)*D;if(e&&"object"==typeof e&&("[object HTMLImageElement]"===(o=e.toString())||"[object HTMLCanvasElement]"===o))return t.save(),t.translate(i,a),t.rotate(h),t.drawImage(e,-e.width/2,-e.height/2,e.width,e.height),void t.restore();if(!(isNaN(n)||n<=0)){switch(t.beginPath(),e){default:t.arc(i,a,n,0,T),t.closePath();break;case"triangle":t.moveTo(i+Math.sin(h)*n,a-Math.cos(h)*n),h+=O,t.lineTo(i+Math.sin(h)*n,a-Math.cos(h)*n),h+=O,t.lineTo(i+Math.sin(h)*n,a-Math.cos(h)*n),t.closePath();break;case"rectRounded":u=n-(d=.516*n),s=Math.cos(h+F)*u,l=Math.sin(h+F)*u,t.arc(i-s,a-l,d,h-A,h-I),t.arc(i+l,a-s,d,h-I,h),t.arc(i+s,a+l,d,h,h+I),t.arc(i-l,a+s,d,h+I,h+A),t.closePath();break;case"rect":if(!r){u=Math.SQRT1_2*n,t.rect(i-u,a-u,2*u,2*u);break}h+=F;case"rectRot":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+l,a-s),t.lineTo(i+s,a+l),t.lineTo(i-l,a+s),t.closePath();break;case"crossRot":h+=F;case"cross":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s);break;case"star":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s),h+=F,s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s);break;case"line":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l);break;case"dash":t.moveTo(i,a),t.lineTo(i+Math.cos(h)*n,a+Math.sin(h)*n)}t.fill(),t.stroke()}},_isPointInArea:function(t,e){return t.x>e.left-1e-6&&t.x<e.right+1e-6&&t.y>e.top-1e-6&&t.y<e.bottom+1e-6},clipArea:function(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()},unclipArea:function(t){t.restore()},lineTo:function(t,e,n,i){var a=n.steppedLine;if(a){if("middle"===a){var r=(e.x+n.x)/2;t.lineTo(r,i?n.y:e.y),t.lineTo(r,i?e.y:n.y)}else"after"===a&&!i||"after"!==a&&i?t.lineTo(e.x,n.y):t.lineTo(n.x,e.y);t.lineTo(n.x,n.y)}else n.tension?t.bezierCurveTo(i?e.controlPointPreviousX:e.controlPointNextX,i?e.controlPointPreviousY:e.controlPointNextY,i?n.controlPointNextX:n.controlPointPreviousX,i?n.controlPointNextY:n.controlPointPreviousY,n.x,n.y):t.lineTo(n.x,n.y)}},R=L;S.clear=L.clear,S.drawRoundedRectangle=function(t){t.beginPath(),L.roundedRect.apply(L,arguments)};var z={_set:function(t,e){return S.merge(this[t]||(this[t]={}),e)}};z._set("global",{defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:"normal",defaultLineHeight:1.2,showLines:!0});var N=z,B=S.valueOrDefault;var E={toLineHeight:function(t,e){var n=(""+t).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);if(!n||"normal"===n[1])return 1.2*e;switch(t=+n[2],n[3]){case"px":return t;case"%":t/=100}return e*t},toPadding:function(t){var e,n,i,a;return S.isObject(t)?(e=+t.top||0,n=+t.right||0,i=+t.bottom||0,a=+t.left||0):e=n=i=a=+t||0,{top:e,right:n,bottom:i,left:a,height:e+i,width:a+n}},_parseFont:function(t){var e=N.global,n=B(t.fontSize,e.defaultFontSize),i={family:B(t.fontFamily,e.defaultFontFamily),lineHeight:S.options.toLineHeight(B(t.lineHeight,e.defaultLineHeight),n),size:n,style:B(t.fontStyle,e.defaultFontStyle),weight:null,string:""};return i.string=function(t){return!t||S.isNullOrUndef(t.size)||S.isNullOrUndef(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}(i),i},resolve:function(t,e,n,i){var a,r,o,s=!0;for(a=0,r=t.length;a<r;++a)if(void 0!==(o=t[a])&&(void 0!==e&&"function"==typeof o&&(o=o(e),s=!1),void 0!==n&&S.isArray(o)&&(o=o[n],s=!1),void 0!==o))return i&&!s&&(i.cacheable=!1),o}},W={_factorize:function(t){var e,n=[],i=Math.sqrt(t);for(e=1;e<i;e++)t%e==0&&(n.push(e),n.push(t/e));return i===(0|i)&&n.push(i),n.sort((function(t,e){return t-e})).pop(),n},log10:Math.log10||function(t){var e=Math.log(t)*Math.LOG10E,n=Math.round(e);return t===Math.pow(10,n)?n:e}},V=W;S.log10=W.log10;var H=S,j=P,q=R,U=E,Y=V,G={getRtlAdapter:function(t,e,n){return t?function(t,e){return{x:function(n){return t+t+e-n},setWidth:function(t){e=t},textAlign:function(t){return"center"===t?t:"right"===t?"left":"right"},xPlus:function(t,e){return t-e},leftForLtr:function(t,e){return t-e}}}(e,n):{x:function(t){return t},setWidth:function(t){},textAlign:function(t){return t},xPlus:function(t,e){return t+e},leftForLtr:function(t,e){return t}}},overrideTextDirection:function(t,e){var n,i;"ltr"!==e&&"rtl"!==e||(i=[(n=t.canvas.style).getPropertyValue("direction"),n.getPropertyPriority("direction")],n.setProperty("direction",e,"important"),t.prevTextDirection=i)},restoreTextDirection:function(t){var e=t.prevTextDirection;void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}};H.easing=j,H.canvas=q,H.options=U,H.math=Y,H.rtl=G;var X=function(t){H.extend(this,t),this.initialize.apply(this,arguments)};H.extend(X.prototype,{_type:void 0,initialize:function(){this.hidden=!1},pivot:function(){var t=this;return t._view||(t._view=H.extend({},t._model)),t._start={},t},transition:function(t){var e=this,n=e._model,i=e._start,a=e._view;return n&&1!==t?(a||(a=e._view={}),i||(i=e._start={}),function(t,e,n,i){var a,r,o,s,l,u,d,h,c,f=Object.keys(n);for(a=0,r=f.length;a<r;++a)if(u=n[o=f[a]],e.hasOwnProperty(o)||(e[o]=u),(s=e[o])!==u&&"_"!==o[0]){if(t.hasOwnProperty(o)||(t[o]=s),(d=typeof u)===typeof(l=t[o]))if("string"===d){if((h=_(l)).valid&&(c=_(u)).valid){e[o]=c.mix(h,i).rgbString();continue}}else if(H.isFinite(l)&&H.isFinite(u)){e[o]=l+(u-l)*i;continue}e[o]=u}}(i,a,n,t),e):(e._view=H.extend({},n),e._start=null,e)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return H.isNumber(this._model.x)&&H.isNumber(this._model.y)}}),X.extend=H.inherits;var K=X,Z=K.extend({chart:null,currentStep:0,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),$=Z;Object.defineProperty(Z.prototype,"animationObject",{get:function(){return this}}),Object.defineProperty(Z.prototype,"chartInstance",{get:function(){return this.chart},set:function(t){this.chart=t}}),N._set("global",{animation:{duration:1e3,easing:"easeOutQuart",onProgress:H.noop,onComplete:H.noop}});var J={animations:[],request:null,addAnimation:function(t,e,n,i){var a,r,o=this.animations;for(e.chart=t,e.startTime=Date.now(),e.duration=n,i||(t.animating=!0),a=0,r=o.length;a<r;++a)if(o[a].chart===t)return void(o[a]=e);o.push(e),1===o.length&&this.requestAnimationFrame()},cancelAnimation:function(t){var e=H.findIndex(this.animations,(function(e){return e.chart===t}));-1!==e&&(this.animations.splice(e,1),t.animating=!1)},requestAnimationFrame:function(){var t=this;null===t.request&&(t.request=H.requestAnimFrame.call(window,(function(){t.request=null,t.startDigest()})))},startDigest:function(){this.advance(),this.animations.length>0&&this.requestAnimationFrame()},advance:function(){for(var t,e,n,i,a=this.animations,r=0;r<a.length;)e=(t=a[r]).chart,n=t.numSteps,i=Math.floor((Date.now()-t.startTime)/t.duration*n)+1,t.currentStep=Math.min(i,n),H.callback(t.render,[e,t],e),H.callback(t.onAnimationProgress,[t],e),t.currentStep>=n?(H.callback(t.onAnimationComplete,[t],e),e.animating=!1,a.splice(r,1)):++r}},Q=H.options.resolve,tt=["push","pop","shift","splice","unshift"];function et(t,e){var n=t._chartjs;if(n){var i=n.listeners,a=i.indexOf(e);-1!==a&&i.splice(a,1),i.length>0||(tt.forEach((function(e){delete t[e]})),delete t._chartjs)}}var nt=function(t,e){this.initialize(t,e)};H.extend(nt.prototype,{datasetElementType:null,dataElementType:null,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth"],_dataElementOptions:["backgroundColor","borderColor","borderWidth","pointStyle"],initialize:function(t,e){var n=this;n.chart=t,n.index=e,n.linkScales(),n.addElements(),n._type=n.getMeta().type},updateIndex:function(t){this.index=t},linkScales:function(){var t=this.getMeta(),e=this.chart,n=e.scales,i=this.getDataset(),a=e.options.scales;null!==t.xAxisID&&t.xAxisID in n&&!i.xAxisID||(t.xAxisID=i.xAxisID||a.xAxes[0].id),null!==t.yAxisID&&t.yAxisID in n&&!i.yAxisID||(t.yAxisID=i.yAxisID||a.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(t){return this.chart.scales[t]},_getValueScaleId:function(){return this.getMeta().yAxisID},_getIndexScaleId:function(){return this.getMeta().xAxisID},_getValueScale:function(){return this.getScaleForId(this._getValueScaleId())},_getIndexScale:function(){return this.getScaleForId(this._getIndexScaleId())},reset:function(){this._update(!0)},destroy:function(){this._data&&et(this._data,this)},createMetaDataset:function(){var t=this.datasetElementType;return t&&new t({_chart:this.chart,_datasetIndex:this.index})},createMetaData:function(t){var e=this.dataElementType;return e&&new e({_chart:this.chart,_datasetIndex:this.index,_index:t})},addElements:function(){var t,e,n=this.getMeta(),i=this.getDataset().data||[],a=n.data;for(t=0,e=i.length;t<e;++t)a[t]=a[t]||this.createMetaData(t);n.dataset=n.dataset||this.createMetaDataset()},addElementAndReset:function(t){var e=this.createMetaData(t);this.getMeta().data.splice(t,0,e),this.updateElement(e,t,!0)},buildOrUpdateElements:function(){var t,e,n=this,i=n.getDataset(),a=i.data||(i.data=[]);n._data!==a&&(n._data&&et(n._data,n),a&&Object.isExtensible(a)&&(e=n,(t=a)._chartjs?t._chartjs.listeners.push(e):(Object.defineProperty(t,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),tt.forEach((function(e){var n="onData"+e.charAt(0).toUpperCase()+e.slice(1),i=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:function(){var e=Array.prototype.slice.call(arguments),a=i.apply(this,e);return H.each(t._chartjs.listeners,(function(t){"function"==typeof t[n]&&t[n].apply(t,e)})),a}})})))),n._data=a),n.resyncElements()},_configure:function(){this._config=H.merge(Object.create(null),[this.chart.options.datasets[this._type],this.getDataset()],{merger:function(t,e,n){"_meta"!==t&&"data"!==t&&H._merger(t,e,n)}})},_update:function(t){this._configure(),this._cachedDataOpts=null,this.update(t)},update:H.noop,transition:function(t){for(var e=this.getMeta(),n=e.data||[],i=n.length,a=0;a<i;++a)n[a].transition(t);e.dataset&&e.dataset.transition(t)},draw:function(){var t=this.getMeta(),e=t.data||[],n=e.length,i=0;for(t.dataset&&t.dataset.draw();i<n;++i)e[i].draw()},getStyle:function(t){var e,n=this.getMeta(),i=n.dataset;return this._configure(),i&&void 0===t?e=this._resolveDatasetElementOptions(i||{}):(t=t||0,e=this._resolveDataElementOptions(n.data[t]||{},t)),!1!==e.fill&&null!==e.fill||(e.backgroundColor=e.borderColor),e},_resolveDatasetElementOptions:function(t,e){var n,i,a,r,o=this,s=o.chart,l=o._config,u=t.custom||{},d=s.options.elements[o.datasetElementType.prototype._type]||{},h=o._datasetElementOptions,c={},f={chart:s,dataset:o.getDataset(),datasetIndex:o.index,hover:e};for(n=0,i=h.length;n<i;++n)a=h[n],r=e?"hover"+a.charAt(0).toUpperCase()+a.slice(1):a,c[a]=Q([u[r],l[r],d[r]],f);return c},_resolveDataElementOptions:function(t,e){var n=this,i=t&&t.custom,a=n._cachedDataOpts;if(a&&!i)return a;var r,o,s,l,u=n.chart,d=n._config,h=u.options.elements[n.dataElementType.prototype._type]||{},c=n._dataElementOptions,f={},g={chart:u,dataIndex:e,dataset:n.getDataset(),datasetIndex:n.index},p={cacheable:!i};if(i=i||{},H.isArray(c))for(o=0,s=c.length;o<s;++o)f[l=c[o]]=Q([i[l],d[l],h[l]],g,e,p);else for(o=0,s=(r=Object.keys(c)).length;o<s;++o)f[l=r[o]]=Q([i[l],d[c[l]],d[l],h[l]],g,e,p);return p.cacheable&&(n._cachedDataOpts=Object.freeze(f)),f},removeHoverStyle:function(t){H.merge(t._model,t.$previousStyle||{}),delete t.$previousStyle},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],n=t._index,i=t.custom||{},a=t._model,r=H.getHoverColor;t.$previousStyle={backgroundColor:a.backgroundColor,borderColor:a.borderColor,borderWidth:a.borderWidth},a.backgroundColor=Q([i.hoverBackgroundColor,e.hoverBackgroundColor,r(a.backgroundColor)],void 0,n),a.borderColor=Q([i.hoverBorderColor,e.hoverBorderColor,r(a.borderColor)],void 0,n),a.borderWidth=Q([i.hoverBorderWidth,e.hoverBorderWidth,a.borderWidth],void 0,n)},_removeDatasetHoverStyle:function(){var t=this.getMeta().dataset;t&&this.removeHoverStyle(t)},_setDatasetHoverStyle:function(){var t,e,n,i,a,r,o=this.getMeta().dataset,s={};if(o){for(r=o._model,a=this._resolveDatasetElementOptions(o,!0),t=0,e=(i=Object.keys(a)).length;t<e;++t)s[n=i[t]]=r[n],r[n]=a[n];o.$previousStyle=s}},resyncElements:function(){var t=this.getMeta(),e=this.getDataset().data,n=t.data.length,i=e.length;i<n?t.data.splice(i,n-i):i>n&&this.insertElements(n,i-n)},insertElements:function(t,e){for(var n=0;n<e;++n)this.addElementAndReset(t+n)},onDataPush:function(){var t=arguments.length;this.insertElements(this.getDataset().data.length-t,t)},onDataPop:function(){this.getMeta().data.pop()},onDataShift:function(){this.getMeta().data.shift()},onDataSplice:function(t,e){this.getMeta().data.splice(t,e),this.insertElements(t,arguments.length-2)},onDataUnshift:function(){this.insertElements(0,arguments.length)}}),nt.extend=H.inherits;var it=nt,at=2*Math.PI;function rt(t,e){var n=e.startAngle,i=e.endAngle,a=e.pixelMargin,r=a/e.outerRadius,o=e.x,s=e.y;t.beginPath(),t.arc(o,s,e.outerRadius,n-r,i+r),e.innerRadius>a?(r=a/e.innerRadius,t.arc(o,s,e.innerRadius-a,i+r,n-r,!0)):t.arc(o,s,a,i+Math.PI/2,n-Math.PI/2),t.closePath(),t.clip()}function ot(t,e,n){var i="inner"===e.borderAlign;i?(t.lineWidth=2*e.borderWidth,t.lineJoin="round"):(t.lineWidth=e.borderWidth,t.lineJoin="bevel"),n.fullCircles&&function(t,e,n,i){var a,r=n.endAngle;for(i&&(n.endAngle=n.startAngle+at,rt(t,n),n.endAngle=r,n.endAngle===n.startAngle&&n.fullCircles&&(n.endAngle+=at,n.fullCircles--)),t.beginPath(),t.arc(n.x,n.y,n.innerRadius,n.startAngle+at,n.startAngle,!0),a=0;a<n.fullCircles;++a)t.stroke();for(t.beginPath(),t.arc(n.x,n.y,e.outerRadius,n.startAngle,n.startAngle+at),a=0;a<n.fullCircles;++a)t.stroke()}(t,e,n,i),i&&rt(t,n),t.beginPath(),t.arc(n.x,n.y,e.outerRadius,n.startAngle,n.endAngle),t.arc(n.x,n.y,n.innerRadius,n.endAngle,n.startAngle,!0),t.closePath(),t.stroke()}N._set("global",{elements:{arc:{backgroundColor:N.global.defaultColor,borderColor:"#fff",borderWidth:2,borderAlign:"center"}}});var st=K.extend({_type:"arc",inLabelRange:function(t){var e=this._view;return!!e&&Math.pow(t-e.x,2)<Math.pow(e.radius+e.hoverRadius,2)},inRange:function(t,e){var n=this._view;if(n){for(var i=H.getAngleFromPoint(n,{x:t,y:e}),a=i.angle,r=i.distance,o=n.startAngle,s=n.endAngle;s<o;)s+=at;for(;a>s;)a-=at;for(;a<o;)a+=at;var l=a>=o&&a<=s,u=r>=n.innerRadius&&r<=n.outerRadius;return l&&u}return!1},getCenterPoint:function(){var t=this._view,e=(t.startAngle+t.endAngle)/2,n=(t.innerRadius+t.outerRadius)/2;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},getArea:function(){var t=this._view;return Math.PI*((t.endAngle-t.startAngle)/(2*Math.PI))*(Math.pow(t.outerRadius,2)-Math.pow(t.innerRadius,2))},tooltipPosition:function(){var t=this._view,e=t.startAngle+(t.endAngle-t.startAngle)/2,n=(t.outerRadius-t.innerRadius)/2+t.innerRadius;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},draw:function(){var t,e=this._chart.ctx,n=this._view,i="inner"===n.borderAlign?.33:0,a={x:n.x,y:n.y,innerRadius:n.innerRadius,outerRadius:Math.max(n.outerRadius-i,0),pixelMargin:i,startAngle:n.startAngle,endAngle:n.endAngle,fullCircles:Math.floor(n.circumference/at)};if(e.save(),e.fillStyle=n.backgroundColor,e.strokeStyle=n.borderColor,a.fullCircles){for(a.endAngle=a.startAngle+at,e.beginPath(),e.arc(a.x,a.y,a.outerRadius,a.startAngle,a.endAngle),e.arc(a.x,a.y,a.innerRadius,a.endAngle,a.startAngle,!0),e.closePath(),t=0;t<a.fullCircles;++t)e.fill();a.endAngle=a.startAngle+n.circumference%at}e.beginPath(),e.arc(a.x,a.y,a.outerRadius,a.startAngle,a.endAngle),e.arc(a.x,a.y,a.innerRadius,a.endAngle,a.startAngle,!0),e.closePath(),e.fill(),n.borderWidth&&ot(e,n,a),e.restore()}}),lt=H.valueOrDefault,ut=N.global.defaultColor;N._set("global",{elements:{line:{tension:.4,backgroundColor:ut,borderWidth:3,borderColor:ut,borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",capBezierPoints:!0,fill:!0}}});var dt=K.extend({_type:"line",draw:function(){var t,e,n,i=this,a=i._view,r=i._chart.ctx,o=a.spanGaps,s=i._children.slice(),l=N.global,u=l.elements.line,d=-1,h=i._loop;if(s.length){if(i._loop){for(t=0;t<s.length;++t)if(e=H.previousItem(s,t),!s[t]._view.skip&&e._view.skip){s=s.slice(t).concat(s.slice(0,t)),h=o;break}h&&s.push(s[0])}for(r.save(),r.lineCap=a.borderCapStyle||u.borderCapStyle,r.setLineDash&&r.setLineDash(a.borderDash||u.borderDash),r.lineDashOffset=lt(a.borderDashOffset,u.borderDashOffset),r.lineJoin=a.borderJoinStyle||u.borderJoinStyle,r.lineWidth=lt(a.borderWidth,u.borderWidth),r.strokeStyle=a.borderColor||l.defaultColor,r.beginPath(),(n=s[0]._view).skip||(r.moveTo(n.x,n.y),d=0),t=1;t<s.length;++t)n=s[t]._view,e=-1===d?H.previousItem(s,t):s[d],n.skip||(d!==t-1&&!o||-1===d?r.moveTo(n.x,n.y):H.canvas.lineTo(r,e._view,n),d=t);h&&r.closePath(),r.stroke(),r.restore()}}}),ht=H.valueOrDefault,ct=N.global.defaultColor;function ft(t){var e=this._view;return!!e&&Math.abs(t-e.x)<e.radius+e.hitRadius}N._set("global",{elements:{point:{radius:3,pointStyle:"circle",backgroundColor:ct,borderColor:ct,borderWidth:1,hitRadius:1,hoverRadius:4,hoverBorderWidth:1}}});var gt=K.extend({_type:"point",inRange:function(t,e){var n=this._view;return!!n&&Math.pow(t-n.x,2)+Math.pow(e-n.y,2)<Math.pow(n.hitRadius+n.radius,2)},inLabelRange:ft,inXRange:ft,inYRange:function(t){var e=this._view;return!!e&&Math.abs(t-e.y)<e.radius+e.hitRadius},getCenterPoint:function(){var t=this._view;return{x:t.x,y:t.y}},getArea:function(){return Math.PI*Math.pow(this._view.radius,2)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y,padding:t.radius+t.borderWidth}},draw:function(t){var e=this._view,n=this._chart.ctx,i=e.pointStyle,a=e.rotation,r=e.radius,o=e.x,s=e.y,l=N.global,u=l.defaultColor;e.skip||(void 0===t||H.canvas._isPointInArea(e,t))&&(n.strokeStyle=e.borderColor||u,n.lineWidth=ht(e.borderWidth,l.elements.point.borderWidth),n.fillStyle=e.backgroundColor||u,H.canvas.drawPoint(n,i,r,o,s,a))}}),pt=N.global.defaultColor;function mt(t){return t&&void 0!==t.width}function vt(t){var e,n,i,a,r;return mt(t)?(r=t.width/2,e=t.x-r,n=t.x+r,i=Math.min(t.y,t.base),a=Math.max(t.y,t.base)):(r=t.height/2,e=Math.min(t.x,t.base),n=Math.max(t.x,t.base),i=t.y-r,a=t.y+r),{left:e,top:i,right:n,bottom:a}}function bt(t,e,n){return t===e?n:t===n?e:t}function xt(t,e,n){var i,a,r,o,s=t.borderWidth,l=function(t){var e=t.borderSkipped,n={};return e?(t.horizontal?t.base>t.x&&(e=bt(e,"left","right")):t.base<t.y&&(e=bt(e,"bottom","top")),n[e]=!0,n):n}(t);return H.isObject(s)?(i=+s.top||0,a=+s.right||0,r=+s.bottom||0,o=+s.left||0):i=a=r=o=+s||0,{t:l.top||i<0?0:i>n?n:i,r:l.right||a<0?0:a>e?e:a,b:l.bottom||r<0?0:r>n?n:r,l:l.left||o<0?0:o>e?e:o}}function yt(t,e,n){var i=null===e,a=null===n,r=!(!t||i&&a)&&vt(t);return r&&(i||e>=r.left&&e<=r.right)&&(a||n>=r.top&&n<=r.bottom)}N._set("global",{elements:{rectangle:{backgroundColor:pt,borderColor:pt,borderSkipped:"bottom",borderWidth:0}}});var _t=K.extend({_type:"rectangle",draw:function(){var t=this._chart.ctx,e=this._view,n=function(t){var e=vt(t),n=e.right-e.left,i=e.bottom-e.top,a=xt(t,n/2,i/2);return{outer:{x:e.left,y:e.top,w:n,h:i},inner:{x:e.left+a.l,y:e.top+a.t,w:n-a.l-a.r,h:i-a.t-a.b}}}(e),i=n.outer,a=n.inner;t.fillStyle=e.backgroundColor,t.fillRect(i.x,i.y,i.w,i.h),i.w===a.w&&i.h===a.h||(t.save(),t.beginPath(),t.rect(i.x,i.y,i.w,i.h),t.clip(),t.fillStyle=e.borderColor,t.rect(a.x,a.y,a.w,a.h),t.fill("evenodd"),t.restore())},height:function(){var t=this._view;return t.base-t.y},inRange:function(t,e){return yt(this._view,t,e)},inLabelRange:function(t,e){var n=this._view;return mt(n)?yt(n,t,null):yt(n,null,e)},inXRange:function(t){return yt(this._view,t,null)},inYRange:function(t){return yt(this._view,null,t)},getCenterPoint:function(){var t,e,n=this._view;return mt(n)?(t=n.x,e=(n.y+n.base)/2):(t=(n.x+n.base)/2,e=n.y),{x:t,y:e}},getArea:function(){var t=this._view;return mt(t)?t.width*Math.abs(t.y-t.base):t.height*Math.abs(t.x-t.base)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y}}}),kt={},wt=st,Mt=dt,St=gt,Ct=_t;kt.Arc=wt,kt.Line=Mt,kt.Point=St,kt.Rectangle=Ct;var Pt=H._deprecated,At=H.valueOrDefault;function Dt(t,e,n){var i,a,r=n.barThickness,o=e.stackCount,s=e.pixels[t],l=H.isNullOrUndef(r)?function(t,e){var n,i,a,r,o=t._length;for(a=1,r=e.length;a<r;++a)o=Math.min(o,Math.abs(e[a]-e[a-1]));for(a=0,r=t.getTicks().length;a<r;++a)i=t.getPixelForTick(a),o=a>0?Math.min(o,Math.abs(i-n)):o,n=i;return o}(e.scale,e.pixels):-1;return H.isNullOrUndef(r)?(i=l*n.categoryPercentage,a=n.barPercentage):(i=r*o,a=1),{chunk:i/o,ratio:a,start:s-i/2}}N._set("bar",{hover:{mode:"label"},scales:{xAxes:[{type:"category",offset:!0,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}}),N._set("global",{datasets:{bar:{categoryPercentage:.8,barPercentage:.9}}});var Tt=it.extend({dataElementType:kt.Rectangle,_dataElementOptions:["backgroundColor","borderColor","borderSkipped","borderWidth","barPercentage","barThickness","categoryPercentage","maxBarThickness","minBarLength"],initialize:function(){var t,e,n=this;it.prototype.initialize.apply(n,arguments),(t=n.getMeta()).stack=n.getDataset().stack,t.bar=!0,e=n._getIndexScale().options,Pt("bar chart",e.barPercentage,"scales.[x/y]Axes.barPercentage","dataset.barPercentage"),Pt("bar chart",e.barThickness,"scales.[x/y]Axes.barThickness","dataset.barThickness"),Pt("bar chart",e.categoryPercentage,"scales.[x/y]Axes.categoryPercentage","dataset.categoryPercentage"),Pt("bar chart",n._getValueScale().options.minBarLength,"scales.[x/y]Axes.minBarLength","dataset.minBarLength"),Pt("bar chart",e.maxBarThickness,"scales.[x/y]Axes.maxBarThickness","dataset.maxBarThickness")},update:function(t){var e,n,i=this.getMeta().data;for(this._ruler=this.getRuler(),e=0,n=i.length;e<n;++e)this.updateElement(i[e],e,t)},updateElement:function(t,e,n){var i=this,a=i.getMeta(),r=i.getDataset(),o=i._resolveDataElementOptions(t,e);t._xScale=i.getScaleForId(a.xAxisID),t._yScale=i.getScaleForId(a.yAxisID),t._datasetIndex=i.index,t._index=e,t._model={backgroundColor:o.backgroundColor,borderColor:o.borderColor,borderSkipped:o.borderSkipped,borderWidth:o.borderWidth,datasetLabel:r.label,label:i.chart.data.labels[e]},H.isArray(r.data[e])&&(t._model.borderSkipped=null),i._updateElementGeometry(t,e,n,o),t.pivot()},_updateElementGeometry:function(t,e,n,i){var a=this,r=t._model,o=a._getValueScale(),s=o.getBasePixel(),l=o.isHorizontal(),u=a._ruler||a.getRuler(),d=a.calculateBarValuePixels(a.index,e,i),h=a.calculateBarIndexPixels(a.index,e,u,i);r.horizontal=l,r.base=n?s:d.base,r.x=l?n?s:d.head:h.center,r.y=l?h.center:n?s:d.head,r.height=l?h.size:void 0,r.width=l?void 0:h.size},_getStacks:function(t){var e,n,i=this._getIndexScale(),a=i._getMatchingVisibleMetas(this._type),r=i.options.stacked,o=a.length,s=[];for(e=0;e<o&&(n=a[e],(!1===r||-1===s.indexOf(n.stack)||void 0===r&&void 0===n.stack)&&s.push(n.stack),n.index!==t);++e);return s},getStackCount:function(){return this._getStacks().length},getStackIndex:function(t,e){var n=this._getStacks(t),i=void 0!==e?n.indexOf(e):-1;return-1===i?n.length-1:i},getRuler:function(){var t,e,n=this._getIndexScale(),i=[];for(t=0,e=this.getMeta().data.length;t<e;++t)i.push(n.getPixelForValue(null,t,this.index));return{pixels:i,start:n._startPixel,end:n._endPixel,stackCount:this.getStackCount(),scale:n}},calculateBarValuePixels:function(t,e,n){var i,a,r,o,s,l,u,d=this.chart,h=this._getValueScale(),c=h.isHorizontal(),f=d.data.datasets,g=h._getMatchingVisibleMetas(this._type),p=h._parseValue(f[t].data[e]),m=n.minBarLength,v=h.options.stacked,b=this.getMeta().stack,x=void 0===p.start?0:p.max>=0&&p.min>=0?p.min:p.max,y=void 0===p.start?p.end:p.max>=0&&p.min>=0?p.max-p.min:p.min-p.max,_=g.length;if(v||void 0===v&&void 0!==b)for(i=0;i<_&&(a=g[i]).index!==t;++i)a.stack===b&&(r=void 0===(u=h._parseValue(f[a.index].data[e])).start?u.end:u.min>=0&&u.max>=0?u.max:u.min,(p.min<0&&r<0||p.max>=0&&r>0)&&(x+=r));return o=h.getPixelForValue(x),l=(s=h.getPixelForValue(x+y))-o,void 0!==m&&Math.abs(l)<m&&(l=m,s=y>=0&&!c||y<0&&c?o-m:o+m),{size:l,base:o,head:s,center:s+l/2}},calculateBarIndexPixels:function(t,e,n,i){var a="flex"===i.barThickness?function(t,e,n){var i,a=e.pixels,r=a[t],o=t>0?a[t-1]:null,s=t<a.length-1?a[t+1]:null,l=n.categoryPercentage;return null===o&&(o=r-(null===s?e.end-e.start:s-r)),null===s&&(s=r+r-o),i=r-(r-Math.min(o,s))/2*l,{chunk:Math.abs(s-o)/2*l/e.stackCount,ratio:n.barPercentage,start:i}}(e,n,i):Dt(e,n,i),r=this.getStackIndex(t,this.getMeta().stack),o=a.start+a.chunk*r+a.chunk/2,s=Math.min(At(i.maxBarThickness,1/0),a.chunk*a.ratio);return{base:o-s/2,head:o+s/2,center:o,size:s}},draw:function(){var t=this.chart,e=this._getValueScale(),n=this.getMeta().data,i=this.getDataset(),a=n.length,r=0;for(H.canvas.clipArea(t.ctx,t.chartArea);r<a;++r){var o=e._parseValue(i.data[r]);isNaN(o.min)||isNaN(o.max)||n[r].draw()}H.canvas.unclipArea(t.ctx)},_resolveDataElementOptions:function(){var t=this,e=H.extend({},it.prototype._resolveDataElementOptions.apply(t,arguments)),n=t._getIndexScale().options,i=t._getValueScale().options;return e.barPercentage=At(n.barPercentage,e.barPercentage),e.barThickness=At(n.barThickness,e.barThickness),e.categoryPercentage=At(n.categoryPercentage,e.categoryPercentage),e.maxBarThickness=At(n.maxBarThickness,e.maxBarThickness),e.minBarLength=At(i.minBarLength,e.minBarLength),e}}),It=H.valueOrDefault,Ft=H.options.resolve;N._set("bubble",{hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-0"}],yAxes:[{type:"linear",position:"left",id:"y-axis-0"}]},tooltips:{callbacks:{title:function(){return""},label:function(t,e){var n=e.datasets[t.datasetIndex].label||"",i=e.datasets[t.datasetIndex].data[t.index];return n+": ("+t.xLabel+", "+t.yLabel+", "+i.r+")"}}}});var Ot=it.extend({dataElementType:kt.Point,_dataElementOptions:["backgroundColor","borderColor","borderWidth","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","hoverRadius","hitRadius","pointStyle","rotation"],update:function(t){var e=this,n=e.getMeta().data;H.each(n,(function(n,i){e.updateElement(n,i,t)}))},updateElement:function(t,e,n){var i=this,a=i.getMeta(),r=t.custom||{},o=i.getScaleForId(a.xAxisID),s=i.getScaleForId(a.yAxisID),l=i._resolveDataElementOptions(t,e),u=i.getDataset().data[e],d=i.index,h=n?o.getPixelForDecimal(.5):o.getPixelForValue("object"==typeof u?u:NaN,e,d),c=n?s.getBasePixel():s.getPixelForValue(u,e,d);t._xScale=o,t._yScale=s,t._options=l,t._datasetIndex=d,t._index=e,t._model={backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,hitRadius:l.hitRadius,pointStyle:l.pointStyle,rotation:l.rotation,radius:n?0:l.radius,skip:r.skip||isNaN(h)||isNaN(c),x:h,y:c},t.pivot()},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=It(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=It(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=It(n.hoverBorderWidth,n.borderWidth),e.radius=n.radius+n.hoverRadius},_resolveDataElementOptions:function(t,e){var n=this,i=n.chart,a=n.getDataset(),r=t.custom||{},o=a.data[e]||{},s=it.prototype._resolveDataElementOptions.apply(n,arguments),l={chart:i,dataIndex:e,dataset:a,datasetIndex:n.index};return n._cachedDataOpts===s&&(s=H.extend({},s)),s.radius=Ft([r.radius,o.r,n._config.radius,i.options.elements.point.radius],l,e),s}}),Lt=H.valueOrDefault,Rt=Math.PI,zt=2*Rt,Nt=Rt/2;N._set("doughnut",{animation:{animateRotate:!0,animateScale:!1},hover:{mode:"single"},legendCallback:function(t){var e,n,i,a=document.createElement("ul"),r=t.data,o=r.datasets,s=r.labels;if(a.setAttribute("class",t.id+"-legend"),o.length)for(e=0,n=o[0].data.length;e<n;++e)(i=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=o[0].backgroundColor[e],s[e]&&i.appendChild(document.createTextNode(s[e]));return a.outerHTML},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map((function(n,i){var a=t.getDatasetMeta(0),r=a.controller.getStyle(i);return{text:n,fillStyle:r.backgroundColor,strokeStyle:r.borderColor,lineWidth:r.borderWidth,hidden:isNaN(e.datasets[0].data[i])||a.data[i].hidden,index:i}})):[]}},onClick:function(t,e){var n,i,a,r=e.index,o=this.chart;for(n=0,i=(o.data.datasets||[]).length;n<i;++n)(a=o.getDatasetMeta(n)).data[r]&&(a.data[r].hidden=!a.data[r].hidden);o.update()}},cutoutPercentage:50,rotation:-Nt,circumference:zt,tooltips:{callbacks:{title:function(){return""},label:function(t,e){var n=e.labels[t.index],i=": "+e.datasets[t.datasetIndex].data[t.index];return H.isArray(n)?(n=n.slice())[0]+=i:n+=i,n}}}});var Bt=it.extend({dataElementType:kt.Arc,linkScales:H.noop,_dataElementOptions:["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"],getRingIndex:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&++e;return e},update:function(t){var e,n,i,a,r=this,o=r.chart,s=o.chartArea,l=o.options,u=1,d=1,h=0,c=0,f=r.getMeta(),g=f.data,p=l.cutoutPercentage/100||0,m=l.circumference,v=r._getRingWeight(r.index);if(m<zt){var b=l.rotation%zt,x=(b+=b>=Rt?-zt:b<-Rt?zt:0)+m,y=Math.cos(b),_=Math.sin(b),k=Math.cos(x),w=Math.sin(x),M=b<=0&&x>=0||x>=zt,S=b<=Nt&&x>=Nt||x>=zt+Nt,C=b<=-Nt&&x>=-Nt||x>=Rt+Nt,P=b===-Rt||x>=Rt?-1:Math.min(y,y*p,k,k*p),A=C?-1:Math.min(_,_*p,w,w*p),D=M?1:Math.max(y,y*p,k,k*p),T=S?1:Math.max(_,_*p,w,w*p);u=(D-P)/2,d=(T-A)/2,h=-(D+P)/2,c=-(T+A)/2}for(i=0,a=g.length;i<a;++i)g[i]._options=r._resolveDataElementOptions(g[i],i);for(o.borderWidth=r.getMaxBorderWidth(),e=(s.right-s.left-o.borderWidth)/u,n=(s.bottom-s.top-o.borderWidth)/d,o.outerRadius=Math.max(Math.min(e,n)/2,0),o.innerRadius=Math.max(o.outerRadius*p,0),o.radiusLength=(o.outerRadius-o.innerRadius)/(r._getVisibleDatasetWeightTotal()||1),o.offsetX=h*o.outerRadius,o.offsetY=c*o.outerRadius,f.total=r.calculateTotal(),r.outerRadius=o.outerRadius-o.radiusLength*r._getRingWeightOffset(r.index),r.innerRadius=Math.max(r.outerRadius-o.radiusLength*v,0),i=0,a=g.length;i<a;++i)r.updateElement(g[i],i,t)},updateElement:function(t,e,n){var i=this,a=i.chart,r=a.chartArea,o=a.options,s=o.animation,l=(r.left+r.right)/2,u=(r.top+r.bottom)/2,d=o.rotation,h=o.rotation,c=i.getDataset(),f=n&&s.animateRotate?0:t.hidden?0:i.calculateCircumference(c.data[e])*(o.circumference/zt),g=n&&s.animateScale?0:i.innerRadius,p=n&&s.animateScale?0:i.outerRadius,m=t._options||{};H.extend(t,{_datasetIndex:i.index,_index:e,_model:{backgroundColor:m.backgroundColor,borderColor:m.borderColor,borderWidth:m.borderWidth,borderAlign:m.borderAlign,x:l+a.offsetX,y:u+a.offsetY,startAngle:d,endAngle:h,circumference:f,outerRadius:p,innerRadius:g,label:H.valueAtIndexOrDefault(c.label,e,a.data.labels[e])}});var v=t._model;n&&s.animateRotate||(v.startAngle=0===e?o.rotation:i.getMeta().data[e-1]._model.endAngle,v.endAngle=v.startAngle+v.circumference),t.pivot()},calculateTotal:function(){var t,e=this.getDataset(),n=this.getMeta(),i=0;return H.each(n.data,(function(n,a){t=e.data[a],isNaN(t)||n.hidden||(i+=Math.abs(t))})),i},calculateCircumference:function(t){var e=this.getMeta().total;return e>0&&!isNaN(t)?zt*(Math.abs(t)/e):0},getMaxBorderWidth:function(t){var e,n,i,a,r,o,s,l,u=0,d=this.chart;if(!t)for(e=0,n=d.data.datasets.length;e<n;++e)if(d.isDatasetVisible(e)){t=(i=d.getDatasetMeta(e)).data,e!==this.index&&(r=i.controller);break}if(!t)return 0;for(e=0,n=t.length;e<n;++e)a=t[e],r?(r._configure(),o=r._resolveDataElementOptions(a,e)):o=a._options,"inner"!==o.borderAlign&&(s=o.borderWidth,u=(l=o.hoverBorderWidth)>(u=s>u?s:u)?l:u);return u},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=Lt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Lt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Lt(n.hoverBorderWidth,n.borderWidth)},_getRingWeightOffset:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&(e+=this._getRingWeight(n));return e},_getRingWeight:function(t){return Math.max(Lt(this.chart.data.datasets[t].weight,1),0)},_getVisibleDatasetWeightTotal:function(){return this._getRingWeightOffset(this.chart.data.datasets.length)}});N._set("horizontalBar",{hover:{mode:"index",axis:"y"},scales:{xAxes:[{type:"linear",position:"bottom"}],yAxes:[{type:"category",position:"left",offset:!0,gridLines:{offsetGridLines:!0}}]},elements:{rectangle:{borderSkipped:"left"}},tooltips:{mode:"index",axis:"y"}}),N._set("global",{datasets:{horizontalBar:{categoryPercentage:.8,barPercentage:.9}}});var Et=Tt.extend({_getValueScaleId:function(){return this.getMeta().xAxisID},_getIndexScaleId:function(){return this.getMeta().yAxisID}}),Wt=H.valueOrDefault,Vt=H.options.resolve,Ht=H.canvas._isPointInArea;function jt(t,e){var n=t&&t.options.ticks||{},i=n.reverse,a=void 0===n.min?e:0,r=void 0===n.max?e:0;return{start:i?r:a,end:i?a:r}}function qt(t,e,n){var i=n/2,a=jt(t,i),r=jt(e,i);return{top:r.end,right:a.end,bottom:r.start,left:a.start}}function Ut(t){var e,n,i,a;return H.isObject(t)?(e=t.top,n=t.right,i=t.bottom,a=t.left):e=n=i=a=t,{top:e,right:n,bottom:i,left:a}}N._set("line",{showLines:!0,spanGaps:!1,hover:{mode:"label"},scales:{xAxes:[{type:"category",id:"x-axis-0"}],yAxes:[{type:"linear",id:"y-axis-0"}]}});var Yt=it.extend({datasetElementType:kt.Line,dataElementType:kt.Point,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth","cubicInterpolationMode","fill"],_dataElementOptions:{backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},update:function(t){var e,n,i=this,a=i.getMeta(),r=a.dataset,o=a.data||[],s=i.chart.options,l=i._config,u=i._showLine=Wt(l.showLine,s.showLines);for(i._xScale=i.getScaleForId(a.xAxisID),i._yScale=i.getScaleForId(a.yAxisID),u&&(void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),r._scale=i._yScale,r._datasetIndex=i.index,r._children=o,r._model=i._resolveDatasetElementOptions(r),r.pivot()),e=0,n=o.length;e<n;++e)i.updateElement(o[e],e,t);for(u&&0!==r._model.tension&&i.updateBezierControlPoints(),e=0,n=o.length;e<n;++e)o[e].pivot()},updateElement:function(t,e,n){var i,a,r=this,o=r.getMeta(),s=t.custom||{},l=r.getDataset(),u=r.index,d=l.data[e],h=r._xScale,c=r._yScale,f=o.dataset._model,g=r._resolveDataElementOptions(t,e);i=h.getPixelForValue("object"==typeof d?d:NaN,e,u),a=n?c.getBasePixel():r.calculatePointY(d,e,u),t._xScale=h,t._yScale=c,t._options=g,t._datasetIndex=u,t._index=e,t._model={x:i,y:a,skip:s.skip||isNaN(i)||isNaN(a),radius:g.radius,pointStyle:g.pointStyle,rotation:g.rotation,backgroundColor:g.backgroundColor,borderColor:g.borderColor,borderWidth:g.borderWidth,tension:Wt(s.tension,f?f.tension:0),steppedLine:!!f&&f.steppedLine,hitRadius:g.hitRadius}},_resolveDatasetElementOptions:function(t){var e=this,n=e._config,i=t.custom||{},a=e.chart.options,r=a.elements.line,o=it.prototype._resolveDatasetElementOptions.apply(e,arguments);return o.spanGaps=Wt(n.spanGaps,a.spanGaps),o.tension=Wt(n.lineTension,r.tension),o.steppedLine=Vt([i.steppedLine,n.steppedLine,r.stepped]),o.clip=Ut(Wt(n.clip,qt(e._xScale,e._yScale,o.borderWidth))),o},calculatePointY:function(t,e,n){var i,a,r,o,s,l,u,d=this.chart,h=this._yScale,c=0,f=0;if(h.options.stacked){for(s=+h.getRightValue(t),u=(l=d._getSortedVisibleDatasetMetas()).length,i=0;i<u&&(r=l[i]).index!==n;++i)a=d.data.datasets[r.index],"line"===r.type&&r.yAxisID===h.id&&((o=+h.getRightValue(a.data[e]))<0?f+=o||0:c+=o||0);return s<0?h.getPixelForValue(f+s):h.getPixelForValue(c+s)}return h.getPixelForValue(t)},updateBezierControlPoints:function(){var t,e,n,i,a=this.chart,r=this.getMeta(),o=r.dataset._model,s=a.chartArea,l=r.data||[];function u(t,e,n){return Math.max(Math.min(t,n),e)}if(o.spanGaps&&(l=l.filter((function(t){return!t._model.skip}))),"monotone"===o.cubicInterpolationMode)H.splineCurveMonotone(l);else for(t=0,e=l.length;t<e;++t)n=l[t]._model,i=H.splineCurve(H.previousItem(l,t)._model,n,H.nextItem(l,t)._model,o.tension),n.controlPointPreviousX=i.previous.x,n.controlPointPreviousY=i.previous.y,n.controlPointNextX=i.next.x,n.controlPointNextY=i.next.y;if(a.options.elements.line.capBezierPoints)for(t=0,e=l.length;t<e;++t)n=l[t]._model,Ht(n,s)&&(t>0&&Ht(l[t-1]._model,s)&&(n.controlPointPreviousX=u(n.controlPointPreviousX,s.left,s.right),n.controlPointPreviousY=u(n.controlPointPreviousY,s.top,s.bottom)),t<l.length-1&&Ht(l[t+1]._model,s)&&(n.controlPointNextX=u(n.controlPointNextX,s.left,s.right),n.controlPointNextY=u(n.controlPointNextY,s.top,s.bottom)))},draw:function(){var t,e=this.chart,n=this.getMeta(),i=n.data||[],a=e.chartArea,r=e.canvas,o=0,s=i.length;for(this._showLine&&(t=n.dataset._model.clip,H.canvas.clipArea(e.ctx,{left:!1===t.left?0:a.left-t.left,right:!1===t.right?r.width:a.right+t.right,top:!1===t.top?0:a.top-t.top,bottom:!1===t.bottom?r.height:a.bottom+t.bottom}),n.dataset.draw(),H.canvas.unclipArea(e.ctx));o<s;++o)i[o].draw(a)},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Wt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Wt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Wt(n.hoverBorderWidth,n.borderWidth),e.radius=Wt(n.hoverRadius,n.radius)}}),Gt=H.options.resolve;N._set("polarArea",{scale:{type:"radialLinear",angleLines:{display:!1},gridLines:{circular:!0},pointLabels:{display:!1},ticks:{beginAtZero:!0}},animation:{animateRotate:!0,animateScale:!0},startAngle:-.5*Math.PI,legendCallback:function(t){var e,n,i,a=document.createElement("ul"),r=t.data,o=r.datasets,s=r.labels;if(a.setAttribute("class",t.id+"-legend"),o.length)for(e=0,n=o[0].data.length;e<n;++e)(i=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=o[0].backgroundColor[e],s[e]&&i.appendChild(document.createTextNode(s[e]));return a.outerHTML},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map((function(n,i){var a=t.getDatasetMeta(0),r=a.controller.getStyle(i);return{text:n,fillStyle:r.backgroundColor,strokeStyle:r.borderColor,lineWidth:r.borderWidth,hidden:isNaN(e.datasets[0].data[i])||a.data[i].hidden,index:i}})):[]}},onClick:function(t,e){var n,i,a,r=e.index,o=this.chart;for(n=0,i=(o.data.datasets||[]).length;n<i;++n)(a=o.getDatasetMeta(n)).data[r].hidden=!a.data[r].hidden;o.update()}},tooltips:{callbacks:{title:function(){return""},label:function(t,e){return e.labels[t.index]+": "+t.yLabel}}}});var Xt=it.extend({dataElementType:kt.Arc,linkScales:H.noop,_dataElementOptions:["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"],_getIndexScaleId:function(){return this.chart.scale.id},_getValueScaleId:function(){return this.chart.scale.id},update:function(t){var e,n,i,a=this,r=a.getDataset(),o=a.getMeta(),s=a.chart.options.startAngle||0,l=a._starts=[],u=a._angles=[],d=o.data;for(a._updateRadius(),o.count=a.countVisibleElements(),e=0,n=r.data.length;e<n;e++)l[e]=s,i=a._computeAngle(e),u[e]=i,s+=i;for(e=0,n=d.length;e<n;++e)d[e]._options=a._resolveDataElementOptions(d[e],e),a.updateElement(d[e],e,t)},_updateRadius:function(){var t=this,e=t.chart,n=e.chartArea,i=e.options,a=Math.min(n.right-n.left,n.bottom-n.top);e.outerRadius=Math.max(a/2,0),e.innerRadius=Math.max(i.cutoutPercentage?e.outerRadius/100*i.cutoutPercentage:1,0),e.radiusLength=(e.outerRadius-e.innerRadius)/e.getVisibleDatasetCount(),t.outerRadius=e.outerRadius-e.radiusLength*t.index,t.innerRadius=t.outerRadius-e.radiusLength},updateElement:function(t,e,n){var i=this,a=i.chart,r=i.getDataset(),o=a.options,s=o.animation,l=a.scale,u=a.data.labels,d=l.xCenter,h=l.yCenter,c=o.startAngle,f=t.hidden?0:l.getDistanceFromCenterForValue(r.data[e]),g=i._starts[e],p=g+(t.hidden?0:i._angles[e]),m=s.animateScale?0:l.getDistanceFromCenterForValue(r.data[e]),v=t._options||{};H.extend(t,{_datasetIndex:i.index,_index:e,_scale:l,_model:{backgroundColor:v.backgroundColor,borderColor:v.borderColor,borderWidth:v.borderWidth,borderAlign:v.borderAlign,x:d,y:h,innerRadius:0,outerRadius:n?m:f,startAngle:n&&s.animateRotate?c:g,endAngle:n&&s.animateRotate?c:p,label:H.valueAtIndexOrDefault(u,e,u[e])}}),t.pivot()},countVisibleElements:function(){var t=this.getDataset(),e=this.getMeta(),n=0;return H.each(e.data,(function(e,i){isNaN(t.data[i])||e.hidden||n++})),n},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor,a=H.valueOrDefault;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=a(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=a(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=a(n.hoverBorderWidth,n.borderWidth)},_computeAngle:function(t){var e=this,n=this.getMeta().count,i=e.getDataset(),a=e.getMeta();if(isNaN(i.data[t])||a.data[t].hidden)return 0;var r={chart:e.chart,dataIndex:t,dataset:i,datasetIndex:e.index};return Gt([e.chart.options.elements.arc.angle,2*Math.PI/n],r,t)}});N._set("pie",H.clone(N.doughnut)),N._set("pie",{cutoutPercentage:0});var Kt=Bt,Zt=H.valueOrDefault;N._set("radar",{spanGaps:!1,scale:{type:"radialLinear"},elements:{line:{fill:"start",tension:0}}});var $t=it.extend({datasetElementType:kt.Line,dataElementType:kt.Point,linkScales:H.noop,_datasetElementOptions:["backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","fill"],_dataElementOptions:{backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},_getIndexScaleId:function(){return this.chart.scale.id},_getValueScaleId:function(){return this.chart.scale.id},update:function(t){var e,n,i=this,a=i.getMeta(),r=a.dataset,o=a.data||[],s=i.chart.scale,l=i._config;for(void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),r._scale=s,r._datasetIndex=i.index,r._children=o,r._loop=!0,r._model=i._resolveDatasetElementOptions(r),r.pivot(),e=0,n=o.length;e<n;++e)i.updateElement(o[e],e,t);for(i.updateBezierControlPoints(),e=0,n=o.length;e<n;++e)o[e].pivot()},updateElement:function(t,e,n){var i=this,a=t.custom||{},r=i.getDataset(),o=i.chart.scale,s=o.getPointPositionForValue(e,r.data[e]),l=i._resolveDataElementOptions(t,e),u=i.getMeta().dataset._model,d=n?o.xCenter:s.x,h=n?o.yCenter:s.y;t._scale=o,t._options=l,t._datasetIndex=i.index,t._index=e,t._model={x:d,y:h,skip:a.skip||isNaN(d)||isNaN(h),radius:l.radius,pointStyle:l.pointStyle,rotation:l.rotation,backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,tension:Zt(a.tension,u?u.tension:0),hitRadius:l.hitRadius}},_resolveDatasetElementOptions:function(){var t=this,e=t._config,n=t.chart.options,i=it.prototype._resolveDatasetElementOptions.apply(t,arguments);return i.spanGaps=Zt(e.spanGaps,n.spanGaps),i.tension=Zt(e.lineTension,n.elements.line.tension),i},updateBezierControlPoints:function(){var t,e,n,i,a=this.getMeta(),r=this.chart.chartArea,o=a.data||[];function s(t,e,n){return Math.max(Math.min(t,n),e)}for(a.dataset._model.spanGaps&&(o=o.filter((function(t){return!t._model.skip}))),t=0,e=o.length;t<e;++t)n=o[t]._model,i=H.splineCurve(H.previousItem(o,t,!0)._model,n,H.nextItem(o,t,!0)._model,n.tension),n.controlPointPreviousX=s(i.previous.x,r.left,r.right),n.controlPointPreviousY=s(i.previous.y,r.top,r.bottom),n.controlPointNextX=s(i.next.x,r.left,r.right),n.controlPointNextY=s(i.next.y,r.top,r.bottom)},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Zt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Zt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Zt(n.hoverBorderWidth,n.borderWidth),e.radius=Zt(n.hoverRadius,n.radius)}});N._set("scatter",{hover:{mode:"single"},scales:{xAxes:[{id:"x-axis-1",type:"linear",position:"bottom"}],yAxes:[{id:"y-axis-1",type:"linear",position:"left"}]},tooltips:{callbacks:{title:function(){return""},label:function(t){return"("+t.xLabel+", "+t.yLabel+")"}}}}),N._set("global",{datasets:{scatter:{showLine:!1}}});var Jt={bar:Tt,bubble:Ot,doughnut:Bt,horizontalBar:Et,line:Yt,polarArea:Xt,pie:Kt,radar:$t,scatter:Yt};function Qt(t,e){return t.native?{x:t.x,y:t.y}:H.getRelativePosition(t,e)}function te(t,e){var n,i,a,r,o,s,l=t._getSortedVisibleDatasetMetas();for(i=0,r=l.length;i<r;++i)for(a=0,o=(n=l[i].data).length;a<o;++a)(s=n[a])._view.skip||e(s)}function ee(t,e){var n=[];return te(t,(function(t){t.inRange(e.x,e.y)&&n.push(t)})),n}function ne(t,e,n,i){var a=Number.POSITIVE_INFINITY,r=[];return te(t,(function(t){if(!n||t.inRange(e.x,e.y)){var o=t.getCenterPoint(),s=i(e,o);s<a?(r=[t],a=s):s===a&&r.push(t)}})),r}function ie(t){var e=-1!==t.indexOf("x"),n=-1!==t.indexOf("y");return function(t,i){var a=e?Math.abs(t.x-i.x):0,r=n?Math.abs(t.y-i.y):0;return Math.sqrt(Math.pow(a,2)+Math.pow(r,2))}}function ae(t,e,n){var i=Qt(e,t);n.axis=n.axis||"x";var a=ie(n.axis),r=n.intersect?ee(t,i):ne(t,i,!1,a),o=[];return r.length?(t._getSortedVisibleDatasetMetas().forEach((function(t){var e=t.data[r[0]._index];e&&!e._view.skip&&o.push(e)})),o):[]}var re={modes:{single:function(t,e){var n=Qt(e,t),i=[];return te(t,(function(t){if(t.inRange(n.x,n.y))return i.push(t),i})),i.slice(0,1)},label:ae,index:ae,dataset:function(t,e,n){var i=Qt(e,t);n.axis=n.axis||"xy";var a=ie(n.axis),r=n.intersect?ee(t,i):ne(t,i,!1,a);return r.length>0&&(r=t.getDatasetMeta(r[0]._datasetIndex).data),r},"x-axis":function(t,e){return ae(t,e,{intersect:!1})},point:function(t,e){return ee(t,Qt(e,t))},nearest:function(t,e,n){var i=Qt(e,t);n.axis=n.axis||"xy";var a=ie(n.axis);return ne(t,i,n.intersect,a)},x:function(t,e,n){var i=Qt(e,t),a=[],r=!1;return te(t,(function(t){t.inXRange(i.x)&&a.push(t),t.inRange(i.x,i.y)&&(r=!0)})),n.intersect&&!r&&(a=[]),a},y:function(t,e,n){var i=Qt(e,t),a=[],r=!1;return te(t,(function(t){t.inYRange(i.y)&&a.push(t),t.inRange(i.x,i.y)&&(r=!0)})),n.intersect&&!r&&(a=[]),a}}},oe=H.extend;function se(t,e){return H.where(t,(function(t){return t.pos===e}))}function le(t,e){return t.sort((function(t,n){var i=e?n:t,a=e?t:n;return i.weight===a.weight?i.index-a.index:i.weight-a.weight}))}function ue(t,e,n,i){return Math.max(t[n],e[n])+Math.max(t[i],e[i])}function de(t,e,n){var i,a,r=n.box,o=t.maxPadding;if(n.size&&(t[n.pos]-=n.size),n.size=n.horizontal?r.height:r.width,t[n.pos]+=n.size,r.getPadding){var s=r.getPadding();o.top=Math.max(o.top,s.top),o.left=Math.max(o.left,s.left),o.bottom=Math.max(o.bottom,s.bottom),o.right=Math.max(o.right,s.right)}if(i=e.outerWidth-ue(o,t,"left","right"),a=e.outerHeight-ue(o,t,"top","bottom"),i!==t.w||a!==t.h){t.w=i,t.h=a;var l=n.horizontal?[i,t.w]:[a,t.h];return!(l[0]===l[1]||isNaN(l[0])&&isNaN(l[1]))}}function he(t,e){var n=e.maxPadding;function i(t){var i={left:0,top:0,right:0,bottom:0};return t.forEach((function(t){i[t]=Math.max(e[t],n[t])})),i}return i(t?["left","right"]:["top","bottom"])}function ce(t,e,n){var i,a,r,o,s,l,u=[];for(i=0,a=t.length;i<a;++i)(o=(r=t[i]).box).update(r.width||e.w,r.height||e.h,he(r.horizontal,e)),de(e,n,r)&&(l=!0,u.length&&(s=!0)),o.fullWidth||u.push(r);return s&&ce(u,e,n)||l}function fe(t,e,n){var i,a,r,o,s=n.padding,l=e.x,u=e.y;for(i=0,a=t.length;i<a;++i)o=(r=t[i]).box,r.horizontal?(o.left=o.fullWidth?s.left:e.left,o.right=o.fullWidth?n.outerWidth-s.right:e.left+e.w,o.top=u,o.bottom=u+o.height,o.width=o.right-o.left,u=o.bottom):(o.left=l,o.right=l+o.width,o.top=e.top,o.bottom=e.top+e.h,o.height=o.bottom-o.top,l=o.right);e.x=l,e.y=u}N._set("global",{layout:{padding:{top:0,right:0,bottom:0,left:0}}});var ge,pe={defaults:{},addBox:function(t,e){t.boxes||(t.boxes=[]),e.fullWidth=e.fullWidth||!1,e.position=e.position||"top",e.weight=e.weight||0,e._layers=e._layers||function(){return[{z:0,draw:function(){e.draw.apply(e,arguments)}}]},t.boxes.push(e)},removeBox:function(t,e){var n=t.boxes?t.boxes.indexOf(e):-1;-1!==n&&t.boxes.splice(n,1)},configure:function(t,e,n){for(var i,a=["fullWidth","position","weight"],r=a.length,o=0;o<r;++o)i=a[o],n.hasOwnProperty(i)&&(e[i]=n[i])},update:function(t,e,n){if(t){var i=t.options.layout||{},a=H.options.toPadding(i.padding),r=e-a.width,o=n-a.height,s=function(t){var e=function(t){var e,n,i,a=[];for(e=0,n=(t||[]).length;e<n;++e)i=t[e],a.push({index:e,box:i,pos:i.position,horizontal:i.isHorizontal(),weight:i.weight});return a}(t),n=le(se(e,"left"),!0),i=le(se(e,"right")),a=le(se(e,"top"),!0),r=le(se(e,"bottom"));return{leftAndTop:n.concat(a),rightAndBottom:i.concat(r),chartArea:se(e,"chartArea"),vertical:n.concat(i),horizontal:a.concat(r)}}(t.boxes),l=s.vertical,u=s.horizontal,d=Object.freeze({outerWidth:e,outerHeight:n,padding:a,availableWidth:r,vBoxMaxWidth:r/2/l.length,hBoxMaxHeight:o/2}),h=oe({maxPadding:oe({},a),w:r,h:o,x:a.left,y:a.top},a);!function(t,e){var n,i,a;for(n=0,i=t.length;n<i;++n)(a=t[n]).width=a.horizontal?a.box.fullWidth&&e.availableWidth:e.vBoxMaxWidth,a.height=a.horizontal&&e.hBoxMaxHeight}(l.concat(u),d),ce(l,h,d),ce(u,h,d)&&ce(l,h,d),function(t){var e=t.maxPadding;function n(n){var i=Math.max(e[n]-t[n],0);return t[n]+=i,i}t.y+=n("top"),t.x+=n("left"),n("right"),n("bottom")}(h),fe(s.leftAndTop,h,d),h.x+=h.w,h.y+=h.h,fe(s.rightAndBottom,h,d),t.chartArea={left:h.left,top:h.top,right:h.left+h.w,bottom:h.top+h.h},H.each(s.chartArea,(function(e){var n=e.box;oe(n,t.chartArea),n.update(h.w,h.h)}))}}},me=(ge=Object.freeze({__proto__:null,default:"@keyframes chartjs-render-animation{from{opacity:.99}to{opacity:1}}.chartjs-render-monitor{animation:chartjs-render-animation 1ms}.chartjs-size-monitor,.chartjs-size-monitor-expand,.chartjs-size-monitor-shrink{position:absolute;direction:ltr;left:0;top:0;right:0;bottom:0;overflow:hidden;pointer-events:none;visibility:hidden;z-index:-1}.chartjs-size-monitor-expand>div{position:absolute;width:1000000px;height:1000000px;left:0;top:0}.chartjs-size-monitor-shrink>div{position:absolute;width:200%;height:200%;left:0;top:0}"}))&&ge.default||ge,ve="$chartjs",be="chartjs-size-monitor",xe="chartjs-render-monitor",ye="chartjs-render-animation",_e=["animationstart","webkitAnimationStart"],ke={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"};function we(t,e){var n=H.getStyle(t,e),i=n&&n.match(/^(\d+)(\.\d+)?px$/);return i?Number(i[1]):void 0}var Me=!!function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("e",null,e)}catch(t){}return t}()&&{passive:!0};function Se(t,e,n){t.addEventListener(e,n,Me)}function Ce(t,e,n){t.removeEventListener(e,n,Me)}function Pe(t,e,n,i,a){return{type:t,chart:e,native:a||null,x:void 0!==n?n:null,y:void 0!==i?i:null}}function Ae(t){var e=document.createElement("div");return e.className=t||"",e}function De(t,e,n){var i,a,r,o,s=t[ve]||(t[ve]={}),l=s.resizer=function(t){var e=Ae(be),n=Ae(be+"-expand"),i=Ae(be+"-shrink");n.appendChild(Ae()),i.appendChild(Ae()),e.appendChild(n),e.appendChild(i),e._reset=function(){n.scrollLeft=1e6,n.scrollTop=1e6,i.scrollLeft=1e6,i.scrollTop=1e6};var a=function(){e._reset(),t()};return Se(n,"scroll",a.bind(n,"expand")),Se(i,"scroll",a.bind(i,"shrink")),e}((i=function(){if(s.resizer){var i=n.options.maintainAspectRatio&&t.parentNode,a=i?i.clientWidth:0;e(Pe("resize",n)),i&&i.clientWidth<a&&n.canvas&&e(Pe("resize",n))}},r=!1,o=[],function(){o=Array.prototype.slice.call(arguments),a=a||this,r||(r=!0,H.requestAnimFrame.call(window,(function(){r=!1,i.apply(a,o)})))}));!function(t,e){var n=t[ve]||(t[ve]={}),i=n.renderProxy=function(t){t.animationName===ye&&e()};H.each(_e,(function(e){Se(t,e,i)})),n.reflow=!!t.offsetParent,t.classList.add(xe)}(t,(function(){if(s.resizer){var e=t.parentNode;e&&e!==l.parentNode&&e.insertBefore(l,e.firstChild),l._reset()}}))}function Te(t){var e=t[ve]||{},n=e.resizer;delete e.resizer,function(t){var e=t[ve]||{},n=e.renderProxy;n&&(H.each(_e,(function(e){Ce(t,e,n)})),delete e.renderProxy),t.classList.remove(xe)}(t),n&&n.parentNode&&n.parentNode.removeChild(n)}var Ie={disableCSSInjection:!1,_enabled:"undefined"!=typeof window&&"undefined"!=typeof document,_ensureLoaded:function(t){if(!this.disableCSSInjection){var e=t.getRootNode?t.getRootNode():document;!function(t,e){var n=t[ve]||(t[ve]={});if(!n.containsStyles){n.containsStyles=!0,e="/* Chart.js */\n"+e;var i=document.createElement("style");i.setAttribute("type","text/css"),i.appendChild(document.createTextNode(e)),t.appendChild(i)}}(e.host?e:document.head,me)}},acquireContext:function(t,e){"string"==typeof t?t=document.getElementById(t):t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas);var n=t&&t.getContext&&t.getContext("2d");return n&&n.canvas===t?(this._ensureLoaded(t),function(t,e){var n=t.style,i=t.getAttribute("height"),a=t.getAttribute("width");if(t[ve]={initial:{height:i,width:a,style:{display:n.display,height:n.height,width:n.width}}},n.display=n.display||"block",null===a||""===a){var r=we(t,"width");void 0!==r&&(t.width=r)}if(null===i||""===i)if(""===t.style.height)t.height=t.width/(e.options.aspectRatio||2);else{var o=we(t,"height");void 0!==r&&(t.height=o)}}(t,e),n):null},releaseContext:function(t){var e=t.canvas;if(e[ve]){var n=e[ve].initial;["height","width"].forEach((function(t){var i=n[t];H.isNullOrUndef(i)?e.removeAttribute(t):e.setAttribute(t,i)})),H.each(n.style||{},(function(t,n){e.style[n]=t})),e.width=e.width,delete e[ve]}},addEventListener:function(t,e,n){var i=t.canvas;if("resize"!==e){var a=n[ve]||(n[ve]={});Se(i,e,(a.proxies||(a.proxies={}))[t.id+"_"+e]=function(e){n(function(t,e){var n=ke[t.type]||t.type,i=H.getRelativePosition(t,e);return Pe(n,e,i.x,i.y,t)}(e,t))})}else De(i,n,t)},removeEventListener:function(t,e,n){var i=t.canvas;if("resize"!==e){var a=((n[ve]||{}).proxies||{})[t.id+"_"+e];a&&Ce(i,e,a)}else Te(i)}};H.addEvent=Se,H.removeEvent=Ce;var Fe=Ie._enabled?Ie:{acquireContext:function(t){return t&&t.canvas&&(t=t.canvas),t&&t.getContext("2d")||null}},Oe=H.extend({initialize:function(){},acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}},Fe);N._set("global",{plugins:{}});var Le={_plugins:[],_cacheId:0,register:function(t){var e=this._plugins;[].concat(t).forEach((function(t){-1===e.indexOf(t)&&e.push(t)})),this._cacheId++},unregister:function(t){var e=this._plugins;[].concat(t).forEach((function(t){var n=e.indexOf(t);-1!==n&&e.splice(n,1)})),this._cacheId++},clear:function(){this._plugins=[],this._cacheId++},count:function(){return this._plugins.length},getAll:function(){return this._plugins},notify:function(t,e,n){var i,a,r,o,s,l=this.descriptors(t),u=l.length;for(i=0;i<u;++i)if("function"==typeof(s=(r=(a=l[i]).plugin)[e])&&((o=[t].concat(n||[])).push(a.options),!1===s.apply(r,o)))return!1;return!0},descriptors:function(t){var e=t.$plugins||(t.$plugins={});if(e.id===this._cacheId)return e.descriptors;var n=[],i=[],a=t&&t.config||{},r=a.options&&a.options.plugins||{};return this._plugins.concat(a.plugins||[]).forEach((function(t){if(-1===n.indexOf(t)){var e=t.id,a=r[e];!1!==a&&(!0===a&&(a=H.clone(N.global.plugins[e])),n.push(t),i.push({plugin:t,options:a||{}}))}})),e.descriptors=i,e.id=this._cacheId,i},_invalidate:function(t){delete t.$plugins}},Re={constructors:{},defaults:{},registerScaleType:function(t,e,n){this.constructors[t]=e,this.defaults[t]=H.clone(n)},getScaleConstructor:function(t){return this.constructors.hasOwnProperty(t)?this.constructors[t]:void 0},getScaleDefaults:function(t){return this.defaults.hasOwnProperty(t)?H.merge(Object.create(null),[N.scale,this.defaults[t]]):{}},updateScaleDefaults:function(t,e){this.defaults.hasOwnProperty(t)&&(this.defaults[t]=H.extend(this.defaults[t],e))},addScalesToLayout:function(t){H.each(t.scales,(function(e){e.fullWidth=e.options.fullWidth,e.position=e.options.position,e.weight=e.options.weight,pe.addBox(t,e)}))}},ze=H.valueOrDefault,Ne=H.rtl.getRtlAdapter;N._set("global",{tooltips:{enabled:!0,custom:null,mode:"nearest",position:"average",intersect:!0,backgroundColor:"rgba(0,0,0,0.8)",titleFontStyle:"bold",titleSpacing:2,titleMarginBottom:6,titleFontColor:"#fff",titleAlign:"left",bodySpacing:2,bodyFontColor:"#fff",bodyAlign:"left",footerFontStyle:"bold",footerSpacing:2,footerMarginTop:6,footerFontColor:"#fff",footerAlign:"left",yPadding:6,xPadding:6,caretPadding:2,caretSize:5,cornerRadius:6,multiKeyBackground:"#fff",displayColors:!0,borderColor:"rgba(0,0,0,0)",borderWidth:0,callbacks:{beforeTitle:H.noop,title:function(t,e){var n="",i=e.labels,a=i?i.length:0;if(t.length>0){var r=t[0];r.label?n=r.label:r.xLabel?n=r.xLabel:a>0&&r.index<a&&(n=i[r.index])}return n},afterTitle:H.noop,beforeBody:H.noop,beforeLabel:H.noop,label:function(t,e){var n=e.datasets[t.datasetIndex].label||"";return n&&(n+=": "),H.isNullOrUndef(t.value)?n+=t.yLabel:n+=t.value,n},labelColor:function(t,e){var n=e.getDatasetMeta(t.datasetIndex).data[t.index]._view;return{borderColor:n.borderColor,backgroundColor:n.backgroundColor}},labelTextColor:function(){return this._options.bodyFontColor},afterLabel:H.noop,afterBody:H.noop,beforeFooter:H.noop,footer:H.noop,afterFooter:H.noop}}});var Be={average:function(t){if(!t.length)return!1;var e,n,i=0,a=0,r=0;for(e=0,n=t.length;e<n;++e){var o=t[e];if(o&&o.hasValue()){var s=o.tooltipPosition();i+=s.x,a+=s.y,++r}}return{x:i/r,y:a/r}},nearest:function(t,e){var n,i,a,r=e.x,o=e.y,s=Number.POSITIVE_INFINITY;for(n=0,i=t.length;n<i;++n){var l=t[n];if(l&&l.hasValue()){var u=l.getCenterPoint(),d=H.distanceBetweenPoints(e,u);d<s&&(s=d,a=l)}}if(a){var h=a.tooltipPosition();r=h.x,o=h.y}return{x:r,y:o}}};function Ee(t,e){return e&&(H.isArray(e)?Array.prototype.push.apply(t,e):t.push(e)),t}function We(t){return("string"==typeof t||t instanceof String)&&t.indexOf("\n")>-1?t.split("\n"):t}function Ve(t){var e=N.global;return{xPadding:t.xPadding,yPadding:t.yPadding,xAlign:t.xAlign,yAlign:t.yAlign,rtl:t.rtl,textDirection:t.textDirection,bodyFontColor:t.bodyFontColor,_bodyFontFamily:ze(t.bodyFontFamily,e.defaultFontFamily),_bodyFontStyle:ze(t.bodyFontStyle,e.defaultFontStyle),_bodyAlign:t.bodyAlign,bodyFontSize:ze(t.bodyFontSize,e.defaultFontSize),bodySpacing:t.bodySpacing,titleFontColor:t.titleFontColor,_titleFontFamily:ze(t.titleFontFamily,e.defaultFontFamily),_titleFontStyle:ze(t.titleFontStyle,e.defaultFontStyle),titleFontSize:ze(t.titleFontSize,e.defaultFontSize),_titleAlign:t.titleAlign,titleSpacing:t.titleSpacing,titleMarginBottom:t.titleMarginBottom,footerFontColor:t.footerFontColor,_footerFontFamily:ze(t.footerFontFamily,e.defaultFontFamily),_footerFontStyle:ze(t.footerFontStyle,e.defaultFontStyle),footerFontSize:ze(t.footerFontSize,e.defaultFontSize),_footerAlign:t.footerAlign,footerSpacing:t.footerSpacing,footerMarginTop:t.footerMarginTop,caretSize:t.caretSize,cornerRadius:t.cornerRadius,backgroundColor:t.backgroundColor,opacity:0,legendColorBackground:t.multiKeyBackground,displayColors:t.displayColors,borderColor:t.borderColor,borderWidth:t.borderWidth}}function He(t,e){return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-t.xPadding:t.x+t.xPadding}function je(t){return Ee([],We(t))}var qe=K.extend({initialize:function(){this._model=Ve(this._options),this._lastActive=[]},getTitle:function(){var t=this,e=t._options,n=e.callbacks,i=n.beforeTitle.apply(t,arguments),a=n.title.apply(t,arguments),r=n.afterTitle.apply(t,arguments),o=[];return o=Ee(o,We(i)),o=Ee(o,We(a)),o=Ee(o,We(r))},getBeforeBody:function(){return je(this._options.callbacks.beforeBody.apply(this,arguments))},getBody:function(t,e){var n=this,i=n._options.callbacks,a=[];return H.each(t,(function(t){var r={before:[],lines:[],after:[]};Ee(r.before,We(i.beforeLabel.call(n,t,e))),Ee(r.lines,i.label.call(n,t,e)),Ee(r.after,We(i.afterLabel.call(n,t,e))),a.push(r)})),a},getAfterBody:function(){return je(this._options.callbacks.afterBody.apply(this,arguments))},getFooter:function(){var t=this,e=t._options.callbacks,n=e.beforeFooter.apply(t,arguments),i=e.footer.apply(t,arguments),a=e.afterFooter.apply(t,arguments),r=[];return r=Ee(r,We(n)),r=Ee(r,We(i)),r=Ee(r,We(a))},update:function(t){var e,n,i,a,r,o,s,l,u,d,h=this,c=h._options,f=h._model,g=h._model=Ve(c),p=h._active,m=h._data,v={xAlign:f.xAlign,yAlign:f.yAlign},b={x:f.x,y:f.y},x={width:f.width,height:f.height},y={x:f.caretX,y:f.caretY};if(p.length){g.opacity=1;var _=[],k=[];y=Be[c.position].call(h,p,h._eventPosition);var w=[];for(e=0,n=p.length;e<n;++e)w.push((i=p[e],a=void 0,r=void 0,o=void 0,s=void 0,l=void 0,u=void 0,d=void 0,a=i._xScale,r=i._yScale||i._scale,o=i._index,s=i._datasetIndex,l=i._chart.getDatasetMeta(s).controller,u=l._getIndexScale(),d=l._getValueScale(),{xLabel:a?a.getLabelForIndex(o,s):"",yLabel:r?r.getLabelForIndex(o,s):"",label:u?""+u.getLabelForIndex(o,s):"",value:d?""+d.getLabelForIndex(o,s):"",index:o,datasetIndex:s,x:i._model.x,y:i._model.y}));c.filter&&(w=w.filter((function(t){return c.filter(t,m)}))),c.itemSort&&(w=w.sort((function(t,e){return c.itemSort(t,e,m)}))),H.each(w,(function(t){_.push(c.callbacks.labelColor.call(h,t,h._chart)),k.push(c.callbacks.labelTextColor.call(h,t,h._chart))})),g.title=h.getTitle(w,m),g.beforeBody=h.getBeforeBody(w,m),g.body=h.getBody(w,m),g.afterBody=h.getAfterBody(w,m),g.footer=h.getFooter(w,m),g.x=y.x,g.y=y.y,g.caretPadding=c.caretPadding,g.labelColors=_,g.labelTextColors=k,g.dataPoints=w,x=function(t,e){var n=t._chart.ctx,i=2*e.yPadding,a=0,r=e.body,o=r.reduce((function(t,e){return t+e.before.length+e.lines.length+e.after.length}),0);o+=e.beforeBody.length+e.afterBody.length;var s=e.title.length,l=e.footer.length,u=e.titleFontSize,d=e.bodyFontSize,h=e.footerFontSize;i+=s*u,i+=s?(s-1)*e.titleSpacing:0,i+=s?e.titleMarginBottom:0,i+=o*d,i+=o?(o-1)*e.bodySpacing:0,i+=l?e.footerMarginTop:0,i+=l*h,i+=l?(l-1)*e.footerSpacing:0;var c=0,f=function(t){a=Math.max(a,n.measureText(t).width+c)};return n.font=H.fontString(u,e._titleFontStyle,e._titleFontFamily),H.each(e.title,f),n.font=H.fontString(d,e._bodyFontStyle,e._bodyFontFamily),H.each(e.beforeBody.concat(e.afterBody),f),c=e.displayColors?d+2:0,H.each(r,(function(t){H.each(t.before,f),H.each(t.lines,f),H.each(t.after,f)})),c=0,n.font=H.fontString(h,e._footerFontStyle,e._footerFontFamily),H.each(e.footer,f),{width:a+=2*e.xPadding,height:i}}(this,g),b=function(t,e,n,i){var a=t.x,r=t.y,o=t.caretSize,s=t.caretPadding,l=t.cornerRadius,u=n.xAlign,d=n.yAlign,h=o+s,c=l+s;return"right"===u?a-=e.width:"center"===u&&((a-=e.width/2)+e.width>i.width&&(a=i.width-e.width),a<0&&(a=0)),"top"===d?r+=h:r-="bottom"===d?e.height+h:e.height/2,"center"===d?"left"===u?a+=h:"right"===u&&(a-=h):"left"===u?a-=c:"right"===u&&(a+=c),{x:a,y:r}}(g,x,v=function(t,e){var n,i,a,r,o,s=t._model,l=t._chart,u=t._chart.chartArea,d="center",h="center";s.y<e.height?h="top":s.y>l.height-e.height&&(h="bottom");var c=(u.left+u.right)/2,f=(u.top+u.bottom)/2;"center"===h?(n=function(t){return t<=c},i=function(t){return t>c}):(n=function(t){return t<=e.width/2},i=function(t){return t>=l.width-e.width/2}),a=function(t){return t+e.width+s.caretSize+s.caretPadding>l.width},r=function(t){return t-e.width-s.caretSize-s.caretPadding<0},o=function(t){return t<=f?"top":"bottom"},n(s.x)?(d="left",a(s.x)&&(d="center",h=o(s.y))):i(s.x)&&(d="right",r(s.x)&&(d="center",h=o(s.y)));var g=t._options;return{xAlign:g.xAlign?g.xAlign:d,yAlign:g.yAlign?g.yAlign:h}}(this,x),h._chart)}else g.opacity=0;return g.xAlign=v.xAlign,g.yAlign=v.yAlign,g.x=b.x,g.y=b.y,g.width=x.width,g.height=x.height,g.caretX=y.x,g.caretY=y.y,h._model=g,t&&c.custom&&c.custom.call(h,g),h},drawCaret:function(t,e){var n=this._chart.ctx,i=this._view,a=this.getCaretPosition(t,e,i);n.lineTo(a.x1,a.y1),n.lineTo(a.x2,a.y2),n.lineTo(a.x3,a.y3)},getCaretPosition:function(t,e,n){var i,a,r,o,s,l,u=n.caretSize,d=n.cornerRadius,h=n.xAlign,c=n.yAlign,f=t.x,g=t.y,p=e.width,m=e.height;if("center"===c)s=g+m/2,"left"===h?(a=(i=f)-u,r=i,o=s+u,l=s-u):(a=(i=f+p)+u,r=i,o=s-u,l=s+u);else if("left"===h?(i=(a=f+d+u)-u,r=a+u):"right"===h?(i=(a=f+p-d-u)-u,r=a+u):(i=(a=n.caretX)-u,r=a+u),"top"===c)s=(o=g)-u,l=o;else{s=(o=g+m)+u,l=o;var v=r;r=i,i=v}return{x1:i,x2:a,x3:r,y1:o,y2:s,y3:l}},drawTitle:function(t,e,n){var i,a,r,o=e.title,s=o.length;if(s){var l=Ne(e.rtl,e.x,e.width);for(t.x=He(e,e._titleAlign),n.textAlign=l.textAlign(e._titleAlign),n.textBaseline="middle",i=e.titleFontSize,a=e.titleSpacing,n.fillStyle=e.titleFontColor,n.font=H.fontString(i,e._titleFontStyle,e._titleFontFamily),r=0;r<s;++r)n.fillText(o[r],l.x(t.x),t.y+i/2),t.y+=i+a,r+1===s&&(t.y+=e.titleMarginBottom-a)}},drawBody:function(t,e,n){var i,a,r,o,s,l,u,d,h=e.bodyFontSize,c=e.bodySpacing,f=e._bodyAlign,g=e.body,p=e.displayColors,m=0,v=p?He(e,"left"):0,b=Ne(e.rtl,e.x,e.width),x=function(e){n.fillText(e,b.x(t.x+m),t.y+h/2),t.y+=h+c},y=b.textAlign(f);for(n.textAlign=f,n.textBaseline="middle",n.font=H.fontString(h,e._bodyFontStyle,e._bodyFontFamily),t.x=He(e,y),n.fillStyle=e.bodyFontColor,H.each(e.beforeBody,x),m=p&&"right"!==y?"center"===f?h/2+1:h+2:0,s=0,u=g.length;s<u;++s){for(i=g[s],a=e.labelTextColors[s],r=e.labelColors[s],n.fillStyle=a,H.each(i.before,x),l=0,d=(o=i.lines).length;l<d;++l){if(p){var _=b.x(v);n.fillStyle=e.legendColorBackground,n.fillRect(b.leftForLtr(_,h),t.y,h,h),n.lineWidth=1,n.strokeStyle=r.borderColor,n.strokeRect(b.leftForLtr(_,h),t.y,h,h),n.fillStyle=r.backgroundColor,n.fillRect(b.leftForLtr(b.xPlus(_,1),h-2),t.y+1,h-2,h-2),n.fillStyle=a}x(o[l])}H.each(i.after,x)}m=0,H.each(e.afterBody,x),t.y-=c},drawFooter:function(t,e,n){var i,a,r=e.footer,o=r.length;if(o){var s=Ne(e.rtl,e.x,e.width);for(t.x=He(e,e._footerAlign),t.y+=e.footerMarginTop,n.textAlign=s.textAlign(e._footerAlign),n.textBaseline="middle",i=e.footerFontSize,n.fillStyle=e.footerFontColor,n.font=H.fontString(i,e._footerFontStyle,e._footerFontFamily),a=0;a<o;++a)n.fillText(r[a],s.x(t.x),t.y+i/2),t.y+=i+e.footerSpacing}},drawBackground:function(t,e,n,i){n.fillStyle=e.backgroundColor,n.strokeStyle=e.borderColor,n.lineWidth=e.borderWidth;var a=e.xAlign,r=e.yAlign,o=t.x,s=t.y,l=i.width,u=i.height,d=e.cornerRadius;n.beginPath(),n.moveTo(o+d,s),"top"===r&&this.drawCaret(t,i),n.lineTo(o+l-d,s),n.quadraticCurveTo(o+l,s,o+l,s+d),"center"===r&&"right"===a&&this.drawCaret(t,i),n.lineTo(o+l,s+u-d),n.quadraticCurveTo(o+l,s+u,o+l-d,s+u),"bottom"===r&&this.drawCaret(t,i),n.lineTo(o+d,s+u),n.quadraticCurveTo(o,s+u,o,s+u-d),"center"===r&&"left"===a&&this.drawCaret(t,i),n.lineTo(o,s+d),n.quadraticCurveTo(o,s,o+d,s),n.closePath(),n.fill(),e.borderWidth>0&&n.stroke()},draw:function(){var t=this._chart.ctx,e=this._view;if(0!==e.opacity){var n={width:e.width,height:e.height},i={x:e.x,y:e.y},a=Math.abs(e.opacity<.001)?0:e.opacity,r=e.title.length||e.beforeBody.length||e.body.length||e.afterBody.length||e.footer.length;this._options.enabled&&r&&(t.save(),t.globalAlpha=a,this.drawBackground(i,e,t,n),i.y+=e.yPadding,H.rtl.overrideTextDirection(t,e.textDirection),this.drawTitle(i,e,t),this.drawBody(i,e,t),this.drawFooter(i,e,t),H.rtl.restoreTextDirection(t,e.textDirection),t.restore())}},handleEvent:function(t){var e,n=this,i=n._options;return n._lastActive=n._lastActive||[],"mouseout"===t.type?n._active=[]:(n._active=n._chart.getElementsAtEventForMode(t,i.mode,i),i.reverse&&n._active.reverse()),(e=!H.arrayEquals(n._active,n._lastActive))&&(n._lastActive=n._active,(i.enabled||i.custom)&&(n._eventPosition={x:t.x,y:t.y},n.update(!0),n.pivot())),e}}),Ue=Be,Ye=qe;Ye.positioners=Ue;var Ge=H.valueOrDefault;function Xe(){return H.merge(Object.create(null),[].slice.call(arguments),{merger:function(t,e,n,i){if("xAxes"===t||"yAxes"===t){var a,r,o,s=n[t].length;for(e[t]||(e[t]=[]),a=0;a<s;++a)o=n[t][a],r=Ge(o.type,"xAxes"===t?"category":"linear"),a>=e[t].length&&e[t].push({}),!e[t][a].type||o.type&&o.type!==e[t][a].type?H.merge(e[t][a],[Re.getScaleDefaults(r),o]):H.merge(e[t][a],o)}else H._merger(t,e,n,i)}})}function Ke(){return H.merge(Object.create(null),[].slice.call(arguments),{merger:function(t,e,n,i){var a=e[t]||Object.create(null),r=n[t];"scales"===t?e[t]=Xe(a,r):"scale"===t?e[t]=H.merge(a,[Re.getScaleDefaults(r.type),r]):H._merger(t,e,n,i)}})}function Ze(t){var e=t.options;H.each(t.scales,(function(e){pe.removeBox(t,e)})),e=Ke(N.global,N[t.config.type],e),t.options=t.config.options=e,t.ensureScalesHaveIDs(),t.buildOrUpdateScales(),t.tooltip._options=e.tooltips,t.tooltip.initialize()}function $e(t,e,n){var i,a=function(t){return t.id===i};do{i=e+n++}while(H.findIndex(t,a)>=0);return i}function Je(t){return"top"===t||"bottom"===t}function Qe(t,e){return function(n,i){return n[t]===i[t]?n[e]-i[e]:n[t]-i[t]}}N._set("global",{elements:{},events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,maintainAspectRatio:!0,responsive:!0,responsiveAnimationDuration:0});var tn=function(t,e){return this.construct(t,e),this};H.extend(tn.prototype,{construct:function(t,e){var n=this;e=function(t){var e=(t=t||Object.create(null)).data=t.data||{};return e.datasets=e.datasets||[],e.labels=e.labels||[],t.options=Ke(N.global,N[t.type],t.options||{}),t}(e);var i=Oe.acquireContext(t,e),a=i&&i.canvas,r=a&&a.height,o=a&&a.width;n.id=H.uid(),n.ctx=i,n.canvas=a,n.config=e,n.width=o,n.height=r,n.aspectRatio=r?o/r:null,n.options=e.options,n._bufferedRender=!1,n._layers=[],n.chart=n,n.controller=n,tn.instances[n.id]=n,Object.defineProperty(n,"data",{get:function(){return n.config.data},set:function(t){n.config.data=t}}),i&&a?(n.initialize(),n.update()):console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var t=this;return Le.notify(t,"beforeInit"),H.retinaScale(t,t.options.devicePixelRatio),t.bindEvents(),t.options.responsive&&t.resize(!0),t.initToolTip(),Le.notify(t,"afterInit"),t},clear:function(){return H.canvas.clear(this),this},stop:function(){return J.cancelAnimation(this),this},resize:function(t){var e=this,n=e.options,i=e.canvas,a=n.maintainAspectRatio&&e.aspectRatio||null,r=Math.max(0,Math.floor(H.getMaximumWidth(i))),o=Math.max(0,Math.floor(a?r/a:H.getMaximumHeight(i)));if((e.width!==r||e.height!==o)&&(i.width=e.width=r,i.height=e.height=o,i.style.width=r+"px",i.style.height=o+"px",H.retinaScale(e,n.devicePixelRatio),!t)){var s={width:r,height:o};Le.notify(e,"resize",[s]),n.onResize&&n.onResize(e,s),e.stop(),e.update({duration:n.responsiveAnimationDuration})}},ensureScalesHaveIDs:function(){var t=this.options,e=t.scales||{},n=t.scale;H.each(e.xAxes,(function(t,n){t.id||(t.id=$e(e.xAxes,"x-axis-",n))})),H.each(e.yAxes,(function(t,n){t.id||(t.id=$e(e.yAxes,"y-axis-",n))})),n&&(n.id=n.id||"scale")},buildOrUpdateScales:function(){var t=this,e=t.options,n=t.scales||{},i=[],a=Object.keys(n).reduce((function(t,e){return t[e]=!1,t}),{});e.scales&&(i=i.concat((e.scales.xAxes||[]).map((function(t){return{options:t,dtype:"category",dposition:"bottom"}})),(e.scales.yAxes||[]).map((function(t){return{options:t,dtype:"linear",dposition:"left"}})))),e.scale&&i.push({options:e.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),H.each(i,(function(e){var i=e.options,r=i.id,o=Ge(i.type,e.dtype);Je(i.position)!==Je(e.dposition)&&(i.position=e.dposition),a[r]=!0;var s=null;if(r in n&&n[r].type===o)(s=n[r]).options=i,s.ctx=t.ctx,s.chart=t;else{var l=Re.getScaleConstructor(o);if(!l)return;s=new l({id:r,type:o,options:i,ctx:t.ctx,chart:t}),n[s.id]=s}s.mergeTicksOptions(),e.isDefault&&(t.scale=s)})),H.each(a,(function(t,e){t||delete n[e]})),t.scales=n,Re.addScalesToLayout(this)},buildOrUpdateControllers:function(){var t,e,n=this,i=[],a=n.data.datasets;for(t=0,e=a.length;t<e;t++){var r=a[t],o=n.getDatasetMeta(t),s=r.type||n.config.type;if(o.type&&o.type!==s&&(n.destroyDatasetMeta(t),o=n.getDatasetMeta(t)),o.type=s,o.order=r.order||0,o.index=t,o.controller)o.controller.updateIndex(t),o.controller.linkScales();else{var l=Jt[o.type];if(void 0===l)throw new Error('"'+o.type+'" is not a chart type.');o.controller=new l(n,t),i.push(o.controller)}}return i},resetElements:function(){var t=this;H.each(t.data.datasets,(function(e,n){t.getDatasetMeta(n).controller.reset()}),t)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(t){var e,n,i=this;if(t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]}),Ze(i),Le._invalidate(i),!1!==Le.notify(i,"beforeUpdate")){i.tooltip._data=i.data;var a=i.buildOrUpdateControllers();for(e=0,n=i.data.datasets.length;e<n;e++)i.getDatasetMeta(e).controller.buildOrUpdateElements();i.updateLayout(),i.options.animation&&i.options.animation.duration&&H.each(a,(function(t){t.reset()})),i.updateDatasets(),i.tooltip.initialize(),i.lastActive=[],Le.notify(i,"afterUpdate"),i._layers.sort(Qe("z","_idx")),i._bufferedRender?i._bufferedRequest={duration:t.duration,easing:t.easing,lazy:t.lazy}:i.render(t)}},updateLayout:function(){var t=this;!1!==Le.notify(t,"beforeLayout")&&(pe.update(this,this.width,this.height),t._layers=[],H.each(t.boxes,(function(e){e._configure&&e._configure(),t._layers.push.apply(t._layers,e._layers())}),t),t._layers.forEach((function(t,e){t._idx=e})),Le.notify(t,"afterScaleUpdate"),Le.notify(t,"afterLayout"))},updateDatasets:function(){if(!1!==Le.notify(this,"beforeDatasetsUpdate")){for(var t=0,e=this.data.datasets.length;t<e;++t)this.updateDataset(t);Le.notify(this,"afterDatasetsUpdate")}},updateDataset:function(t){var e=this.getDatasetMeta(t),n={meta:e,index:t};!1!==Le.notify(this,"beforeDatasetUpdate",[n])&&(e.controller._update(),Le.notify(this,"afterDatasetUpdate",[n]))},render:function(t){var e=this;t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]});var n=e.options.animation,i=Ge(t.duration,n&&n.duration),a=t.lazy;if(!1!==Le.notify(e,"beforeRender")){var r=function(t){Le.notify(e,"afterRender"),H.callback(n&&n.onComplete,[t],e)};if(n&&i){var o=new $({numSteps:i/16.66,easing:t.easing||n.easing,render:function(t,e){var n=H.easing.effects[e.easing],i=e.currentStep,a=i/e.numSteps;t.draw(n(a),a,i)},onAnimationProgress:n.onProgress,onAnimationComplete:r});J.addAnimation(e,o,i,a)}else e.draw(),r(new $({numSteps:0,chart:e}));return e}},draw:function(t){var e,n,i=this;if(i.clear(),H.isNullOrUndef(t)&&(t=1),i.transition(t),!(i.width<=0||i.height<=0)&&!1!==Le.notify(i,"beforeDraw",[t])){for(n=i._layers,e=0;e<n.length&&n[e].z<=0;++e)n[e].draw(i.chartArea);for(i.drawDatasets(t);e<n.length;++e)n[e].draw(i.chartArea);i._drawTooltip(t),Le.notify(i,"afterDraw",[t])}},transition:function(t){for(var e=0,n=(this.data.datasets||[]).length;e<n;++e)this.isDatasetVisible(e)&&this.getDatasetMeta(e).controller.transition(t);this.tooltip.transition(t)},_getSortedDatasetMetas:function(t){var e,n,i=[];for(e=0,n=(this.data.datasets||[]).length;e<n;++e)t&&!this.isDatasetVisible(e)||i.push(this.getDatasetMeta(e));return i.sort(Qe("order","index")),i},_getSortedVisibleDatasetMetas:function(){return this._getSortedDatasetMetas(!0)},drawDatasets:function(t){var e,n;if(!1!==Le.notify(this,"beforeDatasetsDraw",[t])){for(n=(e=this._getSortedVisibleDatasetMetas()).length-1;n>=0;--n)this.drawDataset(e[n],t);Le.notify(this,"afterDatasetsDraw",[t])}},drawDataset:function(t,e){var n={meta:t,index:t.index,easingValue:e};!1!==Le.notify(this,"beforeDatasetDraw",[n])&&(t.controller.draw(e),Le.notify(this,"afterDatasetDraw",[n]))},_drawTooltip:function(t){var e=this.tooltip,n={tooltip:e,easingValue:t};!1!==Le.notify(this,"beforeTooltipDraw",[n])&&(e.draw(),Le.notify(this,"afterTooltipDraw",[n]))},getElementAtEvent:function(t){return re.modes.single(this,t)},getElementsAtEvent:function(t){return re.modes.label(this,t,{intersect:!0})},getElementsAtXAxis:function(t){return re.modes["x-axis"](this,t,{intersect:!0})},getElementsAtEventForMode:function(t,e,n){var i=re.modes[e];return"function"==typeof i?i(this,t,n):[]},getDatasetAtEvent:function(t){return re.modes.dataset(this,t,{intersect:!0})},getDatasetMeta:function(t){var e=this.data.datasets[t];e._meta||(e._meta={});var n=e._meta[this.id];return n||(n=e._meta[this.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e.order||0,index:t}),n},getVisibleDatasetCount:function(){for(var t=0,e=0,n=this.data.datasets.length;e<n;++e)this.isDatasetVisible(e)&&t++;return t},isDatasetVisible:function(t){var e=this.getDatasetMeta(t);return"boolean"==typeof e.hidden?!e.hidden:!this.data.datasets[t].hidden},generateLegend:function(){return this.options.legendCallback(this)},destroyDatasetMeta:function(t){var e=this.id,n=this.data.datasets[t],i=n._meta&&n._meta[e];i&&(i.controller.destroy(),delete n._meta[e])},destroy:function(){var t,e,n=this,i=n.canvas;for(n.stop(),t=0,e=n.data.datasets.length;t<e;++t)n.destroyDatasetMeta(t);i&&(n.unbindEvents(),H.canvas.clear(n),Oe.releaseContext(n.ctx),n.canvas=null,n.ctx=null),Le.notify(n,"destroy"),delete tn.instances[n.id]},toBase64Image:function(){return this.canvas.toDataURL.apply(this.canvas,arguments)},initToolTip:function(){var t=this;t.tooltip=new Ye({_chart:t,_chartInstance:t,_data:t.data,_options:t.options.tooltips},t)},bindEvents:function(){var t=this,e=t._listeners={},n=function(){t.eventHandler.apply(t,arguments)};H.each(t.options.events,(function(i){Oe.addEventListener(t,i,n),e[i]=n})),t.options.responsive&&(n=function(){t.resize()},Oe.addEventListener(t,"resize",n),e.resize=n)},unbindEvents:function(){var t=this,e=t._listeners;e&&(delete t._listeners,H.each(e,(function(e,n){Oe.removeEventListener(t,n,e)})))},updateHoverStyle:function(t,e,n){var i,a,r,o=n?"set":"remove";for(a=0,r=t.length;a<r;++a)(i=t[a])&&this.getDatasetMeta(i._datasetIndex).controller[o+"HoverStyle"](i);"dataset"===e&&this.getDatasetMeta(t[0]._datasetIndex).controller["_"+o+"DatasetHoverStyle"]()},eventHandler:function(t){var e=this,n=e.tooltip;if(!1!==Le.notify(e,"beforeEvent",[t])){e._bufferedRender=!0,e._bufferedRequest=null;var i=e.handleEvent(t);n&&(i=n._start?n.handleEvent(t):i|n.handleEvent(t)),Le.notify(e,"afterEvent",[t]);var a=e._bufferedRequest;return a?e.render(a):i&&!e.animating&&(e.stop(),e.render({duration:e.options.hover.animationDuration,lazy:!0})),e._bufferedRender=!1,e._bufferedRequest=null,e}},handleEvent:function(t){var e,n=this,i=n.options||{},a=i.hover;return n.lastActive=n.lastActive||[],"mouseout"===t.type?n.active=[]:n.active=n.getElementsAtEventForMode(t,a.mode,a),H.callback(i.onHover||i.hover.onHover,[t.native,n.active],n),"mouseup"!==t.type&&"click"!==t.type||i.onClick&&i.onClick.call(n,t.native,n.active),n.lastActive.length&&n.updateHoverStyle(n.lastActive,a.mode,!1),n.active.length&&a.mode&&n.updateHoverStyle(n.active,a.mode,!0),e=!H.arrayEquals(n.active,n.lastActive),n.lastActive=n.active,e}}),tn.instances={};var en=tn;tn.Controller=tn,tn.types={},H.configMerge=Ke,H.scaleMerge=Xe;function nn(){throw new Error("This method is not implemented: either no adapter can be found or an incomplete integration was provided.")}function an(t){this.options=t||{}}H.extend(an.prototype,{formats:nn,parse:nn,format:nn,add:nn,diff:nn,startOf:nn,endOf:nn,_create:function(t){return t}}),an.override=function(t){H.extend(an.prototype,t)};var rn={_date:an},on={formatters:{values:function(t){return H.isArray(t)?t:""+t},linear:function(t,e,n){var i=n.length>3?n[2]-n[1]:n[1]-n[0];Math.abs(i)>1&&t!==Math.floor(t)&&(i=t-Math.floor(t));var a=H.log10(Math.abs(i)),r="";if(0!==t)if(Math.max(Math.abs(n[0]),Math.abs(n[n.length-1]))<1e-4){var o=H.log10(Math.abs(t)),s=Math.floor(o)-Math.floor(a);s=Math.max(Math.min(s,20),0),r=t.toExponential(s)}else{var l=-1*Math.floor(a);l=Math.max(Math.min(l,20),0),r=t.toFixed(l)}else r="0";return r},logarithmic:function(t,e,n){var i=t/Math.pow(10,Math.floor(H.log10(t)));return 0===t?"0":1===i||2===i||5===i||0===e||e===n.length-1?t.toExponential():""}}},sn=H.isArray,ln=H.isNullOrUndef,un=H.valueOrDefault,dn=H.valueAtIndexOrDefault;function hn(t,e,n){var i,a=t.getTicks().length,r=Math.min(e,a-1),o=t.getPixelForTick(r),s=t._startPixel,l=t._endPixel;if(!(n&&(i=1===a?Math.max(o-s,l-o):0===e?(t.getPixelForTick(1)-o)/2:(o-t.getPixelForTick(r-1))/2,(o+=r<e?i:-i)<s-1e-6||o>l+1e-6)))return o}function cn(t,e,n,i){var a,r,o,s,l,u,d,h,c,f,g,p,m,v=n.length,b=[],x=[],y=[],_=0,k=0;for(a=0;a<v;++a){if(s=n[a].label,l=n[a].major?e.major:e.minor,t.font=u=l.string,d=i[u]=i[u]||{data:{},gc:[]},h=l.lineHeight,c=f=0,ln(s)||sn(s)){if(sn(s))for(r=0,o=s.length;r<o;++r)g=s[r],ln(g)||sn(g)||(c=H.measureText(t,d.data,d.gc,c,g),f+=h)}else c=H.measureText(t,d.data,d.gc,c,s),f=h;b.push(c),x.push(f),y.push(h/2),_=Math.max(c,_),k=Math.max(f,k)}function w(t){return{width:b[t]||0,height:x[t]||0,offset:y[t]||0}}return function(t,e){H.each(t,(function(t){var n,i=t.gc,a=i.length/2;if(a>e){for(n=0;n<a;++n)delete t.data[i[n]];i.splice(0,a)}}))}(i,v),p=b.indexOf(_),m=x.indexOf(k),{first:w(0),last:w(v-1),widest:w(p),highest:w(m)}}function fn(t){return t.drawTicks?t.tickMarkLength:0}function gn(t){var e,n;return t.display?(e=H.options._parseFont(t),n=H.options.toPadding(t.padding),e.lineHeight+n.height):0}function pn(t,e){return H.extend(H.options._parseFont({fontFamily:un(e.fontFamily,t.fontFamily),fontSize:un(e.fontSize,t.fontSize),fontStyle:un(e.fontStyle,t.fontStyle),lineHeight:un(e.lineHeight,t.lineHeight)}),{color:H.options.resolve([e.fontColor,t.fontColor,N.global.defaultFontColor])})}function mn(t){var e=pn(t,t.minor);return{minor:e,major:t.major.enabled?pn(t,t.major):e}}function vn(t){var e,n,i,a=[];for(n=0,i=t.length;n<i;++n)void 0!==(e=t[n])._index&&a.push(e);return a}function bn(t,e,n,i){var a,r,o,s,l=un(n,0),u=Math.min(un(i,t.length),t.length),d=0;for(e=Math.ceil(e),i&&(e=(a=i-n)/Math.floor(a/e)),s=l;s<0;)d++,s=Math.round(l+d*e);for(r=Math.max(l,0);r<u;r++)o=t[r],r===s?(o._index=r,d++,s=Math.round(l+d*e)):delete o.label}N._set("scale",{display:!0,position:"left",offset:!1,gridLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:"rgba(0,0,0,0.25)",zeroLineBorderDash:[],zeroLineBorderDashOffset:0,offsetGridLines:!1,borderDash:[],borderDashOffset:0},scaleLabel:{display:!1,labelString:"",padding:{top:4,bottom:4}},ticks:{beginAtZero:!1,minRotation:0,maxRotation:50,mirror:!1,padding:0,reverse:!1,display:!0,autoSkip:!0,autoSkipPadding:0,labelOffset:0,callback:on.formatters.values,minor:{},major:{}}});var xn=K.extend({zeroLineIndex:0,getPadding:function(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}},getTicks:function(){return this._ticks},_getLabels:function(){var t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]},mergeTicksOptions:function(){},beforeUpdate:function(){H.callback(this.options.beforeUpdate,[this])},update:function(t,e,n){var i,a,r,o,s,l=this,u=l.options.ticks,d=u.sampleSize;if(l.beforeUpdate(),l.maxWidth=t,l.maxHeight=e,l.margins=H.extend({left:0,right:0,top:0,bottom:0},n),l._ticks=null,l.ticks=null,l._labelSizes=null,l._maxLabelLines=0,l.longestLabelWidth=0,l.longestTextCache=l.longestTextCache||{},l._gridLineItems=null,l._labelItems=null,l.beforeSetDimensions(),l.setDimensions(),l.afterSetDimensions(),l.beforeDataLimits(),l.determineDataLimits(),l.afterDataLimits(),l.beforeBuildTicks(),o=l.buildTicks()||[],(!(o=l.afterBuildTicks(o)||o)||!o.length)&&l.ticks)for(o=[],i=0,a=l.ticks.length;i<a;++i)o.push({value:l.ticks[i],major:!1});return l._ticks=o,s=d<o.length,r=l._convertTicksToLabels(s?function(t,e){for(var n=[],i=t.length/e,a=0,r=t.length;a<r;a+=i)n.push(t[Math.floor(a)]);return n}(o,d):o),l._configure(),l.beforeCalculateTickRotation(),l.calculateTickRotation(),l.afterCalculateTickRotation(),l.beforeFit(),l.fit(),l.afterFit(),l._ticksToDraw=u.display&&(u.autoSkip||"auto"===u.source)?l._autoSkip(o):o,s&&(r=l._convertTicksToLabels(l._ticksToDraw)),l.ticks=r,l.afterUpdate(),l.minSize},_configure:function(){var t,e,n=this,i=n.options.ticks.reverse;n.isHorizontal()?(t=n.left,e=n.right):(t=n.top,e=n.bottom,i=!i),n._startPixel=t,n._endPixel=e,n._reversePixels=i,n._length=e-t},afterUpdate:function(){H.callback(this.options.afterUpdate,[this])},beforeSetDimensions:function(){H.callback(this.options.beforeSetDimensions,[this])},setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0},afterSetDimensions:function(){H.callback(this.options.afterSetDimensions,[this])},beforeDataLimits:function(){H.callback(this.options.beforeDataLimits,[this])},determineDataLimits:H.noop,afterDataLimits:function(){H.callback(this.options.afterDataLimits,[this])},beforeBuildTicks:function(){H.callback(this.options.beforeBuildTicks,[this])},buildTicks:H.noop,afterBuildTicks:function(t){var e=this;return sn(t)&&t.length?H.callback(e.options.afterBuildTicks,[e,t]):(e.ticks=H.callback(e.options.afterBuildTicks,[e,e.ticks])||e.ticks,t)},beforeTickToLabelConversion:function(){H.callback(this.options.beforeTickToLabelConversion,[this])},convertTicksToLabels:function(){var t=this.options.ticks;this.ticks=this.ticks.map(t.userCallback||t.callback,this)},afterTickToLabelConversion:function(){H.callback(this.options.afterTickToLabelConversion,[this])},beforeCalculateTickRotation:function(){H.callback(this.options.beforeCalculateTickRotation,[this])},calculateTickRotation:function(){var t,e,n,i,a,r,o,s=this,l=s.options,u=l.ticks,d=s.getTicks().length,h=u.minRotation||0,c=u.maxRotation,f=h;!s._isVisible()||!u.display||h>=c||d<=1||!s.isHorizontal()?s.labelRotation=h:(e=(t=s._getLabelSizes()).widest.width,n=t.highest.height-t.highest.offset,i=Math.min(s.maxWidth,s.chart.width-e),e+6>(a=l.offset?s.maxWidth/d:i/(d-1))&&(a=i/(d-(l.offset?.5:1)),r=s.maxHeight-fn(l.gridLines)-u.padding-gn(l.scaleLabel),o=Math.sqrt(e*e+n*n),f=H.toDegrees(Math.min(Math.asin(Math.min((t.highest.height+6)/a,1)),Math.asin(Math.min(r/o,1))-Math.asin(n/o))),f=Math.max(h,Math.min(c,f))),s.labelRotation=f)},afterCalculateTickRotation:function(){H.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){H.callback(this.options.beforeFit,[this])},fit:function(){var t=this,e=t.minSize={width:0,height:0},n=t.chart,i=t.options,a=i.ticks,r=i.scaleLabel,o=i.gridLines,s=t._isVisible(),l="bottom"===i.position,u=t.isHorizontal();if(u?e.width=t.maxWidth:s&&(e.width=fn(o)+gn(r)),u?s&&(e.height=fn(o)+gn(r)):e.height=t.maxHeight,a.display&&s){var d=mn(a),h=t._getLabelSizes(),c=h.first,f=h.last,g=h.widest,p=h.highest,m=.4*d.minor.lineHeight,v=a.padding;if(u){var b=0!==t.labelRotation,x=H.toRadians(t.labelRotation),y=Math.cos(x),_=Math.sin(x),k=_*g.width+y*(p.height-(b?p.offset:0))+(b?0:m);e.height=Math.min(t.maxHeight,e.height+k+v);var w,M,S=t.getPixelForTick(0)-t.left,C=t.right-t.getPixelForTick(t.getTicks().length-1);b?(w=l?y*c.width+_*c.offset:_*(c.height-c.offset),M=l?_*(f.height-f.offset):y*f.width+_*f.offset):(w=c.width/2,M=f.width/2),t.paddingLeft=Math.max((w-S)*t.width/(t.width-S),0)+3,t.paddingRight=Math.max((M-C)*t.width/(t.width-C),0)+3}else{var P=a.mirror?0:g.width+v+m;e.width=Math.min(t.maxWidth,e.width+P),t.paddingTop=c.height/2,t.paddingBottom=f.height/2}}t.handleMargins(),u?(t.width=t._length=n.width-t.margins.left-t.margins.right,t.height=e.height):(t.width=e.width,t.height=t._length=n.height-t.margins.top-t.margins.bottom)},handleMargins:function(){var t=this;t.margins&&(t.margins.left=Math.max(t.paddingLeft,t.margins.left),t.margins.top=Math.max(t.paddingTop,t.margins.top),t.margins.right=Math.max(t.paddingRight,t.margins.right),t.margins.bottom=Math.max(t.paddingBottom,t.margins.bottom))},afterFit:function(){H.callback(this.options.afterFit,[this])},isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(t){if(ln(t))return NaN;if(("number"==typeof t||t instanceof Number)&&!isFinite(t))return NaN;if(t)if(this.isHorizontal()){if(void 0!==t.x)return this.getRightValue(t.x)}else if(void 0!==t.y)return this.getRightValue(t.y);return t},_convertTicksToLabels:function(t){var e,n,i,a=this;for(a.ticks=t.map((function(t){return t.value})),a.beforeTickToLabelConversion(),e=a.convertTicksToLabels(t)||a.ticks,a.afterTickToLabelConversion(),n=0,i=t.length;n<i;++n)t[n].label=e[n];return e},_getLabelSizes:function(){var t=this,e=t._labelSizes;return e||(t._labelSizes=e=cn(t.ctx,mn(t.options.ticks),t.getTicks(),t.longestTextCache),t.longestLabelWidth=e.widest.width),e},_parseValue:function(t){var e,n,i,a;return sn(t)?(e=+this.getRightValue(t[0]),n=+this.getRightValue(t[1]),i=Math.min(e,n),a=Math.max(e,n)):(e=void 0,n=t=+this.getRightValue(t),i=t,a=t),{min:i,max:a,start:e,end:n}},_getScaleLabel:function(t){var e=this._parseValue(t);return void 0!==e.start?"["+e.start+", "+e.end+"]":+this.getRightValue(t)},getLabelForIndex:H.noop,getPixelForValue:H.noop,getValueForPixel:H.noop,getPixelForTick:function(t){var e=this.options.offset,n=this._ticks.length,i=1/Math.max(n-(e?0:1),1);return t<0||t>n-1?null:this.getPixelForDecimal(t*i+(e?i/2:0))},getPixelForDecimal:function(t){return this._reversePixels&&(t=1-t),this._startPixel+t*this._length},getDecimalForPixel:function(t){var e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var t=this.min,e=this.max;return this.beginAtZero?0:t<0&&e<0?e:t>0&&e>0?t:0},_autoSkip:function(t){var e,n,i,a,r=this.options.ticks,o=this._length,s=r.maxTicksLimit||o/this._tickSize()+1,l=r.major.enabled?function(t){var e,n,i=[];for(e=0,n=t.length;e<n;e++)t[e].major&&i.push(e);return i}(t):[],u=l.length,d=l[0],h=l[u-1];if(u>s)return function(t,e,n){var i,a,r=0,o=e[0];for(n=Math.ceil(n),i=0;i<t.length;i++)a=t[i],i===o?(a._index=i,o=e[++r*n]):delete a.label}(t,l,u/s),vn(t);if(i=function(t,e,n,i){var a,r,o,s,l=function(t){var e,n,i=t.length;if(i<2)return!1;for(n=t[0],e=1;e<i;++e)if(t[e]-t[e-1]!==n)return!1;return n}(t),u=(e.length-1)/i;if(!l)return Math.max(u,1);for(o=0,s=(a=H.math._factorize(l)).length-1;o<s;o++)if((r=a[o])>u)return r;return Math.max(u,1)}(l,t,0,s),u>0){for(e=0,n=u-1;e<n;e++)bn(t,i,l[e],l[e+1]);return a=u>1?(h-d)/(u-1):null,bn(t,i,H.isNullOrUndef(a)?0:d-a,d),bn(t,i,h,H.isNullOrUndef(a)?t.length:h+a),vn(t)}return bn(t,i),vn(t)},_tickSize:function(){var t=this.options.ticks,e=H.toRadians(this.labelRotation),n=Math.abs(Math.cos(e)),i=Math.abs(Math.sin(e)),a=this._getLabelSizes(),r=t.autoSkipPadding||0,o=a?a.widest.width+r:0,s=a?a.highest.height+r:0;return this.isHorizontal()?s*n>o*i?o/n:s/i:s*i<o*n?s/n:o/i},_isVisible:function(){var t,e,n,i=this.chart,a=this.options.display;if("auto"!==a)return!!a;for(t=0,e=i.data.datasets.length;t<e;++t)if(i.isDatasetVisible(t)&&((n=i.getDatasetMeta(t)).xAxisID===this.id||n.yAxisID===this.id))return!0;return!1},_computeGridLineItems:function(t){var e,n,i,a,r,o,s,l,u,d,h,c,f,g,p,m,v,b=this,x=b.chart,y=b.options,_=y.gridLines,k=y.position,w=_.offsetGridLines,M=b.isHorizontal(),S=b._ticksToDraw,C=S.length+(w?1:0),P=fn(_),A=[],D=_.drawBorder?dn(_.lineWidth,0,0):0,T=D/2,I=H._alignPixel,F=function(t){return I(x,t,D)};for("top"===k?(e=F(b.bottom),s=b.bottom-P,u=e-T,h=F(t.top)+T,f=t.bottom):"bottom"===k?(e=F(b.top),h=t.top,f=F(t.bottom)-T,s=e+T,u=b.top+P):"left"===k?(e=F(b.right),o=b.right-P,l=e-T,d=F(t.left)+T,c=t.right):(e=F(b.left),d=t.left,c=F(t.right)-T,o=e+T,l=b.left+P),n=0;n<C;++n)i=S[n]||{},ln(i.label)&&n<S.length||(n===b.zeroLineIndex&&y.offset===w?(g=_.zeroLineWidth,p=_.zeroLineColor,m=_.zeroLineBorderDash||[],v=_.zeroLineBorderDashOffset||0):(g=dn(_.lineWidth,n,1),p=dn(_.color,n,"rgba(0,0,0,0.1)"),m=_.borderDash||[],v=_.borderDashOffset||0),void 0!==(a=hn(b,i._index||n,w))&&(r=I(x,a,g),M?o=l=d=c=r:s=u=h=f=r,A.push({tx1:o,ty1:s,tx2:l,ty2:u,x1:d,y1:h,x2:c,y2:f,width:g,color:p,borderDash:m,borderDashOffset:v})));return A.ticksLength=C,A.borderValue=e,A},_computeLabelItems:function(){var t,e,n,i,a,r,o,s,l,u,d,h,c=this,f=c.options,g=f.ticks,p=f.position,m=g.mirror,v=c.isHorizontal(),b=c._ticksToDraw,x=mn(g),y=g.padding,_=fn(f.gridLines),k=-H.toRadians(c.labelRotation),w=[];for("top"===p?(r=c.bottom-_-y,o=k?"left":"center"):"bottom"===p?(r=c.top+_+y,o=k?"right":"center"):"left"===p?(a=c.right-(m?0:_)-y,o=m?"left":"right"):(a=c.left+(m?0:_)+y,o=m?"right":"left"),t=0,e=b.length;t<e;++t)i=(n=b[t]).label,ln(i)||(s=c.getPixelForTick(n._index||t)+g.labelOffset,u=(l=n.major?x.major:x.minor).lineHeight,d=sn(i)?i.length:1,v?(a=s,h="top"===p?((k?1:.5)-d)*u:(k?0:.5)*u):(r=s,h=(1-d)*u/2),w.push({x:a,y:r,rotation:k,label:i,font:l,textOffset:h,textAlign:o}));return w},_drawGrid:function(t){var e=this,n=e.options.gridLines;if(n.display){var i,a,r,o,s,l=e.ctx,u=e.chart,d=H._alignPixel,h=n.drawBorder?dn(n.lineWidth,0,0):0,c=e._gridLineItems||(e._gridLineItems=e._computeGridLineItems(t));for(r=0,o=c.length;r<o;++r)i=(s=c[r]).width,a=s.color,i&&a&&(l.save(),l.lineWidth=i,l.strokeStyle=a,l.setLineDash&&(l.setLineDash(s.borderDash),l.lineDashOffset=s.borderDashOffset),l.beginPath(),n.drawTicks&&(l.moveTo(s.tx1,s.ty1),l.lineTo(s.tx2,s.ty2)),n.drawOnChartArea&&(l.moveTo(s.x1,s.y1),l.lineTo(s.x2,s.y2)),l.stroke(),l.restore());if(h){var f,g,p,m,v=h,b=dn(n.lineWidth,c.ticksLength-1,1),x=c.borderValue;e.isHorizontal()?(f=d(u,e.left,v)-v/2,g=d(u,e.right,b)+b/2,p=m=x):(p=d(u,e.top,v)-v/2,m=d(u,e.bottom,b)+b/2,f=g=x),l.lineWidth=h,l.strokeStyle=dn(n.color,0),l.beginPath(),l.moveTo(f,p),l.lineTo(g,m),l.stroke()}}},_drawLabels:function(){var t=this;if(t.options.ticks.display){var e,n,i,a,r,o,s,l,u=t.ctx,d=t._labelItems||(t._labelItems=t._computeLabelItems());for(e=0,i=d.length;e<i;++e){if(o=(r=d[e]).font,u.save(),u.translate(r.x,r.y),u.rotate(r.rotation),u.font=o.string,u.fillStyle=o.color,u.textBaseline="middle",u.textAlign=r.textAlign,s=r.label,l=r.textOffset,sn(s))for(n=0,a=s.length;n<a;++n)u.fillText(""+s[n],0,l),l+=o.lineHeight;else u.fillText(s,0,l);u.restore()}}},_drawTitle:function(){var t=this,e=t.ctx,n=t.options,i=n.scaleLabel;if(i.display){var a,r,o=un(i.fontColor,N.global.defaultFontColor),s=H.options._parseFont(i),l=H.options.toPadding(i.padding),u=s.lineHeight/2,d=n.position,h=0;if(t.isHorizontal())a=t.left+t.width/2,r="bottom"===d?t.bottom-u-l.bottom:t.top+u+l.top;else{var c="left"===d;a=c?t.left+u+l.top:t.right-u-l.top,r=t.top+t.height/2,h=c?-.5*Math.PI:.5*Math.PI}e.save(),e.translate(a,r),e.rotate(h),e.textAlign="center",e.textBaseline="middle",e.fillStyle=o,e.font=s.string,e.fillText(i.labelString,0,0),e.restore()}},draw:function(t){this._isVisible()&&(this._drawGrid(t),this._drawTitle(),this._drawLabels())},_layers:function(){var t=this,e=t.options,n=e.ticks&&e.ticks.z||0,i=e.gridLines&&e.gridLines.z||0;return t._isVisible()&&n!==i&&t.draw===t._draw?[{z:i,draw:function(){t._drawGrid.apply(t,arguments),t._drawTitle.apply(t,arguments)}},{z:n,draw:function(){t._drawLabels.apply(t,arguments)}}]:[{z:n,draw:function(){t.draw.apply(t,arguments)}}]},_getMatchingVisibleMetas:function(t){var e=this,n=e.isHorizontal();return e.chart._getSortedVisibleDatasetMetas().filter((function(i){return(!t||i.type===t)&&(n?i.xAxisID===e.id:i.yAxisID===e.id)}))}});xn.prototype._draw=xn.prototype.draw;var yn=xn,_n=H.isNullOrUndef,kn=yn.extend({determineDataLimits:function(){var t,e=this,n=e._getLabels(),i=e.options.ticks,a=i.min,r=i.max,o=0,s=n.length-1;void 0!==a&&(t=n.indexOf(a))>=0&&(o=t),void 0!==r&&(t=n.indexOf(r))>=0&&(s=t),e.minIndex=o,e.maxIndex=s,e.min=n[o],e.max=n[s]},buildTicks:function(){var t=this._getLabels(),e=this.minIndex,n=this.maxIndex;this.ticks=0===e&&n===t.length-1?t:t.slice(e,n+1)},getLabelForIndex:function(t,e){var n=this.chart;return n.getDatasetMeta(e).controller._getValueScaleId()===this.id?this.getRightValue(n.data.datasets[e].data[t]):this._getLabels()[t]},_configure:function(){var t=this,e=t.options.offset,n=t.ticks;yn.prototype._configure.call(t),t.isHorizontal()||(t._reversePixels=!t._reversePixels),n&&(t._startValue=t.minIndex-(e?.5:0),t._valueRange=Math.max(n.length-(e?0:1),1))},getPixelForValue:function(t,e,n){var i,a,r,o=this;return _n(e)||_n(n)||(t=o.chart.data.datasets[n].data[e]),_n(t)||(i=o.isHorizontal()?t.x:t.y),(void 0!==i||void 0!==t&&isNaN(e))&&(a=o._getLabels(),t=H.valueOrDefault(i,t),e=-1!==(r=a.indexOf(t))?r:e,isNaN(e)&&(e=t)),o.getPixelForDecimal((e-o._startValue)/o._valueRange)},getPixelForTick:function(t){var e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t],t+this.minIndex)},getValueForPixel:function(t){var e=Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange);return Math.min(Math.max(e,0),this.ticks.length-1)},getBasePixel:function(){return this.bottom}}),wn={position:"bottom"};kn._defaults=wn;var Mn=H.noop,Sn=H.isNullOrUndef;var Cn=yn.extend({getRightValue:function(t){return"string"==typeof t?+t:yn.prototype.getRightValue.call(this,t)},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;if(e.beginAtZero){var n=H.sign(t.min),i=H.sign(t.max);n<0&&i<0?t.max=0:n>0&&i>0&&(t.min=0)}var a=void 0!==e.min||void 0!==e.suggestedMin,r=void 0!==e.max||void 0!==e.suggestedMax;void 0!==e.min?t.min=e.min:void 0!==e.suggestedMin&&(null===t.min?t.min=e.suggestedMin:t.min=Math.min(t.min,e.suggestedMin)),void 0!==e.max?t.max=e.max:void 0!==e.suggestedMax&&(null===t.max?t.max=e.suggestedMax:t.max=Math.max(t.max,e.suggestedMax)),a!==r&&t.min>=t.max&&(a?t.max=t.min+1:t.min=t.max-1),t.min===t.max&&(t.max++,e.beginAtZero||t.min--)},getTickLimit:function(){var t,e=this.options.ticks,n=e.stepSize,i=e.maxTicksLimit;return n?t=Math.ceil(this.max/n)-Math.floor(this.min/n)+1:(t=this._computeTickLimit(),i=i||11),i&&(t=Math.min(i,t)),t},_computeTickLimit:function(){return Number.POSITIVE_INFINITY},handleDirectionalChanges:Mn,buildTicks:function(){var t=this,e=t.options.ticks,n=t.getTickLimit(),i={maxTicks:n=Math.max(2,n),min:e.min,max:e.max,precision:e.precision,stepSize:H.valueOrDefault(e.fixedStepSize,e.stepSize)},a=t.ticks=function(t,e){var n,i,a,r,o=[],s=t.stepSize,l=s||1,u=t.maxTicks-1,d=t.min,h=t.max,c=t.precision,f=e.min,g=e.max,p=H.niceNum((g-f)/u/l)*l;if(p<1e-14&&Sn(d)&&Sn(h))return[f,g];(r=Math.ceil(g/p)-Math.floor(f/p))>u&&(p=H.niceNum(r*p/u/l)*l),s||Sn(c)?n=Math.pow(10,H._decimalPlaces(p)):(n=Math.pow(10,c),p=Math.ceil(p*n)/n),i=Math.floor(f/p)*p,a=Math.ceil(g/p)*p,s&&(!Sn(d)&&H.almostWhole(d/p,p/1e3)&&(i=d),!Sn(h)&&H.almostWhole(h/p,p/1e3)&&(a=h)),r=(a-i)/p,r=H.almostEquals(r,Math.round(r),p/1e3)?Math.round(r):Math.ceil(r),i=Math.round(i*n)/n,a=Math.round(a*n)/n,o.push(Sn(d)?i:d);for(var m=1;m<r;++m)o.push(Math.round((i+m*p)*n)/n);return o.push(Sn(h)?a:h),o}(i,t);t.handleDirectionalChanges(),t.max=H.max(a),t.min=H.min(a),e.reverse?(a.reverse(),t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max)},convertTicksToLabels:function(){var t=this;t.ticksAsNumbers=t.ticks.slice(),t.zeroLineIndex=t.ticks.indexOf(0),yn.prototype.convertTicksToLabels.call(t)},_configure:function(){var t,e=this,n=e.getTicks(),i=e.min,a=e.max;yn.prototype._configure.call(e),e.options.offset&&n.length&&(i-=t=(a-i)/Math.max(n.length-1,1)/2,a+=t),e._startValue=i,e._endValue=a,e._valueRange=a-i}}),Pn={position:"left",ticks:{callback:on.formatters.linear}};function An(t,e,n,i){var a,r,o=t.options,s=function(t,e,n){var i=[n.type,void 0===e&&void 0===n.stack?n.index:"",n.stack].join(".");return void 0===t[i]&&(t[i]={pos:[],neg:[]}),t[i]}(e,o.stacked,n),l=s.pos,u=s.neg,d=i.length;for(a=0;a<d;++a)r=t._parseValue(i[a]),isNaN(r.min)||isNaN(r.max)||n.data[a].hidden||(l[a]=l[a]||0,u[a]=u[a]||0,o.relativePoints?l[a]=100:r.min<0||r.max<0?u[a]+=r.min:l[a]+=r.max)}function Dn(t,e,n){var i,a,r=n.length;for(i=0;i<r;++i)a=t._parseValue(n[i]),isNaN(a.min)||isNaN(a.max)||e.data[i].hidden||(t.min=Math.min(t.min,a.min),t.max=Math.max(t.max,a.max))}var Tn=Cn.extend({determineDataLimits:function(){var t,e,n,i,a=this,r=a.options,o=a.chart.data.datasets,s=a._getMatchingVisibleMetas(),l=r.stacked,u={},d=s.length;if(a.min=Number.POSITIVE_INFINITY,a.max=Number.NEGATIVE_INFINITY,void 0===l)for(t=0;!l&&t<d;++t)l=void 0!==(e=s[t]).stack;for(t=0;t<d;++t)n=o[(e=s[t]).index].data,l?An(a,u,e,n):Dn(a,e,n);H.each(u,(function(t){i=t.pos.concat(t.neg),a.min=Math.min(a.min,H.min(i)),a.max=Math.max(a.max,H.max(i))})),a.min=H.isFinite(a.min)&&!isNaN(a.min)?a.min:0,a.max=H.isFinite(a.max)&&!isNaN(a.max)?a.max:1,a.handleTickRangeOptions()},_computeTickLimit:function(){var t;return this.isHorizontal()?Math.ceil(this.width/40):(t=H.options._parseFont(this.options.ticks),Math.ceil(this.height/t.lineHeight))},handleDirectionalChanges:function(){this.isHorizontal()||this.ticks.reverse()},getLabelForIndex:function(t,e){return this._getScaleLabel(this.chart.data.datasets[e].data[t])},getPixelForValue:function(t){return this.getPixelForDecimal((+this.getRightValue(t)-this._startValue)/this._valueRange)},getValueForPixel:function(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange},getPixelForTick:function(t){var e=this.ticksAsNumbers;return t<0||t>e.length-1?null:this.getPixelForValue(e[t])}}),In=Pn;Tn._defaults=In;var Fn=H.valueOrDefault,On=H.math.log10;var Ln={position:"left",ticks:{callback:on.formatters.logarithmic}};function Rn(t,e){return H.isFinite(t)&&t>=0?t:e}var zn=yn.extend({determineDataLimits:function(){var t,e,n,i,a,r,o=this,s=o.options,l=o.chart,u=l.data.datasets,d=o.isHorizontal();function h(t){return d?t.xAxisID===o.id:t.yAxisID===o.id}o.min=Number.POSITIVE_INFINITY,o.max=Number.NEGATIVE_INFINITY,o.minNotZero=Number.POSITIVE_INFINITY;var c=s.stacked;if(void 0===c)for(t=0;t<u.length;t++)if(e=l.getDatasetMeta(t),l.isDatasetVisible(t)&&h(e)&&void 0!==e.stack){c=!0;break}if(s.stacked||c){var f={};for(t=0;t<u.length;t++){var g=[(e=l.getDatasetMeta(t)).type,void 0===s.stacked&&void 0===e.stack?t:"",e.stack].join(".");if(l.isDatasetVisible(t)&&h(e))for(void 0===f[g]&&(f[g]=[]),a=0,r=(i=u[t].data).length;a<r;a++){var p=f[g];n=o._parseValue(i[a]),isNaN(n.min)||isNaN(n.max)||e.data[a].hidden||n.min<0||n.max<0||(p[a]=p[a]||0,p[a]+=n.max)}}H.each(f,(function(t){if(t.length>0){var e=H.min(t),n=H.max(t);o.min=Math.min(o.min,e),o.max=Math.max(o.max,n)}}))}else for(t=0;t<u.length;t++)if(e=l.getDatasetMeta(t),l.isDatasetVisible(t)&&h(e))for(a=0,r=(i=u[t].data).length;a<r;a++)n=o._parseValue(i[a]),isNaN(n.min)||isNaN(n.max)||e.data[a].hidden||n.min<0||n.max<0||(o.min=Math.min(n.min,o.min),o.max=Math.max(n.max,o.max),0!==n.min&&(o.minNotZero=Math.min(n.min,o.minNotZero)));o.min=H.isFinite(o.min)?o.min:null,o.max=H.isFinite(o.max)?o.max:null,o.minNotZero=H.isFinite(o.minNotZero)?o.minNotZero:null,this.handleTickRangeOptions()},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;t.min=Rn(e.min,t.min),t.max=Rn(e.max,t.max),t.min===t.max&&(0!==t.min&&null!==t.min?(t.min=Math.pow(10,Math.floor(On(t.min))-1),t.max=Math.pow(10,Math.floor(On(t.max))+1)):(t.min=1,t.max=10)),null===t.min&&(t.min=Math.pow(10,Math.floor(On(t.max))-1)),null===t.max&&(t.max=0!==t.min?Math.pow(10,Math.floor(On(t.min))+1):10),null===t.minNotZero&&(t.min>0?t.minNotZero=t.min:t.max<1?t.minNotZero=Math.pow(10,Math.floor(On(t.max))):t.minNotZero=1)},buildTicks:function(){var t=this,e=t.options.ticks,n=!t.isHorizontal(),i={min:Rn(e.min),max:Rn(e.max)},a=t.ticks=function(t,e){var n,i,a=[],r=Fn(t.min,Math.pow(10,Math.floor(On(e.min)))),o=Math.floor(On(e.max)),s=Math.ceil(e.max/Math.pow(10,o));0===r?(n=Math.floor(On(e.minNotZero)),i=Math.floor(e.minNotZero/Math.pow(10,n)),a.push(r),r=i*Math.pow(10,n)):(n=Math.floor(On(r)),i=Math.floor(r/Math.pow(10,n)));var l=n<0?Math.pow(10,Math.abs(n)):1;do{a.push(r),10===++i&&(i=1,l=++n>=0?1:l),r=Math.round(i*Math.pow(10,n)*l)/l}while(n<o||n===o&&i<s);var u=Fn(t.max,r);return a.push(u),a}(i,t);t.max=H.max(a),t.min=H.min(a),e.reverse?(n=!n,t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max),n&&a.reverse()},convertTicksToLabels:function(){this.tickValues=this.ticks.slice(),yn.prototype.convertTicksToLabels.call(this)},getLabelForIndex:function(t,e){return this._getScaleLabel(this.chart.data.datasets[e].data[t])},getPixelForTick:function(t){var e=this.tickValues;return t<0||t>e.length-1?null:this.getPixelForValue(e[t])},_getFirstTickValue:function(t){var e=Math.floor(On(t));return Math.floor(t/Math.pow(10,e))*Math.pow(10,e)},_configure:function(){var t=this,e=t.min,n=0;yn.prototype._configure.call(t),0===e&&(e=t._getFirstTickValue(t.minNotZero),n=Fn(t.options.ticks.fontSize,N.global.defaultFontSize)/t._length),t._startValue=On(e),t._valueOffset=n,t._valueRange=(On(t.max)-On(e))/(1-n)},getPixelForValue:function(t){var e=this,n=0;return(t=+e.getRightValue(t))>e.min&&t>0&&(n=(On(t)-e._startValue)/e._valueRange+e._valueOffset),e.getPixelForDecimal(n)},getValueForPixel:function(t){var e=this,n=e.getDecimalForPixel(t);return 0===n&&0===e.min?0:Math.pow(10,e._startValue+(n-e._valueOffset)*e._valueRange)}}),Nn=Ln;zn._defaults=Nn;var Bn=H.valueOrDefault,En=H.valueAtIndexOrDefault,Wn=H.options.resolve,Vn={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,borderDash:[],borderDashOffset:0},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:on.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(t){return t}}};function Hn(t){var e=t.ticks;return e.display&&t.display?Bn(e.fontSize,N.global.defaultFontSize)+2*e.backdropPaddingY:0}function jn(t,e,n,i,a){return t===i||t===a?{start:e-n/2,end:e+n/2}:t<i||t>a?{start:e-n,end:e}:{start:e,end:e+n}}function qn(t){return 0===t||180===t?"center":t<180?"left":"right"}function Un(t,e,n,i){var a,r,o=n.y+i/2;if(H.isArray(e))for(a=0,r=e.length;a<r;++a)t.fillText(e[a],n.x,o),o+=i;else t.fillText(e,n.x,o)}function Yn(t,e,n){90===t||270===t?n.y-=e.h/2:(t>270||t<90)&&(n.y-=e.h)}function Gn(t){return H.isNumber(t)?t:0}var Xn=Cn.extend({setDimensions:function(){var t=this;t.width=t.maxWidth,t.height=t.maxHeight,t.paddingTop=Hn(t.options)/2,t.xCenter=Math.floor(t.width/2),t.yCenter=Math.floor((t.height-t.paddingTop)/2),t.drawingArea=Math.min(t.height-t.paddingTop,t.width)/2},determineDataLimits:function(){var t=this,e=t.chart,n=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;H.each(e.data.datasets,(function(a,r){if(e.isDatasetVisible(r)){var o=e.getDatasetMeta(r);H.each(a.data,(function(e,a){var r=+t.getRightValue(e);isNaN(r)||o.data[a].hidden||(n=Math.min(r,n),i=Math.max(r,i))}))}})),t.min=n===Number.POSITIVE_INFINITY?0:n,t.max=i===Number.NEGATIVE_INFINITY?0:i,t.handleTickRangeOptions()},_computeTickLimit:function(){return Math.ceil(this.drawingArea/Hn(this.options))},convertTicksToLabels:function(){var t=this;Cn.prototype.convertTicksToLabels.call(t),t.pointLabels=t.chart.data.labels.map((function(){var e=H.callback(t.options.pointLabels.callback,arguments,t);return e||0===e?e:""}))},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},fit:function(){var t=this.options;t.display&&t.pointLabels.display?function(t){var e,n,i,a=H.options._parseFont(t.options.pointLabels),r={l:0,r:t.width,t:0,b:t.height-t.paddingTop},o={};t.ctx.font=a.string,t._pointLabelSizes=[];var s,l,u,d=t.chart.data.labels.length;for(e=0;e<d;e++){i=t.getPointPosition(e,t.drawingArea+5),s=t.ctx,l=a.lineHeight,u=t.pointLabels[e],n=H.isArray(u)?{w:H.longestText(s,s.font,u),h:u.length*l}:{w:s.measureText(u).width,h:l},t._pointLabelSizes[e]=n;var h=t.getIndexAngle(e),c=H.toDegrees(h)%360,f=jn(c,i.x,n.w,0,180),g=jn(c,i.y,n.h,90,270);f.start<r.l&&(r.l=f.start,o.l=h),f.end>r.r&&(r.r=f.end,o.r=h),g.start<r.t&&(r.t=g.start,o.t=h),g.end>r.b&&(r.b=g.end,o.b=h)}t.setReductions(t.drawingArea,r,o)}(this):this.setCenterPoint(0,0,0,0)},setReductions:function(t,e,n){var i=this,a=e.l/Math.sin(n.l),r=Math.max(e.r-i.width,0)/Math.sin(n.r),o=-e.t/Math.cos(n.t),s=-Math.max(e.b-(i.height-i.paddingTop),0)/Math.cos(n.b);a=Gn(a),r=Gn(r),o=Gn(o),s=Gn(s),i.drawingArea=Math.min(Math.floor(t-(a+r)/2),Math.floor(t-(o+s)/2)),i.setCenterPoint(a,r,o,s)},setCenterPoint:function(t,e,n,i){var a=this,r=a.width-e-a.drawingArea,o=t+a.drawingArea,s=n+a.drawingArea,l=a.height-a.paddingTop-i-a.drawingArea;a.xCenter=Math.floor((o+r)/2+a.left),a.yCenter=Math.floor((s+l)/2+a.top+a.paddingTop)},getIndexAngle:function(t){var e=this.chart,n=(t*(360/e.data.labels.length)+((e.options||{}).startAngle||0))%360;return(n<0?n+360:n)*Math.PI*2/360},getDistanceFromCenterForValue:function(t){var e=this;if(H.isNullOrUndef(t))return NaN;var n=e.drawingArea/(e.max-e.min);return e.options.ticks.reverse?(e.max-t)*n:(t-e.min)*n},getPointPosition:function(t,e){var n=this.getIndexAngle(t)-Math.PI/2;return{x:Math.cos(n)*e+this.xCenter,y:Math.sin(n)*e+this.yCenter}},getPointPositionForValue:function(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))},getBasePosition:function(t){var e=this.min,n=this.max;return this.getPointPositionForValue(t||0,this.beginAtZero?0:e<0&&n<0?n:e>0&&n>0?e:0)},_drawGrid:function(){var t,e,n,i=this,a=i.ctx,r=i.options,o=r.gridLines,s=r.angleLines,l=Bn(s.lineWidth,o.lineWidth),u=Bn(s.color,o.color);if(r.pointLabels.display&&function(t){var e=t.ctx,n=t.options,i=n.pointLabels,a=Hn(n),r=t.getDistanceFromCenterForValue(n.ticks.reverse?t.min:t.max),o=H.options._parseFont(i);e.save(),e.font=o.string,e.textBaseline="middle";for(var s=t.chart.data.labels.length-1;s>=0;s--){var l=0===s?a/2:0,u=t.getPointPosition(s,r+l+5),d=En(i.fontColor,s,N.global.defaultFontColor);e.fillStyle=d;var h=t.getIndexAngle(s),c=H.toDegrees(h);e.textAlign=qn(c),Yn(c,t._pointLabelSizes[s],u),Un(e,t.pointLabels[s],u,o.lineHeight)}e.restore()}(i),o.display&&H.each(i.ticks,(function(t,n){0!==n&&(e=i.getDistanceFromCenterForValue(i.ticksAsNumbers[n]),function(t,e,n,i){var a,r=t.ctx,o=e.circular,s=t.chart.data.labels.length,l=En(e.color,i-1),u=En(e.lineWidth,i-1);if((o||s)&&l&&u){if(r.save(),r.strokeStyle=l,r.lineWidth=u,r.setLineDash&&(r.setLineDash(e.borderDash||[]),r.lineDashOffset=e.borderDashOffset||0),r.beginPath(),o)r.arc(t.xCenter,t.yCenter,n,0,2*Math.PI);else{a=t.getPointPosition(0,n),r.moveTo(a.x,a.y);for(var d=1;d<s;d++)a=t.getPointPosition(d,n),r.lineTo(a.x,a.y)}r.closePath(),r.stroke(),r.restore()}}(i,o,e,n))})),s.display&&l&&u){for(a.save(),a.lineWidth=l,a.strokeStyle=u,a.setLineDash&&(a.setLineDash(Wn([s.borderDash,o.borderDash,[]])),a.lineDashOffset=Wn([s.borderDashOffset,o.borderDashOffset,0])),t=i.chart.data.labels.length-1;t>=0;t--)e=i.getDistanceFromCenterForValue(r.ticks.reverse?i.min:i.max),n=i.getPointPosition(t,e),a.beginPath(),a.moveTo(i.xCenter,i.yCenter),a.lineTo(n.x,n.y),a.stroke();a.restore()}},_drawLabels:function(){var t=this,e=t.ctx,n=t.options.ticks;if(n.display){var i,a,r=t.getIndexAngle(0),o=H.options._parseFont(n),s=Bn(n.fontColor,N.global.defaultFontColor);e.save(),e.font=o.string,e.translate(t.xCenter,t.yCenter),e.rotate(r),e.textAlign="center",e.textBaseline="middle",H.each(t.ticks,(function(r,l){(0!==l||n.reverse)&&(i=t.getDistanceFromCenterForValue(t.ticksAsNumbers[l]),n.showLabelBackdrop&&(a=e.measureText(r).width,e.fillStyle=n.backdropColor,e.fillRect(-a/2-n.backdropPaddingX,-i-o.size/2-n.backdropPaddingY,a+2*n.backdropPaddingX,o.size+2*n.backdropPaddingY)),e.fillStyle=s,e.fillText(r,0,-i))})),e.restore()}},_drawTitle:H.noop}),Kn=Vn;Xn._defaults=Kn;var Zn=H._deprecated,$n=H.options.resolve,Jn=H.valueOrDefault,Qn=Number.MIN_SAFE_INTEGER||-9007199254740991,ti=Number.MAX_SAFE_INTEGER||9007199254740991,ei={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},ni=Object.keys(ei);function ii(t,e){return t-e}function ai(t){return H.valueOrDefault(t.time.min,t.ticks.min)}function ri(t){return H.valueOrDefault(t.time.max,t.ticks.max)}function oi(t,e,n,i){var a=function(t,e,n){for(var i,a,r,o=0,s=t.length-1;o>=0&&o<=s;){if(a=t[(i=o+s>>1)-1]||null,r=t[i],!a)return{lo:null,hi:r};if(r[e]<n)o=i+1;else{if(!(a[e]>n))return{lo:a,hi:r};s=i-1}}return{lo:r,hi:null}}(t,e,n),r=a.lo?a.hi?a.lo:t[t.length-2]:t[0],o=a.lo?a.hi?a.hi:t[t.length-1]:t[1],s=o[e]-r[e],l=s?(n-r[e])/s:0,u=(o[i]-r[i])*l;return r[i]+u}function si(t,e){var n=t._adapter,i=t.options.time,a=i.parser,r=a||i.format,o=e;return"function"==typeof a&&(o=a(o)),H.isFinite(o)||(o="string"==typeof r?n.parse(o,r):n.parse(o)),null!==o?+o:(a||"function"!=typeof r||(o=r(e),H.isFinite(o)||(o=n.parse(o))),o)}function li(t,e){if(H.isNullOrUndef(e))return null;var n=t.options.time,i=si(t,t.getRightValue(e));return null===i?i:(n.round&&(i=+t._adapter.startOf(i,n.round)),i)}function ui(t,e,n,i){var a,r,o,s=ni.length;for(a=ni.indexOf(t);a<s-1;++a)if(o=(r=ei[ni[a]]).steps?r.steps:ti,r.common&&Math.ceil((n-e)/(o*r.size))<=i)return ni[a];return ni[s-1]}function di(t,e,n){var i,a,r=[],o={},s=e.length;for(i=0;i<s;++i)o[a=e[i]]=i,r.push({value:a,major:!1});return 0!==s&&n?function(t,e,n,i){var a,r,o=t._adapter,s=+o.startOf(e[0].value,i),l=e[e.length-1].value;for(a=s;a<=l;a=+o.add(a,1,i))(r=n[a])>=0&&(e[r].major=!0);return e}(t,r,o,n):r}var hi=yn.extend({initialize:function(){this.mergeTicksOptions(),yn.prototype.initialize.call(this)},update:function(){var t=this,e=t.options,n=e.time||(e.time={}),i=t._adapter=new rn._date(e.adapters.date);return Zn("time scale",n.format,"time.format","time.parser"),Zn("time scale",n.min,"time.min","ticks.min"),Zn("time scale",n.max,"time.max","ticks.max"),H.mergeIf(n.displayFormats,i.formats()),yn.prototype.update.apply(t,arguments)},getRightValue:function(t){return t&&void 0!==t.t&&(t=t.t),yn.prototype.getRightValue.call(this,t)},determineDataLimits:function(){var t,e,n,i,a,r,o,s=this,l=s.chart,u=s._adapter,d=s.options,h=d.time.unit||"day",c=ti,f=Qn,g=[],p=[],m=[],v=s._getLabels();for(t=0,n=v.length;t<n;++t)m.push(li(s,v[t]));for(t=0,n=(l.data.datasets||[]).length;t<n;++t)if(l.isDatasetVisible(t))if(a=l.data.datasets[t].data,H.isObject(a[0]))for(p[t]=[],e=0,i=a.length;e<i;++e)r=li(s,a[e]),g.push(r),p[t][e]=r;else p[t]=m.slice(0),o||(g=g.concat(m),o=!0);else p[t]=[];m.length&&(c=Math.min(c,m[0]),f=Math.max(f,m[m.length-1])),g.length&&(g=n>1?function(t){var e,n,i,a={},r=[];for(e=0,n=t.length;e<n;++e)a[i=t[e]]||(a[i]=!0,r.push(i));return r}(g).sort(ii):g.sort(ii),c=Math.min(c,g[0]),f=Math.max(f,g[g.length-1])),c=li(s,ai(d))||c,f=li(s,ri(d))||f,c=c===ti?+u.startOf(Date.now(),h):c,f=f===Qn?+u.endOf(Date.now(),h)+1:f,s.min=Math.min(c,f),s.max=Math.max(c+1,f),s._table=[],s._timestamps={data:g,datasets:p,labels:m}},buildTicks:function(){var t,e,n,i=this,a=i.min,r=i.max,o=i.options,s=o.ticks,l=o.time,u=i._timestamps,d=[],h=i.getLabelCapacity(a),c=s.source,f=o.distribution;for(u="data"===c||"auto"===c&&"series"===f?u.data:"labels"===c?u.labels:function(t,e,n,i){var a,r=t._adapter,o=t.options,s=o.time,l=s.unit||ui(s.minUnit,e,n,i),u=$n([s.stepSize,s.unitStepSize,1]),d="week"===l&&s.isoWeekday,h=e,c=[];if(d&&(h=+r.startOf(h,"isoWeek",d)),h=+r.startOf(h,d?"day":l),r.diff(n,e,l)>1e5*u)throw e+" and "+n+" are too far apart with stepSize of "+u+" "+l;for(a=h;a<n;a=+r.add(a,u,l))c.push(a);return a!==n&&"ticks"!==o.bounds||c.push(a),c}(i,a,r,h),"ticks"===o.bounds&&u.length&&(a=u[0],r=u[u.length-1]),a=li(i,ai(o))||a,r=li(i,ri(o))||r,t=0,e=u.length;t<e;++t)(n=u[t])>=a&&n<=r&&d.push(n);return i.min=a,i.max=r,i._unit=l.unit||(s.autoSkip?ui(l.minUnit,i.min,i.max,h):function(t,e,n,i,a){var r,o;for(r=ni.length-1;r>=ni.indexOf(n);r--)if(o=ni[r],ei[o].common&&t._adapter.diff(a,i,o)>=e-1)return o;return ni[n?ni.indexOf(n):0]}(i,d.length,l.minUnit,i.min,i.max)),i._majorUnit=s.major.enabled&&"year"!==i._unit?function(t){for(var e=ni.indexOf(t)+1,n=ni.length;e<n;++e)if(ei[ni[e]].common)return ni[e]}(i._unit):void 0,i._table=function(t,e,n,i){if("linear"===i||!t.length)return[{time:e,pos:0},{time:n,pos:1}];var a,r,o,s,l,u=[],d=[e];for(a=0,r=t.length;a<r;++a)(s=t[a])>e&&s<n&&d.push(s);for(d.push(n),a=0,r=d.length;a<r;++a)l=d[a+1],o=d[a-1],s=d[a],void 0!==o&&void 0!==l&&Math.round((l+o)/2)===s||u.push({time:s,pos:a/(r-1)});return u}(i._timestamps.data,a,r,f),i._offsets=function(t,e,n,i,a){var r,o,s=0,l=0;return a.offset&&e.length&&(r=oi(t,"time",e[0],"pos"),s=1===e.length?1-r:(oi(t,"time",e[1],"pos")-r)/2,o=oi(t,"time",e[e.length-1],"pos"),l=1===e.length?o:(o-oi(t,"time",e[e.length-2],"pos"))/2),{start:s,end:l,factor:1/(s+1+l)}}(i._table,d,0,0,o),s.reverse&&d.reverse(),di(i,d,i._majorUnit)},getLabelForIndex:function(t,e){var n=this,i=n._adapter,a=n.chart.data,r=n.options.time,o=a.labels&&t<a.labels.length?a.labels[t]:"",s=a.datasets[e].data[t];return H.isObject(s)&&(o=n.getRightValue(s)),r.tooltipFormat?i.format(si(n,o),r.tooltipFormat):"string"==typeof o?o:i.format(si(n,o),r.displayFormats.datetime)},tickFormatFunction:function(t,e,n,i){var a=this._adapter,r=this.options,o=r.time.displayFormats,s=o[this._unit],l=this._majorUnit,u=o[l],d=n[e],h=r.ticks,c=l&&u&&d&&d.major,f=a.format(t,i||(c?u:s)),g=c?h.major:h.minor,p=$n([g.callback,g.userCallback,h.callback,h.userCallback]);return p?p(f,e,n):f},convertTicksToLabels:function(t){var e,n,i=[];for(e=0,n=t.length;e<n;++e)i.push(this.tickFormatFunction(t[e].value,e,t));return i},getPixelForOffset:function(t){var e=this._offsets,n=oi(this._table,"time",t,"pos");return this.getPixelForDecimal((e.start+n)*e.factor)},getPixelForValue:function(t,e,n){var i=null;if(void 0!==e&&void 0!==n&&(i=this._timestamps.datasets[n][e]),null===i&&(i=li(this,t)),null!==i)return this.getPixelForOffset(i)},getPixelForTick:function(t){var e=this.getTicks();return t>=0&&t<e.length?this.getPixelForOffset(e[t].value):null},getValueForPixel:function(t){var e=this._offsets,n=this.getDecimalForPixel(t)/e.factor-e.end,i=oi(this._table,"pos",n,"time");return this._adapter._create(i)},_getLabelSize:function(t){var e=this.options.ticks,n=this.ctx.measureText(t).width,i=H.toRadians(this.isHorizontal()?e.maxRotation:e.minRotation),a=Math.cos(i),r=Math.sin(i),o=Jn(e.fontSize,N.global.defaultFontSize);return{w:n*a+o*r,h:n*r+o*a}},getLabelWidth:function(t){return this._getLabelSize(t).w},getLabelCapacity:function(t){var e=this,n=e.options.time,i=n.displayFormats,a=i[n.unit]||i.millisecond,r=e.tickFormatFunction(t,0,di(e,[t],e._majorUnit),a),o=e._getLabelSize(r),s=Math.floor(e.isHorizontal()?e.width/o.w:e.height/o.h);return e.options.offset&&s--,s>0?s:1}}),ci={position:"bottom",distribution:"linear",bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{autoSkip:!1,source:"auto",major:{enabled:!1}}};hi._defaults=ci;var fi={category:kn,linear:Tn,logarithmic:zn,radialLinear:Xn,time:hi},gi={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};rn._date.override("function"==typeof t?{_id:"moment",formats:function(){return gi},parse:function(e,n){return"string"==typeof e&&"string"==typeof n?e=t(e,n):e instanceof t||(e=t(e)),e.isValid()?e.valueOf():null},format:function(e,n){return t(e).format(n)},add:function(e,n,i){return t(e).add(n,i).valueOf()},diff:function(e,n,i){return t(e).diff(t(n),i)},startOf:function(e,n,i){return e=t(e),"isoWeek"===n?e.isoWeekday(i).valueOf():e.startOf(n).valueOf()},endOf:function(e,n){return t(e).endOf(n).valueOf()},_create:function(e){return t(e)}}:{}),N._set("global",{plugins:{filler:{propagate:!0}}});var pi={dataset:function(t){var e=t.fill,n=t.chart,i=n.getDatasetMeta(e),a=i&&n.isDatasetVisible(e)&&i.dataset._children||[],r=a.length||0;return r?function(t,e){return e<r&&a[e]._view||null}:null},boundary:function(t){var e=t.boundary,n=e?e.x:null,i=e?e.y:null;return H.isArray(e)?function(t,n){return e[n]}:function(t){return{x:null===n?t.x:n,y:null===i?t.y:i}}}};function mi(t,e,n){var i,a=t._model||{},r=a.fill;if(void 0===r&&(r=!!a.backgroundColor),!1===r||null===r)return!1;if(!0===r)return"origin";if(i=parseFloat(r,10),isFinite(i)&&Math.floor(i)===i)return"-"!==r[0]&&"+"!==r[0]||(i=e+i),!(i===e||i<0||i>=n)&&i;switch(r){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return r;default:return!1}}function vi(t){return(t.el._scale||{}).getPointPositionForValue?function(t){var e,n,i,a,r,o=t.el._scale,s=o.options,l=o.chart.data.labels.length,u=t.fill,d=[];if(!l)return null;for(e=s.ticks.reverse?o.max:o.min,n=s.ticks.reverse?o.min:o.max,i=o.getPointPositionForValue(0,e),a=0;a<l;++a)r="start"===u||"end"===u?o.getPointPositionForValue(a,"start"===u?e:n):o.getBasePosition(a),s.gridLines.circular&&(r.cx=i.x,r.cy=i.y,r.angle=o.getIndexAngle(a)-Math.PI/2),d.push(r);return d}(t):function(t){var e,n=t.el._model||{},i=t.el._scale||{},a=t.fill,r=null;if(isFinite(a))return null;if("start"===a?r=void 0===n.scaleBottom?i.bottom:n.scaleBottom:"end"===a?r=void 0===n.scaleTop?i.top:n.scaleTop:void 0!==n.scaleZero?r=n.scaleZero:i.getBasePixel&&(r=i.getBasePixel()),null!=r){if(void 0!==r.x&&void 0!==r.y)return r;if(H.isFinite(r))return{x:(e=i.isHorizontal())?r:null,y:e?null:r}}return null}(t)}function bi(t,e,n){var i,a=t[e].fill,r=[e];if(!n)return a;for(;!1!==a&&-1===r.indexOf(a);){if(!isFinite(a))return a;if(!(i=t[a]))return!1;if(i.visible)return a;r.push(a),a=i.fill}return!1}function xi(t){var e=t.fill,n="dataset";return!1===e?null:(isFinite(e)||(n="boundary"),pi[n](t))}function yi(t){return t&&!t.skip}function _i(t,e,n,i,a){var r,o,s,l;if(i&&a){for(t.moveTo(e[0].x,e[0].y),r=1;r<i;++r)H.canvas.lineTo(t,e[r-1],e[r]);if(void 0===n[0].angle)for(t.lineTo(n[a-1].x,n[a-1].y),r=a-1;r>0;--r)H.canvas.lineTo(t,n[r],n[r-1],!0);else for(o=n[0].cx,s=n[0].cy,l=Math.sqrt(Math.pow(n[0].x-o,2)+Math.pow(n[0].y-s,2)),r=a-1;r>0;--r)t.arc(o,s,l,n[r].angle,n[r-1].angle,!0)}}function ki(t,e,n,i,a,r){var o,s,l,u,d,h,c,f,g=e.length,p=i.spanGaps,m=[],v=[],b=0,x=0;for(t.beginPath(),o=0,s=g;o<s;++o)d=n(u=e[l=o%g]._view,l,i),h=yi(u),c=yi(d),r&&void 0===f&&h&&(s=g+(f=o+1)),h&&c?(b=m.push(u),x=v.push(d)):b&&x&&(p?(h&&m.push(u),c&&v.push(d)):(_i(t,m,v,b,x),b=x=0,m=[],v=[]));_i(t,m,v,b,x),t.closePath(),t.fillStyle=a,t.fill()}var wi={id:"filler",afterDatasetsUpdate:function(t,e){var n,i,a,r,o=(t.data.datasets||[]).length,s=e.propagate,l=[];for(i=0;i<o;++i)r=null,(a=(n=t.getDatasetMeta(i)).dataset)&&a._model&&a instanceof kt.Line&&(r={visible:t.isDatasetVisible(i),fill:mi(a,i,o),chart:t,el:a}),n.$filler=r,l.push(r);for(i=0;i<o;++i)(r=l[i])&&(r.fill=bi(l,i,s),r.boundary=vi(r),r.mapper=xi(r))},beforeDatasetsDraw:function(t){var e,n,i,a,r,o,s,l=t._getSortedVisibleDatasetMetas(),u=t.ctx;for(n=l.length-1;n>=0;--n)(e=l[n].$filler)&&e.visible&&(a=(i=e.el)._view,r=i._children||[],o=e.mapper,s=a.backgroundColor||N.global.defaultColor,o&&s&&r.length&&(H.canvas.clipArea(u,t.chartArea),ki(u,r,o,a,s,i._loop),H.canvas.unclipArea(u)))}},Mi=H.rtl.getRtlAdapter,Si=H.noop,Ci=H.valueOrDefault;function Pi(t,e){return t.usePointStyle&&t.boxWidth>e?e:t.boxWidth}N._set("global",{legend:{display:!0,position:"top",align:"center",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(t,e){var n=e.datasetIndex,i=this.chart,a=i.getDatasetMeta(n);a.hidden=null===a.hidden?!i.data.datasets[n].hidden:null,i.update()},onHover:null,onLeave:null,labels:{boxWidth:40,padding:10,generateLabels:function(t){var e=t.data.datasets,n=t.options.legend||{},i=n.labels&&n.labels.usePointStyle;return t._getSortedDatasetMetas().map((function(n){var a=n.controller.getStyle(i?0:void 0);return{text:e[n.index].label,fillStyle:a.backgroundColor,hidden:!t.isDatasetVisible(n.index),lineCap:a.borderCapStyle,lineDash:a.borderDash,lineDashOffset:a.borderDashOffset,lineJoin:a.borderJoinStyle,lineWidth:a.borderWidth,strokeStyle:a.borderColor,pointStyle:a.pointStyle,rotation:a.rotation,datasetIndex:n.index}}),this)}}},legendCallback:function(t){var e,n,i,a=document.createElement("ul"),r=t.data.datasets;for(a.setAttribute("class",t.id+"-legend"),e=0,n=r.length;e<n;e++)(i=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=r[e].backgroundColor,r[e].label&&i.appendChild(document.createTextNode(r[e].label));return a.outerHTML}});var Ai=K.extend({initialize:function(t){H.extend(this,t),this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1},beforeUpdate:Si,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:Si,beforeSetDimensions:Si,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:Si,beforeBuildLabels:Si,buildLabels:function(){var t=this,e=t.options.labels||{},n=H.callback(e.generateLabels,[t.chart],t)||[];e.filter&&(n=n.filter((function(n){return e.filter(n,t.chart.data)}))),t.options.reverse&&n.reverse(),t.legendItems=n},afterBuildLabels:Si,beforeFit:Si,fit:function(){var t=this,e=t.options,n=e.labels,i=e.display,a=t.ctx,r=H.options._parseFont(n),o=r.size,s=t.legendHitBoxes=[],l=t.minSize,u=t.isHorizontal();if(u?(l.width=t.maxWidth,l.height=i?10:0):(l.width=i?10:0,l.height=t.maxHeight),i){if(a.font=r.string,u){var d=t.lineWidths=[0],h=0;a.textAlign="left",a.textBaseline="middle",H.each(t.legendItems,(function(t,e){var i=Pi(n,o)+o/2+a.measureText(t.text).width;(0===e||d[d.length-1]+i+2*n.padding>l.width)&&(h+=o+n.padding,d[d.length-(e>0?0:1)]=0),s[e]={left:0,top:0,width:i,height:o},d[d.length-1]+=i+n.padding})),l.height+=h}else{var c=n.padding,f=t.columnWidths=[],g=t.columnHeights=[],p=n.padding,m=0,v=0;H.each(t.legendItems,(function(t,e){var i=Pi(n,o)+o/2+a.measureText(t.text).width;e>0&&v+o+2*c>l.height&&(p+=m+n.padding,f.push(m),g.push(v),m=0,v=0),m=Math.max(m,i),v+=o+c,s[e]={left:0,top:0,width:i,height:o}})),p+=m,f.push(m),g.push(v),l.width+=p}t.width=l.width,t.height=l.height}else t.width=l.width=t.height=l.height=0},afterFit:Si,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var t=this,e=t.options,n=e.labels,i=N.global,a=i.defaultColor,r=i.elements.line,o=t.height,s=t.columnHeights,l=t.width,u=t.lineWidths;if(e.display){var d,h=Mi(e.rtl,t.left,t.minSize.width),c=t.ctx,f=Ci(n.fontColor,i.defaultFontColor),g=H.options._parseFont(n),p=g.size;c.textAlign=h.textAlign("left"),c.textBaseline="middle",c.lineWidth=.5,c.strokeStyle=f,c.fillStyle=f,c.font=g.string;var m=Pi(n,p),v=t.legendHitBoxes,b=function(t,i){switch(e.align){case"start":return n.padding;case"end":return t-i;default:return(t-i+n.padding)/2}},x=t.isHorizontal();d=x?{x:t.left+b(l,u[0]),y:t.top+n.padding,line:0}:{x:t.left+n.padding,y:t.top+b(o,s[0]),line:0},H.rtl.overrideTextDirection(t.ctx,e.textDirection);var y=p+n.padding;H.each(t.legendItems,(function(e,i){var f=c.measureText(e.text).width,g=m+p/2+f,_=d.x,k=d.y;h.setWidth(t.minSize.width),x?i>0&&_+g+n.padding>t.left+t.minSize.width&&(k=d.y+=y,d.line++,_=d.x=t.left+b(l,u[d.line])):i>0&&k+y>t.top+t.minSize.height&&(_=d.x=_+t.columnWidths[d.line]+n.padding,d.line++,k=d.y=t.top+b(o,s[d.line]));var w=h.x(_);!function(t,e,i){if(!(isNaN(m)||m<=0)){c.save();var o=Ci(i.lineWidth,r.borderWidth);if(c.fillStyle=Ci(i.fillStyle,a),c.lineCap=Ci(i.lineCap,r.borderCapStyle),c.lineDashOffset=Ci(i.lineDashOffset,r.borderDashOffset),c.lineJoin=Ci(i.lineJoin,r.borderJoinStyle),c.lineWidth=o,c.strokeStyle=Ci(i.strokeStyle,a),c.setLineDash&&c.setLineDash(Ci(i.lineDash,r.borderDash)),n&&n.usePointStyle){var s=m*Math.SQRT2/2,l=h.xPlus(t,m/2),u=e+p/2;H.canvas.drawPoint(c,i.pointStyle,s,l,u,i.rotation)}else c.fillRect(h.leftForLtr(t,m),e,m,p),0!==o&&c.strokeRect(h.leftForLtr(t,m),e,m,p);c.restore()}}(w,k,e),v[i].left=h.leftForLtr(w,v[i].width),v[i].top=k,function(t,e,n,i){var a=p/2,r=h.xPlus(t,m+a),o=e+a;c.fillText(n.text,r,o),n.hidden&&(c.beginPath(),c.lineWidth=2,c.moveTo(r,o),c.lineTo(h.xPlus(r,i),o),c.stroke())}(w,k,e,f),x?d.x+=g+n.padding:d.y+=y})),H.rtl.restoreTextDirection(t.ctx,e.textDirection)}},_getLegendItemAt:function(t,e){var n,i,a,r=this;if(t>=r.left&&t<=r.right&&e>=r.top&&e<=r.bottom)for(a=r.legendHitBoxes,n=0;n<a.length;++n)if(t>=(i=a[n]).left&&t<=i.left+i.width&&e>=i.top&&e<=i.top+i.height)return r.legendItems[n];return null},handleEvent:function(t){var e,n=this,i=n.options,a="mouseup"===t.type?"click":t.type;if("mousemove"===a){if(!i.onHover&&!i.onLeave)return}else{if("click"!==a)return;if(!i.onClick)return}e=n._getLegendItemAt(t.x,t.y),"click"===a?e&&i.onClick&&i.onClick.call(n,t.native,e):(i.onLeave&&e!==n._hoveredItem&&(n._hoveredItem&&i.onLeave.call(n,t.native,n._hoveredItem),n._hoveredItem=e),i.onHover&&e&&i.onHover.call(n,t.native,e))}});function Di(t,e){var n=new Ai({ctx:t.ctx,options:e,chart:t});pe.configure(t,n,e),pe.addBox(t,n),t.legend=n}var Ti={id:"legend",_element:Ai,beforeInit:function(t){var e=t.options.legend;e&&Di(t,e)},beforeUpdate:function(t){var e=t.options.legend,n=t.legend;e?(H.mergeIf(e,N.global.legend),n?(pe.configure(t,n,e),n.options=e):Di(t,e)):n&&(pe.removeBox(t,n),delete t.legend)},afterEvent:function(t,e){var n=t.legend;n&&n.handleEvent(e)}},Ii=H.noop;N._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,padding:10,position:"top",text:"",weight:2e3}});var Fi=K.extend({initialize:function(t){H.extend(this,t),this.legendHitBoxes=[]},beforeUpdate:Ii,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:Ii,beforeSetDimensions:Ii,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:Ii,beforeBuildLabels:Ii,buildLabels:Ii,afterBuildLabels:Ii,beforeFit:Ii,fit:function(){var t,e=this,n=e.options,i=e.minSize={},a=e.isHorizontal();n.display?(t=(H.isArray(n.text)?n.text.length:1)*H.options._parseFont(n).lineHeight+2*n.padding,e.width=i.width=a?e.maxWidth:t,e.height=i.height=a?t:e.maxHeight):e.width=i.width=e.height=i.height=0},afterFit:Ii,isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},draw:function(){var t=this,e=t.ctx,n=t.options;if(n.display){var i,a,r,o=H.options._parseFont(n),s=o.lineHeight,l=s/2+n.padding,u=0,d=t.top,h=t.left,c=t.bottom,f=t.right;e.fillStyle=H.valueOrDefault(n.fontColor,N.global.defaultFontColor),e.font=o.string,t.isHorizontal()?(a=h+(f-h)/2,r=d+l,i=f-h):(a="left"===n.position?h+l:f-l,r=d+(c-d)/2,i=c-d,u=Math.PI*("left"===n.position?-.5:.5)),e.save(),e.translate(a,r),e.rotate(u),e.textAlign="center",e.textBaseline="middle";var g=n.text;if(H.isArray(g))for(var p=0,m=0;m<g.length;++m)e.fillText(g[m],0,p,i),p+=s;else e.fillText(g,0,0,i);e.restore()}}});function Oi(t,e){var n=new Fi({ctx:t.ctx,options:e,chart:t});pe.configure(t,n,e),pe.addBox(t,n),t.titleBlock=n}var Li={},Ri=wi,zi=Ti,Ni={id:"title",_element:Fi,beforeInit:function(t){var e=t.options.title;e&&Oi(t,e)},beforeUpdate:function(t){var e=t.options.title,n=t.titleBlock;e?(H.mergeIf(e,N.global.title),n?(pe.configure(t,n,e),n.options=e):Oi(t,e)):n&&(pe.removeBox(t,n),delete t.titleBlock)}};for(var Bi in Li.filler=Ri,Li.legend=zi,Li.title=Ni,en.helpers=H,function(){function t(t,e,n){var i;return"string"==typeof t?(i=parseInt(t,10),-1!==t.indexOf("%")&&(i=i/100*e.parentNode[n])):i=t,i}function e(t){return null!=t&&"none"!==t}function n(n,i,a){var r=document.defaultView,o=H._getParentNode(n),s=r.getComputedStyle(n)[i],l=r.getComputedStyle(o)[i],u=e(s),d=e(l),h=Number.POSITIVE_INFINITY;return u||d?Math.min(u?t(s,n,a):h,d?t(l,o,a):h):"none"}H.where=function(t,e){if(H.isArray(t)&&Array.prototype.filter)return t.filter(e);var n=[];return H.each(t,(function(t){e(t)&&n.push(t)})),n},H.findIndex=Array.prototype.findIndex?function(t,e,n){return t.findIndex(e,n)}:function(t,e,n){n=void 0===n?t:n;for(var i=0,a=t.length;i<a;++i)if(e.call(n,t[i],i,t))return i;return-1},H.findNextWhere=function(t,e,n){H.isNullOrUndef(n)&&(n=-1);for(var i=n+1;i<t.length;i++){var a=t[i];if(e(a))return a}},H.findPreviousWhere=function(t,e,n){H.isNullOrUndef(n)&&(n=t.length);for(var i=n-1;i>=0;i--){var a=t[i];if(e(a))return a}},H.isNumber=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},H.almostEquals=function(t,e,n){return Math.abs(t-e)<n},H.almostWhole=function(t,e){var n=Math.round(t);return n-e<=t&&n+e>=t},H.max=function(t){return t.reduce((function(t,e){return isNaN(e)?t:Math.max(t,e)}),Number.NEGATIVE_INFINITY)},H.min=function(t){return t.reduce((function(t,e){return isNaN(e)?t:Math.min(t,e)}),Number.POSITIVE_INFINITY)},H.sign=Math.sign?function(t){return Math.sign(t)}:function(t){return 0===(t=+t)||isNaN(t)?t:t>0?1:-1},H.toRadians=function(t){return t*(Math.PI/180)},H.toDegrees=function(t){return t*(180/Math.PI)},H._decimalPlaces=function(t){if(H.isFinite(t)){for(var e=1,n=0;Math.round(t*e)/e!==t;)e*=10,n++;return n}},H.getAngleFromPoint=function(t,e){var n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),r=Math.atan2(i,n);return r<-.5*Math.PI&&(r+=2*Math.PI),{angle:r,distance:a}},H.distanceBetweenPoints=function(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))},H.aliasPixel=function(t){return t%2==0?0:.5},H._alignPixel=function(t,e,n){var i=t.currentDevicePixelRatio,a=n/2;return Math.round((e-a)*i)/i+a},H.splineCurve=function(t,e,n,i){var a=t.skip?e:t,r=e,o=n.skip?e:n,s=Math.sqrt(Math.pow(r.x-a.x,2)+Math.pow(r.y-a.y,2)),l=Math.sqrt(Math.pow(o.x-r.x,2)+Math.pow(o.y-r.y,2)),u=s/(s+l),d=l/(s+l),h=i*(u=isNaN(u)?0:u),c=i*(d=isNaN(d)?0:d);return{previous:{x:r.x-h*(o.x-a.x),y:r.y-h*(o.y-a.y)},next:{x:r.x+c*(o.x-a.x),y:r.y+c*(o.y-a.y)}}},H.EPSILON=Number.EPSILON||1e-14,H.splineCurveMonotone=function(t){var e,n,i,a,r,o,s,l,u,d=(t||[]).map((function(t){return{model:t._model,deltaK:0,mK:0}})),h=d.length;for(e=0;e<h;++e)if(!(i=d[e]).model.skip){if(n=e>0?d[e-1]:null,(a=e<h-1?d[e+1]:null)&&!a.model.skip){var c=a.model.x-i.model.x;i.deltaK=0!==c?(a.model.y-i.model.y)/c:0}!n||n.model.skip?i.mK=i.deltaK:!a||a.model.skip?i.mK=n.deltaK:this.sign(n.deltaK)!==this.sign(i.deltaK)?i.mK=0:i.mK=(n.deltaK+i.deltaK)/2}for(e=0;e<h-1;++e)i=d[e],a=d[e+1],i.model.skip||a.model.skip||(H.almostEquals(i.deltaK,0,this.EPSILON)?i.mK=a.mK=0:(r=i.mK/i.deltaK,o=a.mK/i.deltaK,(l=Math.pow(r,2)+Math.pow(o,2))<=9||(s=3/Math.sqrt(l),i.mK=r*s*i.deltaK,a.mK=o*s*i.deltaK)));for(e=0;e<h;++e)(i=d[e]).model.skip||(n=e>0?d[e-1]:null,a=e<h-1?d[e+1]:null,n&&!n.model.skip&&(u=(i.model.x-n.model.x)/3,i.model.controlPointPreviousX=i.model.x-u,i.model.controlPointPreviousY=i.model.y-u*i.mK),a&&!a.model.skip&&(u=(a.model.x-i.model.x)/3,i.model.controlPointNextX=i.model.x+u,i.model.controlPointNextY=i.model.y+u*i.mK))},H.nextItem=function(t,e,n){return n?e>=t.length-1?t[0]:t[e+1]:e>=t.length-1?t[t.length-1]:t[e+1]},H.previousItem=function(t,e,n){return n?e<=0?t[t.length-1]:t[e-1]:e<=0?t[0]:t[e-1]},H.niceNum=function(t,e){var n=Math.floor(H.log10(t)),i=t/Math.pow(10,n);return(e?i<1.5?1:i<3?2:i<7?5:10:i<=1?1:i<=2?2:i<=5?5:10)*Math.pow(10,n)},H.requestAnimFrame="undefined"==typeof window?function(t){t()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)},H.getRelativePosition=function(t,e){var n,i,a=t.originalEvent||t,r=t.target||t.srcElement,o=r.getBoundingClientRect(),s=a.touches;s&&s.length>0?(n=s[0].clientX,i=s[0].clientY):(n=a.clientX,i=a.clientY);var l=parseFloat(H.getStyle(r,"padding-left")),u=parseFloat(H.getStyle(r,"padding-top")),d=parseFloat(H.getStyle(r,"padding-right")),h=parseFloat(H.getStyle(r,"padding-bottom")),c=o.right-o.left-l-d,f=o.bottom-o.top-u-h;return{x:n=Math.round((n-o.left-l)/c*r.width/e.currentDevicePixelRatio),y:i=Math.round((i-o.top-u)/f*r.height/e.currentDevicePixelRatio)}},H.getConstraintWidth=function(t){return n(t,"max-width","clientWidth")},H.getConstraintHeight=function(t){return n(t,"max-height","clientHeight")},H._calculatePadding=function(t,e,n){return(e=H.getStyle(t,e)).indexOf("%")>-1?n*parseInt(e,10)/100:parseInt(e,10)},H._getParentNode=function(t){var e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e},H.getMaximumWidth=function(t){var e=H._getParentNode(t);if(!e)return t.clientWidth;var n=e.clientWidth,i=n-H._calculatePadding(e,"padding-left",n)-H._calculatePadding(e,"padding-right",n),a=H.getConstraintWidth(t);return isNaN(a)?i:Math.min(i,a)},H.getMaximumHeight=function(t){var e=H._getParentNode(t);if(!e)return t.clientHeight;var n=e.clientHeight,i=n-H._calculatePadding(e,"padding-top",n)-H._calculatePadding(e,"padding-bottom",n),a=H.getConstraintHeight(t);return isNaN(a)?i:Math.min(i,a)},H.getStyle=function(t,e){return t.currentStyle?t.currentStyle[e]:document.defaultView.getComputedStyle(t,null).getPropertyValue(e)},H.retinaScale=function(t,e){var n=t.currentDevicePixelRatio=e||"undefined"!=typeof window&&window.devicePixelRatio||1;if(1!==n){var i=t.canvas,a=t.height,r=t.width;i.height=a*n,i.width=r*n,t.ctx.scale(n,n),i.style.height||i.style.width||(i.style.height=a+"px",i.style.width=r+"px")}},H.fontString=function(t,e,n){return e+" "+t+"px "+n},H.longestText=function(t,e,n,i){var a=(i=i||{}).data=i.data||{},r=i.garbageCollect=i.garbageCollect||[];i.font!==e&&(a=i.data={},r=i.garbageCollect=[],i.font=e),t.font=e;var o,s,l,u,d,h=0,c=n.length;for(o=0;o<c;o++)if(null!=(u=n[o])&&!0!==H.isArray(u))h=H.measureText(t,a,r,h,u);else if(H.isArray(u))for(s=0,l=u.length;s<l;s++)null==(d=u[s])||H.isArray(d)||(h=H.measureText(t,a,r,h,d));var f=r.length/2;if(f>n.length){for(o=0;o<f;o++)delete a[r[o]];r.splice(0,f)}return h},H.measureText=function(t,e,n,i,a){var r=e[a];return r||(r=e[a]=t.measureText(a).width,n.push(a)),r>i&&(i=r),i},H.numberOfLabelLines=function(t){var e=1;return H.each(t,(function(t){H.isArray(t)&&t.length>e&&(e=t.length)})),e},H.color=_?function(t){return t instanceof CanvasGradient&&(t=N.global.defaultColor),_(t)}:function(t){return console.error("Color.js not found!"),t},H.getHoverColor=function(t){return t instanceof CanvasPattern||t instanceof CanvasGradient?t:H.color(t).saturate(.5).darken(.1).rgbString()}}(),en._adapters=rn,en.Animation=$,en.animationService=J,en.controllers=Jt,en.DatasetController=it,en.defaults=N,en.Element=K,en.elements=kt,en.Interaction=re,en.layouts=pe,en.platform=Oe,en.plugins=Le,en.Scale=yn,en.scaleService=Re,en.Ticks=on,en.Tooltip=Ye,en.helpers.each(fi,(function(t,e){en.scaleService.registerScaleType(e,t,t._defaults)})),Li)Li.hasOwnProperty(Bi)&&en.plugins.register(Li[Bi]);en.platform.initialize();var Ei=en;return"undefined"!=typeof window&&(window.Chart=en),en.Chart=en,en.Legend=Li.legend._element,en.Title=Li.title._element,en.pluginService=en.plugins,en.PluginBase=en.Element.extend({}),en.canvasHelpers=en.helpers.canvas,en.layoutService=en.layouts,en.LinearScaleBase=Cn,en.helpers.each(["Bar","Bubble","Doughnut","Line","PolarArea","Radar","Scatter"],(function(t){en[t]=function(e,n){return new en(e,en.helpers.merge(n||{},{type:t.charAt(0).toLowerCase()+t.slice(1)}))}})),Ei})); - - (function() { - 'use strict'; - window.addEventListener('beforeprint', function() { - for (var id in Chart.instances) { - Chart.instances[id].resize(); - } - }, false); - - var errorBarPlugin = (function () { - function drawErrorBar(chart, ctx, low, high, y, height, color) { - ctx.save(); - ctx.lineWidth = 3; - ctx.strokeStyle = color; - var area = chart.chartArea; - ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top); - ctx.clip(); - ctx.beginPath(); - ctx.moveTo(low, y - height); - ctx.lineTo(low, y + height); - ctx.moveTo(low, y); - ctx.lineTo(high, y); - ctx.moveTo(high, y - height); - ctx.lineTo(high, y + height); - ctx.stroke(); - ctx.restore(); - } - // Avoid sudden jumps in error bars when switching - // between linear and logarithmic scale - function conservativeError(vx, mx, now, final, scale) { - var finalDiff = Math.abs(mx - final); - var diff = Math.abs(vx - now); - return (diff > finalDiff) ? vx + scale * finalDiff : now; - } - return { - afterDatasetDraw: function(chart, easingOptions) { - var ctx = chart.ctx; - var easing = easingOptions.easingValue; - chart.data.datasets.forEach(function(d, i) { - var bars = chart.getDatasetMeta(i).data; - var axis = chart.scales[chart.options.scales.xAxes[0].id]; - bars.forEach(function(b) { - var value = axis.getValueForPixel(b._view.x); - var final = axis.getValueForPixel(b._model.x); - var errorBar = d.errorBars[b._model.label]; - var low = axis.getPixelForValue(value - errorBar.minus); - var high = axis.getPixelForValue(value + errorBar.plus); - var finalLow = axis.getPixelForValue(final - errorBar.minus); - var finalHigh = axis.getPixelForValue(final + errorBar.plus); - var l = easing === 1 ? finalLow : - conservativeError(b._view.x, b._model.x, low, - finalLow, -1.0); - var h = easing === 1 ? finalHigh : - conservativeError(b._view.x, b._model.x, - high, finalHigh, 1.0); - drawErrorBar(chart, ctx, l, h, b._view.y, 4, errorBar.color); - }); - }); - }, - }; - })(); - - // Formats the ticks on the X-axis on the scatter plot - var iterFormatter = function() { - var denom = 0; - return function(iters, index, values) { - if (iters == 0) { - return ''; - } - if (index == values.length - 1) { - return ''; - } - var power; - if (iters >= 1e9) { - denom = 1e9; - power = '⁹'; - } else if (iters >= 1e6) { - denom = 1e6; - power = '⁶'; - } else if (iters >= 1e3) { - denom = 1e3; - power = '³'; - } else { - denom = 1; - } - if (denom > 1) { - var value = (iters / denom).toFixed(); - return String(value) + '×10' + power; - } else { - return String(iters); - } - }; - }; - - var colors = ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"]; - var errorColors = ["#cda220", "#8fb8d8", "#ab2b2b", "#2d872d", "#7420cd"]; - - - // Positions tooltips at cursor. Required for overview since the bars may - // extend past the canvas width. - Chart.Tooltip.positioners.cursor = function(_elems, position) { - return position; - } - - function axisType(logaxis) { - return logaxis ? 'logarithmic' : 'linear'; - } - - function reportSort(a, b) { - return a.reportNumber - b.reportNumber; - } - - // adds groupNumber and group fields to reports; - // returns list of list of reports, grouped by group - function groupReports(reports) { - - function reportGroup(report) { - var parts = report.groups.slice(); - parts.pop(); - return parts.join('/'); - } - - var groups = []; - reports.forEach(function(report) { - report.group = reportGroup(report); - if (groups.length === 0) { - groups.push([report]); - } else { - var prevGroup = groups[groups.length - 1]; - var prevGroupName = prevGroup[0].group; - if (prevGroupName === report.group) { - prevGroup.push(report); - } else { - groups.push([report]); - } - } - report.groupNumber = groups.length - 1; - }); - return groups; - } - - // compares 2 arrays lexicographically - function lex(aParts, bParts) { - for(var i = 0; i < aParts.length && i < bParts.length; i++) { - var x = aParts[i]; - var y = bParts[i]; - if (x < y) { - return -1; - } - if (y < x) { - return 1; - } - } - return aParts.length - bParts.length; - } - function lexicalSort(a, b) { - return lex(a.groups, b.groups); - } - - function reverseLexicalSort(a, b) { - return lex(a.groups.slice().reverse(), b.groups.slice().reverse()); - } - - function durationSort(a, b) { - return a.reportAnalysis.anMean.estPoint - b.reportAnalysis.anMean.estPoint; - } - function reverseDurationSort(a,b) { - return -durationSort(a,b); - } - - function timeUnits(secs) { - if (secs < 0) - return timeUnits(-secs); - else if (secs >= 1e9) - return [1e-9, "Gs"]; - else if (secs >= 1e6) - return [1e-6, "Ms"]; - else if (secs >= 1) - return [1, "s"]; - else if (secs >= 1e-3) - return [1e3, "ms"]; - else if (secs >= 1e-6) - return [1e6, "\u03bcs"]; - else if (secs >= 1e-9) - return [1e9, "ns"]; - else if (secs >= 1e-12) - return [1e12, "ps"]; - return [1, "s"]; - } - - function formatUnit(raw, unit, precision) { - var v = precision ? raw.toPrecision(precision) : Math.round(raw); - var label = String(v) + ' ' + unit; - return label; - } - - function formatTime(value, precision) { - var units = timeUnits(value); - var scale = units[0]; - return formatUnit(value * scale, units[1], precision); - } - - // pure function that produces the 'data' object of the overview chart - function overviewData(state, reports) { - var order = state.order; - var sorter = order === 'report-index' ? reportSort - : order === 'lex' ? lexicalSort - : order === 'colex' ? reverseLexicalSort - : order === 'duration' ? durationSort - : order === 'rev-duration' ? reverseDurationSort - : reportSort; - var sortedReports = reports.filter(function(report) { - return !state.hidden[report.groupNumber]; - }).slice().sort(sorter); - var data = sortedReports.map(function(report) { - return report.reportAnalysis.anMean.estPoint; - }); - var labels = sortedReports.map(function(report) { - return report.groups.join(' / '); - }); - var upperBound = function(report) { - var est = report.reportAnalysis.anMean; - return est.estPoint + est.estError.confIntUDX; - }; - var errorBars = {}; - sortedReports.forEach(function(report) { - var est = report.reportAnalysis.anMean; - errorBars[report.groups.join(' / ')] = { - minus: est.estError.confIntLDX, - plus: est.estError.confIntUDX, - color: errorColors[report.groupNumber % errorColors.length] - }; - }); - var top = sortedReports.map(upperBound).reduce(function(a, b) { - return Math.max(a, b); - }, 0); - var scale = top; - if(state.activeReport !== null) { - reports.forEach(function(report) { - if(report.reportNumber === state.activeReport) { - scale = upperBound(report); - } - }); - } - - return { - labels: labels, - top: top, - max: scale * 1.1, - reports: sortedReports, - datasets: [{ - borderWidth: 1, - backgroundColor: sortedReports.map(function(report) { - var active = report.reportNumber === state.activeReport; - var alpha = active ? 'ff' : 'a0'; - var color = colors[report.groupNumber % colors.length] + alpha; - if (active) { - return Chart.helpers.getHoverColor(color); - } else { - return color; - } - }), - barThickness: 16, - barPercentage: 0.8, - data: data, - errorBars: errorBars, - minBarLength: 2, - }] - }; - } - - function inside(box, point) { - return (point.x >= box.left && point.x <= box.right && point.y >= box.top && - point.y <= box.bottom); - } - - function overviewHover(event, elems) { - var chart = this; - var xAxis = chart.scales[chart.options.scales.xAxes[0].id]; - var yAxis = chart.scales[chart.options.scales.yAxes[0].id]; - var point = Chart.helpers.getRelativePosition(event, chart); - var over = - (inside(xAxis, point) || inside(yAxis, point) || elems.length > 0); - if (over) { - chart.canvas.style.cursor = "pointer"; - } else { - chart.canvas.style.cursor = "default"; - } - } - - // Re-renders the overview after clicking/sorting - function renderOverview(state, reports, chart) { - var data = overviewData(state, reports); - var xaxis = chart.options.scales.xAxes[0]; - xaxis.ticks.max = data.max; - chart.config.data.datasets[0].backgroundColor = data.datasets[0].backgroundColor; - chart.config.data.datasets[0].data = data.datasets[0].data; - chart.options.scales.xAxes[0].type = axisType(state.logaxis); - chart.options.legend.display = state.legend; - chart.data.labels = data.labels; - chart.update(); - } - - function overviewClick(state, reports) { - return function(event, elems) { - var chart = this; - var xAxis = chart.scales[chart.options.scales.xAxes[0].id]; - var yAxis = chart.scales[chart.options.scales.yAxes[0].id]; - var point = Chart.helpers.getRelativePosition(event, chart); - var sorted = overviewData(state, reports).reports; - - function activateBar(index) { - // Trying to activate active bar disables instead - if (sorted[index].reportNumber === state.activeReport) { - state.activeReport = null; - } else { - state.activeReport = sorted[index].reportNumber; - } - } - - if (inside(xAxis, point)) { - state.activeReport = null; - state.logaxis = !state.logaxis; - renderOverview(state, reports, chart); - } else if (inside(yAxis, point)) { - var index = yAxis.getValueForPixel(point.y); - activateBar(index); - renderOverview(state, reports, chart); - } else if (elems.length > 0) { - var elem = elems[0]; - var index = elem._index; - activateBar(index); - state.logaxis = false; - renderOverview(state, reports, chart); - } else if(inside(chart.chartArea, point)) { - state.activeReport = null; - renderOverview(state, reports, chart); - } - }; - } - - // listener for sort drop-down - function overviewSort(state, reports, chart) { - return function(event) { - state.order = event.currentTarget.value; - renderOverview(state, reports, chart); - }; - } - - // Returns a formatter for the ticks on the X-axis of the overview - function overviewTick(state) { - return function(value, index, values) { - var label = formatTime(value); - if (state.logaxis) { - const remain = Math.round(value / - (Math.pow(10, Math.floor(Chart.helpers.log10(value))))); - if (index === values.length - 1) { - // Draw endpoint if we don't span a full order of magnitude - if (values[index] / values[1] < 10) { - return label; - } else { - return ''; - } - } - if (remain === 1) { - return label; - } - return ''; - } else { - // Don't show the right endpoint - if (index === values.length - 1) { - return ''; - } - return label; - } - } - } - - function mkOverview(reports) { - var canvas = document.createElement('canvas'); - - var state = { - logaxis: false, - activeReport: null, - order: 'index', - hidden: {}, - legend: false, - }; - - - var data = overviewData(state, reports); - var chart = new Chart(canvas.getContext('2d'), { - type: 'horizontalBar', - data: data, - plugins: [errorBarPlugin], - options: { - onHover: overviewHover, - onClick: overviewClick(state, reports), - elements: { - rectangle: { - borderWidth: 2, - }, - }, - scales: { - yAxes: [{ - ticks: {} - }], - xAxes: [{ - display: true, - type: axisType(state.logaxis), - ticks: { - autoSkip: false, - min: 0, - max: data.top * 1.1, - minRotation: 0, - maxRotation: 0, - callback: overviewTick(state), - } - }] - }, - responsive: true, - maintainAspectRatio: false, - legend: { - display: state.legend, - position: 'right', - onLeave: function(event) { - chart.canvas.style.cursor = 'default'; - }, - onHover: function(event, item) { - chart.canvas.style.cursor = 'pointer'; - }, - onClick: function(event, item) { - // toggle hidden - state.hidden[item.groupNumber] = !state.hidden[item.groupNumber]; - renderOverview(state, reports, chart); - }, - labels: { - boxWidth: 12, - generateLabels: function() { - var groups = []; - var groupNames = []; - reports.forEach(function(report) { - var index = groups.indexOf(report.groupNumber); - if (index === -1) { - groups.push(report.groupNumber); - var groupName = report.groups.slice(0,report.groups.length-1).join(' / '); - groupNames.push(groupName); - } - }); - return groups.map(function(groupNumber, index) { - var color = colors[groupNumber % colors.length]; - return { - text: groupNames[index], - fillStyle: color, - hidden: state.hidden[groupNumber], - groupNumber: groupNumber, - }; - }); - }, - }, - }, - tooltips: { - position: 'cursor', - callbacks: { - label: function(item) { - return formatTime(item.xLabel, 3); - }, - }, - }, - title: { - display: false, - text: 'Chart.js Horizontal Bar Chart' - } - } - }); - document.getElementById('sort-overview') - .addEventListener('change', overviewSort(state, reports, chart)); - var toggle = document.getElementById('legend-toggle'); - toggle.addEventListener('mouseup', function () { - state.legend = !state.legend; - if(state.legend) { - toggle.classList.add('right'); - } else { - toggle.classList.remove('right'); - } - renderOverview(state, reports, chart); - }) - return canvas; - } - - function mkKDE(report) { - var canvas = document.createElement('canvas'); - var mean = report.reportAnalysis.anMean.estPoint; - var units = timeUnits(mean); - var scale = units[0]; - var reportKDE = report.reportKDEs[0]; - var data = reportKDE.kdeValues.map(function(time, index) { - var pdf = reportKDE.kdePDF[index]; - return { - x: time * scale, - y: pdf - }; - }); - var chart = new Chart(canvas.getContext('2d'), { - type: 'line', - data: { - datasets: [{ - label: 'KDE', - borderColor: colors[0], - borderWidth: 2, - backgroundColor: '#00000000', - data: data, - hoverBorderWidth: 1, - pointHitRadius: 8, - }, - { - label: 'mean' - } - ], - }, - plugins: [{ - afterDraw: function(chart) { - var ctx = chart.ctx; - var area = chart.chartArea; - var axis = chart.scales[chart.options.scales.xAxes[0].id]; - var value = axis.getPixelForValue(mean * scale); - ctx.save(); - ctx.strokeStyle = colors[1]; - ctx.lineWidth = 2; - ctx.beginPath(); - ctx.moveTo(value, area.top); - ctx.lineTo(value, area.bottom); - ctx.stroke(); - ctx.restore(); - }, - }], - options: { - title: { - display: true, - text: report.groups.join(' / ') + ' — time densities', - }, - elements: { - point: { - radius: 0, - hitRadius: 0 - } - }, - scales: { - xAxes: [{ - display: true, - type: 'linear', - scaleLabel: { - display: false, - labelString: 'Time' - }, - ticks: { - min: reportKDE.kdeValues[0] * scale, - max: reportKDE.kdeValues[reportKDE.kdeValues.length - 1] * scale, - callback: function(value, index, values) { - // Don't show endpoints - if (index === 0 || index === values.length - 1) { - return ''; - } - var str = String(value) + ' ' + units[1]; - return str; - }, - } - }], - yAxes: [{ - display: true, - type: 'linear', - ticks: { - min: 0, - callback: function() { - return ''; - }, - }, - }] - }, - responsive: true, - legend: { - display: false, - position: 'right', - }, - tooltips: { - mode: 'nearest', - callbacks: { - title: function() { - return ''; - }, - label: function( - item) { - return formatUnit(item.xLabel, units[1], 3); - }, - }, - }, - hover: { - intersect: false - }, - } - }); - return canvas; - } - - function mkScatter(report) { - - // collect the measured value for a given regression - function getMeasured(key) { - var ix = report.reportKeys.indexOf(key); - return report.reportMeasured.map(function(x) { - return x[ix]; - }); - } - - var canvas = document.createElement('canvas'); - var times = getMeasured("time"); - var iters = getMeasured("iters"); - var lastIter = iters[iters.length - 1]; - var olsTime = report.reportAnalysis.anRegress[0].regCoeffs.iters; - var dataPoints = times.map(function(time, i) { - return { - x: iters[i], - y: time - } - }); - var formatter = iterFormatter(); - var chart = new Chart(canvas.getContext('2d'), { - type: 'scatter', - data: { - datasets: [{ - data: dataPoints, - label: 'scatter', - borderWidth: 2, - pointHitRadius: 8, - borderColor: colors[1], - backgroundColor: '#fff', - }, - { - data: [ - {x: 0, y: 0 }, - { x: lastIter, y: olsTime.estPoint * lastIter } - ], - label: 'regression', - type: 'line', - backgroundColor: "#00000000", - borderColor: colors[0], - pointRadius: 0, - }, - { - data: [{ - x: 0, - y: 0 - }, { - x: lastIter, - y: (olsTime.estPoint - olsTime.estError.confIntLDX) * lastIter, - }], - label: 'lower', - type: 'line', - fill: 1, - borderWidth: 0, - pointRadius: 0, - borderColor: '#00000000', - backgroundColor: colors[0] + '33', - }, - { - data: [{ - x: 0, - y: 0 - }, { - x: lastIter, - y: (olsTime.estPoint + olsTime.estError.confIntUDX) * lastIter, - }], - label: 'upper', - type: 'line', - fill: 1, - borderWidth: 0, - borderColor: '#00000000', - pointRadius: 0, - backgroundColor: colors[0] + '33', - }, - ], - }, - options: { - title: { - display: true, - text: report.groups.join(' / ') + ' — time per iteration', - }, - scales: { - yAxes: [{ - display: true, - type: 'linear', - scaleLabel: { - display: false, - labelString: 'Time' - }, - ticks: { - callback: function(value, index, values) { - return formatTime(value); - }, - } - }], - xAxes: [{ - display: true, - type: 'linear', - scaleLabel: { - display: false, - labelString: 'Iterations' - }, - ticks: { - callback: formatter, - max: lastIter, - } - }], - }, - legend: { - display: false, - }, - tooltips: { - callbacks: { - label: function(ttitem, ttdata) { - var iters = ttitem.xLabel; - var duration = ttitem.yLabel; - return formatTime(duration, 3) + ' / ' + - iters.toLocaleString() + ' iters'; - }, - }, - }, - } - }); - return canvas; - } - - // Create an HTML Element with attributes and child nodes - function elem(tag, props, children) { - var node = document.createElement(tag); - if (children) { - children.forEach(function(child) { - if (typeof child === 'string') { - var txt = document.createTextNode(child); - node.appendChild(txt); - } else { - node.appendChild(child); - } - }); - } - Object.assign(node, props); - return node; - } - - function bounds(analysis) { - var mean = analysis.estPoint; - return { - low: mean - analysis.estError.confIntLDX, - mean: mean, - high: mean + analysis.estError.confIntUDX - }; - } - - function confidence(level) { - return String(1 - level) + ' confidence level'; - } - - function mkOutliers(report) { - var outliers = report.reportAnalysis.anOutlierVar; - return elem('div', {className: 'outliers'}, [ - elem('p', {}, [ - 'Outlying measurements have ', - outliers.ovDesc, - ' (', String((outliers.ovFraction * 100).toPrecision(3)), '%)', - ' effect on estimated standard deviation.' - ]) - ]); - } - - function mkTable(report) { - var analysis = report.reportAnalysis; - var timep4 = function(t) { - return formatTime(t, 3) - }; - var idformatter = function(t) { - return t.toPrecision(3) - }; - var rows = [ - Object.assign({ - label: 'OLS regression', - formatter: timep4 - }, - bounds(analysis.anRegress[0].regCoeffs.iters)), - Object.assign({ - label: 'R² goodness-of-fit', - formatter: idformatter - }, - bounds(analysis.anRegress[0].regRSquare)), - Object.assign({ - label: 'Mean execution time', - formatter: timep4 - }, - bounds(analysis.anMean)), - Object.assign({ - label: 'Standard deviation', - formatter: timep4 - }, - bounds(analysis.anStdDev)), - ]; - return elem('table', { - className: 'analysis' - }, [ - elem('thead', {}, [ - elem('tr', {}, [ - elem('th'), - elem('th', { - className: 'low', - title: confidence(analysis.anRegress[0].regCoeffs.iters.estError.confIntCL) - }, ['lower bound']), - elem('th', {}, ['estimate']), - elem('th', { - className: 'high', - title: confidence(analysis.anRegress[0].regCoeffs.iters.estError.confIntCL) - }, ['upper bound']), - ]) - ]), - elem('tbody', {}, rows.map(function(row) { - return elem('tr', {}, [ - elem('td', {}, [row.label]), - elem('td', {className: 'low'}, [row.formatter(row.low, 4)]), - elem('td', {}, [row.formatter(row.mean)]), - elem('td', {className: 'high'}, [row.formatter(row.high, 4)]), - ]); - })) - ]); - return elt; - } - document.addEventListener('DOMContentLoaded', function() { - var reportData = JSON.parse(document.getElementById('report-data') - .getAttribute('data-report-json')) - .map(function(report) { - report.groups = report.reportName.split('/'); - return report; - }); - var groups = groupReports(reportData); - var overview = document.getElementById('overview-chart'); - var overviewLineHeight = 16 * 1.25; - overview.style.height = - String(overviewLineHeight * reportData.length + 36) + 'px'; - overview.appendChild(mkOverview(reportData.slice())); - var reports = document.getElementById('reports'); - reportData.forEach(function(report, i) { - var id = 'report_' + String(i); - reports.appendChild( - elem('div', {id: id, className: 'report-details'}, [ - elem('h1', {}, [elem('a', {href: '#' + id}, [report.groups.join(' / ')])]), - elem('div', {className: 'kde'}, [mkKDE(report)]), - elem('div', {className: 'scatter'}, [mkScatter(report)]), - mkTable(report), mkOutliers(report) - ])); - }); - }, false); -})(); - - </script> - <style> - html,body { - padding: 0; margin: 0; - font-family: sans-serif; -} -* { - -webkit-tap-highlight-color: transparent; -} -div.scatter, div.kde { - position: relative; - display: inline-block; - box-sizing: border-box; - width: 50%; - padding: 0 2em; -} -.content, .explanation { - margin: auto; - max-width: 1000px; - padding: 0 20px; -} - -#legend-toggle { - cursor: pointer; -} - -.overview-info { - float:right; -} - -.overview-info a { - display: inline-block; - margin-left: 10px; -} -.overview-info .info { - font-size: 120%; - font-weight: 400; - vertical-align: middle; - line-height: 1em; -} -.chevron { - position:relative; - color: black; - display:block; - transition-property: transform; - transition-duration: 400ms; - line-height: 1em; - font-size: 180%; -} -.chevron.right { - transform: scale(-1,1); -} -.chevron::before { - vertical-align: middle; - content:"\2039"; -} - -select { - outline: none; - border:none; - background: transparent; -} - -footer .content { - padding: 0; -} - -span#explain-interactivity { - display-block: inline; - float: right; - color: #444; - font-size: 0.7em; -} - -@media screen and (max-width: 800px) { - div.scatter, div.kde { - width: 100%; - display: block; - } - .report-details .outliers { - margin: auto; - } - .report-details table { - margin: auto; - } -} -table.analysis .low, table.analysis .high { - opacity: 0.5; -} -.report-details { - margin: 2em 0; - page-break-inside: avoid; -} -a, a:hover, a:visited, a:active { - text-decoration: none; - color: #309ef2; -} -h1.title { - font-weight: 600; -} -h1 { - font-weight: 400; -} -#overview-chart { - width: 100%; /*height is determined by number of rows in JavaScript */ -} -footer { - background: #777777; - color: #ffffff; - padding: 20px; -} -footer a, footer a:hover, footer a:visited, footer a:active { - text-decoration: underline; - color: #fff; -} - -.explanation { - margin-top: 3em; -} - -.explanation h1 { - font-size: 2.6em; -} - -#grokularation.explanation li { - margin: 1em 0; -} - -#controls-explanation.explanation em { - font-weight: 600; - font-style: normal; -} - -@media print { - footer { - background: transparent; - color: black; - } - footer a, footer a:hover, footer a:visited, footer a:active { - color: #309ef2; - } - .no-print { - display: none; - } -} - - </style> - <meta name="viewport" content="width=device-width, initial-scale=1"> -</head> -<body> - <div class="content"> - <h1 class='title'>criterion performance measurements</h1> - <p class="no-print"><a href="#grokularation">want to understand this report?</a></p> - <h1 id="overview"><a href="#overview">overview</a></h1> - <div class="no-print"> - <select id="sort-overview" class="select"> - <option value="report-index">index</option> - <option value="lex">lexical</option> - <option value="colex">colexical</option> - <option value="duration">time ascending</option> - <option value="rev-duration">time descending</option> - </select> - <span class="overview-info"> - <a href="#controls-explanation" class="info" title="click bar/label to zoom; x-axis to toggle logarithmic scale; background to reset">ⓘ</a> - <a id="legend-toggle" class="chevron button"></a> - </span> - </div> - <aside id="overview-chart"></aside> - <main id="reports"></main> - - <div id="report-data" data-report-json='[{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":2.7673031436661194e-5,"confIntUDX":2.4498231316294646e-5,"confIntCL":5.0e-2},"estPoint":7.352684045588515e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":1.4363683833451546e-4,"confIntUDX":1.1959645355241744e-4,"confIntCL":5.0e-2},"estPoint":0.9997798608065898},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":6.477227971451382e-4,"confIntUDX":6.952355605235709e-4,"confIntCL":5.0e-2},"estPoint":-1.5513186491827042e-3},"iters":{"estError":{"confIntLDX":4.808464575752763e-5,"confIntUDX":4.5444712975958174e-5,"confIntCL":5.0e-2},"estPoint":7.441753830166231e-3}}}],"anStdDev":{"estError":{"confIntLDX":1.617182604553123e-5,"confIntUDX":2.7852819112811152e-5,"confIntCL":5.0e-2},"estPoint":7.675780512652575e-5},"anOutlierVar":{"ovFraction":2.7755102040816323e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[7.110913212422929e-3,7.1142633655731195e-3,7.117613518723309e-3,7.1209636718735e-3,7.12431382502369e-3,7.127663978173881e-3,7.13101413132407e-3,7.134364284474261e-3,7.137714437624451e-3,7.141064590774641e-3,7.144414743924831e-3,7.147764897075022e-3,7.1511150502252116e-3,7.154465203375402e-3,7.157815356525593e-3,7.161165509675783e-3,7.164515662825973e-3,7.167865815976163e-3,7.171215969126354e-3,7.174566122276543e-3,7.177916275426734e-3,7.181266428576924e-3,7.184616581727114e-3,7.1879667348773045e-3,7.191316888027495e-3,7.1946670411776855e-3,7.198017194327875e-3,7.201367347478066e-3,7.204717500628256e-3,7.208067653778446e-3,7.211417806928636e-3,7.214767960078827e-3,7.218118113229016e-3,7.221468266379207e-3,7.224818419529397e-3,7.228168572679588e-3,7.2315187258297775e-3,7.234868878979968e-3,7.2382190321301585e-3,7.241569185280348e-3,7.244919338430539e-3,7.248269491580729e-3,7.251619644730919e-3,7.254969797881109e-3,7.2583199510313e-3,7.26167010418149e-3,7.26502025733168e-3,7.26837041048187e-3,7.271720563632061e-3,7.2750707167822505e-3,7.278420869932441e-3,7.2817710230826315e-3,7.285121176232821e-3,7.288471329383012e-3,7.291821482533202e-3,7.295171635683393e-3,7.298521788833582e-3,7.301871941983773e-3,7.305222095133963e-3,7.308572248284153e-3,7.3119224014343434e-3,7.315272554584534e-3,7.318622707734724e-3,7.321972860884914e-3,7.325323014035105e-3,7.328673167185295e-3,7.332023320335485e-3,7.335373473485675e-3,7.338723626635866e-3,7.342073779786055e-3,7.345423932936246e-3,7.348774086086436e-3,7.352124239236626e-3,7.3554743923868165e-3,7.358824545537007e-3,7.3621746986871975e-3,7.365524851837387e-3,7.368875004987578e-3,7.372225158137768e-3,7.375575311287958e-3,7.378925464438148e-3,7.382275617588339e-3,7.385625770738528e-3,7.388975923888719e-3,7.392326077038909e-3,7.3956762301891e-3,7.3990263833392895e-3,7.40237653648948e-3,7.4057266896396705e-3,7.40907684278986e-3,7.412426995940051e-3,7.415777149090241e-3,7.419127302240431e-3,7.422477455390621e-3,7.425827608540812e-3,7.429177761691002e-3,7.432527914841192e-3,7.435878067991382e-3,7.439228221141573e-3,7.4425783742917626e-3,7.445928527441953e-3,7.4492786805921436e-3,7.452628833742333e-3,7.455978986892524e-3,7.459329140042714e-3,7.462679293192905e-3,7.466029446343094e-3,7.469379599493285e-3,7.472729752643475e-3,7.476079905793665e-3,7.4794300589438555e-3,7.482780212094046e-3,7.4861303652442365e-3,7.489480518394426e-3,7.492830671544617e-3,7.496180824694807e-3,7.499530977844997e-3,7.502881130995187e-3,7.506231284145378e-3,7.509581437295567e-3,7.512931590445758e-3,7.516281743595948e-3,7.519631896746138e-3,7.5229820498963285e-3,7.526332203046519e-3,7.5296823561967095e-3,7.533032509346899e-3,7.53638266249709e-3],"kdeType":"time","kdePDF":[118.01429634900273,142.81157951846535,192.15076063327294,264.9119529604066,358.13246994513844,466.0784241748318,579.8434768526234,687.8452728114656,777.3205052197104,836.5584858639492,857.2926944762239,836.5327263912449,777.2468165879111,687.6661261960886,579.4359430133301,465.20111922232223,356.3440109338181,261.46259754321534,185.86645295398066,132.01989156739464,100.60152743518923,91.73922295061115,106.00956531440474,144.91142516865304,210.6816454084448,305.4851665714372,430.16642434189174,582.8779255315127,757.977592940801,945.5744927498639,1131.9834249897337,1301.1386335109935,1436.770706585392,1524.9437044177275,1556.4456822550533,1528.5533024108545,1445.8364546890907,1319.8867781206243,1168.0849501401392,1011.7050621524661,873.7414192535591,776.8114504665884,741.3573760985696,784.2013420739121,917.3861603689364,1147.214627243901,1473.4792768117507,1888.9796098169106,2379.4621863881125,2924.0457046504616,3496.056949911888,4064.1245557764128,4593.459917124215,5047.487046609905,5390.207188042955,5589.6741944449805,5622.579417716365,5479.291127685649,5168.078356657122,4717.050682182178,4172.771431590369,3595.4359022323288,3051.546889306065,2605.6970313088423,2313.103792461381,2213.9963681432923,2330.1618520673774,2663.3315370979108,3194.890620555311,3886.6297048387128,4682.704905077032,5513.326766473005,6300.705755342448,6967.347627661859,7446.006629654731,7689.725730951615,7679.776713772189,7429.29702289993,6981.178029873522,6400.176394061361,5760.874346587475,5134.406020771779,4577.265465393758,4124.8103483095665,3790.510619286876,3570.159681454621,3448.862676810305,3408.1313765207706,3430.9286858300857,3503.6875116870588,3615.6216684882606,3756.535387629734,3914.5654382234325,4074.923511345227,4220.04595194685,4330.950559463086,4389.271360348402,4379.421610984287,4290.49849450514,4117.723468001804,3863.307037231868,3536.6377847286935,3153.696137557093,2735.656939209544,2306.7873208547567,1891.9164947390327,1513.8694609325198,1191.2562804764402,936.890058709578,756.928226449529,650.6799671194477,610.9647768387684,624.9506859065879,675.4858066023567,742.9693880643754,807.7193875147334,852.5911470747055,865.3815583820175,840.4511180108798,779.10935732792,688.629979846855,580.171943026891,466.2095811959294,358.18241600293067,264.9300910133163,192.15705225170763,142.81370568010297,118.0151422333616]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":0,"reportName":"Int/IntMap/sorted","reportOutliers":{"highSevere":0,"highMild":0,"lowMild":0,"samplesSeen":31,"lowSevere":0},"reportMeasured":[[6.217200999344641e-3,6.217289000000001e-3,12385108,1,null,null,null,null,null,null,null],[1.2872116999460559e-2,1.287214e-2,25641662,2,null,null,null,null,null,null,null],[2.0542241000839567e-2,2.0542788e-2,40921670,3,null,null,null,null,null,null,null],[2.655011899969395e-2,2.6549957e-2,52887974,4,null,null,null,null,null,null,null],[3.5731844999645546e-2,3.573150900000001e-2,71177493,5,null,null,null,null,null,null,null],[4.380239400052233e-2,4.380199800000001e-2,87253916,6,null,null,null,null,null,null,null],[5.1011092999942775e-2,5.1010658999999986e-2,101613560,7,null,null,null,null,null,null,null],[5.784996999955183e-2,5.784943499999998e-2,115236335,8,null,null,null,null,null,null,null],[6.498449500031711e-2,6.498436899999999e-2,129449176,9,null,null,null,null,null,null,null],[7.455372299955343e-2,7.455297299999997e-2,148510076,10,null,null,null,null,null,null,null],[8.099804999983462e-2,8.099716000000001e-2,161346714,11,null,null,null,null,null,null,null],[8.910338900022907e-2,8.910246399999999e-2,177492396,12,null,null,null,null,null,null,null],[9.576250999998592e-2,9.576151899999996e-2,190757234,13,null,null,null,null,null,null,null],[0.10393232699971122,0.10393172099999992,207032311,14,null,null,null,null,null,null,null],[0.10926871799983928,0.10926744,217660945,15,null,null,null,null,null,null,null],[0.11791101200014964,0.11789877100000001,234876173,16,null,null,null,null,null,null,null],[0.12528242300049897,0.125277211,249564389,17,null,null,null,null,null,null,null],[0.1315712129999156,0.13157116600000007,262090086,18,null,null,null,null,null,null,null],[0.1383157280006344,0.13831417200000007,275522106,19,null,null,null,null,null,null,null],[0.14789397500044288,0.14789226700000002,294601696,20,null,null,null,null,null,null,null],[0.1543316759998561,0.15432983600000005,307425324,21,null,null,null,null,null,null,null],[0.16356243999962317,0.16355443599999986,325812893,22,null,null,null,null,null,null,null],[0.16805485700024292,0.16805287400000002,334761487,23,null,null,null,null,null,null,null],[0.18391187399993214,0.18389842900000009,366349141,25,null,null,null,null,null,null,null],[0.18976665299942397,0.189764539,378011458,26,null,null,null,null,null,null,null],[0.20094363000043813,0.20094126,400275259,27,null,null,null,null,null,null,null],[0.20588823399975809,0.20588032200000006,410124560,28,null,null,null,null,null,null,null],[0.22099266500026715,0.22096891399999974,440212221,30,null,null,null,null,null,null,null],[0.22634645000016462,0.22634404800000008,450877515,31,null,null,null,null,null,null,null],[0.24570820200005983,0.24569896400000024,489444672,33,null,null,null,null,null,null,null],[0.25768690800032346,0.2576787909999996,513306881,35,null,null,null,null,null,null,null],[0.26550675999988016,0.26549695100000026,528883233,36,null,null,null,null,null,null,null],[0.28168039899992436,0.28168020699999996,561106751,38,null,null,null,null,null,null,null],[0.3000370749996364,0.3000333509999997,597666429,40,null,null,null,null,null,null,null],[0.31078128599983756,0.3107652009999997,619068834,42,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":1.0542696540582347e-4,"confIntUDX":1.1349446707542565e-4,"confIntCL":5.0e-2},"estPoint":2.384691264383546e-2},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":1.3233575049420576e-4,"confIntUDX":1.2240659069284732e-4,"confIntCL":5.0e-2},"estPoint":0.9997718982669127},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":2.2532732667691477e-3,"confIntUDX":1.5161923492544769e-3,"confIntCL":5.0e-2},"estPoint":-6.157843511237581e-4},"iters":{"estError":{"confIntLDX":1.8985383309628664e-4,"confIntUDX":1.8548652174593325e-4,"confIntCL":5.0e-2},"estPoint":2.39153277614222e-2}}}],"anStdDev":{"estError":{"confIntLDX":5.615478647105846e-5,"confIntUDX":1.0931308737006733e-4,"confIntCL":5.0e-2},"estPoint":2.3985870005862405e-4},"anOutlierVar":{"ovFraction":4.986149584487534e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[2.3371443158384863e-2,2.3380339600115926e-2,2.3389236041846985e-2,2.3398132483578048e-2,2.340702892530911e-2,2.341592536704017e-2,2.3424821808771232e-2,2.3433718250502295e-2,2.3442614692233354e-2,2.3451511133964417e-2,2.346040757569548e-2,2.346930401742654e-2,2.3478200459157602e-2,2.3487096900888665e-2,2.3495993342619724e-2,2.3504889784350787e-2,2.351378622608185e-2,2.352268266781291e-2,2.353157910954397e-2,2.3540475551275034e-2,2.3549371993006094e-2,2.3558268434737156e-2,2.356716487646822e-2,2.357606131819928e-2,2.358495775993034e-2,2.3593854201661404e-2,2.3602750643392463e-2,2.3611647085123526e-2,2.362054352685459e-2,2.3629439968585648e-2,2.363833641031671e-2,2.3647232852047773e-2,2.3656129293778833e-2,2.3665025735509895e-2,2.3673922177240958e-2,2.3682818618972017e-2,2.369171506070308e-2,2.3700611502434143e-2,2.3709507944165202e-2,2.3718404385896265e-2,2.3727300827627328e-2,2.3736197269358387e-2,2.374509371108945e-2,2.3753990152820512e-2,2.376288659455157e-2,2.3771783036282634e-2,2.3780679478013697e-2,2.3789575919744756e-2,2.379847236147582e-2,2.3807368803206882e-2,2.381626524493794e-2,2.3825161686669004e-2,2.3834058128400067e-2,2.3842954570131126e-2,2.385185101186219e-2,2.386074745359325e-2,2.386964389532431e-2,2.3878540337055373e-2,2.3887436778786436e-2,2.38963332205175e-2,2.3905229662248558e-2,2.391412610397962e-2,2.392302254571068e-2,2.3931918987441743e-2,2.3940815429172806e-2,2.394971187090387e-2,2.3958608312634928e-2,2.396750475436599e-2,2.3976401196097053e-2,2.3985297637828112e-2,2.3994194079559175e-2,2.4003090521290238e-2,2.4011986963021297e-2,2.402088340475236e-2,2.4029779846483423e-2,2.4038676288214482e-2,2.4047572729945545e-2,2.4056469171676607e-2,2.4065365613407667e-2,2.407426205513873e-2,2.4083158496869792e-2,2.409205493860085e-2,2.4100951380331914e-2,2.4109847822062977e-2,2.4118744263794036e-2,2.41276407055251e-2,2.413653714725616e-2,2.414543358898722e-2,2.4154330030718284e-2,2.4163226472449346e-2,2.4172122914180406e-2,2.418101935591147e-2,2.418991579764253e-2,2.419881223937359e-2,2.4207708681104653e-2,2.4216605122835716e-2,2.4225501564566775e-2,2.4234398006297838e-2,2.42432944480289e-2,2.425219088975996e-2,2.4261087331491023e-2,2.4269983773222085e-2,2.4278880214953145e-2,2.4287776656684208e-2,2.429667309841527e-2,2.430556954014633e-2,2.4314465981877392e-2,2.4323362423608455e-2,2.4332258865339514e-2,2.4341155307070577e-2,2.435005174880164e-2,2.43589481905327e-2,2.4367844632263762e-2,2.4376741073994825e-2,2.4385637515725884e-2,2.4394533957456947e-2,2.440343039918801e-2,2.441232684091907e-2,2.442122328265013e-2,2.4430119724381194e-2,2.4439016166112253e-2,2.4447912607843316e-2,2.445680904957438e-2,2.4465705491305438e-2,2.44746019330365e-2,2.4483498374767564e-2,2.4492394816498623e-2,2.4501291258229686e-2],"kdeType":"time","kdePDF":[969.3268907095556,969.7035149475997,970.4551990501163,971.5788203698887,973.0697101554875,974.9216717295551,977.1270045855246,979.6765342831832,982.5596479951954,985.7643355294048,989.2772356256795,993.0836873013857,997.1677859964562,1001.5124442475768,1006.0994566014324,1010.9095684592555,1015.9225485293194,1021.1172645504552,1026.4717619383418,1031.9633449971332,1037.5686603320748,1043.2637820940226,1049.0242986842884,1054.8254005478655,1060.641968684872,1066.448663513818,1072.2200137260818,1077.9305047785447,1083.554666680686,1089.0671607433583,1094.4428649688766,1099.6569577757969,1104.6849997666639,1109.5030132629565,1114.087559348273,1118.4158121783103,1122.4656303342906,1126.2156250149592,1129.6452248810256,1132.734737384782,1135.465406436462,1137.8194662776027,1139.780191450091,1141.3319427676643,1142.4602092141988,1143.151645710245,1143.3941067056578,1143.1766755720387,1142.4896897837286,1141.324761890513,1139.6747962987517,1137.5340018905526,1134.897900522651,1131.7633314580928,1128.128451794407,1123.9927329620102,1119.3569533758568,1114.2231873321757,1108.5947902502799,1102.4763803672042,1095.873817000148,1088.794175498636,1081.245719014775,1073.2378672263028,1064.7811621529986,1055.8872312128738,1046.5687476700082,1036.839388631338,1026.7137907548217,1016.2075038364884,1005.33694244864,994.1193358061831,982.5726760423997,970.7156650796904,958.5676602845599,946.1486190996941,933.4790428489173,920.5799199134742,907.472668479991,894.1790790619275,880.7212569968967,867.1215651222017,853.4025668298644,839.586969700616,825.6975699133234,811.7571976224896,797.7886634913338,783.8147065618766,769.8579436360491,755.9408203334068,742.0855639812977,728.3141384825406,714.6482012936629,701.1090626337417,687.7176470297745,674.4944572895516,661.4595409770977,648.6324594492095,636.0322594943761,623.6774475977357,611.5859668376994,599.7751764017407,588.2618336906837,577.0620789628656,566.1914224519323,555.6647338749659,545.496234231284,535.6994897768194,526.2874080445964,517.272235768688,508.66555855728706,500.47830215030393,492.7207350883447,485.4024726131353,478.53248161453166,472.1190864362607,466.1699753515287,460.6922075206466,455.69222024583786,451.17583634342736,447.1482714605948,443.61414117275075,440.57746770828635,438.0416861598256,436.00965005505424,434.4836361755732,433.465348528817,432.95592139577457]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":1,"reportName":"Int/IntMap/random","reportOutliers":{"highSevere":0,"highMild":0,"lowMild":0,"samplesSeen":18,"lowSevere":0},"reportMeasured":[[2.5541426000017964e-2,2.554147699999998e-2,50879350,1,null,null,null,null,null,null,null],[4.806923999967694e-2,4.806906600000005e-2,95753877,2,null,null,null,null,null,null,null],[7.167264300005627e-2,7.167202199999956e-2,142771087,3,null,null,null,null,null,null,null],[9.762854899963713e-2,9.762766700000025e-2,194475137,4,null,null,null,null,null,null,null],[0.12057168999945134,0.12056434900000035,240176454,5,null,null,null,null,null,null,null],[0.1407935830002316,0.1407865450000001,280458875,6,null,null,null,null,null,null,null],[0.16496227300012833,0.16496033300000068,328601328,7,null,null,null,null,null,null,null],[0.18833427299978212,0.1883161900000001,375157510,8,null,null,null,null,null,null,null],[0.21292828399964492,0.21292578200000012,424148246,9,null,null,null,null,null,null,null],[0.23763062199941487,0.23762774500000017,473354739,10,null,null,null,null,null,null,null],[0.26107708899962745,0.2610681640000001,520059293,11,null,null,null,null,null,null,null],[0.2858837960002347,0.28586835500000074,569473933,12,null,null,null,null,null,null,null],[0.3072580120006023,0.30724835599999967,612050130,13,null,null,null,null,null,null,null],[0.33692351300032897,0.33690281200000083,671143371,14,null,null,null,null,null,null,null],[0.3573156359998393,0.35731314900000033,711767792,15,null,null,null,null,null,null,null],[0.3800062059999618,0.3800015489999993,756963099,16,null,null,null,null,null,null,null],[0.40747259199997643,0.4074561369999987,811675392,17,null,null,null,null,null,null,null],[0.43036303000008047,0.4303513530000007,857272424,18,null,null,null,null,null,null,null],[0.4577799150001738,0.4577572090000004,911886498,19,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":9.279852681798491e-5,"confIntUDX":1.2486348868947367e-4,"confIntCL":5.0e-2},"estPoint":7.604115020994802e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":4.906091292551817e-3,"confIntUDX":3.649340090298714e-3,"confIntCL":5.0e-2},"estPoint":0.9956959306868398},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":2.6865724837684237e-3,"confIntUDX":1.7813090709538108e-3,"confIntCL":5.0e-2},"estPoint":-3.075320241693394e-3},"iters":{"estError":{"confIntLDX":1.5213056849250773e-4,"confIntUDX":2.179650372497368e-4,"confIntCL":5.0e-2},"estPoint":7.859752272345666e-3}}}],"anStdDev":{"estError":{"confIntLDX":1.0005736098852002e-4,"confIntUDX":1.4607896645360828e-4,"confIntCL":5.0e-2},"estPoint":3.0646956799213783e-4},"anOutlierVar":{"ovFraction":0.16765992872329774,"ovDesc":"a moderate","ovEffect":"Moderate"}},"reportKDEs":[{"kdeValues":[6.979644702203207e-3,6.993795983435156e-3,7.007947264667104e-3,7.022098545899053e-3,7.036249827131001e-3,7.050401108362949e-3,7.064552389594898e-3,7.078703670826847e-3,7.0928549520587955e-3,7.107006233290743e-3,7.121157514522692e-3,7.135308795754641e-3,7.149460076986589e-3,7.163611358218538e-3,7.177762639450486e-3,7.191913920682434e-3,7.206065201914383e-3,7.220216483146332e-3,7.23436776437828e-3,7.248519045610228e-3,7.262670326842177e-3,7.276821608074126e-3,7.290972889306074e-3,7.305124170538023e-3,7.319275451769971e-3,7.333426733001919e-3,7.347578014233868e-3,7.361729295465817e-3,7.375880576697765e-3,7.390031857929713e-3,7.404183139161662e-3,7.418334420393611e-3,7.432485701625559e-3,7.446636982857508e-3,7.460788264089456e-3,7.474939545321404e-3,7.489090826553353e-3,7.503242107785302e-3,7.51739338901725e-3,7.531544670249198e-3,7.545695951481147e-3,7.559847232713095e-3,7.573998513945044e-3,7.588149795176993e-3,7.6023010764089405e-3,7.616452357640889e-3,7.630603638872838e-3,7.644754920104787e-3,7.658906201336735e-3,7.673057482568683e-3,7.687208763800632e-3,7.70136004503258e-3,7.715511326264529e-3,7.729662607496478e-3,7.743813888728426e-3,7.757965169960374e-3,7.772116451192323e-3,7.786267732424272e-3,7.80041901365622e-3,7.814570294888168e-3,7.828721576120117e-3,7.842872857352065e-3,7.857024138584013e-3,7.871175419815963e-3,7.88532670104791e-3,7.89947798227986e-3,7.913629263511808e-3,7.927780544743756e-3,7.941931825975706e-3,7.956083107207653e-3,7.970234388439601e-3,7.984385669671551e-3,7.998536950903499e-3,8.012688232135447e-3,8.026839513367396e-3,8.040990794599344e-3,8.055142075831292e-3,8.069293357063242e-3,8.08344463829519e-3,8.097595919527138e-3,8.111747200759087e-3,8.125898481991035e-3,8.140049763222983e-3,8.154201044454933e-3,8.16835232568688e-3,8.182503606918828e-3,8.196654888150778e-3,8.210806169382726e-3,8.224957450614676e-3,8.239108731846623e-3,8.253260013078571e-3,8.26741129431052e-3,8.281562575542469e-3,8.295713856774417e-3,8.309865138006366e-3,8.324016419238314e-3,8.338167700470262e-3,8.352318981702212e-3,8.36647026293416e-3,8.380621544166108e-3,8.394772825398057e-3,8.408924106630005e-3,8.423075387861953e-3,8.437226669093903e-3,8.45137795032585e-3,8.465529231557798e-3,8.479680512789748e-3,8.493831794021696e-3,8.507983075253644e-3,8.522134356485593e-3,8.536285637717541e-3,8.550436918949491e-3,8.564588200181439e-3,8.578739481413387e-3,8.592890762645335e-3,8.607042043877284e-3,8.621193325109232e-3,8.635344606341182e-3,8.64949588757313e-3,8.663647168805078e-3,8.677798450037027e-3,8.691949731268975e-3,8.706101012500923e-3,8.720252293732873e-3,8.73440357496482e-3,8.748554856196768e-3,8.762706137428718e-3,8.776857418660666e-3],"kdeType":"time","kdePDF":[2.7795723032893136,5.600622738918413,12.803541343009115,27.52535688928007,54.245717892452625,97.97269084901994,162.77854840243896,250.1239227261839,357.7751285154487,479.90308579090583,608.178768616745,733.0474335560667,844.6219360579805,933.6032734114207,993.1051401895346,1021.2850369578108,1022.9857767242689,1008.1763008011659,986.9669485148768,963.9476097051984,935.7048137845438,893.2973467550463,827.9592293294309,736.3914188886027,622.9567641278716,498.50587176223365,377.30219919373485,273.7853851094067,200.28130746313514,165.94599937114162,176.5032604783209,233.94538256067221,335.707219920663,473.927986976819,636.484266658851,811.270784192961,993.1255249134109,1189.7852020792357,1421.6369595395943,1712.0027663907226,2070.2339681977764,2475.84104168331,2873.6978998411364,3185.773168224762,3336.1693514789763,3278.8999077702233,3016.2343989945884,2600.096019364657,2116.7534521405396,1661.6084714106578,1313.3889045753835,1115.4242019138953,1068.040393346764,1132.7638712135933,1246.6148618932743,1342.5641663424235,1370.037287677908,1308.5525902302368,1169.725834097552,987.624417693858,802.3974229335422,644.5846660995325,526.414126880675,442.53310070693703,378.00299164921944,318.315856972742,256.17240659738445,192.55946256857746,133.2920994369606,84.29089470359489,48.486442060445654,25.312269828986544,11.978173537282396,5.134803507122528,1.9933598540969082,0.7006509355579221,0.22298653668158575,6.439315907883615e-2,1.7595513704945033e-2,7.908806665181642e-3,1.7594785496209096e-2,6.438793965981933e-2,0.22295311077966698,0.700456853293203,1.9923376402239,5.129918151803871,11.956979022385074,25.228760408252633,48.187430061288765,83.31726880296911,130.40663611943782,184.76842925471055,236.98412172141198,275.15292740296775,289.19610143786826,275.15292741281826,236.98412180603245,184.76842990614935,130.40664065872127,83.31729743579987,48.187593556302616,25.22960550809592,11.960933368319566,5.146667740730532,2.056561432162932,0.9233767918281218,0.9233767918284924,2.056561432162685,5.1466677407312735,11.960933368319504,25.229605508096753,48.18759355630268,83.31729743580114,130.40664065873042,184.76842990625147,236.98412180709252,275.1529274227712,289.1961015224981,275.1529280544073,236.98412626069674,184.76845788755006,130.40679961455365,83.3181139038632,48.191384417073884,25.24551008074994,12.021203455810904,5.352842545004755,2.6927893027822174]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":2,"reportName":"Int/IntMap/revsorted","reportOutliers":{"highSevere":1,"highMild":1,"lowMild":2,"samplesSeen":31,"lowSevere":0},"reportMeasured":[[7.5310030006221496e-3,7.531241000000577e-3,15002629,1,null,null,null,null,null,null,null],[1.5792101000442926e-2,1.579239800000032e-2,31458871,2,null,null,null,null,null,null,null],[2.2902593000253546e-2,2.2902477000000587e-2,45622222,3,null,null,null,null,null,null,null],[3.053714999987278e-2,3.053694100000115e-2,60829969,4,null,null,null,null,null,null,null],[3.641659799995978e-2,3.6416337000000354e-2,72541814,5,null,null,null,null,null,null,null],[4.357454299952224e-2,4.357419599999979e-2,86800135,6,null,null,null,null,null,null,null],[4.990588700002263e-2,4.9905448999998825e-2,99411999,7,null,null,null,null,null,null,null],[5.772824099949503e-2,5.772770399999949e-2,114994010,8,null,null,null,null,null,null,null],[6.455245799952536e-2,6.454544900000059e-2,128587691,9,null,null,null,null,null,null,null],[7.194233400059602e-2,7.194153200000031e-2,143307897,10,null,null,null,null,null,null,null],[8.393108999916876e-2,8.39301790000011e-2,167189101,11,null,null,null,null,null,null,null],[9.109348099991621e-2,9.109265200000038e-2,181456822,12,null,null,null,null,null,null,null],[9.726328600027045e-2,9.725631699999937e-2,193746815,13,null,null,null,null,null,null,null],[0.10526152399961575,0.10525331700000073,209678890,14,null,null,null,null,null,null,null],[0.11368188699998427,0.1136805660000011,226452054,15,null,null,null,null,null,null,null],[0.12165439299951686,0.12165304400000032,242333043,16,null,null,null,null,null,null,null],[0.13188344099944516,0.1318819720000004,262709306,17,null,null,null,null,null,null,null],[0.13716816299984202,0.1371667710000004,273236445,18,null,null,null,null,null,null,null],[0.14272178200008057,0.14271470299999933,284299068,19,null,null,null,null,null,null,null],[0.1465893770000548,0.14658170299999895,292002893,20,null,null,null,null,null,null,null],[0.15938492900022538,0.1593830280000006,317491219,21,null,null,null,null,null,null,null],[0.16804903100000956,0.16804709100000004,334750019,22,null,null,null,null,null,null,null],[0.17630220299997745,0.1763001269999993,351190116,23,null,null,null,null,null,null,null],[0.18966936300057569,0.1896614809999999,377817265,25,null,null,null,null,null,null,null],[0.2243043319995195,0.22429415000000041,446809250,26,null,null,null,null,null,null,null],[0.2129039740002554,0.2128824809999994,424099800,27,null,null,null,null,null,null,null],[0.2171951979998994,0.21719259800000046,432647863,28,null,null,null,null,null,null,null],[0.23364544299965928,0.23364259599999926,465416257,30,null,null,null,null,null,null,null],[0.25729104099991673,0.25727712700000005,512521495,31,null,null,null,null,null,null,null],[0.2514050470008442,0.2513960759999989,500792689,33,null,null,null,null,null,null,null],[0.26684604000001855,0.26684281300000023,531551080,35,null,null,null,null,null,null,null],[0.27907214100014244,0.2790688120000002,555905224,36,null,null,null,null,null,null,null],[0.2965459089991782,0.2965244459999994,590712411,38,null,null,null,null,null,null,null],[0.3030382990000362,0.30302147999999995,603644981,40,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":4.195674442251593e-5,"confIntUDX":7.042809224307514e-5,"confIntCL":5.0e-2},"estPoint":1.7274672713066576e-2},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":1.4227653629372838e-4,"confIntUDX":9.171603223023794e-5,"confIntCL":5.0e-2},"estPoint":0.9998546641366959},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":7.010875088004954e-4,"confIntUDX":7.005196404700031e-4,"confIntCL":5.0e-2},"estPoint":8.778527701891882e-5},"iters":{"estError":{"confIntLDX":8.079879093980322e-5,"confIntUDX":7.620113752610305e-5,"confIntCL":5.0e-2},"estPoint":1.7253165168961873e-2}}}],"anStdDev":{"estError":{"confIntLDX":4.619004871269703e-5,"confIntUDX":6.924535064051809e-5,"confIntCL":5.0e-2},"estPoint":1.3506195745557274e-4},"anOutlierVar":{"ovFraction":4.15879017013232e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[1.699506592778764e-2,1.7000972853250158e-2,1.7006879778712677e-2,1.7012786704175196e-2,1.7018693629637715e-2,1.7024600555100234e-2,1.7030507480562757e-2,1.7036414406025276e-2,1.7042321331487795e-2,1.7048228256950314e-2,1.7054135182412833e-2,1.7060042107875352e-2,1.706594903333787e-2,1.707185595880039e-2,1.707776288426291e-2,1.708366980972543e-2,1.7089576735187947e-2,1.7095483660650466e-2,1.710139058611299e-2,1.7107297511575508e-2,1.7113204437038027e-2,1.7119111362500546e-2,1.7125018287963065e-2,1.7130925213425584e-2,1.7136832138888104e-2,1.7142739064350623e-2,1.714864598981314e-2,1.715455291527566e-2,1.716045984073818e-2,1.7166366766200702e-2,1.717227369166322e-2,1.717818061712574e-2,1.718408754258826e-2,1.718999446805078e-2,1.7195901393513298e-2,1.7201808318975817e-2,1.7207715244438336e-2,1.7213622169900855e-2,1.7219529095363374e-2,1.7225436020825893e-2,1.7231342946288412e-2,1.7237249871750935e-2,1.7243156797213454e-2,1.7249063722675973e-2,1.7254970648138492e-2,1.726087757360101e-2,1.726678449906353e-2,1.727269142452605e-2,1.727859834998857e-2,1.7284505275451088e-2,1.7290412200913607e-2,1.7296319126376126e-2,1.730222605183865e-2,1.7308132977301167e-2,1.7314039902763687e-2,1.7319946828226206e-2,1.7325853753688725e-2,1.7331760679151244e-2,1.7337667604613763e-2,1.7343574530076282e-2,1.73494814555388e-2,1.735538838100132e-2,1.736129530646384e-2,1.736720223192636e-2,1.737310915738888e-2,1.73790160828514e-2,1.738492300831392e-2,1.7390829933776438e-2,1.7396736859238957e-2,1.7402643784701476e-2,1.7408550710163995e-2,1.7414457635626514e-2,1.7420364561089034e-2,1.7426271486551553e-2,1.743217841201407e-2,1.7438085337476594e-2,1.7443992262939113e-2,1.7449899188401632e-2,1.745580611386415e-2,1.746171303932667e-2,1.746761996478919e-2,1.747352689025171e-2,1.7479433815714228e-2,1.7485340741176747e-2,1.7491247666639266e-2,1.7497154592101785e-2,1.7503061517564304e-2,1.7508968443026827e-2,1.7514875368489346e-2,1.7520782293951865e-2,1.7526689219414384e-2,1.7532596144876903e-2,1.7538503070339422e-2,1.754440999580194e-2,1.755031692126446e-2,1.755622384672698e-2,1.75621307721895e-2,1.7568037697652018e-2,1.757394462311454e-2,1.757985154857706e-2,1.758575847403958e-2,1.7591665399502097e-2,1.7597572324964617e-2,1.7603479250427136e-2,1.7609386175889655e-2,1.7615293101352174e-2,1.7621200026814693e-2,1.7627106952277212e-2,1.763301387773973e-2,1.763892080320225e-2,1.7644827728664773e-2,1.7650734654127292e-2,1.765664157958981e-2,1.766254850505233e-2,1.766845543051485e-2,1.7674362355977368e-2,1.7680269281439887e-2,1.7686176206902406e-2,1.7692083132364925e-2,1.7697990057827444e-2,1.7703896983289964e-2,1.7709803908752486e-2,1.7715710834215005e-2,1.7721617759677524e-2,1.7727524685140043e-2,1.7733431610602562e-2,1.773933853606508e-2,1.77452454615276e-2],"kdeType":"time","kdePDF":[903.2314303503553,907.3546793762542,915.5872093668958,927.9012564080563,944.2555895913632,964.5959663915735,988.8556717695703,1016.9560882993056,1048.807238155537,1084.3082353045666,1123.3475880248732,1165.8032980328753,1211.542712847758,1260.4221022068978,1312.285946723254,1366.9659467387323,1424.2797804859406,1484.0296621131074,1546.0007706697277,1609.9596395953456,1675.6526114501344,1742.8044735311173,1811.1173957587903,1880.2702921430148,1949.91872085936,2019.6954254007885,2089.211600647053,2158.0589435678,2225.8125195059015,2292.0344427112364,2356.278335379331,2418.094494429256,2477.035661264138,2532.6632584443346,2584.553930149879,2632.306201945743,2675.5470608932483,2713.938250378404,2747.1820757075534,2775.026526718459,2797.2695421326785,2813.7622664933797,2824.411183277734,2829.179045801061,2828.0845692319012,2821.2008906168144,2808.652847375272,2790.6131663688293,2767.297693563332,2738.959826856815,2705.884340463947,2668.3808072806055,2626.7768352189382,2581.4113343246536,2532.628023689037,2480.769371267062,2426.1711365845226,2369.157657145662,2310.0379855610176,2249.1029475951213,2186.6231531583408,2122.8479544145644,2058.0053092430235,1992.3024757274522,1925.9274353815345,1859.0509204308514,1791.8289043338807,1724.405405205004,1656.9154489502273,1589.4880424952944,1522.2490169545167,1455.3236152081631,1388.8387171903398,1322.9246181782119,1257.7162993816603,1193.3541550159553,1129.9841646905577,1067.7575233502569,1006.829762272096,947.3594130302906,889.5062813486888,833.4294090213098,779.2848094425376,727.2230657851351,677.3868806964883,629.9086628977979,584.9082297238575,542.4906959718971,502.74460901894435,465.7403786147103,431.52903763622834,400.1413579321718,371.5873336501709,345.8560335089558,322.9158136346358,302.7148740190791,285.1821344787435,270.22840021373554,257.7477826397283,247.61933798828258,239.70888410813635,233.87095479905062,229.95085071891262,227.7867462866172,227.2118129454696,228.05632057409306,230.14968068753703,233.3223973459066,237.40789439274795,242.24419080855145,247.67539961959415,253.55302997524288,259.7370767050042,266.09688686730993,272.5117984443193,278.8715523168829,285.0764848234395,291.03751437746104,296.675941568819,301.92308766197834,306.71980117764093,311.0158660624836,314.7693475974766,317.9459134942187,320.5181674620074,322.4650308444052,323.77120474564873,324.4267404939195]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":3,"reportName":"Int/Map/sorted","reportOutliers":{"highSevere":0,"highMild":1,"lowMild":0,"samplesSeen":22,"lowSevere":0},"reportMeasured":[[1.7190916000799916e-2,1.7190850000000424e-2,34244620,1,null,null,null,null,null,null,null],[3.536546100076521e-2,3.5365293000001685e-2,70448014,2,null,null,null,null,null,null,null],[5.1582289000180026e-2,5.1581824999999526e-2,102751330,3,null,null,null,null,null,null,null],[6.899046000035014e-2,6.897691100000003e-2,137427964,4,null,null,null,null,null,null,null],[8.624875599980442e-2,8.624786600000078e-2,171806095,5,null,null,null,null,null,null,null],[0.10438896699997713,0.10438176299999924,207940955,6,null,null,null,null,null,null,null],[0.12082024000028468,0.12081882300000046,240671314,7,null,null,null,null,null,null,null],[0.13798402700012957,0.13798251700000108,274861495,8,null,null,null,null,null,null,null],[0.15351822800039372,0.15351653600000148,305805176,9,null,null,null,null,null,null,null],[0.172660876000009,0.17265884400000076,343936651,10,null,null,null,null,null,null,null],[0.19098327299980156,0.19098118800000208,380434741,11,null,null,null,null,null,null,null],[0.20640635900053894,0.20639385600000182,411156552,12,null,null,null,null,null,null,null],[0.2225307620001331,0.2225179879999999,443276027,13,null,null,null,null,null,null,null],[0.2438478590001978,0.2438456120000012,485740553,14,null,null,null,null,null,null,null],[0.2572937049999382,0.2572906049999979,512523002,15,null,null,null,null,null,null,null],[0.27724424300049577,0.2772311639999998,552263544,16,null,null,null,null,null,null,null],[0.2927910759999577,0.2927874999999993,583232752,17,null,null,null,null,null,null,null],[0.31373627999983,0.3137323649999999,624954921,18,null,null,null,null,null,null,null],[0.3297072500008653,0.32969854899999973,656770042,19,null,null,null,null,null,null,null],[0.3418994690000545,0.3418831410000003,681055397,20,null,null,null,null,null,null,null],[0.36184869699991395,0.36184608900000015,720797430,21,null,null,null,null,null,null,null],[0.3805361780005114,0.38051474400000274,758019888,22,null,null,null,null,null,null,null],[0.3963172769999801,0.3963122739999996,789454030,23,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":2.1347617984970174e-4,"confIntUDX":5.594672966986319e-4,"confIntCL":5.0e-2},"estPoint":3.655746276191305e-2},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":1.9026630733968153e-3,"confIntUDX":2.248655595314175e-3,"confIntCL":5.0e-2},"estPoint":0.9977042076649039},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":9.563660332681363e-3,"confIntUDX":5.720838236242257e-3,"confIntCL":5.0e-2},"estPoint":-3.927389575096699e-3},"iters":{"estError":{"confIntLDX":9.702000493177973e-4,"confIntUDX":1.4477852307179795e-3,"confIntCL":5.0e-2},"estPoint":3.710133781766325e-2}}}],"anStdDev":{"estError":{"confIntLDX":3.6480456791067144e-4,"confIntUDX":4.8486309032258305e-4,"confIntCL":5.0e-2},"estPoint":6.467792559215952e-4},"anOutlierVar":{"ovFraction":5.859375e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[3.566617047516729e-2,3.569160173737097e-2,3.5717032999574655e-2,3.574246426177834e-2,3.576789552398202e-2,3.57933267861857e-2,3.581875804838938e-2,3.5844189310593064e-2,3.5869620572796745e-2,3.589505183500043e-2,3.592048309720411e-2,3.594591435940779e-2,3.597134562161147e-2,3.5996776883815154e-2,3.6022208146018836e-2,3.604763940822252e-2,3.60730706704262e-2,3.609850193262988e-2,3.612393319483356e-2,3.6149364457037245e-2,3.6174795719240926e-2,3.620022698144461e-2,3.622565824364829e-2,3.625108950585197e-2,3.627652076805565e-2,3.6301952030259335e-2,3.632738329246302e-2,3.63528145546667e-2,3.637824581687038e-2,3.640367707907406e-2,3.6429108341277744e-2,3.6454539603481426e-2,3.647997086568511e-2,3.6505402127888796e-2,3.653083339009248e-2,3.655626465229616e-2,3.658169591449984e-2,3.660712717670352e-2,3.6632558438907205e-2,3.665798970111089e-2,3.668342096331457e-2,3.670885222551825e-2,3.673428348772193e-2,3.6759714749925614e-2,3.6785146012129295e-2,3.681057727433298e-2,3.683600853653666e-2,3.686143979874034e-2,3.688687106094402e-2,3.6912302323147704e-2,3.6937733585351386e-2,3.696316484755507e-2,3.698859610975875e-2,3.701402737196243e-2,3.703945863416611e-2,3.7064889896369795e-2,3.7090321158573476e-2,3.711575242077716e-2,3.714118368298084e-2,3.716661494518452e-2,3.71920462073882e-2,3.7217477469591885e-2,3.724290873179557e-2,3.726833999399925e-2,3.729377125620293e-2,3.731920251840661e-2,3.7344633780610294e-2,3.7370065042813976e-2,3.739549630501766e-2,3.742092756722134e-2,3.744635882942502e-2,3.74717900916287e-2,3.7497221353832384e-2,3.7522652616036066e-2,3.754808387823975e-2,3.757351514044343e-2,3.759894640264711e-2,3.762437766485079e-2,3.7649808927054475e-2,3.7675240189258156e-2,3.770067145146184e-2,3.772610271366552e-2,3.77515339758692e-2,3.7776965238072883e-2,3.7802396500276565e-2,3.782782776248025e-2,3.785325902468393e-2,3.787869028688761e-2,3.790412154909129e-2,3.7929552811294974e-2,3.7954984073498656e-2,3.798041533570234e-2,3.800584659790602e-2,3.80312778601097e-2,3.805670912231339e-2,3.808214038451707e-2,3.810757164672075e-2,3.8133002908924435e-2,3.815843417112812e-2,3.81838654333318e-2,3.820929669553548e-2,3.823472795773916e-2,3.8260159219942844e-2,3.8285590482146525e-2,3.831102174435021e-2,3.833645300655389e-2,3.836188426875757e-2,3.838731553096125e-2,3.8412746793164934e-2,3.8438178055368616e-2,3.84636093175723e-2,3.848904057977598e-2,3.851447184197966e-2,3.853990310418334e-2,3.8565334366387025e-2,3.8590765628590706e-2,3.861619689079439e-2,3.864162815299807e-2,3.866705941520175e-2,3.869249067740543e-2,3.8717921939609115e-2,3.87433532018128e-2,3.876878446401648e-2,3.879421572622016e-2,3.881964698842384e-2,3.8845078250627524e-2,3.8870509512831206e-2,3.889594077503489e-2],"kdeType":"time","kdePDF":[361.50598587075854,365.07108082850607,372.15409014823763,382.6614578773666,396.4548291531921,413.35333257870536,433.13647731701764,455.5475551292192,480.2974277678315,507.06857967001116,535.5193245164593,565.2880708517991,595.9975747855894,627.259134422521,658.6767083555798,689.8509664284977,720.3833023028009,749.8798518043664,777.9555668308395,804.2383908019771,828.3735681348674,850.0280978414596,868.8953117620878,884.6995236021503,897.200658832244,906.1987409736823,911.538080200411,913.1109886827475,910.8608362931606,904.7842620338585,894.9323717138965,881.4107808098067,864.3784018030071,844.0449252946383,820.667000699856,794.543181568267,766.007758530481,735.4236555594277,703.1746090899805,669.6568817037196,635.2707806489007,600.4122556155888,565.4648402399026,530.7921791429194,496.7313491697952,463.58714275335853,431.6274361640577,401.0797189937993,372.1288164135175,344.9157948521823,319.5380063682803,296.0501979557201,274.4665894447495,254.7638070193333,236.88454775081607,220.74184282436906,206.22378221732336,193.19856060637414,181.5197027188406,171.03132610744038,161.57330072696823,152.9861683501343,145.1156915739266,137.816912727805,130.95761800294818,124.42112183457995,118.10831078412852,111.93891417365309,105.85199932015972,99.80572079877601,93.77638386595781,87.7569100506667,81.7548161360069,75.78983476401099,69.89131460358166,64.09553987620744,58.44310307710834,52.97645157879804,47.73770957987417,42.7668530719855,38.100288889886244,33.76986131546387,29.8022828906214,26.218961624090618,23.036175926758894,20.26553229991406,17.91462957813148,15.987847584049335,14.487177261494077,13.413013339077684,12.764838774694477,12.541741958294054,12.742722154703738,13.366755171694896,14.412608956360707,15.87841697239886,17.761035007428582,20.055223710368747,22.75271386045115,25.841223314633805,29.30350298204912,33.11649330679133,37.250671997328446,41.66966770541626,46.33020287829015,51.18241226910942,56.17056216522839,61.2341702697997,66.30949874162484,71.33136490352015,76.23518756611239,80.95916389168455,85.44645429694896,89.64724287894381,93.52053963314634,97.03559911409441,100.17284824579292,102.92424301437846,105.29300827326556,107.29275465032045,108.94600878641425,110.28223471164215,111.3354618279852,112.14166563308969,112.7360683519384,113.1505360957034,113.41124597809937,113.53678072934825]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":4,"reportName":"Int/Map/random","reportOutliers":{"highSevere":1,"highMild":1,"lowMild":0,"samplesSeen":16,"lowSevere":0},"reportMeasured":[[3.593531800015626e-2,3.593526200000241e-2,71583526,1,null,null,null,null,null,null,null],[7.46233879999636e-2,7.462270099999913e-2,148648939,2,null,null,null,null,null,null,null],[0.11060378000001947,0.11059710800000033,220321154,3,null,null,null,null,null,null,null],[0.146031473000221,0.14602284500000096,290892649,4,null,null,null,null,null,null,null],[0.17995737199998985,0.17995529299999902,358471285,5,null,null,null,null,null,null,null],[0.2193120470001304,0.21930498899999762,436864482,6,null,null,null,null,null,null,null],[0.25483090699981403,0.2548230740000008,507617841,7,null,null,null,null,null,null,null],[0.2901135530000829,0.29010437200000183,577899954,8,null,null,null,null,null,null,null],[0.32517910299975483,0.3251750989999991,647748810,9,null,null,null,null,null,null,null],[0.36648852199959947,0.36647592199999934,730036353,10,null,null,null,null,null,null,null],[0.39937830500002747,0.3993620789999994,795552153,11,null,null,null,null,null,null,null],[0.4375588879993302,0.43754683299999897,871607183,12,null,null,null,null,null,null,null],[0.4715958309998314,0.47157841499999975,939407261,13,null,null,null,null,null,null,null],[0.5061948460006533,0.5061703309999999,1008327654,14,null,null,null,null,null,null,null],[0.5471116850003455,0.5470777379999987,1089832954,15,null,null,null,null,null,null,null],[0.6180286920007347,0.6180145259999996,1231097607,16,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":6.001059954778218e-5,"confIntUDX":5.964893258324569e-5,"confIntCL":5.0e-2},"estPoint":1.7112117805356066e-2},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":2.6449149465879174e-4,"confIntUDX":1.6003092637850713e-4,"confIntCL":5.0e-2},"estPoint":0.9997492243421494},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":1.0694739224977176e-3,"confIntUDX":1.0027602772205149e-3,"confIntCL":5.0e-2},"estPoint":-1.7352889210684763e-5},"iters":{"estError":{"confIntLDX":1.212230361220222e-4,"confIntUDX":1.2342413863718898e-4,"confIntCL":5.0e-2},"estPoint":1.7100347726272433e-2}}}],"anStdDev":{"estError":{"confIntLDX":2.315984134498294e-5,"confIntUDX":2.7289346932400643e-5,"confIntCL":5.0e-2},"estPoint":1.4683004543950413e-4},"anOutlierVar":{"ovFraction":4.158790170132319e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[1.683523656425201e-2,1.683986938832499e-2,1.684450221239797e-2,1.6849135036470952e-2,1.6853767860543933e-2,1.6858400684616914e-2,1.6863033508689895e-2,1.6867666332762873e-2,1.6872299156835854e-2,1.6876931980908835e-2,1.6881564804981816e-2,1.6886197629054796e-2,1.6890830453127777e-2,1.689546327720076e-2,1.690009610127374e-2,1.690472892534672e-2,1.69093617494197e-2,1.6913994573492682e-2,1.6918627397565663e-2,1.692326022163864e-2,1.692789304571162e-2,1.6932525869784602e-2,1.6937158693857583e-2,1.6941791517930564e-2,1.6946424342003545e-2,1.6951057166076526e-2,1.6955689990149507e-2,1.6960322814222488e-2,1.696495563829547e-2,1.696958846236845e-2,1.697422128644143e-2,1.697885411051441e-2,1.698348693458739e-2,1.698811975866037e-2,1.699275258273335e-2,1.6997385406806332e-2,1.7002018230879313e-2,1.7006651054952294e-2,1.7011283879025275e-2,1.7015916703098256e-2,1.7020549527171237e-2,1.7025182351244218e-2,1.70298151753172e-2,1.703444799939018e-2,1.703908082346316e-2,1.7043713647536138e-2,1.704834647160912e-2,1.70529792956821e-2,1.705761211975508e-2,1.706224494382806e-2,1.7066877767901042e-2,1.7071510591974023e-2,1.7076143416047004e-2,1.7080776240119985e-2,1.7085409064192966e-2,1.7090041888265947e-2,1.7094674712338928e-2,1.709930753641191e-2,1.7103940360484887e-2,1.7108573184557867e-2,1.711320600863085e-2,1.711783883270383e-2,1.712247165677681e-2,1.712710448084979e-2,1.7131737304922772e-2,1.7136370128995753e-2,1.7141002953068734e-2,1.7145635777141715e-2,1.7150268601214696e-2,1.7154901425287677e-2,1.7159534249360654e-2,1.7164167073433635e-2,1.7168799897506616e-2,1.7173432721579597e-2,1.7178065545652578e-2,1.718269836972556e-2,1.718733119379854e-2,1.719196401787152e-2,1.71965968419445e-2,1.7201229666017483e-2,1.7205862490090464e-2,1.7210495314163445e-2,1.7215128138236425e-2,1.7219760962309403e-2,1.7224393786382384e-2,1.7229026610455365e-2,1.7233659434528346e-2,1.7238292258601327e-2,1.7242925082674308e-2,1.724755790674729e-2,1.725219073082027e-2,1.725682355489325e-2,1.726145637896623e-2,1.7266089203039212e-2,1.7270722027112193e-2,1.7275354851185174e-2,1.727998767525815e-2,1.7284620499331133e-2,1.7289253323404113e-2,1.7293886147477094e-2,1.7298518971550075e-2,1.7303151795623056e-2,1.7307784619696037e-2,1.7312417443769018e-2,1.7317050267842e-2,1.732168309191498e-2,1.732631591598796e-2,1.7330948740060942e-2,1.733558156413392e-2,1.73402143882069e-2,1.734484721227988e-2,1.7349480036352862e-2,1.7354112860425843e-2,1.7358745684498824e-2,1.7363378508571805e-2,1.7368011332644786e-2,1.7372644156717767e-2,1.7377276980790748e-2,1.738190980486373e-2,1.738654262893671e-2,1.739117545300969e-2,1.7395808277082668e-2,1.740044110115565e-2,1.740507392522863e-2,1.740970674930161e-2,1.7414339573374592e-2,1.7418972397447573e-2,1.7423605221520554e-2],"kdeType":"time","kdePDF":[1771.4963327638438,1771.6722242793498,1772.0232266406217,1772.5477818322756,1773.2435611217943,1774.1074749532436,1775.1356860477692,1776.323625633653,1777.666012710568,1779.156876235194,1780.7895800988072,1782.5568507518744,1784.4508073162085,1786.4629940119994,1788.5844147150888,1790.8055694493346,1793.1164926098245,1795.5067927051784,1797.965693401217,1800.4820756439267,1803.0445206369432,1805.6413534476847,1808.260687016838,1810.8904663480264,1813.5185126582376,1816.1325672748178,1818.7203350715456,1821.2695272443864,1823.7679032369,1826.2033116358787,1828.5637298694542,1830.8373025525918,1833.0123783384074,1835.0775451479954,1837.0216636663195,1838.8338990070258,1840.5037504646803,1842.0210792887378,1843.3761344294164,1844.559576221393,1845.562497986745,1846.3764455537098,1846.993434702448,1847.4059665630248,1847.6070410040745,1847.5901680630375,1847.3493774803221,1846.8792264101996,1846.174805390547,1845.2317426617228,1844.0462069317716,1842.614908690826,1840.9351001819236,1839.0045741385118,1836.8216614006578,1834.385227522428,1831.694668482039,1828.7499056043719,1825.5513798021057,1822.100045237422,1818.3973625007175,1814.4452913964199,1810.246283418628,1805.803273991295,1801.1196745388406,1796.1993644438219,1791.0466829384525,1785.6664209667376,1780.0638130436046,1774.2445291271124,1768.2146665094224,1761.9807417220936,1755.5496824413574,1748.928819369605,1742.1258780603118,1735.1489706453806,1728.0065874162167,1720.707588203134,1713.261193491751,1705.6769752101945,1697.9648471169678,1690.1350547166292,1682.1981646286688,1674.165053334509,1666.0468952281215,1657.8551498976087,1649.601548567978,1641.2980796394659,1632.956973260884,1624.5906848837215,1616.2118777498886,1607.8334042741546,1599.4682862912518,1591.1296941473695,1582.8309246261035,1574.5853777098741,1566.4065321891756,1558.3079201437386,1550.3031003315687,1542.405630533846,1534.6290389156084,1526.9867944739535,1519.4922766570141,1512.1587442480668,1504.9993036197363,1498.0268764732293,1491.2541671867234,1484.6936299054557,1478.3574355134704,1472.2574386334284,1466.4051448062082,1460.811678006212,1455.4877486512485,1450.443622267574,1445.689088971113,1441.2334339249844,1437.085408931302,1433.2532053117043,1429.744428226335,1426.5660725749535,1423.7245006166424,1421.2254214362088,1419.0738723759023,1417.274202540614,1415.8300584733163,1414.7443720852903,1414.0193509127255,1413.6564707577347]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":5,"reportName":"Int/Map/revsorted","reportOutliers":{"highSevere":0,"highMild":0,"lowMild":0,"samplesSeen":22,"lowSevere":0},"reportMeasured":[[1.69116210008724e-2,1.6911613999997854e-2,33688293,1,null,null,null,null,null,null,null],[3.4749149000163015e-2,3.475050300000149e-2,69223300,2,null,null,null,null,null,null,null],[5.1696651999918686e-2,5.169624600000233e-2,102979173,3,null,null,null,null,null,null,null],[6.890151600055106e-2,6.890215100000319e-2,137253490,4,null,null,null,null,null,null,null],[8.610558299915283e-2,8.610475300000076e-2,171520966,5,null,null,null,null,null,null,null],[0.10173329300050682,0.1017271270000002,202650816,6,null,null,null,null,null,null,null],[0.11909899200054497,0.11909765399999728,237242777,7,null,null,null,null,null,null,null],[0.13569458599977224,0.13568752800000183,270300855,8,null,null,null,null,null,null,null],[0.15208569500009617,0.1520786830000027,302951433,9,null,null,null,null,null,null,null],[0.16982196599929011,0.16982010299999928,338281873,10,null,null,null,null,null,null,null],[0.1900637969993113,0.1900615340000016,378602699,11,null,null,null,null,null,null,null],[0.20726147999994282,0.20725452900000008,412861434,12,null,null,null,null,null,null,null],[0.22177942899998015,0.22176631299999983,441779325,13,null,null,null,null,null,null,null],[0.2387884589998066,0.23877915199999933,475661148,14,null,null,null,null,null,null,null],[0.2544549209997058,0.2544517820000003,506868050,15,null,null,null,null,null,null,null],[0.2765577669997583,0.2765491769999997,550897048,16,null,null,null,null,null,null,null],[0.2891334919995643,0.289118847000001,575946831,17,null,null,null,null,null,null,null],[0.3074710840000989,0.3074613090000007,612475105,18,null,null,null,null,null,null,null],[0.3291522760000589,0.32914252699999835,655663213,19,null,null,null,null,null,null,null],[0.34356909500002075,0.34355150000000023,684381312,20,null,null,null,null,null,null,null],[0.3545696129995122,0.35456524099999953,706294041,21,null,null,null,null,null,null,null],[0.37692146800054616,0.3769113259999983,750818278,22,null,null,null,null,null,null,null],[0.3927749220001715,0.3927503469999998,782397761,23,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":1.251605589017886e-4,"confIntUDX":2.2016691634739807e-4,"confIntCL":5.0e-2},"estPoint":2.0442200089708467e-2},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":8.642031904438907e-4,"confIntUDX":4.3926865995269626e-4,"confIntCL":5.0e-2},"estPoint":0.9994482346210234},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":2.169304343053545e-3,"confIntUDX":1.7339409824313043e-3,"confIntCL":5.0e-2},"estPoint":-3.775721857024442e-4},"iters":{"estError":{"confIntLDX":1.5368303657334326e-4,"confIntUDX":1.7691227575166585e-4,"confIntCL":5.0e-2},"estPoint":2.0470324575330472e-2}}}],"anStdDev":{"estError":{"confIntLDX":1.8955740340971194e-4,"confIntUDX":2.616120267741363e-4,"confIntCL":5.0e-2},"estPoint":3.987887002993838e-4},"anOutlierVar":{"ovFraction":4.535147392290249e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[1.979469576661965e-2,1.981152857606909e-2,1.9828361385518526e-2,1.9845194194967965e-2,1.9862027004417405e-2,1.9878859813866844e-2,1.989569262331628e-2,1.991252543276572e-2,1.992935824221516e-2,1.9946191051664595e-2,1.9963023861114034e-2,1.9979856670563474e-2,1.9996689480012913e-2,2.001352228946235e-2,2.0030355098911788e-2,2.0047187908361228e-2,2.0064020717810663e-2,2.0080853527260103e-2,2.0097686336709542e-2,2.011451914615898e-2,2.0131351955608418e-2,2.0148184765057857e-2,2.0165017574507296e-2,2.0181850383956732e-2,2.019868319340617e-2,2.021551600285561e-2,2.023234881230505e-2,2.0249181621754486e-2,2.0266014431203926e-2,2.0282847240653365e-2,2.0299680050102804e-2,2.031651285955224e-2,2.033334566900168e-2,2.035017847845112e-2,2.0367011287900555e-2,2.0383844097349994e-2,2.0400676906799434e-2,2.0417509716248873e-2,2.043434252569831e-2,2.045117533514775e-2,2.0468008144597188e-2,2.0484840954046624e-2,2.0501673763496063e-2,2.0518506572945502e-2,2.0535339382394942e-2,2.0552172191844378e-2,2.0569005001293817e-2,2.0585837810743256e-2,2.0602670620192692e-2,2.061950342964213e-2,2.063633623909157e-2,2.065316904854101e-2,2.0670001857990446e-2,2.0686834667439886e-2,2.0703667476889325e-2,2.072050028633876e-2,2.07373330957882e-2,2.075416590523764e-2,2.077099871468708e-2,2.0787831524136515e-2,2.0804664333585954e-2,2.0821497143035394e-2,2.083832995248483e-2,2.085516276193427e-2,2.087199557138371e-2,2.0888828380833148e-2,2.0905661190282584e-2,2.0922493999732023e-2,2.0939326809181463e-2,2.09561596186309e-2,2.0972992428080338e-2,2.0989825237529777e-2,2.1006658046979217e-2,2.1023490856428653e-2,2.1040323665878092e-2,2.105715647532753e-2,2.1073989284776967e-2,2.1090822094226407e-2,2.1107654903675846e-2,2.1124487713125285e-2,2.114132052257472e-2,2.115815333202416e-2,2.11749861414736e-2,2.1191818950923036e-2,2.1208651760372475e-2,2.1225484569821915e-2,2.1242317379271354e-2,2.125915018872079e-2,2.127598299817023e-2,2.129281580761967e-2,2.1309648617069105e-2,2.1326481426518544e-2,2.1343314235967983e-2,2.1360147045417423e-2,2.137697985486686e-2,2.1393812664316298e-2,2.1410645473765737e-2,2.1427478283215173e-2,2.1444311092664613e-2,2.1461143902114052e-2,2.147797671156349e-2,2.1494809521012927e-2,2.1511642330462367e-2,2.1528475139911806e-2,2.1545307949361246e-2,2.156214075881068e-2,2.157897356826012e-2,2.159580637770956e-2,2.1612639187158996e-2,2.1629471996608435e-2,2.1646304806057875e-2,2.1663137615507314e-2,2.167997042495675e-2,2.169680323440619e-2,2.171363604385563e-2,2.1730468853305065e-2,2.1747301662754504e-2,2.1764134472203944e-2,2.1780967281653383e-2,2.179780009110282e-2,2.1814632900552258e-2,2.1831465710001698e-2,2.1848298519451137e-2,2.1865131328900573e-2,2.1881964138350012e-2,2.189879694779945e-2,2.1915629757248888e-2,2.1932462566698327e-2],"kdeType":"time","kdePDF":[286.99771067110277,292.0796492599654,302.2044604566415,317.2934902052201,337.2275384488963,361.8456312969229,390.94375587818064,424.2738382135127,461.543268137857,502.41527114623347,546.5103930368041,593.4092997412927,642.6570048799335,693.7685273817812,746.2358597457327,799.536005149814,853.1397308690647,906.5205985700323,959.1637798414479,1010.5741558139466,1060.283236930622,1107.85452207312,1152.8870395006759,1195.0169649231518,1233.9173802985754,1269.2964041739895,1300.8940736720488,1328.478474084553,1351.8416821480805,1370.7961056608908,1385.1717627516168,1394.8149520362028,1399.588628518463,1399.374632075529,1394.0777312786117,1383.6312619548303,1368.0039737225727,1347.2075632245565,1321.304281245758,1290.4139595811776,1254.7198151453279,1214.4724516025428,1169.9915868089715,1121.665178210864,1069.9457861428316,1015.344193378087,958.420474642524,899.7728692167865,840.0249420345177,779.8116151640291,719.7647066169421,660.498624806446,602.5968358188271,546.5996512715952,492.9937839145893,442.20399533100954,394.5870253928258,350.42785716497536,309.938243870244,273.2573151474381,240.45399500381927,211.53090796362045,186.42942460911624,165.03550192011343,147.18600393469515,132.6752385791291,121.26150986039039,112.6735530395431,106.61678599765433,102.77936566576959,100.83807850716066,100.46411503532761,101.32877900177125,103.10916341169657,105.49379140497199,108.18817560276325,110.92020131620777,113.44519405191802,115.55049667740317,117.05936193450641,117.83396542028602,117.77736416342096,116.83426555817073,114.99052741266777,112.27137702789358,108.7384090388458,104.48549116529077,99.63376726863892,94.32599249879046,88.72046186744447,82.98479947920642,77.28986137942509,71.80397321957422,66.68767918812709,62.089126613072004,58.14015750743408,54.95313001879494,52.61845418208961,51.202800913832725,50.74793223120052,51.27010356077667,52.76000310065046,55.18321431616896,58.481210564694486,62.57291001063535,67.35682927206497,72.71387161097356,78.51076761253479,84.60415295453869,90.84522104499868,97.08483212736132,103.17890079052962,108.9938276915869,114.41169609283588,119.33492643997262,123.69007824614044,127.43051151408658,130.53767073685128,133.0208311972353,134.9152450198987,136.27873589788865,137.18690742945665,137.72724036310657,137.99244854752018,138.07353282378315,138.05300925640609,137.99878849914455,137.9591455114767]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":6,"reportName":"Int/HashMap/sorted","reportOutliers":{"highSevere":1,"highMild":1,"lowMild":0,"samplesSeen":20,"lowSevere":0},"reportMeasured":[[2.1916132999649562e-2,2.191631999999899e-2,43657923,1,null,null,null,null,null,null,null],[4.1261475999817776e-2,4.126126399999919e-2,82193002,2,null,null,null,null,null,null,null],[6.526294600007532e-2,6.519380499999983e-2,130003700,3,null,null,null,null,null,null,null],[8.052160600072966e-2,8.052377399999955e-2,160403852,4,null,null,null,null,null,null,null],[9.98642149997977e-2,9.98608090000026e-2,198937162,5,null,null,null,null,null,null,null],[0.12162375400021119,0.12161490800000152,242272408,6,null,null,null,null,null,null,null],[0.14113713200003986,0.14113564000000167,281142556,7,null,null,null,null,null,null,null],[0.16276684700005717,0.16276511199999533,324228343,8,null,null,null,null,null,null,null],[0.18150979000074585,0.18150784000000186,361564154,9,null,null,null,null,null,null,null],[0.20558318099938333,0.20557599400000015,409517631,10,null,null,null,null,null,null,null],[0.22416781700030697,0.22415160699999603,446546221,11,null,null,null,null,null,null,null],[0.24140508100026636,0.2413852669999983,480873919,12,null,null,null,null,null,null,null],[0.2621693299997787,0.2621662979999968,522235400,13,null,null,null,null,null,null,null],[0.2962347900001987,0.29622053599999987,590093079,14,null,null,null,null,null,null,null],[0.30513566099944,0.30512496600000105,607823489,15,null,null,null,null,null,null,null],[0.32493975200031855,0.32493580599999916,647272319,16,null,null,null,null,null,null,null],[0.348437444999945,0.3484234769999972,694079903,17,null,null,null,null,null,null,null],[0.3674023749999833,0.3673688319999968,731861112,18,null,null,null,null,null,null,null],[0.3890681050006606,0.38906355099999956,775014634,19,null,null,null,null,null,null,null],[0.41058566300034727,0.4105682799999997,817876846,20,null,null,null,null,null,null,null],[0.429722861999835,0.4297211989999994,856004866,21,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":8.198226758400831e-5,"confIntUDX":1.7116448711798626e-4,"confIntCL":5.0e-2},"estPoint":2.0335051349294322e-2},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":1.2157622312826133e-3,"confIntUDX":9.855755935979094e-4,"confIntCL":5.0e-2},"estPoint":0.9989464746337062},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":4.01829360108183e-3,"confIntUDX":2.7429742945086783e-3,"confIntCL":5.0e-2},"estPoint":-3.5069676672535536e-4},"iters":{"estError":{"confIntLDX":3.279018466556087e-4,"confIntUDX":4.801403352287306e-4,"confIntCL":5.0e-2},"estPoint":2.0369254905192244e-2}}}],"anStdDev":{"estError":{"confIntLDX":1.504603447961434e-4,"confIntUDX":1.3455344989462853e-4,"confIntCL":5.0e-2},"estPoint":2.632425820649563e-4},"anOutlierVar":{"ovFraction":4.535147392290246e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[1.9967912725744878e-2,1.9977672568984264e-2,1.9987432412223647e-2,1.9997192255463033e-2,2.0006952098702416e-2,2.0016711941941802e-2,2.0026471785181185e-2,2.003623162842057e-2,2.0045991471659953e-2,2.005575131489934e-2,2.0065511158138722e-2,2.0075271001378108e-2,2.008503084461749e-2,2.0094790687856877e-2,2.010455053109626e-2,2.0114310374335646e-2,2.012407021757503e-2,2.0133830060814414e-2,2.0143589904053797e-2,2.0153349747293183e-2,2.0163109590532566e-2,2.0172869433771952e-2,2.0182629277011335e-2,2.019238912025072e-2,2.0202148963490103e-2,2.021190880672949e-2,2.0221668649968872e-2,2.0231428493208258e-2,2.024118833644764e-2,2.0250948179687027e-2,2.026070802292641e-2,2.0270467866165796e-2,2.028022770940518e-2,2.0289987552644564e-2,2.0299747395883947e-2,2.0309507239123333e-2,2.0319267082362716e-2,2.0329026925602102e-2,2.0338786768841485e-2,2.034854661208087e-2,2.0358306455320253e-2,2.036806629855964e-2,2.0377826141799026e-2,2.0387585985038408e-2,2.0397345828277794e-2,2.0407105671517177e-2,2.0416865514756563e-2,2.0426625357995946e-2,2.0436385201235332e-2,2.0446145044474714e-2,2.04559048877141e-2,2.0465664730953483e-2,2.047542457419287e-2,2.0485184417432252e-2,2.0494944260671638e-2,2.050470410391102e-2,2.0514463947150407e-2,2.052422379038979e-2,2.0533983633629176e-2,2.0543743476868558e-2,2.0553503320107944e-2,2.0563263163347327e-2,2.0573023006586713e-2,2.0582782849826096e-2,2.0592542693065482e-2,2.0602302536304865e-2,2.061206237954425e-2,2.0621822222783633e-2,2.063158206602302e-2,2.0641341909262402e-2,2.0651101752501788e-2,2.066086159574117e-2,2.0670621438980557e-2,2.068038128221994e-2,2.0690141125459326e-2,2.069990096869871e-2,2.0709660811938094e-2,2.0719420655177477e-2,2.0729180498416863e-2,2.0738940341656246e-2,2.0748700184895632e-2,2.0758460028135015e-2,2.07682198713744e-2,2.0777979714613783e-2,2.078773955785317e-2,2.0797499401092552e-2,2.0807259244331938e-2,2.0817019087571324e-2,2.0826778930810707e-2,2.0836538774050093e-2,2.0846298617289476e-2,2.0856058460528862e-2,2.0865818303768244e-2,2.087557814700763e-2,2.0885337990247013e-2,2.08950978334864e-2,2.0904857676725782e-2,2.0914617519965168e-2,2.092437736320455e-2,2.0934137206443937e-2,2.094389704968332e-2,2.0953656892922706e-2,2.0963416736162088e-2,2.0973176579401474e-2,2.0982936422640857e-2,2.0992696265880243e-2,2.1002456109119626e-2,2.1012215952359012e-2,2.1021975795598394e-2,2.103173563883778e-2,2.1041495482077163e-2,2.105125532531655e-2,2.1061015168555932e-2,2.1070775011795318e-2,2.10805348550347e-2,2.1090294698274087e-2,2.110005454151347e-2,2.1109814384752856e-2,2.111957422799224e-2,2.1129334071231624e-2,2.1139093914471007e-2,2.1148853757710393e-2,2.1158613600949776e-2,2.1168373444189162e-2,2.1178133287428545e-2,2.118789313066793e-2,2.1197652973907313e-2,2.12074128171467e-2],"kdeType":"time","kdePDF":[872.5945396938032,880.0347005633495,894.8309429505259,916.8167659521034,945.7464550658823,981.2996355541915,1023.086889441229,1070.6561048689782,1123.4992092917603,1181.058954462791,1242.735469415216,1307.8923724998515,1375.862327131711,1445.9520284045666,1517.446708392788,1589.61433613731,1661.7097545741879,1732.9790337320644,1802.6643230172992,1870.0094542852746,1934.2664840830062,1994.7032735820983,2050.612096605257,2101.319149927415,2146.194726688319,2184.6637140387284,2216.2159995395414,2240.416324659411,2256.913112457887,2265.445821477113,2265.8504370144537,2258.062799331502,2242.1195785379155,2218.156828741414,2186.40617964551,2147.188842299612,2100.9077083650614,2048.0379020084847,1989.1161956155495,1924.7297227717106,1855.504414854375,1782.093554028564,1705.1667803563223,1625.3998204806053,1543.4651270564761,1460.023538976385,1375.7169990838368,1291.1623039592112,1206.9458134037798,1123.6190175640825,1041.6948475060728,961.6446190334456,883.8955167807477,808.8285522035933,736.7769605738548,668.0250339323857,602.8074149997905,541.3088979094765,483.66479295945135,429.96191322998624,380.2402309436763,334.49523202472386,292.68097051574733,254.71379302733772,220.4766702219318,189.82404045064936,162.58704274584542,138.57899457469134,117.60095555230264,99.44721243319388,83.91052316194003,70.78696795841778,59.88027224321618,51.00548826960235,43.99194807736143,38.68542830785272,34.94949615483249,32.666034143415416,31.734968660755786,32.07325258594272,33.6131755512899,36.30009599746068,40.08970697332486,44.94496225032898,50.832800349882895,57.720811000922,65.5739907599809,74.3517314453443,84.00517616639713,94.47506279760067,105.69015381928008,117.56632502903344,130.00635471605116,142.90042098197833,156.12727991544497,169.55606351760358,183.04860598515535,196.4621824282588,209.65252722383397,222.47699128970635,234.7976991575719,246.48457749518624,257.418145464335,267.49198198525227,276.6148129861657,284.71219009137775,291.72775798448356,297.6241282636724,302.3833910420879,306.0073008187657,308.5171703067666,309.95349609545406,310.37532535454477,309.85935609094685,308.49874794983543,306.4016093732329,303.689122795791,300.4932743317436,296.9541688282181,293.216934690717,289.4282537179749,285.73258640069065,282.2681990313875,279.16313145362045,276.531269363801,274.4686993675433,273.05052609198003,272.32831749400736]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":7,"reportName":"Int/HashMap/random","reportOutliers":{"highSevere":2,"highMild":0,"lowMild":0,"samplesSeen":20,"lowSevere":0},"reportMeasured":[[2.22767590003059e-2,2.2271850999999288e-2,44376146,1,null,null,null,null,null,null,null],[4.194340499998361e-2,4.194328399999847e-2,83551258,2,null,null,null,null,null,null,null],[6.062047999967035e-2,6.062012299999964e-2,120755884,3,null,null,null,null,null,null,null],[8.087500500005262e-2,8.086553599999746e-2,161102225,4,null,null,null,null,null,null,null],[0.10064001899991126,0.10062834600000059,200473330,5,null,null,null,null,null,null,null],[0.12170766700000968,0.12170648400000061,242440067,6,null,null,null,null,null,null,null],[0.14254838899978495,0.14254695099999992,283953877,7,null,null,null,null,null,null,null],[0.16357909700036544,0.16357726400000416,325846104,8,null,null,null,null,null,null,null],[0.18331975399996736,0.18331249999999955,365169800,9,null,null,null,null,null,null,null],[0.20302739399994607,0.20300530299999764,404426197,10,null,null,null,null,null,null,null],[0.22220905699941795,0.22220049899999594,442635745,11,null,null,null,null,null,null,null],[0.2430346669998471,0.24303193800000145,484120046,12,null,null,null,null,null,null,null],[0.26566770799945516,0.26566467199999977,529204162,13,null,null,null,null,null,null,null],[0.28423458199995366,0.2842209280000034,566189237,14,null,null,null,null,null,null,null],[0.30207220099964616,0.3020568279999978,601721337,15,null,null,null,null,null,null,null],[0.3253867399998853,0.3253767699999983,648162910,16,null,null,null,null,null,null,null],[0.3442265089997818,0.344204677999997,685691439,17,null,null,null,null,null,null,null],[0.36131352199936373,0.36130930600000255,719728469,18,null,null,null,null,null,null,null],[0.38463966400013305,0.384635111999998,766193214,19,null,null,null,null,null,null,null],[0.4014240880005673,0.4014053890000042,799627694,20,null,null,null,null,null,null,null],[0.44318654400012747,0.4431680799999995,882817489,21,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":1.4537442624461897e-3,"confIntUDX":2.6233871295563843e-3,"confIntCL":5.0e-2},"estPoint":2.5066571560804135e-2},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":3.0148889811077106e-2,"confIntUDX":2.716982453801997e-2,"confIntCL":5.0e-2},"estPoint":0.9564440083435568},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":2.5629695839453452e-2,"confIntUDX":1.622053787420327e-2,"confIntCL":5.0e-2},"estPoint":3.3372510350474847e-3},"iters":{"estError":{"confIntLDX":2.2421682853189136e-3,"confIntUDX":2.8975875351205417e-3,"confIntCL":5.0e-2},"estPoint":2.392300415965444e-2}}}],"anStdDev":{"estError":{"confIntLDX":2.0822554758749725e-3,"confIntUDX":1.8387240329736237e-3,"confIntCL":5.0e-2},"estPoint":4.368889121877977e-3},"anOutlierVar":{"ovFraction":0.7221439400415633,"ovDesc":"a severe","ovEffect":"Severe"}},"reportKDEs":[{"kdeValues":[1.9263874025068618e-2,1.9412636440028483e-2,1.9561398854988348e-2,1.971016126994821e-2,1.9858923684908075e-2,2.000768609986794e-2,2.0156448514827806e-2,2.030521092978767e-2,2.0453973344747533e-2,2.0602735759707398e-2,2.0751498174667263e-2,2.090026058962713e-2,2.1049023004586994e-2,2.1197785419546856e-2,2.134654783450672e-2,2.1495310249466586e-2,2.164407266442645e-2,2.1792835079386313e-2,2.194159749434618e-2,2.2090359909306044e-2,2.223912232426591e-2,2.2387884739225775e-2,2.2536647154185636e-2,2.26854095691455e-2,2.2834171984105367e-2,2.2982934399065232e-2,2.3131696814025098e-2,2.328045922898496e-2,2.3429221643944825e-2,2.357798405890469e-2,2.3726746473864555e-2,2.387550888882442e-2,2.4024271303784282e-2,2.4173033718744148e-2,2.4321796133704013e-2,2.4470558548663878e-2,2.4619320963623743e-2,2.4768083378583605e-2,2.491684579354347e-2,2.5065608208503336e-2,2.52143706234632e-2,2.5363133038423066e-2,2.5511895453382928e-2,2.5660657868342793e-2,2.580942028330266e-2,2.5958182698262524e-2,2.610694511322239e-2,2.625570752818225e-2,2.6404469943142116e-2,2.655323235810198e-2,2.6701994773061847e-2,2.6850757188021712e-2,2.6999519602981574e-2,2.714828201794144e-2,2.7297044432901305e-2,2.744580684786117e-2,2.7594569262821035e-2,2.7743331677780897e-2,2.7892094092740762e-2,2.8040856507700627e-2,2.8189618922660493e-2,2.8338381337620358e-2,2.848714375258022e-2,2.8635906167540085e-2,2.878466858249995e-2,2.8933430997459816e-2,2.908219341241968e-2,2.9230955827379543e-2,2.9379718242339408e-2,2.9528480657299273e-2,2.967724307225914e-2,2.9826005487219004e-2,2.9974767902178866e-2,3.012353031713873e-2,3.0272292732098596e-2,3.042105514705846e-2,3.0569817562018327e-2,3.071857997697819e-2,3.0867342391938054e-2,3.101610480689792e-2,3.1164867221857784e-2,3.131362963681765e-2,3.146239205177751e-2,3.161115446673737e-2,3.175991688169724e-2,3.1908679296657104e-2,3.205744171161697e-2,3.2206204126576835e-2,3.23549665415367e-2,3.2503728956496565e-2,3.265249137145643e-2,3.2801253786416296e-2,3.295001620137616e-2,3.309877861633602e-2,3.324754103129589e-2,3.339630344625575e-2,3.354506586121562e-2,3.369382827617548e-2,3.384259069113535e-2,3.399135310609521e-2,3.414011552105507e-2,3.428887793601494e-2,3.44376403509748e-2,3.4586402765934665e-2,3.4735165180894534e-2,3.4883927595854396e-2,3.503269001081426e-2,3.5181452425774126e-2,3.5330214840733995e-2,3.547897725569386e-2,3.562773967065372e-2,3.577650208561359e-2,3.592526450057345e-2,3.607402691553331e-2,3.622278933049318e-2,3.637155174545305e-2,3.65203141604129e-2,3.666907657537277e-2,3.681783899033264e-2,3.69666014052925e-2,3.7115363820252364e-2,3.726412623521223e-2,3.7412888650172095e-2,3.756165106513196e-2,3.7710413480091826e-2,3.7859175895051694e-2,3.800793831001155e-2,3.815670072497142e-2],"kdeType":"time","kdePDF":[97.83839744771048,97.82462227134631,97.79694267019318,97.7551014204561,97.69871585703935,97.62728164468203,97.54017775057075,97.43667257158747,97.31593115861757,97.17702347023618,97.01893357872581,96.84056974284599,96.64077525416646,96.41833995716361,96.17201233772597,95.90051207026617,95.60254291033237,95.27680581746469,94.92201219206484,94.53689711022535,94.12023244178158,93.67083973926486,93.1876027889077,92.66947971931452,92.11551456880525,91.52484821867381,90.89672860660474,90.23052014215666,89.5257122544583,88.7819270109687,87.9989257552231,87.17661472081686,86.315049588367,85.41443896173318,84.47514674927695,83.49769344529902,82.48275631592547,81.43116850253722,80.34391706427346,79.222139989125,78.0671222106023,76.88029067387312,75.66320850156066,74.41756831505937,73.14518477221276,71.84798638652023,70.52800669665251,69.18737485799885,67.82830573020611,66.45308953625859,65.06408116956185,63.66368922580455,62.254364836061505,60.83859037675035,59.41886813065087,57.99770897132801,56.5776211409591,55.16109918884291,53.75061313475747,52.34859791792595,50.957443188638095,49.57948349565135,48.21698891834765,46.87215618834228,45.547100340812136,44.243846931321215,42.964324849351584,41.71035975518083,40.48366816216009,39.285852181917946,38.11839494551874,36.982656709212755,35.87987164910179,34.81114534487564,33.77745294872225,32.77963803164237,31.81841209567537,30.894354737028728,30.007914441766125,29.159409992605955,28.349032462479997,27.576847767855924,26.84279975240221,26.146713769422362,25.488300729572316,24.867161578746583,24.28279216964319,23.734588489433467,23.22185220514002,22.743796487795684,22.299552076190025,21.888173541029797,21.50864571061899,21.159890219716566,20.840772144028602,20.55010668384216,20.286665861583753,20.049185199582766,19.836370346012856,19.646903618861103,19.47945043980862,19.332665632079486,19.205199558599972,19.095704079183673,19.002838307894027,18.92527415420507,18.86170163405955,18.81083393938055,18.7714122570034,18.742210330331304,18.722038759256534,18.709749036002435,18.70423731651284,18.704447928817146,18.70937662142168,18.71807355619753,18.72964605144747,18.743261081822812,18.75814754252676,18.773598285773897,18.788971937784027,18.803694504669114,18.817260775441007,18.829235530025823,18.83925455964266,18.847025506197287,18.852328526482548,18.855016785983484]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":8,"reportName":"Int/HashMap/revsorted","reportOutliers":{"highSevere":0,"highMild":2,"lowMild":0,"samplesSeen":18,"lowSevere":0},"reportMeasured":[[2.794468299998698e-2,2.794587199999654e-2,55669675,1,null,null,null,null,null,null,null],[7.316459699995903e-2,7.316482899999954e-2,145745678,2,null,null,null,null,null,null,null],[0.10409891699964646,0.10409865200000468,207365305,3,null,null,null,null,null,null,null],[9.984500700011267e-2,9.98442300000022e-2,198890201,4,null,null,null,null,null,null,null],[0.12185803800002759,0.12185709900000319,242740081,5,null,null,null,null,null,null,null],[0.1366814399998475,0.1366743669999977,272266985,6,null,null,null,null,null,null,null],[0.14857402100005856,0.14857253099999923,295957179,7,null,null,null,null,null,null,null],[0.19811703499999567,0.19810328199999816,394646214,8,null,null,null,null,null,null,null],[0.1939829370003281,0.19396143199999472,386410636,9,null,null,null,null,null,null,null],[0.22980951399949845,0.2298071140000033,457776439,10,null,null,null,null,null,null,null],[0.24752238800010673,0.24748755099999897,493059603,11,null,null,null,null,null,null,null],[0.2500593150007262,0.25004241299999563,498112930,12,null,null,null,null,null,null,null],[0.31981034799991903,0.3198081899999963,637059914,13,null,null,null,null,null,null,null],[0.3752840639999704,0.3752736129999974,747557200,14,null,null,null,null,null,null,null],[0.31829379800001334,0.3182500149999967,634034753,15,null,null,null,null,null,null,null],[0.44437383500007854,0.44435623700000093,885182194,16,null,null,null,null,null,null,null],[0.4625148180002725,0.46181722899999755,921318254,17,null,null,null,null,null,null,null],[0.4224695140001131,0.42246444999999966,841549643,18,null,null,null,null,null,null,null],[0.43437429099958536,0.4343594039999985,865263548,19,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":3.273948075541962e-4,"confIntUDX":3.311561734108386e-4,"confIntCL":5.0e-2},"estPoint":6.799653267933072e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":4.208388877836944e-2,"confIntUDX":3.545929954228477e-2,"confIntCL":5.0e-2},"estPoint":0.9373087736258467},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":8.185399860915975e-3,"confIntUDX":1.0164662011635944e-2,"confIntCL":5.0e-2},"estPoint":1.7856901310107545e-2},"iters":{"estError":{"confIntLDX":4.0855192217469256e-4,"confIntUDX":5.541358721524673e-4,"confIntCL":5.0e-2},"estPoint":5.63380987932288e-3}}}],"anStdDev":{"estError":{"confIntLDX":1.2097251902340401e-4,"confIntUDX":1.720021043338019e-4,"confIntCL":5.0e-2},"estPoint":9.861316275568532e-4},"anOutlierVar":{"ovFraction":0.7452584292183818,"ovDesc":"a severe","ovEffect":"Severe"}},"reportKDEs":[{"kdeValues":[5.270948137352351e-3,5.3008201699593065e-3,5.330692202566262e-3,5.360564235173218e-3,5.390436267780173e-3,5.420308300387129e-3,5.450180332994084e-3,5.48005236560104e-3,5.5099243982079955e-3,5.539796430814951e-3,5.569668463421907e-3,5.599540496028862e-3,5.629412528635818e-3,5.659284561242773e-3,5.689156593849729e-3,5.719028626456684e-3,5.74890065906364e-3,5.7787726916705955e-3,5.808644724277551e-3,5.838516756884507e-3,5.868388789491462e-3,5.898260822098418e-3,5.928132854705373e-3,5.958004887312329e-3,5.9878769199192845e-3,6.01774895252624e-3,6.047620985133196e-3,6.077493017740151e-3,6.107365050347107e-3,6.137237082954062e-3,6.167109115561018e-3,6.196981148167973e-3,6.226853180774929e-3,6.2567252133818845e-3,6.28659724598884e-3,6.316469278595796e-3,6.346341311202751e-3,6.376213343809707e-3,6.406085376416662e-3,6.435957409023618e-3,6.4658294416305735e-3,6.495701474237529e-3,6.525573506844485e-3,6.55544553945144e-3,6.585317572058396e-3,6.615189604665351e-3,6.645061637272307e-3,6.674933669879262e-3,6.704805702486218e-3,6.7346777350931735e-3,6.764549767700129e-3,6.794421800307085e-3,6.82429383291404e-3,6.854165865520996e-3,6.884037898127951e-3,6.913909930734907e-3,6.9437819633418624e-3,6.973653995948818e-3,7.003526028555774e-3,7.033398061162729e-3,7.063270093769685e-3,7.09314212637664e-3,7.123014158983596e-3,7.152886191590551e-3,7.182758224197507e-3,7.2126302568044625e-3,7.242502289411418e-3,7.272374322018374e-3,7.302246354625329e-3,7.332118387232285e-3,7.36199041983924e-3,7.391862452446196e-3,7.4217344850531514e-3,7.451606517660107e-3,7.4814785502670626e-3,7.511350582874018e-3,7.541222615480974e-3,7.571094648087929e-3,7.600966680694885e-3,7.63083871330184e-3,7.660710745908796e-3,7.6905827785157515e-3,7.720454811122707e-3,7.750326843729663e-3,7.780198876336618e-3,7.810070908943574e-3,7.83994294155053e-3,7.869814974157485e-3,7.89968700676444e-3,7.929559039371396e-3,7.959431071978352e-3,7.989303104585307e-3,8.019175137192263e-3,8.049047169799218e-3,8.078919202406174e-3,8.10879123501313e-3,8.138663267620085e-3,8.16853530022704e-3,8.198407332833996e-3,8.228279365440952e-3,8.258151398047907e-3,8.288023430654863e-3,8.317895463261818e-3,8.347767495868774e-3,8.37763952847573e-3,8.407511561082685e-3,8.43738359368964e-3,8.467255626296596e-3,8.497127658903552e-3,8.526999691510507e-3,8.556871724117463e-3,8.586743756724418e-3,8.616615789331374e-3,8.64648782193833e-3,8.676359854545285e-3,8.70623188715224e-3,8.736103919759196e-3,8.765975952366152e-3,8.795847984973107e-3,8.825720017580063e-3,8.855592050187018e-3,8.885464082793974e-3,8.91533611540093e-3,8.945208148007885e-3,8.97508018061484e-3,9.004952213221796e-3,9.034824245828752e-3,9.064696278435707e-3],"kdeType":"time","kdePDF":[346.12340375180366,346.0596212051218,345.9322138601291,345.74149633725466,345.48793838159776,345.17216225491705,344.7949392825998,344.3571855762806,343.8599569577356,343.30444311448434,342.691961022177,342.02394767328775,341.3019521558619,340.5276271300383,339.70271975377756,338.8290621126398,337.908561211552,336.9431885892701,335.9349696186496,334.8859725578763,333.7982974194666,332.67406472509634,331.5154042151694,330.3244435824628,329.1032972991914,327.8540556064139,326.5787737338508,325.27946141690944,323.95807277601125,322.61649662120544,321.2565472425326,319.87995574369415,318.4883619732995,317.08330710431744,315.6662269083825,314.2384457673188,312.80117145966324,311.3554907551451,309.9023658450143,308.44263163086646,306.97699388919756,305.5060283233966,304.03018050926084,302.5497667344626,301.06497572671714,299.5758712597709,298.08239562074584,296.58437391692814,295.08151919475984,293.57343833867577,292.0596387124979,290.53953550145883,289.0124597085354,287.4776667547284,285.93434562919566,284.3816285318114,282.81860094774675,281.2443120911352,279.65778565273604,278.05803078483433,276.4440532553491,274.8148667023368,273.1695039197073,271.50702810508864,269.82654400129763,268.1272088638676,266.4082431884667,264.66894113386223,262.908680578268,261.1269327494924,259.32327137220204,257.4973812788642,255.64906643444374,253.7782573287373,251.88501769423993,249.96955051168428,248.03220326977984,246.0734724502364,244.0940072137826,242.0946122676322,240.0762498995873,238.04004116875942,235.9872662476139,233.9193639147601,231.83793020250343,229.74471620770345,227.64162507883947,225.53070819642127,223.41416056791064,221.29431546218166,219.1736383121641,217.05471991773575,214.94026898407756,212.83310403362978,210.73614473242776,208.65240267398931,206.58497166603146,204.5370175671426,202.5117677220959,200.51250004579217,198.54253180684208,196.6052081625642,194.7038904976776,192.84194461922505,191.02272886027185,189.24958214470882,187.52581206504115,185.8546830243914,184.2394044930916,182.6831194291893,181.1888929109771,179.75970102826273,178.39842007756044,177.10781610470067,175.89053483654308,174.74909204154744,173.68586435692032,172.70308061791468,171.80281372263997,170.98697306343638,170.25729755349323,169.61534927496245,169.06250777232748,168.59996501225694,168.22872102860012,167.9495802685733,167.7631486535525,167.66983136523197]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":9,"reportName":"ByteString/Map/sorted","reportOutliers":{"highSevere":0,"highMild":0,"lowMild":0,"samplesSeen":32,"lowSevere":0},"reportMeasured":[[5.268668000098842e-3,5.268733000001191e-3,10495678,1,null,null,null,null,null,null,null],[1.088318399979471e-2,1.0883222000003911e-2,21679741,2,null,null,null,null,null,null,null],[1.8716007999501016e-2,1.8715995999997403e-2,37282649,3,null,null,null,null,null,null,null],[2.2553118000359973e-2,2.2553040000005353e-2,44925993,4,null,null,null,null,null,null,null],[2.838538600008178e-2,2.8385294000003114e-2,56543936,5,null,null,null,null,null,null,null],[3.3918402999916e-2,3.391824900000273e-2,67565467,6,null,null,null,null,null,null,null],[4.921759899934841e-2,4.9219360000002155e-2,98045252,7,null,null,null,null,null,null,null],[4.59771499999988e-2,4.5976885999998274e-2,91586282,8,null,null,null,null,null,null,null],[7.413082600032794e-2,7.41301039999982e-2,147667501,9,null,null,null,null,null,null,null],[7.0292215000336e-2,7.029163699999685e-2,140021366,10,null,null,null,null,null,null,null],[8.485722800014628e-2,8.485637899999432e-2,169034324,11,null,null,null,null,null,null,null],[9.985746099937387e-2,9.983587500000368e-2,198914684,12,null,null,null,null,null,null,null],[0.10295746300016617,0.10294534100000163,205089441,13,null,null,null,null,null,null,null],[0.10752186900026572,0.1075213480000059,214182854,14,null,null,null,null,null,null,null],[0.11492188699958206,0.11492063499999716,228922327,15,null,null,null,null,null,null,null],[0.1188515150006424,0.11885024999999416,236749779,16,null,null,null,null,null,null,null],[0.12236560000019381,0.12236445100000282,243750362,17,null,null,null,null,null,null,null],[0.1291521240000293,0.12915301000000312,257273098,18,null,null,null,null,null,null,null],[0.13736583500030974,0.13736501300000015,273631185,19,null,null,null,null,null,null,null],[0.1749710120002419,0.17494040400000443,348538762,20,null,null,null,null,null,null,null],[0.14640440499988472,0.14640285999999492,291634679,21,null,null,null,null,null,null,null],[0.1576957669994954,0.1576856719999995,314126629,22,null,null,null,null,null,null,null],[0.1521126509996975,0.1521033309999993,303005727,23,null,null,null,null,null,null,null],[0.19041092000043136,0.19040863700000443,379294179,25,null,null,null,null,null,null,null],[0.1583251020001626,0.15832455299999992,315382846,26,null,null,null,null,null,null,null],[0.17709199799992348,0.17708197400000358,352763570,27,null,null,null,null,null,null,null],[0.17102690899992012,0.17101550000000287,340682173,28,null,null,null,null,null,null,null],[0.2491226860001916,0.24911977900000437,496246763,30,null,null,null,null,null,null,null],[0.1811217040003612,0.18111969800000338,360790631,31,null,null,null,null,null,null,null],[0.18597984999996697,0.18597768400000092,370467684,33,null,null,null,null,null,null,null],[0.1983363890003602,0.19833410600000434,395081535,35,null,null,null,null,null,null,null],[0.2033770950001781,0.20337475499999869,405122666,36,null,null,null,null,null,null,null],[0.2123095649994866,0.21229444599999425,422916008,38,null,null,null,null,null,null,null],[0.22420824300024833,0.22420565800000247,446617870,40,null,null,null,null,null,null,null],[0.24246396499984257,0.24246101399999986,482982480,42,null,null,null,null,null,null,null],[0.2549935010001718,0.2549679999999981,507940920,44,null,null,null,null,null,null,null],[0.27398793599968485,0.27398464800000255,545777607,47,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":1.858320849709265e-4,"confIntUDX":2.94720572459925e-4,"confIntCL":5.0e-2},"estPoint":8.64794121917834e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":1.7372023516920798e-2,"confIntUDX":1.4506897591844314e-2,"confIntCL":5.0e-2},"estPoint":0.9799356136641313},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":5.1907539084835854e-3,"confIntUDX":3.4993608773215786e-3,"confIntCL":5.0e-2},"estPoint":-2.562478723368102e-5},"iters":{"estError":{"confIntLDX":3.3369302088950316e-4,"confIntUDX":4.91037106811221e-4,"confIntCL":5.0e-2},"estPoint":8.659140651168608e-3}}}],"anStdDev":{"estError":{"confIntLDX":1.6123901941357825e-4,"confIntUDX":1.948333034271641e-4,"confIntCL":5.0e-2},"estPoint":6.522594847018913e-4},"anOutlierVar":{"ovFraction":0.4210710119243513,"ovDesc":"a moderate","ovEffect":"Moderate"}},"reportKDEs":[{"kdeValues":[7.708719262449757e-3,7.73082710716894e-3,7.752934951888124e-3,7.775042796607307e-3,7.79715064132649e-3,7.819258486045673e-3,7.841366330764857e-3,7.863474175484041e-3,7.885582020203223e-3,7.907689864922407e-3,7.92979770964159e-3,7.951905554360773e-3,7.974013399079957e-3,7.99612124379914e-3,8.018229088518323e-3,8.040336933237507e-3,8.06244477795669e-3,8.084552622675873e-3,8.106660467395057e-3,8.12876831211424e-3,8.150876156833423e-3,8.172984001552606e-3,8.19509184627179e-3,8.217199690990972e-3,8.239307535710156e-3,8.26141538042934e-3,8.283523225148522e-3,8.305631069867706e-3,8.32773891458689e-3,8.349846759306072e-3,8.371954604025256e-3,8.39406244874444e-3,8.416170293463622e-3,8.438278138182806e-3,8.46038598290199e-3,8.482493827621172e-3,8.504601672340356e-3,8.52670951705954e-3,8.548817361778722e-3,8.570925206497906e-3,8.59303305121709e-3,8.615140895936272e-3,8.637248740655456e-3,8.65935658537464e-3,8.681464430093822e-3,8.703572274813005e-3,8.72568011953219e-3,8.747787964251373e-3,8.769895808970555e-3,8.792003653689739e-3,8.814111498408921e-3,8.836219343128105e-3,8.858327187847289e-3,8.880435032566473e-3,8.902542877285655e-3,8.924650722004839e-3,8.946758566724021e-3,8.968866411443205e-3,8.990974256162389e-3,9.013082100881573e-3,9.035189945600755e-3,9.057297790319939e-3,9.07940563503912e-3,9.101513479758305e-3,9.123621324477488e-3,9.145729169196672e-3,9.167837013915854e-3,9.189944858635038e-3,9.21205270335422e-3,9.234160548073404e-3,9.256268392792588e-3,9.278376237511772e-3,9.300484082230954e-3,9.322591926950138e-3,9.344699771669322e-3,9.366807616388504e-3,9.388915461107688e-3,9.411023305826872e-3,9.433131150546054e-3,9.455238995265238e-3,9.477346839984422e-3,9.499454684703604e-3,9.521562529422788e-3,9.543670374141972e-3,9.565778218861154e-3,9.587886063580338e-3,9.609993908299521e-3,9.632101753018703e-3,9.654209597737887e-3,9.676317442457071e-3,9.698425287176253e-3,9.720533131895437e-3,9.742640976614621e-3,9.764748821333803e-3,9.786856666052987e-3,9.808964510772171e-3,9.831072355491353e-3,9.853180200210537e-3,9.87528804492972e-3,9.897395889648903e-3,9.919503734368087e-3,9.94161157908727e-3,9.963719423806453e-3,9.985827268525637e-3,1.000793511324482e-2,1.0030042957964003e-2,1.0052150802683187e-2,1.007425864740237e-2,1.0096366492121553e-2,1.0118474336840736e-2,1.014058218155992e-2,1.0162690026279102e-2,1.0184797870998286e-2,1.020690571571747e-2,1.0229013560436652e-2,1.0251121405155836e-2,1.027322924987502e-2,1.0295337094594202e-2,1.0317444939313386e-2,1.033955278403257e-2,1.0361660628751754e-2,1.0383768473470936e-2,1.040587631819012e-2,1.0427984162909302e-2,1.0450092007628486e-2,1.047219985234767e-2,1.0494307697066853e-2,1.0516415541786036e-2],"kdeType":"time","kdePDF":[192.85843539548247,198.55820729258429,209.9067949869576,226.80045328064986,249.07916518889093,276.52187303832704,308.8409586123427,345.67666205505986,386.59225311209246,431.0708446764867,478.5147490445483,528.2482049637861,579.5241373523888,631.5353500894588,683.4302070340487,734.3324533042357,783.3644070660172,829.6723604661657,872.4527189944723,910.9772288236278,944.615625695085,972.8542004199242,995.3091039412916,1011.7336728628221,1022.0195870830836,1026.1922047371445,1024.4008846609647,1016.9054423719783,1004.0600527289315,986.2958999417108,964.1037025330952,938.0169525558506,908.5963675162615,876.4157277875089,842.0490214675415,806.0586828624682,768.9847035906334,731.3345018757492,693.5736169082901,656.11749705167,619.3248158534884,583.4928301859537,548.8552615867792,515.5830313504846,483.78793406620474,453.5290357467228,424.8212857171754,397.6455907087354,371.95945917964985,347.7073085882042,324.8296392734156,303.2704934936846,282.98289633129644,263.93226581791464,246.0980319183941,229.47387660518854,214.06707576964914,199.8973845656889,186.99577799845687,175.4031717925607,165.1690481490942,156.34974163483383,149.0060399682647,143.19974715835605,138.9889490172828,136.42190177269669,135.52970544040357,136.31818554906806,138.75964567239967,142.78532718838687,148.27948865557264,155.0759758545614,162.95799225172905,171.66151291244284,180.88244243186034,190.28724014597123,199.5263702720886,208.2496266402761,216.12217046739408,222.8400322885705,228.14387705816773,231.83000862790212,233.7578738525021,233.85368155153736,232.11013301734917,228.5826218152307,223.3825583539388,216.66867592883614,208.6372604758195,199.51221309341304,189.53571536326976,178.96004885476034,168.04085717691507,157.03187039845332,146.1808745204433,135.72653310380184,125.8955740130319,116.89984942794922,108.9328577322189,102.16546716452348,96.74078102212079,92.76830595891383,90.31780034347499,89.41336201121516,90.02844111351062,92.08251674594543,95.44014508844333,99.91296911641776,105.26508101631048,111.22186208795816,117.48211282364694,123.73295629753633,129.66668370483418,134.9984460154384,139.48351217280361,142.9327378505614,145.22493551640326,146.3150100805324,146.23701472307494,145.1016654681779,143.08829669582363,140.43170189396338,137.40474086604542,134.29796496199947,131.39778104354033,128.96481824030866,127.21416657121439,126.2990232822616]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":10,"reportName":"ByteString/Map/random","reportOutliers":{"highSevere":0,"highMild":3,"lowMild":0,"samplesSeen":30,"lowSevere":0},"reportMeasured":[[1.005231300041487e-2,1.0052598000001467e-2,20025096,1,null,null,null,null,null,null,null],[1.9699227000273822e-2,1.969939399999987e-2,39241513,2,null,null,null,null,null,null,null],[3.0796312000347825e-2,3.0796467999998356e-2,61347827,3,null,null,null,null,null,null,null],[3.530741799932002e-2,3.530734799999635e-2,70332637,4,null,null,null,null,null,null,null],[4.243936399961967e-2,4.243899900000514e-2,84538828,5,null,null,null,null,null,null,null],[4.865947199959919e-2,4.86529200000021e-2,96929313,6,null,null,null,null,null,null,null],[5.7684898999468714e-2,5.768456699999547e-2,114908101,7,null,null,null,null,null,null,null],[7.253194900022208e-2,7.253130099999794e-2,144482647,8,null,null,null,null,null,null,null],[7.364764199974161e-2,7.364090799999445e-2,146707433,9,null,null,null,null,null,null,null],[8.253616299953137e-2,8.253531300000105e-2,164410518,10,null,null,null,null,null,null,null],[9.276555499945971e-2,9.275186099999644e-2,184788186,11,null,null,null,null,null,null,null],[0.10018211700025859,0.10016250999999698,199560933,12,null,null,null,null,null,null,null],[0.10642467300021963,0.10641797800000319,211995873,13,null,null,null,null,null,null,null],[0.11410040999999183,0.11409916999999581,227285775,14,null,null,null,null,null,null,null],[0.12336995900022885,0.12336876100000183,245751278,15,null,null,null,null,null,null,null],[0.12825289299962606,0.12824530700000025,255477269,16,null,null,null,null,null,null,null],[0.14549820499996713,0.1454886399999964,289829482,17,null,null,null,null,null,null,null],[0.16991017300006206,0.16989852900000102,338457586,18,null,null,null,null,null,null,null],[0.18149093400006677,0.1814888429999968,361525955,19,null,null,null,null,null,null,null],[0.1649136410005667,0.16491175800000235,328504075,20,null,null,null,null,null,null,null],[0.1667965730002834,0.16679473699999647,332255295,21,null,null,null,null,null,null,null],[0.19235600899992278,0.1923537309999972,383168755,22,null,null,null,null,null,null,null],[0.22425931899942952,0.22425875300000087,446726143,23,null,null,null,null,null,null,null],[0.21758937799950218,0.2175805440000005,433433355,25,null,null,null,null,null,null,null],[0.2167109749998417,0.2167012699999944,431683137,26,null,null,null,null,null,null,null],[0.27762590299971635,0.277622633,553024427,27,null,null,null,null,null,null,null],[0.2656790169994565,0.26565922799999697,529226566,28,null,null,null,null,null,null,null],[0.24561053100023855,0.24560976800000134,489254877,30,null,null,null,null,null,null,null],[0.2500008759998309,0.24999787800000206,497995809,31,null,null,null,null,null,null,null],[0.2795256050003445,0.27952251100000325,556808921,33,null,null,null,null,null,null,null],[0.2945494880004844,0.2945459430000028,586735513,35,null,null,null,null,null,null,null],[0.3047629499997129,0.30474784300000124,607081324,36,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":1.0146217357556806e-4,"confIntUDX":1.8120545813261803e-4,"confIntCL":5.0e-2},"estPoint":6.0200457824953705e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":1.4863364800033585e-2,"confIntUDX":1.3585850286056411e-2,"confIntCL":5.0e-2},"estPoint":0.9845165665462834},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":3.999391374731412e-3,"confIntUDX":2.7250428196408825e-3,"confIntCL":5.0e-2},"estPoint":-1.831304674123719e-3},"iters":{"estError":{"confIntLDX":1.7752643444074283e-4,"confIntUDX":3.1884684952994836e-4,"confIntCL":5.0e-2},"estPoint":6.161397548473027e-3}}}],"anStdDev":{"estError":{"confIntLDX":1.52785339144139e-4,"confIntUDX":2.0805521912514502e-4,"confIntCL":5.0e-2},"estPoint":4.05037207706454e-4},"anOutlierVar":{"ovFraction":0.4049491808491435,"ovDesc":"a moderate","ovEffect":"Moderate"}},"reportKDEs":[{"kdeValues":[5.473953688048519e-3,5.490644426181652e-3,5.507335164314784e-3,5.524025902447917e-3,5.5407166405810485e-3,5.557407378714181e-3,5.5740981168473135e-3,5.590788854980446e-3,5.6074795931135785e-3,5.624170331246711e-3,5.640861069379843e-3,5.657551807512975e-3,5.674242545646108e-3,5.69093328377924e-3,5.707624021912373e-3,5.724314760045505e-3,5.741005498178637e-3,5.757696236311769e-3,5.774386974444902e-3,5.791077712578034e-3,5.807768450711167e-3,5.824459188844299e-3,5.841149926977431e-3,5.857840665110563e-3,5.874531403243696e-3,5.891222141376828e-3,5.907912879509961e-3,5.924603617643093e-3,5.941294355776225e-3,5.9579850939093576e-3,5.97467583204249e-3,5.991366570175623e-3,6.008057308308755e-3,6.024748046441888e-3,6.041438784575019e-3,6.058129522708152e-3,6.074820260841284e-3,6.091510998974417e-3,6.108201737107549e-3,6.124892475240682e-3,6.141583213373814e-3,6.158273951506946e-3,6.174964689640078e-3,6.191655427773211e-3,6.208346165906343e-3,6.225036904039476e-3,6.2417276421726075e-3,6.25841838030574e-3,6.2751091184388725e-3,6.291799856572005e-3,6.3084905947051375e-3,6.32518133283827e-3,6.3418720709714025e-3,6.358562809104534e-3,6.375253547237667e-3,6.391944285370799e-3,6.408635023503932e-3,6.425325761637064e-3,6.442016499770196e-3,6.458707237903328e-3,6.475397976036461e-3,6.492088714169593e-3,6.508779452302726e-3,6.525470190435858e-3,6.542160928568991e-3,6.558851666702122e-3,6.575542404835255e-3,6.592233142968387e-3,6.60892388110152e-3,6.625614619234652e-3,6.642305357367784e-3,6.6589960955009166e-3,6.675686833634049e-3,6.6923775717671816e-3,6.709068309900314e-3,6.725759048033447e-3,6.742449786166579e-3,6.759140524299711e-3,6.775831262432843e-3,6.792522000565976e-3,6.809212738699108e-3,6.825903476832241e-3,6.842594214965372e-3,6.859284953098505e-3,6.875975691231637e-3,6.89266642936477e-3,6.909357167497902e-3,6.926047905631035e-3,6.942738643764167e-3,6.9594293818973e-3,6.9761201200304315e-3,6.992810858163564e-3,7.0095015962966965e-3,7.026192334429829e-3,7.042883072562961e-3,7.059573810696093e-3,7.076264548829226e-3,7.092955286962358e-3,7.109646025095491e-3,7.126336763228623e-3,7.143027501361756e-3,7.159718239494888e-3,7.17640897762802e-3,7.193099715761152e-3,7.209790453894285e-3,7.226481192027417e-3,7.243171930160549e-3,7.259862668293681e-3,7.276553406426814e-3,7.293244144559946e-3,7.309934882693079e-3,7.326625620826211e-3,7.343316358959344e-3,7.360007097092476e-3,7.376697835225608e-3,7.3933885733587406e-3,7.410079311491873e-3,7.426770049625006e-3,7.443460787758137e-3,7.46015152589127e-3,7.476842264024402e-3,7.493533002157535e-3,7.510223740290667e-3,7.5269144784238e-3,7.543605216556932e-3,7.560295954690065e-3,7.576986692823197e-3,7.593677430956329e-3],"kdeType":"time","kdePDF":[121.82478688616182,135.24390771338489,162.38174256622165,203.76020146301767,259.9756927030033,331.4948828882259,418.41633889232446,520.2286133922315,635.6020114619961,762.2540623050751,896.9252965533394,1035.4908069911132,1173.2143997344922,1305.1281778906407,1426.49536782347,1533.2934928235456,1622.643852543284,1693.1152780869209,1744.8461265286785,1779.4560917448696,1799.7535657708738,1809.2784170978305,1811.747661472214,1810.4875939812632,1807.937962421923,1805.3018078707762,1802.3911531523124,1797.687938326534,1788.6065307170775,1771.9139586046367,1744.2413678899177,1702.6085361827243,1644.884316696557,1570.1192165668717,1478.7093479437697,1372.379347059022,1254.0002287538111,1127.2814364596047,996.3907991119163,865.560061236524,738.7277577088759,619.2580029546332,509.75684915742363,411.99089666018995,326.8987047953034,254.6759150552004,194.91024226377246,146.74199265646635,109.0283511073982,80.49404403511032,59.856029561749814,45.91484512390338,37.609767250695825,34.03888851246462,34.44860487457091,38.19984447353418,44.720570239878,53.45543279659407,63.82361577201444,75.19458846743893,86.88850537433555,98.2035246455894,108.46691690786108,117.10143791890938,123.6941949616943,128.05324065416764,130.23810201365407,130.55449820795042,129.50999378804053,127.73501878879114,125.88094434792201,124.51212982185848,124.01085032506322,124.51225269557929,125.88126207827611,127.73570628241384,129.51139778408506,130.55725671958388,130.24332766229838,128.06277019336883,123.71087077263591,117.12930228379659,108.51103152510753,98.26882891038359,86.97664191676168,75.29690108315467,63.907535761525885,53.4402443860973,44.43721018818427,37.32820543067468,32.42519196449465,29.928179055426508,29.934868570822797,32.44759165082797,37.373801884844724,44.520136699658735,53.58378657738896,64.1476174310892,75.68637871053703,87.5899926852536,99.20647139045623,109.90211173859194,119.13139988503974,126.50486730827798,131.84123966924417,135.19141265493374,136.82616231272078,137.18631441877363,136.80192130340873,136.19401550375792,135.77699734064092,135.78047138198988,136.2060406303975,136.82783598474768,137.23687303852284,136.92063477365733,135.36251798991336,132.14240937939562,127.02029223719038,119.98907401951824,111.28956635152001,101.38803502289359,90.92322285601676,80.63390959545555,71.27932694451422,63.5633401046598,58.07015853091618,55.21569366030053]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":11,"reportName":"ByteString/Map/revsorted","reportOutliers":{"highSevere":2,"highMild":2,"lowMild":0,"samplesSeen":33,"lowSevere":0},"reportMeasured":[[5.730931000471173e-3,5.731085999997276e-3,11416584,1,null,null,null,null,null,null,null],[1.107358699937322e-2,1.1073656999997183e-2,22059137,2,null,null,null,null,null,null,null],[1.808070199967915e-2,1.8080931999996608e-2,36017559,3,null,null,null,null,null,null,null],[2.334339099979843e-2,2.3343320999998696e-2,46500372,4,null,null,null,null,null,null,null],[2.8997962000175903e-2,2.8997803999999405e-2,57763925,5,null,null,null,null,null,null,null],[3.3903583999745024e-2,3.389761000000391e-2,67535691,6,null,null,null,null,null,null,null],[4.077235399927304e-2,4.077211200000619e-2,81218328,7,null,null,null,null,null,null,null],[4.577922699991177e-2,4.5773125000003745e-2,91191746,8,null,null,null,null,null,null,null],[5.5217939000613114e-2,5.5217460999998025e-2,109993545,9,null,null,null,null,null,null,null],[5.968087399924116e-2,5.9672932999994543e-2,118883504,10,null,null,null,null,null,null,null],[6.466178800019406e-2,6.466127899999918e-2,128805428,11,null,null,null,null,null,null,null],[7.037373799994384e-2,7.037298899999911e-2,140183258,12,null,null,null,null,null,null,null],[7.487446000050113e-2,7.48738160000002e-2,149148899,13,null,null,null,null,null,null,null],[8.054586500020378e-2,8.050665199999685e-2,160446037,14,null,null,null,null,null,null,null],[8.56363800003237e-2,8.563551999999675e-2,170586216,15,null,null,null,null,null,null,null],[9.200188300019363e-2,9.200142699999958e-2,183267166,16,null,null,null,null,null,null,null],[9.7334692000004e-2,9.733374400000372e-2,193889014,17,null,null,null,null,null,null,null],[0.10428558500007057,0.10428442999999987,207734819,18,null,null,null,null,null,null,null],[0.1093070169999919,0.10930587599999342,217737682,19,null,null,null,null,null,null,null],[0.11519934300031309,0.11519272900000033,229474888,20,null,null,null,null,null,null,null],[0.12531965200014383,0.125305455000003,249634337,21,null,null,null,null,null,null,null],[0.14925606300039362,0.14924727200000376,297315215,22,null,null,null,null,null,null,null],[0.1378330100005769,0.13782502499999794,274560627,23,null,null,null,null,null,null,null],[0.14632629599964275,0.14632471200000197,291478967,25,null,null,null,null,null,null,null],[0.15559459799987962,0.15559306600000156,309941712,26,null,null,null,null,null,null,null],[0.1631769780005925,0.16316835800000007,325045074,27,null,null,null,null,null,null,null],[0.2076769459999923,0.2076607569999993,413687776,28,null,null,null,null,null,null,null],[0.18284677700012253,0.18283772600000248,364226884,30,null,null,null,null,null,null,null],[0.20314648399926227,0.20314410099999947,404663308,31,null,null,null,null,null,null,null],[0.19946302300013485,0.19946075600000057,397325913,33,null,null,null,null,null,null,null],[0.21055673599948932,0.21055421300000177,419424100,35,null,null,null,null,null,null,null],[0.2593114110004535,0.2592952200000056,516542599,36,null,null,null,null,null,null,null],[0.22768934899977467,0.22766971800000135,453551700,38,null,null,null,null,null,null,null],[0.23597945500023343,0.23597134300000278,470066048,40,null,null,null,null,null,null,null],[0.25315554200005863,0.2531525549999998,504279991,42,null,null,null,null,null,null,null],[0.25404201800029114,0.2540246359999969,506045690,44,null,null,null,null,null,null,null],[0.27939415200035,0.2793907840000003,556546542,47,null,null,null,null,null,null,null],[0.295088451999618,0.2950853769999995,587810133,49,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":5.4239401475972455e-5,"confIntUDX":7.185268770627026e-5,"confIntCL":5.0e-2},"estPoint":4.183210063607106e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":5.743859002251495e-3,"confIntUDX":4.335195471424913e-3,"confIntCL":5.0e-2},"estPoint":0.9937076277093424},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":2.1241331929631735e-3,"confIntUDX":2.2072736389632704e-3,"confIntCL":5.0e-2},"estPoint":1.7202057697345626e-3},"iters":{"estError":{"confIntLDX":7.72167674596624e-5,"confIntUDX":1.392972994530622e-4,"confIntCL":5.0e-2},"estPoint":4.113512390105684e-3}}}],"anStdDev":{"estError":{"confIntLDX":4.7329458662270335e-5,"confIntUDX":5.825264413319379e-5,"confIntCL":5.0e-2},"estPoint":1.9627155674962126e-4},"anOutlierVar":{"ovFraction":0.2607287134452999,"ovDesc":"a moderate","ovEffect":"Moderate"}},"reportKDEs":[{"kdeValues":[3.906951581783667e-3,3.914047188226286e-3,3.921142794668904e-3,3.928238401111523e-3,3.935334007554142e-3,3.942429613996761e-3,3.94952522043938e-3,3.956620826881999e-3,3.9637164333246174e-3,3.970812039767236e-3,3.977907646209855e-3,3.985003252652474e-3,3.992098859095092e-3,3.999194465537711e-3,4.00629007198033e-3,4.013385678422949e-3,4.020481284865568e-3,4.027576891308187e-3,4.034672497750805e-3,4.041768104193424e-3,4.048863710636043e-3,4.0559593170786615e-3,4.06305492352128e-3,4.070150529963899e-3,4.077246136406518e-3,4.084341742849137e-3,4.091437349291756e-3,4.098532955734375e-3,4.105628562176993e-3,4.112724168619612e-3,4.119819775062231e-3,4.1269153815048495e-3,4.134010987947468e-3,4.141106594390087e-3,4.1482022008327065e-3,4.155297807275325e-3,4.162393413717944e-3,4.169489020160563e-3,4.176584626603181e-3,4.1836802330458e-3,4.190775839488419e-3,4.1978714459310375e-3,4.204967052373656e-3,4.212062658816275e-3,4.219158265258894e-3,4.226253871701513e-3,4.233349478144132e-3,4.240445084586751e-3,4.247540691029369e-3,4.254636297471988e-3,4.261731903914607e-3,4.2688275103572254e-3,4.275923116799844e-3,4.283018723242463e-3,4.2901143296850824e-3,4.297209936127701e-3,4.30430554257032e-3,4.311401149012939e-3,4.318496755455557e-3,4.325592361898176e-3,4.332687968340795e-3,4.339783574783413e-3,4.346879181226032e-3,4.353974787668651e-3,4.36107039411127e-3,4.368166000553889e-3,4.375261606996508e-3,4.3823572134391265e-3,4.389452819881745e-3,4.396548426324364e-3,4.403644032766983e-3,4.410739639209601e-3,4.41783524565222e-3,4.42493085209484e-3,4.432026458537458e-3,4.439122064980077e-3,4.446217671422696e-3,4.4533132778653145e-3,4.460408884307933e-3,4.467504490750552e-3,4.474600097193171e-3,4.481695703635789e-3,4.488791310078408e-3,4.495886916521027e-3,4.502982522963646e-3,4.510078129406265e-3,4.517173735848884e-3,4.5242693422915025e-3,4.531364948734121e-3,4.53846055517674e-3,4.545556161619359e-3,4.552651768061977e-3,4.559747374504596e-3,4.566842980947216e-3,4.573938587389834e-3,4.581034193832453e-3,4.588129800275072e-3,4.59522540671769e-3,4.602321013160309e-3,4.609416619602928e-3,4.6165122260455466e-3,4.623607832488165e-3,4.630703438930784e-3,4.637799045373403e-3,4.644894651816022e-3,4.651990258258641e-3,4.65908586470126e-3,4.666181471143878e-3,4.673277077586497e-3,4.680372684029116e-3,4.6874682904717345e-3,4.694563896914353e-3,4.701659503356973e-3,4.7087551097995915e-3,4.71585071624221e-3,4.722946322684829e-3,4.730041929127448e-3,4.737137535570066e-3,4.744233142012685e-3,4.751328748455304e-3,4.7584243548979225e-3,4.765519961340541e-3,4.77261556778316e-3,4.7797111742257795e-3,4.786806780668398e-3,4.793902387111017e-3,4.800997993553636e-3,4.808093599996254e-3],"kdeType":"time","kdePDF":[776.9589937378233,803.7244297328687,856.6539684841589,934.5515040579273,1035.6413032489331,1157.595307937139,1297.5768482589162,1452.3046068430856,1618.1391401915098,1791.1917971107052,1967.4528494282918,2142.932563490089,2313.806326477114,2476.553278447414,2628.0775281244005,2765.802085632588,2887.728039280513,2992.4549332266306,3079.1623024657683,3147.5563395073177,3197.7891562140635,3230.3606075569587,3246.0138615293044,3245.635725506639,3230.171266411974,3200.559753391602,3157.695790620016,3102.4161345011385,3035.5095367016506,2957.7443918276854,2869.9072619728418,2772.8446388538,2667.500594695041,2554.944150257121,2436.382037632519,2313.1547737608444,2186.7162744003854,2058.5993229977043,1930.3708075567881,1803.5815745423074,1679.7159479937548,1560.1454609467046,1446.0902835763204,1338.5904241268265,1238.4872804767851,1146.4147839483373,1062.7984081451154,987.8598401239741,921.6251576575407,863.934856395016,814.4548769387183,772.6886986849581,737.9913887567093,709.5870411591034,686.5911907839203,668.0394916714708,652.9232419037338,640.231323957802,628.9969685205397,618.3466292396907,607.5473629021537,596.0486030061796,583.5142014714967,569.8411315011855,555.1622567779793,539.8319684957883,524.3951046957152,509.541194406985,496.04750619730265,484.7154476501718,476.305433703684,471.47536470660236,470.7273546313584,474.36642159838647,482.4736425056361,494.8949493258631,511.24546720315,530.928191333553,553.1649488551963,577.0370184207278,601.5324634691792,625.597127080742,648.1862809852012,668.3140743063011,685.0981669922411,697.797260539488,705.8396719733233,708.8416538104636,706.6148439393402,699.163006234,686.6690318690502,669.4739205585521,648.0500451743326,622.9713265847731,594.8829448214371,564.472875373796,532.446912213722,499.5080236079008,466.34002276901214,433.59477560216135,401.8816484975329,371.75771351339046,343.7174079718224,318.1808537254534,295.4807794693755,275.8488147756292,259.4026761133526,246.13629253599285,235.91510824329322,228.47859323757095,223.4513997482925,220.3636929721952,218.68008411194816,217.83545819754795,217.2749832774392,216.4948589399106,215.08001994282938,212.7351104932141,209.30558160323108,204.78667532815376,199.31923599631008,193.1725902999046,186.71601607542584,180.38143451136557,174.62079948915718,169.86214504720317,166.46835331710525,164.70242641517314]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":12,"reportName":"ByteString/HashMap/sorted","reportOutliers":{"highSevere":0,"highMild":3,"lowMild":0,"samplesSeen":37,"lowSevere":0},"reportMeasured":[[3.508691000206454e-3,3.5088439999952925e-3,6990017,1,null,null,null,null,null,null,null],[8.737513999221846e-3,8.738131999997734e-3,17406720,2,null,null,null,null,null,null,null],[1.2593759000083082e-2,1.2593860999999151e-2,25087545,3,null,null,null,null,null,null,null],[1.6463273000226764e-2,1.6463348000002043e-2,32795496,4,null,null,null,null,null,null,null],[2.1917132999988098e-2,2.191174700000431e-2,43659239,5,null,null,null,null,null,null,null],[2.5211938999746053e-2,2.5211960000000033e-2,50222441,6,null,null,null,null,null,null,null],[2.7821570000014617e-2,2.7821529000000567e-2,55420970,7,null,null,null,null,null,null,null],[3.26131069996336e-2,3.261292899999546e-2,64965278,8,null,null,null,null,null,null,null],[3.607944499981386e-2,3.607341600000069e-2,71870360,9,null,null,null,null,null,null,null],[4.100149399982911e-2,4.100118900000638e-2,81674751,10,null,null,null,null,null,null,null],[4.412657200009562e-2,4.41269009999985e-2,87901288,11,null,null,null,null,null,null,null],[4.975815400030115e-2,4.975105100000121e-2,99117905,12,null,null,null,null,null,null,null],[5.236958400018921e-2,5.236255799999867e-2,104319582,13,null,null,null,null,null,null,null],[5.5950605000361975e-2,5.595015800000169e-2,111453277,14,null,null,null,null,null,null,null],[6.0200064000127895e-2,6.0199649999994165e-2,119917993,15,null,null,null,null,null,null,null],[6.371274799948878e-2,6.371221399999882e-2,126915144,16,null,null,null,null,null,null,null],[7.076924099965254e-2,7.076855000000393e-2,140971421,17,null,null,null,null,null,null,null],[7.626865299971541e-2,7.626798100000087e-2,151926194,18,null,null,null,null,null,null,null],[8.47573149994787e-2,8.473508800000218e-2,168836970,19,null,null,null,null,null,null,null],[8.437865900032193e-2,8.437792600000193e-2,168081186,20,null,null,null,null,null,null,null],[8.7004741999408e-2,8.699320500000596e-2,173313508,21,null,null,null,null,null,null,null],[0.10007723300077487,0.10007631500000258,199352341,22,null,null,null,null,null,null,null],[0.10371524800029874,0.10369821199999762,206598956,23,null,null,null,null,null,null,null],[0.11516233000020293,0.11516118899999839,229401564,25,null,null,null,null,null,null,null],[0.1116999180003404,0.11169891699999823,222505090,26,null,null,null,null,null,null,null],[0.1222060860000056,0.12220493799999588,243432767,27,null,null,null,null,null,null,null],[0.11628019599993422,0.1162788990000081,231628158,28,null,null,null,null,null,null,null],[0.12317499900018447,0.1231736360000042,245362339,30,null,null,null,null,null,null,null],[0.12817238499974337,0.12817092799998875,255316711,31,null,null,null,null,null,null,null],[0.1355673489997571,0.13556061900000316,270047859,33,null,null,null,null,null,null,null],[0.1414783210002497,0.14146428699999092,281822168,35,null,null,null,null,null,null,null],[0.14710562999971444,0.14709189799999933,293031500,36,null,null,null,null,null,null,null],[0.15307397800006584,0.1530722580000088,304920218,38,null,null,null,null,null,null,null],[0.17381271700014622,0.1738111100000026,346231840,40,null,null,null,null,null,null,null],[0.1734175130004587,0.17341569399999912,345444344,42,null,null,null,null,null,null,null],[0.2082519309997224,0.20822998500000267,414837678,44,null,null,null,null,null,null,null],[0.20506827400004113,0.20505860100000461,408491596,47,null,null,null,null,null,null,null],[0.20512327200049185,0.20512096000000213,408601228,49,null,null,null,null,null,null,null],[0.2106375029998162,0.2106349310000013,419584902,52,null,null,null,null,null,null,null],[0.2206458090004162,0.2206432110000094,439521530,54,null,null,null,null,null,null,null],[0.23217467900030897,0.23217183599999203,462486496,57,null,null,null,null,null,null,null],[0.24098477400002594,0.24096993300000236,480037110,60,null,null,null,null,null,null,null],[0.2523891589999039,0.252386247000004,502753696,63,null,null,null,null,null,null,null],[0.26778634800029977,0.26777832100000865,533424214,66,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":1.321278156905456e-5,"confIntUDX":2.0014747469060228e-5,"confIntCL":5.0e-2},"estPoint":4.002405826920141e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":3.3645344876553906e-4,"confIntUDX":3.8844563372608665e-4,"confIntCL":5.0e-2},"estPoint":0.9995180362322155},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":8.54357532900292e-4,"confIntUDX":6.868039487090028e-4,"confIntCL":5.0e-2},"estPoint":-5.172148492991144e-4},"iters":{"estError":{"confIntLDX":3.3403718698032936e-5,"confIntUDX":4.5042943381931946e-5,"confIntCL":5.0e-2},"estPoint":4.028950101154401e-3}}}],"anStdDev":{"estError":{"confIntLDX":1.3773554110513053e-5,"confIntUDX":2.368984051155525e-5,"confIntCL":5.0e-2},"estPoint":5.010562152886564e-5},"anOutlierVar":{"ovFraction":2.1728395061728405e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[3.9043660463083584e-3,3.906722081311098e-3,3.909078116313837e-3,3.9114341513165765e-3,3.913790186319316e-3,3.916146221322055e-3,3.918502256324795e-3,3.920858291327534e-3,3.923214326330273e-3,3.925570361333013e-3,3.927926396335752e-3,3.930282431338491e-3,3.932638466341231e-3,3.9349945013439705e-3,3.937350536346709e-3,3.939706571349449e-3,3.942062606352189e-3,3.944418641354927e-3,3.946774676357667e-3,3.949130711360407e-3,3.9514867463631455e-3,3.953842781365885e-3,3.956198816368625e-3,3.958554851371364e-3,3.960910886374103e-3,3.963266921376843e-3,3.965622956379582e-3,3.967978991382321e-3,3.970335026385061e-3,3.9726910613878e-3,3.975047096390539e-3,3.977403131393279e-3,3.979759166396018e-3,3.9821152013987575e-3,3.984471236401497e-3,3.986827271404236e-3,3.989183306406976e-3,3.991539341409715e-3,3.993895376412454e-3,3.996251411415194e-3,3.998607446417933e-3,4.000963481420672e-3,4.003319516423412e-3,4.0056755514261515e-3,4.00803158642889e-3,4.01038762143163e-3,4.01274365643437e-3,4.015099691437108e-3,4.017455726439848e-3,4.019811761442588e-3,4.0221677964453265e-3,4.024523831448066e-3,4.026879866450806e-3,4.0292359014535446e-3,4.031591936456284e-3,4.033947971459024e-3,4.036304006461763e-3,4.038660041464502e-3,4.041016076467242e-3,4.043372111469981e-3,4.04572814647272e-3,4.04808418147546e-3,4.050440216478199e-3,4.0527962514809385e-3,4.055152286483678e-3,4.057508321486417e-3,4.059864356489157e-3,4.062220391491896e-3,4.064576426494636e-3,4.066932461497375e-3,4.069288496500114e-3,4.071644531502854e-3,4.074000566505593e-3,4.0763566015083325e-3,4.078712636511072e-3,4.081068671513811e-3,4.0834247065165506e-3,4.08578074151929e-3,4.088136776522029e-3,4.090492811524769e-3,4.092848846527508e-3,4.095204881530247e-3,4.097560916532987e-3,4.099916951535726e-3,4.102272986538465e-3,4.104629021541205e-3,4.1069850565439445e-3,4.109341091546683e-3,4.111697126549423e-3,4.114053161552163e-3,4.116409196554901e-3,4.118765231557641e-3,4.121121266560381e-3,4.1234773015631195e-3,4.125833336565859e-3,4.128189371568599e-3,4.130545406571338e-3,4.132901441574077e-3,4.135257476576817e-3,4.137613511579556e-3,4.139969546582295e-3,4.142325581585035e-3,4.144681616587774e-3,4.1470376515905134e-3,4.149393686593253e-3,4.151749721595992e-3,4.1541057565987315e-3,4.156461791601471e-3,4.15881782660421e-3,4.16117386160695e-3,4.163529896609689e-3,4.165885931612428e-3,4.168241966615168e-3,4.170598001617907e-3,4.172954036620646e-3,4.175310071623386e-3,4.1776661066261255e-3,4.180022141628864e-3,4.182378176631604e-3,4.184734211634344e-3,4.187090246637082e-3,4.189446281639822e-3,4.191802316642562e-3,4.1941583516453005e-3,4.19651438664804e-3,4.19887042165078e-3,4.2012264566535186e-3,4.203582491656258e-3],"kdeType":"time","kdePDF":[839.7206085805137,897.691586990269,1012.1844198318238,1180.243883175856,1397.3218444202835,1657.2078896178332,1952.0327057488844,2272.393786754268,2607.6354604376756,2946.290771492242,3276.6676499708597,3587.541608134861,3868.9051364906854,4112.720048339064,4313.62052419102,4469.517483491529,4582.055741324405,4656.873116360344,4703.607308890328,4735.596703809347,4769.231075091032,4822.9321270706305,4915.78333675714,5065.880630536278,5288.532507311854,5594.4894532644585,5988.415792600895,6467.821713921061,7022.642195132035,7635.58198785113,8283.248043463243,8937.976426065841,9570.14935580374,10150.711689939091,10653.555028964338,11057.45471547211,11347.321688226895,11514.655201084466,11557.229216041082,11478.182905157486,11284.782607195013,10987.156005768908,10597.26174529848,10128.25953286503,9594.312750048597,9010.722082907372,8394.188452732975,7762.960968116527,7136.649751322013,6535.566486979087,5979.575676202882,5486.567474998964,5070.7691103330035,4741.173204397674,4500.365875957544,4343.985687200751,4260.948058196062,4234.448314592861,4243.63325468424,4265.7281877160995,4278.340987770073,4261.6462516393585,4200.1816309673795,4084.056915299384,3909.470251190093,3678.5276182517423,3398.4543273086156,3080.357283858767,2737.7359847212238,2384.94677733543,2035.8024695444449,1702.4456115646058,1394.5783854025387,1119.0748060500905,879.9501458569757,678.623929765606,514.3894144727395,384.99429991446647,287.24245418716833,217.54118609568775,172.33909146539426,148.4220538133988,143.05678267780382,153.99057433877525,179.3319392832749,217.3490189979365,266.2310038395179,323.8614730852015,387.6508332877725,454.4670238210268,520.6892330696026,582.3896006292911,635.6253665076508,676.8025690234175,703.0566284007224,712.5888119247172,704.9026953668136,680.9007567083646,642.8249169767629,594.0509667405234,538.7695660452753,481.60104867850623,427.19508022496655,379.859739344735,343.250921669579,320.1368363020303,312.2386178075357,320.14018517476137,343.2595575300304,379.8784276004754,427.2334821622779,481.6775974055273,538.9182037958242,594.3323358974968,643.3442381845389,681.8353036574775,706.5423326169004,715.3932303585547,707.7322969618108,684.4005210233889,647.6572248560572,600.9533046718876,548.58767081106,495.29267827112614,445.79889168905726,404.42478547747,374.7257496856452,359.22324801996194]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":13,"reportName":"ByteString/HashMap/random","reportOutliers":{"highSevere":2,"highMild":0,"lowMild":0,"samplesSeen":38,"lowSevere":0},"reportMeasured":[[3.6986209997849073e-3,3.6989480000073627e-3,7368635,1,null,null,null,null,null,null,null],[8.227787000578246e-3,8.227860999994618e-3,16390368,2,null,null,null,null,null,null,null],[1.1789797999881557e-2,1.1789871000004837e-2,23485953,3,null,null,null,null,null,null,null],[1.5494723999836424e-2,1.5494763000006628e-2,30865921,4,null,null,null,null,null,null,null],[2.0106359999772394e-2,2.0106253999998103e-2,40052124,5,null,null,null,null,null,null,null],[2.402420999987953e-2,2.4024095000001466e-2,47856403,6,null,null,null,null,null,null,null],[2.8131004999522702e-2,2.8130798999995932e-2,56037057,7,null,null,null,null,null,null,null],[3.14344060006988e-2,3.143435100000147e-2,62617652,8,null,null,null,null,null,null,null],[3.5935726999923645e-2,3.593547699999533e-2,71584030,9,null,null,null,null,null,null,null],[3.98295800005144e-2,3.982920500000375e-2,79340101,10,null,null,null,null,null,null,null],[4.389816100047028e-2,4.3897825000001944e-2,87444933,11,null,null,null,null,null,null,null],[4.727952099983668e-2,4.7273438999994255e-2,94180530,12,null,null,null,null,null,null,null],[5.1878640999348136e-2,5.187826899999948e-2,103341875,13,null,null,null,null,null,null,null],[5.591469099999813e-2,5.591427800000304e-2,111381751,14,null,null,null,null,null,null,null],[6.084711699986656e-2,6.084653000000628e-2,121206722,15,null,null,null,null,null,null,null],[6.302184199921612e-2,6.302139299999965e-2,125538990,16,null,null,null,null,null,null,null],[6.833554000058939e-2,6.833488899999907e-2,136123648,17,null,null,null,null,null,null,null],[7.306696799969359e-2,7.306639000000814e-2,145548663,18,null,null,null,null,null,null,null],[7.696347900036926e-2,7.69564410000072e-2,153309960,19,null,null,null,null,null,null,null],[7.900796200010518e-2,7.90082219999988e-2,157384800,20,null,null,null,null,null,null,null],[8.329252900057327e-2,8.32918029999945e-2,165917614,21,null,null,null,null,null,null,null],[8.649809500002448e-2,8.64972730000062e-2,172302994,22,null,null,null,null,null,null,null],[9.088428799987014e-2,9.087754100001177e-2,181040132,23,null,null,null,null,null,null,null],[9.87212569998519e-2,9.871439100000146e-2,196650849,25,null,null,null,null,null,null,null],[0.10432727899933525,0.10432632100000205,207818627,26,null,null,null,null,null,null,null],[0.10755400299967732,0.10755292499999314,214245840,27,null,null,null,null,null,null,null],[0.11128935600027035,0.1112883329999903,221686773,28,null,null,null,null,null,null,null],[0.12033553099990968,0.12032691599999623,239705959,30,null,null,null,null,null,null,null],[0.12424444999942352,0.12423523700000771,247492506,31,null,null,null,null,null,null,null],[0.1378953769999498,0.13787743199999625,274684888,33,null,null,null,null,null,null,null],[0.14161267100007535,0.1416048520000004,282089391,35,null,null,null,null,null,null,null],[0.14346379500057083,0.1434623110000075,285777308,36,null,null,null,null,null,null,null],[0.1526866219992371,0.15268497800001057,304148796,38,null,null,null,null,null,null,null],[0.16002913499960414,0.16002722200001074,318774503,40,null,null,null,null,null,null,null],[0.16993233499943017,0.16993046899999342,338501726,42,null,null,null,null,null,null,null],[0.17633686099998158,0.1763347770000081,351259067,44,null,null,null,null,null,null,null],[0.18823027999951591,0.1882221950000087,374950585,47,null,null,null,null,null,null,null],[0.1956163690001631,0.19560684799999706,389663671,49,null,null,null,null,null,null,null],[0.2076564619992496,0.2076541619999972,413647371,52,null,null,null,null,null,null,null],[0.2184238390000246,0.21842126500000347,435095302,54,null,null,null,null,null,null,null],[0.2284621260005224,0.2284532850000005,455091479,57,null,null,null,null,null,null,null],[0.23935541700029717,0.2393440620000007,476791407,60,null,null,null,null,null,null,null],[0.25077386800057866,0.25077085200000226,499535800,63,null,null,null,null,null,null,null],[0.2629461740007173,0.26294295799999645,523782551,66,null,null,null,null,null,null,null],[0.28482179700040433,0.2848195099999913,567361141,69,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":3.495646704464693e-5,"confIntUDX":4.9630669471754235e-5,"confIntCL":5.0e-2},"estPoint":4.109310544482966e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":2.142496691383111e-3,"confIntUDX":1.3757930319761025e-3,"confIntCL":5.0e-2},"estPoint":0.9979520202303545},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":1.1416344066406223e-3,"confIntUDX":8.217696948966812e-4,"confIntCL":5.0e-2},"estPoint":-8.348309251168644e-4},"iters":{"estError":{"confIntLDX":4.2730611292938515e-5,"confIntUDX":6.710230883255446e-5,"confIntCL":5.0e-2},"estPoint":4.162001192155132e-3}}}],"anStdDev":{"estError":{"confIntLDX":3.1104105138616135e-5,"confIntUDX":5.869870754241165e-5,"confIntCL":5.0e-2},"estPoint":1.1867642757769951e-4},"anOutlierVar":{"ovFraction":0.12844640214234063,"ovDesc":"a moderate","ovEffect":"Moderate"}},"reportKDEs":[{"kdeValues":[3.917860838911717e-3,3.922891731729505e-3,3.927922624547293e-3,3.932953517365081e-3,3.937984410182869e-3,3.943015303000657e-3,3.948046195818445e-3,3.953077088636233e-3,3.95810798145402e-3,3.963138874271808e-3,3.968169767089596e-3,3.9732006599073845e-3,3.9782315527251725e-3,3.983262445542961e-3,3.988293338360749e-3,3.993324231178537e-3,3.998355123996325e-3,4.003386016814113e-3,4.008416909631901e-3,4.013447802449689e-3,4.018478695267477e-3,4.023509588085265e-3,4.028540480903053e-3,4.033571373720841e-3,4.0386022665386285e-3,4.0436331593564166e-3,4.048664052174205e-3,4.053694944991993e-3,4.058725837809781e-3,4.063756730627569e-3,4.068787623445357e-3,4.073818516263145e-3,4.078849409080933e-3,4.083880301898721e-3,4.088911194716509e-3,4.093942087534297e-3,4.098972980352085e-3,4.104003873169873e-3,4.1090347659876614e-3,4.1140656588054495e-3,4.119096551623237e-3,4.124127444441025e-3,4.129158337258813e-3,4.134189230076601e-3,4.139220122894389e-3,4.144251015712177e-3,4.149281908529965e-3,4.154312801347753e-3,4.159343694165541e-3,4.164374586983329e-3,4.169405479801117e-3,4.1744363726189055e-3,4.1794672654366935e-3,4.184498158254482e-3,4.18952905107227e-3,4.194559943890057e-3,4.199590836707845e-3,4.204621729525633e-3,4.209652622343421e-3,4.214683515161209e-3,4.219714407978997e-3,4.224745300796785e-3,4.229776193614573e-3,4.234807086432361e-3,4.2398379792501495e-3,4.2448688720679376e-3,4.249899764885726e-3,4.254930657703514e-3,4.259961550521302e-3,4.26499244333909e-3,4.270023336156878e-3,4.275054228974666e-3,4.280085121792453e-3,4.285116014610241e-3,4.290146907428029e-3,4.295177800245817e-3,4.3002086930636054e-3,4.3052395858813935e-3,4.310270478699182e-3,4.31530137151697e-3,4.320332264334758e-3,4.325363157152546e-3,4.330394049970334e-3,4.335424942788122e-3,4.34045583560591e-3,4.345486728423698e-3,4.350517621241486e-3,4.355548514059273e-3,4.360579406877061e-3,4.3656102996948495e-3,4.3706411925126375e-3,4.375672085330426e-3,4.380702978148214e-3,4.385733870966002e-3,4.39076476378379e-3,4.395795656601578e-3,4.400826549419366e-3,4.405857442237154e-3,4.410888335054942e-3,4.41591922787273e-3,4.420950120690518e-3,4.425981013508306e-3,4.431011906326094e-3,4.436042799143882e-3,4.44107369196167e-3,4.446104584779458e-3,4.451135477597246e-3,4.456166370415034e-3,4.461197263232822e-3,4.46622815605061e-3,4.471259048868398e-3,4.476289941686186e-3,4.481320834503974e-3,4.486351727321762e-3,4.49138262013955e-3,4.496413512957338e-3,4.5014444057751265e-3,4.5064752985929145e-3,4.511506191410702e-3,4.51653708422849e-3,4.521567977046278e-3,4.526598869864066e-3,4.531629762681854e-3,4.536660655499642e-3,4.54169154831743e-3,4.546722441135218e-3,4.551753333953006e-3,4.556784226770794e-3],"kdeType":"time","kdePDF":[292.63363038353594,316.9824720615486,365.60170202461086,438.31921088524325,534.849628019641,654.7878444809832,797.6329326889798,962.851582207484,1149.9756686792616,1358.7114496604318,1589.023198670401,1841.1469024348635,2115.4935338019486,2412.417299987644,2731.849938811908,3072.83264185146,3433.0060350030526,3808.1394579268062,4191.788818479369,4575.165454429801,4947.277426714598,5295.3724977859,5605.673111061562,5864.352933393015,6058.666940322958,6178.11744246498,6215.521410505897,6167.843829573971,6036.680022598828,5828.306848884334,5553.274951561105,5225.574774585579,4861.468173174463,4478.124556680581,4092.2267055803086,3718.711650869739,3369.7864707183517,3054.312903869864,2777.5974383792495,2541.565617192601,2345.250323521759,2185.490492658699,2057.722017666341,1956.7460380011573,1877.3782804114965,1814.9123465714504,1765.36518724577,1725.5099668075409,1692.735713935273,1664.8001761515222,1639.5579149643904,1614.746513324072,1587.8983793547575,1556.4155970721124,1517.8056755661387,1470.0349238749784,1411.9228874586922,1343.4841314230107,1266.127540930958,1182.648162617727,1096.9872222798508,1013.7832589743274,937.780737809048,873.192609927644,823.1239660813659,789.1535407375237,771.1411725333128,767.2886678797665,774.4370078988185,788.5428943507535,805.2494338810089,820.4541278947571,830.7839494477377,833.9103733089169,828.6717680592438,815.0091670396421,793.7558112578373,766.343669275136,734.4968405621469,699.9718173989265,664.3817214919121,629.1127889082273,595.3147764693933,563.9297569471054,535.7200112715735,511.26529949624415,490.9186353675738,474.73119045117085,462.3740630437056,453.0920175644428,445.7198050381191,438.77687721549796,430.6357997877727,419.73956146409927,404.82901453306584,385.13761057009424,360.5171898228873,331.47362638367537,299.1102448597261,264.99496111363845,230.9796443886665,199.0047288370161,170.91850998222648,148.3309387179248,132.5095591176728,124.31429268777632,124.16101382409268,132.00269033495312,147.32085167581073,169.127290584888,195.98328151484296,226.04826384862156,257.1697891299465,287.02095615764125,313.28165867598295,333.84830655907393,347.0465664657594,351.81620698111965,347.8382747264169,335.582728438279,316.267579579916,291.7353845594984,264.26598683110734,236.35271257404406,210.47126847324296,188.86673290128428,173.37626605925425,165.29636144253521]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":14,"reportName":"ByteString/HashMap/revsorted","reportOutliers":{"highSevere":1,"highMild":2,"lowMild":0,"samplesSeen":37,"lowSevere":0},"reportMeasured":[[3.483655000309227e-3,3.4838549999989255e-3,6940274,1,null,null,null,null,null,null,null],[8.150654999553808e-3,8.15074000000493e-3,16236721,2,null,null,null,null,null,null,null],[1.210476899996138e-2,1.2098733999991396e-2,24113391,3,null,null,null,null,null,null,null],[1.5876741999818478e-2,1.5876730000002226e-2,31626893,4,null,null,null,null,null,null,null],[2.083893600047304e-2,2.083882499999845e-2,41511349,5,null,null,null,null,null,null,null],[2.4013084000216622e-2,2.4014465999997014e-2,47837220,6,null,null,null,null,null,null,null],[2.8466252999351127e-2,2.846621000000482e-2,56705134,7,null,null,null,null,null,null,null],[3.243092000047909e-2,3.243083600000318e-2,64602576,8,null,null,null,null,null,null,null],[3.628020099949936e-2,3.627986499999736e-2,72269974,9,null,null,null,null,null,null,null],[3.989974400064966e-2,3.989951399999825e-2,79480199,10,null,null,null,null,null,null,null],[4.368214900023304e-2,4.3681866000000014e-2,87014643,11,null,null,null,null,null,null,null],[4.847340600008465e-2,4.847305399999868e-2,96558781,12,null,null,null,null,null,null,null],[5.230804899929353e-2,5.230129000000261e-2,104197087,13,null,null,null,null,null,null,null],[5.654618499920616e-2,5.653979599999559e-2,112639667,14,null,null,null,null,null,null,null],[6.308197999987897e-2,6.303111500000114e-2,125659720,15,null,null,null,null,null,null,null],[6.480945099974633e-2,6.480899700000009e-2,129100147,16,null,null,null,null,null,null,null],[6.776835800064873e-2,6.776771799999892e-2,134993694,17,null,null,null,null,null,null,null],[7.286090400066314e-2,7.28422449999897e-2,145137863,18,null,null,null,null,null,null,null],[7.642078600019886e-2,7.641511899998932e-2,152229387,19,null,null,null,null,null,null,null],[8.13036320005267e-2,8.130281200000411e-2,161955673,20,null,null,null,null,null,null,null],[8.46156190000329e-2,8.461584100000152e-2,168555139,21,null,null,null,null,null,null,null],[8.841974200004188e-2,8.841884199999583e-2,176130885,22,null,null,null,null,null,null,null],[9.315548700033105e-2,9.315456999999583e-2,185564167,23,null,null,null,null,null,null,null],[0.10022901499996806,0.10022829599999739,199655170,25,null,null,null,null,null,null,null],[0.10541847500007862,0.10541948699999182,209995886,26,null,null,null,null,null,null,null],[0.11121045400068397,0.11120927300000005,221529160,27,null,null,null,null,null,null,null],[0.11383615599970653,0.11383502599998963,226759761,28,null,null,null,null,null,null,null],[0.12196529700031533,0.12195705299998849,242952590,30,null,null,null,null,null,null,null],[0.13246785800038197,0.13245437099999435,263873816,31,null,null,null,null,null,null,null],[0.14293838899993716,0.1429311819999981,284734110,33,null,null,null,null,null,null,null],[0.15370618199995079,0.1537046269999962,306179886,35,null,null,null,null,null,null,null],[0.16212746200017136,0.16212556400000722,322954257,36,null,null,null,null,null,null,null],[0.15969439299988153,0.15969274700000824,318108211,38,null,null,null,null,null,null,null],[0.1625515470004757,0.162542277,323800254,40,null,null,null,null,null,null,null],[0.17143731200030743,0.1714151070000014,341500134,42,null,null,null,null,null,null,null],[0.18451108099998237,0.18450896899999236,367542147,44,null,null,null,null,null,null,null],[0.19326596799965046,0.19326367399999356,384981520,47,null,null,null,null,null,null,null],[0.21001610399980564,0.21001413199999774,418348402,49,null,null,null,null,null,null,null],[0.21647058300004574,0.21646809000000644,431204626,52,null,null,null,null,null,null,null],[0.2240731739993862,0.22405740499999638,446349060,54,null,null,null,null,null,null,null],[0.23251180300030683,0.23250292000000172,463158123,57,null,null,null,null,null,null,null],[0.24321701999997458,0.243214119000001,484482705,60,null,null,null,null,null,null,null],[0.25720452000041405,0.2571950840000028,512345651,63,null,null,null,null,null,null,null],[0.2731833210000332,0.27317427799999905,544174898,66,null,null,null,null,null,null,null]]}]'></div> - </div> - - <aside id="controls-explanation" class="explanation no-print"> - <h1><a href="#controls-explanation">controls</a></h1> - - <p> - The overview chart can be controlled by clicking the following elements: - <ul> - <li><em>a bar or its label</em> zooms the x-axis to that bar</li> - <li><em>the background</em> resets zoom to the entire chart</li> - <li><em>the x-axis</em> toggles between linear and logarithmic scale</li> - <li><em>the chevron</em> in the top-right toggles the the legend</li> - <li><em>a group name in the legend</em> shows/hides that group</li> - </ul> - </p> - - <p> - The overview chart supports the following sort orders: - <ul> - <li><em>index</em> order is the order as the benchmarks are defined in criterion</li> - <li><em>lexical</em> order sorts groups left-to-right, alphabetically</li> - <li><em>colexical</em> order sorts groups right-to-left, alphabetically</li> - <li><em>time ascending/descending</em> order sorts by the estimated mean execution time</li> - </ul> - </p> - - </aside> - - <aside id="grokularation" class="explanation"> - - <h1><a>understanding this report</a></h1> - - <p> - In this report, each function benchmarked by criterion is assigned a section of its own. - <span class="no-print">The charts in each section are active; if you hover your mouse over data points and annotations, you will see more details.</span> - </p> - - <ul> - <li> - The chart on the left is a <a href="http://en.wikipedia.org/wiki/Kernel_density_estimation">kernel density estimate</a> (also known as a KDE) of time measurements. - This graphs the probability of any given time measurement occurring. - A spike indicates that a measurement of a particular time occurred; its height indicates how often that measurement was repeated. - </li> - - <li> - The chart on the right is the raw data from which the kernel density estimate is built. - The <em>x</em>-axis indicates the number of loop iterations, while the <em>y</em>-axis shows measured execution time for the given number of loop iterations. - The line behind the values is the linear regression estimate of execution time for a given number of iterations. - Ideally, all measurements will be on (or very near) this line. - The transparent area behind it shows the confidence interval for the execution time estimate. - </li> - </ul> - - <p> - Under the charts is a small table. - The first two rows are the results of a linear regression run on the measurements displayed in the right-hand chart. - </p> - - <ul> - <li> - <em>OLS regression</em> indicates the time estimated for a single loop iteration using an ordinary least-squares regression model. - This number is more accurate than the <em>mean</em> estimate below it, as it more effectively eliminates measurement overhead and other constant factors. - </li> - <li> - <em>R<sup>2</sup>; goodness-of-fit</em> is a measure of how accurately the linear regression model fits the observed measurements. - If the measurements are not too noisy, R<sup>2</sup>; should lie between 0.99 and 1, indicating an excellent fit. - If the number is below 0.99, something is confounding the accuracy of the linear model. - </li> - <li> - <em>Mean execution time</em> and <em>standard deviation</em> are statistics calculated from execution time divided by number of iterations. - </li> - </ul> - - <p> - We use a statistical technique called the <a href="http://en.wikipedia.org/wiki/Bootstrapping_(statistics)">bootstrap</a> to provide confidence intervals on our estimates. - The bootstrap-derived upper and lower bounds on estimates let you see how accurate we believe those estimates to be. - <span class="no-print">(Hover the mouse over the table headers to see the confidence levels.)</span> - </p> - - <p> - A noisy benchmarking environment can cause some or many measurements to fall far from the mean. - These outlying measurements can have a significant inflationary effect on the estimate of the standard deviation. - We calculate and display an estimate of the extent to which the standard deviation has been inflated by outliers. - </p> - - </aside> - - <footer> - <div class="content"> - <h1 class="colophon-header">colophon</h1> - <p> - This report was created using the <a href="http://hackage.haskell.org/package/criterion">criterion</a> - benchmark execution and performance analysis tool. - </p> - <p> - Criterion is developed and maintained - by <a href="http://www.serpentine.com/blog/">Bryan O'Sullivan</a>. - </p> - </div> - </footer> -</body> -</html> +<!doctype html>+<html>+<head>+ <meta charset="utf-8"/>+ <title>criterion report</title>+ <script>+ /*!+ * Chart.js v2.9.4+ * https://www.chartjs.org+ * (c) 2020 Chart.js Contributors+ * Released under the MIT License+ */+!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(function(){try{return require("moment")}catch(t){}}()):"function"==typeof define&&define.amd?define(["require"],(function(t){return e(function(){try{return t("moment")}catch(t){}}())})):(t=t||self).Chart=e(t.moment)}(this,(function(t){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var e={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},n=function(t,e){return t(e={exports:{}},e.exports),e.exports}((function(t){var n={};for(var i in e)e.hasOwnProperty(i)&&(n[e[i]]=i);var a=t.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var r in a)if(a.hasOwnProperty(r)){if(!("channels"in a[r]))throw new Error("missing channels property: "+r);if(!("labels"in a[r]))throw new Error("missing channel labels property: "+r);if(a[r].labels.length!==a[r].channels)throw new Error("channel and label counts mismatch: "+r);var o=a[r].channels,s=a[r].labels;delete a[r].channels,delete a[r].labels,Object.defineProperty(a[r],"channels",{value:o}),Object.defineProperty(a[r],"labels",{value:s})}a.rgb.hsl=function(t){var e,n,i=t[0]/255,a=t[1]/255,r=t[2]/255,o=Math.min(i,a,r),s=Math.max(i,a,r),l=s-o;return s===o?e=0:i===s?e=(a-r)/l:a===s?e=2+(r-i)/l:r===s&&(e=4+(i-a)/l),(e=Math.min(60*e,360))<0&&(e+=360),n=(o+s)/2,[e,100*(s===o?0:n<=.5?l/(s+o):l/(2-s-o)),100*n]},a.rgb.hsv=function(t){var e,n,i,a,r,o=t[0]/255,s=t[1]/255,l=t[2]/255,u=Math.max(o,s,l),d=u-Math.min(o,s,l),h=function(t){return(u-t)/6/d+.5};return 0===d?a=r=0:(r=d/u,e=h(o),n=h(s),i=h(l),o===u?a=i-n:s===u?a=1/3+e-i:l===u&&(a=2/3+n-e),a<0?a+=1:a>1&&(a-=1)),[360*a,100*r,100*u]},a.rgb.hwb=function(t){var e=t[0],n=t[1],i=t[2];return[a.rgb.hsl(t)[0],100*(1/255*Math.min(e,Math.min(n,i))),100*(i=1-1/255*Math.max(e,Math.max(n,i)))]},a.rgb.cmyk=function(t){var e,n=t[0]/255,i=t[1]/255,a=t[2]/255;return[100*((1-n-(e=Math.min(1-n,1-i,1-a)))/(1-e)||0),100*((1-i-e)/(1-e)||0),100*((1-a-e)/(1-e)||0),100*e]},a.rgb.keyword=function(t){var i=n[t];if(i)return i;var a,r,o,s=1/0;for(var l in e)if(e.hasOwnProperty(l)){var u=e[l],d=(r=t,o=u,Math.pow(r[0]-o[0],2)+Math.pow(r[1]-o[1],2)+Math.pow(r[2]-o[2],2));d<s&&(s=d,a=l)}return a},a.keyword.rgb=function(t){return e[t]},a.rgb.xyz=function(t){var e=t[0]/255,n=t[1]/255,i=t[2]/255;return[100*(.4124*(e=e>.04045?Math.pow((e+.055)/1.055,2.4):e/12.92)+.3576*(n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.1805*(i=i>.04045?Math.pow((i+.055)/1.055,2.4):i/12.92)),100*(.2126*e+.7152*n+.0722*i),100*(.0193*e+.1192*n+.9505*i)]},a.rgb.lab=function(t){var e=a.rgb.xyz(t),n=e[0],i=e[1],r=e[2];return i/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116)-16,500*(n-i),200*(i-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},a.hsl.rgb=function(t){var e,n,i,a,r,o=t[0]/360,s=t[1]/100,l=t[2]/100;if(0===s)return[r=255*l,r,r];e=2*l-(n=l<.5?l*(1+s):l+s-l*s),a=[0,0,0];for(var u=0;u<3;u++)(i=o+1/3*-(u-1))<0&&i++,i>1&&i--,r=6*i<1?e+6*(n-e)*i:2*i<1?n:3*i<2?e+(n-e)*(2/3-i)*6:e,a[u]=255*r;return a},a.hsl.hsv=function(t){var e=t[0],n=t[1]/100,i=t[2]/100,a=n,r=Math.max(i,.01);return n*=(i*=2)<=1?i:2-i,a*=r<=1?r:2-r,[e,100*(0===i?2*a/(r+a):2*n/(i+n)),100*((i+n)/2)]},a.hsv.rgb=function(t){var e=t[0]/60,n=t[1]/100,i=t[2]/100,a=Math.floor(e)%6,r=e-Math.floor(e),o=255*i*(1-n),s=255*i*(1-n*r),l=255*i*(1-n*(1-r));switch(i*=255,a){case 0:return[i,l,o];case 1:return[s,i,o];case 2:return[o,i,l];case 3:return[o,s,i];case 4:return[l,o,i];case 5:return[i,o,s]}},a.hsv.hsl=function(t){var e,n,i,a=t[0],r=t[1]/100,o=t[2]/100,s=Math.max(o,.01);return i=(2-r)*o,n=r*s,[a,100*(n=(n/=(e=(2-r)*s)<=1?e:2-e)||0),100*(i/=2)]},a.hwb.rgb=function(t){var e,n,i,a,r,o,s,l=t[0]/360,u=t[1]/100,d=t[2]/100,h=u+d;switch(h>1&&(u/=h,d/=h),i=6*l-(e=Math.floor(6*l)),0!=(1&e)&&(i=1-i),a=u+i*((n=1-d)-u),e){default:case 6:case 0:r=n,o=a,s=u;break;case 1:r=a,o=n,s=u;break;case 2:r=u,o=n,s=a;break;case 3:r=u,o=a,s=n;break;case 4:r=a,o=u,s=n;break;case 5:r=n,o=u,s=a}return[255*r,255*o,255*s]},a.cmyk.rgb=function(t){var e=t[0]/100,n=t[1]/100,i=t[2]/100,a=t[3]/100;return[255*(1-Math.min(1,e*(1-a)+a)),255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,i*(1-a)+a))]},a.xyz.rgb=function(t){var e,n,i,a=t[0]/100,r=t[1]/100,o=t[2]/100;return n=-.9689*a+1.8758*r+.0415*o,i=.0557*a+-.204*r+1.057*o,e=(e=3.2406*a+-1.5372*r+-.4986*o)>.0031308?1.055*Math.pow(e,1/2.4)-.055:12.92*e,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,i=i>.0031308?1.055*Math.pow(i,1/2.4)-.055:12.92*i,[255*(e=Math.min(Math.max(0,e),1)),255*(n=Math.min(Math.max(0,n),1)),255*(i=Math.min(Math.max(0,i),1))]},a.xyz.lab=function(t){var e=t[0],n=t[1],i=t[2];return n/=100,i/=108.883,e=(e/=95.047)>.008856?Math.pow(e,1/3):7.787*e+16/116,[116*(n=n>.008856?Math.pow(n,1/3):7.787*n+16/116)-16,500*(e-n),200*(n-(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116))]},a.lab.xyz=function(t){var e,n,i,a=t[0];e=t[1]/500+(n=(a+16)/116),i=n-t[2]/200;var r=Math.pow(n,3),o=Math.pow(e,3),s=Math.pow(i,3);return n=r>.008856?r:(n-16/116)/7.787,e=o>.008856?o:(e-16/116)/7.787,i=s>.008856?s:(i-16/116)/7.787,[e*=95.047,n*=100,i*=108.883]},a.lab.lch=function(t){var e,n=t[0],i=t[1],a=t[2];return(e=360*Math.atan2(a,i)/2/Math.PI)<0&&(e+=360),[n,Math.sqrt(i*i+a*a),e]},a.lch.lab=function(t){var e,n=t[0],i=t[1];return e=t[2]/360*2*Math.PI,[n,i*Math.cos(e),i*Math.sin(e)]},a.rgb.ansi16=function(t){var e=t[0],n=t[1],i=t[2],r=1 in arguments?arguments[1]:a.rgb.hsv(t)[2];if(0===(r=Math.round(r/50)))return 30;var o=30+(Math.round(i/255)<<2|Math.round(n/255)<<1|Math.round(e/255));return 2===r&&(o+=60),o},a.hsv.ansi16=function(t){return a.rgb.ansi16(a.hsv.rgb(t),t[2])},a.rgb.ansi256=function(t){var e=t[0],n=t[1],i=t[2];return e===n&&n===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(n/255*5)+Math.round(i/255*5)},a.ansi16.rgb=function(t){var e=t%10;if(0===e||7===e)return t>50&&(e+=3.5),[e=e/10.5*255,e,e];var n=.5*(1+~~(t>50));return[(1&e)*n*255,(e>>1&1)*n*255,(e>>2&1)*n*255]},a.ansi256.rgb=function(t){if(t>=232){var e=10*(t-232)+8;return[e,e,e]}var n;return t-=16,[Math.floor(t/36)/5*255,Math.floor((n=t%36)/6)/5*255,n%6/5*255]},a.rgb.hex=function(t){var e=(((255&Math.round(t[0]))<<16)+((255&Math.round(t[1]))<<8)+(255&Math.round(t[2]))).toString(16).toUpperCase();return"000000".substring(e.length)+e},a.hex.rgb=function(t){var e=t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];var n=e[0];3===e[0].length&&(n=n.split("").map((function(t){return t+t})).join(""));var i=parseInt(n,16);return[i>>16&255,i>>8&255,255&i]},a.rgb.hcg=function(t){var e,n=t[0]/255,i=t[1]/255,a=t[2]/255,r=Math.max(Math.max(n,i),a),o=Math.min(Math.min(n,i),a),s=r-o;return e=s<=0?0:r===n?(i-a)/s%6:r===i?2+(a-n)/s:4+(n-i)/s+4,e/=6,[360*(e%=1),100*s,100*(s<1?o/(1-s):0)]},a.hsl.hcg=function(t){var e=t[1]/100,n=t[2]/100,i=1,a=0;return(i=n<.5?2*e*n:2*e*(1-n))<1&&(a=(n-.5*i)/(1-i)),[t[0],100*i,100*a]},a.hsv.hcg=function(t){var e=t[1]/100,n=t[2]/100,i=e*n,a=0;return i<1&&(a=(n-i)/(1-i)),[t[0],100*i,100*a]},a.hcg.rgb=function(t){var e=t[0]/360,n=t[1]/100,i=t[2]/100;if(0===n)return[255*i,255*i,255*i];var a,r=[0,0,0],o=e%1*6,s=o%1,l=1-s;switch(Math.floor(o)){case 0:r[0]=1,r[1]=s,r[2]=0;break;case 1:r[0]=l,r[1]=1,r[2]=0;break;case 2:r[0]=0,r[1]=1,r[2]=s;break;case 3:r[0]=0,r[1]=l,r[2]=1;break;case 4:r[0]=s,r[1]=0,r[2]=1;break;default:r[0]=1,r[1]=0,r[2]=l}return a=(1-n)*i,[255*(n*r[0]+a),255*(n*r[1]+a),255*(n*r[2]+a)]},a.hcg.hsv=function(t){var e=t[1]/100,n=e+t[2]/100*(1-e),i=0;return n>0&&(i=e/n),[t[0],100*i,100*n]},a.hcg.hsl=function(t){var e=t[1]/100,n=t[2]/100*(1-e)+.5*e,i=0;return n>0&&n<.5?i=e/(2*n):n>=.5&&n<1&&(i=e/(2*(1-n))),[t[0],100*i,100*n]},a.hcg.hwb=function(t){var e=t[1]/100,n=e+t[2]/100*(1-e);return[t[0],100*(n-e),100*(1-n)]},a.hwb.hcg=function(t){var e=t[1]/100,n=1-t[2]/100,i=n-e,a=0;return i<1&&(a=(n-i)/(1-i)),[t[0],100*i,100*a]},a.apple.rgb=function(t){return[t[0]/65535*255,t[1]/65535*255,t[2]/65535*255]},a.rgb.apple=function(t){return[t[0]/255*65535,t[1]/255*65535,t[2]/255*65535]},a.gray.rgb=function(t){return[t[0]/100*255,t[0]/100*255,t[0]/100*255]},a.gray.hsl=a.gray.hsv=function(t){return[0,0,t[0]]},a.gray.hwb=function(t){return[0,100,t[0]]},a.gray.cmyk=function(t){return[0,0,0,t[0]]},a.gray.lab=function(t){return[t[0],0,0]},a.gray.hex=function(t){var e=255&Math.round(t[0]/100*255),n=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(n.length)+n},a.rgb.gray=function(t){return[(t[0]+t[1]+t[2])/3/255*100]}}));n.rgb,n.hsl,n.hsv,n.hwb,n.cmyk,n.xyz,n.lab,n.lch,n.hex,n.keyword,n.ansi16,n.ansi256,n.hcg,n.apple,n.gray;function i(t){var e=function(){for(var t={},e=Object.keys(n),i=e.length,a=0;a<i;a++)t[e[a]]={distance:-1,parent:null};return t}(),i=[t];for(e[t].distance=0;i.length;)for(var a=i.pop(),r=Object.keys(n[a]),o=r.length,s=0;s<o;s++){var l=r[s],u=e[l];-1===u.distance&&(u.distance=e[a].distance+1,u.parent=a,i.unshift(l))}return e}function a(t,e){return function(n){return e(t(n))}}function r(t,e){for(var i=[e[t].parent,t],r=n[e[t].parent][t],o=e[t].parent;e[o].parent;)i.unshift(e[o].parent),r=a(n[e[o].parent][o],r),o=e[o].parent;return r.conversion=i,r}var o={};Object.keys(n).forEach((function(t){o[t]={},Object.defineProperty(o[t],"channels",{value:n[t].channels}),Object.defineProperty(o[t],"labels",{value:n[t].labels});var e=function(t){for(var e=i(t),n={},a=Object.keys(e),o=a.length,s=0;s<o;s++){var l=a[s];null!==e[l].parent&&(n[l]=r(l,e))}return n}(t);Object.keys(e).forEach((function(n){var i=e[n];o[t][n]=function(t){var e=function(e){if(null==e)return e;arguments.length>1&&(e=Array.prototype.slice.call(arguments));var n=t(e);if("object"==typeof n)for(var i=n.length,a=0;a<i;a++)n[a]=Math.round(n[a]);return n};return"conversion"in t&&(e.conversion=t.conversion),e}(i),o[t][n].raw=function(t){var e=function(e){return null==e?e:(arguments.length>1&&(e=Array.prototype.slice.call(arguments)),t(e))};return"conversion"in t&&(e.conversion=t.conversion),e}(i)}))}));var s=o,l={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},u={getRgba:d,getHsla:h,getRgb:function(t){var e=d(t);return e&&e.slice(0,3)},getHsl:function(t){var e=h(t);return e&&e.slice(0,3)},getHwb:c,getAlpha:function(t){var e=d(t);if(e)return e[3];if(e=h(t))return e[3];if(e=c(t))return e[3]},hexString:function(t,e){e=void 0!==e&&3===t.length?e:t[3];return"#"+v(t[0])+v(t[1])+v(t[2])+(e>=0&&e<1?v(Math.round(255*e)):"")},rgbString:function(t,e){if(e<1||t[3]&&t[3]<1)return f(t,e);return"rgb("+t[0]+", "+t[1]+", "+t[2]+")"},rgbaString:f,percentString:function(t,e){if(e<1||t[3]&&t[3]<1)return g(t,e);var n=Math.round(t[0]/255*100),i=Math.round(t[1]/255*100),a=Math.round(t[2]/255*100);return"rgb("+n+"%, "+i+"%, "+a+"%)"},percentaString:g,hslString:function(t,e){if(e<1||t[3]&&t[3]<1)return p(t,e);return"hsl("+t[0]+", "+t[1]+"%, "+t[2]+"%)"},hslaString:p,hwbString:function(t,e){void 0===e&&(e=void 0!==t[3]?t[3]:1);return"hwb("+t[0]+", "+t[1]+"%, "+t[2]+"%"+(void 0!==e&&1!==e?", "+e:"")+")"},keyword:function(t){return b[t.slice(0,3)]}};function d(t){if(t){var e=[0,0,0],n=1,i=t.match(/^#([a-fA-F0-9]{3,4})$/i),a="";if(i){a=(i=i[1])[3];for(var r=0;r<e.length;r++)e[r]=parseInt(i[r]+i[r],16);a&&(n=Math.round(parseInt(a+a,16)/255*100)/100)}else if(i=t.match(/^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i)){a=i[2],i=i[1];for(r=0;r<e.length;r++)e[r]=parseInt(i.slice(2*r,2*r+2),16);a&&(n=Math.round(parseInt(a,16)/255*100)/100)}else if(i=t.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(r=0;r<e.length;r++)e[r]=parseInt(i[r+1]);n=parseFloat(i[4])}else if(i=t.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(r=0;r<e.length;r++)e[r]=Math.round(2.55*parseFloat(i[r+1]));n=parseFloat(i[4])}else if(i=t.match(/(\w+)/)){if("transparent"==i[1])return[0,0,0,0];if(!(e=l[i[1]]))return}for(r=0;r<e.length;r++)e[r]=m(e[r],0,255);return n=n||0==n?m(n,0,1):1,e[3]=n,e}}function h(t){if(t){var e=t.match(/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var n=parseFloat(e[4]);return[m(parseInt(e[1]),0,360),m(parseFloat(e[2]),0,100),m(parseFloat(e[3]),0,100),m(isNaN(n)?1:n,0,1)]}}}function c(t){if(t){var e=t.match(/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var n=parseFloat(e[4]);return[m(parseInt(e[1]),0,360),m(parseFloat(e[2]),0,100),m(parseFloat(e[3]),0,100),m(isNaN(n)?1:n,0,1)]}}}function f(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"rgba("+t[0]+", "+t[1]+", "+t[2]+", "+e+")"}function g(t,e){return"rgba("+Math.round(t[0]/255*100)+"%, "+Math.round(t[1]/255*100)+"%, "+Math.round(t[2]/255*100)+"%, "+(e||t[3]||1)+")"}function p(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hsla("+t[0]+", "+t[1]+"%, "+t[2]+"%, "+e+")"}function m(t,e,n){return Math.min(Math.max(e,t),n)}function v(t){var e=t.toString(16).toUpperCase();return e.length<2?"0"+e:e}var b={};for(var x in l)b[l[x]]=x;var y=function(t){return t instanceof y?t:this instanceof y?(this.valid=!1,this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1},void("string"==typeof t?(e=u.getRgba(t))?this.setValues("rgb",e):(e=u.getHsla(t))?this.setValues("hsl",e):(e=u.getHwb(t))&&this.setValues("hwb",e):"object"==typeof t&&(void 0!==(e=t).r||void 0!==e.red?this.setValues("rgb",e):void 0!==e.l||void 0!==e.lightness?this.setValues("hsl",e):void 0!==e.v||void 0!==e.value?this.setValues("hsv",e):void 0!==e.w||void 0!==e.whiteness?this.setValues("hwb",e):void 0===e.c&&void 0===e.cyan||this.setValues("cmyk",e)))):new y(t);var e};y.prototype={isValid:function(){return this.valid},rgb:function(){return this.setSpace("rgb",arguments)},hsl:function(){return this.setSpace("hsl",arguments)},hsv:function(){return this.setSpace("hsv",arguments)},hwb:function(){return this.setSpace("hwb",arguments)},cmyk:function(){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){var t=this.values;return 1!==t.alpha?t.hwb.concat([t.alpha]):t.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var t=this.values;return t.rgb.concat([t.alpha])},hslaArray:function(){var t=this.values;return t.hsl.concat([t.alpha])},alpha:function(t){return void 0===t?this.values.alpha:(this.setValues("alpha",t),this)},red:function(t){return this.setChannel("rgb",0,t)},green:function(t){return this.setChannel("rgb",1,t)},blue:function(t){return this.setChannel("rgb",2,t)},hue:function(t){return t&&(t=(t%=360)<0?360+t:t),this.setChannel("hsl",0,t)},saturation:function(t){return this.setChannel("hsl",1,t)},lightness:function(t){return this.setChannel("hsl",2,t)},saturationv:function(t){return this.setChannel("hsv",1,t)},whiteness:function(t){return this.setChannel("hwb",1,t)},blackness:function(t){return this.setChannel("hwb",2,t)},value:function(t){return this.setChannel("hsv",2,t)},cyan:function(t){return this.setChannel("cmyk",0,t)},magenta:function(t){return this.setChannel("cmyk",1,t)},yellow:function(t){return this.setChannel("cmyk",2,t)},black:function(t){return this.setChannel("cmyk",3,t)},hexString:function(){return u.hexString(this.values.rgb)},rgbString:function(){return u.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return u.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return u.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return u.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return u.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return u.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return u.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var t=this.values.rgb;return t[0]<<16|t[1]<<8|t[2]},luminosity:function(){for(var t=this.values.rgb,e=[],n=0;n<t.length;n++){var i=t[n]/255;e[n]=i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4)}return.2126*e[0]+.7152*e[1]+.0722*e[2]},contrast:function(t){var e=this.luminosity(),n=t.luminosity();return e>n?(e+.05)/(n+.05):(n+.05)/(e+.05)},level:function(t){var e=this.contrast(t);return e>=7.1?"AAA":e>=4.5?"AA":""},dark:function(){var t=this.values.rgb;return(299*t[0]+587*t[1]+114*t[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var t=[],e=0;e<3;e++)t[e]=255-this.values.rgb[e];return this.setValues("rgb",t),this},lighten:function(t){var e=this.values.hsl;return e[2]+=e[2]*t,this.setValues("hsl",e),this},darken:function(t){var e=this.values.hsl;return e[2]-=e[2]*t,this.setValues("hsl",e),this},saturate:function(t){var e=this.values.hsl;return e[1]+=e[1]*t,this.setValues("hsl",e),this},desaturate:function(t){var e=this.values.hsl;return e[1]-=e[1]*t,this.setValues("hsl",e),this},whiten:function(t){var e=this.values.hwb;return e[1]+=e[1]*t,this.setValues("hwb",e),this},blacken:function(t){var e=this.values.hwb;return e[2]+=e[2]*t,this.setValues("hwb",e),this},greyscale:function(){var t=this.values.rgb,e=.3*t[0]+.59*t[1]+.11*t[2];return this.setValues("rgb",[e,e,e]),this},clearer:function(t){var e=this.values.alpha;return this.setValues("alpha",e-e*t),this},opaquer:function(t){var e=this.values.alpha;return this.setValues("alpha",e+e*t),this},rotate:function(t){var e=this.values.hsl,n=(e[0]+t)%360;return e[0]=n<0?360+n:n,this.setValues("hsl",e),this},mix:function(t,e){var n=t,i=void 0===e?.5:e,a=2*i-1,r=this.alpha()-n.alpha(),o=((a*r==-1?a:(a+r)/(1+a*r))+1)/2,s=1-o;return this.rgb(o*this.red()+s*n.red(),o*this.green()+s*n.green(),o*this.blue()+s*n.blue()).alpha(this.alpha()*i+n.alpha()*(1-i))},toJSON:function(){return this.rgb()},clone:function(){var t,e,n=new y,i=this.values,a=n.values;for(var r in i)i.hasOwnProperty(r)&&(t=i[r],"[object Array]"===(e={}.toString.call(t))?a[r]=t.slice(0):"[object Number]"===e?a[r]=t:console.error("unexpected color value:",t));return n}},y.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},y.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},y.prototype.getValues=function(t){for(var e=this.values,n={},i=0;i<t.length;i++)n[t.charAt(i)]=e[t][i];return 1!==e.alpha&&(n.a=e.alpha),n},y.prototype.setValues=function(t,e){var n,i,a=this.values,r=this.spaces,o=this.maxes,l=1;if(this.valid=!0,"alpha"===t)l=e;else if(e.length)a[t]=e.slice(0,t.length),l=e[t.length];else if(void 0!==e[t.charAt(0)]){for(n=0;n<t.length;n++)a[t][n]=e[t.charAt(n)];l=e.a}else if(void 0!==e[r[t][0]]){var u=r[t];for(n=0;n<t.length;n++)a[t][n]=e[u[n]];l=e.alpha}if(a.alpha=Math.max(0,Math.min(1,void 0===l?a.alpha:l)),"alpha"===t)return!1;for(n=0;n<t.length;n++)i=Math.max(0,Math.min(o[t][n],a[t][n])),a[t][n]=Math.round(i);for(var d in r)d!==t&&(a[d]=s[t][d](a[t]));return!0},y.prototype.setSpace=function(t,e){var n=e[0];return void 0===n?this.getValues(t):("number"==typeof n&&(n=Array.prototype.slice.call(e)),this.setValues(t,n),this)},y.prototype.setChannel=function(t,e,n){var i=this.values[t];return void 0===n?i[e]:n===i[e]?this:(i[e]=n,this.setValues(t,i),this)},"undefined"!=typeof window&&(window.Color=y);var _=y;function k(t){return-1===["__proto__","prototype","constructor"].indexOf(t)}var w,M={noop:function(){},uid:(w=0,function(){return w++}),isNullOrUndef:function(t){return null==t},isArray:function(t){if(Array.isArray&&Array.isArray(t))return!0;var e=Object.prototype.toString.call(t);return"[object"===e.substr(0,7)&&"Array]"===e.substr(-6)},isObject:function(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)},isFinite:function(t){return("number"==typeof t||t instanceof Number)&&isFinite(t)},valueOrDefault:function(t,e){return void 0===t?e:t},valueAtIndexOrDefault:function(t,e,n){return M.valueOrDefault(M.isArray(t)?t[e]:t,n)},callback:function(t,e,n){if(t&&"function"==typeof t.call)return t.apply(n,e)},each:function(t,e,n,i){var a,r,o;if(M.isArray(t))if(r=t.length,i)for(a=r-1;a>=0;a--)e.call(n,t[a],a);else for(a=0;a<r;a++)e.call(n,t[a],a);else if(M.isObject(t))for(r=(o=Object.keys(t)).length,a=0;a<r;a++)e.call(n,t[o[a]],o[a])},arrayEquals:function(t,e){var n,i,a,r;if(!t||!e||t.length!==e.length)return!1;for(n=0,i=t.length;n<i;++n)if(a=t[n],r=e[n],a instanceof Array&&r instanceof Array){if(!M.arrayEquals(a,r))return!1}else if(a!==r)return!1;return!0},clone:function(t){if(M.isArray(t))return t.map(M.clone);if(M.isObject(t)){for(var e=Object.create(t),n=Object.keys(t),i=n.length,a=0;a<i;++a)e[n[a]]=M.clone(t[n[a]]);return e}return t},_merger:function(t,e,n,i){if(k(t)){var a=e[t],r=n[t];M.isObject(a)&&M.isObject(r)?M.merge(a,r,i):e[t]=M.clone(r)}},_mergerIf:function(t,e,n){if(k(t)){var i=e[t],a=n[t];M.isObject(i)&&M.isObject(a)?M.mergeIf(i,a):e.hasOwnProperty(t)||(e[t]=M.clone(a))}},merge:function(t,e,n){var i,a,r,o,s,l=M.isArray(e)?e:[e],u=l.length;if(!M.isObject(t))return t;for(i=(n=n||{}).merger||M._merger,a=0;a<u;++a)if(e=l[a],M.isObject(e))for(s=0,o=(r=Object.keys(e)).length;s<o;++s)i(r[s],t,e,n);return t},mergeIf:function(t,e){return M.merge(t,e,{merger:M._mergerIf})},extend:Object.assign||function(t){return M.merge(t,[].slice.call(arguments,1),{merger:function(t,e,n){e[t]=n[t]}})},inherits:function(t){var e=this,n=t&&t.hasOwnProperty("constructor")?t.constructor:function(){return e.apply(this,arguments)},i=function(){this.constructor=n};return i.prototype=e.prototype,n.prototype=new i,n.extend=M.inherits,t&&M.extend(n.prototype,t),n.__super__=e.prototype,n},_deprecated:function(t,e,n,i){void 0!==e&&console.warn(t+': "'+n+'" is deprecated. Please use "'+i+'" instead')}},S=M;M.callCallback=M.callback,M.indexOf=function(t,e,n){return Array.prototype.indexOf.call(t,e,n)},M.getValueOrDefault=M.valueOrDefault,M.getValueAtIndexOrDefault=M.valueAtIndexOrDefault;var C={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return-t*(t-2)},easeInOutQuad:function(t){return(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1)},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return(t-=1)*t*t+1},easeInOutCubic:function(t){return(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return-((t-=1)*t*t*t-1)},easeInOutQuart:function(t){return(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return(t-=1)*t*t*t*t+1},easeInOutQuint:function(t){return(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},easeInSine:function(t){return 1-Math.cos(t*(Math.PI/2))},easeOutSine:function(t){return Math.sin(t*(Math.PI/2))},easeInOutSine:function(t){return-.5*(Math.cos(Math.PI*t)-1)},easeInExpo:function(t){return 0===t?0:Math.pow(2,10*(t-1))},easeOutExpo:function(t){return 1===t?1:1-Math.pow(2,-10*t)},easeInOutExpo:function(t){return 0===t?0:1===t?1:(t/=.5)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*--t))},easeInCirc:function(t){return t>=1?t:-(Math.sqrt(1-t*t)-1)},easeOutCirc:function(t){return Math.sqrt(1-(t-=1)*t)},easeInOutCirc:function(t){return(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},easeInElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===t?1:(n||(n=.3),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),-i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n))},easeOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===t?1:(n||(n=.3),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),i*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/n)+1)},easeInOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:2==(t/=.5)?1:(n||(n=.45),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),t<1?i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*-.5:i*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*.5+1)},easeInBack:function(t){var e=1.70158;return t*t*((e+1)*t-e)},easeOutBack:function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack:function(t){var e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:function(t){return 1-C.easeOutBounce(1-t)},easeOutBounce:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},easeInOutBounce:function(t){return t<.5?.5*C.easeInBounce(2*t):.5*C.easeOutBounce(2*t-1)+.5}},P={effects:C};S.easingEffects=C;var A=Math.PI,D=A/180,T=2*A,I=A/2,F=A/4,O=2*A/3,L={clear:function(t){t.ctx.clearRect(0,0,t.width,t.height)},roundedRect:function(t,e,n,i,a,r){if(r){var o=Math.min(r,a/2,i/2),s=e+o,l=n+o,u=e+i-o,d=n+a-o;t.moveTo(e,l),s<u&&l<d?(t.arc(s,l,o,-A,-I),t.arc(u,l,o,-I,0),t.arc(u,d,o,0,I),t.arc(s,d,o,I,A)):s<u?(t.moveTo(s,n),t.arc(u,l,o,-I,I),t.arc(s,l,o,I,A+I)):l<d?(t.arc(s,l,o,-A,0),t.arc(s,d,o,0,A)):t.arc(s,l,o,-A,A),t.closePath(),t.moveTo(e,n)}else t.rect(e,n,i,a)},drawPoint:function(t,e,n,i,a,r){var o,s,l,u,d,h=(r||0)*D;if(e&&"object"==typeof e&&("[object HTMLImageElement]"===(o=e.toString())||"[object HTMLCanvasElement]"===o))return t.save(),t.translate(i,a),t.rotate(h),t.drawImage(e,-e.width/2,-e.height/2,e.width,e.height),void t.restore();if(!(isNaN(n)||n<=0)){switch(t.beginPath(),e){default:t.arc(i,a,n,0,T),t.closePath();break;case"triangle":t.moveTo(i+Math.sin(h)*n,a-Math.cos(h)*n),h+=O,t.lineTo(i+Math.sin(h)*n,a-Math.cos(h)*n),h+=O,t.lineTo(i+Math.sin(h)*n,a-Math.cos(h)*n),t.closePath();break;case"rectRounded":u=n-(d=.516*n),s=Math.cos(h+F)*u,l=Math.sin(h+F)*u,t.arc(i-s,a-l,d,h-A,h-I),t.arc(i+l,a-s,d,h-I,h),t.arc(i+s,a+l,d,h,h+I),t.arc(i-l,a+s,d,h+I,h+A),t.closePath();break;case"rect":if(!r){u=Math.SQRT1_2*n,t.rect(i-u,a-u,2*u,2*u);break}h+=F;case"rectRot":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+l,a-s),t.lineTo(i+s,a+l),t.lineTo(i-l,a+s),t.closePath();break;case"crossRot":h+=F;case"cross":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s);break;case"star":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s),h+=F,s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s);break;case"line":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l);break;case"dash":t.moveTo(i,a),t.lineTo(i+Math.cos(h)*n,a+Math.sin(h)*n)}t.fill(),t.stroke()}},_isPointInArea:function(t,e){return t.x>e.left-1e-6&&t.x<e.right+1e-6&&t.y>e.top-1e-6&&t.y<e.bottom+1e-6},clipArea:function(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()},unclipArea:function(t){t.restore()},lineTo:function(t,e,n,i){var a=n.steppedLine;if(a){if("middle"===a){var r=(e.x+n.x)/2;t.lineTo(r,i?n.y:e.y),t.lineTo(r,i?e.y:n.y)}else"after"===a&&!i||"after"!==a&&i?t.lineTo(e.x,n.y):t.lineTo(n.x,e.y);t.lineTo(n.x,n.y)}else n.tension?t.bezierCurveTo(i?e.controlPointPreviousX:e.controlPointNextX,i?e.controlPointPreviousY:e.controlPointNextY,i?n.controlPointNextX:n.controlPointPreviousX,i?n.controlPointNextY:n.controlPointPreviousY,n.x,n.y):t.lineTo(n.x,n.y)}},R=L;S.clear=L.clear,S.drawRoundedRectangle=function(t){t.beginPath(),L.roundedRect.apply(L,arguments)};var z={_set:function(t,e){return S.merge(this[t]||(this[t]={}),e)}};z._set("global",{defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:"normal",defaultLineHeight:1.2,showLines:!0});var N=z,B=S.valueOrDefault;var E={toLineHeight:function(t,e){var n=(""+t).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);if(!n||"normal"===n[1])return 1.2*e;switch(t=+n[2],n[3]){case"px":return t;case"%":t/=100}return e*t},toPadding:function(t){var e,n,i,a;return S.isObject(t)?(e=+t.top||0,n=+t.right||0,i=+t.bottom||0,a=+t.left||0):e=n=i=a=+t||0,{top:e,right:n,bottom:i,left:a,height:e+i,width:a+n}},_parseFont:function(t){var e=N.global,n=B(t.fontSize,e.defaultFontSize),i={family:B(t.fontFamily,e.defaultFontFamily),lineHeight:S.options.toLineHeight(B(t.lineHeight,e.defaultLineHeight),n),size:n,style:B(t.fontStyle,e.defaultFontStyle),weight:null,string:""};return i.string=function(t){return!t||S.isNullOrUndef(t.size)||S.isNullOrUndef(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}(i),i},resolve:function(t,e,n,i){var a,r,o,s=!0;for(a=0,r=t.length;a<r;++a)if(void 0!==(o=t[a])&&(void 0!==e&&"function"==typeof o&&(o=o(e),s=!1),void 0!==n&&S.isArray(o)&&(o=o[n],s=!1),void 0!==o))return i&&!s&&(i.cacheable=!1),o}},W={_factorize:function(t){var e,n=[],i=Math.sqrt(t);for(e=1;e<i;e++)t%e==0&&(n.push(e),n.push(t/e));return i===(0|i)&&n.push(i),n.sort((function(t,e){return t-e})).pop(),n},log10:Math.log10||function(t){var e=Math.log(t)*Math.LOG10E,n=Math.round(e);return t===Math.pow(10,n)?n:e}},V=W;S.log10=W.log10;var H=S,j=P,q=R,U=E,Y=V,G={getRtlAdapter:function(t,e,n){return t?function(t,e){return{x:function(n){return t+t+e-n},setWidth:function(t){e=t},textAlign:function(t){return"center"===t?t:"right"===t?"left":"right"},xPlus:function(t,e){return t-e},leftForLtr:function(t,e){return t-e}}}(e,n):{x:function(t){return t},setWidth:function(t){},textAlign:function(t){return t},xPlus:function(t,e){return t+e},leftForLtr:function(t,e){return t}}},overrideTextDirection:function(t,e){var n,i;"ltr"!==e&&"rtl"!==e||(i=[(n=t.canvas.style).getPropertyValue("direction"),n.getPropertyPriority("direction")],n.setProperty("direction",e,"important"),t.prevTextDirection=i)},restoreTextDirection:function(t){var e=t.prevTextDirection;void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}};H.easing=j,H.canvas=q,H.options=U,H.math=Y,H.rtl=G;var X=function(t){H.extend(this,t),this.initialize.apply(this,arguments)};H.extend(X.prototype,{_type:void 0,initialize:function(){this.hidden=!1},pivot:function(){var t=this;return t._view||(t._view=H.extend({},t._model)),t._start={},t},transition:function(t){var e=this,n=e._model,i=e._start,a=e._view;return n&&1!==t?(a||(a=e._view={}),i||(i=e._start={}),function(t,e,n,i){var a,r,o,s,l,u,d,h,c,f=Object.keys(n);for(a=0,r=f.length;a<r;++a)if(u=n[o=f[a]],e.hasOwnProperty(o)||(e[o]=u),(s=e[o])!==u&&"_"!==o[0]){if(t.hasOwnProperty(o)||(t[o]=s),(d=typeof u)===typeof(l=t[o]))if("string"===d){if((h=_(l)).valid&&(c=_(u)).valid){e[o]=c.mix(h,i).rgbString();continue}}else if(H.isFinite(l)&&H.isFinite(u)){e[o]=l+(u-l)*i;continue}e[o]=u}}(i,a,n,t),e):(e._view=H.extend({},n),e._start=null,e)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return H.isNumber(this._model.x)&&H.isNumber(this._model.y)}}),X.extend=H.inherits;var K=X,Z=K.extend({chart:null,currentStep:0,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),$=Z;Object.defineProperty(Z.prototype,"animationObject",{get:function(){return this}}),Object.defineProperty(Z.prototype,"chartInstance",{get:function(){return this.chart},set:function(t){this.chart=t}}),N._set("global",{animation:{duration:1e3,easing:"easeOutQuart",onProgress:H.noop,onComplete:H.noop}});var J={animations:[],request:null,addAnimation:function(t,e,n,i){var a,r,o=this.animations;for(e.chart=t,e.startTime=Date.now(),e.duration=n,i||(t.animating=!0),a=0,r=o.length;a<r;++a)if(o[a].chart===t)return void(o[a]=e);o.push(e),1===o.length&&this.requestAnimationFrame()},cancelAnimation:function(t){var e=H.findIndex(this.animations,(function(e){return e.chart===t}));-1!==e&&(this.animations.splice(e,1),t.animating=!1)},requestAnimationFrame:function(){var t=this;null===t.request&&(t.request=H.requestAnimFrame.call(window,(function(){t.request=null,t.startDigest()})))},startDigest:function(){this.advance(),this.animations.length>0&&this.requestAnimationFrame()},advance:function(){for(var t,e,n,i,a=this.animations,r=0;r<a.length;)e=(t=a[r]).chart,n=t.numSteps,i=Math.floor((Date.now()-t.startTime)/t.duration*n)+1,t.currentStep=Math.min(i,n),H.callback(t.render,[e,t],e),H.callback(t.onAnimationProgress,[t],e),t.currentStep>=n?(H.callback(t.onAnimationComplete,[t],e),e.animating=!1,a.splice(r,1)):++r}},Q=H.options.resolve,tt=["push","pop","shift","splice","unshift"];function et(t,e){var n=t._chartjs;if(n){var i=n.listeners,a=i.indexOf(e);-1!==a&&i.splice(a,1),i.length>0||(tt.forEach((function(e){delete t[e]})),delete t._chartjs)}}var nt=function(t,e){this.initialize(t,e)};H.extend(nt.prototype,{datasetElementType:null,dataElementType:null,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth"],_dataElementOptions:["backgroundColor","borderColor","borderWidth","pointStyle"],initialize:function(t,e){var n=this;n.chart=t,n.index=e,n.linkScales(),n.addElements(),n._type=n.getMeta().type},updateIndex:function(t){this.index=t},linkScales:function(){var t=this.getMeta(),e=this.chart,n=e.scales,i=this.getDataset(),a=e.options.scales;null!==t.xAxisID&&t.xAxisID in n&&!i.xAxisID||(t.xAxisID=i.xAxisID||a.xAxes[0].id),null!==t.yAxisID&&t.yAxisID in n&&!i.yAxisID||(t.yAxisID=i.yAxisID||a.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(t){return this.chart.scales[t]},_getValueScaleId:function(){return this.getMeta().yAxisID},_getIndexScaleId:function(){return this.getMeta().xAxisID},_getValueScale:function(){return this.getScaleForId(this._getValueScaleId())},_getIndexScale:function(){return this.getScaleForId(this._getIndexScaleId())},reset:function(){this._update(!0)},destroy:function(){this._data&&et(this._data,this)},createMetaDataset:function(){var t=this.datasetElementType;return t&&new t({_chart:this.chart,_datasetIndex:this.index})},createMetaData:function(t){var e=this.dataElementType;return e&&new e({_chart:this.chart,_datasetIndex:this.index,_index:t})},addElements:function(){var t,e,n=this.getMeta(),i=this.getDataset().data||[],a=n.data;for(t=0,e=i.length;t<e;++t)a[t]=a[t]||this.createMetaData(t);n.dataset=n.dataset||this.createMetaDataset()},addElementAndReset:function(t){var e=this.createMetaData(t);this.getMeta().data.splice(t,0,e),this.updateElement(e,t,!0)},buildOrUpdateElements:function(){var t,e,n=this,i=n.getDataset(),a=i.data||(i.data=[]);n._data!==a&&(n._data&&et(n._data,n),a&&Object.isExtensible(a)&&(e=n,(t=a)._chartjs?t._chartjs.listeners.push(e):(Object.defineProperty(t,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),tt.forEach((function(e){var n="onData"+e.charAt(0).toUpperCase()+e.slice(1),i=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:function(){var e=Array.prototype.slice.call(arguments),a=i.apply(this,e);return H.each(t._chartjs.listeners,(function(t){"function"==typeof t[n]&&t[n].apply(t,e)})),a}})})))),n._data=a),n.resyncElements()},_configure:function(){this._config=H.merge(Object.create(null),[this.chart.options.datasets[this._type],this.getDataset()],{merger:function(t,e,n){"_meta"!==t&&"data"!==t&&H._merger(t,e,n)}})},_update:function(t){this._configure(),this._cachedDataOpts=null,this.update(t)},update:H.noop,transition:function(t){for(var e=this.getMeta(),n=e.data||[],i=n.length,a=0;a<i;++a)n[a].transition(t);e.dataset&&e.dataset.transition(t)},draw:function(){var t=this.getMeta(),e=t.data||[],n=e.length,i=0;for(t.dataset&&t.dataset.draw();i<n;++i)e[i].draw()},getStyle:function(t){var e,n=this.getMeta(),i=n.dataset;return this._configure(),i&&void 0===t?e=this._resolveDatasetElementOptions(i||{}):(t=t||0,e=this._resolveDataElementOptions(n.data[t]||{},t)),!1!==e.fill&&null!==e.fill||(e.backgroundColor=e.borderColor),e},_resolveDatasetElementOptions:function(t,e){var n,i,a,r,o=this,s=o.chart,l=o._config,u=t.custom||{},d=s.options.elements[o.datasetElementType.prototype._type]||{},h=o._datasetElementOptions,c={},f={chart:s,dataset:o.getDataset(),datasetIndex:o.index,hover:e};for(n=0,i=h.length;n<i;++n)a=h[n],r=e?"hover"+a.charAt(0).toUpperCase()+a.slice(1):a,c[a]=Q([u[r],l[r],d[r]],f);return c},_resolveDataElementOptions:function(t,e){var n=this,i=t&&t.custom,a=n._cachedDataOpts;if(a&&!i)return a;var r,o,s,l,u=n.chart,d=n._config,h=u.options.elements[n.dataElementType.prototype._type]||{},c=n._dataElementOptions,f={},g={chart:u,dataIndex:e,dataset:n.getDataset(),datasetIndex:n.index},p={cacheable:!i};if(i=i||{},H.isArray(c))for(o=0,s=c.length;o<s;++o)f[l=c[o]]=Q([i[l],d[l],h[l]],g,e,p);else for(o=0,s=(r=Object.keys(c)).length;o<s;++o)f[l=r[o]]=Q([i[l],d[c[l]],d[l],h[l]],g,e,p);return p.cacheable&&(n._cachedDataOpts=Object.freeze(f)),f},removeHoverStyle:function(t){H.merge(t._model,t.$previousStyle||{}),delete t.$previousStyle},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],n=t._index,i=t.custom||{},a=t._model,r=H.getHoverColor;t.$previousStyle={backgroundColor:a.backgroundColor,borderColor:a.borderColor,borderWidth:a.borderWidth},a.backgroundColor=Q([i.hoverBackgroundColor,e.hoverBackgroundColor,r(a.backgroundColor)],void 0,n),a.borderColor=Q([i.hoverBorderColor,e.hoverBorderColor,r(a.borderColor)],void 0,n),a.borderWidth=Q([i.hoverBorderWidth,e.hoverBorderWidth,a.borderWidth],void 0,n)},_removeDatasetHoverStyle:function(){var t=this.getMeta().dataset;t&&this.removeHoverStyle(t)},_setDatasetHoverStyle:function(){var t,e,n,i,a,r,o=this.getMeta().dataset,s={};if(o){for(r=o._model,a=this._resolveDatasetElementOptions(o,!0),t=0,e=(i=Object.keys(a)).length;t<e;++t)s[n=i[t]]=r[n],r[n]=a[n];o.$previousStyle=s}},resyncElements:function(){var t=this.getMeta(),e=this.getDataset().data,n=t.data.length,i=e.length;i<n?t.data.splice(i,n-i):i>n&&this.insertElements(n,i-n)},insertElements:function(t,e){for(var n=0;n<e;++n)this.addElementAndReset(t+n)},onDataPush:function(){var t=arguments.length;this.insertElements(this.getDataset().data.length-t,t)},onDataPop:function(){this.getMeta().data.pop()},onDataShift:function(){this.getMeta().data.shift()},onDataSplice:function(t,e){this.getMeta().data.splice(t,e),this.insertElements(t,arguments.length-2)},onDataUnshift:function(){this.insertElements(0,arguments.length)}}),nt.extend=H.inherits;var it=nt,at=2*Math.PI;function rt(t,e){var n=e.startAngle,i=e.endAngle,a=e.pixelMargin,r=a/e.outerRadius,o=e.x,s=e.y;t.beginPath(),t.arc(o,s,e.outerRadius,n-r,i+r),e.innerRadius>a?(r=a/e.innerRadius,t.arc(o,s,e.innerRadius-a,i+r,n-r,!0)):t.arc(o,s,a,i+Math.PI/2,n-Math.PI/2),t.closePath(),t.clip()}function ot(t,e,n){var i="inner"===e.borderAlign;i?(t.lineWidth=2*e.borderWidth,t.lineJoin="round"):(t.lineWidth=e.borderWidth,t.lineJoin="bevel"),n.fullCircles&&function(t,e,n,i){var a,r=n.endAngle;for(i&&(n.endAngle=n.startAngle+at,rt(t,n),n.endAngle=r,n.endAngle===n.startAngle&&n.fullCircles&&(n.endAngle+=at,n.fullCircles--)),t.beginPath(),t.arc(n.x,n.y,n.innerRadius,n.startAngle+at,n.startAngle,!0),a=0;a<n.fullCircles;++a)t.stroke();for(t.beginPath(),t.arc(n.x,n.y,e.outerRadius,n.startAngle,n.startAngle+at),a=0;a<n.fullCircles;++a)t.stroke()}(t,e,n,i),i&&rt(t,n),t.beginPath(),t.arc(n.x,n.y,e.outerRadius,n.startAngle,n.endAngle),t.arc(n.x,n.y,n.innerRadius,n.endAngle,n.startAngle,!0),t.closePath(),t.stroke()}N._set("global",{elements:{arc:{backgroundColor:N.global.defaultColor,borderColor:"#fff",borderWidth:2,borderAlign:"center"}}});var st=K.extend({_type:"arc",inLabelRange:function(t){var e=this._view;return!!e&&Math.pow(t-e.x,2)<Math.pow(e.radius+e.hoverRadius,2)},inRange:function(t,e){var n=this._view;if(n){for(var i=H.getAngleFromPoint(n,{x:t,y:e}),a=i.angle,r=i.distance,o=n.startAngle,s=n.endAngle;s<o;)s+=at;for(;a>s;)a-=at;for(;a<o;)a+=at;var l=a>=o&&a<=s,u=r>=n.innerRadius&&r<=n.outerRadius;return l&&u}return!1},getCenterPoint:function(){var t=this._view,e=(t.startAngle+t.endAngle)/2,n=(t.innerRadius+t.outerRadius)/2;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},getArea:function(){var t=this._view;return Math.PI*((t.endAngle-t.startAngle)/(2*Math.PI))*(Math.pow(t.outerRadius,2)-Math.pow(t.innerRadius,2))},tooltipPosition:function(){var t=this._view,e=t.startAngle+(t.endAngle-t.startAngle)/2,n=(t.outerRadius-t.innerRadius)/2+t.innerRadius;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},draw:function(){var t,e=this._chart.ctx,n=this._view,i="inner"===n.borderAlign?.33:0,a={x:n.x,y:n.y,innerRadius:n.innerRadius,outerRadius:Math.max(n.outerRadius-i,0),pixelMargin:i,startAngle:n.startAngle,endAngle:n.endAngle,fullCircles:Math.floor(n.circumference/at)};if(e.save(),e.fillStyle=n.backgroundColor,e.strokeStyle=n.borderColor,a.fullCircles){for(a.endAngle=a.startAngle+at,e.beginPath(),e.arc(a.x,a.y,a.outerRadius,a.startAngle,a.endAngle),e.arc(a.x,a.y,a.innerRadius,a.endAngle,a.startAngle,!0),e.closePath(),t=0;t<a.fullCircles;++t)e.fill();a.endAngle=a.startAngle+n.circumference%at}e.beginPath(),e.arc(a.x,a.y,a.outerRadius,a.startAngle,a.endAngle),e.arc(a.x,a.y,a.innerRadius,a.endAngle,a.startAngle,!0),e.closePath(),e.fill(),n.borderWidth&&ot(e,n,a),e.restore()}}),lt=H.valueOrDefault,ut=N.global.defaultColor;N._set("global",{elements:{line:{tension:.4,backgroundColor:ut,borderWidth:3,borderColor:ut,borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",capBezierPoints:!0,fill:!0}}});var dt=K.extend({_type:"line",draw:function(){var t,e,n,i=this,a=i._view,r=i._chart.ctx,o=a.spanGaps,s=i._children.slice(),l=N.global,u=l.elements.line,d=-1,h=i._loop;if(s.length){if(i._loop){for(t=0;t<s.length;++t)if(e=H.previousItem(s,t),!s[t]._view.skip&&e._view.skip){s=s.slice(t).concat(s.slice(0,t)),h=o;break}h&&s.push(s[0])}for(r.save(),r.lineCap=a.borderCapStyle||u.borderCapStyle,r.setLineDash&&r.setLineDash(a.borderDash||u.borderDash),r.lineDashOffset=lt(a.borderDashOffset,u.borderDashOffset),r.lineJoin=a.borderJoinStyle||u.borderJoinStyle,r.lineWidth=lt(a.borderWidth,u.borderWidth),r.strokeStyle=a.borderColor||l.defaultColor,r.beginPath(),(n=s[0]._view).skip||(r.moveTo(n.x,n.y),d=0),t=1;t<s.length;++t)n=s[t]._view,e=-1===d?H.previousItem(s,t):s[d],n.skip||(d!==t-1&&!o||-1===d?r.moveTo(n.x,n.y):H.canvas.lineTo(r,e._view,n),d=t);h&&r.closePath(),r.stroke(),r.restore()}}}),ht=H.valueOrDefault,ct=N.global.defaultColor;function ft(t){var e=this._view;return!!e&&Math.abs(t-e.x)<e.radius+e.hitRadius}N._set("global",{elements:{point:{radius:3,pointStyle:"circle",backgroundColor:ct,borderColor:ct,borderWidth:1,hitRadius:1,hoverRadius:4,hoverBorderWidth:1}}});var gt=K.extend({_type:"point",inRange:function(t,e){var n=this._view;return!!n&&Math.pow(t-n.x,2)+Math.pow(e-n.y,2)<Math.pow(n.hitRadius+n.radius,2)},inLabelRange:ft,inXRange:ft,inYRange:function(t){var e=this._view;return!!e&&Math.abs(t-e.y)<e.radius+e.hitRadius},getCenterPoint:function(){var t=this._view;return{x:t.x,y:t.y}},getArea:function(){return Math.PI*Math.pow(this._view.radius,2)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y,padding:t.radius+t.borderWidth}},draw:function(t){var e=this._view,n=this._chart.ctx,i=e.pointStyle,a=e.rotation,r=e.radius,o=e.x,s=e.y,l=N.global,u=l.defaultColor;e.skip||(void 0===t||H.canvas._isPointInArea(e,t))&&(n.strokeStyle=e.borderColor||u,n.lineWidth=ht(e.borderWidth,l.elements.point.borderWidth),n.fillStyle=e.backgroundColor||u,H.canvas.drawPoint(n,i,r,o,s,a))}}),pt=N.global.defaultColor;function mt(t){return t&&void 0!==t.width}function vt(t){var e,n,i,a,r;return mt(t)?(r=t.width/2,e=t.x-r,n=t.x+r,i=Math.min(t.y,t.base),a=Math.max(t.y,t.base)):(r=t.height/2,e=Math.min(t.x,t.base),n=Math.max(t.x,t.base),i=t.y-r,a=t.y+r),{left:e,top:i,right:n,bottom:a}}function bt(t,e,n){return t===e?n:t===n?e:t}function xt(t,e,n){var i,a,r,o,s=t.borderWidth,l=function(t){var e=t.borderSkipped,n={};return e?(t.horizontal?t.base>t.x&&(e=bt(e,"left","right")):t.base<t.y&&(e=bt(e,"bottom","top")),n[e]=!0,n):n}(t);return H.isObject(s)?(i=+s.top||0,a=+s.right||0,r=+s.bottom||0,o=+s.left||0):i=a=r=o=+s||0,{t:l.top||i<0?0:i>n?n:i,r:l.right||a<0?0:a>e?e:a,b:l.bottom||r<0?0:r>n?n:r,l:l.left||o<0?0:o>e?e:o}}function yt(t,e,n){var i=null===e,a=null===n,r=!(!t||i&&a)&&vt(t);return r&&(i||e>=r.left&&e<=r.right)&&(a||n>=r.top&&n<=r.bottom)}N._set("global",{elements:{rectangle:{backgroundColor:pt,borderColor:pt,borderSkipped:"bottom",borderWidth:0}}});var _t=K.extend({_type:"rectangle",draw:function(){var t=this._chart.ctx,e=this._view,n=function(t){var e=vt(t),n=e.right-e.left,i=e.bottom-e.top,a=xt(t,n/2,i/2);return{outer:{x:e.left,y:e.top,w:n,h:i},inner:{x:e.left+a.l,y:e.top+a.t,w:n-a.l-a.r,h:i-a.t-a.b}}}(e),i=n.outer,a=n.inner;t.fillStyle=e.backgroundColor,t.fillRect(i.x,i.y,i.w,i.h),i.w===a.w&&i.h===a.h||(t.save(),t.beginPath(),t.rect(i.x,i.y,i.w,i.h),t.clip(),t.fillStyle=e.borderColor,t.rect(a.x,a.y,a.w,a.h),t.fill("evenodd"),t.restore())},height:function(){var t=this._view;return t.base-t.y},inRange:function(t,e){return yt(this._view,t,e)},inLabelRange:function(t,e){var n=this._view;return mt(n)?yt(n,t,null):yt(n,null,e)},inXRange:function(t){return yt(this._view,t,null)},inYRange:function(t){return yt(this._view,null,t)},getCenterPoint:function(){var t,e,n=this._view;return mt(n)?(t=n.x,e=(n.y+n.base)/2):(t=(n.x+n.base)/2,e=n.y),{x:t,y:e}},getArea:function(){var t=this._view;return mt(t)?t.width*Math.abs(t.y-t.base):t.height*Math.abs(t.x-t.base)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y}}}),kt={},wt=st,Mt=dt,St=gt,Ct=_t;kt.Arc=wt,kt.Line=Mt,kt.Point=St,kt.Rectangle=Ct;var Pt=H._deprecated,At=H.valueOrDefault;function Dt(t,e,n){var i,a,r=n.barThickness,o=e.stackCount,s=e.pixels[t],l=H.isNullOrUndef(r)?function(t,e){var n,i,a,r,o=t._length;for(a=1,r=e.length;a<r;++a)o=Math.min(o,Math.abs(e[a]-e[a-1]));for(a=0,r=t.getTicks().length;a<r;++a)i=t.getPixelForTick(a),o=a>0?Math.min(o,Math.abs(i-n)):o,n=i;return o}(e.scale,e.pixels):-1;return H.isNullOrUndef(r)?(i=l*n.categoryPercentage,a=n.barPercentage):(i=r*o,a=1),{chunk:i/o,ratio:a,start:s-i/2}}N._set("bar",{hover:{mode:"label"},scales:{xAxes:[{type:"category",offset:!0,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}}),N._set("global",{datasets:{bar:{categoryPercentage:.8,barPercentage:.9}}});var Tt=it.extend({dataElementType:kt.Rectangle,_dataElementOptions:["backgroundColor","borderColor","borderSkipped","borderWidth","barPercentage","barThickness","categoryPercentage","maxBarThickness","minBarLength"],initialize:function(){var t,e,n=this;it.prototype.initialize.apply(n,arguments),(t=n.getMeta()).stack=n.getDataset().stack,t.bar=!0,e=n._getIndexScale().options,Pt("bar chart",e.barPercentage,"scales.[x/y]Axes.barPercentage","dataset.barPercentage"),Pt("bar chart",e.barThickness,"scales.[x/y]Axes.barThickness","dataset.barThickness"),Pt("bar chart",e.categoryPercentage,"scales.[x/y]Axes.categoryPercentage","dataset.categoryPercentage"),Pt("bar chart",n._getValueScale().options.minBarLength,"scales.[x/y]Axes.minBarLength","dataset.minBarLength"),Pt("bar chart",e.maxBarThickness,"scales.[x/y]Axes.maxBarThickness","dataset.maxBarThickness")},update:function(t){var e,n,i=this.getMeta().data;for(this._ruler=this.getRuler(),e=0,n=i.length;e<n;++e)this.updateElement(i[e],e,t)},updateElement:function(t,e,n){var i=this,a=i.getMeta(),r=i.getDataset(),o=i._resolveDataElementOptions(t,e);t._xScale=i.getScaleForId(a.xAxisID),t._yScale=i.getScaleForId(a.yAxisID),t._datasetIndex=i.index,t._index=e,t._model={backgroundColor:o.backgroundColor,borderColor:o.borderColor,borderSkipped:o.borderSkipped,borderWidth:o.borderWidth,datasetLabel:r.label,label:i.chart.data.labels[e]},H.isArray(r.data[e])&&(t._model.borderSkipped=null),i._updateElementGeometry(t,e,n,o),t.pivot()},_updateElementGeometry:function(t,e,n,i){var a=this,r=t._model,o=a._getValueScale(),s=o.getBasePixel(),l=o.isHorizontal(),u=a._ruler||a.getRuler(),d=a.calculateBarValuePixels(a.index,e,i),h=a.calculateBarIndexPixels(a.index,e,u,i);r.horizontal=l,r.base=n?s:d.base,r.x=l?n?s:d.head:h.center,r.y=l?h.center:n?s:d.head,r.height=l?h.size:void 0,r.width=l?void 0:h.size},_getStacks:function(t){var e,n,i=this._getIndexScale(),a=i._getMatchingVisibleMetas(this._type),r=i.options.stacked,o=a.length,s=[];for(e=0;e<o&&(n=a[e],(!1===r||-1===s.indexOf(n.stack)||void 0===r&&void 0===n.stack)&&s.push(n.stack),n.index!==t);++e);return s},getStackCount:function(){return this._getStacks().length},getStackIndex:function(t,e){var n=this._getStacks(t),i=void 0!==e?n.indexOf(e):-1;return-1===i?n.length-1:i},getRuler:function(){var t,e,n=this._getIndexScale(),i=[];for(t=0,e=this.getMeta().data.length;t<e;++t)i.push(n.getPixelForValue(null,t,this.index));return{pixels:i,start:n._startPixel,end:n._endPixel,stackCount:this.getStackCount(),scale:n}},calculateBarValuePixels:function(t,e,n){var i,a,r,o,s,l,u,d=this.chart,h=this._getValueScale(),c=h.isHorizontal(),f=d.data.datasets,g=h._getMatchingVisibleMetas(this._type),p=h._parseValue(f[t].data[e]),m=n.minBarLength,v=h.options.stacked,b=this.getMeta().stack,x=void 0===p.start?0:p.max>=0&&p.min>=0?p.min:p.max,y=void 0===p.start?p.end:p.max>=0&&p.min>=0?p.max-p.min:p.min-p.max,_=g.length;if(v||void 0===v&&void 0!==b)for(i=0;i<_&&(a=g[i]).index!==t;++i)a.stack===b&&(r=void 0===(u=h._parseValue(f[a.index].data[e])).start?u.end:u.min>=0&&u.max>=0?u.max:u.min,(p.min<0&&r<0||p.max>=0&&r>0)&&(x+=r));return o=h.getPixelForValue(x),l=(s=h.getPixelForValue(x+y))-o,void 0!==m&&Math.abs(l)<m&&(l=m,s=y>=0&&!c||y<0&&c?o-m:o+m),{size:l,base:o,head:s,center:s+l/2}},calculateBarIndexPixels:function(t,e,n,i){var a="flex"===i.barThickness?function(t,e,n){var i,a=e.pixels,r=a[t],o=t>0?a[t-1]:null,s=t<a.length-1?a[t+1]:null,l=n.categoryPercentage;return null===o&&(o=r-(null===s?e.end-e.start:s-r)),null===s&&(s=r+r-o),i=r-(r-Math.min(o,s))/2*l,{chunk:Math.abs(s-o)/2*l/e.stackCount,ratio:n.barPercentage,start:i}}(e,n,i):Dt(e,n,i),r=this.getStackIndex(t,this.getMeta().stack),o=a.start+a.chunk*r+a.chunk/2,s=Math.min(At(i.maxBarThickness,1/0),a.chunk*a.ratio);return{base:o-s/2,head:o+s/2,center:o,size:s}},draw:function(){var t=this.chart,e=this._getValueScale(),n=this.getMeta().data,i=this.getDataset(),a=n.length,r=0;for(H.canvas.clipArea(t.ctx,t.chartArea);r<a;++r){var o=e._parseValue(i.data[r]);isNaN(o.min)||isNaN(o.max)||n[r].draw()}H.canvas.unclipArea(t.ctx)},_resolveDataElementOptions:function(){var t=this,e=H.extend({},it.prototype._resolveDataElementOptions.apply(t,arguments)),n=t._getIndexScale().options,i=t._getValueScale().options;return e.barPercentage=At(n.barPercentage,e.barPercentage),e.barThickness=At(n.barThickness,e.barThickness),e.categoryPercentage=At(n.categoryPercentage,e.categoryPercentage),e.maxBarThickness=At(n.maxBarThickness,e.maxBarThickness),e.minBarLength=At(i.minBarLength,e.minBarLength),e}}),It=H.valueOrDefault,Ft=H.options.resolve;N._set("bubble",{hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-0"}],yAxes:[{type:"linear",position:"left",id:"y-axis-0"}]},tooltips:{callbacks:{title:function(){return""},label:function(t,e){var n=e.datasets[t.datasetIndex].label||"",i=e.datasets[t.datasetIndex].data[t.index];return n+": ("+t.xLabel+", "+t.yLabel+", "+i.r+")"}}}});var Ot=it.extend({dataElementType:kt.Point,_dataElementOptions:["backgroundColor","borderColor","borderWidth","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","hoverRadius","hitRadius","pointStyle","rotation"],update:function(t){var e=this,n=e.getMeta().data;H.each(n,(function(n,i){e.updateElement(n,i,t)}))},updateElement:function(t,e,n){var i=this,a=i.getMeta(),r=t.custom||{},o=i.getScaleForId(a.xAxisID),s=i.getScaleForId(a.yAxisID),l=i._resolveDataElementOptions(t,e),u=i.getDataset().data[e],d=i.index,h=n?o.getPixelForDecimal(.5):o.getPixelForValue("object"==typeof u?u:NaN,e,d),c=n?s.getBasePixel():s.getPixelForValue(u,e,d);t._xScale=o,t._yScale=s,t._options=l,t._datasetIndex=d,t._index=e,t._model={backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,hitRadius:l.hitRadius,pointStyle:l.pointStyle,rotation:l.rotation,radius:n?0:l.radius,skip:r.skip||isNaN(h)||isNaN(c),x:h,y:c},t.pivot()},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=It(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=It(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=It(n.hoverBorderWidth,n.borderWidth),e.radius=n.radius+n.hoverRadius},_resolveDataElementOptions:function(t,e){var n=this,i=n.chart,a=n.getDataset(),r=t.custom||{},o=a.data[e]||{},s=it.prototype._resolveDataElementOptions.apply(n,arguments),l={chart:i,dataIndex:e,dataset:a,datasetIndex:n.index};return n._cachedDataOpts===s&&(s=H.extend({},s)),s.radius=Ft([r.radius,o.r,n._config.radius,i.options.elements.point.radius],l,e),s}}),Lt=H.valueOrDefault,Rt=Math.PI,zt=2*Rt,Nt=Rt/2;N._set("doughnut",{animation:{animateRotate:!0,animateScale:!1},hover:{mode:"single"},legendCallback:function(t){var e,n,i,a=document.createElement("ul"),r=t.data,o=r.datasets,s=r.labels;if(a.setAttribute("class",t.id+"-legend"),o.length)for(e=0,n=o[0].data.length;e<n;++e)(i=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=o[0].backgroundColor[e],s[e]&&i.appendChild(document.createTextNode(s[e]));return a.outerHTML},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map((function(n,i){var a=t.getDatasetMeta(0),r=a.controller.getStyle(i);return{text:n,fillStyle:r.backgroundColor,strokeStyle:r.borderColor,lineWidth:r.borderWidth,hidden:isNaN(e.datasets[0].data[i])||a.data[i].hidden,index:i}})):[]}},onClick:function(t,e){var n,i,a,r=e.index,o=this.chart;for(n=0,i=(o.data.datasets||[]).length;n<i;++n)(a=o.getDatasetMeta(n)).data[r]&&(a.data[r].hidden=!a.data[r].hidden);o.update()}},cutoutPercentage:50,rotation:-Nt,circumference:zt,tooltips:{callbacks:{title:function(){return""},label:function(t,e){var n=e.labels[t.index],i=": "+e.datasets[t.datasetIndex].data[t.index];return H.isArray(n)?(n=n.slice())[0]+=i:n+=i,n}}}});var Bt=it.extend({dataElementType:kt.Arc,linkScales:H.noop,_dataElementOptions:["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"],getRingIndex:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&++e;return e},update:function(t){var e,n,i,a,r=this,o=r.chart,s=o.chartArea,l=o.options,u=1,d=1,h=0,c=0,f=r.getMeta(),g=f.data,p=l.cutoutPercentage/100||0,m=l.circumference,v=r._getRingWeight(r.index);if(m<zt){var b=l.rotation%zt,x=(b+=b>=Rt?-zt:b<-Rt?zt:0)+m,y=Math.cos(b),_=Math.sin(b),k=Math.cos(x),w=Math.sin(x),M=b<=0&&x>=0||x>=zt,S=b<=Nt&&x>=Nt||x>=zt+Nt,C=b<=-Nt&&x>=-Nt||x>=Rt+Nt,P=b===-Rt||x>=Rt?-1:Math.min(y,y*p,k,k*p),A=C?-1:Math.min(_,_*p,w,w*p),D=M?1:Math.max(y,y*p,k,k*p),T=S?1:Math.max(_,_*p,w,w*p);u=(D-P)/2,d=(T-A)/2,h=-(D+P)/2,c=-(T+A)/2}for(i=0,a=g.length;i<a;++i)g[i]._options=r._resolveDataElementOptions(g[i],i);for(o.borderWidth=r.getMaxBorderWidth(),e=(s.right-s.left-o.borderWidth)/u,n=(s.bottom-s.top-o.borderWidth)/d,o.outerRadius=Math.max(Math.min(e,n)/2,0),o.innerRadius=Math.max(o.outerRadius*p,0),o.radiusLength=(o.outerRadius-o.innerRadius)/(r._getVisibleDatasetWeightTotal()||1),o.offsetX=h*o.outerRadius,o.offsetY=c*o.outerRadius,f.total=r.calculateTotal(),r.outerRadius=o.outerRadius-o.radiusLength*r._getRingWeightOffset(r.index),r.innerRadius=Math.max(r.outerRadius-o.radiusLength*v,0),i=0,a=g.length;i<a;++i)r.updateElement(g[i],i,t)},updateElement:function(t,e,n){var i=this,a=i.chart,r=a.chartArea,o=a.options,s=o.animation,l=(r.left+r.right)/2,u=(r.top+r.bottom)/2,d=o.rotation,h=o.rotation,c=i.getDataset(),f=n&&s.animateRotate?0:t.hidden?0:i.calculateCircumference(c.data[e])*(o.circumference/zt),g=n&&s.animateScale?0:i.innerRadius,p=n&&s.animateScale?0:i.outerRadius,m=t._options||{};H.extend(t,{_datasetIndex:i.index,_index:e,_model:{backgroundColor:m.backgroundColor,borderColor:m.borderColor,borderWidth:m.borderWidth,borderAlign:m.borderAlign,x:l+a.offsetX,y:u+a.offsetY,startAngle:d,endAngle:h,circumference:f,outerRadius:p,innerRadius:g,label:H.valueAtIndexOrDefault(c.label,e,a.data.labels[e])}});var v=t._model;n&&s.animateRotate||(v.startAngle=0===e?o.rotation:i.getMeta().data[e-1]._model.endAngle,v.endAngle=v.startAngle+v.circumference),t.pivot()},calculateTotal:function(){var t,e=this.getDataset(),n=this.getMeta(),i=0;return H.each(n.data,(function(n,a){t=e.data[a],isNaN(t)||n.hidden||(i+=Math.abs(t))})),i},calculateCircumference:function(t){var e=this.getMeta().total;return e>0&&!isNaN(t)?zt*(Math.abs(t)/e):0},getMaxBorderWidth:function(t){var e,n,i,a,r,o,s,l,u=0,d=this.chart;if(!t)for(e=0,n=d.data.datasets.length;e<n;++e)if(d.isDatasetVisible(e)){t=(i=d.getDatasetMeta(e)).data,e!==this.index&&(r=i.controller);break}if(!t)return 0;for(e=0,n=t.length;e<n;++e)a=t[e],r?(r._configure(),o=r._resolveDataElementOptions(a,e)):o=a._options,"inner"!==o.borderAlign&&(s=o.borderWidth,u=(l=o.hoverBorderWidth)>(u=s>u?s:u)?l:u);return u},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=Lt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Lt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Lt(n.hoverBorderWidth,n.borderWidth)},_getRingWeightOffset:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&(e+=this._getRingWeight(n));return e},_getRingWeight:function(t){return Math.max(Lt(this.chart.data.datasets[t].weight,1),0)},_getVisibleDatasetWeightTotal:function(){return this._getRingWeightOffset(this.chart.data.datasets.length)}});N._set("horizontalBar",{hover:{mode:"index",axis:"y"},scales:{xAxes:[{type:"linear",position:"bottom"}],yAxes:[{type:"category",position:"left",offset:!0,gridLines:{offsetGridLines:!0}}]},elements:{rectangle:{borderSkipped:"left"}},tooltips:{mode:"index",axis:"y"}}),N._set("global",{datasets:{horizontalBar:{categoryPercentage:.8,barPercentage:.9}}});var Et=Tt.extend({_getValueScaleId:function(){return this.getMeta().xAxisID},_getIndexScaleId:function(){return this.getMeta().yAxisID}}),Wt=H.valueOrDefault,Vt=H.options.resolve,Ht=H.canvas._isPointInArea;function jt(t,e){var n=t&&t.options.ticks||{},i=n.reverse,a=void 0===n.min?e:0,r=void 0===n.max?e:0;return{start:i?r:a,end:i?a:r}}function qt(t,e,n){var i=n/2,a=jt(t,i),r=jt(e,i);return{top:r.end,right:a.end,bottom:r.start,left:a.start}}function Ut(t){var e,n,i,a;return H.isObject(t)?(e=t.top,n=t.right,i=t.bottom,a=t.left):e=n=i=a=t,{top:e,right:n,bottom:i,left:a}}N._set("line",{showLines:!0,spanGaps:!1,hover:{mode:"label"},scales:{xAxes:[{type:"category",id:"x-axis-0"}],yAxes:[{type:"linear",id:"y-axis-0"}]}});var Yt=it.extend({datasetElementType:kt.Line,dataElementType:kt.Point,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth","cubicInterpolationMode","fill"],_dataElementOptions:{backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},update:function(t){var e,n,i=this,a=i.getMeta(),r=a.dataset,o=a.data||[],s=i.chart.options,l=i._config,u=i._showLine=Wt(l.showLine,s.showLines);for(i._xScale=i.getScaleForId(a.xAxisID),i._yScale=i.getScaleForId(a.yAxisID),u&&(void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),r._scale=i._yScale,r._datasetIndex=i.index,r._children=o,r._model=i._resolveDatasetElementOptions(r),r.pivot()),e=0,n=o.length;e<n;++e)i.updateElement(o[e],e,t);for(u&&0!==r._model.tension&&i.updateBezierControlPoints(),e=0,n=o.length;e<n;++e)o[e].pivot()},updateElement:function(t,e,n){var i,a,r=this,o=r.getMeta(),s=t.custom||{},l=r.getDataset(),u=r.index,d=l.data[e],h=r._xScale,c=r._yScale,f=o.dataset._model,g=r._resolveDataElementOptions(t,e);i=h.getPixelForValue("object"==typeof d?d:NaN,e,u),a=n?c.getBasePixel():r.calculatePointY(d,e,u),t._xScale=h,t._yScale=c,t._options=g,t._datasetIndex=u,t._index=e,t._model={x:i,y:a,skip:s.skip||isNaN(i)||isNaN(a),radius:g.radius,pointStyle:g.pointStyle,rotation:g.rotation,backgroundColor:g.backgroundColor,borderColor:g.borderColor,borderWidth:g.borderWidth,tension:Wt(s.tension,f?f.tension:0),steppedLine:!!f&&f.steppedLine,hitRadius:g.hitRadius}},_resolveDatasetElementOptions:function(t){var e=this,n=e._config,i=t.custom||{},a=e.chart.options,r=a.elements.line,o=it.prototype._resolveDatasetElementOptions.apply(e,arguments);return o.spanGaps=Wt(n.spanGaps,a.spanGaps),o.tension=Wt(n.lineTension,r.tension),o.steppedLine=Vt([i.steppedLine,n.steppedLine,r.stepped]),o.clip=Ut(Wt(n.clip,qt(e._xScale,e._yScale,o.borderWidth))),o},calculatePointY:function(t,e,n){var i,a,r,o,s,l,u,d=this.chart,h=this._yScale,c=0,f=0;if(h.options.stacked){for(s=+h.getRightValue(t),u=(l=d._getSortedVisibleDatasetMetas()).length,i=0;i<u&&(r=l[i]).index!==n;++i)a=d.data.datasets[r.index],"line"===r.type&&r.yAxisID===h.id&&((o=+h.getRightValue(a.data[e]))<0?f+=o||0:c+=o||0);return s<0?h.getPixelForValue(f+s):h.getPixelForValue(c+s)}return h.getPixelForValue(t)},updateBezierControlPoints:function(){var t,e,n,i,a=this.chart,r=this.getMeta(),o=r.dataset._model,s=a.chartArea,l=r.data||[];function u(t,e,n){return Math.max(Math.min(t,n),e)}if(o.spanGaps&&(l=l.filter((function(t){return!t._model.skip}))),"monotone"===o.cubicInterpolationMode)H.splineCurveMonotone(l);else for(t=0,e=l.length;t<e;++t)n=l[t]._model,i=H.splineCurve(H.previousItem(l,t)._model,n,H.nextItem(l,t)._model,o.tension),n.controlPointPreviousX=i.previous.x,n.controlPointPreviousY=i.previous.y,n.controlPointNextX=i.next.x,n.controlPointNextY=i.next.y;if(a.options.elements.line.capBezierPoints)for(t=0,e=l.length;t<e;++t)n=l[t]._model,Ht(n,s)&&(t>0&&Ht(l[t-1]._model,s)&&(n.controlPointPreviousX=u(n.controlPointPreviousX,s.left,s.right),n.controlPointPreviousY=u(n.controlPointPreviousY,s.top,s.bottom)),t<l.length-1&&Ht(l[t+1]._model,s)&&(n.controlPointNextX=u(n.controlPointNextX,s.left,s.right),n.controlPointNextY=u(n.controlPointNextY,s.top,s.bottom)))},draw:function(){var t,e=this.chart,n=this.getMeta(),i=n.data||[],a=e.chartArea,r=e.canvas,o=0,s=i.length;for(this._showLine&&(t=n.dataset._model.clip,H.canvas.clipArea(e.ctx,{left:!1===t.left?0:a.left-t.left,right:!1===t.right?r.width:a.right+t.right,top:!1===t.top?0:a.top-t.top,bottom:!1===t.bottom?r.height:a.bottom+t.bottom}),n.dataset.draw(),H.canvas.unclipArea(e.ctx));o<s;++o)i[o].draw(a)},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Wt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Wt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Wt(n.hoverBorderWidth,n.borderWidth),e.radius=Wt(n.hoverRadius,n.radius)}}),Gt=H.options.resolve;N._set("polarArea",{scale:{type:"radialLinear",angleLines:{display:!1},gridLines:{circular:!0},pointLabels:{display:!1},ticks:{beginAtZero:!0}},animation:{animateRotate:!0,animateScale:!0},startAngle:-.5*Math.PI,legendCallback:function(t){var e,n,i,a=document.createElement("ul"),r=t.data,o=r.datasets,s=r.labels;if(a.setAttribute("class",t.id+"-legend"),o.length)for(e=0,n=o[0].data.length;e<n;++e)(i=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=o[0].backgroundColor[e],s[e]&&i.appendChild(document.createTextNode(s[e]));return a.outerHTML},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map((function(n,i){var a=t.getDatasetMeta(0),r=a.controller.getStyle(i);return{text:n,fillStyle:r.backgroundColor,strokeStyle:r.borderColor,lineWidth:r.borderWidth,hidden:isNaN(e.datasets[0].data[i])||a.data[i].hidden,index:i}})):[]}},onClick:function(t,e){var n,i,a,r=e.index,o=this.chart;for(n=0,i=(o.data.datasets||[]).length;n<i;++n)(a=o.getDatasetMeta(n)).data[r].hidden=!a.data[r].hidden;o.update()}},tooltips:{callbacks:{title:function(){return""},label:function(t,e){return e.labels[t.index]+": "+t.yLabel}}}});var Xt=it.extend({dataElementType:kt.Arc,linkScales:H.noop,_dataElementOptions:["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"],_getIndexScaleId:function(){return this.chart.scale.id},_getValueScaleId:function(){return this.chart.scale.id},update:function(t){var e,n,i,a=this,r=a.getDataset(),o=a.getMeta(),s=a.chart.options.startAngle||0,l=a._starts=[],u=a._angles=[],d=o.data;for(a._updateRadius(),o.count=a.countVisibleElements(),e=0,n=r.data.length;e<n;e++)l[e]=s,i=a._computeAngle(e),u[e]=i,s+=i;for(e=0,n=d.length;e<n;++e)d[e]._options=a._resolveDataElementOptions(d[e],e),a.updateElement(d[e],e,t)},_updateRadius:function(){var t=this,e=t.chart,n=e.chartArea,i=e.options,a=Math.min(n.right-n.left,n.bottom-n.top);e.outerRadius=Math.max(a/2,0),e.innerRadius=Math.max(i.cutoutPercentage?e.outerRadius/100*i.cutoutPercentage:1,0),e.radiusLength=(e.outerRadius-e.innerRadius)/e.getVisibleDatasetCount(),t.outerRadius=e.outerRadius-e.radiusLength*t.index,t.innerRadius=t.outerRadius-e.radiusLength},updateElement:function(t,e,n){var i=this,a=i.chart,r=i.getDataset(),o=a.options,s=o.animation,l=a.scale,u=a.data.labels,d=l.xCenter,h=l.yCenter,c=o.startAngle,f=t.hidden?0:l.getDistanceFromCenterForValue(r.data[e]),g=i._starts[e],p=g+(t.hidden?0:i._angles[e]),m=s.animateScale?0:l.getDistanceFromCenterForValue(r.data[e]),v=t._options||{};H.extend(t,{_datasetIndex:i.index,_index:e,_scale:l,_model:{backgroundColor:v.backgroundColor,borderColor:v.borderColor,borderWidth:v.borderWidth,borderAlign:v.borderAlign,x:d,y:h,innerRadius:0,outerRadius:n?m:f,startAngle:n&&s.animateRotate?c:g,endAngle:n&&s.animateRotate?c:p,label:H.valueAtIndexOrDefault(u,e,u[e])}}),t.pivot()},countVisibleElements:function(){var t=this.getDataset(),e=this.getMeta(),n=0;return H.each(e.data,(function(e,i){isNaN(t.data[i])||e.hidden||n++})),n},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor,a=H.valueOrDefault;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=a(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=a(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=a(n.hoverBorderWidth,n.borderWidth)},_computeAngle:function(t){var e=this,n=this.getMeta().count,i=e.getDataset(),a=e.getMeta();if(isNaN(i.data[t])||a.data[t].hidden)return 0;var r={chart:e.chart,dataIndex:t,dataset:i,datasetIndex:e.index};return Gt([e.chart.options.elements.arc.angle,2*Math.PI/n],r,t)}});N._set("pie",H.clone(N.doughnut)),N._set("pie",{cutoutPercentage:0});var Kt=Bt,Zt=H.valueOrDefault;N._set("radar",{spanGaps:!1,scale:{type:"radialLinear"},elements:{line:{fill:"start",tension:0}}});var $t=it.extend({datasetElementType:kt.Line,dataElementType:kt.Point,linkScales:H.noop,_datasetElementOptions:["backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","fill"],_dataElementOptions:{backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},_getIndexScaleId:function(){return this.chart.scale.id},_getValueScaleId:function(){return this.chart.scale.id},update:function(t){var e,n,i=this,a=i.getMeta(),r=a.dataset,o=a.data||[],s=i.chart.scale,l=i._config;for(void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),r._scale=s,r._datasetIndex=i.index,r._children=o,r._loop=!0,r._model=i._resolveDatasetElementOptions(r),r.pivot(),e=0,n=o.length;e<n;++e)i.updateElement(o[e],e,t);for(i.updateBezierControlPoints(),e=0,n=o.length;e<n;++e)o[e].pivot()},updateElement:function(t,e,n){var i=this,a=t.custom||{},r=i.getDataset(),o=i.chart.scale,s=o.getPointPositionForValue(e,r.data[e]),l=i._resolveDataElementOptions(t,e),u=i.getMeta().dataset._model,d=n?o.xCenter:s.x,h=n?o.yCenter:s.y;t._scale=o,t._options=l,t._datasetIndex=i.index,t._index=e,t._model={x:d,y:h,skip:a.skip||isNaN(d)||isNaN(h),radius:l.radius,pointStyle:l.pointStyle,rotation:l.rotation,backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,tension:Zt(a.tension,u?u.tension:0),hitRadius:l.hitRadius}},_resolveDatasetElementOptions:function(){var t=this,e=t._config,n=t.chart.options,i=it.prototype._resolveDatasetElementOptions.apply(t,arguments);return i.spanGaps=Zt(e.spanGaps,n.spanGaps),i.tension=Zt(e.lineTension,n.elements.line.tension),i},updateBezierControlPoints:function(){var t,e,n,i,a=this.getMeta(),r=this.chart.chartArea,o=a.data||[];function s(t,e,n){return Math.max(Math.min(t,n),e)}for(a.dataset._model.spanGaps&&(o=o.filter((function(t){return!t._model.skip}))),t=0,e=o.length;t<e;++t)n=o[t]._model,i=H.splineCurve(H.previousItem(o,t,!0)._model,n,H.nextItem(o,t,!0)._model,n.tension),n.controlPointPreviousX=s(i.previous.x,r.left,r.right),n.controlPointPreviousY=s(i.previous.y,r.top,r.bottom),n.controlPointNextX=s(i.next.x,r.left,r.right),n.controlPointNextY=s(i.next.y,r.top,r.bottom)},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Zt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Zt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Zt(n.hoverBorderWidth,n.borderWidth),e.radius=Zt(n.hoverRadius,n.radius)}});N._set("scatter",{hover:{mode:"single"},scales:{xAxes:[{id:"x-axis-1",type:"linear",position:"bottom"}],yAxes:[{id:"y-axis-1",type:"linear",position:"left"}]},tooltips:{callbacks:{title:function(){return""},label:function(t){return"("+t.xLabel+", "+t.yLabel+")"}}}}),N._set("global",{datasets:{scatter:{showLine:!1}}});var Jt={bar:Tt,bubble:Ot,doughnut:Bt,horizontalBar:Et,line:Yt,polarArea:Xt,pie:Kt,radar:$t,scatter:Yt};function Qt(t,e){return t.native?{x:t.x,y:t.y}:H.getRelativePosition(t,e)}function te(t,e){var n,i,a,r,o,s,l=t._getSortedVisibleDatasetMetas();for(i=0,r=l.length;i<r;++i)for(a=0,o=(n=l[i].data).length;a<o;++a)(s=n[a])._view.skip||e(s)}function ee(t,e){var n=[];return te(t,(function(t){t.inRange(e.x,e.y)&&n.push(t)})),n}function ne(t,e,n,i){var a=Number.POSITIVE_INFINITY,r=[];return te(t,(function(t){if(!n||t.inRange(e.x,e.y)){var o=t.getCenterPoint(),s=i(e,o);s<a?(r=[t],a=s):s===a&&r.push(t)}})),r}function ie(t){var e=-1!==t.indexOf("x"),n=-1!==t.indexOf("y");return function(t,i){var a=e?Math.abs(t.x-i.x):0,r=n?Math.abs(t.y-i.y):0;return Math.sqrt(Math.pow(a,2)+Math.pow(r,2))}}function ae(t,e,n){var i=Qt(e,t);n.axis=n.axis||"x";var a=ie(n.axis),r=n.intersect?ee(t,i):ne(t,i,!1,a),o=[];return r.length?(t._getSortedVisibleDatasetMetas().forEach((function(t){var e=t.data[r[0]._index];e&&!e._view.skip&&o.push(e)})),o):[]}var re={modes:{single:function(t,e){var n=Qt(e,t),i=[];return te(t,(function(t){if(t.inRange(n.x,n.y))return i.push(t),i})),i.slice(0,1)},label:ae,index:ae,dataset:function(t,e,n){var i=Qt(e,t);n.axis=n.axis||"xy";var a=ie(n.axis),r=n.intersect?ee(t,i):ne(t,i,!1,a);return r.length>0&&(r=t.getDatasetMeta(r[0]._datasetIndex).data),r},"x-axis":function(t,e){return ae(t,e,{intersect:!1})},point:function(t,e){return ee(t,Qt(e,t))},nearest:function(t,e,n){var i=Qt(e,t);n.axis=n.axis||"xy";var a=ie(n.axis);return ne(t,i,n.intersect,a)},x:function(t,e,n){var i=Qt(e,t),a=[],r=!1;return te(t,(function(t){t.inXRange(i.x)&&a.push(t),t.inRange(i.x,i.y)&&(r=!0)})),n.intersect&&!r&&(a=[]),a},y:function(t,e,n){var i=Qt(e,t),a=[],r=!1;return te(t,(function(t){t.inYRange(i.y)&&a.push(t),t.inRange(i.x,i.y)&&(r=!0)})),n.intersect&&!r&&(a=[]),a}}},oe=H.extend;function se(t,e){return H.where(t,(function(t){return t.pos===e}))}function le(t,e){return t.sort((function(t,n){var i=e?n:t,a=e?t:n;return i.weight===a.weight?i.index-a.index:i.weight-a.weight}))}function ue(t,e,n,i){return Math.max(t[n],e[n])+Math.max(t[i],e[i])}function de(t,e,n){var i,a,r=n.box,o=t.maxPadding;if(n.size&&(t[n.pos]-=n.size),n.size=n.horizontal?r.height:r.width,t[n.pos]+=n.size,r.getPadding){var s=r.getPadding();o.top=Math.max(o.top,s.top),o.left=Math.max(o.left,s.left),o.bottom=Math.max(o.bottom,s.bottom),o.right=Math.max(o.right,s.right)}if(i=e.outerWidth-ue(o,t,"left","right"),a=e.outerHeight-ue(o,t,"top","bottom"),i!==t.w||a!==t.h){t.w=i,t.h=a;var l=n.horizontal?[i,t.w]:[a,t.h];return!(l[0]===l[1]||isNaN(l[0])&&isNaN(l[1]))}}function he(t,e){var n=e.maxPadding;function i(t){var i={left:0,top:0,right:0,bottom:0};return t.forEach((function(t){i[t]=Math.max(e[t],n[t])})),i}return i(t?["left","right"]:["top","bottom"])}function ce(t,e,n){var i,a,r,o,s,l,u=[];for(i=0,a=t.length;i<a;++i)(o=(r=t[i]).box).update(r.width||e.w,r.height||e.h,he(r.horizontal,e)),de(e,n,r)&&(l=!0,u.length&&(s=!0)),o.fullWidth||u.push(r);return s&&ce(u,e,n)||l}function fe(t,e,n){var i,a,r,o,s=n.padding,l=e.x,u=e.y;for(i=0,a=t.length;i<a;++i)o=(r=t[i]).box,r.horizontal?(o.left=o.fullWidth?s.left:e.left,o.right=o.fullWidth?n.outerWidth-s.right:e.left+e.w,o.top=u,o.bottom=u+o.height,o.width=o.right-o.left,u=o.bottom):(o.left=l,o.right=l+o.width,o.top=e.top,o.bottom=e.top+e.h,o.height=o.bottom-o.top,l=o.right);e.x=l,e.y=u}N._set("global",{layout:{padding:{top:0,right:0,bottom:0,left:0}}});var ge,pe={defaults:{},addBox:function(t,e){t.boxes||(t.boxes=[]),e.fullWidth=e.fullWidth||!1,e.position=e.position||"top",e.weight=e.weight||0,e._layers=e._layers||function(){return[{z:0,draw:function(){e.draw.apply(e,arguments)}}]},t.boxes.push(e)},removeBox:function(t,e){var n=t.boxes?t.boxes.indexOf(e):-1;-1!==n&&t.boxes.splice(n,1)},configure:function(t,e,n){for(var i,a=["fullWidth","position","weight"],r=a.length,o=0;o<r;++o)i=a[o],n.hasOwnProperty(i)&&(e[i]=n[i])},update:function(t,e,n){if(t){var i=t.options.layout||{},a=H.options.toPadding(i.padding),r=e-a.width,o=n-a.height,s=function(t){var e=function(t){var e,n,i,a=[];for(e=0,n=(t||[]).length;e<n;++e)i=t[e],a.push({index:e,box:i,pos:i.position,horizontal:i.isHorizontal(),weight:i.weight});return a}(t),n=le(se(e,"left"),!0),i=le(se(e,"right")),a=le(se(e,"top"),!0),r=le(se(e,"bottom"));return{leftAndTop:n.concat(a),rightAndBottom:i.concat(r),chartArea:se(e,"chartArea"),vertical:n.concat(i),horizontal:a.concat(r)}}(t.boxes),l=s.vertical,u=s.horizontal,d=Object.freeze({outerWidth:e,outerHeight:n,padding:a,availableWidth:r,vBoxMaxWidth:r/2/l.length,hBoxMaxHeight:o/2}),h=oe({maxPadding:oe({},a),w:r,h:o,x:a.left,y:a.top},a);!function(t,e){var n,i,a;for(n=0,i=t.length;n<i;++n)(a=t[n]).width=a.horizontal?a.box.fullWidth&&e.availableWidth:e.vBoxMaxWidth,a.height=a.horizontal&&e.hBoxMaxHeight}(l.concat(u),d),ce(l,h,d),ce(u,h,d)&&ce(l,h,d),function(t){var e=t.maxPadding;function n(n){var i=Math.max(e[n]-t[n],0);return t[n]+=i,i}t.y+=n("top"),t.x+=n("left"),n("right"),n("bottom")}(h),fe(s.leftAndTop,h,d),h.x+=h.w,h.y+=h.h,fe(s.rightAndBottom,h,d),t.chartArea={left:h.left,top:h.top,right:h.left+h.w,bottom:h.top+h.h},H.each(s.chartArea,(function(e){var n=e.box;oe(n,t.chartArea),n.update(h.w,h.h)}))}}},me=(ge=Object.freeze({__proto__:null,default:"@keyframes chartjs-render-animation{from{opacity:.99}to{opacity:1}}.chartjs-render-monitor{animation:chartjs-render-animation 1ms}.chartjs-size-monitor,.chartjs-size-monitor-expand,.chartjs-size-monitor-shrink{position:absolute;direction:ltr;left:0;top:0;right:0;bottom:0;overflow:hidden;pointer-events:none;visibility:hidden;z-index:-1}.chartjs-size-monitor-expand>div{position:absolute;width:1000000px;height:1000000px;left:0;top:0}.chartjs-size-monitor-shrink>div{position:absolute;width:200%;height:200%;left:0;top:0}"}))&&ge.default||ge,ve="$chartjs",be="chartjs-size-monitor",xe="chartjs-render-monitor",ye="chartjs-render-animation",_e=["animationstart","webkitAnimationStart"],ke={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"};function we(t,e){var n=H.getStyle(t,e),i=n&&n.match(/^(\d+)(\.\d+)?px$/);return i?Number(i[1]):void 0}var Me=!!function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("e",null,e)}catch(t){}return t}()&&{passive:!0};function Se(t,e,n){t.addEventListener(e,n,Me)}function Ce(t,e,n){t.removeEventListener(e,n,Me)}function Pe(t,e,n,i,a){return{type:t,chart:e,native:a||null,x:void 0!==n?n:null,y:void 0!==i?i:null}}function Ae(t){var e=document.createElement("div");return e.className=t||"",e}function De(t,e,n){var i,a,r,o,s=t[ve]||(t[ve]={}),l=s.resizer=function(t){var e=Ae(be),n=Ae(be+"-expand"),i=Ae(be+"-shrink");n.appendChild(Ae()),i.appendChild(Ae()),e.appendChild(n),e.appendChild(i),e._reset=function(){n.scrollLeft=1e6,n.scrollTop=1e6,i.scrollLeft=1e6,i.scrollTop=1e6};var a=function(){e._reset(),t()};return Se(n,"scroll",a.bind(n,"expand")),Se(i,"scroll",a.bind(i,"shrink")),e}((i=function(){if(s.resizer){var i=n.options.maintainAspectRatio&&t.parentNode,a=i?i.clientWidth:0;e(Pe("resize",n)),i&&i.clientWidth<a&&n.canvas&&e(Pe("resize",n))}},r=!1,o=[],function(){o=Array.prototype.slice.call(arguments),a=a||this,r||(r=!0,H.requestAnimFrame.call(window,(function(){r=!1,i.apply(a,o)})))}));!function(t,e){var n=t[ve]||(t[ve]={}),i=n.renderProxy=function(t){t.animationName===ye&&e()};H.each(_e,(function(e){Se(t,e,i)})),n.reflow=!!t.offsetParent,t.classList.add(xe)}(t,(function(){if(s.resizer){var e=t.parentNode;e&&e!==l.parentNode&&e.insertBefore(l,e.firstChild),l._reset()}}))}function Te(t){var e=t[ve]||{},n=e.resizer;delete e.resizer,function(t){var e=t[ve]||{},n=e.renderProxy;n&&(H.each(_e,(function(e){Ce(t,e,n)})),delete e.renderProxy),t.classList.remove(xe)}(t),n&&n.parentNode&&n.parentNode.removeChild(n)}var Ie={disableCSSInjection:!1,_enabled:"undefined"!=typeof window&&"undefined"!=typeof document,_ensureLoaded:function(t){if(!this.disableCSSInjection){var e=t.getRootNode?t.getRootNode():document;!function(t,e){var n=t[ve]||(t[ve]={});if(!n.containsStyles){n.containsStyles=!0,e="/* Chart.js */\n"+e;var i=document.createElement("style");i.setAttribute("type","text/css"),i.appendChild(document.createTextNode(e)),t.appendChild(i)}}(e.host?e:document.head,me)}},acquireContext:function(t,e){"string"==typeof t?t=document.getElementById(t):t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas);var n=t&&t.getContext&&t.getContext("2d");return n&&n.canvas===t?(this._ensureLoaded(t),function(t,e){var n=t.style,i=t.getAttribute("height"),a=t.getAttribute("width");if(t[ve]={initial:{height:i,width:a,style:{display:n.display,height:n.height,width:n.width}}},n.display=n.display||"block",null===a||""===a){var r=we(t,"width");void 0!==r&&(t.width=r)}if(null===i||""===i)if(""===t.style.height)t.height=t.width/(e.options.aspectRatio||2);else{var o=we(t,"height");void 0!==r&&(t.height=o)}}(t,e),n):null},releaseContext:function(t){var e=t.canvas;if(e[ve]){var n=e[ve].initial;["height","width"].forEach((function(t){var i=n[t];H.isNullOrUndef(i)?e.removeAttribute(t):e.setAttribute(t,i)})),H.each(n.style||{},(function(t,n){e.style[n]=t})),e.width=e.width,delete e[ve]}},addEventListener:function(t,e,n){var i=t.canvas;if("resize"!==e){var a=n[ve]||(n[ve]={});Se(i,e,(a.proxies||(a.proxies={}))[t.id+"_"+e]=function(e){n(function(t,e){var n=ke[t.type]||t.type,i=H.getRelativePosition(t,e);return Pe(n,e,i.x,i.y,t)}(e,t))})}else De(i,n,t)},removeEventListener:function(t,e,n){var i=t.canvas;if("resize"!==e){var a=((n[ve]||{}).proxies||{})[t.id+"_"+e];a&&Ce(i,e,a)}else Te(i)}};H.addEvent=Se,H.removeEvent=Ce;var Fe=Ie._enabled?Ie:{acquireContext:function(t){return t&&t.canvas&&(t=t.canvas),t&&t.getContext("2d")||null}},Oe=H.extend({initialize:function(){},acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}},Fe);N._set("global",{plugins:{}});var Le={_plugins:[],_cacheId:0,register:function(t){var e=this._plugins;[].concat(t).forEach((function(t){-1===e.indexOf(t)&&e.push(t)})),this._cacheId++},unregister:function(t){var e=this._plugins;[].concat(t).forEach((function(t){var n=e.indexOf(t);-1!==n&&e.splice(n,1)})),this._cacheId++},clear:function(){this._plugins=[],this._cacheId++},count:function(){return this._plugins.length},getAll:function(){return this._plugins},notify:function(t,e,n){var i,a,r,o,s,l=this.descriptors(t),u=l.length;for(i=0;i<u;++i)if("function"==typeof(s=(r=(a=l[i]).plugin)[e])&&((o=[t].concat(n||[])).push(a.options),!1===s.apply(r,o)))return!1;return!0},descriptors:function(t){var e=t.$plugins||(t.$plugins={});if(e.id===this._cacheId)return e.descriptors;var n=[],i=[],a=t&&t.config||{},r=a.options&&a.options.plugins||{};return this._plugins.concat(a.plugins||[]).forEach((function(t){if(-1===n.indexOf(t)){var e=t.id,a=r[e];!1!==a&&(!0===a&&(a=H.clone(N.global.plugins[e])),n.push(t),i.push({plugin:t,options:a||{}}))}})),e.descriptors=i,e.id=this._cacheId,i},_invalidate:function(t){delete t.$plugins}},Re={constructors:{},defaults:{},registerScaleType:function(t,e,n){this.constructors[t]=e,this.defaults[t]=H.clone(n)},getScaleConstructor:function(t){return this.constructors.hasOwnProperty(t)?this.constructors[t]:void 0},getScaleDefaults:function(t){return this.defaults.hasOwnProperty(t)?H.merge(Object.create(null),[N.scale,this.defaults[t]]):{}},updateScaleDefaults:function(t,e){this.defaults.hasOwnProperty(t)&&(this.defaults[t]=H.extend(this.defaults[t],e))},addScalesToLayout:function(t){H.each(t.scales,(function(e){e.fullWidth=e.options.fullWidth,e.position=e.options.position,e.weight=e.options.weight,pe.addBox(t,e)}))}},ze=H.valueOrDefault,Ne=H.rtl.getRtlAdapter;N._set("global",{tooltips:{enabled:!0,custom:null,mode:"nearest",position:"average",intersect:!0,backgroundColor:"rgba(0,0,0,0.8)",titleFontStyle:"bold",titleSpacing:2,titleMarginBottom:6,titleFontColor:"#fff",titleAlign:"left",bodySpacing:2,bodyFontColor:"#fff",bodyAlign:"left",footerFontStyle:"bold",footerSpacing:2,footerMarginTop:6,footerFontColor:"#fff",footerAlign:"left",yPadding:6,xPadding:6,caretPadding:2,caretSize:5,cornerRadius:6,multiKeyBackground:"#fff",displayColors:!0,borderColor:"rgba(0,0,0,0)",borderWidth:0,callbacks:{beforeTitle:H.noop,title:function(t,e){var n="",i=e.labels,a=i?i.length:0;if(t.length>0){var r=t[0];r.label?n=r.label:r.xLabel?n=r.xLabel:a>0&&r.index<a&&(n=i[r.index])}return n},afterTitle:H.noop,beforeBody:H.noop,beforeLabel:H.noop,label:function(t,e){var n=e.datasets[t.datasetIndex].label||"";return n&&(n+=": "),H.isNullOrUndef(t.value)?n+=t.yLabel:n+=t.value,n},labelColor:function(t,e){var n=e.getDatasetMeta(t.datasetIndex).data[t.index]._view;return{borderColor:n.borderColor,backgroundColor:n.backgroundColor}},labelTextColor:function(){return this._options.bodyFontColor},afterLabel:H.noop,afterBody:H.noop,beforeFooter:H.noop,footer:H.noop,afterFooter:H.noop}}});var Be={average:function(t){if(!t.length)return!1;var e,n,i=0,a=0,r=0;for(e=0,n=t.length;e<n;++e){var o=t[e];if(o&&o.hasValue()){var s=o.tooltipPosition();i+=s.x,a+=s.y,++r}}return{x:i/r,y:a/r}},nearest:function(t,e){var n,i,a,r=e.x,o=e.y,s=Number.POSITIVE_INFINITY;for(n=0,i=t.length;n<i;++n){var l=t[n];if(l&&l.hasValue()){var u=l.getCenterPoint(),d=H.distanceBetweenPoints(e,u);d<s&&(s=d,a=l)}}if(a){var h=a.tooltipPosition();r=h.x,o=h.y}return{x:r,y:o}}};function Ee(t,e){return e&&(H.isArray(e)?Array.prototype.push.apply(t,e):t.push(e)),t}function We(t){return("string"==typeof t||t instanceof String)&&t.indexOf("\n")>-1?t.split("\n"):t}function Ve(t){var e=N.global;return{xPadding:t.xPadding,yPadding:t.yPadding,xAlign:t.xAlign,yAlign:t.yAlign,rtl:t.rtl,textDirection:t.textDirection,bodyFontColor:t.bodyFontColor,_bodyFontFamily:ze(t.bodyFontFamily,e.defaultFontFamily),_bodyFontStyle:ze(t.bodyFontStyle,e.defaultFontStyle),_bodyAlign:t.bodyAlign,bodyFontSize:ze(t.bodyFontSize,e.defaultFontSize),bodySpacing:t.bodySpacing,titleFontColor:t.titleFontColor,_titleFontFamily:ze(t.titleFontFamily,e.defaultFontFamily),_titleFontStyle:ze(t.titleFontStyle,e.defaultFontStyle),titleFontSize:ze(t.titleFontSize,e.defaultFontSize),_titleAlign:t.titleAlign,titleSpacing:t.titleSpacing,titleMarginBottom:t.titleMarginBottom,footerFontColor:t.footerFontColor,_footerFontFamily:ze(t.footerFontFamily,e.defaultFontFamily),_footerFontStyle:ze(t.footerFontStyle,e.defaultFontStyle),footerFontSize:ze(t.footerFontSize,e.defaultFontSize),_footerAlign:t.footerAlign,footerSpacing:t.footerSpacing,footerMarginTop:t.footerMarginTop,caretSize:t.caretSize,cornerRadius:t.cornerRadius,backgroundColor:t.backgroundColor,opacity:0,legendColorBackground:t.multiKeyBackground,displayColors:t.displayColors,borderColor:t.borderColor,borderWidth:t.borderWidth}}function He(t,e){return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-t.xPadding:t.x+t.xPadding}function je(t){return Ee([],We(t))}var qe=K.extend({initialize:function(){this._model=Ve(this._options),this._lastActive=[]},getTitle:function(){var t=this,e=t._options,n=e.callbacks,i=n.beforeTitle.apply(t,arguments),a=n.title.apply(t,arguments),r=n.afterTitle.apply(t,arguments),o=[];return o=Ee(o,We(i)),o=Ee(o,We(a)),o=Ee(o,We(r))},getBeforeBody:function(){return je(this._options.callbacks.beforeBody.apply(this,arguments))},getBody:function(t,e){var n=this,i=n._options.callbacks,a=[];return H.each(t,(function(t){var r={before:[],lines:[],after:[]};Ee(r.before,We(i.beforeLabel.call(n,t,e))),Ee(r.lines,i.label.call(n,t,e)),Ee(r.after,We(i.afterLabel.call(n,t,e))),a.push(r)})),a},getAfterBody:function(){return je(this._options.callbacks.afterBody.apply(this,arguments))},getFooter:function(){var t=this,e=t._options.callbacks,n=e.beforeFooter.apply(t,arguments),i=e.footer.apply(t,arguments),a=e.afterFooter.apply(t,arguments),r=[];return r=Ee(r,We(n)),r=Ee(r,We(i)),r=Ee(r,We(a))},update:function(t){var e,n,i,a,r,o,s,l,u,d,h=this,c=h._options,f=h._model,g=h._model=Ve(c),p=h._active,m=h._data,v={xAlign:f.xAlign,yAlign:f.yAlign},b={x:f.x,y:f.y},x={width:f.width,height:f.height},y={x:f.caretX,y:f.caretY};if(p.length){g.opacity=1;var _=[],k=[];y=Be[c.position].call(h,p,h._eventPosition);var w=[];for(e=0,n=p.length;e<n;++e)w.push((i=p[e],a=void 0,r=void 0,o=void 0,s=void 0,l=void 0,u=void 0,d=void 0,a=i._xScale,r=i._yScale||i._scale,o=i._index,s=i._datasetIndex,l=i._chart.getDatasetMeta(s).controller,u=l._getIndexScale(),d=l._getValueScale(),{xLabel:a?a.getLabelForIndex(o,s):"",yLabel:r?r.getLabelForIndex(o,s):"",label:u?""+u.getLabelForIndex(o,s):"",value:d?""+d.getLabelForIndex(o,s):"",index:o,datasetIndex:s,x:i._model.x,y:i._model.y}));c.filter&&(w=w.filter((function(t){return c.filter(t,m)}))),c.itemSort&&(w=w.sort((function(t,e){return c.itemSort(t,e,m)}))),H.each(w,(function(t){_.push(c.callbacks.labelColor.call(h,t,h._chart)),k.push(c.callbacks.labelTextColor.call(h,t,h._chart))})),g.title=h.getTitle(w,m),g.beforeBody=h.getBeforeBody(w,m),g.body=h.getBody(w,m),g.afterBody=h.getAfterBody(w,m),g.footer=h.getFooter(w,m),g.x=y.x,g.y=y.y,g.caretPadding=c.caretPadding,g.labelColors=_,g.labelTextColors=k,g.dataPoints=w,x=function(t,e){var n=t._chart.ctx,i=2*e.yPadding,a=0,r=e.body,o=r.reduce((function(t,e){return t+e.before.length+e.lines.length+e.after.length}),0);o+=e.beforeBody.length+e.afterBody.length;var s=e.title.length,l=e.footer.length,u=e.titleFontSize,d=e.bodyFontSize,h=e.footerFontSize;i+=s*u,i+=s?(s-1)*e.titleSpacing:0,i+=s?e.titleMarginBottom:0,i+=o*d,i+=o?(o-1)*e.bodySpacing:0,i+=l?e.footerMarginTop:0,i+=l*h,i+=l?(l-1)*e.footerSpacing:0;var c=0,f=function(t){a=Math.max(a,n.measureText(t).width+c)};return n.font=H.fontString(u,e._titleFontStyle,e._titleFontFamily),H.each(e.title,f),n.font=H.fontString(d,e._bodyFontStyle,e._bodyFontFamily),H.each(e.beforeBody.concat(e.afterBody),f),c=e.displayColors?d+2:0,H.each(r,(function(t){H.each(t.before,f),H.each(t.lines,f),H.each(t.after,f)})),c=0,n.font=H.fontString(h,e._footerFontStyle,e._footerFontFamily),H.each(e.footer,f),{width:a+=2*e.xPadding,height:i}}(this,g),b=function(t,e,n,i){var a=t.x,r=t.y,o=t.caretSize,s=t.caretPadding,l=t.cornerRadius,u=n.xAlign,d=n.yAlign,h=o+s,c=l+s;return"right"===u?a-=e.width:"center"===u&&((a-=e.width/2)+e.width>i.width&&(a=i.width-e.width),a<0&&(a=0)),"top"===d?r+=h:r-="bottom"===d?e.height+h:e.height/2,"center"===d?"left"===u?a+=h:"right"===u&&(a-=h):"left"===u?a-=c:"right"===u&&(a+=c),{x:a,y:r}}(g,x,v=function(t,e){var n,i,a,r,o,s=t._model,l=t._chart,u=t._chart.chartArea,d="center",h="center";s.y<e.height?h="top":s.y>l.height-e.height&&(h="bottom");var c=(u.left+u.right)/2,f=(u.top+u.bottom)/2;"center"===h?(n=function(t){return t<=c},i=function(t){return t>c}):(n=function(t){return t<=e.width/2},i=function(t){return t>=l.width-e.width/2}),a=function(t){return t+e.width+s.caretSize+s.caretPadding>l.width},r=function(t){return t-e.width-s.caretSize-s.caretPadding<0},o=function(t){return t<=f?"top":"bottom"},n(s.x)?(d="left",a(s.x)&&(d="center",h=o(s.y))):i(s.x)&&(d="right",r(s.x)&&(d="center",h=o(s.y)));var g=t._options;return{xAlign:g.xAlign?g.xAlign:d,yAlign:g.yAlign?g.yAlign:h}}(this,x),h._chart)}else g.opacity=0;return g.xAlign=v.xAlign,g.yAlign=v.yAlign,g.x=b.x,g.y=b.y,g.width=x.width,g.height=x.height,g.caretX=y.x,g.caretY=y.y,h._model=g,t&&c.custom&&c.custom.call(h,g),h},drawCaret:function(t,e){var n=this._chart.ctx,i=this._view,a=this.getCaretPosition(t,e,i);n.lineTo(a.x1,a.y1),n.lineTo(a.x2,a.y2),n.lineTo(a.x3,a.y3)},getCaretPosition:function(t,e,n){var i,a,r,o,s,l,u=n.caretSize,d=n.cornerRadius,h=n.xAlign,c=n.yAlign,f=t.x,g=t.y,p=e.width,m=e.height;if("center"===c)s=g+m/2,"left"===h?(a=(i=f)-u,r=i,o=s+u,l=s-u):(a=(i=f+p)+u,r=i,o=s-u,l=s+u);else if("left"===h?(i=(a=f+d+u)-u,r=a+u):"right"===h?(i=(a=f+p-d-u)-u,r=a+u):(i=(a=n.caretX)-u,r=a+u),"top"===c)s=(o=g)-u,l=o;else{s=(o=g+m)+u,l=o;var v=r;r=i,i=v}return{x1:i,x2:a,x3:r,y1:o,y2:s,y3:l}},drawTitle:function(t,e,n){var i,a,r,o=e.title,s=o.length;if(s){var l=Ne(e.rtl,e.x,e.width);for(t.x=He(e,e._titleAlign),n.textAlign=l.textAlign(e._titleAlign),n.textBaseline="middle",i=e.titleFontSize,a=e.titleSpacing,n.fillStyle=e.titleFontColor,n.font=H.fontString(i,e._titleFontStyle,e._titleFontFamily),r=0;r<s;++r)n.fillText(o[r],l.x(t.x),t.y+i/2),t.y+=i+a,r+1===s&&(t.y+=e.titleMarginBottom-a)}},drawBody:function(t,e,n){var i,a,r,o,s,l,u,d,h=e.bodyFontSize,c=e.bodySpacing,f=e._bodyAlign,g=e.body,p=e.displayColors,m=0,v=p?He(e,"left"):0,b=Ne(e.rtl,e.x,e.width),x=function(e){n.fillText(e,b.x(t.x+m),t.y+h/2),t.y+=h+c},y=b.textAlign(f);for(n.textAlign=f,n.textBaseline="middle",n.font=H.fontString(h,e._bodyFontStyle,e._bodyFontFamily),t.x=He(e,y),n.fillStyle=e.bodyFontColor,H.each(e.beforeBody,x),m=p&&"right"!==y?"center"===f?h/2+1:h+2:0,s=0,u=g.length;s<u;++s){for(i=g[s],a=e.labelTextColors[s],r=e.labelColors[s],n.fillStyle=a,H.each(i.before,x),l=0,d=(o=i.lines).length;l<d;++l){if(p){var _=b.x(v);n.fillStyle=e.legendColorBackground,n.fillRect(b.leftForLtr(_,h),t.y,h,h),n.lineWidth=1,n.strokeStyle=r.borderColor,n.strokeRect(b.leftForLtr(_,h),t.y,h,h),n.fillStyle=r.backgroundColor,n.fillRect(b.leftForLtr(b.xPlus(_,1),h-2),t.y+1,h-2,h-2),n.fillStyle=a}x(o[l])}H.each(i.after,x)}m=0,H.each(e.afterBody,x),t.y-=c},drawFooter:function(t,e,n){var i,a,r=e.footer,o=r.length;if(o){var s=Ne(e.rtl,e.x,e.width);for(t.x=He(e,e._footerAlign),t.y+=e.footerMarginTop,n.textAlign=s.textAlign(e._footerAlign),n.textBaseline="middle",i=e.footerFontSize,n.fillStyle=e.footerFontColor,n.font=H.fontString(i,e._footerFontStyle,e._footerFontFamily),a=0;a<o;++a)n.fillText(r[a],s.x(t.x),t.y+i/2),t.y+=i+e.footerSpacing}},drawBackground:function(t,e,n,i){n.fillStyle=e.backgroundColor,n.strokeStyle=e.borderColor,n.lineWidth=e.borderWidth;var a=e.xAlign,r=e.yAlign,o=t.x,s=t.y,l=i.width,u=i.height,d=e.cornerRadius;n.beginPath(),n.moveTo(o+d,s),"top"===r&&this.drawCaret(t,i),n.lineTo(o+l-d,s),n.quadraticCurveTo(o+l,s,o+l,s+d),"center"===r&&"right"===a&&this.drawCaret(t,i),n.lineTo(o+l,s+u-d),n.quadraticCurveTo(o+l,s+u,o+l-d,s+u),"bottom"===r&&this.drawCaret(t,i),n.lineTo(o+d,s+u),n.quadraticCurveTo(o,s+u,o,s+u-d),"center"===r&&"left"===a&&this.drawCaret(t,i),n.lineTo(o,s+d),n.quadraticCurveTo(o,s,o+d,s),n.closePath(),n.fill(),e.borderWidth>0&&n.stroke()},draw:function(){var t=this._chart.ctx,e=this._view;if(0!==e.opacity){var n={width:e.width,height:e.height},i={x:e.x,y:e.y},a=Math.abs(e.opacity<.001)?0:e.opacity,r=e.title.length||e.beforeBody.length||e.body.length||e.afterBody.length||e.footer.length;this._options.enabled&&r&&(t.save(),t.globalAlpha=a,this.drawBackground(i,e,t,n),i.y+=e.yPadding,H.rtl.overrideTextDirection(t,e.textDirection),this.drawTitle(i,e,t),this.drawBody(i,e,t),this.drawFooter(i,e,t),H.rtl.restoreTextDirection(t,e.textDirection),t.restore())}},handleEvent:function(t){var e,n=this,i=n._options;return n._lastActive=n._lastActive||[],"mouseout"===t.type?n._active=[]:(n._active=n._chart.getElementsAtEventForMode(t,i.mode,i),i.reverse&&n._active.reverse()),(e=!H.arrayEquals(n._active,n._lastActive))&&(n._lastActive=n._active,(i.enabled||i.custom)&&(n._eventPosition={x:t.x,y:t.y},n.update(!0),n.pivot())),e}}),Ue=Be,Ye=qe;Ye.positioners=Ue;var Ge=H.valueOrDefault;function Xe(){return H.merge(Object.create(null),[].slice.call(arguments),{merger:function(t,e,n,i){if("xAxes"===t||"yAxes"===t){var a,r,o,s=n[t].length;for(e[t]||(e[t]=[]),a=0;a<s;++a)o=n[t][a],r=Ge(o.type,"xAxes"===t?"category":"linear"),a>=e[t].length&&e[t].push({}),!e[t][a].type||o.type&&o.type!==e[t][a].type?H.merge(e[t][a],[Re.getScaleDefaults(r),o]):H.merge(e[t][a],o)}else H._merger(t,e,n,i)}})}function Ke(){return H.merge(Object.create(null),[].slice.call(arguments),{merger:function(t,e,n,i){var a=e[t]||Object.create(null),r=n[t];"scales"===t?e[t]=Xe(a,r):"scale"===t?e[t]=H.merge(a,[Re.getScaleDefaults(r.type),r]):H._merger(t,e,n,i)}})}function Ze(t){var e=t.options;H.each(t.scales,(function(e){pe.removeBox(t,e)})),e=Ke(N.global,N[t.config.type],e),t.options=t.config.options=e,t.ensureScalesHaveIDs(),t.buildOrUpdateScales(),t.tooltip._options=e.tooltips,t.tooltip.initialize()}function $e(t,e,n){var i,a=function(t){return t.id===i};do{i=e+n++}while(H.findIndex(t,a)>=0);return i}function Je(t){return"top"===t||"bottom"===t}function Qe(t,e){return function(n,i){return n[t]===i[t]?n[e]-i[e]:n[t]-i[t]}}N._set("global",{elements:{},events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,maintainAspectRatio:!0,responsive:!0,responsiveAnimationDuration:0});var tn=function(t,e){return this.construct(t,e),this};H.extend(tn.prototype,{construct:function(t,e){var n=this;e=function(t){var e=(t=t||Object.create(null)).data=t.data||{};return e.datasets=e.datasets||[],e.labels=e.labels||[],t.options=Ke(N.global,N[t.type],t.options||{}),t}(e);var i=Oe.acquireContext(t,e),a=i&&i.canvas,r=a&&a.height,o=a&&a.width;n.id=H.uid(),n.ctx=i,n.canvas=a,n.config=e,n.width=o,n.height=r,n.aspectRatio=r?o/r:null,n.options=e.options,n._bufferedRender=!1,n._layers=[],n.chart=n,n.controller=n,tn.instances[n.id]=n,Object.defineProperty(n,"data",{get:function(){return n.config.data},set:function(t){n.config.data=t}}),i&&a?(n.initialize(),n.update()):console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var t=this;return Le.notify(t,"beforeInit"),H.retinaScale(t,t.options.devicePixelRatio),t.bindEvents(),t.options.responsive&&t.resize(!0),t.initToolTip(),Le.notify(t,"afterInit"),t},clear:function(){return H.canvas.clear(this),this},stop:function(){return J.cancelAnimation(this),this},resize:function(t){var e=this,n=e.options,i=e.canvas,a=n.maintainAspectRatio&&e.aspectRatio||null,r=Math.max(0,Math.floor(H.getMaximumWidth(i))),o=Math.max(0,Math.floor(a?r/a:H.getMaximumHeight(i)));if((e.width!==r||e.height!==o)&&(i.width=e.width=r,i.height=e.height=o,i.style.width=r+"px",i.style.height=o+"px",H.retinaScale(e,n.devicePixelRatio),!t)){var s={width:r,height:o};Le.notify(e,"resize",[s]),n.onResize&&n.onResize(e,s),e.stop(),e.update({duration:n.responsiveAnimationDuration})}},ensureScalesHaveIDs:function(){var t=this.options,e=t.scales||{},n=t.scale;H.each(e.xAxes,(function(t,n){t.id||(t.id=$e(e.xAxes,"x-axis-",n))})),H.each(e.yAxes,(function(t,n){t.id||(t.id=$e(e.yAxes,"y-axis-",n))})),n&&(n.id=n.id||"scale")},buildOrUpdateScales:function(){var t=this,e=t.options,n=t.scales||{},i=[],a=Object.keys(n).reduce((function(t,e){return t[e]=!1,t}),{});e.scales&&(i=i.concat((e.scales.xAxes||[]).map((function(t){return{options:t,dtype:"category",dposition:"bottom"}})),(e.scales.yAxes||[]).map((function(t){return{options:t,dtype:"linear",dposition:"left"}})))),e.scale&&i.push({options:e.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),H.each(i,(function(e){var i=e.options,r=i.id,o=Ge(i.type,e.dtype);Je(i.position)!==Je(e.dposition)&&(i.position=e.dposition),a[r]=!0;var s=null;if(r in n&&n[r].type===o)(s=n[r]).options=i,s.ctx=t.ctx,s.chart=t;else{var l=Re.getScaleConstructor(o);if(!l)return;s=new l({id:r,type:o,options:i,ctx:t.ctx,chart:t}),n[s.id]=s}s.mergeTicksOptions(),e.isDefault&&(t.scale=s)})),H.each(a,(function(t,e){t||delete n[e]})),t.scales=n,Re.addScalesToLayout(this)},buildOrUpdateControllers:function(){var t,e,n=this,i=[],a=n.data.datasets;for(t=0,e=a.length;t<e;t++){var r=a[t],o=n.getDatasetMeta(t),s=r.type||n.config.type;if(o.type&&o.type!==s&&(n.destroyDatasetMeta(t),o=n.getDatasetMeta(t)),o.type=s,o.order=r.order||0,o.index=t,o.controller)o.controller.updateIndex(t),o.controller.linkScales();else{var l=Jt[o.type];if(void 0===l)throw new Error('"'+o.type+'" is not a chart type.');o.controller=new l(n,t),i.push(o.controller)}}return i},resetElements:function(){var t=this;H.each(t.data.datasets,(function(e,n){t.getDatasetMeta(n).controller.reset()}),t)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(t){var e,n,i=this;if(t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]}),Ze(i),Le._invalidate(i),!1!==Le.notify(i,"beforeUpdate")){i.tooltip._data=i.data;var a=i.buildOrUpdateControllers();for(e=0,n=i.data.datasets.length;e<n;e++)i.getDatasetMeta(e).controller.buildOrUpdateElements();i.updateLayout(),i.options.animation&&i.options.animation.duration&&H.each(a,(function(t){t.reset()})),i.updateDatasets(),i.tooltip.initialize(),i.lastActive=[],Le.notify(i,"afterUpdate"),i._layers.sort(Qe("z","_idx")),i._bufferedRender?i._bufferedRequest={duration:t.duration,easing:t.easing,lazy:t.lazy}:i.render(t)}},updateLayout:function(){var t=this;!1!==Le.notify(t,"beforeLayout")&&(pe.update(this,this.width,this.height),t._layers=[],H.each(t.boxes,(function(e){e._configure&&e._configure(),t._layers.push.apply(t._layers,e._layers())}),t),t._layers.forEach((function(t,e){t._idx=e})),Le.notify(t,"afterScaleUpdate"),Le.notify(t,"afterLayout"))},updateDatasets:function(){if(!1!==Le.notify(this,"beforeDatasetsUpdate")){for(var t=0,e=this.data.datasets.length;t<e;++t)this.updateDataset(t);Le.notify(this,"afterDatasetsUpdate")}},updateDataset:function(t){var e=this.getDatasetMeta(t),n={meta:e,index:t};!1!==Le.notify(this,"beforeDatasetUpdate",[n])&&(e.controller._update(),Le.notify(this,"afterDatasetUpdate",[n]))},render:function(t){var e=this;t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]});var n=e.options.animation,i=Ge(t.duration,n&&n.duration),a=t.lazy;if(!1!==Le.notify(e,"beforeRender")){var r=function(t){Le.notify(e,"afterRender"),H.callback(n&&n.onComplete,[t],e)};if(n&&i){var o=new $({numSteps:i/16.66,easing:t.easing||n.easing,render:function(t,e){var n=H.easing.effects[e.easing],i=e.currentStep,a=i/e.numSteps;t.draw(n(a),a,i)},onAnimationProgress:n.onProgress,onAnimationComplete:r});J.addAnimation(e,o,i,a)}else e.draw(),r(new $({numSteps:0,chart:e}));return e}},draw:function(t){var e,n,i=this;if(i.clear(),H.isNullOrUndef(t)&&(t=1),i.transition(t),!(i.width<=0||i.height<=0)&&!1!==Le.notify(i,"beforeDraw",[t])){for(n=i._layers,e=0;e<n.length&&n[e].z<=0;++e)n[e].draw(i.chartArea);for(i.drawDatasets(t);e<n.length;++e)n[e].draw(i.chartArea);i._drawTooltip(t),Le.notify(i,"afterDraw",[t])}},transition:function(t){for(var e=0,n=(this.data.datasets||[]).length;e<n;++e)this.isDatasetVisible(e)&&this.getDatasetMeta(e).controller.transition(t);this.tooltip.transition(t)},_getSortedDatasetMetas:function(t){var e,n,i=[];for(e=0,n=(this.data.datasets||[]).length;e<n;++e)t&&!this.isDatasetVisible(e)||i.push(this.getDatasetMeta(e));return i.sort(Qe("order","index")),i},_getSortedVisibleDatasetMetas:function(){return this._getSortedDatasetMetas(!0)},drawDatasets:function(t){var e,n;if(!1!==Le.notify(this,"beforeDatasetsDraw",[t])){for(n=(e=this._getSortedVisibleDatasetMetas()).length-1;n>=0;--n)this.drawDataset(e[n],t);Le.notify(this,"afterDatasetsDraw",[t])}},drawDataset:function(t,e){var n={meta:t,index:t.index,easingValue:e};!1!==Le.notify(this,"beforeDatasetDraw",[n])&&(t.controller.draw(e),Le.notify(this,"afterDatasetDraw",[n]))},_drawTooltip:function(t){var e=this.tooltip,n={tooltip:e,easingValue:t};!1!==Le.notify(this,"beforeTooltipDraw",[n])&&(e.draw(),Le.notify(this,"afterTooltipDraw",[n]))},getElementAtEvent:function(t){return re.modes.single(this,t)},getElementsAtEvent:function(t){return re.modes.label(this,t,{intersect:!0})},getElementsAtXAxis:function(t){return re.modes["x-axis"](this,t,{intersect:!0})},getElementsAtEventForMode:function(t,e,n){var i=re.modes[e];return"function"==typeof i?i(this,t,n):[]},getDatasetAtEvent:function(t){return re.modes.dataset(this,t,{intersect:!0})},getDatasetMeta:function(t){var e=this.data.datasets[t];e._meta||(e._meta={});var n=e._meta[this.id];return n||(n=e._meta[this.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e.order||0,index:t}),n},getVisibleDatasetCount:function(){for(var t=0,e=0,n=this.data.datasets.length;e<n;++e)this.isDatasetVisible(e)&&t++;return t},isDatasetVisible:function(t){var e=this.getDatasetMeta(t);return"boolean"==typeof e.hidden?!e.hidden:!this.data.datasets[t].hidden},generateLegend:function(){return this.options.legendCallback(this)},destroyDatasetMeta:function(t){var e=this.id,n=this.data.datasets[t],i=n._meta&&n._meta[e];i&&(i.controller.destroy(),delete n._meta[e])},destroy:function(){var t,e,n=this,i=n.canvas;for(n.stop(),t=0,e=n.data.datasets.length;t<e;++t)n.destroyDatasetMeta(t);i&&(n.unbindEvents(),H.canvas.clear(n),Oe.releaseContext(n.ctx),n.canvas=null,n.ctx=null),Le.notify(n,"destroy"),delete tn.instances[n.id]},toBase64Image:function(){return this.canvas.toDataURL.apply(this.canvas,arguments)},initToolTip:function(){var t=this;t.tooltip=new Ye({_chart:t,_chartInstance:t,_data:t.data,_options:t.options.tooltips},t)},bindEvents:function(){var t=this,e=t._listeners={},n=function(){t.eventHandler.apply(t,arguments)};H.each(t.options.events,(function(i){Oe.addEventListener(t,i,n),e[i]=n})),t.options.responsive&&(n=function(){t.resize()},Oe.addEventListener(t,"resize",n),e.resize=n)},unbindEvents:function(){var t=this,e=t._listeners;e&&(delete t._listeners,H.each(e,(function(e,n){Oe.removeEventListener(t,n,e)})))},updateHoverStyle:function(t,e,n){var i,a,r,o=n?"set":"remove";for(a=0,r=t.length;a<r;++a)(i=t[a])&&this.getDatasetMeta(i._datasetIndex).controller[o+"HoverStyle"](i);"dataset"===e&&this.getDatasetMeta(t[0]._datasetIndex).controller["_"+o+"DatasetHoverStyle"]()},eventHandler:function(t){var e=this,n=e.tooltip;if(!1!==Le.notify(e,"beforeEvent",[t])){e._bufferedRender=!0,e._bufferedRequest=null;var i=e.handleEvent(t);n&&(i=n._start?n.handleEvent(t):i|n.handleEvent(t)),Le.notify(e,"afterEvent",[t]);var a=e._bufferedRequest;return a?e.render(a):i&&!e.animating&&(e.stop(),e.render({duration:e.options.hover.animationDuration,lazy:!0})),e._bufferedRender=!1,e._bufferedRequest=null,e}},handleEvent:function(t){var e,n=this,i=n.options||{},a=i.hover;return n.lastActive=n.lastActive||[],"mouseout"===t.type?n.active=[]:n.active=n.getElementsAtEventForMode(t,a.mode,a),H.callback(i.onHover||i.hover.onHover,[t.native,n.active],n),"mouseup"!==t.type&&"click"!==t.type||i.onClick&&i.onClick.call(n,t.native,n.active),n.lastActive.length&&n.updateHoverStyle(n.lastActive,a.mode,!1),n.active.length&&a.mode&&n.updateHoverStyle(n.active,a.mode,!0),e=!H.arrayEquals(n.active,n.lastActive),n.lastActive=n.active,e}}),tn.instances={};var en=tn;tn.Controller=tn,tn.types={},H.configMerge=Ke,H.scaleMerge=Xe;function nn(){throw new Error("This method is not implemented: either no adapter can be found or an incomplete integration was provided.")}function an(t){this.options=t||{}}H.extend(an.prototype,{formats:nn,parse:nn,format:nn,add:nn,diff:nn,startOf:nn,endOf:nn,_create:function(t){return t}}),an.override=function(t){H.extend(an.prototype,t)};var rn={_date:an},on={formatters:{values:function(t){return H.isArray(t)?t:""+t},linear:function(t,e,n){var i=n.length>3?n[2]-n[1]:n[1]-n[0];Math.abs(i)>1&&t!==Math.floor(t)&&(i=t-Math.floor(t));var a=H.log10(Math.abs(i)),r="";if(0!==t)if(Math.max(Math.abs(n[0]),Math.abs(n[n.length-1]))<1e-4){var o=H.log10(Math.abs(t)),s=Math.floor(o)-Math.floor(a);s=Math.max(Math.min(s,20),0),r=t.toExponential(s)}else{var l=-1*Math.floor(a);l=Math.max(Math.min(l,20),0),r=t.toFixed(l)}else r="0";return r},logarithmic:function(t,e,n){var i=t/Math.pow(10,Math.floor(H.log10(t)));return 0===t?"0":1===i||2===i||5===i||0===e||e===n.length-1?t.toExponential():""}}},sn=H.isArray,ln=H.isNullOrUndef,un=H.valueOrDefault,dn=H.valueAtIndexOrDefault;function hn(t,e,n){var i,a=t.getTicks().length,r=Math.min(e,a-1),o=t.getPixelForTick(r),s=t._startPixel,l=t._endPixel;if(!(n&&(i=1===a?Math.max(o-s,l-o):0===e?(t.getPixelForTick(1)-o)/2:(o-t.getPixelForTick(r-1))/2,(o+=r<e?i:-i)<s-1e-6||o>l+1e-6)))return o}function cn(t,e,n,i){var a,r,o,s,l,u,d,h,c,f,g,p,m,v=n.length,b=[],x=[],y=[],_=0,k=0;for(a=0;a<v;++a){if(s=n[a].label,l=n[a].major?e.major:e.minor,t.font=u=l.string,d=i[u]=i[u]||{data:{},gc:[]},h=l.lineHeight,c=f=0,ln(s)||sn(s)){if(sn(s))for(r=0,o=s.length;r<o;++r)g=s[r],ln(g)||sn(g)||(c=H.measureText(t,d.data,d.gc,c,g),f+=h)}else c=H.measureText(t,d.data,d.gc,c,s),f=h;b.push(c),x.push(f),y.push(h/2),_=Math.max(c,_),k=Math.max(f,k)}function w(t){return{width:b[t]||0,height:x[t]||0,offset:y[t]||0}}return function(t,e){H.each(t,(function(t){var n,i=t.gc,a=i.length/2;if(a>e){for(n=0;n<a;++n)delete t.data[i[n]];i.splice(0,a)}}))}(i,v),p=b.indexOf(_),m=x.indexOf(k),{first:w(0),last:w(v-1),widest:w(p),highest:w(m)}}function fn(t){return t.drawTicks?t.tickMarkLength:0}function gn(t){var e,n;return t.display?(e=H.options._parseFont(t),n=H.options.toPadding(t.padding),e.lineHeight+n.height):0}function pn(t,e){return H.extend(H.options._parseFont({fontFamily:un(e.fontFamily,t.fontFamily),fontSize:un(e.fontSize,t.fontSize),fontStyle:un(e.fontStyle,t.fontStyle),lineHeight:un(e.lineHeight,t.lineHeight)}),{color:H.options.resolve([e.fontColor,t.fontColor,N.global.defaultFontColor])})}function mn(t){var e=pn(t,t.minor);return{minor:e,major:t.major.enabled?pn(t,t.major):e}}function vn(t){var e,n,i,a=[];for(n=0,i=t.length;n<i;++n)void 0!==(e=t[n])._index&&a.push(e);return a}function bn(t,e,n,i){var a,r,o,s,l=un(n,0),u=Math.min(un(i,t.length),t.length),d=0;for(e=Math.ceil(e),i&&(e=(a=i-n)/Math.floor(a/e)),s=l;s<0;)d++,s=Math.round(l+d*e);for(r=Math.max(l,0);r<u;r++)o=t[r],r===s?(o._index=r,d++,s=Math.round(l+d*e)):delete o.label}N._set("scale",{display:!0,position:"left",offset:!1,gridLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:"rgba(0,0,0,0.25)",zeroLineBorderDash:[],zeroLineBorderDashOffset:0,offsetGridLines:!1,borderDash:[],borderDashOffset:0},scaleLabel:{display:!1,labelString:"",padding:{top:4,bottom:4}},ticks:{beginAtZero:!1,minRotation:0,maxRotation:50,mirror:!1,padding:0,reverse:!1,display:!0,autoSkip:!0,autoSkipPadding:0,labelOffset:0,callback:on.formatters.values,minor:{},major:{}}});var xn=K.extend({zeroLineIndex:0,getPadding:function(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}},getTicks:function(){return this._ticks},_getLabels:function(){var t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]},mergeTicksOptions:function(){},beforeUpdate:function(){H.callback(this.options.beforeUpdate,[this])},update:function(t,e,n){var i,a,r,o,s,l=this,u=l.options.ticks,d=u.sampleSize;if(l.beforeUpdate(),l.maxWidth=t,l.maxHeight=e,l.margins=H.extend({left:0,right:0,top:0,bottom:0},n),l._ticks=null,l.ticks=null,l._labelSizes=null,l._maxLabelLines=0,l.longestLabelWidth=0,l.longestTextCache=l.longestTextCache||{},l._gridLineItems=null,l._labelItems=null,l.beforeSetDimensions(),l.setDimensions(),l.afterSetDimensions(),l.beforeDataLimits(),l.determineDataLimits(),l.afterDataLimits(),l.beforeBuildTicks(),o=l.buildTicks()||[],(!(o=l.afterBuildTicks(o)||o)||!o.length)&&l.ticks)for(o=[],i=0,a=l.ticks.length;i<a;++i)o.push({value:l.ticks[i],major:!1});return l._ticks=o,s=d<o.length,r=l._convertTicksToLabels(s?function(t,e){for(var n=[],i=t.length/e,a=0,r=t.length;a<r;a+=i)n.push(t[Math.floor(a)]);return n}(o,d):o),l._configure(),l.beforeCalculateTickRotation(),l.calculateTickRotation(),l.afterCalculateTickRotation(),l.beforeFit(),l.fit(),l.afterFit(),l._ticksToDraw=u.display&&(u.autoSkip||"auto"===u.source)?l._autoSkip(o):o,s&&(r=l._convertTicksToLabels(l._ticksToDraw)),l.ticks=r,l.afterUpdate(),l.minSize},_configure:function(){var t,e,n=this,i=n.options.ticks.reverse;n.isHorizontal()?(t=n.left,e=n.right):(t=n.top,e=n.bottom,i=!i),n._startPixel=t,n._endPixel=e,n._reversePixels=i,n._length=e-t},afterUpdate:function(){H.callback(this.options.afterUpdate,[this])},beforeSetDimensions:function(){H.callback(this.options.beforeSetDimensions,[this])},setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0},afterSetDimensions:function(){H.callback(this.options.afterSetDimensions,[this])},beforeDataLimits:function(){H.callback(this.options.beforeDataLimits,[this])},determineDataLimits:H.noop,afterDataLimits:function(){H.callback(this.options.afterDataLimits,[this])},beforeBuildTicks:function(){H.callback(this.options.beforeBuildTicks,[this])},buildTicks:H.noop,afterBuildTicks:function(t){var e=this;return sn(t)&&t.length?H.callback(e.options.afterBuildTicks,[e,t]):(e.ticks=H.callback(e.options.afterBuildTicks,[e,e.ticks])||e.ticks,t)},beforeTickToLabelConversion:function(){H.callback(this.options.beforeTickToLabelConversion,[this])},convertTicksToLabels:function(){var t=this.options.ticks;this.ticks=this.ticks.map(t.userCallback||t.callback,this)},afterTickToLabelConversion:function(){H.callback(this.options.afterTickToLabelConversion,[this])},beforeCalculateTickRotation:function(){H.callback(this.options.beforeCalculateTickRotation,[this])},calculateTickRotation:function(){var t,e,n,i,a,r,o,s=this,l=s.options,u=l.ticks,d=s.getTicks().length,h=u.minRotation||0,c=u.maxRotation,f=h;!s._isVisible()||!u.display||h>=c||d<=1||!s.isHorizontal()?s.labelRotation=h:(e=(t=s._getLabelSizes()).widest.width,n=t.highest.height-t.highest.offset,i=Math.min(s.maxWidth,s.chart.width-e),e+6>(a=l.offset?s.maxWidth/d:i/(d-1))&&(a=i/(d-(l.offset?.5:1)),r=s.maxHeight-fn(l.gridLines)-u.padding-gn(l.scaleLabel),o=Math.sqrt(e*e+n*n),f=H.toDegrees(Math.min(Math.asin(Math.min((t.highest.height+6)/a,1)),Math.asin(Math.min(r/o,1))-Math.asin(n/o))),f=Math.max(h,Math.min(c,f))),s.labelRotation=f)},afterCalculateTickRotation:function(){H.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){H.callback(this.options.beforeFit,[this])},fit:function(){var t=this,e=t.minSize={width:0,height:0},n=t.chart,i=t.options,a=i.ticks,r=i.scaleLabel,o=i.gridLines,s=t._isVisible(),l="bottom"===i.position,u=t.isHorizontal();if(u?e.width=t.maxWidth:s&&(e.width=fn(o)+gn(r)),u?s&&(e.height=fn(o)+gn(r)):e.height=t.maxHeight,a.display&&s){var d=mn(a),h=t._getLabelSizes(),c=h.first,f=h.last,g=h.widest,p=h.highest,m=.4*d.minor.lineHeight,v=a.padding;if(u){var b=0!==t.labelRotation,x=H.toRadians(t.labelRotation),y=Math.cos(x),_=Math.sin(x),k=_*g.width+y*(p.height-(b?p.offset:0))+(b?0:m);e.height=Math.min(t.maxHeight,e.height+k+v);var w,M,S=t.getPixelForTick(0)-t.left,C=t.right-t.getPixelForTick(t.getTicks().length-1);b?(w=l?y*c.width+_*c.offset:_*(c.height-c.offset),M=l?_*(f.height-f.offset):y*f.width+_*f.offset):(w=c.width/2,M=f.width/2),t.paddingLeft=Math.max((w-S)*t.width/(t.width-S),0)+3,t.paddingRight=Math.max((M-C)*t.width/(t.width-C),0)+3}else{var P=a.mirror?0:g.width+v+m;e.width=Math.min(t.maxWidth,e.width+P),t.paddingTop=c.height/2,t.paddingBottom=f.height/2}}t.handleMargins(),u?(t.width=t._length=n.width-t.margins.left-t.margins.right,t.height=e.height):(t.width=e.width,t.height=t._length=n.height-t.margins.top-t.margins.bottom)},handleMargins:function(){var t=this;t.margins&&(t.margins.left=Math.max(t.paddingLeft,t.margins.left),t.margins.top=Math.max(t.paddingTop,t.margins.top),t.margins.right=Math.max(t.paddingRight,t.margins.right),t.margins.bottom=Math.max(t.paddingBottom,t.margins.bottom))},afterFit:function(){H.callback(this.options.afterFit,[this])},isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(t){if(ln(t))return NaN;if(("number"==typeof t||t instanceof Number)&&!isFinite(t))return NaN;if(t)if(this.isHorizontal()){if(void 0!==t.x)return this.getRightValue(t.x)}else if(void 0!==t.y)return this.getRightValue(t.y);return t},_convertTicksToLabels:function(t){var e,n,i,a=this;for(a.ticks=t.map((function(t){return t.value})),a.beforeTickToLabelConversion(),e=a.convertTicksToLabels(t)||a.ticks,a.afterTickToLabelConversion(),n=0,i=t.length;n<i;++n)t[n].label=e[n];return e},_getLabelSizes:function(){var t=this,e=t._labelSizes;return e||(t._labelSizes=e=cn(t.ctx,mn(t.options.ticks),t.getTicks(),t.longestTextCache),t.longestLabelWidth=e.widest.width),e},_parseValue:function(t){var e,n,i,a;return sn(t)?(e=+this.getRightValue(t[0]),n=+this.getRightValue(t[1]),i=Math.min(e,n),a=Math.max(e,n)):(e=void 0,n=t=+this.getRightValue(t),i=t,a=t),{min:i,max:a,start:e,end:n}},_getScaleLabel:function(t){var e=this._parseValue(t);return void 0!==e.start?"["+e.start+", "+e.end+"]":+this.getRightValue(t)},getLabelForIndex:H.noop,getPixelForValue:H.noop,getValueForPixel:H.noop,getPixelForTick:function(t){var e=this.options.offset,n=this._ticks.length,i=1/Math.max(n-(e?0:1),1);return t<0||t>n-1?null:this.getPixelForDecimal(t*i+(e?i/2:0))},getPixelForDecimal:function(t){return this._reversePixels&&(t=1-t),this._startPixel+t*this._length},getDecimalForPixel:function(t){var e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var t=this.min,e=this.max;return this.beginAtZero?0:t<0&&e<0?e:t>0&&e>0?t:0},_autoSkip:function(t){var e,n,i,a,r=this.options.ticks,o=this._length,s=r.maxTicksLimit||o/this._tickSize()+1,l=r.major.enabled?function(t){var e,n,i=[];for(e=0,n=t.length;e<n;e++)t[e].major&&i.push(e);return i}(t):[],u=l.length,d=l[0],h=l[u-1];if(u>s)return function(t,e,n){var i,a,r=0,o=e[0];for(n=Math.ceil(n),i=0;i<t.length;i++)a=t[i],i===o?(a._index=i,o=e[++r*n]):delete a.label}(t,l,u/s),vn(t);if(i=function(t,e,n,i){var a,r,o,s,l=function(t){var e,n,i=t.length;if(i<2)return!1;for(n=t[0],e=1;e<i;++e)if(t[e]-t[e-1]!==n)return!1;return n}(t),u=(e.length-1)/i;if(!l)return Math.max(u,1);for(o=0,s=(a=H.math._factorize(l)).length-1;o<s;o++)if((r=a[o])>u)return r;return Math.max(u,1)}(l,t,0,s),u>0){for(e=0,n=u-1;e<n;e++)bn(t,i,l[e],l[e+1]);return a=u>1?(h-d)/(u-1):null,bn(t,i,H.isNullOrUndef(a)?0:d-a,d),bn(t,i,h,H.isNullOrUndef(a)?t.length:h+a),vn(t)}return bn(t,i),vn(t)},_tickSize:function(){var t=this.options.ticks,e=H.toRadians(this.labelRotation),n=Math.abs(Math.cos(e)),i=Math.abs(Math.sin(e)),a=this._getLabelSizes(),r=t.autoSkipPadding||0,o=a?a.widest.width+r:0,s=a?a.highest.height+r:0;return this.isHorizontal()?s*n>o*i?o/n:s/i:s*i<o*n?s/n:o/i},_isVisible:function(){var t,e,n,i=this.chart,a=this.options.display;if("auto"!==a)return!!a;for(t=0,e=i.data.datasets.length;t<e;++t)if(i.isDatasetVisible(t)&&((n=i.getDatasetMeta(t)).xAxisID===this.id||n.yAxisID===this.id))return!0;return!1},_computeGridLineItems:function(t){var e,n,i,a,r,o,s,l,u,d,h,c,f,g,p,m,v,b=this,x=b.chart,y=b.options,_=y.gridLines,k=y.position,w=_.offsetGridLines,M=b.isHorizontal(),S=b._ticksToDraw,C=S.length+(w?1:0),P=fn(_),A=[],D=_.drawBorder?dn(_.lineWidth,0,0):0,T=D/2,I=H._alignPixel,F=function(t){return I(x,t,D)};for("top"===k?(e=F(b.bottom),s=b.bottom-P,u=e-T,h=F(t.top)+T,f=t.bottom):"bottom"===k?(e=F(b.top),h=t.top,f=F(t.bottom)-T,s=e+T,u=b.top+P):"left"===k?(e=F(b.right),o=b.right-P,l=e-T,d=F(t.left)+T,c=t.right):(e=F(b.left),d=t.left,c=F(t.right)-T,o=e+T,l=b.left+P),n=0;n<C;++n)i=S[n]||{},ln(i.label)&&n<S.length||(n===b.zeroLineIndex&&y.offset===w?(g=_.zeroLineWidth,p=_.zeroLineColor,m=_.zeroLineBorderDash||[],v=_.zeroLineBorderDashOffset||0):(g=dn(_.lineWidth,n,1),p=dn(_.color,n,"rgba(0,0,0,0.1)"),m=_.borderDash||[],v=_.borderDashOffset||0),void 0!==(a=hn(b,i._index||n,w))&&(r=I(x,a,g),M?o=l=d=c=r:s=u=h=f=r,A.push({tx1:o,ty1:s,tx2:l,ty2:u,x1:d,y1:h,x2:c,y2:f,width:g,color:p,borderDash:m,borderDashOffset:v})));return A.ticksLength=C,A.borderValue=e,A},_computeLabelItems:function(){var t,e,n,i,a,r,o,s,l,u,d,h,c=this,f=c.options,g=f.ticks,p=f.position,m=g.mirror,v=c.isHorizontal(),b=c._ticksToDraw,x=mn(g),y=g.padding,_=fn(f.gridLines),k=-H.toRadians(c.labelRotation),w=[];for("top"===p?(r=c.bottom-_-y,o=k?"left":"center"):"bottom"===p?(r=c.top+_+y,o=k?"right":"center"):"left"===p?(a=c.right-(m?0:_)-y,o=m?"left":"right"):(a=c.left+(m?0:_)+y,o=m?"right":"left"),t=0,e=b.length;t<e;++t)i=(n=b[t]).label,ln(i)||(s=c.getPixelForTick(n._index||t)+g.labelOffset,u=(l=n.major?x.major:x.minor).lineHeight,d=sn(i)?i.length:1,v?(a=s,h="top"===p?((k?1:.5)-d)*u:(k?0:.5)*u):(r=s,h=(1-d)*u/2),w.push({x:a,y:r,rotation:k,label:i,font:l,textOffset:h,textAlign:o}));return w},_drawGrid:function(t){var e=this,n=e.options.gridLines;if(n.display){var i,a,r,o,s,l=e.ctx,u=e.chart,d=H._alignPixel,h=n.drawBorder?dn(n.lineWidth,0,0):0,c=e._gridLineItems||(e._gridLineItems=e._computeGridLineItems(t));for(r=0,o=c.length;r<o;++r)i=(s=c[r]).width,a=s.color,i&&a&&(l.save(),l.lineWidth=i,l.strokeStyle=a,l.setLineDash&&(l.setLineDash(s.borderDash),l.lineDashOffset=s.borderDashOffset),l.beginPath(),n.drawTicks&&(l.moveTo(s.tx1,s.ty1),l.lineTo(s.tx2,s.ty2)),n.drawOnChartArea&&(l.moveTo(s.x1,s.y1),l.lineTo(s.x2,s.y2)),l.stroke(),l.restore());if(h){var f,g,p,m,v=h,b=dn(n.lineWidth,c.ticksLength-1,1),x=c.borderValue;e.isHorizontal()?(f=d(u,e.left,v)-v/2,g=d(u,e.right,b)+b/2,p=m=x):(p=d(u,e.top,v)-v/2,m=d(u,e.bottom,b)+b/2,f=g=x),l.lineWidth=h,l.strokeStyle=dn(n.color,0),l.beginPath(),l.moveTo(f,p),l.lineTo(g,m),l.stroke()}}},_drawLabels:function(){var t=this;if(t.options.ticks.display){var e,n,i,a,r,o,s,l,u=t.ctx,d=t._labelItems||(t._labelItems=t._computeLabelItems());for(e=0,i=d.length;e<i;++e){if(o=(r=d[e]).font,u.save(),u.translate(r.x,r.y),u.rotate(r.rotation),u.font=o.string,u.fillStyle=o.color,u.textBaseline="middle",u.textAlign=r.textAlign,s=r.label,l=r.textOffset,sn(s))for(n=0,a=s.length;n<a;++n)u.fillText(""+s[n],0,l),l+=o.lineHeight;else u.fillText(s,0,l);u.restore()}}},_drawTitle:function(){var t=this,e=t.ctx,n=t.options,i=n.scaleLabel;if(i.display){var a,r,o=un(i.fontColor,N.global.defaultFontColor),s=H.options._parseFont(i),l=H.options.toPadding(i.padding),u=s.lineHeight/2,d=n.position,h=0;if(t.isHorizontal())a=t.left+t.width/2,r="bottom"===d?t.bottom-u-l.bottom:t.top+u+l.top;else{var c="left"===d;a=c?t.left+u+l.top:t.right-u-l.top,r=t.top+t.height/2,h=c?-.5*Math.PI:.5*Math.PI}e.save(),e.translate(a,r),e.rotate(h),e.textAlign="center",e.textBaseline="middle",e.fillStyle=o,e.font=s.string,e.fillText(i.labelString,0,0),e.restore()}},draw:function(t){this._isVisible()&&(this._drawGrid(t),this._drawTitle(),this._drawLabels())},_layers:function(){var t=this,e=t.options,n=e.ticks&&e.ticks.z||0,i=e.gridLines&&e.gridLines.z||0;return t._isVisible()&&n!==i&&t.draw===t._draw?[{z:i,draw:function(){t._drawGrid.apply(t,arguments),t._drawTitle.apply(t,arguments)}},{z:n,draw:function(){t._drawLabels.apply(t,arguments)}}]:[{z:n,draw:function(){t.draw.apply(t,arguments)}}]},_getMatchingVisibleMetas:function(t){var e=this,n=e.isHorizontal();return e.chart._getSortedVisibleDatasetMetas().filter((function(i){return(!t||i.type===t)&&(n?i.xAxisID===e.id:i.yAxisID===e.id)}))}});xn.prototype._draw=xn.prototype.draw;var yn=xn,_n=H.isNullOrUndef,kn=yn.extend({determineDataLimits:function(){var t,e=this,n=e._getLabels(),i=e.options.ticks,a=i.min,r=i.max,o=0,s=n.length-1;void 0!==a&&(t=n.indexOf(a))>=0&&(o=t),void 0!==r&&(t=n.indexOf(r))>=0&&(s=t),e.minIndex=o,e.maxIndex=s,e.min=n[o],e.max=n[s]},buildTicks:function(){var t=this._getLabels(),e=this.minIndex,n=this.maxIndex;this.ticks=0===e&&n===t.length-1?t:t.slice(e,n+1)},getLabelForIndex:function(t,e){var n=this.chart;return n.getDatasetMeta(e).controller._getValueScaleId()===this.id?this.getRightValue(n.data.datasets[e].data[t]):this._getLabels()[t]},_configure:function(){var t=this,e=t.options.offset,n=t.ticks;yn.prototype._configure.call(t),t.isHorizontal()||(t._reversePixels=!t._reversePixels),n&&(t._startValue=t.minIndex-(e?.5:0),t._valueRange=Math.max(n.length-(e?0:1),1))},getPixelForValue:function(t,e,n){var i,a,r,o=this;return _n(e)||_n(n)||(t=o.chart.data.datasets[n].data[e]),_n(t)||(i=o.isHorizontal()?t.x:t.y),(void 0!==i||void 0!==t&&isNaN(e))&&(a=o._getLabels(),t=H.valueOrDefault(i,t),e=-1!==(r=a.indexOf(t))?r:e,isNaN(e)&&(e=t)),o.getPixelForDecimal((e-o._startValue)/o._valueRange)},getPixelForTick:function(t){var e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t],t+this.minIndex)},getValueForPixel:function(t){var e=Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange);return Math.min(Math.max(e,0),this.ticks.length-1)},getBasePixel:function(){return this.bottom}}),wn={position:"bottom"};kn._defaults=wn;var Mn=H.noop,Sn=H.isNullOrUndef;var Cn=yn.extend({getRightValue:function(t){return"string"==typeof t?+t:yn.prototype.getRightValue.call(this,t)},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;if(e.beginAtZero){var n=H.sign(t.min),i=H.sign(t.max);n<0&&i<0?t.max=0:n>0&&i>0&&(t.min=0)}var a=void 0!==e.min||void 0!==e.suggestedMin,r=void 0!==e.max||void 0!==e.suggestedMax;void 0!==e.min?t.min=e.min:void 0!==e.suggestedMin&&(null===t.min?t.min=e.suggestedMin:t.min=Math.min(t.min,e.suggestedMin)),void 0!==e.max?t.max=e.max:void 0!==e.suggestedMax&&(null===t.max?t.max=e.suggestedMax:t.max=Math.max(t.max,e.suggestedMax)),a!==r&&t.min>=t.max&&(a?t.max=t.min+1:t.min=t.max-1),t.min===t.max&&(t.max++,e.beginAtZero||t.min--)},getTickLimit:function(){var t,e=this.options.ticks,n=e.stepSize,i=e.maxTicksLimit;return n?t=Math.ceil(this.max/n)-Math.floor(this.min/n)+1:(t=this._computeTickLimit(),i=i||11),i&&(t=Math.min(i,t)),t},_computeTickLimit:function(){return Number.POSITIVE_INFINITY},handleDirectionalChanges:Mn,buildTicks:function(){var t=this,e=t.options.ticks,n=t.getTickLimit(),i={maxTicks:n=Math.max(2,n),min:e.min,max:e.max,precision:e.precision,stepSize:H.valueOrDefault(e.fixedStepSize,e.stepSize)},a=t.ticks=function(t,e){var n,i,a,r,o=[],s=t.stepSize,l=s||1,u=t.maxTicks-1,d=t.min,h=t.max,c=t.precision,f=e.min,g=e.max,p=H.niceNum((g-f)/u/l)*l;if(p<1e-14&&Sn(d)&&Sn(h))return[f,g];(r=Math.ceil(g/p)-Math.floor(f/p))>u&&(p=H.niceNum(r*p/u/l)*l),s||Sn(c)?n=Math.pow(10,H._decimalPlaces(p)):(n=Math.pow(10,c),p=Math.ceil(p*n)/n),i=Math.floor(f/p)*p,a=Math.ceil(g/p)*p,s&&(!Sn(d)&&H.almostWhole(d/p,p/1e3)&&(i=d),!Sn(h)&&H.almostWhole(h/p,p/1e3)&&(a=h)),r=(a-i)/p,r=H.almostEquals(r,Math.round(r),p/1e3)?Math.round(r):Math.ceil(r),i=Math.round(i*n)/n,a=Math.round(a*n)/n,o.push(Sn(d)?i:d);for(var m=1;m<r;++m)o.push(Math.round((i+m*p)*n)/n);return o.push(Sn(h)?a:h),o}(i,t);t.handleDirectionalChanges(),t.max=H.max(a),t.min=H.min(a),e.reverse?(a.reverse(),t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max)},convertTicksToLabels:function(){var t=this;t.ticksAsNumbers=t.ticks.slice(),t.zeroLineIndex=t.ticks.indexOf(0),yn.prototype.convertTicksToLabels.call(t)},_configure:function(){var t,e=this,n=e.getTicks(),i=e.min,a=e.max;yn.prototype._configure.call(e),e.options.offset&&n.length&&(i-=t=(a-i)/Math.max(n.length-1,1)/2,a+=t),e._startValue=i,e._endValue=a,e._valueRange=a-i}}),Pn={position:"left",ticks:{callback:on.formatters.linear}};function An(t,e,n,i){var a,r,o=t.options,s=function(t,e,n){var i=[n.type,void 0===e&&void 0===n.stack?n.index:"",n.stack].join(".");return void 0===t[i]&&(t[i]={pos:[],neg:[]}),t[i]}(e,o.stacked,n),l=s.pos,u=s.neg,d=i.length;for(a=0;a<d;++a)r=t._parseValue(i[a]),isNaN(r.min)||isNaN(r.max)||n.data[a].hidden||(l[a]=l[a]||0,u[a]=u[a]||0,o.relativePoints?l[a]=100:r.min<0||r.max<0?u[a]+=r.min:l[a]+=r.max)}function Dn(t,e,n){var i,a,r=n.length;for(i=0;i<r;++i)a=t._parseValue(n[i]),isNaN(a.min)||isNaN(a.max)||e.data[i].hidden||(t.min=Math.min(t.min,a.min),t.max=Math.max(t.max,a.max))}var Tn=Cn.extend({determineDataLimits:function(){var t,e,n,i,a=this,r=a.options,o=a.chart.data.datasets,s=a._getMatchingVisibleMetas(),l=r.stacked,u={},d=s.length;if(a.min=Number.POSITIVE_INFINITY,a.max=Number.NEGATIVE_INFINITY,void 0===l)for(t=0;!l&&t<d;++t)l=void 0!==(e=s[t]).stack;for(t=0;t<d;++t)n=o[(e=s[t]).index].data,l?An(a,u,e,n):Dn(a,e,n);H.each(u,(function(t){i=t.pos.concat(t.neg),a.min=Math.min(a.min,H.min(i)),a.max=Math.max(a.max,H.max(i))})),a.min=H.isFinite(a.min)&&!isNaN(a.min)?a.min:0,a.max=H.isFinite(a.max)&&!isNaN(a.max)?a.max:1,a.handleTickRangeOptions()},_computeTickLimit:function(){var t;return this.isHorizontal()?Math.ceil(this.width/40):(t=H.options._parseFont(this.options.ticks),Math.ceil(this.height/t.lineHeight))},handleDirectionalChanges:function(){this.isHorizontal()||this.ticks.reverse()},getLabelForIndex:function(t,e){return this._getScaleLabel(this.chart.data.datasets[e].data[t])},getPixelForValue:function(t){return this.getPixelForDecimal((+this.getRightValue(t)-this._startValue)/this._valueRange)},getValueForPixel:function(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange},getPixelForTick:function(t){var e=this.ticksAsNumbers;return t<0||t>e.length-1?null:this.getPixelForValue(e[t])}}),In=Pn;Tn._defaults=In;var Fn=H.valueOrDefault,On=H.math.log10;var Ln={position:"left",ticks:{callback:on.formatters.logarithmic}};function Rn(t,e){return H.isFinite(t)&&t>=0?t:e}var zn=yn.extend({determineDataLimits:function(){var t,e,n,i,a,r,o=this,s=o.options,l=o.chart,u=l.data.datasets,d=o.isHorizontal();function h(t){return d?t.xAxisID===o.id:t.yAxisID===o.id}o.min=Number.POSITIVE_INFINITY,o.max=Number.NEGATIVE_INFINITY,o.minNotZero=Number.POSITIVE_INFINITY;var c=s.stacked;if(void 0===c)for(t=0;t<u.length;t++)if(e=l.getDatasetMeta(t),l.isDatasetVisible(t)&&h(e)&&void 0!==e.stack){c=!0;break}if(s.stacked||c){var f={};for(t=0;t<u.length;t++){var g=[(e=l.getDatasetMeta(t)).type,void 0===s.stacked&&void 0===e.stack?t:"",e.stack].join(".");if(l.isDatasetVisible(t)&&h(e))for(void 0===f[g]&&(f[g]=[]),a=0,r=(i=u[t].data).length;a<r;a++){var p=f[g];n=o._parseValue(i[a]),isNaN(n.min)||isNaN(n.max)||e.data[a].hidden||n.min<0||n.max<0||(p[a]=p[a]||0,p[a]+=n.max)}}H.each(f,(function(t){if(t.length>0){var e=H.min(t),n=H.max(t);o.min=Math.min(o.min,e),o.max=Math.max(o.max,n)}}))}else for(t=0;t<u.length;t++)if(e=l.getDatasetMeta(t),l.isDatasetVisible(t)&&h(e))for(a=0,r=(i=u[t].data).length;a<r;a++)n=o._parseValue(i[a]),isNaN(n.min)||isNaN(n.max)||e.data[a].hidden||n.min<0||n.max<0||(o.min=Math.min(n.min,o.min),o.max=Math.max(n.max,o.max),0!==n.min&&(o.minNotZero=Math.min(n.min,o.minNotZero)));o.min=H.isFinite(o.min)?o.min:null,o.max=H.isFinite(o.max)?o.max:null,o.minNotZero=H.isFinite(o.minNotZero)?o.minNotZero:null,this.handleTickRangeOptions()},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;t.min=Rn(e.min,t.min),t.max=Rn(e.max,t.max),t.min===t.max&&(0!==t.min&&null!==t.min?(t.min=Math.pow(10,Math.floor(On(t.min))-1),t.max=Math.pow(10,Math.floor(On(t.max))+1)):(t.min=1,t.max=10)),null===t.min&&(t.min=Math.pow(10,Math.floor(On(t.max))-1)),null===t.max&&(t.max=0!==t.min?Math.pow(10,Math.floor(On(t.min))+1):10),null===t.minNotZero&&(t.min>0?t.minNotZero=t.min:t.max<1?t.minNotZero=Math.pow(10,Math.floor(On(t.max))):t.minNotZero=1)},buildTicks:function(){var t=this,e=t.options.ticks,n=!t.isHorizontal(),i={min:Rn(e.min),max:Rn(e.max)},a=t.ticks=function(t,e){var n,i,a=[],r=Fn(t.min,Math.pow(10,Math.floor(On(e.min)))),o=Math.floor(On(e.max)),s=Math.ceil(e.max/Math.pow(10,o));0===r?(n=Math.floor(On(e.minNotZero)),i=Math.floor(e.minNotZero/Math.pow(10,n)),a.push(r),r=i*Math.pow(10,n)):(n=Math.floor(On(r)),i=Math.floor(r/Math.pow(10,n)));var l=n<0?Math.pow(10,Math.abs(n)):1;do{a.push(r),10===++i&&(i=1,l=++n>=0?1:l),r=Math.round(i*Math.pow(10,n)*l)/l}while(n<o||n===o&&i<s);var u=Fn(t.max,r);return a.push(u),a}(i,t);t.max=H.max(a),t.min=H.min(a),e.reverse?(n=!n,t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max),n&&a.reverse()},convertTicksToLabels:function(){this.tickValues=this.ticks.slice(),yn.prototype.convertTicksToLabels.call(this)},getLabelForIndex:function(t,e){return this._getScaleLabel(this.chart.data.datasets[e].data[t])},getPixelForTick:function(t){var e=this.tickValues;return t<0||t>e.length-1?null:this.getPixelForValue(e[t])},_getFirstTickValue:function(t){var e=Math.floor(On(t));return Math.floor(t/Math.pow(10,e))*Math.pow(10,e)},_configure:function(){var t=this,e=t.min,n=0;yn.prototype._configure.call(t),0===e&&(e=t._getFirstTickValue(t.minNotZero),n=Fn(t.options.ticks.fontSize,N.global.defaultFontSize)/t._length),t._startValue=On(e),t._valueOffset=n,t._valueRange=(On(t.max)-On(e))/(1-n)},getPixelForValue:function(t){var e=this,n=0;return(t=+e.getRightValue(t))>e.min&&t>0&&(n=(On(t)-e._startValue)/e._valueRange+e._valueOffset),e.getPixelForDecimal(n)},getValueForPixel:function(t){var e=this,n=e.getDecimalForPixel(t);return 0===n&&0===e.min?0:Math.pow(10,e._startValue+(n-e._valueOffset)*e._valueRange)}}),Nn=Ln;zn._defaults=Nn;var Bn=H.valueOrDefault,En=H.valueAtIndexOrDefault,Wn=H.options.resolve,Vn={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,borderDash:[],borderDashOffset:0},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:on.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(t){return t}}};function Hn(t){var e=t.ticks;return e.display&&t.display?Bn(e.fontSize,N.global.defaultFontSize)+2*e.backdropPaddingY:0}function jn(t,e,n,i,a){return t===i||t===a?{start:e-n/2,end:e+n/2}:t<i||t>a?{start:e-n,end:e}:{start:e,end:e+n}}function qn(t){return 0===t||180===t?"center":t<180?"left":"right"}function Un(t,e,n,i){var a,r,o=n.y+i/2;if(H.isArray(e))for(a=0,r=e.length;a<r;++a)t.fillText(e[a],n.x,o),o+=i;else t.fillText(e,n.x,o)}function Yn(t,e,n){90===t||270===t?n.y-=e.h/2:(t>270||t<90)&&(n.y-=e.h)}function Gn(t){return H.isNumber(t)?t:0}var Xn=Cn.extend({setDimensions:function(){var t=this;t.width=t.maxWidth,t.height=t.maxHeight,t.paddingTop=Hn(t.options)/2,t.xCenter=Math.floor(t.width/2),t.yCenter=Math.floor((t.height-t.paddingTop)/2),t.drawingArea=Math.min(t.height-t.paddingTop,t.width)/2},determineDataLimits:function(){var t=this,e=t.chart,n=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;H.each(e.data.datasets,(function(a,r){if(e.isDatasetVisible(r)){var o=e.getDatasetMeta(r);H.each(a.data,(function(e,a){var r=+t.getRightValue(e);isNaN(r)||o.data[a].hidden||(n=Math.min(r,n),i=Math.max(r,i))}))}})),t.min=n===Number.POSITIVE_INFINITY?0:n,t.max=i===Number.NEGATIVE_INFINITY?0:i,t.handleTickRangeOptions()},_computeTickLimit:function(){return Math.ceil(this.drawingArea/Hn(this.options))},convertTicksToLabels:function(){var t=this;Cn.prototype.convertTicksToLabels.call(t),t.pointLabels=t.chart.data.labels.map((function(){var e=H.callback(t.options.pointLabels.callback,arguments,t);return e||0===e?e:""}))},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},fit:function(){var t=this.options;t.display&&t.pointLabels.display?function(t){var e,n,i,a=H.options._parseFont(t.options.pointLabels),r={l:0,r:t.width,t:0,b:t.height-t.paddingTop},o={};t.ctx.font=a.string,t._pointLabelSizes=[];var s,l,u,d=t.chart.data.labels.length;for(e=0;e<d;e++){i=t.getPointPosition(e,t.drawingArea+5),s=t.ctx,l=a.lineHeight,u=t.pointLabels[e],n=H.isArray(u)?{w:H.longestText(s,s.font,u),h:u.length*l}:{w:s.measureText(u).width,h:l},t._pointLabelSizes[e]=n;var h=t.getIndexAngle(e),c=H.toDegrees(h)%360,f=jn(c,i.x,n.w,0,180),g=jn(c,i.y,n.h,90,270);f.start<r.l&&(r.l=f.start,o.l=h),f.end>r.r&&(r.r=f.end,o.r=h),g.start<r.t&&(r.t=g.start,o.t=h),g.end>r.b&&(r.b=g.end,o.b=h)}t.setReductions(t.drawingArea,r,o)}(this):this.setCenterPoint(0,0,0,0)},setReductions:function(t,e,n){var i=this,a=e.l/Math.sin(n.l),r=Math.max(e.r-i.width,0)/Math.sin(n.r),o=-e.t/Math.cos(n.t),s=-Math.max(e.b-(i.height-i.paddingTop),0)/Math.cos(n.b);a=Gn(a),r=Gn(r),o=Gn(o),s=Gn(s),i.drawingArea=Math.min(Math.floor(t-(a+r)/2),Math.floor(t-(o+s)/2)),i.setCenterPoint(a,r,o,s)},setCenterPoint:function(t,e,n,i){var a=this,r=a.width-e-a.drawingArea,o=t+a.drawingArea,s=n+a.drawingArea,l=a.height-a.paddingTop-i-a.drawingArea;a.xCenter=Math.floor((o+r)/2+a.left),a.yCenter=Math.floor((s+l)/2+a.top+a.paddingTop)},getIndexAngle:function(t){var e=this.chart,n=(t*(360/e.data.labels.length)+((e.options||{}).startAngle||0))%360;return(n<0?n+360:n)*Math.PI*2/360},getDistanceFromCenterForValue:function(t){var e=this;if(H.isNullOrUndef(t))return NaN;var n=e.drawingArea/(e.max-e.min);return e.options.ticks.reverse?(e.max-t)*n:(t-e.min)*n},getPointPosition:function(t,e){var n=this.getIndexAngle(t)-Math.PI/2;return{x:Math.cos(n)*e+this.xCenter,y:Math.sin(n)*e+this.yCenter}},getPointPositionForValue:function(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))},getBasePosition:function(t){var e=this.min,n=this.max;return this.getPointPositionForValue(t||0,this.beginAtZero?0:e<0&&n<0?n:e>0&&n>0?e:0)},_drawGrid:function(){var t,e,n,i=this,a=i.ctx,r=i.options,o=r.gridLines,s=r.angleLines,l=Bn(s.lineWidth,o.lineWidth),u=Bn(s.color,o.color);if(r.pointLabels.display&&function(t){var e=t.ctx,n=t.options,i=n.pointLabels,a=Hn(n),r=t.getDistanceFromCenterForValue(n.ticks.reverse?t.min:t.max),o=H.options._parseFont(i);e.save(),e.font=o.string,e.textBaseline="middle";for(var s=t.chart.data.labels.length-1;s>=0;s--){var l=0===s?a/2:0,u=t.getPointPosition(s,r+l+5),d=En(i.fontColor,s,N.global.defaultFontColor);e.fillStyle=d;var h=t.getIndexAngle(s),c=H.toDegrees(h);e.textAlign=qn(c),Yn(c,t._pointLabelSizes[s],u),Un(e,t.pointLabels[s],u,o.lineHeight)}e.restore()}(i),o.display&&H.each(i.ticks,(function(t,n){0!==n&&(e=i.getDistanceFromCenterForValue(i.ticksAsNumbers[n]),function(t,e,n,i){var a,r=t.ctx,o=e.circular,s=t.chart.data.labels.length,l=En(e.color,i-1),u=En(e.lineWidth,i-1);if((o||s)&&l&&u){if(r.save(),r.strokeStyle=l,r.lineWidth=u,r.setLineDash&&(r.setLineDash(e.borderDash||[]),r.lineDashOffset=e.borderDashOffset||0),r.beginPath(),o)r.arc(t.xCenter,t.yCenter,n,0,2*Math.PI);else{a=t.getPointPosition(0,n),r.moveTo(a.x,a.y);for(var d=1;d<s;d++)a=t.getPointPosition(d,n),r.lineTo(a.x,a.y)}r.closePath(),r.stroke(),r.restore()}}(i,o,e,n))})),s.display&&l&&u){for(a.save(),a.lineWidth=l,a.strokeStyle=u,a.setLineDash&&(a.setLineDash(Wn([s.borderDash,o.borderDash,[]])),a.lineDashOffset=Wn([s.borderDashOffset,o.borderDashOffset,0])),t=i.chart.data.labels.length-1;t>=0;t--)e=i.getDistanceFromCenterForValue(r.ticks.reverse?i.min:i.max),n=i.getPointPosition(t,e),a.beginPath(),a.moveTo(i.xCenter,i.yCenter),a.lineTo(n.x,n.y),a.stroke();a.restore()}},_drawLabels:function(){var t=this,e=t.ctx,n=t.options.ticks;if(n.display){var i,a,r=t.getIndexAngle(0),o=H.options._parseFont(n),s=Bn(n.fontColor,N.global.defaultFontColor);e.save(),e.font=o.string,e.translate(t.xCenter,t.yCenter),e.rotate(r),e.textAlign="center",e.textBaseline="middle",H.each(t.ticks,(function(r,l){(0!==l||n.reverse)&&(i=t.getDistanceFromCenterForValue(t.ticksAsNumbers[l]),n.showLabelBackdrop&&(a=e.measureText(r).width,e.fillStyle=n.backdropColor,e.fillRect(-a/2-n.backdropPaddingX,-i-o.size/2-n.backdropPaddingY,a+2*n.backdropPaddingX,o.size+2*n.backdropPaddingY)),e.fillStyle=s,e.fillText(r,0,-i))})),e.restore()}},_drawTitle:H.noop}),Kn=Vn;Xn._defaults=Kn;var Zn=H._deprecated,$n=H.options.resolve,Jn=H.valueOrDefault,Qn=Number.MIN_SAFE_INTEGER||-9007199254740991,ti=Number.MAX_SAFE_INTEGER||9007199254740991,ei={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},ni=Object.keys(ei);function ii(t,e){return t-e}function ai(t){return H.valueOrDefault(t.time.min,t.ticks.min)}function ri(t){return H.valueOrDefault(t.time.max,t.ticks.max)}function oi(t,e,n,i){var a=function(t,e,n){for(var i,a,r,o=0,s=t.length-1;o>=0&&o<=s;){if(a=t[(i=o+s>>1)-1]||null,r=t[i],!a)return{lo:null,hi:r};if(r[e]<n)o=i+1;else{if(!(a[e]>n))return{lo:a,hi:r};s=i-1}}return{lo:r,hi:null}}(t,e,n),r=a.lo?a.hi?a.lo:t[t.length-2]:t[0],o=a.lo?a.hi?a.hi:t[t.length-1]:t[1],s=o[e]-r[e],l=s?(n-r[e])/s:0,u=(o[i]-r[i])*l;return r[i]+u}function si(t,e){var n=t._adapter,i=t.options.time,a=i.parser,r=a||i.format,o=e;return"function"==typeof a&&(o=a(o)),H.isFinite(o)||(o="string"==typeof r?n.parse(o,r):n.parse(o)),null!==o?+o:(a||"function"!=typeof r||(o=r(e),H.isFinite(o)||(o=n.parse(o))),o)}function li(t,e){if(H.isNullOrUndef(e))return null;var n=t.options.time,i=si(t,t.getRightValue(e));return null===i?i:(n.round&&(i=+t._adapter.startOf(i,n.round)),i)}function ui(t,e,n,i){var a,r,o,s=ni.length;for(a=ni.indexOf(t);a<s-1;++a)if(o=(r=ei[ni[a]]).steps?r.steps:ti,r.common&&Math.ceil((n-e)/(o*r.size))<=i)return ni[a];return ni[s-1]}function di(t,e,n){var i,a,r=[],o={},s=e.length;for(i=0;i<s;++i)o[a=e[i]]=i,r.push({value:a,major:!1});return 0!==s&&n?function(t,e,n,i){var a,r,o=t._adapter,s=+o.startOf(e[0].value,i),l=e[e.length-1].value;for(a=s;a<=l;a=+o.add(a,1,i))(r=n[a])>=0&&(e[r].major=!0);return e}(t,r,o,n):r}var hi=yn.extend({initialize:function(){this.mergeTicksOptions(),yn.prototype.initialize.call(this)},update:function(){var t=this,e=t.options,n=e.time||(e.time={}),i=t._adapter=new rn._date(e.adapters.date);return Zn("time scale",n.format,"time.format","time.parser"),Zn("time scale",n.min,"time.min","ticks.min"),Zn("time scale",n.max,"time.max","ticks.max"),H.mergeIf(n.displayFormats,i.formats()),yn.prototype.update.apply(t,arguments)},getRightValue:function(t){return t&&void 0!==t.t&&(t=t.t),yn.prototype.getRightValue.call(this,t)},determineDataLimits:function(){var t,e,n,i,a,r,o,s=this,l=s.chart,u=s._adapter,d=s.options,h=d.time.unit||"day",c=ti,f=Qn,g=[],p=[],m=[],v=s._getLabels();for(t=0,n=v.length;t<n;++t)m.push(li(s,v[t]));for(t=0,n=(l.data.datasets||[]).length;t<n;++t)if(l.isDatasetVisible(t))if(a=l.data.datasets[t].data,H.isObject(a[0]))for(p[t]=[],e=0,i=a.length;e<i;++e)r=li(s,a[e]),g.push(r),p[t][e]=r;else p[t]=m.slice(0),o||(g=g.concat(m),o=!0);else p[t]=[];m.length&&(c=Math.min(c,m[0]),f=Math.max(f,m[m.length-1])),g.length&&(g=n>1?function(t){var e,n,i,a={},r=[];for(e=0,n=t.length;e<n;++e)a[i=t[e]]||(a[i]=!0,r.push(i));return r}(g).sort(ii):g.sort(ii),c=Math.min(c,g[0]),f=Math.max(f,g[g.length-1])),c=li(s,ai(d))||c,f=li(s,ri(d))||f,c=c===ti?+u.startOf(Date.now(),h):c,f=f===Qn?+u.endOf(Date.now(),h)+1:f,s.min=Math.min(c,f),s.max=Math.max(c+1,f),s._table=[],s._timestamps={data:g,datasets:p,labels:m}},buildTicks:function(){var t,e,n,i=this,a=i.min,r=i.max,o=i.options,s=o.ticks,l=o.time,u=i._timestamps,d=[],h=i.getLabelCapacity(a),c=s.source,f=o.distribution;for(u="data"===c||"auto"===c&&"series"===f?u.data:"labels"===c?u.labels:function(t,e,n,i){var a,r=t._adapter,o=t.options,s=o.time,l=s.unit||ui(s.minUnit,e,n,i),u=$n([s.stepSize,s.unitStepSize,1]),d="week"===l&&s.isoWeekday,h=e,c=[];if(d&&(h=+r.startOf(h,"isoWeek",d)),h=+r.startOf(h,d?"day":l),r.diff(n,e,l)>1e5*u)throw e+" and "+n+" are too far apart with stepSize of "+u+" "+l;for(a=h;a<n;a=+r.add(a,u,l))c.push(a);return a!==n&&"ticks"!==o.bounds||c.push(a),c}(i,a,r,h),"ticks"===o.bounds&&u.length&&(a=u[0],r=u[u.length-1]),a=li(i,ai(o))||a,r=li(i,ri(o))||r,t=0,e=u.length;t<e;++t)(n=u[t])>=a&&n<=r&&d.push(n);return i.min=a,i.max=r,i._unit=l.unit||(s.autoSkip?ui(l.minUnit,i.min,i.max,h):function(t,e,n,i,a){var r,o;for(r=ni.length-1;r>=ni.indexOf(n);r--)if(o=ni[r],ei[o].common&&t._adapter.diff(a,i,o)>=e-1)return o;return ni[n?ni.indexOf(n):0]}(i,d.length,l.minUnit,i.min,i.max)),i._majorUnit=s.major.enabled&&"year"!==i._unit?function(t){for(var e=ni.indexOf(t)+1,n=ni.length;e<n;++e)if(ei[ni[e]].common)return ni[e]}(i._unit):void 0,i._table=function(t,e,n,i){if("linear"===i||!t.length)return[{time:e,pos:0},{time:n,pos:1}];var a,r,o,s,l,u=[],d=[e];for(a=0,r=t.length;a<r;++a)(s=t[a])>e&&s<n&&d.push(s);for(d.push(n),a=0,r=d.length;a<r;++a)l=d[a+1],o=d[a-1],s=d[a],void 0!==o&&void 0!==l&&Math.round((l+o)/2)===s||u.push({time:s,pos:a/(r-1)});return u}(i._timestamps.data,a,r,f),i._offsets=function(t,e,n,i,a){var r,o,s=0,l=0;return a.offset&&e.length&&(r=oi(t,"time",e[0],"pos"),s=1===e.length?1-r:(oi(t,"time",e[1],"pos")-r)/2,o=oi(t,"time",e[e.length-1],"pos"),l=1===e.length?o:(o-oi(t,"time",e[e.length-2],"pos"))/2),{start:s,end:l,factor:1/(s+1+l)}}(i._table,d,0,0,o),s.reverse&&d.reverse(),di(i,d,i._majorUnit)},getLabelForIndex:function(t,e){var n=this,i=n._adapter,a=n.chart.data,r=n.options.time,o=a.labels&&t<a.labels.length?a.labels[t]:"",s=a.datasets[e].data[t];return H.isObject(s)&&(o=n.getRightValue(s)),r.tooltipFormat?i.format(si(n,o),r.tooltipFormat):"string"==typeof o?o:i.format(si(n,o),r.displayFormats.datetime)},tickFormatFunction:function(t,e,n,i){var a=this._adapter,r=this.options,o=r.time.displayFormats,s=o[this._unit],l=this._majorUnit,u=o[l],d=n[e],h=r.ticks,c=l&&u&&d&&d.major,f=a.format(t,i||(c?u:s)),g=c?h.major:h.minor,p=$n([g.callback,g.userCallback,h.callback,h.userCallback]);return p?p(f,e,n):f},convertTicksToLabels:function(t){var e,n,i=[];for(e=0,n=t.length;e<n;++e)i.push(this.tickFormatFunction(t[e].value,e,t));return i},getPixelForOffset:function(t){var e=this._offsets,n=oi(this._table,"time",t,"pos");return this.getPixelForDecimal((e.start+n)*e.factor)},getPixelForValue:function(t,e,n){var i=null;if(void 0!==e&&void 0!==n&&(i=this._timestamps.datasets[n][e]),null===i&&(i=li(this,t)),null!==i)return this.getPixelForOffset(i)},getPixelForTick:function(t){var e=this.getTicks();return t>=0&&t<e.length?this.getPixelForOffset(e[t].value):null},getValueForPixel:function(t){var e=this._offsets,n=this.getDecimalForPixel(t)/e.factor-e.end,i=oi(this._table,"pos",n,"time");return this._adapter._create(i)},_getLabelSize:function(t){var e=this.options.ticks,n=this.ctx.measureText(t).width,i=H.toRadians(this.isHorizontal()?e.maxRotation:e.minRotation),a=Math.cos(i),r=Math.sin(i),o=Jn(e.fontSize,N.global.defaultFontSize);return{w:n*a+o*r,h:n*r+o*a}},getLabelWidth:function(t){return this._getLabelSize(t).w},getLabelCapacity:function(t){var e=this,n=e.options.time,i=n.displayFormats,a=i[n.unit]||i.millisecond,r=e.tickFormatFunction(t,0,di(e,[t],e._majorUnit),a),o=e._getLabelSize(r),s=Math.floor(e.isHorizontal()?e.width/o.w:e.height/o.h);return e.options.offset&&s--,s>0?s:1}}),ci={position:"bottom",distribution:"linear",bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{autoSkip:!1,source:"auto",major:{enabled:!1}}};hi._defaults=ci;var fi={category:kn,linear:Tn,logarithmic:zn,radialLinear:Xn,time:hi},gi={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};rn._date.override("function"==typeof t?{_id:"moment",formats:function(){return gi},parse:function(e,n){return"string"==typeof e&&"string"==typeof n?e=t(e,n):e instanceof t||(e=t(e)),e.isValid()?e.valueOf():null},format:function(e,n){return t(e).format(n)},add:function(e,n,i){return t(e).add(n,i).valueOf()},diff:function(e,n,i){return t(e).diff(t(n),i)},startOf:function(e,n,i){return e=t(e),"isoWeek"===n?e.isoWeekday(i).valueOf():e.startOf(n).valueOf()},endOf:function(e,n){return t(e).endOf(n).valueOf()},_create:function(e){return t(e)}}:{}),N._set("global",{plugins:{filler:{propagate:!0}}});var pi={dataset:function(t){var e=t.fill,n=t.chart,i=n.getDatasetMeta(e),a=i&&n.isDatasetVisible(e)&&i.dataset._children||[],r=a.length||0;return r?function(t,e){return e<r&&a[e]._view||null}:null},boundary:function(t){var e=t.boundary,n=e?e.x:null,i=e?e.y:null;return H.isArray(e)?function(t,n){return e[n]}:function(t){return{x:null===n?t.x:n,y:null===i?t.y:i}}}};function mi(t,e,n){var i,a=t._model||{},r=a.fill;if(void 0===r&&(r=!!a.backgroundColor),!1===r||null===r)return!1;if(!0===r)return"origin";if(i=parseFloat(r,10),isFinite(i)&&Math.floor(i)===i)return"-"!==r[0]&&"+"!==r[0]||(i=e+i),!(i===e||i<0||i>=n)&&i;switch(r){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return r;default:return!1}}function vi(t){return(t.el._scale||{}).getPointPositionForValue?function(t){var e,n,i,a,r,o=t.el._scale,s=o.options,l=o.chart.data.labels.length,u=t.fill,d=[];if(!l)return null;for(e=s.ticks.reverse?o.max:o.min,n=s.ticks.reverse?o.min:o.max,i=o.getPointPositionForValue(0,e),a=0;a<l;++a)r="start"===u||"end"===u?o.getPointPositionForValue(a,"start"===u?e:n):o.getBasePosition(a),s.gridLines.circular&&(r.cx=i.x,r.cy=i.y,r.angle=o.getIndexAngle(a)-Math.PI/2),d.push(r);return d}(t):function(t){var e,n=t.el._model||{},i=t.el._scale||{},a=t.fill,r=null;if(isFinite(a))return null;if("start"===a?r=void 0===n.scaleBottom?i.bottom:n.scaleBottom:"end"===a?r=void 0===n.scaleTop?i.top:n.scaleTop:void 0!==n.scaleZero?r=n.scaleZero:i.getBasePixel&&(r=i.getBasePixel()),null!=r){if(void 0!==r.x&&void 0!==r.y)return r;if(H.isFinite(r))return{x:(e=i.isHorizontal())?r:null,y:e?null:r}}return null}(t)}function bi(t,e,n){var i,a=t[e].fill,r=[e];if(!n)return a;for(;!1!==a&&-1===r.indexOf(a);){if(!isFinite(a))return a;if(!(i=t[a]))return!1;if(i.visible)return a;r.push(a),a=i.fill}return!1}function xi(t){var e=t.fill,n="dataset";return!1===e?null:(isFinite(e)||(n="boundary"),pi[n](t))}function yi(t){return t&&!t.skip}function _i(t,e,n,i,a){var r,o,s,l;if(i&&a){for(t.moveTo(e[0].x,e[0].y),r=1;r<i;++r)H.canvas.lineTo(t,e[r-1],e[r]);if(void 0===n[0].angle)for(t.lineTo(n[a-1].x,n[a-1].y),r=a-1;r>0;--r)H.canvas.lineTo(t,n[r],n[r-1],!0);else for(o=n[0].cx,s=n[0].cy,l=Math.sqrt(Math.pow(n[0].x-o,2)+Math.pow(n[0].y-s,2)),r=a-1;r>0;--r)t.arc(o,s,l,n[r].angle,n[r-1].angle,!0)}}function ki(t,e,n,i,a,r){var o,s,l,u,d,h,c,f,g=e.length,p=i.spanGaps,m=[],v=[],b=0,x=0;for(t.beginPath(),o=0,s=g;o<s;++o)d=n(u=e[l=o%g]._view,l,i),h=yi(u),c=yi(d),r&&void 0===f&&h&&(s=g+(f=o+1)),h&&c?(b=m.push(u),x=v.push(d)):b&&x&&(p?(h&&m.push(u),c&&v.push(d)):(_i(t,m,v,b,x),b=x=0,m=[],v=[]));_i(t,m,v,b,x),t.closePath(),t.fillStyle=a,t.fill()}var wi={id:"filler",afterDatasetsUpdate:function(t,e){var n,i,a,r,o=(t.data.datasets||[]).length,s=e.propagate,l=[];for(i=0;i<o;++i)r=null,(a=(n=t.getDatasetMeta(i)).dataset)&&a._model&&a instanceof kt.Line&&(r={visible:t.isDatasetVisible(i),fill:mi(a,i,o),chart:t,el:a}),n.$filler=r,l.push(r);for(i=0;i<o;++i)(r=l[i])&&(r.fill=bi(l,i,s),r.boundary=vi(r),r.mapper=xi(r))},beforeDatasetsDraw:function(t){var e,n,i,a,r,o,s,l=t._getSortedVisibleDatasetMetas(),u=t.ctx;for(n=l.length-1;n>=0;--n)(e=l[n].$filler)&&e.visible&&(a=(i=e.el)._view,r=i._children||[],o=e.mapper,s=a.backgroundColor||N.global.defaultColor,o&&s&&r.length&&(H.canvas.clipArea(u,t.chartArea),ki(u,r,o,a,s,i._loop),H.canvas.unclipArea(u)))}},Mi=H.rtl.getRtlAdapter,Si=H.noop,Ci=H.valueOrDefault;function Pi(t,e){return t.usePointStyle&&t.boxWidth>e?e:t.boxWidth}N._set("global",{legend:{display:!0,position:"top",align:"center",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(t,e){var n=e.datasetIndex,i=this.chart,a=i.getDatasetMeta(n);a.hidden=null===a.hidden?!i.data.datasets[n].hidden:null,i.update()},onHover:null,onLeave:null,labels:{boxWidth:40,padding:10,generateLabels:function(t){var e=t.data.datasets,n=t.options.legend||{},i=n.labels&&n.labels.usePointStyle;return t._getSortedDatasetMetas().map((function(n){var a=n.controller.getStyle(i?0:void 0);return{text:e[n.index].label,fillStyle:a.backgroundColor,hidden:!t.isDatasetVisible(n.index),lineCap:a.borderCapStyle,lineDash:a.borderDash,lineDashOffset:a.borderDashOffset,lineJoin:a.borderJoinStyle,lineWidth:a.borderWidth,strokeStyle:a.borderColor,pointStyle:a.pointStyle,rotation:a.rotation,datasetIndex:n.index}}),this)}}},legendCallback:function(t){var e,n,i,a=document.createElement("ul"),r=t.data.datasets;for(a.setAttribute("class",t.id+"-legend"),e=0,n=r.length;e<n;e++)(i=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=r[e].backgroundColor,r[e].label&&i.appendChild(document.createTextNode(r[e].label));return a.outerHTML}});var Ai=K.extend({initialize:function(t){H.extend(this,t),this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1},beforeUpdate:Si,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:Si,beforeSetDimensions:Si,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:Si,beforeBuildLabels:Si,buildLabels:function(){var t=this,e=t.options.labels||{},n=H.callback(e.generateLabels,[t.chart],t)||[];e.filter&&(n=n.filter((function(n){return e.filter(n,t.chart.data)}))),t.options.reverse&&n.reverse(),t.legendItems=n},afterBuildLabels:Si,beforeFit:Si,fit:function(){var t=this,e=t.options,n=e.labels,i=e.display,a=t.ctx,r=H.options._parseFont(n),o=r.size,s=t.legendHitBoxes=[],l=t.minSize,u=t.isHorizontal();if(u?(l.width=t.maxWidth,l.height=i?10:0):(l.width=i?10:0,l.height=t.maxHeight),i){if(a.font=r.string,u){var d=t.lineWidths=[0],h=0;a.textAlign="left",a.textBaseline="middle",H.each(t.legendItems,(function(t,e){var i=Pi(n,o)+o/2+a.measureText(t.text).width;(0===e||d[d.length-1]+i+2*n.padding>l.width)&&(h+=o+n.padding,d[d.length-(e>0?0:1)]=0),s[e]={left:0,top:0,width:i,height:o},d[d.length-1]+=i+n.padding})),l.height+=h}else{var c=n.padding,f=t.columnWidths=[],g=t.columnHeights=[],p=n.padding,m=0,v=0;H.each(t.legendItems,(function(t,e){var i=Pi(n,o)+o/2+a.measureText(t.text).width;e>0&&v+o+2*c>l.height&&(p+=m+n.padding,f.push(m),g.push(v),m=0,v=0),m=Math.max(m,i),v+=o+c,s[e]={left:0,top:0,width:i,height:o}})),p+=m,f.push(m),g.push(v),l.width+=p}t.width=l.width,t.height=l.height}else t.width=l.width=t.height=l.height=0},afterFit:Si,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var t=this,e=t.options,n=e.labels,i=N.global,a=i.defaultColor,r=i.elements.line,o=t.height,s=t.columnHeights,l=t.width,u=t.lineWidths;if(e.display){var d,h=Mi(e.rtl,t.left,t.minSize.width),c=t.ctx,f=Ci(n.fontColor,i.defaultFontColor),g=H.options._parseFont(n),p=g.size;c.textAlign=h.textAlign("left"),c.textBaseline="middle",c.lineWidth=.5,c.strokeStyle=f,c.fillStyle=f,c.font=g.string;var m=Pi(n,p),v=t.legendHitBoxes,b=function(t,i){switch(e.align){case"start":return n.padding;case"end":return t-i;default:return(t-i+n.padding)/2}},x=t.isHorizontal();d=x?{x:t.left+b(l,u[0]),y:t.top+n.padding,line:0}:{x:t.left+n.padding,y:t.top+b(o,s[0]),line:0},H.rtl.overrideTextDirection(t.ctx,e.textDirection);var y=p+n.padding;H.each(t.legendItems,(function(e,i){var f=c.measureText(e.text).width,g=m+p/2+f,_=d.x,k=d.y;h.setWidth(t.minSize.width),x?i>0&&_+g+n.padding>t.left+t.minSize.width&&(k=d.y+=y,d.line++,_=d.x=t.left+b(l,u[d.line])):i>0&&k+y>t.top+t.minSize.height&&(_=d.x=_+t.columnWidths[d.line]+n.padding,d.line++,k=d.y=t.top+b(o,s[d.line]));var w=h.x(_);!function(t,e,i){if(!(isNaN(m)||m<=0)){c.save();var o=Ci(i.lineWidth,r.borderWidth);if(c.fillStyle=Ci(i.fillStyle,a),c.lineCap=Ci(i.lineCap,r.borderCapStyle),c.lineDashOffset=Ci(i.lineDashOffset,r.borderDashOffset),c.lineJoin=Ci(i.lineJoin,r.borderJoinStyle),c.lineWidth=o,c.strokeStyle=Ci(i.strokeStyle,a),c.setLineDash&&c.setLineDash(Ci(i.lineDash,r.borderDash)),n&&n.usePointStyle){var s=m*Math.SQRT2/2,l=h.xPlus(t,m/2),u=e+p/2;H.canvas.drawPoint(c,i.pointStyle,s,l,u,i.rotation)}else c.fillRect(h.leftForLtr(t,m),e,m,p),0!==o&&c.strokeRect(h.leftForLtr(t,m),e,m,p);c.restore()}}(w,k,e),v[i].left=h.leftForLtr(w,v[i].width),v[i].top=k,function(t,e,n,i){var a=p/2,r=h.xPlus(t,m+a),o=e+a;c.fillText(n.text,r,o),n.hidden&&(c.beginPath(),c.lineWidth=2,c.moveTo(r,o),c.lineTo(h.xPlus(r,i),o),c.stroke())}(w,k,e,f),x?d.x+=g+n.padding:d.y+=y})),H.rtl.restoreTextDirection(t.ctx,e.textDirection)}},_getLegendItemAt:function(t,e){var n,i,a,r=this;if(t>=r.left&&t<=r.right&&e>=r.top&&e<=r.bottom)for(a=r.legendHitBoxes,n=0;n<a.length;++n)if(t>=(i=a[n]).left&&t<=i.left+i.width&&e>=i.top&&e<=i.top+i.height)return r.legendItems[n];return null},handleEvent:function(t){var e,n=this,i=n.options,a="mouseup"===t.type?"click":t.type;if("mousemove"===a){if(!i.onHover&&!i.onLeave)return}else{if("click"!==a)return;if(!i.onClick)return}e=n._getLegendItemAt(t.x,t.y),"click"===a?e&&i.onClick&&i.onClick.call(n,t.native,e):(i.onLeave&&e!==n._hoveredItem&&(n._hoveredItem&&i.onLeave.call(n,t.native,n._hoveredItem),n._hoveredItem=e),i.onHover&&e&&i.onHover.call(n,t.native,e))}});function Di(t,e){var n=new Ai({ctx:t.ctx,options:e,chart:t});pe.configure(t,n,e),pe.addBox(t,n),t.legend=n}var Ti={id:"legend",_element:Ai,beforeInit:function(t){var e=t.options.legend;e&&Di(t,e)},beforeUpdate:function(t){var e=t.options.legend,n=t.legend;e?(H.mergeIf(e,N.global.legend),n?(pe.configure(t,n,e),n.options=e):Di(t,e)):n&&(pe.removeBox(t,n),delete t.legend)},afterEvent:function(t,e){var n=t.legend;n&&n.handleEvent(e)}},Ii=H.noop;N._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,padding:10,position:"top",text:"",weight:2e3}});var Fi=K.extend({initialize:function(t){H.extend(this,t),this.legendHitBoxes=[]},beforeUpdate:Ii,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:Ii,beforeSetDimensions:Ii,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:Ii,beforeBuildLabels:Ii,buildLabels:Ii,afterBuildLabels:Ii,beforeFit:Ii,fit:function(){var t,e=this,n=e.options,i=e.minSize={},a=e.isHorizontal();n.display?(t=(H.isArray(n.text)?n.text.length:1)*H.options._parseFont(n).lineHeight+2*n.padding,e.width=i.width=a?e.maxWidth:t,e.height=i.height=a?t:e.maxHeight):e.width=i.width=e.height=i.height=0},afterFit:Ii,isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},draw:function(){var t=this,e=t.ctx,n=t.options;if(n.display){var i,a,r,o=H.options._parseFont(n),s=o.lineHeight,l=s/2+n.padding,u=0,d=t.top,h=t.left,c=t.bottom,f=t.right;e.fillStyle=H.valueOrDefault(n.fontColor,N.global.defaultFontColor),e.font=o.string,t.isHorizontal()?(a=h+(f-h)/2,r=d+l,i=f-h):(a="left"===n.position?h+l:f-l,r=d+(c-d)/2,i=c-d,u=Math.PI*("left"===n.position?-.5:.5)),e.save(),e.translate(a,r),e.rotate(u),e.textAlign="center",e.textBaseline="middle";var g=n.text;if(H.isArray(g))for(var p=0,m=0;m<g.length;++m)e.fillText(g[m],0,p,i),p+=s;else e.fillText(g,0,0,i);e.restore()}}});function Oi(t,e){var n=new Fi({ctx:t.ctx,options:e,chart:t});pe.configure(t,n,e),pe.addBox(t,n),t.titleBlock=n}var Li={},Ri=wi,zi=Ti,Ni={id:"title",_element:Fi,beforeInit:function(t){var e=t.options.title;e&&Oi(t,e)},beforeUpdate:function(t){var e=t.options.title,n=t.titleBlock;e?(H.mergeIf(e,N.global.title),n?(pe.configure(t,n,e),n.options=e):Oi(t,e)):n&&(pe.removeBox(t,n),delete t.titleBlock)}};for(var Bi in Li.filler=Ri,Li.legend=zi,Li.title=Ni,en.helpers=H,function(){function t(t,e,n){var i;return"string"==typeof t?(i=parseInt(t,10),-1!==t.indexOf("%")&&(i=i/100*e.parentNode[n])):i=t,i}function e(t){return null!=t&&"none"!==t}function n(n,i,a){var r=document.defaultView,o=H._getParentNode(n),s=r.getComputedStyle(n)[i],l=r.getComputedStyle(o)[i],u=e(s),d=e(l),h=Number.POSITIVE_INFINITY;return u||d?Math.min(u?t(s,n,a):h,d?t(l,o,a):h):"none"}H.where=function(t,e){if(H.isArray(t)&&Array.prototype.filter)return t.filter(e);var n=[];return H.each(t,(function(t){e(t)&&n.push(t)})),n},H.findIndex=Array.prototype.findIndex?function(t,e,n){return t.findIndex(e,n)}:function(t,e,n){n=void 0===n?t:n;for(var i=0,a=t.length;i<a;++i)if(e.call(n,t[i],i,t))return i;return-1},H.findNextWhere=function(t,e,n){H.isNullOrUndef(n)&&(n=-1);for(var i=n+1;i<t.length;i++){var a=t[i];if(e(a))return a}},H.findPreviousWhere=function(t,e,n){H.isNullOrUndef(n)&&(n=t.length);for(var i=n-1;i>=0;i--){var a=t[i];if(e(a))return a}},H.isNumber=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},H.almostEquals=function(t,e,n){return Math.abs(t-e)<n},H.almostWhole=function(t,e){var n=Math.round(t);return n-e<=t&&n+e>=t},H.max=function(t){return t.reduce((function(t,e){return isNaN(e)?t:Math.max(t,e)}),Number.NEGATIVE_INFINITY)},H.min=function(t){return t.reduce((function(t,e){return isNaN(e)?t:Math.min(t,e)}),Number.POSITIVE_INFINITY)},H.sign=Math.sign?function(t){return Math.sign(t)}:function(t){return 0===(t=+t)||isNaN(t)?t:t>0?1:-1},H.toRadians=function(t){return t*(Math.PI/180)},H.toDegrees=function(t){return t*(180/Math.PI)},H._decimalPlaces=function(t){if(H.isFinite(t)){for(var e=1,n=0;Math.round(t*e)/e!==t;)e*=10,n++;return n}},H.getAngleFromPoint=function(t,e){var n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),r=Math.atan2(i,n);return r<-.5*Math.PI&&(r+=2*Math.PI),{angle:r,distance:a}},H.distanceBetweenPoints=function(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))},H.aliasPixel=function(t){return t%2==0?0:.5},H._alignPixel=function(t,e,n){var i=t.currentDevicePixelRatio,a=n/2;return Math.round((e-a)*i)/i+a},H.splineCurve=function(t,e,n,i){var a=t.skip?e:t,r=e,o=n.skip?e:n,s=Math.sqrt(Math.pow(r.x-a.x,2)+Math.pow(r.y-a.y,2)),l=Math.sqrt(Math.pow(o.x-r.x,2)+Math.pow(o.y-r.y,2)),u=s/(s+l),d=l/(s+l),h=i*(u=isNaN(u)?0:u),c=i*(d=isNaN(d)?0:d);return{previous:{x:r.x-h*(o.x-a.x),y:r.y-h*(o.y-a.y)},next:{x:r.x+c*(o.x-a.x),y:r.y+c*(o.y-a.y)}}},H.EPSILON=Number.EPSILON||1e-14,H.splineCurveMonotone=function(t){var e,n,i,a,r,o,s,l,u,d=(t||[]).map((function(t){return{model:t._model,deltaK:0,mK:0}})),h=d.length;for(e=0;e<h;++e)if(!(i=d[e]).model.skip){if(n=e>0?d[e-1]:null,(a=e<h-1?d[e+1]:null)&&!a.model.skip){var c=a.model.x-i.model.x;i.deltaK=0!==c?(a.model.y-i.model.y)/c:0}!n||n.model.skip?i.mK=i.deltaK:!a||a.model.skip?i.mK=n.deltaK:this.sign(n.deltaK)!==this.sign(i.deltaK)?i.mK=0:i.mK=(n.deltaK+i.deltaK)/2}for(e=0;e<h-1;++e)i=d[e],a=d[e+1],i.model.skip||a.model.skip||(H.almostEquals(i.deltaK,0,this.EPSILON)?i.mK=a.mK=0:(r=i.mK/i.deltaK,o=a.mK/i.deltaK,(l=Math.pow(r,2)+Math.pow(o,2))<=9||(s=3/Math.sqrt(l),i.mK=r*s*i.deltaK,a.mK=o*s*i.deltaK)));for(e=0;e<h;++e)(i=d[e]).model.skip||(n=e>0?d[e-1]:null,a=e<h-1?d[e+1]:null,n&&!n.model.skip&&(u=(i.model.x-n.model.x)/3,i.model.controlPointPreviousX=i.model.x-u,i.model.controlPointPreviousY=i.model.y-u*i.mK),a&&!a.model.skip&&(u=(a.model.x-i.model.x)/3,i.model.controlPointNextX=i.model.x+u,i.model.controlPointNextY=i.model.y+u*i.mK))},H.nextItem=function(t,e,n){return n?e>=t.length-1?t[0]:t[e+1]:e>=t.length-1?t[t.length-1]:t[e+1]},H.previousItem=function(t,e,n){return n?e<=0?t[t.length-1]:t[e-1]:e<=0?t[0]:t[e-1]},H.niceNum=function(t,e){var n=Math.floor(H.log10(t)),i=t/Math.pow(10,n);return(e?i<1.5?1:i<3?2:i<7?5:10:i<=1?1:i<=2?2:i<=5?5:10)*Math.pow(10,n)},H.requestAnimFrame="undefined"==typeof window?function(t){t()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)},H.getRelativePosition=function(t,e){var n,i,a=t.originalEvent||t,r=t.target||t.srcElement,o=r.getBoundingClientRect(),s=a.touches;s&&s.length>0?(n=s[0].clientX,i=s[0].clientY):(n=a.clientX,i=a.clientY);var l=parseFloat(H.getStyle(r,"padding-left")),u=parseFloat(H.getStyle(r,"padding-top")),d=parseFloat(H.getStyle(r,"padding-right")),h=parseFloat(H.getStyle(r,"padding-bottom")),c=o.right-o.left-l-d,f=o.bottom-o.top-u-h;return{x:n=Math.round((n-o.left-l)/c*r.width/e.currentDevicePixelRatio),y:i=Math.round((i-o.top-u)/f*r.height/e.currentDevicePixelRatio)}},H.getConstraintWidth=function(t){return n(t,"max-width","clientWidth")},H.getConstraintHeight=function(t){return n(t,"max-height","clientHeight")},H._calculatePadding=function(t,e,n){return(e=H.getStyle(t,e)).indexOf("%")>-1?n*parseInt(e,10)/100:parseInt(e,10)},H._getParentNode=function(t){var e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e},H.getMaximumWidth=function(t){var e=H._getParentNode(t);if(!e)return t.clientWidth;var n=e.clientWidth,i=n-H._calculatePadding(e,"padding-left",n)-H._calculatePadding(e,"padding-right",n),a=H.getConstraintWidth(t);return isNaN(a)?i:Math.min(i,a)},H.getMaximumHeight=function(t){var e=H._getParentNode(t);if(!e)return t.clientHeight;var n=e.clientHeight,i=n-H._calculatePadding(e,"padding-top",n)-H._calculatePadding(e,"padding-bottom",n),a=H.getConstraintHeight(t);return isNaN(a)?i:Math.min(i,a)},H.getStyle=function(t,e){return t.currentStyle?t.currentStyle[e]:document.defaultView.getComputedStyle(t,null).getPropertyValue(e)},H.retinaScale=function(t,e){var n=t.currentDevicePixelRatio=e||"undefined"!=typeof window&&window.devicePixelRatio||1;if(1!==n){var i=t.canvas,a=t.height,r=t.width;i.height=a*n,i.width=r*n,t.ctx.scale(n,n),i.style.height||i.style.width||(i.style.height=a+"px",i.style.width=r+"px")}},H.fontString=function(t,e,n){return e+" "+t+"px "+n},H.longestText=function(t,e,n,i){var a=(i=i||{}).data=i.data||{},r=i.garbageCollect=i.garbageCollect||[];i.font!==e&&(a=i.data={},r=i.garbageCollect=[],i.font=e),t.font=e;var o,s,l,u,d,h=0,c=n.length;for(o=0;o<c;o++)if(null!=(u=n[o])&&!0!==H.isArray(u))h=H.measureText(t,a,r,h,u);else if(H.isArray(u))for(s=0,l=u.length;s<l;s++)null==(d=u[s])||H.isArray(d)||(h=H.measureText(t,a,r,h,d));var f=r.length/2;if(f>n.length){for(o=0;o<f;o++)delete a[r[o]];r.splice(0,f)}return h},H.measureText=function(t,e,n,i,a){var r=e[a];return r||(r=e[a]=t.measureText(a).width,n.push(a)),r>i&&(i=r),i},H.numberOfLabelLines=function(t){var e=1;return H.each(t,(function(t){H.isArray(t)&&t.length>e&&(e=t.length)})),e},H.color=_?function(t){return t instanceof CanvasGradient&&(t=N.global.defaultColor),_(t)}:function(t){return console.error("Color.js not found!"),t},H.getHoverColor=function(t){return t instanceof CanvasPattern||t instanceof CanvasGradient?t:H.color(t).saturate(.5).darken(.1).rgbString()}}(),en._adapters=rn,en.Animation=$,en.animationService=J,en.controllers=Jt,en.DatasetController=it,en.defaults=N,en.Element=K,en.elements=kt,en.Interaction=re,en.layouts=pe,en.platform=Oe,en.plugins=Le,en.Scale=yn,en.scaleService=Re,en.Ticks=on,en.Tooltip=Ye,en.helpers.each(fi,(function(t,e){en.scaleService.registerScaleType(e,t,t._defaults)})),Li)Li.hasOwnProperty(Bi)&&en.plugins.register(Li[Bi]);en.platform.initialize();var Ei=en;return"undefined"!=typeof window&&(window.Chart=en),en.Chart=en,en.Legend=Li.legend._element,en.Title=Li.title._element,en.pluginService=en.plugins,en.PluginBase=en.Element.extend({}),en.canvasHelpers=en.helpers.canvas,en.layoutService=en.layouts,en.LinearScaleBase=Cn,en.helpers.each(["Bar","Bubble","Doughnut","Line","PolarArea","Radar","Scatter"],(function(t){en[t]=function(e,n){return new en(e,en.helpers.merge(n||{},{type:t.charAt(0).toLowerCase()+t.slice(1)}))}})),Ei}));++ (function() {+ 'use strict';+ window.addEventListener('beforeprint', function() {+ for (var id in Chart.instances) {+ Chart.instances[id].resize();+ }+ }, false);++ var errorBarPlugin = (function () {+ function drawErrorBar(chart, ctx, low, high, y, height, color) {+ ctx.save();+ ctx.lineWidth = 3;+ ctx.strokeStyle = color;+ var area = chart.chartArea;+ ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);+ ctx.clip();+ ctx.beginPath();+ ctx.moveTo(low, y - height);+ ctx.lineTo(low, y + height);+ ctx.moveTo(low, y);+ ctx.lineTo(high, y);+ ctx.moveTo(high, y - height);+ ctx.lineTo(high, y + height);+ ctx.stroke();+ ctx.restore();+ }+ // Avoid sudden jumps in error bars when switching+ // between linear and logarithmic scale+ function conservativeError(vx, mx, now, final, scale) {+ var finalDiff = Math.abs(mx - final);+ var diff = Math.abs(vx - now);+ return (diff > finalDiff) ? vx + scale * finalDiff : now;+ }+ return {+ afterDatasetDraw: function(chart, easingOptions) {+ var ctx = chart.ctx;+ var easing = easingOptions.easingValue;+ chart.data.datasets.forEach(function(d, i) {+ var bars = chart.getDatasetMeta(i).data;+ var axis = chart.scales[chart.options.scales.xAxes[0].id];+ bars.forEach(function(b) {+ var value = axis.getValueForPixel(b._view.x);+ var final = axis.getValueForPixel(b._model.x);+ var errorBar = d.errorBars[b._model.label];+ var low = axis.getPixelForValue(value - errorBar.minus);+ var high = axis.getPixelForValue(value + errorBar.plus);+ var finalLow = axis.getPixelForValue(final - errorBar.minus);+ var finalHigh = axis.getPixelForValue(final + errorBar.plus);+ var l = easing === 1 ? finalLow :+ conservativeError(b._view.x, b._model.x, low,+ finalLow, -1.0);+ var h = easing === 1 ? finalHigh :+ conservativeError(b._view.x, b._model.x,+ high, finalHigh, 1.0);+ drawErrorBar(chart, ctx, l, h, b._view.y, 4, errorBar.color);+ });+ });+ },+ };+ })();++ // Formats the ticks on the X-axis on the scatter plot+ var iterFormatter = function() {+ var denom = 0;+ return function(iters, index, values) {+ if (iters == 0) {+ return '';+ }+ if (index == values.length - 1) {+ return '';+ }+ var power;+ if (iters >= 1e9) {+ denom = 1e9;+ power = '⁹';+ } else if (iters >= 1e6) {+ denom = 1e6;+ power = '⁶';+ } else if (iters >= 1e3) {+ denom = 1e3;+ power = '³';+ } else {+ denom = 1;+ }+ if (denom > 1) {+ var value = (iters / denom).toFixed();+ return String(value) + '×10' + power;+ } else {+ return String(iters);+ }+ };+ };++ var colors = ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"];+ var errorColors = ["#cda220", "#8fb8d8", "#ab2b2b", "#2d872d", "#7420cd"];+++ // Positions tooltips at cursor. Required for overview since the bars may+ // extend past the canvas width.+ Chart.Tooltip.positioners.cursor = function(_elems, position) {+ return position;+ }++ function axisType(logaxis) {+ return logaxis ? 'logarithmic' : 'linear';+ }++ function reportSort(a, b) {+ return a.reportNumber - b.reportNumber;+ }++ // adds groupNumber and group fields to reports;+ // returns list of list of reports, grouped by group+ function groupReports(reports) {++ function reportGroup(report) {+ var parts = report.groups.slice();+ parts.pop();+ return parts.join('/');+ }++ var groups = [];+ reports.forEach(function(report) {+ report.group = reportGroup(report);+ if (groups.length === 0) {+ groups.push([report]);+ } else {+ var prevGroup = groups[groups.length - 1];+ var prevGroupName = prevGroup[0].group;+ if (prevGroupName === report.group) {+ prevGroup.push(report);+ } else {+ groups.push([report]);+ }+ }+ report.groupNumber = groups.length - 1;+ });+ return groups;+ }++ // compares 2 arrays lexicographically+ function lex(aParts, bParts) {+ for(var i = 0; i < aParts.length && i < bParts.length; i++) {+ var x = aParts[i];+ var y = bParts[i];+ if (x < y) {+ return -1;+ }+ if (y < x) {+ return 1;+ }+ }+ return aParts.length - bParts.length;+ }+ function lexicalSort(a, b) {+ return lex(a.groups, b.groups);+ }++ function reverseLexicalSort(a, b) {+ return lex(a.groups.slice().reverse(), b.groups.slice().reverse());+ }++ function durationSort(a, b) {+ return a.reportAnalysis.anMean.estPoint - b.reportAnalysis.anMean.estPoint;+ }+ function reverseDurationSort(a,b) {+ return -durationSort(a,b);+ }++ function timeUnits(secs) {+ if (secs < 0)+ return timeUnits(-secs);+ else if (secs >= 1e9)+ return [1e-9, "Gs"];+ else if (secs >= 1e6)+ return [1e-6, "Ms"];+ else if (secs >= 1)+ return [1, "s"];+ else if (secs >= 1e-3)+ return [1e3, "ms"];+ else if (secs >= 1e-6)+ return [1e6, "\u03bcs"];+ else if (secs >= 1e-9)+ return [1e9, "ns"];+ else if (secs >= 1e-12)+ return [1e12, "ps"];+ return [1, "s"];+ }++ function formatUnit(raw, unit, precision) {+ var v = precision ? raw.toPrecision(precision) : Math.round(raw);+ var label = String(v) + ' ' + unit;+ return label;+ }++ function formatTime(value, precision) {+ var units = timeUnits(value);+ var scale = units[0];+ return formatUnit(value * scale, units[1], precision);+ }++ // pure function that produces the 'data' object of the overview chart+ function overviewData(state, reports) {+ var order = state.order;+ var sorter = order === 'report-index' ? reportSort+ : order === 'lex' ? lexicalSort+ : order === 'colex' ? reverseLexicalSort+ : order === 'duration' ? durationSort+ : order === 'rev-duration' ? reverseDurationSort+ : reportSort;+ var sortedReports = reports.filter(function(report) {+ return !state.hidden[report.groupNumber];+ }).slice().sort(sorter);+ var data = sortedReports.map(function(report) {+ return report.reportAnalysis.anMean.estPoint;+ });+ var labels = sortedReports.map(function(report) {+ return report.groups.join(' / ');+ });+ var upperBound = function(report) {+ var est = report.reportAnalysis.anMean;+ return est.estPoint + est.estError.confIntUDX;+ };+ var errorBars = {};+ sortedReports.forEach(function(report) {+ var est = report.reportAnalysis.anMean;+ errorBars[report.groups.join(' / ')] = {+ minus: est.estError.confIntLDX,+ plus: est.estError.confIntUDX,+ color: errorColors[report.groupNumber % errorColors.length]+ };+ });+ var top = sortedReports.map(upperBound).reduce(function(a, b) {+ return Math.max(a, b);+ }, 0);+ var scale = top;+ if(state.activeReport !== null) {+ reports.forEach(function(report) {+ if(report.reportNumber === state.activeReport) {+ scale = upperBound(report);+ }+ });+ }++ return {+ labels: labels,+ top: top,+ max: scale * 1.1,+ reports: sortedReports,+ datasets: [{+ borderWidth: 1,+ backgroundColor: sortedReports.map(function(report) {+ var active = report.reportNumber === state.activeReport;+ var alpha = active ? 'ff' : 'a0';+ var color = colors[report.groupNumber % colors.length] + alpha;+ if (active) {+ return Chart.helpers.getHoverColor(color);+ } else {+ return color;+ }+ }),+ barThickness: 16,+ barPercentage: 0.8,+ data: data,+ errorBars: errorBars,+ minBarLength: 2,+ }]+ };+ }++ function inside(box, point) {+ return (point.x >= box.left && point.x <= box.right && point.y >= box.top &&+ point.y <= box.bottom);+ }++ function overviewHover(event, elems) {+ var chart = this;+ var xAxis = chart.scales[chart.options.scales.xAxes[0].id];+ var yAxis = chart.scales[chart.options.scales.yAxes[0].id];+ var point = Chart.helpers.getRelativePosition(event, chart);+ var over =+ (inside(xAxis, point) || inside(yAxis, point) || elems.length > 0);+ if (over) {+ chart.canvas.style.cursor = "pointer";+ } else {+ chart.canvas.style.cursor = "default";+ }+ }++ // Re-renders the overview after clicking/sorting+ function renderOverview(state, reports, chart) {+ var data = overviewData(state, reports);+ var xaxis = chart.options.scales.xAxes[0];+ xaxis.ticks.max = data.max;+ chart.config.data.datasets[0].backgroundColor = data.datasets[0].backgroundColor;+ chart.config.data.datasets[0].data = data.datasets[0].data;+ chart.options.scales.xAxes[0].type = axisType(state.logaxis);+ chart.options.legend.display = state.legend;+ chart.data.labels = data.labels;+ chart.update();+ }++ function overviewClick(state, reports) {+ return function(event, elems) {+ var chart = this;+ var xAxis = chart.scales[chart.options.scales.xAxes[0].id];+ var yAxis = chart.scales[chart.options.scales.yAxes[0].id];+ var point = Chart.helpers.getRelativePosition(event, chart);+ var sorted = overviewData(state, reports).reports;++ function activateBar(index) {+ // Trying to activate active bar disables instead+ if (sorted[index].reportNumber === state.activeReport) {+ state.activeReport = null;+ } else {+ state.activeReport = sorted[index].reportNumber;+ }+ }++ if (inside(xAxis, point)) {+ state.activeReport = null;+ state.logaxis = !state.logaxis;+ renderOverview(state, reports, chart);+ } else if (inside(yAxis, point)) {+ var index = yAxis.getValueForPixel(point.y);+ activateBar(index);+ renderOverview(state, reports, chart);+ } else if (elems.length > 0) {+ var elem = elems[0];+ var index = elem._index;+ activateBar(index);+ state.logaxis = false;+ renderOverview(state, reports, chart);+ } else if(inside(chart.chartArea, point)) {+ state.activeReport = null;+ renderOverview(state, reports, chart);+ }+ };+ }++ // listener for sort drop-down+ function overviewSort(state, reports, chart) {+ return function(event) {+ state.order = event.currentTarget.value;+ renderOverview(state, reports, chart);+ };+ }++ // Returns a formatter for the ticks on the X-axis of the overview+ function overviewTick(state) {+ return function(value, index, values) {+ var label = formatTime(value);+ if (state.logaxis) {+ const remain = Math.round(value /+ (Math.pow(10, Math.floor(Chart.helpers.log10(value)))));+ if (index === values.length - 1) {+ // Draw endpoint if we don't span a full order of magnitude+ if (values[index] / values[1] < 10) {+ return label;+ } else {+ return '';+ }+ }+ if (remain === 1) {+ return label;+ }+ return '';+ } else {+ // Don't show the right endpoint+ if (index === values.length - 1) {+ return '';+ }+ return label;+ }+ }+ }++ function mkOverview(reports) {+ var canvas = document.createElement('canvas');++ var state = {+ logaxis: false,+ activeReport: null,+ order: 'index',+ hidden: {},+ legend: false,+ };+++ var data = overviewData(state, reports);+ var chart = new Chart(canvas.getContext('2d'), {+ type: 'horizontalBar',+ data: data,+ plugins: [errorBarPlugin],+ options: {+ onHover: overviewHover,+ onClick: overviewClick(state, reports),+ elements: {+ rectangle: {+ borderWidth: 2,+ },+ },+ scales: {+ yAxes: [{+ ticks: {}+ }],+ xAxes: [{+ display: true,+ type: axisType(state.logaxis),+ ticks: {+ autoSkip: false,+ min: 0,+ max: data.top * 1.1,+ minRotation: 0,+ maxRotation: 0,+ callback: overviewTick(state),+ }+ }]+ },+ responsive: true,+ maintainAspectRatio: false,+ legend: {+ display: state.legend,+ position: 'right',+ onLeave: function(event) {+ chart.canvas.style.cursor = 'default';+ },+ onHover: function(event, item) {+ chart.canvas.style.cursor = 'pointer';+ },+ onClick: function(event, item) {+ // toggle hidden+ state.hidden[item.groupNumber] = !state.hidden[item.groupNumber];+ renderOverview(state, reports, chart);+ },+ labels: {+ boxWidth: 12,+ generateLabels: function() {+ var groups = [];+ var groupNames = [];+ reports.forEach(function(report) {+ var index = groups.indexOf(report.groupNumber);+ if (index === -1) {+ groups.push(report.groupNumber);+ var groupName = report.groups.slice(0,report.groups.length-1).join(' / ');+ groupNames.push(groupName);+ }+ });+ return groups.map(function(groupNumber, index) {+ var color = colors[groupNumber % colors.length];+ return {+ text: groupNames[index],+ fillStyle: color,+ hidden: state.hidden[groupNumber],+ groupNumber: groupNumber,+ };+ });+ },+ },+ },+ tooltips: {+ position: 'cursor',+ callbacks: {+ label: function(item) {+ return formatTime(item.xLabel, 3);+ },+ },+ },+ title: {+ display: false,+ text: 'Chart.js Horizontal Bar Chart'+ }+ }+ });+ document.getElementById('sort-overview')+ .addEventListener('change', overviewSort(state, reports, chart));+ var toggle = document.getElementById('legend-toggle');+ toggle.addEventListener('mouseup', function () {+ state.legend = !state.legend;+ if(state.legend) {+ toggle.classList.add('right');+ } else {+ toggle.classList.remove('right');+ }+ renderOverview(state, reports, chart);+ })+ return canvas;+ }++ function mkKDE(report) {+ var canvas = document.createElement('canvas');+ var mean = report.reportAnalysis.anMean.estPoint;+ var units = timeUnits(mean);+ var scale = units[0];+ var reportKDE = report.reportKDEs[0];+ var data = reportKDE.kdeValues.map(function(time, index) {+ var pdf = reportKDE.kdePDF[index];+ return {+ x: time * scale,+ y: pdf+ };+ });+ var chart = new Chart(canvas.getContext('2d'), {+ type: 'line',+ data: {+ datasets: [{+ label: 'KDE',+ borderColor: colors[0],+ borderWidth: 2,+ backgroundColor: '#00000000',+ data: data,+ hoverBorderWidth: 1,+ pointHitRadius: 8,+ },+ {+ label: 'mean'+ }+ ],+ },+ plugins: [{+ afterDraw: function(chart) {+ var ctx = chart.ctx;+ var area = chart.chartArea;+ var axis = chart.scales[chart.options.scales.xAxes[0].id];+ var value = axis.getPixelForValue(mean * scale);+ ctx.save();+ ctx.strokeStyle = colors[1];+ ctx.lineWidth = 2;+ ctx.beginPath();+ ctx.moveTo(value, area.top);+ ctx.lineTo(value, area.bottom);+ ctx.stroke();+ ctx.restore();+ },+ }],+ options: {+ title: {+ display: true,+ text: report.groups.join(' / ') + ' — time densities',+ },+ elements: {+ point: {+ radius: 0,+ hitRadius: 0+ }+ },+ scales: {+ xAxes: [{+ display: true,+ type: 'linear',+ scaleLabel: {+ display: false,+ labelString: 'Time'+ },+ ticks: {+ min: reportKDE.kdeValues[0] * scale,+ max: reportKDE.kdeValues[reportKDE.kdeValues.length - 1] * scale,+ callback: function(value, index, values) {+ // Don't show endpoints+ if (index === 0 || index === values.length - 1) {+ return '';+ }+ var str = String(value) + ' ' + units[1];+ return str;+ },+ }+ }],+ yAxes: [{+ display: true,+ type: 'linear',+ ticks: {+ min: 0,+ callback: function() {+ return '';+ },+ },+ }]+ },+ responsive: true,+ legend: {+ display: false,+ position: 'right',+ },+ tooltips: {+ mode: 'nearest',+ callbacks: {+ title: function() {+ return '';+ },+ label: function(+ item) {+ return formatUnit(item.xLabel, units[1], 3);+ },+ },+ },+ hover: {+ intersect: false+ },+ }+ });+ return canvas;+ }++ function mkScatter(report) {++ // collect the measured value for a given regression+ function getMeasured(key) {+ var ix = report.reportKeys.indexOf(key);+ return report.reportMeasured.map(function(x) {+ return x[ix];+ });+ }++ var canvas = document.createElement('canvas');+ var times = getMeasured("time");+ var iters = getMeasured("iters");+ var lastIter = iters[iters.length - 1];+ var olsTime = report.reportAnalysis.anRegress[0].regCoeffs.iters;+ var dataPoints = times.map(function(time, i) {+ return {+ x: iters[i],+ y: time+ }+ });+ var formatter = iterFormatter();+ var chart = new Chart(canvas.getContext('2d'), {+ type: 'scatter',+ data: {+ datasets: [{+ data: dataPoints,+ label: 'scatter',+ borderWidth: 2,+ pointHitRadius: 8,+ borderColor: colors[1],+ backgroundColor: '#fff',+ },+ {+ data: [+ {x: 0, y: 0 },+ { x: lastIter, y: olsTime.estPoint * lastIter }+ ],+ label: 'regression',+ type: 'line',+ backgroundColor: "#00000000",+ borderColor: colors[0],+ pointRadius: 0,+ },+ {+ data: [{+ x: 0,+ y: 0+ }, {+ x: lastIter,+ y: (olsTime.estPoint - olsTime.estError.confIntLDX) * lastIter,+ }],+ label: 'lower',+ type: 'line',+ fill: 1,+ borderWidth: 0,+ pointRadius: 0,+ borderColor: '#00000000',+ backgroundColor: colors[0] + '33',+ },+ {+ data: [{+ x: 0,+ y: 0+ }, {+ x: lastIter,+ y: (olsTime.estPoint + olsTime.estError.confIntUDX) * lastIter,+ }],+ label: 'upper',+ type: 'line',+ fill: 1,+ borderWidth: 0,+ borderColor: '#00000000',+ pointRadius: 0,+ backgroundColor: colors[0] + '33',+ },+ ],+ },+ options: {+ title: {+ display: true,+ text: report.groups.join(' / ') + ' — time per iteration',+ },+ scales: {+ yAxes: [{+ display: true,+ type: 'linear',+ scaleLabel: {+ display: false,+ labelString: 'Time'+ },+ ticks: {+ callback: function(value, index, values) {+ return formatTime(value);+ },+ }+ }],+ xAxes: [{+ display: true,+ type: 'linear',+ scaleLabel: {+ display: false,+ labelString: 'Iterations'+ },+ ticks: {+ callback: formatter,+ max: lastIter,+ }+ }],+ },+ legend: {+ display: false,+ },+ tooltips: {+ callbacks: {+ label: function(ttitem, ttdata) {+ var iters = ttitem.xLabel;+ var duration = ttitem.yLabel;+ return formatTime(duration, 3) + ' / ' ++ iters.toLocaleString() + ' iters';+ },+ },+ },+ }+ });+ return canvas;+ }++ // Create an HTML Element with attributes and child nodes+ function elem(tag, props, children) {+ var node = document.createElement(tag);+ if (children) {+ children.forEach(function(child) {+ if (typeof child === 'string') {+ var txt = document.createTextNode(child);+ node.appendChild(txt);+ } else {+ node.appendChild(child);+ }+ });+ }+ Object.assign(node, props);+ return node;+ }++ function bounds(analysis) {+ var mean = analysis.estPoint;+ return {+ low: mean - analysis.estError.confIntLDX,+ mean: mean,+ high: mean + analysis.estError.confIntUDX+ };+ }++ function confidence(level) {+ return String(1 - level) + ' confidence level';+ }++ function mkOutliers(report) {+ var outliers = report.reportAnalysis.anOutlierVar;+ return elem('div', {className: 'outliers'}, [+ elem('p', {}, [+ 'Outlying measurements have ',+ outliers.ovDesc,+ ' (', String((outliers.ovFraction * 100).toPrecision(3)), '%)',+ ' effect on estimated standard deviation.'+ ])+ ]);+ }++ function mkTable(report) {+ var analysis = report.reportAnalysis;+ var timep4 = function(t) {+ return formatTime(t, 3)+ };+ var idformatter = function(t) {+ return t.toPrecision(3)+ };+ var rows = [+ Object.assign({+ label: 'OLS regression',+ formatter: timep4+ },+ bounds(analysis.anRegress[0].regCoeffs.iters)),+ Object.assign({+ label: 'R² goodness-of-fit',+ formatter: idformatter+ },+ bounds(analysis.anRegress[0].regRSquare)),+ Object.assign({+ label: 'Mean execution time',+ formatter: timep4+ },+ bounds(analysis.anMean)),+ Object.assign({+ label: 'Standard deviation',+ formatter: timep4+ },+ bounds(analysis.anStdDev)),+ ];+ return elem('table', {+ className: 'analysis'+ }, [+ elem('thead', {}, [+ elem('tr', {}, [+ elem('th'),+ elem('th', {+ className: 'low',+ title: confidence(analysis.anRegress[0].regCoeffs.iters.estError.confIntCL)+ }, ['lower bound']),+ elem('th', {}, ['estimate']),+ elem('th', {+ className: 'high',+ title: confidence(analysis.anRegress[0].regCoeffs.iters.estError.confIntCL)+ }, ['upper bound']),+ ])+ ]),+ elem('tbody', {}, rows.map(function(row) {+ return elem('tr', {}, [+ elem('td', {}, [row.label]),+ elem('td', {className: 'low'}, [row.formatter(row.low, 4)]),+ elem('td', {}, [row.formatter(row.mean)]),+ elem('td', {className: 'high'}, [row.formatter(row.high, 4)]),+ ]);+ }))+ ]);+ return elt;+ }+ document.addEventListener('DOMContentLoaded', function() {+ var reportData = JSON.parse(document.getElementById('report-data')+ .getAttribute('data-report-json'))+ .map(function(report) {+ report.groups = report.reportName.split('/');+ return report;+ });+ var groups = groupReports(reportData);+ var overview = document.getElementById('overview-chart');+ var overviewLineHeight = 16 * 1.25;+ overview.style.height =+ String(overviewLineHeight * reportData.length + 36) + 'px';+ overview.appendChild(mkOverview(reportData.slice()));+ var reports = document.getElementById('reports');+ reportData.forEach(function(report, i) {+ var id = 'report_' + String(i);+ reports.appendChild(+ elem('div', {id: id, className: 'report-details'}, [+ elem('h1', {}, [elem('a', {href: '#' + id}, [report.groups.join(' / ')])]),+ elem('div', {className: 'kde'}, [mkKDE(report)]),+ elem('div', {className: 'scatter'}, [mkScatter(report)]),+ mkTable(report), mkOutliers(report)+ ]));+ });+ }, false);+})();++ </script>+ <style>+ html,body {+ padding: 0; margin: 0;+ font-family: sans-serif;+}+* {+ -webkit-tap-highlight-color: transparent;+}+div.scatter, div.kde {+ position: relative;+ display: inline-block;+ box-sizing: border-box;+ width: 50%;+ padding: 0 2em;+}+.content, .explanation {+ margin: auto;+ max-width: 1000px;+ padding: 0 20px;+}++#legend-toggle {+ cursor: pointer;+}++.overview-info {+ float:right;+}++.overview-info a {+ display: inline-block;+ margin-left: 10px;+}+.overview-info .info {+ font-size: 120%;+ font-weight: 400;+ vertical-align: middle;+ line-height: 1em;+}+.chevron {+ position:relative;+ color: black;+ display:block;+ transition-property: transform;+ transition-duration: 400ms;+ line-height: 1em;+ font-size: 180%;+}+.chevron.right {+ transform: scale(-1,1);+}+.chevron::before {+ vertical-align: middle;+ content:"\2039";+}++select {+ outline: none;+ border:none;+ background: transparent;+}++footer .content {+ padding: 0;+}++span#explain-interactivity {+ display-block: inline;+ float: right;+ color: #444;+ font-size: 0.7em;+}++@media screen and (max-width: 800px) {+ div.scatter, div.kde {+ width: 100%;+ display: block;+ }+ .report-details .outliers {+ margin: auto;+ }+ .report-details table {+ margin: auto;+ }+}+table.analysis .low, table.analysis .high {+ opacity: 0.5;+}+.report-details {+ margin: 2em 0;+ page-break-inside: avoid;+}+a, a:hover, a:visited, a:active {+ text-decoration: none;+ color: #309ef2;+}+h1.title {+ font-weight: 600;+}+h1 {+ font-weight: 400;+}+#overview-chart {+ width: 100%; /*height is determined by number of rows in JavaScript */+}+footer {+ background: #777777;+ color: #ffffff;+ padding: 20px;+}+footer a, footer a:hover, footer a:visited, footer a:active {+ text-decoration: underline;+ color: #fff;+}++.explanation {+ margin-top: 3em;+}++.explanation h1 {+ font-size: 2.6em;+}++#grokularation.explanation li {+ margin: 1em 0;+}++#controls-explanation.explanation em {+ font-weight: 600;+ font-style: normal;+}++@media print {+ footer {+ background: transparent;+ color: black;+ }+ footer a, footer a:hover, footer a:visited, footer a:active {+ color: #309ef2;+ }+ .no-print {+ display: none;+ }+}++ </style>+ <meta name="viewport" content="width=device-width, initial-scale=1">+</head>+<body>+ <div class="content">+ <h1 class='title'>criterion performance measurements</h1>+ <p class="no-print"><a href="#grokularation">want to understand this report?</a></p>+ <h1 id="overview"><a href="#overview">overview</a></h1>+ <div class="no-print">+ <select id="sort-overview" class="select">+ <option value="report-index">index</option>+ <option value="lex">lexical</option>+ <option value="colex">colexical</option>+ <option value="duration">time ascending</option>+ <option value="rev-duration">time descending</option>+ </select>+ <span class="overview-info">+ <a href="#controls-explanation" class="info" title="click bar/label to zoom; x-axis to toggle logarithmic scale; background to reset">ⓘ</a>+ <a id="legend-toggle" class="chevron button"></a>+ </span>+ </div>+ <aside id="overview-chart"></aside>+ <main id="reports"></main>++ <div id="report-data" data-report-json='[{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":2.7673031436661194e-5,"confIntUDX":2.4498231316294646e-5,"confIntCL":5.0e-2},"estPoint":7.352684045588515e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":1.4363683833451546e-4,"confIntUDX":1.1959645355241744e-4,"confIntCL":5.0e-2},"estPoint":0.9997798608065898},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":6.477227971451382e-4,"confIntUDX":6.952355605235709e-4,"confIntCL":5.0e-2},"estPoint":-1.5513186491827042e-3},"iters":{"estError":{"confIntLDX":4.808464575752763e-5,"confIntUDX":4.5444712975958174e-5,"confIntCL":5.0e-2},"estPoint":7.441753830166231e-3}}}],"anStdDev":{"estError":{"confIntLDX":1.617182604553123e-5,"confIntUDX":2.7852819112811152e-5,"confIntCL":5.0e-2},"estPoint":7.675780512652575e-5},"anOutlierVar":{"ovFraction":2.7755102040816323e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[7.110913212422929e-3,7.1142633655731195e-3,7.117613518723309e-3,7.1209636718735e-3,7.12431382502369e-3,7.127663978173881e-3,7.13101413132407e-3,7.134364284474261e-3,7.137714437624451e-3,7.141064590774641e-3,7.144414743924831e-3,7.147764897075022e-3,7.1511150502252116e-3,7.154465203375402e-3,7.157815356525593e-3,7.161165509675783e-3,7.164515662825973e-3,7.167865815976163e-3,7.171215969126354e-3,7.174566122276543e-3,7.177916275426734e-3,7.181266428576924e-3,7.184616581727114e-3,7.1879667348773045e-3,7.191316888027495e-3,7.1946670411776855e-3,7.198017194327875e-3,7.201367347478066e-3,7.204717500628256e-3,7.208067653778446e-3,7.211417806928636e-3,7.214767960078827e-3,7.218118113229016e-3,7.221468266379207e-3,7.224818419529397e-3,7.228168572679588e-3,7.2315187258297775e-3,7.234868878979968e-3,7.2382190321301585e-3,7.241569185280348e-3,7.244919338430539e-3,7.248269491580729e-3,7.251619644730919e-3,7.254969797881109e-3,7.2583199510313e-3,7.26167010418149e-3,7.26502025733168e-3,7.26837041048187e-3,7.271720563632061e-3,7.2750707167822505e-3,7.278420869932441e-3,7.2817710230826315e-3,7.285121176232821e-3,7.288471329383012e-3,7.291821482533202e-3,7.295171635683393e-3,7.298521788833582e-3,7.301871941983773e-3,7.305222095133963e-3,7.308572248284153e-3,7.3119224014343434e-3,7.315272554584534e-3,7.318622707734724e-3,7.321972860884914e-3,7.325323014035105e-3,7.328673167185295e-3,7.332023320335485e-3,7.335373473485675e-3,7.338723626635866e-3,7.342073779786055e-3,7.345423932936246e-3,7.348774086086436e-3,7.352124239236626e-3,7.3554743923868165e-3,7.358824545537007e-3,7.3621746986871975e-3,7.365524851837387e-3,7.368875004987578e-3,7.372225158137768e-3,7.375575311287958e-3,7.378925464438148e-3,7.382275617588339e-3,7.385625770738528e-3,7.388975923888719e-3,7.392326077038909e-3,7.3956762301891e-3,7.3990263833392895e-3,7.40237653648948e-3,7.4057266896396705e-3,7.40907684278986e-3,7.412426995940051e-3,7.415777149090241e-3,7.419127302240431e-3,7.422477455390621e-3,7.425827608540812e-3,7.429177761691002e-3,7.432527914841192e-3,7.435878067991382e-3,7.439228221141573e-3,7.4425783742917626e-3,7.445928527441953e-3,7.4492786805921436e-3,7.452628833742333e-3,7.455978986892524e-3,7.459329140042714e-3,7.462679293192905e-3,7.466029446343094e-3,7.469379599493285e-3,7.472729752643475e-3,7.476079905793665e-3,7.4794300589438555e-3,7.482780212094046e-3,7.4861303652442365e-3,7.489480518394426e-3,7.492830671544617e-3,7.496180824694807e-3,7.499530977844997e-3,7.502881130995187e-3,7.506231284145378e-3,7.509581437295567e-3,7.512931590445758e-3,7.516281743595948e-3,7.519631896746138e-3,7.5229820498963285e-3,7.526332203046519e-3,7.5296823561967095e-3,7.533032509346899e-3,7.53638266249709e-3],"kdeType":"time","kdePDF":[118.01429634900273,142.81157951846535,192.15076063327294,264.9119529604066,358.13246994513844,466.0784241748318,579.8434768526234,687.8452728114656,777.3205052197104,836.5584858639492,857.2926944762239,836.5327263912449,777.2468165879111,687.6661261960886,579.4359430133301,465.20111922232223,356.3440109338181,261.46259754321534,185.86645295398066,132.01989156739464,100.60152743518923,91.73922295061115,106.00956531440474,144.91142516865304,210.6816454084448,305.4851665714372,430.16642434189174,582.8779255315127,757.977592940801,945.5744927498639,1131.9834249897337,1301.1386335109935,1436.770706585392,1524.9437044177275,1556.4456822550533,1528.5533024108545,1445.8364546890907,1319.8867781206243,1168.0849501401392,1011.7050621524661,873.7414192535591,776.8114504665884,741.3573760985696,784.2013420739121,917.3861603689364,1147.214627243901,1473.4792768117507,1888.9796098169106,2379.4621863881125,2924.0457046504616,3496.056949911888,4064.1245557764128,4593.459917124215,5047.487046609905,5390.207188042955,5589.6741944449805,5622.579417716365,5479.291127685649,5168.078356657122,4717.050682182178,4172.771431590369,3595.4359022323288,3051.546889306065,2605.6970313088423,2313.103792461381,2213.9963681432923,2330.1618520673774,2663.3315370979108,3194.890620555311,3886.6297048387128,4682.704905077032,5513.326766473005,6300.705755342448,6967.347627661859,7446.006629654731,7689.725730951615,7679.776713772189,7429.29702289993,6981.178029873522,6400.176394061361,5760.874346587475,5134.406020771779,4577.265465393758,4124.8103483095665,3790.510619286876,3570.159681454621,3448.862676810305,3408.1313765207706,3430.9286858300857,3503.6875116870588,3615.6216684882606,3756.535387629734,3914.5654382234325,4074.923511345227,4220.04595194685,4330.950559463086,4389.271360348402,4379.421610984287,4290.49849450514,4117.723468001804,3863.307037231868,3536.6377847286935,3153.696137557093,2735.656939209544,2306.7873208547567,1891.9164947390327,1513.8694609325198,1191.2562804764402,936.890058709578,756.928226449529,650.6799671194477,610.9647768387684,624.9506859065879,675.4858066023567,742.9693880643754,807.7193875147334,852.5911470747055,865.3815583820175,840.4511180108798,779.10935732792,688.629979846855,580.171943026891,466.2095811959294,358.18241600293067,264.9300910133163,192.15705225170763,142.81370568010297,118.0151422333616]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":0,"reportName":"Int/IntMap/sorted","reportOutliers":{"highSevere":0,"highMild":0,"lowMild":0,"samplesSeen":31,"lowSevere":0},"reportMeasured":[[6.217200999344641e-3,6.217289000000001e-3,12385108,1,null,null,null,null,null,null,null],[1.2872116999460559e-2,1.287214e-2,25641662,2,null,null,null,null,null,null,null],[2.0542241000839567e-2,2.0542788e-2,40921670,3,null,null,null,null,null,null,null],[2.655011899969395e-2,2.6549957e-2,52887974,4,null,null,null,null,null,null,null],[3.5731844999645546e-2,3.573150900000001e-2,71177493,5,null,null,null,null,null,null,null],[4.380239400052233e-2,4.380199800000001e-2,87253916,6,null,null,null,null,null,null,null],[5.1011092999942775e-2,5.1010658999999986e-2,101613560,7,null,null,null,null,null,null,null],[5.784996999955183e-2,5.784943499999998e-2,115236335,8,null,null,null,null,null,null,null],[6.498449500031711e-2,6.498436899999999e-2,129449176,9,null,null,null,null,null,null,null],[7.455372299955343e-2,7.455297299999997e-2,148510076,10,null,null,null,null,null,null,null],[8.099804999983462e-2,8.099716000000001e-2,161346714,11,null,null,null,null,null,null,null],[8.910338900022907e-2,8.910246399999999e-2,177492396,12,null,null,null,null,null,null,null],[9.576250999998592e-2,9.576151899999996e-2,190757234,13,null,null,null,null,null,null,null],[0.10393232699971122,0.10393172099999992,207032311,14,null,null,null,null,null,null,null],[0.10926871799983928,0.10926744,217660945,15,null,null,null,null,null,null,null],[0.11791101200014964,0.11789877100000001,234876173,16,null,null,null,null,null,null,null],[0.12528242300049897,0.125277211,249564389,17,null,null,null,null,null,null,null],[0.1315712129999156,0.13157116600000007,262090086,18,null,null,null,null,null,null,null],[0.1383157280006344,0.13831417200000007,275522106,19,null,null,null,null,null,null,null],[0.14789397500044288,0.14789226700000002,294601696,20,null,null,null,null,null,null,null],[0.1543316759998561,0.15432983600000005,307425324,21,null,null,null,null,null,null,null],[0.16356243999962317,0.16355443599999986,325812893,22,null,null,null,null,null,null,null],[0.16805485700024292,0.16805287400000002,334761487,23,null,null,null,null,null,null,null],[0.18391187399993214,0.18389842900000009,366349141,25,null,null,null,null,null,null,null],[0.18976665299942397,0.189764539,378011458,26,null,null,null,null,null,null,null],[0.20094363000043813,0.20094126,400275259,27,null,null,null,null,null,null,null],[0.20588823399975809,0.20588032200000006,410124560,28,null,null,null,null,null,null,null],[0.22099266500026715,0.22096891399999974,440212221,30,null,null,null,null,null,null,null],[0.22634645000016462,0.22634404800000008,450877515,31,null,null,null,null,null,null,null],[0.24570820200005983,0.24569896400000024,489444672,33,null,null,null,null,null,null,null],[0.25768690800032346,0.2576787909999996,513306881,35,null,null,null,null,null,null,null],[0.26550675999988016,0.26549695100000026,528883233,36,null,null,null,null,null,null,null],[0.28168039899992436,0.28168020699999996,561106751,38,null,null,null,null,null,null,null],[0.3000370749996364,0.3000333509999997,597666429,40,null,null,null,null,null,null,null],[0.31078128599983756,0.3107652009999997,619068834,42,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":1.0542696540582347e-4,"confIntUDX":1.1349446707542565e-4,"confIntCL":5.0e-2},"estPoint":2.384691264383546e-2},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":1.3233575049420576e-4,"confIntUDX":1.2240659069284732e-4,"confIntCL":5.0e-2},"estPoint":0.9997718982669127},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":2.2532732667691477e-3,"confIntUDX":1.5161923492544769e-3,"confIntCL":5.0e-2},"estPoint":-6.157843511237581e-4},"iters":{"estError":{"confIntLDX":1.8985383309628664e-4,"confIntUDX":1.8548652174593325e-4,"confIntCL":5.0e-2},"estPoint":2.39153277614222e-2}}}],"anStdDev":{"estError":{"confIntLDX":5.615478647105846e-5,"confIntUDX":1.0931308737006733e-4,"confIntCL":5.0e-2},"estPoint":2.3985870005862405e-4},"anOutlierVar":{"ovFraction":4.986149584487534e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[2.3371443158384863e-2,2.3380339600115926e-2,2.3389236041846985e-2,2.3398132483578048e-2,2.340702892530911e-2,2.341592536704017e-2,2.3424821808771232e-2,2.3433718250502295e-2,2.3442614692233354e-2,2.3451511133964417e-2,2.346040757569548e-2,2.346930401742654e-2,2.3478200459157602e-2,2.3487096900888665e-2,2.3495993342619724e-2,2.3504889784350787e-2,2.351378622608185e-2,2.352268266781291e-2,2.353157910954397e-2,2.3540475551275034e-2,2.3549371993006094e-2,2.3558268434737156e-2,2.356716487646822e-2,2.357606131819928e-2,2.358495775993034e-2,2.3593854201661404e-2,2.3602750643392463e-2,2.3611647085123526e-2,2.362054352685459e-2,2.3629439968585648e-2,2.363833641031671e-2,2.3647232852047773e-2,2.3656129293778833e-2,2.3665025735509895e-2,2.3673922177240958e-2,2.3682818618972017e-2,2.369171506070308e-2,2.3700611502434143e-2,2.3709507944165202e-2,2.3718404385896265e-2,2.3727300827627328e-2,2.3736197269358387e-2,2.374509371108945e-2,2.3753990152820512e-2,2.376288659455157e-2,2.3771783036282634e-2,2.3780679478013697e-2,2.3789575919744756e-2,2.379847236147582e-2,2.3807368803206882e-2,2.381626524493794e-2,2.3825161686669004e-2,2.3834058128400067e-2,2.3842954570131126e-2,2.385185101186219e-2,2.386074745359325e-2,2.386964389532431e-2,2.3878540337055373e-2,2.3887436778786436e-2,2.38963332205175e-2,2.3905229662248558e-2,2.391412610397962e-2,2.392302254571068e-2,2.3931918987441743e-2,2.3940815429172806e-2,2.394971187090387e-2,2.3958608312634928e-2,2.396750475436599e-2,2.3976401196097053e-2,2.3985297637828112e-2,2.3994194079559175e-2,2.4003090521290238e-2,2.4011986963021297e-2,2.402088340475236e-2,2.4029779846483423e-2,2.4038676288214482e-2,2.4047572729945545e-2,2.4056469171676607e-2,2.4065365613407667e-2,2.407426205513873e-2,2.4083158496869792e-2,2.409205493860085e-2,2.4100951380331914e-2,2.4109847822062977e-2,2.4118744263794036e-2,2.41276407055251e-2,2.413653714725616e-2,2.414543358898722e-2,2.4154330030718284e-2,2.4163226472449346e-2,2.4172122914180406e-2,2.418101935591147e-2,2.418991579764253e-2,2.419881223937359e-2,2.4207708681104653e-2,2.4216605122835716e-2,2.4225501564566775e-2,2.4234398006297838e-2,2.42432944480289e-2,2.425219088975996e-2,2.4261087331491023e-2,2.4269983773222085e-2,2.4278880214953145e-2,2.4287776656684208e-2,2.429667309841527e-2,2.430556954014633e-2,2.4314465981877392e-2,2.4323362423608455e-2,2.4332258865339514e-2,2.4341155307070577e-2,2.435005174880164e-2,2.43589481905327e-2,2.4367844632263762e-2,2.4376741073994825e-2,2.4385637515725884e-2,2.4394533957456947e-2,2.440343039918801e-2,2.441232684091907e-2,2.442122328265013e-2,2.4430119724381194e-2,2.4439016166112253e-2,2.4447912607843316e-2,2.445680904957438e-2,2.4465705491305438e-2,2.44746019330365e-2,2.4483498374767564e-2,2.4492394816498623e-2,2.4501291258229686e-2],"kdeType":"time","kdePDF":[969.3268907095556,969.7035149475997,970.4551990501163,971.5788203698887,973.0697101554875,974.9216717295551,977.1270045855246,979.6765342831832,982.5596479951954,985.7643355294048,989.2772356256795,993.0836873013857,997.1677859964562,1001.5124442475768,1006.0994566014324,1010.9095684592555,1015.9225485293194,1021.1172645504552,1026.4717619383418,1031.9633449971332,1037.5686603320748,1043.2637820940226,1049.0242986842884,1054.8254005478655,1060.641968684872,1066.448663513818,1072.2200137260818,1077.9305047785447,1083.554666680686,1089.0671607433583,1094.4428649688766,1099.6569577757969,1104.6849997666639,1109.5030132629565,1114.087559348273,1118.4158121783103,1122.4656303342906,1126.2156250149592,1129.6452248810256,1132.734737384782,1135.465406436462,1137.8194662776027,1139.780191450091,1141.3319427676643,1142.4602092141988,1143.151645710245,1143.3941067056578,1143.1766755720387,1142.4896897837286,1141.324761890513,1139.6747962987517,1137.5340018905526,1134.897900522651,1131.7633314580928,1128.128451794407,1123.9927329620102,1119.3569533758568,1114.2231873321757,1108.5947902502799,1102.4763803672042,1095.873817000148,1088.794175498636,1081.245719014775,1073.2378672263028,1064.7811621529986,1055.8872312128738,1046.5687476700082,1036.839388631338,1026.7137907548217,1016.2075038364884,1005.33694244864,994.1193358061831,982.5726760423997,970.7156650796904,958.5676602845599,946.1486190996941,933.4790428489173,920.5799199134742,907.472668479991,894.1790790619275,880.7212569968967,867.1215651222017,853.4025668298644,839.586969700616,825.6975699133234,811.7571976224896,797.7886634913338,783.8147065618766,769.8579436360491,755.9408203334068,742.0855639812977,728.3141384825406,714.6482012936629,701.1090626337417,687.7176470297745,674.4944572895516,661.4595409770977,648.6324594492095,636.0322594943761,623.6774475977357,611.5859668376994,599.7751764017407,588.2618336906837,577.0620789628656,566.1914224519323,555.6647338749659,545.496234231284,535.6994897768194,526.2874080445964,517.272235768688,508.66555855728706,500.47830215030393,492.7207350883447,485.4024726131353,478.53248161453166,472.1190864362607,466.1699753515287,460.6922075206466,455.69222024583786,451.17583634342736,447.1482714605948,443.61414117275075,440.57746770828635,438.0416861598256,436.00965005505424,434.4836361755732,433.465348528817,432.95592139577457]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":1,"reportName":"Int/IntMap/random","reportOutliers":{"highSevere":0,"highMild":0,"lowMild":0,"samplesSeen":18,"lowSevere":0},"reportMeasured":[[2.5541426000017964e-2,2.554147699999998e-2,50879350,1,null,null,null,null,null,null,null],[4.806923999967694e-2,4.806906600000005e-2,95753877,2,null,null,null,null,null,null,null],[7.167264300005627e-2,7.167202199999956e-2,142771087,3,null,null,null,null,null,null,null],[9.762854899963713e-2,9.762766700000025e-2,194475137,4,null,null,null,null,null,null,null],[0.12057168999945134,0.12056434900000035,240176454,5,null,null,null,null,null,null,null],[0.1407935830002316,0.1407865450000001,280458875,6,null,null,null,null,null,null,null],[0.16496227300012833,0.16496033300000068,328601328,7,null,null,null,null,null,null,null],[0.18833427299978212,0.1883161900000001,375157510,8,null,null,null,null,null,null,null],[0.21292828399964492,0.21292578200000012,424148246,9,null,null,null,null,null,null,null],[0.23763062199941487,0.23762774500000017,473354739,10,null,null,null,null,null,null,null],[0.26107708899962745,0.2610681640000001,520059293,11,null,null,null,null,null,null,null],[0.2858837960002347,0.28586835500000074,569473933,12,null,null,null,null,null,null,null],[0.3072580120006023,0.30724835599999967,612050130,13,null,null,null,null,null,null,null],[0.33692351300032897,0.33690281200000083,671143371,14,null,null,null,null,null,null,null],[0.3573156359998393,0.35731314900000033,711767792,15,null,null,null,null,null,null,null],[0.3800062059999618,0.3800015489999993,756963099,16,null,null,null,null,null,null,null],[0.40747259199997643,0.4074561369999987,811675392,17,null,null,null,null,null,null,null],[0.43036303000008047,0.4303513530000007,857272424,18,null,null,null,null,null,null,null],[0.4577799150001738,0.4577572090000004,911886498,19,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":9.279852681798491e-5,"confIntUDX":1.2486348868947367e-4,"confIntCL":5.0e-2},"estPoint":7.604115020994802e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":4.906091292551817e-3,"confIntUDX":3.649340090298714e-3,"confIntCL":5.0e-2},"estPoint":0.9956959306868398},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":2.6865724837684237e-3,"confIntUDX":1.7813090709538108e-3,"confIntCL":5.0e-2},"estPoint":-3.075320241693394e-3},"iters":{"estError":{"confIntLDX":1.5213056849250773e-4,"confIntUDX":2.179650372497368e-4,"confIntCL":5.0e-2},"estPoint":7.859752272345666e-3}}}],"anStdDev":{"estError":{"confIntLDX":1.0005736098852002e-4,"confIntUDX":1.4607896645360828e-4,"confIntCL":5.0e-2},"estPoint":3.0646956799213783e-4},"anOutlierVar":{"ovFraction":0.16765992872329774,"ovDesc":"a moderate","ovEffect":"Moderate"}},"reportKDEs":[{"kdeValues":[6.979644702203207e-3,6.993795983435156e-3,7.007947264667104e-3,7.022098545899053e-3,7.036249827131001e-3,7.050401108362949e-3,7.064552389594898e-3,7.078703670826847e-3,7.0928549520587955e-3,7.107006233290743e-3,7.121157514522692e-3,7.135308795754641e-3,7.149460076986589e-3,7.163611358218538e-3,7.177762639450486e-3,7.191913920682434e-3,7.206065201914383e-3,7.220216483146332e-3,7.23436776437828e-3,7.248519045610228e-3,7.262670326842177e-3,7.276821608074126e-3,7.290972889306074e-3,7.305124170538023e-3,7.319275451769971e-3,7.333426733001919e-3,7.347578014233868e-3,7.361729295465817e-3,7.375880576697765e-3,7.390031857929713e-3,7.404183139161662e-3,7.418334420393611e-3,7.432485701625559e-3,7.446636982857508e-3,7.460788264089456e-3,7.474939545321404e-3,7.489090826553353e-3,7.503242107785302e-3,7.51739338901725e-3,7.531544670249198e-3,7.545695951481147e-3,7.559847232713095e-3,7.573998513945044e-3,7.588149795176993e-3,7.6023010764089405e-3,7.616452357640889e-3,7.630603638872838e-3,7.644754920104787e-3,7.658906201336735e-3,7.673057482568683e-3,7.687208763800632e-3,7.70136004503258e-3,7.715511326264529e-3,7.729662607496478e-3,7.743813888728426e-3,7.757965169960374e-3,7.772116451192323e-3,7.786267732424272e-3,7.80041901365622e-3,7.814570294888168e-3,7.828721576120117e-3,7.842872857352065e-3,7.857024138584013e-3,7.871175419815963e-3,7.88532670104791e-3,7.89947798227986e-3,7.913629263511808e-3,7.927780544743756e-3,7.941931825975706e-3,7.956083107207653e-3,7.970234388439601e-3,7.984385669671551e-3,7.998536950903499e-3,8.012688232135447e-3,8.026839513367396e-3,8.040990794599344e-3,8.055142075831292e-3,8.069293357063242e-3,8.08344463829519e-3,8.097595919527138e-3,8.111747200759087e-3,8.125898481991035e-3,8.140049763222983e-3,8.154201044454933e-3,8.16835232568688e-3,8.182503606918828e-3,8.196654888150778e-3,8.210806169382726e-3,8.224957450614676e-3,8.239108731846623e-3,8.253260013078571e-3,8.26741129431052e-3,8.281562575542469e-3,8.295713856774417e-3,8.309865138006366e-3,8.324016419238314e-3,8.338167700470262e-3,8.352318981702212e-3,8.36647026293416e-3,8.380621544166108e-3,8.394772825398057e-3,8.408924106630005e-3,8.423075387861953e-3,8.437226669093903e-3,8.45137795032585e-3,8.465529231557798e-3,8.479680512789748e-3,8.493831794021696e-3,8.507983075253644e-3,8.522134356485593e-3,8.536285637717541e-3,8.550436918949491e-3,8.564588200181439e-3,8.578739481413387e-3,8.592890762645335e-3,8.607042043877284e-3,8.621193325109232e-3,8.635344606341182e-3,8.64949588757313e-3,8.663647168805078e-3,8.677798450037027e-3,8.691949731268975e-3,8.706101012500923e-3,8.720252293732873e-3,8.73440357496482e-3,8.748554856196768e-3,8.762706137428718e-3,8.776857418660666e-3],"kdeType":"time","kdePDF":[2.7795723032893136,5.600622738918413,12.803541343009115,27.52535688928007,54.245717892452625,97.97269084901994,162.77854840243896,250.1239227261839,357.7751285154487,479.90308579090583,608.178768616745,733.0474335560667,844.6219360579805,933.6032734114207,993.1051401895346,1021.2850369578108,1022.9857767242689,1008.1763008011659,986.9669485148768,963.9476097051984,935.7048137845438,893.2973467550463,827.9592293294309,736.3914188886027,622.9567641278716,498.50587176223365,377.30219919373485,273.7853851094067,200.28130746313514,165.94599937114162,176.5032604783209,233.94538256067221,335.707219920663,473.927986976819,636.484266658851,811.270784192961,993.1255249134109,1189.7852020792357,1421.6369595395943,1712.0027663907226,2070.2339681977764,2475.84104168331,2873.6978998411364,3185.773168224762,3336.1693514789763,3278.8999077702233,3016.2343989945884,2600.096019364657,2116.7534521405396,1661.6084714106578,1313.3889045753835,1115.4242019138953,1068.040393346764,1132.7638712135933,1246.6148618932743,1342.5641663424235,1370.037287677908,1308.5525902302368,1169.725834097552,987.624417693858,802.3974229335422,644.5846660995325,526.414126880675,442.53310070693703,378.00299164921944,318.315856972742,256.17240659738445,192.55946256857746,133.2920994369606,84.29089470359489,48.486442060445654,25.312269828986544,11.978173537282396,5.134803507122528,1.9933598540969082,0.7006509355579221,0.22298653668158575,6.439315907883615e-2,1.7595513704945033e-2,7.908806665181642e-3,1.7594785496209096e-2,6.438793965981933e-2,0.22295311077966698,0.700456853293203,1.9923376402239,5.129918151803871,11.956979022385074,25.228760408252633,48.187430061288765,83.31726880296911,130.40663611943782,184.76842925471055,236.98412172141198,275.15292740296775,289.19610143786826,275.15292741281826,236.98412180603245,184.76842990614935,130.40664065872127,83.31729743579987,48.187593556302616,25.22960550809592,11.960933368319566,5.146667740730532,2.056561432162932,0.9233767918281218,0.9233767918284924,2.056561432162685,5.1466677407312735,11.960933368319504,25.229605508096753,48.18759355630268,83.31729743580114,130.40664065873042,184.76842990625147,236.98412180709252,275.1529274227712,289.1961015224981,275.1529280544073,236.98412626069674,184.76845788755006,130.40679961455365,83.3181139038632,48.191384417073884,25.24551008074994,12.021203455810904,5.352842545004755,2.6927893027822174]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":2,"reportName":"Int/IntMap/revsorted","reportOutliers":{"highSevere":1,"highMild":1,"lowMild":2,"samplesSeen":31,"lowSevere":0},"reportMeasured":[[7.5310030006221496e-3,7.531241000000577e-3,15002629,1,null,null,null,null,null,null,null],[1.5792101000442926e-2,1.579239800000032e-2,31458871,2,null,null,null,null,null,null,null],[2.2902593000253546e-2,2.2902477000000587e-2,45622222,3,null,null,null,null,null,null,null],[3.053714999987278e-2,3.053694100000115e-2,60829969,4,null,null,null,null,null,null,null],[3.641659799995978e-2,3.6416337000000354e-2,72541814,5,null,null,null,null,null,null,null],[4.357454299952224e-2,4.357419599999979e-2,86800135,6,null,null,null,null,null,null,null],[4.990588700002263e-2,4.9905448999998825e-2,99411999,7,null,null,null,null,null,null,null],[5.772824099949503e-2,5.772770399999949e-2,114994010,8,null,null,null,null,null,null,null],[6.455245799952536e-2,6.454544900000059e-2,128587691,9,null,null,null,null,null,null,null],[7.194233400059602e-2,7.194153200000031e-2,143307897,10,null,null,null,null,null,null,null],[8.393108999916876e-2,8.39301790000011e-2,167189101,11,null,null,null,null,null,null,null],[9.109348099991621e-2,9.109265200000038e-2,181456822,12,null,null,null,null,null,null,null],[9.726328600027045e-2,9.725631699999937e-2,193746815,13,null,null,null,null,null,null,null],[0.10526152399961575,0.10525331700000073,209678890,14,null,null,null,null,null,null,null],[0.11368188699998427,0.1136805660000011,226452054,15,null,null,null,null,null,null,null],[0.12165439299951686,0.12165304400000032,242333043,16,null,null,null,null,null,null,null],[0.13188344099944516,0.1318819720000004,262709306,17,null,null,null,null,null,null,null],[0.13716816299984202,0.1371667710000004,273236445,18,null,null,null,null,null,null,null],[0.14272178200008057,0.14271470299999933,284299068,19,null,null,null,null,null,null,null],[0.1465893770000548,0.14658170299999895,292002893,20,null,null,null,null,null,null,null],[0.15938492900022538,0.1593830280000006,317491219,21,null,null,null,null,null,null,null],[0.16804903100000956,0.16804709100000004,334750019,22,null,null,null,null,null,null,null],[0.17630220299997745,0.1763001269999993,351190116,23,null,null,null,null,null,null,null],[0.18966936300057569,0.1896614809999999,377817265,25,null,null,null,null,null,null,null],[0.2243043319995195,0.22429415000000041,446809250,26,null,null,null,null,null,null,null],[0.2129039740002554,0.2128824809999994,424099800,27,null,null,null,null,null,null,null],[0.2171951979998994,0.21719259800000046,432647863,28,null,null,null,null,null,null,null],[0.23364544299965928,0.23364259599999926,465416257,30,null,null,null,null,null,null,null],[0.25729104099991673,0.25727712700000005,512521495,31,null,null,null,null,null,null,null],[0.2514050470008442,0.2513960759999989,500792689,33,null,null,null,null,null,null,null],[0.26684604000001855,0.26684281300000023,531551080,35,null,null,null,null,null,null,null],[0.27907214100014244,0.2790688120000002,555905224,36,null,null,null,null,null,null,null],[0.2965459089991782,0.2965244459999994,590712411,38,null,null,null,null,null,null,null],[0.3030382990000362,0.30302147999999995,603644981,40,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":4.195674442251593e-5,"confIntUDX":7.042809224307514e-5,"confIntCL":5.0e-2},"estPoint":1.7274672713066576e-2},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":1.4227653629372838e-4,"confIntUDX":9.171603223023794e-5,"confIntCL":5.0e-2},"estPoint":0.9998546641366959},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":7.010875088004954e-4,"confIntUDX":7.005196404700031e-4,"confIntCL":5.0e-2},"estPoint":8.778527701891882e-5},"iters":{"estError":{"confIntLDX":8.079879093980322e-5,"confIntUDX":7.620113752610305e-5,"confIntCL":5.0e-2},"estPoint":1.7253165168961873e-2}}}],"anStdDev":{"estError":{"confIntLDX":4.619004871269703e-5,"confIntUDX":6.924535064051809e-5,"confIntCL":5.0e-2},"estPoint":1.3506195745557274e-4},"anOutlierVar":{"ovFraction":4.15879017013232e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[1.699506592778764e-2,1.7000972853250158e-2,1.7006879778712677e-2,1.7012786704175196e-2,1.7018693629637715e-2,1.7024600555100234e-2,1.7030507480562757e-2,1.7036414406025276e-2,1.7042321331487795e-2,1.7048228256950314e-2,1.7054135182412833e-2,1.7060042107875352e-2,1.706594903333787e-2,1.707185595880039e-2,1.707776288426291e-2,1.708366980972543e-2,1.7089576735187947e-2,1.7095483660650466e-2,1.710139058611299e-2,1.7107297511575508e-2,1.7113204437038027e-2,1.7119111362500546e-2,1.7125018287963065e-2,1.7130925213425584e-2,1.7136832138888104e-2,1.7142739064350623e-2,1.714864598981314e-2,1.715455291527566e-2,1.716045984073818e-2,1.7166366766200702e-2,1.717227369166322e-2,1.717818061712574e-2,1.718408754258826e-2,1.718999446805078e-2,1.7195901393513298e-2,1.7201808318975817e-2,1.7207715244438336e-2,1.7213622169900855e-2,1.7219529095363374e-2,1.7225436020825893e-2,1.7231342946288412e-2,1.7237249871750935e-2,1.7243156797213454e-2,1.7249063722675973e-2,1.7254970648138492e-2,1.726087757360101e-2,1.726678449906353e-2,1.727269142452605e-2,1.727859834998857e-2,1.7284505275451088e-2,1.7290412200913607e-2,1.7296319126376126e-2,1.730222605183865e-2,1.7308132977301167e-2,1.7314039902763687e-2,1.7319946828226206e-2,1.7325853753688725e-2,1.7331760679151244e-2,1.7337667604613763e-2,1.7343574530076282e-2,1.73494814555388e-2,1.735538838100132e-2,1.736129530646384e-2,1.736720223192636e-2,1.737310915738888e-2,1.73790160828514e-2,1.738492300831392e-2,1.7390829933776438e-2,1.7396736859238957e-2,1.7402643784701476e-2,1.7408550710163995e-2,1.7414457635626514e-2,1.7420364561089034e-2,1.7426271486551553e-2,1.743217841201407e-2,1.7438085337476594e-2,1.7443992262939113e-2,1.7449899188401632e-2,1.745580611386415e-2,1.746171303932667e-2,1.746761996478919e-2,1.747352689025171e-2,1.7479433815714228e-2,1.7485340741176747e-2,1.7491247666639266e-2,1.7497154592101785e-2,1.7503061517564304e-2,1.7508968443026827e-2,1.7514875368489346e-2,1.7520782293951865e-2,1.7526689219414384e-2,1.7532596144876903e-2,1.7538503070339422e-2,1.754440999580194e-2,1.755031692126446e-2,1.755622384672698e-2,1.75621307721895e-2,1.7568037697652018e-2,1.757394462311454e-2,1.757985154857706e-2,1.758575847403958e-2,1.7591665399502097e-2,1.7597572324964617e-2,1.7603479250427136e-2,1.7609386175889655e-2,1.7615293101352174e-2,1.7621200026814693e-2,1.7627106952277212e-2,1.763301387773973e-2,1.763892080320225e-2,1.7644827728664773e-2,1.7650734654127292e-2,1.765664157958981e-2,1.766254850505233e-2,1.766845543051485e-2,1.7674362355977368e-2,1.7680269281439887e-2,1.7686176206902406e-2,1.7692083132364925e-2,1.7697990057827444e-2,1.7703896983289964e-2,1.7709803908752486e-2,1.7715710834215005e-2,1.7721617759677524e-2,1.7727524685140043e-2,1.7733431610602562e-2,1.773933853606508e-2,1.77452454615276e-2],"kdeType":"time","kdePDF":[903.2314303503553,907.3546793762542,915.5872093668958,927.9012564080563,944.2555895913632,964.5959663915735,988.8556717695703,1016.9560882993056,1048.807238155537,1084.3082353045666,1123.3475880248732,1165.8032980328753,1211.542712847758,1260.4221022068978,1312.285946723254,1366.9659467387323,1424.2797804859406,1484.0296621131074,1546.0007706697277,1609.9596395953456,1675.6526114501344,1742.8044735311173,1811.1173957587903,1880.2702921430148,1949.91872085936,2019.6954254007885,2089.211600647053,2158.0589435678,2225.8125195059015,2292.0344427112364,2356.278335379331,2418.094494429256,2477.035661264138,2532.6632584443346,2584.553930149879,2632.306201945743,2675.5470608932483,2713.938250378404,2747.1820757075534,2775.026526718459,2797.2695421326785,2813.7622664933797,2824.411183277734,2829.179045801061,2828.0845692319012,2821.2008906168144,2808.652847375272,2790.6131663688293,2767.297693563332,2738.959826856815,2705.884340463947,2668.3808072806055,2626.7768352189382,2581.4113343246536,2532.628023689037,2480.769371267062,2426.1711365845226,2369.157657145662,2310.0379855610176,2249.1029475951213,2186.6231531583408,2122.8479544145644,2058.0053092430235,1992.3024757274522,1925.9274353815345,1859.0509204308514,1791.8289043338807,1724.405405205004,1656.9154489502273,1589.4880424952944,1522.2490169545167,1455.3236152081631,1388.8387171903398,1322.9246181782119,1257.7162993816603,1193.3541550159553,1129.9841646905577,1067.7575233502569,1006.829762272096,947.3594130302906,889.5062813486888,833.4294090213098,779.2848094425376,727.2230657851351,677.3868806964883,629.9086628977979,584.9082297238575,542.4906959718971,502.74460901894435,465.7403786147103,431.52903763622834,400.1413579321718,371.5873336501709,345.8560335089558,322.9158136346358,302.7148740190791,285.1821344787435,270.22840021373554,257.7477826397283,247.61933798828258,239.70888410813635,233.87095479905062,229.95085071891262,227.7867462866172,227.2118129454696,228.05632057409306,230.14968068753703,233.3223973459066,237.40789439274795,242.24419080855145,247.67539961959415,253.55302997524288,259.7370767050042,266.09688686730993,272.5117984443193,278.8715523168829,285.0764848234395,291.03751437746104,296.675941568819,301.92308766197834,306.71980117764093,311.0158660624836,314.7693475974766,317.9459134942187,320.5181674620074,322.4650308444052,323.77120474564873,324.4267404939195]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":3,"reportName":"Int/Map/sorted","reportOutliers":{"highSevere":0,"highMild":1,"lowMild":0,"samplesSeen":22,"lowSevere":0},"reportMeasured":[[1.7190916000799916e-2,1.7190850000000424e-2,34244620,1,null,null,null,null,null,null,null],[3.536546100076521e-2,3.5365293000001685e-2,70448014,2,null,null,null,null,null,null,null],[5.1582289000180026e-2,5.1581824999999526e-2,102751330,3,null,null,null,null,null,null,null],[6.899046000035014e-2,6.897691100000003e-2,137427964,4,null,null,null,null,null,null,null],[8.624875599980442e-2,8.624786600000078e-2,171806095,5,null,null,null,null,null,null,null],[0.10438896699997713,0.10438176299999924,207940955,6,null,null,null,null,null,null,null],[0.12082024000028468,0.12081882300000046,240671314,7,null,null,null,null,null,null,null],[0.13798402700012957,0.13798251700000108,274861495,8,null,null,null,null,null,null,null],[0.15351822800039372,0.15351653600000148,305805176,9,null,null,null,null,null,null,null],[0.172660876000009,0.17265884400000076,343936651,10,null,null,null,null,null,null,null],[0.19098327299980156,0.19098118800000208,380434741,11,null,null,null,null,null,null,null],[0.20640635900053894,0.20639385600000182,411156552,12,null,null,null,null,null,null,null],[0.2225307620001331,0.2225179879999999,443276027,13,null,null,null,null,null,null,null],[0.2438478590001978,0.2438456120000012,485740553,14,null,null,null,null,null,null,null],[0.2572937049999382,0.2572906049999979,512523002,15,null,null,null,null,null,null,null],[0.27724424300049577,0.2772311639999998,552263544,16,null,null,null,null,null,null,null],[0.2927910759999577,0.2927874999999993,583232752,17,null,null,null,null,null,null,null],[0.31373627999983,0.3137323649999999,624954921,18,null,null,null,null,null,null,null],[0.3297072500008653,0.32969854899999973,656770042,19,null,null,null,null,null,null,null],[0.3418994690000545,0.3418831410000003,681055397,20,null,null,null,null,null,null,null],[0.36184869699991395,0.36184608900000015,720797430,21,null,null,null,null,null,null,null],[0.3805361780005114,0.38051474400000274,758019888,22,null,null,null,null,null,null,null],[0.3963172769999801,0.3963122739999996,789454030,23,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":2.1347617984970174e-4,"confIntUDX":5.594672966986319e-4,"confIntCL":5.0e-2},"estPoint":3.655746276191305e-2},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":1.9026630733968153e-3,"confIntUDX":2.248655595314175e-3,"confIntCL":5.0e-2},"estPoint":0.9977042076649039},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":9.563660332681363e-3,"confIntUDX":5.720838236242257e-3,"confIntCL":5.0e-2},"estPoint":-3.927389575096699e-3},"iters":{"estError":{"confIntLDX":9.702000493177973e-4,"confIntUDX":1.4477852307179795e-3,"confIntCL":5.0e-2},"estPoint":3.710133781766325e-2}}}],"anStdDev":{"estError":{"confIntLDX":3.6480456791067144e-4,"confIntUDX":4.8486309032258305e-4,"confIntCL":5.0e-2},"estPoint":6.467792559215952e-4},"anOutlierVar":{"ovFraction":5.859375e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[3.566617047516729e-2,3.569160173737097e-2,3.5717032999574655e-2,3.574246426177834e-2,3.576789552398202e-2,3.57933267861857e-2,3.581875804838938e-2,3.5844189310593064e-2,3.5869620572796745e-2,3.589505183500043e-2,3.592048309720411e-2,3.594591435940779e-2,3.597134562161147e-2,3.5996776883815154e-2,3.6022208146018836e-2,3.604763940822252e-2,3.60730706704262e-2,3.609850193262988e-2,3.612393319483356e-2,3.6149364457037245e-2,3.6174795719240926e-2,3.620022698144461e-2,3.622565824364829e-2,3.625108950585197e-2,3.627652076805565e-2,3.6301952030259335e-2,3.632738329246302e-2,3.63528145546667e-2,3.637824581687038e-2,3.640367707907406e-2,3.6429108341277744e-2,3.6454539603481426e-2,3.647997086568511e-2,3.6505402127888796e-2,3.653083339009248e-2,3.655626465229616e-2,3.658169591449984e-2,3.660712717670352e-2,3.6632558438907205e-2,3.665798970111089e-2,3.668342096331457e-2,3.670885222551825e-2,3.673428348772193e-2,3.6759714749925614e-2,3.6785146012129295e-2,3.681057727433298e-2,3.683600853653666e-2,3.686143979874034e-2,3.688687106094402e-2,3.6912302323147704e-2,3.6937733585351386e-2,3.696316484755507e-2,3.698859610975875e-2,3.701402737196243e-2,3.703945863416611e-2,3.7064889896369795e-2,3.7090321158573476e-2,3.711575242077716e-2,3.714118368298084e-2,3.716661494518452e-2,3.71920462073882e-2,3.7217477469591885e-2,3.724290873179557e-2,3.726833999399925e-2,3.729377125620293e-2,3.731920251840661e-2,3.7344633780610294e-2,3.7370065042813976e-2,3.739549630501766e-2,3.742092756722134e-2,3.744635882942502e-2,3.74717900916287e-2,3.7497221353832384e-2,3.7522652616036066e-2,3.754808387823975e-2,3.757351514044343e-2,3.759894640264711e-2,3.762437766485079e-2,3.7649808927054475e-2,3.7675240189258156e-2,3.770067145146184e-2,3.772610271366552e-2,3.77515339758692e-2,3.7776965238072883e-2,3.7802396500276565e-2,3.782782776248025e-2,3.785325902468393e-2,3.787869028688761e-2,3.790412154909129e-2,3.7929552811294974e-2,3.7954984073498656e-2,3.798041533570234e-2,3.800584659790602e-2,3.80312778601097e-2,3.805670912231339e-2,3.808214038451707e-2,3.810757164672075e-2,3.8133002908924435e-2,3.815843417112812e-2,3.81838654333318e-2,3.820929669553548e-2,3.823472795773916e-2,3.8260159219942844e-2,3.8285590482146525e-2,3.831102174435021e-2,3.833645300655389e-2,3.836188426875757e-2,3.838731553096125e-2,3.8412746793164934e-2,3.8438178055368616e-2,3.84636093175723e-2,3.848904057977598e-2,3.851447184197966e-2,3.853990310418334e-2,3.8565334366387025e-2,3.8590765628590706e-2,3.861619689079439e-2,3.864162815299807e-2,3.866705941520175e-2,3.869249067740543e-2,3.8717921939609115e-2,3.87433532018128e-2,3.876878446401648e-2,3.879421572622016e-2,3.881964698842384e-2,3.8845078250627524e-2,3.8870509512831206e-2,3.889594077503489e-2],"kdeType":"time","kdePDF":[361.50598587075854,365.07108082850607,372.15409014823763,382.6614578773666,396.4548291531921,413.35333257870536,433.13647731701764,455.5475551292192,480.2974277678315,507.06857967001116,535.5193245164593,565.2880708517991,595.9975747855894,627.259134422521,658.6767083555798,689.8509664284977,720.3833023028009,749.8798518043664,777.9555668308395,804.2383908019771,828.3735681348674,850.0280978414596,868.8953117620878,884.6995236021503,897.200658832244,906.1987409736823,911.538080200411,913.1109886827475,910.8608362931606,904.7842620338585,894.9323717138965,881.4107808098067,864.3784018030071,844.0449252946383,820.667000699856,794.543181568267,766.007758530481,735.4236555594277,703.1746090899805,669.6568817037196,635.2707806489007,600.4122556155888,565.4648402399026,530.7921791429194,496.7313491697952,463.58714275335853,431.6274361640577,401.0797189937993,372.1288164135175,344.9157948521823,319.5380063682803,296.0501979557201,274.4665894447495,254.7638070193333,236.88454775081607,220.74184282436906,206.22378221732336,193.19856060637414,181.5197027188406,171.03132610744038,161.57330072696823,152.9861683501343,145.1156915739266,137.816912727805,130.95761800294818,124.42112183457995,118.10831078412852,111.93891417365309,105.85199932015972,99.80572079877601,93.77638386595781,87.7569100506667,81.7548161360069,75.78983476401099,69.89131460358166,64.09553987620744,58.44310307710834,52.97645157879804,47.73770957987417,42.7668530719855,38.100288889886244,33.76986131546387,29.8022828906214,26.218961624090618,23.036175926758894,20.26553229991406,17.91462957813148,15.987847584049335,14.487177261494077,13.413013339077684,12.764838774694477,12.541741958294054,12.742722154703738,13.366755171694896,14.412608956360707,15.87841697239886,17.761035007428582,20.055223710368747,22.75271386045115,25.841223314633805,29.30350298204912,33.11649330679133,37.250671997328446,41.66966770541626,46.33020287829015,51.18241226910942,56.17056216522839,61.2341702697997,66.30949874162484,71.33136490352015,76.23518756611239,80.95916389168455,85.44645429694896,89.64724287894381,93.52053963314634,97.03559911409441,100.17284824579292,102.92424301437846,105.29300827326556,107.29275465032045,108.94600878641425,110.28223471164215,111.3354618279852,112.14166563308969,112.7360683519384,113.1505360957034,113.41124597809937,113.53678072934825]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":4,"reportName":"Int/Map/random","reportOutliers":{"highSevere":1,"highMild":1,"lowMild":0,"samplesSeen":16,"lowSevere":0},"reportMeasured":[[3.593531800015626e-2,3.593526200000241e-2,71583526,1,null,null,null,null,null,null,null],[7.46233879999636e-2,7.462270099999913e-2,148648939,2,null,null,null,null,null,null,null],[0.11060378000001947,0.11059710800000033,220321154,3,null,null,null,null,null,null,null],[0.146031473000221,0.14602284500000096,290892649,4,null,null,null,null,null,null,null],[0.17995737199998985,0.17995529299999902,358471285,5,null,null,null,null,null,null,null],[0.2193120470001304,0.21930498899999762,436864482,6,null,null,null,null,null,null,null],[0.25483090699981403,0.2548230740000008,507617841,7,null,null,null,null,null,null,null],[0.2901135530000829,0.29010437200000183,577899954,8,null,null,null,null,null,null,null],[0.32517910299975483,0.3251750989999991,647748810,9,null,null,null,null,null,null,null],[0.36648852199959947,0.36647592199999934,730036353,10,null,null,null,null,null,null,null],[0.39937830500002747,0.3993620789999994,795552153,11,null,null,null,null,null,null,null],[0.4375588879993302,0.43754683299999897,871607183,12,null,null,null,null,null,null,null],[0.4715958309998314,0.47157841499999975,939407261,13,null,null,null,null,null,null,null],[0.5061948460006533,0.5061703309999999,1008327654,14,null,null,null,null,null,null,null],[0.5471116850003455,0.5470777379999987,1089832954,15,null,null,null,null,null,null,null],[0.6180286920007347,0.6180145259999996,1231097607,16,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":6.001059954778218e-5,"confIntUDX":5.964893258324569e-5,"confIntCL":5.0e-2},"estPoint":1.7112117805356066e-2},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":2.6449149465879174e-4,"confIntUDX":1.6003092637850713e-4,"confIntCL":5.0e-2},"estPoint":0.9997492243421494},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":1.0694739224977176e-3,"confIntUDX":1.0027602772205149e-3,"confIntCL":5.0e-2},"estPoint":-1.7352889210684763e-5},"iters":{"estError":{"confIntLDX":1.212230361220222e-4,"confIntUDX":1.2342413863718898e-4,"confIntCL":5.0e-2},"estPoint":1.7100347726272433e-2}}}],"anStdDev":{"estError":{"confIntLDX":2.315984134498294e-5,"confIntUDX":2.7289346932400643e-5,"confIntCL":5.0e-2},"estPoint":1.4683004543950413e-4},"anOutlierVar":{"ovFraction":4.158790170132319e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[1.683523656425201e-2,1.683986938832499e-2,1.684450221239797e-2,1.6849135036470952e-2,1.6853767860543933e-2,1.6858400684616914e-2,1.6863033508689895e-2,1.6867666332762873e-2,1.6872299156835854e-2,1.6876931980908835e-2,1.6881564804981816e-2,1.6886197629054796e-2,1.6890830453127777e-2,1.689546327720076e-2,1.690009610127374e-2,1.690472892534672e-2,1.69093617494197e-2,1.6913994573492682e-2,1.6918627397565663e-2,1.692326022163864e-2,1.692789304571162e-2,1.6932525869784602e-2,1.6937158693857583e-2,1.6941791517930564e-2,1.6946424342003545e-2,1.6951057166076526e-2,1.6955689990149507e-2,1.6960322814222488e-2,1.696495563829547e-2,1.696958846236845e-2,1.697422128644143e-2,1.697885411051441e-2,1.698348693458739e-2,1.698811975866037e-2,1.699275258273335e-2,1.6997385406806332e-2,1.7002018230879313e-2,1.7006651054952294e-2,1.7011283879025275e-2,1.7015916703098256e-2,1.7020549527171237e-2,1.7025182351244218e-2,1.70298151753172e-2,1.703444799939018e-2,1.703908082346316e-2,1.7043713647536138e-2,1.704834647160912e-2,1.70529792956821e-2,1.705761211975508e-2,1.706224494382806e-2,1.7066877767901042e-2,1.7071510591974023e-2,1.7076143416047004e-2,1.7080776240119985e-2,1.7085409064192966e-2,1.7090041888265947e-2,1.7094674712338928e-2,1.709930753641191e-2,1.7103940360484887e-2,1.7108573184557867e-2,1.711320600863085e-2,1.711783883270383e-2,1.712247165677681e-2,1.712710448084979e-2,1.7131737304922772e-2,1.7136370128995753e-2,1.7141002953068734e-2,1.7145635777141715e-2,1.7150268601214696e-2,1.7154901425287677e-2,1.7159534249360654e-2,1.7164167073433635e-2,1.7168799897506616e-2,1.7173432721579597e-2,1.7178065545652578e-2,1.718269836972556e-2,1.718733119379854e-2,1.719196401787152e-2,1.71965968419445e-2,1.7201229666017483e-2,1.7205862490090464e-2,1.7210495314163445e-2,1.7215128138236425e-2,1.7219760962309403e-2,1.7224393786382384e-2,1.7229026610455365e-2,1.7233659434528346e-2,1.7238292258601327e-2,1.7242925082674308e-2,1.724755790674729e-2,1.725219073082027e-2,1.725682355489325e-2,1.726145637896623e-2,1.7266089203039212e-2,1.7270722027112193e-2,1.7275354851185174e-2,1.727998767525815e-2,1.7284620499331133e-2,1.7289253323404113e-2,1.7293886147477094e-2,1.7298518971550075e-2,1.7303151795623056e-2,1.7307784619696037e-2,1.7312417443769018e-2,1.7317050267842e-2,1.732168309191498e-2,1.732631591598796e-2,1.7330948740060942e-2,1.733558156413392e-2,1.73402143882069e-2,1.734484721227988e-2,1.7349480036352862e-2,1.7354112860425843e-2,1.7358745684498824e-2,1.7363378508571805e-2,1.7368011332644786e-2,1.7372644156717767e-2,1.7377276980790748e-2,1.738190980486373e-2,1.738654262893671e-2,1.739117545300969e-2,1.7395808277082668e-2,1.740044110115565e-2,1.740507392522863e-2,1.740970674930161e-2,1.7414339573374592e-2,1.7418972397447573e-2,1.7423605221520554e-2],"kdeType":"time","kdePDF":[1771.4963327638438,1771.6722242793498,1772.0232266406217,1772.5477818322756,1773.2435611217943,1774.1074749532436,1775.1356860477692,1776.323625633653,1777.666012710568,1779.156876235194,1780.7895800988072,1782.5568507518744,1784.4508073162085,1786.4629940119994,1788.5844147150888,1790.8055694493346,1793.1164926098245,1795.5067927051784,1797.965693401217,1800.4820756439267,1803.0445206369432,1805.6413534476847,1808.260687016838,1810.8904663480264,1813.5185126582376,1816.1325672748178,1818.7203350715456,1821.2695272443864,1823.7679032369,1826.2033116358787,1828.5637298694542,1830.8373025525918,1833.0123783384074,1835.0775451479954,1837.0216636663195,1838.8338990070258,1840.5037504646803,1842.0210792887378,1843.3761344294164,1844.559576221393,1845.562497986745,1846.3764455537098,1846.993434702448,1847.4059665630248,1847.6070410040745,1847.5901680630375,1847.3493774803221,1846.8792264101996,1846.174805390547,1845.2317426617228,1844.0462069317716,1842.614908690826,1840.9351001819236,1839.0045741385118,1836.8216614006578,1834.385227522428,1831.694668482039,1828.7499056043719,1825.5513798021057,1822.100045237422,1818.3973625007175,1814.4452913964199,1810.246283418628,1805.803273991295,1801.1196745388406,1796.1993644438219,1791.0466829384525,1785.6664209667376,1780.0638130436046,1774.2445291271124,1768.2146665094224,1761.9807417220936,1755.5496824413574,1748.928819369605,1742.1258780603118,1735.1489706453806,1728.0065874162167,1720.707588203134,1713.261193491751,1705.6769752101945,1697.9648471169678,1690.1350547166292,1682.1981646286688,1674.165053334509,1666.0468952281215,1657.8551498976087,1649.601548567978,1641.2980796394659,1632.956973260884,1624.5906848837215,1616.2118777498886,1607.8334042741546,1599.4682862912518,1591.1296941473695,1582.8309246261035,1574.5853777098741,1566.4065321891756,1558.3079201437386,1550.3031003315687,1542.405630533846,1534.6290389156084,1526.9867944739535,1519.4922766570141,1512.1587442480668,1504.9993036197363,1498.0268764732293,1491.2541671867234,1484.6936299054557,1478.3574355134704,1472.2574386334284,1466.4051448062082,1460.811678006212,1455.4877486512485,1450.443622267574,1445.689088971113,1441.2334339249844,1437.085408931302,1433.2532053117043,1429.744428226335,1426.5660725749535,1423.7245006166424,1421.2254214362088,1419.0738723759023,1417.274202540614,1415.8300584733163,1414.7443720852903,1414.0193509127255,1413.6564707577347]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":5,"reportName":"Int/Map/revsorted","reportOutliers":{"highSevere":0,"highMild":0,"lowMild":0,"samplesSeen":22,"lowSevere":0},"reportMeasured":[[1.69116210008724e-2,1.6911613999997854e-2,33688293,1,null,null,null,null,null,null,null],[3.4749149000163015e-2,3.475050300000149e-2,69223300,2,null,null,null,null,null,null,null],[5.1696651999918686e-2,5.169624600000233e-2,102979173,3,null,null,null,null,null,null,null],[6.890151600055106e-2,6.890215100000319e-2,137253490,4,null,null,null,null,null,null,null],[8.610558299915283e-2,8.610475300000076e-2,171520966,5,null,null,null,null,null,null,null],[0.10173329300050682,0.1017271270000002,202650816,6,null,null,null,null,null,null,null],[0.11909899200054497,0.11909765399999728,237242777,7,null,null,null,null,null,null,null],[0.13569458599977224,0.13568752800000183,270300855,8,null,null,null,null,null,null,null],[0.15208569500009617,0.1520786830000027,302951433,9,null,null,null,null,null,null,null],[0.16982196599929011,0.16982010299999928,338281873,10,null,null,null,null,null,null,null],[0.1900637969993113,0.1900615340000016,378602699,11,null,null,null,null,null,null,null],[0.20726147999994282,0.20725452900000008,412861434,12,null,null,null,null,null,null,null],[0.22177942899998015,0.22176631299999983,441779325,13,null,null,null,null,null,null,null],[0.2387884589998066,0.23877915199999933,475661148,14,null,null,null,null,null,null,null],[0.2544549209997058,0.2544517820000003,506868050,15,null,null,null,null,null,null,null],[0.2765577669997583,0.2765491769999997,550897048,16,null,null,null,null,null,null,null],[0.2891334919995643,0.289118847000001,575946831,17,null,null,null,null,null,null,null],[0.3074710840000989,0.3074613090000007,612475105,18,null,null,null,null,null,null,null],[0.3291522760000589,0.32914252699999835,655663213,19,null,null,null,null,null,null,null],[0.34356909500002075,0.34355150000000023,684381312,20,null,null,null,null,null,null,null],[0.3545696129995122,0.35456524099999953,706294041,21,null,null,null,null,null,null,null],[0.37692146800054616,0.3769113259999983,750818278,22,null,null,null,null,null,null,null],[0.3927749220001715,0.3927503469999998,782397761,23,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":1.251605589017886e-4,"confIntUDX":2.2016691634739807e-4,"confIntCL":5.0e-2},"estPoint":2.0442200089708467e-2},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":8.642031904438907e-4,"confIntUDX":4.3926865995269626e-4,"confIntCL":5.0e-2},"estPoint":0.9994482346210234},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":2.169304343053545e-3,"confIntUDX":1.7339409824313043e-3,"confIntCL":5.0e-2},"estPoint":-3.775721857024442e-4},"iters":{"estError":{"confIntLDX":1.5368303657334326e-4,"confIntUDX":1.7691227575166585e-4,"confIntCL":5.0e-2},"estPoint":2.0470324575330472e-2}}}],"anStdDev":{"estError":{"confIntLDX":1.8955740340971194e-4,"confIntUDX":2.616120267741363e-4,"confIntCL":5.0e-2},"estPoint":3.987887002993838e-4},"anOutlierVar":{"ovFraction":4.535147392290249e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[1.979469576661965e-2,1.981152857606909e-2,1.9828361385518526e-2,1.9845194194967965e-2,1.9862027004417405e-2,1.9878859813866844e-2,1.989569262331628e-2,1.991252543276572e-2,1.992935824221516e-2,1.9946191051664595e-2,1.9963023861114034e-2,1.9979856670563474e-2,1.9996689480012913e-2,2.001352228946235e-2,2.0030355098911788e-2,2.0047187908361228e-2,2.0064020717810663e-2,2.0080853527260103e-2,2.0097686336709542e-2,2.011451914615898e-2,2.0131351955608418e-2,2.0148184765057857e-2,2.0165017574507296e-2,2.0181850383956732e-2,2.019868319340617e-2,2.021551600285561e-2,2.023234881230505e-2,2.0249181621754486e-2,2.0266014431203926e-2,2.0282847240653365e-2,2.0299680050102804e-2,2.031651285955224e-2,2.033334566900168e-2,2.035017847845112e-2,2.0367011287900555e-2,2.0383844097349994e-2,2.0400676906799434e-2,2.0417509716248873e-2,2.043434252569831e-2,2.045117533514775e-2,2.0468008144597188e-2,2.0484840954046624e-2,2.0501673763496063e-2,2.0518506572945502e-2,2.0535339382394942e-2,2.0552172191844378e-2,2.0569005001293817e-2,2.0585837810743256e-2,2.0602670620192692e-2,2.061950342964213e-2,2.063633623909157e-2,2.065316904854101e-2,2.0670001857990446e-2,2.0686834667439886e-2,2.0703667476889325e-2,2.072050028633876e-2,2.07373330957882e-2,2.075416590523764e-2,2.077099871468708e-2,2.0787831524136515e-2,2.0804664333585954e-2,2.0821497143035394e-2,2.083832995248483e-2,2.085516276193427e-2,2.087199557138371e-2,2.0888828380833148e-2,2.0905661190282584e-2,2.0922493999732023e-2,2.0939326809181463e-2,2.09561596186309e-2,2.0972992428080338e-2,2.0989825237529777e-2,2.1006658046979217e-2,2.1023490856428653e-2,2.1040323665878092e-2,2.105715647532753e-2,2.1073989284776967e-2,2.1090822094226407e-2,2.1107654903675846e-2,2.1124487713125285e-2,2.114132052257472e-2,2.115815333202416e-2,2.11749861414736e-2,2.1191818950923036e-2,2.1208651760372475e-2,2.1225484569821915e-2,2.1242317379271354e-2,2.125915018872079e-2,2.127598299817023e-2,2.129281580761967e-2,2.1309648617069105e-2,2.1326481426518544e-2,2.1343314235967983e-2,2.1360147045417423e-2,2.137697985486686e-2,2.1393812664316298e-2,2.1410645473765737e-2,2.1427478283215173e-2,2.1444311092664613e-2,2.1461143902114052e-2,2.147797671156349e-2,2.1494809521012927e-2,2.1511642330462367e-2,2.1528475139911806e-2,2.1545307949361246e-2,2.156214075881068e-2,2.157897356826012e-2,2.159580637770956e-2,2.1612639187158996e-2,2.1629471996608435e-2,2.1646304806057875e-2,2.1663137615507314e-2,2.167997042495675e-2,2.169680323440619e-2,2.171363604385563e-2,2.1730468853305065e-2,2.1747301662754504e-2,2.1764134472203944e-2,2.1780967281653383e-2,2.179780009110282e-2,2.1814632900552258e-2,2.1831465710001698e-2,2.1848298519451137e-2,2.1865131328900573e-2,2.1881964138350012e-2,2.189879694779945e-2,2.1915629757248888e-2,2.1932462566698327e-2],"kdeType":"time","kdePDF":[286.99771067110277,292.0796492599654,302.2044604566415,317.2934902052201,337.2275384488963,361.8456312969229,390.94375587818064,424.2738382135127,461.543268137857,502.41527114623347,546.5103930368041,593.4092997412927,642.6570048799335,693.7685273817812,746.2358597457327,799.536005149814,853.1397308690647,906.5205985700323,959.1637798414479,1010.5741558139466,1060.283236930622,1107.85452207312,1152.8870395006759,1195.0169649231518,1233.9173802985754,1269.2964041739895,1300.8940736720488,1328.478474084553,1351.8416821480805,1370.7961056608908,1385.1717627516168,1394.8149520362028,1399.588628518463,1399.374632075529,1394.0777312786117,1383.6312619548303,1368.0039737225727,1347.2075632245565,1321.304281245758,1290.4139595811776,1254.7198151453279,1214.4724516025428,1169.9915868089715,1121.665178210864,1069.9457861428316,1015.344193378087,958.420474642524,899.7728692167865,840.0249420345177,779.8116151640291,719.7647066169421,660.498624806446,602.5968358188271,546.5996512715952,492.9937839145893,442.20399533100954,394.5870253928258,350.42785716497536,309.938243870244,273.2573151474381,240.45399500381927,211.53090796362045,186.42942460911624,165.03550192011343,147.18600393469515,132.6752385791291,121.26150986039039,112.6735530395431,106.61678599765433,102.77936566576959,100.83807850716066,100.46411503532761,101.32877900177125,103.10916341169657,105.49379140497199,108.18817560276325,110.92020131620777,113.44519405191802,115.55049667740317,117.05936193450641,117.83396542028602,117.77736416342096,116.83426555817073,114.99052741266777,112.27137702789358,108.7384090388458,104.48549116529077,99.63376726863892,94.32599249879046,88.72046186744447,82.98479947920642,77.28986137942509,71.80397321957422,66.68767918812709,62.089126613072004,58.14015750743408,54.95313001879494,52.61845418208961,51.202800913832725,50.74793223120052,51.27010356077667,52.76000310065046,55.18321431616896,58.481210564694486,62.57291001063535,67.35682927206497,72.71387161097356,78.51076761253479,84.60415295453869,90.84522104499868,97.08483212736132,103.17890079052962,108.9938276915869,114.41169609283588,119.33492643997262,123.69007824614044,127.43051151408658,130.53767073685128,133.0208311972353,134.9152450198987,136.27873589788865,137.18690742945665,137.72724036310657,137.99244854752018,138.07353282378315,138.05300925640609,137.99878849914455,137.9591455114767]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":6,"reportName":"Int/HashMap/sorted","reportOutliers":{"highSevere":1,"highMild":1,"lowMild":0,"samplesSeen":20,"lowSevere":0},"reportMeasured":[[2.1916132999649562e-2,2.191631999999899e-2,43657923,1,null,null,null,null,null,null,null],[4.1261475999817776e-2,4.126126399999919e-2,82193002,2,null,null,null,null,null,null,null],[6.526294600007532e-2,6.519380499999983e-2,130003700,3,null,null,null,null,null,null,null],[8.052160600072966e-2,8.052377399999955e-2,160403852,4,null,null,null,null,null,null,null],[9.98642149997977e-2,9.98608090000026e-2,198937162,5,null,null,null,null,null,null,null],[0.12162375400021119,0.12161490800000152,242272408,6,null,null,null,null,null,null,null],[0.14113713200003986,0.14113564000000167,281142556,7,null,null,null,null,null,null,null],[0.16276684700005717,0.16276511199999533,324228343,8,null,null,null,null,null,null,null],[0.18150979000074585,0.18150784000000186,361564154,9,null,null,null,null,null,null,null],[0.20558318099938333,0.20557599400000015,409517631,10,null,null,null,null,null,null,null],[0.22416781700030697,0.22415160699999603,446546221,11,null,null,null,null,null,null,null],[0.24140508100026636,0.2413852669999983,480873919,12,null,null,null,null,null,null,null],[0.2621693299997787,0.2621662979999968,522235400,13,null,null,null,null,null,null,null],[0.2962347900001987,0.29622053599999987,590093079,14,null,null,null,null,null,null,null],[0.30513566099944,0.30512496600000105,607823489,15,null,null,null,null,null,null,null],[0.32493975200031855,0.32493580599999916,647272319,16,null,null,null,null,null,null,null],[0.348437444999945,0.3484234769999972,694079903,17,null,null,null,null,null,null,null],[0.3674023749999833,0.3673688319999968,731861112,18,null,null,null,null,null,null,null],[0.3890681050006606,0.38906355099999956,775014634,19,null,null,null,null,null,null,null],[0.41058566300034727,0.4105682799999997,817876846,20,null,null,null,null,null,null,null],[0.429722861999835,0.4297211989999994,856004866,21,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":8.198226758400831e-5,"confIntUDX":1.7116448711798626e-4,"confIntCL":5.0e-2},"estPoint":2.0335051349294322e-2},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":1.2157622312826133e-3,"confIntUDX":9.855755935979094e-4,"confIntCL":5.0e-2},"estPoint":0.9989464746337062},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":4.01829360108183e-3,"confIntUDX":2.7429742945086783e-3,"confIntCL":5.0e-2},"estPoint":-3.5069676672535536e-4},"iters":{"estError":{"confIntLDX":3.279018466556087e-4,"confIntUDX":4.801403352287306e-4,"confIntCL":5.0e-2},"estPoint":2.0369254905192244e-2}}}],"anStdDev":{"estError":{"confIntLDX":1.504603447961434e-4,"confIntUDX":1.3455344989462853e-4,"confIntCL":5.0e-2},"estPoint":2.632425820649563e-4},"anOutlierVar":{"ovFraction":4.535147392290246e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[1.9967912725744878e-2,1.9977672568984264e-2,1.9987432412223647e-2,1.9997192255463033e-2,2.0006952098702416e-2,2.0016711941941802e-2,2.0026471785181185e-2,2.003623162842057e-2,2.0045991471659953e-2,2.005575131489934e-2,2.0065511158138722e-2,2.0075271001378108e-2,2.008503084461749e-2,2.0094790687856877e-2,2.010455053109626e-2,2.0114310374335646e-2,2.012407021757503e-2,2.0133830060814414e-2,2.0143589904053797e-2,2.0153349747293183e-2,2.0163109590532566e-2,2.0172869433771952e-2,2.0182629277011335e-2,2.019238912025072e-2,2.0202148963490103e-2,2.021190880672949e-2,2.0221668649968872e-2,2.0231428493208258e-2,2.024118833644764e-2,2.0250948179687027e-2,2.026070802292641e-2,2.0270467866165796e-2,2.028022770940518e-2,2.0289987552644564e-2,2.0299747395883947e-2,2.0309507239123333e-2,2.0319267082362716e-2,2.0329026925602102e-2,2.0338786768841485e-2,2.034854661208087e-2,2.0358306455320253e-2,2.036806629855964e-2,2.0377826141799026e-2,2.0387585985038408e-2,2.0397345828277794e-2,2.0407105671517177e-2,2.0416865514756563e-2,2.0426625357995946e-2,2.0436385201235332e-2,2.0446145044474714e-2,2.04559048877141e-2,2.0465664730953483e-2,2.047542457419287e-2,2.0485184417432252e-2,2.0494944260671638e-2,2.050470410391102e-2,2.0514463947150407e-2,2.052422379038979e-2,2.0533983633629176e-2,2.0543743476868558e-2,2.0553503320107944e-2,2.0563263163347327e-2,2.0573023006586713e-2,2.0582782849826096e-2,2.0592542693065482e-2,2.0602302536304865e-2,2.061206237954425e-2,2.0621822222783633e-2,2.063158206602302e-2,2.0641341909262402e-2,2.0651101752501788e-2,2.066086159574117e-2,2.0670621438980557e-2,2.068038128221994e-2,2.0690141125459326e-2,2.069990096869871e-2,2.0709660811938094e-2,2.0719420655177477e-2,2.0729180498416863e-2,2.0738940341656246e-2,2.0748700184895632e-2,2.0758460028135015e-2,2.07682198713744e-2,2.0777979714613783e-2,2.078773955785317e-2,2.0797499401092552e-2,2.0807259244331938e-2,2.0817019087571324e-2,2.0826778930810707e-2,2.0836538774050093e-2,2.0846298617289476e-2,2.0856058460528862e-2,2.0865818303768244e-2,2.087557814700763e-2,2.0885337990247013e-2,2.08950978334864e-2,2.0904857676725782e-2,2.0914617519965168e-2,2.092437736320455e-2,2.0934137206443937e-2,2.094389704968332e-2,2.0953656892922706e-2,2.0963416736162088e-2,2.0973176579401474e-2,2.0982936422640857e-2,2.0992696265880243e-2,2.1002456109119626e-2,2.1012215952359012e-2,2.1021975795598394e-2,2.103173563883778e-2,2.1041495482077163e-2,2.105125532531655e-2,2.1061015168555932e-2,2.1070775011795318e-2,2.10805348550347e-2,2.1090294698274087e-2,2.110005454151347e-2,2.1109814384752856e-2,2.111957422799224e-2,2.1129334071231624e-2,2.1139093914471007e-2,2.1148853757710393e-2,2.1158613600949776e-2,2.1168373444189162e-2,2.1178133287428545e-2,2.118789313066793e-2,2.1197652973907313e-2,2.12074128171467e-2],"kdeType":"time","kdePDF":[872.5945396938032,880.0347005633495,894.8309429505259,916.8167659521034,945.7464550658823,981.2996355541915,1023.086889441229,1070.6561048689782,1123.4992092917603,1181.058954462791,1242.735469415216,1307.8923724998515,1375.862327131711,1445.9520284045666,1517.446708392788,1589.61433613731,1661.7097545741879,1732.9790337320644,1802.6643230172992,1870.0094542852746,1934.2664840830062,1994.7032735820983,2050.612096605257,2101.319149927415,2146.194726688319,2184.6637140387284,2216.2159995395414,2240.416324659411,2256.913112457887,2265.445821477113,2265.8504370144537,2258.062799331502,2242.1195785379155,2218.156828741414,2186.40617964551,2147.188842299612,2100.9077083650614,2048.0379020084847,1989.1161956155495,1924.7297227717106,1855.504414854375,1782.093554028564,1705.1667803563223,1625.3998204806053,1543.4651270564761,1460.023538976385,1375.7169990838368,1291.1623039592112,1206.9458134037798,1123.6190175640825,1041.6948475060728,961.6446190334456,883.8955167807477,808.8285522035933,736.7769605738548,668.0250339323857,602.8074149997905,541.3088979094765,483.66479295945135,429.96191322998624,380.2402309436763,334.49523202472386,292.68097051574733,254.71379302733772,220.4766702219318,189.82404045064936,162.58704274584542,138.57899457469134,117.60095555230264,99.44721243319388,83.91052316194003,70.78696795841778,59.88027224321618,51.00548826960235,43.99194807736143,38.68542830785272,34.94949615483249,32.666034143415416,31.734968660755786,32.07325258594272,33.6131755512899,36.30009599746068,40.08970697332486,44.94496225032898,50.832800349882895,57.720811000922,65.5739907599809,74.3517314453443,84.00517616639713,94.47506279760067,105.69015381928008,117.56632502903344,130.00635471605116,142.90042098197833,156.12727991544497,169.55606351760358,183.04860598515535,196.4621824282588,209.65252722383397,222.47699128970635,234.7976991575719,246.48457749518624,257.418145464335,267.49198198525227,276.6148129861657,284.71219009137775,291.72775798448356,297.6241282636724,302.3833910420879,306.0073008187657,308.5171703067666,309.95349609545406,310.37532535454477,309.85935609094685,308.49874794983543,306.4016093732329,303.689122795791,300.4932743317436,296.9541688282181,293.216934690717,289.4282537179749,285.73258640069065,282.2681990313875,279.16313145362045,276.531269363801,274.4686993675433,273.05052609198003,272.32831749400736]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":7,"reportName":"Int/HashMap/random","reportOutliers":{"highSevere":2,"highMild":0,"lowMild":0,"samplesSeen":20,"lowSevere":0},"reportMeasured":[[2.22767590003059e-2,2.2271850999999288e-2,44376146,1,null,null,null,null,null,null,null],[4.194340499998361e-2,4.194328399999847e-2,83551258,2,null,null,null,null,null,null,null],[6.062047999967035e-2,6.062012299999964e-2,120755884,3,null,null,null,null,null,null,null],[8.087500500005262e-2,8.086553599999746e-2,161102225,4,null,null,null,null,null,null,null],[0.10064001899991126,0.10062834600000059,200473330,5,null,null,null,null,null,null,null],[0.12170766700000968,0.12170648400000061,242440067,6,null,null,null,null,null,null,null],[0.14254838899978495,0.14254695099999992,283953877,7,null,null,null,null,null,null,null],[0.16357909700036544,0.16357726400000416,325846104,8,null,null,null,null,null,null,null],[0.18331975399996736,0.18331249999999955,365169800,9,null,null,null,null,null,null,null],[0.20302739399994607,0.20300530299999764,404426197,10,null,null,null,null,null,null,null],[0.22220905699941795,0.22220049899999594,442635745,11,null,null,null,null,null,null,null],[0.2430346669998471,0.24303193800000145,484120046,12,null,null,null,null,null,null,null],[0.26566770799945516,0.26566467199999977,529204162,13,null,null,null,null,null,null,null],[0.28423458199995366,0.2842209280000034,566189237,14,null,null,null,null,null,null,null],[0.30207220099964616,0.3020568279999978,601721337,15,null,null,null,null,null,null,null],[0.3253867399998853,0.3253767699999983,648162910,16,null,null,null,null,null,null,null],[0.3442265089997818,0.344204677999997,685691439,17,null,null,null,null,null,null,null],[0.36131352199936373,0.36130930600000255,719728469,18,null,null,null,null,null,null,null],[0.38463966400013305,0.384635111999998,766193214,19,null,null,null,null,null,null,null],[0.4014240880005673,0.4014053890000042,799627694,20,null,null,null,null,null,null,null],[0.44318654400012747,0.4431680799999995,882817489,21,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":1.4537442624461897e-3,"confIntUDX":2.6233871295563843e-3,"confIntCL":5.0e-2},"estPoint":2.5066571560804135e-2},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":3.0148889811077106e-2,"confIntUDX":2.716982453801997e-2,"confIntCL":5.0e-2},"estPoint":0.9564440083435568},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":2.5629695839453452e-2,"confIntUDX":1.622053787420327e-2,"confIntCL":5.0e-2},"estPoint":3.3372510350474847e-3},"iters":{"estError":{"confIntLDX":2.2421682853189136e-3,"confIntUDX":2.8975875351205417e-3,"confIntCL":5.0e-2},"estPoint":2.392300415965444e-2}}}],"anStdDev":{"estError":{"confIntLDX":2.0822554758749725e-3,"confIntUDX":1.8387240329736237e-3,"confIntCL":5.0e-2},"estPoint":4.368889121877977e-3},"anOutlierVar":{"ovFraction":0.7221439400415633,"ovDesc":"a severe","ovEffect":"Severe"}},"reportKDEs":[{"kdeValues":[1.9263874025068618e-2,1.9412636440028483e-2,1.9561398854988348e-2,1.971016126994821e-2,1.9858923684908075e-2,2.000768609986794e-2,2.0156448514827806e-2,2.030521092978767e-2,2.0453973344747533e-2,2.0602735759707398e-2,2.0751498174667263e-2,2.090026058962713e-2,2.1049023004586994e-2,2.1197785419546856e-2,2.134654783450672e-2,2.1495310249466586e-2,2.164407266442645e-2,2.1792835079386313e-2,2.194159749434618e-2,2.2090359909306044e-2,2.223912232426591e-2,2.2387884739225775e-2,2.2536647154185636e-2,2.26854095691455e-2,2.2834171984105367e-2,2.2982934399065232e-2,2.3131696814025098e-2,2.328045922898496e-2,2.3429221643944825e-2,2.357798405890469e-2,2.3726746473864555e-2,2.387550888882442e-2,2.4024271303784282e-2,2.4173033718744148e-2,2.4321796133704013e-2,2.4470558548663878e-2,2.4619320963623743e-2,2.4768083378583605e-2,2.491684579354347e-2,2.5065608208503336e-2,2.52143706234632e-2,2.5363133038423066e-2,2.5511895453382928e-2,2.5660657868342793e-2,2.580942028330266e-2,2.5958182698262524e-2,2.610694511322239e-2,2.625570752818225e-2,2.6404469943142116e-2,2.655323235810198e-2,2.6701994773061847e-2,2.6850757188021712e-2,2.6999519602981574e-2,2.714828201794144e-2,2.7297044432901305e-2,2.744580684786117e-2,2.7594569262821035e-2,2.7743331677780897e-2,2.7892094092740762e-2,2.8040856507700627e-2,2.8189618922660493e-2,2.8338381337620358e-2,2.848714375258022e-2,2.8635906167540085e-2,2.878466858249995e-2,2.8933430997459816e-2,2.908219341241968e-2,2.9230955827379543e-2,2.9379718242339408e-2,2.9528480657299273e-2,2.967724307225914e-2,2.9826005487219004e-2,2.9974767902178866e-2,3.012353031713873e-2,3.0272292732098596e-2,3.042105514705846e-2,3.0569817562018327e-2,3.071857997697819e-2,3.0867342391938054e-2,3.101610480689792e-2,3.1164867221857784e-2,3.131362963681765e-2,3.146239205177751e-2,3.161115446673737e-2,3.175991688169724e-2,3.1908679296657104e-2,3.205744171161697e-2,3.2206204126576835e-2,3.23549665415367e-2,3.2503728956496565e-2,3.265249137145643e-2,3.2801253786416296e-2,3.295001620137616e-2,3.309877861633602e-2,3.324754103129589e-2,3.339630344625575e-2,3.354506586121562e-2,3.369382827617548e-2,3.384259069113535e-2,3.399135310609521e-2,3.414011552105507e-2,3.428887793601494e-2,3.44376403509748e-2,3.4586402765934665e-2,3.4735165180894534e-2,3.4883927595854396e-2,3.503269001081426e-2,3.5181452425774126e-2,3.5330214840733995e-2,3.547897725569386e-2,3.562773967065372e-2,3.577650208561359e-2,3.592526450057345e-2,3.607402691553331e-2,3.622278933049318e-2,3.637155174545305e-2,3.65203141604129e-2,3.666907657537277e-2,3.681783899033264e-2,3.69666014052925e-2,3.7115363820252364e-2,3.726412623521223e-2,3.7412888650172095e-2,3.756165106513196e-2,3.7710413480091826e-2,3.7859175895051694e-2,3.800793831001155e-2,3.815670072497142e-2],"kdeType":"time","kdePDF":[97.83839744771048,97.82462227134631,97.79694267019318,97.7551014204561,97.69871585703935,97.62728164468203,97.54017775057075,97.43667257158747,97.31593115861757,97.17702347023618,97.01893357872581,96.84056974284599,96.64077525416646,96.41833995716361,96.17201233772597,95.90051207026617,95.60254291033237,95.27680581746469,94.92201219206484,94.53689711022535,94.12023244178158,93.67083973926486,93.1876027889077,92.66947971931452,92.11551456880525,91.52484821867381,90.89672860660474,90.23052014215666,89.5257122544583,88.7819270109687,87.9989257552231,87.17661472081686,86.315049588367,85.41443896173318,84.47514674927695,83.49769344529902,82.48275631592547,81.43116850253722,80.34391706427346,79.222139989125,78.0671222106023,76.88029067387312,75.66320850156066,74.41756831505937,73.14518477221276,71.84798638652023,70.52800669665251,69.18737485799885,67.82830573020611,66.45308953625859,65.06408116956185,63.66368922580455,62.254364836061505,60.83859037675035,59.41886813065087,57.99770897132801,56.5776211409591,55.16109918884291,53.75061313475747,52.34859791792595,50.957443188638095,49.57948349565135,48.21698891834765,46.87215618834228,45.547100340812136,44.243846931321215,42.964324849351584,41.71035975518083,40.48366816216009,39.285852181917946,38.11839494551874,36.982656709212755,35.87987164910179,34.81114534487564,33.77745294872225,32.77963803164237,31.81841209567537,30.894354737028728,30.007914441766125,29.159409992605955,28.349032462479997,27.576847767855924,26.84279975240221,26.146713769422362,25.488300729572316,24.867161578746583,24.28279216964319,23.734588489433467,23.22185220514002,22.743796487795684,22.299552076190025,21.888173541029797,21.50864571061899,21.159890219716566,20.840772144028602,20.55010668384216,20.286665861583753,20.049185199582766,19.836370346012856,19.646903618861103,19.47945043980862,19.332665632079486,19.205199558599972,19.095704079183673,19.002838307894027,18.92527415420507,18.86170163405955,18.81083393938055,18.7714122570034,18.742210330331304,18.722038759256534,18.709749036002435,18.70423731651284,18.704447928817146,18.70937662142168,18.71807355619753,18.72964605144747,18.743261081822812,18.75814754252676,18.773598285773897,18.788971937784027,18.803694504669114,18.817260775441007,18.829235530025823,18.83925455964266,18.847025506197287,18.852328526482548,18.855016785983484]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":8,"reportName":"Int/HashMap/revsorted","reportOutliers":{"highSevere":0,"highMild":2,"lowMild":0,"samplesSeen":18,"lowSevere":0},"reportMeasured":[[2.794468299998698e-2,2.794587199999654e-2,55669675,1,null,null,null,null,null,null,null],[7.316459699995903e-2,7.316482899999954e-2,145745678,2,null,null,null,null,null,null,null],[0.10409891699964646,0.10409865200000468,207365305,3,null,null,null,null,null,null,null],[9.984500700011267e-2,9.98442300000022e-2,198890201,4,null,null,null,null,null,null,null],[0.12185803800002759,0.12185709900000319,242740081,5,null,null,null,null,null,null,null],[0.1366814399998475,0.1366743669999977,272266985,6,null,null,null,null,null,null,null],[0.14857402100005856,0.14857253099999923,295957179,7,null,null,null,null,null,null,null],[0.19811703499999567,0.19810328199999816,394646214,8,null,null,null,null,null,null,null],[0.1939829370003281,0.19396143199999472,386410636,9,null,null,null,null,null,null,null],[0.22980951399949845,0.2298071140000033,457776439,10,null,null,null,null,null,null,null],[0.24752238800010673,0.24748755099999897,493059603,11,null,null,null,null,null,null,null],[0.2500593150007262,0.25004241299999563,498112930,12,null,null,null,null,null,null,null],[0.31981034799991903,0.3198081899999963,637059914,13,null,null,null,null,null,null,null],[0.3752840639999704,0.3752736129999974,747557200,14,null,null,null,null,null,null,null],[0.31829379800001334,0.3182500149999967,634034753,15,null,null,null,null,null,null,null],[0.44437383500007854,0.44435623700000093,885182194,16,null,null,null,null,null,null,null],[0.4625148180002725,0.46181722899999755,921318254,17,null,null,null,null,null,null,null],[0.4224695140001131,0.42246444999999966,841549643,18,null,null,null,null,null,null,null],[0.43437429099958536,0.4343594039999985,865263548,19,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":3.273948075541962e-4,"confIntUDX":3.311561734108386e-4,"confIntCL":5.0e-2},"estPoint":6.799653267933072e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":4.208388877836944e-2,"confIntUDX":3.545929954228477e-2,"confIntCL":5.0e-2},"estPoint":0.9373087736258467},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":8.185399860915975e-3,"confIntUDX":1.0164662011635944e-2,"confIntCL":5.0e-2},"estPoint":1.7856901310107545e-2},"iters":{"estError":{"confIntLDX":4.0855192217469256e-4,"confIntUDX":5.541358721524673e-4,"confIntCL":5.0e-2},"estPoint":5.63380987932288e-3}}}],"anStdDev":{"estError":{"confIntLDX":1.2097251902340401e-4,"confIntUDX":1.720021043338019e-4,"confIntCL":5.0e-2},"estPoint":9.861316275568532e-4},"anOutlierVar":{"ovFraction":0.7452584292183818,"ovDesc":"a severe","ovEffect":"Severe"}},"reportKDEs":[{"kdeValues":[5.270948137352351e-3,5.3008201699593065e-3,5.330692202566262e-3,5.360564235173218e-3,5.390436267780173e-3,5.420308300387129e-3,5.450180332994084e-3,5.48005236560104e-3,5.5099243982079955e-3,5.539796430814951e-3,5.569668463421907e-3,5.599540496028862e-3,5.629412528635818e-3,5.659284561242773e-3,5.689156593849729e-3,5.719028626456684e-3,5.74890065906364e-3,5.7787726916705955e-3,5.808644724277551e-3,5.838516756884507e-3,5.868388789491462e-3,5.898260822098418e-3,5.928132854705373e-3,5.958004887312329e-3,5.9878769199192845e-3,6.01774895252624e-3,6.047620985133196e-3,6.077493017740151e-3,6.107365050347107e-3,6.137237082954062e-3,6.167109115561018e-3,6.196981148167973e-3,6.226853180774929e-3,6.2567252133818845e-3,6.28659724598884e-3,6.316469278595796e-3,6.346341311202751e-3,6.376213343809707e-3,6.406085376416662e-3,6.435957409023618e-3,6.4658294416305735e-3,6.495701474237529e-3,6.525573506844485e-3,6.55544553945144e-3,6.585317572058396e-3,6.615189604665351e-3,6.645061637272307e-3,6.674933669879262e-3,6.704805702486218e-3,6.7346777350931735e-3,6.764549767700129e-3,6.794421800307085e-3,6.82429383291404e-3,6.854165865520996e-3,6.884037898127951e-3,6.913909930734907e-3,6.9437819633418624e-3,6.973653995948818e-3,7.003526028555774e-3,7.033398061162729e-3,7.063270093769685e-3,7.09314212637664e-3,7.123014158983596e-3,7.152886191590551e-3,7.182758224197507e-3,7.2126302568044625e-3,7.242502289411418e-3,7.272374322018374e-3,7.302246354625329e-3,7.332118387232285e-3,7.36199041983924e-3,7.391862452446196e-3,7.4217344850531514e-3,7.451606517660107e-3,7.4814785502670626e-3,7.511350582874018e-3,7.541222615480974e-3,7.571094648087929e-3,7.600966680694885e-3,7.63083871330184e-3,7.660710745908796e-3,7.6905827785157515e-3,7.720454811122707e-3,7.750326843729663e-3,7.780198876336618e-3,7.810070908943574e-3,7.83994294155053e-3,7.869814974157485e-3,7.89968700676444e-3,7.929559039371396e-3,7.959431071978352e-3,7.989303104585307e-3,8.019175137192263e-3,8.049047169799218e-3,8.078919202406174e-3,8.10879123501313e-3,8.138663267620085e-3,8.16853530022704e-3,8.198407332833996e-3,8.228279365440952e-3,8.258151398047907e-3,8.288023430654863e-3,8.317895463261818e-3,8.347767495868774e-3,8.37763952847573e-3,8.407511561082685e-3,8.43738359368964e-3,8.467255626296596e-3,8.497127658903552e-3,8.526999691510507e-3,8.556871724117463e-3,8.586743756724418e-3,8.616615789331374e-3,8.64648782193833e-3,8.676359854545285e-3,8.70623188715224e-3,8.736103919759196e-3,8.765975952366152e-3,8.795847984973107e-3,8.825720017580063e-3,8.855592050187018e-3,8.885464082793974e-3,8.91533611540093e-3,8.945208148007885e-3,8.97508018061484e-3,9.004952213221796e-3,9.034824245828752e-3,9.064696278435707e-3],"kdeType":"time","kdePDF":[346.12340375180366,346.0596212051218,345.9322138601291,345.74149633725466,345.48793838159776,345.17216225491705,344.7949392825998,344.3571855762806,343.8599569577356,343.30444311448434,342.691961022177,342.02394767328775,341.3019521558619,340.5276271300383,339.70271975377756,338.8290621126398,337.908561211552,336.9431885892701,335.9349696186496,334.8859725578763,333.7982974194666,332.67406472509634,331.5154042151694,330.3244435824628,329.1032972991914,327.8540556064139,326.5787737338508,325.27946141690944,323.95807277601125,322.61649662120544,321.2565472425326,319.87995574369415,318.4883619732995,317.08330710431744,315.6662269083825,314.2384457673188,312.80117145966324,311.3554907551451,309.9023658450143,308.44263163086646,306.97699388919756,305.5060283233966,304.03018050926084,302.5497667344626,301.06497572671714,299.5758712597709,298.08239562074584,296.58437391692814,295.08151919475984,293.57343833867577,292.0596387124979,290.53953550145883,289.0124597085354,287.4776667547284,285.93434562919566,284.3816285318114,282.81860094774675,281.2443120911352,279.65778565273604,278.05803078483433,276.4440532553491,274.8148667023368,273.1695039197073,271.50702810508864,269.82654400129763,268.1272088638676,266.4082431884667,264.66894113386223,262.908680578268,261.1269327494924,259.32327137220204,257.4973812788642,255.64906643444374,253.7782573287373,251.88501769423993,249.96955051168428,248.03220326977984,246.0734724502364,244.0940072137826,242.0946122676322,240.0762498995873,238.04004116875942,235.9872662476139,233.9193639147601,231.83793020250343,229.74471620770345,227.64162507883947,225.53070819642127,223.41416056791064,221.29431546218166,219.1736383121641,217.05471991773575,214.94026898407756,212.83310403362978,210.73614473242776,208.65240267398931,206.58497166603146,204.5370175671426,202.5117677220959,200.51250004579217,198.54253180684208,196.6052081625642,194.7038904976776,192.84194461922505,191.02272886027185,189.24958214470882,187.52581206504115,185.8546830243914,184.2394044930916,182.6831194291893,181.1888929109771,179.75970102826273,178.39842007756044,177.10781610470067,175.89053483654308,174.74909204154744,173.68586435692032,172.70308061791468,171.80281372263997,170.98697306343638,170.25729755349323,169.61534927496245,169.06250777232748,168.59996501225694,168.22872102860012,167.9495802685733,167.7631486535525,167.66983136523197]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":9,"reportName":"ByteString/Map/sorted","reportOutliers":{"highSevere":0,"highMild":0,"lowMild":0,"samplesSeen":32,"lowSevere":0},"reportMeasured":[[5.268668000098842e-3,5.268733000001191e-3,10495678,1,null,null,null,null,null,null,null],[1.088318399979471e-2,1.0883222000003911e-2,21679741,2,null,null,null,null,null,null,null],[1.8716007999501016e-2,1.8715995999997403e-2,37282649,3,null,null,null,null,null,null,null],[2.2553118000359973e-2,2.2553040000005353e-2,44925993,4,null,null,null,null,null,null,null],[2.838538600008178e-2,2.8385294000003114e-2,56543936,5,null,null,null,null,null,null,null],[3.3918402999916e-2,3.391824900000273e-2,67565467,6,null,null,null,null,null,null,null],[4.921759899934841e-2,4.9219360000002155e-2,98045252,7,null,null,null,null,null,null,null],[4.59771499999988e-2,4.5976885999998274e-2,91586282,8,null,null,null,null,null,null,null],[7.413082600032794e-2,7.41301039999982e-2,147667501,9,null,null,null,null,null,null,null],[7.0292215000336e-2,7.029163699999685e-2,140021366,10,null,null,null,null,null,null,null],[8.485722800014628e-2,8.485637899999432e-2,169034324,11,null,null,null,null,null,null,null],[9.985746099937387e-2,9.983587500000368e-2,198914684,12,null,null,null,null,null,null,null],[0.10295746300016617,0.10294534100000163,205089441,13,null,null,null,null,null,null,null],[0.10752186900026572,0.1075213480000059,214182854,14,null,null,null,null,null,null,null],[0.11492188699958206,0.11492063499999716,228922327,15,null,null,null,null,null,null,null],[0.1188515150006424,0.11885024999999416,236749779,16,null,null,null,null,null,null,null],[0.12236560000019381,0.12236445100000282,243750362,17,null,null,null,null,null,null,null],[0.1291521240000293,0.12915301000000312,257273098,18,null,null,null,null,null,null,null],[0.13736583500030974,0.13736501300000015,273631185,19,null,null,null,null,null,null,null],[0.1749710120002419,0.17494040400000443,348538762,20,null,null,null,null,null,null,null],[0.14640440499988472,0.14640285999999492,291634679,21,null,null,null,null,null,null,null],[0.1576957669994954,0.1576856719999995,314126629,22,null,null,null,null,null,null,null],[0.1521126509996975,0.1521033309999993,303005727,23,null,null,null,null,null,null,null],[0.19041092000043136,0.19040863700000443,379294179,25,null,null,null,null,null,null,null],[0.1583251020001626,0.15832455299999992,315382846,26,null,null,null,null,null,null,null],[0.17709199799992348,0.17708197400000358,352763570,27,null,null,null,null,null,null,null],[0.17102690899992012,0.17101550000000287,340682173,28,null,null,null,null,null,null,null],[0.2491226860001916,0.24911977900000437,496246763,30,null,null,null,null,null,null,null],[0.1811217040003612,0.18111969800000338,360790631,31,null,null,null,null,null,null,null],[0.18597984999996697,0.18597768400000092,370467684,33,null,null,null,null,null,null,null],[0.1983363890003602,0.19833410600000434,395081535,35,null,null,null,null,null,null,null],[0.2033770950001781,0.20337475499999869,405122666,36,null,null,null,null,null,null,null],[0.2123095649994866,0.21229444599999425,422916008,38,null,null,null,null,null,null,null],[0.22420824300024833,0.22420565800000247,446617870,40,null,null,null,null,null,null,null],[0.24246396499984257,0.24246101399999986,482982480,42,null,null,null,null,null,null,null],[0.2549935010001718,0.2549679999999981,507940920,44,null,null,null,null,null,null,null],[0.27398793599968485,0.27398464800000255,545777607,47,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":1.858320849709265e-4,"confIntUDX":2.94720572459925e-4,"confIntCL":5.0e-2},"estPoint":8.64794121917834e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":1.7372023516920798e-2,"confIntUDX":1.4506897591844314e-2,"confIntCL":5.0e-2},"estPoint":0.9799356136641313},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":5.1907539084835854e-3,"confIntUDX":3.4993608773215786e-3,"confIntCL":5.0e-2},"estPoint":-2.562478723368102e-5},"iters":{"estError":{"confIntLDX":3.3369302088950316e-4,"confIntUDX":4.91037106811221e-4,"confIntCL":5.0e-2},"estPoint":8.659140651168608e-3}}}],"anStdDev":{"estError":{"confIntLDX":1.6123901941357825e-4,"confIntUDX":1.948333034271641e-4,"confIntCL":5.0e-2},"estPoint":6.522594847018913e-4},"anOutlierVar":{"ovFraction":0.4210710119243513,"ovDesc":"a moderate","ovEffect":"Moderate"}},"reportKDEs":[{"kdeValues":[7.708719262449757e-3,7.73082710716894e-3,7.752934951888124e-3,7.775042796607307e-3,7.79715064132649e-3,7.819258486045673e-3,7.841366330764857e-3,7.863474175484041e-3,7.885582020203223e-3,7.907689864922407e-3,7.92979770964159e-3,7.951905554360773e-3,7.974013399079957e-3,7.99612124379914e-3,8.018229088518323e-3,8.040336933237507e-3,8.06244477795669e-3,8.084552622675873e-3,8.106660467395057e-3,8.12876831211424e-3,8.150876156833423e-3,8.172984001552606e-3,8.19509184627179e-3,8.217199690990972e-3,8.239307535710156e-3,8.26141538042934e-3,8.283523225148522e-3,8.305631069867706e-3,8.32773891458689e-3,8.349846759306072e-3,8.371954604025256e-3,8.39406244874444e-3,8.416170293463622e-3,8.438278138182806e-3,8.46038598290199e-3,8.482493827621172e-3,8.504601672340356e-3,8.52670951705954e-3,8.548817361778722e-3,8.570925206497906e-3,8.59303305121709e-3,8.615140895936272e-3,8.637248740655456e-3,8.65935658537464e-3,8.681464430093822e-3,8.703572274813005e-3,8.72568011953219e-3,8.747787964251373e-3,8.769895808970555e-3,8.792003653689739e-3,8.814111498408921e-3,8.836219343128105e-3,8.858327187847289e-3,8.880435032566473e-3,8.902542877285655e-3,8.924650722004839e-3,8.946758566724021e-3,8.968866411443205e-3,8.990974256162389e-3,9.013082100881573e-3,9.035189945600755e-3,9.057297790319939e-3,9.07940563503912e-3,9.101513479758305e-3,9.123621324477488e-3,9.145729169196672e-3,9.167837013915854e-3,9.189944858635038e-3,9.21205270335422e-3,9.234160548073404e-3,9.256268392792588e-3,9.278376237511772e-3,9.300484082230954e-3,9.322591926950138e-3,9.344699771669322e-3,9.366807616388504e-3,9.388915461107688e-3,9.411023305826872e-3,9.433131150546054e-3,9.455238995265238e-3,9.477346839984422e-3,9.499454684703604e-3,9.521562529422788e-3,9.543670374141972e-3,9.565778218861154e-3,9.587886063580338e-3,9.609993908299521e-3,9.632101753018703e-3,9.654209597737887e-3,9.676317442457071e-3,9.698425287176253e-3,9.720533131895437e-3,9.742640976614621e-3,9.764748821333803e-3,9.786856666052987e-3,9.808964510772171e-3,9.831072355491353e-3,9.853180200210537e-3,9.87528804492972e-3,9.897395889648903e-3,9.919503734368087e-3,9.94161157908727e-3,9.963719423806453e-3,9.985827268525637e-3,1.000793511324482e-2,1.0030042957964003e-2,1.0052150802683187e-2,1.007425864740237e-2,1.0096366492121553e-2,1.0118474336840736e-2,1.014058218155992e-2,1.0162690026279102e-2,1.0184797870998286e-2,1.020690571571747e-2,1.0229013560436652e-2,1.0251121405155836e-2,1.027322924987502e-2,1.0295337094594202e-2,1.0317444939313386e-2,1.033955278403257e-2,1.0361660628751754e-2,1.0383768473470936e-2,1.040587631819012e-2,1.0427984162909302e-2,1.0450092007628486e-2,1.047219985234767e-2,1.0494307697066853e-2,1.0516415541786036e-2],"kdeType":"time","kdePDF":[192.85843539548247,198.55820729258429,209.9067949869576,226.80045328064986,249.07916518889093,276.52187303832704,308.8409586123427,345.67666205505986,386.59225311209246,431.0708446764867,478.5147490445483,528.2482049637861,579.5241373523888,631.5353500894588,683.4302070340487,734.3324533042357,783.3644070660172,829.6723604661657,872.4527189944723,910.9772288236278,944.615625695085,972.8542004199242,995.3091039412916,1011.7336728628221,1022.0195870830836,1026.1922047371445,1024.4008846609647,1016.9054423719783,1004.0600527289315,986.2958999417108,964.1037025330952,938.0169525558506,908.5963675162615,876.4157277875089,842.0490214675415,806.0586828624682,768.9847035906334,731.3345018757492,693.5736169082901,656.11749705167,619.3248158534884,583.4928301859537,548.8552615867792,515.5830313504846,483.78793406620474,453.5290357467228,424.8212857171754,397.6455907087354,371.95945917964985,347.7073085882042,324.8296392734156,303.2704934936846,282.98289633129644,263.93226581791464,246.0980319183941,229.47387660518854,214.06707576964914,199.8973845656889,186.99577799845687,175.4031717925607,165.1690481490942,156.34974163483383,149.0060399682647,143.19974715835605,138.9889490172828,136.42190177269669,135.52970544040357,136.31818554906806,138.75964567239967,142.78532718838687,148.27948865557264,155.0759758545614,162.95799225172905,171.66151291244284,180.88244243186034,190.28724014597123,199.5263702720886,208.2496266402761,216.12217046739408,222.8400322885705,228.14387705816773,231.83000862790212,233.7578738525021,233.85368155153736,232.11013301734917,228.5826218152307,223.3825583539388,216.66867592883614,208.6372604758195,199.51221309341304,189.53571536326976,178.96004885476034,168.04085717691507,157.03187039845332,146.1808745204433,135.72653310380184,125.8955740130319,116.89984942794922,108.9328577322189,102.16546716452348,96.74078102212079,92.76830595891383,90.31780034347499,89.41336201121516,90.02844111351062,92.08251674594543,95.44014508844333,99.91296911641776,105.26508101631048,111.22186208795816,117.48211282364694,123.73295629753633,129.66668370483418,134.9984460154384,139.48351217280361,142.9327378505614,145.22493551640326,146.3150100805324,146.23701472307494,145.1016654681779,143.08829669582363,140.43170189396338,137.40474086604542,134.29796496199947,131.39778104354033,128.96481824030866,127.21416657121439,126.2990232822616]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":10,"reportName":"ByteString/Map/random","reportOutliers":{"highSevere":0,"highMild":3,"lowMild":0,"samplesSeen":30,"lowSevere":0},"reportMeasured":[[1.005231300041487e-2,1.0052598000001467e-2,20025096,1,null,null,null,null,null,null,null],[1.9699227000273822e-2,1.969939399999987e-2,39241513,2,null,null,null,null,null,null,null],[3.0796312000347825e-2,3.0796467999998356e-2,61347827,3,null,null,null,null,null,null,null],[3.530741799932002e-2,3.530734799999635e-2,70332637,4,null,null,null,null,null,null,null],[4.243936399961967e-2,4.243899900000514e-2,84538828,5,null,null,null,null,null,null,null],[4.865947199959919e-2,4.86529200000021e-2,96929313,6,null,null,null,null,null,null,null],[5.7684898999468714e-2,5.768456699999547e-2,114908101,7,null,null,null,null,null,null,null],[7.253194900022208e-2,7.253130099999794e-2,144482647,8,null,null,null,null,null,null,null],[7.364764199974161e-2,7.364090799999445e-2,146707433,9,null,null,null,null,null,null,null],[8.253616299953137e-2,8.253531300000105e-2,164410518,10,null,null,null,null,null,null,null],[9.276555499945971e-2,9.275186099999644e-2,184788186,11,null,null,null,null,null,null,null],[0.10018211700025859,0.10016250999999698,199560933,12,null,null,null,null,null,null,null],[0.10642467300021963,0.10641797800000319,211995873,13,null,null,null,null,null,null,null],[0.11410040999999183,0.11409916999999581,227285775,14,null,null,null,null,null,null,null],[0.12336995900022885,0.12336876100000183,245751278,15,null,null,null,null,null,null,null],[0.12825289299962606,0.12824530700000025,255477269,16,null,null,null,null,null,null,null],[0.14549820499996713,0.1454886399999964,289829482,17,null,null,null,null,null,null,null],[0.16991017300006206,0.16989852900000102,338457586,18,null,null,null,null,null,null,null],[0.18149093400006677,0.1814888429999968,361525955,19,null,null,null,null,null,null,null],[0.1649136410005667,0.16491175800000235,328504075,20,null,null,null,null,null,null,null],[0.1667965730002834,0.16679473699999647,332255295,21,null,null,null,null,null,null,null],[0.19235600899992278,0.1923537309999972,383168755,22,null,null,null,null,null,null,null],[0.22425931899942952,0.22425875300000087,446726143,23,null,null,null,null,null,null,null],[0.21758937799950218,0.2175805440000005,433433355,25,null,null,null,null,null,null,null],[0.2167109749998417,0.2167012699999944,431683137,26,null,null,null,null,null,null,null],[0.27762590299971635,0.277622633,553024427,27,null,null,null,null,null,null,null],[0.2656790169994565,0.26565922799999697,529226566,28,null,null,null,null,null,null,null],[0.24561053100023855,0.24560976800000134,489254877,30,null,null,null,null,null,null,null],[0.2500008759998309,0.24999787800000206,497995809,31,null,null,null,null,null,null,null],[0.2795256050003445,0.27952251100000325,556808921,33,null,null,null,null,null,null,null],[0.2945494880004844,0.2945459430000028,586735513,35,null,null,null,null,null,null,null],[0.3047629499997129,0.30474784300000124,607081324,36,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":1.0146217357556806e-4,"confIntUDX":1.8120545813261803e-4,"confIntCL":5.0e-2},"estPoint":6.0200457824953705e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":1.4863364800033585e-2,"confIntUDX":1.3585850286056411e-2,"confIntCL":5.0e-2},"estPoint":0.9845165665462834},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":3.999391374731412e-3,"confIntUDX":2.7250428196408825e-3,"confIntCL":5.0e-2},"estPoint":-1.831304674123719e-3},"iters":{"estError":{"confIntLDX":1.7752643444074283e-4,"confIntUDX":3.1884684952994836e-4,"confIntCL":5.0e-2},"estPoint":6.161397548473027e-3}}}],"anStdDev":{"estError":{"confIntLDX":1.52785339144139e-4,"confIntUDX":2.0805521912514502e-4,"confIntCL":5.0e-2},"estPoint":4.05037207706454e-4},"anOutlierVar":{"ovFraction":0.4049491808491435,"ovDesc":"a moderate","ovEffect":"Moderate"}},"reportKDEs":[{"kdeValues":[5.473953688048519e-3,5.490644426181652e-3,5.507335164314784e-3,5.524025902447917e-3,5.5407166405810485e-3,5.557407378714181e-3,5.5740981168473135e-3,5.590788854980446e-3,5.6074795931135785e-3,5.624170331246711e-3,5.640861069379843e-3,5.657551807512975e-3,5.674242545646108e-3,5.69093328377924e-3,5.707624021912373e-3,5.724314760045505e-3,5.741005498178637e-3,5.757696236311769e-3,5.774386974444902e-3,5.791077712578034e-3,5.807768450711167e-3,5.824459188844299e-3,5.841149926977431e-3,5.857840665110563e-3,5.874531403243696e-3,5.891222141376828e-3,5.907912879509961e-3,5.924603617643093e-3,5.941294355776225e-3,5.9579850939093576e-3,5.97467583204249e-3,5.991366570175623e-3,6.008057308308755e-3,6.024748046441888e-3,6.041438784575019e-3,6.058129522708152e-3,6.074820260841284e-3,6.091510998974417e-3,6.108201737107549e-3,6.124892475240682e-3,6.141583213373814e-3,6.158273951506946e-3,6.174964689640078e-3,6.191655427773211e-3,6.208346165906343e-3,6.225036904039476e-3,6.2417276421726075e-3,6.25841838030574e-3,6.2751091184388725e-3,6.291799856572005e-3,6.3084905947051375e-3,6.32518133283827e-3,6.3418720709714025e-3,6.358562809104534e-3,6.375253547237667e-3,6.391944285370799e-3,6.408635023503932e-3,6.425325761637064e-3,6.442016499770196e-3,6.458707237903328e-3,6.475397976036461e-3,6.492088714169593e-3,6.508779452302726e-3,6.525470190435858e-3,6.542160928568991e-3,6.558851666702122e-3,6.575542404835255e-3,6.592233142968387e-3,6.60892388110152e-3,6.625614619234652e-3,6.642305357367784e-3,6.6589960955009166e-3,6.675686833634049e-3,6.6923775717671816e-3,6.709068309900314e-3,6.725759048033447e-3,6.742449786166579e-3,6.759140524299711e-3,6.775831262432843e-3,6.792522000565976e-3,6.809212738699108e-3,6.825903476832241e-3,6.842594214965372e-3,6.859284953098505e-3,6.875975691231637e-3,6.89266642936477e-3,6.909357167497902e-3,6.926047905631035e-3,6.942738643764167e-3,6.9594293818973e-3,6.9761201200304315e-3,6.992810858163564e-3,7.0095015962966965e-3,7.026192334429829e-3,7.042883072562961e-3,7.059573810696093e-3,7.076264548829226e-3,7.092955286962358e-3,7.109646025095491e-3,7.126336763228623e-3,7.143027501361756e-3,7.159718239494888e-3,7.17640897762802e-3,7.193099715761152e-3,7.209790453894285e-3,7.226481192027417e-3,7.243171930160549e-3,7.259862668293681e-3,7.276553406426814e-3,7.293244144559946e-3,7.309934882693079e-3,7.326625620826211e-3,7.343316358959344e-3,7.360007097092476e-3,7.376697835225608e-3,7.3933885733587406e-3,7.410079311491873e-3,7.426770049625006e-3,7.443460787758137e-3,7.46015152589127e-3,7.476842264024402e-3,7.493533002157535e-3,7.510223740290667e-3,7.5269144784238e-3,7.543605216556932e-3,7.560295954690065e-3,7.576986692823197e-3,7.593677430956329e-3],"kdeType":"time","kdePDF":[121.82478688616182,135.24390771338489,162.38174256622165,203.76020146301767,259.9756927030033,331.4948828882259,418.41633889232446,520.2286133922315,635.6020114619961,762.2540623050751,896.9252965533394,1035.4908069911132,1173.2143997344922,1305.1281778906407,1426.49536782347,1533.2934928235456,1622.643852543284,1693.1152780869209,1744.8461265286785,1779.4560917448696,1799.7535657708738,1809.2784170978305,1811.747661472214,1810.4875939812632,1807.937962421923,1805.3018078707762,1802.3911531523124,1797.687938326534,1788.6065307170775,1771.9139586046367,1744.2413678899177,1702.6085361827243,1644.884316696557,1570.1192165668717,1478.7093479437697,1372.379347059022,1254.0002287538111,1127.2814364596047,996.3907991119163,865.560061236524,738.7277577088759,619.2580029546332,509.75684915742363,411.99089666018995,326.8987047953034,254.6759150552004,194.91024226377246,146.74199265646635,109.0283511073982,80.49404403511032,59.856029561749814,45.91484512390338,37.609767250695825,34.03888851246462,34.44860487457091,38.19984447353418,44.720570239878,53.45543279659407,63.82361577201444,75.19458846743893,86.88850537433555,98.2035246455894,108.46691690786108,117.10143791890938,123.6941949616943,128.05324065416764,130.23810201365407,130.55449820795042,129.50999378804053,127.73501878879114,125.88094434792201,124.51212982185848,124.01085032506322,124.51225269557929,125.88126207827611,127.73570628241384,129.51139778408506,130.55725671958388,130.24332766229838,128.06277019336883,123.71087077263591,117.12930228379659,108.51103152510753,98.26882891038359,86.97664191676168,75.29690108315467,63.907535761525885,53.4402443860973,44.43721018818427,37.32820543067468,32.42519196449465,29.928179055426508,29.934868570822797,32.44759165082797,37.373801884844724,44.520136699658735,53.58378657738896,64.1476174310892,75.68637871053703,87.5899926852536,99.20647139045623,109.90211173859194,119.13139988503974,126.50486730827798,131.84123966924417,135.19141265493374,136.82616231272078,137.18631441877363,136.80192130340873,136.19401550375792,135.77699734064092,135.78047138198988,136.2060406303975,136.82783598474768,137.23687303852284,136.92063477365733,135.36251798991336,132.14240937939562,127.02029223719038,119.98907401951824,111.28956635152001,101.38803502289359,90.92322285601676,80.63390959545555,71.27932694451422,63.5633401046598,58.07015853091618,55.21569366030053]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":11,"reportName":"ByteString/Map/revsorted","reportOutliers":{"highSevere":2,"highMild":2,"lowMild":0,"samplesSeen":33,"lowSevere":0},"reportMeasured":[[5.730931000471173e-3,5.731085999997276e-3,11416584,1,null,null,null,null,null,null,null],[1.107358699937322e-2,1.1073656999997183e-2,22059137,2,null,null,null,null,null,null,null],[1.808070199967915e-2,1.8080931999996608e-2,36017559,3,null,null,null,null,null,null,null],[2.334339099979843e-2,2.3343320999998696e-2,46500372,4,null,null,null,null,null,null,null],[2.8997962000175903e-2,2.8997803999999405e-2,57763925,5,null,null,null,null,null,null,null],[3.3903583999745024e-2,3.389761000000391e-2,67535691,6,null,null,null,null,null,null,null],[4.077235399927304e-2,4.077211200000619e-2,81218328,7,null,null,null,null,null,null,null],[4.577922699991177e-2,4.5773125000003745e-2,91191746,8,null,null,null,null,null,null,null],[5.5217939000613114e-2,5.5217460999998025e-2,109993545,9,null,null,null,null,null,null,null],[5.968087399924116e-2,5.9672932999994543e-2,118883504,10,null,null,null,null,null,null,null],[6.466178800019406e-2,6.466127899999918e-2,128805428,11,null,null,null,null,null,null,null],[7.037373799994384e-2,7.037298899999911e-2,140183258,12,null,null,null,null,null,null,null],[7.487446000050113e-2,7.48738160000002e-2,149148899,13,null,null,null,null,null,null,null],[8.054586500020378e-2,8.050665199999685e-2,160446037,14,null,null,null,null,null,null,null],[8.56363800003237e-2,8.563551999999675e-2,170586216,15,null,null,null,null,null,null,null],[9.200188300019363e-2,9.200142699999958e-2,183267166,16,null,null,null,null,null,null,null],[9.7334692000004e-2,9.733374400000372e-2,193889014,17,null,null,null,null,null,null,null],[0.10428558500007057,0.10428442999999987,207734819,18,null,null,null,null,null,null,null],[0.1093070169999919,0.10930587599999342,217737682,19,null,null,null,null,null,null,null],[0.11519934300031309,0.11519272900000033,229474888,20,null,null,null,null,null,null,null],[0.12531965200014383,0.125305455000003,249634337,21,null,null,null,null,null,null,null],[0.14925606300039362,0.14924727200000376,297315215,22,null,null,null,null,null,null,null],[0.1378330100005769,0.13782502499999794,274560627,23,null,null,null,null,null,null,null],[0.14632629599964275,0.14632471200000197,291478967,25,null,null,null,null,null,null,null],[0.15559459799987962,0.15559306600000156,309941712,26,null,null,null,null,null,null,null],[0.1631769780005925,0.16316835800000007,325045074,27,null,null,null,null,null,null,null],[0.2076769459999923,0.2076607569999993,413687776,28,null,null,null,null,null,null,null],[0.18284677700012253,0.18283772600000248,364226884,30,null,null,null,null,null,null,null],[0.20314648399926227,0.20314410099999947,404663308,31,null,null,null,null,null,null,null],[0.19946302300013485,0.19946075600000057,397325913,33,null,null,null,null,null,null,null],[0.21055673599948932,0.21055421300000177,419424100,35,null,null,null,null,null,null,null],[0.2593114110004535,0.2592952200000056,516542599,36,null,null,null,null,null,null,null],[0.22768934899977467,0.22766971800000135,453551700,38,null,null,null,null,null,null,null],[0.23597945500023343,0.23597134300000278,470066048,40,null,null,null,null,null,null,null],[0.25315554200005863,0.2531525549999998,504279991,42,null,null,null,null,null,null,null],[0.25404201800029114,0.2540246359999969,506045690,44,null,null,null,null,null,null,null],[0.27939415200035,0.2793907840000003,556546542,47,null,null,null,null,null,null,null],[0.295088451999618,0.2950853769999995,587810133,49,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":5.4239401475972455e-5,"confIntUDX":7.185268770627026e-5,"confIntCL":5.0e-2},"estPoint":4.183210063607106e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":5.743859002251495e-3,"confIntUDX":4.335195471424913e-3,"confIntCL":5.0e-2},"estPoint":0.9937076277093424},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":2.1241331929631735e-3,"confIntUDX":2.2072736389632704e-3,"confIntCL":5.0e-2},"estPoint":1.7202057697345626e-3},"iters":{"estError":{"confIntLDX":7.72167674596624e-5,"confIntUDX":1.392972994530622e-4,"confIntCL":5.0e-2},"estPoint":4.113512390105684e-3}}}],"anStdDev":{"estError":{"confIntLDX":4.7329458662270335e-5,"confIntUDX":5.825264413319379e-5,"confIntCL":5.0e-2},"estPoint":1.9627155674962126e-4},"anOutlierVar":{"ovFraction":0.2607287134452999,"ovDesc":"a moderate","ovEffect":"Moderate"}},"reportKDEs":[{"kdeValues":[3.906951581783667e-3,3.914047188226286e-3,3.921142794668904e-3,3.928238401111523e-3,3.935334007554142e-3,3.942429613996761e-3,3.94952522043938e-3,3.956620826881999e-3,3.9637164333246174e-3,3.970812039767236e-3,3.977907646209855e-3,3.985003252652474e-3,3.992098859095092e-3,3.999194465537711e-3,4.00629007198033e-3,4.013385678422949e-3,4.020481284865568e-3,4.027576891308187e-3,4.034672497750805e-3,4.041768104193424e-3,4.048863710636043e-3,4.0559593170786615e-3,4.06305492352128e-3,4.070150529963899e-3,4.077246136406518e-3,4.084341742849137e-3,4.091437349291756e-3,4.098532955734375e-3,4.105628562176993e-3,4.112724168619612e-3,4.119819775062231e-3,4.1269153815048495e-3,4.134010987947468e-3,4.141106594390087e-3,4.1482022008327065e-3,4.155297807275325e-3,4.162393413717944e-3,4.169489020160563e-3,4.176584626603181e-3,4.1836802330458e-3,4.190775839488419e-3,4.1978714459310375e-3,4.204967052373656e-3,4.212062658816275e-3,4.219158265258894e-3,4.226253871701513e-3,4.233349478144132e-3,4.240445084586751e-3,4.247540691029369e-3,4.254636297471988e-3,4.261731903914607e-3,4.2688275103572254e-3,4.275923116799844e-3,4.283018723242463e-3,4.2901143296850824e-3,4.297209936127701e-3,4.30430554257032e-3,4.311401149012939e-3,4.318496755455557e-3,4.325592361898176e-3,4.332687968340795e-3,4.339783574783413e-3,4.346879181226032e-3,4.353974787668651e-3,4.36107039411127e-3,4.368166000553889e-3,4.375261606996508e-3,4.3823572134391265e-3,4.389452819881745e-3,4.396548426324364e-3,4.403644032766983e-3,4.410739639209601e-3,4.41783524565222e-3,4.42493085209484e-3,4.432026458537458e-3,4.439122064980077e-3,4.446217671422696e-3,4.4533132778653145e-3,4.460408884307933e-3,4.467504490750552e-3,4.474600097193171e-3,4.481695703635789e-3,4.488791310078408e-3,4.495886916521027e-3,4.502982522963646e-3,4.510078129406265e-3,4.517173735848884e-3,4.5242693422915025e-3,4.531364948734121e-3,4.53846055517674e-3,4.545556161619359e-3,4.552651768061977e-3,4.559747374504596e-3,4.566842980947216e-3,4.573938587389834e-3,4.581034193832453e-3,4.588129800275072e-3,4.59522540671769e-3,4.602321013160309e-3,4.609416619602928e-3,4.6165122260455466e-3,4.623607832488165e-3,4.630703438930784e-3,4.637799045373403e-3,4.644894651816022e-3,4.651990258258641e-3,4.65908586470126e-3,4.666181471143878e-3,4.673277077586497e-3,4.680372684029116e-3,4.6874682904717345e-3,4.694563896914353e-3,4.701659503356973e-3,4.7087551097995915e-3,4.71585071624221e-3,4.722946322684829e-3,4.730041929127448e-3,4.737137535570066e-3,4.744233142012685e-3,4.751328748455304e-3,4.7584243548979225e-3,4.765519961340541e-3,4.77261556778316e-3,4.7797111742257795e-3,4.786806780668398e-3,4.793902387111017e-3,4.800997993553636e-3,4.808093599996254e-3],"kdeType":"time","kdePDF":[776.9589937378233,803.7244297328687,856.6539684841589,934.5515040579273,1035.6413032489331,1157.595307937139,1297.5768482589162,1452.3046068430856,1618.1391401915098,1791.1917971107052,1967.4528494282918,2142.932563490089,2313.806326477114,2476.553278447414,2628.0775281244005,2765.802085632588,2887.728039280513,2992.4549332266306,3079.1623024657683,3147.5563395073177,3197.7891562140635,3230.3606075569587,3246.0138615293044,3245.635725506639,3230.171266411974,3200.559753391602,3157.695790620016,3102.4161345011385,3035.5095367016506,2957.7443918276854,2869.9072619728418,2772.8446388538,2667.500594695041,2554.944150257121,2436.382037632519,2313.1547737608444,2186.7162744003854,2058.5993229977043,1930.3708075567881,1803.5815745423074,1679.7159479937548,1560.1454609467046,1446.0902835763204,1338.5904241268265,1238.4872804767851,1146.4147839483373,1062.7984081451154,987.8598401239741,921.6251576575407,863.934856395016,814.4548769387183,772.6886986849581,737.9913887567093,709.5870411591034,686.5911907839203,668.0394916714708,652.9232419037338,640.231323957802,628.9969685205397,618.3466292396907,607.5473629021537,596.0486030061796,583.5142014714967,569.8411315011855,555.1622567779793,539.8319684957883,524.3951046957152,509.541194406985,496.04750619730265,484.7154476501718,476.305433703684,471.47536470660236,470.7273546313584,474.36642159838647,482.4736425056361,494.8949493258631,511.24546720315,530.928191333553,553.1649488551963,577.0370184207278,601.5324634691792,625.597127080742,648.1862809852012,668.3140743063011,685.0981669922411,697.797260539488,705.8396719733233,708.8416538104636,706.6148439393402,699.163006234,686.6690318690502,669.4739205585521,648.0500451743326,622.9713265847731,594.8829448214371,564.472875373796,532.446912213722,499.5080236079008,466.34002276901214,433.59477560216135,401.8816484975329,371.75771351339046,343.7174079718224,318.1808537254534,295.4807794693755,275.8488147756292,259.4026761133526,246.13629253599285,235.91510824329322,228.47859323757095,223.4513997482925,220.3636929721952,218.68008411194816,217.83545819754795,217.2749832774392,216.4948589399106,215.08001994282938,212.7351104932141,209.30558160323108,204.78667532815376,199.31923599631008,193.1725902999046,186.71601607542584,180.38143451136557,174.62079948915718,169.86214504720317,166.46835331710525,164.70242641517314]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":12,"reportName":"ByteString/HashMap/sorted","reportOutliers":{"highSevere":0,"highMild":3,"lowMild":0,"samplesSeen":37,"lowSevere":0},"reportMeasured":[[3.508691000206454e-3,3.5088439999952925e-3,6990017,1,null,null,null,null,null,null,null],[8.737513999221846e-3,8.738131999997734e-3,17406720,2,null,null,null,null,null,null,null],[1.2593759000083082e-2,1.2593860999999151e-2,25087545,3,null,null,null,null,null,null,null],[1.6463273000226764e-2,1.6463348000002043e-2,32795496,4,null,null,null,null,null,null,null],[2.1917132999988098e-2,2.191174700000431e-2,43659239,5,null,null,null,null,null,null,null],[2.5211938999746053e-2,2.5211960000000033e-2,50222441,6,null,null,null,null,null,null,null],[2.7821570000014617e-2,2.7821529000000567e-2,55420970,7,null,null,null,null,null,null,null],[3.26131069996336e-2,3.261292899999546e-2,64965278,8,null,null,null,null,null,null,null],[3.607944499981386e-2,3.607341600000069e-2,71870360,9,null,null,null,null,null,null,null],[4.100149399982911e-2,4.100118900000638e-2,81674751,10,null,null,null,null,null,null,null],[4.412657200009562e-2,4.41269009999985e-2,87901288,11,null,null,null,null,null,null,null],[4.975815400030115e-2,4.975105100000121e-2,99117905,12,null,null,null,null,null,null,null],[5.236958400018921e-2,5.236255799999867e-2,104319582,13,null,null,null,null,null,null,null],[5.5950605000361975e-2,5.595015800000169e-2,111453277,14,null,null,null,null,null,null,null],[6.0200064000127895e-2,6.0199649999994165e-2,119917993,15,null,null,null,null,null,null,null],[6.371274799948878e-2,6.371221399999882e-2,126915144,16,null,null,null,null,null,null,null],[7.076924099965254e-2,7.076855000000393e-2,140971421,17,null,null,null,null,null,null,null],[7.626865299971541e-2,7.626798100000087e-2,151926194,18,null,null,null,null,null,null,null],[8.47573149994787e-2,8.473508800000218e-2,168836970,19,null,null,null,null,null,null,null],[8.437865900032193e-2,8.437792600000193e-2,168081186,20,null,null,null,null,null,null,null],[8.7004741999408e-2,8.699320500000596e-2,173313508,21,null,null,null,null,null,null,null],[0.10007723300077487,0.10007631500000258,199352341,22,null,null,null,null,null,null,null],[0.10371524800029874,0.10369821199999762,206598956,23,null,null,null,null,null,null,null],[0.11516233000020293,0.11516118899999839,229401564,25,null,null,null,null,null,null,null],[0.1116999180003404,0.11169891699999823,222505090,26,null,null,null,null,null,null,null],[0.1222060860000056,0.12220493799999588,243432767,27,null,null,null,null,null,null,null],[0.11628019599993422,0.1162788990000081,231628158,28,null,null,null,null,null,null,null],[0.12317499900018447,0.1231736360000042,245362339,30,null,null,null,null,null,null,null],[0.12817238499974337,0.12817092799998875,255316711,31,null,null,null,null,null,null,null],[0.1355673489997571,0.13556061900000316,270047859,33,null,null,null,null,null,null,null],[0.1414783210002497,0.14146428699999092,281822168,35,null,null,null,null,null,null,null],[0.14710562999971444,0.14709189799999933,293031500,36,null,null,null,null,null,null,null],[0.15307397800006584,0.1530722580000088,304920218,38,null,null,null,null,null,null,null],[0.17381271700014622,0.1738111100000026,346231840,40,null,null,null,null,null,null,null],[0.1734175130004587,0.17341569399999912,345444344,42,null,null,null,null,null,null,null],[0.2082519309997224,0.20822998500000267,414837678,44,null,null,null,null,null,null,null],[0.20506827400004113,0.20505860100000461,408491596,47,null,null,null,null,null,null,null],[0.20512327200049185,0.20512096000000213,408601228,49,null,null,null,null,null,null,null],[0.2106375029998162,0.2106349310000013,419584902,52,null,null,null,null,null,null,null],[0.2206458090004162,0.2206432110000094,439521530,54,null,null,null,null,null,null,null],[0.23217467900030897,0.23217183599999203,462486496,57,null,null,null,null,null,null,null],[0.24098477400002594,0.24096993300000236,480037110,60,null,null,null,null,null,null,null],[0.2523891589999039,0.252386247000004,502753696,63,null,null,null,null,null,null,null],[0.26778634800029977,0.26777832100000865,533424214,66,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":1.321278156905456e-5,"confIntUDX":2.0014747469060228e-5,"confIntCL":5.0e-2},"estPoint":4.002405826920141e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":3.3645344876553906e-4,"confIntUDX":3.8844563372608665e-4,"confIntCL":5.0e-2},"estPoint":0.9995180362322155},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":8.54357532900292e-4,"confIntUDX":6.868039487090028e-4,"confIntCL":5.0e-2},"estPoint":-5.172148492991144e-4},"iters":{"estError":{"confIntLDX":3.3403718698032936e-5,"confIntUDX":4.5042943381931946e-5,"confIntCL":5.0e-2},"estPoint":4.028950101154401e-3}}}],"anStdDev":{"estError":{"confIntLDX":1.3773554110513053e-5,"confIntUDX":2.368984051155525e-5,"confIntCL":5.0e-2},"estPoint":5.010562152886564e-5},"anOutlierVar":{"ovFraction":2.1728395061728405e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[3.9043660463083584e-3,3.906722081311098e-3,3.909078116313837e-3,3.9114341513165765e-3,3.913790186319316e-3,3.916146221322055e-3,3.918502256324795e-3,3.920858291327534e-3,3.923214326330273e-3,3.925570361333013e-3,3.927926396335752e-3,3.930282431338491e-3,3.932638466341231e-3,3.9349945013439705e-3,3.937350536346709e-3,3.939706571349449e-3,3.942062606352189e-3,3.944418641354927e-3,3.946774676357667e-3,3.949130711360407e-3,3.9514867463631455e-3,3.953842781365885e-3,3.956198816368625e-3,3.958554851371364e-3,3.960910886374103e-3,3.963266921376843e-3,3.965622956379582e-3,3.967978991382321e-3,3.970335026385061e-3,3.9726910613878e-3,3.975047096390539e-3,3.977403131393279e-3,3.979759166396018e-3,3.9821152013987575e-3,3.984471236401497e-3,3.986827271404236e-3,3.989183306406976e-3,3.991539341409715e-3,3.993895376412454e-3,3.996251411415194e-3,3.998607446417933e-3,4.000963481420672e-3,4.003319516423412e-3,4.0056755514261515e-3,4.00803158642889e-3,4.01038762143163e-3,4.01274365643437e-3,4.015099691437108e-3,4.017455726439848e-3,4.019811761442588e-3,4.0221677964453265e-3,4.024523831448066e-3,4.026879866450806e-3,4.0292359014535446e-3,4.031591936456284e-3,4.033947971459024e-3,4.036304006461763e-3,4.038660041464502e-3,4.041016076467242e-3,4.043372111469981e-3,4.04572814647272e-3,4.04808418147546e-3,4.050440216478199e-3,4.0527962514809385e-3,4.055152286483678e-3,4.057508321486417e-3,4.059864356489157e-3,4.062220391491896e-3,4.064576426494636e-3,4.066932461497375e-3,4.069288496500114e-3,4.071644531502854e-3,4.074000566505593e-3,4.0763566015083325e-3,4.078712636511072e-3,4.081068671513811e-3,4.0834247065165506e-3,4.08578074151929e-3,4.088136776522029e-3,4.090492811524769e-3,4.092848846527508e-3,4.095204881530247e-3,4.097560916532987e-3,4.099916951535726e-3,4.102272986538465e-3,4.104629021541205e-3,4.1069850565439445e-3,4.109341091546683e-3,4.111697126549423e-3,4.114053161552163e-3,4.116409196554901e-3,4.118765231557641e-3,4.121121266560381e-3,4.1234773015631195e-3,4.125833336565859e-3,4.128189371568599e-3,4.130545406571338e-3,4.132901441574077e-3,4.135257476576817e-3,4.137613511579556e-3,4.139969546582295e-3,4.142325581585035e-3,4.144681616587774e-3,4.1470376515905134e-3,4.149393686593253e-3,4.151749721595992e-3,4.1541057565987315e-3,4.156461791601471e-3,4.15881782660421e-3,4.16117386160695e-3,4.163529896609689e-3,4.165885931612428e-3,4.168241966615168e-3,4.170598001617907e-3,4.172954036620646e-3,4.175310071623386e-3,4.1776661066261255e-3,4.180022141628864e-3,4.182378176631604e-3,4.184734211634344e-3,4.187090246637082e-3,4.189446281639822e-3,4.191802316642562e-3,4.1941583516453005e-3,4.19651438664804e-3,4.19887042165078e-3,4.2012264566535186e-3,4.203582491656258e-3],"kdeType":"time","kdePDF":[839.7206085805137,897.691586990269,1012.1844198318238,1180.243883175856,1397.3218444202835,1657.2078896178332,1952.0327057488844,2272.393786754268,2607.6354604376756,2946.290771492242,3276.6676499708597,3587.541608134861,3868.9051364906854,4112.720048339064,4313.62052419102,4469.517483491529,4582.055741324405,4656.873116360344,4703.607308890328,4735.596703809347,4769.231075091032,4822.9321270706305,4915.78333675714,5065.880630536278,5288.532507311854,5594.4894532644585,5988.415792600895,6467.821713921061,7022.642195132035,7635.58198785113,8283.248043463243,8937.976426065841,9570.14935580374,10150.711689939091,10653.555028964338,11057.45471547211,11347.321688226895,11514.655201084466,11557.229216041082,11478.182905157486,11284.782607195013,10987.156005768908,10597.26174529848,10128.25953286503,9594.312750048597,9010.722082907372,8394.188452732975,7762.960968116527,7136.649751322013,6535.566486979087,5979.575676202882,5486.567474998964,5070.7691103330035,4741.173204397674,4500.365875957544,4343.985687200751,4260.948058196062,4234.448314592861,4243.63325468424,4265.7281877160995,4278.340987770073,4261.6462516393585,4200.1816309673795,4084.056915299384,3909.470251190093,3678.5276182517423,3398.4543273086156,3080.357283858767,2737.7359847212238,2384.94677733543,2035.8024695444449,1702.4456115646058,1394.5783854025387,1119.0748060500905,879.9501458569757,678.623929765606,514.3894144727395,384.99429991446647,287.24245418716833,217.54118609568775,172.33909146539426,148.4220538133988,143.05678267780382,153.99057433877525,179.3319392832749,217.3490189979365,266.2310038395179,323.8614730852015,387.6508332877725,454.4670238210268,520.6892330696026,582.3896006292911,635.6253665076508,676.8025690234175,703.0566284007224,712.5888119247172,704.9026953668136,680.9007567083646,642.8249169767629,594.0509667405234,538.7695660452753,481.60104867850623,427.19508022496655,379.859739344735,343.250921669579,320.1368363020303,312.2386178075357,320.14018517476137,343.2595575300304,379.8784276004754,427.2334821622779,481.6775974055273,538.9182037958242,594.3323358974968,643.3442381845389,681.8353036574775,706.5423326169004,715.3932303585547,707.7322969618108,684.4005210233889,647.6572248560572,600.9533046718876,548.58767081106,495.29267827112614,445.79889168905726,404.42478547747,374.7257496856452,359.22324801996194]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":13,"reportName":"ByteString/HashMap/random","reportOutliers":{"highSevere":2,"highMild":0,"lowMild":0,"samplesSeen":38,"lowSevere":0},"reportMeasured":[[3.6986209997849073e-3,3.6989480000073627e-3,7368635,1,null,null,null,null,null,null,null],[8.227787000578246e-3,8.227860999994618e-3,16390368,2,null,null,null,null,null,null,null],[1.1789797999881557e-2,1.1789871000004837e-2,23485953,3,null,null,null,null,null,null,null],[1.5494723999836424e-2,1.5494763000006628e-2,30865921,4,null,null,null,null,null,null,null],[2.0106359999772394e-2,2.0106253999998103e-2,40052124,5,null,null,null,null,null,null,null],[2.402420999987953e-2,2.4024095000001466e-2,47856403,6,null,null,null,null,null,null,null],[2.8131004999522702e-2,2.8130798999995932e-2,56037057,7,null,null,null,null,null,null,null],[3.14344060006988e-2,3.143435100000147e-2,62617652,8,null,null,null,null,null,null,null],[3.5935726999923645e-2,3.593547699999533e-2,71584030,9,null,null,null,null,null,null,null],[3.98295800005144e-2,3.982920500000375e-2,79340101,10,null,null,null,null,null,null,null],[4.389816100047028e-2,4.3897825000001944e-2,87444933,11,null,null,null,null,null,null,null],[4.727952099983668e-2,4.7273438999994255e-2,94180530,12,null,null,null,null,null,null,null],[5.1878640999348136e-2,5.187826899999948e-2,103341875,13,null,null,null,null,null,null,null],[5.591469099999813e-2,5.591427800000304e-2,111381751,14,null,null,null,null,null,null,null],[6.084711699986656e-2,6.084653000000628e-2,121206722,15,null,null,null,null,null,null,null],[6.302184199921612e-2,6.302139299999965e-2,125538990,16,null,null,null,null,null,null,null],[6.833554000058939e-2,6.833488899999907e-2,136123648,17,null,null,null,null,null,null,null],[7.306696799969359e-2,7.306639000000814e-2,145548663,18,null,null,null,null,null,null,null],[7.696347900036926e-2,7.69564410000072e-2,153309960,19,null,null,null,null,null,null,null],[7.900796200010518e-2,7.90082219999988e-2,157384800,20,null,null,null,null,null,null,null],[8.329252900057327e-2,8.32918029999945e-2,165917614,21,null,null,null,null,null,null,null],[8.649809500002448e-2,8.64972730000062e-2,172302994,22,null,null,null,null,null,null,null],[9.088428799987014e-2,9.087754100001177e-2,181040132,23,null,null,null,null,null,null,null],[9.87212569998519e-2,9.871439100000146e-2,196650849,25,null,null,null,null,null,null,null],[0.10432727899933525,0.10432632100000205,207818627,26,null,null,null,null,null,null,null],[0.10755400299967732,0.10755292499999314,214245840,27,null,null,null,null,null,null,null],[0.11128935600027035,0.1112883329999903,221686773,28,null,null,null,null,null,null,null],[0.12033553099990968,0.12032691599999623,239705959,30,null,null,null,null,null,null,null],[0.12424444999942352,0.12423523700000771,247492506,31,null,null,null,null,null,null,null],[0.1378953769999498,0.13787743199999625,274684888,33,null,null,null,null,null,null,null],[0.14161267100007535,0.1416048520000004,282089391,35,null,null,null,null,null,null,null],[0.14346379500057083,0.1434623110000075,285777308,36,null,null,null,null,null,null,null],[0.1526866219992371,0.15268497800001057,304148796,38,null,null,null,null,null,null,null],[0.16002913499960414,0.16002722200001074,318774503,40,null,null,null,null,null,null,null],[0.16993233499943017,0.16993046899999342,338501726,42,null,null,null,null,null,null,null],[0.17633686099998158,0.1763347770000081,351259067,44,null,null,null,null,null,null,null],[0.18823027999951591,0.1882221950000087,374950585,47,null,null,null,null,null,null,null],[0.1956163690001631,0.19560684799999706,389663671,49,null,null,null,null,null,null,null],[0.2076564619992496,0.2076541619999972,413647371,52,null,null,null,null,null,null,null],[0.2184238390000246,0.21842126500000347,435095302,54,null,null,null,null,null,null,null],[0.2284621260005224,0.2284532850000005,455091479,57,null,null,null,null,null,null,null],[0.23935541700029717,0.2393440620000007,476791407,60,null,null,null,null,null,null,null],[0.25077386800057866,0.25077085200000226,499535800,63,null,null,null,null,null,null,null],[0.2629461740007173,0.26294295799999645,523782551,66,null,null,null,null,null,null,null],[0.28482179700040433,0.2848195099999913,567361141,69,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":3.495646704464693e-5,"confIntUDX":4.9630669471754235e-5,"confIntCL":5.0e-2},"estPoint":4.109310544482966e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":2.142496691383111e-3,"confIntUDX":1.3757930319761025e-3,"confIntCL":5.0e-2},"estPoint":0.9979520202303545},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":1.1416344066406223e-3,"confIntUDX":8.217696948966812e-4,"confIntCL":5.0e-2},"estPoint":-8.348309251168644e-4},"iters":{"estError":{"confIntLDX":4.2730611292938515e-5,"confIntUDX":6.710230883255446e-5,"confIntCL":5.0e-2},"estPoint":4.162001192155132e-3}}}],"anStdDev":{"estError":{"confIntLDX":3.1104105138616135e-5,"confIntUDX":5.869870754241165e-5,"confIntCL":5.0e-2},"estPoint":1.1867642757769951e-4},"anOutlierVar":{"ovFraction":0.12844640214234063,"ovDesc":"a moderate","ovEffect":"Moderate"}},"reportKDEs":[{"kdeValues":[3.917860838911717e-3,3.922891731729505e-3,3.927922624547293e-3,3.932953517365081e-3,3.937984410182869e-3,3.943015303000657e-3,3.948046195818445e-3,3.953077088636233e-3,3.95810798145402e-3,3.963138874271808e-3,3.968169767089596e-3,3.9732006599073845e-3,3.9782315527251725e-3,3.983262445542961e-3,3.988293338360749e-3,3.993324231178537e-3,3.998355123996325e-3,4.003386016814113e-3,4.008416909631901e-3,4.013447802449689e-3,4.018478695267477e-3,4.023509588085265e-3,4.028540480903053e-3,4.033571373720841e-3,4.0386022665386285e-3,4.0436331593564166e-3,4.048664052174205e-3,4.053694944991993e-3,4.058725837809781e-3,4.063756730627569e-3,4.068787623445357e-3,4.073818516263145e-3,4.078849409080933e-3,4.083880301898721e-3,4.088911194716509e-3,4.093942087534297e-3,4.098972980352085e-3,4.104003873169873e-3,4.1090347659876614e-3,4.1140656588054495e-3,4.119096551623237e-3,4.124127444441025e-3,4.129158337258813e-3,4.134189230076601e-3,4.139220122894389e-3,4.144251015712177e-3,4.149281908529965e-3,4.154312801347753e-3,4.159343694165541e-3,4.164374586983329e-3,4.169405479801117e-3,4.1744363726189055e-3,4.1794672654366935e-3,4.184498158254482e-3,4.18952905107227e-3,4.194559943890057e-3,4.199590836707845e-3,4.204621729525633e-3,4.209652622343421e-3,4.214683515161209e-3,4.219714407978997e-3,4.224745300796785e-3,4.229776193614573e-3,4.234807086432361e-3,4.2398379792501495e-3,4.2448688720679376e-3,4.249899764885726e-3,4.254930657703514e-3,4.259961550521302e-3,4.26499244333909e-3,4.270023336156878e-3,4.275054228974666e-3,4.280085121792453e-3,4.285116014610241e-3,4.290146907428029e-3,4.295177800245817e-3,4.3002086930636054e-3,4.3052395858813935e-3,4.310270478699182e-3,4.31530137151697e-3,4.320332264334758e-3,4.325363157152546e-3,4.330394049970334e-3,4.335424942788122e-3,4.34045583560591e-3,4.345486728423698e-3,4.350517621241486e-3,4.355548514059273e-3,4.360579406877061e-3,4.3656102996948495e-3,4.3706411925126375e-3,4.375672085330426e-3,4.380702978148214e-3,4.385733870966002e-3,4.39076476378379e-3,4.395795656601578e-3,4.400826549419366e-3,4.405857442237154e-3,4.410888335054942e-3,4.41591922787273e-3,4.420950120690518e-3,4.425981013508306e-3,4.431011906326094e-3,4.436042799143882e-3,4.44107369196167e-3,4.446104584779458e-3,4.451135477597246e-3,4.456166370415034e-3,4.461197263232822e-3,4.46622815605061e-3,4.471259048868398e-3,4.476289941686186e-3,4.481320834503974e-3,4.486351727321762e-3,4.49138262013955e-3,4.496413512957338e-3,4.5014444057751265e-3,4.5064752985929145e-3,4.511506191410702e-3,4.51653708422849e-3,4.521567977046278e-3,4.526598869864066e-3,4.531629762681854e-3,4.536660655499642e-3,4.54169154831743e-3,4.546722441135218e-3,4.551753333953006e-3,4.556784226770794e-3],"kdeType":"time","kdePDF":[292.63363038353594,316.9824720615486,365.60170202461086,438.31921088524325,534.849628019641,654.7878444809832,797.6329326889798,962.851582207484,1149.9756686792616,1358.7114496604318,1589.023198670401,1841.1469024348635,2115.4935338019486,2412.417299987644,2731.849938811908,3072.83264185146,3433.0060350030526,3808.1394579268062,4191.788818479369,4575.165454429801,4947.277426714598,5295.3724977859,5605.673111061562,5864.352933393015,6058.666940322958,6178.11744246498,6215.521410505897,6167.843829573971,6036.680022598828,5828.306848884334,5553.274951561105,5225.574774585579,4861.468173174463,4478.124556680581,4092.2267055803086,3718.711650869739,3369.7864707183517,3054.312903869864,2777.5974383792495,2541.565617192601,2345.250323521759,2185.490492658699,2057.722017666341,1956.7460380011573,1877.3782804114965,1814.9123465714504,1765.36518724577,1725.5099668075409,1692.735713935273,1664.8001761515222,1639.5579149643904,1614.746513324072,1587.8983793547575,1556.4155970721124,1517.8056755661387,1470.0349238749784,1411.9228874586922,1343.4841314230107,1266.127540930958,1182.648162617727,1096.9872222798508,1013.7832589743274,937.780737809048,873.192609927644,823.1239660813659,789.1535407375237,771.1411725333128,767.2886678797665,774.4370078988185,788.5428943507535,805.2494338810089,820.4541278947571,830.7839494477377,833.9103733089169,828.6717680592438,815.0091670396421,793.7558112578373,766.343669275136,734.4968405621469,699.9718173989265,664.3817214919121,629.1127889082273,595.3147764693933,563.9297569471054,535.7200112715735,511.26529949624415,490.9186353675738,474.73119045117085,462.3740630437056,453.0920175644428,445.7198050381191,438.77687721549796,430.6357997877727,419.73956146409927,404.82901453306584,385.13761057009424,360.5171898228873,331.47362638367537,299.1102448597261,264.99496111363845,230.9796443886665,199.0047288370161,170.91850998222648,148.3309387179248,132.5095591176728,124.31429268777632,124.16101382409268,132.00269033495312,147.32085167581073,169.127290584888,195.98328151484296,226.04826384862156,257.1697891299465,287.02095615764125,313.28165867598295,333.84830655907393,347.0465664657594,351.81620698111965,347.8382747264169,335.582728438279,316.267579579916,291.7353845594984,264.26598683110734,236.35271257404406,210.47126847324296,188.86673290128428,173.37626605925425,165.29636144253521]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":14,"reportName":"ByteString/HashMap/revsorted","reportOutliers":{"highSevere":1,"highMild":2,"lowMild":0,"samplesSeen":37,"lowSevere":0},"reportMeasured":[[3.483655000309227e-3,3.4838549999989255e-3,6940274,1,null,null,null,null,null,null,null],[8.150654999553808e-3,8.15074000000493e-3,16236721,2,null,null,null,null,null,null,null],[1.210476899996138e-2,1.2098733999991396e-2,24113391,3,null,null,null,null,null,null,null],[1.5876741999818478e-2,1.5876730000002226e-2,31626893,4,null,null,null,null,null,null,null],[2.083893600047304e-2,2.083882499999845e-2,41511349,5,null,null,null,null,null,null,null],[2.4013084000216622e-2,2.4014465999997014e-2,47837220,6,null,null,null,null,null,null,null],[2.8466252999351127e-2,2.846621000000482e-2,56705134,7,null,null,null,null,null,null,null],[3.243092000047909e-2,3.243083600000318e-2,64602576,8,null,null,null,null,null,null,null],[3.628020099949936e-2,3.627986499999736e-2,72269974,9,null,null,null,null,null,null,null],[3.989974400064966e-2,3.989951399999825e-2,79480199,10,null,null,null,null,null,null,null],[4.368214900023304e-2,4.3681866000000014e-2,87014643,11,null,null,null,null,null,null,null],[4.847340600008465e-2,4.847305399999868e-2,96558781,12,null,null,null,null,null,null,null],[5.230804899929353e-2,5.230129000000261e-2,104197087,13,null,null,null,null,null,null,null],[5.654618499920616e-2,5.653979599999559e-2,112639667,14,null,null,null,null,null,null,null],[6.308197999987897e-2,6.303111500000114e-2,125659720,15,null,null,null,null,null,null,null],[6.480945099974633e-2,6.480899700000009e-2,129100147,16,null,null,null,null,null,null,null],[6.776835800064873e-2,6.776771799999892e-2,134993694,17,null,null,null,null,null,null,null],[7.286090400066314e-2,7.28422449999897e-2,145137863,18,null,null,null,null,null,null,null],[7.642078600019886e-2,7.641511899998932e-2,152229387,19,null,null,null,null,null,null,null],[8.13036320005267e-2,8.130281200000411e-2,161955673,20,null,null,null,null,null,null,null],[8.46156190000329e-2,8.461584100000152e-2,168555139,21,null,null,null,null,null,null,null],[8.841974200004188e-2,8.841884199999583e-2,176130885,22,null,null,null,null,null,null,null],[9.315548700033105e-2,9.315456999999583e-2,185564167,23,null,null,null,null,null,null,null],[0.10022901499996806,0.10022829599999739,199655170,25,null,null,null,null,null,null,null],[0.10541847500007862,0.10541948699999182,209995886,26,null,null,null,null,null,null,null],[0.11121045400068397,0.11120927300000005,221529160,27,null,null,null,null,null,null,null],[0.11383615599970653,0.11383502599998963,226759761,28,null,null,null,null,null,null,null],[0.12196529700031533,0.12195705299998849,242952590,30,null,null,null,null,null,null,null],[0.13246785800038197,0.13245437099999435,263873816,31,null,null,null,null,null,null,null],[0.14293838899993716,0.1429311819999981,284734110,33,null,null,null,null,null,null,null],[0.15370618199995079,0.1537046269999962,306179886,35,null,null,null,null,null,null,null],[0.16212746200017136,0.16212556400000722,322954257,36,null,null,null,null,null,null,null],[0.15969439299988153,0.15969274700000824,318108211,38,null,null,null,null,null,null,null],[0.1625515470004757,0.162542277,323800254,40,null,null,null,null,null,null,null],[0.17143731200030743,0.1714151070000014,341500134,42,null,null,null,null,null,null,null],[0.18451108099998237,0.18450896899999236,367542147,44,null,null,null,null,null,null,null],[0.19326596799965046,0.19326367399999356,384981520,47,null,null,null,null,null,null,null],[0.21001610399980564,0.21001413199999774,418348402,49,null,null,null,null,null,null,null],[0.21647058300004574,0.21646809000000644,431204626,52,null,null,null,null,null,null,null],[0.2240731739993862,0.22405740499999638,446349060,54,null,null,null,null,null,null,null],[0.23251180300030683,0.23250292000000172,463158123,57,null,null,null,null,null,null,null],[0.24321701999997458,0.243214119000001,484482705,60,null,null,null,null,null,null,null],[0.25720452000041405,0.2571950840000028,512345651,63,null,null,null,null,null,null,null],[0.2731833210000332,0.27317427799999905,544174898,66,null,null,null,null,null,null,null]]}]'></div>+ </div>++ <aside id="controls-explanation" class="explanation no-print">+ <h1><a href="#controls-explanation">controls</a></h1>++ <p>+ The overview chart can be controlled by clicking the following elements:+ <ul>+ <li><em>a bar or its label</em> zooms the x-axis to that bar</li>+ <li><em>the background</em> resets zoom to the entire chart</li>+ <li><em>the x-axis</em> toggles between linear and logarithmic scale</li>+ <li><em>the chevron</em> in the top-right toggles the the legend</li>+ <li><em>a group name in the legend</em> shows/hides that group</li>+ </ul>+ </p>++ <p>+ The overview chart supports the following sort orders:+ <ul>+ <li><em>index</em> order is the order as the benchmarks are defined in criterion</li>+ <li><em>lexical</em> order sorts groups left-to-right, alphabetically</li>+ <li><em>colexical</em> order sorts groups right-to-left, alphabetically</li>+ <li><em>time ascending/descending</em> order sorts by the estimated mean execution time</li>+ </ul>+ </p>++ </aside>++ <aside id="grokularation" class="explanation">++ <h1><a>understanding this report</a></h1>++ <p>+ In this report, each function benchmarked by criterion is assigned a section of its own.+ <span class="no-print">The charts in each section are active; if you hover your mouse over data points and annotations, you will see more details.</span>+ </p>++ <ul>+ <li>+ The chart on the left is a <a href="http://en.wikipedia.org/wiki/Kernel_density_estimation">kernel density estimate</a> (also known as a KDE) of time measurements.+ This graphs the probability of any given time measurement occurring.+ A spike indicates that a measurement of a particular time occurred; its height indicates how often that measurement was repeated.+ </li>++ <li>+ The chart on the right is the raw data from which the kernel density estimate is built.+ The <em>x</em>-axis indicates the number of loop iterations, while the <em>y</em>-axis shows measured execution time for the given number of loop iterations.+ The line behind the values is the linear regression estimate of execution time for a given number of iterations.+ Ideally, all measurements will be on (or very near) this line.+ The transparent area behind it shows the confidence interval for the execution time estimate.+ </li>+ </ul>++ <p>+ Under the charts is a small table.+ The first two rows are the results of a linear regression run on the measurements displayed in the right-hand chart.+ </p>++ <ul>+ <li>+ <em>OLS regression</em> indicates the time estimated for a single loop iteration using an ordinary least-squares regression model.+ This number is more accurate than the <em>mean</em> estimate below it, as it more effectively eliminates measurement overhead and other constant factors.+ </li>+ <li>+ <em>R<sup>2</sup>; goodness-of-fit</em> is a measure of how accurately the linear regression model fits the observed measurements.+ If the measurements are not too noisy, R<sup>2</sup>; should lie between 0.99 and 1, indicating an excellent fit.+ If the number is below 0.99, something is confounding the accuracy of the linear model.+ </li>+ <li>+ <em>Mean execution time</em> and <em>standard deviation</em> are statistics calculated from execution time divided by number of iterations.+ </li>+ </ul>++ <p>+ We use a statistical technique called the <a href="http://en.wikipedia.org/wiki/Bootstrapping_(statistics)">bootstrap</a> to provide confidence intervals on our estimates.+ The bootstrap-derived upper and lower bounds on estimates let you see how accurate we believe those estimates to be.+ <span class="no-print">(Hover the mouse over the table headers to see the confidence levels.)</span>+ </p>++ <p>+ A noisy benchmarking environment can cause some or many measurements to fall far from the mean.+ These outlying measurements can have a significant inflationary effect on the estimate of the standard deviation.+ We calculate and display an estimate of the extent to which the standard deviation has been inflated by outliers.+ </p>++ </aside>++ <footer>+ <div class="content">+ <h1 class="colophon-header">colophon</h1>+ <p>+ This report was created using the <a href="http://hackage.haskell.org/package/criterion">criterion</a>+ benchmark execution and performance analysis tool.+ </p>+ <p>+ Criterion is developed and maintained+ by <a href="http://www.serpentine.com/blog/">Bryan O'Sullivan</a>.+ </p>+ </div>+ </footer>+</body>+</html>