From 23db5894414b45ade4ffe986b55c6a689e2cea83 Mon Sep 17 00:00:00 2001 From: frankwswang Date: Tue, 24 Aug 2021 23:38:23 -0400 Subject: [PATCH 01/33] Code optimization. --- src/HartreeFock.jl | 19 ++++--- src/Optimization.jl | 2 +- src/Tools.jl | 134 +++++++++++++++++++++----------------------- 3 files changed, 76 insertions(+), 79 deletions(-) diff --git a/src/HartreeFock.jl b/src/HartreeFock.jl index 13575b6a..e951d8c8 100644 --- a/src/HartreeFock.jl +++ b/src/HartreeFock.jl @@ -226,24 +226,25 @@ function runHF(gtb::BasisSetData, Hcore = gtb.getHcore(mol, nucCoords) X = getXmethod(gtb.S) initialC isa Symbol && (initialC = guessC(gtb.S, Hcore; X, method=initialC)) - runHFcore(Val(HFtype), N, initialC, Hcore, gtb.eeI, gtb.S, X; + runHFcore(Val(HFtype), N, Hcore, gtb.eeI, gtb.S, X, initialC; scfConfig, printInfo, maxSteps) end -runHFcore(::Val{:RHF}, N::Int, C, Hcore, HeeI, S, X; +runHFcore(::Val{:RHF}, N::Int, Hcore, HeeI, S, X=getX(S), C=guessC(S, Hcore; X); scfConfig, printInfo::Bool=true, maxSteps::Int=1000) = -runHFcore(N, C, Hcore, HeeI, S, X; scfConfig, printInfo, maxSteps) +runHFcore(N, Hcore, HeeI, S, X, C; scfConfig, printInfo, maxSteps) -runHFcore(::Val{:UHF}, N, C, Hcore, HeeI, S, X; +runHFcore(::Val{:UHF}, N, Hcore, HeeI, S, X=getX(S), C=guessC(S, Hcore; X); scfConfig, printInfo::Bool=true, maxSteps::Int=1000) = -runHFcore((N isa Tuple ? N : (N÷2, N-N÷2)), C, Hcore, HeeI, S, X; +runHFcore((N isa Tuple ? N : (N÷2, N-N÷2)), Hcore, HeeI, S, X, C; scfConfig, printInfo, maxSteps) -function runHFcore(N::Union{NTuple{2, Int}, Int}, - C::Union{Array{<:Number, 2}, NTuple{2, Array{<:Number, 2}}}, +function runHFcore(N::Union{NTuple{2, Int}, Int}, Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, - S::Array{<:Number, 2}, X::Array{<:Number, 2}; scfConfig::SCFconfig{L}, - printInfo::Bool=true, maxSteps::Int=1000) where {L} + S::Array{<:Number, 2}, X::Array{<:Number, 2}, + C::Union{Array{<:Number, 2}, NTuple{2, Array{<:Number, 2}}}; + scfConfig::SCFconfig{L}, printInfo::Bool=true, + maxSteps::Int=1000) where {L} @assert maxSteps > 0 vars = initializeSCF(Hcore, HeeI, C, N) Etots = (vars isa Tuple) ? vars[1].shared.Etots : vars.shared.Etots diff --git a/src/Optimization.jl b/src/Optimization.jl index 60ed42bb..4c044ca6 100644 --- a/src/Optimization.jl +++ b/src/Optimization.jl @@ -18,7 +18,7 @@ end function defaultECmethod(HFtype, Hcore, HeeI, S, Ne) X = getX(S) - res = runHFcore(Val(HFtype), Ne, guessC(S, Hcore; X), Hcore, HeeI, S, X, + res = runHFcore(Val(HFtype), Ne, Hcore, HeeI, S, X, guessC(S, Hcore; X), scfConfig=SCFconfig([:ADIIS, :DIIS, :SD], [ 1e-4, 1e-8, 1e-12]), printInfo=false) res.E0HF, res.C diff --git a/src/Tools.jl b/src/Tools.jl index 840e44e4..91fc8f12 100644 --- a/src/Tools.jl +++ b/src/Tools.jl @@ -1,4 +1,4 @@ -export hasEqual, hasIdentical, hasBoolRelation, ArrayPointer, markUnique, flatten, splitTerm +export hasEqual, hasIdentical, hasBoolRelation, markUnique, getUnique!, flatten, splitTerm using Statistics: std, mean using Symbolics @@ -27,9 +27,11 @@ end @compareLength inputArg1 inputArg2 argNames::String... -> length(inputArg1) -A macro that checks whether the lengths of 2 `Arrays`/`Tuples` are equal. It throws a detailed ERROR message when the lengths are not equal. +A macro that checks whether the lengths of 2 `Arrays`/`Tuples` are equal. It throws +a detailed ERROR message when the lengths are not equal. -You can specify the name for the compared variables in arguments for better ERROR information. +You can specify the name for the compared variables in arguments for better ERROR +information. ≡≡≡ Example(s) ≡≡≡ @@ -63,11 +65,13 @@ macro compareLength(inputArg1, inputArg2, argNames...) local arg1 = $(esc(inputArg1)) local arg2 = $(esc(inputArg2)) type = Union{AbstractArray, Tuple} - (!(arg1 isa type && arg2 isa type)) && error("The compared objects have to be Arrays or Tuples!\n") + (!(arg1 isa type && arg2 isa type)) && error("The compared objects have to be ", + "Arrays or Tuples!\n") if length(arg1) != length(arg2) for i = 1:length($argNames) # Replace the defualt type control ERROR message. - !($argNames[i] isa String) && error("The object's name has to be a String!\n") + !($argNames[i] isa String) && error("The object's name has to be a "* + "`String`!\n") $ns[i] = $argNames[i]*" ($($ns0[i]))" end error("""The lengths of $($ns[1]) and $($ns[2]) are NOT equal. @@ -82,13 +86,18 @@ end """ - hasBoolRelation(boolOp::Function, obj1, obj2; ignoreFunction=false, ignoreContainerType=false) -> Bool + hasBoolRelation(boolOp::Function, obj1, obj2; ignoreFunction=false, + ignoreContainerType=false) -> Bool -Recursively apply the specified boolean operator to all the fields within 2 objects (normally 2 `struct`s in the same type). It returns `true` only if all comparisons performed return `true`. +Recursively apply the specified boolean operator to all the fields within 2 objects +(normally 2 `struct`s in the same type). It returns `true` only if all comparisons +performed return `true`. -If `ignoreFunction = true`, the function will ignore comparisons between Function-type fields. +If `ignoreFunction = true`, the function will ignore comparisons between Function-type +fields. -If `ignoreContainerType = true`, the funtion will ignore the type difference of the (outermost) container as long as the boolean operator returns true for inside fields. +If `ignoreContainerType = true`, the funtion will ignore the type difference of the +(outermost) container as long as the boolean operator returns true for inside fields. ≡≡≡ Example(s) ≡≡≡ @@ -134,27 +143,18 @@ function hasBoolRelation(boolOp::Function, obj1, obj2; res = true t1 = typeof(obj1) t2 = typeof(obj2) - # println("s0") - # @show obj1 obj2 if (t1 <: Function) && (t2 <: Function) - # println("s1") - # println("res 1 = $(res)") ignoreFunction ? (return true) : (return boolOp(obj1, obj2)) elseif (t1 <: Number) && (t2 <: Number) return boolOp(obj1, obj2) elseif t1 != t2 && !ignoreContainerType - # println("s2") - # println("res 2 = $(res)") return false elseif obj1 isa Union{Array, Tuple} - # println("s3") length(obj1) != length(obj2) && (return false) if ([i isa Number for i in obj1] |> prod) && ([i isa Number for i in obj2] |> prod) - # println("s3-1") return boolOp.(obj1, obj2) |> prod end if obj1 isa Matrix - # println("s3-2") size(obj1) != size(obj2) && (return false) obj1 = vec(obj1) # Still linked to the original container. obj2 = vec(obj2) @@ -164,27 +164,21 @@ function hasBoolRelation(boolOp::Function, obj1, obj2; !res && (return false) end else - # println("s4") fs1 = fieldnames(t1) fs2 = fieldnames(t2) - # @show fs1 fs2 if fs1 == fs2 - # println("s4-1") if length(fs1) == 0 - # println("s4-1-1") - # @show obj1 obj2 res = boolOp(obj1, obj2) else - # println("s4-1-2") for i in fs1 - isdefined(obj1, i) == (fieldDefined = isdefined(obj2, i)) && (fieldDefined ? nothing : continue) - res *= hasBoolRelation(boolOp, getproperty(obj1, i), getproperty(obj2, i); ignoreFunction) + isdefined(obj1, i) == (fieldDefined = isdefined(obj2, i)) && + (fieldDefined ? nothing : continue) + res *= hasBoolRelation(boolOp, getproperty(obj1, i), + getproperty(obj2, i); ignoreFunction) !res && (return false) end end else - # println("s4-2") - # println("res 3 = $(res)") return false end end @@ -194,9 +188,11 @@ end """ - hasBoolRelation(boolOp::Function, obj1, obj2, obj3...; ignoreFunction=false, ignoreContainerType=false) -> Bool + hasBoolRelation(boolOp::Function, obj1, obj2, obj3...; + ignoreFunction=false, ignoreContainerType=false) -> Bool -hasBoolRelation for more than 2 objects. E.g.: `hasBoolRelation(>, a, b, c)` is equivalent to `hasBoolRelation(>, a, b) && hasBoolRelation(>, b, c)`. +hasBoolRelation for more than 2 objects. E.g.: `hasBoolRelation(>, a, b, c)` is equivalent +to `hasBoolRelation(>, a, b) && hasBoolRelation(>, b, c)`. ≡≡≡ Example(s) ≡≡≡ @@ -223,17 +219,8 @@ true function hasBoolRelation(boolOp::Function, obj1, obj2, obj3...; ignoreFunction=false, ignoreContainerType=false) res = hasBoolRelation(boolOp, obj1, obj2; ignoreFunction, ignoreContainerType) - # println("s1") - # len = length(obj3) - # if len > 0 - # # println("s2") - # tmp = obj3[1] - # res *= hasBoolRelation(boolOp, obj2, tmp; ignoreFunction, ignoreContainerType) - # end tmp = obj2 - # if res && len > 1 if res - # println("s3") for i in obj3[1:end] res *= hasBoolRelation(boolOp, tmp, i; ignoreFunction, ignoreContainerType) !res && break @@ -250,9 +237,11 @@ end Compare if two objects are the euqal. -If `ignoreFunction = true` then the function will pop up a warning message when a field is a function. +If `ignoreFunction = true` then the function will pop up a warning message when a field is +a function. -If `ignoreContainerType = true` then the funtion will ignore the type difference of the (outermost) container as long as the inside fields are euqal. +If `ignoreContainerType = true` then the funtion will ignore the type difference of the +(outermost) container as long as the inside fields are euqal. This function is an instantiation of `hasBoolRelation`. @@ -283,13 +272,16 @@ hasBoolRelation(==, obj1, obj2, obj3...; ignoreFunction, ignoreContainerType) """ - hasIdentical(obj1, obj2, obj3...; ignoreFunction=false, ignoreContainerType=false) -> Bool + hasIdentical(obj1, obj2, obj3...; + ignoreFunction=false, ignoreContainerType=false) -> Bool Compare if two objects are the Identical. An instantiation of `hasBoolRelation`. -If `ignoreFunction = true` then the function will pop up a warning message when a field is a function. +If `ignoreFunction = true` then the function will pop up a warning message when a field is +a function. -If `ignoreContainerType = true` then the funtion will ignore the type difference of the (outermost) container as long as the inside fields are identical. +If `ignoreContainerType = true` then the funtion will ignore the type difference of the +(outermost) container as long as the inside fields are identical. This function is an instantiation of `hasBoolRelation`. @@ -321,12 +313,14 @@ hasBoolRelation(===, obj1, obj2, obj3...; ignoreFunction, ignoreContainerType) """ - printStyledInfo(str::String; title::String="INFO:\\n", titleColor::Symbol=:light_blue) -> nothing + printStyledInfo(str::String; + title::String="INFO:\\n", titleColor::Symbol=:light_blue) -> nothing Print info with colorful title and automatically highlighted code blocks enclosed by ` `. -If you want to highlight other contents in different colors, you can also put them inside ` ` and start it with "///theColorSymbolName///". -The available color names follows the values of `color` keyword arguement in function `printstyled`. +If you want to highlight other contents in different colors, you can also put them inside +` ` and start it with "///theColorSymbolName///". The available color names follows the +values of `color` keyword arguement in function `printstyled`. NOTE: There can only be one color in one ` ` quote. @@ -350,9 +344,6 @@ function printStyledInfo(str::String; for i = 1:2:l-1 subStr1 = str[codeQuotes[i][]+1:end] blockStr = subStr1[1 : findfirst("`", subStr1)[]-1] - # println("\n1") - # @show blockStr - # println() blockColor = codeColor startLoc = findfirst("///", blockStr) if startLoc !== nothing @@ -361,9 +352,6 @@ function printStyledInfo(str::String; colorKey = Symbol(blockStr[startLoc[3]+1 : endLoc[1]-1]) blockColor = colorKey blockStr = blockStr[1 : startLoc[1]-1]*blockStr[endLoc[3]+1 : end] - # println("\n2") - # @show blockStr - # println() end end printstyled(blockStr, color=blockColor) @@ -384,7 +372,8 @@ end flatten(a::Array) -> Array -Flatten `a::Union{Array, Tuple}` that contains `Array`s and/or `Tuple`s. Only operate on the outermost layer. +Flatten `a::Union{Array, Tuple}` that contains `Array`s and/or `Tuple`s. Only operate on +the outermost layer. ≡≡≡ Example(s) ≡≡≡ @@ -416,11 +405,11 @@ end """ - arrayAlloc(arrayLength::Int, NumberExample::T) where {T<:Real} -> Ptr{T} + arrayAlloc(arrayLength::Int, + anExampleOrType::Union{T, Type{T}}) where {T<:Real} -> Ptr{T} - arrayAlloc(arrayLength::Int, elementType::Type{T}) where {T<:Real} -> Ptr{T} - -Allocate the memory for an array of specified length and element type, then return the pointer to it. +Allocate the memory for an array of specified length and element type, then return the +pointer to it. """ function arrayAlloc(arrayLength::Int, elementType::Type{T}) where {T<:Real} memoryLen = arrayLength*sizeof(elementType) |> Cint @@ -440,16 +429,22 @@ Stores a pointer to the actual address of an array. `ptr::Ptr{T}`: Pointer pointing to the memory address of the first element of the array. -`arr::Array{T, N}`: The mutable array linked to the pointer. As long as the pointer (memory) is not freed, the array is safely preserved. +`arr::Array{T, N}`: The mutable array linked to the pointer. As long as the pointer + (memory) is not freed, the array is safely preserved. ≡≡≡ Initialization Method(s) ≡≡≡ - ArrayPointer(arr::Array{<:Real, N}; showReminder::Bool=true) where {N} -> ArrayPointer{T, N} + ArrayPointer(arr::Array{<:Real, N}; + showReminder::Bool=true) where {N} -> ArrayPointer{T, N} + +Create a `ArrayPointer` that contains a `Ptr` pointing to the actual memory address of the +(1st element of the) `Array`. -Create a `ArrayPointer` that contains a `Ptr` pointing to the actual memory address of the (1st element of the) `Array`. +To avoid memory leaking, the user should use `free(x.ptr)` after the usage of +`x::ArrayPointer` to free the occupied memory. -To avoid memory leaking, the user should use `free(x.ptr)` after the usage of `x::ArrayPointer` to free the occupied memory. -If `showReminder=true`, the constuctor will pop up a message to remind the user of such operation. +If `showReminder=true`, the constuctor will pop up a message to remind the user of +such operation. """ struct ArrayPointer{T, N} <: Any ptr::Ptr{T} @@ -474,11 +469,12 @@ end markUnique(arr::AbstractArray, args...; compareFunction::Function = hasEqual, kws...) -Return a `markingList` using `Int` number to mark each different elements from (and inside) the input argument(s) and -a `uniqueList` to contain all the unique elements when `compareFunction` is set to `hasEqual` (in default). +Return a `markingList` using `Int` number to mark each different elements from +(and inside) the input argument(s) and a `uniqueList` to contain all the unique +elements when `compareFunction` is set to `hasEqual` (in default). -`args` and `kws` are positional arguments and keywords argguments respectively as parameters of the specified -`compareFunction`. +`args` and `kws` are positional arguments and keywords argguments respectively as +parameters of the specified `compareFunction`. ≡≡≡ Example(s) ≡≡≡ @@ -539,7 +535,6 @@ function getUnique!(arr::Array, args...; compareFunction::Function = hasEqual, k isNew && push!(cmprList, arr[i]) push!(delList, !isNew) end - # @show delList deleteat!(arr, delList) end @@ -564,7 +559,8 @@ end """ -Recursively find the final value using the value of each iteration as the key for the next search. +Recursively find the final value using the value of each iteration as the key for the +next search. """ function recursivelyGet(dict::Dict, startKey) res = nothing From bdc4c7bf5c01b50145462aa2860ef3a56bd258b7 Mon Sep 17 00:00:00 2001 From: frankwswang Date: Tue, 24 Aug 2021 23:51:23 -0400 Subject: [PATCH 02/33] Defined defaultSCFconfig. --- src/HartreeFock.jl | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/HartreeFock.jl b/src/HartreeFock.jl index e951d8c8..78a31c39 100644 --- a/src/HartreeFock.jl +++ b/src/HartreeFock.jl @@ -200,9 +200,12 @@ end guessCcore(::Val{:Hcore}, S, Hcore; X=getX(S), _kws...) = getC(X, Hcore) +const defaultSCFconfig = SCFconfig([:ADIIS, :DIIS, :SD], [1e-4, 1e-8, 1e-12]) + + function runHF(bs::Array{<:AbstractFloatingGTBasisFunc, 1}, mol, nucCoords, N=getCharge(mol); initialC=:Hcore, getXmethod=getX, - scfConfig=SCFconfig([:ADIIS, :DIIS, :SD], [1e-4, 1e-8, 1e-12]), + scfConfig=defaultSCFconfig, HFtype=:RHF, printInfo::Bool=true, maxSteps::Int=1000) @assert length(mol) == length(nucCoords) @assert (basisSize(bs) |> sum) >= ceil(N/2) @@ -219,7 +222,7 @@ function runHF(gtb::BasisSetData, NTuple{2, Array{<:Number, 2}}, Symbol}=:Hcore, getXmethod::Function=getX, - scfConfig::SCFconfig=SCFconfig([:ADIIS, :DIIS, :SD], [1e-4, 1e-8, 1e-12]), + scfConfig::SCFconfig=defaultSCFconfig, HFtype::Symbol=:RHF, printInfo::Bool=true, maxSteps::Int=1000) @assert length(mol) == length(nucCoords) @assert typeof(gtb).parameters[1] >= ceil(N/2) From 65590dca8d36844f0465a743ce110242b8919d17 Mon Sep 17 00:00:00 2001 From: frankwswang Date: Wed, 25 Aug 2021 14:08:17 -0400 Subject: [PATCH 03/33] Separate BasisFunc(s) constructors to genBasisFunc --- examples/Jmol.jl | 4 +- examples/OptimizeParams.jl | 2 +- src/Basis.jl | 104 +++++++++++--------- test/unit-tests/Basis-test.jl | 40 ++++---- test/unit-tests/HartreeFock-test.jl | 2 +- test/unit-tests/Integration/OneBody-test.jl | 4 +- test/unit-tests/Integration/TwoBody-test.jl | 2 +- test/unit-tests/Optimization-test.jl | 6 +- test/unit-tests/Overload-test.jl | 8 +- test/unit-tests/SubModule/Molden-test.jl | 4 +- 10 files changed, 91 insertions(+), 85 deletions(-) diff --git a/examples/Jmol.jl b/examples/Jmol.jl index 0da6dd92..06496635 100644 --- a/examples/Jmol.jl +++ b/examples/Jmol.jl @@ -27,9 +27,9 @@ for (nuc, nucCoords, molName, iMol) in zip(mols, molCoords, molNames, 1:length(m flag = (bfCoord == nucCoords) if flag nucConfig = [(bf, i) for i in nuc] - bs = BasisFunc.(bfCoord, nucConfig) |> flatten + bs = genBasisFunc.(bfCoord, nucConfig) |> flatten else - bs = BasisFunc.(bfCoord, bf) |> flatten + bs = genBasisFunc.(bfCoord, bf) |> flatten bsName = "-Float"*bsName end diff --git a/examples/OptimizeParams.jl b/examples/OptimizeParams.jl index eec7b5ca..6b4be3d8 100644 --- a/examples/OptimizeParams.jl +++ b/examples/OptimizeParams.jl @@ -6,7 +6,7 @@ grid = GridBox(1, 3.0) gf1 = GaussFunc(0.7,1) -bs = BasisFunc.(grid.box, Ref([gf1])) +bs = genBasisFunc.(grid.box, Ref([gf1])) pars = uniqueParams!(bs, ignoreMapping=true) diff --git a/src/Basis.jl b/src/Basis.jl index 411def57..1072e269 100644 --- a/src/Basis.jl +++ b/src/Basis.jl @@ -1,6 +1,6 @@ -export GaussFunc, BasisFuncMix, mergeBasisFuncs, genBFuncsFromText, genBasisFuncText, BasisFunc, BasisFuncs, -BasisFuncMix, GTBasis, changeCenter, basisSize, getParams, uniqueParams!, getVar, getVars, expressionOf, -assignCenter! +export GaussFunc, BasisFuncMix, mergeBasisFuncs, genBFuncsFromText, genBasisFuncText, + BasisFunc, BasisFuncs, genBasisFunc, BasisFuncMix, GTBasis, changeCenter, + basisSize, getParams, uniqueParams!, getVar, getVars, expressionOf, assignCenter! using Symbolics using SymbolicUtils @@ -74,7 +74,8 @@ struct BasisFunc{S, GN} <: FloatingGTBasisFunc{S, GN, 1} normalizeGTO::Bool param::Tuple{Vararg{<:ParamBox}} - function BasisFunc(cen::Tuple{Vararg{<:ParamBox}}, gs::Array{<:GaussFunc, 1}, ijk::Array{Int, 1}; normalizeGTO::Bool=false) + function BasisFunc(cen::Tuple{Vararg{<:ParamBox}}, gs::Array{<:GaussFunc, 1}, + ijk::Array{Int, 1}, normalizeGTO::Bool) @assert prod(length(ijk) == 3) "The length of `ijk` should be 3." subshell = SubshellNames[sum(ijk)+1] pars = ParamBox[] @@ -104,8 +105,8 @@ struct BasisFuncs{S, GN, ON} <: FloatingGTBasisFunc{S, GN, ON} normalizeGTO::Bool param::Tuple{Vararg{<:ParamBox}} - function BasisFuncs(cen::Tuple{Vararg{<:ParamBox}}, gs::Array{<:GaussFunc, 1}, ijks::Array{Array{Int, 1}, 1}; - normalizeGTO::Bool=false) + function BasisFuncs(cen::Tuple{Vararg{<:ParamBox}}, gs::Array{<:GaussFunc, 1}, + ijks::Array{Array{Int, 1}, 1}, normalizeGTO::Bool=false) @assert prod(length.(ijks) .== 3) "The length of each `ijk` should be 3." ls = sum.(ijks) @assert prod(ls .== ls[1]) "The total angular momentums (of each ijk) should be the same." @@ -126,116 +127,121 @@ end """ - BasisFunc(args..., kws...) -> BasisFunc - BasisFunc(args..., kws...) -> BasisFuncs - BasisFunc(args..., kws...) -> collection + genBasisFunc(args..., kws...) -> BasisFunc + genBasisFunc(args..., kws...) -> BasisFuncs + genBasisFunc(args..., kws...) -> collection -Constructoer of `BasisFunc` and `BasisFunc`, but it also returns different kinds of collections of them based on +Constructoer of `BasisFunc` and `BasisFuncs`, but it also returns different kinds of collections of them based on the applied methods. ≡≡≡ Method 1 ≡≡≡ - BasisFunc(coord::AbstractArray, gs::Array{<:GaussFunc, 1}, ijkOrijks::Union{Array{Int, 1}, Array{Array{Int, 1}, 1}}; normalizeGTO::Bool=false) + genBasisFunc(coord::AbstractArray, gs::Array{<:GaussFunc, 1}, ijkOrijks::Union{Array{Int, 1}, Array{Array{Int, 1}, 1}}; normalizeGTO::Bool=false) `ijkOrijks` is the Array of the pseudo-quantum number(s) to specify the angular momentum(s). E.g., s is [0,0,0] and p is [[1,0,0], [0,1,0], [0,0,1]]. ≡≡≡ Example(s) ≡≡≡ - julia> BasisFunc([0,0,0], GaussFunc(2,1), [0,1,0]) + julia> genBasisFunc([0,0,0], GaussFunc(2,1), [0,1,0]) BasisFunc{:P, 1}(gauss, subshell, center)[X⁰Y¹Z⁰][0.0, 0.0, 0.0] ≡≡≡ Method 2 ≡≡≡ - BasisFunc(coord::AbstractArray, gs::Array{<:GaussFunc, 1}, subshell::String="S"; ijkFilter::Array{Bool, 1}=fill(true, SubshellDimList[subshell]), normalizeGTO::Bool=false) + genBasisFunc(coord::AbstractArray, gs::Array{<:GaussFunc, 1}, subshell::String="S"; ijkFilter::Array{Bool, 1}=fill(true, SubshellDimList[subshell]), normalizeGTO::Bool=false) ≡≡≡ Example(s) ≡≡≡ - julia> BasisFunc([0,0,0], GaussFunc(2,1), "S") + julia> genBasisFunc([0,0,0], GaussFunc(2,1), "S") BasisFunc{:S, 1}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0] - julia> BasisFunc([0,0,0], GaussFunc(2,1), "P") + julia> genBasisFunc([0,0,0], GaussFunc(2,1), "P") BasisFuncs{:P, 1, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0] ≡≡≡ Method 3 ≡≡≡ - BasisFunc(coord::AbstractArray, gExpsANDgCons::NTuple{2, Array{<:Real, 1}}, subshell="S"; kw...) + genBasisFunc(coord::AbstractArray, gExpsANDgCons::NTuple{2, Array{<:Real, 1}}, subshell="S"; kw...) Instead of directly inputting `GaussFunc`, one can also input a 2-element `Tuple` of the exponent(s) and contraction coefficient(s) corresponding to the same `GaussFunc`(s). ≡≡≡ Example(s) ≡≡≡ - julia> BasisFunc([0,0,0], (2, 1), "P") + julia> genBasisFunc([0,0,0], (2, 1), "P") BasisFuncs{:P, 1, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0] - julia> BasisFunc([0,0,0], ([2, 1.5], [1, 0.5]), "P") + julia> genBasisFunc([0,0,0], ([2, 1.5], [1, 0.5]), "P") BasisFuncs{:P, 2, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0] ≡≡≡ Method 4 ≡≡≡ - BasisFunc(center, BSKeyANDnuc::Array{Tuple{String, String}, 1}) + genBasisFunc(center, BSKeyANDnuc::Array{Tuple{String, String}, 1}) If the user wants to construct existed atomic basis set(s), they can use the (`Array` of) `(BS_name, Atom_name)` as the second input. If the atom is omitted, then basis set for H is used. ≡≡≡ Example(s) ≡≡≡ - julia> BasisFunc([0,0,0], ("STO-3G", "Li")) + julia> genBasisFunc([0,0,0], ("STO-3G", "Li")) 3-element Vector{Quiqbox.FloatingGTBasisFunc}: BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0] BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0] BasisFuncs{:P, 3, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0] - julia> BasisFunc([0,0,0], "STO-3G") + julia> genBasisFunc([0,0,0], "STO-3G") 1-element Vector{Quiqbox.FloatingGTBasisFunc}: BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0] - julia> BasisFunc([0,0,0], ["STO-2G", "STO-3G"]) + julia> genBasisFunc([0,0,0], ["STO-2G", "STO-3G"]) 2-element Vector{Quiqbox.FloatingGTBasisFunc}: BasisFunc{:S, 2}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0] BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0] - julia> BasisFunc([0,0,0], [("STO-2G", "He"), ("STO-3G", "O")]) + julia> genBasisFunc([0,0,0], [("STO-2G", "He"), ("STO-3G", "O")]) 4-element Vector{Quiqbox.FloatingGTBasisFunc}: BasisFunc{:S, 2}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0] BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0] BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0] BasisFuncs{:P, 3, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0] """ -BasisFunc(cen::Tuple{Vararg{<:ParamBox}}, gs::Array{<:GaussFunc, 1}, ijks::Array{Array{Int, 1}, 1}; normalizeGTO::Bool=false) = -BasisFuncs(cen, gs, ijks; normalizeGTO) +genBasisFunc(cen::Tuple{Vararg{<:ParamBox}}, gs::Array{<:GaussFunc, 1}, + ijk::Array{Int, 1}; normalizeGTO::Bool=false) = +BasisFunc(cen, gs, ijk, normalizeGTO) + +genBasisFunc(cen::Tuple{Vararg{<:ParamBox}}, gs::Array{<:GaussFunc, 1}, + ijks::Array{Array{Int, 1}, 1}; normalizeGTO::Bool=false) = +BasisFuncs(cen, gs, ijks, normalizeGTO) # ijkOrijks::Union{Array{Int, 1}, Array{Array{Int, 1}, 1}} -function BasisFunc(coord::AbstractArray, gs::Array{<:GaussFunc, 1}, ijkOrijks::Array; normalizeGTO::Bool=false) +function genBasisFunc(coord::AbstractArray, gs::Array{<:GaussFunc, 1}, ijkOrijks::Array; normalizeGTO::Bool=false) @assert length(coord) == 3 "The dimension of the center should be 3." x = ParamBox(coord[1], ParamList[:X]) y = ParamBox(coord[2], ParamList[:Y]) z = ParamBox(coord[3], ParamList[:Z]) - BasisFunc((x,y,z), gs, ijkOrijks; normalizeGTO) + genBasisFunc((x,y,z), gs, ijkOrijks; normalizeGTO) end # center::Union{AbstractArray, Tuple{Vararg{<:ParamBox}}} -function BasisFunc(center, gs::Array{<:GaussFunc, 1}, subshell::String="S"; +function genBasisFunc(center, gs::Array{<:GaussFunc, 1}, subshell::String="S"; ijkFilter::Array{Bool, 1}=fill(true, SubshellDimList[subshell]), normalizeGTO::Bool=false) ijkLen = length(ijkFilter) subshellSize = SubshellDimList[subshell] @assert ijkLen == subshellSize "The length of `ijkFilter` should be $(subshellSize) to match the subshell's size." ijks = [SubshellSuborderList[subshell][i] for i in findall(x->x==true, ijkFilter)] length(ijks) == 1 && (ijks = ijks[]) - BasisFunc(center, gs, ijks; normalizeGTO) + genBasisFunc(center, gs, ijks; normalizeGTO) end # ijkOrSubshell::Union{Array, String} -function BasisFunc(center, gExpsANDgCons::NTuple{2, Array{<:Real, 1}}, ijkOrSubshell="S"; kw...) +function genBasisFunc(center, gExpsANDgCons::NTuple{2, Array{<:Real, 1}}, ijkOrSubshell="S"; kw...) @compareLength gExpsANDgCons[1] gExpsANDgCons[2] "exponents" "contraction coefficients" gs = GaussFunc.(gExpsANDgCons[1], gExpsANDgCons[2]) - BasisFunc(center, gs, ijkOrSubshell; kw...) + genBasisFunc(center, gs, ijkOrSubshell; kw...) end -BasisFunc(center, gExpANDgCon::NTuple{2, Real}, ijkOrSubshell ="S"; kw...) = -BasisFunc(center, ([gExpANDgCon[1]], [gExpANDgCon[2]]), ijkOrSubshell; kw...) +genBasisFunc(center, gExpANDgCon::NTuple{2, Real}, ijkOrSubshell ="S"; kw...) = +genBasisFunc(center, ([gExpANDgCon[1]], [gExpANDgCon[2]]), ijkOrSubshell; kw...) -function BasisFunc(center, BSKeyANDnuc::Array{Tuple{String, String}, 1}) +function genBasisFunc(center, BSKeyANDnuc::Array{Tuple{String, String}, 1}) bases = FloatingGTBasisFunc[] for k in BSKeyANDnuc BFMcontent = BasisSetList[k[1]][AtomicNumberList[k[2]]] @@ -244,20 +250,20 @@ function BasisFunc(center, BSKeyANDnuc::Array{Tuple{String, String}, 1}) bases end -BasisFunc(center, BSKeyANDnuc::Tuple{String, String}) = -BasisFunc(center, [BSKeyANDnuc]) +genBasisFunc(center, BSKeyANDnuc::Tuple{String, String}) = +genBasisFunc(center, [BSKeyANDnuc]) -BasisFunc(center, BSkey::Array{String, 1}; nucleus::String="H") = -BasisFunc(center, [(i, nucleus) for i in BSkey]) +genBasisFunc(center, BSkey::Array{String, 1}; nucleus::String="H") = +genBasisFunc(center, [(i, nucleus) for i in BSkey]) -BasisFunc(center, BSkey::String; nucleus::String="H") = -BasisFunc(center, [BSkey]; nucleus) +genBasisFunc(center, BSkey::String; nucleus::String="H") = +genBasisFunc(center, [BSkey]; nucleus) # A few methods for convenient arguments omissions and mutations. -BasisFunc(arg) = BasisFunc([NaN, NaN, NaN], arg) -BasisFunc(arg1, g::GaussFunc, args...; kws...) = BasisFunc(arg1, [g], args...; kws...) -BasisFunc(bf::FloatingGTBasisFunc) = itself(bf) -BasisFunc(bs::Array{<:FloatingGTBasisFunc, 1}) = sortBasisFuncs(bs) +genBasisFunc(arg) = genBasisFunc([NaN, NaN, NaN], arg) +genBasisFunc(arg1, g::GaussFunc, args...; kws...) = genBasisFunc(arg1, [g], args...; kws...) +genBasisFunc(bf::FloatingGTBasisFunc) = itself(bf) +genBasisFunc(bs::Array{<:FloatingGTBasisFunc, 1}) = sortBasisFuncs(bs) struct GTBasis{N, BT} <: BasisSetData{N} @@ -341,12 +347,12 @@ function decomposeBasisFunc(bf::FloatingGTBasisFunc; splitGaussFunc::Bool=false) nRow = 1 if splitGaussFunc for ijk in bf.ijk, g in bf.gauss - push!(res, BasisFunc(cen, [g], ijkOrbitalList[ijk], normalizeGTO=bf.normalizeGTO)) + push!(res, BasisFunc(cen, [g], ijkOrbitalList[ijk], bf.normalizeGTO)) end nRow = bf.gauss |> length else for ijk in bf.ijk - push!(res, BasisFunc(cen, bf.gauss|>collect, ijkOrbitalList[ijk], normalizeGTO=bf.normalizeGTO)) + push!(res, BasisFunc(cen, bf.gauss|>collect, ijkOrbitalList[ijk], bf.normalizeGTO)) end end reshape(res, (nRow, bf.ijk |> length)) @@ -428,12 +434,12 @@ function genBFuncsFromText(content::String; push!(gs1, GaussFunc(data[j][1], data[j][2])) push!(gs2, GaussFunc(data[j][1], data[j][3])) end - append!(bfs, BasisFunc.(Ref(center), [gs1, gs2], ["S", "P"], normalizeGTO=true)) + append!(bfs, genBasisFunc.(Ref(center), [gs1, gs2], ["S", "P"], normalizeGTO=true)) else for j = i+1 : i+ng push!(gs1, GaussFunc(data[j]...)) end - push!(bfs, BasisFunc(center, gs1, (data[i][1] |> string), normalizeGTO=true)) + push!(bfs, genBasisFunc(center, gs1, (data[i][1] |> string), normalizeGTO=true)) end end bfs |> flatten @@ -646,7 +652,7 @@ function orbitalShift(bf::FloatingGTBasisFunc{S, GN, 1}; ijkShift::Array{Int, 1} for (i,j) in zip(gfs,conRatio) i.con[] *= j end - BasisFunc(bf.center, gfs, ijkOrbitalList[bf.ijk[1]] .+ ijkShift; normalizeGTO) + BasisFunc(bf.center, gfs, ijkOrbitalList[bf.ijk[1]] + ijkShift, normalizeGTO) end orbitalShift(bf::FloatingGTBasisFunc{S, 1, 1}, shiftInfo::Array{<:Real, 1}; fixNorm::Bool=false) where {S} = diff --git a/test/unit-tests/Basis-test.jl b/test/unit-tests/Basis-test.jl index ae1b8403..4cb45ab7 100644 --- a/test/unit-tests/Basis-test.jl +++ b/test/unit-tests/Basis-test.jl @@ -34,17 +34,17 @@ for i=1:2 gf1.param[i][] = x[i] end @test hasEqual(gf1, gf2) -# struct BasisFunc +# struct BasisFunc and function genBasisFunc cen = [1,2,3] using Quiqbox: ParamList cenParNames = [ParamList[:X], ParamList[:Y], ParamList[:Z]] cenPar = ParamBox.(cen, cenParNames) |> Tuple -bf1 = BasisFunc(cen, [gf1]) -bf1_1 = BasisFunc(cen, [gf1]) -bf1_2 = BasisFunc(bf1) -bf1_3 = BasisFunc(cenPar, gf1) -bf1_4 = BasisFunc(cenPar, gf1) -bf2 = BasisFunc(cen, [gf2]) +bf1 = genBasisFunc(cen, [gf1]) +bf1_1 = genBasisFunc(cen, [gf1]) +bf1_2 = genBasisFunc(bf1) +bf1_3 = genBasisFunc(cenPar, gf1) +bf1_4 = genBasisFunc(cenPar, gf1) +bf2 = genBasisFunc(cen, [gf2]) @test bf1 !== bf2 @test hasEqual(bf1, bf1_1, bf1_2, bf1_3, bf1_4, bf2) @test hasIdentical(bf1, bf1_2) @@ -55,28 +55,28 @@ bf2 = BasisFunc(cen, [gf2]) @test bf1.subshell == "S" @test bf1 isa BasisFunc -bf11 = BasisFunc(cen, [gf1, gf1]) -bf1_3 = BasisFunc(cen, (exp1, con1)) +bf11 = genBasisFunc(cen, [gf1, gf1]) +bf1_3 = genBasisFunc(cen, (exp1, con1)) @test hasEqual(bf1, bf1_3) @test !hasIdentical(bf1, bf1_3) -bf11_2 = BasisFunc(cen, ([exp1, exp1], [con1, con1])) +bf11_2 = genBasisFunc(cen, ([exp1, exp1], [con1, con1])) @test hasEqual(bf11, bf11_2) @test !hasIdentical(bf11, bf11_2) -bf2_P_norm2 = BasisFunc(cen, [gf2], "P") +bf2_P_norm2 = genBasisFunc(cen, [gf2], "P") @test bf2_P_norm2.subshell == "P" @test bf2_P_norm2 isa BasisFuncs -bf3_1 = BasisFunc([0,0,0], (3,1)) -bf3_2 = BasisFunc([1,0,0], (2,1)) -bf3_3 = BasisFunc([0,0,0], (2,1), "P") -bf3_4 = BasisFunc([0,0,0], (1,1)) -@test BasisFunc([bf3_1, bf3_2, bf3_3, bf3_4]) == [bf3_1, bf3_4, bf3_3, bf3_2] +bf3_1 = genBasisFunc([0,0,0], (3,1)) +bf3_2 = genBasisFunc([1,0,0], (2,1)) +bf3_3 = genBasisFunc([0,0,0], (2,1), "P") +bf3_4 = genBasisFunc([0,0,0], (1,1)) +@test genBasisFunc([bf3_1, bf3_2, bf3_3, bf3_4]) == [bf3_1, bf3_4, bf3_3, bf3_2] # function isFull @test isFull(bf3_1) == true @test isFull(bf3_3) == true -bf4 = BasisFunc([0,0,0], (2,1), [1,0,0]) +bf4 = genBasisFunc([0,0,0], (2,1), [1,0,0]) @test isFull(bf4) == false @test isFull(1) == false @@ -85,7 +85,7 @@ bf4 = BasisFunc([0,0,0], (2,1), [1,0,0]) bfm1 = BasisFuncMix(bf1) @test bfm1 == BasisFuncMix([bf1]) @test BasisFuncMix(BasisFuncMix(bf3_1)) == BasisFuncMix(bf3_1) -bf4_2 = BasisFunc([0,0,0], (2,1), [[1,0,0]]) +bf4_2 = genBasisFunc([0,0,0], (2,1), [[1,0,0]]) bfm2 = BasisFuncMix(bf4) @test hasEqual(bfm2, BasisFuncMix(bf4_2)[]) @@ -126,9 +126,9 @@ lines = (content |> IOBuffer |> readlines) # function assignCenter! -bf5 = BasisFunc("STO-3G")[] +bf5 = genBasisFunc("STO-3G")[] coord = [1,0,0] -bf5_1 = BasisFunc(coord, "STO-3G")[] +bf5_1 = genBasisFunc(coord, "STO-3G")[] @test !hasEqual(bf5, bf5_1) assignCenter!(coord, bf5) @test hasEqual(bf5, bf5_1) diff --git a/test/unit-tests/HartreeFock-test.jl b/test/unit-tests/HartreeFock-test.jl index e84ac623..73c95173 100644 --- a/test/unit-tests/HartreeFock-test.jl +++ b/test/unit-tests/HartreeFock-test.jl @@ -8,7 +8,7 @@ using Suppressor: @suppress_out nucCoords = [[-0.7,0.0,0.0], [0.7,0.0,0.0]] mol = ["H", "H"] - bs = BasisFunc.(nucCoords, Ref(("STO-3G", "H"))) |> flatten + bs = genBasisFunc.(nucCoords, Ref(("STO-3G", "H"))) |> flatten local res1, res2 @suppress_out begin diff --git a/test/unit-tests/Integration/OneBody-test.jl b/test/unit-tests/Integration/OneBody-test.jl index 981c7d7f..957c06fc 100644 --- a/test/unit-tests/Integration/OneBody-test.jl +++ b/test/unit-tests/Integration/OneBody-test.jl @@ -5,8 +5,8 @@ using Quiqbox errT = 1e-10 nucs = fill("H", 2) cens = [[-0.7, 0.0, 0.0], [ 0.7, 0.0, 0.0]] - bf1 = BasisFunc(cens[1], ("STO-3G", "H"))[] - bf2 = BasisFunc(cens[2], ("STO-3G", "H"))[] + bf1 = genBasisFunc(cens[1], ("STO-3G", "H"))[] + bf2 = genBasisFunc(cens[2], ("STO-3G", "H"))[] bs = [bf1, bf2] S = [1.0 0.6593182058508896; 0.6593182058508896 1.0] diff --git a/test/unit-tests/Integration/TwoBody-test.jl b/test/unit-tests/Integration/TwoBody-test.jl index 9f32e51b..983ccd87 100644 --- a/test/unit-tests/Integration/TwoBody-test.jl +++ b/test/unit-tests/Integration/TwoBody-test.jl @@ -5,7 +5,7 @@ using Quiqbox errT = 1e-10 nucs = ["H", "H"] cens = [[-0.7, 0.0, 0.0], [ 0.7, 0.0, 0.0]] - bs = BasisFunc.(cens, fill("6-31G", 2)) |> flatten + bs = genBasisFunc.(cens, fill("6-31G", 2)) |> flatten bsiz = basisSize(bs) |> sum vec = [[1.1401448653048112 0.6114018855091738 0.38206058180946545 0.4478418840074861; 0.6114018855091738 0.626369765524018 0.34091363711214673 0.4981842896930728; diff --git a/test/unit-tests/Optimization-test.jl b/test/unit-tests/Optimization-test.jl index fbf7cf55..db120348 100644 --- a/test/unit-tests/Optimization-test.jl +++ b/test/unit-tests/Optimization-test.jl @@ -9,10 +9,10 @@ errorThreshold = 1e-12 # Floating basis set nucCoords = [[-0.7,0.0,0.0], [0.7,0.0,0.0]] mol = ["H", "H"] -bfSource1 = BasisFunc(("STO-2G", "H"))[] +bfSource1 = genBasisFunc(("STO-2G", "H"))[] gfs1 = [bfSource1.gauss...] cens = gridPoint.(nucCoords) -bs1 = BasisFunc.(cens, Ref(gfs1)) +bs1 = genBasisFunc.(cens, Ref(gfs1)) pars1 = uniqueParams!(bs1, ignoreMapping=true) local Es1L, pars1L, grads1L @@ -36,7 +36,7 @@ grad_t1 = [-0.1251882751182149, 0.017527948866820964, -0.10779722878571235, # Grid-based basis set grid = GridBox(1, 3.0) gf2 = GaussFunc(0.7,1) -bs2 = BasisFunc.(grid.box, Ref([gf2])) +bs2 = genBasisFunc.(grid.box, Ref([gf2])) pars2 = uniqueParams!(bs2, ignoreMapping=true)[[1,3]] diff --git a/test/unit-tests/Overload-test.jl b/test/unit-tests/Overload-test.jl index ea2460f1..10019a67 100644 --- a/test/unit-tests/Overload-test.jl +++ b/test/unit-tests/Overload-test.jl @@ -14,7 +14,7 @@ using Suppressor: @capture_out pb3 = ParamBox(-1, :x, mapFunction=abs) @test (@capture_out show(pb3)) == string(typeof(pb3))*"(-1.0)[x -> abs(x)][∂]" - bf1 = BasisFunc([1,2,1], (2,1)) + bf1 = genBasisFunc([1,2,1], (2,1)) gf1 = bf1.gauss[1] @test (@capture_out show(gf1)) == string(typeof(gf1))*"(xpn="* string(typeof(gf1.param[1]))*"(2.0)[α][∂], con="* @@ -22,15 +22,15 @@ using Suppressor: @capture_out @test (@capture_out show(bf1)) == string(typeof(bf1))*"(gauss, subshell, center)"* "[X⁰Y⁰Z⁰][1.0, 2.0, 1.0]" - bf2 = BasisFunc("STO-3G")[] + bf2 = genBasisFunc("STO-3G")[] @test (@capture_out show(bf2)) == string(typeof(bf2))*"(gauss, subshell, center)"* "[X⁰Y⁰Z⁰]"*"[NaN, NaN, NaN]" - bfs1 = BasisFunc([0,0,0], (2,1), "P") + bfs1 = genBasisFunc([0,0,0], (2,1), "P") @test (@capture_out show(bfs1)) == string(typeof(bfs1))*"(gauss, subshell, center)"* "[3/3]"*"[0.0, 0.0, 0.0]" - bfs2 = BasisFunc([0,0,0], (2,1), [[2,0,0]]) + bfs2 = genBasisFunc([0,0,0], (2,1), [[2,0,0]]) @test (@capture_out show(bfs2)) == string(typeof(bfs2))*"(gauss, subshell, center)"* "[X²Y⁰Z⁰]"*"[0.0, 0.0, 0.0]" diff --git a/test/unit-tests/SubModule/Molden-test.jl b/test/unit-tests/SubModule/Molden-test.jl index 119f2eab..24bac43d 100644 --- a/test/unit-tests/SubModule/Molden-test.jl +++ b/test/unit-tests/SubModule/Molden-test.jl @@ -37,9 +37,9 @@ for (nuc, nucCoords, molName, iMol) in zip(mols, molCoords, molNames, 1:length(m flag = (bfCoord == nucCoords) if flag nucConfig = [(bf, i) for i in nuc] - bs = BasisFunc.(bfCoord, nucConfig) |> flatten + bs = genBasisFunc.(bfCoord, nucConfig) |> flatten else - bs = BasisFunc.(bfCoord, bf) |> flatten + bs = genBasisFunc.(bfCoord, bf) |> flatten bsName = "-Float"*bsName end From 342192f8294a68c4b600585ded2e46f00fdcc85f Mon Sep 17 00:00:00 2001 From: frankwswang Date: Wed, 25 Aug 2021 16:31:33 -0400 Subject: [PATCH 04/33] Method adjustment when center omitted. --- src/Basis.jl | 15 ++++++++++----- test/unit-tests/Basis-test.jl | 2 +- test/unit-tests/Optimization-test.jl | 2 +- test/unit-tests/Overload-test.jl | 2 +- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/Basis.jl b/src/Basis.jl index 1072e269..fcd11d7c 100644 --- a/src/Basis.jl +++ b/src/Basis.jl @@ -220,7 +220,10 @@ function genBasisFunc(coord::AbstractArray, gs::Array{<:GaussFunc, 1}, ijkOrijks genBasisFunc((x,y,z), gs, ijkOrijks; normalizeGTO) end -# center::Union{AbstractArray, Tuple{Vararg{<:ParamBox}}} +genBasisFunc(::Missing, gs::Array{<:GaussFunc, 1}, ijkOrijks::Array; normalizeGTO::Bool=false) = +genBasisFunc([NaN, NaN, NaN], gs, ijkOrijks; normalizeGTO) + +# center::Union{AbstractArray, Tuple{Vararg{<:ParamBox}}, Missing} function genBasisFunc(center, gs::Array{<:GaussFunc, 1}, subshell::String="S"; ijkFilter::Array{Bool, 1}=fill(true, SubshellDimList[subshell]), normalizeGTO::Bool=false) ijkLen = length(ijkFilter) @@ -245,7 +248,7 @@ function genBasisFunc(center, BSKeyANDnuc::Array{Tuple{String, String}, 1}) bases = FloatingGTBasisFunc[] for k in BSKeyANDnuc BFMcontent = BasisSetList[k[1]][AtomicNumberList[k[2]]] - append!(bases, genBFuncsFromText(BFMcontent, alterContent=true, excludeLastNlines=1, center=center)) + append!(bases, genBFuncsFromText(BFMcontent; alterContent=true, excludeLastNlines=1, center)) end bases end @@ -260,7 +263,6 @@ genBasisFunc(center, BSkey::String; nucleus::String="H") = genBasisFunc(center, [BSkey]; nucleus) # A few methods for convenient arguments omissions and mutations. -genBasisFunc(arg) = genBasisFunc([NaN, NaN, NaN], arg) genBasisFunc(arg1, g::GaussFunc, args...; kws...) = genBasisFunc(arg1, [g], args...; kws...) genBasisFunc(bf::FloatingGTBasisFunc) = itself(bf) genBasisFunc(bs::Array{<:FloatingGTBasisFunc, 1}) = sortBasisFuncs(bs) @@ -417,9 +419,12 @@ end function genBFuncsFromText(content::String; alterContent::Bool=false, - contentAlterFunc::Function=(txt)->replace(txt, SciNotMarker => "e"), + contentAlterFunc::Function=(txt)-> + replace(txt, SciNotMarker => "e"), excludeFirstNlines=0, excludeLastNlines=0, - center::Union{AbstractArray, Tuple{Vararg{<:ParamBox}}}=[NaN, NaN, NaN]) + center::Union{AbstractArray, + Tuple{Vararg{<:ParamBox}}, + Missing}=missing) alterContent && (content = contentAlterFunc(content)) lines = split.(content |> IOBuffer |> readlines)[1+excludeFirstNlines : end-excludeLastNlines] data = [advancedParse.(i) for i in lines] diff --git a/test/unit-tests/Basis-test.jl b/test/unit-tests/Basis-test.jl index 4cb45ab7..c9bd9a05 100644 --- a/test/unit-tests/Basis-test.jl +++ b/test/unit-tests/Basis-test.jl @@ -126,7 +126,7 @@ lines = (content |> IOBuffer |> readlines) # function assignCenter! -bf5 = genBasisFunc("STO-3G")[] +bf5 = genBasisFunc(missing, "STO-3G")[] coord = [1,0,0] bf5_1 = genBasisFunc(coord, "STO-3G")[] @test !hasEqual(bf5, bf5_1) diff --git a/test/unit-tests/Optimization-test.jl b/test/unit-tests/Optimization-test.jl index db120348..0dad0ab5 100644 --- a/test/unit-tests/Optimization-test.jl +++ b/test/unit-tests/Optimization-test.jl @@ -9,7 +9,7 @@ errorThreshold = 1e-12 # Floating basis set nucCoords = [[-0.7,0.0,0.0], [0.7,0.0,0.0]] mol = ["H", "H"] -bfSource1 = genBasisFunc(("STO-2G", "H"))[] +bfSource1 = genBasisFunc(missing, ("STO-2G", "H"))[] gfs1 = [bfSource1.gauss...] cens = gridPoint.(nucCoords) bs1 = genBasisFunc.(cens, Ref(gfs1)) diff --git a/test/unit-tests/Overload-test.jl b/test/unit-tests/Overload-test.jl index 10019a67..13c90652 100644 --- a/test/unit-tests/Overload-test.jl +++ b/test/unit-tests/Overload-test.jl @@ -22,7 +22,7 @@ using Suppressor: @capture_out @test (@capture_out show(bf1)) == string(typeof(bf1))*"(gauss, subshell, center)"* "[X⁰Y⁰Z⁰][1.0, 2.0, 1.0]" - bf2 = genBasisFunc("STO-3G")[] + bf2 = genBasisFunc(missing, "STO-3G")[] @test (@capture_out show(bf2)) == string(typeof(bf2))*"(gauss, subshell, center)"* "[X⁰Y⁰Z⁰]"*"[NaN, NaN, NaN]" From 32923e24aa304c5b39bb8ac74931f5baf2487491 Mon Sep 17 00:00:00 2001 From: frankwswang Date: Wed, 25 Aug 2021 23:06:48 -0400 Subject: [PATCH 05/33] Fixed bug when gen bf from genBasisFuncText. --- src/Basis.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Basis.jl b/src/Basis.jl index fcd11d7c..45ce6494 100644 --- a/src/Basis.jl +++ b/src/Basis.jl @@ -428,7 +428,7 @@ function genBFuncsFromText(content::String; alterContent && (content = contentAlterFunc(content)) lines = split.(content |> IOBuffer |> readlines)[1+excludeFirstNlines : end-excludeLastNlines] data = [advancedParse.(i) for i in lines] - index = findall(x -> typeof(x) != Array{Float64, 1}, data)[2:end] + index = findall(x -> typeof(x) != Array{Float64, 1} && length(x)==3, data) bfs = [] for i in index gs1 = GaussFunc[] From 81408115f81f14eefaae2632e68a94cc9359b38b Mon Sep 17 00:00:00 2001 From: frankwswang Date: Fri, 27 Aug 2021 01:31:56 -0400 Subject: [PATCH 06/33] Updated test. --- test/unit-tests/Basis-test.jl | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/test/unit-tests/Basis-test.jl b/test/unit-tests/Basis-test.jl index c9bd9a05..5a2f3f69 100644 --- a/test/unit-tests/Basis-test.jl +++ b/test/unit-tests/Basis-test.jl @@ -1,6 +1,6 @@ using Test using Quiqbox -using Quiqbox: isFull, getBasisFuncs, inSymbols, varVal +using Quiqbox: isFull, getBasisFuncs, inSymbols, varVal, ElementNames using Symbolics @testset "Basis.jl" begin @@ -125,6 +125,21 @@ lines = (content |> IOBuffer |> readlines) [lines[2], lines[3], lines[5], lines[6], lines[8], lines[9]].*"\n" +# function genBasisFuncText & genBFuncsFromText +randElement = ElementNames[rand(1:length(ElementNames))] +bs1 = genBasisFunc(missing, ("6-31G", "H")) +cens = [rand(3) for _=1:length(bs1)] +assignCenter!.(cens, bs1) +txt1 = genBasisFuncText(bs1, printCenter=false, groupCenters=false) |> join +txt2 = genBasisFuncText(bs1, printCenter=false) |> join +bs2_1 = genBFuncsFromText(txt1) +bs2_2 = genBFuncsFromText(txt2) +assignCenter!.(cens, bs2_1) +assignCenter!.(cens, bs2_2) +@test hasEqual(bs1, bs2_2, ignoreContainerType=true) +@test hasEqual(bs1, bs2_1, ignoreContainerType=true) + + # function assignCenter! bf5 = genBasisFunc(missing, "STO-3G")[] coord = [1,0,0] From b4575bc2c97514a7528eebf26ea0800362819e09 Mon Sep 17 00:00:00 2001 From: frankwswang Date: Fri, 27 Aug 2021 02:01:13 -0400 Subject: [PATCH 07/33] Code optimizations. --- src/Basis.jl | 10 ++-- src/HartreeFock.jl | 96 ++++++++++++++++++++------------------ src/Initialization.jl | 3 ++ src/Integration/TwoBody.jl | 2 +- src/Molecule.jl | 42 +++++++++++++---- src/Tools.jl | 2 +- 6 files changed, 94 insertions(+), 61 deletions(-) diff --git a/src/Basis.jl b/src/Basis.jl index 45ce6494..63048524 100644 --- a/src/Basis.jl +++ b/src/Basis.jl @@ -248,7 +248,7 @@ function genBasisFunc(center, BSKeyANDnuc::Array{Tuple{String, String}, 1}) bases = FloatingGTBasisFunc[] for k in BSKeyANDnuc BFMcontent = BasisSetList[k[1]][AtomicNumberList[k[2]]] - append!(bases, genBFuncsFromText(BFMcontent; alterContent=true, excludeLastNlines=1, center)) + append!(bases, genBFuncsFromText(BFMcontent; adjustContent=true, excludeLastNlines=1, center)) end bases end @@ -410,7 +410,7 @@ function genBasisFuncText(bs::Array{<:FloatingGTBasisFunc, 1}; norm=1.0, printCe end else for b in bfBlocks - push!(strs, genBasisFuncText(b[1]; norm, printCenter)) + push!(strs, genBasisFuncText(b; norm, printCenter)) end end strs @@ -418,14 +418,14 @@ end function genBFuncsFromText(content::String; - alterContent::Bool=false, - contentAlterFunc::Function=(txt)-> + adjustContent::Bool=false, + adjustFunction::Function=(txt)-> replace(txt, SciNotMarker => "e"), excludeFirstNlines=0, excludeLastNlines=0, center::Union{AbstractArray, Tuple{Vararg{<:ParamBox}}, Missing}=missing) - alterContent && (content = contentAlterFunc(content)) + adjustContent && (content = adjustFunction(content)) lines = split.(content |> IOBuffer |> readlines)[1+excludeFirstNlines : end-excludeLastNlines] data = [advancedParse.(i) for i in lines] index = findall(x -> typeof(x) != Array{Float64, 1} && length(x)==3, data) diff --git a/src/HartreeFock.jl b/src/HartreeFock.jl index 78a31c39..cff8bc2f 100644 --- a/src/HartreeFock.jl +++ b/src/HartreeFock.jl @@ -1,4 +1,4 @@ -export runHF, runHFcore +export runHF, runHFcore, SCFconfig using LinearAlgebra: dot, Hermitian using PiecewiseQuadratics: indicator @@ -25,8 +25,8 @@ getD(X, F, Nˢ) = getD(getC(X, F), Nˢ) function getGcore(HeeI, DJ, DK) G = zero(DJ) l = size(G)[1] - @views for μ = 1:l, ν = 1:l - G[μ, ν] = dot(transpose(DJ), HeeI[μ,ν,:,:]) - dot(DK, HeeI[μ,:,:,ν]) # fastest + for μ = 1:l, ν = 1:l # fastest + G[μ, ν] = dot(transpose(DJ), @view HeeI[μ,ν,:,:]) - dot(DK, @view HeeI[μ,:,:,ν]) end G |> Hermitian |> Array end @@ -260,7 +260,7 @@ function runHFcore(N::Union{NTuple{2, Int}, Int}, while true iStep = length(Etots) iStep <= maxSteps || (isConverged = false) || break - SCFcore!(method, N, Hcore, HeeI, S, X, vars; kws...) + SCF!(method, N, Hcore, HeeI, S, X, vars; kws...) printInfo && (iStep % floor(log(4, iStep) + 1) == 0 || iStep == maxSteps) && println(rpad("Step $(iStep)", 10), rpad("#$(i) ($(method))", 12), @@ -304,10 +304,11 @@ function xDIIScore(ValHF::Val, ValDIIS::Val, Nˢ::Int, Es::Array{Float64, 1}, Ds::Array{<:Array{<:Number, 2}, 1}; DIISsize::Int=15, solver::Symbol=:default, _kws...) - ∇s = Fs[1:end .> end-DIISsize] - Es = Es[1:end .> end-DIISsize] - Ds = Ds[1:end .> end-DIISsize] - DIISmethod, convexConstraint = DIISselector(ValDIIS) + DIISmethod, convexConstraint, permuteData = DIISselector(ValDIIS) + is = permuteData ? sortperm(Es) : (:) + ∇s = (@view Fs[is])[1:end .> end-DIISsize] + Es = (@view Es[is])[1:end .> end-DIISsize] + Ds = (@view Ds[is])[1:end .> end-DIISsize] vec, B = DIISmethod(Ds, ∇s, Es, S) c = constraintSolver(vec, B; convexConstraint, solver) grad = c.*∇s |> sum @@ -322,11 +323,11 @@ function xDIIScore(ValHF::Val, ValDIIS::Val, Nˢ::Int, end -DIISselector(::Val{:DIIS}) = ((Ds, ∇s, _, S) -> DIIScore(Ds, ∇s, S), false) +DIISselector(::Val{:DIIS}) = ((Ds, ∇s, _, S) -> DIIScore(Ds, ∇s, S), false, true) -DIISselector(::Val{:EDIIS}) = ((Ds, ∇s, Es, _) -> EDIIScore(Ds, ∇s, Es), true) +DIISselector(::Val{:EDIIS}) = ((Ds, ∇s, Es, _) -> EDIIScore(Ds, ∇s, Es), true, false) -DIISselector(::Val{:ADIIS}) = ((Ds, ∇s, _, _) -> ADIIScore(Ds, ∇s), true) +DIISselector(::Val{:ADIIS}) = ((Ds, ∇s, _, _) -> ADIIScore(Ds, ∇s), true, false) function EDIIScore(Ds, ∇s, Es) @@ -376,47 +377,52 @@ SCFmethodSelector(ValDIIS::Val, ::typeof(xDIIScore)) = # RHF -function SCFcore!(SCFmethod::Symbol, N::Int, - Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, - S::Array{<:Number, 2}, X::Array{<:Number, 2}, - rVars::HFtempVars{:RHF}; kws...) +function SCF!(SCFmethod::Symbol, N::Int, + Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, + S::Array{<:Number, 2}, X::Array{<:Number, 2}, + rVars::HFtempVars{:RHF}; kws...) + res = RHFcore(SCFmethod, N, Hcore, HeeI, S, X, rVars; kws...) + push!(rVars.Cs, res[1]) + push!(rVars.Fs, res[2]) + push!(rVars.Ds, res[3]) + push!(rVars.Es, res[4]) + push!(rVars.shared.Dtots, res[5]) + push!(rVars.shared.Etots, res[6]) +end + +function RHFcore(SCFmethod::Symbol, N::Int, + Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, + S::Array{<:Number, 2}, X::Array{<:Number, 2}, + rVars::HFtempVars{:RHF}; kws...) f, D = SCFmethodSelector(SCFmethod)(Val(:RHF), N÷2, Hcore, HeeI, S, X, rVars; kws...) Dᵀnew = 2D Cnew, Fnew, Dnew, Enew = f(Dᵀnew) Eᵀnew = 2Enew - push!(rVars.Cs, Cnew) - push!(rVars.Fs, Fnew) - push!(rVars.Ds, Dnew) - push!(rVars.Es, Enew) - push!(rVars.shared.Dtots, Dᵀnew) - push!(rVars.shared.Etots, Eᵀnew) + Cnew, Fnew, Dnew, Enew, Dᵀnew, Eᵀnew end # UHF -function SCFcore!(SCFmethod::Symbol, Ns::NTuple{2, Int}, - Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, - S::Array{<:Number, 2}, X::Array{<:Number, 2}, - uVars::NTuple{2, HFtempVars{:UHF}}; kws...) - fs = Function[] - Dᵀ = uVars[1].shared.Dtots - Eᵀ = uVars[1].shared.Etots - Dᵀnew = zero(Dᵀ[end]) - Eᵀnew = zero(Eᵀ[end]) - for (Nˢ, vars) in zip(Ns, uVars) - res = SCFmethodSelector(SCFmethod)(Val(:UHF), Nˢ, Hcore, HeeI, S, X, vars; kws...) - push!(fs, res[1]) - Dᵀnew += res[2] - end - for (f, vars) in zip(fs, uVars) - Cnew, Fnew, Dnew, Enew = f(Dᵀnew) - push!(vars.Cs, Cnew) - push!(vars.Fs, Fnew) - push!(vars.Ds, Dnew) - push!(vars.Es, Enew) - Eᵀnew += Enew +function SCF!(SCFmethod::Symbol, Ns::NTuple{2, Int}, + Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, + S::Array{<:Number, 2}, X::Array{<:Number, 2}, + uVars::NTuple{2, HFtempVars{:UHF}}; kws...) + res = UHFcore(SCFmethod, Ns, Hcore, HeeI, S, X, uVars; kws...) + fields = [:Cs, :Fs, :Ds, :Es] + for (field, vars) in zip(fields, @view res[1:4]) + push!.(getfield.(uVars, field), vars) end - push!(Dᵀ, Dᵀnew) - push!(Eᵀ, Eᵀnew) + push!(uVars[1].shared.Dtots, res[5]) + push!(uVars[1].shared.Etots, res[6]) +end + +function UHFcore(SCFmethod::Symbol, Ns::NTuple{2, Int}, + Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, + S::Array{<:Number, 2}, X::Array{<:Number, 2}, + uVars::NTuple{2, HFtempVars{:UHF}}; kws...) + res = SCFmethodSelector(SCFmethod).(Val(:UHF), Ns, Ref(Hcore), Ref(HeeI), + Ref(S), Ref(X), uVars; kws...) + partRes = hcat(res[1][1](Dᵀnew), res[2][1](Dᵀnew)) |> eachrow |> collect + partRes..., res[1][2]+res[2][1], Enew1+Enew2 end @@ -449,5 +455,5 @@ end function constraintSolverCore(ConvexSupportedSolver::Val, vec, B; convexConstraint=true) mod = getfield(Quiqbox, string(ConvexSupportedSolver)[6:end-3] |> Symbol) method = getfield(mod, :Optimizer) - constraintSolverCore(Val(:convex), vec, B; convexConstraint, method) + constraintSolverCore(Val(:Convex), vec, B; convexConstraint, method) end \ No newline at end of file diff --git a/src/Initialization.jl b/src/Initialization.jl index 9bbb6bd3..5e771596 100644 --- a/src/Initialization.jl +++ b/src/Initialization.jl @@ -3,4 +3,7 @@ const QuiqboxSubModules = ["Molden"] # Initialization function. function __init__() tryIncluding.(QuiqboxSubModules) + + # Force JIT compilation + # GTBasis(genBasisFunc.([[0,0,0], [0,0,1]], "STO-3G") |> flatten) end \ No newline at end of file diff --git a/src/Integration/TwoBody.jl b/src/Integration/TwoBody.jl index 70d33aff..e808398b 100644 --- a/src/Integration/TwoBody.jl +++ b/src/Integration/TwoBody.jl @@ -79,7 +79,7 @@ twoBodyBFTensor(:cint2e_cart, bf1, bf2, bf3, bf4) """ - eeInteractions(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}; outputUniqueIndices::Bool=false) -> Array{Float64, 5}, [Vector{Vector{Int64}}] + eeInteractions(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}; outputUniqueIndices::Bool=false) -> Array{Float64, 5}, [Array{<:Array{Int, 1}, 1}] Return the electron-electron interaction tensor (an N×N×N×N×1 Tensor where N is the number of spatial orbitals) given a basis set in the form of an `Array`. diff --git a/src/Molecule.jl b/src/Molecule.jl index b55b5f65..90bd6502 100644 --- a/src/Molecule.jl +++ b/src/Molecule.jl @@ -1,4 +1,6 @@ -export MolOrbital, getMolOrbitals, Molecule +export MolOrbital, getMolOrbitals, Molecule, nnRepulsions + +using LinearAlgebra: norm struct MolOrbital{N} <: AbstractMolOrbital symmetry::String @@ -7,9 +9,11 @@ struct MolOrbital{N} <: AbstractMolOrbital occupancy::Real orbitalCoeffs::NTuple{N, Float64} - function MolOrbital(energy::Float64, occupancy::Real, orbitalCoeffs::Array{Float64, 1}, spin::String="Alpha", symmetry::String="A") - spin != "Alpha" && spin != "Beta" && error("Keyword arguement \"spin\" can only be \"Alpha\" or \"Beta\"") - new{length(orbitalCoeffs)}(symmetry, energy, spin, occupancy, orbitalCoeffs |> Tuple) + function MolOrbital(energy::Float64, occupancy::Real, orbitalCoeffs::Array{Float64, 1}, + spin::String="Alpha", symmetry::String="A") + spin != "Alpha" && spin != "Beta" && error("Keyword arguement \"spin\" can only"* + " be \"Alpha\" or \"Beta\"") + new{length(orbitalCoeffs)}(symmetry, energy, spin, occupancy, orbitalCoeffs|>Tuple) end end @@ -29,14 +33,24 @@ struct Molecule{Nc, Ne, Nb} <:MolecularHartreeFockCoefficient{Nc, Ne} Ne::Int orbital::Tuple{Vararg{MolOrbital}} basis::Tuple{Vararg{FloatingGTBasisFunc}} + E0HF::Float64 + EnnR::Float64 - function Molecule(basis, nuc, nucCoords, Ne, Emos, occus, C, spins, symms) + function Molecule(basis, nuc, nucCoords, Ne, E0HF, Emos, occus, C, spins, symms) @assert length(nuc) == length(nucCoords) Nb = basisSize(basis) |> sum coeff = spins |> unique |> length - @assert (coeff*Nb .== length.([Emos, occus, C[1,:], spins, symms]) .== coeff*length(C[:,1])) |> prod - new{getCharge(nuc), Ne, Nb}(nuc |> Tuple, nucCoords .|> Tuple |> Tuple, Ne, - getMolOrbitals(Emos, occus, C, spins, symms), deepcopy(basis) |> Tuple) + @assert (coeff*Nb .== + length.([Emos, occus, C[1,:], spins, symms]) .== + coeff*length(C[:,1])) |> prod + EnnR = nnRepulsions(nuc, nucCoords) + new{getCharge(nuc), Ne, Nb}(nuc |> Tuple, + nucCoords .|> Tuple |> Tuple, + Ne, + getMolOrbitals(Emos, occus, C, spins, symms), + deepcopy(basis) |> Tuple, + E0HF, + EnnR) end end @@ -55,6 +69,16 @@ function Molecule(basis, nuc, nucCoords, HFfVars) C = HFfVars.C spins = fill("Alpha", len) end - Molecule(basis, nuc, nucCoords, t.parameters[2], Emos|>collect, + Molecule(basis, nuc, nucCoords, t.parameters[2], HFfVars.E0HF, Emos|>collect, occus|>collect, C, spins, fill("A", length(spins))) +end + + +function nnRepulsions(nuc, nucCoords) + E = 0 + len = length(nuc) + for i = 1:len, j=i+1:len + E += getCharge(nuc[i]) * getCharge(nuc[j]) / norm(nucCoords[i] - nucCoords[j]) + end + E end \ No newline at end of file diff --git a/src/Tools.jl b/src/Tools.jl index 91fc8f12..451025f0 100644 --- a/src/Tools.jl +++ b/src/Tools.jl @@ -35,7 +35,7 @@ information. ≡≡≡ Example(s) ≡≡≡ -``` +```jldoctest julia> @compareLength [1,2] [3,4] 2 From 787925867321d97f7a111e9d2f2eb63682a216a7 Mon Sep 17 00:00:00 2001 From: frankwswang Date: Fri, 27 Aug 2021 18:12:38 -0400 Subject: [PATCH 08/33] Speed up code in the first run time. --- lib/libcint/Interface.jl | 4 +- src/HartreeFock.jl | 197 ++++++++++++++++++------------------- src/Integration/OneBody.jl | 12 +-- src/Integration/TwoBody.jl | 6 +- src/Optimization.jl | 4 +- 5 files changed, 106 insertions(+), 117 deletions(-) diff --git a/lib/libcint/Interface.jl b/lib/libcint/Interface.jl index 7bb8f8e7..7ea3823b 100644 --- a/lib/libcint/Interface.jl +++ b/lib/libcint/Interface.jl @@ -1,4 +1,4 @@ -function cintFunc!(libcintFunc::Symbol, +function cintFunc!(libcintFunc::Val, buf::Array{Float64, N}, shls::Array{<:Signed, 1}, atm::Array{<:Signed, 1}, natm::Signed, bas::Array{<:Signed, 1}, nbas::Signed, env::Array{Float64, 1}, opt::Ptr=C_NULL) where {N} shls = shls .|> Cint @@ -11,7 +11,7 @@ function cintFunc!(libcintFunc::Symbol, atmAP = ArrayPointer(atm, showReminder=false) basAP = ArrayPointer(bas, showReminder=false) envAP = ArrayPointer(env, showReminder=false) - intPtrFunc!(Val(libcintFunc), bufAP.ptr, shlsAP.ptr, atmAP.ptr, natm, basAP.ptr, nbas, envAP.ptr, opt) + intPtrFunc!(libcintFunc, bufAP.ptr, shlsAP.ptr, atmAP.ptr, natm, basAP.ptr, nbas, envAP.ptr, opt) copyto!(buf, bufAP.arr) Libc.free(bufAP.ptr) Libc.free(shlsAP.ptr) diff --git a/src/HartreeFock.jl b/src/HartreeFock.jl index cff8bc2f..413a4ee2 100644 --- a/src/HartreeFock.jl +++ b/src/HartreeFock.jl @@ -4,9 +4,11 @@ using LinearAlgebra: dot, Hermitian using PiecewiseQuadratics: indicator using SeparableOptimization, Convex, COSMO -getXcore(::Val{1}, S) = S^(-0.5) |> Array +getXcore1(S) = S^(-0.5) |> Array -getX(S; method::Int=1) = getXcore(Val(method), S) +const getXmethods = Dict(1=>getXcore1) + +getX(S; method::Int=1) = getXmethods[method](S) function getC(X, F; outputCx::Bool=false, outputEmo::Bool=false) @@ -31,30 +33,36 @@ function getGcore(HeeI, DJ, DK) G |> Hermitian |> Array end -@inline getG(::Val{:RHF}, HeeI, D, _=nothing) = getGcore(HeeI, 2D, D) +# RHF +@inline getG(HeeI, D) = getGcore(HeeI, 2D, D) -@inline getG(::Val{:UHF}, HeeI, D, Dᵀ) = getGcore(HeeI, Dᵀ, D) +# UHF +@inline getG(HeeI, D, Dᵀ) = getGcore(HeeI, Dᵀ, D) @inline getF(Hcore, G) = Hcore + G -@inline getF(::Val{:RHF}, Hcore, HeeI, D, _=nothing) = getF(Hcore, getG(Val(:RHF), HeeI, D)) +# RHF +@inline getF(Hcore, HeeI, D::Array{<:Number, 2}, Dᵀ::Array{<:Number, 2}) = getF(Hcore, getG(HeeI, D, Dᵀ)) + +# UHF +@inline getF(Hcore, HeeI, D::Array{<:Number, 2}) = getF(Hcore, getG(HeeI, D)) -@inline getF(::Val{:UHF}, Hcore, HeeI, D, Dᵀ) = getF(Hcore, getG(Val(:UHF), HeeI, D, Dᵀ)) +@inline getF(Hcore, HeeI, Ds::Tuple{Vararg{Array{<:Number, 2}}}) = getF(Hcore, getG(HeeI, Ds...)) @inline getE(Hcore, F, D) = dot(transpose(D), 0.5*(Hcore + F)) -@inline getEᵀcore(::Val{:RHF}, Hcore, F, D, _1=nothing, _2=nothing) = 2*getE(Hcore, F, D) +@inline getEᵀcore(Hcore, F, D) = 2*getE(Hcore, F, D) -@inline getEᵀcore(::Val{:UHF}, Hcore, Fᵅ, Dᵅ, Fᵝ, Dᵝ) = getE(Hcore, Fᵅ, Dᵅ) + +@inline getEᵀcore(Hcore, Fᵅ, Dᵅ, Fᵝ, Dᵝ) = getE(Hcore, Fᵅ, Dᵅ) + getE(Hcore, Fᵝ, Dᵝ) function getEᵀ(Hcore, HeeI, C::Array{<:Number, 2}, N::Int) # RHF D = getD(C, N÷2) - F = getF(Val(:RHF), Hcore, HeeI, D) - getEᵀcore(Val(:RHF), Hcore, F, D) + F = getF(Hcore, HeeI, D) + getEᵀcore(Hcore, F, D) end # UHF @@ -62,9 +70,17 @@ function getEᵀ(Hcore, HeeI, (Cᵅ,Cᵝ)::NTuple{2, Array{<:Number, 2}}, (Nᵅ, Dᵅ = getD(Cᵅ, Nᵅ) Dᵝ = getD(Cᵝ, Nᵝ) Dᵀ = Dᵅ + Dᵝ - Fᵅ = getF(Val(:UHF), Hcore, HeeI, Dᵅ, Dᵀ) - Fᵝ = getF(Val(:UHF), Hcore, HeeI, Dᵝ, Dᵀ) - getEᵀcore(Val(:UHF), Hcore, Fᵅ, Dᵅ, Fᵝ, Dᵝ) + Fᵅ = getF(Hcore, HeeI, Dᵅ, Dᵀ) + Fᵝ = getF(Hcore, HeeI, Dᵝ, Dᵀ) + getEᵀcore(Hcore, Fᵅ, Dᵅ, Fᵝ, Dᵝ) +end + + +function getCFDE(Hcore, HeeI, X, Ds...) + Fnew = getF(Hcore, HeeI, Ds) + Enew = getE(Hcore, Fnew, Ds[1]) + Cnew = getC(X, Fnew) + [Cnew, Fnew, Ds[1], Enew] # Fnew is based on latest variables. end @@ -73,7 +89,7 @@ function initializeSCF(Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, C::Array{<:Number, 2}, N::Int) Nˢ = N÷2 D = getD(C, Nˢ) - F = getF(Val(:RHF), Hcore, HeeI, D) + F = getF(Hcore, HeeI, D) E = getE(Hcore, F, D) HFtempVars(:RHF, Nˢ, C, F, D, E, 2D, 2E) end @@ -90,7 +106,7 @@ function initializeSCF(Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, end Ds = getD.(Cs, Ns) Dᵀs = [Ds |> sum] - Fs = getF.(Val(:UHF), Ref(Hcore), Ref(HeeI), Ds, Ref(Dᵀs[])) + Fs = getF.(Ref(Hcore), Ref(HeeI), Ds, Ref(Dᵀs[])) Es = getE.(Ref(Hcore), Fs, Ds) Eᵀs = [Es |> sum] res = HFtempVars.(:UHF, Ns, Cs, Fs, Ds, Es) @@ -186,9 +202,7 @@ struct HFfinalVars{T, N, Nb} <: HartreeFockFinalValue{T} end -guessC(S, Hcore; method::Symbol=:Hcore, kws...) = guessCcore(Val(method), S, Hcore; kws...) - -function guessCcore(::Val{:GWH}, S, Hcore; K=1.75, X=getX(S), _kws...) +function guessCcore1(S, Hcore; K=1.75, X=getX(S), _kws...) l = size(Hcore)[1] H = zero(Hcore) for i in 1:l, j in 1:l @@ -197,14 +211,18 @@ function guessCcore(::Val{:GWH}, S, Hcore; K=1.75, X=getX(S), _kws...) getC(X, H) end -guessCcore(::Val{:Hcore}, S, Hcore; X=getX(S), _kws...) = getC(X, Hcore) +guessCcore2(S, Hcore; X=getX(S), _kws...) = getC(X, Hcore) + +const guessCmethods = Dict(:GWH=>guessCcore1, :Hcore=>guessCcore2) + +guessC(S, Hcore; method::Symbol=:GWH, kws...) = guessCmethods[method](S, Hcore; kws...) const defaultSCFconfig = SCFconfig([:ADIIS, :DIIS, :SD], [1e-4, 1e-8, 1e-12]) function runHF(bs::Array{<:AbstractFloatingGTBasisFunc, 1}, - mol, nucCoords, N=getCharge(mol); initialC=:Hcore, getXmethod=getX, + mol, nucCoords, N=getCharge(mol); initialC=:GWH, getXmethod=getX, scfConfig=defaultSCFconfig, HFtype=:RHF, printInfo::Bool=true, maxSteps::Int=1000) @assert length(mol) == length(nucCoords) @@ -220,7 +238,7 @@ function runHF(gtb::BasisSetData, N::Union{NTuple{2, Int}, Int}=getCharge(mol); initialC::Union{Array{<:Number, 2}, NTuple{2, Array{<:Number, 2}}, - Symbol}=:Hcore, + Symbol}=:GWH, getXmethod::Function=getX, scfConfig::SCFconfig=defaultSCFconfig, HFtype::Symbol=:RHF, printInfo::Bool=true, maxSteps::Int=1000) @@ -229,29 +247,23 @@ function runHF(gtb::BasisSetData, Hcore = gtb.getHcore(mol, nucCoords) X = getXmethod(gtb.S) initialC isa Symbol && (initialC = guessC(gtb.S, Hcore; X, method=initialC)) - runHFcore(Val(HFtype), N, Hcore, gtb.eeI, gtb.S, X, initialC; - scfConfig, printInfo, maxSteps) + runHFcore(N, Hcore, gtb.eeI, gtb.S, X, initialC; scfConfig, printInfo, maxSteps, HFtype) end -runHFcore(::Val{:RHF}, N::Int, Hcore, HeeI, S, X=getX(S), C=guessC(S, Hcore; X); - scfConfig, printInfo::Bool=true, maxSteps::Int=1000) = -runHFcore(N, Hcore, HeeI, S, X, C; scfConfig, printInfo, maxSteps) - -runHFcore(::Val{:UHF}, N, Hcore, HeeI, S, X=getX(S), C=guessC(S, Hcore; X); - scfConfig, printInfo::Bool=true, maxSteps::Int=1000) = -runHFcore((N isa Tuple ? N : (N÷2, N-N÷2)), Hcore, HeeI, S, X, C; - scfConfig, printInfo, maxSteps) function runHFcore(N::Union{NTuple{2, Int}, Int}, Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, - S::Array{<:Number, 2}, X::Array{<:Number, 2}, - C::Union{Array{<:Number, 2}, NTuple{2, Array{<:Number, 2}}}; + S::Array{<:Number, 2}, + X::Array{<:Number, 2}=getX(S), + C::Union{Array{<:Number, 2}, + NTuple{2, Array{<:Number, 2}}}=guessC(S, Hcore; X); + HFtype::Symbol=:RHF, scfConfig::SCFconfig{L}, printInfo::Bool=true, maxSteps::Int=1000) where {L} @assert maxSteps > 0 + HFtype == :UHF && (N isa Int) && (N = (N÷2, N-N÷2)) vars = initializeSCF(Hcore, HeeI, C, N) Etots = (vars isa Tuple) ? vars[1].shared.Etots : vars.shared.Etots - HFtype = length(N) == 1 ? :RHF : :UHF printInfo && println(rpad("$(HFtype) Initial Gauss", 22), "E = $(Etots[end])") isConverged = true for (method, kws, breakPoint, i) in @@ -279,55 +291,37 @@ function runHFcore(N::Union{NTuple{2, Int}, Int}, end -function SDcore(ValHF::Val, Nˢ::Int, Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, +function SDcore(Nˢ::Int, Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, X::Array{<:Number, 2}, F::Array{<:Number, 2}, D::Array{<:Number, 2}; dampingStrength::Float64=0.0, _kws...) @assert 0 <= dampingStrength <= 1 "The range of `dampingStrength`::Float64 is [0,1]." Dnew = getD(X, F, Nˢ) - Dnew = (1-dampingStrength)*Dnew + dampingStrength*D - f = function (Dᵀnew) - Fnew = getF(ValHF, Hcore, HeeI, Dnew, Dᵀnew) - Enew = getE(Hcore, Fnew, Dnew) - Cnew = getC(X, Fnew) - [Cnew, Fnew, Dnew, Enew] # Fnew is based on latest variables. - end - f, Dnew + (1-dampingStrength)*Dnew + dampingStrength*D end -function xDIIScore(ValHF::Val, ValDIIS::Val, Nˢ::Int, - Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, +function xDIIScore(method::Symbol, Nˢ::Int, Hcore::Array{<:Number, 2}, + HeeI::Array{<:Number, 4}, S::Array{<:Number, 2}, X::Array{<:Number, 2}, - Fs::Array{<:Array{<:Number, 2}, 1}, - Es::Array{Float64, 1}, + Fs::Array{<:Array{<:Number, 2}, 1}, Es::Array{Float64, 1}, Ds::Array{<:Array{<:Number, 2}, 1}; - DIISsize::Int=15, solver::Symbol=:default, _kws...) - DIISmethod, convexConstraint, permuteData = DIISselector(ValDIIS) + DIISsize::Int=15, solver=:default, _kws...) + DIISmethod, convexConstraint, permuteData = DIISmethods[method] is = permuteData ? sortperm(Es) : (:) ∇s = (@view Fs[is])[1:end .> end-DIISsize] Es = (@view Es[is])[1:end .> end-DIISsize] Ds = (@view Ds[is])[1:end .> end-DIISsize] vec, B = DIISmethod(Ds, ∇s, Es, S) - c = constraintSolver(vec, B; convexConstraint, solver) + c = constraintSolver(vec, B, solver; convexConstraint) grad = c.*∇s |> sum - Dnew = getD(X, grad |> Hermitian |> Array, Nˢ) # grad == F. - f = function (Dᵀnew) - Fnew = getF(ValHF, Hcore, HeeI, Dnew, Dᵀnew) - Enew = getE(Hcore, Fnew, Dnew) - Cnew = getC(X, Fnew) - [Cnew, Fnew, Dnew, Enew] # Fnew is based on latest variables. - end - f, Dnew + getD(X, grad |> Hermitian |> Array, Nˢ) # grad == F. end - -DIISselector(::Val{:DIIS}) = ((Ds, ∇s, _, S) -> DIIScore(Ds, ∇s, S), false, true) - -DIISselector(::Val{:EDIIS}) = ((Ds, ∇s, Es, _) -> EDIIScore(Ds, ∇s, Es), true, false) - -DIISselector(::Val{:ADIIS}) = ((Ds, ∇s, _, _) -> ADIIScore(Ds, ∇s), true, false) +const DIISmethods = Dict( :DIIS => ((Ds, ∇s, _, S)->DIIScore(Ds, ∇s, S), false, true ), + :EDIIS => ((Ds, ∇s, Es, _)->EDIIScore(Ds, ∇s, Es), true, false), + :ADIIS => ((Ds, ∇s, _, _)->ADIIScore(Ds, ∇s), true, false)) function EDIIScore(Ds, ∇s, Es) @@ -362,21 +356,27 @@ function DIIScore(Ds, ∇s, S) end -const SCFmethods = Dict(:SD=>SDcore, :DIIS=>xDIIScore, :ADIIS=>xDIIScore, :EDIIS=>xDIIScore) - -SCFmethodSelector(sym::Symbol) = SCFmethodSelector(Val(sym), SCFmethods[sym]) +const SD = (Nˢ, Hcore, HeeI, _dm, X, tmpVars::HFtempVars; kws...) -> + SDcore(Nˢ, Hcore, HeeI, X, tmpVars.Fs[end], tmpVars.Ds[end]; kws...) -SCFmethodSelector(::Val{:SD}, ::typeof(SDcore)) = - (ValHF, Nˢ, Hcore, HeeI, _dm, X, tmpVars::HFtempVars; kws...) -> - SDcore(ValHF, Nˢ, Hcore, HeeI, X, tmpVars.Fs[end], tmpVars.Ds[end]; kws...) +const xDIIS = (method::Symbol) -> (Nˢ, Hcore, HeeI, S, X, tmpVars::HFtempVars; kws...) -> + xDIIScore(method, Nˢ, Hcore, HeeI, S, X, tmpVars.Fs, + tmpVars.Es, tmpVars.Ds; kws...) -SCFmethodSelector(ValDIIS::Val, ::typeof(xDIIScore)) = - (ValHF, Nˢ, Hcore, HeeI, S, X, tmpVars::HFtempVars; kws...) -> - xDIIScore(ValHF, ValDIIS, Nˢ, Hcore, HeeI, S, X, - tmpVars.Fs, tmpVars.Es, tmpVars.Ds; kws...) +const SCFmethods = Dict( [:SD, :DIIS, :ADIIS, :EDIIS] .=> + [ SD, xDIIS(:DIIS), xDIIS(:ADIIS), xDIIS(:EDIIS)]) # RHF +function RHFcore(SCFmethod::Symbol, N::Int, + Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, + S::Array{<:Number, 2}, X::Array{<:Number, 2}, + rVars::HFtempVars{:RHF}; kws...) + D = SCFmethods[SCFmethod](N÷2, Hcore, HeeI, S, X, rVars; kws...) + partRes = getCFDE(Hcore, HeeI, X, D) + partRes..., 2D, 2partRes[end] +end + function SCF!(SCFmethod::Symbol, N::Int, Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, S::Array{<:Number, 2}, X::Array{<:Number, 2}, @@ -390,18 +390,19 @@ function SCF!(SCFmethod::Symbol, N::Int, push!(rVars.shared.Etots, res[6]) end -function RHFcore(SCFmethod::Symbol, N::Int, + +# UHF +function UHFcore(SCFmethod::Symbol, Ns::NTuple{2, Int}, Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, S::Array{<:Number, 2}, X::Array{<:Number, 2}, - rVars::HFtempVars{:RHF}; kws...) - f, D = SCFmethodSelector(SCFmethod)(Val(:RHF), N÷2, Hcore, HeeI, S, X, rVars; kws...) - Dᵀnew = 2D - Cnew, Fnew, Dnew, Enew = f(Dᵀnew) - Eᵀnew = 2Enew - Cnew, Fnew, Dnew, Enew, Dᵀnew, Eᵀnew + uVars::NTuple{2, HFtempVars{:UHF}}; kws...) + Ds = SCFmethods[SCFmethod].(Ns, Ref(Hcore), Ref(HeeI), + Ref(S), Ref(X), uVars; kws...) + Dᵀnew = Ds |> sum + partRes = getCFDE(Ref(Hcore), Ref(HeeI), Ref(X), Ds, Ref(Dᵀnew)) + partRes..., Dᵀnew, sum(partRes[end]) end -# UHF function SCF!(SCFmethod::Symbol, Ns::NTuple{2, Int}, Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, S::Array{<:Number, 2}, X::Array{<:Number, 2}, @@ -415,22 +416,9 @@ function SCF!(SCFmethod::Symbol, Ns::NTuple{2, Int}, push!(uVars[1].shared.Etots, res[6]) end -function UHFcore(SCFmethod::Symbol, Ns::NTuple{2, Int}, - Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, - S::Array{<:Number, 2}, X::Array{<:Number, 2}, - uVars::NTuple{2, HFtempVars{:UHF}}; kws...) - res = SCFmethodSelector(SCFmethod).(Val(:UHF), Ns, Ref(Hcore), Ref(HeeI), - Ref(S), Ref(X), uVars; kws...) - partRes = hcat(res[1][1](Dᵀnew), res[2][1](Dᵀnew)) |> eachrow |> collect - partRes..., res[1][2]+res[2][1], Enew1+Enew2 -end - - -constraintSolver(vec, B; convexConstraint=true, solver::Symbol=:default) = -constraintSolverCore(Val(solver), vec, B; convexConstraint) # Fastest -function constraintSolverCore(::Val{:default}, vec, B; convexConstraint=true) +function ADMMSolver(vec, B; convexConstraint=true) len = length(vec) A = ones(len) |> transpose |> Array b = [1] @@ -441,9 +429,9 @@ function constraintSolverCore(::Val{:default}, vec, B; convexConstraint=true) vars.x end + # With Convex.jl, more flexible -function constraintSolverCore(::Val{:Convex}, vec, B; - convexConstraint=true, method=COSMO.Optimizer) +function ConvexSolver(vec, B; convexConstraint=true, method=COSMO.Optimizer) len = length(vec) c = convexConstraint ? Convex.Variable(len, Positive()) : Convex.Variable(len) f = 0.5* Convex.quadform(c, B) + dot(c,vec) @@ -452,8 +440,11 @@ function constraintSolverCore(::Val{:Convex}, vec, B; evaluate(c) end -function constraintSolverCore(ConvexSupportedSolver::Val, vec, B; convexConstraint=true) - mod = getfield(Quiqbox, string(ConvexSupportedSolver)[6:end-3] |> Symbol) - method = getfield(mod, :Optimizer) - constraintSolverCore(Val(:Convex), vec, B; convexConstraint, method) -end \ No newline at end of file + +const ConstraintSolvers = Dict(:default=>ADMMSolver, :Convex=>ConvexSolver) + +constraintSolver(vec, B, solver::Symbol=:default; convexConstraint=true) = +ConstraintSolvers[solver](vec, B; convexConstraint) + +constraintSolver(vec, B, ConvexMethod; convexConstraint=true) = +ConvexSolver(vec, B; convexConstraint, method=ConvexMethod) \ No newline at end of file diff --git a/src/Integration/OneBody.jl b/src/Integration/OneBody.jl index 06072622..9cc50042 100644 --- a/src/Integration/OneBody.jl +++ b/src/Integration/OneBody.jl @@ -1,7 +1,7 @@ export overlap, overlaps, nucAttraction, nucAttractions, elecKinetic, elecKinetics, coreH, coreHij -function oneBodyBFTensorCore(libcinFunc::Symbol, bf1::FloatingGTBasisFunc, bf2::FloatingGTBasisFunc, +function oneBodyBFTensorCore(libcinFunc::Val, bf1::FloatingGTBasisFunc, bf2::FloatingGTBasisFunc, nuclei::Array{String, 1}, nucleiCoords::Array{<:AbstractArray, 1}; isGradient::Bool=false) env = Float64[] @@ -24,7 +24,7 @@ function oneBodyBFTensorCore(libcinFunc::Symbol, bf1::FloatingGTBasisFunc, bf2:: end -function oneBodyBFTensor(libcinFunc::Symbol, b1::AbstractFloatingGTBasisFunc, b2::AbstractFloatingGTBasisFunc, +function oneBodyBFTensor(libcinFunc::Val, b1::AbstractFloatingGTBasisFunc, b2::AbstractFloatingGTBasisFunc, nuclei::Array{String, 1}, nucleiCoords::Array{<:AbstractArray, 1}; isGradient::Bool=false) f = @inline function (i,j) @@ -62,7 +62,7 @@ end Return the orbital overlap matrix (an N×N×1 Tensor where N is the number of spatial orbitals) given 2 basis functions. """ overlap(bf1::AbstractFloatingGTBasisFunc, bf2::AbstractFloatingGTBasisFunc) = -oneBodyBFTensor(:cint1e_ovlp_cart, bf1, bf2, String[], Array[]) +oneBodyBFTensor(Val(:cint1e_ovlp_cart), bf1, bf2, String[], Array[]) """ @@ -83,7 +83,7 @@ Return the nuclear attraction matrix (an N×N×1 Tensor where N is the number of and the nuclei with their coordinates (in atomic unit). """ nucAttraction(bf1::AbstractFloatingGTBasisFunc, bf2::AbstractFloatingGTBasisFunc, nuc::Array{String, 1}, nucCoords::Array{<:AbstractArray, 1}) = -oneBodyBFTensor(:cint1e_nuc_cart, bf1, bf2, nuc, nucCoords) +oneBodyBFTensor(Val(:cint1e_nuc_cart), bf1, bf2, nuc, nucCoords) """ @@ -94,7 +94,7 @@ Return the nuclear attraction matrix (an N×N×1 Tensor where N is the number of and the nuclei with their coordinates (in atomic unit). """ nucAttractions(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}, nuc::Array{String, 1}, nucCoords::Array{<:AbstractArray, 1}) = -oneBodyBSTensor(BSet, (bf1, bf2)->oneBodyBFTensor(:cint1e_nuc_cart, bf1, bf2, nuc, nucCoords)) +oneBodyBSTensor(BSet, (bf1, bf2)->oneBodyBFTensor(Val(:cint1e_nuc_cart), bf1, bf2, nuc, nucCoords)) """ @@ -104,7 +104,7 @@ oneBodyBSTensor(BSet, (bf1, bf2)->oneBodyBFTensor(:cint1e_nuc_cart, bf1, bf2, nu Return the electron kinetic energy matrix (an N×N×1 Tensor where N is the number of spatial orbitals) given 2 basis functions. """ elecKinetic(bf1::AbstractFloatingGTBasisFunc, bf2::AbstractFloatingGTBasisFunc) = -oneBodyBFTensor(:cint1e_kin_cart, bf1, bf2, String[], Array[]) +oneBodyBFTensor(Val(:cint1e_kin_cart), bf1, bf2, String[], Array[]) """ diff --git a/src/Integration/TwoBody.jl b/src/Integration/TwoBody.jl index e808398b..29e13ff7 100644 --- a/src/Integration/TwoBody.jl +++ b/src/Integration/TwoBody.jl @@ -1,7 +1,7 @@ export eeInteraction, eeInteractions, uniqueTwoBodyBFints -function twoBodyBFTensorCore(libcinFunc::Symbol, +function twoBodyBFTensorCore(libcinFunc::Val, bf1::FloatingGTBasisFunc, bf2::FloatingGTBasisFunc, bf3::FloatingGTBasisFunc, bf4::FloatingGTBasisFunc; isGradient::Bool=false) env = Float64[] @@ -19,7 +19,7 @@ function twoBodyBFTensorCore(libcinFunc::Symbol, end -function twoBodyBFTensor(libcinFunc::Symbol, +function twoBodyBFTensor(libcinFunc::Val, b1::AbstractFloatingGTBasisFunc, b2::AbstractFloatingGTBasisFunc, b3::AbstractFloatingGTBasisFunc, b4::AbstractFloatingGTBasisFunc; isGradient::Bool=false) f = @inline function (i,j,k,l) @@ -74,7 +74,7 @@ end Return the electron-electron interaction tensor (an N×N×N×N×1 Tensor where N is the number of spatial orbitals) given 4 basis functions. """ eeInteraction(bf1::AbstractFloatingGTBasisFunc, bf2::AbstractFloatingGTBasisFunc, bf3::AbstractFloatingGTBasisFunc, bf4::AbstractFloatingGTBasisFunc) = -twoBodyBFTensor(:cint2e_cart, bf1, bf2, bf3, bf4) +twoBodyBFTensor(Val(:cint2e_cart), bf1, bf2, bf3, bf4) """ diff --git a/src/Optimization.jl b/src/Optimization.jl index 4c044ca6..cb922c2b 100644 --- a/src/Optimization.jl +++ b/src/Optimization.jl @@ -18,9 +18,7 @@ end function defaultECmethod(HFtype, Hcore, HeeI, S, Ne) X = getX(S) - res = runHFcore(Val(HFtype), Ne, Hcore, HeeI, S, X, guessC(S, Hcore; X), - scfConfig=SCFconfig([:ADIIS, :DIIS, :SD], - [ 1e-4, 1e-8, 1e-12]), printInfo=false) + res = runHFcore(Ne, Hcore, HeeI, S, X, guessC(S, Hcore; X); printInfo=false, HFtype) res.E0HF, res.C end From 0af8deac61ad1eba6b5f9849bff6b1004c2f17cc Mon Sep 17 00:00:00 2001 From: frankwswang Date: Sat, 28 Aug 2021 01:54:43 -0400 Subject: [PATCH 09/33] Code optimization and reorganization. --- src/HartreeFock.jl | 147 ++++++++++++++++++++++++++------------------- 1 file changed, 85 insertions(+), 62 deletions(-) diff --git a/src/HartreeFock.jl b/src/HartreeFock.jl index 413a4ee2..e9c08b48 100644 --- a/src/HartreeFock.jl +++ b/src/HartreeFock.jl @@ -3,6 +3,7 @@ export runHF, runHFcore, SCFconfig using LinearAlgebra: dot, Hermitian using PiecewiseQuadratics: indicator using SeparableOptimization, Convex, COSMO +using Statistics: median getXcore1(S) = S^(-0.5) |> Array @@ -17,9 +18,25 @@ function getC(X, F; outputCx::Bool=false, outputEmo::Bool=false) outputEmo ? (outC, ϵ) : outC end +function getCfromGWH(S, Hcore; K=1.75, X=getX(S), _kws...) + l = size(Hcore)[1] + H = zero(Hcore) + for i in 1:l, j in 1:l + H[i,j] = K * S[i,j] * (Hcore[i,i] + Hcore[j,j]) / 2 + end + getC(X, H) +end + +getCfromHcore(S, Hcore; X=getX(S), _kws...) = getC(X, Hcore) + +const guessCmethods = Dict(:GWH=>getCfromGWH, :Hcore=>getCfromHcore) + + +guessC(S, Hcore; method::Symbol=:GWH, kws...) = guessCmethods[method](S, Hcore; kws...) + getD(C, Nˢ) = @views (C[:,1:Nˢ]*C[:,1:Nˢ]') |> Hermitian |> Array -# Nˢ: number of electrons with the same spin +# Nˢ: number of electrons with the same spin. getD(X, F, Nˢ) = getD(getC(X, F), Nˢ) @@ -43,12 +60,14 @@ end @inline getF(Hcore, G) = Hcore + G # RHF -@inline getF(Hcore, HeeI, D::Array{<:Number, 2}, Dᵀ::Array{<:Number, 2}) = getF(Hcore, getG(HeeI, D, Dᵀ)) +@inline getF(Hcore, HeeI, D::Array{<:Number, 2}, Dᵀ::Array{<:Number, 2}) = +getF(Hcore, getG(HeeI, D, Dᵀ)) # UHF @inline getF(Hcore, HeeI, D::Array{<:Number, 2}) = getF(Hcore, getG(HeeI, D)) -@inline getF(Hcore, HeeI, Ds::Tuple{Vararg{Array{<:Number, 2}}}) = getF(Hcore, getG(HeeI, Ds...)) +@inline getF(Hcore, HeeI, Ds::Tuple{Vararg{Array{<:Number, 2}}}) = +getF(Hcore, getG(HeeI, Ds...)) @inline getE(Hcore, F, D) = dot(transpose(D), 0.5*(Hcore + F)) @@ -202,34 +221,18 @@ struct HFfinalVars{T, N, Nb} <: HartreeFockFinalValue{T} end -function guessCcore1(S, Hcore; K=1.75, X=getX(S), _kws...) - l = size(Hcore)[1] - H = zero(Hcore) - for i in 1:l, j in 1:l - H[i,j] = K * S[i,j] * (Hcore[i,i] + Hcore[j,j]) / 2 - end - getC(X, H) -end - -guessCcore2(S, Hcore; X=getX(S), _kws...) = getC(X, Hcore) - -const guessCmethods = Dict(:GWH=>guessCcore1, :Hcore=>guessCcore2) - -guessC(S, Hcore; method::Symbol=:GWH, kws...) = guessCmethods[method](S, Hcore; kws...) - - -const defaultSCFconfig = SCFconfig([:ADIIS, :DIIS, :SD], [1e-4, 1e-8, 1e-12]) +const defaultSCFconfig = SCFconfig([:ADIIS, :DIIS, :ADIIS], [1e-4, 1e-6, 1e-12]) function runHF(bs::Array{<:AbstractFloatingGTBasisFunc, 1}, mol, nucCoords, N=getCharge(mol); initialC=:GWH, getXmethod=getX, - scfConfig=defaultSCFconfig, + scfConfig=defaultSCFconfig, earlyTermination::Bool=true, HFtype=:RHF, printInfo::Bool=true, maxSteps::Int=1000) @assert length(mol) == length(nucCoords) @assert (basisSize(bs) |> sum) >= ceil(N/2) gtb = GTBasis(bs) runHF(gtb, mol, nucCoords, N; initialC, scfConfig, - getXmethod, HFtype, printInfo, maxSteps) + getXmethod, HFtype, printInfo, maxSteps, earlyTermination) end function runHF(gtb::BasisSetData, @@ -240,14 +243,14 @@ function runHF(gtb::BasisSetData, NTuple{2, Array{<:Number, 2}}, Symbol}=:GWH, getXmethod::Function=getX, - scfConfig::SCFconfig=defaultSCFconfig, + scfConfig::SCFconfig=defaultSCFconfig, earlyTermination::Bool=true, HFtype::Symbol=:RHF, printInfo::Bool=true, maxSteps::Int=1000) @assert length(mol) == length(nucCoords) @assert typeof(gtb).parameters[1] >= ceil(N/2) Hcore = gtb.getHcore(mol, nucCoords) X = getXmethod(gtb.S) initialC isa Symbol && (initialC = guessC(gtb.S, Hcore; X, method=initialC)) - runHFcore(N, Hcore, gtb.eeI, gtb.S, X, initialC; scfConfig, printInfo, maxSteps, HFtype) + runHFcore(N, Hcore, gtb.eeI, gtb.S, X, initialC; scfConfig, printInfo, maxSteps, HFtype, earlyTermination) end @@ -259,20 +262,21 @@ function runHFcore(N::Union{NTuple{2, Int}, Int}, NTuple{2, Array{<:Number, 2}}}=guessC(S, Hcore; X); HFtype::Symbol=:RHF, scfConfig::SCFconfig{L}, printInfo::Bool=true, - maxSteps::Int=1000) where {L} + maxSteps::Int=1000, earlyTermination::Bool=true) where {L} @assert maxSteps > 0 HFtype == :UHF && (N isa Int) && (N = (N÷2, N-N÷2)) vars = initializeSCF(Hcore, HeeI, C, N) Etots = (vars isa Tuple) ? vars[1].shared.Etots : vars.shared.Etots printInfo && println(rpad("$(HFtype) Initial Gauss", 22), "E = $(Etots[end])") isConverged = true + EtotMin = Etots[] for (method, kws, breakPoint, i) in zip(scfConfig.methods, scfConfig.methodConfigs, scfConfig.intervals, 1:L) - + while true iStep = length(Etots) iStep <= maxSteps || (isConverged = false) || break - SCF!(method, N, Hcore, HeeI, S, X, vars; kws...) + HF!(method, N, Hcore, HeeI, S, X, vars; kws...) printInfo && (iStep % floor(log(4, iStep) + 1) == 0 || iStep == maxSteps) && println(rpad("Step $(iStep)", 10), rpad("#$(i) ($(method))", 12), @@ -282,6 +286,9 @@ function runHFcore(N::Union{NTuple{2, Int}, Int}, 10^(log(10, breakPoint)÷2), returnStd=true) flag && (isConverged = Std > scfConfig.oscillateThreshold ? false : true; break) + earlyTermination && (Etots[end] - EtotMin) / abs(EtotMin) > 0.2 && + (printInfo && println("Early termination of method $(method) due to the poor"* + " performance."); break) end end @@ -305,26 +312,27 @@ end function xDIIScore(method::Symbol, Nˢ::Int, Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, S::Array{<:Number, 2}, X::Array{<:Number, 2}, - Fs::Array{<:Array{<:Number, 2}, 1}, Es::Array{Float64, 1}, - Ds::Array{<:Array{<:Number, 2}, 1}; + Fs::Array{<:Array{<:Number, 2}, 1}, + Ds::Array{<:Array{<:Number, 2}, 1}, + Es::Array{Float64, 1}; DIISsize::Int=15, solver=:default, _kws...) DIISmethod, convexConstraint, permuteData = DIISmethods[method] is = permuteData ? sortperm(Es) : (:) ∇s = (@view Fs[is])[1:end .> end-DIISsize] - Es = (@view Es[is])[1:end .> end-DIISsize] Ds = (@view Ds[is])[1:end .> end-DIISsize] - vec, B = DIISmethod(Ds, ∇s, Es, S) + Es = (@view Es[is])[1:end .> end-DIISsize] + vec, B = DIISmethod(∇s, Ds, Es, S) c = constraintSolver(vec, B, solver; convexConstraint) grad = c.*∇s |> sum getD(X, grad |> Hermitian |> Array, Nˢ) # grad == F. end -const DIISmethods = Dict( :DIIS => ((Ds, ∇s, _, S)->DIIScore(Ds, ∇s, S), false, true ), - :EDIIS => ((Ds, ∇s, Es, _)->EDIIScore(Ds, ∇s, Es), true, false), - :ADIIS => ((Ds, ∇s, _, _)->ADIIScore(Ds, ∇s), true, false)) +const DIISmethods = Dict( :DIIS => ((∇s, Ds, _, S)->DIIScore(∇s, Ds, S), false, true ), + :EDIIS => ((∇s, Ds, Es, _)->EDIIScore(∇s, Ds, Es), true, false), + :ADIIS => ((∇s, Ds, _, _)->ADIIScore(∇s, Ds), true, false)) -function EDIIScore(Ds, ∇s, Es) +function EDIIScore(∇s, Ds, Es) len = length(Ds) B = ones(len, len) for i=1:len, j=1:len @@ -334,7 +342,7 @@ function EDIIScore(Ds, ∇s, Es) end -function ADIIScore(Ds, ∇s) +function ADIIScore(∇s, Ds) len = length(Ds) B = ones(len, len) vec = [dot(D - Ds[end], ∇s[end]) for D in Ds] @@ -345,7 +353,7 @@ function ADIIScore(Ds, ∇s) end -function DIIScore(Ds, ∇s, S) +function DIIScore(∇s, Ds, S) len = length(Ds) B = ones(len, len) vec = zeros(len) @@ -356,32 +364,35 @@ function DIIScore(Ds, ∇s, S) end -const SD = (Nˢ, Hcore, HeeI, _dm, X, tmpVars::HFtempVars; kws...) -> - SDcore(Nˢ, Hcore, HeeI, X, tmpVars.Fs[end], tmpVars.Ds[end]; kws...) +const SD = (Nˢ, Hcore, HeeI, _dm, X, tVars::HFtempVars; kws...) -> + SDcore(Nˢ, Hcore, HeeI, X, tVars.Fs[end], tVars.Ds[end]; kws...) -const xDIIS = (method::Symbol) -> (Nˢ, Hcore, HeeI, S, X, tmpVars::HFtempVars; kws...) -> - xDIIScore(method, Nˢ, Hcore, HeeI, S, X, tmpVars.Fs, - tmpVars.Es, tmpVars.Ds; kws...) +const xDIIS = (method::Symbol) -> + (Nˢ, Hcore, HeeI, S, X, tVars::HFtempVars; kws...) -> + xDIIScore(method, Nˢ, Hcore, HeeI, S, X, tVars.Fs, tVars.Ds, tVars.Es; kws...) const SCFmethods = Dict( [:SD, :DIIS, :ADIIS, :EDIIS] .=> [ SD, xDIIS(:DIIS), xDIIS(:ADIIS), xDIIS(:EDIIS)]) +function HF!(SCFmethod::Symbol, N, Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, + S::Array{<:Number, 2}, X::Array{<:Number, 2}, + tVars::HFtempVars{:RHF}; kws...) + res = HFcore(SCFmethod, N, Hcore, HeeI, S, X, tVars; kws...) + pushHFtempVars!(tVars, res) +end + # RHF -function RHFcore(SCFmethod::Symbol, N::Int, - Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, - S::Array{<:Number, 2}, X::Array{<:Number, 2}, - rVars::HFtempVars{:RHF}; kws...) +function HFcore(SCFmethod::Symbol, N::Int, + Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, + S::Array{<:Number, 2}, X::Array{<:Number, 2}, + rVars::HFtempVars{:RHF}; kws...) D = SCFmethods[SCFmethod](N÷2, Hcore, HeeI, S, X, rVars; kws...) partRes = getCFDE(Hcore, HeeI, X, D) partRes..., 2D, 2partRes[end] end -function SCF!(SCFmethod::Symbol, N::Int, - Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, - S::Array{<:Number, 2}, X::Array{<:Number, 2}, - rVars::HFtempVars{:RHF}; kws...) - res = RHFcore(SCFmethod, N, Hcore, HeeI, S, X, rVars; kws...) +function pushHFtempVars!(rVars::HFtempVars, res::Tuple) push!(rVars.Cs, res[1]) push!(rVars.Fs, res[2]) push!(rVars.Ds, res[3]) @@ -390,12 +401,11 @@ function SCF!(SCFmethod::Symbol, N::Int, push!(rVars.shared.Etots, res[6]) end - # UHF -function UHFcore(SCFmethod::Symbol, Ns::NTuple{2, Int}, - Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, - S::Array{<:Number, 2}, X::Array{<:Number, 2}, - uVars::NTuple{2, HFtempVars{:UHF}}; kws...) +function HFcore(SCFmethod::Symbol, Ns::NTuple{2, Int}, + Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, + S::Array{<:Number, 2}, X::Array{<:Number, 2}, + uVars::NTuple{2, HFtempVars{:UHF}}; kws...) Ds = SCFmethods[SCFmethod].(Ns, Ref(Hcore), Ref(HeeI), Ref(S), Ref(X), uVars; kws...) Dᵀnew = Ds |> sum @@ -403,11 +413,7 @@ function UHFcore(SCFmethod::Symbol, Ns::NTuple{2, Int}, partRes..., Dᵀnew, sum(partRes[end]) end -function SCF!(SCFmethod::Symbol, Ns::NTuple{2, Int}, - Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, - S::Array{<:Number, 2}, X::Array{<:Number, 2}, - uVars::NTuple{2, HFtempVars{:UHF}}; kws...) - res = UHFcore(SCFmethod, Ns, Hcore, HeeI, S, X, uVars; kws...) +function pushHFtempVars!(uVars::NTuple{2, HFtempVars{:UHF}}, res::Tuple) fields = [:Cs, :Fs, :Ds, :Es] for (field, vars) in zip(fields, @view res[1:4]) push!.(getfield.(uVars, field), vars) @@ -417,7 +423,24 @@ function SCF!(SCFmethod::Symbol, Ns::NTuple{2, Int}, end -# Fastest +function popHFtempVars!(rVars::HFtempVars) + pop!(rVars.Cs) + pop!(rVars.Fs) + pop!(rVars.Ds) + pop!(rVars.Es) + pop!(rVars.shared.Dtots) + pop!(rVars.shared.Etots) +end + +function popHFtempVars!(uVars::NTuple{2, HFtempVars{:UHF}}) + fields = [:Cs, :Fs, :Ds, :Es] + for field in fields pop!.(getfield.(uVars, field)) end + pop!(uVars[1].shared.Dtots) + pop!(uVars[1].shared.Etots) +end + + +# Default function ADMMSolver(vec, B; convexConstraint=true) len = length(vec) A = ones(len) |> transpose |> Array From 5b7a201c94ca680bcd21e528cd3dd6b79577d1c3 Mon Sep 17 00:00:00 2001 From: frankwswang Date: Sun, 29 Aug 2021 17:41:22 -0400 Subject: [PATCH 10/33] Code optimizations. --- src/Basis.jl | 13 +- src/Differentiation.jl | 21 ++- src/FileIO.jl | 3 +- src/HartreeFock.jl | 328 ++++++++++++++++++++++--------------- src/Integration/OneBody.jl | 3 +- src/Integration/TwoBody.jl | 4 +- src/Library.jl | 2 +- src/Optimization.jl | 21 +-- src/Overload.jl | 27 +-- src/Tools.jl | 54 +++++- 10 files changed, 298 insertions(+), 178 deletions(-) diff --git a/src/Basis.jl b/src/Basis.jl index 63048524..43c38a08 100644 --- a/src/Basis.jl +++ b/src/Basis.jl @@ -279,13 +279,15 @@ struct GTBasis{N, BT} <: BasisSetData{N} function GTBasis(basis::Array{<:AbstractFloatingGTBasisFunc, 1}, S::Array{<:Number, 2}, Te::Array{<:Number, 2}, eeI::Array{<:Number, 4}) new{basisSize(basis) |> sum, typeof(basis)}(basis, S, Te, eeI, - (mol, nucCoords)->nucAttractions(basis, mol, nucCoords)[:,:,1], - (mol, nucCoords)->nucAttractions(basis, mol, nucCoords)[:,:,1] + Te) + (mol, nucCoords)->dropdims(nucAttractions(basis, mol, nucCoords), dims=3), + (mol, nucCoords)->dropdims(nucAttractions(basis, mol, nucCoords), dims=3) + Te) end end GTBasis(basis::Array{<:AbstractFloatingGTBasisFunc, 1}) = -GTBasis(basis, overlaps(basis)[:,:,1], elecKinetics(basis)[:,:,1], eeInteractions(basis)[:,:,:,:,1]) +GTBasis(basis, dropdims(overlaps(basis), dims=3), + dropdims(elecKinetics(basis), dims=3), + dropdims(eeInteractions(basis), dims=5)) function sortBasisFuncs(bs::Array{<:FloatingGTBasisFunc, 1}; groupCenters::Bool=false) @@ -419,12 +421,11 @@ end function genBFuncsFromText(content::String; adjustContent::Bool=false, - adjustFunction::Function=(txt)-> - replace(txt, SciNotMarker => "e"), + adjustFunction::F=sciNotReplace, excludeFirstNlines=0, excludeLastNlines=0, center::Union{AbstractArray, Tuple{Vararg{<:ParamBox}}, - Missing}=missing) + Missing}=missing) where {F<:Function} adjustContent && (content = adjustFunction(content)) lines = split.(content |> IOBuffer |> readlines)[1+excludeFirstNlines : end-excludeLastNlines] data = [advancedParse.(i) for i in lines] diff --git a/src/Differentiation.jl b/src/Differentiation.jl index 5538d548..cdcf2e62 100644 --- a/src/Differentiation.jl +++ b/src/Differentiation.jl @@ -55,12 +55,13 @@ end # In order to solve world age problem from `GridBox` (pb::ParamBox)() = Base.invokelatest(pb.map[], pb.data[]) -ParamBox(x::Number, name::Symbol=:undef; mapFunction::Function=itself, - canDiff::Bool=true, index::Union{Int, Nothing}=nothing, paramType::Type{<:Number}=Float64) = +ParamBox(x::Number, name::Symbol=:undef; mapFunction::F=itself, + canDiff::Bool=true, index::Union{Int, Nothing}=nothing, + paramType::Type{<:Number}=Float64) where {F<:Function}= ParamBox(fill(x |> paramType), Ref(mapFunction), Ref(canDiff), index; name) -ParamBox(data::Array{<:Number, 0}, name::Symbol=:undef; mapFunction::Function=itself, - canDiff::Bool=true, index::Union{Int, Nothing}=nothing) = +ParamBox(data::Array{<:Number, 0}, name::Symbol=:undef; mapFunction::F=itself, + canDiff::Bool=true, index::Union{Int, Nothing}=nothing) where {F<:Function} = ParamBox(data, Ref(mapFunction), Ref(canDiff), index; name) @@ -79,7 +80,7 @@ end function oneBodyDerivativeCore(∂bfs::Array{<:AbstractFloatingGTBasisFunc, 1}, bfs::Array{<:AbstractFloatingGTBasisFunc, 1}, X::Array{Float64, 2}, ∂X::Array{Float64, 2}, - ʃ::Function, isGradient::Bool = false) + ʃ::F, isGradient::Bool = false) where {F<:Function} dimOfʃ = 1+isGradient*2 bsSize = ∂bfs |> length ∂ʃ = ones(bsSize, bsSize, dimOfʃ) @@ -110,7 +111,7 @@ end function twoBodyDerivativeCore(∂bfs::Array{<:AbstractFloatingGTBasisFunc, 1}, bfs::Array{<:AbstractFloatingGTBasisFunc, 1}, X::Array{Float64, 2}, ∂X::Array{Float64, 2}, - ʃ::Function, isGradient::Bool = false) + ʃ::F, isGradient::Bool = false) where {F<:Function} dimOfʃ = 1+isGradient*2 bsSize = ∂bfs |> length ∂ʃ = ones(bsSize, bsSize, bsSize, bsSize, dimOfʃ) @@ -147,8 +148,10 @@ function twoBodyDerivativeCore(∂bfs::Array{<:AbstractFloatingGTBasisFunc, 1}, end -function derivativeCore(bs::Array{<:AbstractFloatingGTBasisFunc, 1}, par::ParamBox, S::Array{Float64, 2}; - oneBodyFunc::Function=itself, twoBodyFunc::Function=itself, oneBodyGrad::Bool=false, twoBodyGrad::Bool=false) +function derivativeCore(bs::Array{<:AbstractFloatingGTBasisFunc, 1}, par::ParamBox, + S::Array{Float64, 2}; oneBodyFunc::F1=itself, + twoBodyFunc::F2=itself, oneBodyGrad::Bool=false, + twoBodyGrad::Bool=false) where {F1<:Function, F2<:Function} # ijkl in chemists' notation of spatial bases (ij|kl). ∂bfs = deriveBasisFunc.(bs, Ref(par)) |> flatten # println("S1_1") @@ -197,7 +200,7 @@ function ∂HFenergy(bs::Array{<:AbstractFloatingGTBasisFunc, 1}, par::ParamBox, Cₓ = (C isa Tuple) ? (Ref(Xinv) .* C) : (Xinv * C) # println("S1") ∂hij, ∂hijkl = derivativeCore(bs, par, S, oneBodyFunc=(i,j)->coreHij(i,j,mol,nucCoords), twoBodyFunc=eeInteraction) - getEᵀ(∂hij, ∂hijkl, Cₓ, nElectron) + getEᵀ(dropdims(∂hij, dims=3), dropdims(∂hijkl, dims=5), Cₓ, nElectron) end diff --git a/src/FileIO.jl b/src/FileIO.jl index e4e9e8c3..6434c141 100644 --- a/src/FileIO.jl +++ b/src/FileIO.jl @@ -23,7 +23,8 @@ function checkFname(Fname::String; showWarning::Bool=true) end -function advancedParse(content::AbstractString, ParseFunc::Function=adaptiveParse) +function advancedParse(content::AbstractString, + ParseFunc::F=adaptiveParse) where {F<:Function} res = ParseFunc(content) res === nothing && (res = content) res diff --git a/src/HartreeFock.jl b/src/HartreeFock.jl index e9c08b48..4d1ef635 100644 --- a/src/HartreeFock.jl +++ b/src/HartreeFock.jl @@ -1,24 +1,30 @@ export runHF, runHFcore, SCFconfig -using LinearAlgebra: dot, Hermitian +using LinearAlgebra: dot, Hermitian, ishermitian using PiecewiseQuadratics: indicator using SeparableOptimization, Convex, COSMO using Statistics: median -getXcore1(S) = S^(-0.5) |> Array +const TelLB = Float64 # Union{} to loose constraint +const TelUB = Float64 # Any to loose constraint -const getXmethods = Dict(1=>getXcore1) +getXcore1(S::Matrix{T}) where {TelLB<:T<:TelUB} = S^(-0.5) |> Array -getX(S; method::Int=1) = getXmethods[method](S) +const getXmethods = Dict{Int, Function}(1=>getXcore1) +getX(S::Matrix{T}; method::Int=1) where {TelLB<:T<:TelUB} = getXmethods[method](S) -function getC(X, F; outputCx::Bool=false, outputEmo::Bool=false) + +function getC(X::Matrix{T1}, F::Matrix{T2}; + outputCx::Bool=false, outputEmo::Bool=false) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB} ϵ, Cₓ = eigen(X'*F*X |> Hermitian, sortby=x->x) outC = outputCx ? Cₓ : X*Cₓ outputEmo ? (outC, ϵ) : outC end -function getCfromGWH(S, Hcore; K=1.75, X=getX(S), _kws...) +function getCfromGWH(S::Matrix{T1}, Hcore::Matrix{T2}; K=1.75, X=getX(S), _kws...) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB} l = size(Hcore)[1] H = zero(Hcore) for i in 1:l, j in 1:l @@ -27,21 +33,28 @@ function getCfromGWH(S, Hcore; K=1.75, X=getX(S), _kws...) getC(X, H) end -getCfromHcore(S, Hcore; X=getX(S), _kws...) = getC(X, Hcore) +getCfromHcore(S::Matrix{T1}, Hcore::Matrix{T2}; X=getX(S), _kws...) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB} = + getC(X, Hcore) const guessCmethods = Dict(:GWH=>getCfromGWH, :Hcore=>getCfromHcore) -guessC(S, Hcore; method::Symbol=:GWH, kws...) = guessCmethods[method](S, Hcore; kws...) +guessC(S::Matrix{T1}, Hcore::Matrix{T2}; method::Symbol=:GWH, kws...) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB} = + guessCmethods[method](S, Hcore; kws...) -getD(C, Nˢ) = @views (C[:,1:Nˢ]*C[:,1:Nˢ]') |> Hermitian |> Array +getD(C::Matrix{T}, Nˢ::Int) where {TelLB<:T<:TelUB} = +@views (C[:,1:Nˢ]*C[:,1:Nˢ]') |> Hermitian |> Array # Nˢ: number of electrons with the same spin. -getD(X, F, Nˢ) = getD(getC(X, F), Nˢ) +getD(X::Matrix{T1}, F::Matrix{T2}, Nˢ::Int) where {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB} = +getD(getC(X, F), Nˢ) -function getGcore(HeeI, DJ, DK) +function getGcore(HeeI::Array{T1, 4}, DJ::Matrix{T2}, DK::Matrix{T3}) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB, TelLB<:T3<:TelUB} G = zero(DJ) l = size(G)[1] for μ = 1:l, ν = 1:l # fastest @@ -51,41 +64,65 @@ function getGcore(HeeI, DJ, DK) end # RHF -@inline getG(HeeI, D) = getGcore(HeeI, 2D, D) +getG(HeeI::Array{T1, 4}, D::Matrix{T2}) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB} = +getGcore(HeeI, 2D, D) # UHF -@inline getG(HeeI, D, Dᵀ) = getGcore(HeeI, Dᵀ, D) +getG(HeeI::Array{T1, 4}, D::Matrix{T2}, Dᵀ::Matrix{T3}) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB, TelLB<:T3<:TelUB} = +getGcore(HeeI, Dᵀ, D) -@inline getF(Hcore, G) = Hcore + G +getF(Hcore::Matrix{T1}, G::Matrix{T2}) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB} = + Hcore + G # RHF -@inline getF(Hcore, HeeI, D::Array{<:Number, 2}, Dᵀ::Array{<:Number, 2}) = +getF(Hcore::Matrix{T1}, HeeI::Array{T2, 4}, D::Matrix{T3}, Dᵀ::Matrix{T4}) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB, TelLB<:T3<:TelUB, TelLB<:T4<:TelUB} = getF(Hcore, getG(HeeI, D, Dᵀ)) # UHF -@inline getF(Hcore, HeeI, D::Array{<:Number, 2}) = getF(Hcore, getG(HeeI, D)) +getF(Hcore::Matrix{T1}, HeeI::Array{T2, 4}, D::Matrix{T3}) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB, TelLB<:T3<:TelUB} = +getF(Hcore, getG(HeeI, D)) + -@inline getF(Hcore, HeeI, Ds::Tuple{Vararg{Array{<:Number, 2}}}) = +getF(Hcore::Matrix{T1}, HeeI::Array{T2, 4}, Ds::NTuple{N, Matrix{T3}}) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB, TelLB<:T3<:TelUB, N} = getF(Hcore, getG(HeeI, Ds...)) -@inline getE(Hcore, F, D) = dot(transpose(D), 0.5*(Hcore + F)) +getE(Hcore::Matrix{T1}, F::Matrix{T2}, D::Matrix{T3}) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB, TelLB<:T3<:TelUB} = +dot(transpose(D), 0.5*(Hcore + F)) -@inline getEᵀcore(Hcore, F, D) = 2*getE(Hcore, F, D) +# RHF +getEᵀcore(Hcore::Matrix{T1}, F::Matrix{T2}, D::Matrix{T3}) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB, TelLB<:T3<:TelUB} = +2*getE(Hcore, F, D) -@inline getEᵀcore(Hcore, Fᵅ, Dᵅ, Fᵝ, Dᵝ) = getE(Hcore, Fᵅ, Dᵅ) + - getE(Hcore, Fᵝ, Dᵝ) +# UHF +getEᵀcore(Hcore::Matrix{T1}, Fᵅ::Matrix{T2}, Dᵅ::Matrix{T3}, + Fᵝ::Matrix{T4}, Dᵝ::Matrix{T5}) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB, TelLB<:T3<:TelUB, + TelLB<:T4<:TelUB, TelLB<:T5<:TelUB} = +getE(Hcore, Fᵅ, Dᵅ) + getE(Hcore, Fᵝ, Dᵝ) -function getEᵀ(Hcore, HeeI, C::Array{<:Number, 2}, N::Int) # RHF +# RHF +function getEᵀ(Hcore::Matrix{T1}, HeeI::Array{T2, 4}, C::Matrix{T3}, N::Int) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB, TelLB<:T3<:TelUB} D = getD(C, N÷2) F = getF(Hcore, HeeI, D) getEᵀcore(Hcore, F, D) end # UHF -function getEᵀ(Hcore, HeeI, (Cᵅ,Cᵝ)::NTuple{2, Array{<:Number, 2}}, (Nᵅ,Nᵝ)::NTuple{2, Int}) +function getEᵀ(Hcore::Matrix{T1}, HeeI::Array{T2, 4}, (Cᵅ,Cᵝ)::NTuple{2, Matrix{T3}}, + (Nᵅ,Nᵝ)::NTuple{2, Int}) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB, TelLB<:T3<:TelUB} Dᵅ = getD(Cᵅ, Nᵅ) Dᵝ = getD(Cᵝ, Nᵝ) Dᵀ = Dᵅ + Dᵝ @@ -95,7 +132,9 @@ function getEᵀ(Hcore, HeeI, (Cᵅ,Cᵝ)::NTuple{2, Array{<:Number, 2}}, (Nᵅ, end -function getCFDE(Hcore, HeeI, X, Ds...) +function getCFDE(Hcore::Matrix{T1}, HeeI::Array{T2, 4}, X::Matrix{T3}, + Ds::Vararg{Matrix{T4}, N}) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB, TelLB<:T3<:TelUB, TelLB<:T4<:TelUB, N} Fnew = getF(Hcore, HeeI, Ds) Enew = getE(Hcore, Fnew, Ds[1]) Cnew = getC(X, Fnew) @@ -104,8 +143,8 @@ end # RHF -function initializeSCF(Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, - C::Array{<:Number, 2}, N::Int) +function initializeSCF(Hcore::Matrix{T1}, HeeI::Array{T2, 4}, C::Matrix{T3}, N::Int) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB, TelLB<:T3<:TelUB} Nˢ = N÷2 D = getD(C, Nˢ) F = getF(Hcore, HeeI, D) @@ -113,9 +152,11 @@ function initializeSCF(Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, HFtempVars(:RHF, Nˢ, C, F, D, E, 2D, 2E) end -function initializeSCF(Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, - Cs::Union{Array{<:Number, 2}, NTuple{2, Array{<:Number, 2}}}, - Ns::NTuple{2, Int}) # UHF +# UHF +function initializeSCF(Hcore::Matrix{T1}, HeeI::Array{T2, 4}, + Cs::Union{Matrix{T3}, NTuple{2, Matrix{T3}}}, + Ns::NTuple{2, Int}) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB, TelLB<:T3<:TelUB} if Cs isa Array{<:Number, 2} C2 = copy(Cs) l = min(size(C2)[1], 2) @@ -131,19 +172,19 @@ function initializeSCF(Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, res = HFtempVars.(:UHF, Ns, Cs, Fs, Ds, Es) res[1].shared.Dtots = res[2].shared.Dtots = Dᵀs res[1].shared.Etots = res[2].shared.Etots = Eᵀs - res[1], res[2] + res |> Tuple end struct SCFconfig{N} methods::NTuple{N, Symbol} intervals::NTuple{N, Float64} - methodConfigs::NTuple{N, <:Array{<:Pair, 1}} + methodConfigs::NTuple{N, <:Vector{<:Pair}} oscillateThreshold::Float64 - function SCFconfig(methods::Array{Symbol, 1}, intervals::Array{Float64, 1}, - # configs::Dict{Int, <:Array{<:Pair, 1}}; printInfo=true) - configs::Dict{Int, <:Array{<:Any, 1}}=Dict(1=>[]); + function SCFconfig(methods::Vector{Symbol}, intervals::Vector{Float64}, + # configs::Dict{Int, <:Vector{<:Pair}}; printInfo=true) + configs::Dict{Int, <:Vector{<:Any}}=Dict(1=>[]); oscillateThreshold::Float64=1e-5) l = length(methods) kwPairs = [Pair[] for _=1:l] @@ -157,8 +198,8 @@ end mutable struct HFinterrelatedVars <: HartreeFockintermediateData - Dtots::Array{<:Array{<:Number, 2}, 1} - Etots::Array{<:Real, 1} + Dtots::Vector{Matrix{T}} where {TelLB<:T<:TelUB} + Etots::Vector{Float64} HFinterrelatedVars() = new() HFinterrelatedVars(Dtots) = new(Dtots) @@ -167,34 +208,35 @@ end struct HFtempVars{HFtype, N} <: HartreeFockintermediateData - Cs::Array{<:Array{<:Number, 2}, 1} - Fs::Array{<:Array{<:Number, 2}, 1} - Ds::Array{<:Array{<:Number, 2}, 1} - Es::Array{<:Real, 1} + Cs::Vector{Matrix{T1}} where {TelLB<:T1<:TelUB} + Fs::Vector{Matrix{T2}} where {TelLB<:T2<:TelUB} + Ds::Vector{Matrix{T3}} where {TelLB<:T3<:TelUB} + Es::Vector{Float64} shared::HFinterrelatedVars HFtempVars(HFtype::Symbol, N, C, F, D, E, vars...) = new{HFtype, N}([C], [F], [D], [E], HFinterrelatedVars([[x] for x in vars]...)) - HFtempVars(HFtype::Symbol, N, - Cs::Array{<:Array{<:Number, 2}, 1}, Fs::Array{<:Array{<:Number, 2}, 1}, - Ds::Array{<:Array{<:Number, 2}, 1}, Es::Array{Float64, 1}, - Dtots::Array{<:Array{<:Number, 2}, 1}, Etots::Array{Float64, 1}) = - new{HFtype, N}(Cs, Fs, Ds, Es, HFinterrelatedVars(Dtots, Etots)) + HFtempVars(HFtype::Symbol, Nˢ::Int, Cs::Vector{Matrix{T1}}, Fs::Vector{Matrix{T2}}, + Ds::Vector{Matrix{T3}}, Es::Vector{<:Real}, Dtots::Vector{Matrix{T4}}, + Etots::Vector{<:Real}) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB, TelLB<:T3<:TelUB, TelLB<:T4<:TelUB} = + new{HFtype, Nˢ}(Cs, Fs, Ds, Es, HFinterrelatedVars(Dtots, Etots)) end struct HFfinalVars{T, N, Nb} <: HartreeFockFinalValue{T} - E0HF::Union{Real, NTuple{2, Real}} - C::Union{Array{<:Number, 2}, NTuple{2, Array{<:Number, 2}}} - F::Union{Array{<:Number, 2}, NTuple{2, Array{<:Number, 2}}} - D::Union{Array{<:Number, 2}, NTuple{2, Array{<:Number, 2}}} - Emo::Union{Array{<:Number, 1}, NTuple{2, Array{<:Number, 1}}} - occu::Union{Array{Int, 1}, NTuple{2, Array{Int, 1}}} + E0HF::Union{Float64, NTuple{2, Float64}} + C::Union{Matrix{T1}, NTuple{2, Matrix{T1}}} where {TelLB<:T1<:TelUB} + F::Union{Matrix{T2}, NTuple{2, Matrix{T2}}} where {TelLB<:T2<:TelUB} + D::Union{Matrix{T3}, NTuple{2, Matrix{T3}}} where {TelLB<:T3<:TelUB} + Emo::Union{Vector{Float64}, NTuple{2, Vector{Float64}}} + occu::Union{Vector{Int}, NTuple{2, Vector{Int}}} temp::Union{HFtempVars{T}, NTuple{2, HFtempVars{T}}} isConverged::Bool - function HFfinalVars(X, vars::HFtempVars{:RHF}, convBool) + function HFfinalVars(X::Matrix{T}, vars::HFtempVars{:RHF}, isConverged::Bool) where + {TelLB<:T<:TelUB} C = vars.Cs[end] F = vars.Fs[end] D = vars.Ds[end] @@ -203,10 +245,11 @@ struct HFfinalVars{T, N, Nb} <: HartreeFockFinalValue{T} Nˢ = typeof(vars).parameters[2] occu = vcat(2*ones(Int, Nˢ), zeros(Int, size(X, 1) - Nˢ)) temp = vars - new{:RHF, 2Nˢ, length(Emo)}(E0HF, C, F, D, Emo, occu, temp, convBool) + new{:RHF, 2Nˢ, length(Emo)}(E0HF, C, F, D, Emo, occu, temp, isConverged) end - function HFfinalVars(X, (αVars, βVars)::NTuple{2, HFtempVars{:UHF}}, convBool) + function HFfinalVars(X::Matrix{T}, (αVars, βVars)::NTuple{2, HFtempVars{:UHF}}, + isConverged::Bool) where {TelLB<:T<:TelUB} C = (αVars.Cs[end], βVars.Cs[end]) F = (αVars.Fs[end], βVars.Fs[end]) D = (αVars.Ds[end], βVars.Ds[end]) @@ -216,53 +259,63 @@ struct HFfinalVars{T, N, Nb} <: HartreeFockFinalValue{T} Nˢs = (typeof(αVars).parameters[2], typeof(βVars).parameters[2]) occu = vcat.(ones.(Int, Nˢs), zeros.(Int, size(X, 1) .- Nˢs)) temp = (αVars, βVars) - new{:UHF, Nˢs |> sum, length(Emo[1])}(E0HF, C, F, D, Emo, occu, temp, convBool) + new{:UHF, Nˢs |> sum, length(Emo[1])}(E0HF, C, F, D, Emo, occu, temp, isConverged) end end -const defaultSCFconfig = SCFconfig([:ADIIS, :DIIS, :ADIIS], [1e-4, 1e-6, 1e-12]) +const defaultSCFconfig = SCFconfig([:ADIIS, :DIIS, :ADIIS], [1e-4, 1e-6, 1e-10]) -function runHF(bs::Array{<:AbstractFloatingGTBasisFunc, 1}, - mol, nucCoords, N=getCharge(mol); initialC=:GWH, getXmethod=getX, - scfConfig=defaultSCFconfig, earlyTermination::Bool=true, - HFtype=:RHF, printInfo::Bool=true, maxSteps::Int=1000) +function runHF(bs::Vector{<:AbstractFloatingGTBasisFunc}, + mol::Vector{String}, + nucCoords::Vector{<:Vector{<:Real}}, + N::Int=getCharge(mol); + initialC::Union{Matrix{T}, NTuple{2, Matrix{T}}, Symbol}=:GWH, + HFtype::Symbol=:RHF, + scfConfig::SCFconfig=defaultSCFconfig, + earlyTermination::Bool=true, + printInfo::Bool=true, + maxSteps::Int=1000) where {TelLB<:T<:TelUB} @assert length(mol) == length(nucCoords) @assert (basisSize(bs) |> sum) >= ceil(N/2) gtb = GTBasis(bs) runHF(gtb, mol, nucCoords, N; initialC, scfConfig, - getXmethod, HFtype, printInfo, maxSteps, earlyTermination) + HFtype, printInfo, maxSteps, earlyTermination) end function runHF(gtb::BasisSetData, - mol::Array{String, 1}, - nucCoords::Array{<:Array{<:Real, 1}, 1}, + mol::Vector{String}, + nucCoords::Vector{<:Vector{<:Real}}, N::Union{NTuple{2, Int}, Int}=getCharge(mol); - initialC::Union{Array{<:Number, 2}, - NTuple{2, Array{<:Number, 2}}, - Symbol}=:GWH, - getXmethod::Function=getX, - scfConfig::SCFconfig=defaultSCFconfig, earlyTermination::Bool=true, - HFtype::Symbol=:RHF, printInfo::Bool=true, maxSteps::Int=1000) + initialC::Union{Matrix{T}, NTuple{2, Matrix{T}}, Symbol}=:GWH, + HFtype::Symbol=:RHF, + scfConfig::SCFconfig=defaultSCFconfig, + earlyTermination::Bool=true, + printInfo::Bool=true, + maxSteps::Int=1000) where {TelLB<:T<:TelUB} @assert length(mol) == length(nucCoords) @assert typeof(gtb).parameters[1] >= ceil(N/2) Hcore = gtb.getHcore(mol, nucCoords) - X = getXmethod(gtb.S) + X = getX(gtb.S) initialC isa Symbol && (initialC = guessC(gtb.S, Hcore; X, method=initialC)) - runHFcore(N, Hcore, gtb.eeI, gtb.S, X, initialC; scfConfig, printInfo, maxSteps, HFtype, earlyTermination) + runHFcore(N, Hcore, gtb.eeI, gtb.S, X, initialC; + scfConfig, printInfo, maxSteps, HFtype, earlyTermination) end -function runHFcore(N::Union{NTuple{2, Int}, Int}, - Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, - S::Array{<:Number, 2}, - X::Array{<:Number, 2}=getX(S), - C::Union{Array{<:Number, 2}, - NTuple{2, Array{<:Number, 2}}}=guessC(S, Hcore; X); +function runHFcore(N::Union{NTuple{2, Int}, Int}, + Hcore::Matrix{T1}, + HeeI::Array{T2, 4}, + S::Matrix{T3}, + X::Matrix{T4}=getX(S), + C::Union{Matrix{T5}, NTuple{2, Matrix{T5}}}=guessC(S, Hcore; X); HFtype::Symbol=:RHF, - scfConfig::SCFconfig{L}, printInfo::Bool=true, - maxSteps::Int=1000, earlyTermination::Bool=true) where {L} + scfConfig::SCFconfig{L}, + earlyTermination::Bool=true, + printInfo::Bool=true, + maxSteps::Int=1000) where {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB, + TelLB<:T3<:TelUB, TelLB<:T4<:TelUB, TelLB<:T5<:TelUB, L} @assert maxSteps > 0 HFtype == :UHF && (N isa Int) && (N = (N÷2, N-N÷2)) vars = initializeSCF(Hcore, HeeI, C, N) @@ -287,8 +340,8 @@ function runHFcore(N::Union{NTuple{2, Int}, Int}, returnStd=true) flag && (isConverged = Std > scfConfig.oscillateThreshold ? false : true; break) earlyTermination && (Etots[end] - EtotMin) / abs(EtotMin) > 0.2 && - (printInfo && println("Early termination of method $(method) due to the poor"* - " performance."); break) + (printInfo && println("Early termination of method ", method, + " due to the poor performance."); break) end end @@ -298,25 +351,24 @@ function runHFcore(N::Union{NTuple{2, Int}, Int}, end -function SDcore(Nˢ::Int, Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, - X::Array{<:Number, 2}, - F::Array{<:Number, 2}, - D::Array{<:Number, 2}; - dampingStrength::Float64=0.0, _kws...) +function SDcore(Nˢ::Int, Hcore::Matrix{T1}, HeeI::Array{T2, 4}, X::Matrix{T3}, + F::Matrix{T4}, D::Matrix{T5}; dampingStrength::Float64=0.0, _kws...) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB, TelLB<:T3<:TelUB, TelLB<:T4<:TelUB, + TelLB<:T5<:TelUB} @assert 0 <= dampingStrength <= 1 "The range of `dampingStrength`::Float64 is [0,1]." Dnew = getD(X, F, Nˢ) (1-dampingStrength)*Dnew + dampingStrength*D end -function xDIIScore(method::Symbol, Nˢ::Int, Hcore::Array{<:Number, 2}, - HeeI::Array{<:Number, 4}, - S::Array{<:Number, 2}, X::Array{<:Number, 2}, - Fs::Array{<:Array{<:Number, 2}, 1}, - Ds::Array{<:Array{<:Number, 2}, 1}, - Es::Array{Float64, 1}; - DIISsize::Int=15, solver=:default, _kws...) - DIISmethod, convexConstraint, permuteData = DIISmethods[method] +function xDIIScore(method::Symbol, Nˢ::Int, Hcore::Matrix{T1}, HeeI::Array{T2, 4}, + S::Matrix{T3}, X::Matrix{T4}, Fs::Vector{Matrix{T5}}, + Ds::Vector{Matrix{T6}},Es::Vector{Float64}; + DIISsize::Int=15, solver=:default, convexConstraint::Bool=true, + _kws...) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB, TelLB<:T3<:TelUB, TelLB<:T4<:TelUB, + TelLB<:T5<:TelUB, TelLB<:T6<:TelUB} + DIISmethod, permuteData = DIISmethods[method] is = permuteData ? sortperm(Es) : (:) ∇s = (@view Fs[is])[1:end .> end-DIISsize] Ds = (@view Ds[is])[1:end .> end-DIISsize] @@ -327,12 +379,13 @@ function xDIIScore(method::Symbol, Nˢ::Int, Hcore::Array{<:Number, 2}, getD(X, grad |> Hermitian |> Array, Nˢ) # grad == F. end -const DIISmethods = Dict( :DIIS => ((∇s, Ds, _, S)->DIIScore(∇s, Ds, S), false, true ), - :EDIIS => ((∇s, Ds, Es, _)->EDIIScore(∇s, Ds, Es), true, false), - :ADIIS => ((∇s, Ds, _, _)->ADIIScore(∇s, Ds), true, false)) +const DIISmethods = Dict( :DIIS => ((∇s, Ds, _, S)->DIIScore(∇s, Ds, S), true ), + :EDIIS => ((∇s, Ds, Es, _)->EDIIScore(∇s, Ds, Es), false), + :ADIIS => ((∇s, Ds, _, _)->ADIIScore(∇s, Ds), false)) -function EDIIScore(∇s, Ds, Es) +function EDIIScore(∇s::Vector{Matrix{T1}}, Ds::Vector{Matrix{T2}}, + Es::Vector{Float64}) where {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB} len = length(Ds) B = ones(len, len) for i=1:len, j=1:len @@ -342,7 +395,8 @@ function EDIIScore(∇s, Ds, Es) end -function ADIIScore(∇s, Ds) +function ADIIScore(∇s::Vector{Matrix{T1}}, Ds::Vector{Matrix{T2}}) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB} len = length(Ds) B = ones(len, len) vec = [dot(D - Ds[end], ∇s[end]) for D in Ds] @@ -353,7 +407,8 @@ function ADIIScore(∇s, Ds) end -function DIIScore(∇s, Ds, S) +function DIIScore(∇s::Vector{Matrix{T1}}, Ds::Vector{Matrix{T2}}, S::Matrix{T3}) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB, TelLB<:T3<:TelUB} len = length(Ds) B = ones(len, len) vec = zeros(len) @@ -364,35 +419,45 @@ function DIIScore(∇s, Ds, S) end -const SD = (Nˢ, Hcore, HeeI, _dm, X, tVars::HFtempVars; kws...) -> - SDcore(Nˢ, Hcore, HeeI, X, tVars.Fs[end], tVars.Ds[end]; kws...) +const SD = ((Nˢ::Int, Hcore::Matrix{T1}, HeeI::Array{T2, 4}, _dm::Any, X::Matrix{T3}, + tVars::HFtempVars; kws...) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB, TelLB<:T3<:TelUB}) -> + SDcore(Nˢ, Hcore, HeeI, X, tVars.Fs[end], tVars.Ds[end]; kws...) const xDIIS = (method::Symbol) -> - (Nˢ, Hcore, HeeI, S, X, tVars::HFtempVars; kws...) -> + ((Nˢ::Int, Hcore::Matrix{T1}, HeeI::Array{T2, 4}, S::Matrix{T3}, + X::Matrix{T4}, tVars::HFtempVars; kws...) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB, + TelLB<:T3<:TelUB, TelLB<:T4<:TelUB}) -> xDIIScore(method, Nˢ, Hcore, HeeI, S, X, tVars.Fs, tVars.Ds, tVars.Es; kws...) const SCFmethods = Dict( [:SD, :DIIS, :ADIIS, :EDIIS] .=> [ SD, xDIIS(:DIIS), xDIIS(:ADIIS), xDIIS(:EDIIS)]) -function HF!(SCFmethod::Symbol, N, Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, - S::Array{<:Number, 2}, X::Array{<:Number, 2}, - tVars::HFtempVars{:RHF}; kws...) +function HF!(SCFmethod::Symbol, N::Union{NTuple{2, Int}, Int}, + Hcore::Matrix{T1}, HeeI::Array{T2, 4}, S::Matrix{T3}, X::Matrix{T4}, + tVars::Union{HFtempVars{:RHF}, NTuple{2, HFtempVars{:UHF}}}; kws...) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB, TelLB<:T3<:TelUB, TelLB<:T4<:TelUB} res = HFcore(SCFmethod, N, Hcore, HeeI, S, X, tVars; kws...) pushHFtempVars!(tVars, res) end # RHF function HFcore(SCFmethod::Symbol, N::Int, - Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, - S::Array{<:Number, 2}, X::Array{<:Number, 2}, - rVars::HFtempVars{:RHF}; kws...) + Hcore::Matrix{T1}, HeeI::Array{T2, 4}, S::Matrix{T3}, X::Matrix{T4}, + rVars::HFtempVars{:RHF}; kws...) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB, TelLB<:T3<:TelUB, TelLB<:T4<:TelUB} D = SCFmethods[SCFmethod](N÷2, Hcore, HeeI, S, X, rVars; kws...) partRes = getCFDE(Hcore, HeeI, X, D) partRes..., 2D, 2partRes[end] end -function pushHFtempVars!(rVars::HFtempVars, res::Tuple) +function pushHFtempVars!(rVars::HFtempVars, + res::Tuple{Matrix{T1}, Matrix{T2}, Matrix{T3}, Float64, + Matrix{T4}, Float64}) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB, TelLB<:T3<:TelUB, + TelLB<:T4<:TelUB} push!(rVars.Cs, res[1]) push!(rVars.Fs, res[2]) push!(rVars.Ds, res[3]) @@ -403,23 +468,25 @@ end # UHF function HFcore(SCFmethod::Symbol, Ns::NTuple{2, Int}, - Hcore::Array{<:Number, 2}, HeeI::Array{<:Number, 4}, - S::Array{<:Number, 2}, X::Array{<:Number, 2}, - uVars::NTuple{2, HFtempVars{:UHF}}; kws...) + Hcore::Matrix{T1}, HeeI::Array{T2, 4}, S::Matrix{T3}, X::Matrix{T4}, + uVars::NTuple{2, HFtempVars{:UHF}}; kws...) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB, TelLB<:T3<:TelUB, TelLB<:T4<:TelUB} Ds = SCFmethods[SCFmethod].(Ns, Ref(Hcore), Ref(HeeI), Ref(S), Ref(X), uVars; kws...) Dᵀnew = Ds |> sum - partRes = getCFDE(Ref(Hcore), Ref(HeeI), Ref(X), Ds, Ref(Dᵀnew)) - partRes..., Dᵀnew, sum(partRes[end]) + partRes = getCFDE.(Ref(Hcore), Ref(HeeI), Ref(X), Ds, Ref(Dᵀnew)) + Eᵀnew = partRes[1][end] + partRes[2][end] + (partRes[1]..., Dᵀnew, Eᵀnew), (partRes[2]..., Dᵀnew, Eᵀnew) end -function pushHFtempVars!(uVars::NTuple{2, HFtempVars{:UHF}}, res::Tuple) - fields = [:Cs, :Fs, :Ds, :Es] - for (field, vars) in zip(fields, @view res[1:4]) - push!.(getfield.(uVars, field), vars) - end - push!(uVars[1].shared.Dtots, res[5]) - push!(uVars[1].shared.Etots, res[6]) +function pushHFtempVars!(uVars::NTuple{2, HFtempVars{:UHF}}, + res::NTuple{2, Tuple{Matrix{T1}, Matrix{T2}, Matrix{T3}, Float64, + Matrix{T4}, Float64}}) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB, TelLB<:T3<:TelUB, + TelLB<:T4<:TelUB} + pushHFtempVars!.(uVars, res) + pop!(uVars[1].shared.Dtots) + pop!(uVars[1].shared.Etots) end @@ -441,10 +508,10 @@ end # Default -function ADMMSolver(vec, B; convexConstraint=true) +function ADMMSolver(vec::Vector{Float64}, B::Matrix{Float64}; convexConstraint::Bool=true) len = length(vec) A = ones(len) |> transpose |> Array - b = [1] + b = Float64[1.0] g = convexConstraint ? fill(indicator(0, 1), len) : fill(indicator(-Inf, Inf), len) params = SeparableOptimization.AdmmParams(B, vec, A, b, g) settings = SeparableOptimization.Settings(; ρ=ones(1), σ=ones(len), compute_stats=true) @@ -453,10 +520,12 @@ function ADMMSolver(vec, B; convexConstraint=true) end -# With Convex.jl, more flexible -function ConvexSolver(vec, B; convexConstraint=true, method=COSMO.Optimizer) +# With Convex.jl, more flexible with solvers, less flexible with input values. +function ConvexSolver(vec::Vector{<:Number}, B::Matrix{<:Number}; + convexConstraint::Bool=true, method::Any=COSMO.Optimizer) len = length(vec) c = convexConstraint ? Convex.Variable(len, Positive()) : Convex.Variable(len) + B = (convexConstraint && isSemdefinite(B)) ? B : semidefinite(B) f = 0.5* Convex.quadform(c, B) + dot(c,vec) o = Convex.minimize(f, sum(c)==1) Convex.solve!(o, method, silent_solver=true) @@ -466,8 +535,11 @@ end const ConstraintSolvers = Dict(:default=>ADMMSolver, :Convex=>ConvexSolver) -constraintSolver(vec, B, solver::Symbol=:default; convexConstraint=true) = +constraintSolver(vec::Vector{T1}, B::Matrix{T2}, + solver::Symbol=:default; convexConstraint::Bool=true) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB} = ConstraintSolvers[solver](vec, B; convexConstraint) -constraintSolver(vec, B, ConvexMethod; convexConstraint=true) = +constraintSolver(vec::Vector{T1}, B::Matrix{T2}, ConvexMethod; convexConstraint=true) where + {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB} = ConvexSolver(vec, B; convexConstraint, method=ConvexMethod) \ No newline at end of file diff --git a/src/Integration/OneBody.jl b/src/Integration/OneBody.jl index 9cc50042..1190b316 100644 --- a/src/Integration/OneBody.jl +++ b/src/Integration/OneBody.jl @@ -35,7 +35,8 @@ function oneBodyBFTensor(libcinFunc::Val, b1::AbstractFloatingGTBasisFunc, b2::A end -function oneBodyBSTensor(BasisSet::Array{<:AbstractFloatingGTBasisFunc, 1}, intFunc::Function) +function oneBodyBSTensor(BasisSet::Array{<:AbstractFloatingGTBasisFunc, 1}, + intFunc::F) where {F<:Function} subSize = basisSize(BasisSet) |> collect accuSize = vcat(0, accumulate(+, subSize)) len = subSize |> sum diff --git a/src/Integration/TwoBody.jl b/src/Integration/TwoBody.jl index 29e13ff7..4be6541d 100644 --- a/src/Integration/TwoBody.jl +++ b/src/Integration/TwoBody.jl @@ -30,8 +30,8 @@ function twoBodyBFTensor(libcinFunc::Val, end -function twoBodyBSTensor(BasisSet::Array{<:AbstractFloatingGTBasisFunc, 1}, intFunc::Function; - outputUniqueIndices::Bool=false) +function twoBodyBSTensor(BasisSet::Array{<:AbstractFloatingGTBasisFunc, 1}, intFunc::F; + outputUniqueIndices::Bool=false) where {F<:Function} subSize = basisSize(BasisSet) |> collect accuSize = vcat(0, accumulate(+, subSize)) totalSize = subSize |> sum diff --git a/src/Library.jl b/src/Library.jl index af5c535a..a3f636d0 100644 --- a/src/Library.jl +++ b/src/Library.jl @@ -69,6 +69,7 @@ const BasisFuncNames = const SciNotMarker = r"D(?=[\+\-])" +const sciNotReplace = (txt)->replace(txt, SciNotMarker => "e") const BStextEndingMarker = "****" const BasisSetList = Dict(BasisFuncNames .=> BasisFuncTexts) const AtomicNumberList = Dict(ElementNames .=> collect(1 : length(ElementNames))) @@ -84,7 +85,6 @@ const ParamNames = [:X, :Y, :Z, :d, :α, :L] const ParamSymbols = [:X, :Y, :Z, :con, :xpn, :len] const ParamList = Dict(ParamSymbols .=> ParamNames) - getCharge(nucs::Array{String, 1}) = getCharge.(nucs) |> sum getCharge(nucStr::String) = AtomicNumberList[nucStr] diff --git a/src/Optimization.jl b/src/Optimization.jl index cb922c2b..c85b8889 100644 --- a/src/Optimization.jl +++ b/src/Optimization.jl @@ -6,7 +6,8 @@ function gradDescent!(pars::Array{<:Real, 1}, grads::Array{<:Real, 1}, η=0.001) end -function updateParams!(pbs::Array{<:ParamBox, 1}, grads::Array{<:Real, 1}; method::Function=gradDescent!) +function updateParams!(pbs::Array{<:ParamBox, 1}, grads::Array{<:Real, 1}; + method::F=gradDescent!) where {F<:Function} parVals = [i[] for i in pbs] method(parVals, grads) for (m,n) in zip(pbs, parVals) @@ -18,7 +19,8 @@ end function defaultECmethod(HFtype, Hcore, HeeI, S, Ne) X = getX(S) - res = runHFcore(Ne, Hcore, HeeI, S, X, guessC(S, Hcore; X); printInfo=false, HFtype) + res = runHFcore(Ne, Hcore, HeeI, S, X, guessC(S, Hcore; X); + printInfo=false, HFtype, scfConfig=defaultSCFconfig) res.E0HF, res.C end @@ -27,8 +29,8 @@ function optimizeParams!(bs::Array{<:FloatingGTBasisFunc, 1}, pbs::Array{<:Param mol::Array{String, 1}, nucCoords::Array{<:AbstractArray, 1}, Ne::Union{NTuple{2, Int}, Int}=getCharge(mol); Etarget::Float64=NaN, threshold::Float64=0.0001, maxSteps::Int=2000, - printInfo::Bool=true, GDmethod::Function=gradDescent!, HFtype=:RHF, - ECmethod::Function=defaultECmethod) + printInfo::Bool=true, GDmethod::F1=gradDescent!, HFtype=:RHF, + ECmethod::F2=defaultECmethod) where {F1<:Function, F2<:Function} tAll = @elapsed begin i = 0 @@ -48,9 +50,9 @@ function optimizeParams!(bs::Array{<:FloatingGTBasisFunc, 1}, pbs::Array{<:Param Npars = length(parsL) while true - S = overlaps(bs)[:,:,1] - Hcore = coreH(bs, mol, nucCoords)[:,:,1] - HeeI = eeInteractions(bs)[:,:,:,:,1] + S = dropdims(overlaps(bs), dims=3) + Hcore = dropdims(coreH(bs, mol, nucCoords), dims=3) + HeeI = dropdims(eeInteractions(bs), dims=5) E, C = ECmethod(HFtype, Hcore, HeeI, S, Ne) t = @elapsed begin @@ -67,8 +69,7 @@ function optimizeParams!(bs::Array{<:FloatingGTBasisFunc, 1}, pbs::Array{<:Param println(IOContext(stdout, :limit => true), parsL) print(rpad("", 12), "grad = ") println(IOContext(stdout, :limit => true), grad) - println("Step duration: $(t) seconds.") - println("\n") + println("Step duration: ", t, " seconds.\n") end parsL = updateParams!(pbs, grad, method=GDmethod) @@ -89,7 +90,7 @@ function optimizeParams!(bs::Array{<:FloatingGTBasisFunc, 1}, pbs::Array{<:Param println(IOContext(stdout, :limit => true), pars[end, :]) print(rpad("", 12), "grad = ") println(IOContext(stdout, :limit => true), grads[end, :]) - println("Optimization duration: $(tAll/60) minutes.") + println("Optimization duration: ", tAll/60, " minutes.") !isConverged(Es) && println("The result has not converged.") end diff --git a/src/Overload.jl b/src/Overload.jl index 60f9399f..a50d7aa7 100644 --- a/src/Overload.jl +++ b/src/Overload.jl @@ -22,7 +22,7 @@ function show(io::IO, pb::ParamBox) j = " -> $(Symbol(pb.map[]))($i)" end print(io, typeof(pb)) - print(io, "($(round(pb.data[], sigdigits=nSigShown)))[$i$j]") + print(io, "(", round(pb.data[], sigdigits=nSigShown), ")[", i, j, "]") printstyled(io, "[∂]", color=c) end @@ -41,9 +41,9 @@ function show(io::IO, bf::BasisFunc) print(io, "(gauss, subshell, center)[") printstyled(io, xyz1, color=:cyan) print(io, xyz2) - print(io, "][$(round(bf.center[1](), sigdigits=nSigShown)), "* - "$(round(bf.center[2](), sigdigits=nSigShown)), "* - "$(round(bf.center[3](), sigdigits=nSigShown))]") + print(io, "][", round(bf.center[1](), sigdigits=nSigShown), ", ", + round(bf.center[2](), sigdigits=nSigShown), ", ", + round(bf.center[3](), sigdigits=nSigShown), "]") end function show(io::IO, bf::BasisFuncs) @@ -60,9 +60,9 @@ function show(io::IO, bf::BasisFuncs) print(io, "(gauss, subshell, center)[") printstyled(io, xyz1, color=:cyan) print(io, xyz2) - print(io, "][$(round(bf.center[1](), sigdigits=nSigShown)), "* - "$(round(bf.center[2](), sigdigits=nSigShown)), "* - "$(round(bf.center[3](), sigdigits=nSigShown))]") + print(io, "][", round(bf.center[1](), sigdigits=nSigShown), ", ", + round(bf.center[2](), sigdigits=nSigShown), ", ", + round(bf.center[3](), sigdigits=nSigShown), "]") end function show(io::IO, bfm::BasisFuncMix) @@ -82,15 +82,15 @@ end function show(io::IO, vars::HFtempVars) print(io, typeof(vars)) - print(io, "(shared.Etot=[$(round(vars.shared.Etots[1], sigdigits=nSigShown)), … , "* - "$(round(vars.shared.Etots[end], sigdigits=nSigShown))], "* + print(io, "(shared.Etot=[", round(vars.shared.Etots[1], sigdigits=nSigShown),", … , ", + round(vars.shared.Etots[end], sigdigits=nSigShown), "], "* "shared.Dtots, Cs, Es, Ds, Fs)") end function show(io::IO, vars::HFfinalVars) print(io, typeof(vars)) - print(io, "(E0HF=$(round(vars.E0HF, sigdigits=nSigShown)), C, F, D, Emo, occu, temp, "* - "isConverged)") + print(io, "(E0HF=", round(vars.E0HF, sigdigits=nSigShown), ", C, F, D, Emo, occu, temp"* + ", isConverged)") end @@ -106,8 +106,9 @@ setindex!(a::ParamBox, b) = begin a.data[] = b end ## If `ignoreContainerType = true`, then `ignoreFunction` is automitically set to be `true` ## as the `map` function for `ParamBox` is considered as a type of container for the actual ## stored data. -function hasBoolRelation(boolFunc::Function, pb1::ParamBox, pb2::ParamBox; - ignoreFunction=false, ignoreContainerType=false) +function hasBoolRelation(boolFunc::F, pb1::ParamBox, pb2::ParamBox; + ignoreFunction=false, + ignoreContainerType=false) where {F<:Function} if ignoreContainerType boolFunc(pb1.data, pb2.data) elseif ignoreFunction diff --git a/src/Tools.jl b/src/Tools.jl index 451025f0..8577638d 100644 --- a/src/Tools.jl +++ b/src/Tools.jl @@ -2,6 +2,7 @@ export hasEqual, hasIdentical, hasBoolRelation, markUnique, getUnique!, flatten, using Statistics: std, mean using Symbolics +using LinearAlgebra: eigvals, svdvals, eigen # Function for submudole loading and integrity checking. @@ -138,8 +139,9 @@ julia> begin true ``` """ -function hasBoolRelation(boolOp::Function, obj1, obj2; - ignoreFunction=false, ignoreContainerType=false) +function hasBoolRelation(boolOp::F, obj1, obj2; + ignoreFunction=false, + ignoreContainerType=false) where {F<:Function} res = true t1 = typeof(obj1) t2 = typeof(obj2) @@ -216,8 +218,9 @@ hasBooleanRelation(>=, d, c, b) = true true ``` """ -function hasBoolRelation(boolOp::Function, obj1, obj2, obj3...; - ignoreFunction=false, ignoreContainerType=false) +function hasBoolRelation(boolOp::F, obj1, obj2, obj3...; + ignoreFunction=false, + ignoreContainerType=false) where {F<:Function} res = hasBoolRelation(boolOp, obj1, obj2; ignoreFunction, ignoreContainerType) tmp = obj2 if res @@ -498,7 +501,8 @@ julia> begin ([1, 1, 2, 1], Any[S(1, 2.0), S(1, 2.1)]) ``` """ -function markUnique(arr::AbstractArray, args...; compareFunction::Function = hasEqual, kws...) +function markUnique(arr::AbstractArray, args...; + compareFunction::F=hasEqual, kws...) where {F<:Function} @assert length(arr) >= 1 "The length of input array should be not less than 1." f = (b...)->compareFunction((b..., args...)...; kws...) res = Int[1] @@ -519,7 +523,8 @@ function markUnique(arr::AbstractArray, args...; compareFunction::Function = has res, cmprList end -function getUnique!(arr::Array, args...; compareFunction::Function = hasEqual, kws...) +function getUnique!(arr::Array, args...; + compareFunction::F = hasEqual, kws...) where {F<:Function} @assert length(arr) > 1 "The length of input array should be larger than 1." f = (b...)->compareFunction((b..., args...)...; kws...) cmprList = eltype(arr)[arr[1]] @@ -553,7 +558,7 @@ function symbolReplace(sym::Symbol, pair::Pair{String, String}; count::Int=typem end -function renameFunc(fName::String, f::Function) +function renameFunc(fName::String, f::F) where {F<:Function} @eval ($(Symbol(fName)))(a...; b...) = $f(a...; b...) end @@ -599,4 +604,39 @@ function splitTerm(term::Num) terms = [term] end terms +end + + +trDistance(A::Matrix{<:Number}, B::Matrix{<:Number}) = 0.5*sum(svdvals(A-B)) + + + +function semidefiniteCore(B, value=1e-6; posORneg=0) + Hupper = B |> Hermitian |> Array + e, u = eigen(Hupper, sortby=x->x) + i1 = findall(x->x>0, e) + i2 = findall(x->x<0, e) + if posORneg > 0 + e[i2] .= value + elseif posORneg < 0 + e[i1] .= -value + else + length(i1) > length(i2) ? e[i2] .= value : e[i1] .= -value + end + u*diagm(e)*inv(u) |> Hermitian |> Array +end + +function semidefinite(B, value=1e-6; posORneg=0) + Hupper = semidefiniteCore(B, value; posORneg) + Hlower = semidefiniteCore(B', value; posORneg) + trDistance(Hupper, B) > trDistance(Hlower, B) ? Hlower : Hupper +end + + +function isSemdefinite(B) + ishermitian(B) && + begin + λs = eigvals(B) + (filter(x->x!=0, sign.(λs)) |> unique! |> length) == 1 + end end \ No newline at end of file From 7f88bcacd52f0df142bd10ab9d7688f1fcef841e Mon Sep 17 00:00:00 2001 From: frankwswang Date: Mon, 30 Aug 2021 14:09:52 -0400 Subject: [PATCH 11/33] Replace the Convex solver with coef matrix solver. --- Project.toml | 7 ++--- src/HartreeFock.jl | 64 +++++++++++++++++++++++++++++----------------- src/Tools.jl | 35 ------------------------- 3 files changed, 43 insertions(+), 63 deletions(-) diff --git a/Project.toml b/Project.toml index 60d3ca5b..448e5209 100644 --- a/Project.toml +++ b/Project.toml @@ -3,8 +3,7 @@ uuid = "7cb8c394-fae1-4ab9-92f2-30189d7746cd" version = "0.1.0" [deps] -COSMO = "1e616198-aa4e-51ec-90a2-23f7fbd31d8d" -Convex = "f65535da-76fb-5f13-bab9-19810c17039a" +Combinatorics = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" PiecewiseQuadratics = "63c5698c-79a9-4248-aa10-bd2a91651b58" SeparableOptimization = "b66076ac-575f-47ff-93e2-9c43ffc8d39e" @@ -14,11 +13,9 @@ Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7" libcint_jll = "574b78ca-bebd-517c-801d-4735c93a9686" [compat] -Convex = "0.14" -COSMO = "0.8" PiecewiseQuadratics = "0.1" SeparableOptimization = "0.1" SymbolicUtils = "0.13" Symbolics = "3" julia = "^1.5" -libcint_jll = "~3.0.0" \ No newline at end of file +libcint_jll = "~3.0.0" diff --git a/src/HartreeFock.jl b/src/HartreeFock.jl index 4d1ef635..9ea968e3 100644 --- a/src/HartreeFock.jl +++ b/src/HartreeFock.jl @@ -1,9 +1,9 @@ export runHF, runHFcore, SCFconfig -using LinearAlgebra: dot, Hermitian, ishermitian +using LinearAlgebra: dot, Hermitian, \, det, I using PiecewiseQuadratics: indicator -using SeparableOptimization, Convex, COSMO -using Statistics: median +using SeparableOptimization +using Combinatorics: powerset const TelLB = Float64 # Union{} to loose constraint const TelUB = Float64 # Any to loose constraint @@ -364,11 +364,11 @@ end function xDIIScore(method::Symbol, Nˢ::Int, Hcore::Matrix{T1}, HeeI::Array{T2, 4}, S::Matrix{T3}, X::Matrix{T4}, Fs::Vector{Matrix{T5}}, Ds::Vector{Matrix{T6}},Es::Vector{Float64}; - DIISsize::Int=15, solver=:default, convexConstraint::Bool=true, + DIISsize::Int=15, solver=:default, _kws...) where {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB, TelLB<:T3<:TelUB, TelLB<:T4<:TelUB, TelLB<:T5<:TelUB, TelLB<:T6<:TelUB} - DIISmethod, permuteData = DIISmethods[method] + DIISmethod, convexConstraint, permuteData = DIISmethods[method] is = permuteData ? sortperm(Es) : (:) ∇s = (@view Fs[is])[1:end .> end-DIISsize] Ds = (@view Ds[is])[1:end .> end-DIISsize] @@ -379,9 +379,9 @@ function xDIIScore(method::Symbol, Nˢ::Int, Hcore::Matrix{T1}, HeeI::Array{T2, getD(X, grad |> Hermitian |> Array, Nˢ) # grad == F. end -const DIISmethods = Dict( :DIIS => ((∇s, Ds, _, S)->DIIScore(∇s, Ds, S), true ), - :EDIIS => ((∇s, Ds, Es, _)->EDIIScore(∇s, Ds, Es), false), - :ADIIS => ((∇s, Ds, _, _)->ADIIScore(∇s, Ds), false)) +const DIISmethods = Dict( :DIIS => ((∇s, Ds, _, S)->DIIScore(∇s, Ds, S), false, true), + :EDIIS => ((∇s, Ds, Es, _)->EDIIScore(∇s, Ds, Es), true, false), + :ADIIS => ((∇s, Ds, _, _)->ADIIScore(∇s, Ds), true, false)) function EDIIScore(∇s::Vector{Matrix{T1}}, Ds::Vector{Matrix{T2}}, @@ -520,26 +520,44 @@ function ADMMSolver(vec::Vector{Float64}, B::Matrix{Float64}; convexConstraint:: end -# With Convex.jl, more flexible with solvers, less flexible with input values. -function ConvexSolver(vec::Vector{<:Number}, B::Matrix{<:Number}; - convexConstraint::Bool=true, method::Any=COSMO.Optimizer) +function CMSolver(vec::Vector, B::Matrix; convexConstraint=true, ϵ::Float64=1e-5) len = length(vec) - c = convexConstraint ? Convex.Variable(len, Positive()) : Convex.Variable(len) - B = (convexConstraint && isSemdefinite(B)) ? B : semidefinite(B) - f = 0.5* Convex.quadform(c, B) + dot(c,vec) - o = Convex.minimize(f, sum(c)==1) - Convex.solve!(o, method, silent_solver=true) - evaluate(c) + getA = (B)->[B ones(len); ones(1, len) 0] + b = vcat(-vec, 1) + local c + while true + A = getA(B) + while det(A) == 0 + B += ϵ*I + A = getA(B) + end + x = A \ b + c = x[1:end-1] + (findfirst(x->x<0, c) !== nothing && convexConstraint) || (return c) + idx = (sortperm(abs.(c)) |> powerset |> collect) + popfirst!(idx) + + for is in idx + Atemp = A[1:end .∉ Ref(is), 1:end .∉ Ref(is)] + btemp = b[begin:end .∉ Ref(is)] + det(Atemp) == 0 && continue + xtemp = Atemp \ btemp + c = xtemp[1:end-1] + for i in sort(is) + insert!(c, i, 0.0) + end + (findfirst(x->x<0, c) !== nothing) || (return c) + end + + B += ϵ*I + end + c end -const ConstraintSolvers = Dict(:default=>ADMMSolver, :Convex=>ConvexSolver) +const ConstraintSolvers = Dict(:default=>ADMMSolver, :Direct=>CMSolver) constraintSolver(vec::Vector{T1}, B::Matrix{T2}, solver::Symbol=:default; convexConstraint::Bool=true) where {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB} = -ConstraintSolvers[solver](vec, B; convexConstraint) - -constraintSolver(vec::Vector{T1}, B::Matrix{T2}, ConvexMethod; convexConstraint=true) where - {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB} = -ConvexSolver(vec, B; convexConstraint, method=ConvexMethod) \ No newline at end of file +ConstraintSolvers[solver](vec, B; convexConstraint) \ No newline at end of file diff --git a/src/Tools.jl b/src/Tools.jl index 8577638d..d2ae62c1 100644 --- a/src/Tools.jl +++ b/src/Tools.jl @@ -604,39 +604,4 @@ function splitTerm(term::Num) terms = [term] end terms -end - - -trDistance(A::Matrix{<:Number}, B::Matrix{<:Number}) = 0.5*sum(svdvals(A-B)) - - - -function semidefiniteCore(B, value=1e-6; posORneg=0) - Hupper = B |> Hermitian |> Array - e, u = eigen(Hupper, sortby=x->x) - i1 = findall(x->x>0, e) - i2 = findall(x->x<0, e) - if posORneg > 0 - e[i2] .= value - elseif posORneg < 0 - e[i1] .= -value - else - length(i1) > length(i2) ? e[i2] .= value : e[i1] .= -value - end - u*diagm(e)*inv(u) |> Hermitian |> Array -end - -function semidefinite(B, value=1e-6; posORneg=0) - Hupper = semidefiniteCore(B, value; posORneg) - Hlower = semidefiniteCore(B', value; posORneg) - trDistance(Hupper, B) > trDistance(Hlower, B) ? Hlower : Hupper -end - - -function isSemdefinite(B) - ishermitian(B) && - begin - λs = eigvals(B) - (filter(x->x!=0, sign.(λs)) |> unique! |> length) == 1 - end end \ No newline at end of file From 5f827653f8aa18ba6986da26a1bdcbde7c576e47 Mon Sep 17 00:00:00 2001 From: frankwswang Date: Mon, 30 Aug 2021 14:10:34 -0400 Subject: [PATCH 12/33] Updated tests. --- test/unit-tests/HartreeFock-test.jl | 111 ++++++++++++++++++++++----- test/unit-tests/Optimization-test.jl | 16 ++-- test/unit-tests/Overload-test.jl | 6 +- 3 files changed, 102 insertions(+), 31 deletions(-) diff --git a/test/unit-tests/HartreeFock-test.jl b/test/unit-tests/HartreeFock-test.jl index 73c95173..28cce057 100644 --- a/test/unit-tests/HartreeFock-test.jl +++ b/test/unit-tests/HartreeFock-test.jl @@ -4,36 +4,107 @@ using Suppressor: @suppress_out @testset "HartreeFock.jl" begin - errorThresholds = (1e-6, 1e-8) + errorThreshold = 1e-9 - nucCoords = [[-0.7,0.0,0.0], [0.7,0.0,0.0]] - mol = ["H", "H"] - bs = genBasisFunc.(nucCoords, Ref(("STO-3G", "H"))) |> flatten + nucCoords = [[-0.7,0.0,0.0], [0.7,0.0,0.0], [0.0, 0.0, 0.0]] + mol = ["H", "H", "O"] + bs = genBasisFunc.(nucCoords, ("STO-3G", "STO-3G", ("STO-3G", "O"))) |> flatten + S = dropdims(overlaps(bs), dims=3) local res1, res2 @suppress_out begin - res1 = runHF(bs, mol, nucCoords; HFtype=:RHF, initialC=:GWH, + res1 = runHF(bs, mol, nucCoords; HFtype=:RHF, initialC=:Hcore, scfConfig=Quiqbox.SCFconfig([:ADIIS, :DIIS, :EDIIS, :SD], [1e-4, 1e-8, 1e-10, 1e-12])) - res2 = runHF(bs, mol, nucCoords; HFtype=:RHF, + res2 = runHF(bs, mol, nucCoords; HFtype=:UHF, scfConfig=Quiqbox.SCFconfig([:ADIIS, :DIIS, :EDIIS, :SD], [1e-4, 1e-8, 1e-10, 1e-12], - Dict(1=>[:solver=>:Convex], - 2=>[:solver=>:Convex], - 3=>[:solver=>:Convex], - 4=>[:solver=>:Convex]))) + Dict(1=>[:solver=>:Direct], + 2=>[:solver=>:Direct], + 3=>[:solver=>:Direct], + 4=>[:solver=>:Direct]))) end - for (res, errorThreshold) in zip((res1, res2), errorThresholds) - @test isapprox(res.E0HF, -1.8310000393482668, atol=errorThreshold) - @test isapprox(res.C, [-0.54893404 -1.21146407; -0.54893404 1.21146407], - atol=errorThreshold) - @test isapprox(res.F, [-0.36553735 -0.59388538; -0.59388538 -0.36553735], - atol=errorThreshold) - @test isapprox(res.Emo, [-0.57820298, 0.67026777], atol=errorThreshold) - @test res.occu == [2,0] - D = res.D - S = overlaps(bs)[:,:,1] + @test isapprox(res1.E0HF, -93.7878386326277, atol=errorThreshold) + + @test isapprox(res1.C, + [0.0108959475 0.088981718 0.1216105801 0.0 0.0 -1.9145451703 3.6157332281; + 0.0108959475 0.088981718 -0.1216105801 0.0 0.0 -1.9145451703 -3.6157332281; + -0.9942298564 -0.263439202 0.0 0.0 0.0 -0.0496965897 -0.0; + -0.0415931194 0.8722480485 0.0 0.0 0.0 3.3966577232 -0.0; + 0.0 -0.0 1.0940225371 0.0 0.0 0.0 2.7786717301; + 0.0 0.0 0.0 1.0 0.0 0.0 0.0; + 0.0 0.0 0.0 0.0 1.0 0.0 0.0], + atol=errorThreshold) + + @test isapprox(res1.F, + [-2.2553557425 -1.9609802133 -4.4843676997 -2.5116870044 0.4836027134 0.0 0.0; + -1.9609802133 -2.2553557425 -4.4843676997 -2.5116870044 -0.4836027134 0.0 0.0; + -4.4843676997 -4.4843676997 -20.9203733167 -5.3634551066 0.0 0.0 0.0; + -2.5116870044 -2.5116870044 -5.3634551066 -2.8963742039 -0.0 0.0 0.0; + 0.4836027134 -0.4836027134 0.0 -0.0 -1.2809250587 0.0 0.0; + 0.0 0.0 0.0 0.0 0.0 -0.6613038925 0.0; + 0.0 0.0 0.0 0.0 0.0 0.0 -0.6613038925], + atol=errorThreshold) + + @test isapprox(res1.Emo, + [-20.9303746442, -1.6166724499, -1.2844643644, -0.6613038925, + -0.6613038925, 1.0608170463, 1.8478051263], + atol=errorThreshold) + + @test res1.occu == [2, 2, 2, 2, 2, 0, 0] + + D1 = res1.D + @test isapprox(D1*S*D1, D1, atol=errorThreshold) + + + @test isapprox(res2.E0HF, -93.7878386328625, atol=errorThreshold) + + @test isapprox.(res2.C, + ([-0.0108959194 -0.088981086 0.1216079134 0.0 0.0 -1.9145451998 3.6157333178; + -0.0108959194 -0.088981086 -0.1216079135 0.0 0.0 -1.9145451998 -3.6157333178; + 0.9942298673 0.2634391803 0.0 0.0 0.0 -0.0496964865 0.0; + 0.04159303 -0.8722491705 0.0 0.0 0.0 3.3966574362 -0.0; + 0.0 -0.0 1.0940204878 0.0 0.0 -0.0 2.7786725369; + 0.0 0.0 0.0 1.0 0.0 0.0 0.0; + 0.0 0.0 0.0 0.0 1.0 0.0 0.0], + [-0.0108959194 0.0889811163 0.1216078542 0.0 0.0 -1.9145451984 -3.6157333198; + -0.0108959194 0.0889811163 -0.1216078542 0.0 0.0 -1.9145451984 3.6157333198; + 0.9942298674 -0.2634391795 -0.0 0.0 0.0 -0.0496964906 0.0; + 0.0415930299 0.8722491168 -0.0 0.0 0.0 3.3966574499 -0.0; + -0.0 -0.0 1.0940204422 0.0 0.0 0.0 -2.7786725549; + 0.0 0.0 0.0 1.0 0.0 0.0 0.0; + 0.0 0.0 0.0 0.0 1.0 0.0 0.0]), + atol=errorThreshold) |> prod + + @test isapprox.(res2.F, + ([-2.2553586896 -1.9609820313 -4.4843692187 -2.5116897961 0.4836038059 0.0 0.0; + -1.9609820313 -2.2553586896 -4.4843692187 -2.5116897961 -0.4836038059 0.0 0.0; + -4.4843692187 -4.4843692187 -20.9203832094 -5.363456848 0.0 0.0 0.0; + -2.5116897961 -2.5116897961 -5.363456848 -2.8963776226 -0.0 0.0 0.0; + 0.4836038059 -0.4836038059 0.0 -0.0 -1.2809270581 0.0 0.0; + 0.0 0.0 0.0 0.0 0.0 -0.6613076106 0.0; + 0.0 0.0 0.0 0.0 0.0 0.0 -0.6613076106], + [-2.2553586979 -1.9609820317 -4.4843692157 -2.5116897904 0.4836038095 0.0 0.0; + -1.9609820317 -2.2553586979 -4.4843692157 -2.5116897904 -0.4836038095 0.0 0.0; + -4.4843692157 -4.4843692157 -20.920383202 -5.3634568448 -0.0 0.0 0.0; + -2.5116897904 -2.5116897904 -5.3634568448 -2.896377604 0.0 0.0 0.0; + 0.4836038095 -0.4836038095 -0.0 0.0 -1.2809270492 0.0 0.0; + 0.0 0.0 0.0 0.0 0.0 -0.6613075996 0.0; + 0.0 0.0 0.0 0.0 0.0 0.0 -0.6613075996]), + atol=errorThreshold) |> prod + + @test isapprox.(res2.Emo, + ([-20.9303845033, -1.6166757369, -1.2844662094, -0.6613076106, + -0.6613076106, 1.0608152747, 1.8478040688], + [-20.9303844958, -1.6166757223, -1.2844661972, -0.6613075996, + -0.6613075996, 1.0608152755, 1.8478040763]), + atol=errorThreshold) |> prod + + @test ( res2.occu .== ([1, 1, 1, 1, 1, 0, 0], [1, 1, 1, 1, 1, 0, 0]) ) |> prod + + D2s = res2.D + for D in D2s @test isapprox(D*S*D, D, atol=errorThreshold) end diff --git a/test/unit-tests/Optimization-test.jl b/test/unit-tests/Optimization-test.jl index 0dad0ab5..00b0cb58 100644 --- a/test/unit-tests/Optimization-test.jl +++ b/test/unit-tests/Optimization-test.jl @@ -20,12 +20,12 @@ local Es1L, pars1L, grads1L Es1L, pars1L, grads1L = optimizeParams!(bs1, pars1, mol, nucCoords, maxSteps = 200) end -E_t1 = -1.77568255622806 -par_t1 = [1.3316366727278381, 0.3118586357035099, 0.45479844661867297, - 0.6626439317879435, -0.6866294612074542, 0.6866294612074546, +E_t1 = -1.7756825544202863 +par_t1 = [1.3316366727266504, 0.3118586356968696, 0.45479844661739155, + 0.6626439317888224, -0.6866294552929423, 0.6866294671212336, 0.0, 0.0, 0.0, 0.0] -grad_t1 = [-0.1251882751182149, 0.017527948866820964, -0.10779722878571235, - 0.07398545410241009, -0.05647593609221346, 0.05647593609221585, +grad_t1 = [-0.12518827510873726, 0.017527948869488608, -0.10779722877906275, + 0.07398545409754818, -0.056469017809637645, 0.05648285438029821, 0.0, 0.0, 0.0, 0.0] @test isapprox(Es1L[end], E_t1, atol=errorThreshold) @@ -45,9 +45,9 @@ local Es2L, pars2L, grads2L Es2L, pars2L, grads2L = optimizeParams!(bs2, pars2, mol, nucCoords, maxSteps = 200) end -E_t2 = -1.1804184294076494 -par_t2 = [0.1792288515300005, 2.8537000394661676] -grad_t2 = [-0.05218998970360911, 0.4901549373691791] +E_t2 = -1.1804180821543429 +par_t2 = [ 0.17922884951410853, 2.853700041948111] +grad_t2 = [-0.05218995522865333, 0.490154922874182] @test isapprox(Es2L[end], E_t2, atol=errorThreshold) @test isapprox(pars2L[end, :], par_t2, atol=errorThreshold) diff --git a/test/unit-tests/Overload-test.jl b/test/unit-tests/Overload-test.jl index 13c90652..bff73d3a 100644 --- a/test/unit-tests/Overload-test.jl +++ b/test/unit-tests/Overload-test.jl @@ -44,13 +44,13 @@ using Suppressor: @capture_out box1 = GridBox(2, 3.5) @test (@capture_out show(box1)) == string(typeof(box1))*"(num, len, coord)" - fVar1 = runHF(GTb1, ["H", "H"], [[0, 0, 0], [1,2,1]], printInfo=false) + fVar1 = runHF(GTb1, ["H", "H"], [[0, 0, 0], [1,2,1]], printInfo=false, initialC=:Hcore) @test (@capture_out show(fVar1.temp)) == string(typeof(fVar1.temp))*"(shared.Etot="* - "[2.263712269, … , 2.262890817], shared.Dtots"* + "[2.263712269, … , 2.262890978], shared.Dtots"* ", Cs, Es, Ds, Fs)" - @test (@capture_out show(fVar1)) == string(typeof(fVar1))*"(E0HF=2.262890817, C, F, D,"* + @test (@capture_out show(fVar1)) == string(typeof(fVar1))*"(E0HF=2.262890978, C, F, D,"* " Emo, occu, temp, isConverged)" From 9762219deeb3df023ed6c537b9638e1b11f062d4 Mon Sep 17 00:00:00 2001 From: frankwswang Date: Mon, 30 Aug 2021 15:20:03 -0400 Subject: [PATCH 13/33] Array type reformatting. --- lib/libcint/Interface.jl | 5 +- src/Basis.jl | 86 ++++++++++++++++---------------- src/Box.jl | 6 +-- src/Differentiation.jl | 36 ++++++------- src/HartreeFock.jl | 5 +- src/Integration/DataStructure.jl | 6 +-- src/Integration/OneBody.jl | 18 +++---- src/Integration/TwoBody.jl | 4 +- src/Library.jl | 2 +- src/Molecule.jl | 12 ++--- src/Optimization.jl | 8 +-- src/Tools.jl | 5 +- test/unit-tests/Tools-test.jl | 2 +- 13 files changed, 100 insertions(+), 95 deletions(-) diff --git a/lib/libcint/Interface.jl b/lib/libcint/Interface.jl index 7ea3823b..a1f5075a 100644 --- a/lib/libcint/Interface.jl +++ b/lib/libcint/Interface.jl @@ -1,6 +1,7 @@ function cintFunc!(libcintFunc::Val, - buf::Array{Float64, N}, shls::Array{<:Signed, 1}, atm::Array{<:Signed, 1}, natm::Signed, - bas::Array{<:Signed, 1}, nbas::Signed, env::Array{Float64, 1}, opt::Ptr=C_NULL) where {N} + buf::Array{Float64, N}, shls::Vector{<:Signed}, atm::Vector{<:Signed}, + natm::Signed, bas::Vector{<:Signed}, nbas::Signed, env::Vector{Float64}, + opt::Ptr=C_NULL) where {N} shls = shls .|> Cint atm = atm .|> Cint natm = natm |> Cint diff --git a/src/Basis.jl b/src/Basis.jl index 43c38a08..5b12d672 100644 --- a/src/Basis.jl +++ b/src/Basis.jl @@ -74,8 +74,8 @@ struct BasisFunc{S, GN} <: FloatingGTBasisFunc{S, GN, 1} normalizeGTO::Bool param::Tuple{Vararg{<:ParamBox}} - function BasisFunc(cen::Tuple{Vararg{<:ParamBox}}, gs::Array{<:GaussFunc, 1}, - ijk::Array{Int, 1}, normalizeGTO::Bool) + function BasisFunc(cen::Tuple{Vararg{<:ParamBox}}, gs::Vector{<:GaussFunc}, + ijk::Vector{Int}, normalizeGTO::Bool) @assert prod(length(ijk) == 3) "The length of `ijk` should be 3." subshell = SubshellNames[sum(ijk)+1] pars = ParamBox[] @@ -105,8 +105,8 @@ struct BasisFuncs{S, GN, ON} <: FloatingGTBasisFunc{S, GN, ON} normalizeGTO::Bool param::Tuple{Vararg{<:ParamBox}} - function BasisFuncs(cen::Tuple{Vararg{<:ParamBox}}, gs::Array{<:GaussFunc, 1}, - ijks::Array{Array{Int, 1}, 1}, normalizeGTO::Bool=false) + function BasisFuncs(cen::Tuple{Vararg{<:ParamBox}}, gs::Vector{<:GaussFunc}, + ijks::Vector{Vector{Int}}, normalizeGTO::Bool=false) @assert prod(length.(ijks) .== 3) "The length of each `ijk` should be 3." ls = sum.(ijks) @assert prod(ls .== ls[1]) "The total angular momentums (of each ijk) should be the same." @@ -203,16 +203,16 @@ as the second input. If the atom is omitted, then basis set for H is used. BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0] BasisFuncs{:P, 3, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0] """ -genBasisFunc(cen::Tuple{Vararg{<:ParamBox}}, gs::Array{<:GaussFunc, 1}, - ijk::Array{Int, 1}; normalizeGTO::Bool=false) = +genBasisFunc(cen::Tuple{Vararg{<:ParamBox}}, gs::Vector{<:GaussFunc}, + ijk::Vector{Int}; normalizeGTO::Bool=false) = BasisFunc(cen, gs, ijk, normalizeGTO) -genBasisFunc(cen::Tuple{Vararg{<:ParamBox}}, gs::Array{<:GaussFunc, 1}, - ijks::Array{Array{Int, 1}, 1}; normalizeGTO::Bool=false) = +genBasisFunc(cen::Tuple{Vararg{<:ParamBox}}, gs::Vector{<:GaussFunc}, + ijks::Vector{Vector{Int}}; normalizeGTO::Bool=false) = BasisFuncs(cen, gs, ijks, normalizeGTO) -# ijkOrijks::Union{Array{Int, 1}, Array{Array{Int, 1}, 1}} -function genBasisFunc(coord::AbstractArray, gs::Array{<:GaussFunc, 1}, ijkOrijks::Array; normalizeGTO::Bool=false) +# ijkOrijks::Union{Vector{Int}, Vector{Vector{Int}}} +function genBasisFunc(coord::AbstractArray, gs::Vector{<:GaussFunc}, ijkOrijks::Array; normalizeGTO::Bool=false) @assert length(coord) == 3 "The dimension of the center should be 3." x = ParamBox(coord[1], ParamList[:X]) y = ParamBox(coord[2], ParamList[:Y]) @@ -220,12 +220,12 @@ function genBasisFunc(coord::AbstractArray, gs::Array{<:GaussFunc, 1}, ijkOrijks genBasisFunc((x,y,z), gs, ijkOrijks; normalizeGTO) end -genBasisFunc(::Missing, gs::Array{<:GaussFunc, 1}, ijkOrijks::Array; normalizeGTO::Bool=false) = +genBasisFunc(::Missing, gs::Vector{<:GaussFunc}, ijkOrijks::Array; normalizeGTO::Bool=false) = genBasisFunc([NaN, NaN, NaN], gs, ijkOrijks; normalizeGTO) # center::Union{AbstractArray, Tuple{Vararg{<:ParamBox}}, Missing} -function genBasisFunc(center, gs::Array{<:GaussFunc, 1}, subshell::String="S"; - ijkFilter::Array{Bool, 1}=fill(true, SubshellDimList[subshell]), normalizeGTO::Bool=false) +function genBasisFunc(center, gs::Vector{<:GaussFunc}, subshell::String="S"; + ijkFilter::Vector{Bool}=fill(true, SubshellDimList[subshell]), normalizeGTO::Bool=false) ijkLen = length(ijkFilter) subshellSize = SubshellDimList[subshell] @assert ijkLen == subshellSize "The length of `ijkFilter` should be $(subshellSize) to match the subshell's size." @@ -235,7 +235,7 @@ function genBasisFunc(center, gs::Array{<:GaussFunc, 1}, subshell::String="S"; end # ijkOrSubshell::Union{Array, String} -function genBasisFunc(center, gExpsANDgCons::NTuple{2, Array{<:Real, 1}}, ijkOrSubshell="S"; kw...) +function genBasisFunc(center, gExpsANDgCons::NTuple{2, Vector{<:Real}}, ijkOrSubshell="S"; kw...) @compareLength gExpsANDgCons[1] gExpsANDgCons[2] "exponents" "contraction coefficients" gs = GaussFunc.(gExpsANDgCons[1], gExpsANDgCons[2]) genBasisFunc(center, gs, ijkOrSubshell; kw...) @@ -244,7 +244,7 @@ end genBasisFunc(center, gExpANDgCon::NTuple{2, Real}, ijkOrSubshell ="S"; kw...) = genBasisFunc(center, ([gExpANDgCon[1]], [gExpANDgCon[2]]), ijkOrSubshell; kw...) -function genBasisFunc(center, BSKeyANDnuc::Array{Tuple{String, String}, 1}) +function genBasisFunc(center, BSKeyANDnuc::Vector{Tuple{String, String}}) bases = FloatingGTBasisFunc[] for k in BSKeyANDnuc BFMcontent = BasisSetList[k[1]][AtomicNumberList[k[2]]] @@ -256,7 +256,7 @@ end genBasisFunc(center, BSKeyANDnuc::Tuple{String, String}) = genBasisFunc(center, [BSKeyANDnuc]) -genBasisFunc(center, BSkey::Array{String, 1}; nucleus::String="H") = +genBasisFunc(center, BSkey::Vector{String}; nucleus::String="H") = genBasisFunc(center, [(i, nucleus) for i in BSkey]) genBasisFunc(center, BSkey::String; nucleus::String="H") = @@ -265,34 +265,34 @@ genBasisFunc(center, [BSkey]; nucleus) # A few methods for convenient arguments omissions and mutations. genBasisFunc(arg1, g::GaussFunc, args...; kws...) = genBasisFunc(arg1, [g], args...; kws...) genBasisFunc(bf::FloatingGTBasisFunc) = itself(bf) -genBasisFunc(bs::Array{<:FloatingGTBasisFunc, 1}) = sortBasisFuncs(bs) +genBasisFunc(bs::Vector{<:FloatingGTBasisFunc}) = sortBasisFuncs(bs) struct GTBasis{N, BT} <: BasisSetData{N} - basis::Array{<:AbstractFloatingGTBasisFunc, 1} - S::Array{<:Number, 2} - Te::Array{<:Number, 2} + basis::Vector{<:AbstractFloatingGTBasisFunc} + S::Matrix{<:Number} + Te::Matrix{<:Number} eeI::Array{<:Number, 4} getVne::Function getHcore::Function - function GTBasis(basis::Array{<:AbstractFloatingGTBasisFunc, 1}, - S::Array{<:Number, 2}, Te::Array{<:Number, 2}, eeI::Array{<:Number, 4}) + function GTBasis(basis::Vector{<:AbstractFloatingGTBasisFunc}, + S::Matrix{<:Number}, Te::Matrix{<:Number}, eeI::Array{<:Number, 4}) new{basisSize(basis) |> sum, typeof(basis)}(basis, S, Te, eeI, (mol, nucCoords)->dropdims(nucAttractions(basis, mol, nucCoords), dims=3), (mol, nucCoords)->dropdims(nucAttractions(basis, mol, nucCoords), dims=3) + Te) end end -GTBasis(basis::Array{<:AbstractFloatingGTBasisFunc, 1}) = +GTBasis(basis::Vector{<:AbstractFloatingGTBasisFunc}) = GTBasis(basis, dropdims(overlaps(basis), dims=3), dropdims(elecKinetics(basis), dims=3), dropdims(eeInteractions(basis), dims=5)) -function sortBasisFuncs(bs::Array{<:FloatingGTBasisFunc, 1}; groupCenters::Bool=false) +function sortBasisFuncs(bs::Vector{<:FloatingGTBasisFunc}; groupCenters::Bool=false) cens = centerOf.(bs) - bfBlocks = Array{<:FloatingGTBasisFunc, 1}[] + bfBlocks = Vector{<:FloatingGTBasisFunc}[] mark, _ = markUnique(cens, compareFunction=isequal) m = max(mark...) for i=1:m @@ -327,7 +327,7 @@ end struct BasisFuncMix{ON} <: AbstractFloatingGTBasisFunc BasisFunc::NTuple{ON, FloatingGTBasisFunc} param::Tuple{Vararg{<:ParamBox}} - function BasisFuncMix(bfs::Array{<:FloatingGTBasisFunc{S, GN, 1} where {S, GN}, 1}) + function BasisFuncMix(bfs::Vector{<:FloatingGTBasisFunc{S, GN, 1} where {S, GN}}) pars = ParamBox[] for bf in bfs append!(pars, bf.param) @@ -370,7 +370,7 @@ end Return the size (number of orbitals) of each subshell. """ basisSize(subshell::String) = (SubshellDimList[subshell],) -basisSize(subshells::Array{String, 1}) = basisSize.(subshells) |> flatten |> Tuple +basisSize(subshells::Vector{String}) = basisSize.(subshells) |> flatten |> Tuple """ @@ -380,7 +380,7 @@ Return the numbers of orbitals of the input basis function(s). """ basisSize(basis::FloatingGTBasisFunc) = (basis.ijk |> length,) basisSize(::BasisFuncMix) = (1,) -basisSize(basisSet::Array{<:Any, 1}) = basisSize.(basisSet) |> flatten |> Tuple +basisSize(basisSet::Vector{<:Any}) = basisSize.(basisSet) |> flatten |> Tuple # Core function to generate a customized X-Gaussian (X>1) basis function. @@ -401,7 +401,7 @@ function genBasisFuncText(bf::FloatingGTBasisFunc; norm=1.0, printCenter=true) firstLine*"$(bf.subshell) $(bf.gauss |> length) $(norm)\n" * (GFs |> join) end -function genBasisFuncText(bs::Array{<:FloatingGTBasisFunc, 1}; norm=1.0, printCenter=true, groupCenters=true) +function genBasisFuncText(bs::Vector{<:FloatingGTBasisFunc}; norm=1.0, printCenter=true, groupCenters=true) strs = String[] bfBlocks = sortBasisFuncs(bs; groupCenters) if groupCenters @@ -429,7 +429,7 @@ function genBFuncsFromText(content::String; adjustContent && (content = adjustFunction(content)) lines = split.(content |> IOBuffer |> readlines)[1+excludeFirstNlines : end-excludeLastNlines] data = [advancedParse.(i) for i in lines] - index = findall(x -> typeof(x) != Array{Float64, 1} && length(x)==3, data) + index = findall(x -> typeof(x) != Vector{Float64} && length(x)==3, data) bfs = [] for i in index gs1 = GaussFunc[] @@ -466,7 +466,7 @@ function getParams(pb::ParamBox, symbol::Union{Symbol, Nothing}=nothing; onlyDif pb end -function getParams(pbs::Array{<:ParamBox, 1}, symbol::Union{Symbol, Nothing}=nothing; onlyDifferentiable::Bool=false) +function getParams(pbs::Vector{<:ParamBox}, symbol::Union{Symbol, Nothing}=nothing; onlyDifferentiable::Bool=false) res = symbol === nothing ? ParamBox[] : ParamBox{symbol}[] for i in pbs j = getParams(i, symbol; onlyDifferentiable) @@ -477,11 +477,11 @@ end getParams(gf::GaussFunc, symbol::Union{Symbol, Nothing}=nothing; onlyDifferentiable::Bool=false) = getParams([gf.xpn, gf.con], symbol; onlyDifferentiable) getParams(bf::FloatingGTBasisFunc, symbol::Union{Symbol, Nothing}=nothing; onlyDifferentiable::Bool=false) = vcat( getParams.(bf.gauss, symbol; onlyDifferentiable)..., getParams(bf.center |> collect, symbol; onlyDifferentiable) ) -getParams(ds, symbols::Array{Symbol, 1}; onlyDifferentiable::Bool=false) = getParams.(Ref(ds), symbols; onlyDifferentiable) |> flatten +getParams(ds, symbols::Vector{Symbol}; onlyDifferentiable::Bool=false) = getParams.(Ref(ds), symbols; onlyDifferentiable) |> flatten getParams(ds::Array, symbol::Union{Symbol, Nothing}=nothing; onlyDifferentiable::Bool=false) = getParams.(ds, symbol; onlyDifferentiable) |> flatten -function markParams!(parArray::Array{<:ParamBox{V}, 1}; +function markParams!(parArray::Vector{<:ParamBox{V}}; ignoreContainerType::Bool=false, filter::Bool=true, ignoreMapping::Bool=false) where {V} res, _ = markUnique(parArray, compareFunction=hasIdentical, ignoreFunction=true; ignoreContainerType) for i=1:length(parArray) @@ -494,7 +494,7 @@ function markParams!(parArray::Array{<:ParamBox{V}, 1}; parArray end -function markParams!(parArray::Array{<:ParamBox, 1}; +function markParams!(parArray::Vector{<:ParamBox}; ignoreContainerType::Bool=false, filter::Bool=true, ignoreMapping::Bool=false) pars = ParamBox[] syms = getUnique!([typeof(i).parameters[1] for i in parArray]) @@ -543,10 +543,10 @@ getVar.(gf.param; markUndifferentiable, includeMapping) |> flatten |> Dict getVars(bf::BasisFunc; markUndifferentiable::Bool=false, includeMapping::Bool=false) = getVar.(bf.param; markUndifferentiable, includeMapping) |> flatten |> Dict -getVars(pbs::Array{<:ParamBox, 1}; markUndifferentiable::Bool=false, includeMapping::Bool=false) = +getVars(pbs::Vector{<:ParamBox}; markUndifferentiable::Bool=false, includeMapping::Bool=false) = getVar.(pbs; markUndifferentiable, includeMapping) |> flatten |> Dict -getVars(fs::Array{<:Union{GaussFunc, BasisFunc}, 1}; markUndifferentiable::Bool=false, includeMapping::Bool=false) = +getVars(fs::Vector{<:Union{GaussFunc, BasisFunc}}; markUndifferentiable::Bool=false, includeMapping::Bool=false) = merge(getVars.(fs; markUndifferentiable, includeMapping)...) @@ -643,7 +643,7 @@ function expressionOf(bfm::BasisFuncMix; markUndifferentiable::Bool=false, subst end -function orbitalShift(bf::FloatingGTBasisFunc{S, GN, 1}; ijkShift::Array{Int, 1}, conRatio::Array{<:Real, 1}, fixNorm::Bool=false) where {S, GN} +function orbitalShift(bf::FloatingGTBasisFunc{S, GN, 1}; ijkShift::Vector{Int}, conRatio::Vector{<:Real}, fixNorm::Bool=false) where {S, GN} @assert ijkShift |> length == 3 "The length of `ijkShift` should be 3." gfs = bf.gauss |> collect |> deepcopy @assert length(conRatio) == length(gfs) @@ -661,18 +661,18 @@ function orbitalShift(bf::FloatingGTBasisFunc{S, GN, 1}; ijkShift::Array{Int, 1} BasisFunc(bf.center, gfs, ijkOrbitalList[bf.ijk[1]] + ijkShift, normalizeGTO) end -orbitalShift(bf::FloatingGTBasisFunc{S, 1, 1}, shiftInfo::Array{<:Real, 1}; fixNorm::Bool=false) where {S} = +orbitalShift(bf::FloatingGTBasisFunc{S, 1, 1}, shiftInfo::Vector{<:Real}; fixNorm::Bool=false) where {S} = orbitalShift(bf, ijkShift=shiftInfo[2:end].|>Int, conRatio=[shiftInfo[1]], fixNorm=fixNorm) -function diffInfoToBasisFunc(bf::FloatingGTBasisFunc, info::Array{<:Any, 2}) +function diffInfoToBasisFunc(bf::FloatingGTBasisFunc, info::Matrix{<:Any}) bs = decomposeBasisFunc(bf, splitGaussFunc=true) bfs = [orbitalShift.(Ref(bf), shift, fixNorm=true) for (shift, bf) in zip(info, bs)] [i |> collect |> flatten for i in eachcol(bfs)] .|> BasisFuncMix end -function inSymbols(sym::Symbol, pool::Array{Symbol, 1}=ParamNames) +function inSymbols(sym::Symbol, pool::Vector{Symbol}=ParamNames) symString = sym |> string for i in pool occursin(i |> string, symString) && (return i) @@ -680,15 +680,15 @@ function inSymbols(sym::Symbol, pool::Array{Symbol, 1}=ParamNames) return false end -inSymbols(vr::SymbolicUtils.Sym, pool::Array{Symbol, 1}=ParamNames) = +inSymbols(vr::SymbolicUtils.Sym, pool::Vector{Symbol}=ParamNames) = inSymbols(Symbolics.tosymbol(vr), pool) -inSymbols(vr::SymbolicUtils.Term, pool::Array{Symbol, 1}=ParamNames) = +inSymbols(vr::SymbolicUtils.Term, pool::Vector{Symbol}=ParamNames) = inSymbols(Symbolics.tosymbol(vr.f), pool) inSymbols(::Function, args...) = false -inSymbols(vr::Num, pool::Array{Symbol, 1}=ParamNames) = inSymbols(vr.val, pool) +inSymbols(vr::Num, pool::Vector{Symbol}=ParamNames) = inSymbols(vr.val, pool) function varVal(vr::SymbolicUtils.Sym, varDict::Dict{Num, <:Real}) diff --git a/src/Box.jl b/src/Box.jl index ac97c9f7..1c39ba95 100644 --- a/src/Box.jl +++ b/src/Box.jl @@ -4,8 +4,8 @@ export gridBoxCoords, GridBox, gridPoint struct GridBox{NX, NY, NZ} num::Int len::Real - box::Array{NTuple{3, ParamBox}, 1} - coord::Array{Array{Float64, 1}, 1} + box::Vector{NTuple{3, ParamBox}} + coord::Vector{Vector{Float64}} function GridBox(nGrids::NTuple{3, Int}, edgeLength::Real=10, centerCoord::Array{<:Real,1}=[0.0,0.0,0.0]; canDiff::Bool=true, index::Int=0) @@ -13,7 +13,7 @@ struct GridBox{NX, NY, NZ} sym = ParamList[:len] pbRef = ParamBox(edgeLength, sym; canDiff, index) boxes = NTuple{3, ParamBox{sym, Float64}}[] - coords = Array{Float64, 1}[] + coords = Vector{Float64}[] n = 0 supIndex = "ᴳ"*numToSups(nGrids[1])*superscriptSym['-']*numToSups(nGrids[2])*superscriptSym['-']*numToSups(nGrids[3]) for i=0:nGrids[1], j=0:nGrids[2], k=0:nGrids[3] diff --git a/src/Differentiation.jl b/src/Differentiation.jl index cdcf2e62..03bad0a4 100644 --- a/src/Differentiation.jl +++ b/src/Differentiation.jl @@ -77,9 +77,9 @@ function deriveBasisFunc(bf::FloatingGTBasisFunc, par::ParamBox) end -function oneBodyDerivativeCore(∂bfs::Array{<:AbstractFloatingGTBasisFunc, 1}, - bfs::Array{<:AbstractFloatingGTBasisFunc, 1}, - X::Array{Float64, 2}, ∂X::Array{Float64, 2}, +function oneBodyDerivativeCore(∂bfs::Vector{<:AbstractFloatingGTBasisFunc}, + bfs::Vector{<:AbstractFloatingGTBasisFunc}, + X::Matrix{Float64}, ∂X::Matrix{Float64}, ʃ::F, isGradient::Bool = false) where {F<:Function} dimOfʃ = 1+isGradient*2 bsSize = ∂bfs |> length @@ -108,9 +108,9 @@ function oneBodyDerivativeCore(∂bfs::Array{<:AbstractFloatingGTBasisFunc, 1}, end -function twoBodyDerivativeCore(∂bfs::Array{<:AbstractFloatingGTBasisFunc, 1}, - bfs::Array{<:AbstractFloatingGTBasisFunc, 1}, - X::Array{Float64, 2}, ∂X::Array{Float64, 2}, +function twoBodyDerivativeCore(∂bfs::Vector{<:AbstractFloatingGTBasisFunc}, + bfs::Vector{<:AbstractFloatingGTBasisFunc}, + X::Matrix{Float64}, ∂X::Matrix{Float64}, ʃ::F, isGradient::Bool = false) where {F<:Function} dimOfʃ = 1+isGradient*2 bsSize = ∂bfs |> length @@ -148,8 +148,8 @@ function twoBodyDerivativeCore(∂bfs::Array{<:AbstractFloatingGTBasisFunc, 1}, end -function derivativeCore(bs::Array{<:AbstractFloatingGTBasisFunc, 1}, par::ParamBox, - S::Array{Float64, 2}; oneBodyFunc::F1=itself, +function derivativeCore(bs::Vector{<:AbstractFloatingGTBasisFunc}, par::ParamBox, + S::Matrix{Float64}; oneBodyFunc::F1=itself, twoBodyFunc::F2=itself, oneBodyGrad::Bool=false, twoBodyGrad::Bool=false) where {F1<:Function, F2<:Function} # ijkl in chemists' notation of spatial bases (ij|kl). @@ -192,9 +192,10 @@ function derivativeCore(bs::Array{<:AbstractFloatingGTBasisFunc, 1}, par::ParamB end -function ∂HFenergy(bs::Array{<:AbstractFloatingGTBasisFunc, 1}, par::ParamBox, - C::Union{Array{Float64, 2}, NTuple{2, Array{Float64, 2}}}, S::Array{Float64, 2}, - mol::Array{String, 1}, nucCoords::Array{<:AbstractArray, 1}; +function ∂HFenergy(bs::Vector{<:AbstractFloatingGTBasisFunc}, par::ParamBox, + C::Union{Matrix{Float64}, NTuple{2, Matrix{Float64}}}, + S::Matrix{Float64}, mol::Vector{String}, + nucCoords::Vector{<:AbstractArray}; nElectron::Union{Int, NTuple{2, Int}}) Xinv = S^(0.5) Cₓ = (C isa Tuple) ? (Ref(Xinv) .* C) : (Xinv * C) @@ -204,9 +205,10 @@ function ∂HFenergy(bs::Array{<:AbstractFloatingGTBasisFunc, 1}, par::ParamBox, end -function gradHFenegy(bs::Array{<:AbstractFloatingGTBasisFunc, 1}, par::Array{<:ParamBox, 1}, - C::Union{Array{Float64, 2}, NTuple{2, Array{Float64, 2}}}, S::Array{Float64, 2}, - mol::Array{String, 1}, nucCoords::Array{<:AbstractArray, 1}; +function gradHFenegy(bs::Vector{<:AbstractFloatingGTBasisFunc}, par::Vector{<:ParamBox}, + C::Union{Matrix{Float64}, NTuple{2, Matrix{Float64}}}, + S::Matrix{Float64}, mol::Vector{String}, + nucCoords::Vector{<:AbstractArray}; nElectron::Union{Int, NTuple{2, Int}}=getCharge(mol)) if length(C) == 2 && nElectron isa Int nElectron = (nElectron÷2, nElectron-nElectron÷2) @@ -214,8 +216,8 @@ function gradHFenegy(bs::Array{<:AbstractFloatingGTBasisFunc, 1}, par::Array{<:P ∂HFenergy.(Ref(bs), par, Ref(C), Ref(S), Ref(mol), Ref(nucCoords); nElectron) end -gradHFenegy(bs::Array{<:AbstractFloatingGTBasisFunc, 1}, par::ParamBox, - C::Union{Array{Float64, 2}, NTuple{2, Array{Float64, 2}}}, S::Array{Float64, 2}, - mol::Array{String, 1}, nucCoords::Array{<:AbstractArray, 1}; +gradHFenegy(bs::Vector{<:AbstractFloatingGTBasisFunc}, par::ParamBox, + C::Union{Matrix{Float64}, NTuple{2, Matrix{Float64}}}, S::Matrix{Float64}, + mol::Vector{String}, nucCoords::Vector{<:AbstractArray}; nElectron::Union{Int, NTuple{2, Int}}=getCharge(mol)) = gradHFenegy(bs, [par], C, S, mol, nucCoords; nElectron) \ No newline at end of file diff --git a/src/HartreeFock.jl b/src/HartreeFock.jl index 9ea968e3..ecec959c 100644 --- a/src/HartreeFock.jl +++ b/src/HartreeFock.jl @@ -157,7 +157,7 @@ function initializeSCF(Hcore::Matrix{T1}, HeeI::Array{T2, 4}, Cs::Union{Matrix{T3}, NTuple{2, Matrix{T3}}}, Ns::NTuple{2, Int}) where {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB, TelLB<:T3<:TelUB} - if Cs isa Array{<:Number, 2} + if Cs isa Matrix{<:Number} C2 = copy(Cs) l = min(size(C2)[1], 2) C2[1:l, 1:l] .= 0 # Breaking spin symmetry. @@ -341,7 +341,8 @@ function runHFcore(N::Union{NTuple{2, Int}, Int}, flag && (isConverged = Std > scfConfig.oscillateThreshold ? false : true; break) earlyTermination && (Etots[end] - EtotMin) / abs(EtotMin) > 0.2 && (printInfo && println("Early termination of method ", method, - " due to the poor performance."); break) + " due to the poor performance."); + isConverged = false; break) end end diff --git a/src/Integration/DataStructure.jl b/src/Integration/DataStructure.jl index a3b93ed0..365aaee9 100644 --- a/src/Integration/DataStructure.jl +++ b/src/Integration/DataStructure.jl @@ -1,4 +1,4 @@ -function addToDataChain!(env::Array{Float64, 1}, atm::Array{Int32, 1}, bas::Array{Int32, 1}, +function addToDataChain!(env::Vector{Float64}, atm::Vector{Int32}, bas::Vector{Int32}, bf::FloatingGTBasisFunc) center = [bf.center[1](), bf.center[2](), bf.center[3]()] xpns = Float64[] @@ -24,8 +24,8 @@ function addToDataChain!(env::Array{Float64, 1}, atm::Array{Int32, 1}, bas::Arra end -function addToDataChain!(env::Array{Float64, 1}, atm::Array{Int32, 1}, - nuclei::Array{String, 1}, nucleiCoords::Array{<:AbstractArray, 1}) +function addToDataChain!(env::Vector{Float64}, atm::Vector{Int32}, + nuclei::Vector{String}, nucleiCoords::Vector{<:AbstractArray}) @compareLength nuclei nucleiCoords "nuclei" "their coordinates" envEndIndex = length(env) len = length(nuclei) diff --git a/src/Integration/OneBody.jl b/src/Integration/OneBody.jl index 1190b316..3736f07f 100644 --- a/src/Integration/OneBody.jl +++ b/src/Integration/OneBody.jl @@ -2,7 +2,7 @@ export overlap, overlaps, nucAttraction, nucAttractions, elecKinetic, elecKineti function oneBodyBFTensorCore(libcinFunc::Val, bf1::FloatingGTBasisFunc, bf2::FloatingGTBasisFunc, - nuclei::Array{String, 1}, nucleiCoords::Array{<:AbstractArray, 1}; + nuclei::Vector{String}, nucleiCoords::Vector{<:AbstractArray}; isGradient::Bool=false) env = Float64[] atm = Int32[] @@ -25,7 +25,7 @@ end function oneBodyBFTensor(libcinFunc::Val, b1::AbstractFloatingGTBasisFunc, b2::AbstractFloatingGTBasisFunc, - nuclei::Array{String, 1}, nucleiCoords::Array{<:AbstractArray, 1}; + nuclei::Vector{String}, nucleiCoords::Vector{<:AbstractArray}; isGradient::Bool=false) f = @inline function (i,j) ints = oneBodyBFTensorCore(libcinFunc, i, j, nuclei, nucleiCoords; isGradient) @@ -35,7 +35,7 @@ function oneBodyBFTensor(libcinFunc::Val, b1::AbstractFloatingGTBasisFunc, b2::A end -function oneBodyBSTensor(BasisSet::Array{<:AbstractFloatingGTBasisFunc, 1}, +function oneBodyBSTensor(BasisSet::Vector{<:AbstractFloatingGTBasisFunc}, intFunc::F) where {F<:Function} subSize = basisSize(BasisSet) |> collect accuSize = vcat(0, accumulate(+, subSize)) @@ -72,7 +72,7 @@ oneBodyBFTensor(Val(:cint1e_ovlp_cart), bf1, bf2, String[], Array[]) Return the orbital overlap matrix (an N×N×1 Tensor where N is the number of spatial orbitals) given a basis set in the form of an `Array`. """ -overlaps(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}) = +overlaps(BSet::Vector{<:AbstractFloatingGTBasisFunc}) = oneBodyBSTensor(BSet, overlap) @@ -83,7 +83,7 @@ oneBodyBSTensor(BSet, overlap) Return the nuclear attraction matrix (an N×N×1 Tensor where N is the number of spatial orbitals) given 2 basis functions, and the nuclei with their coordinates (in atomic unit). """ -nucAttraction(bf1::AbstractFloatingGTBasisFunc, bf2::AbstractFloatingGTBasisFunc, nuc::Array{String, 1}, nucCoords::Array{<:AbstractArray, 1}) = +nucAttraction(bf1::AbstractFloatingGTBasisFunc, bf2::AbstractFloatingGTBasisFunc, nuc::Vector{String}, nucCoords::Vector{<:AbstractArray}) = oneBodyBFTensor(Val(:cint1e_nuc_cart), bf1, bf2, nuc, nucCoords) @@ -94,7 +94,7 @@ oneBodyBFTensor(Val(:cint1e_nuc_cart), bf1, bf2, nuc, nucCoords) Return the nuclear attraction matrix (an N×N×1 Tensor where N is the number of spatial orbitals) given a basis set in the form of an `Array`, and the nuclei with their coordinates (in atomic unit). """ -nucAttractions(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}, nuc::Array{String, 1}, nucCoords::Array{<:AbstractArray, 1}) = +nucAttractions(BSet::Vector{<:AbstractFloatingGTBasisFunc}, nuc::Vector{String}, nucCoords::Vector{<:AbstractArray}) = oneBodyBSTensor(BSet, (bf1, bf2)->oneBodyBFTensor(Val(:cint1e_nuc_cart), bf1, bf2, nuc, nucCoords)) @@ -114,7 +114,7 @@ oneBodyBFTensor(Val(:cint1e_kin_cart), bf1, bf2, String[], Array[]) Return the electron kinetic energy matrix (an N×N×1 Tensor where N is the number of spatial orbitals) given a basis set in the form of an `Array`. """ -elecKinetics(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}) = +elecKinetics(BSet::Vector{<:AbstractFloatingGTBasisFunc}) = oneBodyBSTensor(BSet, elecKinetic) @@ -124,7 +124,7 @@ oneBodyBSTensor(BSet, elecKinetic) Return a matrix element or block of the core Hamiltonian (an N×N×1 Tensor where N is the number of spatial orbitals) given 2 basis functions. """ -coreHij(bf1::AbstractFloatingGTBasisFunc, bf2::AbstractFloatingGTBasisFunc, nuc::Array{String, 1}, nucCoords::Array{<:AbstractArray, 1}) = +coreHij(bf1::AbstractFloatingGTBasisFunc, bf2::AbstractFloatingGTBasisFunc, nuc::Vector{String}, nucCoords::Vector{<:AbstractArray}) = elecKinetic(bf1, bf2) + nucAttraction(bf1, bf2, nuc, nucCoords) @@ -134,5 +134,5 @@ elecKinetic(bf1, bf2) + nucAttraction(bf1, bf2, nuc, nucCoords) Return the core Hamiltonian matrix (an N×N×1 Tensor where N is the number of spatial orbitals) given a basis set in the form of an `Array`. """ -coreH(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}, nuc::Array{String, 1}, nucCoords::Array{<:AbstractArray, 1}) = +coreH(BSet::Vector{<:AbstractFloatingGTBasisFunc}, nuc::Vector{String}, nucCoords::Vector{<:AbstractArray}) = elecKinetics(BSet) + nucAttractions(BSet, nuc, nucCoords) \ No newline at end of file diff --git a/src/Integration/TwoBody.jl b/src/Integration/TwoBody.jl index 4be6541d..18d9ea07 100644 --- a/src/Integration/TwoBody.jl +++ b/src/Integration/TwoBody.jl @@ -30,7 +30,7 @@ function twoBodyBFTensor(libcinFunc::Val, end -function twoBodyBSTensor(BasisSet::Array{<:AbstractFloatingGTBasisFunc, 1}, intFunc::F; +function twoBodyBSTensor(BasisSet::Vector{<:AbstractFloatingGTBasisFunc}, intFunc::F; outputUniqueIndices::Bool=false) where {F<:Function} subSize = basisSize(BasisSet) |> collect accuSize = vcat(0, accumulate(+, subSize)) @@ -85,5 +85,5 @@ Return the electron-electron interaction tensor (an N×N×N×N×1 Tensor where N If `outputUniqueIndices=ture`, additionally return the indices for all the unique integrals. """ -eeInteractions(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}; outputUniqueIndices::Bool=false) = +eeInteractions(BSet::Vector{<:AbstractFloatingGTBasisFunc}; outputUniqueIndices::Bool=false) = twoBodyBSTensor(BSet, eeInteraction; outputUniqueIndices) \ No newline at end of file diff --git a/src/Library.jl b/src/Library.jl index a3f636d0..34bf3926 100644 --- a/src/Library.jl +++ b/src/Library.jl @@ -85,7 +85,7 @@ const ParamNames = [:X, :Y, :Z, :d, :α, :L] const ParamSymbols = [:X, :Y, :Z, :con, :xpn, :len] const ParamList = Dict(ParamSymbols .=> ParamNames) -getCharge(nucs::Array{String, 1}) = getCharge.(nucs) |> sum +getCharge(nucs::Vector{String}) = getCharge.(nucs) |> sum getCharge(nucStr::String) = AtomicNumberList[nucStr] diff --git a/src/Molecule.jl b/src/Molecule.jl index 90bd6502..4c374d95 100644 --- a/src/Molecule.jl +++ b/src/Molecule.jl @@ -9,7 +9,7 @@ struct MolOrbital{N} <: AbstractMolOrbital occupancy::Real orbitalCoeffs::NTuple{N, Float64} - function MolOrbital(energy::Float64, occupancy::Real, orbitalCoeffs::Array{Float64, 1}, + function MolOrbital(energy::Float64, occupancy::Real, orbitalCoeffs::Vector{Float64}, spin::String="Alpha", symmetry::String="A") spin != "Alpha" && spin != "Beta" && error("Keyword arguement \"spin\" can only"* " be \"Alpha\" or \"Beta\"") @@ -18,11 +18,11 @@ struct MolOrbital{N} <: AbstractMolOrbital end -function getMolOrbitals(ens::Array{Float64, 1}, - occus::Array{<:Real, 1}, - C::Array{Float64, 2}, - spins::Array{String, 1}=repeat(["Alpha"], length(occus)), - symms::Array{String, 1}=repeat(["A"], length(occus))) +function getMolOrbitals(ens::Vector{Float64}, + occus::Vector{<:Real}, + C::Matrix{Float64}, + spins::Vector{String}=repeat(["Alpha"], length(occus)), + symms::Vector{String}=repeat(["A"], length(occus))) MolOrbital.(ens, occus, [ C[:,i] for i = 1:size(C, 2) ], spins, symms) |> Tuple end diff --git a/src/Optimization.jl b/src/Optimization.jl index c85b8889..fcc34b26 100644 --- a/src/Optimization.jl +++ b/src/Optimization.jl @@ -1,12 +1,12 @@ export gradDescent!, updateParams!, optimizeParams! -function gradDescent!(pars::Array{<:Real, 1}, grads::Array{<:Real, 1}, η=0.001) +function gradDescent!(pars::Vector{<:Real}, grads::Vector{<:Real}, η=0.001) @assert length(pars) == length(grads) "The length of gradients and correponding parameters should be the same." pars .-= η*grads end -function updateParams!(pbs::Array{<:ParamBox, 1}, grads::Array{<:Real, 1}; +function updateParams!(pbs::Vector{<:ParamBox}, grads::Vector{<:Real}; method::F=gradDescent!) where {F<:Function} parVals = [i[] for i in pbs] method(parVals, grads) @@ -25,8 +25,8 @@ function defaultECmethod(HFtype, Hcore, HeeI, S, Ne) end -function optimizeParams!(bs::Array{<:FloatingGTBasisFunc, 1}, pbs::Array{<:ParamBox, 1}, - mol::Array{String, 1}, nucCoords::Array{<:AbstractArray, 1}, +function optimizeParams!(bs::Vector{<:FloatingGTBasisFunc}, pbs::Vector{<:ParamBox}, + mol::Vector{String}, nucCoords::Vector{<:AbstractArray}, Ne::Union{NTuple{2, Int}, Int}=getCharge(mol); Etarget::Float64=NaN, threshold::Float64=0.0001, maxSteps::Int=2000, printInfo::Bool=true, GDmethod::F1=gradDescent!, HFtype=:RHF, diff --git a/src/Tools.jl b/src/Tools.jl index d2ae62c1..c908f177 100644 --- a/src/Tools.jl +++ b/src/Tools.jl @@ -419,7 +419,8 @@ function arrayAlloc(arrayLength::Int, elementType::Type{T}) where {T<:Real} ccall(:malloc, Ptr{T}, (Cint,), memoryLen) end -arrayAlloc(arrayLength::Int, NumberExample::T) where {T<:Real} = arrayAlloc(arrayLength, typeof(NumberExample)) +arrayAlloc(arrayLength::Int, NumberExample::T) where {T<:Real} = +arrayAlloc(arrayLength, typeof(NumberExample)) """ @@ -578,7 +579,7 @@ function recursivelyGet(dict::Dict, startKey) end -function isOscillateConverged(sequence::Array{<:Real, 1}, threshold1::Real, threshold2::Real=threshold1; +function isOscillateConverged(sequence::Vector{<:Real}, threshold1::Real, threshold2::Real=threshold1; leastCycles::Int=1, nPartition::Int=5, returnStd::Bool=false) @assert leastCycles>0 && nPartition>1 len = length(sequence) diff --git a/test/unit-tests/Tools-test.jl b/test/unit-tests/Tools-test.jl index 994a9ef4..cdb9e474 100644 --- a/test/unit-tests/Tools-test.jl +++ b/test/unit-tests/Tools-test.jl @@ -43,6 +43,6 @@ using Suppressor: @capture_out vec4 = splitTerm(X^2 - X*Y - Z^2) @test ( string.(vec4) .== string.([X^2, -(Z^2), -X*Y]) ) |> prod @test ([vec0, vec1, vec2, vec3, vec4] .|> length) == [1,1,1,1,3] - @test ([vec0, vec1, vec2, vec3, vec4] |> eltype) == Array{Num, 1} + @test ([vec0, vec1, vec2, vec3, vec4] |> eltype) == Vector{Num} end \ No newline at end of file From d216e8c8c486d6cf31dbd0aff5a46af83876843d Mon Sep 17 00:00:00 2001 From: frankwswang Date: Wed, 1 Sep 2021 04:32:47 -0400 Subject: [PATCH 14/33] Code optimizations. --- src/AbstractTypes.jl | 1 + src/Box.jl | 78 +++++++++++++++---- src/Differentiation.jl | 78 +++++++++---------- src/Integration/OneBody.jl | 155 +++++++++++++++++++++++++++---------- src/Integration/TwoBody.jl | 91 +++++++++++++++++----- src/Library.jl | 4 +- src/Optimization.jl | 93 +++++++++++++++++++--- 7 files changed, 368 insertions(+), 132 deletions(-) diff --git a/src/AbstractTypes.jl b/src/AbstractTypes.jl index 02f02a0b..d38b2fde 100644 --- a/src/AbstractTypes.jl +++ b/src/AbstractTypes.jl @@ -7,6 +7,7 @@ abstract type QuiqboxParameter{ParameterT, ContainerT} <: QuiqboxVariableBox end abstract type QuiqboxDataBox <: QuiqboxVariableBox end abstract type ImmutableParameter{ContainerT, DataT} <: QuiqboxParameter{ImmutableParameter, ContainerT} end +abstract type SemiMutableParameter{ContainerT, DataT} <: QuiqboxParameter{SemiMutableParameter, ContainerT} end abstract type MutableParameter{ContainerT, DataT} <: QuiqboxParameter{MutableParameter, ContainerT} end abstract type ImmutableDataBox <: QuiqboxDataBox end diff --git a/src/Box.jl b/src/Box.jl index 1c39ba95..b6749605 100644 --- a/src/Box.jl +++ b/src/Box.jl @@ -1,26 +1,58 @@ export gridBoxCoords, GridBox, gridPoint -#===== Grid-based coordinates =====# -struct GridBox{NX, NY, NZ} +""" + + GridBox{NX, NY, NZ} <: SemiMutableParameter{GridBox, Float64} + +A `struct` that stores coordinates of grid points in terms of both `Vector`s and +`ParamBox`s. + +≡≡≡ Field(s) ≡≡≡ + +`num::Int`: Total number of the grid points. + +`spacing::Float64`: The edge length of the grid box. + +`box::Vector{NTuple{3, ParamBox}}`: The coordinates of grid points in terms of `ParamBox`s. + +`coord::Array{Array{Float64, 1}, 1}`: The coordinates of grid points in terms of `Vector`s. + +≡≡≡ Initialization Method(s) ≡≡≡ + + GridBox(nGrids::NTuple{3, Int}, spacing::Real=10, + centerCoord::Array{<:Real, 1}=[0.0,0.0,0.0]; + canDiff::Bool=true, index::Int=0) -> GridBox + +Constructor of a general `GridBox` that doesn't have to shape as a cube. `nGrid` is a +3-element `Tuple` that specifies the number of grids (number of grid points - 1) along +3 dimensions. `spacing` specifies the length between adjacent grid points. +`centerCoord` specifies the geometry center coordinate of the box. `canDiff` determines +whether the `ParamBox` should be marked as differentiable. `index` defines the index +number for the actual parameter: spacing `L`, with the default value 0 it would be `L₀`. +""" +struct GridBox{NX, NY, NZ} <: SemiMutableParameter{GridBox, Float64} num::Int - len::Real + spacing::Float64 box::Vector{NTuple{3, ParamBox}} coord::Vector{Vector{Float64}} - function GridBox(nGrids::NTuple{3, Int}, edgeLength::Real=10, centerCoord::Array{<:Real,1}=[0.0,0.0,0.0]; + function GridBox(nGrids::NTuple{3, Int}, spacing::Real=10, + centerCoord::Vector{<:Real}=[0.0,0.0,0.0]; canDiff::Bool=true, index::Int=0) @assert prod(nGrids .> 0) "The number of gird of each edge should be larger than 0." - sym = ParamList[:len] - pbRef = ParamBox(edgeLength, sym; canDiff, index) + sym = ParamList[:spacing] + spc = spacing |> Float64 + pbRef = ParamBox(spc, sym; canDiff, index) boxes = NTuple{3, ParamBox{sym, Float64}}[] coords = Vector{Float64}[] n = 0 - supIndex = "ᴳ"*numToSups(nGrids[1])*superscriptSym['-']*numToSups(nGrids[2])*superscriptSym['-']*numToSups(nGrids[3]) + supIndex = "ᴳ"*numToSups(nGrids[1])*superscriptSym['-']*numToSups(nGrids[2])* + superscriptSym['-']*numToSups(nGrids[3]) for i=0:nGrids[1], j=0:nGrids[2], k=0:nGrids[3] n += 1 - fX0 = L -> centerCoord[1] + (i / nGrids[1] - 0.5) * L - fY0 = L -> centerCoord[2] + (j / nGrids[2] - 0.5) * L - fZ0 = L -> centerCoord[3] + (k / nGrids[3] - 0.5) * L + fX0 = L -> centerCoord[1] + (i - 0.5*nGrids[1]) * L + fY0 = L -> centerCoord[2] + (j - 0.5*nGrids[2]) * L + fZ0 = L -> centerCoord[3] + (k - 0.5*nGrids[3]) * L fXname = (ParamList[:X] |> string) * supIndex * numToSubs(n) fYname = (ParamList[:Y] |> string) * supIndex * numToSubs(n) fZname = (ParamList[:Z] |> string) * supIndex * numToSubs(n) @@ -35,16 +67,34 @@ struct GridBox{NX, NY, NZ} push!(boxes, (X, Y, Z)) push!(coords, [X(), Y(), Z()]) end - new{nGrids[1], nGrids[2], nGrids[3]}(prod(nGrids .+ 1), edgeLength, boxes, coords) + new{nGrids[1], nGrids[2], nGrids[3]}(prod(nGrids .+ 1), spc, boxes, coords) end end -GridBox(nGridPerEdge::Int, edgeLength::Real=10, centerCoord::Array{<:Real,1}=[0.0,0.0,0.0]; +""" + + GridBox(nGridPerEdge::Int, spacing::Real=10, + centerCoord::Array{<:Real, 1}=[0.0,0.0,0.0]; + canDiff::Bool=true, index::Int=0) -> GridBox + +Method of generating a cubic `GridBox`. `nGridPerEdge` specifies the number of grids +(number of grid points - 1) along each dimension.`spacing` specifies the length between +adjacent grid points. `centerCoord` specifies the geometry center coordinate of the box. +`canDiff` determines whether the `ParamBox` should be marked as differentiable. `index` +defines the index number for the actual parameter: spacing `L`, with the default value 0 +it would be `L₀`. +""" +GridBox(nGridPerEdge::Int, spacing::Real=10, centerCoord::Vector{<:Real}=[0.0,0.0,0.0]; canDiff::Bool=true, index::Int=0) = -GridBox(fill(nGridPerEdge, 3) |> Tuple, edgeLength, centerCoord; canDiff, index) +GridBox(fill(nGridPerEdge, 3) |> Tuple, spacing, centerCoord; canDiff, index) + +""" + gridPoint(coord::Array{<:Real, 1}) -> NTuple{3, ParamBox} -function gridPoint(coord::Array{<:Real,1}) +Generate a `Tuple` of coordinate `ParamBox`s given a `Vector`. +""" +function gridPoint(coord::Vector{<:Real}) @assert length(coord) == 3 x = ParamBox(coord[1], ParamList[:X]) y = ParamBox(coord[2], ParamList[:Y]) diff --git a/src/Differentiation.jl b/src/Differentiation.jl index 03bad0a4..6d5c2dcc 100644 --- a/src/Differentiation.jl +++ b/src/Differentiation.jl @@ -6,7 +6,7 @@ using Symbolics: Num # Julia supports 0-D arrays but we need to differentiate parameters that are allowed to be tuned from them. """ - ParamBox{V, T} + ParamBox{V, T} <: DifferentiableParameter{ParamBox, T} Parameter container that enables parameter differentiations. @@ -18,17 +18,20 @@ Parameter container that enables parameter differentiations. ≡≡≡ Initialization Method(s) ≡≡≡ - ParamBox(data::Number, name::Symbol=:undef; mapFunction::Function=itself, canDiff::Bool=true, paramType::Type{T}=Float64) -> ParamBox{T} + ParamBox(data::Number, name::Symbol=:undef; mapFunction::Function=itself, + canDiff::Bool=true, paramType::Type{T}=Float64) -> + ParamBox{T} -`name` specifies the name of the variable to be stored, which helps with symbolic representation and automatic differentiation. +`name` specifies the name of the variable to be stored, which helps with symbolic +representation and automatic differentiation. -`mapFunction` is for the case to the store the variable that is a dependent variable (math function) f(x) -of another variable x which is the actually stored in the struct, and linked to the f(x) via the `mapFunction`. -After initializing the `ParamBox`, e.g `pb1 = ParamBox(x, mapFunction=f)`, `pb.data[]` returns `x`, and -`pb.data()` returns `f(x)`. +`mapFunction` is for the case to the store the variable that is a dependent variable +(math function) f(x) of another variable x which is the actually stored in the struct, and +linked to the f(x) via the `mapFunction`. After initializing the `ParamBox`, e.g +`pb1 = ParamBox(x, mapFunction=f)`, `pb.data[]` returns `x`, and `pb.data()` returns `f(x)`. -`canDiff` is used to mark the (independent) variable as differentiable when set to `true`, otherwise the -`Parambox` will be ignored in any differentiation process. +`canDiff` is used to mark the (independent) variable as differentiable when set to `true`, +otherwise the `ParamBox` will be ignored in any differentiation process. `paramType` specifies the type of the stored variable to avoid data type mutation. @@ -39,7 +42,8 @@ julia> Quiqbox.ParamBox(1.0) ParamBox{Float64}(1.0)[∂] ``` -NOTE: When the parameter inside `x::ParamBox` is marked as "differentiable" (a.k.a. `x.canDiff=true`), "`[∂]`" in the printing info is in color green, otherwise it's in grey. +NOTE: When the parameter inside `x::ParamBox` is marked as "differentiable" (a.k.a. +`x.canDiff=true`), "`[∂]`" in the printing info is in color green, otherwise it's in grey. """ mutable struct ParamBox{V, T} <: DifferentiableParameter{ParamBox, T} # mutable struct ParamBox{V, T<:Number} @@ -47,7 +51,8 @@ mutable struct ParamBox{V, T} <: DifferentiableParameter{ParamBox, T} map::Base.RefValue{<:Function} canDiff::Base.RefValue{Bool} index::Union{Int, Nothing} - ParamBox(data::Array{T, 0}, map, canDiff, index=Ref(nothing); name::Symbol=:undef) where {T<:Number} = + ParamBox(data::Array{T, 0}, map, canDiff, index=Ref(nothing); + name::Symbol=:undef) where {T<:Number} = new{name, T}(data, map, canDiff, index) end @@ -86,7 +91,6 @@ function oneBodyDerivativeCore(∂bfs::Vector{<:AbstractFloatingGTBasisFunc}, ∂ʃ = ones(bsSize, bsSize, dimOfʃ) ʃab = ones(bsSize, bsSize, dimOfʃ) ∂ʃab = ones(bsSize, bsSize, dimOfʃ) - # println("S1_6_1") for i = 1:bsSize, j = 1:i ʃab[i,j,:] = ʃab[j,i,:] = ʃ(bfs[i], bfs[j]) end @@ -117,29 +121,28 @@ function twoBodyDerivativeCore(∂bfs::Vector{<:AbstractFloatingGTBasisFunc}, ∂ʃ = ones(bsSize, bsSize, bsSize, bsSize, dimOfʃ) ʃabcd = ones(bsSize, bsSize, bsSize, bsSize, dimOfʃ) ʃ∂abcd = ones(bsSize, bsSize, bsSize, bsSize, dimOfʃ) - # println("S1_7_1") for i = 1:bsSize, j = 1:i, k = 1:i, l = 1:(k==i ? j : k) ʃabcd[i,j,k,l,:] = ʃabcd[j,i,k,l,:] = ʃabcd[j,i,l,k,:] = ʃabcd[i,j,l,k,:] = - ʃabcd[l,k,i,j,:] = ʃabcd[k,l,i,j,:] = ʃabcd[k,l,j,i,:] = ʃabcd[l,k,j,i,:] = ʃ(bfs[i], bfs[j], bfs[k], bfs[l]) + ʃabcd[l,k,i,j,:] = ʃabcd[k,l,i,j,:] = ʃabcd[k,l,j,i,:] = ʃabcd[l,k,j,i,:] = + ʃ(bfs[i], bfs[j], bfs[k], bfs[l]) end - # println("S1_7_2") for i = 1:bsSize, j=1:bsSize, k=1:bsSize, l=1:k ʃ∂abcd[i,j,k,l,:] = ʃ∂abcd[i,j,l,k,:] = ʃ(∂bfs[i], bfs[j], bfs[k], bfs[l]) end - # println("S1_7_3") for e=1:dimOfʃ # [∂ʃ4[i,j,k,l] == ∂ʃ4[j,i,l,k] == ∂ʃ4[j,i,k,l] != ∂ʃ4[l,j,k,i] for i = 1:bsSize, j = 1:i, k = 1:i, l = 1:(k==i ? j : k) val = 0 - # println("S1_7_X_1") - # ʃ∂abcd[i,j,k,l,:] == ʃ∂abcd[i,j,l,k,:] == ʃab∂cd[l,k,i,j,:] == ʃab∂cd[k,l,i,j,:] + # ʃ∂abcd[i,j,k,l,:] == ʃ∂abcd[i,j,l,k,:] == + # ʃab∂cd[l,k,i,j,:] == ʃab∂cd[k,l,i,j,:] for a = 1:bsSize, b = 1:bsSize, c = 1:bsSize, d = 1:bsSize val += ( X[a,i]*X[b,j]* X[c,k]*X[d,l] + X[a,j]*X[b,i]* X[c,k]*X[d,l] + - X[c,i]*X[d,j]* X[a,k]*X[b,l] + X[c,i]*X[d,j]* X[a,l]*X[b,k] ) * ʃ∂abcd[a,b,c,d,e] + + X[c,i]*X[d,j]* X[a,k]*X[b,l] + X[c,i]*X[d,j]* X[a,l]*X[b,k] ) * + ʃ∂abcd[a,b,c,d,e] + ( ∂X[a,i]*X[b,j]* X[c,k]*X[d,l] + ∂X[a,j]*X[b,i]* X[c,k]*X[d,l] + - X[a,i]*X[b,j]*∂X[c,k]*X[d,l] + X[a,i]*X[b,j]*∂X[c,l]*X[d,k] ) * ʃabcd[a,b,c,d,e] + X[a,i]*X[b,j]*∂X[c,k]*X[d,l] + X[a,i]*X[b,j]*∂X[c,l]*X[d,k] ) * + ʃabcd[a,b,c,d,e] end - # println("S1_7_X_2") ∂ʃ[i,j,k,l,e] = ∂ʃ[j,i,k,l,e] = ∂ʃ[j,i,l,k,e] = ∂ʃ[i,j,l,k,e] = ∂ʃ[l,k,i,j,e] = ∂ʃ[k,l,i,j,e] = ∂ʃ[k,l,j,i,e] = ∂ʃ[l,k,j,i,e] = val end @@ -149,45 +152,33 @@ end function derivativeCore(bs::Vector{<:AbstractFloatingGTBasisFunc}, par::ParamBox, - S::Matrix{Float64}; oneBodyFunc::F1=itself, - twoBodyFunc::F2=itself, oneBodyGrad::Bool=false, + S::Matrix{Float64}; oneBodyFunc::F1, twoBodyFunc::F2, + oneBodyGrad::Bool=false, twoBodyGrad::Bool=false) where {F1<:Function, F2<:Function} # ijkl in chemists' notation of spatial bases (ij|kl). ∂bfs = deriveBasisFunc.(bs, Ref(par)) |> flatten - # println("S1_1") bfs = decomposeBasisFunc.(bs) |> flatten - # println("S1_2") bsSize = basisSize(bs) |> sum ∂S = ones(bsSize, bsSize) - ∂X = ones(bsSize, bsSize) # ∂X corresponds to the direvative of X = S^(-0.5) - ∂X₀ = ones(bsSize, bsSize) # ∂X in its eigenbasis - ∂ʃ2, ∂ʃ4 = nothing, nothing - # println("S1_3") + ∂X = ones(bsSize, bsSize) # ∂X corresponds to the derivative of X = S^(-0.5) + ∂X₀ = ones(bsSize, bsSize) # ∂X in its eigen basis for i=1:bsSize, j=1:i S∂ij = overlap(∂bfs[i], bfs[j]) Si∂j = overlap(bfs[i], ∂bfs[j]) ∂S[i,j] = ∂S[j,i] = S∂ij[] + Si∂j[] end X = S^(-0.5) |> Array - # println("S1_4") λ, 𝑣 = eigen(S) - # println("S1_5") ∂S2 = transpose(𝑣)*∂S*𝑣 for i=1:bsSize, j=1:i - ∂X₀[i,j] = ∂X₀[j,i] = (- ∂S2[i,j] * λ[i]^(-0.5) * λ[j]^(-0.5) * (λ[i]^0.5 + λ[j]^0.5)^(-1)) + ∂X₀[i,j] = ∂X₀[j,i] = (- ∂S2[i,j] * λ[i]^(-0.5) * λ[j]^(-0.5) * + (λ[i]^0.5 + λ[j]^0.5)^(-1)) end for i=1:bsSize, j=1:bsSize ∂X[j,i] = [𝑣[j,k]*∂X₀[k,l]*𝑣[i,l] for k=1:bsSize, l=1:bsSize] |> sum end - # println("S1_6") - if oneBodyFunc != itself - ∂ʃ2 = oneBodyDerivativeCore(∂bfs, bfs, X, ∂X, oneBodyFunc, oneBodyGrad) - end - # println("S1_7") - if twoBodyFunc != itself - ∂ʃ4 = twoBodyDerivativeCore(∂bfs, bfs, X, ∂X, twoBodyFunc, twoBodyGrad) - end - # println("S1_8") + ∂ʃ2 = oneBodyDerivativeCore(∂bfs, bfs, X, ∂X, oneBodyFunc, oneBodyGrad) + ∂ʃ4 = twoBodyDerivativeCore(∂bfs, bfs, X, ∂X, twoBodyFunc, twoBodyGrad) ∂ʃ2, ∂ʃ4 end @@ -199,8 +190,9 @@ function ∂HFenergy(bs::Vector{<:AbstractFloatingGTBasisFunc}, par::ParamBox, nElectron::Union{Int, NTuple{2, Int}}) Xinv = S^(0.5) Cₓ = (C isa Tuple) ? (Ref(Xinv) .* C) : (Xinv * C) - # println("S1") - ∂hij, ∂hijkl = derivativeCore(bs, par, S, oneBodyFunc=(i,j)->coreHij(i,j,mol,nucCoords), twoBodyFunc=eeInteraction) + ∂hij, ∂hijkl = derivativeCore(bs, par, S, + oneBodyFunc=(i,j)->coreHijCore(i,j,mol,nucCoords), + twoBodyFunc=eeInteractionCore) getEᵀ(dropdims(∂hij, dims=3), dropdims(∂hijkl, dims=5), Cₓ, nElectron) end diff --git a/src/Integration/OneBody.jl b/src/Integration/OneBody.jl index 3736f07f..77ce5009 100644 --- a/src/Integration/OneBody.jl +++ b/src/Integration/OneBody.jl @@ -1,14 +1,17 @@ -export overlap, overlaps, nucAttraction, nucAttractions, elecKinetic, elecKinetics, coreH, coreHij +export overlap, overlaps, nucAttraction, nucAttractions, elecKinetic, elecKinetics, + coreH, coreHij -function oneBodyBFTensorCore(libcinFunc::Val, bf1::FloatingGTBasisFunc, bf2::FloatingGTBasisFunc, - nuclei::Vector{String}, nucleiCoords::Vector{<:AbstractArray}; - isGradient::Bool=false) +@inline function oneBodyBFTensorCore(libcinFunc::Symbol, + bf1::FloatingGTBasisFunc, bf2::FloatingGTBasisFunc, + nuclei::Vector{String}, + nucleiCoords::Vector{<:AbstractArray}; + isGradient::Bool=false) env = Float64[] atm = Int32[] bas = Int32[] #= - Add actuall nuclei before bases can allow + Add actual nuclei before bases can allow natm = length(nuclei) to save calculating overhead. Otherwise set @@ -19,14 +22,34 @@ function oneBodyBFTensorCore(libcinFunc::Val, bf1::FloatingGTBasisFunc, bf2::Flo addToDataChain!(env, atm, bas, bf1) addToDataChain!(env, atm, bas, bf2) - cintFunc!(libcinFunc, zeros(basisSize([bf1.subshell, bf2.subshell])..., 1+isGradient*2), + cintFunc!(Val(libcinFunc), + zeros(basisSize([bf1.subshell, bf2.subshell])..., 1+isGradient*2), [0,1], atm, length(nuclei), bas, 2, env) end -function oneBodyBFTensor(libcinFunc::Val, b1::AbstractFloatingGTBasisFunc, b2::AbstractFloatingGTBasisFunc, - nuclei::Vector{String}, nucleiCoords::Vector{<:AbstractArray}; - isGradient::Bool=false) +""" + + oneBodyBFTensor(libcinFunc::Symbol, b1::AbstractFloatingGTBasisFunc, + b2::AbstractFloatingGTBasisFunc, nuclei::Array{String, 1}=String[], + nucleiCoords::Array{<:AbstractArray, 1}=Array[]; + isGradient::Bool=false) -> + Array{Float64, 2} + +Core function for one-electron integrals. + +`libcinFunc::Symbol` specifies the backend libcint (https://github.com/sunqm/libcint) +function name, e.g. "int1e_nuc_cart" should be converted to `:int1e_nuc_cart`as the input +argument. If the integral does not need the information of nuclei and their coordinates, +those 2 arguments can be omitted. If the integral is a spacial gradient, `isGradient` +should be set to `true`. +""" +@inline function oneBodyBFTensor(libcinFunc::Symbol, + b1::AbstractFloatingGTBasisFunc, + b2::AbstractFloatingGTBasisFunc, + nuclei::Vector{String}=String[], + nucleiCoords::Vector{<:AbstractArray}=Array[]; + isGradient::Bool=false) f = @inline function (i,j) ints = oneBodyBFTensorCore(libcinFunc, i, j, nuclei, nucleiCoords; isGradient) ints[ijkIndex(i), ijkIndex(j), :] @@ -35,8 +58,8 @@ function oneBodyBFTensor(libcinFunc::Val, b1::AbstractFloatingGTBasisFunc, b2::A end -function oneBodyBSTensor(BasisSet::Vector{<:AbstractFloatingGTBasisFunc}, - intFunc::F) where {F<:Function} +@inline function oneBodyBSTensor(BasisSet::Vector{<:AbstractFloatingGTBasisFunc}, + intFunc::F) where {F<:Function} subSize = basisSize(BasisSet) |> collect accuSize = vcat(0, accumulate(+, subSize)) len = subSize |> sum @@ -56,83 +79,131 @@ function oneBodyBSTensor(BasisSet::Vector{<:AbstractFloatingGTBasisFunc}, end +@inline overlapCore(bf1::AbstractFloatingGTBasisFunc, bf2::AbstractFloatingGTBasisFunc) = + oneBodyBFTensor(:cint1e_ovlp_cart, bf1, bf2) + """ - overlap(fb1::AbstractFloatingGTBasisFunc, fb2::AbstractFloatingGTBasisFunc) -> Array{Float64, 3} + overlap(fb1::AbstractFloatingGTBasisFunc, fb2::AbstractFloatingGTBasisFunc) -> + Array{Float64, 2} -Return the orbital overlap matrix (an N×N×1 Tensor where N is the number of spatial orbitals) given 2 basis functions. +Return the orbital overlap matrix (an N×N `Matrix` where N is the number of spatial +orbitals) given 2 basis functions. """ overlap(bf1::AbstractFloatingGTBasisFunc, bf2::AbstractFloatingGTBasisFunc) = -oneBodyBFTensor(Val(:cint1e_ovlp_cart), bf1, bf2, String[], Array[]) +dropdims(overlapCore(bf1, bf2), dims=3) + +@inline overlapsCore(BSet::Vector{<:AbstractFloatingGTBasisFunc}) = + oneBodyBSTensor(BSet, overlapCore) """ - overlaps(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}) -> Array{Float64, 3} + overlaps(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}) -> Array{Float64, 2} -Return the orbital overlap matrix (an N×N×1 Tensor where N is the number of spatial orbitals) given a basis set in the form of an `Array`. +Return the orbital overlap matrix (an N×N `Matrix` where N is the number of spatial +orbitals) given a basis set in the form of an `Array`. """ -overlaps(BSet::Vector{<:AbstractFloatingGTBasisFunc}) = -oneBodyBSTensor(BSet, overlap) +overlaps(BSet::Vector{<:AbstractFloatingGTBasisFunc}) = dropdims(overlapsCore(BSet), dims=3) +@inline nucAttractionCore(bf1::AbstractFloatingGTBasisFunc, + bf2::AbstractFloatingGTBasisFunc, + nuc::Vector{String}, nucCoords::Vector{<:AbstractArray}) = + oneBodyBFTensor(:cint1e_nuc_cart, bf1, bf2, nuc, nucCoords) + """ - nucAttraction(fb1::AbstractFloatingGTBasisFunc, fb2::AbstractFloatingGTBasisFunc, nuc::Array{String, 1}, nucCoords::Array{<:AbstractArray, 1}) -> Array{Float64, 3} + nucAttraction(fb1::AbstractFloatingGTBasisFunc, fb2::AbstractFloatingGTBasisFunc, + nuc::Array{String, 1}, nucCoords::Array{<:AbstractArray, 1}) -> + Array{Float64, 2} -Return the nuclear attraction matrix (an N×N×1 Tensor where N is the number of spatial orbitals) given 2 basis functions, -and the nuclei with their coordinates (in atomic unit). +Return the nuclear attraction matrix (an N×N `Matrix` where N is the number of spatial +orbitals) given 2 basis functions, and the nuclei with their coordinates (in atomic unit). """ -nucAttraction(bf1::AbstractFloatingGTBasisFunc, bf2::AbstractFloatingGTBasisFunc, nuc::Vector{String}, nucCoords::Vector{<:AbstractArray}) = -oneBodyBFTensor(Val(:cint1e_nuc_cart), bf1, bf2, nuc, nucCoords) +nucAttraction(bf1::AbstractFloatingGTBasisFunc, bf2::AbstractFloatingGTBasisFunc, + nuc::Vector{String}, nucCoords::Vector{<:AbstractArray}) = +dropdims(nucAttractionCore(bf1, bf2, nuc, nucCoords), dims=3) + +@inline nucAttractionsCore(BSet::Vector{<:AbstractFloatingGTBasisFunc}, + nuc::Vector{String}, nucCoords::Vector{<:AbstractArray}) = + oneBodyBSTensor(BSet, @inline (bf1, bf2)->oneBodyBFTensor(:cint1e_nuc_cart, + bf1, bf2, nuc, nucCoords)) """ - nucAttractions(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}, nuc::Array{String, 1}, nucCoords::Array{<:AbstractArray, 1}) -> Array{Float64, 3} + nucAttractions(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}, nuc::Array{String, 1}, + nucCoords::Array{<:AbstractArray, 1}) -> + Array{Float64, 2} -Return the nuclear attraction matrix (an N×N×1 Tensor where N is the number of spatial orbitals) given a basis set in the form of an `Array`, -and the nuclei with their coordinates (in atomic unit). +Return the nuclear attraction matrix (an N×N `Matrix` where N is the number of spatial +orbitals) given a basis set in the form of an `Array`, and the nuclei with their +coordinates (in atomic unit). """ -nucAttractions(BSet::Vector{<:AbstractFloatingGTBasisFunc}, nuc::Vector{String}, nucCoords::Vector{<:AbstractArray}) = -oneBodyBSTensor(BSet, (bf1, bf2)->oneBodyBFTensor(Val(:cint1e_nuc_cart), bf1, bf2, nuc, nucCoords)) +nucAttractions(BSet::Vector{<:AbstractFloatingGTBasisFunc}, + nuc::Vector{String}, nucCoords::Vector{<:AbstractArray}) = +dropdims(nucAttractionsCore(BSet, nuc, nucCoords), dims=3) + +@inline elecKineticCore(bf1::AbstractFloatingGTBasisFunc, + bf2::AbstractFloatingGTBasisFunc) = + oneBodyBFTensor(:cint1e_kin_cart, bf1, bf2) """ - elecKinetic(fb1::AbstractFloatingGTBasisFunc, fb2::AbstractFloatingGTBasisFunc) -> Array{Float64, 3} + elecKinetic(fb1::AbstractFloatingGTBasisFunc, fb2::AbstractFloatingGTBasisFunc) -> + Array{Float64, 2} -Return the electron kinetic energy matrix (an N×N×1 Tensor where N is the number of spatial orbitals) given 2 basis functions. +Return the electron kinetic energy matrix (an N×N `Matrix` where N is the number of spatial +orbitals) given 2 basis functions. """ elecKinetic(bf1::AbstractFloatingGTBasisFunc, bf2::AbstractFloatingGTBasisFunc) = -oneBodyBFTensor(Val(:cint1e_kin_cart), bf1, bf2, String[], Array[]) +dropdims(elecKineticCore(bf1, bf2), dims=3) +@inline elecKineticsCore(BSet::Vector{<:AbstractFloatingGTBasisFunc}) = + oneBodyBSTensor(BSet, elecKineticCore) + """ - elecKinetics(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}) -> Array{Float64, 3} + elecKinetics(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}) -> Array{Float64, 2} -Return the electron kinetic energy matrix (an N×N×1 Tensor where N is the number of spatial orbitals) given a basis set in the form of an `Array`. +Return the electron kinetic energy matrix (an N×N `Matrix` where N is the number of spatial +orbitals) given a basis set in the form of an `Array`. """ elecKinetics(BSet::Vector{<:AbstractFloatingGTBasisFunc}) = -oneBodyBSTensor(BSet, elecKinetic) +dropdims(elecKineticsCore(BSet), dims=3) + +@inline coreHijCore(bf1::AbstractFloatingGTBasisFunc, bf2::AbstractFloatingGTBasisFunc, + nuc::Vector{String}, nucCoords::Vector{<:AbstractArray}) = + elecKineticCore(bf1, bf2) + nucAttractionCore(bf1, bf2, nuc, nucCoords) """ - coreHij(fb1::AbstractFloatingGTBasisFunc, fb2::AbstractFloatingGTBasisFunc) -> Array{Float64, 3} + coreHij(fb1::AbstractFloatingGTBasisFunc, fb2::AbstractFloatingGTBasisFunc) -> + Array{Float64, 2} -Return a matrix element or block of the core Hamiltonian (an N×N×1 Tensor where N is the number of spatial orbitals) given 2 basis functions. +Return a matrix element or block of the core Hamiltonian (an N×N `Matrix` where N is the +number of spatial orbitals) given 2 basis functions. """ -coreHij(bf1::AbstractFloatingGTBasisFunc, bf2::AbstractFloatingGTBasisFunc, nuc::Vector{String}, nucCoords::Vector{<:AbstractArray}) = -elecKinetic(bf1, bf2) + nucAttraction(bf1, bf2, nuc, nucCoords) +coreHij(bf1::AbstractFloatingGTBasisFunc, bf2::AbstractFloatingGTBasisFunc, + nuc::Vector{String}, nucCoords::Vector{<:AbstractArray}) = +dropdims(coreHijCore(bf1, bf2, nuc, nucCoords), dims=3) + +@inline coreHCore(BSet::Vector{<:AbstractFloatingGTBasisFunc}, + nuc::Vector{String}, nucCoords::Vector{<:AbstractArray}) = + elecKineticsCore(BSet) + nucAttractionsCore(BSet, nuc, nucCoords) """ - coreH(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}) -> Array{Float64, 3} + coreH(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}) -> Array{Float64, 2} -Return the core Hamiltonian matrix (an N×N×1 Tensor where N is the number of spatial orbitals) given a basis set in the form of an `Array`. +Return the core Hamiltonian matrix (an N×N `Matrix` where N is the number of spatial +orbitals) given a basis set in the form of an `Array`. """ -coreH(BSet::Vector{<:AbstractFloatingGTBasisFunc}, nuc::Vector{String}, nucCoords::Vector{<:AbstractArray}) = -elecKinetics(BSet) + nucAttractions(BSet, nuc, nucCoords) \ No newline at end of file +coreH(BSet::Vector{<:AbstractFloatingGTBasisFunc}, + nuc::Vector{String}, nucCoords::Vector{<:AbstractArray}) = +dropdims(coreHCore(BSet, nuc, nucCoords), dims=3) \ No newline at end of file diff --git a/src/Integration/TwoBody.jl b/src/Integration/TwoBody.jl index 18d9ea07..d6811b63 100644 --- a/src/Integration/TwoBody.jl +++ b/src/Integration/TwoBody.jl @@ -1,9 +1,10 @@ -export eeInteraction, eeInteractions, uniqueTwoBodyBFints +export eeInteraction, eeInteractions -function twoBodyBFTensorCore(libcinFunc::Val, - bf1::FloatingGTBasisFunc, bf2::FloatingGTBasisFunc, - bf3::FloatingGTBasisFunc, bf4::FloatingGTBasisFunc; isGradient::Bool=false) +@inline function twoBodyBFTensorCore(libcinFunc::Symbol, + bf1::FloatingGTBasisFunc, bf2::FloatingGTBasisFunc, + bf3::FloatingGTBasisFunc, bf4::FloatingGTBasisFunc; + isGradient::Bool=false) env = Float64[] atm = Int32[] bas = Int32[] @@ -15,23 +16,43 @@ function twoBodyBFTensorCore(libcinFunc::Val, addToDataChain!(env, atm, bas, bf) end - cintFunc!(libcinFunc, (subSize..., 1+isGradient*2)|>zeros, id .- 1, atm, 0, bas, length(uniqueBFs), env) + cintFunc!(Val(libcinFunc), (subSize..., 1+isGradient*2)|>zeros, + id .- 1, atm, 0, bas, length(uniqueBFs), env) end -function twoBodyBFTensor(libcinFunc::Val, - b1::AbstractFloatingGTBasisFunc, b2::AbstractFloatingGTBasisFunc, - b3::AbstractFloatingGTBasisFunc, b4::AbstractFloatingGTBasisFunc; isGradient::Bool=false) +""" + + twoBodyBFTensor(libcinFunc::Symbol, + b1::AbstractFloatingGTBasisFunc, b2::AbstractFloatingGTBasisFunc, + b3::AbstractFloatingGTBasisFunc, b4::AbstractFloatingGTBasisFunc; + isGradient::Bool=false) -> + Array{Float64, 5} + +Core function for one-electron integrals. + +`libcinFunc::Symbol` specifies the backend libcint (https://github.com/sunqm/libcint) +function name, e.g. "cint2e_cart" should be converted to `:cint2e_cart`as the input +argument. +""" +@inline function twoBodyBFTensor(libcinFunc::Symbol, + b1::AbstractFloatingGTBasisFunc, + b2::AbstractFloatingGTBasisFunc, + b3::AbstractFloatingGTBasisFunc, + b4::AbstractFloatingGTBasisFunc; + isGradient::Bool=false) f = @inline function (i,j,k,l) ints = twoBodyBFTensorCore(libcinFunc, i, j, k, l; isGradient) ints[ijkIndex(i), ijkIndex(j), ijkIndex(k), ijkIndex(l),:] end - sum([f(i,j,k,l) for i in getBasisFuncs(b1), j in getBasisFuncs(b2), k in getBasisFuncs(b3), l in getBasisFuncs(b4)]) + sum([f(i,j,k,l) for i in getBasisFuncs(b1), j in getBasisFuncs(b2), + k in getBasisFuncs(b3), l in getBasisFuncs(b4)]) end -function twoBodyBSTensor(BasisSet::Vector{<:AbstractFloatingGTBasisFunc}, intFunc::F; - outputUniqueIndices::Bool=false) where {F<:Function} +@inline function twoBodyBSTensor(BasisSet::Vector{<:AbstractFloatingGTBasisFunc}, + intFunc::F; outputUniqueIndices::Bool=false) where + {F<:Function} subSize = basisSize(BasisSet) |> collect accuSize = vcat(0, accumulate(+, subSize)) totalSize = subSize |> sum @@ -56,7 +77,8 @@ function twoBodyBSTensor(BasisSet::Vector{<:AbstractFloatingGTBasisFunc}, intFun end if outputUniqueIndices s = sum(subSize) - uniqueInts = fill(Int[0,0,0,0,0], (3*binomial(s, 4)+6*binomial(s, 3)+4*binomial(s, 2)+s)*nPage) + uniqueInts = fill(Int[0,0,0,0,0], + (3*binomial(s, 4)+6*binomial(s, 3)+4*binomial(s, 2)+s)*nPage) index = 1 for i = 1:s, j = 1:i, k = 1:i, l = 1:(k==i ? j : k), p=1:nPage uniqueInts[index] = [i, j, k, l, p] @@ -67,23 +89,50 @@ function twoBodyBSTensor(BasisSet::Vector{<:AbstractFloatingGTBasisFunc}, intFun end +@inline eeInteractionCore(bf1::AbstractFloatingGTBasisFunc, + bf2::AbstractFloatingGTBasisFunc, + bf3::AbstractFloatingGTBasisFunc, + bf4::AbstractFloatingGTBasisFunc) = +twoBodyBFTensor(:cint2e_cart, bf1, bf2, bf3, bf4) + """ - eeInteraction(bf1::AbstractFloatingGTBasisFunc, bf2::AbstractFloatingGTBasisFunc, bf3::AbstractFloatingGTBasisFunc, bf4::AbstractFloatingGTBasisFunc) -> Array{Float64, 5} + eeInteraction(bf1::AbstractFloatingGTBasisFunc, + bf2::AbstractFloatingGTBasisFunc, + bf3::AbstractFloatingGTBasisFunc, + bf4::AbstractFloatingGTBasisFunc) -> + Array{Float64, 4} + +Return the electron-electron interaction tensor (an N×N×N×N Tensor where N is the number of +spatial orbitals) given 4 basis functions. +""" +eeInteraction(bf1::AbstractFloatingGTBasisFunc, + bf2::AbstractFloatingGTBasisFunc, + bf3::AbstractFloatingGTBasisFunc, + bf4::AbstractFloatingGTBasisFunc) = +dropdims(eeInteractionCore(bf1, bf2, bf3, bf4), dims=5) -Return the electron-electron interaction tensor (an N×N×N×N×1 Tensor where N is the number of spatial orbitals) given 4 basis functions. """ -eeInteraction(bf1::AbstractFloatingGTBasisFunc, bf2::AbstractFloatingGTBasisFunc, bf3::AbstractFloatingGTBasisFunc, bf4::AbstractFloatingGTBasisFunc) = -twoBodyBFTensor(Val(:cint2e_cart), bf1, bf2, bf3, bf4) + eeInteractionsCore(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}; + outputUniqueIndices::Bool=false) -> + Array{Float64, 5}, [Array{<:Array{Int, 1}, 1}] +Return the electron-electron interaction tensor (an N×N×N×N×1 Tensor where N is the number +of spatial orbitals) given a basis set in the form of an `Array`. + +If `outputUniqueIndices=true`, additionally return the indices for all the unique integrals. """ +@inline eeInteractionsCore(BSet::Vector{<:AbstractFloatingGTBasisFunc}; + outputUniqueIndices::Bool=false) = + twoBodyBSTensor(BSet, eeInteractionCore; outputUniqueIndices) - eeInteractions(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}; outputUniqueIndices::Bool=false) -> Array{Float64, 5}, [Array{<:Array{Int, 1}, 1}] +""" -Return the electron-electron interaction tensor (an N×N×N×N×1 Tensor where N is the number of spatial orbitals) given a basis set in the form of an `Array`. + eeInteractions(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}) -> Array{Float64, 4} -If `outputUniqueIndices=ture`, additionally return the indices for all the unique integrals. +Return the electron-electron interaction tensor (an N×N×N×N Tensor where N is the number +of spatial orbitals) given a basis set in the form of an `Array`. """ -eeInteractions(BSet::Vector{<:AbstractFloatingGTBasisFunc}; outputUniqueIndices::Bool=false) = -twoBodyBSTensor(BSet, eeInteraction; outputUniqueIndices) \ No newline at end of file +eeInteractions(BSet::Vector{<:AbstractFloatingGTBasisFunc}) = +dropdims(eeInteractionsCore(BSet), dims=5) \ No newline at end of file diff --git a/src/Library.jl b/src/Library.jl index 34bf3926..337cac27 100644 --- a/src/Library.jl +++ b/src/Library.jl @@ -82,7 +82,7 @@ const ijkStringList = Dict(flatten(SubshellOrbitals) .=> flatten(SubshellAngular const SubshellDimList = Dict(SubshellNames .=> length.(SubshellOrbitals)) # const ParamNames = [:𝑋, :𝑌, :𝑍, :𝑑, :𝛼, :𝐿] const ParamNames = [:X, :Y, :Z, :d, :α, :L] -const ParamSymbols = [:X, :Y, :Z, :con, :xpn, :len] +const ParamSymbols = [:X, :Y, :Z, :con, :xpn, :spacing] const ParamList = Dict(ParamSymbols .=> ParamNames) getCharge(nucs::Vector{String}) = getCharge.(nucs) |> sum @@ -104,5 +104,5 @@ function checkBSList(;printInfo::Bool=false) """ end end - printInfo && println("Basis fucntion list checked.") + printInfo && println("Basis function list checked.") end \ No newline at end of file diff --git a/src/Optimization.jl b/src/Optimization.jl index fcc34b26..eb9fc240 100644 --- a/src/Optimization.jl +++ b/src/Optimization.jl @@ -1,11 +1,28 @@ export gradDescent!, updateParams!, optimizeParams! + +""" + + gradDescent!(pars::Vector{<:Real}, grads::Vector{<:Real}, η=0.001) -> + pars::Vector{<:Real} + +Default gradient descent method in used in Quiqbox. +""" function gradDescent!(pars::Vector{<:Real}, grads::Vector{<:Real}, η=0.001) - @assert length(pars) == length(grads) "The length of gradients and correponding parameters should be the same." + @assert length(pars) == length(grads) "The length of gradients and corresponding "* + "parameters should be the same." pars .-= η*grads end +""" + + updateParams!(pbs::Array{<:ParamBox, 1}, grads::Array{<:Real, 1}; + method::F=gradDescent!) where {F<:Function} -> Array{<:ParamBox, 1} + +Given a `Vector` of parameters::`ParamBox` and its gradients with respect to each +parameter, update the `ParamBox`s and return the updated values. +""" function updateParams!(pbs::Vector{<:ParamBox}, grads::Vector{<:Real}; method::F=gradDescent!) where {F<:Function} parVals = [i[] for i in pbs] @@ -17,6 +34,14 @@ function updateParams!(pbs::Vector{<:ParamBox}, grads::Vector{<:Real}; end +""" + + defaultECmethod(HFtype, Hcore, HeeI, S, Ne) -> + E::Float64, C::Union{Array{Float64, 1}, NTuple{2, Array{Float64, 2}}} + +The default engine (`Function`) in `optimizeParams!` to update Hartree-Fock energy and +coefficient matrix(s). +""" function defaultECmethod(HFtype, Hcore, HeeI, S, Ne) X = getX(S) res = runHFcore(Ne, Hcore, HeeI, S, X, guessC(S, Hcore; X); @@ -25,12 +50,60 @@ function defaultECmethod(HFtype, Hcore, HeeI, S, Ne) end +""" + + optimizeParams!(bs::Array{<:FloatingGTBasisFunc, 1}, pbs::Array{<:ParamBox, 1}, + nuc::Array{String, 1}, nucCoords::Array{<:AbstractArray, 1}, + Ne::Union{NTuple{2, Int}, Int}=getCharge(nuc); + Etarget::Float64=NaN, threshold::Float64=1e-4, maxSteps::Int=2000, + printInfo::Bool=true, GDmethod::F1=gradDescent!, HFtype::Symbol=:RHF, + ECmethod::F2=Quiqbox.defaultECmethod) where + {F1<:Function, F2<:Function} -> + Es::Array{Float64, 1}, pars::Array{Float64, 2}, grads::Array{Float64, 2} + +The main function to optimize the parameters of a given basis set. + +=== Positional argument(s) === + +`bs::Array{<:FloatingGTBasisFunc, 1}`: Basis set. + +`pbs::Array{<:ParamBox, 1}`: The parameters to be optimized that are extracted from the +basis set. + +`nuc::Array{String, 1}`: The nuclei of the molecule. + +`nucCoords::Array{<:AbstractArray, 1}`: The nuclei coordinates. + +`Ne::Union{NTuple{2, Int}, Int}`: The total number of electrons or the numbers of electrons +with different spins respectively. + +=== Keyword argument(s) === + +`Etarget::Float64`: The target Hartree-Hock energy intent to achieve. + +`threshold::Float64`: The threshold for the convergence when evaluating difference between +the latest two energies. + +`maxSteps::Int`: Maximum allowed iteration steps regardless of whether the optimization +iteration converges. + +`printInfo::Bool`: Whether print out the information of each iteration step. + +`GDmethod::F1`: Applied gradient descent `Function`. + +`HFtype::Symbol`: Hartree-Fock type. Available values are `:RHF` and `:UHF`. + +`ECmethod::F2`: The `Function` used to update Hartree-Fock energy and coefficient matrix(s) +during the optimization iterations. +=== Keyword argument(s) === +""" function optimizeParams!(bs::Vector{<:FloatingGTBasisFunc}, pbs::Vector{<:ParamBox}, - mol::Vector{String}, nucCoords::Vector{<:AbstractArray}, - Ne::Union{NTuple{2, Int}, Int}=getCharge(mol); - Etarget::Float64=NaN, threshold::Float64=0.0001, maxSteps::Int=2000, - printInfo::Bool=true, GDmethod::F1=gradDescent!, HFtype=:RHF, - ECmethod::F2=defaultECmethod) where {F1<:Function, F2<:Function} + nuc::Vector{String}, nucCoords::Vector{<:AbstractArray}, + Ne::Union{NTuple{2, Int}, Int}=getCharge(nuc); + Etarget::Float64=NaN, threshold::Float64=1e-4, maxSteps::Int=2000, + printInfo::Bool=true, GDmethod::F1=gradDescent!, + HFtype::Symbol=:RHF, ECmethod::F2=defaultECmethod) where + {F1<:Function, F2<:Function} tAll = @elapsed begin i = 0 @@ -50,13 +123,13 @@ function optimizeParams!(bs::Vector{<:FloatingGTBasisFunc}, pbs::Vector{<:ParamB Npars = length(parsL) while true - S = dropdims(overlaps(bs), dims=3) - Hcore = dropdims(coreH(bs, mol, nucCoords), dims=3) - HeeI = dropdims(eeInteractions(bs), dims=5) + S = overlaps(bs) + Hcore = coreH(bs, nuc, nucCoords) + HeeI = eeInteractions(bs) E, C = ECmethod(HFtype, Hcore, HeeI, S, Ne) t = @elapsed begin - grad = gradHFenegy(bs, pbs, C, S, mol, nucCoords) + grad = gradHFenegy(bs, pbs, C, S, nuc, nucCoords) end push!(Es, E) From c2e9e6b265ca76f7b380bb356333199fd682d6a5 Mon Sep 17 00:00:00 2001 From: frankwswang Date: Wed, 1 Sep 2021 04:34:44 -0400 Subject: [PATCH 15/33] Formatting code and adding docstrings. --- examples/Jmol.jl | 4 +- examples/OptimizeParams.jl | 12 +- src/Basis.jl | 382 +++++++++++++++++++++++++++++-------- src/FileIO.jl | 8 + src/HartreeFock.jl | 251 +++++++++++++++++++++--- src/Molecule.jl | 108 ++++++++++- src/Overload.jl | 4 +- src/SubModule/Molden.jl | 20 +- src/Tools.jl | 30 +-- 9 files changed, 673 insertions(+), 146 deletions(-) diff --git a/examples/Jmol.jl b/examples/Jmol.jl index 06496635..421876b4 100644 --- a/examples/Jmol.jl +++ b/examples/Jmol.jl @@ -16,10 +16,10 @@ molCoords = [ [[0.0, 0.0, 0.1111], [0.0, 0.9316, -0.2592], [0.8068, -0.4658, -0.2592], [-0.8068, -0.4658, -0.2592]] ] ./ br -bfCoords = [molCoords..., GridBox(1, 2.4).coord] +bfCoords = [molCoords..., GridBox(1, 1.2).coord] bfs = ["STO-3G"] bsNames = push!(("-" .*molNames), "-Grid") -prefix = "Exmaple" +prefix = "Example" for (nuc, nucCoords, molName, iMol) in zip(mols, molCoords, molNames, 1:length(mols)), (bfCoord, bsName) in zip(bfCoords[iMol:end], bsNames[iMol:end]), bf in bfs diff --git a/examples/OptimizeParams.jl b/examples/OptimizeParams.jl index 6b4be3d8..660bbfe6 100644 --- a/examples/OptimizeParams.jl +++ b/examples/OptimizeParams.jl @@ -1,22 +1,24 @@ using Quiqbox + +nuc = ["H", "H"] + nucCoords = [[-0.7,0.0,0.0], [0.7,0.0,0.0]] -mol = ["H", "H"] -grid = GridBox(1, 3.0) +grid = GridBox(1, 1.5) gf1 = GaussFunc(0.7,1) bs = genBasisFunc.(grid.box, Ref([gf1])) -pars = uniqueParams!(bs, ignoreMapping=true) +pars = uniqueParams!(bs, filterMapping=true) parsPartial = [pars[1], pars[3]] -optimizeParams!(bs, parsPartial, mol, nucCoords) +optimizeParams!(bs, parsPartial, nuc, nucCoords, maxSteps=20) # # You can also use more advanced optimizers from other packages. # using Flux # First do `Pkg.add("Flux")` if you haven't installed the package. # using Flux.Optimise: update! # optimizer = AMSGrad(0.001) # GDm = (prs, grad) -> update!(optimizer, prs, grad) -# optimizeParams!(bs, parsPartial, mol, nucCoords; GDmethod=GDm) \ No newline at end of file +# optimizeParams!(bs, parsPartial, nuc, nucCoords; GDmethod=GDm) \ No newline at end of file diff --git a/src/Basis.jl b/src/Basis.jl index 5b12d672..dca7751a 100644 --- a/src/Basis.jl +++ b/src/Basis.jl @@ -1,6 +1,6 @@ -export GaussFunc, BasisFuncMix, mergeBasisFuncs, genBFuncsFromText, genBasisFuncText, - BasisFunc, BasisFuncs, genBasisFunc, BasisFuncMix, GTBasis, changeCenter, - basisSize, getParams, uniqueParams!, getVar, getVars, expressionOf, assignCenter! +export GaussFunc, BasisFunc, BasisFuncs, genBasisFunc, centerOf, GTBasis, + decomposeBasisFunc, basisSize, genBasisFuncText, genBFuncsFromText, assignCenter!, + uniqueParams!, getVar, getVars, expressionOf using Symbolics using SymbolicUtils @@ -53,21 +53,31 @@ A (floating) basis function with the center attached to it instead of any nucleu ≡≡≡ Field(s) ≡≡≡ -`center::NTuple{3, ParamBox}`: The center coordinate in form of a 3-element `ParamBox`-type `Tuple`. +`center::NTuple{3, ParamBox}`: The center coordinate in form of a 3-element `ParamBox`-type +`Tuple`. `gauss::NTuple{N, GaussFunc}`: Gaussian functions within the basis function. `subshell::String`: The subshell (angular momentum symbol). -`ijk::Tuple{String}`: Cartesian representation (pseudo-quantum number) of the angular momentum orientation. -E.g., s would be ("X⁰Y⁰Z⁰") +`ijk::Tuple{String}`: Cartesian representation (pseudo-quantum number) of the angular +momentum orientation. E.g., s would be ("X⁰Y⁰Z⁰") -`normalizeGTO::Bool`: Whether the GTO`::GaussFunc` will be normailzed in calculations. +`normalizeGTO::Bool`: Whether the GTO`::GaussFunc` will be normalized in calculations. + +`param::Tuple{Vararg{<:ParamBox}}`: All the tunable parameters`::ParamBox` stored in the +`BasisFunc`. + +≡≡≡ Initialization Method(s) ≡≡≡ + + BasisFunc(center::Tuple{Vararg{<:ParamBox}}, gauss::Array{<:GaussFunc, 1}, + ijk::Array{Int, 1}, normalizeGTO::Bool) -> BasisFunc{S, GN} -`param::Tuple{Vararg{<:ParamBox}}`: All the tunable parameters`::ParamBox` stored in the `BasisFunc`. """ struct BasisFunc{S, GN} <: FloatingGTBasisFunc{S, GN, 1} - center::Tuple{ParamBox{<:Any, Float64}, ParamBox{<:Any, Float64}, ParamBox{<:Any, Float64}} + center::Tuple{ParamBox{<:Any, Float64}, + ParamBox{<:Any, Float64}, + ParamBox{<:Any, Float64}} gauss::NTuple{GN, GaussFunc} subshell::String ijk::Tuple{String} @@ -83,7 +93,8 @@ struct BasisFunc{S, GN} <: FloatingGTBasisFunc{S, GN, 1} for g in gs append!(pars, g.param) end - new{Symbol(subshell), length(gs)}(cen, gs|>Tuple, subshell, (ijkStringList[ijk],), normalizeGTO, pars |> Tuple) + new{Symbol(subshell), length(gs)}(cen, gs|>Tuple, subshell, (ijkStringList[ijk],), + normalizeGTO, pars |> Tuple) end end @@ -92,13 +103,15 @@ end BasisFuncs{S, GN, ON} <: FloatingGTBasisFunc{S, GN, ON} -A group of basis functions with identical parameters except they have different subshell under the specified -agular momentum. It has the same fields as `BasisFunc` and specifically, for `ijk`, instead of being a -1-element `Tuple`, the size of the `Tuple` is the size of the corresponding subshell. - +A group of basis functions with identical parameters except they have different subshell +under the specified angular momentum. It has the same fields as `BasisFunc` and +specifically, for `ijk`, instead of being a 1-element `Tuple`, the size of the `Tuple` is +the size of the corresponding subshell. """ struct BasisFuncs{S, GN, ON} <: FloatingGTBasisFunc{S, GN, ON} - center::Tuple{ParamBox{<:Any, Float64}, ParamBox{<:Any, Float64}, ParamBox{<:Any, Float64}} + center::Tuple{ParamBox{<:Any, Float64}, + ParamBox{<:Any, Float64}, + ParamBox{<:Any, Float64}} gauss::NTuple{GN, GaussFunc} subshell::String ijk::Tuple{Vararg{String}} @@ -109,10 +122,12 @@ struct BasisFuncs{S, GN, ON} <: FloatingGTBasisFunc{S, GN, ON} ijks::Vector{Vector{Int}}, normalizeGTO::Bool=false) @assert prod(length.(ijks) .== 3) "The length of each `ijk` should be 3." ls = sum.(ijks) - @assert prod(ls .== ls[1]) "The total angular momentums (of each ijk) should be the same." + @assert prod(ls .== ls[1]) "The total angular momentums (of each ijk) should be "* + "the same." subshell = SubshellNames[ls[1]+1] ss = SubshellDimList[subshell] - @assert length(ijks) <= ss "The total number of `ijk` should be no more than $(ss) as they are in $(subshell) subshell." + @assert length(ijks) <= ss "The total number of `ijk` should be no more than "* + "$(ss) as they are in $(subshell) subshell." ijks = sort(ijks, rev=true) ijkStrs = [ijkStringList[i] for i in ijks] |> Tuple pars = ParamBox[] @@ -120,7 +135,9 @@ struct BasisFuncs{S, GN, ON} <: FloatingGTBasisFunc{S, GN, ON} for g in gs append!(pars, g.param) end - new{Symbol(subshell), length(gs), length(ijks)}(cen, gs |> Tuple, subshell, ijkStrs, normalizeGTO, pars |> Tuple) + new{Symbol(subshell), length(gs), length(ijks)}(cen, gs |> Tuple, subshell, + ijkStrs, normalizeGTO, + pars |> Tuple) end end @@ -131,14 +148,17 @@ end genBasisFunc(args..., kws...) -> BasisFuncs genBasisFunc(args..., kws...) -> collection -Constructoer of `BasisFunc` and `BasisFuncs`, but it also returns different kinds of collections of them based on -the applied methods. +Constructor of `BasisFunc` and `BasisFuncs`, but it also returns different kinds of +collections of them based on the applied methods. ≡≡≡ Method 1 ≡≡≡ - genBasisFunc(coord::AbstractArray, gs::Array{<:GaussFunc, 1}, ijkOrijks::Union{Array{Int, 1}, Array{Array{Int, 1}, 1}}; normalizeGTO::Bool=false) + genBasisFunc(coord::AbstractArray, gs::Array{<:GaussFunc, 1}, + ijkOrijks::Union{Array{Int, 1}, Array{Array{Int, 1}, 1}}; + normalizeGTO::Bool=false) -`ijkOrijks` is the Array of the pseudo-quantum number(s) to specify the angular momentum(s). E.g., s is [0,0,0] and p is [[1,0,0], [0,1,0], [0,0,1]]. +`ijkOrijks` is the Array of the pseudo-quantum number(s) to specify the angular +momentum(s). E.g., s is [0,0,0] and p is [[1,0,0], [0,1,0], [0,0,1]]. ≡≡≡ Example(s) ≡≡≡ @@ -147,7 +167,9 @@ the applied methods. ≡≡≡ Method 2 ≡≡≡ - genBasisFunc(coord::AbstractArray, gs::Array{<:GaussFunc, 1}, subshell::String="S"; ijkFilter::Array{Bool, 1}=fill(true, SubshellDimList[subshell]), normalizeGTO::Bool=false) + genBasisFunc(coord::AbstractArray, gs::Array{<:GaussFunc, 1}, subshell::String="S"; + ijkFilter::Array{Bool, 1}=fill(true, SubshellDimList[subshell]), + normalizeGTO::Bool=false) ≡≡≡ Example(s) ≡≡≡ @@ -159,10 +181,11 @@ the applied methods. ≡≡≡ Method 3 ≡≡≡ - genBasisFunc(coord::AbstractArray, gExpsANDgCons::NTuple{2, Array{<:Real, 1}}, subshell="S"; kw...) + genBasisFunc(coord::AbstractArray, gExpsANDgCons::NTuple{2, Array{<:Real, 1}}, + subshell="S"; kw...) -Instead of directly inputting `GaussFunc`, one can also input a 2-element `Tuple` of the exponent(s) and -contraction coefficient(s) corresponding to the same `GaussFunc`(s). +Instead of directly inputting `GaussFunc`, one can also input a 2-element `Tuple` of the +exponent(s) and contraction coefficient(s) corresponding to the same `GaussFunc`(s). ≡≡≡ Example(s) ≡≡≡ @@ -176,8 +199,9 @@ contraction coefficient(s) corresponding to the same `GaussFunc`(s). genBasisFunc(center, BSKeyANDnuc::Array{Tuple{String, String}, 1}) -If the user wants to construct existed atomic basis set(s), they can use the (`Array` of) `(BS_name, Atom_name)` -as the second input. If the atom is omitted, then basis set for H is used. +If the user wants to construct existed atomic basis set(s), they can use the (`Array` of) +`(BS_name, Atom_name)` as the second input. If the atom is omitted, then basis set for H +is used. ≡≡≡ Example(s) ≡≡≡ @@ -212,7 +236,8 @@ genBasisFunc(cen::Tuple{Vararg{<:ParamBox}}, gs::Vector{<:GaussFunc}, BasisFuncs(cen, gs, ijks, normalizeGTO) # ijkOrijks::Union{Vector{Int}, Vector{Vector{Int}}} -function genBasisFunc(coord::AbstractArray, gs::Vector{<:GaussFunc}, ijkOrijks::Array; normalizeGTO::Bool=false) +function genBasisFunc(coord::AbstractArray, gs::Vector{<:GaussFunc}, ijkOrijks::Array; + normalizeGTO::Bool=false) @assert length(coord) == 3 "The dimension of the center should be 3." x = ParamBox(coord[1], ParamList[:X]) y = ParamBox(coord[2], ParamList[:Y]) @@ -220,22 +245,26 @@ function genBasisFunc(coord::AbstractArray, gs::Vector{<:GaussFunc}, ijkOrijks:: genBasisFunc((x,y,z), gs, ijkOrijks; normalizeGTO) end -genBasisFunc(::Missing, gs::Vector{<:GaussFunc}, ijkOrijks::Array; normalizeGTO::Bool=false) = +genBasisFunc(::Missing, gs::Vector{<:GaussFunc}, ijkOrijks::Array; + normalizeGTO::Bool=false) = genBasisFunc([NaN, NaN, NaN], gs, ijkOrijks; normalizeGTO) # center::Union{AbstractArray, Tuple{Vararg{<:ParamBox}}, Missing} function genBasisFunc(center, gs::Vector{<:GaussFunc}, subshell::String="S"; - ijkFilter::Vector{Bool}=fill(true, SubshellDimList[subshell]), normalizeGTO::Bool=false) + ijkFilter::Vector{Bool}=fill(true, SubshellDimList[subshell]), + normalizeGTO::Bool=false) ijkLen = length(ijkFilter) subshellSize = SubshellDimList[subshell] - @assert ijkLen == subshellSize "The length of `ijkFilter` should be $(subshellSize) to match the subshell's size." + @assert ijkLen == subshellSize "The length of `ijkFilter` should be $(subshellSize) "* + "to match the subshell's size." ijks = [SubshellSuborderList[subshell][i] for i in findall(x->x==true, ijkFilter)] length(ijks) == 1 && (ijks = ijks[]) genBasisFunc(center, gs, ijks; normalizeGTO) end # ijkOrSubshell::Union{Array, String} -function genBasisFunc(center, gExpsANDgCons::NTuple{2, Vector{<:Real}}, ijkOrSubshell="S"; kw...) +function genBasisFunc(center, gExpsANDgCons::NTuple{2, Vector{<:Real}}, ijkOrSubshell="S"; + kw...) @compareLength gExpsANDgCons[1] gExpsANDgCons[2] "exponents" "contraction coefficients" gs = GaussFunc.(gExpsANDgCons[1], gExpsANDgCons[2]) genBasisFunc(center, gs, ijkOrSubshell; kw...) @@ -248,7 +277,8 @@ function genBasisFunc(center, BSKeyANDnuc::Vector{Tuple{String, String}}) bases = FloatingGTBasisFunc[] for k in BSKeyANDnuc BFMcontent = BasisSetList[k[1]][AtomicNumberList[k[2]]] - append!(bases, genBFuncsFromText(BFMcontent; adjustContent=true, excludeLastNlines=1, center)) + append!(bases, genBFuncsFromText(BFMcontent; adjustContent=true, + excludeLastNlines=1, center)) end bases end @@ -268,6 +298,31 @@ genBasisFunc(bf::FloatingGTBasisFunc) = itself(bf) genBasisFunc(bs::Vector{<:FloatingGTBasisFunc}) = sortBasisFuncs(bs) +""" + + GTBasis{N, BT} <: BasisSetData{N} + +The container to store basis set information. + +≡≡≡ Field(s) ≡≡≡ + +`basis::Array{<:AbstractFloatingGTBasisFunc, 1}`: Basis set. +`S::Array{<:Number, 2}`: Overlap matrix. +`Te::Array{<:Number, 2}`: Kinetic energy part of the electronic core Hamiltonian. +`eeI::Array{<:Number, 4}`: Electron-electron interaction. +`getVne::Function`: A `Function` that returns the nuclear attraction Hamiltonian when + nuclei`::Array{String, 1}` and + their coordinates`::Array{<:AbstractArray, 1}` are input. +getHcore::Function: Similar as `getVne`, a `Function` that returns the core Hamiltonian + when nuclei and their coordinates of same `DataType` are input. + +≡≡≡ Initialization Method(s) ≡≡≡ + + GTBasis(basis::Vector{<:AbstractFloatingGTBasisFunc}, S::Matrix{<:Number}, + Te::Matrix{<:Number}, eeI::Array{<:Number, 4}) -> + GTBasis + +""" struct GTBasis{N, BT} <: BasisSetData{N} basis::Vector{<:AbstractFloatingGTBasisFunc} S::Matrix{<:Number} @@ -279,15 +334,20 @@ struct GTBasis{N, BT} <: BasisSetData{N} function GTBasis(basis::Vector{<:AbstractFloatingGTBasisFunc}, S::Matrix{<:Number}, Te::Matrix{<:Number}, eeI::Array{<:Number, 4}) new{basisSize(basis) |> sum, typeof(basis)}(basis, S, Te, eeI, - (mol, nucCoords)->dropdims(nucAttractions(basis, mol, nucCoords), dims=3), - (mol, nucCoords)->dropdims(nucAttractions(basis, mol, nucCoords), dims=3) + Te) + (mol, nucCoords) -> nucAttractions(basis, mol, nucCoords), + (mol, nucCoords) -> nucAttractions(basis, mol, nucCoords) + Te) end end +""" + + GTBasis(basis::Vector{<:AbstractFloatingGTBasisFunc}) -> GTBasis + +Directly construct a `GTBasis` given a basis set. + +""" GTBasis(basis::Vector{<:AbstractFloatingGTBasisFunc}) = -GTBasis(basis, dropdims(overlaps(basis), dims=3), - dropdims(elecKinetics(basis), dims=3), - dropdims(eeInteractions(basis), dims=5)) +GTBasis(basis, overlaps(basis), elecKinetics(basis), eeInteractions(basis)) function sortBasisFuncs(bs::Vector{<:FloatingGTBasisFunc}; groupCenters::Bool=false) @@ -317,13 +377,19 @@ function ijkIndex(b::FloatingGTBasisFunc) [ijkIndexList[ijk] for ijk in b.ijk] end +""" + centerOf(bf::FloatingGTBasisFunc) -> Array{<:Real, 1} +Return the center coordinate of the input `FloatingGTBasisFunc`. +""" function centerOf(bf::FloatingGTBasisFunc) [i() for i in bf.center] end -# Treated as one basis Function +""" +Sum of multiple `FloatingGTBasisFunc`, treated as one basis Function. +""" struct BasisFuncMix{ON} <: AbstractFloatingGTBasisFunc BasisFunc::NTuple{ON, FloatingGTBasisFunc} param::Tuple{Vararg{<:ParamBox}} @@ -344,7 +410,14 @@ getBasisFuncs(bfm::BasisFuncMix) = bfm.BasisFunc getBasisFuncs(bf::FloatingGTBasisFunc) = (bf,) getBasisFuncs(::Any) = () +""" + decomposeBasisFunc(bf::FloatingGTBasisFunc; splitGaussFunc::Bool=false) -> + Array{<:FloatingGTBasisFunc, 1} + +Decompose a `FloatingGTBasisFunc` into a `Vector` of `BasisFunc`s. If `splitGaussFunc` is +`true`, then each `BasisFunc` in the returned `Vector` only contains 1 `GaussFunc`. +""" function decomposeBasisFunc(bf::FloatingGTBasisFunc; splitGaussFunc::Bool=false) cen = bf.center res = BasisFunc[] @@ -356,7 +429,8 @@ function decomposeBasisFunc(bf::FloatingGTBasisFunc; splitGaussFunc::Bool=false) nRow = bf.gauss |> length else for ijk in bf.ijk - push!(res, BasisFunc(cen, bf.gauss|>collect, ijkOrbitalList[ijk], bf.normalizeGTO)) + push!(res, BasisFunc(cen, bf.gauss|>collect, ijkOrbitalList[ijk], + bf.normalizeGTO)) end end reshape(res, (nRow, bf.ijk |> length)) @@ -386,12 +460,21 @@ basisSize(basisSet::Vector{<:Any}) = basisSize.(basisSet) |> flatten |> Tuple # Core function to generate a customized X-Gaussian (X>1) basis function. function genGaussFuncText(exponent::Real, contraction::Real) """ - $(join(map(x -> rpad(round(x, sigdigits=10)|>alignSignedNum, 20), [exponent, contraction])) |> rstrip) + $(join(map(x -> rpad(round(x, sigdigits=10)|>alignSignedNum, 20), + [exponent, contraction])) |> rstrip) """ end +""" + + genBasisFuncText(bf::FloatingGTBasisFunc; norm=1.0, printCenter=true) -> String -function genBasisFuncText(bf::FloatingGTBasisFunc; norm=1.0, printCenter=true) +Generate a `String` of the text of the input `FloatingGTBasisFunc`. `norm` is the +additional normalization factor. If `printCenter` is `true`, the center coordinate +will be added on the first line of the `String`. +""" +function genBasisFuncText(bf::FloatingGTBasisFunc; + norm::Float64=1.0, printCenter::Bool=true) gauss = bf.gauss |> collect GFs = map(x -> genGaussFuncText(x.xpn[], x.con[]), gauss) cen = round.(centerOf(bf), sigdigits=15) @@ -401,7 +484,20 @@ function genBasisFuncText(bf::FloatingGTBasisFunc; norm=1.0, printCenter=true) firstLine*"$(bf.subshell) $(bf.gauss |> length) $(norm)\n" * (GFs |> join) end -function genBasisFuncText(bs::Vector{<:FloatingGTBasisFunc}; norm=1.0, printCenter=true, groupCenters=true) +""" + + genBasisFuncText(bs::Array{<:FloatingGTBasisFunc, 1}; + norm=1.0, printCenter=true, groupCenters::Bool=true) -> + String + +Generate a `String` of the text of the input basis set. `norm` is the additional +normalization factor. If `printCenter` is `true`, the center coordinate will be added +on the first line of the `String`. `groupCenters` determines whether the function will +group the basis functions with same center together. +""" +function genBasisFuncText(bs::Vector{<:FloatingGTBasisFunc}; + norm::Float64=1.0, printCenter::Bool=true, + groupCenters::Bool=true) strs = String[] bfBlocks = sortBasisFuncs(bs; groupCenters) if groupCenters @@ -419,6 +515,27 @@ function genBasisFuncText(bs::Vector{<:FloatingGTBasisFunc}; norm=1.0, printCent end +""" + + genBFuncsFromText(content::String; adjustContent::Bool=false, + adjustFunction::F=sciNotReplace, + excludeFirstNlines=0, excludeLastNlines=0, + center::Union{AbstractArray, + Tuple{Vararg{<:ParamBox}}, + Missing}=missing) where {F<:Function} -> + Array{<:FloatingGTBasisFunc, 1} + +Generate the basis set from a `String` of basis set in Gaussian format or the String output +from `genBasisFuncText`. For the former, `adjustContent` needs to be set to `true`. +`adjustFunction` is only applied when `adjustContent=true`, which in default is a +`function` used to detect and convert the format of the scientific notation in the String. + +`excludeFirstNlines` and `excludeLastNlines` are used to exclude first or last few lines of +the `String` if intent. `genBFuncsFromText` can't directly read center coordinate +information from the String even if it's included, so argument `center` is used to assign a +coordinate for all the basis functions from the String; it can be a `Vector`, a `Tuple` of +the positional `ParamBox`s, or simply (in default) set to `missing` for later assignment. +""" function genBFuncsFromText(content::String; adjustContent::Bool=false, adjustFunction::F=sciNotReplace, @@ -427,7 +544,8 @@ function genBFuncsFromText(content::String; Tuple{Vararg{<:ParamBox}}, Missing}=missing) where {F<:Function} adjustContent && (content = adjustFunction(content)) - lines = split.(content |> IOBuffer |> readlines)[1+excludeFirstNlines : end-excludeLastNlines] + lines = split.(content |> IOBuffer |> readlines) + lines = lines[1+excludeFirstNlines : end-excludeLastNlines] data = [advancedParse.(i) for i in lines] index = findall(x -> typeof(x) != Vector{Float64} && length(x)==3, data) bfs = [] @@ -440,7 +558,8 @@ function genBFuncsFromText(content::String; push!(gs1, GaussFunc(data[j][1], data[j][2])) push!(gs2, GaussFunc(data[j][1], data[j][3])) end - append!(bfs, genBasisFunc.(Ref(center), [gs1, gs2], ["S", "P"], normalizeGTO=true)) + append!(bfs, genBasisFunc.(Ref(center), [gs1, gs2], ["S", "P"], + normalizeGTO=true)) else for j = i+1 : i+ng push!(gs1, GaussFunc(data[j]...)) @@ -451,7 +570,13 @@ function genBFuncsFromText(content::String; bfs |> flatten end +""" + + assignCenter!(center::AbstractArray, b::FloatingGTBasisFunc) -> NTuple{3, ParamBox} +Assign a new coordinate to the center of the input `FloatingGTBasisFunc`. +Also return the altered center. +""" function assignCenter!(center::AbstractArray, b::FloatingGTBasisFunc) for (i,j) in zip(b.center, center) i[] = j @@ -460,13 +585,15 @@ function assignCenter!(center::AbstractArray, b::FloatingGTBasisFunc) end -function getParams(pb::ParamBox, symbol::Union{Symbol, Nothing}=nothing; onlyDifferentiable::Bool=false) +function getParams(pb::ParamBox, symbol::Union{Symbol, Nothing}=nothing; + onlyDifferentiable::Bool=false) !(onlyDifferentiable ? pb.canDiff[] : true) && (return nothing) !(symbol === nothing ? true : (symbol == typeof(pb).parameters[1])) && (return nothing) pb end -function getParams(pbs::Vector{<:ParamBox}, symbol::Union{Symbol, Nothing}=nothing; onlyDifferentiable::Bool=false) +function getParams(pbs::Vector{<:ParamBox}, symbol::Union{Symbol, Nothing}=nothing; + onlyDifferentiable::Bool=false) res = symbol === nothing ? ParamBox[] : ParamBox{symbol}[] for i in pbs j = getParams(i, symbol; onlyDifferentiable) @@ -475,27 +602,42 @@ function getParams(pbs::Vector{<:ParamBox}, symbol::Union{Symbol, Nothing}=nothi res end -getParams(gf::GaussFunc, symbol::Union{Symbol, Nothing}=nothing; onlyDifferentiable::Bool=false) = getParams([gf.xpn, gf.con], symbol; onlyDifferentiable) -getParams(bf::FloatingGTBasisFunc, symbol::Union{Symbol, Nothing}=nothing; onlyDifferentiable::Bool=false) = vcat( getParams.(bf.gauss, symbol; onlyDifferentiable)..., getParams(bf.center |> collect, symbol; onlyDifferentiable) ) -getParams(ds, symbols::Vector{Symbol}; onlyDifferentiable::Bool=false) = getParams.(Ref(ds), symbols; onlyDifferentiable) |> flatten -getParams(ds::Array, symbol::Union{Symbol, Nothing}=nothing; onlyDifferentiable::Bool=false) = getParams.(ds, symbol; onlyDifferentiable) |> flatten +getParams(gf::GaussFunc, symbol::Union{Symbol, Nothing}=nothing; + onlyDifferentiable::Bool=false) = +getParams([gf.xpn, gf.con], symbol; onlyDifferentiable) + +getParams(bf::FloatingGTBasisFunc, symbol::Union{Symbol, Nothing}=nothing; + onlyDifferentiable::Bool=false) = +vcat( getParams.(bf.gauss, symbol; onlyDifferentiable)..., + getParams(bf.center |> collect, symbol; onlyDifferentiable) ) + +getParams(ds, symbols::Vector{Symbol}; onlyDifferentiable::Bool=false) = +getParams.(Ref(ds), symbols; onlyDifferentiable) |> flatten + +getParams(ds::Array, symbol::Union{Symbol, Nothing}=nothing; + onlyDifferentiable::Bool=false) = +getParams.(ds, symbol; onlyDifferentiable) |> flatten function markParams!(parArray::Vector{<:ParamBox{V}}; - ignoreContainerType::Bool=false, filter::Bool=true, ignoreMapping::Bool=false) where {V} - res, _ = markUnique(parArray, compareFunction=hasIdentical, ignoreFunction=true; ignoreContainerType) + ignoreContainerType::Bool=false, filter::Bool=true, + filterMapping::Bool=false) where {V} + res, _ = markUnique(parArray, compareFunction=hasIdentical, ignoreFunction=true; + ignoreContainerType) for i=1:length(parArray) parArray[i].index = res[i] end if filter - _, cmprList = markUnique(parArray, compareFunction=hasIdentical, ignoreFunction=ignoreMapping; ignoreContainerType) + _, cmprList = markUnique(parArray, compareFunction=hasIdentical, + ignoreFunction=filterMapping; ignoreContainerType) return cmprList end parArray end function markParams!(parArray::Vector{<:ParamBox}; - ignoreContainerType::Bool=false, filter::Bool=true, ignoreMapping::Bool=false) + ignoreContainerType::Bool=false, filter::Bool=true, + filterMapping::Bool=false) pars = ParamBox[] syms = getUnique!([typeof(i).parameters[1] for i in parArray]) arr = parArray |> copy @@ -510,65 +652,114 @@ function markParams!(parArray::Vector{<:ParamBox}; end end deleteat!(arr, ids) - append!(pars, markParams!(subArr; ignoreContainerType, filter, ignoreMapping)) + append!(pars, markParams!(subArr; ignoreContainerType, filter, filterMapping)) end pars end +""" + + uniqueParams!(bs; onlyDifferentiable::Bool=false, ignoreContainerType::Bool=false, + filter::Bool=true, filterMapping::Bool=false) -> Array{<:ParamBox, 1} + +Mark the parameters (`ParamBox`) in input bs which can a `Vector` of `GaussFunc` or +`FloatingGTBasisFunc`. The identical parameters will be marked with same index. + +=== Keyword argument(s) === + +`onlyDifferentiable`: Determine whether ignore un-differentiable parameters. + +`ignoreContainerType`: If set to `true`, then only the field `data` of the `ParamBox`s will +be compared to determine whether each `ParamBox` are unique. + +`filter`: Determine whether filter out the identical `ParamBox`s and only return the unique +ones. -function uniqueParams!(bs; onlyDifferentiable::Bool=false, ignoreContainerType::Bool=false, filter::Bool=true, ignoreMapping::Bool=false) - markParams!(getParams(bs; onlyDifferentiable); ignoreContainerType, filter, ignoreMapping) +`filterMapping`: Determine wether return the `ParamBox`s with identical fields except the +`map` field. When `filter=false`, this argument is automatically overwritten to be `false`. +""" +function uniqueParams!(bs; onlyDifferentiable::Bool=false, ignoreContainerType::Bool=false, + filter::Bool=true, filterMapping::Bool=false) + markParams!(getParams(bs; onlyDifferentiable); + ignoreContainerType, filter, filterMapping) end +""" + + getVar(pb::ParamBox; markUndifferentiable::Bool=false, includeMapping::Bool=false) -> + Array{<:Pair{Symbolics.Num, <:Number}, 1} + +Return a 1-element `Vector` of `Pair` to show the `Symbol`::Symbolics.Num of the stored +variable and the corresponding values. +""" function getVar(pb::ParamBox; markUndifferentiable::Bool=false, includeMapping::Bool=false) varName = typeof(pb).parameters[1] superscript = (pb.canDiff[] == true || !markUndifferentiable) ? "" : NoDiffMark varSymbol = Symbol((varName |> string) * superscript) - vr = (pb.index isa Int) ? Symbolics.variable(varSymbol, pb.index) : Symbolics.variable(varName) + vr = (pb.index isa Int) ? Symbolics.variable(varSymbol, pb.index) : + Symbolics.variable(varName) mapName = pb.map[] |> nameof dvr = Symbolics.variable(mapName, T=Symbolics.FnType{Tuple{Any}, Real})(vr) expr = pb.map[](vr) res = Pair[vr => pb[]] - includeMapping && !(pb.map[] isa typeof(itself)) && (pushfirst!(res, dvr=>expr, expr=>pb()) |> unique!) + includeMapping && !(pb.map[] isa typeof(itself)) && + (pushfirst!(res, dvr=>expr, expr=>pb()) |> unique!) res end getVar(pbType::Type{<:ParamBox}) = Symbolics.variable(pbType.parameters[1]) +""" + + getVars(obj::Union{GaussFunc, BasisFunc}; markUndifferentiable::Bool=false, + includeMapping::Bool=false) -> Array{<:Pair, 1} + + getVars(collection::Array{<:Union{GaussFunc, BasisFunc, ParamBox}, 1}; + markUndifferentiable::Bool=false, includeMapping::Bool=false) -> + Array{<:Pair, 1} +Return a `Vector` of `Pair` to indicate the mapping relations of and between the variables +stored in the `ParamBox`s in the given input. +""" getVars(gf::GaussFunc; markUndifferentiable::Bool=false, includeMapping::Bool=false) = getVar.(gf.param; markUndifferentiable, includeMapping) |> flatten |> Dict getVars(bf::BasisFunc; markUndifferentiable::Bool=false, includeMapping::Bool=false) = getVar.(bf.param; markUndifferentiable, includeMapping) |> flatten |> Dict -getVars(pbs::Vector{<:ParamBox}; markUndifferentiable::Bool=false, includeMapping::Bool=false) = +getVars(pbs::Vector{<:ParamBox}; + markUndifferentiable::Bool=false, includeMapping::Bool=false) = getVar.(pbs; markUndifferentiable, includeMapping) |> flatten |> Dict -getVars(fs::Vector{<:Union{GaussFunc, BasisFunc}}; markUndifferentiable::Bool=false, includeMapping::Bool=false) = +getVars(fs::Vector{<:Union{GaussFunc, BasisFunc}}; + markUndifferentiable::Bool=false, includeMapping::Bool=false) = merge(getVars.(fs; markUndifferentiable, includeMapping)...) function Nlα(l, α) if l < 2 - ( ( 2^(2l+3) * factorial(l+1) * 2^(l+1.5) / (factorial(2l+2) * √π) ) |> sqrt) * α^(0.5l + 0.75) + ( ( 2^(2l+3) * factorial(l+1) * 2^(l+1.5) / + (factorial(2l+2) * √π) ) |> sqrt) * α^(0.5l + 0.75) else # for higher angular momentum make the upper bound of norms be 1. - ( ( 2^(3l+1.5) * factorial(l) / (factorial(2l) * π^1.5) ) |> sqrt ) * α^(0.5l + 0.75) + ( ( 2^(3l+1.5) * factorial(l) / + (factorial(2l) * π^1.5) ) |> sqrt ) * α^(0.5l + 0.75) end end Nlα(subshell::String, α) = Nlα(SubshellNumberList[subshell], α) -Nijk(i, j, k) = (2/π)^0.75 * ( 2^(3*(i+j+k)) * factorial(i) * factorial(j) * factorial(k) / (factorial(2i) * factorial(2j) * factorial(2k)) )^0.5 +Nijk(i, j, k) = (2/π)^0.75 * ( 2^(3*(i+j+k)) * factorial(i) * factorial(j) * factorial(k) / + (factorial(2i) * factorial(2j) * factorial(2k)) )^0.5 function Nijkα(i, j, k, α) l = i + j + k if l < 2 - ( ( 2^(2l+3) * factorial(l+1) * 2^(l+1.5) / (factorial(2l+2) * √π) ) |> sqrt ) * α^(0.5l + 0.75) + ( ( 2^(2l+3) * factorial(l+1) * 2^(l+1.5) / + (factorial(2l+2) * √π) ) |> sqrt ) * α^(0.5l + 0.75) else # for higher angular momentum make the upper bound of norms be 1. Nijk(i, j, k) * α^(0.5l + 0.75) @@ -585,16 +776,34 @@ fgo0(x, y, z, Rx, Ry, Rz, α, d, i, j, k, N=1.0) = cgo0(x-Rx, y-Ry, z-Rz, α, d, pgf(r, α) = pgf0(r[1], r[2], r[3], α) cgf(r, α, d) = cgf0(r[1], r[2], r[3], α, d) cgo(r, α, d, l, N=Nijkα(i,j,k,α)) = cgo0(r[1], r[2], r[3], α, d, l[1], l[2], l[3], N) -fgo(r, R, α, d, l, N=Nijkα(i,j,k,α)) = fgo0(r[1], r[2], r[3], R[1], R[2], R[3], α, d, l[1], l[2], l[3], N) +fgo(r, R, α, d, l, N=Nijkα(i,j,k,α)) = fgo0(r[1], r[2], r[3], R[1], R[2], R[3], + α, d, l[1], l[2], l[3], N) cgo2(r, α, d, i, j, k, N=Nijkα(i,j,k,α)) = cgo0(r[1], r[2], r[3], α, d, i, j, k, N) -fgo2(r, R, α, d, i, j, k, N=Nijkα(i,j,k,α)) = fgo0(r[1], r[2], r[3], R[1], R[2], R[3], α, d, i, j, k, N) +fgo2(r, R, α, d, i, j, k, N=Nijkα(i,j,k,α)) = fgo0(r[1], r[2], r[3], R[1], R[2], R[3], + α, d, i, j, k, N) + + +normOfGTOin(b::FloatingGTBasisFunc{S, GN, 1}) where {S, GN} = +Nijkα.(ijkOrbitalList[b.ijk[1]]..., [g.xpn() for g in b.gauss]) + +normOfGTOin(b::FloatingGTBasisFunc{S, GN, ON}) where {S, GN, ON} = +Nlα.(b.subshell, [g.xpn() for g in b.gauss]) -normOfGTOin(b::FloatingGTBasisFunc{S, GN, 1}) where {S, GN} = Nijkα.(ijkOrbitalList[b.ijk[1]]..., [g.xpn() for g in b.gauss]) -normOfGTOin(b::FloatingGTBasisFunc{S, GN, ON}) where {S, GN, ON} = Nlα.(b.subshell, [g.xpn() for g in b.gauss]) +""" + + expressionOf(gf::GaussFunc; markUndifferentiable::Bool=false, + substituteValue::Bool=false) -> Symbolics.Num + expressionOf(gf::FloatingGTBasisFunc; markUndifferentiable::Bool=false, + substituteValue::Bool=false) -> Array{<:Symbolics.Num, 2} -function expressionOf(gf::GaussFunc; markUndifferentiable::Bool=false, substituteValue::Bool=false) +Return the expression of a given `GaussFunc` or `FloatingGTBasisFunc`. When the latter is +the input, a `Matrix` is returned of which the row(s) is(are) one orbital with the +expression(s) of its Gaussian function(s) as entry(entries). +""" +function expressionOf(gf::GaussFunc; + markUndifferentiable::Bool=false, substituteValue::Bool=false) r = Symbolics.variable.(:r, [1:3;]) includeMapping = true index = substituteValue ? 2 : 1 @@ -602,7 +811,8 @@ function expressionOf(gf::GaussFunc; markUndifferentiable::Bool=false, substitut getVar(gf.con; markUndifferentiable, includeMapping)[1][index]) end -function expressionOf(bf::FloatingGTBasisFunc; markUndifferentiable::Bool=false, substituteValue::Bool=false, +function expressionOf(bf::FloatingGTBasisFunc; + markUndifferentiable::Bool=false, substituteValue::Bool=false, onlyParameter::Bool=false, expand::Bool=false) if bf.normalizeGTO N = (bf isa BasisFunc) ? Nijkα : (i,j,k,α) -> Nlα(i+j+k, α) @@ -623,7 +833,8 @@ function expressionOf(bf::FloatingGTBasisFunc; markUndifferentiable::Bool=false, getVar(bf.center[2]; markUndifferentiable, includeMapping)[1][index], getVar(bf.center[3]; markUndifferentiable, includeMapping)[1][index]] r = Symbolics.variable.(:r, [1:3;]) - f2 = onlyParameter ? (α, d, i, j, k)->cgo2(-R, α, d, i, j, k, N(i,j,k,α)) : (α, d, i, j, k)->fgo2(r, R, α, d, i, j, k, N(i,j,k,α)) + f2 = onlyParameter ? (α, d, i, j, k)->cgo2(-R, α, d, i, j, k, N(i,j,k,α)) : + (α, d, i, j, k)->fgo2(r, R, α, d, i, j, k, N(i,j,k,α)) for ijk in bf.ijk i, j, k = ijkOrbitalList[ijk] gfs = Num[] @@ -637,13 +848,16 @@ function expressionOf(bf::FloatingGTBasisFunc; markUndifferentiable::Bool=false, expand ? reshape(res, (gSize, lSize)) : res |> transpose |> Array end -function expressionOf(bfm::BasisFuncMix; markUndifferentiable::Bool=false, substituteValue::Bool=false, - onlyParameter::Bool=false, expand::Bool=false) - [expressionOf(bf; markUndifferentiable, substituteValue, onlyParameter, expand) for bf in bfm.BasisFunc] |> sum +function expressionOf(bfm::BasisFuncMix; markUndifferentiable::Bool=false, + substituteValue::Bool=false, onlyParameter::Bool=false, + expand::Bool=false) + [expressionOf(bf; markUndifferentiable, substituteValue, onlyParameter, expand) + for bf in bfm.BasisFunc] |> sum end -function orbitalShift(bf::FloatingGTBasisFunc{S, GN, 1}; ijkShift::Vector{Int}, conRatio::Vector{<:Real}, fixNorm::Bool=false) where {S, GN} +function orbitalShift(bf::FloatingGTBasisFunc{S, GN, 1}; ijkShift::Vector{Int}, + conRatio::Vector{<:Real}, fixNorm::Bool=false) where {S, GN} @assert ijkShift |> length == 3 "The length of `ijkShift` should be 3." gfs = bf.gauss |> collect |> deepcopy @assert length(conRatio) == length(gfs) @@ -661,7 +875,8 @@ function orbitalShift(bf::FloatingGTBasisFunc{S, GN, 1}; ijkShift::Vector{Int}, BasisFunc(bf.center, gfs, ijkOrbitalList[bf.ijk[1]] + ijkShift, normalizeGTO) end -orbitalShift(bf::FloatingGTBasisFunc{S, 1, 1}, shiftInfo::Vector{<:Real}; fixNorm::Bool=false) where {S} = +orbitalShift(bf::FloatingGTBasisFunc{S, 1, 1}, shiftInfo::Vector{<:Real}; + fixNorm::Bool=false) where {S} = orbitalShift(bf, ijkShift=shiftInfo[2:end].|>Int, conRatio=[shiftInfo[1]], fixNorm=fixNorm) @@ -694,7 +909,9 @@ inSymbols(vr::Num, pool::Vector{Symbol}=ParamNames) = inSymbols(vr.val, pool) function varVal(vr::SymbolicUtils.Sym, varDict::Dict{Num, <:Real}) res = recursivelyGet(varDict, vr |> Num) if res === nothing - res = recursivelyGet(varDict, symbolReplace(Symbolics.tosymbol(vr), NoDiffMark=>"") |> Symbolics.variable) + res = recursivelyGet(varDict, + symbolReplace(Symbolics.tosymbol(vr), + NoDiffMark=>"") |> Symbolics.variable) end if res === nothing str = Symbolics.tosymbol(vr) |> string @@ -704,7 +921,8 @@ function varVal(vr::SymbolicUtils.Sym, varDict::Dict{Num, <:Real}) var = front*NoDiffMark*str[pos:end] |> Symbol recursivelyGet(varDict, var |> Symbolics.variable) end - @assert res !== nothing "Can NOT find the value of $(vr)::$(typeof(vr)) in the given Dict $(varDict)." + @assert res !== nothing "Can NOT find the value of $(vr)::$(typeof(vr)) in the given "* + "Dict $(varDict)." res end @@ -735,7 +953,7 @@ function varVal(vr::SymbolicUtils.Term, varDict::Dict{Num, <:Real}) vr = vr.f.x if dvr isa SymbolicUtils.Term f = getFunc(dvr.f |> getFsym) - expr = f(dvr.arguments[]) # assumming AD propagates only through 1 var: f(g(x)). + expr = f(dvr.arguments[]) # assuming AD propagates only through 1 var: f(g(x)). else expr = dvr end diff --git a/src/FileIO.jl b/src/FileIO.jl index 6434c141..9f7f283a 100644 --- a/src/FileIO.jl +++ b/src/FileIO.jl @@ -5,6 +5,14 @@ const subscriptNum = Dict(['0'=>'₀', '1'=>'₁', '2'=>'₂', '3'=>'₃', '4' const superscriptSym = Dict(['+'=>'⁺', '-'=>'⁻', '('=>'⁽', ')'=>'⁾', '!'=>'ꜝ']) +""" + + checkFname(Fname::String; showWarning::Bool=true) -> String + +Check if there is a file with the same name in the current directory. If so, will add an +`"_N"` at the end of the file name `String`. `showWarning` determines whether prints out +the WARNING info when there is a file with the same name. +""" function checkFname(Fname::String; showWarning::Bool=true) FnameN = Fname while isfile(FnameN) == true diff --git a/src/HartreeFock.jl b/src/HartreeFock.jl index ecec959c..46d4245f 100644 --- a/src/HartreeFock.jl +++ b/src/HartreeFock.jl @@ -1,4 +1,4 @@ -export runHF, runHFcore, SCFconfig +export SCFconfig, runHF, runHFcore using LinearAlgebra: dot, Hermitian, \, det, I using PiecewiseQuadratics: indicator @@ -176,22 +176,70 @@ function initializeSCF(Hcore::Matrix{T1}, HeeI::Array{T2, 4}, end -struct SCFconfig{N} +const oneRowTableInSCFconfigDoc = "| `:DIIS`, `:EDIIS`, `:ADIIS` | Subspace size (>1); "* + "Coefficient solver(`:ADMM`-> ADMM solver,"* + " `:LCM` -> Lagrange solver) | "* + "`DIISsize::Int`; `solver::Symbol` | `15`; `:ADMM` |" + + +""" + + SCFconfig{N} <: ImmutableParameter{SCFconfig, Any} + +The `struct` for SCF iteration configurations. + +≡≡≡ Field(s) ≡≡≡ + +`methods::NTuple{N, Symbol}`: The applied methods. The available methods are their +configurations (in terms of keyword arguments): + +| Methods | Configuration(s) | keyword argument(s) | Default value(s) | +| :---- | :---: | :---: | ----: | +| `:DS` | Damping strength: [0,1] | `dampingStrength::Float64` | `0.0` | +$(Quiqbox.oneRowTableInSCFconfigDoc) + +`intervals`: The stopping (skipping) thresholds for the required methods. + +`methodConfigs`: The additional keywords arguments for each method stored as `Tuple`s of +`Pair`s. + +`oscillateThreshold`: The threshold for oscillating convergence. + +≡≡≡ Initialization Method(s) ≡≡≡ + + SCFconfig(methods::Vector{Symbol}, intervals::Vector{Float64}, + configs::Dict{Int, <:Vector{<:Pair}}=Dict(1=>Pair[]); + oscillateThreshold::Float64=1e-5) -> + SCFconfig{N} + +`methods` and `intervals` are the methods to be applied and their stopping (skipping) +thresholds respectively; the length of those two `Vector`s should be the same. `configs` +specifies the additional keyword arguments for each methods by a `Pair` of which the `Int` +key `i` is for `i`th method and the pointed `Vector{<:Pair}` is the pairs of keyword +arguments and their values respectively. + +≡≡≡ Example(s) ≡≡≡ + +julia> SCFconfig([:SD, :ADIIS, :DIIS], [1e-4, 1e-12, 1e-13], + Dict(2=>[:solver=>:LCM]) +SCFconfig{3}((:SD, :ADIIS, :DIIS), (0.0001, 1.0e-12, 1.0e-13), ((), (:solver => :LCM,), +()), 1.0e-5) +""" +struct SCFconfig{N} <: ImmutableParameter{SCFconfig, Any} methods::NTuple{N, Symbol} intervals::NTuple{N, Float64} - methodConfigs::NTuple{N, <:Vector{<:Pair}} + methodConfigs::NTuple{N, Tuple{Vararg{Pair}}} oscillateThreshold::Float64 function SCFconfig(methods::Vector{Symbol}, intervals::Vector{Float64}, - # configs::Dict{Int, <:Vector{<:Pair}}; printInfo=true) - configs::Dict{Int, <:Vector{<:Any}}=Dict(1=>[]); + configs::Dict{Int, <:Vector{<:Pair}}=Dict(1=>Pair[]); oscillateThreshold::Float64=1e-5) l = length(methods) kwPairs = [Pair[] for _=1:l] for i in keys(configs) kwPairs[i] = configs[i] end - new{length(methods)}(Tuple(methods), Tuple(intervals), Tuple(kwPairs), + new{length(methods)}(Tuple(methods), Tuple(intervals), Tuple(kwPairs .|> Tuple), oscillateThreshold) end end @@ -207,6 +255,33 @@ mutable struct HFinterrelatedVars <: HartreeFockintermediateData end +""" + HFtempVars{HFtype, N} <: HartreeFockintermediateData + +The container to store the intermediate values (only of the same spin configuration) for +each iteration during the Hartree-Fock SCF procedure. + +≡≡≡ Field(s) ≡≡≡ + +`Cs::Array{Array{T1, 2}, 1} where {$(TelLB)<:T1<:$(TelUB)}`: Coefficient matrices. + +`Fs::Array{Array{T2, 2}, 1} where {$(TelLB)<:T2<:$(TelUB)}`: Fock matrices + +`Ds::Array{Array{T3, 2}, 1} where {$(TelLB)<:T3<:$(TelUB)}`: Density matrices corresponding +to only spin configuration. For RHF each elements means (unconverged) 0.5*Dᵀ. + +`Es::Array{Float64, 1}`: Part of Hartree-Fock energy corresponding to only spin +configuration. For RHF each element means (unconverged) 0.5*E0HF. + +`shared.Dtots::Array{Array{T, 2}, 1} where {$(TelLB)<:T<:$(TelUB)}`: The total density +matrices. + +`shared.Etots::Array{Float64, 1}`: The total Hartree-Fock energy. + +**NOTE: For UHF, there are 2 `HFtempVars` being updated during the SCF iterations, and +change the field `shared.Dtots` or `shared.Etots` of one container will affect the other +one's.** +""" struct HFtempVars{HFtype, N} <: HartreeFockintermediateData Cs::Vector{Matrix{T1}} where {TelLB<:T1<:TelUB} Fs::Vector{Matrix{T2}} where {TelLB<:T2<:TelUB} @@ -225,8 +300,37 @@ struct HFtempVars{HFtype, N} <: HartreeFockintermediateData end +""" + + HFfinalVars{T, N, Nb} <: HartreeFockFinalValue{T} + +The container of the final values after a Hartree-Fock SCF procedure. + +≡≡≡ Field(s) ≡≡≡ + +`E0HF::Float64`: Hartree-Fock energy of the electronic Hamiltonian. + +`C::Union{Array{T1, 2}, NTuple{2, Array{T1, 2}}} where {$(TelLB)<:T1<:$(TelUB)}`: +Coefficient matrix(s) for one spin configuration. + +`F::Union{Array{T2, 2}, NTuple{2, Array{T2, 2}}} where {$(TelLB)<:T2<:$(TelUB)}`: Fock +matrix(s) for one spin configuration. + +`D::Union{Array{T3, 2}, NTuple{2, Array{T3, 2}}} where {$(TelLB)<:T3<:$(TelUB)}`: Density +matrix(s) for one spin configuration. + +`Emo::Union{Array{Float64, 1}, NTuple{2, Array{Float64, 1}}}`: Energies of molecular +orbitals. + +`occu::Union{Array{Int, 1}, NTuple{2, Array{Int, 1}}}`: occupation numbers of molecular +orbitals. + +`temp::Union{HFtempVars{T}, NTuple{2, HFtempVars{T}}}` the intermediate values. + +`isConverged::Bool`: Whether the SCF procedure is converged in the end. +""" struct HFfinalVars{T, N, Nb} <: HartreeFockFinalValue{T} - E0HF::Union{Float64, NTuple{2, Float64}} + E0HF::Float64 C::Union{Matrix{T1}, NTuple{2, Matrix{T1}}} where {TelLB<:T1<:TelUB} F::Union{Matrix{T2}, NTuple{2, Matrix{T2}}} where {TelLB<:T2<:TelUB} D::Union{Matrix{T3}, NTuple{2, Matrix{T3}}} where {TelLB<:T3<:TelUB} @@ -266,37 +370,77 @@ end const defaultSCFconfig = SCFconfig([:ADIIS, :DIIS, :ADIIS], [1e-4, 1e-6, 1e-10]) +""" + runHF(bs::Union{BasisSetData, Array{<:AbstractFloatingGTBasisFunc, 1}}, + nuc::Array{String, 1}, + nucCoords::Array{<:AbstractArray, 1}, + N::Union{NTuple{2, Int}, Int}=getCharge(nuc); + initialC::Union{Array{T, 2}, NTuple{2, Array{T, 2}}, Symbol}=:GWH, + HFtype::Symbol=:RHF, + scfConfig::SCFconfig=defaultSCFconfig, + earlyTermination::Bool=true, + printInfo::Bool=true, + maxSteps::Int=1000) where {$(TelLB)<:T<:$(TelUB)} -> HFfinalVars + +Main function to run Hartree-Fock in Quiqbox. + +=== Positional argument(s) === + +`bs::Union{BasisSetData, Array{<:AbstractFloatingGTBasisFunc, 1}}`: Basis set. + +`nuc::Array{String, 1}`: The element symbols of the nuclei for the Molecule. + +`nucCoords::Array{<:AbstractArray, 1}`: The coordinates of the nuclei. +`N::Union{NTuple{2, Int}, Int}`: The total number of electrons or the numbers of electrons +with different spins respectively. + +=== Keyword argument(s) === + +`initialC::Union{Array{T, 2}, NTuple{2, Array{T, 2}}, Symbol}`: Initial guess of the +coefficient matrix(s) C of the molecular orbitals. + +`HFtype::Symbol`: Hartree-Fock type. Available values are `:RHF` and `:UHF`. + +`scfConfig::SCFconfig`: SCF iteration configuration. + +`earlyTermination::Bool`: Whether automatically early terminate (skip) a convergence method +when its performance becomes unstable or poor. + +`printInfo::Bool`: Whether print out the information of each iteration step. + +`maxSteps::Int`: Maximum allowed iteration steps regardless of whether the SCF converges. +""" function runHF(bs::Vector{<:AbstractFloatingGTBasisFunc}, - mol::Vector{String}, - nucCoords::Vector{<:Vector{<:Real}}, - N::Int=getCharge(mol); + nuc::Vector{String}, + nucCoords::Vector{<:AbstractArray}, + N::Union{NTuple{2, Int}, Int}=getCharge(nuc); initialC::Union{Matrix{T}, NTuple{2, Matrix{T}}, Symbol}=:GWH, HFtype::Symbol=:RHF, scfConfig::SCFconfig=defaultSCFconfig, earlyTermination::Bool=true, printInfo::Bool=true, maxSteps::Int=1000) where {TelLB<:T<:TelUB} - @assert length(mol) == length(nucCoords) - @assert (basisSize(bs) |> sum) >= ceil(N/2) + @assert length(nuc) == length(nucCoords) + @assert (basisSize(bs) |> sum) >= ceil(sum(N)/2) gtb = GTBasis(bs) - runHF(gtb, mol, nucCoords, N; initialC, scfConfig, + runHF(gtb, nuc, nucCoords, N; initialC, scfConfig, HFtype, printInfo, maxSteps, earlyTermination) end function runHF(gtb::BasisSetData, - mol::Vector{String}, - nucCoords::Vector{<:Vector{<:Real}}, - N::Union{NTuple{2, Int}, Int}=getCharge(mol); + nuc::Vector{String}, + nucCoords::Vector{<:AbstractArray}, + N::Union{NTuple{2, Int}, Int}=getCharge(nuc); initialC::Union{Matrix{T}, NTuple{2, Matrix{T}}, Symbol}=:GWH, HFtype::Symbol=:RHF, scfConfig::SCFconfig=defaultSCFconfig, earlyTermination::Bool=true, printInfo::Bool=true, maxSteps::Int=1000) where {TelLB<:T<:TelUB} - @assert length(mol) == length(nucCoords) - @assert typeof(gtb).parameters[1] >= ceil(N/2) - Hcore = gtb.getHcore(mol, nucCoords) + @assert length(nuc) == length(nucCoords) + @assert typeof(gtb).parameters[1] >= ceil(sum(N)/2) + Hcore = gtb.getHcore(nuc, nucCoords) X = getX(gtb.S) initialC isa Symbol && (initialC = guessC(gtb.S, Hcore; X, method=initialC)) runHFcore(N, Hcore, gtb.eeI, gtb.S, X, initialC; @@ -304,6 +448,56 @@ function runHF(gtb::BasisSetData, end +""" + + runHFcore(N::Union{NTuple{2, Int}, Int}, + Hcore::Array{T1, 2}, + HeeI::Array{T2, 4}, + S::Array{T3, 2}, + X::Array{T4, 2}=getX(S), + C::Union{Array{T, 2}, NTuple{2, Array{T, 2}}, Symbol}=guessC(S, Hcore; X); + HFtype::Symbol=:RHF, + scfConfig::SCFconfig{L}, + earlyTermination::Bool=true, + printInfo::Bool=true, + maxSteps::Int=1000) where {$(TelLB)<:T1<:$(TelUB), + $(TelLB)<:T2<:$(TelUB), + $(TelLB)<:T3<:$(TelUB), + $(TelLB)<:T4<:$(TelUB), + $(TelLB)<:T5<:$(TelUB), L} + +The core function of `runHF`. + +=== Positional argument(s) === + +`N::Union{NTuple{2, Int}, Int}`: The total number of electrons or the numbers of electrons +with different spins respectively. + +`Hcore::Array{T1, 2}`: Core Hamiltonian of electronic Hamiltonian. + +`HeeI::Array{T2, 4}`: The electron-electron interaction Hamiltonian which includes both the +Coulomb interactions and the Exchange Correlations. + +`S::Array{T3, 2}`: Overlap matrix of the corresponding basis set. + +`X::Array{T4, 2}`: Orthogonal transformation matrix of S. Default value is S^(-0.5). + +`C::Union{Array{T, 2}, NTuple{2, Array{T, 2}}, Symbol}`: Initial guess of the +coefficient matrix(s) C of the molecular orbitals. + +=== Keyword argument(s) === + +`HFtype::Symbol`: Hartree-Fock type. Available values are `:RHF` and `:UHF`. + +`scfConfig::SCFconfig`: SCF iteration configuration. + +`earlyTermination::Bool`: Whether automatically early terminate (skip) a convergence method +when its performance becomes unstable or poor. + +`printInfo::Bool`: Whether print out the information of each iteration step. + +`maxSteps::Int`: Maximum allowed iteration steps regardless of whether the SCF converges. +""" function runHFcore(N::Union{NTuple{2, Int}, Int}, Hcore::Matrix{T1}, HeeI::Array{T2, 4}, @@ -340,7 +534,7 @@ function runHFcore(N::Union{NTuple{2, Int}, Int}, returnStd=true) flag && (isConverged = Std > scfConfig.oscillateThreshold ? false : true; break) earlyTermination && (Etots[end] - EtotMin) / abs(EtotMin) > 0.2 && - (printInfo && println("Early termination of method ", method, + (printInfo && println("Early termination of ", method, " due to the poor performance."); isConverged = false; break) end @@ -365,7 +559,7 @@ end function xDIIScore(method::Symbol, Nˢ::Int, Hcore::Matrix{T1}, HeeI::Array{T2, 4}, S::Matrix{T3}, X::Matrix{T4}, Fs::Vector{Matrix{T5}}, Ds::Vector{Matrix{T6}},Es::Vector{Float64}; - DIISsize::Int=15, solver=:default, + DIISsize::Int=15, solver::Symbol=:ADMM, _kws...) where {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB, TelLB<:T3<:TelUB, TelLB<:T4<:TelUB, TelLB<:T5<:TelUB, TelLB<:T6<:TelUB} @@ -432,8 +626,11 @@ const xDIIS = (method::Symbol) -> TelLB<:T3<:TelUB, TelLB<:T4<:TelUB}) -> xDIIScore(method, Nˢ, Hcore, HeeI, S, X, tVars.Fs, tVars.Ds, tVars.Es; kws...) -const SCFmethods = Dict( [:SD, :DIIS, :ADIIS, :EDIIS] .=> - [ SD, xDIIS(:DIIS), xDIIS(:ADIIS), xDIIS(:EDIIS)]) + +const SCFmethods = [:SD, :DIIS, :ADIIS, :EDIIS] + +const SCFmethodSelector = Dict(SCFmethods .=> + [SD, xDIIS(:DIIS), xDIIS(:ADIIS), xDIIS(:EDIIS)]) function HF!(SCFmethod::Symbol, N::Union{NTuple{2, Int}, Int}, @@ -449,7 +646,7 @@ function HFcore(SCFmethod::Symbol, N::Int, Hcore::Matrix{T1}, HeeI::Array{T2, 4}, S::Matrix{T3}, X::Matrix{T4}, rVars::HFtempVars{:RHF}; kws...) where {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB, TelLB<:T3<:TelUB, TelLB<:T4<:TelUB} - D = SCFmethods[SCFmethod](N÷2, Hcore, HeeI, S, X, rVars; kws...) + D = SCFmethodSelector[SCFmethod](N÷2, Hcore, HeeI, S, X, rVars; kws...) partRes = getCFDE(Hcore, HeeI, X, D) partRes..., 2D, 2partRes[end] end @@ -472,7 +669,7 @@ function HFcore(SCFmethod::Symbol, Ns::NTuple{2, Int}, Hcore::Matrix{T1}, HeeI::Array{T2, 4}, S::Matrix{T3}, X::Matrix{T4}, uVars::NTuple{2, HFtempVars{:UHF}}; kws...) where {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB, TelLB<:T3<:TelUB, TelLB<:T4<:TelUB} - Ds = SCFmethods[SCFmethod].(Ns, Ref(Hcore), Ref(HeeI), + Ds = SCFmethodSelector[SCFmethod].(Ns, Ref(Hcore), Ref(HeeI), Ref(S), Ref(X), uVars; kws...) Dᵀnew = Ds |> sum partRes = getCFDE.(Ref(Hcore), Ref(HeeI), Ref(X), Ds, Ref(Dᵀnew)) @@ -556,9 +753,9 @@ function CMSolver(vec::Vector, B::Matrix; convexConstraint=true, ϵ::Float64=1e- end -const ConstraintSolvers = Dict(:default=>ADMMSolver, :Direct=>CMSolver) +const ConstraintSolvers = Dict(:ADMM=>ADMMSolver, :LCM=>CMSolver) constraintSolver(vec::Vector{T1}, B::Matrix{T2}, - solver::Symbol=:default; convexConstraint::Bool=true) where + solver::Symbol=:ADMM; convexConstraint::Bool=true) where {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB} = ConstraintSolvers[solver](vec, B; convexConstraint) \ No newline at end of file diff --git a/src/Molecule.jl b/src/Molecule.jl index 4c374d95..523f758b 100644 --- a/src/Molecule.jl +++ b/src/Molecule.jl @@ -2,6 +2,32 @@ export MolOrbital, getMolOrbitals, Molecule, nnRepulsions using LinearAlgebra: norm +""" + + MolOrbital{N} <: AbstractMolOrbital + +`Struct` of molecular orbitals. + +≡≡≡ Field(s) ≡≡≡ + +`symmetry::String`: The symmetry of the orbital. The default value is "A" for being +antisymmetric. + +`energy::Float64`: Molecular energy. + +`spin::String`: Spin function of the orbital. Available values: "Alpha", "Beta". + +`occupancy::Real`: Occupation number. + +`orbitalCoeffs::NTuple{N, Float64}`: coefficients of the basis functions to form the +molecular orbital. + +≡≡≡ Initialization Method(s) ≡≡≡ + + MolOrbital(energy::Float64, occupancy::Real, orbitalCoeffs::Array{Float64, 1}, + spin::String="Alpha", symmetry::String="A") -> MolOrbital{N} + +""" struct MolOrbital{N} <: AbstractMolOrbital symmetry::String energy::Float64 @@ -11,22 +37,67 @@ struct MolOrbital{N} <: AbstractMolOrbital function MolOrbital(energy::Float64, occupancy::Real, orbitalCoeffs::Vector{Float64}, spin::String="Alpha", symmetry::String="A") - spin != "Alpha" && spin != "Beta" && error("Keyword arguement \"spin\" can only"* + spin != "Alpha" && spin != "Beta" && error("Keyword argument \"spin\" can only"* " be \"Alpha\" or \"Beta\"") new{length(orbitalCoeffs)}(symmetry, energy, spin, occupancy, orbitalCoeffs|>Tuple) end end -function getMolOrbitals(ens::Vector{Float64}, - occus::Vector{<:Real}, - C::Matrix{Float64}, - spins::Vector{String}=repeat(["Alpha"], length(occus)), +""" + + getMolOrbitals(ens::Array{Float64, 1}, occus::Array{<:Real, 1}, C::Matrix{Float64}, + spins::Array{String, 1}, + symms::Array{String, 1}=repeat(["A"], length(occus))) -> + Tuple{Vararg{getMolOrbitals}} + +A function that returns the molecular orbitals. +""" +function getMolOrbitals(ens::Vector{Float64}, occus::Vector{<:Real}, C::Matrix{Float64}, + spins::Vector{String}, symms::Vector{String}=repeat(["A"], length(occus))) MolOrbital.(ens, occus, [ C[:,i] for i = 1:size(C, 2) ], spins, symms) |> Tuple end +""" + + Molecule{Nc, Ne, Nb} <:MolecularHartreeFockCoefficient{Nc, Ne} + +Container for the information of a molecule. + +≡≡≡ Field(s) ≡≡≡ + +`nuc::Tuple{Vararg{String}}`: Nuclei of the molecule. + +`nucCoords::Tuple{Vararg{NTuple{3, Real}}}`: The coordinates of the nuclei. + +`Ne::Int`: The number of electrons. + +`orbital::Tuple{Vararg{MolOrbital}}`: Molecular orbitals. + +`basis::Tuple{Vararg{FloatingGTBasisFunc}}`: The basis set for the molecular orbitals. + +`E0HF::Float64`: Hartree-Fock energy of the electronic Hamiltonian from the basis set. + +`EnnR::Float64`: The nuclear-nuclear repulsion energy. + +≡≡≡ Initialization Method(s) ≡≡≡ + + Molecule(basis::Array{FloatingGTBasisFunc, 1}, nuc::Array{String, 1}, + nucCoords::Array{<:AbstractArray, 1}, Ne::Int, E0HF::Float64, + Emos::Array{Float64, 1}, occus::Array{<:Real, 1}, C::Array{Float64, 2}, + spins::Array{String, 1}, + symms::Array{String, 1}=repeat(["A"], length(occus))) -> + Molecule{Nc, Ne, Nb} + +`Emos` are the energies of corresponding molecular energies. `occus` are the occupation +numbers of the orbitals. `C` is the coefficient matrix, which does not need to be a square +matrix since the number of rows is the size of the (spatial) basis set whereas the number +of the columns represents the number of molecular orbitals. `spin` specifies the spin +functions of the orbitals, entries of which can be set to "Alpha" or "Beta". `symms` are +symmetries of the orbitals where the default entry value is "A" for being antisymmetric. +""" struct Molecule{Nc, Ne, Nb} <:MolecularHartreeFockCoefficient{Nc, Ne} nuc::Tuple{Vararg{String}} nucCoords::Tuple{Vararg{NTuple{3, Real}}} @@ -36,7 +107,11 @@ struct Molecule{Nc, Ne, Nb} <:MolecularHartreeFockCoefficient{Nc, Ne} E0HF::Float64 EnnR::Float64 - function Molecule(basis, nuc, nucCoords, Ne, E0HF, Emos, occus, C, spins, symms) + function Molecule(basis::Vector{<:FloatingGTBasisFunc}, nuc::Vector{String}, + nucCoords::Vector{<:AbstractArray}, Ne::Int, E0HF::Float64, + Emos::Vector{Float64}, occus::Vector{<:Real}, C::Matrix{Float64}, + spins::Vector{String}, + symms::Vector{String}=repeat(["A"], length(occus))) @assert length(nuc) == length(nucCoords) Nb = basisSize(basis) |> sum coeff = spins |> unique |> length @@ -54,8 +129,16 @@ struct Molecule{Nc, Ne, Nb} <:MolecularHartreeFockCoefficient{Nc, Ne} end end +""" -function Molecule(basis, nuc, nucCoords, HFfVars) + Molecule(basis::Array{<:FloatingGTBasisFunc, 1}, nuc::Array{String, 1}, + nucCoords::Array{<:AbstractArray, 1}, HFfVars::HFfinalVars) -> Molecule + +Construct a `Molecule` from a basis set, nuclei information, and the result from the +corresponding Hartree-Fock SCF procedure, specifically a `HFfinalVars` `struct`. +""" +function Molecule(basis::Vector{<:FloatingGTBasisFunc}, nuc::Vector{String}, + nucCoords::Vector{<:AbstractArray}, HFfVars::HFfinalVars) t = typeof(HFfVars) len = t.parameters[3] if t <: HFfinalVars{:UHF} @@ -74,8 +157,15 @@ function Molecule(basis, nuc, nucCoords, HFfVars) end -function nnRepulsions(nuc, nucCoords) - E = 0 +""" + + nnRepulsions(nuc::Array{String, 1}, nucCoords::Array{<:AbstractArray, 1}) -> Float64 + +Calculate the nuclear-nuclear repulsion energy given the nuclei and their coordinates of a +molecule. +""" +function nnRepulsions(nuc::Vector{String}, nucCoords::Vector{<:AbstractArray}) + E = 0.0 len = length(nuc) for i = 1:len, j=i+1:len E += getCharge(nuc[i]) * getCharge(nuc[j]) / norm(nucCoords[i] - nucCoords[j]) diff --git a/src/Overload.jl b/src/Overload.jl index a50d7aa7..0f58a0d0 100644 --- a/src/Overload.jl +++ b/src/Overload.jl @@ -101,9 +101,9 @@ getindex(m::ParamBox) = m.data[] setindex!(a::ParamBox, b) = begin a.data[] = b end -# Quiqboc methods overload. +# Quiqbox methods overload. ## Method overload of `hasBoolRelation` from Tools.jl. -## If `ignoreContainerType = true`, then `ignoreFunction` is automitically set to be `true` +## If `ignoreContainerType = true`, then `ignoreFunction` is automatically set to be `true` ## as the `map` function for `ParamBox` is considered as a type of container for the actual ## stored data. function hasBoolRelation(boolFunc::F, pb1::ParamBox, pb2::ParamBox; diff --git a/src/SubModule/Molden.jl b/src/SubModule/Molden.jl index 4dd308e5..a5620121 100644 --- a/src/SubModule/Molden.jl +++ b/src/SubModule/Molden.jl @@ -2,8 +2,17 @@ module Molden export makeMoldenFile -import ..Quiqbox: Molecule, checkFname, AtomicNumberList, genBasisFuncText, centerOf, flatten, alignSignedNum +import ..Quiqbox: Molecule, checkFname, AtomicNumberList, genBasisFuncText, centerOf, + flatten, alignSignedNum +""" + + makeMoldenFile(mol::Molecule; recordUMO::Bool=false, fileName::String = "MO") -> String + +Write the information of input `Molecule` into a **Molden** file. `recordUMO` determines +whether to include the unoccupied molecular orbitals. `fileName` specifies the name of the +file, which is also the returned value. +""" function makeMoldenFile(mol::Molecule; recordUMO::Bool=false, fileName::String = "MO") nucCoords = mol.nucCoords basis = [mol.basis...] @@ -33,21 +42,24 @@ function makeMoldenFile(mol::Molecule; recordUMO::Bool=false, fileName::String = cv = round.(coord, sigdigits=15) iNucPoint += 1 text *= rpad("$(n)", 5) * rpad(iNucPoint, 5) * rpad("$(AtomicNumberList[n])", 4)* - rpad(cv[1]|>alignSignedNum, 20) * rpad(cv[2]|>alignSignedNum, 20) * rpad(cv[3]|>alignSignedNum, 20)*"\n" + rpad(cv[1]|>alignSignedNum, 20) * rpad(cv[2]|>alignSignedNum, 20) * + rpad(cv[3]|>alignSignedNum, 20)*"\n" end text *= "\n[GTO]" for (i, gs) in zip(1:length(gCoeffs), gCoeffs) text *= "\n$i 0\n" * gs end text *= "\n[MO]\n" - recordUMO ? (l = length(MOs)) : (l = findfirst(isequal(0), [x.occupancy for x in MOs]) - 1) + recordUMO ? (l = length(MOs)) : (l = findfirst(isequal(0), + [x.occupancy for x in MOs]) - 1) for i = 1:l text *= "Sym= $(MOs[i].symmetry)\n" text *= "Ene= "*alignSignedNum(MOs[i].energy)*"\n" text *= "Spin= $(MOs[i].spin)\n" text *= "Occup= $(MOs[i].occupancy)\n" MOcoeffs = MOs[i].orbitalCoeffs - text *= join([rpad(" $j", 9)*alignSignedNum(c)*"\n" for (j,c) in zip(1:length(MOcoeffs), MOcoeffs)]) + text *= join([rpad(" $j", 9)*alignSignedNum(c)* + "\n" for (j,c) in zip(1:length(MOcoeffs), MOcoeffs)]) end fn = fileName*".molden" |> checkFname diff --git a/src/Tools.jl b/src/Tools.jl index c908f177..74849a92 100644 --- a/src/Tools.jl +++ b/src/Tools.jl @@ -5,7 +5,7 @@ using Symbolics using LinearAlgebra: eigvals, svdvals, eigen -# Function for submudole loading and integrity checking. +# Function for submodule loading and integrity checking. function tryIncluding(subModuleName::String; subModulePath=(@__DIR__)[:]*"/SubModule") try include(subModulePath*"/"*subModuleName*".jl") @@ -36,23 +36,23 @@ information. ≡≡≡ Example(s) ≡≡≡ -```jldoctest -julia> @compareLength [1,2] [3,4] +``` +julia> Quiqbox.@compareLength [1,2] [3,4] 2 julia> let a = [1,2], b = [3] - @compareLength a b + Quiqbox.@compareLength a b end ERROR: The lengths of a and b are NOT equal. a::Vector{Int64} length: 2 b::Vector{Int64} length: 1 -julia> @compareLength [1,2] [3] "a" +julia> Quiqbox.@compareLength [1,2] [3] "a" ERROR: The lengths of a ([1, 2]) and [3] are NOT equal. a ([1, 2])::Vector{Int64} length: 2 [3]::Vector{Int64} length: 1 -julia> @compareLength [1,2] [3] "a" "b" +julia> Quiqbox.@compareLength [1,2] [3] "a" "b" ERROR: The lengths of a ([1, 2]) and b ([3]) are NOT equal. a ([1, 2])::Vector{Int64} length: 2 b ([3])::Vector{Int64} length: 1 @@ -70,7 +70,7 @@ macro compareLength(inputArg1, inputArg2, argNames...) "Arrays or Tuples!\n") if length(arg1) != length(arg2) for i = 1:length($argNames) - # Replace the defualt type control ERROR message. + # Replace the default type control ERROR message. !($argNames[i] isa String) && error("The object's name has to be a "* "`String`!\n") $ns[i] = $argNames[i]*" ($($ns0[i]))" @@ -97,7 +97,7 @@ performed return `true`. If `ignoreFunction = true`, the function will ignore comparisons between Function-type fields. -If `ignoreContainerType = true`, the funtion will ignore the type difference of the +If `ignoreContainerType = true`, the function will ignore the type difference of the (outermost) container as long as the boolean operator returns true for inside fields. @@ -238,13 +238,13 @@ end hasEqual(obj1, obj2, obj3...; ignoreFunction=false, ignoreContainerType=false) -> Bool -Compare if two objects are the euqal. +Compare if two objects are the equal. If `ignoreFunction = true` then the function will pop up a warning message when a field is a function. -If `ignoreContainerType = true` then the funtion will ignore the type difference of the -(outermost) container as long as the inside fields are euqal. +If `ignoreContainerType = true` then the function will ignore the type difference of the +(outermost) container as long as the inside fields are equal. This function is an instantiation of `hasBoolRelation`. @@ -283,7 +283,7 @@ Compare if two objects are the Identical. An instantiation of `hasBoolRelation`. If `ignoreFunction = true` then the function will pop up a warning message when a field is a function. -If `ignoreContainerType = true` then the funtion will ignore the type difference of the +If `ignoreContainerType = true` then the function will ignore the type difference of the (outermost) container as long as the inside fields are identical. This function is an instantiation of `hasBoolRelation`. @@ -323,7 +323,7 @@ Print info with colorful title and automatically highlighted code blocks enclose If you want to highlight other contents in different colors, you can also put them inside ` ` and start it with "///theColorSymbolName///". The available color names follows the -values of `color` keyword arguement in function `printstyled`. +values of `color` keyword argument in function `printstyled`. NOTE: There can only be one color in one ` ` quote. @@ -447,7 +447,7 @@ Create a `ArrayPointer` that contains a `Ptr` pointing to the actual memory addr To avoid memory leaking, the user should use `free(x.ptr)` after the usage of `x::ArrayPointer` to free the occupied memory. -If `showReminder=true`, the constuctor will pop up a message to remind the user of +If `showReminder=true`, the constructor will pop up a message to remind the user of such operation. """ struct ArrayPointer{T, N} <: Any @@ -477,7 +477,7 @@ Return a `markingList` using `Int` number to mark each different elements from (and inside) the input argument(s) and a `uniqueList` to contain all the unique elements when `compareFunction` is set to `hasEqual` (in default). -`args` and `kws` are positional arguments and keywords argguments respectively as +`args` and `kws` are positional arguments and keywords arguments respectively as parameters of the specified `compareFunction`. ≡≡≡ Example(s) ≡≡≡ From 83ce5de74439426ac8c479f2662b8a2386774b1a Mon Sep 17 00:00:00 2001 From: frankwswang Date: Wed, 1 Sep 2021 04:58:55 -0400 Subject: [PATCH 16/33] Updated tests. --- test/unit-tests/Basis-test.jl | 8 ++++--- test/unit-tests/Box-test.jl | 17 +++++++++----- test/unit-tests/HartreeFock-test.jl | 18 +++++++-------- test/unit-tests/Integration/OneBody-test.jl | 25 +++++++++++++-------- test/unit-tests/Integration/TwoBody-test.jl | 5 +++-- test/unit-tests/Optimization-test.jl | 12 +++++----- test/unit-tests/Overload-test.jl | 4 ++-- test/unit-tests/SubModule/Molden-test.jl | 4 ++-- 8 files changed, 55 insertions(+), 38 deletions(-) diff --git a/test/unit-tests/Basis-test.jl b/test/unit-tests/Basis-test.jl index 5a2f3f69..fdd446f1 100644 --- a/test/unit-tests/Basis-test.jl +++ b/test/unit-tests/Basis-test.jl @@ -82,6 +82,7 @@ bf4 = genBasisFunc([0,0,0], (2,1), [1,0,0]) # struct BasisFuncMix +using Quiqbox: BasisFuncMix bfm1 = BasisFuncMix(bf1) @test bfm1 == BasisFuncMix([bf1]) @test BasisFuncMix(BasisFuncMix(bf3_1)) == BasisFuncMix(bf3_1) @@ -206,7 +207,8 @@ errT = 1e-10 @test isapprox(varVal(vars[1]^vars[2], d1), vals[1]^vals[2], atol=errT) @test isapprox(varVal(expr, d1), f1(vals...), atol=errT) -gb1 = GridBox(1,3.0) +sp = 1.5 +gb1 = GridBox(1,sp) d2 = getVars(gb1.box |> flatten, includeMapping=true) l = Symbolics.variable(:L,0) vars2 = [i.val for i in keys(d2)] @@ -214,9 +216,9 @@ diffs2 = Differential(l).(vars2) exprs2 = map(x -> (x isa SymbolicUtils.Term) ? d2[x] : x, vars2) diffExprs2 = Symbolics.derivative.(exprs2, Ref(l)) excs2 = Symbolics.build_function.(exprs2, l) .|> eval -vals2 = [f(3.0) for f in excs2] +vals2 = [f(sp) for f in excs2] excdiffs2 = Symbolics.build_function.(diffExprs2, l) .|> eval -diffvals2 = [f(3.0) for f in excdiffs2] +diffvals2 = [f(sp) for f in excdiffs2] @test varVal.(vars2, Ref(d2)) == vals2 @test varVal.(diffs2, Ref(d2)) == diffvals2 diff --git a/test/unit-tests/Box-test.jl b/test/unit-tests/Box-test.jl index 946cc4cc..e011f91d 100644 --- a/test/unit-tests/Box-test.jl +++ b/test/unit-tests/Box-test.jl @@ -2,15 +2,22 @@ using Test using Quiqbox @testset "Tools.jl" begin - points = [[-2.5, -2.5, -2.5], [-2.5, -2.5, 2.5], [-2.5, 2.5, -2.5], [-2.5, 2.5, 2.5], - [2.5, -2.5, -2.5], [2.5, -2.5, 2.5], [2.5, 2.5, -2.5], [2.5, 2.5, 2.5]] + points = [[-3.0, -3.0, -3.0], [-3.0, -3.0, 0.0], [-3.0, -3.0, 3.0], + [-3.0, 0.0, -3.0], [-3.0, 0.0, 0.0], [-3.0, 0.0, 3.0], + [-3.0, 3.0, -3.0], [-3.0, 3.0, 0.0], [-3.0, 3.0, 3.0], + [ 0.0, -3.0, -3.0], [ 0.0, -3.0, 0.0], [ 0.0, -3.0, 3.0], + [ 0.0, 0.0, -3.0], [ 0.0, 0.0, 0.0], [ 0.0, 0.0, 3.0], + [ 0.0, 3.0, -3.0], [ 0.0, 3.0, 0.0], [ 0.0, 3.0, 3.0], + [ 3.0, -3.0, -3.0], [ 3.0, -3.0, 0.0], [ 3.0, -3.0, 3.0], + [ 3.0, 0.0, -3.0], [ 3.0, 0.0, 0.0], [ 3.0, 0.0, 3.0], + [ 3.0, 3.0, -3.0], [ 3.0, 3.0, 0.0], [ 3.0, 3.0, 3.0]] num = length(points) - grid = GridBox(1, 5.0) + grid = GridBox(2, 3.0) - @test hasEqual(grid, GridBox((1,1,1), 5.0)) + @test hasEqual(grid, GridBox((2,2,2), 3.0)) @test grid.num == num - @test grid.len == 5.0 + @test grid.spacing == 3.0 @test grid.coord == points @test map(i-> [j() for j in i], grid.box) == points diff --git a/test/unit-tests/HartreeFock-test.jl b/test/unit-tests/HartreeFock-test.jl index 28cce057..8530952f 100644 --- a/test/unit-tests/HartreeFock-test.jl +++ b/test/unit-tests/HartreeFock-test.jl @@ -9,20 +9,20 @@ using Suppressor: @suppress_out nucCoords = [[-0.7,0.0,0.0], [0.7,0.0,0.0], [0.0, 0.0, 0.0]] mol = ["H", "H", "O"] bs = genBasisFunc.(nucCoords, ("STO-3G", "STO-3G", ("STO-3G", "O"))) |> flatten - S = dropdims(overlaps(bs), dims=3) + S = overlaps(bs) local res1, res2 @suppress_out begin res1 = runHF(bs, mol, nucCoords; HFtype=:RHF, initialC=:Hcore, - scfConfig=Quiqbox.SCFconfig([:ADIIS, :DIIS, :EDIIS, :SD], - [1e-4, 1e-8, 1e-10, 1e-12])) + scfConfig=SCFconfig([:ADIIS, :DIIS, :EDIIS, :SD], + [1e-4, 1e-8, 1e-10, 1e-12])) res2 = runHF(bs, mol, nucCoords; HFtype=:UHF, - scfConfig=Quiqbox.SCFconfig([:ADIIS, :DIIS, :EDIIS, :SD], - [1e-4, 1e-8, 1e-10, 1e-12], - Dict(1=>[:solver=>:Direct], - 2=>[:solver=>:Direct], - 3=>[:solver=>:Direct], - 4=>[:solver=>:Direct]))) + scfConfig=SCFconfig([:ADIIS, :DIIS, :EDIIS, :SD], + [1e-4, 1e-8, 1e-10, 1e-12], + Dict(1=>[:solver=>:LCM], + 2=>[:solver=>:LCM], + 3=>[:solver=>:LCM], + 4=>[:solver=>:LCM]))) end @test isapprox(res1.E0HF, -93.7878386326277, atol=errorThreshold) diff --git a/test/unit-tests/Integration/OneBody-test.jl b/test/unit-tests/Integration/OneBody-test.jl index 957c06fc..2f302eb0 100644 --- a/test/unit-tests/Integration/OneBody-test.jl +++ b/test/unit-tests/Integration/OneBody-test.jl @@ -2,7 +2,8 @@ using Test using Quiqbox @testset "OneBody.jl tests" begin - errT = 1e-10 + errT1 = 1e-10 + errT2 = 1e-10 nucs = fill("H", 2) cens = [[-0.7, 0.0, 0.0], [ 0.7, 0.0, 0.0]] bf1 = genBasisFunc(cens[1], ("STO-3G", "H"))[] @@ -10,17 +11,23 @@ using Quiqbox bs = [bf1, bf2] S = [1.0 0.6593182058508896; 0.6593182058508896 1.0] - @test isapprox(overlap(bf1, bf1), ones(1,1,1), atol=errT) - @test isapprox(overlap(bf1, bf2), S[2]*ones(1,1,1), atol=errT) - @test isapprox(overlaps(bs), cat(S; dims = ndims(S) + 1)) + @test isapprox(overlap(bf1, bf1), ones(1,1), atol=errT1) + @test isapprox(overlap(bf1, bf2), S[2]*ones(1,1), atol=errT1) + @test isapprox(overlaps(bs), S) V = [-1.8804408905227634 -1.1948346220535715; -1.1948346220535715 -1.8804408905227632] - @test isapprox(nucAttraction(bf1, bf2, nucs, cens), V[2]*ones(1,1,1), atol=errT) - @test isapprox(nucAttractions(bs, nucs, cens), cat(V; dims = ndims(V) + 1), atol=errT) + @test isapprox(nucAttraction(bf1, bf2, nucs, cens), V[2]*ones(1,1), atol=errT1) + @test isapprox(nucAttractions(bs, nucs, cens), V, atol=errT1) T = [0.7600318799755844 0.23645465829079276; 0.23645465829079276 0.7600318799755844] - @test isapprox(elecKinetic(bf1, bf2), T[2]*ones(1,1,1), atol=errT) - @test isapprox(elecKinetics(bs), cat(T; dims = ndims(T) + 1)) + @test isapprox(elecKinetic(bf1, bf2), T[2]*ones(1,1,1), atol=errT1) + @test isapprox(elecKinetics(bs), T) - @test isapprox(coreH(bs, nucs, cens), cat(T+V; dims = ndims(V) + 1), atol=errT) + Hc = coreH(bs, nucs, cens) + @test isapprox(Hc, T+V, atol=errT1) + @test isapprox(coreHij(bf1, bf1, nucs, cens)[], Hc[1], atol=errT2) + @test isapprox(coreHij(bf2, bf1, nucs, cens)[], + coreHij(bf1, bf2, nucs, cens)[], atol=errT2) + @test isapprox(coreHij(bf2, bf1, nucs, cens)[], Hc[3], atol=errT2) + @test isapprox(coreHij(bf2, bf2, nucs, cens)[], Hc[4], atol=errT2) end \ No newline at end of file diff --git a/test/unit-tests/Integration/TwoBody-test.jl b/test/unit-tests/Integration/TwoBody-test.jl index 983ccd87..4394c49d 100644 --- a/test/unit-tests/Integration/TwoBody-test.jl +++ b/test/unit-tests/Integration/TwoBody-test.jl @@ -77,7 +77,8 @@ using Quiqbox randVal = eeI[randIdx...,1] * ones(1,1,1,1,1) @test isapprox(eeInteraction(bs[randIdx]...), randVal, atol=errT) - eeI1, uniqueIdx1 = eeInteractions(bs, outputUniqueIndices=true) + eeI1, uniqueIdx1 = Quiqbox.eeInteractionsCore(bs, outputUniqueIndices=true) + isapprox(eeInteractions(bs), eeI1[:,:,:,:,1], atol=1e-15) @test isapprox(eeI1, eeI, atol=errT) uniqueInts1 = [eeI1[i...] for i in uniqueIdx1] @test unique(eeI1) ⊆ uniqueInts1 @@ -87,7 +88,7 @@ using Quiqbox for l = 1:(k==i ? j : k)]), sort(uniqueInts1), atol=errT) - eeI2, uniqueIdx2 = eeInteractions(bs[[1,3,2,4]], outputUniqueIndices=true) + eeI2, uniqueIdx2 = Quiqbox.eeInteractionsCore(bs[[1,3,2,4]], outputUniqueIndices=true) uniqueInts2 = [eeI2[i...] for i in uniqueIdx2] @test isapprox(sort(uniqueInts1), sort(uniqueInts2), atol=errT) end \ No newline at end of file diff --git a/test/unit-tests/Optimization-test.jl b/test/unit-tests/Optimization-test.jl index 00b0cb58..fa84a132 100644 --- a/test/unit-tests/Optimization-test.jl +++ b/test/unit-tests/Optimization-test.jl @@ -13,7 +13,7 @@ bfSource1 = genBasisFunc(missing, ("STO-2G", "H"))[] gfs1 = [bfSource1.gauss...] cens = gridPoint.(nucCoords) bs1 = genBasisFunc.(cens, Ref(gfs1)) -pars1 = uniqueParams!(bs1, ignoreMapping=true) +pars1 = uniqueParams!(bs1, filterMapping=true) local Es1L, pars1L, grads1L @suppress_out begin @@ -34,20 +34,20 @@ grad_t1 = [-0.12518827510873726, 0.017527948869488608, -0.10779722877906275, # Grid-based basis set -grid = GridBox(1, 3.0) +grid = GridBox(1, 1.5) gf2 = GaussFunc(0.7,1) bs2 = genBasisFunc.(grid.box, Ref([gf2])) -pars2 = uniqueParams!(bs2, ignoreMapping=true)[[1,3]] +pars2 = uniqueParams!(bs2, filterMapping=true)[[1,3]] local Es2L, pars2L, grads2L @suppress_out begin Es2L, pars2L, grads2L = optimizeParams!(bs2, pars2, mol, nucCoords, maxSteps = 200) end -E_t2 = -1.1804180821543429 -par_t2 = [ 0.17922884951410853, 2.853700041948111] -grad_t2 = [-0.05218995522865333, 0.490154922874182] +E_t2 = -1.6227282934931644 +par_t2 = [0.49801096561597613, 1.408314680969665] +grad_t2 = [0.4557364086913408, 0.32317362845855635] @test isapprox(Es2L[end], E_t2, atol=errorThreshold) @test isapprox(pars2L[end, :], par_t2, atol=errorThreshold) diff --git a/test/unit-tests/Overload-test.jl b/test/unit-tests/Overload-test.jl index bff73d3a..13f16241 100644 --- a/test/unit-tests/Overload-test.jl +++ b/test/unit-tests/Overload-test.jl @@ -34,14 +34,14 @@ using Suppressor: @capture_out @test (@capture_out show(bfs2)) == string(typeof(bfs2))*"(gauss, subshell, center)"* "[X²Y⁰Z⁰]"*"[0.0, 0.0, 0.0]" - bfm1 = BasisFuncMix([bf1, bf2]) + bfm1 = Quiqbox.BasisFuncMix([bf1, bf2]) @test (@capture_out show(bfm1)) == string(typeof(bfm1))*"(BasisFunc, param)" GTb1 = GTBasis([bf1, bfs2]) @test (@capture_out show(GTb1)) == string(typeof(GTb1))*"(basis, S, Te, eeI, getVne, "* "getHcore)" - box1 = GridBox(2, 3.5) + box1 = GridBox(2, 1.5) @test (@capture_out show(box1)) == string(typeof(box1))*"(num, len, coord)" fVar1 = runHF(GTb1, ["H", "H"], [[0, 0, 0], [1,2,1]], printInfo=false, initialC=:Hcore) diff --git a/test/unit-tests/SubModule/Molden-test.jl b/test/unit-tests/SubModule/Molden-test.jl index 24bac43d..5f80dc25 100644 --- a/test/unit-tests/SubModule/Molden-test.jl +++ b/test/unit-tests/SubModule/Molden-test.jl @@ -24,11 +24,11 @@ molCoords = [ [0.8068, -0.4658, -0.2592], [-0.8068, -0.4658, -0.2592]] ] ./ br -bfCoords = [molCoords..., GridBox(1, 2.4).coord] +bfCoords = [molCoords..., GridBox(1, 1.2).coord] bfs = ["STO-3G", "STO-2G"] bsNames = push!(("-" .*molNames), "-Grid") HFtypes = [:RHF, :UHF] -prefix = "Exmaple" +prefix = "Example" for (nuc, nucCoords, molName, iMol) in zip(mols, molCoords, molNames, 1:length(mols)), (bfCoord, bsName) in zip(bfCoords[iMol:end], bsNames[iMol:end]), HFtype in HFtypes, From 562b6b5699ecaf4c4c2b177b796089d06f30de15 Mon Sep 17 00:00:00 2001 From: frankwswang Date: Wed, 1 Sep 2021 05:14:59 -0400 Subject: [PATCH 17/33] Updated README. --- README.md | 92 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 79 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index e04729f9..89f8a5d6 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,92 @@ -# Quiqbox.jl +

+ +

+**Quiqbox** is a quantum chemistry and quantum computing software package that starts off around Gaussian basis set optimization of molecular electronic-structure problems. Quiqbox is written in pure [Julia](https://julialang.org/). +| Documentation | License | Code Status | +| :--- | :---: | ---: | +| [![][Doc-s-img]][Doc-stable]
[![][Doc-l-img]][Doc-latest] | [![License: MIT][License-img]][License-url] | [![CI][GA-CI-img]][GA-CI-url]
[![codecov][codecov-img]][codecov-url] | -[![CI][GA-CI-img]][GA-CI-url] -[![codecov][codecov-img]][codecov-url] -[![License: MIT][License-img]][License-url] - -A Julia software package that aims for floating Gaussian-type orbital (GTO) optimization in electronic structure problems. +
# Features -* Floating or fixed-basis GTO configuration. -* Symbolic representation of basis functions. -* Restricted closed-shell Hartree–Fock method (RHF). -* Unrestricted open-shell Hartree–Fock method (UHF). -* Molecular orbital data output in [Molden](https://www3.cmbi.umcn.nl/molden/) file format. +* Floating and fixed-basis Gaussian-type orbital (GTO) configurations. +* Symbolic representation and analysis of basis function parameters. * Standalone 1-electron and 2-electron integral functions (powered by [libcint_jll](https://github.com/JuliaBinaryWrappers/libcint_jll.jl)). -* Variational orbital geometry optimization based on Automatic differentiation (AD). +* Restricted (closed-shell) and unrestricted (open-shell) Hartree–Fock methods (RHF & UHF). +* Molecular orbital data output in [Molden](https://www3.cmbi.umcn.nl/molden/) file format. +* Variational optimization of orbital geometry based on automatic differentiation (AD). + +# Setup + +## Supported system platforms (64-bit) +* Linux +* Mac OS +* [Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/about) + +## Julia Environment +* [1.5+](https://github.com/frankwswang/Quiqbox.jl/actions/workflows/CI.yml) + +## Installation in Julia [REPL](https://docs.julialang.org/en/v1/manual/getting-started/) + +Type `]` to enter the [`Pkg` mode](https://docs.julialang.org/en/v1/stdlib/REPL/#Pkg-mode): + +```julia +(@v1.x) pkg> +``` + +Type `add Quiqbox` and hit *Enter* key to install Quiqbox: + +```julia +(@v1.x) pkg> add Quiqbox +``` + +After the installation completes, hit *Backspace* key to go back to Julia REPL and use [`using`](https://docs.julialang.org/en/v1/base/base/#using) to load Quiqbox: + +```julia +julia> using Quiqbox +``` + +# Use cases + +## Apply existed basis sets +```julia +coords = [[-0.7,0,0], [0.7,0,0]] + +bsH2O = genBasisFunc.(coords, "STO-3G") |> flatten +``` + +## Build your own basis sets +```julia +bs = genBasisFunc.(coords, fill(GaussFunc(1, 0.75), 2)) +``` + +## Run Hartree-Fock method +```julia +nuc = ["H", "H"] + +runHF(bs, nuc, coords) +``` + +## Optimize the basis set +``` +pars = uniqueParams!(bs, filterMapping=true) + +optimizeParams!(bs, pars[1:4], nuc, coords) +``` + +For more basic usage of the programming language behind Quiqbox, Julia, please refer to [the official documentation](https://docs.julialang.org/) or [one official tutorial](https://juliaacademy.com/p/intro-to-julia). + +[Doc-stable]: https://github.com/frankwswang/Quiqbox.jl/stable +[Doc-latest]: https://github.com/frankwswang/Quiqbox.jl/latest +[Doc-s-img]: https://img.shields.io/badge/docs-stable-blue.svg +[Doc-l-img]: https://img.shields.io/badge/docs-latest-blue.svg [GA-CI-img]: https://github.com/frankwswang/Quiqbox.jl/actions/workflows/CI.yml/badge.svg?branch=main [GA-CI-url]: https://github.com/frankwswang/Quiqbox.jl/actions/workflows/CI.yml [codecov-img]: https://codecov.io/gh/frankwswang/Quiqbox.jl/branch/main/graph/badge.svg?token=Z1XOA39DV2 [codecov-url]: https://codecov.io/gh/frankwswang/Quiqbox.jl -[License-img]: https://img.shields.io/badge/License-MIT-blue.svg +[License-img]: https://img.shields.io/badge/License-MIT-blueviolet.svg [License-url]: https://opensource.org/licenses/MIT \ No newline at end of file From 588480beaf479f61e83fc63935b60c9b01933c8d Mon Sep 17 00:00:00 2001 From: frankwswang Date: Wed, 1 Sep 2021 05:21:42 -0400 Subject: [PATCH 18/33] Updated version number. --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 448e5209..10a2e577 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "Quiqbox" uuid = "7cb8c394-fae1-4ab9-92f2-30189d7746cd" -version = "0.1.0" +version = "0.1.1" [deps] Combinatorics = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" From b50ca7710bc5d354e516cbadee885d05f6b2988b Mon Sep 17 00:00:00 2001 From: frankwswang Date: Wed, 1 Sep 2021 05:22:25 -0400 Subject: [PATCH 19/33] Added Documenter CI. --- .github/workflows/Documentation.yml | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 .github/workflows/Documentation.yml diff --git a/.github/workflows/Documentation.yml b/.github/workflows/Documentation.yml new file mode 100644 index 00000000..3cc8195a --- /dev/null +++ b/.github/workflows/Documentation.yml @@ -0,0 +1,27 @@ + +name: Documentation + +on: + pull_request: + branches: + - master + push: + branches: + - master + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: julia-actions/setup-julia@latest + with: + version: '1.6' + - name: Install dependencies + run: julia --project=docs/ -e 'using Pkg; Pkg.develop(PackageSpec(path=pwd())); Pkg.instantiate()' + - name: Build and deploy + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # If authenticating with GitHub Actions token + DOCUMENTER_KEY: ${{ secrets.DOCUMENTER_KEY }} # If authenticating with SSH deploy key + run: julia --project=docs/ docs/make.jl \ No newline at end of file From ac3da6cf5d132e08255ec99d0ebdc4dc3d926eb3 Mon Sep 17 00:00:00 2001 From: frankwswang Date: Wed, 1 Sep 2021 05:22:38 -0400 Subject: [PATCH 20/33] Added logo. --- docs/src/assets/logo.svg | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/src/assets/logo.svg diff --git a/docs/src/assets/logo.svg b/docs/src/assets/logo.svg new file mode 100644 index 00000000..1ed30d5a --- /dev/null +++ b/docs/src/assets/logo.svg @@ -0,0 +1 @@ +Qu|i|qbox \ No newline at end of file From 7eebc54da32fed2fd6c74bb2af768965d5c1153c Mon Sep 17 00:00:00 2001 From: frankwswang Date: Wed, 1 Sep 2021 05:23:19 -0400 Subject: [PATCH 21/33] Make Documentation. --- .vscode/settings.json | 188 + docs/Project.toml | 5 + docs/build/SCF/index.html | 19 + docs/build/assets/documenter.js | 264 + docs/build/assets/logo.svg | 1 + docs/build/assets/search.js | 251 + docs/build/assets/themes/documenter-dark.css | 7752 ++++++++++++++++ docs/build/assets/themes/documenter-light.css | 7810 +++++++++++++++++ docs/build/assets/themeswap.js | 66 + docs/build/assets/warner.js | 49 + docs/build/basis/index.html | 90 + docs/build/coreFunction/index.html | 115 + docs/build/coreType/index.html | 20 + docs/build/index.html | 2 + docs/build/list/index.html | 2 + docs/build/molden/index.html | 2 + docs/build/optimization/index.html | 49 + docs/build/search/index.html | 2 + docs/build/search_index.js | 3 + docs/build/toolFunction/index.html | 63 + docs/make.jl | 27 + docs/src/SCF.md | 70 + docs/src/basis.md | 231 + docs/src/coreFunction.md | 145 + docs/src/coreType.md | 45 + docs/src/index.md | 44 + docs/src/list.md | 15 + docs/src/molden.md | 9 + docs/src/optimization.md | 47 + docs/src/toolFunction.md | 25 + 30 files changed, 17411 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 docs/Project.toml create mode 100644 docs/build/SCF/index.html create mode 100644 docs/build/assets/documenter.js create mode 100644 docs/build/assets/logo.svg create mode 100644 docs/build/assets/search.js create mode 100644 docs/build/assets/themes/documenter-dark.css create mode 100644 docs/build/assets/themes/documenter-light.css create mode 100644 docs/build/assets/themeswap.js create mode 100644 docs/build/assets/warner.js create mode 100644 docs/build/basis/index.html create mode 100644 docs/build/coreFunction/index.html create mode 100644 docs/build/coreType/index.html create mode 100644 docs/build/index.html create mode 100644 docs/build/list/index.html create mode 100644 docs/build/molden/index.html create mode 100644 docs/build/optimization/index.html create mode 100644 docs/build/search/index.html create mode 100644 docs/build/search_index.js create mode 100644 docs/build/toolFunction/index.html create mode 100644 docs/make.jl create mode 100644 docs/src/SCF.md create mode 100644 docs/src/basis.md create mode 100644 docs/src/coreFunction.md create mode 100644 docs/src/coreType.md create mode 100644 docs/src/index.md create mode 100644 docs/src/list.md create mode 100644 docs/src/molden.md create mode 100644 docs/src/optimization.md create mode 100644 docs/src/toolFunction.md diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..02bdca67 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,188 @@ +{ + "cSpell.words": [ + "ADIIS", + "DIIS", + "EDIIS", + "Fconfig", + "Ffinal", + "Fmethods", + "Ftemp", + "abcd", + "accu", + "adii", + "admm", + "alloc", + "an", + "array", + "atemp", + "atms", + "b", + "basis", + "bf", + "body", + "bs", + "btemp", + "cart", + "cen", + "cens", + "cfrom", + "check", + "cint", + "cmethod", + "cmethods", + "cmpr", + "cnew", + "coeff", + "coeffs", + "config", + "coord", + "core", + "d", + "data", + "dcore", + "default", + "diffvals", + "dii", + "dmethod", + "dnew", + "dnuc", + "dtots", + "dᵀnew", + "e", + "edii", + "ee", + "elec", + "ending", + "enew", + "etarget", + "etot", + "etots", + "excdiffs", + "excs", + "eᵀcore", + "eᵀnew", + "f", + "fenegy", + "fenergy", + "fieldnames", + "finterrelated", + "fints", + "fmethod", + "fname", + "fnew", + "fockintermediate", + "ftype", + "ftypes", + "func", + "funcs", + "g", + "gcore", + "get", + "grad", + "guess", + "gwh", + "h", + "hartree", + "hijkl", + "icore", + "ijk", + "ijks", + "ints", + "key", + "kinetic", + "libcin", + "libcint", + "list", + "m", + "marker", + "mcontent", + "min", + "molden", + "new", + "nijk", + "nijkα", + "npars", + "nucs", + "occu", + "occup", + "occus", + "ocoeffs", + "orbital", + "orijks", + "ovlp", + "par", + "quiqbox's", + "s", + "sc", + "score", + "selector", + "size", + "skey", + "smethod", + "smethods", + "ssize", + "stext", + "strs", + "symms", + "tosymbol", + "two", + "unique", + "vals", + "vars", + "xcore", + "xinv", + "xmethods", + "xname", + "xpns", + "xtemp", + "yname", + "zname", + "ʃabcd" + ], + "cSpell.ignoreWords": [ + "bsiz", + "codecov", + "deepcopy", + "deploydocs", + "eachcol", + "endswith", + "exclude", + "findall", + "findfirst", + "findlast", + "findnext", + "fsym", + "get", + "getfield", + "getindex", + "getproperty", + "ijkl", + "invokelatest", + "isdefined", + "isequal", + "iseven", + "isfile", + "last", + "lcov", + "libc", + "makedocs", + "nameof", + "natm", + "nbas", + "nlines", + "occursin", + "powerset", + "processcoverage", + "readlines", + "rstrip", + "shls", + "sigdigits", + "sitename", + "sortby", + "startswith", + "subbs", + "syms", + "tryparse", + "typemax" + ] +} \ No newline at end of file diff --git a/docs/Project.toml b/docs/Project.toml new file mode 100644 index 00000000..d08e13f7 --- /dev/null +++ b/docs/Project.toml @@ -0,0 +1,5 @@ +[deps] +Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" + +[compat] +Documenter = "^0.27" diff --git a/docs/build/SCF/index.html b/docs/build/SCF/index.html new file mode 100644 index 00000000..a432ee3f --- /dev/null +++ b/docs/build/SCF/index.html @@ -0,0 +1,19 @@ + +Self-Consistent Field Methods · Quiqbox.jl

Self-Consistent Field Methods

Hartree-Fock Methods

Quiqbox supports basic Hartree-Fock methods with various configurations:

ItemsOptions
HF TypesRestricted Closed-Shell (RHF), Unrestricted Open-Shell (UHF)
Initial GuessesCore Hamiltonian, Generalized Wolfsberg-Helmholtz, User-defined Coefficient Matrix
Converging MethodsDirect Diagonalization, DIIS, EDIIS, ADIIS, Combinations of Multi-methods
DIIS-type Method SolversLagrange Multiplier Solver, ADMM Solver

Basic Hartree-Fock

To run a Hartree-Fock method, the lines of code required in Quiqbox is as simple as below:


julia> nuc = ["H", "H"];
julia> nucCoords = [[-0.7, 0.0, 0.0], [0.7, 0.0, 0.0]];
julia> bs = genBasisFunc.(nucCoords, ("STO-3G", "H") |> Ref) |> flatten2-element Vector{BasisFunc{:S, 3}}: + BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][-0.7, 0.0, 0.0] + BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.7, 0.0, 0.0]
julia> resRHF = runHF(bs, nuc, nucCoords, HFtype=:RHF)RHF Initial Gauss E = -1.36211194485525 +Step 1 #1 (ADIIS) E = -1.8258918335311365 +Step 2 #1 (ADIIS) E = -1.8309529323419294 +Step 3 #1 (ADIIS) E = -1.8309996057713884 +Step 4 #2 (DIIS) E = -1.8309998285566 +Step 6 #3 (ADIIS) E = -1.8310000092621985 +Step 8 #3 (ADIIS) E = -1.8310000248934477 +The SCF procedure is converged. + +Quiqbox.HFfinalVars{:RHF, 2, 2}(E0HF=-1.831000028, C, F, D, Emo, occu, temp, isConverged)
julia> @show resRHF.E0HF resRHF.C resRHF.Emo resRHF.occuresRHF.E0HF = -1.8310000284238752 +resRHF.C = [-0.548942168545129 -1.2114603899026102; -0.5489259123002208 1.21146775587111] +resRHF.Emo = [-0.578202974605133, 0.6702677584571967] +resRHF.occu = [2, 0] +2-element Vector{Int64}: + 2 + 0

After the SCF procedure, one can also easily store the result in a Molecule for further data processing such as generating Molden files.

julia> mol = Molecule(bs, nuc, nucCoords, resRHF);

Flexible core functions

If the user want to fine-tune part of the SCF iteration steps to achieve better performance, Quiqbox also has provided various more flexible core functions that allows user to customize the HF methods:

SCFconfig

runHFcore

Standalone Integral Functions

Quiqbox also provides several integral functions that can be used independently of any SCF functions if intended.Those functions are wrappers of binary Julia library package (JLL) libcint_jll, with more simplistic signature and versatile functionality.

overlap

overlaps

One-electron functions

nucAttraction

nucAttractions

elecKinetic

elecKinetics

Quiqbox.oneBodyBFTensor

Two-electron functions

eeInteraction

eeInteractions

Quiqbox.twoBodyBFTensor

diff --git a/docs/build/assets/documenter.js b/docs/build/assets/documenter.js new file mode 100644 index 00000000..6d0b7853 --- /dev/null +++ b/docs/build/assets/documenter.js @@ -0,0 +1,264 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.0.1/languages/julia.min', + 'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/headroom.min', + 'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min', + 'katex-auto-render': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.13.11/contrib/auto-render.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min', + 'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/jQuery.headroom.min', + 'katex': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.13.11/katex.min', + 'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.0.1/highlight.min', + 'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.0.1/languages/julia-repl.min', + }, + shim: { + "highlight-julia": { + "deps": [ + "highlight" + ] + }, + "katex-auto-render": { + "deps": [ + "katex" + ] + }, + "headroom-jquery": { + "deps": [ + "jquery", + "headroom" + ] + }, + "highlight-julia-repl": { + "deps": [ + "highlight" + ] + } +} +}); +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'katex', 'katex-auto-render'], function($, katex, renderMathInElement) { +$(document).ready(function() { + renderMathInElement( + document.body, + { + "delimiters": [ + { + "left": "$", + "right": "$", + "display": false + }, + { + "left": "$$", + "right": "$$", + "display": true + }, + { + "left": "\\[", + "right": "\\]", + "display": true + } + ] +} + + ); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($) { +$(document).ready(function() { + hljs.highlightAll(); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) { + +// Manages the top navigation bar (hides it when the user starts scrolling down on the +// mobile). +window.Headroom = Headroom; // work around buggy module loading? +$(document).ready(function() { + $('#documenter .docs-navbar').headroom({ + "tolerance": {"up": 10, "down": 10}, + }); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Modal settings dialog +$(document).ready(function() { + var settings = $('#documenter-settings'); + $('#documenter-settings-button').click(function(){ + settings.toggleClass('is-active'); + }); + // Close the dialog if X is clicked + $('#documenter-settings button.delete').click(function(){ + settings.removeClass('is-active'); + }); + // Close dialog if ESC is pressed + $(document).keyup(function(e) { + if (e.keyCode == 27) settings.removeClass('is-active'); + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Manages the showing and hiding of the sidebar. +$(document).ready(function() { + var sidebar = $("#documenter > .docs-sidebar"); + var sidebar_button = $("#documenter-sidebar-button") + sidebar_button.click(function(ev) { + ev.preventDefault(); + sidebar.toggleClass('visible'); + if (sidebar.hasClass('visible')) { + // Makes sure that the current menu item is visible in the sidebar. + $("#documenter .docs-menu a.is-active").focus(); + } + }); + $("#documenter > .docs-main").bind('click', function(ev) { + if ($(ev.target).is(sidebar_button)) { + return; + } + if (sidebar.hasClass('visible')) { + sidebar.removeClass('visible'); + } + }); +}) + +// Resizes the package name / sitename in the sidebar if it is too wide. +// Inspired by: https://github.com/davatron5000/FitText.js +$(document).ready(function() { + e = $("#documenter .docs-autofit"); + function resize() { + var L = parseInt(e.css('max-width'), 10); + var L0 = e.width(); + if(L0 > L) { + var h0 = parseInt(e.css('font-size'), 10); + e.css('font-size', L * h0 / L0); + // TODO: make sure it survives resizes? + } + } + // call once and then register events + resize(); + $(window).resize(resize); + $(window).on('orientationchange', resize); +}); + +// Scroll the navigation bar to the currently selected menu item +$(document).ready(function() { + var sidebar = $("#documenter .docs-menu").get(0); + var active = $("#documenter .docs-menu .is-active").get(0); + if(typeof active !== 'undefined') { + sidebar.scrollTop = active.offsetTop - sidebar.offsetTop - 15; + } +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +function set_theme(theme) { + var active = null; + var disabled = []; + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + var themename = ss.ownerNode.getAttribute("data-theme-name"); + if(themename === null) continue; // ignore non-theme stylesheets + // Find the active theme + if(themename === theme) active = ss; + else disabled.push(ss); + } + if(active !== null) { + active.disabled = false; + if(active.ownerNode.getAttribute("data-theme-primary") === null) { + document.getElementsByTagName('html')[0].className = "theme--" + theme; + } else { + document.getElementsByTagName('html')[0].className = ""; + } + disabled.forEach(function(ss){ + ss.disabled = true; + }); + } + + // Store the theme in localStorage + if(typeof(window.localStorage) !== "undefined") { + window.localStorage.setItem("documenter-theme", theme); + } else { + console.error("Browser does not support window.localStorage"); + } +} + +// Theme picker setup +$(document).ready(function() { + // onchange callback + $('#documenter-themepicker').change(function themepick_callback(ev){ + var themename = $('#documenter-themepicker option:selected').attr('value'); + set_theme(themename); + }); + + // Make sure that the themepicker displays the correct theme when the theme is retrieved + // from localStorage + if(typeof(window.localStorage) !== "undefined") { + var theme = window.localStorage.getItem("documenter-theme"); + if(theme !== null) { + $('#documenter-themepicker option').each(function(i,e) { + e.selected = (e.value === theme); + }) + } else { + $('#documenter-themepicker option').each(function(i,e) { + e.selected = $("html").hasClass(`theme--${e.value}`); + }) + } + } +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// update the version selector with info from the siteinfo.js and ../versions.js files +$(document).ready(function() { + var version_selector = $("#documenter .docs-version-selector"); + var version_selector_select = $("#documenter .docs-version-selector select"); + + version_selector_select.change(function(x) { + target_href = version_selector_select.children("option:selected").get(0).value; + window.location.href = target_href; + }); + + // add the current version to the selector based on siteinfo.js, but only if the selector is empty + if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) { + var option = $(""); + version_selector_select.append(option); + } + + if (typeof DOC_VERSIONS !== 'undefined') { + var existing_versions = version_selector_select.children("option"); + var existing_versions_texts = existing_versions.map(function(i,x){return x.text}); + DOC_VERSIONS.forEach(function(each) { + var version_url = documenterBaseURL + "/../" + each; + var existing_id = $.inArray(each, existing_versions_texts); + // if not already in the version selector, add it as a new option, + // otherwise update the old option with the URL and enable it + if (existing_id == -1) { + var option = $(""); + version_selector_select.append(option); + } else { + var option = existing_versions[existing_id]; + option.value = version_url; + option.disabled = false; + } + }); + } + + // only show the version selector if the selector has been populated + if (version_selector_select.children("option").length > 0) { + version_selector.toggleClass("visible"); + } +}) + +}) diff --git a/docs/build/assets/logo.svg b/docs/build/assets/logo.svg new file mode 100644 index 00000000..1ed30d5a --- /dev/null +++ b/docs/build/assets/logo.svg @@ -0,0 +1 @@ +Qu|i|qbox \ No newline at end of file diff --git a/docs/build/assets/search.js b/docs/build/assets/search.js new file mode 100644 index 00000000..1a514547 --- /dev/null +++ b/docs/build/assets/search.js @@ -0,0 +1,251 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.9/lunr.min', + 'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min', + } +}); +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'lunr', 'lodash'], function($, lunr, _) { + +$(document).ready(function() { + // parseUri 1.2.2 + // (c) Steven Levithan + // MIT License + function parseUri (str) { + var o = parseUri.options, + m = o.parser[o.strictMode ? "strict" : "loose"].exec(str), + uri = {}, + i = 14; + + while (i--) uri[o.key[i]] = m[i] || ""; + + uri[o.q.name] = {}; + uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) { + if ($1) uri[o.q.name][$1] = $2; + }); + + return uri; + }; + parseUri.options = { + strictMode: false, + key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], + q: { + name: "queryKey", + parser: /(?:^|&)([^&=]*)=?([^&]*)/g + }, + parser: { + strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/, + loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ + } + }; + + $("#search-form").submit(function(e) { + e.preventDefault() + }) + + // list below is the lunr 2.1.3 list minus the intersect with names(Base) + // (all, any, get, in, is, only, which) and (do, else, for, let, where, while, with) + // ideally we'd just filter the original list but it's not available as a variable + lunr.stopWordFilter = lunr.generateStopWordFilter([ + 'a', + 'able', + 'about', + 'across', + 'after', + 'almost', + 'also', + 'am', + 'among', + 'an', + 'and', + 'are', + 'as', + 'at', + 'be', + 'because', + 'been', + 'but', + 'by', + 'can', + 'cannot', + 'could', + 'dear', + 'did', + 'does', + 'either', + 'ever', + 'every', + 'from', + 'got', + 'had', + 'has', + 'have', + 'he', + 'her', + 'hers', + 'him', + 'his', + 'how', + 'however', + 'i', + 'if', + 'into', + 'it', + 'its', + 'just', + 'least', + 'like', + 'likely', + 'may', + 'me', + 'might', + 'most', + 'must', + 'my', + 'neither', + 'no', + 'nor', + 'not', + 'of', + 'off', + 'often', + 'on', + 'or', + 'other', + 'our', + 'own', + 'rather', + 'said', + 'say', + 'says', + 'she', + 'should', + 'since', + 'so', + 'some', + 'than', + 'that', + 'the', + 'their', + 'them', + 'then', + 'there', + 'these', + 'they', + 'this', + 'tis', + 'to', + 'too', + 'twas', + 'us', + 'wants', + 'was', + 'we', + 'were', + 'what', + 'when', + 'who', + 'whom', + 'why', + 'will', + 'would', + 'yet', + 'you', + 'your' + ]) + + // add . as a separator, because otherwise "title": "Documenter.Anchors.add!" + // would not find anything if searching for "add!", only for the entire qualification + lunr.tokenizer.separator = /[\s\-\.]+/ + + // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names + lunr.trimmer = function (token) { + return token.update(function (s) { + return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '') + }) + } + + lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter') + lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer') + + var index = lunr(function () { + this.ref('location') + this.field('title',{boost: 100}) + this.field('text') + documenterSearchIndex['docs'].forEach(function(e) { + this.add(e) + }, this) + }) + var store = {} + + documenterSearchIndex['docs'].forEach(function(e) { + store[e.location] = {title: e.title, category: e.category, page: e.page} + }) + + $(function(){ + searchresults = $('#documenter-search-results'); + searchinfo = $('#documenter-search-info'); + searchbox = $('#documenter-search-query'); + function update_search(querystring) { + tokens = lunr.tokenizer(querystring) + results = index.query(function (q) { + tokens.forEach(function (t) { + q.term(t.toString(), { + fields: ["title"], + boost: 100, + usePipeline: true, + editDistance: 0, + wildcard: lunr.Query.wildcard.NONE + }) + q.term(t.toString(), { + fields: ["title"], + boost: 10, + usePipeline: true, + editDistance: 2, + wildcard: lunr.Query.wildcard.NONE + }) + q.term(t.toString(), { + fields: ["text"], + boost: 1, + usePipeline: true, + editDistance: 0, + wildcard: lunr.Query.wildcard.NONE + }) + }) + }) + searchinfo.text("Number of results: " + results.length) + searchresults.empty() + results.forEach(function(result) { + data = store[result.ref] + link = $(''+data.title+'') + link.attr('href', documenterBaseURL+'/'+result.ref) + if (data.category != "page"){ + cat = $('('+data.category+', '+data.page+')') + } else { + cat = $('('+data.category+')') + } + li = $('
  • ').append(link).append(" ").append(cat) + searchresults.append(li) + }) + } + + function update_search_box() { + querystring = searchbox.val() + update_search(querystring) + } + + searchbox.keyup(_.debounce(update_search_box, 250)) + searchbox.change(update_search_box) + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + searchbox.val(search_query) + } + update_search_box(); + }) +}) + +}) diff --git a/docs/build/assets/themes/documenter-dark.css b/docs/build/assets/themes/documenter-dark.css new file mode 100644 index 00000000..5a64259e --- /dev/null +++ b/docs/build/assets/themes/documenter-dark.css @@ -0,0 +1,7752 @@ +@charset "UTF-8"; +/* Font Awesome 5 mixin. Can be included in any rule that should render Font Awesome icons. */ +@keyframes spinAround { + from { + transform: rotate(0deg); } + to { + transform: rotate(359deg); } } + +html.theme--documenter-dark .delete, html.theme--documenter-dark .modal-close, .is-unselectable, html.theme--documenter-dark .button, html.theme--documenter-dark .file, html.theme--documenter-dark .breadcrumb, html.theme--documenter-dark .pagination-previous, +html.theme--documenter-dark .pagination-next, +html.theme--documenter-dark .pagination-link, +html.theme--documenter-dark .pagination-ellipsis, html.theme--documenter-dark .tabs { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after, html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after { + border: 3px solid transparent; + border-radius: 2px; + border-right: 0; + border-top: 0; + content: " "; + display: block; + height: 0.625em; + margin-top: -0.4375em; + pointer-events: none; + position: absolute; + top: 50%; + transform: rotate(-45deg); + transform-origin: center; + width: 0.625em; } + +html.theme--documenter-dark .box:not(:last-child), html.theme--documenter-dark .content:not(:last-child), html.theme--documenter-dark .notification:not(:last-child), html.theme--documenter-dark .progress:not(:last-child), html.theme--documenter-dark .table:not(:last-child), html.theme--documenter-dark .table-container:not(:last-child), html.theme--documenter-dark .title:not(:last-child), +html.theme--documenter-dark .subtitle:not(:last-child), html.theme--documenter-dark .block:not(:last-child), html.theme--documenter-dark .highlight:not(:last-child), html.theme--documenter-dark .breadcrumb:not(:last-child), html.theme--documenter-dark .level:not(:last-child), html.theme--documenter-dark .list:not(:last-child), html.theme--documenter-dark .message:not(:last-child), html.theme--documenter-dark .tabs:not(:last-child), html.theme--documenter-dark .admonition:not(:last-child) { + margin-bottom: 1.5rem; } + +html.theme--documenter-dark .delete, html.theme--documenter-dark .modal-close { + -moz-appearance: none; + -webkit-appearance: none; + background-color: rgba(10, 10, 10, 0.2); + border: none; + border-radius: 290486px; + cursor: pointer; + pointer-events: auto; + display: inline-block; + flex-grow: 0; + flex-shrink: 0; + font-size: 0; + height: 20px; + max-height: 20px; + max-width: 20px; + min-height: 20px; + min-width: 20px; + outline: none; + position: relative; + vertical-align: top; + width: 20px; } + html.theme--documenter-dark .delete::before, html.theme--documenter-dark .modal-close::before, html.theme--documenter-dark .delete::after, html.theme--documenter-dark .modal-close::after { + background-color: white; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + html.theme--documenter-dark .delete::before, html.theme--documenter-dark .modal-close::before { + height: 2px; + width: 50%; } + html.theme--documenter-dark .delete::after, html.theme--documenter-dark .modal-close::after { + height: 50%; + width: 2px; } + html.theme--documenter-dark .delete:hover, html.theme--documenter-dark .modal-close:hover, html.theme--documenter-dark .delete:focus, html.theme--documenter-dark .modal-close:focus { + background-color: rgba(10, 10, 10, 0.3); } + html.theme--documenter-dark .delete:active, html.theme--documenter-dark .modal-close:active { + background-color: rgba(10, 10, 10, 0.4); } + html.theme--documenter-dark .is-small.delete, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.delete, html.theme--documenter-dark .is-small.modal-close, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.modal-close { + height: 16px; + max-height: 16px; + max-width: 16px; + min-height: 16px; + min-width: 16px; + width: 16px; } + html.theme--documenter-dark .is-medium.delete, html.theme--documenter-dark .is-medium.modal-close { + height: 24px; + max-height: 24px; + max-width: 24px; + min-height: 24px; + min-width: 24px; + width: 24px; } + html.theme--documenter-dark .is-large.delete, html.theme--documenter-dark .is-large.modal-close { + height: 32px; + max-height: 32px; + max-width: 32px; + min-height: 32px; + min-width: 32px; + width: 32px; } + +html.theme--documenter-dark .button.is-loading::after, html.theme--documenter-dark .loader, html.theme--documenter-dark .select.is-loading::after, html.theme--documenter-dark .control.is-loading::after { + animation: spinAround 500ms infinite linear; + border: 2px solid #dbdee0; + border-radius: 290486px; + border-right-color: transparent; + border-top-color: transparent; + content: ""; + display: block; + height: 1em; + position: relative; + width: 1em; } + +.is-overlay, html.theme--documenter-dark .image.is-square img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square img, +html.theme--documenter-dark .image.is-square .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, html.theme--documenter-dark .image.is-1by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 img, +html.theme--documenter-dark .image.is-1by1 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, html.theme--documenter-dark .image.is-5by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 img, +html.theme--documenter-dark .image.is-5by4 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, html.theme--documenter-dark .image.is-4by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 img, +html.theme--documenter-dark .image.is-4by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, html.theme--documenter-dark .image.is-3by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 img, +html.theme--documenter-dark .image.is-3by2 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, html.theme--documenter-dark .image.is-5by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 img, +html.theme--documenter-dark .image.is-5by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, html.theme--documenter-dark .image.is-16by9 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 img, +html.theme--documenter-dark .image.is-16by9 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, html.theme--documenter-dark .image.is-2by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 img, +html.theme--documenter-dark .image.is-2by1 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, html.theme--documenter-dark .image.is-3by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 img, +html.theme--documenter-dark .image.is-3by1 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, html.theme--documenter-dark .image.is-4by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 img, +html.theme--documenter-dark .image.is-4by5 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, html.theme--documenter-dark .image.is-3by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 img, +html.theme--documenter-dark .image.is-3by4 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, html.theme--documenter-dark .image.is-2by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 img, +html.theme--documenter-dark .image.is-2by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, html.theme--documenter-dark .image.is-3by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 img, +html.theme--documenter-dark .image.is-3by5 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, html.theme--documenter-dark .image.is-9by16 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 img, +html.theme--documenter-dark .image.is-9by16 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, html.theme--documenter-dark .image.is-1by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 img, +html.theme--documenter-dark .image.is-1by2 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, html.theme--documenter-dark .image.is-1by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 img, +html.theme--documenter-dark .image.is-1by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio, html.theme--documenter-dark .modal, html.theme--documenter-dark .modal-background, html.theme--documenter-dark .hero-video { + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; } + +html.theme--documenter-dark .button, html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark .textarea, html.theme--documenter-dark .select select, html.theme--documenter-dark .file-cta, +html.theme--documenter-dark .file-name, html.theme--documenter-dark .pagination-previous, +html.theme--documenter-dark .pagination-next, +html.theme--documenter-dark .pagination-link, +html.theme--documenter-dark .pagination-ellipsis { + -moz-appearance: none; + -webkit-appearance: none; + align-items: center; + border: 1px solid transparent; + border-radius: 0.4em; + box-shadow: none; + display: inline-flex; + font-size: 15px; + height: 2.25em; + justify-content: flex-start; + line-height: 1.5; + padding-bottom: calc(0.375em - 1px); + padding-left: calc(0.625em - 1px); + padding-right: calc(0.625em - 1px); + padding-top: calc(0.375em - 1px); + position: relative; + vertical-align: top; } + html.theme--documenter-dark .button:focus, html.theme--documenter-dark .input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:focus, html.theme--documenter-dark .textarea:focus, html.theme--documenter-dark .select select:focus, html.theme--documenter-dark .file-cta:focus, + html.theme--documenter-dark .file-name:focus, html.theme--documenter-dark .pagination-previous:focus, + html.theme--documenter-dark .pagination-next:focus, + html.theme--documenter-dark .pagination-link:focus, + html.theme--documenter-dark .pagination-ellipsis:focus, html.theme--documenter-dark .is-focused.button, html.theme--documenter-dark .is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-focused.textarea, html.theme--documenter-dark .select select.is-focused, html.theme--documenter-dark .is-focused.file-cta, + html.theme--documenter-dark .is-focused.file-name, html.theme--documenter-dark .is-focused.pagination-previous, + html.theme--documenter-dark .is-focused.pagination-next, + html.theme--documenter-dark .is-focused.pagination-link, + html.theme--documenter-dark .is-focused.pagination-ellipsis, html.theme--documenter-dark .button:active, html.theme--documenter-dark .input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:active, html.theme--documenter-dark .textarea:active, html.theme--documenter-dark .select select:active, html.theme--documenter-dark .file-cta:active, + html.theme--documenter-dark .file-name:active, html.theme--documenter-dark .pagination-previous:active, + html.theme--documenter-dark .pagination-next:active, + html.theme--documenter-dark .pagination-link:active, + html.theme--documenter-dark .pagination-ellipsis:active, html.theme--documenter-dark .is-active.button, html.theme--documenter-dark .is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active, html.theme--documenter-dark .is-active.textarea, html.theme--documenter-dark .select select.is-active, html.theme--documenter-dark .is-active.file-cta, + html.theme--documenter-dark .is-active.file-name, html.theme--documenter-dark .is-active.pagination-previous, + html.theme--documenter-dark .is-active.pagination-next, + html.theme--documenter-dark .is-active.pagination-link, + html.theme--documenter-dark .is-active.pagination-ellipsis { + outline: none; } + html.theme--documenter-dark .button[disabled], html.theme--documenter-dark .input[disabled], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled], html.theme--documenter-dark .textarea[disabled], html.theme--documenter-dark .select select[disabled], html.theme--documenter-dark .file-cta[disabled], + html.theme--documenter-dark .file-name[disabled], html.theme--documenter-dark .pagination-previous[disabled], + html.theme--documenter-dark .pagination-next[disabled], + html.theme--documenter-dark .pagination-link[disabled], + html.theme--documenter-dark .pagination-ellipsis[disabled], + fieldset[disabled] html.theme--documenter-dark .button, + html.theme--documenter-dark fieldset[disabled] .button, + fieldset[disabled] html.theme--documenter-dark .input, + html.theme--documenter-dark fieldset[disabled] .input, + fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, + html.theme--documenter-dark #documenter .docs-sidebar fieldset[disabled] form.docs-search > input, + fieldset[disabled] html.theme--documenter-dark .textarea, + html.theme--documenter-dark fieldset[disabled] .textarea, + fieldset[disabled] html.theme--documenter-dark .select select, + html.theme--documenter-dark .select fieldset[disabled] select, + fieldset[disabled] html.theme--documenter-dark .file-cta, + html.theme--documenter-dark fieldset[disabled] .file-cta, + fieldset[disabled] html.theme--documenter-dark .file-name, + html.theme--documenter-dark fieldset[disabled] .file-name, + fieldset[disabled] html.theme--documenter-dark .pagination-previous, + html.theme--documenter-dark fieldset[disabled] .pagination-previous, + fieldset[disabled] html.theme--documenter-dark .pagination-next, + html.theme--documenter-dark fieldset[disabled] .pagination-next, + fieldset[disabled] html.theme--documenter-dark .pagination-link, + html.theme--documenter-dark fieldset[disabled] .pagination-link, + fieldset[disabled] html.theme--documenter-dark .pagination-ellipsis, + html.theme--documenter-dark fieldset[disabled] .pagination-ellipsis { + cursor: not-allowed; } + +/*! minireset.css v0.0.4 | MIT License | github.com/jgthms/minireset.css */ +html, +body, +p, +ol, +ul, +li, +dl, +dt, +dd, +blockquote, +figure, +fieldset, +legend, +textarea, +pre, +iframe, +hr, +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 0; + padding: 0; } + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: 100%; + font-weight: normal; } + +ul { + list-style: none; } + +button, +input, +select, +textarea { + margin: 0; } + +html { + box-sizing: border-box; } + +*, *::before, *::after { + box-sizing: inherit; } + +img, +embed, +iframe, +object, +video { + height: auto; + max-width: 100%; } + +audio { + max-width: 100%; } + +iframe { + border: 0; } + +table { + border-collapse: collapse; + border-spacing: 0; } + +td, +th { + padding: 0; } + td:not([align]), + th:not([align]) { + text-align: left; } + +.is-clearfix::after { + clear: both; + content: " "; + display: table; } + +.is-pulled-left { + float: left !important; } + +.is-pulled-right { + float: right !important; } + +.is-clipped { + overflow: hidden !important; } + +.is-size-1 { + font-size: 3rem !important; } + +.is-size-2 { + font-size: 2.5rem !important; } + +.is-size-3 { + font-size: 2rem !important; } + +.is-size-4 { + font-size: 1.5rem !important; } + +.is-size-5 { + font-size: 1.25rem !important; } + +.is-size-6 { + font-size: 15px !important; } + +.is-size-7, html.theme--documenter-dark .docstring > section > a.docs-sourcelink { + font-size: 0.85em !important; } + +@media screen and (max-width: 768px) { + .is-size-1-mobile { + font-size: 3rem !important; } + .is-size-2-mobile { + font-size: 2.5rem !important; } + .is-size-3-mobile { + font-size: 2rem !important; } + .is-size-4-mobile { + font-size: 1.5rem !important; } + .is-size-5-mobile { + font-size: 1.25rem !important; } + .is-size-6-mobile { + font-size: 15px !important; } + .is-size-7-mobile { + font-size: 0.85em !important; } } + +@media screen and (min-width: 769px), print { + .is-size-1-tablet { + font-size: 3rem !important; } + .is-size-2-tablet { + font-size: 2.5rem !important; } + .is-size-3-tablet { + font-size: 2rem !important; } + .is-size-4-tablet { + font-size: 1.5rem !important; } + .is-size-5-tablet { + font-size: 1.25rem !important; } + .is-size-6-tablet { + font-size: 15px !important; } + .is-size-7-tablet { + font-size: 0.85em !important; } } + +@media screen and (max-width: 1055px) { + .is-size-1-touch { + font-size: 3rem !important; } + .is-size-2-touch { + font-size: 2.5rem !important; } + .is-size-3-touch { + font-size: 2rem !important; } + .is-size-4-touch { + font-size: 1.5rem !important; } + .is-size-5-touch { + font-size: 1.25rem !important; } + .is-size-6-touch { + font-size: 15px !important; } + .is-size-7-touch { + font-size: 0.85em !important; } } + +@media screen and (min-width: 1056px) { + .is-size-1-desktop { + font-size: 3rem !important; } + .is-size-2-desktop { + font-size: 2.5rem !important; } + .is-size-3-desktop { + font-size: 2rem !important; } + .is-size-4-desktop { + font-size: 1.5rem !important; } + .is-size-5-desktop { + font-size: 1.25rem !important; } + .is-size-6-desktop { + font-size: 15px !important; } + .is-size-7-desktop { + font-size: 0.85em !important; } } + +@media screen and (min-width: 1216px) { + .is-size-1-widescreen { + font-size: 3rem !important; } + .is-size-2-widescreen { + font-size: 2.5rem !important; } + .is-size-3-widescreen { + font-size: 2rem !important; } + .is-size-4-widescreen { + font-size: 1.5rem !important; } + .is-size-5-widescreen { + font-size: 1.25rem !important; } + .is-size-6-widescreen { + font-size: 15px !important; } + .is-size-7-widescreen { + font-size: 0.85em !important; } } + +@media screen and (min-width: 1408px) { + .is-size-1-fullhd { + font-size: 3rem !important; } + .is-size-2-fullhd { + font-size: 2.5rem !important; } + .is-size-3-fullhd { + font-size: 2rem !important; } + .is-size-4-fullhd { + font-size: 1.5rem !important; } + .is-size-5-fullhd { + font-size: 1.25rem !important; } + .is-size-6-fullhd { + font-size: 15px !important; } + .is-size-7-fullhd { + font-size: 0.85em !important; } } + +.has-text-centered { + text-align: center !important; } + +.has-text-justified { + text-align: justify !important; } + +.has-text-left { + text-align: left !important; } + +.has-text-right { + text-align: right !important; } + +@media screen and (max-width: 768px) { + .has-text-centered-mobile { + text-align: center !important; } } + +@media screen and (min-width: 769px), print { + .has-text-centered-tablet { + text-align: center !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .has-text-centered-tablet-only { + text-align: center !important; } } + +@media screen and (max-width: 1055px) { + .has-text-centered-touch { + text-align: center !important; } } + +@media screen and (min-width: 1056px) { + .has-text-centered-desktop { + text-align: center !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .has-text-centered-desktop-only { + text-align: center !important; } } + +@media screen and (min-width: 1216px) { + .has-text-centered-widescreen { + text-align: center !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .has-text-centered-widescreen-only { + text-align: center !important; } } + +@media screen and (min-width: 1408px) { + .has-text-centered-fullhd { + text-align: center !important; } } + +@media screen and (max-width: 768px) { + .has-text-justified-mobile { + text-align: justify !important; } } + +@media screen and (min-width: 769px), print { + .has-text-justified-tablet { + text-align: justify !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .has-text-justified-tablet-only { + text-align: justify !important; } } + +@media screen and (max-width: 1055px) { + .has-text-justified-touch { + text-align: justify !important; } } + +@media screen and (min-width: 1056px) { + .has-text-justified-desktop { + text-align: justify !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .has-text-justified-desktop-only { + text-align: justify !important; } } + +@media screen and (min-width: 1216px) { + .has-text-justified-widescreen { + text-align: justify !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .has-text-justified-widescreen-only { + text-align: justify !important; } } + +@media screen and (min-width: 1408px) { + .has-text-justified-fullhd { + text-align: justify !important; } } + +@media screen and (max-width: 768px) { + .has-text-left-mobile { + text-align: left !important; } } + +@media screen and (min-width: 769px), print { + .has-text-left-tablet { + text-align: left !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .has-text-left-tablet-only { + text-align: left !important; } } + +@media screen and (max-width: 1055px) { + .has-text-left-touch { + text-align: left !important; } } + +@media screen and (min-width: 1056px) { + .has-text-left-desktop { + text-align: left !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .has-text-left-desktop-only { + text-align: left !important; } } + +@media screen and (min-width: 1216px) { + .has-text-left-widescreen { + text-align: left !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .has-text-left-widescreen-only { + text-align: left !important; } } + +@media screen and (min-width: 1408px) { + .has-text-left-fullhd { + text-align: left !important; } } + +@media screen and (max-width: 768px) { + .has-text-right-mobile { + text-align: right !important; } } + +@media screen and (min-width: 769px), print { + .has-text-right-tablet { + text-align: right !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .has-text-right-tablet-only { + text-align: right !important; } } + +@media screen and (max-width: 1055px) { + .has-text-right-touch { + text-align: right !important; } } + +@media screen and (min-width: 1056px) { + .has-text-right-desktop { + text-align: right !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .has-text-right-desktop-only { + text-align: right !important; } } + +@media screen and (min-width: 1216px) { + .has-text-right-widescreen { + text-align: right !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .has-text-right-widescreen-only { + text-align: right !important; } } + +@media screen and (min-width: 1408px) { + .has-text-right-fullhd { + text-align: right !important; } } + +.is-capitalized { + text-transform: capitalize !important; } + +.is-lowercase { + text-transform: lowercase !important; } + +.is-uppercase { + text-transform: uppercase !important; } + +.is-italic { + font-style: italic !important; } + +.has-text-white { + color: white !important; } + +a.has-text-white:hover, a.has-text-white:focus { + color: #e6e6e6 !important; } + +.has-background-white { + background-color: white !important; } + +.has-text-black { + color: #0a0a0a !important; } + +a.has-text-black:hover, a.has-text-black:focus { + color: black !important; } + +.has-background-black { + background-color: #0a0a0a !important; } + +.has-text-light { + color: #ecf0f1 !important; } + +a.has-text-light:hover, a.has-text-light:focus { + color: #cfd9db !important; } + +.has-background-light { + background-color: #ecf0f1 !important; } + +.has-text-dark { + color: #282f2f !important; } + +a.has-text-dark:hover, a.has-text-dark:focus { + color: #111414 !important; } + +.has-background-dark { + background-color: #282f2f !important; } + +.has-text-primary { + color: #375a7f !important; } + +a.has-text-primary:hover, a.has-text-primary:focus { + color: #28415b !important; } + +.has-background-primary { + background-color: #375a7f !important; } + +.has-text-link { + color: #1abc9c !important; } + +a.has-text-link:hover, a.has-text-link:focus { + color: #148f77 !important; } + +.has-background-link { + background-color: #1abc9c !important; } + +.has-text-info { + color: #024c7d !important; } + +a.has-text-info:hover, a.has-text-info:focus { + color: #012d4b !important; } + +.has-background-info { + background-color: #024c7d !important; } + +.has-text-success { + color: #008438 !important; } + +a.has-text-success:hover, a.has-text-success:focus { + color: #005122 !important; } + +.has-background-success { + background-color: #008438 !important; } + +.has-text-warning { + color: #ad8100 !important; } + +a.has-text-warning:hover, a.has-text-warning:focus { + color: #7a5b00 !important; } + +.has-background-warning { + background-color: #ad8100 !important; } + +.has-text-danger { + color: #9e1b0d !important; } + +a.has-text-danger:hover, a.has-text-danger:focus { + color: #6f1309 !important; } + +.has-background-danger { + background-color: #9e1b0d !important; } + +.has-text-black-bis { + color: #121212 !important; } + +.has-background-black-bis { + background-color: #121212 !important; } + +.has-text-black-ter { + color: #242424 !important; } + +.has-background-black-ter { + background-color: #242424 !important; } + +.has-text-grey-darker { + color: #282f2f !important; } + +.has-background-grey-darker { + background-color: #282f2f !important; } + +.has-text-grey-dark { + color: #343c3d !important; } + +.has-background-grey-dark { + background-color: #343c3d !important; } + +.has-text-grey { + color: #5e6d6f !important; } + +.has-background-grey { + background-color: #5e6d6f !important; } + +.has-text-grey-light { + color: #8c9b9d !important; } + +.has-background-grey-light { + background-color: #8c9b9d !important; } + +.has-text-grey-lighter { + color: #dbdee0 !important; } + +.has-background-grey-lighter { + background-color: #dbdee0 !important; } + +.has-text-white-ter { + color: #ecf0f1 !important; } + +.has-background-white-ter { + background-color: #ecf0f1 !important; } + +.has-text-white-bis { + color: #fafafa !important; } + +.has-background-white-bis { + background-color: #fafafa !important; } + +.has-text-weight-light { + font-weight: 300 !important; } + +.has-text-weight-normal { + font-weight: 400 !important; } + +.has-text-weight-medium { + font-weight: 500 !important; } + +.has-text-weight-semibold { + font-weight: 600 !important; } + +.has-text-weight-bold { + font-weight: 700 !important; } + +.is-family-primary { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-secondary { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-sans-serif { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-monospace { + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-family-code { + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-block { + display: block !important; } + +@media screen and (max-width: 768px) { + .is-block-mobile { + display: block !important; } } + +@media screen and (min-width: 769px), print { + .is-block-tablet { + display: block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-block-tablet-only { + display: block !important; } } + +@media screen and (max-width: 1055px) { + .is-block-touch { + display: block !important; } } + +@media screen and (min-width: 1056px) { + .is-block-desktop { + display: block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-block-desktop-only { + display: block !important; } } + +@media screen and (min-width: 1216px) { + .is-block-widescreen { + display: block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-block-widescreen-only { + display: block !important; } } + +@media screen and (min-width: 1408px) { + .is-block-fullhd { + display: block !important; } } + +.is-flex { + display: flex !important; } + +@media screen and (max-width: 768px) { + .is-flex-mobile { + display: flex !important; } } + +@media screen and (min-width: 769px), print { + .is-flex-tablet { + display: flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-flex-tablet-only { + display: flex !important; } } + +@media screen and (max-width: 1055px) { + .is-flex-touch { + display: flex !important; } } + +@media screen and (min-width: 1056px) { + .is-flex-desktop { + display: flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-flex-desktop-only { + display: flex !important; } } + +@media screen and (min-width: 1216px) { + .is-flex-widescreen { + display: flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-flex-widescreen-only { + display: flex !important; } } + +@media screen and (min-width: 1408px) { + .is-flex-fullhd { + display: flex !important; } } + +.is-inline { + display: inline !important; } + +@media screen and (max-width: 768px) { + .is-inline-mobile { + display: inline !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-tablet { + display: inline !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-tablet-only { + display: inline !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-touch { + display: inline !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-desktop { + display: inline !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-desktop-only { + display: inline !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-widescreen { + display: inline !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-widescreen-only { + display: inline !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-fullhd { + display: inline !important; } } + +.is-inline-block { + display: inline-block !important; } + +@media screen and (max-width: 768px) { + .is-inline-block-mobile { + display: inline-block !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-block-tablet { + display: inline-block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-block-tablet-only { + display: inline-block !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-block-touch { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-block-desktop { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-block-desktop-only { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-block-widescreen { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-block-widescreen-only { + display: inline-block !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-block-fullhd { + display: inline-block !important; } } + +.is-inline-flex { + display: inline-flex !important; } + +@media screen and (max-width: 768px) { + .is-inline-flex-mobile { + display: inline-flex !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-flex-tablet { + display: inline-flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-flex-tablet-only { + display: inline-flex !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-flex-touch { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-flex-desktop { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-flex-desktop-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-flex-widescreen { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-flex-widescreen-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-flex-fullhd { + display: inline-flex !important; } } + +.is-hidden { + display: none !important; } + +.is-sr-only { + border: none !important; + clip: rect(0, 0, 0, 0) !important; + height: 0.01em !important; + overflow: hidden !important; + padding: 0 !important; + position: absolute !important; + white-space: nowrap !important; + width: 0.01em !important; } + +@media screen and (max-width: 768px) { + .is-hidden-mobile { + display: none !important; } } + +@media screen and (min-width: 769px), print { + .is-hidden-tablet { + display: none !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-hidden-tablet-only { + display: none !important; } } + +@media screen and (max-width: 1055px) { + .is-hidden-touch { + display: none !important; } } + +@media screen and (min-width: 1056px) { + .is-hidden-desktop { + display: none !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-hidden-desktop-only { + display: none !important; } } + +@media screen and (min-width: 1216px) { + .is-hidden-widescreen { + display: none !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-hidden-widescreen-only { + display: none !important; } } + +@media screen and (min-width: 1408px) { + .is-hidden-fullhd { + display: none !important; } } + +.is-invisible { + visibility: hidden !important; } + +@media screen and (max-width: 768px) { + .is-invisible-mobile { + visibility: hidden !important; } } + +@media screen and (min-width: 769px), print { + .is-invisible-tablet { + visibility: hidden !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-invisible-tablet-only { + visibility: hidden !important; } } + +@media screen and (max-width: 1055px) { + .is-invisible-touch { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) { + .is-invisible-desktop { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-invisible-desktop-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) { + .is-invisible-widescreen { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-invisible-widescreen-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1408px) { + .is-invisible-fullhd { + visibility: hidden !important; } } + +.is-marginless { + margin: 0 !important; } + +.is-paddingless { + padding: 0 !important; } + +.is-radiusless { + border-radius: 0 !important; } + +.is-shadowless { + box-shadow: none !important; } + +.is-relative { + position: relative !important; } + +html.theme--documenter-dark { + /* This file contain the overall layout. + * + * The main container is
    that is identified by id #documenter. + */ + /*! + Theme: a11y-dark + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css +*/ + /* Comment */ + /* Red */ + /* Orange */ + /* Yellow */ + /* Green */ + /* Blue */ + /* Purple */ } + html.theme--documenter-dark html { + background-color: #1f2424; + font-size: 16px; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + min-width: 300px; + overflow-x: auto; + overflow-y: scroll; + text-rendering: optimizeLegibility; + text-size-adjust: 100%; } + html.theme--documenter-dark article, + html.theme--documenter-dark aside, + html.theme--documenter-dark figure, + html.theme--documenter-dark footer, + html.theme--documenter-dark header, + html.theme--documenter-dark hgroup, + html.theme--documenter-dark section { + display: block; } + html.theme--documenter-dark body, + html.theme--documenter-dark button, + html.theme--documenter-dark input, + html.theme--documenter-dark select, + html.theme--documenter-dark textarea { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif; } + html.theme--documenter-dark code, + html.theme--documenter-dark pre { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace; } + html.theme--documenter-dark body { + color: #fff; + font-size: 1em; + font-weight: 400; + line-height: 1.5; } + html.theme--documenter-dark a { + color: #1abc9c; + cursor: pointer; + text-decoration: none; } + html.theme--documenter-dark a strong { + color: currentColor; } + html.theme--documenter-dark a:hover { + color: #1dd2af; } + html.theme--documenter-dark code { + background-color: rgba(255, 255, 255, 0.05); + color: #e74c3c; + font-size: 0.875em; + font-weight: normal; + padding: 0.1em; } + html.theme--documenter-dark hr { + background-color: #282f2f; + border: none; + display: block; + height: 2px; + margin: 1.5rem 0; } + html.theme--documenter-dark img { + height: auto; + max-width: 100%; } + html.theme--documenter-dark input[type="checkbox"], + html.theme--documenter-dark input[type="radio"] { + vertical-align: baseline; } + html.theme--documenter-dark small { + font-size: 0.875em; } + html.theme--documenter-dark span { + font-style: inherit; + font-weight: inherit; } + html.theme--documenter-dark strong { + color: #f2f2f2; + font-weight: 700; } + html.theme--documenter-dark fieldset { + border: none; } + html.theme--documenter-dark pre { + -webkit-overflow-scrolling: touch; + background-color: #282f2f; + color: #fff; + font-size: 0.875em; + overflow-x: auto; + padding: 1.25rem 1.5rem; + white-space: pre; + word-wrap: normal; } + html.theme--documenter-dark pre code { + background-color: transparent; + color: currentColor; + font-size: 1em; + padding: 0; } + html.theme--documenter-dark table td, + html.theme--documenter-dark table th { + vertical-align: top; } + html.theme--documenter-dark table td:not([align]), + html.theme--documenter-dark table th:not([align]) { + text-align: left; } + html.theme--documenter-dark table th { + color: #f2f2f2; } + html.theme--documenter-dark .box { + background-color: #343c3d; + border-radius: 8px; + box-shadow: none; + color: #fff; + display: block; + padding: 1.25rem; } + html.theme--documenter-dark a.box:hover, html.theme--documenter-dark a.box:focus { + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px #1abc9c; } + html.theme--documenter-dark a.box:active { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2), 0 0 0 1px #1abc9c; } + html.theme--documenter-dark .button { + background-color: #282f2f; + border-color: #4c5759; + border-width: 1px; + color: #375a7f; + cursor: pointer; + justify-content: center; + padding-bottom: calc(0.375em - 1px); + padding-left: 0.75em; + padding-right: 0.75em; + padding-top: calc(0.375em - 1px); + text-align: center; + white-space: nowrap; } + html.theme--documenter-dark .button strong { + color: inherit; } + html.theme--documenter-dark .button .icon, html.theme--documenter-dark .button .icon.is-small, html.theme--documenter-dark .button #documenter .docs-sidebar form.docs-search > input.icon, html.theme--documenter-dark #documenter .docs-sidebar .button form.docs-search > input.icon, html.theme--documenter-dark .button .icon.is-medium, html.theme--documenter-dark .button .icon.is-large { + height: 1.5em; + width: 1.5em; } + html.theme--documenter-dark .button .icon:first-child:not(:last-child) { + margin-left: calc(-0.375em - 1px); + margin-right: 0.1875em; } + html.theme--documenter-dark .button .icon:last-child:not(:first-child) { + margin-left: 0.1875em; + margin-right: calc(-0.375em - 1px); } + html.theme--documenter-dark .button .icon:first-child:last-child { + margin-left: calc(-0.375em - 1px); + margin-right: calc(-0.375em - 1px); } + html.theme--documenter-dark .button:hover, html.theme--documenter-dark .button.is-hovered { + border-color: #8c9b9d; + color: #f2f2f2; } + html.theme--documenter-dark .button:focus, html.theme--documenter-dark .button.is-focused { + border-color: #8c9b9d; + color: #17a689; } + html.theme--documenter-dark .button:focus:not(:active), html.theme--documenter-dark .button.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + html.theme--documenter-dark .button:active, html.theme--documenter-dark .button.is-active { + border-color: #343c3d; + color: #f2f2f2; } + html.theme--documenter-dark .button.is-text { + background-color: transparent; + border-color: transparent; + color: #fff; + text-decoration: underline; } + html.theme--documenter-dark .button.is-text:hover, html.theme--documenter-dark .button.is-text.is-hovered, html.theme--documenter-dark .button.is-text:focus, html.theme--documenter-dark .button.is-text.is-focused { + background-color: #282f2f; + color: #f2f2f2; } + html.theme--documenter-dark .button.is-text:active, html.theme--documenter-dark .button.is-text.is-active { + background-color: #1d2122; + color: #f2f2f2; } + html.theme--documenter-dark .button.is-text[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-text { + background-color: transparent; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-white { + background-color: white; + border-color: transparent; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-white:hover, html.theme--documenter-dark .button.is-white.is-hovered { + background-color: #f9f9f9; + border-color: transparent; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-white:focus, html.theme--documenter-dark .button.is-white.is-focused { + border-color: transparent; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-white:focus:not(:active), html.theme--documenter-dark .button.is-white.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + html.theme--documenter-dark .button.is-white:active, html.theme--documenter-dark .button.is-white.is-active { + background-color: #f2f2f2; + border-color: transparent; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-white[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-white { + background-color: white; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-white.is-inverted { + background-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .button.is-white.is-inverted:hover, html.theme--documenter-dark .button.is-white.is-inverted.is-hovered { + background-color: black; } + html.theme--documenter-dark .button.is-white.is-inverted[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted { + background-color: #0a0a0a; + border-color: transparent; + box-shadow: none; + color: white; } + html.theme--documenter-dark .button.is-white.is-loading::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; } + html.theme--documenter-dark .button.is-white.is-outlined { + background-color: transparent; + border-color: white; + color: white; } + html.theme--documenter-dark .button.is-white.is-outlined:hover, html.theme--documenter-dark .button.is-white.is-outlined.is-hovered, html.theme--documenter-dark .button.is-white.is-outlined:focus, html.theme--documenter-dark .button.is-white.is-outlined.is-focused { + background-color: white; + border-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-white.is-outlined.is-loading::after { + border-color: transparent transparent white white !important; } + html.theme--documenter-dark .button.is-white.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-white.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; } + html.theme--documenter-dark .button.is-white.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-white.is-outlined { + background-color: transparent; + border-color: white; + box-shadow: none; + color: white; } + html.theme--documenter-dark .button.is-white.is-inverted.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-focused { + background-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent white white !important; } + html.theme--documenter-dark .button.is-white.is-inverted.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + box-shadow: none; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-black { + background-color: #0a0a0a; + border-color: transparent; + color: white; } + html.theme--documenter-dark .button.is-black:hover, html.theme--documenter-dark .button.is-black.is-hovered { + background-color: #040404; + border-color: transparent; + color: white; } + html.theme--documenter-dark .button.is-black:focus, html.theme--documenter-dark .button.is-black.is-focused { + border-color: transparent; + color: white; } + html.theme--documenter-dark .button.is-black:focus:not(:active), html.theme--documenter-dark .button.is-black.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + html.theme--documenter-dark .button.is-black:active, html.theme--documenter-dark .button.is-black.is-active { + background-color: black; + border-color: transparent; + color: white; } + html.theme--documenter-dark .button.is-black[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-black { + background-color: #0a0a0a; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-black.is-inverted { + background-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-black.is-inverted:hover, html.theme--documenter-dark .button.is-black.is-inverted.is-hovered { + background-color: #f2f2f2; } + html.theme--documenter-dark .button.is-black.is-inverted[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted { + background-color: white; + border-color: transparent; + box-shadow: none; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-black.is-loading::after { + border-color: transparent transparent white white !important; } + html.theme--documenter-dark .button.is-black.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-black.is-outlined:hover, html.theme--documenter-dark .button.is-black.is-outlined.is-hovered, html.theme--documenter-dark .button.is-black.is-outlined:focus, html.theme--documenter-dark .button.is-black.is-outlined.is-focused { + background-color: #0a0a0a; + border-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .button.is-black.is-outlined.is-loading::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; } + html.theme--documenter-dark .button.is-black.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-black.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent white white !important; } + html.theme--documenter-dark .button.is-black.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-black.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + box-shadow: none; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-black.is-inverted.is-outlined { + background-color: transparent; + border-color: white; + color: white; } + html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-focused { + background-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; } + html.theme--documenter-dark .button.is-black.is-inverted.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted.is-outlined { + background-color: transparent; + border-color: white; + box-shadow: none; + color: white; } + html.theme--documenter-dark .button.is-light { + background-color: #ecf0f1; + border-color: transparent; + color: #282f2f; } + html.theme--documenter-dark .button.is-light:hover, html.theme--documenter-dark .button.is-light.is-hovered { + background-color: #e5eaec; + border-color: transparent; + color: #282f2f; } + html.theme--documenter-dark .button.is-light:focus, html.theme--documenter-dark .button.is-light.is-focused { + border-color: transparent; + color: #282f2f; } + html.theme--documenter-dark .button.is-light:focus:not(:active), html.theme--documenter-dark .button.is-light.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(236, 240, 241, 0.25); } + html.theme--documenter-dark .button.is-light:active, html.theme--documenter-dark .button.is-light.is-active { + background-color: #dde4e6; + border-color: transparent; + color: #282f2f; } + html.theme--documenter-dark .button.is-light[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-light { + background-color: #ecf0f1; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-light.is-inverted { + background-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-light.is-inverted:hover, html.theme--documenter-dark .button.is-light.is-inverted.is-hovered { + background-color: #1d2122; } + html.theme--documenter-dark .button.is-light.is-inverted[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted { + background-color: #282f2f; + border-color: transparent; + box-shadow: none; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-light.is-loading::after { + border-color: transparent transparent #282f2f #282f2f !important; } + html.theme--documenter-dark .button.is-light.is-outlined { + background-color: transparent; + border-color: #ecf0f1; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-light.is-outlined:hover, html.theme--documenter-dark .button.is-light.is-outlined.is-hovered, html.theme--documenter-dark .button.is-light.is-outlined:focus, html.theme--documenter-dark .button.is-light.is-outlined.is-focused { + background-color: #ecf0f1; + border-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .button.is-light.is-outlined.is-loading::after { + border-color: transparent transparent #ecf0f1 #ecf0f1 !important; } + html.theme--documenter-dark .button.is-light.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-light.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #282f2f #282f2f !important; } + html.theme--documenter-dark .button.is-light.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-light.is-outlined { + background-color: transparent; + border-color: #ecf0f1; + box-shadow: none; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-light.is-inverted.is-outlined { + background-color: transparent; + border-color: #282f2f; + color: #282f2f; } + html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-focused { + background-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #ecf0f1 #ecf0f1 !important; } + html.theme--documenter-dark .button.is-light.is-inverted.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted.is-outlined { + background-color: transparent; + border-color: #282f2f; + box-shadow: none; + color: #282f2f; } + html.theme--documenter-dark .button.is-dark, html.theme--documenter-dark .content kbd.button { + background-color: #282f2f; + border-color: transparent; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-dark:hover, html.theme--documenter-dark .content kbd.button:hover, html.theme--documenter-dark .button.is-dark.is-hovered, html.theme--documenter-dark .content kbd.button.is-hovered { + background-color: #232829; + border-color: transparent; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-dark:focus, html.theme--documenter-dark .content kbd.button:focus, html.theme--documenter-dark .button.is-dark.is-focused, html.theme--documenter-dark .content kbd.button.is-focused { + border-color: transparent; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-dark:focus:not(:active), html.theme--documenter-dark .content kbd.button:focus:not(:active), html.theme--documenter-dark .button.is-dark.is-focused:not(:active), html.theme--documenter-dark .content kbd.button.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(40, 47, 47, 0.25); } + html.theme--documenter-dark .button.is-dark:active, html.theme--documenter-dark .content kbd.button:active, html.theme--documenter-dark .button.is-dark.is-active, html.theme--documenter-dark .content kbd.button.is-active { + background-color: #1d2122; + border-color: transparent; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-dark[disabled], html.theme--documenter-dark .content kbd.button[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-dark, + fieldset[disabled] html.theme--documenter-dark .content kbd.button { + background-color: #282f2f; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-dark.is-inverted, html.theme--documenter-dark .content kbd.button.is-inverted { + background-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .button.is-dark.is-inverted:hover, html.theme--documenter-dark .content kbd.button.is-inverted:hover, html.theme--documenter-dark .button.is-dark.is-inverted.is-hovered, html.theme--documenter-dark .content kbd.button.is-inverted.is-hovered { + background-color: #dde4e6; } + html.theme--documenter-dark .button.is-dark.is-inverted[disabled], html.theme--documenter-dark .content kbd.button.is-inverted[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted, + fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted { + background-color: #ecf0f1; + border-color: transparent; + box-shadow: none; + color: #282f2f; } + html.theme--documenter-dark .button.is-dark.is-loading::after, html.theme--documenter-dark .content kbd.button.is-loading::after { + border-color: transparent transparent #ecf0f1 #ecf0f1 !important; } + html.theme--documenter-dark .button.is-dark.is-outlined, html.theme--documenter-dark .content kbd.button.is-outlined { + background-color: transparent; + border-color: #282f2f; + color: #282f2f; } + html.theme--documenter-dark .button.is-dark.is-outlined:hover, html.theme--documenter-dark .content kbd.button.is-outlined:hover, html.theme--documenter-dark .button.is-dark.is-outlined.is-hovered, html.theme--documenter-dark .content kbd.button.is-outlined.is-hovered, html.theme--documenter-dark .button.is-dark.is-outlined:focus, html.theme--documenter-dark .content kbd.button.is-outlined:focus, html.theme--documenter-dark .button.is-dark.is-outlined.is-focused, html.theme--documenter-dark .content kbd.button.is-outlined.is-focused { + background-color: #282f2f; + border-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-dark.is-outlined.is-loading::after, html.theme--documenter-dark .content kbd.button.is-outlined.is-loading::after { + border-color: transparent transparent #282f2f #282f2f !important; } + html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:hover::after, html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:focus::after, html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-focused::after, html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #ecf0f1 #ecf0f1 !important; } + html.theme--documenter-dark .button.is-dark.is-outlined[disabled], html.theme--documenter-dark .content kbd.button.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-outlined, + fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-outlined { + background-color: transparent; + border-color: #282f2f; + box-shadow: none; + color: #282f2f; } + html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined { + background-color: transparent; + border-color: #ecf0f1; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:hover, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:focus, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-focused, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-focused { + background-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #282f2f #282f2f !important; } + html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined[disabled], html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined, + fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined { + background-color: transparent; + border-color: #ecf0f1; + box-shadow: none; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-primary, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink { + background-color: #375a7f; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-primary:hover, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:hover, html.theme--documenter-dark .button.is-primary.is-hovered, html.theme--documenter-dark .docstring > section > a.button.is-hovered.docs-sourcelink { + background-color: #335476; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-primary:focus, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:focus, html.theme--documenter-dark .button.is-primary.is-focused, html.theme--documenter-dark .docstring > section > a.button.is-focused.docs-sourcelink { + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-primary:focus:not(:active), html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:focus:not(:active), html.theme--documenter-dark .button.is-primary.is-focused:not(:active), html.theme--documenter-dark .docstring > section > a.button.is-focused.docs-sourcelink:not(:active) { + box-shadow: 0 0 0 0.125em rgba(55, 90, 127, 0.25); } + html.theme--documenter-dark .button.is-primary:active, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:active, html.theme--documenter-dark .button.is-primary.is-active, html.theme--documenter-dark .docstring > section > a.button.is-active.docs-sourcelink { + background-color: #2f4d6d; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-primary[disabled], html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-primary, + fieldset[disabled] html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink { + background-color: #375a7f; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-primary.is-inverted, html.theme--documenter-dark .docstring > section > a.button.is-inverted.docs-sourcelink { + background-color: #fff; + color: #375a7f; } + html.theme--documenter-dark .button.is-primary.is-inverted:hover, html.theme--documenter-dark .docstring > section > a.button.is-inverted.docs-sourcelink:hover, html.theme--documenter-dark .button.is-primary.is-inverted.is-hovered, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-hovered.docs-sourcelink { + background-color: #f2f2f2; } + html.theme--documenter-dark .button.is-primary.is-inverted[disabled], html.theme--documenter-dark .docstring > section > a.button.is-inverted.docs-sourcelink[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted, + fieldset[disabled] html.theme--documenter-dark .docstring > section > a.button.is-inverted.docs-sourcelink { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #375a7f; } + html.theme--documenter-dark .button.is-primary.is-loading::after, html.theme--documenter-dark .docstring > section > a.button.is-loading.docs-sourcelink::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-primary.is-outlined, html.theme--documenter-dark .docstring > section > a.button.is-outlined.docs-sourcelink { + background-color: transparent; + border-color: #375a7f; + color: #375a7f; } + html.theme--documenter-dark .button.is-primary.is-outlined:hover, html.theme--documenter-dark .docstring > section > a.button.is-outlined.docs-sourcelink:hover, html.theme--documenter-dark .button.is-primary.is-outlined.is-hovered, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-hovered.docs-sourcelink, html.theme--documenter-dark .button.is-primary.is-outlined:focus, html.theme--documenter-dark .docstring > section > a.button.is-outlined.docs-sourcelink:focus, html.theme--documenter-dark .button.is-primary.is-outlined.is-focused, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-focused.docs-sourcelink { + background-color: #375a7f; + border-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .button.is-primary.is-outlined.is-loading::after, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-loading.docs-sourcelink::after { + border-color: transparent transparent #375a7f #375a7f !important; } + html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:hover::after, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-loading.docs-sourcelink:hover::after, html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after, html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:focus::after, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-loading.docs-sourcelink:focus::after, html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-focused::after, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-primary.is-outlined[disabled], html.theme--documenter-dark .docstring > section > a.button.is-outlined.docs-sourcelink[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-outlined, + fieldset[disabled] html.theme--documenter-dark .docstring > section > a.button.is-outlined.docs-sourcelink { + background-color: transparent; + border-color: #375a7f; + box-shadow: none; + color: #375a7f; } + html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink { + background-color: transparent; + border-color: #fff; + color: #fff; } + html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:hover, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink:hover, html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink, html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:focus, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink:focus, html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-focused, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.is-focused.docs-sourcelink { + background-color: #fff; + color: #375a7f; } + html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after, html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after, html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after, html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after { + border-color: transparent transparent #375a7f #375a7f !important; } + html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined[disabled], html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined, + fieldset[disabled] html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + html.theme--documenter-dark .button.is-link { + background-color: #1abc9c; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-link:hover, html.theme--documenter-dark .button.is-link.is-hovered { + background-color: #18b193; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-link:focus, html.theme--documenter-dark .button.is-link.is-focused { + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-link:focus:not(:active), html.theme--documenter-dark .button.is-link.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + html.theme--documenter-dark .button.is-link:active, html.theme--documenter-dark .button.is-link.is-active { + background-color: #17a689; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-link[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-link { + background-color: #1abc9c; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-link.is-inverted { + background-color: #fff; + color: #1abc9c; } + html.theme--documenter-dark .button.is-link.is-inverted:hover, html.theme--documenter-dark .button.is-link.is-inverted.is-hovered { + background-color: #f2f2f2; } + html.theme--documenter-dark .button.is-link.is-inverted[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #1abc9c; } + html.theme--documenter-dark .button.is-link.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-link.is-outlined { + background-color: transparent; + border-color: #1abc9c; + color: #1abc9c; } + html.theme--documenter-dark .button.is-link.is-outlined:hover, html.theme--documenter-dark .button.is-link.is-outlined.is-hovered, html.theme--documenter-dark .button.is-link.is-outlined:focus, html.theme--documenter-dark .button.is-link.is-outlined.is-focused { + background-color: #1abc9c; + border-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .button.is-link.is-outlined.is-loading::after { + border-color: transparent transparent #1abc9c #1abc9c !important; } + html.theme--documenter-dark .button.is-link.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-link.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-link.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-link.is-outlined { + background-color: transparent; + border-color: #1abc9c; + box-shadow: none; + color: #1abc9c; } + html.theme--documenter-dark .button.is-link.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #1abc9c; } + html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #1abc9c #1abc9c !important; } + html.theme--documenter-dark .button.is-link.is-inverted.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + html.theme--documenter-dark .button.is-info { + background-color: #024c7d; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-info:hover, html.theme--documenter-dark .button.is-info.is-hovered { + background-color: #024470; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-info:focus, html.theme--documenter-dark .button.is-info.is-focused { + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-info:focus:not(:active), html.theme--documenter-dark .button.is-info.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(2, 76, 125, 0.25); } + html.theme--documenter-dark .button.is-info:active, html.theme--documenter-dark .button.is-info.is-active { + background-color: #023d64; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-info[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-info { + background-color: #024c7d; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-info.is-inverted { + background-color: #fff; + color: #024c7d; } + html.theme--documenter-dark .button.is-info.is-inverted:hover, html.theme--documenter-dark .button.is-info.is-inverted.is-hovered { + background-color: #f2f2f2; } + html.theme--documenter-dark .button.is-info.is-inverted[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #024c7d; } + html.theme--documenter-dark .button.is-info.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-info.is-outlined { + background-color: transparent; + border-color: #024c7d; + color: #024c7d; } + html.theme--documenter-dark .button.is-info.is-outlined:hover, html.theme--documenter-dark .button.is-info.is-outlined.is-hovered, html.theme--documenter-dark .button.is-info.is-outlined:focus, html.theme--documenter-dark .button.is-info.is-outlined.is-focused { + background-color: #024c7d; + border-color: #024c7d; + color: #fff; } + html.theme--documenter-dark .button.is-info.is-outlined.is-loading::after { + border-color: transparent transparent #024c7d #024c7d !important; } + html.theme--documenter-dark .button.is-info.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-info.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-info.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-info.is-outlined { + background-color: transparent; + border-color: #024c7d; + box-shadow: none; + color: #024c7d; } + html.theme--documenter-dark .button.is-info.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #024c7d; } + html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #024c7d #024c7d !important; } + html.theme--documenter-dark .button.is-info.is-inverted.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + html.theme--documenter-dark .button.is-success { + background-color: #008438; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-success:hover, html.theme--documenter-dark .button.is-success.is-hovered { + background-color: #007733; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-success:focus, html.theme--documenter-dark .button.is-success.is-focused { + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-success:focus:not(:active), html.theme--documenter-dark .button.is-success.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(0, 132, 56, 0.25); } + html.theme--documenter-dark .button.is-success:active, html.theme--documenter-dark .button.is-success.is-active { + background-color: #006b2d; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-success[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-success { + background-color: #008438; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-success.is-inverted { + background-color: #fff; + color: #008438; } + html.theme--documenter-dark .button.is-success.is-inverted:hover, html.theme--documenter-dark .button.is-success.is-inverted.is-hovered { + background-color: #f2f2f2; } + html.theme--documenter-dark .button.is-success.is-inverted[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #008438; } + html.theme--documenter-dark .button.is-success.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-success.is-outlined { + background-color: transparent; + border-color: #008438; + color: #008438; } + html.theme--documenter-dark .button.is-success.is-outlined:hover, html.theme--documenter-dark .button.is-success.is-outlined.is-hovered, html.theme--documenter-dark .button.is-success.is-outlined:focus, html.theme--documenter-dark .button.is-success.is-outlined.is-focused { + background-color: #008438; + border-color: #008438; + color: #fff; } + html.theme--documenter-dark .button.is-success.is-outlined.is-loading::after { + border-color: transparent transparent #008438 #008438 !important; } + html.theme--documenter-dark .button.is-success.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-success.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-success.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-success.is-outlined { + background-color: transparent; + border-color: #008438; + box-shadow: none; + color: #008438; } + html.theme--documenter-dark .button.is-success.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #008438; } + html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #008438 #008438 !important; } + html.theme--documenter-dark .button.is-success.is-inverted.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + html.theme--documenter-dark .button.is-warning { + background-color: #ad8100; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-warning:hover, html.theme--documenter-dark .button.is-warning.is-hovered { + background-color: #a07700; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-warning:focus, html.theme--documenter-dark .button.is-warning.is-focused { + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-warning:focus:not(:active), html.theme--documenter-dark .button.is-warning.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(173, 129, 0, 0.25); } + html.theme--documenter-dark .button.is-warning:active, html.theme--documenter-dark .button.is-warning.is-active { + background-color: #946e00; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-warning[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-warning { + background-color: #ad8100; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-warning.is-inverted { + background-color: #fff; + color: #ad8100; } + html.theme--documenter-dark .button.is-warning.is-inverted:hover, html.theme--documenter-dark .button.is-warning.is-inverted.is-hovered { + background-color: #f2f2f2; } + html.theme--documenter-dark .button.is-warning.is-inverted[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #ad8100; } + html.theme--documenter-dark .button.is-warning.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-warning.is-outlined { + background-color: transparent; + border-color: #ad8100; + color: #ad8100; } + html.theme--documenter-dark .button.is-warning.is-outlined:hover, html.theme--documenter-dark .button.is-warning.is-outlined.is-hovered, html.theme--documenter-dark .button.is-warning.is-outlined:focus, html.theme--documenter-dark .button.is-warning.is-outlined.is-focused { + background-color: #ad8100; + border-color: #ad8100; + color: #fff; } + html.theme--documenter-dark .button.is-warning.is-outlined.is-loading::after { + border-color: transparent transparent #ad8100 #ad8100 !important; } + html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-warning.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-outlined { + background-color: transparent; + border-color: #ad8100; + box-shadow: none; + color: #ad8100; } + html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #ad8100; } + html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #ad8100 #ad8100 !important; } + html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + html.theme--documenter-dark .button.is-danger { + background-color: #9e1b0d; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-danger:hover, html.theme--documenter-dark .button.is-danger.is-hovered { + background-color: #92190c; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-danger:focus, html.theme--documenter-dark .button.is-danger.is-focused { + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-danger:focus:not(:active), html.theme--documenter-dark .button.is-danger.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(158, 27, 13, 0.25); } + html.theme--documenter-dark .button.is-danger:active, html.theme--documenter-dark .button.is-danger.is-active { + background-color: #86170b; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-danger[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-danger { + background-color: #9e1b0d; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-danger.is-inverted { + background-color: #fff; + color: #9e1b0d; } + html.theme--documenter-dark .button.is-danger.is-inverted:hover, html.theme--documenter-dark .button.is-danger.is-inverted.is-hovered { + background-color: #f2f2f2; } + html.theme--documenter-dark .button.is-danger.is-inverted[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #9e1b0d; } + html.theme--documenter-dark .button.is-danger.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-danger.is-outlined { + background-color: transparent; + border-color: #9e1b0d; + color: #9e1b0d; } + html.theme--documenter-dark .button.is-danger.is-outlined:hover, html.theme--documenter-dark .button.is-danger.is-outlined.is-hovered, html.theme--documenter-dark .button.is-danger.is-outlined:focus, html.theme--documenter-dark .button.is-danger.is-outlined.is-focused { + background-color: #9e1b0d; + border-color: #9e1b0d; + color: #fff; } + html.theme--documenter-dark .button.is-danger.is-outlined.is-loading::after { + border-color: transparent transparent #9e1b0d #9e1b0d !important; } + html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-danger.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-outlined { + background-color: transparent; + border-color: #9e1b0d; + box-shadow: none; + color: #9e1b0d; } + html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #9e1b0d; } + html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #9e1b0d #9e1b0d !important; } + html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + html.theme--documenter-dark .button.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.button { + border-radius: 3px; + font-size: 0.85em; } + html.theme--documenter-dark .button.is-normal { + font-size: 15px; } + html.theme--documenter-dark .button.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .button.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .button[disabled], + fieldset[disabled] html.theme--documenter-dark .button { + background-color: #8c9b9d; + border-color: #dbdee0; + box-shadow: none; + opacity: 0.5; } + html.theme--documenter-dark .button.is-fullwidth { + display: flex; + width: 100%; } + html.theme--documenter-dark .button.is-loading { + color: transparent !important; + pointer-events: none; } + html.theme--documenter-dark .button.is-loading::after { + position: absolute; + left: calc(50% - (1em / 2)); + top: calc(50% - (1em / 2)); + position: absolute !important; } + html.theme--documenter-dark .button.is-static { + background-color: #282f2f; + border-color: #5e6d6f; + color: #dbdee0; + box-shadow: none; + pointer-events: none; } + html.theme--documenter-dark .button.is-rounded, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.button { + border-radius: 290486px; + padding-left: 1em; + padding-right: 1em; } + html.theme--documenter-dark .buttons { + align-items: center; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; } + html.theme--documenter-dark .buttons .button { + margin-bottom: 0.5rem; } + html.theme--documenter-dark .buttons .button:not(:last-child):not(.is-fullwidth) { + margin-right: 0.5rem; } + html.theme--documenter-dark .buttons:last-child { + margin-bottom: -0.5rem; } + html.theme--documenter-dark .buttons:not(:last-child) { + margin-bottom: 1rem; } + html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large) { + border-radius: 3px; + font-size: 0.85em; } + html.theme--documenter-dark .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large) { + font-size: 1.25rem; } + html.theme--documenter-dark .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium) { + font-size: 1.5rem; } + html.theme--documenter-dark .buttons.has-addons .button:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + html.theme--documenter-dark .buttons.has-addons .button:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + margin-right: -1px; } + html.theme--documenter-dark .buttons.has-addons .button:last-child { + margin-right: 0; } + html.theme--documenter-dark .buttons.has-addons .button:hover, html.theme--documenter-dark .buttons.has-addons .button.is-hovered { + z-index: 2; } + html.theme--documenter-dark .buttons.has-addons .button:focus, html.theme--documenter-dark .buttons.has-addons .button.is-focused, html.theme--documenter-dark .buttons.has-addons .button:active, html.theme--documenter-dark .buttons.has-addons .button.is-active, html.theme--documenter-dark .buttons.has-addons .button.is-selected { + z-index: 3; } + html.theme--documenter-dark .buttons.has-addons .button:focus:hover, html.theme--documenter-dark .buttons.has-addons .button.is-focused:hover, html.theme--documenter-dark .buttons.has-addons .button:active:hover, html.theme--documenter-dark .buttons.has-addons .button.is-active:hover, html.theme--documenter-dark .buttons.has-addons .button.is-selected:hover { + z-index: 4; } + html.theme--documenter-dark .buttons.has-addons .button.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + html.theme--documenter-dark .buttons.is-centered { + justify-content: center; } + html.theme--documenter-dark .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth) { + margin-left: 0.25rem; + margin-right: 0.25rem; } + html.theme--documenter-dark .buttons.is-right { + justify-content: flex-end; } + html.theme--documenter-dark .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth) { + margin-left: 0.25rem; + margin-right: 0.25rem; } + html.theme--documenter-dark .container { + flex-grow: 1; + margin: 0 auto; + position: relative; + width: auto; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .container { + max-width: 992px; } + html.theme--documenter-dark .container.is-fluid { + margin-left: 32px; + margin-right: 32px; + max-width: none; } } + @media screen and (max-width: 1215px) { + html.theme--documenter-dark .container.is-widescreen { + max-width: 1152px; } } + @media screen and (max-width: 1407px) { + html.theme--documenter-dark .container.is-fullhd { + max-width: 1344px; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .container { + max-width: 1152px; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .container { + max-width: 1344px; } } + html.theme--documenter-dark .content li + li { + margin-top: 0.25em; } + html.theme--documenter-dark .content p:not(:last-child), + html.theme--documenter-dark .content dl:not(:last-child), + html.theme--documenter-dark .content ol:not(:last-child), + html.theme--documenter-dark .content ul:not(:last-child), + html.theme--documenter-dark .content blockquote:not(:last-child), + html.theme--documenter-dark .content pre:not(:last-child), + html.theme--documenter-dark .content table:not(:last-child) { + margin-bottom: 1em; } + html.theme--documenter-dark .content h1, + html.theme--documenter-dark .content h2, + html.theme--documenter-dark .content h3, + html.theme--documenter-dark .content h4, + html.theme--documenter-dark .content h5, + html.theme--documenter-dark .content h6 { + color: #f2f2f2; + font-weight: 600; + line-height: 1.125; } + html.theme--documenter-dark .content h1 { + font-size: 2em; + margin-bottom: 0.5em; } + html.theme--documenter-dark .content h1:not(:first-child) { + margin-top: 1em; } + html.theme--documenter-dark .content h2 { + font-size: 1.75em; + margin-bottom: 0.5714em; } + html.theme--documenter-dark .content h2:not(:first-child) { + margin-top: 1.1428em; } + html.theme--documenter-dark .content h3 { + font-size: 1.5em; + margin-bottom: 0.6666em; } + html.theme--documenter-dark .content h3:not(:first-child) { + margin-top: 1.3333em; } + html.theme--documenter-dark .content h4 { + font-size: 1.25em; + margin-bottom: 0.8em; } + html.theme--documenter-dark .content h5 { + font-size: 1.125em; + margin-bottom: 0.8888em; } + html.theme--documenter-dark .content h6 { + font-size: 1em; + margin-bottom: 1em; } + html.theme--documenter-dark .content blockquote { + background-color: #282f2f; + border-left: 5px solid #5e6d6f; + padding: 1.25em 1.5em; } + html.theme--documenter-dark .content ol { + list-style-position: outside; + margin-left: 2em; + margin-top: 1em; } + html.theme--documenter-dark .content ol:not([type]) { + list-style-type: decimal; } + html.theme--documenter-dark .content ol:not([type]).is-lower-alpha { + list-style-type: lower-alpha; } + html.theme--documenter-dark .content ol:not([type]).is-lower-roman { + list-style-type: lower-roman; } + html.theme--documenter-dark .content ol:not([type]).is-upper-alpha { + list-style-type: upper-alpha; } + html.theme--documenter-dark .content ol:not([type]).is-upper-roman { + list-style-type: upper-roman; } + html.theme--documenter-dark .content ul { + list-style: disc outside; + margin-left: 2em; + margin-top: 1em; } + html.theme--documenter-dark .content ul ul { + list-style-type: circle; + margin-top: 0.5em; } + html.theme--documenter-dark .content ul ul ul { + list-style-type: square; } + html.theme--documenter-dark .content dd { + margin-left: 2em; } + html.theme--documenter-dark .content figure { + margin-left: 2em; + margin-right: 2em; + text-align: center; } + html.theme--documenter-dark .content figure:not(:first-child) { + margin-top: 2em; } + html.theme--documenter-dark .content figure:not(:last-child) { + margin-bottom: 2em; } + html.theme--documenter-dark .content figure img { + display: inline-block; } + html.theme--documenter-dark .content figure figcaption { + font-style: italic; } + html.theme--documenter-dark .content pre { + -webkit-overflow-scrolling: touch; + overflow-x: auto; + padding: 0.7rem 0.5rem; + white-space: pre; + word-wrap: normal; } + html.theme--documenter-dark .content sup, + html.theme--documenter-dark .content sub { + font-size: 75%; } + html.theme--documenter-dark .content table { + width: 100%; } + html.theme--documenter-dark .content table td, + html.theme--documenter-dark .content table th { + border: 1px solid #5e6d6f; + border-width: 0 0 1px; + padding: 0.5em 0.75em; + vertical-align: top; } + html.theme--documenter-dark .content table th { + color: #f2f2f2; } + html.theme--documenter-dark .content table th:not([align]) { + text-align: left; } + html.theme--documenter-dark .content table thead td, + html.theme--documenter-dark .content table thead th { + border-width: 0 0 2px; + color: #f2f2f2; } + html.theme--documenter-dark .content table tfoot td, + html.theme--documenter-dark .content table tfoot th { + border-width: 2px 0 0; + color: #f2f2f2; } + html.theme--documenter-dark .content table tbody tr:last-child td, + html.theme--documenter-dark .content table tbody tr:last-child th { + border-bottom-width: 0; } + html.theme--documenter-dark .content .tabs li + li { + margin-top: 0; } + html.theme--documenter-dark .content.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.content { + font-size: 0.85em; } + html.theme--documenter-dark .content.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .content.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .icon { + align-items: center; + display: inline-flex; + justify-content: center; + height: 1.5rem; + width: 1.5rem; } + html.theme--documenter-dark .icon.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.icon { + height: 1rem; + width: 1rem; } + html.theme--documenter-dark .icon.is-medium { + height: 2rem; + width: 2rem; } + html.theme--documenter-dark .icon.is-large { + height: 3rem; + width: 3rem; } + html.theme--documenter-dark .image, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img { + display: block; + position: relative; } + html.theme--documenter-dark .image img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img img { + display: block; + height: auto; + width: 100%; } + html.theme--documenter-dark .image img.is-rounded, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img img.is-rounded { + border-radius: 290486px; } + html.theme--documenter-dark .image.is-square img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square img, + html.theme--documenter-dark .image.is-square .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, html.theme--documenter-dark .image.is-1by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 img, + html.theme--documenter-dark .image.is-1by1 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, html.theme--documenter-dark .image.is-5by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 img, + html.theme--documenter-dark .image.is-5by4 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, html.theme--documenter-dark .image.is-4by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 img, + html.theme--documenter-dark .image.is-4by3 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, html.theme--documenter-dark .image.is-3by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 img, + html.theme--documenter-dark .image.is-3by2 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, html.theme--documenter-dark .image.is-5by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 img, + html.theme--documenter-dark .image.is-5by3 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, html.theme--documenter-dark .image.is-16by9 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 img, + html.theme--documenter-dark .image.is-16by9 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, html.theme--documenter-dark .image.is-2by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 img, + html.theme--documenter-dark .image.is-2by1 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, html.theme--documenter-dark .image.is-3by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 img, + html.theme--documenter-dark .image.is-3by1 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, html.theme--documenter-dark .image.is-4by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 img, + html.theme--documenter-dark .image.is-4by5 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, html.theme--documenter-dark .image.is-3by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 img, + html.theme--documenter-dark .image.is-3by4 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, html.theme--documenter-dark .image.is-2by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 img, + html.theme--documenter-dark .image.is-2by3 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, html.theme--documenter-dark .image.is-3by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 img, + html.theme--documenter-dark .image.is-3by5 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, html.theme--documenter-dark .image.is-9by16 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 img, + html.theme--documenter-dark .image.is-9by16 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, html.theme--documenter-dark .image.is-1by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 img, + html.theme--documenter-dark .image.is-1by2 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, html.theme--documenter-dark .image.is-1by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 img, + html.theme--documenter-dark .image.is-1by3 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio { + height: 100%; + width: 100%; } + html.theme--documenter-dark .image.is-square, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square, html.theme--documenter-dark .image.is-1by1, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 { + padding-top: 100%; } + html.theme--documenter-dark .image.is-5by4, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 { + padding-top: 80%; } + html.theme--documenter-dark .image.is-4by3, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 { + padding-top: 75%; } + html.theme--documenter-dark .image.is-3by2, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 { + padding-top: 66.6666%; } + html.theme--documenter-dark .image.is-5by3, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 { + padding-top: 60%; } + html.theme--documenter-dark .image.is-16by9, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 { + padding-top: 56.25%; } + html.theme--documenter-dark .image.is-2by1, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 { + padding-top: 50%; } + html.theme--documenter-dark .image.is-3by1, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 { + padding-top: 33.3333%; } + html.theme--documenter-dark .image.is-4by5, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 { + padding-top: 125%; } + html.theme--documenter-dark .image.is-3by4, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 { + padding-top: 133.3333%; } + html.theme--documenter-dark .image.is-2by3, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 { + padding-top: 150%; } + html.theme--documenter-dark .image.is-3by5, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 { + padding-top: 166.6666%; } + html.theme--documenter-dark .image.is-9by16, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 { + padding-top: 177.7777%; } + html.theme--documenter-dark .image.is-1by2, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 { + padding-top: 200%; } + html.theme--documenter-dark .image.is-1by3, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 { + padding-top: 300%; } + html.theme--documenter-dark .image.is-16x16, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16x16 { + height: 16px; + width: 16px; } + html.theme--documenter-dark .image.is-24x24, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-24x24 { + height: 24px; + width: 24px; } + html.theme--documenter-dark .image.is-32x32, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-32x32 { + height: 32px; + width: 32px; } + html.theme--documenter-dark .image.is-48x48, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-48x48 { + height: 48px; + width: 48px; } + html.theme--documenter-dark .image.is-64x64, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-64x64 { + height: 64px; + width: 64px; } + html.theme--documenter-dark .image.is-96x96, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-96x96 { + height: 96px; + width: 96px; } + html.theme--documenter-dark .image.is-128x128, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-128x128 { + height: 128px; + width: 128px; } + html.theme--documenter-dark .notification { + background-color: #282f2f; + border-radius: 0.4em; + padding: 1.25rem 2.5rem 1.25rem 1.5rem; + position: relative; } + html.theme--documenter-dark .notification a:not(.button):not(.dropdown-item) { + color: currentColor; + text-decoration: underline; } + html.theme--documenter-dark .notification strong { + color: currentColor; } + html.theme--documenter-dark .notification code, + html.theme--documenter-dark .notification pre { + background: white; } + html.theme--documenter-dark .notification pre code { + background: transparent; } + html.theme--documenter-dark .notification > .delete { + position: absolute; + right: 0.5rem; + top: 0.5rem; } + html.theme--documenter-dark .notification .title, + html.theme--documenter-dark .notification .subtitle, + html.theme--documenter-dark .notification .content { + color: currentColor; } + html.theme--documenter-dark .notification.is-white { + background-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .notification.is-black { + background-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .notification.is-light { + background-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .notification.is-dark, html.theme--documenter-dark .content kbd.notification { + background-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .notification.is-primary, html.theme--documenter-dark .docstring > section > a.notification.docs-sourcelink { + background-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .notification.is-link { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .notification.is-info { + background-color: #024c7d; + color: #fff; } + html.theme--documenter-dark .notification.is-success { + background-color: #008438; + color: #fff; } + html.theme--documenter-dark .notification.is-warning { + background-color: #ad8100; + color: #fff; } + html.theme--documenter-dark .notification.is-danger { + background-color: #9e1b0d; + color: #fff; } + html.theme--documenter-dark .progress { + -moz-appearance: none; + -webkit-appearance: none; + border: none; + border-radius: 290486px; + display: block; + height: 15px; + overflow: hidden; + padding: 0; + width: 100%; } + html.theme--documenter-dark .progress::-webkit-progress-bar { + background-color: #5e6d6f; } + html.theme--documenter-dark .progress::-webkit-progress-value { + background-color: #dbdee0; } + html.theme--documenter-dark .progress::-moz-progress-bar { + background-color: #dbdee0; } + html.theme--documenter-dark .progress::-ms-fill { + background-color: #dbdee0; + border: none; } + html.theme--documenter-dark .progress.is-white::-webkit-progress-value { + background-color: white; } + html.theme--documenter-dark .progress.is-white::-moz-progress-bar { + background-color: white; } + html.theme--documenter-dark .progress.is-white::-ms-fill { + background-color: white; } + html.theme--documenter-dark .progress.is-white:indeterminate { + background-image: linear-gradient(to right, white 30%, #5e6d6f 30%); } + html.theme--documenter-dark .progress.is-black::-webkit-progress-value { + background-color: #0a0a0a; } + html.theme--documenter-dark .progress.is-black::-moz-progress-bar { + background-color: #0a0a0a; } + html.theme--documenter-dark .progress.is-black::-ms-fill { + background-color: #0a0a0a; } + html.theme--documenter-dark .progress.is-black:indeterminate { + background-image: linear-gradient(to right, #0a0a0a 30%, #5e6d6f 30%); } + html.theme--documenter-dark .progress.is-light::-webkit-progress-value { + background-color: #ecf0f1; } + html.theme--documenter-dark .progress.is-light::-moz-progress-bar { + background-color: #ecf0f1; } + html.theme--documenter-dark .progress.is-light::-ms-fill { + background-color: #ecf0f1; } + html.theme--documenter-dark .progress.is-light:indeterminate { + background-image: linear-gradient(to right, #ecf0f1 30%, #5e6d6f 30%); } + html.theme--documenter-dark .progress.is-dark::-webkit-progress-value, html.theme--documenter-dark .content kbd.progress::-webkit-progress-value { + background-color: #282f2f; } + html.theme--documenter-dark .progress.is-dark::-moz-progress-bar, html.theme--documenter-dark .content kbd.progress::-moz-progress-bar { + background-color: #282f2f; } + html.theme--documenter-dark .progress.is-dark::-ms-fill, html.theme--documenter-dark .content kbd.progress::-ms-fill { + background-color: #282f2f; } + html.theme--documenter-dark .progress.is-dark:indeterminate, html.theme--documenter-dark .content kbd.progress:indeterminate { + background-image: linear-gradient(to right, #282f2f 30%, #5e6d6f 30%); } + html.theme--documenter-dark .progress.is-primary::-webkit-progress-value, html.theme--documenter-dark .docstring > section > a.progress.docs-sourcelink::-webkit-progress-value { + background-color: #375a7f; } + html.theme--documenter-dark .progress.is-primary::-moz-progress-bar, html.theme--documenter-dark .docstring > section > a.progress.docs-sourcelink::-moz-progress-bar { + background-color: #375a7f; } + html.theme--documenter-dark .progress.is-primary::-ms-fill, html.theme--documenter-dark .docstring > section > a.progress.docs-sourcelink::-ms-fill { + background-color: #375a7f; } + html.theme--documenter-dark .progress.is-primary:indeterminate, html.theme--documenter-dark .docstring > section > a.progress.docs-sourcelink:indeterminate { + background-image: linear-gradient(to right, #375a7f 30%, #5e6d6f 30%); } + html.theme--documenter-dark .progress.is-link::-webkit-progress-value { + background-color: #1abc9c; } + html.theme--documenter-dark .progress.is-link::-moz-progress-bar { + background-color: #1abc9c; } + html.theme--documenter-dark .progress.is-link::-ms-fill { + background-color: #1abc9c; } + html.theme--documenter-dark .progress.is-link:indeterminate { + background-image: linear-gradient(to right, #1abc9c 30%, #5e6d6f 30%); } + html.theme--documenter-dark .progress.is-info::-webkit-progress-value { + background-color: #024c7d; } + html.theme--documenter-dark .progress.is-info::-moz-progress-bar { + background-color: #024c7d; } + html.theme--documenter-dark .progress.is-info::-ms-fill { + background-color: #024c7d; } + html.theme--documenter-dark .progress.is-info:indeterminate { + background-image: linear-gradient(to right, #024c7d 30%, #5e6d6f 30%); } + html.theme--documenter-dark .progress.is-success::-webkit-progress-value { + background-color: #008438; } + html.theme--documenter-dark .progress.is-success::-moz-progress-bar { + background-color: #008438; } + html.theme--documenter-dark .progress.is-success::-ms-fill { + background-color: #008438; } + html.theme--documenter-dark .progress.is-success:indeterminate { + background-image: linear-gradient(to right, #008438 30%, #5e6d6f 30%); } + html.theme--documenter-dark .progress.is-warning::-webkit-progress-value { + background-color: #ad8100; } + html.theme--documenter-dark .progress.is-warning::-moz-progress-bar { + background-color: #ad8100; } + html.theme--documenter-dark .progress.is-warning::-ms-fill { + background-color: #ad8100; } + html.theme--documenter-dark .progress.is-warning:indeterminate { + background-image: linear-gradient(to right, #ad8100 30%, #5e6d6f 30%); } + html.theme--documenter-dark .progress.is-danger::-webkit-progress-value { + background-color: #9e1b0d; } + html.theme--documenter-dark .progress.is-danger::-moz-progress-bar { + background-color: #9e1b0d; } + html.theme--documenter-dark .progress.is-danger::-ms-fill { + background-color: #9e1b0d; } + html.theme--documenter-dark .progress.is-danger:indeterminate { + background-image: linear-gradient(to right, #9e1b0d 30%, #5e6d6f 30%); } + html.theme--documenter-dark .progress:indeterminate { + animation-duration: 1.5s; + animation-iteration-count: infinite; + animation-name: moveIndeterminate; + animation-timing-function: linear; + background-color: #5e6d6f; + background-image: linear-gradient(to right, #fff 30%, #5e6d6f 30%); + background-position: top left; + background-repeat: no-repeat; + background-size: 150% 150%; } + html.theme--documenter-dark .progress:indeterminate::-webkit-progress-bar { + background-color: transparent; } + html.theme--documenter-dark .progress:indeterminate::-moz-progress-bar { + background-color: transparent; } + html.theme--documenter-dark .progress.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.progress { + height: 0.85em; } + html.theme--documenter-dark .progress.is-medium { + height: 1.25rem; } + html.theme--documenter-dark .progress.is-large { + height: 1.5rem; } + +@keyframes moveIndeterminate { + from { + background-position: 200% 0; } + to { + background-position: -200% 0; } } + html.theme--documenter-dark .table { + background-color: #343c3d; + color: #fff; } + html.theme--documenter-dark .table td, + html.theme--documenter-dark .table th { + border: 1px solid #5e6d6f; + border-width: 0 0 1px; + padding: 0.5em 0.75em; + vertical-align: top; } + html.theme--documenter-dark .table td.is-white, + html.theme--documenter-dark .table th.is-white { + background-color: white; + border-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .table td.is-black, + html.theme--documenter-dark .table th.is-black { + background-color: #0a0a0a; + border-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .table td.is-light, + html.theme--documenter-dark .table th.is-light { + background-color: #ecf0f1; + border-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .table td.is-dark, + html.theme--documenter-dark .table th.is-dark { + background-color: #282f2f; + border-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .table td.is-primary, + html.theme--documenter-dark .table th.is-primary { + background-color: #375a7f; + border-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .table td.is-link, + html.theme--documenter-dark .table th.is-link { + background-color: #1abc9c; + border-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .table td.is-info, + html.theme--documenter-dark .table th.is-info { + background-color: #024c7d; + border-color: #024c7d; + color: #fff; } + html.theme--documenter-dark .table td.is-success, + html.theme--documenter-dark .table th.is-success { + background-color: #008438; + border-color: #008438; + color: #fff; } + html.theme--documenter-dark .table td.is-warning, + html.theme--documenter-dark .table th.is-warning { + background-color: #ad8100; + border-color: #ad8100; + color: #fff; } + html.theme--documenter-dark .table td.is-danger, + html.theme--documenter-dark .table th.is-danger { + background-color: #9e1b0d; + border-color: #9e1b0d; + color: #fff; } + html.theme--documenter-dark .table td.is-narrow, + html.theme--documenter-dark .table th.is-narrow { + white-space: nowrap; + width: 1%; } + html.theme--documenter-dark .table td.is-selected, + html.theme--documenter-dark .table th.is-selected { + background-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .table td.is-selected a, + html.theme--documenter-dark .table td.is-selected strong, + html.theme--documenter-dark .table th.is-selected a, + html.theme--documenter-dark .table th.is-selected strong { + color: currentColor; } + html.theme--documenter-dark .table th { + color: #f2f2f2; } + html.theme--documenter-dark .table th:not([align]) { + text-align: left; } + html.theme--documenter-dark .table tr.is-selected { + background-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .table tr.is-selected a, + html.theme--documenter-dark .table tr.is-selected strong { + color: currentColor; } + html.theme--documenter-dark .table tr.is-selected td, + html.theme--documenter-dark .table tr.is-selected th { + border-color: #fff; + color: currentColor; } + html.theme--documenter-dark .table thead { + background-color: transparent; } + html.theme--documenter-dark .table thead td, + html.theme--documenter-dark .table thead th { + border-width: 0 0 2px; + color: #f2f2f2; } + html.theme--documenter-dark .table tfoot { + background-color: transparent; } + html.theme--documenter-dark .table tfoot td, + html.theme--documenter-dark .table tfoot th { + border-width: 2px 0 0; + color: #f2f2f2; } + html.theme--documenter-dark .table tbody { + background-color: transparent; } + html.theme--documenter-dark .table tbody tr:last-child td, + html.theme--documenter-dark .table tbody tr:last-child th { + border-bottom-width: 0; } + html.theme--documenter-dark .table.is-bordered td, + html.theme--documenter-dark .table.is-bordered th { + border-width: 1px; } + html.theme--documenter-dark .table.is-bordered tr:last-child td, + html.theme--documenter-dark .table.is-bordered tr:last-child th { + border-bottom-width: 1px; } + html.theme--documenter-dark .table.is-fullwidth { + width: 100%; } + html.theme--documenter-dark .table.is-hoverable tbody tr:not(.is-selected):hover { + background-color: #282f2f; } + html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover { + background-color: #282f2f; } + html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even) { + background-color: #2d3435; } + html.theme--documenter-dark .table.is-narrow td, + html.theme--documenter-dark .table.is-narrow th { + padding: 0.25em 0.5em; } + html.theme--documenter-dark .table.is-striped tbody tr:not(.is-selected):nth-child(even) { + background-color: #282f2f; } + html.theme--documenter-dark .table-container { + -webkit-overflow-scrolling: touch; + overflow: auto; + overflow-y: hidden; + max-width: 100%; } + html.theme--documenter-dark .tags { + align-items: center; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; } + html.theme--documenter-dark .tags .tag, html.theme--documenter-dark .tags .docstring > section > a.docs-sourcelink, html.theme--documenter-dark .tags .content kbd, html.theme--documenter-dark .content .tags kbd { + margin-bottom: 0.5rem; } + html.theme--documenter-dark .tags .tag:not(:last-child), html.theme--documenter-dark .tags .docstring > section > a.docs-sourcelink:not(:last-child), html.theme--documenter-dark .tags .content kbd:not(:last-child), html.theme--documenter-dark .content .tags kbd:not(:last-child) { + margin-right: 0.5rem; } + html.theme--documenter-dark .tags:last-child { + margin-bottom: -0.5rem; } + html.theme--documenter-dark .tags:not(:last-child) { + margin-bottom: 1rem; } + html.theme--documenter-dark .tags.are-medium .tag:not(.is-normal):not(.is-large), html.theme--documenter-dark .tags.are-medium .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-large), html.theme--documenter-dark .tags.are-medium .content kbd:not(.is-normal):not(.is-large), html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large) { + font-size: 15px; } + html.theme--documenter-dark .tags.are-large .tag:not(.is-normal):not(.is-medium), html.theme--documenter-dark .tags.are-large .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-medium), html.theme--documenter-dark .tags.are-large .content kbd:not(.is-normal):not(.is-medium), html.theme--documenter-dark .content .tags.are-large kbd:not(.is-normal):not(.is-medium) { + font-size: 1.25rem; } + html.theme--documenter-dark .tags.is-centered { + justify-content: center; } + html.theme--documenter-dark .tags.is-centered .tag, html.theme--documenter-dark .tags.is-centered .docstring > section > a.docs-sourcelink, html.theme--documenter-dark .tags.is-centered .content kbd, html.theme--documenter-dark .content .tags.is-centered kbd { + margin-right: 0.25rem; + margin-left: 0.25rem; } + html.theme--documenter-dark .tags.is-right { + justify-content: flex-end; } + html.theme--documenter-dark .tags.is-right .tag:not(:first-child), html.theme--documenter-dark .tags.is-right .docstring > section > a.docs-sourcelink:not(:first-child), html.theme--documenter-dark .tags.is-right .content kbd:not(:first-child), html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child) { + margin-left: 0.5rem; } + html.theme--documenter-dark .tags.is-right .tag:not(:last-child), html.theme--documenter-dark .tags.is-right .docstring > section > a.docs-sourcelink:not(:last-child), html.theme--documenter-dark .tags.is-right .content kbd:not(:last-child), html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child) { + margin-right: 0; } + html.theme--documenter-dark .tags.has-addons .tag, html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink, html.theme--documenter-dark .tags.has-addons .content kbd, html.theme--documenter-dark .content .tags.has-addons kbd { + margin-right: 0; } + html.theme--documenter-dark .tags.has-addons .tag:not(:first-child), html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink:not(:first-child), html.theme--documenter-dark .tags.has-addons .content kbd:not(:first-child), html.theme--documenter-dark .content .tags.has-addons kbd:not(:first-child) { + margin-left: 0; + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + html.theme--documenter-dark .tags.has-addons .tag:not(:last-child), html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink:not(:last-child), html.theme--documenter-dark .tags.has-addons .content kbd:not(:last-child), html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + html.theme--documenter-dark .tag:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body), html.theme--documenter-dark .content kbd:not(body) { + align-items: center; + background-color: #282f2f; + border-radius: 0.4em; + color: #fff; + display: inline-flex; + font-size: 0.85em; + height: 2em; + justify-content: center; + line-height: 1.5; + padding-left: 0.75em; + padding-right: 0.75em; + white-space: nowrap; } + html.theme--documenter-dark .tag:not(body) .delete, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .delete, html.theme--documenter-dark .content kbd:not(body) .delete { + margin-left: 0.25rem; + margin-right: -0.375rem; } + html.theme--documenter-dark .tag:not(body).is-white, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-white, html.theme--documenter-dark .content kbd:not(body).is-white { + background-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .tag:not(body).is-black, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-black, html.theme--documenter-dark .content kbd:not(body).is-black { + background-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .tag:not(body).is-light, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-light, html.theme--documenter-dark .content kbd:not(body).is-light { + background-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .tag:not(body).is-dark, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-dark, html.theme--documenter-dark .content kbd:not(body) { + background-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .tag:not(body).is-primary, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body), html.theme--documenter-dark .content kbd:not(body).is-primary { + background-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .tag:not(body).is-link, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-link, html.theme--documenter-dark .content kbd:not(body).is-link { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .tag:not(body).is-info, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-info, html.theme--documenter-dark .content kbd:not(body).is-info { + background-color: #024c7d; + color: #fff; } + html.theme--documenter-dark .tag:not(body).is-success, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-success, html.theme--documenter-dark .content kbd:not(body).is-success { + background-color: #008438; + color: #fff; } + html.theme--documenter-dark .tag:not(body).is-warning, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-warning, html.theme--documenter-dark .content kbd:not(body).is-warning { + background-color: #ad8100; + color: #fff; } + html.theme--documenter-dark .tag:not(body).is-danger, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-danger, html.theme--documenter-dark .content kbd:not(body).is-danger { + background-color: #9e1b0d; + color: #fff; } + html.theme--documenter-dark .tag:not(body).is-normal, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-normal, html.theme--documenter-dark .content kbd:not(body).is-normal { + font-size: 0.85em; } + html.theme--documenter-dark .tag:not(body).is-medium, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-medium, html.theme--documenter-dark .content kbd:not(body).is-medium { + font-size: 15px; } + html.theme--documenter-dark .tag:not(body).is-large, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-large, html.theme--documenter-dark .content kbd:not(body).is-large { + font-size: 1.25rem; } + html.theme--documenter-dark .tag:not(body) .icon:first-child:not(:last-child), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:not(:last-child), html.theme--documenter-dark .content kbd:not(body) .icon:first-child:not(:last-child) { + margin-left: -0.375em; + margin-right: 0.1875em; } + html.theme--documenter-dark .tag:not(body) .icon:last-child:not(:first-child), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:last-child:not(:first-child), html.theme--documenter-dark .content kbd:not(body) .icon:last-child:not(:first-child) { + margin-left: 0.1875em; + margin-right: -0.375em; } + html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:last-child, html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child { + margin-left: -0.375em; + margin-right: -0.375em; } + html.theme--documenter-dark .tag:not(body).is-delete, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete, html.theme--documenter-dark .content kbd:not(body).is-delete { + margin-left: 1px; + padding: 0; + position: relative; + width: 2em; } + html.theme--documenter-dark .tag:not(body).is-delete::before, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete::before, html.theme--documenter-dark .content kbd:not(body).is-delete::before, html.theme--documenter-dark .tag:not(body).is-delete::after, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete::after, html.theme--documenter-dark .content kbd:not(body).is-delete::after { + background-color: currentColor; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + html.theme--documenter-dark .tag:not(body).is-delete::before, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete::before, html.theme--documenter-dark .content kbd:not(body).is-delete::before { + height: 1px; + width: 50%; } + html.theme--documenter-dark .tag:not(body).is-delete::after, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete::after, html.theme--documenter-dark .content kbd:not(body).is-delete::after { + height: 50%; + width: 1px; } + html.theme--documenter-dark .tag:not(body).is-delete:hover, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete:hover, html.theme--documenter-dark .content kbd:not(body).is-delete:hover, html.theme--documenter-dark .tag:not(body).is-delete:focus, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete:focus, html.theme--documenter-dark .content kbd:not(body).is-delete:focus { + background-color: #1d2122; } + html.theme--documenter-dark .tag:not(body).is-delete:active, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete:active, html.theme--documenter-dark .content kbd:not(body).is-delete:active { + background-color: #111414; } + html.theme--documenter-dark .tag:not(body).is-rounded, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-rounded, html.theme--documenter-dark .content kbd:not(body).is-rounded, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.tag:not(body) { + border-radius: 290486px; } + html.theme--documenter-dark a.tag:hover, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:hover { + text-decoration: underline; } + html.theme--documenter-dark .title, + html.theme--documenter-dark .subtitle { + word-break: break-word; } + html.theme--documenter-dark .title em, + html.theme--documenter-dark .title span, + html.theme--documenter-dark .subtitle em, + html.theme--documenter-dark .subtitle span { + font-weight: inherit; } + html.theme--documenter-dark .title sub, + html.theme--documenter-dark .subtitle sub { + font-size: 0.75em; } + html.theme--documenter-dark .title sup, + html.theme--documenter-dark .subtitle sup { + font-size: 0.75em; } + html.theme--documenter-dark .title .tag, html.theme--documenter-dark .title .docstring > section > a.docs-sourcelink, html.theme--documenter-dark .title .content kbd, html.theme--documenter-dark .content .title kbd, + html.theme--documenter-dark .subtitle .tag, + html.theme--documenter-dark .subtitle .docstring > section > a.docs-sourcelink, + html.theme--documenter-dark .subtitle .content kbd, + html.theme--documenter-dark .content .subtitle kbd { + vertical-align: middle; } + html.theme--documenter-dark .title { + color: #fff; + font-size: 2rem; + font-weight: 500; + line-height: 1.125; } + html.theme--documenter-dark .title strong { + color: inherit; + font-weight: inherit; } + html.theme--documenter-dark .title + .highlight { + margin-top: -0.75rem; } + html.theme--documenter-dark .title:not(.is-spaced) + .subtitle { + margin-top: -1.25rem; } + html.theme--documenter-dark .title.is-1 { + font-size: 3rem; } + html.theme--documenter-dark .title.is-2 { + font-size: 2.5rem; } + html.theme--documenter-dark .title.is-3 { + font-size: 2rem; } + html.theme--documenter-dark .title.is-4 { + font-size: 1.5rem; } + html.theme--documenter-dark .title.is-5 { + font-size: 1.25rem; } + html.theme--documenter-dark .title.is-6 { + font-size: 15px; } + html.theme--documenter-dark .title.is-7 { + font-size: 0.85em; } + html.theme--documenter-dark .subtitle { + color: #8c9b9d; + font-size: 1.25rem; + font-weight: 400; + line-height: 1.25; } + html.theme--documenter-dark .subtitle strong { + color: #8c9b9d; + font-weight: 600; } + html.theme--documenter-dark .subtitle:not(.is-spaced) + .title { + margin-top: -1.25rem; } + html.theme--documenter-dark .subtitle.is-1 { + font-size: 3rem; } + html.theme--documenter-dark .subtitle.is-2 { + font-size: 2.5rem; } + html.theme--documenter-dark .subtitle.is-3 { + font-size: 2rem; } + html.theme--documenter-dark .subtitle.is-4 { + font-size: 1.5rem; } + html.theme--documenter-dark .subtitle.is-5 { + font-size: 1.25rem; } + html.theme--documenter-dark .subtitle.is-6 { + font-size: 15px; } + html.theme--documenter-dark .subtitle.is-7 { + font-size: 0.85em; } + html.theme--documenter-dark .heading { + display: block; + font-size: 11px; + letter-spacing: 1px; + margin-bottom: 5px; + text-transform: uppercase; } + html.theme--documenter-dark .highlight { + font-weight: 400; + max-width: 100%; + overflow: hidden; + padding: 0; } + html.theme--documenter-dark .highlight pre { + overflow: auto; + max-width: 100%; } + html.theme--documenter-dark .number { + align-items: center; + background-color: #282f2f; + border-radius: 290486px; + display: inline-flex; + font-size: 1.25rem; + height: 2em; + justify-content: center; + margin-right: 1.5rem; + min-width: 2.5em; + padding: 0.25rem 0.5rem; + text-align: center; + vertical-align: top; } + html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark .textarea, html.theme--documenter-dark .select select { + background-color: #1f2424; + border-color: #5e6d6f; + border-radius: 0.4em; + color: #dbdee0; } + html.theme--documenter-dark .input::-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-moz-placeholder, html.theme--documenter-dark .textarea::-moz-placeholder, html.theme--documenter-dark .select select::-moz-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .input::-webkit-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder, html.theme--documenter-dark .textarea::-webkit-input-placeholder, html.theme--documenter-dark .select select::-webkit-input-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .input:-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-moz-placeholder, html.theme--documenter-dark .textarea:-moz-placeholder, html.theme--documenter-dark .select select:-moz-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .input:-ms-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder, html.theme--documenter-dark .textarea:-ms-input-placeholder, html.theme--documenter-dark .select select:-ms-input-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .input:hover, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:hover, html.theme--documenter-dark .textarea:hover, html.theme--documenter-dark .select select:hover, html.theme--documenter-dark .is-hovered.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-hovered, html.theme--documenter-dark .is-hovered.textarea, html.theme--documenter-dark .select select.is-hovered { + border-color: #8c9b9d; } + html.theme--documenter-dark .input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:focus, html.theme--documenter-dark .textarea:focus, html.theme--documenter-dark .select select:focus, html.theme--documenter-dark .is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-focused.textarea, html.theme--documenter-dark .select select.is-focused, html.theme--documenter-dark .input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:active, html.theme--documenter-dark .textarea:active, html.theme--documenter-dark .select select:active, html.theme--documenter-dark .is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active, html.theme--documenter-dark .is-active.textarea, html.theme--documenter-dark .select select.is-active { + border-color: #1abc9c; + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + html.theme--documenter-dark .input[disabled], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled], html.theme--documenter-dark .textarea[disabled], html.theme--documenter-dark .select select[disabled], + fieldset[disabled] html.theme--documenter-dark .input, + fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, + fieldset[disabled] html.theme--documenter-dark .textarea, + fieldset[disabled] html.theme--documenter-dark .select select { + background-color: #8c9b9d; + border-color: #282f2f; + box-shadow: none; + color: white; } + html.theme--documenter-dark .input[disabled]::-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]::-moz-placeholder, html.theme--documenter-dark .textarea[disabled]::-moz-placeholder, html.theme--documenter-dark .select select[disabled]::-moz-placeholder, + fieldset[disabled] html.theme--documenter-dark .input::-moz-placeholder, + fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-moz-placeholder, + fieldset[disabled] html.theme--documenter-dark .textarea::-moz-placeholder, + fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]::-webkit-input-placeholder, html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder, html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder, + fieldset[disabled] html.theme--documenter-dark .input::-webkit-input-placeholder, + fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder, + fieldset[disabled] html.theme--documenter-dark .textarea::-webkit-input-placeholder, + fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .input[disabled]:-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]:-moz-placeholder, html.theme--documenter-dark .textarea[disabled]:-moz-placeholder, html.theme--documenter-dark .select select[disabled]:-moz-placeholder, + fieldset[disabled] html.theme--documenter-dark .input:-moz-placeholder, + fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-moz-placeholder, + fieldset[disabled] html.theme--documenter-dark .textarea:-moz-placeholder, + fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .input[disabled]:-ms-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]:-ms-input-placeholder, html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder, html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder, + fieldset[disabled] html.theme--documenter-dark .input:-ms-input-placeholder, + fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder, + fieldset[disabled] html.theme--documenter-dark .textarea:-ms-input-placeholder, + fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark .textarea { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); + max-width: 100%; + width: 100%; } + html.theme--documenter-dark .input[readonly], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[readonly], html.theme--documenter-dark .textarea[readonly] { + box-shadow: none; } + html.theme--documenter-dark .is-white.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white, html.theme--documenter-dark .is-white.textarea { + border-color: white; } + html.theme--documenter-dark .is-white.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white:focus, html.theme--documenter-dark .is-white.textarea:focus, html.theme--documenter-dark .is-white.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white.is-focused, html.theme--documenter-dark .is-white.is-focused.textarea, html.theme--documenter-dark .is-white.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white:active, html.theme--documenter-dark .is-white.textarea:active, html.theme--documenter-dark .is-white.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white.is-active, html.theme--documenter-dark .is-white.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + html.theme--documenter-dark .is-black.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black, html.theme--documenter-dark .is-black.textarea { + border-color: #0a0a0a; } + html.theme--documenter-dark .is-black.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black:focus, html.theme--documenter-dark .is-black.textarea:focus, html.theme--documenter-dark .is-black.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black.is-focused, html.theme--documenter-dark .is-black.is-focused.textarea, html.theme--documenter-dark .is-black.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black:active, html.theme--documenter-dark .is-black.textarea:active, html.theme--documenter-dark .is-black.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black.is-active, html.theme--documenter-dark .is-black.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + html.theme--documenter-dark .is-light.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light, html.theme--documenter-dark .is-light.textarea { + border-color: #ecf0f1; } + html.theme--documenter-dark .is-light.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light:focus, html.theme--documenter-dark .is-light.textarea:focus, html.theme--documenter-dark .is-light.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light.is-focused, html.theme--documenter-dark .is-light.is-focused.textarea, html.theme--documenter-dark .is-light.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light:active, html.theme--documenter-dark .is-light.textarea:active, html.theme--documenter-dark .is-light.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light.is-active, html.theme--documenter-dark .is-light.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(236, 240, 241, 0.25); } + html.theme--documenter-dark .is-dark.input, html.theme--documenter-dark .content kbd.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark, html.theme--documenter-dark .is-dark.textarea, html.theme--documenter-dark .content kbd.textarea { + border-color: #282f2f; } + html.theme--documenter-dark .is-dark.input:focus, html.theme--documenter-dark .content kbd.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark:focus, html.theme--documenter-dark .is-dark.textarea:focus, html.theme--documenter-dark .content kbd.textarea:focus, html.theme--documenter-dark .is-dark.is-focused.input, html.theme--documenter-dark .content kbd.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark.is-focused, html.theme--documenter-dark .is-dark.is-focused.textarea, html.theme--documenter-dark .content kbd.is-focused.textarea, html.theme--documenter-dark .is-dark.input:active, html.theme--documenter-dark .content kbd.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark:active, html.theme--documenter-dark .is-dark.textarea:active, html.theme--documenter-dark .content kbd.textarea:active, html.theme--documenter-dark .is-dark.is-active.input, html.theme--documenter-dark .content kbd.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark.is-active, html.theme--documenter-dark .is-dark.is-active.textarea, html.theme--documenter-dark .content kbd.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(40, 47, 47, 0.25); } + html.theme--documenter-dark .is-primary.input, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary, html.theme--documenter-dark .is-primary.textarea, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink { + border-color: #375a7f; } + html.theme--documenter-dark .is-primary.input:focus, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary:focus, html.theme--documenter-dark .is-primary.textarea:focus, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink:focus, html.theme--documenter-dark .is-primary.is-focused.input, html.theme--documenter-dark .docstring > section > a.is-focused.input.docs-sourcelink, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary.is-focused, html.theme--documenter-dark .is-primary.is-focused.textarea, html.theme--documenter-dark .docstring > section > a.is-focused.textarea.docs-sourcelink, html.theme--documenter-dark .is-primary.input:active, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary:active, html.theme--documenter-dark .is-primary.textarea:active, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink:active, html.theme--documenter-dark .is-primary.is-active.input, html.theme--documenter-dark .docstring > section > a.is-active.input.docs-sourcelink, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary.is-active, html.theme--documenter-dark .is-primary.is-active.textarea, html.theme--documenter-dark .docstring > section > a.is-active.textarea.docs-sourcelink { + box-shadow: 0 0 0 0.125em rgba(55, 90, 127, 0.25); } + html.theme--documenter-dark .is-link.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link, html.theme--documenter-dark .is-link.textarea { + border-color: #1abc9c; } + html.theme--documenter-dark .is-link.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link:focus, html.theme--documenter-dark .is-link.textarea:focus, html.theme--documenter-dark .is-link.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link.is-focused, html.theme--documenter-dark .is-link.is-focused.textarea, html.theme--documenter-dark .is-link.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link:active, html.theme--documenter-dark .is-link.textarea:active, html.theme--documenter-dark .is-link.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link.is-active, html.theme--documenter-dark .is-link.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + html.theme--documenter-dark .is-info.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info, html.theme--documenter-dark .is-info.textarea { + border-color: #024c7d; } + html.theme--documenter-dark .is-info.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info:focus, html.theme--documenter-dark .is-info.textarea:focus, html.theme--documenter-dark .is-info.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info.is-focused, html.theme--documenter-dark .is-info.is-focused.textarea, html.theme--documenter-dark .is-info.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info:active, html.theme--documenter-dark .is-info.textarea:active, html.theme--documenter-dark .is-info.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info.is-active, html.theme--documenter-dark .is-info.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(2, 76, 125, 0.25); } + html.theme--documenter-dark .is-success.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success, html.theme--documenter-dark .is-success.textarea { + border-color: #008438; } + html.theme--documenter-dark .is-success.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success:focus, html.theme--documenter-dark .is-success.textarea:focus, html.theme--documenter-dark .is-success.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success.is-focused, html.theme--documenter-dark .is-success.is-focused.textarea, html.theme--documenter-dark .is-success.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success:active, html.theme--documenter-dark .is-success.textarea:active, html.theme--documenter-dark .is-success.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success.is-active, html.theme--documenter-dark .is-success.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(0, 132, 56, 0.25); } + html.theme--documenter-dark .is-warning.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning, html.theme--documenter-dark .is-warning.textarea { + border-color: #ad8100; } + html.theme--documenter-dark .is-warning.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning:focus, html.theme--documenter-dark .is-warning.textarea:focus, html.theme--documenter-dark .is-warning.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning.is-focused, html.theme--documenter-dark .is-warning.is-focused.textarea, html.theme--documenter-dark .is-warning.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning:active, html.theme--documenter-dark .is-warning.textarea:active, html.theme--documenter-dark .is-warning.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning.is-active, html.theme--documenter-dark .is-warning.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(173, 129, 0, 0.25); } + html.theme--documenter-dark .is-danger.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger, html.theme--documenter-dark .is-danger.textarea { + border-color: #9e1b0d; } + html.theme--documenter-dark .is-danger.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger:focus, html.theme--documenter-dark .is-danger.textarea:focus, html.theme--documenter-dark .is-danger.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger.is-focused, html.theme--documenter-dark .is-danger.is-focused.textarea, html.theme--documenter-dark .is-danger.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger:active, html.theme--documenter-dark .is-danger.textarea:active, html.theme--documenter-dark .is-danger.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger.is-active, html.theme--documenter-dark .is-danger.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(158, 27, 13, 0.25); } + html.theme--documenter-dark .is-small.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark .is-small.textarea { + border-radius: 3px; + font-size: 0.85em; } + html.theme--documenter-dark .is-medium.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-medium, html.theme--documenter-dark .is-medium.textarea { + font-size: 1.25rem; } + html.theme--documenter-dark .is-large.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-large, html.theme--documenter-dark .is-large.textarea { + font-size: 1.5rem; } + html.theme--documenter-dark .is-fullwidth.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-fullwidth, html.theme--documenter-dark .is-fullwidth.textarea { + display: block; + width: 100%; } + html.theme--documenter-dark .is-inline.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-inline, html.theme--documenter-dark .is-inline.textarea { + display: inline; + width: auto; } + html.theme--documenter-dark .input.is-rounded, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + border-radius: 290486px; + padding-left: 1em; + padding-right: 1em; } + html.theme--documenter-dark .input.is-static, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-static { + background-color: transparent; + border-color: transparent; + box-shadow: none; + padding-left: 0; + padding-right: 0; } + html.theme--documenter-dark .textarea { + display: block; + max-width: 100%; + min-width: 100%; + padding: 0.625em; + resize: vertical; } + html.theme--documenter-dark .textarea:not([rows]) { + max-height: 600px; + min-height: 120px; } + html.theme--documenter-dark .textarea[rows] { + height: initial; } + html.theme--documenter-dark .textarea.has-fixed-size { + resize: none; } + html.theme--documenter-dark .checkbox, html.theme--documenter-dark .radio { + cursor: pointer; + display: inline-block; + line-height: 1.25; + position: relative; } + html.theme--documenter-dark .checkbox input, html.theme--documenter-dark .radio input { + cursor: pointer; } + html.theme--documenter-dark .checkbox:hover, html.theme--documenter-dark .radio:hover { + color: #8c9b9d; } + html.theme--documenter-dark .checkbox[disabled], html.theme--documenter-dark .radio[disabled], + fieldset[disabled] html.theme--documenter-dark .checkbox, + fieldset[disabled] html.theme--documenter-dark .radio { + color: white; + cursor: not-allowed; } + html.theme--documenter-dark .radio + .radio { + margin-left: 0.5em; } + html.theme--documenter-dark .select { + display: inline-block; + max-width: 100%; + position: relative; + vertical-align: top; } + html.theme--documenter-dark .select:not(.is-multiple) { + height: 2.25em; } + html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after { + border-color: #1abc9c; + right: 1.125em; + z-index: 4; } + html.theme--documenter-dark .select.is-rounded select, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.select select { + border-radius: 290486px; + padding-left: 1em; } + html.theme--documenter-dark .select select { + cursor: pointer; + display: block; + font-size: 1em; + max-width: 100%; + outline: none; } + html.theme--documenter-dark .select select::-ms-expand { + display: none; } + html.theme--documenter-dark .select select[disabled]:hover, + fieldset[disabled] html.theme--documenter-dark .select select:hover { + border-color: #282f2f; } + html.theme--documenter-dark .select select:not([multiple]) { + padding-right: 2.5em; } + html.theme--documenter-dark .select select[multiple] { + height: auto; + padding: 0; } + html.theme--documenter-dark .select select[multiple] option { + padding: 0.5em 1em; } + html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading):hover::after { + border-color: #8c9b9d; } + html.theme--documenter-dark .select.is-white:not(:hover)::after { + border-color: white; } + html.theme--documenter-dark .select.is-white select { + border-color: white; } + html.theme--documenter-dark .select.is-white select:hover, html.theme--documenter-dark .select.is-white select.is-hovered { + border-color: #f2f2f2; } + html.theme--documenter-dark .select.is-white select:focus, html.theme--documenter-dark .select.is-white select.is-focused, html.theme--documenter-dark .select.is-white select:active, html.theme--documenter-dark .select.is-white select.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + html.theme--documenter-dark .select.is-black:not(:hover)::after { + border-color: #0a0a0a; } + html.theme--documenter-dark .select.is-black select { + border-color: #0a0a0a; } + html.theme--documenter-dark .select.is-black select:hover, html.theme--documenter-dark .select.is-black select.is-hovered { + border-color: black; } + html.theme--documenter-dark .select.is-black select:focus, html.theme--documenter-dark .select.is-black select.is-focused, html.theme--documenter-dark .select.is-black select:active, html.theme--documenter-dark .select.is-black select.is-active { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + html.theme--documenter-dark .select.is-light:not(:hover)::after { + border-color: #ecf0f1; } + html.theme--documenter-dark .select.is-light select { + border-color: #ecf0f1; } + html.theme--documenter-dark .select.is-light select:hover, html.theme--documenter-dark .select.is-light select.is-hovered { + border-color: #dde4e6; } + html.theme--documenter-dark .select.is-light select:focus, html.theme--documenter-dark .select.is-light select.is-focused, html.theme--documenter-dark .select.is-light select:active, html.theme--documenter-dark .select.is-light select.is-active { + box-shadow: 0 0 0 0.125em rgba(236, 240, 241, 0.25); } + html.theme--documenter-dark .select.is-dark:not(:hover)::after, html.theme--documenter-dark .content kbd.select:not(:hover)::after { + border-color: #282f2f; } + html.theme--documenter-dark .select.is-dark select, html.theme--documenter-dark .content kbd.select select { + border-color: #282f2f; } + html.theme--documenter-dark .select.is-dark select:hover, html.theme--documenter-dark .content kbd.select select:hover, html.theme--documenter-dark .select.is-dark select.is-hovered, html.theme--documenter-dark .content kbd.select select.is-hovered { + border-color: #1d2122; } + html.theme--documenter-dark .select.is-dark select:focus, html.theme--documenter-dark .content kbd.select select:focus, html.theme--documenter-dark .select.is-dark select.is-focused, html.theme--documenter-dark .content kbd.select select.is-focused, html.theme--documenter-dark .select.is-dark select:active, html.theme--documenter-dark .content kbd.select select:active, html.theme--documenter-dark .select.is-dark select.is-active, html.theme--documenter-dark .content kbd.select select.is-active { + box-shadow: 0 0 0 0.125em rgba(40, 47, 47, 0.25); } + html.theme--documenter-dark .select.is-primary:not(:hover)::after, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink:not(:hover)::after { + border-color: #375a7f; } + html.theme--documenter-dark .select.is-primary select, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select { + border-color: #375a7f; } + html.theme--documenter-dark .select.is-primary select:hover, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select:hover, html.theme--documenter-dark .select.is-primary select.is-hovered, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select.is-hovered { + border-color: #2f4d6d; } + html.theme--documenter-dark .select.is-primary select:focus, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select:focus, html.theme--documenter-dark .select.is-primary select.is-focused, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select.is-focused, html.theme--documenter-dark .select.is-primary select:active, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select:active, html.theme--documenter-dark .select.is-primary select.is-active, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select.is-active { + box-shadow: 0 0 0 0.125em rgba(55, 90, 127, 0.25); } + html.theme--documenter-dark .select.is-link:not(:hover)::after { + border-color: #1abc9c; } + html.theme--documenter-dark .select.is-link select { + border-color: #1abc9c; } + html.theme--documenter-dark .select.is-link select:hover, html.theme--documenter-dark .select.is-link select.is-hovered { + border-color: #17a689; } + html.theme--documenter-dark .select.is-link select:focus, html.theme--documenter-dark .select.is-link select.is-focused, html.theme--documenter-dark .select.is-link select:active, html.theme--documenter-dark .select.is-link select.is-active { + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + html.theme--documenter-dark .select.is-info:not(:hover)::after { + border-color: #024c7d; } + html.theme--documenter-dark .select.is-info select { + border-color: #024c7d; } + html.theme--documenter-dark .select.is-info select:hover, html.theme--documenter-dark .select.is-info select.is-hovered { + border-color: #023d64; } + html.theme--documenter-dark .select.is-info select:focus, html.theme--documenter-dark .select.is-info select.is-focused, html.theme--documenter-dark .select.is-info select:active, html.theme--documenter-dark .select.is-info select.is-active { + box-shadow: 0 0 0 0.125em rgba(2, 76, 125, 0.25); } + html.theme--documenter-dark .select.is-success:not(:hover)::after { + border-color: #008438; } + html.theme--documenter-dark .select.is-success select { + border-color: #008438; } + html.theme--documenter-dark .select.is-success select:hover, html.theme--documenter-dark .select.is-success select.is-hovered { + border-color: #006b2d; } + html.theme--documenter-dark .select.is-success select:focus, html.theme--documenter-dark .select.is-success select.is-focused, html.theme--documenter-dark .select.is-success select:active, html.theme--documenter-dark .select.is-success select.is-active { + box-shadow: 0 0 0 0.125em rgba(0, 132, 56, 0.25); } + html.theme--documenter-dark .select.is-warning:not(:hover)::after { + border-color: #ad8100; } + html.theme--documenter-dark .select.is-warning select { + border-color: #ad8100; } + html.theme--documenter-dark .select.is-warning select:hover, html.theme--documenter-dark .select.is-warning select.is-hovered { + border-color: #946e00; } + html.theme--documenter-dark .select.is-warning select:focus, html.theme--documenter-dark .select.is-warning select.is-focused, html.theme--documenter-dark .select.is-warning select:active, html.theme--documenter-dark .select.is-warning select.is-active { + box-shadow: 0 0 0 0.125em rgba(173, 129, 0, 0.25); } + html.theme--documenter-dark .select.is-danger:not(:hover)::after { + border-color: #9e1b0d; } + html.theme--documenter-dark .select.is-danger select { + border-color: #9e1b0d; } + html.theme--documenter-dark .select.is-danger select:hover, html.theme--documenter-dark .select.is-danger select.is-hovered { + border-color: #86170b; } + html.theme--documenter-dark .select.is-danger select:focus, html.theme--documenter-dark .select.is-danger select.is-focused, html.theme--documenter-dark .select.is-danger select:active, html.theme--documenter-dark .select.is-danger select.is-active { + box-shadow: 0 0 0 0.125em rgba(158, 27, 13, 0.25); } + html.theme--documenter-dark .select.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.select { + border-radius: 3px; + font-size: 0.85em; } + html.theme--documenter-dark .select.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .select.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .select.is-disabled::after { + border-color: white; } + html.theme--documenter-dark .select.is-fullwidth { + width: 100%; } + html.theme--documenter-dark .select.is-fullwidth select { + width: 100%; } + html.theme--documenter-dark .select.is-loading::after { + margin-top: 0; + position: absolute; + right: 0.625em; + top: 0.625em; + transform: none; } + html.theme--documenter-dark .select.is-loading.is-small:after, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.select.is-loading:after { + font-size: 0.85em; } + html.theme--documenter-dark .select.is-loading.is-medium:after { + font-size: 1.25rem; } + html.theme--documenter-dark .select.is-loading.is-large:after { + font-size: 1.5rem; } + html.theme--documenter-dark .file { + align-items: stretch; + display: flex; + justify-content: flex-start; + position: relative; } + html.theme--documenter-dark .file.is-white .file-cta { + background-color: white; + border-color: transparent; + color: #0a0a0a; } + html.theme--documenter-dark .file.is-white:hover .file-cta, html.theme--documenter-dark .file.is-white.is-hovered .file-cta { + background-color: #f9f9f9; + border-color: transparent; + color: #0a0a0a; } + html.theme--documenter-dark .file.is-white:focus .file-cta, html.theme--documenter-dark .file.is-white.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(255, 255, 255, 0.25); + color: #0a0a0a; } + html.theme--documenter-dark .file.is-white:active .file-cta, html.theme--documenter-dark .file.is-white.is-active .file-cta { + background-color: #f2f2f2; + border-color: transparent; + color: #0a0a0a; } + html.theme--documenter-dark .file.is-black .file-cta { + background-color: #0a0a0a; + border-color: transparent; + color: white; } + html.theme--documenter-dark .file.is-black:hover .file-cta, html.theme--documenter-dark .file.is-black.is-hovered .file-cta { + background-color: #040404; + border-color: transparent; + color: white; } + html.theme--documenter-dark .file.is-black:focus .file-cta, html.theme--documenter-dark .file.is-black.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(10, 10, 10, 0.25); + color: white; } + html.theme--documenter-dark .file.is-black:active .file-cta, html.theme--documenter-dark .file.is-black.is-active .file-cta { + background-color: black; + border-color: transparent; + color: white; } + html.theme--documenter-dark .file.is-light .file-cta { + background-color: #ecf0f1; + border-color: transparent; + color: #282f2f; } + html.theme--documenter-dark .file.is-light:hover .file-cta, html.theme--documenter-dark .file.is-light.is-hovered .file-cta { + background-color: #e5eaec; + border-color: transparent; + color: #282f2f; } + html.theme--documenter-dark .file.is-light:focus .file-cta, html.theme--documenter-dark .file.is-light.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(236, 240, 241, 0.25); + color: #282f2f; } + html.theme--documenter-dark .file.is-light:active .file-cta, html.theme--documenter-dark .file.is-light.is-active .file-cta { + background-color: #dde4e6; + border-color: transparent; + color: #282f2f; } + html.theme--documenter-dark .file.is-dark .file-cta, html.theme--documenter-dark .content kbd.file .file-cta { + background-color: #282f2f; + border-color: transparent; + color: #ecf0f1; } + html.theme--documenter-dark .file.is-dark:hover .file-cta, html.theme--documenter-dark .content kbd.file:hover .file-cta, html.theme--documenter-dark .file.is-dark.is-hovered .file-cta, html.theme--documenter-dark .content kbd.file.is-hovered .file-cta { + background-color: #232829; + border-color: transparent; + color: #ecf0f1; } + html.theme--documenter-dark .file.is-dark:focus .file-cta, html.theme--documenter-dark .content kbd.file:focus .file-cta, html.theme--documenter-dark .file.is-dark.is-focused .file-cta, html.theme--documenter-dark .content kbd.file.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(40, 47, 47, 0.25); + color: #ecf0f1; } + html.theme--documenter-dark .file.is-dark:active .file-cta, html.theme--documenter-dark .content kbd.file:active .file-cta, html.theme--documenter-dark .file.is-dark.is-active .file-cta, html.theme--documenter-dark .content kbd.file.is-active .file-cta { + background-color: #1d2122; + border-color: transparent; + color: #ecf0f1; } + html.theme--documenter-dark .file.is-primary .file-cta, html.theme--documenter-dark .docstring > section > a.file.docs-sourcelink .file-cta { + background-color: #375a7f; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-primary:hover .file-cta, html.theme--documenter-dark .docstring > section > a.file.docs-sourcelink:hover .file-cta, html.theme--documenter-dark .file.is-primary.is-hovered .file-cta, html.theme--documenter-dark .docstring > section > a.file.is-hovered.docs-sourcelink .file-cta { + background-color: #335476; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-primary:focus .file-cta, html.theme--documenter-dark .docstring > section > a.file.docs-sourcelink:focus .file-cta, html.theme--documenter-dark .file.is-primary.is-focused .file-cta, html.theme--documenter-dark .docstring > section > a.file.is-focused.docs-sourcelink .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(55, 90, 127, 0.25); + color: #fff; } + html.theme--documenter-dark .file.is-primary:active .file-cta, html.theme--documenter-dark .docstring > section > a.file.docs-sourcelink:active .file-cta, html.theme--documenter-dark .file.is-primary.is-active .file-cta, html.theme--documenter-dark .docstring > section > a.file.is-active.docs-sourcelink .file-cta { + background-color: #2f4d6d; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-link .file-cta { + background-color: #1abc9c; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-link:hover .file-cta, html.theme--documenter-dark .file.is-link.is-hovered .file-cta { + background-color: #18b193; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-link:focus .file-cta, html.theme--documenter-dark .file.is-link.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(26, 188, 156, 0.25); + color: #fff; } + html.theme--documenter-dark .file.is-link:active .file-cta, html.theme--documenter-dark .file.is-link.is-active .file-cta { + background-color: #17a689; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-info .file-cta { + background-color: #024c7d; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-info:hover .file-cta, html.theme--documenter-dark .file.is-info.is-hovered .file-cta { + background-color: #024470; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-info:focus .file-cta, html.theme--documenter-dark .file.is-info.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(2, 76, 125, 0.25); + color: #fff; } + html.theme--documenter-dark .file.is-info:active .file-cta, html.theme--documenter-dark .file.is-info.is-active .file-cta { + background-color: #023d64; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-success .file-cta { + background-color: #008438; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-success:hover .file-cta, html.theme--documenter-dark .file.is-success.is-hovered .file-cta { + background-color: #007733; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-success:focus .file-cta, html.theme--documenter-dark .file.is-success.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(0, 132, 56, 0.25); + color: #fff; } + html.theme--documenter-dark .file.is-success:active .file-cta, html.theme--documenter-dark .file.is-success.is-active .file-cta { + background-color: #006b2d; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-warning .file-cta { + background-color: #ad8100; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-warning:hover .file-cta, html.theme--documenter-dark .file.is-warning.is-hovered .file-cta { + background-color: #a07700; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-warning:focus .file-cta, html.theme--documenter-dark .file.is-warning.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(173, 129, 0, 0.25); + color: #fff; } + html.theme--documenter-dark .file.is-warning:active .file-cta, html.theme--documenter-dark .file.is-warning.is-active .file-cta { + background-color: #946e00; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-danger .file-cta { + background-color: #9e1b0d; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-danger:hover .file-cta, html.theme--documenter-dark .file.is-danger.is-hovered .file-cta { + background-color: #92190c; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-danger:focus .file-cta, html.theme--documenter-dark .file.is-danger.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(158, 27, 13, 0.25); + color: #fff; } + html.theme--documenter-dark .file.is-danger:active .file-cta, html.theme--documenter-dark .file.is-danger.is-active .file-cta { + background-color: #86170b; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.file { + font-size: 0.85em; } + html.theme--documenter-dark .file.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .file.is-medium .file-icon .fa { + font-size: 21px; } + html.theme--documenter-dark .file.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .file.is-large .file-icon .fa { + font-size: 28px; } + html.theme--documenter-dark .file.has-name .file-cta { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + html.theme--documenter-dark .file.has-name .file-name { + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + html.theme--documenter-dark .file.has-name.is-empty .file-cta { + border-radius: 0.4em; } + html.theme--documenter-dark .file.has-name.is-empty .file-name { + display: none; } + html.theme--documenter-dark .file.is-boxed .file-label { + flex-direction: column; } + html.theme--documenter-dark .file.is-boxed .file-cta { + flex-direction: column; + height: auto; + padding: 1em 3em; } + html.theme--documenter-dark .file.is-boxed .file-name { + border-width: 0 1px 1px; } + html.theme--documenter-dark .file.is-boxed .file-icon { + height: 1.5em; + width: 1.5em; } + html.theme--documenter-dark .file.is-boxed .file-icon .fa { + font-size: 21px; } + html.theme--documenter-dark .file.is-boxed.is-small .file-icon .fa, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.file.is-boxed .file-icon .fa { + font-size: 14px; } + html.theme--documenter-dark .file.is-boxed.is-medium .file-icon .fa { + font-size: 28px; } + html.theme--documenter-dark .file.is-boxed.is-large .file-icon .fa { + font-size: 35px; } + html.theme--documenter-dark .file.is-boxed.has-name .file-cta { + border-radius: 0.4em 0.4em 0 0; } + html.theme--documenter-dark .file.is-boxed.has-name .file-name { + border-radius: 0 0 0.4em 0.4em; + border-width: 0 1px 1px; } + html.theme--documenter-dark .file.is-centered { + justify-content: center; } + html.theme--documenter-dark .file.is-fullwidth .file-label { + width: 100%; } + html.theme--documenter-dark .file.is-fullwidth .file-name { + flex-grow: 1; + max-width: none; } + html.theme--documenter-dark .file.is-right { + justify-content: flex-end; } + html.theme--documenter-dark .file.is-right .file-cta { + border-radius: 0 0.4em 0.4em 0; } + html.theme--documenter-dark .file.is-right .file-name { + border-radius: 0.4em 0 0 0.4em; + border-width: 1px 0 1px 1px; + order: -1; } + html.theme--documenter-dark .file-label { + align-items: stretch; + display: flex; + cursor: pointer; + justify-content: flex-start; + overflow: hidden; + position: relative; } + html.theme--documenter-dark .file-label:hover .file-cta { + background-color: #e5eaec; + color: #282f2f; } + html.theme--documenter-dark .file-label:hover .file-name { + border-color: #596668; } + html.theme--documenter-dark .file-label:active .file-cta { + background-color: #dde4e6; + color: #282f2f; } + html.theme--documenter-dark .file-label:active .file-name { + border-color: #535f61; } + html.theme--documenter-dark .file-input { + height: 100%; + left: 0; + opacity: 0; + outline: none; + position: absolute; + top: 0; + width: 100%; } + html.theme--documenter-dark .file-cta, + html.theme--documenter-dark .file-name { + border-color: #5e6d6f; + border-radius: 0.4em; + font-size: 1em; + padding-left: 1em; + padding-right: 1em; + white-space: nowrap; } + html.theme--documenter-dark .file-cta { + background-color: #ecf0f1; + color: #343c3d; } + html.theme--documenter-dark .file-name { + border-color: #5e6d6f; + border-style: solid; + border-width: 1px 1px 1px 0; + display: block; + max-width: 16em; + overflow: hidden; + text-align: left; + text-overflow: ellipsis; } + html.theme--documenter-dark .file-icon { + align-items: center; + display: flex; + height: 1em; + justify-content: center; + margin-right: 0.5em; + width: 1em; } + html.theme--documenter-dark .file-icon .fa { + font-size: 14px; } + html.theme--documenter-dark .label { + color: #282f2f; + display: block; + font-size: 15px; + font-weight: 700; } + html.theme--documenter-dark .label:not(:last-child) { + margin-bottom: 0.5em; } + html.theme--documenter-dark .label.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.label { + font-size: 0.85em; } + html.theme--documenter-dark .label.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .label.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .help { + display: block; + font-size: 0.85em; + margin-top: 0.25rem; } + html.theme--documenter-dark .help.is-white { + color: white; } + html.theme--documenter-dark .help.is-black { + color: #0a0a0a; } + html.theme--documenter-dark .help.is-light { + color: #ecf0f1; } + html.theme--documenter-dark .help.is-dark, html.theme--documenter-dark .content kbd.help { + color: #282f2f; } + html.theme--documenter-dark .help.is-primary, html.theme--documenter-dark .docstring > section > a.help.docs-sourcelink { + color: #375a7f; } + html.theme--documenter-dark .help.is-link { + color: #1abc9c; } + html.theme--documenter-dark .help.is-info { + color: #024c7d; } + html.theme--documenter-dark .help.is-success { + color: #008438; } + html.theme--documenter-dark .help.is-warning { + color: #ad8100; } + html.theme--documenter-dark .help.is-danger { + color: #9e1b0d; } + html.theme--documenter-dark .field:not(:last-child) { + margin-bottom: 0.75rem; } + html.theme--documenter-dark .field.has-addons { + display: flex; + justify-content: flex-start; } + html.theme--documenter-dark .field.has-addons .control:not(:last-child) { + margin-right: -1px; } + html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .button, + html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .input, + html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search > input, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search > input, + html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .select select { + border-radius: 0; } + html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .button, + html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .input, + html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search > input, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search > input, + html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .select select { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .button, + html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .input, + html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search > input, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search > input, + html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .select select { + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):hover, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]).is-hovered, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]).is-hovered, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-hovered, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-hovered, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]).is-hovered { + z-index: 2; } + html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]).is-focused, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]).is-active, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]).is-focused, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-focused, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-focused, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]).is-active, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-active, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-active, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]).is-focused, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]).is-active { + z-index: 3; } + html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus:hover, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]).is-focused:hover, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active:hover, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]).is-active:hover, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus:hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus:hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus:hover, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]).is-focused:hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-focused:hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-focused:hover, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active:hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active:hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active:hover, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]).is-active:hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-active:hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-active:hover, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus:hover, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]).is-focused:hover, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active:hover, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]).is-active:hover { + z-index: 4; } + html.theme--documenter-dark .field.has-addons .control.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + html.theme--documenter-dark .field.has-addons.has-addons-centered { + justify-content: center; } + html.theme--documenter-dark .field.has-addons.has-addons-right { + justify-content: flex-end; } + html.theme--documenter-dark .field.has-addons.has-addons-fullwidth .control { + flex-grow: 1; + flex-shrink: 0; } + html.theme--documenter-dark .field.is-grouped { + display: flex; + justify-content: flex-start; } + html.theme--documenter-dark .field.is-grouped > .control { + flex-shrink: 0; } + html.theme--documenter-dark .field.is-grouped > .control:not(:last-child) { + margin-bottom: 0; + margin-right: 0.75rem; } + html.theme--documenter-dark .field.is-grouped > .control.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + html.theme--documenter-dark .field.is-grouped.is-grouped-centered { + justify-content: center; } + html.theme--documenter-dark .field.is-grouped.is-grouped-right { + justify-content: flex-end; } + html.theme--documenter-dark .field.is-grouped.is-grouped-multiline { + flex-wrap: wrap; } + html.theme--documenter-dark .field.is-grouped.is-grouped-multiline > .control:last-child, html.theme--documenter-dark .field.is-grouped.is-grouped-multiline > .control:not(:last-child) { + margin-bottom: 0.75rem; } + html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:last-child { + margin-bottom: -0.75rem; } + html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:not(:last-child) { + margin-bottom: 0; } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .field.is-horizontal { + display: flex; } } + html.theme--documenter-dark .field-label .label { + font-size: inherit; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .field-label { + margin-bottom: 0.5rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .field-label { + flex-basis: 0; + flex-grow: 1; + flex-shrink: 0; + margin-right: 1.5rem; + text-align: right; } + html.theme--documenter-dark .field-label.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.field-label { + font-size: 0.85em; + padding-top: 0.375em; } + html.theme--documenter-dark .field-label.is-normal { + padding-top: 0.375em; } + html.theme--documenter-dark .field-label.is-medium { + font-size: 1.25rem; + padding-top: 0.375em; } + html.theme--documenter-dark .field-label.is-large { + font-size: 1.5rem; + padding-top: 0.375em; } } + html.theme--documenter-dark .field-body .field .field { + margin-bottom: 0; } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .field-body { + display: flex; + flex-basis: 0; + flex-grow: 5; + flex-shrink: 1; } + html.theme--documenter-dark .field-body .field { + margin-bottom: 0; } + html.theme--documenter-dark .field-body > .field { + flex-shrink: 1; } + html.theme--documenter-dark .field-body > .field:not(.is-narrow) { + flex-grow: 1; } + html.theme--documenter-dark .field-body > .field:not(:last-child) { + margin-right: 0.75rem; } } + html.theme--documenter-dark .control { + box-sizing: border-box; + clear: both; + font-size: 15px; + position: relative; + text-align: left; } + html.theme--documenter-dark .control.has-icons-left .input:focus ~ .icon, html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search > input:focus ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search > input:focus ~ .icon, + html.theme--documenter-dark .control.has-icons-left .select:focus ~ .icon, html.theme--documenter-dark .control.has-icons-right .input:focus ~ .icon, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input:focus ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input:focus ~ .icon, + html.theme--documenter-dark .control.has-icons-right .select:focus ~ .icon { + color: #5e6d6f; } + html.theme--documenter-dark .control.has-icons-left .input.is-small ~ .icon, html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search > input ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search > input ~ .icon, + html.theme--documenter-dark .control.has-icons-left .select.is-small ~ .icon, + html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search > input.select ~ .icon, + html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search > input.select ~ .icon, html.theme--documenter-dark .control.has-icons-right .input.is-small ~ .icon, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input ~ .icon, + html.theme--documenter-dark .control.has-icons-right .select.is-small ~ .icon, + html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input.select ~ .icon, + html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input.select ~ .icon { + font-size: 0.85em; } + html.theme--documenter-dark .control.has-icons-left .input.is-medium ~ .icon, html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search > input.is-medium ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search > input.is-medium ~ .icon, + html.theme--documenter-dark .control.has-icons-left .select.is-medium ~ .icon, html.theme--documenter-dark .control.has-icons-right .input.is-medium ~ .icon, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input.is-medium ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input.is-medium ~ .icon, + html.theme--documenter-dark .control.has-icons-right .select.is-medium ~ .icon { + font-size: 1.25rem; } + html.theme--documenter-dark .control.has-icons-left .input.is-large ~ .icon, html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search > input.is-large ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search > input.is-large ~ .icon, + html.theme--documenter-dark .control.has-icons-left .select.is-large ~ .icon, html.theme--documenter-dark .control.has-icons-right .input.is-large ~ .icon, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input.is-large ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input.is-large ~ .icon, + html.theme--documenter-dark .control.has-icons-right .select.is-large ~ .icon { + font-size: 1.5rem; } + html.theme--documenter-dark .control.has-icons-left .icon, html.theme--documenter-dark .control.has-icons-right .icon { + color: #dbdee0; + height: 2.25em; + pointer-events: none; + position: absolute; + top: 0; + width: 2.25em; + z-index: 4; } + html.theme--documenter-dark .control.has-icons-left .input, html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search > input, + html.theme--documenter-dark .control.has-icons-left .select select { + padding-left: 2.25em; } + html.theme--documenter-dark .control.has-icons-left .icon.is-left { + left: 0; } + html.theme--documenter-dark .control.has-icons-right .input, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input, + html.theme--documenter-dark .control.has-icons-right .select select { + padding-right: 2.25em; } + html.theme--documenter-dark .control.has-icons-right .icon.is-right { + right: 0; } + html.theme--documenter-dark .control.is-loading::after { + position: absolute !important; + right: 0.625em; + top: 0.625em; + z-index: 4; } + html.theme--documenter-dark .control.is-loading.is-small:after, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.control.is-loading:after { + font-size: 0.85em; } + html.theme--documenter-dark .control.is-loading.is-medium:after { + font-size: 1.25rem; } + html.theme--documenter-dark .control.is-loading.is-large:after { + font-size: 1.5rem; } + html.theme--documenter-dark .breadcrumb { + font-size: 15px; + white-space: nowrap; } + html.theme--documenter-dark .breadcrumb a { + align-items: center; + color: #1abc9c; + display: flex; + justify-content: center; + padding: 0 0.75em; } + html.theme--documenter-dark .breadcrumb a:hover { + color: #1dd2af; } + html.theme--documenter-dark .breadcrumb li { + align-items: center; + display: flex; } + html.theme--documenter-dark .breadcrumb li:first-child a { + padding-left: 0; } + html.theme--documenter-dark .breadcrumb li.is-active a { + color: #f2f2f2; + cursor: default; + pointer-events: none; } + html.theme--documenter-dark .breadcrumb li + li::before { + color: #8c9b9d; + content: "\0002f"; } + html.theme--documenter-dark .breadcrumb ul, + html.theme--documenter-dark .breadcrumb ol { + align-items: flex-start; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; } + html.theme--documenter-dark .breadcrumb .icon:first-child { + margin-right: 0.5em; } + html.theme--documenter-dark .breadcrumb .icon:last-child { + margin-left: 0.5em; } + html.theme--documenter-dark .breadcrumb.is-centered ol, + html.theme--documenter-dark .breadcrumb.is-centered ul { + justify-content: center; } + html.theme--documenter-dark .breadcrumb.is-right ol, + html.theme--documenter-dark .breadcrumb.is-right ul { + justify-content: flex-end; } + html.theme--documenter-dark .breadcrumb.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.breadcrumb { + font-size: 0.85em; } + html.theme--documenter-dark .breadcrumb.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .breadcrumb.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .breadcrumb.has-arrow-separator li + li::before { + content: "\02192"; } + html.theme--documenter-dark .breadcrumb.has-bullet-separator li + li::before { + content: "\02022"; } + html.theme--documenter-dark .breadcrumb.has-dot-separator li + li::before { + content: "\000b7"; } + html.theme--documenter-dark .breadcrumb.has-succeeds-separator li + li::before { + content: "\0227B"; } + html.theme--documenter-dark .card { + background-color: white; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + color: #fff; + max-width: 100%; + position: relative; } + html.theme--documenter-dark .card-header { + background-color: transparent; + align-items: stretch; + box-shadow: 0 1px 2px rgba(10, 10, 10, 0.1); + display: flex; } + html.theme--documenter-dark .card-header-title { + align-items: center; + color: #f2f2f2; + display: flex; + flex-grow: 1; + font-weight: 700; + padding: 0.75rem; } + html.theme--documenter-dark .card-header-title.is-centered { + justify-content: center; } + html.theme--documenter-dark .card-header-icon { + align-items: center; + cursor: pointer; + display: flex; + justify-content: center; + padding: 0.75rem; } + html.theme--documenter-dark .card-image { + display: block; + position: relative; } + html.theme--documenter-dark .card-content { + background-color: transparent; + padding: 1rem 1.25rem; } + html.theme--documenter-dark .card-footer { + background-color: transparent; + border-top: 1px solid #5e6d6f; + align-items: stretch; + display: flex; } + html.theme--documenter-dark .card-footer-item { + align-items: center; + display: flex; + flex-basis: 0; + flex-grow: 1; + flex-shrink: 0; + justify-content: center; + padding: 0.75rem; } + html.theme--documenter-dark .card-footer-item:not(:last-child) { + border-right: 1px solid #5e6d6f; } + html.theme--documenter-dark .card .media:not(:last-child) { + margin-bottom: 1.5rem; } + html.theme--documenter-dark .dropdown { + display: inline-flex; + position: relative; + vertical-align: top; } + html.theme--documenter-dark .dropdown.is-active .dropdown-menu, html.theme--documenter-dark .dropdown.is-hoverable:hover .dropdown-menu { + display: block; } + html.theme--documenter-dark .dropdown.is-right .dropdown-menu { + left: auto; + right: 0; } + html.theme--documenter-dark .dropdown.is-up .dropdown-menu { + bottom: 100%; + padding-bottom: 4px; + padding-top: initial; + top: auto; } + html.theme--documenter-dark .dropdown-menu { + display: none; + left: 0; + min-width: 12rem; + padding-top: 4px; + position: absolute; + top: 100%; + z-index: 20; } + html.theme--documenter-dark .dropdown-content { + background-color: #282f2f; + border-radius: 0.4em; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + padding-bottom: 0.5rem; + padding-top: 0.5rem; } + html.theme--documenter-dark .dropdown-item { + color: #fff; + display: block; + font-size: 0.875rem; + line-height: 1.5; + padding: 0.375rem 1rem; + position: relative; } + html.theme--documenter-dark a.dropdown-item, + html.theme--documenter-dark button.dropdown-item { + padding-right: 3rem; + text-align: left; + white-space: nowrap; + width: 100%; } + html.theme--documenter-dark a.dropdown-item:hover, + html.theme--documenter-dark button.dropdown-item:hover { + background-color: #282f2f; + color: #0a0a0a; } + html.theme--documenter-dark a.dropdown-item.is-active, + html.theme--documenter-dark button.dropdown-item.is-active { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .dropdown-divider { + background-color: #5e6d6f; + border: none; + display: block; + height: 1px; + margin: 0.5rem 0; } + html.theme--documenter-dark .level { + align-items: center; + justify-content: space-between; } + html.theme--documenter-dark .level code { + border-radius: 0.4em; } + html.theme--documenter-dark .level img { + display: inline-block; + vertical-align: top; } + html.theme--documenter-dark .level.is-mobile { + display: flex; } + html.theme--documenter-dark .level.is-mobile .level-left, + html.theme--documenter-dark .level.is-mobile .level-right { + display: flex; } + html.theme--documenter-dark .level.is-mobile .level-left + .level-right { + margin-top: 0; } + html.theme--documenter-dark .level.is-mobile .level-item:not(:last-child) { + margin-bottom: 0; + margin-right: 0.75rem; } + html.theme--documenter-dark .level.is-mobile .level-item:not(.is-narrow) { + flex-grow: 1; } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .level { + display: flex; } + html.theme--documenter-dark .level > .level-item:not(.is-narrow) { + flex-grow: 1; } } + html.theme--documenter-dark .level-item { + align-items: center; + display: flex; + flex-basis: auto; + flex-grow: 0; + flex-shrink: 0; + justify-content: center; } + html.theme--documenter-dark .level-item .title, + html.theme--documenter-dark .level-item .subtitle { + margin-bottom: 0; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .level-item:not(:last-child) { + margin-bottom: 0.75rem; } } + html.theme--documenter-dark .level-left, + html.theme--documenter-dark .level-right { + flex-basis: auto; + flex-grow: 0; + flex-shrink: 0; } + html.theme--documenter-dark .level-left .level-item.is-flexible, + html.theme--documenter-dark .level-right .level-item.is-flexible { + flex-grow: 1; } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .level-left .level-item:not(:last-child), + html.theme--documenter-dark .level-right .level-item:not(:last-child) { + margin-right: 0.75rem; } } + html.theme--documenter-dark .level-left { + align-items: center; + justify-content: flex-start; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .level-left + .level-right { + margin-top: 1.5rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .level-left { + display: flex; } } + html.theme--documenter-dark .level-right { + align-items: center; + justify-content: flex-end; } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .level-right { + display: flex; } } + html.theme--documenter-dark .list { + background-color: white; + border-radius: 0.4em; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .list-item { + display: block; + padding: 0.5em 1em; } + html.theme--documenter-dark .list-item:not(a) { + color: #fff; } + html.theme--documenter-dark .list-item:first-child { + border-top-left-radius: 0.4em; + border-top-right-radius: 0.4em; } + html.theme--documenter-dark .list-item:last-child { + border-bottom-left-radius: 0.4em; + border-bottom-right-radius: 0.4em; } + html.theme--documenter-dark .list-item:not(:last-child) { + border-bottom: 1px solid #5e6d6f; } + html.theme--documenter-dark .list-item.is-active { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark a.list-item { + background-color: #282f2f; + cursor: pointer; } + html.theme--documenter-dark .media { + align-items: flex-start; + display: flex; + text-align: left; } + html.theme--documenter-dark .media .content:not(:last-child) { + margin-bottom: 0.75rem; } + html.theme--documenter-dark .media .media { + border-top: 1px solid rgba(94, 109, 111, 0.5); + display: flex; + padding-top: 0.75rem; } + html.theme--documenter-dark .media .media .content:not(:last-child), + html.theme--documenter-dark .media .media .control:not(:last-child) { + margin-bottom: 0.5rem; } + html.theme--documenter-dark .media .media .media { + padding-top: 0.5rem; } + html.theme--documenter-dark .media .media .media + .media { + margin-top: 0.5rem; } + html.theme--documenter-dark .media + .media { + border-top: 1px solid rgba(94, 109, 111, 0.5); + margin-top: 1rem; + padding-top: 1rem; } + html.theme--documenter-dark .media.is-large + .media { + margin-top: 1.5rem; + padding-top: 1.5rem; } + html.theme--documenter-dark .media-left, + html.theme--documenter-dark .media-right { + flex-basis: auto; + flex-grow: 0; + flex-shrink: 0; } + html.theme--documenter-dark .media-left { + margin-right: 1rem; } + html.theme--documenter-dark .media-right { + margin-left: 1rem; } + html.theme--documenter-dark .media-content { + flex-basis: auto; + flex-grow: 1; + flex-shrink: 1; + text-align: left; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .media-content { + overflow-x: auto; } } + html.theme--documenter-dark .menu { + font-size: 15px; } + html.theme--documenter-dark .menu.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.menu { + font-size: 0.85em; } + html.theme--documenter-dark .menu.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .menu.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .menu-list { + line-height: 1.25; } + html.theme--documenter-dark .menu-list a { + border-radius: 3px; + color: #fff; + display: block; + padding: 0.5em 0.75em; } + html.theme--documenter-dark .menu-list a:hover { + background-color: #282f2f; + color: #f2f2f2; } + html.theme--documenter-dark .menu-list a.is-active { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .menu-list li ul { + border-left: 1px solid #5e6d6f; + margin: 0.75em; + padding-left: 0.75em; } + html.theme--documenter-dark .menu-label { + color: white; + font-size: 0.75em; + letter-spacing: 0.1em; + text-transform: uppercase; } + html.theme--documenter-dark .menu-label:not(:first-child) { + margin-top: 1em; } + html.theme--documenter-dark .menu-label:not(:last-child) { + margin-bottom: 1em; } + html.theme--documenter-dark .message { + background-color: #282f2f; + border-radius: 0.4em; + font-size: 15px; } + html.theme--documenter-dark .message strong { + color: currentColor; } + html.theme--documenter-dark .message a:not(.button):not(.tag):not(.dropdown-item) { + color: currentColor; + text-decoration: underline; } + html.theme--documenter-dark .message.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.message { + font-size: 0.85em; } + html.theme--documenter-dark .message.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .message.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .message.is-white { + background-color: white; } + html.theme--documenter-dark .message.is-white .message-header { + background-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .message.is-white .message-body { + border-color: white; + color: #4d4d4d; } + html.theme--documenter-dark .message.is-black { + background-color: #fafafa; } + html.theme--documenter-dark .message.is-black .message-header { + background-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .message.is-black .message-body { + border-color: #0a0a0a; + color: #090909; } + html.theme--documenter-dark .message.is-light { + background-color: #f9fafb; } + html.theme--documenter-dark .message.is-light .message-header { + background-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .message.is-light .message-body { + border-color: #ecf0f1; + color: #505050; } + html.theme--documenter-dark .message.is-dark, html.theme--documenter-dark .content kbd.message { + background-color: #f9fafa; } + html.theme--documenter-dark .message.is-dark .message-header, html.theme--documenter-dark .content kbd.message .message-header { + background-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .message.is-dark .message-body, html.theme--documenter-dark .content kbd.message .message-body { + border-color: #282f2f; + color: #212526; } + html.theme--documenter-dark .message.is-primary, html.theme--documenter-dark .docstring > section > a.message.docs-sourcelink { + background-color: #f8fafc; } + html.theme--documenter-dark .message.is-primary .message-header, html.theme--documenter-dark .docstring > section > a.message.docs-sourcelink .message-header { + background-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .message.is-primary .message-body, html.theme--documenter-dark .docstring > section > a.message.docs-sourcelink .message-body { + border-color: #375a7f; + color: #2b4159; } + html.theme--documenter-dark .message.is-link { + background-color: #f6fefc; } + html.theme--documenter-dark .message.is-link .message-header { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .message.is-link .message-body { + border-color: #1abc9c; + color: #0b2f28; } + html.theme--documenter-dark .message.is-info { + background-color: #f5fbff; } + html.theme--documenter-dark .message.is-info .message-header { + background-color: #024c7d; + color: #fff; } + html.theme--documenter-dark .message.is-info .message-body { + border-color: #024c7d; + color: #033659; } + html.theme--documenter-dark .message.is-success { + background-color: #f5fff9; } + html.theme--documenter-dark .message.is-success .message-header { + background-color: #008438; + color: #fff; } + html.theme--documenter-dark .message.is-success .message-body { + border-color: #008438; + color: #023518; } + html.theme--documenter-dark .message.is-warning { + background-color: #fffcf5; } + html.theme--documenter-dark .message.is-warning .message-header { + background-color: #ad8100; + color: #fff; } + html.theme--documenter-dark .message.is-warning .message-body { + border-color: #ad8100; + color: #3d2e03; } + html.theme--documenter-dark .message.is-danger { + background-color: #fef6f6; } + html.theme--documenter-dark .message.is-danger .message-header { + background-color: #9e1b0d; + color: #fff; } + html.theme--documenter-dark .message.is-danger .message-body { + border-color: #9e1b0d; + color: #7a170c; } + html.theme--documenter-dark .message-header { + align-items: center; + background-color: #fff; + border-radius: 0.4em 0.4em 0 0; + color: rgba(0, 0, 0, 0.7); + display: flex; + font-weight: 700; + justify-content: space-between; + line-height: 1.25; + padding: 0.75em; + position: relative; } + html.theme--documenter-dark .message-header .delete { + flex-grow: 0; + flex-shrink: 0; + margin-left: 0.75em; } + html.theme--documenter-dark .message-header + .message-body { + border-width: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; } + html.theme--documenter-dark .message-body { + border-color: #5e6d6f; + border-radius: 0.4em; + border-style: solid; + border-width: 0 0 0 4px; + color: #fff; + padding: 1em 1.25em; } + html.theme--documenter-dark .message-body code, + html.theme--documenter-dark .message-body pre { + background-color: white; } + html.theme--documenter-dark .message-body pre code { + background-color: transparent; } + html.theme--documenter-dark .modal { + align-items: center; + display: none; + flex-direction: column; + justify-content: center; + overflow: hidden; + position: fixed; + z-index: 40; } + html.theme--documenter-dark .modal.is-active { + display: flex; } + html.theme--documenter-dark .modal-background { + background-color: rgba(10, 10, 10, 0.86); } + html.theme--documenter-dark .modal-content, + html.theme--documenter-dark .modal-card { + margin: 0 20px; + max-height: calc(100vh - 160px); + overflow: auto; + position: relative; + width: 100%; } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .modal-content, + html.theme--documenter-dark .modal-card { + margin: 0 auto; + max-height: calc(100vh - 40px); + width: 640px; } } + html.theme--documenter-dark .modal-close { + background: none; + height: 40px; + position: fixed; + right: 20px; + top: 20px; + width: 40px; } + html.theme--documenter-dark .modal-card { + display: flex; + flex-direction: column; + max-height: calc(100vh - 40px); + overflow: hidden; + -ms-overflow-y: visible; } + html.theme--documenter-dark .modal-card-head, + html.theme--documenter-dark .modal-card-foot { + align-items: center; + background-color: #282f2f; + display: flex; + flex-shrink: 0; + justify-content: flex-start; + padding: 20px; + position: relative; } + html.theme--documenter-dark .modal-card-head { + border-bottom: 1px solid #5e6d6f; + border-top-left-radius: 8px; + border-top-right-radius: 8px; } + html.theme--documenter-dark .modal-card-title { + color: #f2f2f2; + flex-grow: 1; + flex-shrink: 0; + font-size: 1.5rem; + line-height: 1; } + html.theme--documenter-dark .modal-card-foot { + border-bottom-left-radius: 8px; + border-bottom-right-radius: 8px; + border-top: 1px solid #5e6d6f; } + html.theme--documenter-dark .modal-card-foot .button:not(:last-child) { + margin-right: 0.5em; } + html.theme--documenter-dark .modal-card-body { + -webkit-overflow-scrolling: touch; + background-color: white; + flex-grow: 1; + flex-shrink: 1; + overflow: auto; + padding: 20px; } + html.theme--documenter-dark .navbar { + background-color: #375a7f; + min-height: 4rem; + position: relative; + z-index: 30; } + html.theme--documenter-dark .navbar.is-white { + background-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .navbar.is-white .navbar-brand > .navbar-item, + html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link { + color: #0a0a0a; } + html.theme--documenter-dark .navbar.is-white .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-white .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-white .navbar-brand > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link.is-active { + background-color: #f2f2f2; + color: #0a0a0a; } + html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link::after { + border-color: #0a0a0a; } + html.theme--documenter-dark .navbar.is-white .navbar-burger { + color: #0a0a0a; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar.is-white .navbar-start > .navbar-item, + html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link, + html.theme--documenter-dark .navbar.is-white .navbar-end > .navbar-item, + html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link { + color: #0a0a0a; } + html.theme--documenter-dark .navbar.is-white .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-white .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-white .navbar-start > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:focus, + html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:hover, + html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .navbar.is-white .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .navbar.is-white .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .navbar.is-white .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:focus, + html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:hover, + html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link.is-active { + background-color: #f2f2f2; + color: #0a0a0a; } + html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link::after, + html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link::after { + border-color: #0a0a0a; } + html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link, + html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #f2f2f2; + color: #0a0a0a; } + html.theme--documenter-dark .navbar.is-white .navbar-dropdown a.navbar-item.is-active { + background-color: white; + color: #0a0a0a; } } + html.theme--documenter-dark .navbar.is-black { + background-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .navbar.is-black .navbar-brand > .navbar-item, + html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link { + color: white; } + html.theme--documenter-dark .navbar.is-black .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-black .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-black .navbar-brand > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link.is-active { + background-color: black; + color: white; } + html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link::after { + border-color: white; } + html.theme--documenter-dark .navbar.is-black .navbar-burger { + color: white; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar.is-black .navbar-start > .navbar-item, + html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link, + html.theme--documenter-dark .navbar.is-black .navbar-end > .navbar-item, + html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link { + color: white; } + html.theme--documenter-dark .navbar.is-black .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-black .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-black .navbar-start > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:focus, + html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:hover, + html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .navbar.is-black .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .navbar.is-black .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .navbar.is-black .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:focus, + html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:hover, + html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link.is-active { + background-color: black; + color: white; } + html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link::after, + html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link::after { + border-color: white; } + html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link, + html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link { + background-color: black; + color: white; } + html.theme--documenter-dark .navbar.is-black .navbar-dropdown a.navbar-item.is-active { + background-color: #0a0a0a; + color: white; } } + html.theme--documenter-dark .navbar.is-light { + background-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .navbar.is-light .navbar-brand > .navbar-item, + html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link { + color: #282f2f; } + html.theme--documenter-dark .navbar.is-light .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-light .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-light .navbar-brand > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link.is-active { + background-color: #dde4e6; + color: #282f2f; } + html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link::after { + border-color: #282f2f; } + html.theme--documenter-dark .navbar.is-light .navbar-burger { + color: #282f2f; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar.is-light .navbar-start > .navbar-item, + html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link, + html.theme--documenter-dark .navbar.is-light .navbar-end > .navbar-item, + html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link { + color: #282f2f; } + html.theme--documenter-dark .navbar.is-light .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-light .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-light .navbar-start > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:focus, + html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:hover, + html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .navbar.is-light .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .navbar.is-light .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .navbar.is-light .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:focus, + html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:hover, + html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link.is-active { + background-color: #dde4e6; + color: #282f2f; } + html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link::after, + html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link::after { + border-color: #282f2f; } + html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link, + html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #dde4e6; + color: #282f2f; } + html.theme--documenter-dark .navbar.is-light .navbar-dropdown a.navbar-item.is-active { + background-color: #ecf0f1; + color: #282f2f; } } + html.theme--documenter-dark .navbar.is-dark, html.theme--documenter-dark .content kbd.navbar { + background-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .navbar.is-dark .navbar-brand > .navbar-item, html.theme--documenter-dark .content kbd.navbar .navbar-brand > .navbar-item, + html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link, + html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link { + color: #ecf0f1; } + html.theme--documenter-dark .navbar.is-dark .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .content kbd.navbar .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-dark .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .content kbd.navbar .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-dark .navbar-brand > a.navbar-item.is-active, html.theme--documenter-dark .content kbd.navbar .navbar-brand > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link.is-active, + html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link.is-active { + background-color: #1d2122; + color: #ecf0f1; } + html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link::after, html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link::after { + border-color: #ecf0f1; } + html.theme--documenter-dark .navbar.is-dark .navbar-burger, html.theme--documenter-dark .content kbd.navbar .navbar-burger { + color: #ecf0f1; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar.is-dark .navbar-start > .navbar-item, html.theme--documenter-dark .content kbd.navbar .navbar-start > .navbar-item, + html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link, + html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link, + html.theme--documenter-dark .navbar.is-dark .navbar-end > .navbar-item, + html.theme--documenter-dark .content kbd.navbar .navbar-end > .navbar-item, + html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link, + html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link { + color: #ecf0f1; } + html.theme--documenter-dark .navbar.is-dark .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .content kbd.navbar .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-dark .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .content kbd.navbar .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-dark .navbar-start > a.navbar-item.is-active, html.theme--documenter-dark .content kbd.navbar .navbar-start > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:focus, + html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:focus, + html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:hover, + html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:hover, + html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .navbar.is-dark .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .content kbd.navbar .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .navbar.is-dark .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .content kbd.navbar .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .navbar.is-dark .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .content kbd.navbar .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:focus, + html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:focus, + html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:hover, + html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:hover, + html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link.is-active, + html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link.is-active { + background-color: #1d2122; + color: #ecf0f1; } + html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link::after, html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link::after, + html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link::after, + html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link::after { + border-color: #ecf0f1; } + html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link, html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link, + html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link, + html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #1d2122; + color: #ecf0f1; } + html.theme--documenter-dark .navbar.is-dark .navbar-dropdown a.navbar-item.is-active, html.theme--documenter-dark .content kbd.navbar .navbar-dropdown a.navbar-item.is-active { + background-color: #282f2f; + color: #ecf0f1; } } + html.theme--documenter-dark .navbar.is-primary, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink { + background-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .navbar.is-primary .navbar-brand > .navbar-item, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand > .navbar-item, + html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-primary .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-primary .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-primary .navbar-brand > a.navbar-item.is-active, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link.is-active, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active { + background-color: #2f4d6d; + color: #fff; } + html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link::after, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-primary .navbar-burger, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar.is-primary .navbar-start > .navbar-item, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start > .navbar-item, + html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link, + html.theme--documenter-dark .navbar.is-primary .navbar-end > .navbar-item, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end > .navbar-item, + html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-primary .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-primary .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-primary .navbar-start > a.navbar-item.is-active, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:focus, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link:focus, + html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:hover, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link:hover, + html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .navbar.is-primary .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .navbar.is-primary .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .navbar.is-primary .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:focus, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link:focus, + html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:hover, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link:hover, + html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link.is-active, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active { + background-color: #2f4d6d; + color: #fff; } + html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link::after, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link::after, + html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link::after, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link, + html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #2f4d6d; + color: #fff; } + html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active { + background-color: #375a7f; + color: #fff; } } + html.theme--documenter-dark .navbar.is-link { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .navbar.is-link .navbar-brand > .navbar-item, + html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-link .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-link .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-link .navbar-brand > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link.is-active { + background-color: #17a689; + color: #fff; } + html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-link .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar.is-link .navbar-start > .navbar-item, + html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link, + html.theme--documenter-dark .navbar.is-link .navbar-end > .navbar-item, + html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-link .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-link .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-link .navbar-start > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:focus, + html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:hover, + html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .navbar.is-link .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .navbar.is-link .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .navbar.is-link .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:focus, + html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:hover, + html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link.is-active { + background-color: #17a689; + color: #fff; } + html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link::after, + html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link, + html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #17a689; + color: #fff; } + html.theme--documenter-dark .navbar.is-link .navbar-dropdown a.navbar-item.is-active { + background-color: #1abc9c; + color: #fff; } } + html.theme--documenter-dark .navbar.is-info { + background-color: #024c7d; + color: #fff; } + html.theme--documenter-dark .navbar.is-info .navbar-brand > .navbar-item, + html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-info .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-info .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-info .navbar-brand > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link.is-active { + background-color: #023d64; + color: #fff; } + html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-info .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar.is-info .navbar-start > .navbar-item, + html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link, + html.theme--documenter-dark .navbar.is-info .navbar-end > .navbar-item, + html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-info .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-info .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-info .navbar-start > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:focus, + html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:hover, + html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .navbar.is-info .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .navbar.is-info .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .navbar.is-info .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:focus, + html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:hover, + html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link.is-active { + background-color: #023d64; + color: #fff; } + html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link::after, + html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link, + html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #023d64; + color: #fff; } + html.theme--documenter-dark .navbar.is-info .navbar-dropdown a.navbar-item.is-active { + background-color: #024c7d; + color: #fff; } } + html.theme--documenter-dark .navbar.is-success { + background-color: #008438; + color: #fff; } + html.theme--documenter-dark .navbar.is-success .navbar-brand > .navbar-item, + html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-success .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-success .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-success .navbar-brand > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link.is-active { + background-color: #006b2d; + color: #fff; } + html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-success .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar.is-success .navbar-start > .navbar-item, + html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link, + html.theme--documenter-dark .navbar.is-success .navbar-end > .navbar-item, + html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-success .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-success .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-success .navbar-start > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:focus, + html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:hover, + html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .navbar.is-success .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .navbar.is-success .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .navbar.is-success .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:focus, + html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:hover, + html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link.is-active { + background-color: #006b2d; + color: #fff; } + html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link::after, + html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link, + html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #006b2d; + color: #fff; } + html.theme--documenter-dark .navbar.is-success .navbar-dropdown a.navbar-item.is-active { + background-color: #008438; + color: #fff; } } + html.theme--documenter-dark .navbar.is-warning { + background-color: #ad8100; + color: #fff; } + html.theme--documenter-dark .navbar.is-warning .navbar-brand > .navbar-item, + html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-warning .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-warning .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-warning .navbar-brand > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link.is-active { + background-color: #946e00; + color: #fff; } + html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-warning .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar.is-warning .navbar-start > .navbar-item, + html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link, + html.theme--documenter-dark .navbar.is-warning .navbar-end > .navbar-item, + html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-warning .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-warning .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-warning .navbar-start > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:focus, + html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:hover, + html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .navbar.is-warning .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .navbar.is-warning .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .navbar.is-warning .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:focus, + html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:hover, + html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link.is-active { + background-color: #946e00; + color: #fff; } + html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link::after, + html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link, + html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #946e00; + color: #fff; } + html.theme--documenter-dark .navbar.is-warning .navbar-dropdown a.navbar-item.is-active { + background-color: #ad8100; + color: #fff; } } + html.theme--documenter-dark .navbar.is-danger { + background-color: #9e1b0d; + color: #fff; } + html.theme--documenter-dark .navbar.is-danger .navbar-brand > .navbar-item, + html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-danger .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-danger .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-danger .navbar-brand > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link.is-active { + background-color: #86170b; + color: #fff; } + html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-danger .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar.is-danger .navbar-start > .navbar-item, + html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link, + html.theme--documenter-dark .navbar.is-danger .navbar-end > .navbar-item, + html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-danger .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-danger .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-danger .navbar-start > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:focus, + html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:hover, + html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .navbar.is-danger .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .navbar.is-danger .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .navbar.is-danger .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:focus, + html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:hover, + html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link.is-active { + background-color: #86170b; + color: #fff; } + html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link::after, + html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link, + html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #86170b; + color: #fff; } + html.theme--documenter-dark .navbar.is-danger .navbar-dropdown a.navbar-item.is-active { + background-color: #9e1b0d; + color: #fff; } } + html.theme--documenter-dark .navbar > .container { + align-items: stretch; + display: flex; + min-height: 4rem; + width: 100%; } + html.theme--documenter-dark .navbar.has-shadow { + box-shadow: 0 2px 0 0 #282f2f; } + html.theme--documenter-dark .navbar.is-fixed-bottom, html.theme--documenter-dark .navbar.is-fixed-top { + left: 0; + position: fixed; + right: 0; + z-index: 30; } + html.theme--documenter-dark .navbar.is-fixed-bottom { + bottom: 0; } + html.theme--documenter-dark .navbar.is-fixed-bottom.has-shadow { + box-shadow: 0 -2px 0 0 #282f2f; } + html.theme--documenter-dark .navbar.is-fixed-top { + top: 0; } + html.theme--documenter-dark html.has-navbar-fixed-top, + html.theme--documenter-dark body.has-navbar-fixed-top { + padding-top: 4rem; } + html.theme--documenter-dark html.has-navbar-fixed-bottom, + html.theme--documenter-dark body.has-navbar-fixed-bottom { + padding-bottom: 4rem; } + html.theme--documenter-dark .navbar-brand, + html.theme--documenter-dark .navbar-tabs { + align-items: stretch; + display: flex; + flex-shrink: 0; + min-height: 4rem; } + html.theme--documenter-dark .navbar-brand a.navbar-item:focus, html.theme--documenter-dark .navbar-brand a.navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark .navbar-tabs { + -webkit-overflow-scrolling: touch; + max-width: 100vw; + overflow-x: auto; + overflow-y: hidden; } + html.theme--documenter-dark .navbar-burger { + color: #fff; + cursor: pointer; + display: block; + height: 4rem; + position: relative; + width: 4rem; + margin-left: auto; } + html.theme--documenter-dark .navbar-burger span { + background-color: currentColor; + display: block; + height: 1px; + left: calc(50% - 8px); + position: absolute; + transform-origin: center; + transition-duration: 86ms; + transition-property: background-color, opacity, transform; + transition-timing-function: ease-out; + width: 16px; } + html.theme--documenter-dark .navbar-burger span:nth-child(1) { + top: calc(50% - 6px); } + html.theme--documenter-dark .navbar-burger span:nth-child(2) { + top: calc(50% - 1px); } + html.theme--documenter-dark .navbar-burger span:nth-child(3) { + top: calc(50% + 4px); } + html.theme--documenter-dark .navbar-burger:hover { + background-color: rgba(0, 0, 0, 0.05); } + html.theme--documenter-dark .navbar-burger.is-active span:nth-child(1) { + transform: translateY(5px) rotate(45deg); } + html.theme--documenter-dark .navbar-burger.is-active span:nth-child(2) { + opacity: 0; } + html.theme--documenter-dark .navbar-burger.is-active span:nth-child(3) { + transform: translateY(-5px) rotate(-45deg); } + html.theme--documenter-dark .navbar-menu { + display: none; } + html.theme--documenter-dark .navbar-item, + html.theme--documenter-dark .navbar-link { + color: #fff; + display: block; + line-height: 1.5; + padding: 0.5rem 0.75rem; + position: relative; } + html.theme--documenter-dark .navbar-item .icon:only-child, + html.theme--documenter-dark .navbar-link .icon:only-child { + margin-left: -0.25rem; + margin-right: -0.25rem; } + html.theme--documenter-dark a.navbar-item, + html.theme--documenter-dark .navbar-link { + cursor: pointer; } + html.theme--documenter-dark a.navbar-item:focus, html.theme--documenter-dark a.navbar-item:focus-within, html.theme--documenter-dark a.navbar-item:hover, html.theme--documenter-dark a.navbar-item.is-active, + html.theme--documenter-dark .navbar-link:focus, + html.theme--documenter-dark .navbar-link:focus-within, + html.theme--documenter-dark .navbar-link:hover, + html.theme--documenter-dark .navbar-link.is-active { + background-color: transparent; + color: #1abc9c; } + html.theme--documenter-dark .navbar-item { + display: block; + flex-grow: 0; + flex-shrink: 0; } + html.theme--documenter-dark .navbar-item img { + max-height: 1.75rem; } + html.theme--documenter-dark .navbar-item.has-dropdown { + padding: 0; } + html.theme--documenter-dark .navbar-item.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + html.theme--documenter-dark .navbar-item.is-tab { + border-bottom: 1px solid transparent; + min-height: 4rem; + padding-bottom: calc(0.5rem - 1px); } + html.theme--documenter-dark .navbar-item.is-tab:focus, html.theme--documenter-dark .navbar-item.is-tab:hover { + background-color: transparent; + border-bottom-color: #1abc9c; } + html.theme--documenter-dark .navbar-item.is-tab.is-active { + background-color: transparent; + border-bottom-color: #1abc9c; + border-bottom-style: solid; + border-bottom-width: 3px; + color: #1abc9c; + padding-bottom: calc(0.5rem - 3px); } + html.theme--documenter-dark .navbar-content { + flex-grow: 1; + flex-shrink: 1; } + html.theme--documenter-dark .navbar-link:not(.is-arrowless) { + padding-right: 2.5em; } + html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after { + border-color: #fff; + margin-top: -0.375em; + right: 1.125em; } + html.theme--documenter-dark .navbar-dropdown { + font-size: 0.875rem; + padding-bottom: 0.5rem; + padding-top: 0.5rem; } + html.theme--documenter-dark .navbar-dropdown .navbar-item { + padding-left: 1.5rem; + padding-right: 1.5rem; } + html.theme--documenter-dark .navbar-divider { + background-color: rgba(0, 0, 0, 0.2); + border: none; + display: none; + height: 2px; + margin: 0.5rem 0; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .navbar > .container { + display: block; } + html.theme--documenter-dark .navbar-brand .navbar-item, + html.theme--documenter-dark .navbar-tabs .navbar-item { + align-items: center; + display: flex; } + html.theme--documenter-dark .navbar-link::after { + display: none; } + html.theme--documenter-dark .navbar-menu { + background-color: #375a7f; + box-shadow: 0 8px 16px rgba(10, 10, 10, 0.1); + padding: 0.5rem 0; } + html.theme--documenter-dark .navbar-menu.is-active { + display: block; } + html.theme--documenter-dark .navbar.is-fixed-bottom-touch, html.theme--documenter-dark .navbar.is-fixed-top-touch { + left: 0; + position: fixed; + right: 0; + z-index: 30; } + html.theme--documenter-dark .navbar.is-fixed-bottom-touch { + bottom: 0; } + html.theme--documenter-dark .navbar.is-fixed-bottom-touch.has-shadow { + box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .navbar.is-fixed-top-touch { + top: 0; } + html.theme--documenter-dark .navbar.is-fixed-top .navbar-menu, html.theme--documenter-dark .navbar.is-fixed-top-touch .navbar-menu { + -webkit-overflow-scrolling: touch; + max-height: calc(100vh - 4rem); + overflow: auto; } + html.theme--documenter-dark html.has-navbar-fixed-top-touch, + html.theme--documenter-dark body.has-navbar-fixed-top-touch { + padding-top: 4rem; } + html.theme--documenter-dark html.has-navbar-fixed-bottom-touch, + html.theme--documenter-dark body.has-navbar-fixed-bottom-touch { + padding-bottom: 4rem; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar, + html.theme--documenter-dark .navbar-menu, + html.theme--documenter-dark .navbar-start, + html.theme--documenter-dark .navbar-end { + align-items: stretch; + display: flex; } + html.theme--documenter-dark .navbar { + min-height: 4rem; } + html.theme--documenter-dark .navbar.is-spaced { + padding: 1rem 2rem; } + html.theme--documenter-dark .navbar.is-spaced .navbar-start, + html.theme--documenter-dark .navbar.is-spaced .navbar-end { + align-items: center; } + html.theme--documenter-dark .navbar.is-spaced a.navbar-item, + html.theme--documenter-dark .navbar.is-spaced .navbar-link { + border-radius: 0.4em; } + html.theme--documenter-dark .navbar.is-transparent a.navbar-item:focus, html.theme--documenter-dark .navbar.is-transparent a.navbar-item:hover, html.theme--documenter-dark .navbar.is-transparent a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-transparent .navbar-link:focus, + html.theme--documenter-dark .navbar.is-transparent .navbar-link:hover, + html.theme--documenter-dark .navbar.is-transparent .navbar-link.is-active { + background-color: transparent !important; } + html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link, html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link, html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link, html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link { + background-color: transparent !important; } + html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:focus, html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:hover { + background-color: transparent; + color: #dbdee0; } + html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active { + background-color: transparent; + color: #1abc9c; } + html.theme--documenter-dark .navbar-burger { + display: none; } + html.theme--documenter-dark .navbar-item, + html.theme--documenter-dark .navbar-link { + align-items: center; + display: flex; } + html.theme--documenter-dark .navbar-item { + display: flex; } + html.theme--documenter-dark .navbar-item.has-dropdown { + align-items: stretch; } + html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-link::after { + transform: rotate(135deg) translate(0.25em, -0.25em); } + html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-dropdown { + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 8px 8px 0 0; + border-top: none; + bottom: 100%; + box-shadow: 0 -8px 8px rgba(10, 10, 10, 0.1); + top: auto; } + html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown { + display: block; } + .navbar.is-spaced html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown.is-boxed, .navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed, .navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed, .navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed { + opacity: 1; + pointer-events: auto; + transform: translateY(0); } + html.theme--documenter-dark .navbar-menu { + flex-grow: 1; + flex-shrink: 0; } + html.theme--documenter-dark .navbar-start { + justify-content: flex-start; + margin-right: auto; } + html.theme--documenter-dark .navbar-end { + justify-content: flex-end; + margin-left: auto; } + html.theme--documenter-dark .navbar-dropdown { + background-color: #375a7f; + border-bottom-left-radius: 8px; + border-bottom-right-radius: 8px; + border-top: 1px solid rgba(0, 0, 0, 0.2); + box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1); + display: none; + font-size: 0.875rem; + left: 0; + min-width: 100%; + position: absolute; + top: 100%; + z-index: 20; } + html.theme--documenter-dark .navbar-dropdown .navbar-item { + padding: 0.375rem 1rem; + white-space: nowrap; } + html.theme--documenter-dark .navbar-dropdown a.navbar-item { + padding-right: 3rem; } + html.theme--documenter-dark .navbar-dropdown a.navbar-item:focus, html.theme--documenter-dark .navbar-dropdown a.navbar-item:hover { + background-color: transparent; + color: #dbdee0; } + html.theme--documenter-dark .navbar-dropdown a.navbar-item.is-active { + background-color: transparent; + color: #1abc9c; } + .navbar.is-spaced html.theme--documenter-dark .navbar-dropdown, html.theme--documenter-dark .navbar-dropdown.is-boxed { + border-radius: 8px; + border-top: none; + box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + display: block; + opacity: 0; + pointer-events: none; + top: calc(100% + (-4px)); + transform: translateY(-5px); + transition-duration: 86ms; + transition-property: opacity, transform; } + html.theme--documenter-dark .navbar-dropdown.is-right { + left: auto; + right: 0; } + html.theme--documenter-dark .navbar-divider { + display: block; } + html.theme--documenter-dark .navbar > .container .navbar-brand, + html.theme--documenter-dark .container > .navbar .navbar-brand { + margin-left: -.75rem; } + html.theme--documenter-dark .navbar > .container .navbar-menu, + html.theme--documenter-dark .container > .navbar .navbar-menu { + margin-right: -.75rem; } + html.theme--documenter-dark .navbar.is-fixed-bottom-desktop, html.theme--documenter-dark .navbar.is-fixed-top-desktop { + left: 0; + position: fixed; + right: 0; + z-index: 30; } + html.theme--documenter-dark .navbar.is-fixed-bottom-desktop { + bottom: 0; } + html.theme--documenter-dark .navbar.is-fixed-bottom-desktop.has-shadow { + box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .navbar.is-fixed-top-desktop { + top: 0; } + html.theme--documenter-dark html.has-navbar-fixed-top-desktop, + html.theme--documenter-dark body.has-navbar-fixed-top-desktop { + padding-top: 4rem; } + html.theme--documenter-dark html.has-navbar-fixed-bottom-desktop, + html.theme--documenter-dark body.has-navbar-fixed-bottom-desktop { + padding-bottom: 4rem; } + html.theme--documenter-dark html.has-spaced-navbar-fixed-top, + html.theme--documenter-dark body.has-spaced-navbar-fixed-top { + padding-top: 6rem; } + html.theme--documenter-dark html.has-spaced-navbar-fixed-bottom, + html.theme--documenter-dark body.has-spaced-navbar-fixed-bottom { + padding-bottom: 6rem; } + html.theme--documenter-dark a.navbar-item.is-active, + html.theme--documenter-dark .navbar-link.is-active { + color: #1abc9c; } + html.theme--documenter-dark a.navbar-item.is-active:not(:focus):not(:hover), + html.theme--documenter-dark .navbar-link.is-active:not(:focus):not(:hover) { + background-color: transparent; } + html.theme--documenter-dark .navbar-item.has-dropdown:focus .navbar-link, html.theme--documenter-dark .navbar-item.has-dropdown:hover .navbar-link, html.theme--documenter-dark .navbar-item.has-dropdown.is-active .navbar-link { + background-color: transparent; } } + html.theme--documenter-dark .hero.is-fullheight-with-navbar { + min-height: calc(100vh - 4rem); } + html.theme--documenter-dark .pagination { + font-size: 15px; + margin: -0.25rem; } + html.theme--documenter-dark .pagination.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.pagination { + font-size: 0.85em; } + html.theme--documenter-dark .pagination.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .pagination.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .pagination.is-rounded .pagination-previous, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.pagination .pagination-previous, + html.theme--documenter-dark .pagination.is-rounded .pagination-next, + html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.pagination .pagination-next { + padding-left: 1em; + padding-right: 1em; + border-radius: 290486px; } + html.theme--documenter-dark .pagination.is-rounded .pagination-link, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.pagination .pagination-link { + border-radius: 290486px; } + html.theme--documenter-dark .pagination, + html.theme--documenter-dark .pagination-list { + align-items: center; + display: flex; + justify-content: center; + text-align: center; } + html.theme--documenter-dark .pagination-previous, + html.theme--documenter-dark .pagination-next, + html.theme--documenter-dark .pagination-link, + html.theme--documenter-dark .pagination-ellipsis { + font-size: 1em; + justify-content: center; + margin: 0.25rem; + padding-left: 0.5em; + padding-right: 0.5em; + text-align: center; } + html.theme--documenter-dark .pagination-previous, + html.theme--documenter-dark .pagination-next, + html.theme--documenter-dark .pagination-link { + border-color: #5e6d6f; + color: #1abc9c; + min-width: 2.25em; } + html.theme--documenter-dark .pagination-previous:hover, + html.theme--documenter-dark .pagination-next:hover, + html.theme--documenter-dark .pagination-link:hover { + border-color: #8c9b9d; + color: #1dd2af; } + html.theme--documenter-dark .pagination-previous:focus, + html.theme--documenter-dark .pagination-next:focus, + html.theme--documenter-dark .pagination-link:focus { + border-color: #8c9b9d; } + html.theme--documenter-dark .pagination-previous:active, + html.theme--documenter-dark .pagination-next:active, + html.theme--documenter-dark .pagination-link:active { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2); } + html.theme--documenter-dark .pagination-previous[disabled], + html.theme--documenter-dark .pagination-next[disabled], + html.theme--documenter-dark .pagination-link[disabled] { + background-color: #dbdee0; + border-color: #dbdee0; + box-shadow: none; + color: #5e6d6f; + opacity: 0.5; } + html.theme--documenter-dark .pagination-previous, + html.theme--documenter-dark .pagination-next { + padding-left: 0.75em; + padding-right: 0.75em; + white-space: nowrap; } + html.theme--documenter-dark .pagination-link.is-current { + background-color: #1abc9c; + border-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .pagination-ellipsis { + color: #8c9b9d; + pointer-events: none; } + html.theme--documenter-dark .pagination-list { + flex-wrap: wrap; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .pagination { + flex-wrap: wrap; } + html.theme--documenter-dark .pagination-previous, + html.theme--documenter-dark .pagination-next { + flex-grow: 1; + flex-shrink: 1; } + html.theme--documenter-dark .pagination-list li { + flex-grow: 1; + flex-shrink: 1; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .pagination-list { + flex-grow: 1; + flex-shrink: 1; + justify-content: flex-start; + order: 1; } + html.theme--documenter-dark .pagination-previous { + order: 2; } + html.theme--documenter-dark .pagination-next { + order: 3; } + html.theme--documenter-dark .pagination { + justify-content: space-between; } + html.theme--documenter-dark .pagination.is-centered .pagination-previous { + order: 1; } + html.theme--documenter-dark .pagination.is-centered .pagination-list { + justify-content: center; + order: 2; } + html.theme--documenter-dark .pagination.is-centered .pagination-next { + order: 3; } + html.theme--documenter-dark .pagination.is-right .pagination-previous { + order: 1; } + html.theme--documenter-dark .pagination.is-right .pagination-next { + order: 2; } + html.theme--documenter-dark .pagination.is-right .pagination-list { + justify-content: flex-end; + order: 3; } } + html.theme--documenter-dark .panel { + font-size: 15px; } + html.theme--documenter-dark .panel:not(:last-child) { + margin-bottom: 1.5rem; } + html.theme--documenter-dark .panel-heading, + html.theme--documenter-dark .panel-tabs, + html.theme--documenter-dark .panel-block { + border-bottom: 1px solid #5e6d6f; + border-left: 1px solid #5e6d6f; + border-right: 1px solid #5e6d6f; } + html.theme--documenter-dark .panel-heading:first-child, + html.theme--documenter-dark .panel-tabs:first-child, + html.theme--documenter-dark .panel-block:first-child { + border-top: 1px solid #5e6d6f; } + html.theme--documenter-dark .panel-heading { + background-color: #282f2f; + border-radius: 0.4em 0.4em 0 0; + color: #f2f2f2; + font-size: 1.25em; + font-weight: 300; + line-height: 1.25; + padding: 0.5em 0.75em; } + html.theme--documenter-dark .panel-tabs { + align-items: flex-end; + display: flex; + font-size: 0.875em; + justify-content: center; } + html.theme--documenter-dark .panel-tabs a { + border-bottom: 1px solid #5e6d6f; + margin-bottom: -1px; + padding: 0.5em; } + html.theme--documenter-dark .panel-tabs a.is-active { + border-bottom-color: #343c3d; + color: #17a689; } + html.theme--documenter-dark .panel-list a { + color: #fff; } + html.theme--documenter-dark .panel-list a:hover { + color: #1abc9c; } + html.theme--documenter-dark .panel-block { + align-items: center; + color: #f2f2f2; + display: flex; + justify-content: flex-start; + padding: 0.5em 0.75em; } + html.theme--documenter-dark .panel-block input[type="checkbox"] { + margin-right: 0.75em; } + html.theme--documenter-dark .panel-block > .control { + flex-grow: 1; + flex-shrink: 1; + width: 100%; } + html.theme--documenter-dark .panel-block.is-wrapped { + flex-wrap: wrap; } + html.theme--documenter-dark .panel-block.is-active { + border-left-color: #1abc9c; + color: #17a689; } + html.theme--documenter-dark .panel-block.is-active .panel-icon { + color: #1abc9c; } + html.theme--documenter-dark a.panel-block, + html.theme--documenter-dark label.panel-block { + cursor: pointer; } + html.theme--documenter-dark a.panel-block:hover, + html.theme--documenter-dark label.panel-block:hover { + background-color: #282f2f; } + html.theme--documenter-dark .panel-icon { + display: inline-block; + font-size: 14px; + height: 1em; + line-height: 1em; + text-align: center; + vertical-align: top; + width: 1em; + color: white; + margin-right: 0.75em; } + html.theme--documenter-dark .panel-icon .fa { + font-size: inherit; + line-height: inherit; } + html.theme--documenter-dark .tabs { + -webkit-overflow-scrolling: touch; + align-items: stretch; + display: flex; + font-size: 15px; + justify-content: space-between; + overflow: hidden; + overflow-x: auto; + white-space: nowrap; } + html.theme--documenter-dark .tabs a { + align-items: center; + border-bottom-color: #5e6d6f; + border-bottom-style: solid; + border-bottom-width: 1px; + color: #fff; + display: flex; + justify-content: center; + margin-bottom: -1px; + padding: 0.5em 1em; + vertical-align: top; } + html.theme--documenter-dark .tabs a:hover { + border-bottom-color: #f2f2f2; + color: #f2f2f2; } + html.theme--documenter-dark .tabs li { + display: block; } + html.theme--documenter-dark .tabs li.is-active a { + border-bottom-color: #1abc9c; + color: #1abc9c; } + html.theme--documenter-dark .tabs ul { + align-items: center; + border-bottom-color: #5e6d6f; + border-bottom-style: solid; + border-bottom-width: 1px; + display: flex; + flex-grow: 1; + flex-shrink: 0; + justify-content: flex-start; } + html.theme--documenter-dark .tabs ul.is-left { + padding-right: 0.75em; } + html.theme--documenter-dark .tabs ul.is-center { + flex: none; + justify-content: center; + padding-left: 0.75em; + padding-right: 0.75em; } + html.theme--documenter-dark .tabs ul.is-right { + justify-content: flex-end; + padding-left: 0.75em; } + html.theme--documenter-dark .tabs .icon:first-child { + margin-right: 0.5em; } + html.theme--documenter-dark .tabs .icon:last-child { + margin-left: 0.5em; } + html.theme--documenter-dark .tabs.is-centered ul { + justify-content: center; } + html.theme--documenter-dark .tabs.is-right ul { + justify-content: flex-end; } + html.theme--documenter-dark .tabs.is-boxed a { + border: 1px solid transparent; + border-radius: 0.4em 0.4em 0 0; } + html.theme--documenter-dark .tabs.is-boxed a:hover { + background-color: #282f2f; + border-bottom-color: #5e6d6f; } + html.theme--documenter-dark .tabs.is-boxed li.is-active a { + background-color: white; + border-color: #5e6d6f; + border-bottom-color: transparent !important; } + html.theme--documenter-dark .tabs.is-fullwidth li { + flex-grow: 1; + flex-shrink: 0; } + html.theme--documenter-dark .tabs.is-toggle a { + border-color: #5e6d6f; + border-style: solid; + border-width: 1px; + margin-bottom: 0; + position: relative; } + html.theme--documenter-dark .tabs.is-toggle a:hover { + background-color: #282f2f; + border-color: #8c9b9d; + z-index: 2; } + html.theme--documenter-dark .tabs.is-toggle li + li { + margin-left: -1px; } + html.theme--documenter-dark .tabs.is-toggle li:first-child a { + border-radius: 0.4em 0 0 0.4em; } + html.theme--documenter-dark .tabs.is-toggle li:last-child a { + border-radius: 0 0.4em 0.4em 0; } + html.theme--documenter-dark .tabs.is-toggle li.is-active a { + background-color: #1abc9c; + border-color: #1abc9c; + color: #fff; + z-index: 1; } + html.theme--documenter-dark .tabs.is-toggle ul { + border-bottom: none; } + html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:first-child a { + border-bottom-left-radius: 290486px; + border-top-left-radius: 290486px; + padding-left: 1.25em; } + html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:last-child a { + border-bottom-right-radius: 290486px; + border-top-right-radius: 290486px; + padding-right: 1.25em; } + html.theme--documenter-dark .tabs.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.tabs { + font-size: 0.85em; } + html.theme--documenter-dark .tabs.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .tabs.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .column { + display: block; + flex-basis: 0; + flex-grow: 1; + flex-shrink: 1; + padding: 0.75rem; } + .columns.is-mobile > html.theme--documenter-dark .column.is-narrow { + flex: none; } + .columns.is-mobile > html.theme--documenter-dark .column.is-full { + flex: none; + width: 100%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-three-quarters { + flex: none; + width: 75%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-two-thirds { + flex: none; + width: 66.6666%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-half { + flex: none; + width: 50%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-one-third { + flex: none; + width: 33.3333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-one-quarter { + flex: none; + width: 25%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-one-fifth { + flex: none; + width: 20%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-two-fifths { + flex: none; + width: 40%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-three-fifths { + flex: none; + width: 60%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-four-fifths { + flex: none; + width: 80%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-three-quarters { + margin-left: 75%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-two-thirds { + margin-left: 66.6666%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-half { + margin-left: 50%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-one-third { + margin-left: 33.3333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-one-quarter { + margin-left: 25%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-one-fifth { + margin-left: 20%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-two-fifths { + margin-left: 40%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-three-fifths { + margin-left: 60%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-four-fifths { + margin-left: 80%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-0 { + flex: none; + width: 0%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-0 { + margin-left: 0%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-1 { + flex: none; + width: 8.33333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-1 { + margin-left: 8.33333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-2 { + flex: none; + width: 16.66667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-2 { + margin-left: 16.66667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-3 { + flex: none; + width: 25%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-3 { + margin-left: 25%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-4 { + flex: none; + width: 33.33333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-4 { + margin-left: 33.33333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-5 { + flex: none; + width: 41.66667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-5 { + margin-left: 41.66667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-6 { + flex: none; + width: 50%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-6 { + margin-left: 50%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-7 { + flex: none; + width: 58.33333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-7 { + margin-left: 58.33333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-8 { + flex: none; + width: 66.66667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-8 { + margin-left: 66.66667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-9 { + flex: none; + width: 75%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-9 { + margin-left: 75%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-10 { + flex: none; + width: 83.33333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-10 { + margin-left: 83.33333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-11 { + flex: none; + width: 91.66667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-11 { + margin-left: 91.66667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-12 { + flex: none; + width: 100%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-12 { + margin-left: 100%; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .column.is-narrow-mobile { + flex: none; } + html.theme--documenter-dark .column.is-full-mobile { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-three-quarters-mobile { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-two-thirds-mobile { + flex: none; + width: 66.6666%; } + html.theme--documenter-dark .column.is-half-mobile { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-one-third-mobile { + flex: none; + width: 33.3333%; } + html.theme--documenter-dark .column.is-one-quarter-mobile { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-one-fifth-mobile { + flex: none; + width: 20%; } + html.theme--documenter-dark .column.is-two-fifths-mobile { + flex: none; + width: 40%; } + html.theme--documenter-dark .column.is-three-fifths-mobile { + flex: none; + width: 60%; } + html.theme--documenter-dark .column.is-four-fifths-mobile { + flex: none; + width: 80%; } + html.theme--documenter-dark .column.is-offset-three-quarters-mobile { + margin-left: 75%; } + html.theme--documenter-dark .column.is-offset-two-thirds-mobile { + margin-left: 66.6666%; } + html.theme--documenter-dark .column.is-offset-half-mobile { + margin-left: 50%; } + html.theme--documenter-dark .column.is-offset-one-third-mobile { + margin-left: 33.3333%; } + html.theme--documenter-dark .column.is-offset-one-quarter-mobile { + margin-left: 25%; } + html.theme--documenter-dark .column.is-offset-one-fifth-mobile { + margin-left: 20%; } + html.theme--documenter-dark .column.is-offset-two-fifths-mobile { + margin-left: 40%; } + html.theme--documenter-dark .column.is-offset-three-fifths-mobile { + margin-left: 60%; } + html.theme--documenter-dark .column.is-offset-four-fifths-mobile { + margin-left: 80%; } + html.theme--documenter-dark .column.is-0-mobile { + flex: none; + width: 0%; } + html.theme--documenter-dark .column.is-offset-0-mobile { + margin-left: 0%; } + html.theme--documenter-dark .column.is-1-mobile { + flex: none; + width: 8.33333%; } + html.theme--documenter-dark .column.is-offset-1-mobile { + margin-left: 8.33333%; } + html.theme--documenter-dark .column.is-2-mobile { + flex: none; + width: 16.66667%; } + html.theme--documenter-dark .column.is-offset-2-mobile { + margin-left: 16.66667%; } + html.theme--documenter-dark .column.is-3-mobile { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-offset-3-mobile { + margin-left: 25%; } + html.theme--documenter-dark .column.is-4-mobile { + flex: none; + width: 33.33333%; } + html.theme--documenter-dark .column.is-offset-4-mobile { + margin-left: 33.33333%; } + html.theme--documenter-dark .column.is-5-mobile { + flex: none; + width: 41.66667%; } + html.theme--documenter-dark .column.is-offset-5-mobile { + margin-left: 41.66667%; } + html.theme--documenter-dark .column.is-6-mobile { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-offset-6-mobile { + margin-left: 50%; } + html.theme--documenter-dark .column.is-7-mobile { + flex: none; + width: 58.33333%; } + html.theme--documenter-dark .column.is-offset-7-mobile { + margin-left: 58.33333%; } + html.theme--documenter-dark .column.is-8-mobile { + flex: none; + width: 66.66667%; } + html.theme--documenter-dark .column.is-offset-8-mobile { + margin-left: 66.66667%; } + html.theme--documenter-dark .column.is-9-mobile { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-offset-9-mobile { + margin-left: 75%; } + html.theme--documenter-dark .column.is-10-mobile { + flex: none; + width: 83.33333%; } + html.theme--documenter-dark .column.is-offset-10-mobile { + margin-left: 83.33333%; } + html.theme--documenter-dark .column.is-11-mobile { + flex: none; + width: 91.66667%; } + html.theme--documenter-dark .column.is-offset-11-mobile { + margin-left: 91.66667%; } + html.theme--documenter-dark .column.is-12-mobile { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-offset-12-mobile { + margin-left: 100%; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .column.is-narrow, html.theme--documenter-dark .column.is-narrow-tablet { + flex: none; } + html.theme--documenter-dark .column.is-full, html.theme--documenter-dark .column.is-full-tablet { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-three-quarters, html.theme--documenter-dark .column.is-three-quarters-tablet { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-two-thirds, html.theme--documenter-dark .column.is-two-thirds-tablet { + flex: none; + width: 66.6666%; } + html.theme--documenter-dark .column.is-half, html.theme--documenter-dark .column.is-half-tablet { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-one-third, html.theme--documenter-dark .column.is-one-third-tablet { + flex: none; + width: 33.3333%; } + html.theme--documenter-dark .column.is-one-quarter, html.theme--documenter-dark .column.is-one-quarter-tablet { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-one-fifth, html.theme--documenter-dark .column.is-one-fifth-tablet { + flex: none; + width: 20%; } + html.theme--documenter-dark .column.is-two-fifths, html.theme--documenter-dark .column.is-two-fifths-tablet { + flex: none; + width: 40%; } + html.theme--documenter-dark .column.is-three-fifths, html.theme--documenter-dark .column.is-three-fifths-tablet { + flex: none; + width: 60%; } + html.theme--documenter-dark .column.is-four-fifths, html.theme--documenter-dark .column.is-four-fifths-tablet { + flex: none; + width: 80%; } + html.theme--documenter-dark .column.is-offset-three-quarters, html.theme--documenter-dark .column.is-offset-three-quarters-tablet { + margin-left: 75%; } + html.theme--documenter-dark .column.is-offset-two-thirds, html.theme--documenter-dark .column.is-offset-two-thirds-tablet { + margin-left: 66.6666%; } + html.theme--documenter-dark .column.is-offset-half, html.theme--documenter-dark .column.is-offset-half-tablet { + margin-left: 50%; } + html.theme--documenter-dark .column.is-offset-one-third, html.theme--documenter-dark .column.is-offset-one-third-tablet { + margin-left: 33.3333%; } + html.theme--documenter-dark .column.is-offset-one-quarter, html.theme--documenter-dark .column.is-offset-one-quarter-tablet { + margin-left: 25%; } + html.theme--documenter-dark .column.is-offset-one-fifth, html.theme--documenter-dark .column.is-offset-one-fifth-tablet { + margin-left: 20%; } + html.theme--documenter-dark .column.is-offset-two-fifths, html.theme--documenter-dark .column.is-offset-two-fifths-tablet { + margin-left: 40%; } + html.theme--documenter-dark .column.is-offset-three-fifths, html.theme--documenter-dark .column.is-offset-three-fifths-tablet { + margin-left: 60%; } + html.theme--documenter-dark .column.is-offset-four-fifths, html.theme--documenter-dark .column.is-offset-four-fifths-tablet { + margin-left: 80%; } + html.theme--documenter-dark .column.is-0, html.theme--documenter-dark .column.is-0-tablet { + flex: none; + width: 0%; } + html.theme--documenter-dark .column.is-offset-0, html.theme--documenter-dark .column.is-offset-0-tablet { + margin-left: 0%; } + html.theme--documenter-dark .column.is-1, html.theme--documenter-dark .column.is-1-tablet { + flex: none; + width: 8.33333%; } + html.theme--documenter-dark .column.is-offset-1, html.theme--documenter-dark .column.is-offset-1-tablet { + margin-left: 8.33333%; } + html.theme--documenter-dark .column.is-2, html.theme--documenter-dark .column.is-2-tablet { + flex: none; + width: 16.66667%; } + html.theme--documenter-dark .column.is-offset-2, html.theme--documenter-dark .column.is-offset-2-tablet { + margin-left: 16.66667%; } + html.theme--documenter-dark .column.is-3, html.theme--documenter-dark .column.is-3-tablet { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-offset-3, html.theme--documenter-dark .column.is-offset-3-tablet { + margin-left: 25%; } + html.theme--documenter-dark .column.is-4, html.theme--documenter-dark .column.is-4-tablet { + flex: none; + width: 33.33333%; } + html.theme--documenter-dark .column.is-offset-4, html.theme--documenter-dark .column.is-offset-4-tablet { + margin-left: 33.33333%; } + html.theme--documenter-dark .column.is-5, html.theme--documenter-dark .column.is-5-tablet { + flex: none; + width: 41.66667%; } + html.theme--documenter-dark .column.is-offset-5, html.theme--documenter-dark .column.is-offset-5-tablet { + margin-left: 41.66667%; } + html.theme--documenter-dark .column.is-6, html.theme--documenter-dark .column.is-6-tablet { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-offset-6, html.theme--documenter-dark .column.is-offset-6-tablet { + margin-left: 50%; } + html.theme--documenter-dark .column.is-7, html.theme--documenter-dark .column.is-7-tablet { + flex: none; + width: 58.33333%; } + html.theme--documenter-dark .column.is-offset-7, html.theme--documenter-dark .column.is-offset-7-tablet { + margin-left: 58.33333%; } + html.theme--documenter-dark .column.is-8, html.theme--documenter-dark .column.is-8-tablet { + flex: none; + width: 66.66667%; } + html.theme--documenter-dark .column.is-offset-8, html.theme--documenter-dark .column.is-offset-8-tablet { + margin-left: 66.66667%; } + html.theme--documenter-dark .column.is-9, html.theme--documenter-dark .column.is-9-tablet { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-offset-9, html.theme--documenter-dark .column.is-offset-9-tablet { + margin-left: 75%; } + html.theme--documenter-dark .column.is-10, html.theme--documenter-dark .column.is-10-tablet { + flex: none; + width: 83.33333%; } + html.theme--documenter-dark .column.is-offset-10, html.theme--documenter-dark .column.is-offset-10-tablet { + margin-left: 83.33333%; } + html.theme--documenter-dark .column.is-11, html.theme--documenter-dark .column.is-11-tablet { + flex: none; + width: 91.66667%; } + html.theme--documenter-dark .column.is-offset-11, html.theme--documenter-dark .column.is-offset-11-tablet { + margin-left: 91.66667%; } + html.theme--documenter-dark .column.is-12, html.theme--documenter-dark .column.is-12-tablet { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-offset-12, html.theme--documenter-dark .column.is-offset-12-tablet { + margin-left: 100%; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .column.is-narrow-touch { + flex: none; } + html.theme--documenter-dark .column.is-full-touch { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-three-quarters-touch { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-two-thirds-touch { + flex: none; + width: 66.6666%; } + html.theme--documenter-dark .column.is-half-touch { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-one-third-touch { + flex: none; + width: 33.3333%; } + html.theme--documenter-dark .column.is-one-quarter-touch { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-one-fifth-touch { + flex: none; + width: 20%; } + html.theme--documenter-dark .column.is-two-fifths-touch { + flex: none; + width: 40%; } + html.theme--documenter-dark .column.is-three-fifths-touch { + flex: none; + width: 60%; } + html.theme--documenter-dark .column.is-four-fifths-touch { + flex: none; + width: 80%; } + html.theme--documenter-dark .column.is-offset-three-quarters-touch { + margin-left: 75%; } + html.theme--documenter-dark .column.is-offset-two-thirds-touch { + margin-left: 66.6666%; } + html.theme--documenter-dark .column.is-offset-half-touch { + margin-left: 50%; } + html.theme--documenter-dark .column.is-offset-one-third-touch { + margin-left: 33.3333%; } + html.theme--documenter-dark .column.is-offset-one-quarter-touch { + margin-left: 25%; } + html.theme--documenter-dark .column.is-offset-one-fifth-touch { + margin-left: 20%; } + html.theme--documenter-dark .column.is-offset-two-fifths-touch { + margin-left: 40%; } + html.theme--documenter-dark .column.is-offset-three-fifths-touch { + margin-left: 60%; } + html.theme--documenter-dark .column.is-offset-four-fifths-touch { + margin-left: 80%; } + html.theme--documenter-dark .column.is-0-touch { + flex: none; + width: 0%; } + html.theme--documenter-dark .column.is-offset-0-touch { + margin-left: 0%; } + html.theme--documenter-dark .column.is-1-touch { + flex: none; + width: 8.33333%; } + html.theme--documenter-dark .column.is-offset-1-touch { + margin-left: 8.33333%; } + html.theme--documenter-dark .column.is-2-touch { + flex: none; + width: 16.66667%; } + html.theme--documenter-dark .column.is-offset-2-touch { + margin-left: 16.66667%; } + html.theme--documenter-dark .column.is-3-touch { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-offset-3-touch { + margin-left: 25%; } + html.theme--documenter-dark .column.is-4-touch { + flex: none; + width: 33.33333%; } + html.theme--documenter-dark .column.is-offset-4-touch { + margin-left: 33.33333%; } + html.theme--documenter-dark .column.is-5-touch { + flex: none; + width: 41.66667%; } + html.theme--documenter-dark .column.is-offset-5-touch { + margin-left: 41.66667%; } + html.theme--documenter-dark .column.is-6-touch { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-offset-6-touch { + margin-left: 50%; } + html.theme--documenter-dark .column.is-7-touch { + flex: none; + width: 58.33333%; } + html.theme--documenter-dark .column.is-offset-7-touch { + margin-left: 58.33333%; } + html.theme--documenter-dark .column.is-8-touch { + flex: none; + width: 66.66667%; } + html.theme--documenter-dark .column.is-offset-8-touch { + margin-left: 66.66667%; } + html.theme--documenter-dark .column.is-9-touch { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-offset-9-touch { + margin-left: 75%; } + html.theme--documenter-dark .column.is-10-touch { + flex: none; + width: 83.33333%; } + html.theme--documenter-dark .column.is-offset-10-touch { + margin-left: 83.33333%; } + html.theme--documenter-dark .column.is-11-touch { + flex: none; + width: 91.66667%; } + html.theme--documenter-dark .column.is-offset-11-touch { + margin-left: 91.66667%; } + html.theme--documenter-dark .column.is-12-touch { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-offset-12-touch { + margin-left: 100%; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .column.is-narrow-desktop { + flex: none; } + html.theme--documenter-dark .column.is-full-desktop { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-three-quarters-desktop { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-two-thirds-desktop { + flex: none; + width: 66.6666%; } + html.theme--documenter-dark .column.is-half-desktop { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-one-third-desktop { + flex: none; + width: 33.3333%; } + html.theme--documenter-dark .column.is-one-quarter-desktop { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-one-fifth-desktop { + flex: none; + width: 20%; } + html.theme--documenter-dark .column.is-two-fifths-desktop { + flex: none; + width: 40%; } + html.theme--documenter-dark .column.is-three-fifths-desktop { + flex: none; + width: 60%; } + html.theme--documenter-dark .column.is-four-fifths-desktop { + flex: none; + width: 80%; } + html.theme--documenter-dark .column.is-offset-three-quarters-desktop { + margin-left: 75%; } + html.theme--documenter-dark .column.is-offset-two-thirds-desktop { + margin-left: 66.6666%; } + html.theme--documenter-dark .column.is-offset-half-desktop { + margin-left: 50%; } + html.theme--documenter-dark .column.is-offset-one-third-desktop { + margin-left: 33.3333%; } + html.theme--documenter-dark .column.is-offset-one-quarter-desktop { + margin-left: 25%; } + html.theme--documenter-dark .column.is-offset-one-fifth-desktop { + margin-left: 20%; } + html.theme--documenter-dark .column.is-offset-two-fifths-desktop { + margin-left: 40%; } + html.theme--documenter-dark .column.is-offset-three-fifths-desktop { + margin-left: 60%; } + html.theme--documenter-dark .column.is-offset-four-fifths-desktop { + margin-left: 80%; } + html.theme--documenter-dark .column.is-0-desktop { + flex: none; + width: 0%; } + html.theme--documenter-dark .column.is-offset-0-desktop { + margin-left: 0%; } + html.theme--documenter-dark .column.is-1-desktop { + flex: none; + width: 8.33333%; } + html.theme--documenter-dark .column.is-offset-1-desktop { + margin-left: 8.33333%; } + html.theme--documenter-dark .column.is-2-desktop { + flex: none; + width: 16.66667%; } + html.theme--documenter-dark .column.is-offset-2-desktop { + margin-left: 16.66667%; } + html.theme--documenter-dark .column.is-3-desktop { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-offset-3-desktop { + margin-left: 25%; } + html.theme--documenter-dark .column.is-4-desktop { + flex: none; + width: 33.33333%; } + html.theme--documenter-dark .column.is-offset-4-desktop { + margin-left: 33.33333%; } + html.theme--documenter-dark .column.is-5-desktop { + flex: none; + width: 41.66667%; } + html.theme--documenter-dark .column.is-offset-5-desktop { + margin-left: 41.66667%; } + html.theme--documenter-dark .column.is-6-desktop { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-offset-6-desktop { + margin-left: 50%; } + html.theme--documenter-dark .column.is-7-desktop { + flex: none; + width: 58.33333%; } + html.theme--documenter-dark .column.is-offset-7-desktop { + margin-left: 58.33333%; } + html.theme--documenter-dark .column.is-8-desktop { + flex: none; + width: 66.66667%; } + html.theme--documenter-dark .column.is-offset-8-desktop { + margin-left: 66.66667%; } + html.theme--documenter-dark .column.is-9-desktop { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-offset-9-desktop { + margin-left: 75%; } + html.theme--documenter-dark .column.is-10-desktop { + flex: none; + width: 83.33333%; } + html.theme--documenter-dark .column.is-offset-10-desktop { + margin-left: 83.33333%; } + html.theme--documenter-dark .column.is-11-desktop { + flex: none; + width: 91.66667%; } + html.theme--documenter-dark .column.is-offset-11-desktop { + margin-left: 91.66667%; } + html.theme--documenter-dark .column.is-12-desktop { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-offset-12-desktop { + margin-left: 100%; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .column.is-narrow-widescreen { + flex: none; } + html.theme--documenter-dark .column.is-full-widescreen { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-three-quarters-widescreen { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-two-thirds-widescreen { + flex: none; + width: 66.6666%; } + html.theme--documenter-dark .column.is-half-widescreen { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-one-third-widescreen { + flex: none; + width: 33.3333%; } + html.theme--documenter-dark .column.is-one-quarter-widescreen { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-one-fifth-widescreen { + flex: none; + width: 20%; } + html.theme--documenter-dark .column.is-two-fifths-widescreen { + flex: none; + width: 40%; } + html.theme--documenter-dark .column.is-three-fifths-widescreen { + flex: none; + width: 60%; } + html.theme--documenter-dark .column.is-four-fifths-widescreen { + flex: none; + width: 80%; } + html.theme--documenter-dark .column.is-offset-three-quarters-widescreen { + margin-left: 75%; } + html.theme--documenter-dark .column.is-offset-two-thirds-widescreen { + margin-left: 66.6666%; } + html.theme--documenter-dark .column.is-offset-half-widescreen { + margin-left: 50%; } + html.theme--documenter-dark .column.is-offset-one-third-widescreen { + margin-left: 33.3333%; } + html.theme--documenter-dark .column.is-offset-one-quarter-widescreen { + margin-left: 25%; } + html.theme--documenter-dark .column.is-offset-one-fifth-widescreen { + margin-left: 20%; } + html.theme--documenter-dark .column.is-offset-two-fifths-widescreen { + margin-left: 40%; } + html.theme--documenter-dark .column.is-offset-three-fifths-widescreen { + margin-left: 60%; } + html.theme--documenter-dark .column.is-offset-four-fifths-widescreen { + margin-left: 80%; } + html.theme--documenter-dark .column.is-0-widescreen { + flex: none; + width: 0%; } + html.theme--documenter-dark .column.is-offset-0-widescreen { + margin-left: 0%; } + html.theme--documenter-dark .column.is-1-widescreen { + flex: none; + width: 8.33333%; } + html.theme--documenter-dark .column.is-offset-1-widescreen { + margin-left: 8.33333%; } + html.theme--documenter-dark .column.is-2-widescreen { + flex: none; + width: 16.66667%; } + html.theme--documenter-dark .column.is-offset-2-widescreen { + margin-left: 16.66667%; } + html.theme--documenter-dark .column.is-3-widescreen { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-offset-3-widescreen { + margin-left: 25%; } + html.theme--documenter-dark .column.is-4-widescreen { + flex: none; + width: 33.33333%; } + html.theme--documenter-dark .column.is-offset-4-widescreen { + margin-left: 33.33333%; } + html.theme--documenter-dark .column.is-5-widescreen { + flex: none; + width: 41.66667%; } + html.theme--documenter-dark .column.is-offset-5-widescreen { + margin-left: 41.66667%; } + html.theme--documenter-dark .column.is-6-widescreen { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-offset-6-widescreen { + margin-left: 50%; } + html.theme--documenter-dark .column.is-7-widescreen { + flex: none; + width: 58.33333%; } + html.theme--documenter-dark .column.is-offset-7-widescreen { + margin-left: 58.33333%; } + html.theme--documenter-dark .column.is-8-widescreen { + flex: none; + width: 66.66667%; } + html.theme--documenter-dark .column.is-offset-8-widescreen { + margin-left: 66.66667%; } + html.theme--documenter-dark .column.is-9-widescreen { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-offset-9-widescreen { + margin-left: 75%; } + html.theme--documenter-dark .column.is-10-widescreen { + flex: none; + width: 83.33333%; } + html.theme--documenter-dark .column.is-offset-10-widescreen { + margin-left: 83.33333%; } + html.theme--documenter-dark .column.is-11-widescreen { + flex: none; + width: 91.66667%; } + html.theme--documenter-dark .column.is-offset-11-widescreen { + margin-left: 91.66667%; } + html.theme--documenter-dark .column.is-12-widescreen { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-offset-12-widescreen { + margin-left: 100%; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .column.is-narrow-fullhd { + flex: none; } + html.theme--documenter-dark .column.is-full-fullhd { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-three-quarters-fullhd { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-two-thirds-fullhd { + flex: none; + width: 66.6666%; } + html.theme--documenter-dark .column.is-half-fullhd { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-one-third-fullhd { + flex: none; + width: 33.3333%; } + html.theme--documenter-dark .column.is-one-quarter-fullhd { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-one-fifth-fullhd { + flex: none; + width: 20%; } + html.theme--documenter-dark .column.is-two-fifths-fullhd { + flex: none; + width: 40%; } + html.theme--documenter-dark .column.is-three-fifths-fullhd { + flex: none; + width: 60%; } + html.theme--documenter-dark .column.is-four-fifths-fullhd { + flex: none; + width: 80%; } + html.theme--documenter-dark .column.is-offset-three-quarters-fullhd { + margin-left: 75%; } + html.theme--documenter-dark .column.is-offset-two-thirds-fullhd { + margin-left: 66.6666%; } + html.theme--documenter-dark .column.is-offset-half-fullhd { + margin-left: 50%; } + html.theme--documenter-dark .column.is-offset-one-third-fullhd { + margin-left: 33.3333%; } + html.theme--documenter-dark .column.is-offset-one-quarter-fullhd { + margin-left: 25%; } + html.theme--documenter-dark .column.is-offset-one-fifth-fullhd { + margin-left: 20%; } + html.theme--documenter-dark .column.is-offset-two-fifths-fullhd { + margin-left: 40%; } + html.theme--documenter-dark .column.is-offset-three-fifths-fullhd { + margin-left: 60%; } + html.theme--documenter-dark .column.is-offset-four-fifths-fullhd { + margin-left: 80%; } + html.theme--documenter-dark .column.is-0-fullhd { + flex: none; + width: 0%; } + html.theme--documenter-dark .column.is-offset-0-fullhd { + margin-left: 0%; } + html.theme--documenter-dark .column.is-1-fullhd { + flex: none; + width: 8.33333%; } + html.theme--documenter-dark .column.is-offset-1-fullhd { + margin-left: 8.33333%; } + html.theme--documenter-dark .column.is-2-fullhd { + flex: none; + width: 16.66667%; } + html.theme--documenter-dark .column.is-offset-2-fullhd { + margin-left: 16.66667%; } + html.theme--documenter-dark .column.is-3-fullhd { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-offset-3-fullhd { + margin-left: 25%; } + html.theme--documenter-dark .column.is-4-fullhd { + flex: none; + width: 33.33333%; } + html.theme--documenter-dark .column.is-offset-4-fullhd { + margin-left: 33.33333%; } + html.theme--documenter-dark .column.is-5-fullhd { + flex: none; + width: 41.66667%; } + html.theme--documenter-dark .column.is-offset-5-fullhd { + margin-left: 41.66667%; } + html.theme--documenter-dark .column.is-6-fullhd { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-offset-6-fullhd { + margin-left: 50%; } + html.theme--documenter-dark .column.is-7-fullhd { + flex: none; + width: 58.33333%; } + html.theme--documenter-dark .column.is-offset-7-fullhd { + margin-left: 58.33333%; } + html.theme--documenter-dark .column.is-8-fullhd { + flex: none; + width: 66.66667%; } + html.theme--documenter-dark .column.is-offset-8-fullhd { + margin-left: 66.66667%; } + html.theme--documenter-dark .column.is-9-fullhd { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-offset-9-fullhd { + margin-left: 75%; } + html.theme--documenter-dark .column.is-10-fullhd { + flex: none; + width: 83.33333%; } + html.theme--documenter-dark .column.is-offset-10-fullhd { + margin-left: 83.33333%; } + html.theme--documenter-dark .column.is-11-fullhd { + flex: none; + width: 91.66667%; } + html.theme--documenter-dark .column.is-offset-11-fullhd { + margin-left: 91.66667%; } + html.theme--documenter-dark .column.is-12-fullhd { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-offset-12-fullhd { + margin-left: 100%; } } + html.theme--documenter-dark .columns { + margin-left: -0.75rem; + margin-right: -0.75rem; + margin-top: -0.75rem; } + html.theme--documenter-dark .columns:last-child { + margin-bottom: -0.75rem; } + html.theme--documenter-dark .columns:not(:last-child) { + margin-bottom: calc(1.5rem - 0.75rem); } + html.theme--documenter-dark .columns.is-centered { + justify-content: center; } + html.theme--documenter-dark .columns.is-gapless { + margin-left: 0; + margin-right: 0; + margin-top: 0; } + html.theme--documenter-dark .columns.is-gapless > .column { + margin: 0; + padding: 0 !important; } + html.theme--documenter-dark .columns.is-gapless:not(:last-child) { + margin-bottom: 1.5rem; } + html.theme--documenter-dark .columns.is-gapless:last-child { + margin-bottom: 0; } + html.theme--documenter-dark .columns.is-mobile { + display: flex; } + html.theme--documenter-dark .columns.is-multiline { + flex-wrap: wrap; } + html.theme--documenter-dark .columns.is-vcentered { + align-items: center; } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .columns:not(.is-desktop) { + display: flex; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .columns.is-desktop { + display: flex; } } + html.theme--documenter-dark .columns.is-variable { + --columnGap: 0.75rem; + margin-left: calc(-1 * var(--columnGap)); + margin-right: calc(-1 * var(--columnGap)); } + html.theme--documenter-dark .columns.is-variable .column { + padding-left: var(--columnGap); + padding-right: var(--columnGap); } + html.theme--documenter-dark .columns.is-variable.is-0 { + --columnGap: 0rem; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .columns.is-variable.is-0-mobile { + --columnGap: 0rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .columns.is-variable.is-0-tablet { + --columnGap: 0rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-0-tablet-only { + --columnGap: 0rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-0-touch { + --columnGap: 0rem; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .columns.is-variable.is-0-desktop { + --columnGap: 0rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + html.theme--documenter-dark .columns.is-variable.is-0-desktop-only { + --columnGap: 0rem; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .columns.is-variable.is-0-widescreen { + --columnGap: 0rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + html.theme--documenter-dark .columns.is-variable.is-0-widescreen-only { + --columnGap: 0rem; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .columns.is-variable.is-0-fullhd { + --columnGap: 0rem; } } + html.theme--documenter-dark .columns.is-variable.is-1 { + --columnGap: 0.25rem; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .columns.is-variable.is-1-mobile { + --columnGap: 0.25rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .columns.is-variable.is-1-tablet { + --columnGap: 0.25rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-1-tablet-only { + --columnGap: 0.25rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-1-touch { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .columns.is-variable.is-1-desktop { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + html.theme--documenter-dark .columns.is-variable.is-1-desktop-only { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .columns.is-variable.is-1-widescreen { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + html.theme--documenter-dark .columns.is-variable.is-1-widescreen-only { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .columns.is-variable.is-1-fullhd { + --columnGap: 0.25rem; } } + html.theme--documenter-dark .columns.is-variable.is-2 { + --columnGap: 0.5rem; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .columns.is-variable.is-2-mobile { + --columnGap: 0.5rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .columns.is-variable.is-2-tablet { + --columnGap: 0.5rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-2-tablet-only { + --columnGap: 0.5rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-2-touch { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .columns.is-variable.is-2-desktop { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + html.theme--documenter-dark .columns.is-variable.is-2-desktop-only { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .columns.is-variable.is-2-widescreen { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + html.theme--documenter-dark .columns.is-variable.is-2-widescreen-only { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .columns.is-variable.is-2-fullhd { + --columnGap: 0.5rem; } } + html.theme--documenter-dark .columns.is-variable.is-3 { + --columnGap: 0.75rem; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .columns.is-variable.is-3-mobile { + --columnGap: 0.75rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .columns.is-variable.is-3-tablet { + --columnGap: 0.75rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-3-tablet-only { + --columnGap: 0.75rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-3-touch { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .columns.is-variable.is-3-desktop { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + html.theme--documenter-dark .columns.is-variable.is-3-desktop-only { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .columns.is-variable.is-3-widescreen { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + html.theme--documenter-dark .columns.is-variable.is-3-widescreen-only { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .columns.is-variable.is-3-fullhd { + --columnGap: 0.75rem; } } + html.theme--documenter-dark .columns.is-variable.is-4 { + --columnGap: 1rem; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .columns.is-variable.is-4-mobile { + --columnGap: 1rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .columns.is-variable.is-4-tablet { + --columnGap: 1rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-4-tablet-only { + --columnGap: 1rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-4-touch { + --columnGap: 1rem; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .columns.is-variable.is-4-desktop { + --columnGap: 1rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + html.theme--documenter-dark .columns.is-variable.is-4-desktop-only { + --columnGap: 1rem; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .columns.is-variable.is-4-widescreen { + --columnGap: 1rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + html.theme--documenter-dark .columns.is-variable.is-4-widescreen-only { + --columnGap: 1rem; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .columns.is-variable.is-4-fullhd { + --columnGap: 1rem; } } + html.theme--documenter-dark .columns.is-variable.is-5 { + --columnGap: 1.25rem; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .columns.is-variable.is-5-mobile { + --columnGap: 1.25rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .columns.is-variable.is-5-tablet { + --columnGap: 1.25rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-5-tablet-only { + --columnGap: 1.25rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-5-touch { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .columns.is-variable.is-5-desktop { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + html.theme--documenter-dark .columns.is-variable.is-5-desktop-only { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .columns.is-variable.is-5-widescreen { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + html.theme--documenter-dark .columns.is-variable.is-5-widescreen-only { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .columns.is-variable.is-5-fullhd { + --columnGap: 1.25rem; } } + html.theme--documenter-dark .columns.is-variable.is-6 { + --columnGap: 1.5rem; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .columns.is-variable.is-6-mobile { + --columnGap: 1.5rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .columns.is-variable.is-6-tablet { + --columnGap: 1.5rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-6-tablet-only { + --columnGap: 1.5rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-6-touch { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .columns.is-variable.is-6-desktop { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + html.theme--documenter-dark .columns.is-variable.is-6-desktop-only { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .columns.is-variable.is-6-widescreen { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + html.theme--documenter-dark .columns.is-variable.is-6-widescreen-only { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .columns.is-variable.is-6-fullhd { + --columnGap: 1.5rem; } } + html.theme--documenter-dark .columns.is-variable.is-7 { + --columnGap: 1.75rem; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .columns.is-variable.is-7-mobile { + --columnGap: 1.75rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .columns.is-variable.is-7-tablet { + --columnGap: 1.75rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-7-tablet-only { + --columnGap: 1.75rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-7-touch { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .columns.is-variable.is-7-desktop { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + html.theme--documenter-dark .columns.is-variable.is-7-desktop-only { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .columns.is-variable.is-7-widescreen { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + html.theme--documenter-dark .columns.is-variable.is-7-widescreen-only { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .columns.is-variable.is-7-fullhd { + --columnGap: 1.75rem; } } + html.theme--documenter-dark .columns.is-variable.is-8 { + --columnGap: 2rem; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .columns.is-variable.is-8-mobile { + --columnGap: 2rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .columns.is-variable.is-8-tablet { + --columnGap: 2rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-8-tablet-only { + --columnGap: 2rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-8-touch { + --columnGap: 2rem; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .columns.is-variable.is-8-desktop { + --columnGap: 2rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + html.theme--documenter-dark .columns.is-variable.is-8-desktop-only { + --columnGap: 2rem; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .columns.is-variable.is-8-widescreen { + --columnGap: 2rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + html.theme--documenter-dark .columns.is-variable.is-8-widescreen-only { + --columnGap: 2rem; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .columns.is-variable.is-8-fullhd { + --columnGap: 2rem; } } + html.theme--documenter-dark .tile { + align-items: stretch; + display: block; + flex-basis: 0; + flex-grow: 1; + flex-shrink: 1; + min-height: min-content; } + html.theme--documenter-dark .tile.is-ancestor { + margin-left: -0.75rem; + margin-right: -0.75rem; + margin-top: -0.75rem; } + html.theme--documenter-dark .tile.is-ancestor:last-child { + margin-bottom: -0.75rem; } + html.theme--documenter-dark .tile.is-ancestor:not(:last-child) { + margin-bottom: 0.75rem; } + html.theme--documenter-dark .tile.is-child { + margin: 0 !important; } + html.theme--documenter-dark .tile.is-parent { + padding: 0.75rem; } + html.theme--documenter-dark .tile.is-vertical { + flex-direction: column; } + html.theme--documenter-dark .tile.is-vertical > .tile.is-child:not(:last-child) { + margin-bottom: 1.5rem !important; } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .tile:not(.is-child) { + display: flex; } + html.theme--documenter-dark .tile.is-1 { + flex: none; + width: 8.33333%; } + html.theme--documenter-dark .tile.is-2 { + flex: none; + width: 16.66667%; } + html.theme--documenter-dark .tile.is-3 { + flex: none; + width: 25%; } + html.theme--documenter-dark .tile.is-4 { + flex: none; + width: 33.33333%; } + html.theme--documenter-dark .tile.is-5 { + flex: none; + width: 41.66667%; } + html.theme--documenter-dark .tile.is-6 { + flex: none; + width: 50%; } + html.theme--documenter-dark .tile.is-7 { + flex: none; + width: 58.33333%; } + html.theme--documenter-dark .tile.is-8 { + flex: none; + width: 66.66667%; } + html.theme--documenter-dark .tile.is-9 { + flex: none; + width: 75%; } + html.theme--documenter-dark .tile.is-10 { + flex: none; + width: 83.33333%; } + html.theme--documenter-dark .tile.is-11 { + flex: none; + width: 91.66667%; } + html.theme--documenter-dark .tile.is-12 { + flex: none; + width: 100%; } } + html.theme--documenter-dark .hero { + align-items: stretch; + display: flex; + flex-direction: column; + justify-content: space-between; } + html.theme--documenter-dark .hero .navbar { + background: none; } + html.theme--documenter-dark .hero .tabs ul { + border-bottom: none; } + html.theme--documenter-dark .hero.is-white { + background-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-white strong { + color: inherit; } + html.theme--documenter-dark .hero.is-white .title { + color: #0a0a0a; } + html.theme--documenter-dark .hero.is-white .subtitle { + color: rgba(10, 10, 10, 0.9); } + html.theme--documenter-dark .hero.is-white .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-white .subtitle strong { + color: #0a0a0a; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-white .navbar-menu { + background-color: white; } } + html.theme--documenter-dark .hero.is-white .navbar-item, + html.theme--documenter-dark .hero.is-white .navbar-link { + color: rgba(10, 10, 10, 0.7); } + html.theme--documenter-dark .hero.is-white a.navbar-item:hover, html.theme--documenter-dark .hero.is-white a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-white .navbar-link:hover, + html.theme--documenter-dark .hero.is-white .navbar-link.is-active { + background-color: #f2f2f2; + color: #0a0a0a; } + html.theme--documenter-dark .hero.is-white .tabs a { + color: #0a0a0a; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-white .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-white .tabs li.is-active a { + opacity: 1; } + html.theme--documenter-dark .hero.is-white .tabs.is-boxed a, html.theme--documenter-dark .hero.is-white .tabs.is-toggle a { + color: #0a0a0a; } + html.theme--documenter-dark .hero.is-white .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-white .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a:hover { + background-color: #0a0a0a; + border-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .hero.is-white.is-bold { + background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-white.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); } } + html.theme--documenter-dark .hero.is-black { + background-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-black strong { + color: inherit; } + html.theme--documenter-dark .hero.is-black .title { + color: white; } + html.theme--documenter-dark .hero.is-black .subtitle { + color: rgba(255, 255, 255, 0.9); } + html.theme--documenter-dark .hero.is-black .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-black .subtitle strong { + color: white; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-black .navbar-menu { + background-color: #0a0a0a; } } + html.theme--documenter-dark .hero.is-black .navbar-item, + html.theme--documenter-dark .hero.is-black .navbar-link { + color: rgba(255, 255, 255, 0.7); } + html.theme--documenter-dark .hero.is-black a.navbar-item:hover, html.theme--documenter-dark .hero.is-black a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-black .navbar-link:hover, + html.theme--documenter-dark .hero.is-black .navbar-link.is-active { + background-color: black; + color: white; } + html.theme--documenter-dark .hero.is-black .tabs a { + color: white; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-black .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-black .tabs li.is-active a { + opacity: 1; } + html.theme--documenter-dark .hero.is-black .tabs.is-boxed a, html.theme--documenter-dark .hero.is-black .tabs.is-toggle a { + color: white; } + html.theme--documenter-dark .hero.is-black .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-black .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a:hover { + background-color: white; + border-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .hero.is-black.is-bold { + background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-black.is-bold .navbar-menu { + background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); } } + html.theme--documenter-dark .hero.is-light { + background-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-light strong { + color: inherit; } + html.theme--documenter-dark .hero.is-light .title { + color: #282f2f; } + html.theme--documenter-dark .hero.is-light .subtitle { + color: rgba(40, 47, 47, 0.9); } + html.theme--documenter-dark .hero.is-light .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-light .subtitle strong { + color: #282f2f; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-light .navbar-menu { + background-color: #ecf0f1; } } + html.theme--documenter-dark .hero.is-light .navbar-item, + html.theme--documenter-dark .hero.is-light .navbar-link { + color: rgba(40, 47, 47, 0.7); } + html.theme--documenter-dark .hero.is-light a.navbar-item:hover, html.theme--documenter-dark .hero.is-light a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-light .navbar-link:hover, + html.theme--documenter-dark .hero.is-light .navbar-link.is-active { + background-color: #dde4e6; + color: #282f2f; } + html.theme--documenter-dark .hero.is-light .tabs a { + color: #282f2f; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-light .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-light .tabs li.is-active a { + opacity: 1; } + html.theme--documenter-dark .hero.is-light .tabs.is-boxed a, html.theme--documenter-dark .hero.is-light .tabs.is-toggle a { + color: #282f2f; } + html.theme--documenter-dark .hero.is-light .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-light .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a:hover { + background-color: #282f2f; + border-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .hero.is-light.is-bold { + background-image: linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-light.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%); } } + html.theme--documenter-dark .hero.is-dark, html.theme--documenter-dark .content kbd.hero { + background-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), html.theme--documenter-dark .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-dark strong, + html.theme--documenter-dark .content kbd.hero strong { + color: inherit; } + html.theme--documenter-dark .hero.is-dark .title, html.theme--documenter-dark .content kbd.hero .title { + color: #ecf0f1; } + html.theme--documenter-dark .hero.is-dark .subtitle, html.theme--documenter-dark .content kbd.hero .subtitle { + color: rgba(236, 240, 241, 0.9); } + html.theme--documenter-dark .hero.is-dark .subtitle a:not(.button), html.theme--documenter-dark .content kbd.hero .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-dark .subtitle strong, + html.theme--documenter-dark .content kbd.hero .subtitle strong { + color: #ecf0f1; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-dark .navbar-menu, html.theme--documenter-dark .content kbd.hero .navbar-menu { + background-color: #282f2f; } } + html.theme--documenter-dark .hero.is-dark .navbar-item, html.theme--documenter-dark .content kbd.hero .navbar-item, + html.theme--documenter-dark .hero.is-dark .navbar-link, + html.theme--documenter-dark .content kbd.hero .navbar-link { + color: rgba(236, 240, 241, 0.7); } + html.theme--documenter-dark .hero.is-dark a.navbar-item:hover, html.theme--documenter-dark .content kbd.hero a.navbar-item:hover, html.theme--documenter-dark .hero.is-dark a.navbar-item.is-active, html.theme--documenter-dark .content kbd.hero a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-dark .navbar-link:hover, + html.theme--documenter-dark .content kbd.hero .navbar-link:hover, + html.theme--documenter-dark .hero.is-dark .navbar-link.is-active, + html.theme--documenter-dark .content kbd.hero .navbar-link.is-active { + background-color: #1d2122; + color: #ecf0f1; } + html.theme--documenter-dark .hero.is-dark .tabs a, html.theme--documenter-dark .content kbd.hero .tabs a { + color: #ecf0f1; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-dark .tabs a:hover, html.theme--documenter-dark .content kbd.hero .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-dark .tabs li.is-active a, html.theme--documenter-dark .content kbd.hero .tabs li.is-active a { + opacity: 1; } + html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a, html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a, html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a, html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a { + color: #ecf0f1; } + html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a:hover, html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a:hover, html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a, html.theme--documenter-dark .content kbd.hero .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .content kbd.hero .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a, html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a:hover, html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a:hover { + background-color: #ecf0f1; + border-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .hero.is-dark.is-bold, html.theme--documenter-dark .content kbd.hero.is-bold { + background-image: linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-dark.is-bold .navbar-menu, html.theme--documenter-dark .content kbd.hero.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%); } } + html.theme--documenter-dark .hero.is-primary, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink { + background-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-primary strong, + html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink strong { + color: inherit; } + html.theme--documenter-dark .hero.is-primary .title, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .title { + color: #fff; } + html.theme--documenter-dark .hero.is-primary .subtitle, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .subtitle { + color: rgba(255, 255, 255, 0.9); } + html.theme--documenter-dark .hero.is-primary .subtitle a:not(.button), html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-primary .subtitle strong, + html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-primary .navbar-menu, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .navbar-menu { + background-color: #375a7f; } } + html.theme--documenter-dark .hero.is-primary .navbar-item, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .navbar-item, + html.theme--documenter-dark .hero.is-primary .navbar-link, + html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .navbar-link { + color: rgba(255, 255, 255, 0.7); } + html.theme--documenter-dark .hero.is-primary a.navbar-item:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink a.navbar-item:hover, html.theme--documenter-dark .hero.is-primary a.navbar-item.is-active, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-primary .navbar-link:hover, + html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .navbar-link:hover, + html.theme--documenter-dark .hero.is-primary .navbar-link.is-active, + html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .navbar-link.is-active { + background-color: #2f4d6d; + color: #fff; } + html.theme--documenter-dark .hero.is-primary .tabs a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs a { + color: #fff; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-primary .tabs a:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-primary .tabs li.is-active a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs li.is-active a { + opacity: 1; } + html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed a, html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle a { + color: #fff; } + html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #375a7f; } + html.theme--documenter-dark .hero.is-primary.is-bold, html.theme--documenter-dark .docstring > section > a.hero.is-bold.docs-sourcelink { + background-image: linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-primary.is-bold .navbar-menu, html.theme--documenter-dark .docstring > section > a.hero.is-bold.docs-sourcelink .navbar-menu { + background-image: linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%); } } + html.theme--documenter-dark .hero.is-link { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-link strong { + color: inherit; } + html.theme--documenter-dark .hero.is-link .title { + color: #fff; } + html.theme--documenter-dark .hero.is-link .subtitle { + color: rgba(255, 255, 255, 0.9); } + html.theme--documenter-dark .hero.is-link .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-link .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-link .navbar-menu { + background-color: #1abc9c; } } + html.theme--documenter-dark .hero.is-link .navbar-item, + html.theme--documenter-dark .hero.is-link .navbar-link { + color: rgba(255, 255, 255, 0.7); } + html.theme--documenter-dark .hero.is-link a.navbar-item:hover, html.theme--documenter-dark .hero.is-link a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-link .navbar-link:hover, + html.theme--documenter-dark .hero.is-link .navbar-link.is-active { + background-color: #17a689; + color: #fff; } + html.theme--documenter-dark .hero.is-link .tabs a { + color: #fff; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-link .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-link .tabs li.is-active a { + opacity: 1; } + html.theme--documenter-dark .hero.is-link .tabs.is-boxed a, html.theme--documenter-dark .hero.is-link .tabs.is-toggle a { + color: #fff; } + html.theme--documenter-dark .hero.is-link .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-link .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #1abc9c; } + html.theme--documenter-dark .hero.is-link.is-bold { + background-image: linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-link.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%); } } + html.theme--documenter-dark .hero.is-info { + background-color: #024c7d; + color: #fff; } + html.theme--documenter-dark .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-info strong { + color: inherit; } + html.theme--documenter-dark .hero.is-info .title { + color: #fff; } + html.theme--documenter-dark .hero.is-info .subtitle { + color: rgba(255, 255, 255, 0.9); } + html.theme--documenter-dark .hero.is-info .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-info .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-info .navbar-menu { + background-color: #024c7d; } } + html.theme--documenter-dark .hero.is-info .navbar-item, + html.theme--documenter-dark .hero.is-info .navbar-link { + color: rgba(255, 255, 255, 0.7); } + html.theme--documenter-dark .hero.is-info a.navbar-item:hover, html.theme--documenter-dark .hero.is-info a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-info .navbar-link:hover, + html.theme--documenter-dark .hero.is-info .navbar-link.is-active { + background-color: #023d64; + color: #fff; } + html.theme--documenter-dark .hero.is-info .tabs a { + color: #fff; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-info .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-info .tabs li.is-active a { + opacity: 1; } + html.theme--documenter-dark .hero.is-info .tabs.is-boxed a, html.theme--documenter-dark .hero.is-info .tabs.is-toggle a { + color: #fff; } + html.theme--documenter-dark .hero.is-info .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-info .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #024c7d; } + html.theme--documenter-dark .hero.is-info.is-bold { + background-image: linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-info.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%); } } + html.theme--documenter-dark .hero.is-success { + background-color: #008438; + color: #fff; } + html.theme--documenter-dark .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-success strong { + color: inherit; } + html.theme--documenter-dark .hero.is-success .title { + color: #fff; } + html.theme--documenter-dark .hero.is-success .subtitle { + color: rgba(255, 255, 255, 0.9); } + html.theme--documenter-dark .hero.is-success .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-success .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-success .navbar-menu { + background-color: #008438; } } + html.theme--documenter-dark .hero.is-success .navbar-item, + html.theme--documenter-dark .hero.is-success .navbar-link { + color: rgba(255, 255, 255, 0.7); } + html.theme--documenter-dark .hero.is-success a.navbar-item:hover, html.theme--documenter-dark .hero.is-success a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-success .navbar-link:hover, + html.theme--documenter-dark .hero.is-success .navbar-link.is-active { + background-color: #006b2d; + color: #fff; } + html.theme--documenter-dark .hero.is-success .tabs a { + color: #fff; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-success .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-success .tabs li.is-active a { + opacity: 1; } + html.theme--documenter-dark .hero.is-success .tabs.is-boxed a, html.theme--documenter-dark .hero.is-success .tabs.is-toggle a { + color: #fff; } + html.theme--documenter-dark .hero.is-success .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-success .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #008438; } + html.theme--documenter-dark .hero.is-success.is-bold { + background-image: linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-success.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%); } } + html.theme--documenter-dark .hero.is-warning { + background-color: #ad8100; + color: #fff; } + html.theme--documenter-dark .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-warning strong { + color: inherit; } + html.theme--documenter-dark .hero.is-warning .title { + color: #fff; } + html.theme--documenter-dark .hero.is-warning .subtitle { + color: rgba(255, 255, 255, 0.9); } + html.theme--documenter-dark .hero.is-warning .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-warning .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-warning .navbar-menu { + background-color: #ad8100; } } + html.theme--documenter-dark .hero.is-warning .navbar-item, + html.theme--documenter-dark .hero.is-warning .navbar-link { + color: rgba(255, 255, 255, 0.7); } + html.theme--documenter-dark .hero.is-warning a.navbar-item:hover, html.theme--documenter-dark .hero.is-warning a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-warning .navbar-link:hover, + html.theme--documenter-dark .hero.is-warning .navbar-link.is-active { + background-color: #946e00; + color: #fff; } + html.theme--documenter-dark .hero.is-warning .tabs a { + color: #fff; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-warning .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-warning .tabs li.is-active a { + opacity: 1; } + html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a, html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a { + color: #fff; } + html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #ad8100; } + html.theme--documenter-dark .hero.is-warning.is-bold { + background-image: linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-warning.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%); } } + html.theme--documenter-dark .hero.is-danger { + background-color: #9e1b0d; + color: #fff; } + html.theme--documenter-dark .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-danger strong { + color: inherit; } + html.theme--documenter-dark .hero.is-danger .title { + color: #fff; } + html.theme--documenter-dark .hero.is-danger .subtitle { + color: rgba(255, 255, 255, 0.9); } + html.theme--documenter-dark .hero.is-danger .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-danger .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-danger .navbar-menu { + background-color: #9e1b0d; } } + html.theme--documenter-dark .hero.is-danger .navbar-item, + html.theme--documenter-dark .hero.is-danger .navbar-link { + color: rgba(255, 255, 255, 0.7); } + html.theme--documenter-dark .hero.is-danger a.navbar-item:hover, html.theme--documenter-dark .hero.is-danger a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-danger .navbar-link:hover, + html.theme--documenter-dark .hero.is-danger .navbar-link.is-active { + background-color: #86170b; + color: #fff; } + html.theme--documenter-dark .hero.is-danger .tabs a { + color: #fff; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-danger .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-danger .tabs li.is-active a { + opacity: 1; } + html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a, html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a { + color: #fff; } + html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #9e1b0d; } + html.theme--documenter-dark .hero.is-danger.is-bold { + background-image: linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-danger.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%); } } + html.theme--documenter-dark .hero.is-small .hero-body, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.hero .hero-body { + padding-bottom: 1.5rem; + padding-top: 1.5rem; } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .hero.is-medium .hero-body { + padding-bottom: 9rem; + padding-top: 9rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .hero.is-large .hero-body { + padding-bottom: 18rem; + padding-top: 18rem; } } + html.theme--documenter-dark .hero.is-halfheight .hero-body, html.theme--documenter-dark .hero.is-fullheight .hero-body, html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body { + align-items: center; + display: flex; } + html.theme--documenter-dark .hero.is-halfheight .hero-body > .container, html.theme--documenter-dark .hero.is-fullheight .hero-body > .container, html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body > .container { + flex-grow: 1; + flex-shrink: 1; } + html.theme--documenter-dark .hero.is-halfheight { + min-height: 50vh; } + html.theme--documenter-dark .hero.is-fullheight { + min-height: 100vh; } + html.theme--documenter-dark .hero-video { + overflow: hidden; } + html.theme--documenter-dark .hero-video video { + left: 50%; + min-height: 100%; + min-width: 100%; + position: absolute; + top: 50%; + transform: translate3d(-50%, -50%, 0); } + html.theme--documenter-dark .hero-video.is-transparent { + opacity: 0.3; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero-video { + display: none; } } + html.theme--documenter-dark .hero-buttons { + margin-top: 1.5rem; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero-buttons .button { + display: flex; } + html.theme--documenter-dark .hero-buttons .button:not(:last-child) { + margin-bottom: 0.75rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .hero-buttons { + display: flex; + justify-content: center; } + html.theme--documenter-dark .hero-buttons .button:not(:last-child) { + margin-right: 1.5rem; } } + html.theme--documenter-dark .hero-head, + html.theme--documenter-dark .hero-foot { + flex-grow: 0; + flex-shrink: 0; } + html.theme--documenter-dark .hero-body { + flex-grow: 1; + flex-shrink: 0; + padding: 3rem 1.5rem; } + html.theme--documenter-dark .section { + padding: 3rem 1.5rem; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .section.is-medium { + padding: 9rem 1.5rem; } + html.theme--documenter-dark .section.is-large { + padding: 18rem 1.5rem; } } + html.theme--documenter-dark .footer { + background-color: #282f2f; + padding: 3rem 1.5rem 6rem; } + html.theme--documenter-dark hr { + height: 1px; } + html.theme--documenter-dark h6 { + text-transform: uppercase; + letter-spacing: 0.5px; } + html.theme--documenter-dark .hero { + background-color: #343c3d; } + html.theme--documenter-dark a { + transition: all 200ms ease; } + html.theme--documenter-dark .button { + transition: all 200ms ease; + border-width: 1px; + color: white; } + html.theme--documenter-dark .button.is-active, html.theme--documenter-dark .button.is-focused, html.theme--documenter-dark .button:active, html.theme--documenter-dark .button:focus { + box-shadow: 0 0 0 2px rgba(140, 155, 157, 0.5); } + html.theme--documenter-dark .button.is-white.is-hovered, html.theme--documenter-dark .button.is-white:hover { + background-color: white; } + html.theme--documenter-dark .button.is-white.is-active, html.theme--documenter-dark .button.is-white.is-focused, html.theme--documenter-dark .button.is-white:active, html.theme--documenter-dark .button.is-white:focus { + border-color: white; + box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5); } + html.theme--documenter-dark .button.is-black.is-hovered, html.theme--documenter-dark .button.is-black:hover { + background-color: #1d1d1d; } + html.theme--documenter-dark .button.is-black.is-active, html.theme--documenter-dark .button.is-black.is-focused, html.theme--documenter-dark .button.is-black:active, html.theme--documenter-dark .button.is-black:focus { + border-color: #0a0a0a; + box-shadow: 0 0 0 2px rgba(10, 10, 10, 0.5); } + html.theme--documenter-dark .button.is-light.is-hovered, html.theme--documenter-dark .button.is-light:hover { + background-color: white; } + html.theme--documenter-dark .button.is-light.is-active, html.theme--documenter-dark .button.is-light.is-focused, html.theme--documenter-dark .button.is-light:active, html.theme--documenter-dark .button.is-light:focus { + border-color: #ecf0f1; + box-shadow: 0 0 0 2px rgba(236, 240, 241, 0.5); } + html.theme--documenter-dark .button.is-dark.is-hovered, html.theme--documenter-dark .content kbd.button.is-hovered, html.theme--documenter-dark .button.is-dark:hover, html.theme--documenter-dark .content kbd.button:hover { + background-color: #3a4344; } + html.theme--documenter-dark .button.is-dark.is-active, html.theme--documenter-dark .content kbd.button.is-active, html.theme--documenter-dark .button.is-dark.is-focused, html.theme--documenter-dark .content kbd.button.is-focused, html.theme--documenter-dark .button.is-dark:active, html.theme--documenter-dark .content kbd.button:active, html.theme--documenter-dark .button.is-dark:focus, html.theme--documenter-dark .content kbd.button:focus { + border-color: #282f2f; + box-shadow: 0 0 0 2px rgba(40, 47, 47, 0.5); } + html.theme--documenter-dark .button.is-primary.is-hovered, html.theme--documenter-dark .docstring > section > a.button.is-hovered.docs-sourcelink, html.theme--documenter-dark .button.is-primary:hover, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:hover { + background-color: #436d9a; } + html.theme--documenter-dark .button.is-primary.is-active, html.theme--documenter-dark .docstring > section > a.button.is-active.docs-sourcelink, html.theme--documenter-dark .button.is-primary.is-focused, html.theme--documenter-dark .docstring > section > a.button.is-focused.docs-sourcelink, html.theme--documenter-dark .button.is-primary:active, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:active, html.theme--documenter-dark .button.is-primary:focus, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:focus { + border-color: #375a7f; + box-shadow: 0 0 0 2px rgba(55, 90, 127, 0.5); } + html.theme--documenter-dark .button.is-link.is-hovered, html.theme--documenter-dark .button.is-link:hover { + background-color: #1fdeb8; } + html.theme--documenter-dark .button.is-link.is-active, html.theme--documenter-dark .button.is-link.is-focused, html.theme--documenter-dark .button.is-link:active, html.theme--documenter-dark .button.is-link:focus { + border-color: #1abc9c; + box-shadow: 0 0 0 2px rgba(26, 188, 156, 0.5); } + html.theme--documenter-dark .button.is-info.is-hovered, html.theme--documenter-dark .button.is-info:hover { + background-color: #0363a3; } + html.theme--documenter-dark .button.is-info.is-active, html.theme--documenter-dark .button.is-info.is-focused, html.theme--documenter-dark .button.is-info:active, html.theme--documenter-dark .button.is-info:focus { + border-color: #024c7d; + box-shadow: 0 0 0 2px rgba(2, 76, 125, 0.5); } + html.theme--documenter-dark .button.is-success.is-hovered, html.theme--documenter-dark .button.is-success:hover { + background-color: #00aa48; } + html.theme--documenter-dark .button.is-success.is-active, html.theme--documenter-dark .button.is-success.is-focused, html.theme--documenter-dark .button.is-success:active, html.theme--documenter-dark .button.is-success:focus { + border-color: #008438; + box-shadow: 0 0 0 2px rgba(0, 132, 56, 0.5); } + html.theme--documenter-dark .button.is-warning.is-hovered, html.theme--documenter-dark .button.is-warning:hover { + background-color: #d39e00; } + html.theme--documenter-dark .button.is-warning.is-active, html.theme--documenter-dark .button.is-warning.is-focused, html.theme--documenter-dark .button.is-warning:active, html.theme--documenter-dark .button.is-warning:focus { + border-color: #ad8100; + box-shadow: 0 0 0 2px rgba(173, 129, 0, 0.5); } + html.theme--documenter-dark .button.is-danger.is-hovered, html.theme--documenter-dark .button.is-danger:hover { + background-color: #c12110; } + html.theme--documenter-dark .button.is-danger.is-active, html.theme--documenter-dark .button.is-danger.is-focused, html.theme--documenter-dark .button.is-danger:active, html.theme--documenter-dark .button.is-danger:focus { + border-color: #9e1b0d; + box-shadow: 0 0 0 2px rgba(158, 27, 13, 0.5); } + html.theme--documenter-dark .label { + color: #dbdee0; } + html.theme--documenter-dark .button, + html.theme--documenter-dark .control.has-icons-left .icon, + html.theme--documenter-dark .control.has-icons-right .icon, + html.theme--documenter-dark .input, + html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, + html.theme--documenter-dark .pagination-ellipsis, + html.theme--documenter-dark .pagination-link, + html.theme--documenter-dark .pagination-next, + html.theme--documenter-dark .pagination-previous, + html.theme--documenter-dark .select, + html.theme--documenter-dark .select select, + html.theme--documenter-dark .textarea { + height: 2.5em; } + + html.theme--documenter-dark .input, + html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, + html.theme--documenter-dark .textarea { + transition: all 200ms ease; + box-shadow: none; + border-width: 1px; + padding-left: 1em; + padding-right: 1em; } + html.theme--documenter-dark .select:after, + html.theme--documenter-dark .select select { + border-width: 1px; } + html.theme--documenter-dark .control.has-addons .button, + html.theme--documenter-dark .control.has-addons .input, + html.theme--documenter-dark .control.has-addons #documenter .docs-sidebar form.docs-search > input, + html.theme--documenter-dark #documenter .docs-sidebar .control.has-addons form.docs-search > input, + html.theme--documenter-dark .control.has-addons .select { + margin-right: -1px; } + html.theme--documenter-dark .notification { + background-color: #343c3d; } + html.theme--documenter-dark .card { + box-shadow: none; + border: 1px solid #343c3d; + background-color: #282f2f; + border-radius: 0.4em; } + html.theme--documenter-dark .card .card-image img { + border-radius: 0.4em 0.4em 0 0; } + html.theme--documenter-dark .card .card-header { + box-shadow: none; + background-color: rgba(18, 18, 18, 0.2); + border-radius: 0.4em 0.4em 0 0; } + html.theme--documenter-dark .card .card-footer { + background-color: rgba(18, 18, 18, 0.2); } + html.theme--documenter-dark .card .card-footer, + html.theme--documenter-dark .card .card-footer-item { + border-width: 1px; + border-color: #343c3d; } + html.theme--documenter-dark .notification.is-white a:not(.button) { + color: #0a0a0a; + text-decoration: underline; } + html.theme--documenter-dark .notification.is-black a:not(.button) { + color: white; + text-decoration: underline; } + html.theme--documenter-dark .notification.is-light a:not(.button) { + color: #282f2f; + text-decoration: underline; } + html.theme--documenter-dark .notification.is-dark a:not(.button), html.theme--documenter-dark .content kbd.notification a:not(.button) { + color: #ecf0f1; + text-decoration: underline; } + html.theme--documenter-dark .notification.is-primary a:not(.button), html.theme--documenter-dark .docstring > section > a.notification.docs-sourcelink a:not(.button) { + color: #fff; + text-decoration: underline; } + html.theme--documenter-dark .notification.is-link a:not(.button) { + color: #fff; + text-decoration: underline; } + html.theme--documenter-dark .notification.is-info a:not(.button) { + color: #fff; + text-decoration: underline; } + html.theme--documenter-dark .notification.is-success a:not(.button) { + color: #fff; + text-decoration: underline; } + html.theme--documenter-dark .notification.is-warning a:not(.button) { + color: #fff; + text-decoration: underline; } + html.theme--documenter-dark .notification.is-danger a:not(.button) { + color: #fff; + text-decoration: underline; } + html.theme--documenter-dark .tag, html.theme--documenter-dark .docstring > section > a.docs-sourcelink, html.theme--documenter-dark .content kbd { + border-radius: 0.4em; } + html.theme--documenter-dark .menu-list a { + transition: all 300ms ease; } + html.theme--documenter-dark .modal-card-body { + background-color: #282f2f; } + html.theme--documenter-dark .modal-card-foot, + html.theme--documenter-dark .modal-card-head { + border-color: #343c3d; } + html.theme--documenter-dark .message-header { + font-weight: 700; + background-color: #343c3d; + color: white; } + html.theme--documenter-dark .message-body { + border-width: 1px; + border-color: #343c3d; } + html.theme--documenter-dark .navbar { + border-radius: 0.4em; } + html.theme--documenter-dark .navbar.is-transparent { + background: none; } + html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active { + background-color: #1abc9c; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .navbar .navbar-menu { + background-color: #375a7f; + border-radius: 0 0 0.4em 0.4em; } } + html.theme--documenter-dark .hero .navbar, + html.theme--documenter-dark body > .navbar { + border-radius: 0; } + html.theme--documenter-dark .pagination-link, + html.theme--documenter-dark .pagination-next, + html.theme--documenter-dark .pagination-previous { + border-width: 1px; } + html.theme--documenter-dark .panel-block, + html.theme--documenter-dark .panel-heading, + html.theme--documenter-dark .panel-tabs { + border-width: 1px; } + html.theme--documenter-dark .panel-block:first-child, + html.theme--documenter-dark .panel-heading:first-child, + html.theme--documenter-dark .panel-tabs:first-child { + border-top-width: 1px; } + html.theme--documenter-dark .panel-heading { + font-weight: 700; } + html.theme--documenter-dark .panel-tabs a { + border-width: 1px; + margin-bottom: -1px; } + html.theme--documenter-dark .panel-tabs a.is-active { + border-bottom-color: #17a689; } + html.theme--documenter-dark .panel-block:hover { + color: #1dd2af; } + html.theme--documenter-dark .panel-block:hover .panel-icon { + color: #1dd2af; } + html.theme--documenter-dark .panel-block.is-active .panel-icon { + color: #17a689; } + html.theme--documenter-dark .tabs a { + border-bottom-width: 1px; + margin-bottom: -1px; } + html.theme--documenter-dark .tabs ul { + border-bottom-width: 1px; } + html.theme--documenter-dark .tabs.is-boxed a { + border-width: 1px; } + html.theme--documenter-dark .tabs.is-boxed li.is-active a { + background-color: #1f2424; } + html.theme--documenter-dark .tabs.is-toggle li a { + border-width: 1px; + margin-bottom: 0; } + html.theme--documenter-dark .tabs.is-toggle li + li { + margin-left: -1px; } + html.theme--documenter-dark .hero.is-white .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark .hero.is-black .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark .hero.is-light .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark .hero.is-dark .navbar .navbar-dropdown .navbar-item:hover, html.theme--documenter-dark .content kbd.hero .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark .hero.is-primary .navbar .navbar-dropdown .navbar-item:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark .hero.is-link .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark .hero.is-info .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark .hero.is-success .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark .hero.is-warning .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark .hero.is-danger .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark h1 .docs-heading-anchor, html.theme--documenter-dark h1 .docs-heading-anchor:hover, html.theme--documenter-dark h1 .docs-heading-anchor:visited, html.theme--documenter-dark h2 .docs-heading-anchor, html.theme--documenter-dark h2 .docs-heading-anchor:hover, html.theme--documenter-dark h2 .docs-heading-anchor:visited, html.theme--documenter-dark h3 .docs-heading-anchor, html.theme--documenter-dark h3 .docs-heading-anchor:hover, html.theme--documenter-dark h3 .docs-heading-anchor:visited, html.theme--documenter-dark h4 .docs-heading-anchor, html.theme--documenter-dark h4 .docs-heading-anchor:hover, html.theme--documenter-dark h4 .docs-heading-anchor:visited, html.theme--documenter-dark h5 .docs-heading-anchor, html.theme--documenter-dark h5 .docs-heading-anchor:hover, html.theme--documenter-dark h5 .docs-heading-anchor:visited, html.theme--documenter-dark h6 .docs-heading-anchor, html.theme--documenter-dark h6 .docs-heading-anchor:hover, html.theme--documenter-dark h6 .docs-heading-anchor:visited { + color: #f2f2f2; } + html.theme--documenter-dark h1 .docs-heading-anchor-permalink, html.theme--documenter-dark h2 .docs-heading-anchor-permalink, html.theme--documenter-dark h3 .docs-heading-anchor-permalink, html.theme--documenter-dark h4 .docs-heading-anchor-permalink, html.theme--documenter-dark h5 .docs-heading-anchor-permalink, html.theme--documenter-dark h6 .docs-heading-anchor-permalink { + visibility: hidden; + vertical-align: middle; + margin-left: 0.5em; + font-size: 0.7rem; } + html.theme--documenter-dark h1 .docs-heading-anchor-permalink::before, html.theme--documenter-dark h2 .docs-heading-anchor-permalink::before, html.theme--documenter-dark h3 .docs-heading-anchor-permalink::before, html.theme--documenter-dark h4 .docs-heading-anchor-permalink::before, html.theme--documenter-dark h5 .docs-heading-anchor-permalink::before, html.theme--documenter-dark h6 .docs-heading-anchor-permalink::before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + content: "\f0c1"; } + html.theme--documenter-dark h1:hover .docs-heading-anchor-permalink, html.theme--documenter-dark h2:hover .docs-heading-anchor-permalink, html.theme--documenter-dark h3:hover .docs-heading-anchor-permalink, html.theme--documenter-dark h4:hover .docs-heading-anchor-permalink, html.theme--documenter-dark h5:hover .docs-heading-anchor-permalink, html.theme--documenter-dark h6:hover .docs-heading-anchor-permalink { + visibility: visible; } + html.theme--documenter-dark .docs-light-only { + display: none !important; } + html.theme--documenter-dark .admonition { + background-color: #282f2f; + border-style: solid; + border-width: 1px; + border-color: #5e6d6f; + border-radius: 0.4em; + font-size: 15px; } + html.theme--documenter-dark .admonition strong { + color: currentColor; } + html.theme--documenter-dark .admonition.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.admonition { + font-size: 0.85em; } + html.theme--documenter-dark .admonition.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .admonition.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .admonition.is-default { + background-color: #282f2f; + border-color: #5e6d6f; } + html.theme--documenter-dark .admonition.is-default > .admonition-header { + background-color: #5e6d6f; } + html.theme--documenter-dark .admonition.is-info { + background-color: #282f2f; + border-color: #024c7d; } + html.theme--documenter-dark .admonition.is-info > .admonition-header { + background-color: #024c7d; } + html.theme--documenter-dark .admonition.is-success { + background-color: #282f2f; + border-color: #008438; } + html.theme--documenter-dark .admonition.is-success > .admonition-header { + background-color: #008438; } + html.theme--documenter-dark .admonition.is-warning { + background-color: #282f2f; + border-color: #ad8100; } + html.theme--documenter-dark .admonition.is-warning > .admonition-header { + background-color: #ad8100; } + html.theme--documenter-dark .admonition.is-danger { + background-color: #282f2f; + border-color: #9e1b0d; } + html.theme--documenter-dark .admonition.is-danger > .admonition-header { + background-color: #9e1b0d; } + html.theme--documenter-dark .admonition.is-compat { + background-color: #282f2f; + border-color: #137886; } + html.theme--documenter-dark .admonition.is-compat > .admonition-header { + background-color: #137886; } + html.theme--documenter-dark .admonition-header { + background-color: #5e6d6f; + align-items: center; + font-weight: 700; + justify-content: space-between; + line-height: 1.25; + padding: 0.75em; + position: relative; } + html.theme--documenter-dark .admonition-header:before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + margin-right: 0.75em; + content: "\f06a"; } + html.theme--documenter-dark .admonition-body { + color: #fff; + padding: 1em 1.25em; } + html.theme--documenter-dark .admonition-body pre { + background-color: #282f2f; } + html.theme--documenter-dark .admonition-body code { + background-color: rgba(255, 255, 255, 0.05); } + html.theme--documenter-dark .docstring { + margin-bottom: 1em; + background-color: transparent; + border: 1px solid #5e6d6f; + box-shadow: none; + max-width: 100%; } + html.theme--documenter-dark .docstring > header { + display: flex; + flex-grow: 1; + align-items: stretch; + padding: 0.75rem; + background-color: #282f2f; + box-shadow: 0 1px 2px rgba(10, 10, 10, 0.1); + box-shadow: none; + border-bottom: 1px solid #5e6d6f; } + html.theme--documenter-dark .docstring > header code { + background-color: transparent; } + html.theme--documenter-dark .docstring > header .docstring-binding { + margin-right: 0.3em; } + html.theme--documenter-dark .docstring > header .docstring-category { + margin-left: 0.3em; } + html.theme--documenter-dark .docstring > section { + position: relative; + padding: 1rem 1.25rem; + border-bottom: 1px solid #5e6d6f; } + html.theme--documenter-dark .docstring > section:last-child { + border-bottom: none; } + html.theme--documenter-dark .docstring > section > a.docs-sourcelink { + transition: opacity 0.3s; + opacity: 0; + position: absolute; + right: 0.625rem; + bottom: 0.5rem; } + html.theme--documenter-dark .docstring:hover > section > a.docs-sourcelink { + opacity: 0.2; } + html.theme--documenter-dark .docstring > section:hover a.docs-sourcelink { + opacity: 1; } + html.theme--documenter-dark .documenter-example-output { + background-color: #1f2424; } + html.theme--documenter-dark .outdated-warning-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); + z-index: 999; + background-color: #282f2f; + border-bottom: 3px solid #9e1b0d; + padding: 10px 35px; + text-align: center; + font-size: 15px; } + html.theme--documenter-dark .outdated-warning-overlay .outdated-warning-closer { + position: absolute; + top: calc(50% - 10px); + right: 18px; + cursor: pointer; + width: 12px; } + html.theme--documenter-dark .outdated-warning-overlay a { + color: #1abc9c; } + html.theme--documenter-dark .outdated-warning-overlay a:hover { + color: #1dd2af; } + html.theme--documenter-dark .content pre { + border: 1px solid #5e6d6f; } + html.theme--documenter-dark .content code { + font-weight: inherit; } + html.theme--documenter-dark .content a code { + color: #1abc9c; } + html.theme--documenter-dark .content h1 code, html.theme--documenter-dark .content h2 code, html.theme--documenter-dark .content h3 code, html.theme--documenter-dark .content h4 code, html.theme--documenter-dark .content h5 code, html.theme--documenter-dark .content h6 code { + color: #f2f2f2; } + html.theme--documenter-dark .content table { + display: block; + width: initial; + max-width: 100%; + overflow-x: auto; } + html.theme--documenter-dark .content blockquote > ul:first-child, html.theme--documenter-dark .content blockquote > ol:first-child, html.theme--documenter-dark .content .admonition-body > ul:first-child, html.theme--documenter-dark .content .admonition-body > ol:first-child { + margin-top: 0; } + html.theme--documenter-dark pre, html.theme--documenter-dark code { + font-variant-ligatures: no-contextual; } + html.theme--documenter-dark .breadcrumb a.is-disabled { + cursor: default; + pointer-events: none; } + html.theme--documenter-dark .breadcrumb a.is-disabled, html.theme--documenter-dark .breadcrumb a.is-disabled:hover { + color: #f2f2f2; } + html.theme--documenter-dark .hljs { + background: initial !important; + padding: initial !important; } + html.theme--documenter-dark .katex .katex-mathml { + top: 0; + right: 0; } + html.theme--documenter-dark .katex-display, html.theme--documenter-dark mjx-container, html.theme--documenter-dark .MathJax_Display { + margin: 0.5em 0 !important; } + html.theme--documenter-dark html { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; } + html.theme--documenter-dark #documenter .docs-main > article { + overflow-wrap: break-word; } + html.theme--documenter-dark #documenter .docs-main > article .math-container { + overflow-x: auto; + overflow-y: hidden; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark #documenter .docs-main { + max-width: 52rem; + margin-left: 20rem; + padding-right: 1rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark #documenter .docs-main { + width: 100%; } + html.theme--documenter-dark #documenter .docs-main > article { + max-width: 52rem; + margin-left: auto; + margin-right: auto; + margin-bottom: 1rem; + padding: 0 1rem; } + html.theme--documenter-dark #documenter .docs-main > header, html.theme--documenter-dark #documenter .docs-main > nav { + max-width: 100%; + width: 100%; + margin: 0; } } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar { + background-color: #1f2424; + border-bottom: 1px solid #5e6d6f; + z-index: 2; + min-height: 4rem; + margin-bottom: 1rem; + display: flex; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar .breadcrumb { + flex-grow: 1; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right { + display: flex; + white-space: nowrap; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-icon, html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label, html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button { + display: inline-block; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label { + padding: 0; + margin-left: 0.3em; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-settings-button { + margin: auto 0 auto 1rem; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button { + font-size: 1.5rem; + margin: auto 0 auto 1rem; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar > * { + margin: auto 0; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark #documenter .docs-main header.docs-navbar { + position: sticky; + top: 0; + padding: 0 1rem; + /* For Headroom.js */ + transition-property: top, box-shadow; + -webkit-transition-property: top, box-shadow; + /* Safari */ + transition-duration: 0.3s; + -webkit-transition-duration: 0.3s; + /* Safari */ } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--not-top { + box-shadow: 0.2rem 0rem 0.4rem #171717; + transition-duration: 0.7s; + -webkit-transition-duration: 0.7s; + /* Safari */ } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom { + top: -4.5rem; + transition-duration: 0.7s; + -webkit-transition-duration: 0.7s; + /* Safari */ } } + html.theme--documenter-dark #documenter .docs-main section.footnotes { + border-top: 1px solid #5e6d6f; } + html.theme--documenter-dark #documenter .docs-main section.footnotes li .tag:first-child, html.theme--documenter-dark #documenter .docs-main section.footnotes li .docstring > section > a.docs-sourcelink:first-child, html.theme--documenter-dark #documenter .docs-main section.footnotes li .content kbd:first-child, html.theme--documenter-dark .content #documenter .docs-main section.footnotes li kbd:first-child { + margin-right: 1em; + margin-bottom: 0.4em; } + html.theme--documenter-dark #documenter .docs-main .docs-footer { + display: flex; + flex-wrap: wrap; + margin-left: 0; + margin-right: 0; + border-top: 1px solid #5e6d6f; + padding-top: 1rem; + padding-bottom: 1rem; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark #documenter .docs-main .docs-footer { + padding-left: 1rem; + padding-right: 1rem; } } + html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage, html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-prevpage { + flex-grow: 1; } + html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage { + text-align: right; } + html.theme--documenter-dark #documenter .docs-main .docs-footer .flexbox-break { + flex-basis: 100%; + height: 0; } + html.theme--documenter-dark #documenter .docs-main .docs-footer .footer-message { + font-size: 0.8em; + margin: 0.5em auto 0 auto; + text-align: center; } + html.theme--documenter-dark #documenter .docs-sidebar { + display: flex; + flex-direction: column; + color: #fff; + background-color: #282f2f; + border-right: 1px solid #5e6d6f; + padding: 0; + flex: 0 0 18rem; + z-index: 5; + font-size: 15px; + position: fixed; + left: -18rem; + width: 18rem; + height: 100%; + transition: left 0.3s; + /* Setting up a nicer theme style for the scrollbar */ } + html.theme--documenter-dark #documenter .docs-sidebar.visible { + left: 0; + box-shadow: 0.4rem 0rem 0.8rem #171717; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark #documenter .docs-sidebar.visible { + box-shadow: none; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark #documenter .docs-sidebar { + left: 0; + top: 0; } } + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo { + margin-top: 1rem; + padding: 0 1rem; } + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img { + max-height: 6rem; + margin: auto; } + html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name { + flex-shrink: 0; + font-size: 1.5rem; + font-weight: 700; + text-align: center; + white-space: nowrap; + overflow: hidden; + padding: 0.5rem 0; } + html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name .docs-autofit { + max-width: 16.2rem; } + html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a, html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a:hover { + color: #fff; } + html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector { + border-top: 1px solid #5e6d6f; + display: none; + padding: 0.5rem; } + html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector.visible { + display: flex; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu { + flex-grow: 1; + user-select: none; + border-top: 1px solid #5e6d6f; + padding-bottom: 1.5rem; + /* Managing collapsible submenus */ } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu > li > .tocitem { + font-weight: bold; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu > li li { + font-size: 14.25px; + margin-left: 1em; + border-left: 1px solid #5e6d6f; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input.collapse-toggle { + display: none; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.collapsed { + display: none; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked ~ ul.collapsed { + display: block; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem { + display: flex; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label { + flex-grow: 2; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron { + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + line-height: 1; + font-size: 11.25px; + margin-left: 1rem; + margin-top: auto; + margin-bottom: auto; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + content: "\f054"; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked ~ label.tocitem .docs-chevron::before { + content: "\f078"; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem { + display: block; + padding: 0.5rem 0.5rem; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem, html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem:hover { + color: #fff; + background: #282f2f; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu a.tocitem:hover, html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem:hover { + color: #fff; + background-color: #32393a; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active { + border-top: 1px solid #5e6d6f; + border-bottom: 1px solid #5e6d6f; + background-color: #1f2424; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem, html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover { + background-color: #1f2424; + color: #fff; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover { + background-color: #32393a; + color: #fff; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu > li.is-active:first-child { + border-top: none; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal { + margin: 0 0.5rem 0.5rem; + border-top: 1px solid #5e6d6f; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal li { + font-size: 12.75px; + border-left: none; + margin-left: 0; + margin-top: 0.5rem; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem { + width: 100%; + padding: 0; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before { + content: "⚬"; + margin-right: 0.4em; } + html.theme--documenter-dark #documenter .docs-sidebar form.docs-search { + margin: auto; + margin-top: 0.5rem; + margin-bottom: 0.5rem; } + html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + width: 14.4rem; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu { + overflow-y: auto; + -webkit-overflow-scroll: touch; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar { + width: .3rem; + background: none; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb { + border-radius: 5px 0px 0px 5px; + background: #3b4445; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover { + background: #4e5a5c; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark #documenter .docs-sidebar { + overflow-y: auto; + -webkit-overflow-scroll: touch; } + html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar { + width: .3rem; + background: none; } + html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb { + border-radius: 5px 0px 0px 5px; + background: #3b4445; } + html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover { + background: #4e5a5c; } } + html.theme--documenter-dark #documenter .docs-main #documenter-search-info { + margin-bottom: 1rem; } + html.theme--documenter-dark #documenter .docs-main #documenter-search-results { + list-style-type: circle; + list-style-position: outside; } + html.theme--documenter-dark #documenter .docs-main #documenter-search-results li { + margin-left: 2rem; } + html.theme--documenter-dark #documenter .docs-main #documenter-search-results .docs-highlight { + background-color: yellow; } + html.theme--documenter-dark { + background-color: #1f2424; + font-size: 16px; + min-width: 300px; + overflow-x: auto; + overflow-y: scroll; + text-rendering: optimizeLegibility; + text-size-adjust: 100%; } + html.theme--documenter-dark .ansi span.sgr1 { + font-weight: bolder; } + html.theme--documenter-dark .ansi span.sgr2 { + font-weight: lighter; } + html.theme--documenter-dark .ansi span.sgr3 { + font-style: italic; } + html.theme--documenter-dark .ansi span.sgr4 { + text-decoration: underline; } + html.theme--documenter-dark .ansi span.sgr7 { + color: #1f2424; + background-color: #fff; } + html.theme--documenter-dark .ansi span.sgr8 { + color: transparent; } + html.theme--documenter-dark .ansi span.sgr8 span { + color: transparent; } + html.theme--documenter-dark .ansi span.sgr9 { + text-decoration: line-through; } + html.theme--documenter-dark .ansi span.sgr30 { + color: #242424; } + html.theme--documenter-dark .ansi span.sgr31 { + color: #f6705f; } + html.theme--documenter-dark .ansi span.sgr32 { + color: #4fb43a; } + html.theme--documenter-dark .ansi span.sgr33 { + color: #f4c72f; } + html.theme--documenter-dark .ansi span.sgr34 { + color: #7587f0; } + html.theme--documenter-dark .ansi span.sgr35 { + color: #bc89d3; } + html.theme--documenter-dark .ansi span.sgr36 { + color: #49b6ca; } + html.theme--documenter-dark .ansi span.sgr37 { + color: #b3bdbe; } + html.theme--documenter-dark .ansi span.sgr40 { + background-color: #242424; } + html.theme--documenter-dark .ansi span.sgr41 { + background-color: #f6705f; } + html.theme--documenter-dark .ansi span.sgr42 { + background-color: #4fb43a; } + html.theme--documenter-dark .ansi span.sgr43 { + background-color: #f4c72f; } + html.theme--documenter-dark .ansi span.sgr44 { + background-color: #7587f0; } + html.theme--documenter-dark .ansi span.sgr45 { + background-color: #bc89d3; } + html.theme--documenter-dark .ansi span.sgr46 { + background-color: #49b6ca; } + html.theme--documenter-dark .ansi span.sgr47 { + background-color: #b3bdbe; } + html.theme--documenter-dark .ansi span.sgr90 { + color: #92a0a2; } + html.theme--documenter-dark .ansi span.sgr91 { + color: #ff8674; } + html.theme--documenter-dark .ansi span.sgr92 { + color: #79d462; } + html.theme--documenter-dark .ansi span.sgr93 { + color: #ffe76b; } + html.theme--documenter-dark .ansi span.sgr94 { + color: #8a98ff; } + html.theme--documenter-dark .ansi span.sgr95 { + color: #d2a4e6; } + html.theme--documenter-dark .ansi span.sgr96 { + color: #6bc8db; } + html.theme--documenter-dark .ansi span.sgr97 { + color: #ecf0f1; } + html.theme--documenter-dark .ansi span.sgr100 { + background-color: #92a0a2; } + html.theme--documenter-dark .ansi span.sgr101 { + background-color: #ff8674; } + html.theme--documenter-dark .ansi span.sgr102 { + background-color: #79d462; } + html.theme--documenter-dark .ansi span.sgr103 { + background-color: #ffe76b; } + html.theme--documenter-dark .ansi span.sgr104 { + background-color: #8a98ff; } + html.theme--documenter-dark .ansi span.sgr105 { + background-color: #d2a4e6; } + html.theme--documenter-dark .ansi span.sgr106 { + background-color: #6bc8db; } + html.theme--documenter-dark .ansi span.sgr107 { + background-color: #ecf0f1; } + html.theme--documenter-dark code.language-julia-repl > span.hljs-meta { + color: #4fb43a; + font-weight: bolder; } + html.theme--documenter-dark .hljs { + background: #2b2b2b; + color: #f8f8f2; } + html.theme--documenter-dark .hljs-comment, + html.theme--documenter-dark .hljs-quote { + color: #d4d0ab; } + html.theme--documenter-dark .hljs-variable, + html.theme--documenter-dark .hljs-template-variable, + html.theme--documenter-dark .hljs-tag, + html.theme--documenter-dark .hljs-name, + html.theme--documenter-dark .hljs-selector-id, + html.theme--documenter-dark .hljs-selector-class, + html.theme--documenter-dark .hljs-regexp, + html.theme--documenter-dark .hljs-deletion { + color: #ffa07a; } + html.theme--documenter-dark .hljs-number, + html.theme--documenter-dark .hljs-built_in, + html.theme--documenter-dark .hljs-literal, + html.theme--documenter-dark .hljs-type, + html.theme--documenter-dark .hljs-params, + html.theme--documenter-dark .hljs-meta, + html.theme--documenter-dark .hljs-link { + color: #f5ab35; } + html.theme--documenter-dark .hljs-attribute { + color: #ffd700; } + html.theme--documenter-dark .hljs-string, + html.theme--documenter-dark .hljs-symbol, + html.theme--documenter-dark .hljs-bullet, + html.theme--documenter-dark .hljs-addition { + color: #abe338; } + html.theme--documenter-dark .hljs-title, + html.theme--documenter-dark .hljs-section { + color: #00e0e0; } + html.theme--documenter-dark .hljs-keyword, + html.theme--documenter-dark .hljs-selector-tag { + color: #dcc6e0; } + html.theme--documenter-dark .hljs-emphasis { + font-style: italic; } + html.theme--documenter-dark .hljs-strong { + font-weight: bold; } + @media screen and (-ms-high-contrast: active) { + html.theme--documenter-dark .hljs-addition, + html.theme--documenter-dark .hljs-attribute, + html.theme--documenter-dark .hljs-built_in, + html.theme--documenter-dark .hljs-bullet, + html.theme--documenter-dark .hljs-comment, + html.theme--documenter-dark .hljs-link, + html.theme--documenter-dark .hljs-literal, + html.theme--documenter-dark .hljs-meta, + html.theme--documenter-dark .hljs-number, + html.theme--documenter-dark .hljs-params, + html.theme--documenter-dark .hljs-string, + html.theme--documenter-dark .hljs-symbol, + html.theme--documenter-dark .hljs-type, + html.theme--documenter-dark .hljs-quote { + color: highlight; } + html.theme--documenter-dark .hljs-keyword, + html.theme--documenter-dark .hljs-selector-tag { + font-weight: bold; } } + html.theme--documenter-dark .hljs-subst { + color: #f8f8f2; } diff --git a/docs/build/assets/themes/documenter-light.css b/docs/build/assets/themes/documenter-light.css new file mode 100644 index 00000000..3ce80106 --- /dev/null +++ b/docs/build/assets/themes/documenter-light.css @@ -0,0 +1,7810 @@ +@charset "UTF-8"; +/* Font Awesome 5 mixin. Can be included in any rule that should render Font Awesome icons. */ +@keyframes spinAround { + from { + transform: rotate(0deg); } + to { + transform: rotate(359deg); } } + +.delete, .modal-close, .is-unselectable, .button, .file, .breadcrumb, .pagination-previous, +.pagination-next, +.pagination-link, +.pagination-ellipsis, .tabs { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +.select:not(.is-multiple):not(.is-loading)::after, .navbar-link:not(.is-arrowless)::after { + border: 3px solid transparent; + border-radius: 2px; + border-right: 0; + border-top: 0; + content: " "; + display: block; + height: 0.625em; + margin-top: -0.4375em; + pointer-events: none; + position: absolute; + top: 50%; + transform: rotate(-45deg); + transform-origin: center; + width: 0.625em; } + +.box:not(:last-child), .content:not(:last-child), .notification:not(:last-child), .progress:not(:last-child), .table:not(:last-child), .table-container:not(:last-child), .title:not(:last-child), +.subtitle:not(:last-child), .block:not(:last-child), .highlight:not(:last-child), .breadcrumb:not(:last-child), .level:not(:last-child), .list:not(:last-child), .message:not(:last-child), .tabs:not(:last-child), .admonition:not(:last-child) { + margin-bottom: 1.5rem; } + +.delete, .modal-close { + -moz-appearance: none; + -webkit-appearance: none; + background-color: rgba(10, 10, 10, 0.2); + border: none; + border-radius: 290486px; + cursor: pointer; + pointer-events: auto; + display: inline-block; + flex-grow: 0; + flex-shrink: 0; + font-size: 0; + height: 20px; + max-height: 20px; + max-width: 20px; + min-height: 20px; + min-width: 20px; + outline: none; + position: relative; + vertical-align: top; + width: 20px; } + .delete::before, .modal-close::before, .delete::after, .modal-close::after { + background-color: white; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + .delete::before, .modal-close::before { + height: 2px; + width: 50%; } + .delete::after, .modal-close::after { + height: 50%; + width: 2px; } + .delete:hover, .modal-close:hover, .delete:focus, .modal-close:focus { + background-color: rgba(10, 10, 10, 0.3); } + .delete:active, .modal-close:active { + background-color: rgba(10, 10, 10, 0.4); } + .is-small.delete, #documenter .docs-sidebar form.docs-search > input.delete, .is-small.modal-close, #documenter .docs-sidebar form.docs-search > input.modal-close { + height: 16px; + max-height: 16px; + max-width: 16px; + min-height: 16px; + min-width: 16px; + width: 16px; } + .is-medium.delete, .is-medium.modal-close { + height: 24px; + max-height: 24px; + max-width: 24px; + min-height: 24px; + min-width: 24px; + width: 24px; } + .is-large.delete, .is-large.modal-close { + height: 32px; + max-height: 32px; + max-width: 32px; + min-height: 32px; + min-width: 32px; + width: 32px; } + +.button.is-loading::after, .loader, .select.is-loading::after, .control.is-loading::after { + animation: spinAround 500ms infinite linear; + border: 2px solid #dbdbdb; + border-radius: 290486px; + border-right-color: transparent; + border-top-color: transparent; + content: ""; + display: block; + height: 1em; + position: relative; + width: 1em; } + +.is-overlay, .image.is-square img, #documenter .docs-sidebar .docs-logo > img.is-square img, +.image.is-square .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, .image.is-1by1 img, #documenter .docs-sidebar .docs-logo > img.is-1by1 img, +.image.is-1by1 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, .image.is-5by4 img, #documenter .docs-sidebar .docs-logo > img.is-5by4 img, +.image.is-5by4 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, .image.is-4by3 img, #documenter .docs-sidebar .docs-logo > img.is-4by3 img, +.image.is-4by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, .image.is-3by2 img, #documenter .docs-sidebar .docs-logo > img.is-3by2 img, +.image.is-3by2 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, .image.is-5by3 img, #documenter .docs-sidebar .docs-logo > img.is-5by3 img, +.image.is-5by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, .image.is-16by9 img, #documenter .docs-sidebar .docs-logo > img.is-16by9 img, +.image.is-16by9 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, .image.is-2by1 img, #documenter .docs-sidebar .docs-logo > img.is-2by1 img, +.image.is-2by1 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, .image.is-3by1 img, #documenter .docs-sidebar .docs-logo > img.is-3by1 img, +.image.is-3by1 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, .image.is-4by5 img, #documenter .docs-sidebar .docs-logo > img.is-4by5 img, +.image.is-4by5 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, .image.is-3by4 img, #documenter .docs-sidebar .docs-logo > img.is-3by4 img, +.image.is-3by4 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, .image.is-2by3 img, #documenter .docs-sidebar .docs-logo > img.is-2by3 img, +.image.is-2by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, .image.is-3by5 img, #documenter .docs-sidebar .docs-logo > img.is-3by5 img, +.image.is-3by5 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, .image.is-9by16 img, #documenter .docs-sidebar .docs-logo > img.is-9by16 img, +.image.is-9by16 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, .image.is-1by2 img, #documenter .docs-sidebar .docs-logo > img.is-1by2 img, +.image.is-1by2 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, .image.is-1by3 img, #documenter .docs-sidebar .docs-logo > img.is-1by3 img, +.image.is-1by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio, .modal, .modal-background, .hero-video { + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; } + +.button, .input, #documenter .docs-sidebar form.docs-search > input, .textarea, .select select, .file-cta, +.file-name, .pagination-previous, +.pagination-next, +.pagination-link, +.pagination-ellipsis { + -moz-appearance: none; + -webkit-appearance: none; + align-items: center; + border: 1px solid transparent; + border-radius: 4px; + box-shadow: none; + display: inline-flex; + font-size: 1rem; + height: 2.25em; + justify-content: flex-start; + line-height: 1.5; + padding-bottom: calc(0.375em - 1px); + padding-left: calc(0.625em - 1px); + padding-right: calc(0.625em - 1px); + padding-top: calc(0.375em - 1px); + position: relative; + vertical-align: top; } + .button:focus, .input:focus, #documenter .docs-sidebar form.docs-search > input:focus, .textarea:focus, .select select:focus, .file-cta:focus, + .file-name:focus, .pagination-previous:focus, + .pagination-next:focus, + .pagination-link:focus, + .pagination-ellipsis:focus, .is-focused.button, .is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-focused.textarea, .select select.is-focused, .is-focused.file-cta, + .is-focused.file-name, .is-focused.pagination-previous, + .is-focused.pagination-next, + .is-focused.pagination-link, + .is-focused.pagination-ellipsis, .button:active, .input:active, #documenter .docs-sidebar form.docs-search > input:active, .textarea:active, .select select:active, .file-cta:active, + .file-name:active, .pagination-previous:active, + .pagination-next:active, + .pagination-link:active, + .pagination-ellipsis:active, .is-active.button, .is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active, .is-active.textarea, .select select.is-active, .is-active.file-cta, + .is-active.file-name, .is-active.pagination-previous, + .is-active.pagination-next, + .is-active.pagination-link, + .is-active.pagination-ellipsis { + outline: none; } + .button[disabled], .input[disabled], #documenter .docs-sidebar form.docs-search > input[disabled], .textarea[disabled], .select select[disabled], .file-cta[disabled], + .file-name[disabled], .pagination-previous[disabled], + .pagination-next[disabled], + .pagination-link[disabled], + .pagination-ellipsis[disabled], + fieldset[disabled] .button, + fieldset[disabled] .input, + fieldset[disabled] #documenter .docs-sidebar form.docs-search > input, + #documenter .docs-sidebar fieldset[disabled] form.docs-search > input, + fieldset[disabled] .textarea, + fieldset[disabled] .select select, + .select fieldset[disabled] select, + fieldset[disabled] .file-cta, + fieldset[disabled] .file-name, + fieldset[disabled] .pagination-previous, + fieldset[disabled] .pagination-next, + fieldset[disabled] .pagination-link, + fieldset[disabled] .pagination-ellipsis { + cursor: not-allowed; } + +/*! minireset.css v0.0.4 | MIT License | github.com/jgthms/minireset.css */ +html, +body, +p, +ol, +ul, +li, +dl, +dt, +dd, +blockquote, +figure, +fieldset, +legend, +textarea, +pre, +iframe, +hr, +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 0; + padding: 0; } + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: 100%; + font-weight: normal; } + +ul { + list-style: none; } + +button, +input, +select, +textarea { + margin: 0; } + +html { + box-sizing: border-box; } + +*, *::before, *::after { + box-sizing: inherit; } + +img, +embed, +iframe, +object, +video { + height: auto; + max-width: 100%; } + +audio { + max-width: 100%; } + +iframe { + border: 0; } + +table { + border-collapse: collapse; + border-spacing: 0; } + +td, +th { + padding: 0; } + td:not([align]), + th:not([align]) { + text-align: left; } + +html { + background-color: white; + font-size: 16px; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + min-width: 300px; + overflow-x: auto; + overflow-y: scroll; + text-rendering: optimizeLegibility; + text-size-adjust: 100%; } + +article, +aside, +figure, +footer, +header, +hgroup, +section { + display: block; } + +body, +button, +input, +select, +textarea { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif; } + +code, +pre { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace; } + +body { + color: #222222; + font-size: 1em; + font-weight: 400; + line-height: 1.5; } + +a { + color: #2e63b8; + cursor: pointer; + text-decoration: none; } + a strong { + color: currentColor; } + a:hover { + color: #363636; } + +code { + background-color: rgba(0, 0, 0, 0.05); + color: #000000; + font-size: 0.875em; + font-weight: normal; + padding: 0.1em; } + +hr { + background-color: whitesmoke; + border: none; + display: block; + height: 2px; + margin: 1.5rem 0; } + +img { + height: auto; + max-width: 100%; } + +input[type="checkbox"], +input[type="radio"] { + vertical-align: baseline; } + +small { + font-size: 0.875em; } + +span { + font-style: inherit; + font-weight: inherit; } + +strong { + color: #222222; + font-weight: 700; } + +fieldset { + border: none; } + +pre { + -webkit-overflow-scrolling: touch; + background-color: whitesmoke; + color: #222222; + font-size: 0.875em; + overflow-x: auto; + padding: 1.25rem 1.5rem; + white-space: pre; + word-wrap: normal; } + pre code { + background-color: transparent; + color: currentColor; + font-size: 1em; + padding: 0; } + +table td, +table th { + vertical-align: top; } + table td:not([align]), + table th:not([align]) { + text-align: left; } + +table th { + color: #222222; } + +.is-clearfix::after { + clear: both; + content: " "; + display: table; } + +.is-pulled-left { + float: left !important; } + +.is-pulled-right { + float: right !important; } + +.is-clipped { + overflow: hidden !important; } + +.is-size-1 { + font-size: 3rem !important; } + +.is-size-2 { + font-size: 2.5rem !important; } + +.is-size-3 { + font-size: 2rem !important; } + +.is-size-4 { + font-size: 1.5rem !important; } + +.is-size-5 { + font-size: 1.25rem !important; } + +.is-size-6 { + font-size: 1rem !important; } + +.is-size-7, .docstring > section > a.docs-sourcelink { + font-size: 0.75rem !important; } + +@media screen and (max-width: 768px) { + .is-size-1-mobile { + font-size: 3rem !important; } + .is-size-2-mobile { + font-size: 2.5rem !important; } + .is-size-3-mobile { + font-size: 2rem !important; } + .is-size-4-mobile { + font-size: 1.5rem !important; } + .is-size-5-mobile { + font-size: 1.25rem !important; } + .is-size-6-mobile { + font-size: 1rem !important; } + .is-size-7-mobile { + font-size: 0.75rem !important; } } + +@media screen and (min-width: 769px), print { + .is-size-1-tablet { + font-size: 3rem !important; } + .is-size-2-tablet { + font-size: 2.5rem !important; } + .is-size-3-tablet { + font-size: 2rem !important; } + .is-size-4-tablet { + font-size: 1.5rem !important; } + .is-size-5-tablet { + font-size: 1.25rem !important; } + .is-size-6-tablet { + font-size: 1rem !important; } + .is-size-7-tablet { + font-size: 0.75rem !important; } } + +@media screen and (max-width: 1055px) { + .is-size-1-touch { + font-size: 3rem !important; } + .is-size-2-touch { + font-size: 2.5rem !important; } + .is-size-3-touch { + font-size: 2rem !important; } + .is-size-4-touch { + font-size: 1.5rem !important; } + .is-size-5-touch { + font-size: 1.25rem !important; } + .is-size-6-touch { + font-size: 1rem !important; } + .is-size-7-touch { + font-size: 0.75rem !important; } } + +@media screen and (min-width: 1056px) { + .is-size-1-desktop { + font-size: 3rem !important; } + .is-size-2-desktop { + font-size: 2.5rem !important; } + .is-size-3-desktop { + font-size: 2rem !important; } + .is-size-4-desktop { + font-size: 1.5rem !important; } + .is-size-5-desktop { + font-size: 1.25rem !important; } + .is-size-6-desktop { + font-size: 1rem !important; } + .is-size-7-desktop { + font-size: 0.75rem !important; } } + +@media screen and (min-width: 1216px) { + .is-size-1-widescreen { + font-size: 3rem !important; } + .is-size-2-widescreen { + font-size: 2.5rem !important; } + .is-size-3-widescreen { + font-size: 2rem !important; } + .is-size-4-widescreen { + font-size: 1.5rem !important; } + .is-size-5-widescreen { + font-size: 1.25rem !important; } + .is-size-6-widescreen { + font-size: 1rem !important; } + .is-size-7-widescreen { + font-size: 0.75rem !important; } } + +@media screen and (min-width: 1408px) { + .is-size-1-fullhd { + font-size: 3rem !important; } + .is-size-2-fullhd { + font-size: 2.5rem !important; } + .is-size-3-fullhd { + font-size: 2rem !important; } + .is-size-4-fullhd { + font-size: 1.5rem !important; } + .is-size-5-fullhd { + font-size: 1.25rem !important; } + .is-size-6-fullhd { + font-size: 1rem !important; } + .is-size-7-fullhd { + font-size: 0.75rem !important; } } + +.has-text-centered { + text-align: center !important; } + +.has-text-justified { + text-align: justify !important; } + +.has-text-left { + text-align: left !important; } + +.has-text-right { + text-align: right !important; } + +@media screen and (max-width: 768px) { + .has-text-centered-mobile { + text-align: center !important; } } + +@media screen and (min-width: 769px), print { + .has-text-centered-tablet { + text-align: center !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .has-text-centered-tablet-only { + text-align: center !important; } } + +@media screen and (max-width: 1055px) { + .has-text-centered-touch { + text-align: center !important; } } + +@media screen and (min-width: 1056px) { + .has-text-centered-desktop { + text-align: center !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .has-text-centered-desktop-only { + text-align: center !important; } } + +@media screen and (min-width: 1216px) { + .has-text-centered-widescreen { + text-align: center !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .has-text-centered-widescreen-only { + text-align: center !important; } } + +@media screen and (min-width: 1408px) { + .has-text-centered-fullhd { + text-align: center !important; } } + +@media screen and (max-width: 768px) { + .has-text-justified-mobile { + text-align: justify !important; } } + +@media screen and (min-width: 769px), print { + .has-text-justified-tablet { + text-align: justify !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .has-text-justified-tablet-only { + text-align: justify !important; } } + +@media screen and (max-width: 1055px) { + .has-text-justified-touch { + text-align: justify !important; } } + +@media screen and (min-width: 1056px) { + .has-text-justified-desktop { + text-align: justify !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .has-text-justified-desktop-only { + text-align: justify !important; } } + +@media screen and (min-width: 1216px) { + .has-text-justified-widescreen { + text-align: justify !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .has-text-justified-widescreen-only { + text-align: justify !important; } } + +@media screen and (min-width: 1408px) { + .has-text-justified-fullhd { + text-align: justify !important; } } + +@media screen and (max-width: 768px) { + .has-text-left-mobile { + text-align: left !important; } } + +@media screen and (min-width: 769px), print { + .has-text-left-tablet { + text-align: left !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .has-text-left-tablet-only { + text-align: left !important; } } + +@media screen and (max-width: 1055px) { + .has-text-left-touch { + text-align: left !important; } } + +@media screen and (min-width: 1056px) { + .has-text-left-desktop { + text-align: left !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .has-text-left-desktop-only { + text-align: left !important; } } + +@media screen and (min-width: 1216px) { + .has-text-left-widescreen { + text-align: left !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .has-text-left-widescreen-only { + text-align: left !important; } } + +@media screen and (min-width: 1408px) { + .has-text-left-fullhd { + text-align: left !important; } } + +@media screen and (max-width: 768px) { + .has-text-right-mobile { + text-align: right !important; } } + +@media screen and (min-width: 769px), print { + .has-text-right-tablet { + text-align: right !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .has-text-right-tablet-only { + text-align: right !important; } } + +@media screen and (max-width: 1055px) { + .has-text-right-touch { + text-align: right !important; } } + +@media screen and (min-width: 1056px) { + .has-text-right-desktop { + text-align: right !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .has-text-right-desktop-only { + text-align: right !important; } } + +@media screen and (min-width: 1216px) { + .has-text-right-widescreen { + text-align: right !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .has-text-right-widescreen-only { + text-align: right !important; } } + +@media screen and (min-width: 1408px) { + .has-text-right-fullhd { + text-align: right !important; } } + +.is-capitalized { + text-transform: capitalize !important; } + +.is-lowercase { + text-transform: lowercase !important; } + +.is-uppercase { + text-transform: uppercase !important; } + +.is-italic { + font-style: italic !important; } + +.has-text-white { + color: white !important; } + +a.has-text-white:hover, a.has-text-white:focus { + color: #e6e6e6 !important; } + +.has-background-white { + background-color: white !important; } + +.has-text-black { + color: #0a0a0a !important; } + +a.has-text-black:hover, a.has-text-black:focus { + color: black !important; } + +.has-background-black { + background-color: #0a0a0a !important; } + +.has-text-light { + color: whitesmoke !important; } + +a.has-text-light:hover, a.has-text-light:focus { + color: #dbdbdb !important; } + +.has-background-light { + background-color: whitesmoke !important; } + +.has-text-dark { + color: #363636 !important; } + +a.has-text-dark:hover, a.has-text-dark:focus { + color: #1c1c1c !important; } + +.has-background-dark { + background-color: #363636 !important; } + +.has-text-primary { + color: #4eb5de !important; } + +a.has-text-primary:hover, a.has-text-primary:focus { + color: #27a1d2 !important; } + +.has-background-primary { + background-color: #4eb5de !important; } + +.has-text-link { + color: #2e63b8 !important; } + +a.has-text-link:hover, a.has-text-link:focus { + color: #244d8f !important; } + +.has-background-link { + background-color: #2e63b8 !important; } + +.has-text-info { + color: #209cee !important; } + +a.has-text-info:hover, a.has-text-info:focus { + color: #1081cb !important; } + +.has-background-info { + background-color: #209cee !important; } + +.has-text-success { + color: #22c35b !important; } + +a.has-text-success:hover, a.has-text-success:focus { + color: #1a9847 !important; } + +.has-background-success { + background-color: #22c35b !important; } + +.has-text-warning { + color: #ffdd57 !important; } + +a.has-text-warning:hover, a.has-text-warning:focus { + color: #ffd324 !important; } + +.has-background-warning { + background-color: #ffdd57 !important; } + +.has-text-danger { + color: #da0b00 !important; } + +a.has-text-danger:hover, a.has-text-danger:focus { + color: #a70800 !important; } + +.has-background-danger { + background-color: #da0b00 !important; } + +.has-text-black-bis { + color: #121212 !important; } + +.has-background-black-bis { + background-color: #121212 !important; } + +.has-text-black-ter { + color: #242424 !important; } + +.has-background-black-ter { + background-color: #242424 !important; } + +.has-text-grey-darker { + color: #363636 !important; } + +.has-background-grey-darker { + background-color: #363636 !important; } + +.has-text-grey-dark { + color: #4a4a4a !important; } + +.has-background-grey-dark { + background-color: #4a4a4a !important; } + +.has-text-grey { + color: #7a7a7a !important; } + +.has-background-grey { + background-color: #7a7a7a !important; } + +.has-text-grey-light { + color: #b5b5b5 !important; } + +.has-background-grey-light { + background-color: #b5b5b5 !important; } + +.has-text-grey-lighter { + color: #dbdbdb !important; } + +.has-background-grey-lighter { + background-color: #dbdbdb !important; } + +.has-text-white-ter { + color: whitesmoke !important; } + +.has-background-white-ter { + background-color: whitesmoke !important; } + +.has-text-white-bis { + color: #fafafa !important; } + +.has-background-white-bis { + background-color: #fafafa !important; } + +.has-text-weight-light { + font-weight: 300 !important; } + +.has-text-weight-normal { + font-weight: 400 !important; } + +.has-text-weight-medium { + font-weight: 500 !important; } + +.has-text-weight-semibold { + font-weight: 600 !important; } + +.has-text-weight-bold { + font-weight: 700 !important; } + +.is-family-primary { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-secondary { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-sans-serif { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-monospace { + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-family-code { + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-block { + display: block !important; } + +@media screen and (max-width: 768px) { + .is-block-mobile { + display: block !important; } } + +@media screen and (min-width: 769px), print { + .is-block-tablet { + display: block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-block-tablet-only { + display: block !important; } } + +@media screen and (max-width: 1055px) { + .is-block-touch { + display: block !important; } } + +@media screen and (min-width: 1056px) { + .is-block-desktop { + display: block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-block-desktop-only { + display: block !important; } } + +@media screen and (min-width: 1216px) { + .is-block-widescreen { + display: block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-block-widescreen-only { + display: block !important; } } + +@media screen and (min-width: 1408px) { + .is-block-fullhd { + display: block !important; } } + +.is-flex { + display: flex !important; } + +@media screen and (max-width: 768px) { + .is-flex-mobile { + display: flex !important; } } + +@media screen and (min-width: 769px), print { + .is-flex-tablet { + display: flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-flex-tablet-only { + display: flex !important; } } + +@media screen and (max-width: 1055px) { + .is-flex-touch { + display: flex !important; } } + +@media screen and (min-width: 1056px) { + .is-flex-desktop { + display: flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-flex-desktop-only { + display: flex !important; } } + +@media screen and (min-width: 1216px) { + .is-flex-widescreen { + display: flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-flex-widescreen-only { + display: flex !important; } } + +@media screen and (min-width: 1408px) { + .is-flex-fullhd { + display: flex !important; } } + +.is-inline { + display: inline !important; } + +@media screen and (max-width: 768px) { + .is-inline-mobile { + display: inline !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-tablet { + display: inline !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-tablet-only { + display: inline !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-touch { + display: inline !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-desktop { + display: inline !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-desktop-only { + display: inline !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-widescreen { + display: inline !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-widescreen-only { + display: inline !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-fullhd { + display: inline !important; } } + +.is-inline-block { + display: inline-block !important; } + +@media screen and (max-width: 768px) { + .is-inline-block-mobile { + display: inline-block !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-block-tablet { + display: inline-block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-block-tablet-only { + display: inline-block !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-block-touch { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-block-desktop { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-block-desktop-only { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-block-widescreen { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-block-widescreen-only { + display: inline-block !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-block-fullhd { + display: inline-block !important; } } + +.is-inline-flex { + display: inline-flex !important; } + +@media screen and (max-width: 768px) { + .is-inline-flex-mobile { + display: inline-flex !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-flex-tablet { + display: inline-flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-flex-tablet-only { + display: inline-flex !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-flex-touch { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-flex-desktop { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-flex-desktop-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-flex-widescreen { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-flex-widescreen-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-flex-fullhd { + display: inline-flex !important; } } + +.is-hidden { + display: none !important; } + +.is-sr-only { + border: none !important; + clip: rect(0, 0, 0, 0) !important; + height: 0.01em !important; + overflow: hidden !important; + padding: 0 !important; + position: absolute !important; + white-space: nowrap !important; + width: 0.01em !important; } + +@media screen and (max-width: 768px) { + .is-hidden-mobile { + display: none !important; } } + +@media screen and (min-width: 769px), print { + .is-hidden-tablet { + display: none !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-hidden-tablet-only { + display: none !important; } } + +@media screen and (max-width: 1055px) { + .is-hidden-touch { + display: none !important; } } + +@media screen and (min-width: 1056px) { + .is-hidden-desktop { + display: none !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-hidden-desktop-only { + display: none !important; } } + +@media screen and (min-width: 1216px) { + .is-hidden-widescreen { + display: none !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-hidden-widescreen-only { + display: none !important; } } + +@media screen and (min-width: 1408px) { + .is-hidden-fullhd { + display: none !important; } } + +.is-invisible { + visibility: hidden !important; } + +@media screen and (max-width: 768px) { + .is-invisible-mobile { + visibility: hidden !important; } } + +@media screen and (min-width: 769px), print { + .is-invisible-tablet { + visibility: hidden !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-invisible-tablet-only { + visibility: hidden !important; } } + +@media screen and (max-width: 1055px) { + .is-invisible-touch { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) { + .is-invisible-desktop { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-invisible-desktop-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) { + .is-invisible-widescreen { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-invisible-widescreen-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1408px) { + .is-invisible-fullhd { + visibility: hidden !important; } } + +.is-marginless { + margin: 0 !important; } + +.is-paddingless { + padding: 0 !important; } + +.is-radiusless { + border-radius: 0 !important; } + +.is-shadowless { + box-shadow: none !important; } + +.is-relative { + position: relative !important; } + +.box { + background-color: white; + border-radius: 6px; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + color: #222222; + display: block; + padding: 1.25rem; } + +a.box:hover, a.box:focus { + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px #2e63b8; } + +a.box:active { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2), 0 0 0 1px #2e63b8; } + +.button { + background-color: white; + border-color: #dbdbdb; + border-width: 1px; + color: #363636; + cursor: pointer; + justify-content: center; + padding-bottom: calc(0.375em - 1px); + padding-left: 0.75em; + padding-right: 0.75em; + padding-top: calc(0.375em - 1px); + text-align: center; + white-space: nowrap; } + .button strong { + color: inherit; } + .button .icon, .button .icon.is-small, .button #documenter .docs-sidebar form.docs-search > input.icon, #documenter .docs-sidebar .button form.docs-search > input.icon, .button .icon.is-medium, .button .icon.is-large { + height: 1.5em; + width: 1.5em; } + .button .icon:first-child:not(:last-child) { + margin-left: calc(-0.375em - 1px); + margin-right: 0.1875em; } + .button .icon:last-child:not(:first-child) { + margin-left: 0.1875em; + margin-right: calc(-0.375em - 1px); } + .button .icon:first-child:last-child { + margin-left: calc(-0.375em - 1px); + margin-right: calc(-0.375em - 1px); } + .button:hover, .button.is-hovered { + border-color: #b5b5b5; + color: #363636; } + .button:focus, .button.is-focused { + border-color: #3c5dcd; + color: #363636; } + .button:focus:not(:active), .button.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .button:active, .button.is-active { + border-color: #4a4a4a; + color: #363636; } + .button.is-text { + background-color: transparent; + border-color: transparent; + color: #222222; + text-decoration: underline; } + .button.is-text:hover, .button.is-text.is-hovered, .button.is-text:focus, .button.is-text.is-focused { + background-color: whitesmoke; + color: #222222; } + .button.is-text:active, .button.is-text.is-active { + background-color: #e8e8e8; + color: #222222; } + .button.is-text[disabled], + fieldset[disabled] .button.is-text { + background-color: transparent; + border-color: transparent; + box-shadow: none; } + .button.is-white { + background-color: white; + border-color: transparent; + color: #0a0a0a; } + .button.is-white:hover, .button.is-white.is-hovered { + background-color: #f9f9f9; + border-color: transparent; + color: #0a0a0a; } + .button.is-white:focus, .button.is-white.is-focused { + border-color: transparent; + color: #0a0a0a; } + .button.is-white:focus:not(:active), .button.is-white.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + .button.is-white:active, .button.is-white.is-active { + background-color: #f2f2f2; + border-color: transparent; + color: #0a0a0a; } + .button.is-white[disabled], + fieldset[disabled] .button.is-white { + background-color: white; + border-color: transparent; + box-shadow: none; } + .button.is-white.is-inverted { + background-color: #0a0a0a; + color: white; } + .button.is-white.is-inverted:hover, .button.is-white.is-inverted.is-hovered { + background-color: black; } + .button.is-white.is-inverted[disabled], + fieldset[disabled] .button.is-white.is-inverted { + background-color: #0a0a0a; + border-color: transparent; + box-shadow: none; + color: white; } + .button.is-white.is-loading::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; } + .button.is-white.is-outlined { + background-color: transparent; + border-color: white; + color: white; } + .button.is-white.is-outlined:hover, .button.is-white.is-outlined.is-hovered, .button.is-white.is-outlined:focus, .button.is-white.is-outlined.is-focused { + background-color: white; + border-color: white; + color: #0a0a0a; } + .button.is-white.is-outlined.is-loading::after { + border-color: transparent transparent white white !important; } + .button.is-white.is-outlined.is-loading:hover::after, .button.is-white.is-outlined.is-loading.is-hovered::after, .button.is-white.is-outlined.is-loading:focus::after, .button.is-white.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; } + .button.is-white.is-outlined[disabled], + fieldset[disabled] .button.is-white.is-outlined { + background-color: transparent; + border-color: white; + box-shadow: none; + color: white; } + .button.is-white.is-inverted.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + color: #0a0a0a; } + .button.is-white.is-inverted.is-outlined:hover, .button.is-white.is-inverted.is-outlined.is-hovered, .button.is-white.is-inverted.is-outlined:focus, .button.is-white.is-inverted.is-outlined.is-focused { + background-color: #0a0a0a; + color: white; } + .button.is-white.is-inverted.is-outlined.is-loading:hover::after, .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-white.is-inverted.is-outlined.is-loading:focus::after, .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent white white !important; } + .button.is-white.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-white.is-inverted.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + box-shadow: none; + color: #0a0a0a; } + .button.is-black { + background-color: #0a0a0a; + border-color: transparent; + color: white; } + .button.is-black:hover, .button.is-black.is-hovered { + background-color: #040404; + border-color: transparent; + color: white; } + .button.is-black:focus, .button.is-black.is-focused { + border-color: transparent; + color: white; } + .button.is-black:focus:not(:active), .button.is-black.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + .button.is-black:active, .button.is-black.is-active { + background-color: black; + border-color: transparent; + color: white; } + .button.is-black[disabled], + fieldset[disabled] .button.is-black { + background-color: #0a0a0a; + border-color: transparent; + box-shadow: none; } + .button.is-black.is-inverted { + background-color: white; + color: #0a0a0a; } + .button.is-black.is-inverted:hover, .button.is-black.is-inverted.is-hovered { + background-color: #f2f2f2; } + .button.is-black.is-inverted[disabled], + fieldset[disabled] .button.is-black.is-inverted { + background-color: white; + border-color: transparent; + box-shadow: none; + color: #0a0a0a; } + .button.is-black.is-loading::after { + border-color: transparent transparent white white !important; } + .button.is-black.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + color: #0a0a0a; } + .button.is-black.is-outlined:hover, .button.is-black.is-outlined.is-hovered, .button.is-black.is-outlined:focus, .button.is-black.is-outlined.is-focused { + background-color: #0a0a0a; + border-color: #0a0a0a; + color: white; } + .button.is-black.is-outlined.is-loading::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; } + .button.is-black.is-outlined.is-loading:hover::after, .button.is-black.is-outlined.is-loading.is-hovered::after, .button.is-black.is-outlined.is-loading:focus::after, .button.is-black.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent white white !important; } + .button.is-black.is-outlined[disabled], + fieldset[disabled] .button.is-black.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + box-shadow: none; + color: #0a0a0a; } + .button.is-black.is-inverted.is-outlined { + background-color: transparent; + border-color: white; + color: white; } + .button.is-black.is-inverted.is-outlined:hover, .button.is-black.is-inverted.is-outlined.is-hovered, .button.is-black.is-inverted.is-outlined:focus, .button.is-black.is-inverted.is-outlined.is-focused { + background-color: white; + color: #0a0a0a; } + .button.is-black.is-inverted.is-outlined.is-loading:hover::after, .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-black.is-inverted.is-outlined.is-loading:focus::after, .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; } + .button.is-black.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-black.is-inverted.is-outlined { + background-color: transparent; + border-color: white; + box-shadow: none; + color: white; } + .button.is-light { + background-color: whitesmoke; + border-color: transparent; + color: #363636; } + .button.is-light:hover, .button.is-light.is-hovered { + background-color: #eeeeee; + border-color: transparent; + color: #363636; } + .button.is-light:focus, .button.is-light.is-focused { + border-color: transparent; + color: #363636; } + .button.is-light:focus:not(:active), .button.is-light.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); } + .button.is-light:active, .button.is-light.is-active { + background-color: #e8e8e8; + border-color: transparent; + color: #363636; } + .button.is-light[disabled], + fieldset[disabled] .button.is-light { + background-color: whitesmoke; + border-color: transparent; + box-shadow: none; } + .button.is-light.is-inverted { + background-color: #363636; + color: whitesmoke; } + .button.is-light.is-inverted:hover, .button.is-light.is-inverted.is-hovered { + background-color: #292929; } + .button.is-light.is-inverted[disabled], + fieldset[disabled] .button.is-light.is-inverted { + background-color: #363636; + border-color: transparent; + box-shadow: none; + color: whitesmoke; } + .button.is-light.is-loading::after { + border-color: transparent transparent #363636 #363636 !important; } + .button.is-light.is-outlined { + background-color: transparent; + border-color: whitesmoke; + color: whitesmoke; } + .button.is-light.is-outlined:hover, .button.is-light.is-outlined.is-hovered, .button.is-light.is-outlined:focus, .button.is-light.is-outlined.is-focused { + background-color: whitesmoke; + border-color: whitesmoke; + color: #363636; } + .button.is-light.is-outlined.is-loading::after { + border-color: transparent transparent whitesmoke whitesmoke !important; } + .button.is-light.is-outlined.is-loading:hover::after, .button.is-light.is-outlined.is-loading.is-hovered::after, .button.is-light.is-outlined.is-loading:focus::after, .button.is-light.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #363636 #363636 !important; } + .button.is-light.is-outlined[disabled], + fieldset[disabled] .button.is-light.is-outlined { + background-color: transparent; + border-color: whitesmoke; + box-shadow: none; + color: whitesmoke; } + .button.is-light.is-inverted.is-outlined { + background-color: transparent; + border-color: #363636; + color: #363636; } + .button.is-light.is-inverted.is-outlined:hover, .button.is-light.is-inverted.is-outlined.is-hovered, .button.is-light.is-inverted.is-outlined:focus, .button.is-light.is-inverted.is-outlined.is-focused { + background-color: #363636; + color: whitesmoke; } + .button.is-light.is-inverted.is-outlined.is-loading:hover::after, .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-light.is-inverted.is-outlined.is-loading:focus::after, .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent whitesmoke whitesmoke !important; } + .button.is-light.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-light.is-inverted.is-outlined { + background-color: transparent; + border-color: #363636; + box-shadow: none; + color: #363636; } + .button.is-dark, .content kbd.button { + background-color: #363636; + border-color: transparent; + color: whitesmoke; } + .button.is-dark:hover, .content kbd.button:hover, .button.is-dark.is-hovered, .content kbd.button.is-hovered { + background-color: #2f2f2f; + border-color: transparent; + color: whitesmoke; } + .button.is-dark:focus, .content kbd.button:focus, .button.is-dark.is-focused, .content kbd.button.is-focused { + border-color: transparent; + color: whitesmoke; } + .button.is-dark:focus:not(:active), .content kbd.button:focus:not(:active), .button.is-dark.is-focused:not(:active), .content kbd.button.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); } + .button.is-dark:active, .content kbd.button:active, .button.is-dark.is-active, .content kbd.button.is-active { + background-color: #292929; + border-color: transparent; + color: whitesmoke; } + .button.is-dark[disabled], .content kbd.button[disabled], + fieldset[disabled] .button.is-dark, + fieldset[disabled] .content kbd.button, + .content fieldset[disabled] kbd.button { + background-color: #363636; + border-color: transparent; + box-shadow: none; } + .button.is-dark.is-inverted, .content kbd.button.is-inverted { + background-color: whitesmoke; + color: #363636; } + .button.is-dark.is-inverted:hover, .content kbd.button.is-inverted:hover, .button.is-dark.is-inverted.is-hovered, .content kbd.button.is-inverted.is-hovered { + background-color: #e8e8e8; } + .button.is-dark.is-inverted[disabled], .content kbd.button.is-inverted[disabled], + fieldset[disabled] .button.is-dark.is-inverted, + fieldset[disabled] .content kbd.button.is-inverted, + .content fieldset[disabled] kbd.button.is-inverted { + background-color: whitesmoke; + border-color: transparent; + box-shadow: none; + color: #363636; } + .button.is-dark.is-loading::after, .content kbd.button.is-loading::after { + border-color: transparent transparent whitesmoke whitesmoke !important; } + .button.is-dark.is-outlined, .content kbd.button.is-outlined { + background-color: transparent; + border-color: #363636; + color: #363636; } + .button.is-dark.is-outlined:hover, .content kbd.button.is-outlined:hover, .button.is-dark.is-outlined.is-hovered, .content kbd.button.is-outlined.is-hovered, .button.is-dark.is-outlined:focus, .content kbd.button.is-outlined:focus, .button.is-dark.is-outlined.is-focused, .content kbd.button.is-outlined.is-focused { + background-color: #363636; + border-color: #363636; + color: whitesmoke; } + .button.is-dark.is-outlined.is-loading::after, .content kbd.button.is-outlined.is-loading::after { + border-color: transparent transparent #363636 #363636 !important; } + .button.is-dark.is-outlined.is-loading:hover::after, .content kbd.button.is-outlined.is-loading:hover::after, .button.is-dark.is-outlined.is-loading.is-hovered::after, .content kbd.button.is-outlined.is-loading.is-hovered::after, .button.is-dark.is-outlined.is-loading:focus::after, .content kbd.button.is-outlined.is-loading:focus::after, .button.is-dark.is-outlined.is-loading.is-focused::after, .content kbd.button.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent whitesmoke whitesmoke !important; } + .button.is-dark.is-outlined[disabled], .content kbd.button.is-outlined[disabled], + fieldset[disabled] .button.is-dark.is-outlined, + fieldset[disabled] .content kbd.button.is-outlined, + .content fieldset[disabled] kbd.button.is-outlined { + background-color: transparent; + border-color: #363636; + box-shadow: none; + color: #363636; } + .button.is-dark.is-inverted.is-outlined, .content kbd.button.is-inverted.is-outlined { + background-color: transparent; + border-color: whitesmoke; + color: whitesmoke; } + .button.is-dark.is-inverted.is-outlined:hover, .content kbd.button.is-inverted.is-outlined:hover, .button.is-dark.is-inverted.is-outlined.is-hovered, .content kbd.button.is-inverted.is-outlined.is-hovered, .button.is-dark.is-inverted.is-outlined:focus, .content kbd.button.is-inverted.is-outlined:focus, .button.is-dark.is-inverted.is-outlined.is-focused, .content kbd.button.is-inverted.is-outlined.is-focused { + background-color: whitesmoke; + color: #363636; } + .button.is-dark.is-inverted.is-outlined.is-loading:hover::after, .content kbd.button.is-inverted.is-outlined.is-loading:hover::after, .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after, .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-dark.is-inverted.is-outlined.is-loading:focus::after, .content kbd.button.is-inverted.is-outlined.is-loading:focus::after, .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after, .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #363636 #363636 !important; } + .button.is-dark.is-inverted.is-outlined[disabled], .content kbd.button.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-dark.is-inverted.is-outlined, + fieldset[disabled] .content kbd.button.is-inverted.is-outlined, + .content fieldset[disabled] kbd.button.is-inverted.is-outlined { + background-color: transparent; + border-color: whitesmoke; + box-shadow: none; + color: whitesmoke; } + .button.is-primary, .docstring > section > a.button.docs-sourcelink { + background-color: #4eb5de; + border-color: transparent; + color: #fff; } + .button.is-primary:hover, .docstring > section > a.button.docs-sourcelink:hover, .button.is-primary.is-hovered, .docstring > section > a.button.is-hovered.docs-sourcelink { + background-color: #43b1dc; + border-color: transparent; + color: #fff; } + .button.is-primary:focus, .docstring > section > a.button.docs-sourcelink:focus, .button.is-primary.is-focused, .docstring > section > a.button.is-focused.docs-sourcelink { + border-color: transparent; + color: #fff; } + .button.is-primary:focus:not(:active), .docstring > section > a.button.docs-sourcelink:focus:not(:active), .button.is-primary.is-focused:not(:active), .docstring > section > a.button.is-focused.docs-sourcelink:not(:active) { + box-shadow: 0 0 0 0.125em rgba(78, 181, 222, 0.25); } + .button.is-primary:active, .docstring > section > a.button.docs-sourcelink:active, .button.is-primary.is-active, .docstring > section > a.button.is-active.docs-sourcelink { + background-color: #39acda; + border-color: transparent; + color: #fff; } + .button.is-primary[disabled], .docstring > section > a.button.docs-sourcelink[disabled], + fieldset[disabled] .button.is-primary, + fieldset[disabled] .docstring > section > a.button.docs-sourcelink { + background-color: #4eb5de; + border-color: transparent; + box-shadow: none; } + .button.is-primary.is-inverted, .docstring > section > a.button.is-inverted.docs-sourcelink { + background-color: #fff; + color: #4eb5de; } + .button.is-primary.is-inverted:hover, .docstring > section > a.button.is-inverted.docs-sourcelink:hover, .button.is-primary.is-inverted.is-hovered, .docstring > section > a.button.is-inverted.is-hovered.docs-sourcelink { + background-color: #f2f2f2; } + .button.is-primary.is-inverted[disabled], .docstring > section > a.button.is-inverted.docs-sourcelink[disabled], + fieldset[disabled] .button.is-primary.is-inverted, + fieldset[disabled] .docstring > section > a.button.is-inverted.docs-sourcelink { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #4eb5de; } + .button.is-primary.is-loading::after, .docstring > section > a.button.is-loading.docs-sourcelink::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-primary.is-outlined, .docstring > section > a.button.is-outlined.docs-sourcelink { + background-color: transparent; + border-color: #4eb5de; + color: #4eb5de; } + .button.is-primary.is-outlined:hover, .docstring > section > a.button.is-outlined.docs-sourcelink:hover, .button.is-primary.is-outlined.is-hovered, .docstring > section > a.button.is-outlined.is-hovered.docs-sourcelink, .button.is-primary.is-outlined:focus, .docstring > section > a.button.is-outlined.docs-sourcelink:focus, .button.is-primary.is-outlined.is-focused, .docstring > section > a.button.is-outlined.is-focused.docs-sourcelink { + background-color: #4eb5de; + border-color: #4eb5de; + color: #fff; } + .button.is-primary.is-outlined.is-loading::after, .docstring > section > a.button.is-outlined.is-loading.docs-sourcelink::after { + border-color: transparent transparent #4eb5de #4eb5de !important; } + .button.is-primary.is-outlined.is-loading:hover::after, .docstring > section > a.button.is-outlined.is-loading.docs-sourcelink:hover::after, .button.is-primary.is-outlined.is-loading.is-hovered::after, .docstring > section > a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after, .button.is-primary.is-outlined.is-loading:focus::after, .docstring > section > a.button.is-outlined.is-loading.docs-sourcelink:focus::after, .button.is-primary.is-outlined.is-loading.is-focused::after, .docstring > section > a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-primary.is-outlined[disabled], .docstring > section > a.button.is-outlined.docs-sourcelink[disabled], + fieldset[disabled] .button.is-primary.is-outlined, + fieldset[disabled] .docstring > section > a.button.is-outlined.docs-sourcelink { + background-color: transparent; + border-color: #4eb5de; + box-shadow: none; + color: #4eb5de; } + .button.is-primary.is-inverted.is-outlined, .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink { + background-color: transparent; + border-color: #fff; + color: #fff; } + .button.is-primary.is-inverted.is-outlined:hover, .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink:hover, .button.is-primary.is-inverted.is-outlined.is-hovered, .docstring > section > a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink, .button.is-primary.is-inverted.is-outlined:focus, .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink:focus, .button.is-primary.is-inverted.is-outlined.is-focused, .docstring > section > a.button.is-inverted.is-outlined.is-focused.docs-sourcelink { + background-color: #fff; + color: #4eb5de; } + .button.is-primary.is-inverted.is-outlined.is-loading:hover::after, .docstring > section > a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after, .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after, .docstring > section > a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after, .button.is-primary.is-inverted.is-outlined.is-loading:focus::after, .docstring > section > a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after, .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after, .docstring > section > a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after { + border-color: transparent transparent #4eb5de #4eb5de !important; } + .button.is-primary.is-inverted.is-outlined[disabled], .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink[disabled], + fieldset[disabled] .button.is-primary.is-inverted.is-outlined, + fieldset[disabled] .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + .button.is-link { + background-color: #2e63b8; + border-color: transparent; + color: #fff; } + .button.is-link:hover, .button.is-link.is-hovered { + background-color: #2b5eae; + border-color: transparent; + color: #fff; } + .button.is-link:focus, .button.is-link.is-focused { + border-color: transparent; + color: #fff; } + .button.is-link:focus:not(:active), .button.is-link.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .button.is-link:active, .button.is-link.is-active { + background-color: #2958a4; + border-color: transparent; + color: #fff; } + .button.is-link[disabled], + fieldset[disabled] .button.is-link { + background-color: #2e63b8; + border-color: transparent; + box-shadow: none; } + .button.is-link.is-inverted { + background-color: #fff; + color: #2e63b8; } + .button.is-link.is-inverted:hover, .button.is-link.is-inverted.is-hovered { + background-color: #f2f2f2; } + .button.is-link.is-inverted[disabled], + fieldset[disabled] .button.is-link.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #2e63b8; } + .button.is-link.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-link.is-outlined { + background-color: transparent; + border-color: #2e63b8; + color: #2e63b8; } + .button.is-link.is-outlined:hover, .button.is-link.is-outlined.is-hovered, .button.is-link.is-outlined:focus, .button.is-link.is-outlined.is-focused { + background-color: #2e63b8; + border-color: #2e63b8; + color: #fff; } + .button.is-link.is-outlined.is-loading::after { + border-color: transparent transparent #2e63b8 #2e63b8 !important; } + .button.is-link.is-outlined.is-loading:hover::after, .button.is-link.is-outlined.is-loading.is-hovered::after, .button.is-link.is-outlined.is-loading:focus::after, .button.is-link.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-link.is-outlined[disabled], + fieldset[disabled] .button.is-link.is-outlined { + background-color: transparent; + border-color: #2e63b8; + box-shadow: none; + color: #2e63b8; } + .button.is-link.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + .button.is-link.is-inverted.is-outlined:hover, .button.is-link.is-inverted.is-outlined.is-hovered, .button.is-link.is-inverted.is-outlined:focus, .button.is-link.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #2e63b8; } + .button.is-link.is-inverted.is-outlined.is-loading:hover::after, .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-link.is-inverted.is-outlined.is-loading:focus::after, .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #2e63b8 #2e63b8 !important; } + .button.is-link.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-link.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + .button.is-info { + background-color: #209cee; + border-color: transparent; + color: #fff; } + .button.is-info:hover, .button.is-info.is-hovered { + background-color: #1497ed; + border-color: transparent; + color: #fff; } + .button.is-info:focus, .button.is-info.is-focused { + border-color: transparent; + color: #fff; } + .button.is-info:focus:not(:active), .button.is-info.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .button.is-info:active, .button.is-info.is-active { + background-color: #1190e3; + border-color: transparent; + color: #fff; } + .button.is-info[disabled], + fieldset[disabled] .button.is-info { + background-color: #209cee; + border-color: transparent; + box-shadow: none; } + .button.is-info.is-inverted { + background-color: #fff; + color: #209cee; } + .button.is-info.is-inverted:hover, .button.is-info.is-inverted.is-hovered { + background-color: #f2f2f2; } + .button.is-info.is-inverted[disabled], + fieldset[disabled] .button.is-info.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #209cee; } + .button.is-info.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-info.is-outlined { + background-color: transparent; + border-color: #209cee; + color: #209cee; } + .button.is-info.is-outlined:hover, .button.is-info.is-outlined.is-hovered, .button.is-info.is-outlined:focus, .button.is-info.is-outlined.is-focused { + background-color: #209cee; + border-color: #209cee; + color: #fff; } + .button.is-info.is-outlined.is-loading::after { + border-color: transparent transparent #209cee #209cee !important; } + .button.is-info.is-outlined.is-loading:hover::after, .button.is-info.is-outlined.is-loading.is-hovered::after, .button.is-info.is-outlined.is-loading:focus::after, .button.is-info.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-info.is-outlined[disabled], + fieldset[disabled] .button.is-info.is-outlined { + background-color: transparent; + border-color: #209cee; + box-shadow: none; + color: #209cee; } + .button.is-info.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + .button.is-info.is-inverted.is-outlined:hover, .button.is-info.is-inverted.is-outlined.is-hovered, .button.is-info.is-inverted.is-outlined:focus, .button.is-info.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #209cee; } + .button.is-info.is-inverted.is-outlined.is-loading:hover::after, .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-info.is-inverted.is-outlined.is-loading:focus::after, .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #209cee #209cee !important; } + .button.is-info.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-info.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + .button.is-success { + background-color: #22c35b; + border-color: transparent; + color: #fff; } + .button.is-success:hover, .button.is-success.is-hovered { + background-color: #20b856; + border-color: transparent; + color: #fff; } + .button.is-success:focus, .button.is-success.is-focused { + border-color: transparent; + color: #fff; } + .button.is-success:focus:not(:active), .button.is-success.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(34, 195, 91, 0.25); } + .button.is-success:active, .button.is-success.is-active { + background-color: #1ead51; + border-color: transparent; + color: #fff; } + .button.is-success[disabled], + fieldset[disabled] .button.is-success { + background-color: #22c35b; + border-color: transparent; + box-shadow: none; } + .button.is-success.is-inverted { + background-color: #fff; + color: #22c35b; } + .button.is-success.is-inverted:hover, .button.is-success.is-inverted.is-hovered { + background-color: #f2f2f2; } + .button.is-success.is-inverted[disabled], + fieldset[disabled] .button.is-success.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #22c35b; } + .button.is-success.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-success.is-outlined { + background-color: transparent; + border-color: #22c35b; + color: #22c35b; } + .button.is-success.is-outlined:hover, .button.is-success.is-outlined.is-hovered, .button.is-success.is-outlined:focus, .button.is-success.is-outlined.is-focused { + background-color: #22c35b; + border-color: #22c35b; + color: #fff; } + .button.is-success.is-outlined.is-loading::after { + border-color: transparent transparent #22c35b #22c35b !important; } + .button.is-success.is-outlined.is-loading:hover::after, .button.is-success.is-outlined.is-loading.is-hovered::after, .button.is-success.is-outlined.is-loading:focus::after, .button.is-success.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-success.is-outlined[disabled], + fieldset[disabled] .button.is-success.is-outlined { + background-color: transparent; + border-color: #22c35b; + box-shadow: none; + color: #22c35b; } + .button.is-success.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + .button.is-success.is-inverted.is-outlined:hover, .button.is-success.is-inverted.is-outlined.is-hovered, .button.is-success.is-inverted.is-outlined:focus, .button.is-success.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #22c35b; } + .button.is-success.is-inverted.is-outlined.is-loading:hover::after, .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-success.is-inverted.is-outlined.is-loading:focus::after, .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #22c35b #22c35b !important; } + .button.is-success.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-success.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + .button.is-warning { + background-color: #ffdd57; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning:hover, .button.is-warning.is-hovered { + background-color: #ffda4a; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning:focus, .button.is-warning.is-focused { + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning:focus:not(:active), .button.is-warning.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } + .button.is-warning:active, .button.is-warning.is-active { + background-color: #ffd83e; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning[disabled], + fieldset[disabled] .button.is-warning { + background-color: #ffdd57; + border-color: transparent; + box-shadow: none; } + .button.is-warning.is-inverted { + background-color: rgba(0, 0, 0, 0.7); + color: #ffdd57; } + .button.is-warning.is-inverted:hover, .button.is-warning.is-inverted.is-hovered { + background-color: rgba(0, 0, 0, 0.7); } + .button.is-warning.is-inverted[disabled], + fieldset[disabled] .button.is-warning.is-inverted { + background-color: rgba(0, 0, 0, 0.7); + border-color: transparent; + box-shadow: none; + color: #ffdd57; } + .button.is-warning.is-loading::after { + border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important; } + .button.is-warning.is-outlined { + background-color: transparent; + border-color: #ffdd57; + color: #ffdd57; } + .button.is-warning.is-outlined:hover, .button.is-warning.is-outlined.is-hovered, .button.is-warning.is-outlined:focus, .button.is-warning.is-outlined.is-focused { + background-color: #ffdd57; + border-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning.is-outlined.is-loading::after { + border-color: transparent transparent #ffdd57 #ffdd57 !important; } + .button.is-warning.is-outlined.is-loading:hover::after, .button.is-warning.is-outlined.is-loading.is-hovered::after, .button.is-warning.is-outlined.is-loading:focus::after, .button.is-warning.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important; } + .button.is-warning.is-outlined[disabled], + fieldset[disabled] .button.is-warning.is-outlined { + background-color: transparent; + border-color: #ffdd57; + box-shadow: none; + color: #ffdd57; } + .button.is-warning.is-inverted.is-outlined { + background-color: transparent; + border-color: rgba(0, 0, 0, 0.7); + color: rgba(0, 0, 0, 0.7); } + .button.is-warning.is-inverted.is-outlined:hover, .button.is-warning.is-inverted.is-outlined.is-hovered, .button.is-warning.is-inverted.is-outlined:focus, .button.is-warning.is-inverted.is-outlined.is-focused { + background-color: rgba(0, 0, 0, 0.7); + color: #ffdd57; } + .button.is-warning.is-inverted.is-outlined.is-loading:hover::after, .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-warning.is-inverted.is-outlined.is-loading:focus::after, .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #ffdd57 #ffdd57 !important; } + .button.is-warning.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-warning.is-inverted.is-outlined { + background-color: transparent; + border-color: rgba(0, 0, 0, 0.7); + box-shadow: none; + color: rgba(0, 0, 0, 0.7); } + .button.is-danger { + background-color: #da0b00; + border-color: transparent; + color: #fff; } + .button.is-danger:hover, .button.is-danger.is-hovered { + background-color: #cd0a00; + border-color: transparent; + color: #fff; } + .button.is-danger:focus, .button.is-danger.is-focused { + border-color: transparent; + color: #fff; } + .button.is-danger:focus:not(:active), .button.is-danger.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(218, 11, 0, 0.25); } + .button.is-danger:active, .button.is-danger.is-active { + background-color: #c10a00; + border-color: transparent; + color: #fff; } + .button.is-danger[disabled], + fieldset[disabled] .button.is-danger { + background-color: #da0b00; + border-color: transparent; + box-shadow: none; } + .button.is-danger.is-inverted { + background-color: #fff; + color: #da0b00; } + .button.is-danger.is-inverted:hover, .button.is-danger.is-inverted.is-hovered { + background-color: #f2f2f2; } + .button.is-danger.is-inverted[disabled], + fieldset[disabled] .button.is-danger.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #da0b00; } + .button.is-danger.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-danger.is-outlined { + background-color: transparent; + border-color: #da0b00; + color: #da0b00; } + .button.is-danger.is-outlined:hover, .button.is-danger.is-outlined.is-hovered, .button.is-danger.is-outlined:focus, .button.is-danger.is-outlined.is-focused { + background-color: #da0b00; + border-color: #da0b00; + color: #fff; } + .button.is-danger.is-outlined.is-loading::after { + border-color: transparent transparent #da0b00 #da0b00 !important; } + .button.is-danger.is-outlined.is-loading:hover::after, .button.is-danger.is-outlined.is-loading.is-hovered::after, .button.is-danger.is-outlined.is-loading:focus::after, .button.is-danger.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-danger.is-outlined[disabled], + fieldset[disabled] .button.is-danger.is-outlined { + background-color: transparent; + border-color: #da0b00; + box-shadow: none; + color: #da0b00; } + .button.is-danger.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + .button.is-danger.is-inverted.is-outlined:hover, .button.is-danger.is-inverted.is-outlined.is-hovered, .button.is-danger.is-inverted.is-outlined:focus, .button.is-danger.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #da0b00; } + .button.is-danger.is-inverted.is-outlined.is-loading:hover::after, .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-danger.is-inverted.is-outlined.is-loading:focus::after, .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #da0b00 #da0b00 !important; } + .button.is-danger.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-danger.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + .button.is-small, #documenter .docs-sidebar form.docs-search > input.button { + border-radius: 2px; + font-size: 0.75rem; } + .button.is-normal { + font-size: 1rem; } + .button.is-medium { + font-size: 1.25rem; } + .button.is-large { + font-size: 1.5rem; } + .button[disabled], + fieldset[disabled] .button { + background-color: white; + border-color: #dbdbdb; + box-shadow: none; + opacity: 0.5; } + .button.is-fullwidth { + display: flex; + width: 100%; } + .button.is-loading { + color: transparent !important; + pointer-events: none; } + .button.is-loading::after { + position: absolute; + left: calc(50% - (1em / 2)); + top: calc(50% - (1em / 2)); + position: absolute !important; } + .button.is-static { + background-color: whitesmoke; + border-color: #dbdbdb; + color: #7a7a7a; + box-shadow: none; + pointer-events: none; } + .button.is-rounded, #documenter .docs-sidebar form.docs-search > input.button { + border-radius: 290486px; + padding-left: 1em; + padding-right: 1em; } + +.buttons { + align-items: center; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; } + .buttons .button { + margin-bottom: 0.5rem; } + .buttons .button:not(:last-child):not(.is-fullwidth) { + margin-right: 0.5rem; } + .buttons:last-child { + margin-bottom: -0.5rem; } + .buttons:not(:last-child) { + margin-bottom: 1rem; } + .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large) { + border-radius: 2px; + font-size: 0.75rem; } + .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large) { + font-size: 1.25rem; } + .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium) { + font-size: 1.5rem; } + .buttons.has-addons .button:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + .buttons.has-addons .button:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + margin-right: -1px; } + .buttons.has-addons .button:last-child { + margin-right: 0; } + .buttons.has-addons .button:hover, .buttons.has-addons .button.is-hovered { + z-index: 2; } + .buttons.has-addons .button:focus, .buttons.has-addons .button.is-focused, .buttons.has-addons .button:active, .buttons.has-addons .button.is-active, .buttons.has-addons .button.is-selected { + z-index: 3; } + .buttons.has-addons .button:focus:hover, .buttons.has-addons .button.is-focused:hover, .buttons.has-addons .button:active:hover, .buttons.has-addons .button.is-active:hover, .buttons.has-addons .button.is-selected:hover { + z-index: 4; } + .buttons.has-addons .button.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + .buttons.is-centered { + justify-content: center; } + .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth) { + margin-left: 0.25rem; + margin-right: 0.25rem; } + .buttons.is-right { + justify-content: flex-end; } + .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth) { + margin-left: 0.25rem; + margin-right: 0.25rem; } + +.container { + flex-grow: 1; + margin: 0 auto; + position: relative; + width: auto; } + @media screen and (min-width: 1056px) { + .container { + max-width: 992px; } + .container.is-fluid { + margin-left: 32px; + margin-right: 32px; + max-width: none; } } + @media screen and (max-width: 1215px) { + .container.is-widescreen { + max-width: 1152px; } } + @media screen and (max-width: 1407px) { + .container.is-fullhd { + max-width: 1344px; } } + @media screen and (min-width: 1216px) { + .container { + max-width: 1152px; } } + @media screen and (min-width: 1408px) { + .container { + max-width: 1344px; } } + +.content li + li { + margin-top: 0.25em; } + +.content p:not(:last-child), +.content dl:not(:last-child), +.content ol:not(:last-child), +.content ul:not(:last-child), +.content blockquote:not(:last-child), +.content pre:not(:last-child), +.content table:not(:last-child) { + margin-bottom: 1em; } + +.content h1, +.content h2, +.content h3, +.content h4, +.content h5, +.content h6 { + color: #222222; + font-weight: 600; + line-height: 1.125; } + +.content h1 { + font-size: 2em; + margin-bottom: 0.5em; } + .content h1:not(:first-child) { + margin-top: 1em; } + +.content h2 { + font-size: 1.75em; + margin-bottom: 0.5714em; } + .content h2:not(:first-child) { + margin-top: 1.1428em; } + +.content h3 { + font-size: 1.5em; + margin-bottom: 0.6666em; } + .content h3:not(:first-child) { + margin-top: 1.3333em; } + +.content h4 { + font-size: 1.25em; + margin-bottom: 0.8em; } + +.content h5 { + font-size: 1.125em; + margin-bottom: 0.8888em; } + +.content h6 { + font-size: 1em; + margin-bottom: 1em; } + +.content blockquote { + background-color: whitesmoke; + border-left: 5px solid #dbdbdb; + padding: 1.25em 1.5em; } + +.content ol { + list-style-position: outside; + margin-left: 2em; + margin-top: 1em; } + .content ol:not([type]) { + list-style-type: decimal; } + .content ol:not([type]).is-lower-alpha { + list-style-type: lower-alpha; } + .content ol:not([type]).is-lower-roman { + list-style-type: lower-roman; } + .content ol:not([type]).is-upper-alpha { + list-style-type: upper-alpha; } + .content ol:not([type]).is-upper-roman { + list-style-type: upper-roman; } + +.content ul { + list-style: disc outside; + margin-left: 2em; + margin-top: 1em; } + .content ul ul { + list-style-type: circle; + margin-top: 0.5em; } + .content ul ul ul { + list-style-type: square; } + +.content dd { + margin-left: 2em; } + +.content figure { + margin-left: 2em; + margin-right: 2em; + text-align: center; } + .content figure:not(:first-child) { + margin-top: 2em; } + .content figure:not(:last-child) { + margin-bottom: 2em; } + .content figure img { + display: inline-block; } + .content figure figcaption { + font-style: italic; } + +.content pre { + -webkit-overflow-scrolling: touch; + overflow-x: auto; + padding: 0.7rem 0.5rem; + white-space: pre; + word-wrap: normal; } + +.content sup, +.content sub { + font-size: 75%; } + +.content table { + width: 100%; } + .content table td, + .content table th { + border: 1px solid #dbdbdb; + border-width: 0 0 1px; + padding: 0.5em 0.75em; + vertical-align: top; } + .content table th { + color: #222222; } + .content table th:not([align]) { + text-align: left; } + .content table thead td, + .content table thead th { + border-width: 0 0 2px; + color: #222222; } + .content table tfoot td, + .content table tfoot th { + border-width: 2px 0 0; + color: #222222; } + .content table tbody tr:last-child td, + .content table tbody tr:last-child th { + border-bottom-width: 0; } + +.content .tabs li + li { + margin-top: 0; } + +.content.is-small, #documenter .docs-sidebar form.docs-search > input.content { + font-size: 0.75rem; } + +.content.is-medium { + font-size: 1.25rem; } + +.content.is-large { + font-size: 1.5rem; } + +.icon { + align-items: center; + display: inline-flex; + justify-content: center; + height: 1.5rem; + width: 1.5rem; } + .icon.is-small, #documenter .docs-sidebar form.docs-search > input.icon { + height: 1rem; + width: 1rem; } + .icon.is-medium { + height: 2rem; + width: 2rem; } + .icon.is-large { + height: 3rem; + width: 3rem; } + +.image, #documenter .docs-sidebar .docs-logo > img { + display: block; + position: relative; } + .image img, #documenter .docs-sidebar .docs-logo > img img { + display: block; + height: auto; + width: 100%; } + .image img.is-rounded, #documenter .docs-sidebar .docs-logo > img img.is-rounded { + border-radius: 290486px; } + .image.is-square img, #documenter .docs-sidebar .docs-logo > img.is-square img, + .image.is-square .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, .image.is-1by1 img, #documenter .docs-sidebar .docs-logo > img.is-1by1 img, + .image.is-1by1 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, .image.is-5by4 img, #documenter .docs-sidebar .docs-logo > img.is-5by4 img, + .image.is-5by4 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, .image.is-4by3 img, #documenter .docs-sidebar .docs-logo > img.is-4by3 img, + .image.is-4by3 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, .image.is-3by2 img, #documenter .docs-sidebar .docs-logo > img.is-3by2 img, + .image.is-3by2 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, .image.is-5by3 img, #documenter .docs-sidebar .docs-logo > img.is-5by3 img, + .image.is-5by3 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, .image.is-16by9 img, #documenter .docs-sidebar .docs-logo > img.is-16by9 img, + .image.is-16by9 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, .image.is-2by1 img, #documenter .docs-sidebar .docs-logo > img.is-2by1 img, + .image.is-2by1 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, .image.is-3by1 img, #documenter .docs-sidebar .docs-logo > img.is-3by1 img, + .image.is-3by1 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, .image.is-4by5 img, #documenter .docs-sidebar .docs-logo > img.is-4by5 img, + .image.is-4by5 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, .image.is-3by4 img, #documenter .docs-sidebar .docs-logo > img.is-3by4 img, + .image.is-3by4 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, .image.is-2by3 img, #documenter .docs-sidebar .docs-logo > img.is-2by3 img, + .image.is-2by3 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, .image.is-3by5 img, #documenter .docs-sidebar .docs-logo > img.is-3by5 img, + .image.is-3by5 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, .image.is-9by16 img, #documenter .docs-sidebar .docs-logo > img.is-9by16 img, + .image.is-9by16 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, .image.is-1by2 img, #documenter .docs-sidebar .docs-logo > img.is-1by2 img, + .image.is-1by2 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, .image.is-1by3 img, #documenter .docs-sidebar .docs-logo > img.is-1by3 img, + .image.is-1by3 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio { + height: 100%; + width: 100%; } + .image.is-square, #documenter .docs-sidebar .docs-logo > img.is-square, .image.is-1by1, #documenter .docs-sidebar .docs-logo > img.is-1by1 { + padding-top: 100%; } + .image.is-5by4, #documenter .docs-sidebar .docs-logo > img.is-5by4 { + padding-top: 80%; } + .image.is-4by3, #documenter .docs-sidebar .docs-logo > img.is-4by3 { + padding-top: 75%; } + .image.is-3by2, #documenter .docs-sidebar .docs-logo > img.is-3by2 { + padding-top: 66.6666%; } + .image.is-5by3, #documenter .docs-sidebar .docs-logo > img.is-5by3 { + padding-top: 60%; } + .image.is-16by9, #documenter .docs-sidebar .docs-logo > img.is-16by9 { + padding-top: 56.25%; } + .image.is-2by1, #documenter .docs-sidebar .docs-logo > img.is-2by1 { + padding-top: 50%; } + .image.is-3by1, #documenter .docs-sidebar .docs-logo > img.is-3by1 { + padding-top: 33.3333%; } + .image.is-4by5, #documenter .docs-sidebar .docs-logo > img.is-4by5 { + padding-top: 125%; } + .image.is-3by4, #documenter .docs-sidebar .docs-logo > img.is-3by4 { + padding-top: 133.3333%; } + .image.is-2by3, #documenter .docs-sidebar .docs-logo > img.is-2by3 { + padding-top: 150%; } + .image.is-3by5, #documenter .docs-sidebar .docs-logo > img.is-3by5 { + padding-top: 166.6666%; } + .image.is-9by16, #documenter .docs-sidebar .docs-logo > img.is-9by16 { + padding-top: 177.7777%; } + .image.is-1by2, #documenter .docs-sidebar .docs-logo > img.is-1by2 { + padding-top: 200%; } + .image.is-1by3, #documenter .docs-sidebar .docs-logo > img.is-1by3 { + padding-top: 300%; } + .image.is-16x16, #documenter .docs-sidebar .docs-logo > img.is-16x16 { + height: 16px; + width: 16px; } + .image.is-24x24, #documenter .docs-sidebar .docs-logo > img.is-24x24 { + height: 24px; + width: 24px; } + .image.is-32x32, #documenter .docs-sidebar .docs-logo > img.is-32x32 { + height: 32px; + width: 32px; } + .image.is-48x48, #documenter .docs-sidebar .docs-logo > img.is-48x48 { + height: 48px; + width: 48px; } + .image.is-64x64, #documenter .docs-sidebar .docs-logo > img.is-64x64 { + height: 64px; + width: 64px; } + .image.is-96x96, #documenter .docs-sidebar .docs-logo > img.is-96x96 { + height: 96px; + width: 96px; } + .image.is-128x128, #documenter .docs-sidebar .docs-logo > img.is-128x128 { + height: 128px; + width: 128px; } + +.notification { + background-color: whitesmoke; + border-radius: 4px; + padding: 1.25rem 2.5rem 1.25rem 1.5rem; + position: relative; } + .notification a:not(.button):not(.dropdown-item) { + color: currentColor; + text-decoration: underline; } + .notification strong { + color: currentColor; } + .notification code, + .notification pre { + background: white; } + .notification pre code { + background: transparent; } + .notification > .delete { + position: absolute; + right: 0.5rem; + top: 0.5rem; } + .notification .title, + .notification .subtitle, + .notification .content { + color: currentColor; } + .notification.is-white { + background-color: white; + color: #0a0a0a; } + .notification.is-black { + background-color: #0a0a0a; + color: white; } + .notification.is-light { + background-color: whitesmoke; + color: #363636; } + .notification.is-dark, .content kbd.notification { + background-color: #363636; + color: whitesmoke; } + .notification.is-primary, .docstring > section > a.notification.docs-sourcelink { + background-color: #4eb5de; + color: #fff; } + .notification.is-link { + background-color: #2e63b8; + color: #fff; } + .notification.is-info { + background-color: #209cee; + color: #fff; } + .notification.is-success { + background-color: #22c35b; + color: #fff; } + .notification.is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .notification.is-danger { + background-color: #da0b00; + color: #fff; } + +.progress { + -moz-appearance: none; + -webkit-appearance: none; + border: none; + border-radius: 290486px; + display: block; + height: 1rem; + overflow: hidden; + padding: 0; + width: 100%; } + .progress::-webkit-progress-bar { + background-color: #dbdbdb; } + .progress::-webkit-progress-value { + background-color: #222222; } + .progress::-moz-progress-bar { + background-color: #222222; } + .progress::-ms-fill { + background-color: #222222; + border: none; } + .progress.is-white::-webkit-progress-value { + background-color: white; } + .progress.is-white::-moz-progress-bar { + background-color: white; } + .progress.is-white::-ms-fill { + background-color: white; } + .progress.is-white:indeterminate { + background-image: linear-gradient(to right, white 30%, #dbdbdb 30%); } + .progress.is-black::-webkit-progress-value { + background-color: #0a0a0a; } + .progress.is-black::-moz-progress-bar { + background-color: #0a0a0a; } + .progress.is-black::-ms-fill { + background-color: #0a0a0a; } + .progress.is-black:indeterminate { + background-image: linear-gradient(to right, #0a0a0a 30%, #dbdbdb 30%); } + .progress.is-light::-webkit-progress-value { + background-color: whitesmoke; } + .progress.is-light::-moz-progress-bar { + background-color: whitesmoke; } + .progress.is-light::-ms-fill { + background-color: whitesmoke; } + .progress.is-light:indeterminate { + background-image: linear-gradient(to right, whitesmoke 30%, #dbdbdb 30%); } + .progress.is-dark::-webkit-progress-value, .content kbd.progress::-webkit-progress-value { + background-color: #363636; } + .progress.is-dark::-moz-progress-bar, .content kbd.progress::-moz-progress-bar { + background-color: #363636; } + .progress.is-dark::-ms-fill, .content kbd.progress::-ms-fill { + background-color: #363636; } + .progress.is-dark:indeterminate, .content kbd.progress:indeterminate { + background-image: linear-gradient(to right, #363636 30%, #dbdbdb 30%); } + .progress.is-primary::-webkit-progress-value, .docstring > section > a.progress.docs-sourcelink::-webkit-progress-value { + background-color: #4eb5de; } + .progress.is-primary::-moz-progress-bar, .docstring > section > a.progress.docs-sourcelink::-moz-progress-bar { + background-color: #4eb5de; } + .progress.is-primary::-ms-fill, .docstring > section > a.progress.docs-sourcelink::-ms-fill { + background-color: #4eb5de; } + .progress.is-primary:indeterminate, .docstring > section > a.progress.docs-sourcelink:indeterminate { + background-image: linear-gradient(to right, #4eb5de 30%, #dbdbdb 30%); } + .progress.is-link::-webkit-progress-value { + background-color: #2e63b8; } + .progress.is-link::-moz-progress-bar { + background-color: #2e63b8; } + .progress.is-link::-ms-fill { + background-color: #2e63b8; } + .progress.is-link:indeterminate { + background-image: linear-gradient(to right, #2e63b8 30%, #dbdbdb 30%); } + .progress.is-info::-webkit-progress-value { + background-color: #209cee; } + .progress.is-info::-moz-progress-bar { + background-color: #209cee; } + .progress.is-info::-ms-fill { + background-color: #209cee; } + .progress.is-info:indeterminate { + background-image: linear-gradient(to right, #209cee 30%, #dbdbdb 30%); } + .progress.is-success::-webkit-progress-value { + background-color: #22c35b; } + .progress.is-success::-moz-progress-bar { + background-color: #22c35b; } + .progress.is-success::-ms-fill { + background-color: #22c35b; } + .progress.is-success:indeterminate { + background-image: linear-gradient(to right, #22c35b 30%, #dbdbdb 30%); } + .progress.is-warning::-webkit-progress-value { + background-color: #ffdd57; } + .progress.is-warning::-moz-progress-bar { + background-color: #ffdd57; } + .progress.is-warning::-ms-fill { + background-color: #ffdd57; } + .progress.is-warning:indeterminate { + background-image: linear-gradient(to right, #ffdd57 30%, #dbdbdb 30%); } + .progress.is-danger::-webkit-progress-value { + background-color: #da0b00; } + .progress.is-danger::-moz-progress-bar { + background-color: #da0b00; } + .progress.is-danger::-ms-fill { + background-color: #da0b00; } + .progress.is-danger:indeterminate { + background-image: linear-gradient(to right, #da0b00 30%, #dbdbdb 30%); } + .progress:indeterminate { + animation-duration: 1.5s; + animation-iteration-count: infinite; + animation-name: moveIndeterminate; + animation-timing-function: linear; + background-color: #dbdbdb; + background-image: linear-gradient(to right, #222222 30%, #dbdbdb 30%); + background-position: top left; + background-repeat: no-repeat; + background-size: 150% 150%; } + .progress:indeterminate::-webkit-progress-bar { + background-color: transparent; } + .progress:indeterminate::-moz-progress-bar { + background-color: transparent; } + .progress.is-small, #documenter .docs-sidebar form.docs-search > input.progress { + height: 0.75rem; } + .progress.is-medium { + height: 1.25rem; } + .progress.is-large { + height: 1.5rem; } + +@keyframes moveIndeterminate { + from { + background-position: 200% 0; } + to { + background-position: -200% 0; } } + +.table { + background-color: white; + color: #363636; } + .table td, + .table th { + border: 1px solid #dbdbdb; + border-width: 0 0 1px; + padding: 0.5em 0.75em; + vertical-align: top; } + .table td.is-white, + .table th.is-white { + background-color: white; + border-color: white; + color: #0a0a0a; } + .table td.is-black, + .table th.is-black { + background-color: #0a0a0a; + border-color: #0a0a0a; + color: white; } + .table td.is-light, + .table th.is-light { + background-color: whitesmoke; + border-color: whitesmoke; + color: #363636; } + .table td.is-dark, + .table th.is-dark { + background-color: #363636; + border-color: #363636; + color: whitesmoke; } + .table td.is-primary, + .table th.is-primary { + background-color: #4eb5de; + border-color: #4eb5de; + color: #fff; } + .table td.is-link, + .table th.is-link { + background-color: #2e63b8; + border-color: #2e63b8; + color: #fff; } + .table td.is-info, + .table th.is-info { + background-color: #209cee; + border-color: #209cee; + color: #fff; } + .table td.is-success, + .table th.is-success { + background-color: #22c35b; + border-color: #22c35b; + color: #fff; } + .table td.is-warning, + .table th.is-warning { + background-color: #ffdd57; + border-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .table td.is-danger, + .table th.is-danger { + background-color: #da0b00; + border-color: #da0b00; + color: #fff; } + .table td.is-narrow, + .table th.is-narrow { + white-space: nowrap; + width: 1%; } + .table td.is-selected, + .table th.is-selected { + background-color: #4eb5de; + color: #fff; } + .table td.is-selected a, + .table td.is-selected strong, + .table th.is-selected a, + .table th.is-selected strong { + color: currentColor; } + .table th { + color: #222222; } + .table th:not([align]) { + text-align: left; } + .table tr.is-selected { + background-color: #4eb5de; + color: #fff; } + .table tr.is-selected a, + .table tr.is-selected strong { + color: currentColor; } + .table tr.is-selected td, + .table tr.is-selected th { + border-color: #fff; + color: currentColor; } + .table thead { + background-color: transparent; } + .table thead td, + .table thead th { + border-width: 0 0 2px; + color: #222222; } + .table tfoot { + background-color: transparent; } + .table tfoot td, + .table tfoot th { + border-width: 2px 0 0; + color: #222222; } + .table tbody { + background-color: transparent; } + .table tbody tr:last-child td, + .table tbody tr:last-child th { + border-bottom-width: 0; } + .table.is-bordered td, + .table.is-bordered th { + border-width: 1px; } + .table.is-bordered tr:last-child td, + .table.is-bordered tr:last-child th { + border-bottom-width: 1px; } + .table.is-fullwidth { + width: 100%; } + .table.is-hoverable tbody tr:not(.is-selected):hover { + background-color: #fafafa; } + .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover { + background-color: #fafafa; } + .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even) { + background-color: whitesmoke; } + .table.is-narrow td, + .table.is-narrow th { + padding: 0.25em 0.5em; } + .table.is-striped tbody tr:not(.is-selected):nth-child(even) { + background-color: #fafafa; } + +.table-container { + -webkit-overflow-scrolling: touch; + overflow: auto; + overflow-y: hidden; + max-width: 100%; } + +.tags { + align-items: center; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; } + .tags .tag, .tags .docstring > section > a.docs-sourcelink, .tags .content kbd, .content .tags kbd { + margin-bottom: 0.5rem; } + .tags .tag:not(:last-child), .tags .docstring > section > a.docs-sourcelink:not(:last-child), .tags .content kbd:not(:last-child), .content .tags kbd:not(:last-child) { + margin-right: 0.5rem; } + .tags:last-child { + margin-bottom: -0.5rem; } + .tags:not(:last-child) { + margin-bottom: 1rem; } + .tags.are-medium .tag:not(.is-normal):not(.is-large), .tags.are-medium .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-large), .tags.are-medium .content kbd:not(.is-normal):not(.is-large), .content .tags.are-medium kbd:not(.is-normal):not(.is-large) { + font-size: 1rem; } + .tags.are-large .tag:not(.is-normal):not(.is-medium), .tags.are-large .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-medium), .tags.are-large .content kbd:not(.is-normal):not(.is-medium), .content .tags.are-large kbd:not(.is-normal):not(.is-medium) { + font-size: 1.25rem; } + .tags.is-centered { + justify-content: center; } + .tags.is-centered .tag, .tags.is-centered .docstring > section > a.docs-sourcelink, .tags.is-centered .content kbd, .content .tags.is-centered kbd { + margin-right: 0.25rem; + margin-left: 0.25rem; } + .tags.is-right { + justify-content: flex-end; } + .tags.is-right .tag:not(:first-child), .tags.is-right .docstring > section > a.docs-sourcelink:not(:first-child), .tags.is-right .content kbd:not(:first-child), .content .tags.is-right kbd:not(:first-child) { + margin-left: 0.5rem; } + .tags.is-right .tag:not(:last-child), .tags.is-right .docstring > section > a.docs-sourcelink:not(:last-child), .tags.is-right .content kbd:not(:last-child), .content .tags.is-right kbd:not(:last-child) { + margin-right: 0; } + .tags.has-addons .tag, .tags.has-addons .docstring > section > a.docs-sourcelink, .tags.has-addons .content kbd, .content .tags.has-addons kbd { + margin-right: 0; } + .tags.has-addons .tag:not(:first-child), .tags.has-addons .docstring > section > a.docs-sourcelink:not(:first-child), .tags.has-addons .content kbd:not(:first-child), .content .tags.has-addons kbd:not(:first-child) { + margin-left: 0; + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + .tags.has-addons .tag:not(:last-child), .tags.has-addons .docstring > section > a.docs-sourcelink:not(:last-child), .tags.has-addons .content kbd:not(:last-child), .content .tags.has-addons kbd:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + +.tag:not(body), .docstring > section > a.docs-sourcelink:not(body), .content kbd:not(body) { + align-items: center; + background-color: whitesmoke; + border-radius: 4px; + color: #222222; + display: inline-flex; + font-size: 0.75rem; + height: 2em; + justify-content: center; + line-height: 1.5; + padding-left: 0.75em; + padding-right: 0.75em; + white-space: nowrap; } + .tag:not(body) .delete, .docstring > section > a.docs-sourcelink:not(body) .delete, .content kbd:not(body) .delete { + margin-left: 0.25rem; + margin-right: -0.375rem; } + .tag:not(body).is-white, .docstring > section > a.docs-sourcelink:not(body).is-white, .content kbd:not(body).is-white { + background-color: white; + color: #0a0a0a; } + .tag:not(body).is-black, .docstring > section > a.docs-sourcelink:not(body).is-black, .content kbd:not(body).is-black { + background-color: #0a0a0a; + color: white; } + .tag:not(body).is-light, .docstring > section > a.docs-sourcelink:not(body).is-light, .content kbd:not(body).is-light { + background-color: whitesmoke; + color: #363636; } + .tag:not(body).is-dark, .docstring > section > a.docs-sourcelink:not(body).is-dark, .content kbd:not(body) { + background-color: #363636; + color: whitesmoke; } + .tag:not(body).is-primary, .docstring > section > a.docs-sourcelink:not(body), .content kbd:not(body).is-primary { + background-color: #4eb5de; + color: #fff; } + .tag:not(body).is-link, .docstring > section > a.docs-sourcelink:not(body).is-link, .content kbd:not(body).is-link { + background-color: #2e63b8; + color: #fff; } + .tag:not(body).is-info, .docstring > section > a.docs-sourcelink:not(body).is-info, .content kbd:not(body).is-info { + background-color: #209cee; + color: #fff; } + .tag:not(body).is-success, .docstring > section > a.docs-sourcelink:not(body).is-success, .content kbd:not(body).is-success { + background-color: #22c35b; + color: #fff; } + .tag:not(body).is-warning, .docstring > section > a.docs-sourcelink:not(body).is-warning, .content kbd:not(body).is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .tag:not(body).is-danger, .docstring > section > a.docs-sourcelink:not(body).is-danger, .content kbd:not(body).is-danger { + background-color: #da0b00; + color: #fff; } + .tag:not(body).is-normal, .docstring > section > a.docs-sourcelink:not(body).is-normal, .content kbd:not(body).is-normal { + font-size: 0.75rem; } + .tag:not(body).is-medium, .docstring > section > a.docs-sourcelink:not(body).is-medium, .content kbd:not(body).is-medium { + font-size: 1rem; } + .tag:not(body).is-large, .docstring > section > a.docs-sourcelink:not(body).is-large, .content kbd:not(body).is-large { + font-size: 1.25rem; } + .tag:not(body) .icon:first-child:not(:last-child), .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:not(:last-child), .content kbd:not(body) .icon:first-child:not(:last-child) { + margin-left: -0.375em; + margin-right: 0.1875em; } + .tag:not(body) .icon:last-child:not(:first-child), .docstring > section > a.docs-sourcelink:not(body) .icon:last-child:not(:first-child), .content kbd:not(body) .icon:last-child:not(:first-child) { + margin-left: 0.1875em; + margin-right: -0.375em; } + .tag:not(body) .icon:first-child:last-child, .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:last-child, .content kbd:not(body) .icon:first-child:last-child { + margin-left: -0.375em; + margin-right: -0.375em; } + .tag:not(body).is-delete, .docstring > section > a.docs-sourcelink:not(body).is-delete, .content kbd:not(body).is-delete { + margin-left: 1px; + padding: 0; + position: relative; + width: 2em; } + .tag:not(body).is-delete::before, .docstring > section > a.docs-sourcelink:not(body).is-delete::before, .content kbd:not(body).is-delete::before, .tag:not(body).is-delete::after, .docstring > section > a.docs-sourcelink:not(body).is-delete::after, .content kbd:not(body).is-delete::after { + background-color: currentColor; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + .tag:not(body).is-delete::before, .docstring > section > a.docs-sourcelink:not(body).is-delete::before, .content kbd:not(body).is-delete::before { + height: 1px; + width: 50%; } + .tag:not(body).is-delete::after, .docstring > section > a.docs-sourcelink:not(body).is-delete::after, .content kbd:not(body).is-delete::after { + height: 50%; + width: 1px; } + .tag:not(body).is-delete:hover, .docstring > section > a.docs-sourcelink:not(body).is-delete:hover, .content kbd:not(body).is-delete:hover, .tag:not(body).is-delete:focus, .docstring > section > a.docs-sourcelink:not(body).is-delete:focus, .content kbd:not(body).is-delete:focus { + background-color: #e8e8e8; } + .tag:not(body).is-delete:active, .docstring > section > a.docs-sourcelink:not(body).is-delete:active, .content kbd:not(body).is-delete:active { + background-color: #dbdbdb; } + .tag:not(body).is-rounded, .docstring > section > a.docs-sourcelink:not(body).is-rounded, .content kbd:not(body).is-rounded, #documenter .docs-sidebar form.docs-search > input.tag:not(body) { + border-radius: 290486px; } + +a.tag:hover, .docstring > section > a.docs-sourcelink:hover { + text-decoration: underline; } + +.title, +.subtitle { + word-break: break-word; } + .title em, + .title span, + .subtitle em, + .subtitle span { + font-weight: inherit; } + .title sub, + .subtitle sub { + font-size: 0.75em; } + .title sup, + .subtitle sup { + font-size: 0.75em; } + .title .tag, .title .docstring > section > a.docs-sourcelink, .title .content kbd, .content .title kbd, + .subtitle .tag, + .subtitle .docstring > section > a.docs-sourcelink, + .subtitle .content kbd, + .content .subtitle kbd { + vertical-align: middle; } + +.title { + color: #363636; + font-size: 2rem; + font-weight: 600; + line-height: 1.125; } + .title strong { + color: inherit; + font-weight: inherit; } + .title + .highlight { + margin-top: -0.75rem; } + .title:not(.is-spaced) + .subtitle { + margin-top: -1.25rem; } + .title.is-1 { + font-size: 3rem; } + .title.is-2 { + font-size: 2.5rem; } + .title.is-3 { + font-size: 2rem; } + .title.is-4 { + font-size: 1.5rem; } + .title.is-5 { + font-size: 1.25rem; } + .title.is-6 { + font-size: 1rem; } + .title.is-7 { + font-size: 0.75rem; } + +.subtitle { + color: #4a4a4a; + font-size: 1.25rem; + font-weight: 400; + line-height: 1.25; } + .subtitle strong { + color: #363636; + font-weight: 600; } + .subtitle:not(.is-spaced) + .title { + margin-top: -1.25rem; } + .subtitle.is-1 { + font-size: 3rem; } + .subtitle.is-2 { + font-size: 2.5rem; } + .subtitle.is-3 { + font-size: 2rem; } + .subtitle.is-4 { + font-size: 1.5rem; } + .subtitle.is-5 { + font-size: 1.25rem; } + .subtitle.is-6 { + font-size: 1rem; } + .subtitle.is-7 { + font-size: 0.75rem; } + +.heading { + display: block; + font-size: 11px; + letter-spacing: 1px; + margin-bottom: 5px; + text-transform: uppercase; } + +.highlight { + font-weight: 400; + max-width: 100%; + overflow: hidden; + padding: 0; } + .highlight pre { + overflow: auto; + max-width: 100%; } + +.number { + align-items: center; + background-color: whitesmoke; + border-radius: 290486px; + display: inline-flex; + font-size: 1.25rem; + height: 2em; + justify-content: center; + margin-right: 1.5rem; + min-width: 2.5em; + padding: 0.25rem 0.5rem; + text-align: center; + vertical-align: top; } + +.input, #documenter .docs-sidebar form.docs-search > input, .textarea, .select select { + background-color: white; + border-color: #dbdbdb; + border-radius: 4px; + color: #363636; } + .input::-moz-placeholder, #documenter .docs-sidebar form.docs-search > input::-moz-placeholder, .textarea::-moz-placeholder, .select select::-moz-placeholder { + color: rgba(54, 54, 54, 0.3); } + .input::-webkit-input-placeholder, #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder, .textarea::-webkit-input-placeholder, .select select::-webkit-input-placeholder { + color: rgba(54, 54, 54, 0.3); } + .input:-moz-placeholder, #documenter .docs-sidebar form.docs-search > input:-moz-placeholder, .textarea:-moz-placeholder, .select select:-moz-placeholder { + color: rgba(54, 54, 54, 0.3); } + .input:-ms-input-placeholder, #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder, .textarea:-ms-input-placeholder, .select select:-ms-input-placeholder { + color: rgba(54, 54, 54, 0.3); } + .input:hover, #documenter .docs-sidebar form.docs-search > input:hover, .textarea:hover, .select select:hover, .is-hovered.input, #documenter .docs-sidebar form.docs-search > input.is-hovered, .is-hovered.textarea, .select select.is-hovered { + border-color: #b5b5b5; } + .input:focus, #documenter .docs-sidebar form.docs-search > input:focus, .textarea:focus, .select select:focus, .is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-focused.textarea, .select select.is-focused, .input:active, #documenter .docs-sidebar form.docs-search > input:active, .textarea:active, .select select:active, .is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active, .is-active.textarea, .select select.is-active { + border-color: #2e63b8; + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .input[disabled], #documenter .docs-sidebar form.docs-search > input[disabled], .textarea[disabled], .select select[disabled], + fieldset[disabled] .input, + fieldset[disabled] #documenter .docs-sidebar form.docs-search > input, + #documenter .docs-sidebar fieldset[disabled] form.docs-search > input, + fieldset[disabled] .textarea, + fieldset[disabled] .select select, + .select fieldset[disabled] select { + background-color: whitesmoke; + border-color: whitesmoke; + box-shadow: none; + color: #7a7a7a; } + .input[disabled]::-moz-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]::-moz-placeholder, .textarea[disabled]::-moz-placeholder, .select select[disabled]::-moz-placeholder, + fieldset[disabled] .input::-moz-placeholder, + fieldset[disabled] #documenter .docs-sidebar form.docs-search > input::-moz-placeholder, + #documenter .docs-sidebar fieldset[disabled] form.docs-search > input::-moz-placeholder, + fieldset[disabled] .textarea::-moz-placeholder, + fieldset[disabled] .select select::-moz-placeholder, + .select fieldset[disabled] select::-moz-placeholder { + color: rgba(122, 122, 122, 0.3); } + .input[disabled]::-webkit-input-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]::-webkit-input-placeholder, .textarea[disabled]::-webkit-input-placeholder, .select select[disabled]::-webkit-input-placeholder, + fieldset[disabled] .input::-webkit-input-placeholder, + fieldset[disabled] #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder, + #documenter .docs-sidebar fieldset[disabled] form.docs-search > input::-webkit-input-placeholder, + fieldset[disabled] .textarea::-webkit-input-placeholder, + fieldset[disabled] .select select::-webkit-input-placeholder, + .select fieldset[disabled] select::-webkit-input-placeholder { + color: rgba(122, 122, 122, 0.3); } + .input[disabled]:-moz-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]:-moz-placeholder, .textarea[disabled]:-moz-placeholder, .select select[disabled]:-moz-placeholder, + fieldset[disabled] .input:-moz-placeholder, + fieldset[disabled] #documenter .docs-sidebar form.docs-search > input:-moz-placeholder, + #documenter .docs-sidebar fieldset[disabled] form.docs-search > input:-moz-placeholder, + fieldset[disabled] .textarea:-moz-placeholder, + fieldset[disabled] .select select:-moz-placeholder, + .select fieldset[disabled] select:-moz-placeholder { + color: rgba(122, 122, 122, 0.3); } + .input[disabled]:-ms-input-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]:-ms-input-placeholder, .textarea[disabled]:-ms-input-placeholder, .select select[disabled]:-ms-input-placeholder, + fieldset[disabled] .input:-ms-input-placeholder, + fieldset[disabled] #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder, + #documenter .docs-sidebar fieldset[disabled] form.docs-search > input:-ms-input-placeholder, + fieldset[disabled] .textarea:-ms-input-placeholder, + fieldset[disabled] .select select:-ms-input-placeholder, + .select fieldset[disabled] select:-ms-input-placeholder { + color: rgba(122, 122, 122, 0.3); } + +.input, #documenter .docs-sidebar form.docs-search > input, .textarea { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); + max-width: 100%; + width: 100%; } + .input[readonly], #documenter .docs-sidebar form.docs-search > input[readonly], .textarea[readonly] { + box-shadow: none; } + .is-white.input, #documenter .docs-sidebar form.docs-search > input.is-white, .is-white.textarea { + border-color: white; } + .is-white.input:focus, #documenter .docs-sidebar form.docs-search > input.is-white:focus, .is-white.textarea:focus, .is-white.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-white.is-focused, .is-white.is-focused.textarea, .is-white.input:active, #documenter .docs-sidebar form.docs-search > input.is-white:active, .is-white.textarea:active, .is-white.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-white.is-active, .is-white.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + .is-black.input, #documenter .docs-sidebar form.docs-search > input.is-black, .is-black.textarea { + border-color: #0a0a0a; } + .is-black.input:focus, #documenter .docs-sidebar form.docs-search > input.is-black:focus, .is-black.textarea:focus, .is-black.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-black.is-focused, .is-black.is-focused.textarea, .is-black.input:active, #documenter .docs-sidebar form.docs-search > input.is-black:active, .is-black.textarea:active, .is-black.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-black.is-active, .is-black.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + .is-light.input, #documenter .docs-sidebar form.docs-search > input.is-light, .is-light.textarea { + border-color: whitesmoke; } + .is-light.input:focus, #documenter .docs-sidebar form.docs-search > input.is-light:focus, .is-light.textarea:focus, .is-light.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-light.is-focused, .is-light.is-focused.textarea, .is-light.input:active, #documenter .docs-sidebar form.docs-search > input.is-light:active, .is-light.textarea:active, .is-light.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-light.is-active, .is-light.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); } + .is-dark.input, .content kbd.input, #documenter .docs-sidebar form.docs-search > input.is-dark, .is-dark.textarea, .content kbd.textarea { + border-color: #363636; } + .is-dark.input:focus, .content kbd.input:focus, #documenter .docs-sidebar form.docs-search > input.is-dark:focus, .is-dark.textarea:focus, .content kbd.textarea:focus, .is-dark.is-focused.input, .content kbd.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-dark.is-focused, .is-dark.is-focused.textarea, .content kbd.is-focused.textarea, .is-dark.input:active, .content kbd.input:active, #documenter .docs-sidebar form.docs-search > input.is-dark:active, .is-dark.textarea:active, .content kbd.textarea:active, .is-dark.is-active.input, .content kbd.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-dark.is-active, .is-dark.is-active.textarea, .content kbd.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); } + .is-primary.input, .docstring > section > a.input.docs-sourcelink, #documenter .docs-sidebar form.docs-search > input.is-primary, .is-primary.textarea, .docstring > section > a.textarea.docs-sourcelink { + border-color: #4eb5de; } + .is-primary.input:focus, .docstring > section > a.input.docs-sourcelink:focus, #documenter .docs-sidebar form.docs-search > input.is-primary:focus, .is-primary.textarea:focus, .docstring > section > a.textarea.docs-sourcelink:focus, .is-primary.is-focused.input, .docstring > section > a.is-focused.input.docs-sourcelink, #documenter .docs-sidebar form.docs-search > input.is-primary.is-focused, .is-primary.is-focused.textarea, .docstring > section > a.is-focused.textarea.docs-sourcelink, .is-primary.input:active, .docstring > section > a.input.docs-sourcelink:active, #documenter .docs-sidebar form.docs-search > input.is-primary:active, .is-primary.textarea:active, .docstring > section > a.textarea.docs-sourcelink:active, .is-primary.is-active.input, .docstring > section > a.is-active.input.docs-sourcelink, #documenter .docs-sidebar form.docs-search > input.is-primary.is-active, .is-primary.is-active.textarea, .docstring > section > a.is-active.textarea.docs-sourcelink { + box-shadow: 0 0 0 0.125em rgba(78, 181, 222, 0.25); } + .is-link.input, #documenter .docs-sidebar form.docs-search > input.is-link, .is-link.textarea { + border-color: #2e63b8; } + .is-link.input:focus, #documenter .docs-sidebar form.docs-search > input.is-link:focus, .is-link.textarea:focus, .is-link.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-link.is-focused, .is-link.is-focused.textarea, .is-link.input:active, #documenter .docs-sidebar form.docs-search > input.is-link:active, .is-link.textarea:active, .is-link.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-link.is-active, .is-link.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .is-info.input, #documenter .docs-sidebar form.docs-search > input.is-info, .is-info.textarea { + border-color: #209cee; } + .is-info.input:focus, #documenter .docs-sidebar form.docs-search > input.is-info:focus, .is-info.textarea:focus, .is-info.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-info.is-focused, .is-info.is-focused.textarea, .is-info.input:active, #documenter .docs-sidebar form.docs-search > input.is-info:active, .is-info.textarea:active, .is-info.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-info.is-active, .is-info.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .is-success.input, #documenter .docs-sidebar form.docs-search > input.is-success, .is-success.textarea { + border-color: #22c35b; } + .is-success.input:focus, #documenter .docs-sidebar form.docs-search > input.is-success:focus, .is-success.textarea:focus, .is-success.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-success.is-focused, .is-success.is-focused.textarea, .is-success.input:active, #documenter .docs-sidebar form.docs-search > input.is-success:active, .is-success.textarea:active, .is-success.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-success.is-active, .is-success.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(34, 195, 91, 0.25); } + .is-warning.input, #documenter .docs-sidebar form.docs-search > input.is-warning, .is-warning.textarea { + border-color: #ffdd57; } + .is-warning.input:focus, #documenter .docs-sidebar form.docs-search > input.is-warning:focus, .is-warning.textarea:focus, .is-warning.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-warning.is-focused, .is-warning.is-focused.textarea, .is-warning.input:active, #documenter .docs-sidebar form.docs-search > input.is-warning:active, .is-warning.textarea:active, .is-warning.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-warning.is-active, .is-warning.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } + .is-danger.input, #documenter .docs-sidebar form.docs-search > input.is-danger, .is-danger.textarea { + border-color: #da0b00; } + .is-danger.input:focus, #documenter .docs-sidebar form.docs-search > input.is-danger:focus, .is-danger.textarea:focus, .is-danger.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-danger.is-focused, .is-danger.is-focused.textarea, .is-danger.input:active, #documenter .docs-sidebar form.docs-search > input.is-danger:active, .is-danger.textarea:active, .is-danger.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-danger.is-active, .is-danger.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(218, 11, 0, 0.25); } + .is-small.input, #documenter .docs-sidebar form.docs-search > input, .is-small.textarea { + border-radius: 2px; + font-size: 0.75rem; } + .is-medium.input, #documenter .docs-sidebar form.docs-search > input.is-medium, .is-medium.textarea { + font-size: 1.25rem; } + .is-large.input, #documenter .docs-sidebar form.docs-search > input.is-large, .is-large.textarea { + font-size: 1.5rem; } + .is-fullwidth.input, #documenter .docs-sidebar form.docs-search > input.is-fullwidth, .is-fullwidth.textarea { + display: block; + width: 100%; } + .is-inline.input, #documenter .docs-sidebar form.docs-search > input.is-inline, .is-inline.textarea { + display: inline; + width: auto; } + +.input.is-rounded, #documenter .docs-sidebar form.docs-search > input { + border-radius: 290486px; + padding-left: 1em; + padding-right: 1em; } + +.input.is-static, #documenter .docs-sidebar form.docs-search > input.is-static { + background-color: transparent; + border-color: transparent; + box-shadow: none; + padding-left: 0; + padding-right: 0; } + +.textarea { + display: block; + max-width: 100%; + min-width: 100%; + padding: 0.625em; + resize: vertical; } + .textarea:not([rows]) { + max-height: 600px; + min-height: 120px; } + .textarea[rows] { + height: initial; } + .textarea.has-fixed-size { + resize: none; } + +.checkbox, .radio { + cursor: pointer; + display: inline-block; + line-height: 1.25; + position: relative; } + .checkbox input, .radio input { + cursor: pointer; } + .checkbox:hover, .radio:hover { + color: #363636; } + .checkbox[disabled], .radio[disabled], + fieldset[disabled] .checkbox, + fieldset[disabled] .radio { + color: #7a7a7a; + cursor: not-allowed; } + +.radio + .radio { + margin-left: 0.5em; } + +.select { + display: inline-block; + max-width: 100%; + position: relative; + vertical-align: top; } + .select:not(.is-multiple) { + height: 2.25em; } + .select:not(.is-multiple):not(.is-loading)::after { + border-color: #2e63b8; + right: 1.125em; + z-index: 4; } + .select.is-rounded select, #documenter .docs-sidebar form.docs-search > input.select select { + border-radius: 290486px; + padding-left: 1em; } + .select select { + cursor: pointer; + display: block; + font-size: 1em; + max-width: 100%; + outline: none; } + .select select::-ms-expand { + display: none; } + .select select[disabled]:hover, + fieldset[disabled] .select select:hover { + border-color: whitesmoke; } + .select select:not([multiple]) { + padding-right: 2.5em; } + .select select[multiple] { + height: auto; + padding: 0; } + .select select[multiple] option { + padding: 0.5em 1em; } + .select:not(.is-multiple):not(.is-loading):hover::after { + border-color: #363636; } + .select.is-white:not(:hover)::after { + border-color: white; } + .select.is-white select { + border-color: white; } + .select.is-white select:hover, .select.is-white select.is-hovered { + border-color: #f2f2f2; } + .select.is-white select:focus, .select.is-white select.is-focused, .select.is-white select:active, .select.is-white select.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + .select.is-black:not(:hover)::after { + border-color: #0a0a0a; } + .select.is-black select { + border-color: #0a0a0a; } + .select.is-black select:hover, .select.is-black select.is-hovered { + border-color: black; } + .select.is-black select:focus, .select.is-black select.is-focused, .select.is-black select:active, .select.is-black select.is-active { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + .select.is-light:not(:hover)::after { + border-color: whitesmoke; } + .select.is-light select { + border-color: whitesmoke; } + .select.is-light select:hover, .select.is-light select.is-hovered { + border-color: #e8e8e8; } + .select.is-light select:focus, .select.is-light select.is-focused, .select.is-light select:active, .select.is-light select.is-active { + box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); } + .select.is-dark:not(:hover)::after, .content kbd.select:not(:hover)::after { + border-color: #363636; } + .select.is-dark select, .content kbd.select select { + border-color: #363636; } + .select.is-dark select:hover, .content kbd.select select:hover, .select.is-dark select.is-hovered, .content kbd.select select.is-hovered { + border-color: #292929; } + .select.is-dark select:focus, .content kbd.select select:focus, .select.is-dark select.is-focused, .content kbd.select select.is-focused, .select.is-dark select:active, .content kbd.select select:active, .select.is-dark select.is-active, .content kbd.select select.is-active { + box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); } + .select.is-primary:not(:hover)::after, .docstring > section > a.select.docs-sourcelink:not(:hover)::after { + border-color: #4eb5de; } + .select.is-primary select, .docstring > section > a.select.docs-sourcelink select { + border-color: #4eb5de; } + .select.is-primary select:hover, .docstring > section > a.select.docs-sourcelink select:hover, .select.is-primary select.is-hovered, .docstring > section > a.select.docs-sourcelink select.is-hovered { + border-color: #39acda; } + .select.is-primary select:focus, .docstring > section > a.select.docs-sourcelink select:focus, .select.is-primary select.is-focused, .docstring > section > a.select.docs-sourcelink select.is-focused, .select.is-primary select:active, .docstring > section > a.select.docs-sourcelink select:active, .select.is-primary select.is-active, .docstring > section > a.select.docs-sourcelink select.is-active { + box-shadow: 0 0 0 0.125em rgba(78, 181, 222, 0.25); } + .select.is-link:not(:hover)::after { + border-color: #2e63b8; } + .select.is-link select { + border-color: #2e63b8; } + .select.is-link select:hover, .select.is-link select.is-hovered { + border-color: #2958a4; } + .select.is-link select:focus, .select.is-link select.is-focused, .select.is-link select:active, .select.is-link select.is-active { + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .select.is-info:not(:hover)::after { + border-color: #209cee; } + .select.is-info select { + border-color: #209cee; } + .select.is-info select:hover, .select.is-info select.is-hovered { + border-color: #1190e3; } + .select.is-info select:focus, .select.is-info select.is-focused, .select.is-info select:active, .select.is-info select.is-active { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .select.is-success:not(:hover)::after { + border-color: #22c35b; } + .select.is-success select { + border-color: #22c35b; } + .select.is-success select:hover, .select.is-success select.is-hovered { + border-color: #1ead51; } + .select.is-success select:focus, .select.is-success select.is-focused, .select.is-success select:active, .select.is-success select.is-active { + box-shadow: 0 0 0 0.125em rgba(34, 195, 91, 0.25); } + .select.is-warning:not(:hover)::after { + border-color: #ffdd57; } + .select.is-warning select { + border-color: #ffdd57; } + .select.is-warning select:hover, .select.is-warning select.is-hovered { + border-color: #ffd83e; } + .select.is-warning select:focus, .select.is-warning select.is-focused, .select.is-warning select:active, .select.is-warning select.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } + .select.is-danger:not(:hover)::after { + border-color: #da0b00; } + .select.is-danger select { + border-color: #da0b00; } + .select.is-danger select:hover, .select.is-danger select.is-hovered { + border-color: #c10a00; } + .select.is-danger select:focus, .select.is-danger select.is-focused, .select.is-danger select:active, .select.is-danger select.is-active { + box-shadow: 0 0 0 0.125em rgba(218, 11, 0, 0.25); } + .select.is-small, #documenter .docs-sidebar form.docs-search > input.select { + border-radius: 2px; + font-size: 0.75rem; } + .select.is-medium { + font-size: 1.25rem; } + .select.is-large { + font-size: 1.5rem; } + .select.is-disabled::after { + border-color: #7a7a7a; } + .select.is-fullwidth { + width: 100%; } + .select.is-fullwidth select { + width: 100%; } + .select.is-loading::after { + margin-top: 0; + position: absolute; + right: 0.625em; + top: 0.625em; + transform: none; } + .select.is-loading.is-small:after, #documenter .docs-sidebar form.docs-search > input.select.is-loading:after { + font-size: 0.75rem; } + .select.is-loading.is-medium:after { + font-size: 1.25rem; } + .select.is-loading.is-large:after { + font-size: 1.5rem; } + +.file { + align-items: stretch; + display: flex; + justify-content: flex-start; + position: relative; } + .file.is-white .file-cta { + background-color: white; + border-color: transparent; + color: #0a0a0a; } + .file.is-white:hover .file-cta, .file.is-white.is-hovered .file-cta { + background-color: #f9f9f9; + border-color: transparent; + color: #0a0a0a; } + .file.is-white:focus .file-cta, .file.is-white.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(255, 255, 255, 0.25); + color: #0a0a0a; } + .file.is-white:active .file-cta, .file.is-white.is-active .file-cta { + background-color: #f2f2f2; + border-color: transparent; + color: #0a0a0a; } + .file.is-black .file-cta { + background-color: #0a0a0a; + border-color: transparent; + color: white; } + .file.is-black:hover .file-cta, .file.is-black.is-hovered .file-cta { + background-color: #040404; + border-color: transparent; + color: white; } + .file.is-black:focus .file-cta, .file.is-black.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(10, 10, 10, 0.25); + color: white; } + .file.is-black:active .file-cta, .file.is-black.is-active .file-cta { + background-color: black; + border-color: transparent; + color: white; } + .file.is-light .file-cta { + background-color: whitesmoke; + border-color: transparent; + color: #363636; } + .file.is-light:hover .file-cta, .file.is-light.is-hovered .file-cta { + background-color: #eeeeee; + border-color: transparent; + color: #363636; } + .file.is-light:focus .file-cta, .file.is-light.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(245, 245, 245, 0.25); + color: #363636; } + .file.is-light:active .file-cta, .file.is-light.is-active .file-cta { + background-color: #e8e8e8; + border-color: transparent; + color: #363636; } + .file.is-dark .file-cta, .content kbd.file .file-cta { + background-color: #363636; + border-color: transparent; + color: whitesmoke; } + .file.is-dark:hover .file-cta, .content kbd.file:hover .file-cta, .file.is-dark.is-hovered .file-cta, .content kbd.file.is-hovered .file-cta { + background-color: #2f2f2f; + border-color: transparent; + color: whitesmoke; } + .file.is-dark:focus .file-cta, .content kbd.file:focus .file-cta, .file.is-dark.is-focused .file-cta, .content kbd.file.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(54, 54, 54, 0.25); + color: whitesmoke; } + .file.is-dark:active .file-cta, .content kbd.file:active .file-cta, .file.is-dark.is-active .file-cta, .content kbd.file.is-active .file-cta { + background-color: #292929; + border-color: transparent; + color: whitesmoke; } + .file.is-primary .file-cta, .docstring > section > a.file.docs-sourcelink .file-cta { + background-color: #4eb5de; + border-color: transparent; + color: #fff; } + .file.is-primary:hover .file-cta, .docstring > section > a.file.docs-sourcelink:hover .file-cta, .file.is-primary.is-hovered .file-cta, .docstring > section > a.file.is-hovered.docs-sourcelink .file-cta { + background-color: #43b1dc; + border-color: transparent; + color: #fff; } + .file.is-primary:focus .file-cta, .docstring > section > a.file.docs-sourcelink:focus .file-cta, .file.is-primary.is-focused .file-cta, .docstring > section > a.file.is-focused.docs-sourcelink .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(78, 181, 222, 0.25); + color: #fff; } + .file.is-primary:active .file-cta, .docstring > section > a.file.docs-sourcelink:active .file-cta, .file.is-primary.is-active .file-cta, .docstring > section > a.file.is-active.docs-sourcelink .file-cta { + background-color: #39acda; + border-color: transparent; + color: #fff; } + .file.is-link .file-cta { + background-color: #2e63b8; + border-color: transparent; + color: #fff; } + .file.is-link:hover .file-cta, .file.is-link.is-hovered .file-cta { + background-color: #2b5eae; + border-color: transparent; + color: #fff; } + .file.is-link:focus .file-cta, .file.is-link.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(46, 99, 184, 0.25); + color: #fff; } + .file.is-link:active .file-cta, .file.is-link.is-active .file-cta { + background-color: #2958a4; + border-color: transparent; + color: #fff; } + .file.is-info .file-cta { + background-color: #209cee; + border-color: transparent; + color: #fff; } + .file.is-info:hover .file-cta, .file.is-info.is-hovered .file-cta { + background-color: #1497ed; + border-color: transparent; + color: #fff; } + .file.is-info:focus .file-cta, .file.is-info.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(32, 156, 238, 0.25); + color: #fff; } + .file.is-info:active .file-cta, .file.is-info.is-active .file-cta { + background-color: #1190e3; + border-color: transparent; + color: #fff; } + .file.is-success .file-cta { + background-color: #22c35b; + border-color: transparent; + color: #fff; } + .file.is-success:hover .file-cta, .file.is-success.is-hovered .file-cta { + background-color: #20b856; + border-color: transparent; + color: #fff; } + .file.is-success:focus .file-cta, .file.is-success.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(34, 195, 91, 0.25); + color: #fff; } + .file.is-success:active .file-cta, .file.is-success.is-active .file-cta { + background-color: #1ead51; + border-color: transparent; + color: #fff; } + .file.is-warning .file-cta { + background-color: #ffdd57; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .file.is-warning:hover .file-cta, .file.is-warning.is-hovered .file-cta { + background-color: #ffda4a; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .file.is-warning:focus .file-cta, .file.is-warning.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(255, 221, 87, 0.25); + color: rgba(0, 0, 0, 0.7); } + .file.is-warning:active .file-cta, .file.is-warning.is-active .file-cta { + background-color: #ffd83e; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .file.is-danger .file-cta { + background-color: #da0b00; + border-color: transparent; + color: #fff; } + .file.is-danger:hover .file-cta, .file.is-danger.is-hovered .file-cta { + background-color: #cd0a00; + border-color: transparent; + color: #fff; } + .file.is-danger:focus .file-cta, .file.is-danger.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(218, 11, 0, 0.25); + color: #fff; } + .file.is-danger:active .file-cta, .file.is-danger.is-active .file-cta { + background-color: #c10a00; + border-color: transparent; + color: #fff; } + .file.is-small, #documenter .docs-sidebar form.docs-search > input.file { + font-size: 0.75rem; } + .file.is-medium { + font-size: 1.25rem; } + .file.is-medium .file-icon .fa { + font-size: 21px; } + .file.is-large { + font-size: 1.5rem; } + .file.is-large .file-icon .fa { + font-size: 28px; } + .file.has-name .file-cta { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + .file.has-name .file-name { + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + .file.has-name.is-empty .file-cta { + border-radius: 4px; } + .file.has-name.is-empty .file-name { + display: none; } + .file.is-boxed .file-label { + flex-direction: column; } + .file.is-boxed .file-cta { + flex-direction: column; + height: auto; + padding: 1em 3em; } + .file.is-boxed .file-name { + border-width: 0 1px 1px; } + .file.is-boxed .file-icon { + height: 1.5em; + width: 1.5em; } + .file.is-boxed .file-icon .fa { + font-size: 21px; } + .file.is-boxed.is-small .file-icon .fa, #documenter .docs-sidebar form.docs-search > input.file.is-boxed .file-icon .fa { + font-size: 14px; } + .file.is-boxed.is-medium .file-icon .fa { + font-size: 28px; } + .file.is-boxed.is-large .file-icon .fa { + font-size: 35px; } + .file.is-boxed.has-name .file-cta { + border-radius: 4px 4px 0 0; } + .file.is-boxed.has-name .file-name { + border-radius: 0 0 4px 4px; + border-width: 0 1px 1px; } + .file.is-centered { + justify-content: center; } + .file.is-fullwidth .file-label { + width: 100%; } + .file.is-fullwidth .file-name { + flex-grow: 1; + max-width: none; } + .file.is-right { + justify-content: flex-end; } + .file.is-right .file-cta { + border-radius: 0 4px 4px 0; } + .file.is-right .file-name { + border-radius: 4px 0 0 4px; + border-width: 1px 0 1px 1px; + order: -1; } + +.file-label { + align-items: stretch; + display: flex; + cursor: pointer; + justify-content: flex-start; + overflow: hidden; + position: relative; } + .file-label:hover .file-cta { + background-color: #eeeeee; + color: #363636; } + .file-label:hover .file-name { + border-color: #d5d5d5; } + .file-label:active .file-cta { + background-color: #e8e8e8; + color: #363636; } + .file-label:active .file-name { + border-color: #cfcfcf; } + +.file-input { + height: 100%; + left: 0; + opacity: 0; + outline: none; + position: absolute; + top: 0; + width: 100%; } + +.file-cta, +.file-name { + border-color: #dbdbdb; + border-radius: 4px; + font-size: 1em; + padding-left: 1em; + padding-right: 1em; + white-space: nowrap; } + +.file-cta { + background-color: whitesmoke; + color: #4a4a4a; } + +.file-name { + border-color: #dbdbdb; + border-style: solid; + border-width: 1px 1px 1px 0; + display: block; + max-width: 16em; + overflow: hidden; + text-align: left; + text-overflow: ellipsis; } + +.file-icon { + align-items: center; + display: flex; + height: 1em; + justify-content: center; + margin-right: 0.5em; + width: 1em; } + .file-icon .fa { + font-size: 14px; } + +.label { + color: #363636; + display: block; + font-size: 1rem; + font-weight: 700; } + .label:not(:last-child) { + margin-bottom: 0.5em; } + .label.is-small, #documenter .docs-sidebar form.docs-search > input.label { + font-size: 0.75rem; } + .label.is-medium { + font-size: 1.25rem; } + .label.is-large { + font-size: 1.5rem; } + +.help { + display: block; + font-size: 0.75rem; + margin-top: 0.25rem; } + .help.is-white { + color: white; } + .help.is-black { + color: #0a0a0a; } + .help.is-light { + color: whitesmoke; } + .help.is-dark, .content kbd.help { + color: #363636; } + .help.is-primary, .docstring > section > a.help.docs-sourcelink { + color: #4eb5de; } + .help.is-link { + color: #2e63b8; } + .help.is-info { + color: #209cee; } + .help.is-success { + color: #22c35b; } + .help.is-warning { + color: #ffdd57; } + .help.is-danger { + color: #da0b00; } + +.field:not(:last-child) { + margin-bottom: 0.75rem; } + +.field.has-addons { + display: flex; + justify-content: flex-start; } + .field.has-addons .control:not(:last-child) { + margin-right: -1px; } + .field.has-addons .control:not(:first-child):not(:last-child) .button, + .field.has-addons .control:not(:first-child):not(:last-child) .input, + .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search > input, + #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search > input, + .field.has-addons .control:not(:first-child):not(:last-child) .select select { + border-radius: 0; } + .field.has-addons .control:first-child:not(:only-child) .button, + .field.has-addons .control:first-child:not(:only-child) .input, + .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search > input, + #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search > input, + .field.has-addons .control:first-child:not(:only-child) .select select { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + .field.has-addons .control:last-child:not(:only-child) .button, + .field.has-addons .control:last-child:not(:only-child) .input, + .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search > input, + #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search > input, + .field.has-addons .control:last-child:not(:only-child) .select select { + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + .field.has-addons .control .button:not([disabled]):hover, .field.has-addons .control .button:not([disabled]).is-hovered, + .field.has-addons .control .input:not([disabled]):hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):hover, + .field.has-addons .control .input:not([disabled]).is-hovered, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-hovered, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-hovered, + .field.has-addons .control .select select:not([disabled]):hover, + .field.has-addons .control .select select:not([disabled]).is-hovered { + z-index: 2; } + .field.has-addons .control .button:not([disabled]):focus, .field.has-addons .control .button:not([disabled]).is-focused, .field.has-addons .control .button:not([disabled]):active, .field.has-addons .control .button:not([disabled]).is-active, + .field.has-addons .control .input:not([disabled]):focus, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus, + .field.has-addons .control .input:not([disabled]).is-focused, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-focused, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-focused, + .field.has-addons .control .input:not([disabled]):active, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active, + .field.has-addons .control .input:not([disabled]).is-active, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-active, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-active, + .field.has-addons .control .select select:not([disabled]):focus, + .field.has-addons .control .select select:not([disabled]).is-focused, + .field.has-addons .control .select select:not([disabled]):active, + .field.has-addons .control .select select:not([disabled]).is-active { + z-index: 3; } + .field.has-addons .control .button:not([disabled]):focus:hover, .field.has-addons .control .button:not([disabled]).is-focused:hover, .field.has-addons .control .button:not([disabled]):active:hover, .field.has-addons .control .button:not([disabled]).is-active:hover, + .field.has-addons .control .input:not([disabled]):focus:hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus:hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus:hover, + .field.has-addons .control .input:not([disabled]).is-focused:hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-focused:hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-focused:hover, + .field.has-addons .control .input:not([disabled]):active:hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active:hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active:hover, + .field.has-addons .control .input:not([disabled]).is-active:hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-active:hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-active:hover, + .field.has-addons .control .select select:not([disabled]):focus:hover, + .field.has-addons .control .select select:not([disabled]).is-focused:hover, + .field.has-addons .control .select select:not([disabled]):active:hover, + .field.has-addons .control .select select:not([disabled]).is-active:hover { + z-index: 4; } + .field.has-addons .control.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + .field.has-addons.has-addons-centered { + justify-content: center; } + .field.has-addons.has-addons-right { + justify-content: flex-end; } + .field.has-addons.has-addons-fullwidth .control { + flex-grow: 1; + flex-shrink: 0; } + +.field.is-grouped { + display: flex; + justify-content: flex-start; } + .field.is-grouped > .control { + flex-shrink: 0; } + .field.is-grouped > .control:not(:last-child) { + margin-bottom: 0; + margin-right: 0.75rem; } + .field.is-grouped > .control.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + .field.is-grouped.is-grouped-centered { + justify-content: center; } + .field.is-grouped.is-grouped-right { + justify-content: flex-end; } + .field.is-grouped.is-grouped-multiline { + flex-wrap: wrap; } + .field.is-grouped.is-grouped-multiline > .control:last-child, .field.is-grouped.is-grouped-multiline > .control:not(:last-child) { + margin-bottom: 0.75rem; } + .field.is-grouped.is-grouped-multiline:last-child { + margin-bottom: -0.75rem; } + .field.is-grouped.is-grouped-multiline:not(:last-child) { + margin-bottom: 0; } + +@media screen and (min-width: 769px), print { + .field.is-horizontal { + display: flex; } } + +.field-label .label { + font-size: inherit; } + +@media screen and (max-width: 768px) { + .field-label { + margin-bottom: 0.5rem; } } + +@media screen and (min-width: 769px), print { + .field-label { + flex-basis: 0; + flex-grow: 1; + flex-shrink: 0; + margin-right: 1.5rem; + text-align: right; } + .field-label.is-small, #documenter .docs-sidebar form.docs-search > input.field-label { + font-size: 0.75rem; + padding-top: 0.375em; } + .field-label.is-normal { + padding-top: 0.375em; } + .field-label.is-medium { + font-size: 1.25rem; + padding-top: 0.375em; } + .field-label.is-large { + font-size: 1.5rem; + padding-top: 0.375em; } } + +.field-body .field .field { + margin-bottom: 0; } + +@media screen and (min-width: 769px), print { + .field-body { + display: flex; + flex-basis: 0; + flex-grow: 5; + flex-shrink: 1; } + .field-body .field { + margin-bottom: 0; } + .field-body > .field { + flex-shrink: 1; } + .field-body > .field:not(.is-narrow) { + flex-grow: 1; } + .field-body > .field:not(:last-child) { + margin-right: 0.75rem; } } + +.control { + box-sizing: border-box; + clear: both; + font-size: 1rem; + position: relative; + text-align: left; } + .control.has-icons-left .input:focus ~ .icon, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input:focus ~ .icon, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input:focus ~ .icon, + .control.has-icons-left .select:focus ~ .icon, .control.has-icons-right .input:focus ~ .icon, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input:focus ~ .icon, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input:focus ~ .icon, + .control.has-icons-right .select:focus ~ .icon { + color: #7a7a7a; } + .control.has-icons-left .input.is-small ~ .icon, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input ~ .icon, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input ~ .icon, + .control.has-icons-left .select.is-small ~ .icon, + .control.has-icons-left #documenter .docs-sidebar form.docs-search > input.select ~ .icon, + #documenter .docs-sidebar .control.has-icons-left form.docs-search > input.select ~ .icon, .control.has-icons-right .input.is-small ~ .icon, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input ~ .icon, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input ~ .icon, + .control.has-icons-right .select.is-small ~ .icon, + .control.has-icons-right #documenter .docs-sidebar form.docs-search > input.select ~ .icon, + #documenter .docs-sidebar .control.has-icons-right form.docs-search > input.select ~ .icon { + font-size: 0.75rem; } + .control.has-icons-left .input.is-medium ~ .icon, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input.is-medium ~ .icon, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input.is-medium ~ .icon, + .control.has-icons-left .select.is-medium ~ .icon, .control.has-icons-right .input.is-medium ~ .icon, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input.is-medium ~ .icon, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input.is-medium ~ .icon, + .control.has-icons-right .select.is-medium ~ .icon { + font-size: 1.25rem; } + .control.has-icons-left .input.is-large ~ .icon, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input.is-large ~ .icon, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input.is-large ~ .icon, + .control.has-icons-left .select.is-large ~ .icon, .control.has-icons-right .input.is-large ~ .icon, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input.is-large ~ .icon, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input.is-large ~ .icon, + .control.has-icons-right .select.is-large ~ .icon { + font-size: 1.5rem; } + .control.has-icons-left .icon, .control.has-icons-right .icon { + color: #dbdbdb; + height: 2.25em; + pointer-events: none; + position: absolute; + top: 0; + width: 2.25em; + z-index: 4; } + .control.has-icons-left .input, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input, + .control.has-icons-left .select select { + padding-left: 2.25em; } + .control.has-icons-left .icon.is-left { + left: 0; } + .control.has-icons-right .input, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input, + .control.has-icons-right .select select { + padding-right: 2.25em; } + .control.has-icons-right .icon.is-right { + right: 0; } + .control.is-loading::after { + position: absolute !important; + right: 0.625em; + top: 0.625em; + z-index: 4; } + .control.is-loading.is-small:after, #documenter .docs-sidebar form.docs-search > input.control.is-loading:after { + font-size: 0.75rem; } + .control.is-loading.is-medium:after { + font-size: 1.25rem; } + .control.is-loading.is-large:after { + font-size: 1.5rem; } + +.breadcrumb { + font-size: 1rem; + white-space: nowrap; } + .breadcrumb a { + align-items: center; + color: #2e63b8; + display: flex; + justify-content: center; + padding: 0 0.75em; } + .breadcrumb a:hover { + color: #363636; } + .breadcrumb li { + align-items: center; + display: flex; } + .breadcrumb li:first-child a { + padding-left: 0; } + .breadcrumb li.is-active a { + color: #222222; + cursor: default; + pointer-events: none; } + .breadcrumb li + li::before { + color: #b5b5b5; + content: "\0002f"; } + .breadcrumb ul, + .breadcrumb ol { + align-items: flex-start; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; } + .breadcrumb .icon:first-child { + margin-right: 0.5em; } + .breadcrumb .icon:last-child { + margin-left: 0.5em; } + .breadcrumb.is-centered ol, + .breadcrumb.is-centered ul { + justify-content: center; } + .breadcrumb.is-right ol, + .breadcrumb.is-right ul { + justify-content: flex-end; } + .breadcrumb.is-small, #documenter .docs-sidebar form.docs-search > input.breadcrumb { + font-size: 0.75rem; } + .breadcrumb.is-medium { + font-size: 1.25rem; } + .breadcrumb.is-large { + font-size: 1.5rem; } + .breadcrumb.has-arrow-separator li + li::before { + content: "\02192"; } + .breadcrumb.has-bullet-separator li + li::before { + content: "\02022"; } + .breadcrumb.has-dot-separator li + li::before { + content: "\000b7"; } + .breadcrumb.has-succeeds-separator li + li::before { + content: "\0227B"; } + +.card { + background-color: white; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + color: #222222; + max-width: 100%; + position: relative; } + +.card-header { + background-color: transparent; + align-items: stretch; + box-shadow: 0 1px 2px rgba(10, 10, 10, 0.1); + display: flex; } + +.card-header-title { + align-items: center; + color: #222222; + display: flex; + flex-grow: 1; + font-weight: 700; + padding: 0.75rem; } + .card-header-title.is-centered { + justify-content: center; } + +.card-header-icon { + align-items: center; + cursor: pointer; + display: flex; + justify-content: center; + padding: 0.75rem; } + +.card-image { + display: block; + position: relative; } + +.card-content { + background-color: transparent; + padding: 1rem 1.25rem; } + +.card-footer { + background-color: transparent; + border-top: 1px solid #dbdbdb; + align-items: stretch; + display: flex; } + +.card-footer-item { + align-items: center; + display: flex; + flex-basis: 0; + flex-grow: 1; + flex-shrink: 0; + justify-content: center; + padding: 0.75rem; } + .card-footer-item:not(:last-child) { + border-right: 1px solid #dbdbdb; } + +.card .media:not(:last-child) { + margin-bottom: 1.5rem; } + +.dropdown { + display: inline-flex; + position: relative; + vertical-align: top; } + .dropdown.is-active .dropdown-menu, .dropdown.is-hoverable:hover .dropdown-menu { + display: block; } + .dropdown.is-right .dropdown-menu { + left: auto; + right: 0; } + .dropdown.is-up .dropdown-menu { + bottom: 100%; + padding-bottom: 4px; + padding-top: initial; + top: auto; } + +.dropdown-menu { + display: none; + left: 0; + min-width: 12rem; + padding-top: 4px; + position: absolute; + top: 100%; + z-index: 20; } + +.dropdown-content { + background-color: white; + border-radius: 4px; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + padding-bottom: 0.5rem; + padding-top: 0.5rem; } + +.dropdown-item { + color: #4a4a4a; + display: block; + font-size: 0.875rem; + line-height: 1.5; + padding: 0.375rem 1rem; + position: relative; } + +a.dropdown-item, +button.dropdown-item { + padding-right: 3rem; + text-align: left; + white-space: nowrap; + width: 100%; } + a.dropdown-item:hover, + button.dropdown-item:hover { + background-color: whitesmoke; + color: #0a0a0a; } + a.dropdown-item.is-active, + button.dropdown-item.is-active { + background-color: #2e63b8; + color: #fff; } + +.dropdown-divider { + background-color: #dbdbdb; + border: none; + display: block; + height: 1px; + margin: 0.5rem 0; } + +.level { + align-items: center; + justify-content: space-between; } + .level code { + border-radius: 4px; } + .level img { + display: inline-block; + vertical-align: top; } + .level.is-mobile { + display: flex; } + .level.is-mobile .level-left, + .level.is-mobile .level-right { + display: flex; } + .level.is-mobile .level-left + .level-right { + margin-top: 0; } + .level.is-mobile .level-item:not(:last-child) { + margin-bottom: 0; + margin-right: 0.75rem; } + .level.is-mobile .level-item:not(.is-narrow) { + flex-grow: 1; } + @media screen and (min-width: 769px), print { + .level { + display: flex; } + .level > .level-item:not(.is-narrow) { + flex-grow: 1; } } + +.level-item { + align-items: center; + display: flex; + flex-basis: auto; + flex-grow: 0; + flex-shrink: 0; + justify-content: center; } + .level-item .title, + .level-item .subtitle { + margin-bottom: 0; } + @media screen and (max-width: 768px) { + .level-item:not(:last-child) { + margin-bottom: 0.75rem; } } + +.level-left, +.level-right { + flex-basis: auto; + flex-grow: 0; + flex-shrink: 0; } + .level-left .level-item.is-flexible, + .level-right .level-item.is-flexible { + flex-grow: 1; } + @media screen and (min-width: 769px), print { + .level-left .level-item:not(:last-child), + .level-right .level-item:not(:last-child) { + margin-right: 0.75rem; } } + +.level-left { + align-items: center; + justify-content: flex-start; } + @media screen and (max-width: 768px) { + .level-left + .level-right { + margin-top: 1.5rem; } } + @media screen and (min-width: 769px), print { + .level-left { + display: flex; } } + +.level-right { + align-items: center; + justify-content: flex-end; } + @media screen and (min-width: 769px), print { + .level-right { + display: flex; } } + +.list { + background-color: white; + border-radius: 4px; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); } + +.list-item { + display: block; + padding: 0.5em 1em; } + .list-item:not(a) { + color: #222222; } + .list-item:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; } + .list-item:last-child { + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; } + .list-item:not(:last-child) { + border-bottom: 1px solid #dbdbdb; } + .list-item.is-active { + background-color: #2e63b8; + color: #fff; } + +a.list-item { + background-color: whitesmoke; + cursor: pointer; } + +.media { + align-items: flex-start; + display: flex; + text-align: left; } + .media .content:not(:last-child) { + margin-bottom: 0.75rem; } + .media .media { + border-top: 1px solid rgba(219, 219, 219, 0.5); + display: flex; + padding-top: 0.75rem; } + .media .media .content:not(:last-child), + .media .media .control:not(:last-child) { + margin-bottom: 0.5rem; } + .media .media .media { + padding-top: 0.5rem; } + .media .media .media + .media { + margin-top: 0.5rem; } + .media + .media { + border-top: 1px solid rgba(219, 219, 219, 0.5); + margin-top: 1rem; + padding-top: 1rem; } + .media.is-large + .media { + margin-top: 1.5rem; + padding-top: 1.5rem; } + +.media-left, +.media-right { + flex-basis: auto; + flex-grow: 0; + flex-shrink: 0; } + +.media-left { + margin-right: 1rem; } + +.media-right { + margin-left: 1rem; } + +.media-content { + flex-basis: auto; + flex-grow: 1; + flex-shrink: 1; + text-align: left; } + +@media screen and (max-width: 768px) { + .media-content { + overflow-x: auto; } } + +.menu { + font-size: 1rem; } + .menu.is-small, #documenter .docs-sidebar form.docs-search > input.menu { + font-size: 0.75rem; } + .menu.is-medium { + font-size: 1.25rem; } + .menu.is-large { + font-size: 1.5rem; } + +.menu-list { + line-height: 1.25; } + .menu-list a { + border-radius: 2px; + color: #222222; + display: block; + padding: 0.5em 0.75em; } + .menu-list a:hover { + background-color: whitesmoke; + color: #222222; } + .menu-list a.is-active { + background-color: #2e63b8; + color: #fff; } + .menu-list li ul { + border-left: 1px solid #dbdbdb; + margin: 0.75em; + padding-left: 0.75em; } + +.menu-label { + color: #7a7a7a; + font-size: 0.75em; + letter-spacing: 0.1em; + text-transform: uppercase; } + .menu-label:not(:first-child) { + margin-top: 1em; } + .menu-label:not(:last-child) { + margin-bottom: 1em; } + +.message { + background-color: whitesmoke; + border-radius: 4px; + font-size: 1rem; } + .message strong { + color: currentColor; } + .message a:not(.button):not(.tag):not(.dropdown-item) { + color: currentColor; + text-decoration: underline; } + .message.is-small, #documenter .docs-sidebar form.docs-search > input.message { + font-size: 0.75rem; } + .message.is-medium { + font-size: 1.25rem; } + .message.is-large { + font-size: 1.5rem; } + .message.is-white { + background-color: white; } + .message.is-white .message-header { + background-color: white; + color: #0a0a0a; } + .message.is-white .message-body { + border-color: white; + color: #4d4d4d; } + .message.is-black { + background-color: #fafafa; } + .message.is-black .message-header { + background-color: #0a0a0a; + color: white; } + .message.is-black .message-body { + border-color: #0a0a0a; + color: #090909; } + .message.is-light { + background-color: #fafafa; } + .message.is-light .message-header { + background-color: whitesmoke; + color: #363636; } + .message.is-light .message-body { + border-color: whitesmoke; + color: #505050; } + .message.is-dark, .content kbd.message { + background-color: #fafafa; } + .message.is-dark .message-header, .content kbd.message .message-header { + background-color: #363636; + color: whitesmoke; } + .message.is-dark .message-body, .content kbd.message .message-body { + border-color: #363636; + color: #2a2a2a; } + .message.is-primary, .docstring > section > a.message.docs-sourcelink { + background-color: #f6fbfd; } + .message.is-primary .message-header, .docstring > section > a.message.docs-sourcelink .message-header { + background-color: #4eb5de; + color: #fff; } + .message.is-primary .message-body, .docstring > section > a.message.docs-sourcelink .message-body { + border-color: #4eb5de; + color: #1f556a; } + .message.is-link { + background-color: #f7f9fd; } + .message.is-link .message-header { + background-color: #2e63b8; + color: #fff; } + .message.is-link .message-body { + border-color: #2e63b8; + color: #264981; } + .message.is-info { + background-color: #f6fbfe; } + .message.is-info .message-header { + background-color: #209cee; + color: #fff; } + .message.is-info .message-body { + border-color: #209cee; + color: #12537d; } + .message.is-success { + background-color: #f6fdf9; } + .message.is-success .message-header { + background-color: #22c35b; + color: #fff; } + .message.is-success .message-body { + border-color: #22c35b; + color: #0f361d; } + .message.is-warning { + background-color: #fffdf5; } + .message.is-warning .message-header { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .message.is-warning .message-body { + border-color: #ffdd57; + color: #3c3108; } + .message.is-danger { + background-color: #fff5f5; } + .message.is-danger .message-header { + background-color: #da0b00; + color: #fff; } + .message.is-danger .message-body { + border-color: #da0b00; + color: #9b0c04; } + +.message-header { + align-items: center; + background-color: #222222; + border-radius: 4px 4px 0 0; + color: #fff; + display: flex; + font-weight: 700; + justify-content: space-between; + line-height: 1.25; + padding: 0.75em; + position: relative; } + .message-header .delete { + flex-grow: 0; + flex-shrink: 0; + margin-left: 0.75em; } + .message-header + .message-body { + border-width: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.message-body { + border-color: #dbdbdb; + border-radius: 4px; + border-style: solid; + border-width: 0 0 0 4px; + color: #222222; + padding: 1em 1.25em; } + .message-body code, + .message-body pre { + background-color: white; } + .message-body pre code { + background-color: transparent; } + +.modal { + align-items: center; + display: none; + flex-direction: column; + justify-content: center; + overflow: hidden; + position: fixed; + z-index: 40; } + .modal.is-active { + display: flex; } + +.modal-background { + background-color: rgba(10, 10, 10, 0.86); } + +.modal-content, +.modal-card { + margin: 0 20px; + max-height: calc(100vh - 160px); + overflow: auto; + position: relative; + width: 100%; } + @media screen and (min-width: 769px), print { + .modal-content, + .modal-card { + margin: 0 auto; + max-height: calc(100vh - 40px); + width: 640px; } } + +.modal-close { + background: none; + height: 40px; + position: fixed; + right: 20px; + top: 20px; + width: 40px; } + +.modal-card { + display: flex; + flex-direction: column; + max-height: calc(100vh - 40px); + overflow: hidden; + -ms-overflow-y: visible; } + +.modal-card-head, +.modal-card-foot { + align-items: center; + background-color: whitesmoke; + display: flex; + flex-shrink: 0; + justify-content: flex-start; + padding: 20px; + position: relative; } + +.modal-card-head { + border-bottom: 1px solid #dbdbdb; + border-top-left-radius: 6px; + border-top-right-radius: 6px; } + +.modal-card-title { + color: #222222; + flex-grow: 1; + flex-shrink: 0; + font-size: 1.5rem; + line-height: 1; } + +.modal-card-foot { + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px; + border-top: 1px solid #dbdbdb; } + .modal-card-foot .button:not(:last-child) { + margin-right: 0.5em; } + +.modal-card-body { + -webkit-overflow-scrolling: touch; + background-color: white; + flex-grow: 1; + flex-shrink: 1; + overflow: auto; + padding: 20px; } + +.navbar { + background-color: white; + min-height: 3.25rem; + position: relative; + z-index: 30; } + .navbar.is-white { + background-color: white; + color: #0a0a0a; } + .navbar.is-white .navbar-brand > .navbar-item, + .navbar.is-white .navbar-brand .navbar-link { + color: #0a0a0a; } + .navbar.is-white .navbar-brand > a.navbar-item:focus, .navbar.is-white .navbar-brand > a.navbar-item:hover, .navbar.is-white .navbar-brand > a.navbar-item.is-active, + .navbar.is-white .navbar-brand .navbar-link:focus, + .navbar.is-white .navbar-brand .navbar-link:hover, + .navbar.is-white .navbar-brand .navbar-link.is-active { + background-color: #f2f2f2; + color: #0a0a0a; } + .navbar.is-white .navbar-brand .navbar-link::after { + border-color: #0a0a0a; } + .navbar.is-white .navbar-burger { + color: #0a0a0a; } + @media screen and (min-width: 1056px) { + .navbar.is-white .navbar-start > .navbar-item, + .navbar.is-white .navbar-start .navbar-link, + .navbar.is-white .navbar-end > .navbar-item, + .navbar.is-white .navbar-end .navbar-link { + color: #0a0a0a; } + .navbar.is-white .navbar-start > a.navbar-item:focus, .navbar.is-white .navbar-start > a.navbar-item:hover, .navbar.is-white .navbar-start > a.navbar-item.is-active, + .navbar.is-white .navbar-start .navbar-link:focus, + .navbar.is-white .navbar-start .navbar-link:hover, + .navbar.is-white .navbar-start .navbar-link.is-active, + .navbar.is-white .navbar-end > a.navbar-item:focus, + .navbar.is-white .navbar-end > a.navbar-item:hover, + .navbar.is-white .navbar-end > a.navbar-item.is-active, + .navbar.is-white .navbar-end .navbar-link:focus, + .navbar.is-white .navbar-end .navbar-link:hover, + .navbar.is-white .navbar-end .navbar-link.is-active { + background-color: #f2f2f2; + color: #0a0a0a; } + .navbar.is-white .navbar-start .navbar-link::after, + .navbar.is-white .navbar-end .navbar-link::after { + border-color: #0a0a0a; } + .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #f2f2f2; + color: #0a0a0a; } + .navbar.is-white .navbar-dropdown a.navbar-item.is-active { + background-color: white; + color: #0a0a0a; } } + .navbar.is-black { + background-color: #0a0a0a; + color: white; } + .navbar.is-black .navbar-brand > .navbar-item, + .navbar.is-black .navbar-brand .navbar-link { + color: white; } + .navbar.is-black .navbar-brand > a.navbar-item:focus, .navbar.is-black .navbar-brand > a.navbar-item:hover, .navbar.is-black .navbar-brand > a.navbar-item.is-active, + .navbar.is-black .navbar-brand .navbar-link:focus, + .navbar.is-black .navbar-brand .navbar-link:hover, + .navbar.is-black .navbar-brand .navbar-link.is-active { + background-color: black; + color: white; } + .navbar.is-black .navbar-brand .navbar-link::after { + border-color: white; } + .navbar.is-black .navbar-burger { + color: white; } + @media screen and (min-width: 1056px) { + .navbar.is-black .navbar-start > .navbar-item, + .navbar.is-black .navbar-start .navbar-link, + .navbar.is-black .navbar-end > .navbar-item, + .navbar.is-black .navbar-end .navbar-link { + color: white; } + .navbar.is-black .navbar-start > a.navbar-item:focus, .navbar.is-black .navbar-start > a.navbar-item:hover, .navbar.is-black .navbar-start > a.navbar-item.is-active, + .navbar.is-black .navbar-start .navbar-link:focus, + .navbar.is-black .navbar-start .navbar-link:hover, + .navbar.is-black .navbar-start .navbar-link.is-active, + .navbar.is-black .navbar-end > a.navbar-item:focus, + .navbar.is-black .navbar-end > a.navbar-item:hover, + .navbar.is-black .navbar-end > a.navbar-item.is-active, + .navbar.is-black .navbar-end .navbar-link:focus, + .navbar.is-black .navbar-end .navbar-link:hover, + .navbar.is-black .navbar-end .navbar-link.is-active { + background-color: black; + color: white; } + .navbar.is-black .navbar-start .navbar-link::after, + .navbar.is-black .navbar-end .navbar-link::after { + border-color: white; } + .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link { + background-color: black; + color: white; } + .navbar.is-black .navbar-dropdown a.navbar-item.is-active { + background-color: #0a0a0a; + color: white; } } + .navbar.is-light { + background-color: whitesmoke; + color: #363636; } + .navbar.is-light .navbar-brand > .navbar-item, + .navbar.is-light .navbar-brand .navbar-link { + color: #363636; } + .navbar.is-light .navbar-brand > a.navbar-item:focus, .navbar.is-light .navbar-brand > a.navbar-item:hover, .navbar.is-light .navbar-brand > a.navbar-item.is-active, + .navbar.is-light .navbar-brand .navbar-link:focus, + .navbar.is-light .navbar-brand .navbar-link:hover, + .navbar.is-light .navbar-brand .navbar-link.is-active { + background-color: #e8e8e8; + color: #363636; } + .navbar.is-light .navbar-brand .navbar-link::after { + border-color: #363636; } + .navbar.is-light .navbar-burger { + color: #363636; } + @media screen and (min-width: 1056px) { + .navbar.is-light .navbar-start > .navbar-item, + .navbar.is-light .navbar-start .navbar-link, + .navbar.is-light .navbar-end > .navbar-item, + .navbar.is-light .navbar-end .navbar-link { + color: #363636; } + .navbar.is-light .navbar-start > a.navbar-item:focus, .navbar.is-light .navbar-start > a.navbar-item:hover, .navbar.is-light .navbar-start > a.navbar-item.is-active, + .navbar.is-light .navbar-start .navbar-link:focus, + .navbar.is-light .navbar-start .navbar-link:hover, + .navbar.is-light .navbar-start .navbar-link.is-active, + .navbar.is-light .navbar-end > a.navbar-item:focus, + .navbar.is-light .navbar-end > a.navbar-item:hover, + .navbar.is-light .navbar-end > a.navbar-item.is-active, + .navbar.is-light .navbar-end .navbar-link:focus, + .navbar.is-light .navbar-end .navbar-link:hover, + .navbar.is-light .navbar-end .navbar-link.is-active { + background-color: #e8e8e8; + color: #363636; } + .navbar.is-light .navbar-start .navbar-link::after, + .navbar.is-light .navbar-end .navbar-link::after { + border-color: #363636; } + .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #e8e8e8; + color: #363636; } + .navbar.is-light .navbar-dropdown a.navbar-item.is-active { + background-color: whitesmoke; + color: #363636; } } + .navbar.is-dark, .content kbd.navbar { + background-color: #363636; + color: whitesmoke; } + .navbar.is-dark .navbar-brand > .navbar-item, .content kbd.navbar .navbar-brand > .navbar-item, + .navbar.is-dark .navbar-brand .navbar-link, + .content kbd.navbar .navbar-brand .navbar-link { + color: whitesmoke; } + .navbar.is-dark .navbar-brand > a.navbar-item:focus, .content kbd.navbar .navbar-brand > a.navbar-item:focus, .navbar.is-dark .navbar-brand > a.navbar-item:hover, .content kbd.navbar .navbar-brand > a.navbar-item:hover, .navbar.is-dark .navbar-brand > a.navbar-item.is-active, .content kbd.navbar .navbar-brand > a.navbar-item.is-active, + .navbar.is-dark .navbar-brand .navbar-link:focus, + .content kbd.navbar .navbar-brand .navbar-link:focus, + .navbar.is-dark .navbar-brand .navbar-link:hover, + .content kbd.navbar .navbar-brand .navbar-link:hover, + .navbar.is-dark .navbar-brand .navbar-link.is-active, + .content kbd.navbar .navbar-brand .navbar-link.is-active { + background-color: #292929; + color: whitesmoke; } + .navbar.is-dark .navbar-brand .navbar-link::after, .content kbd.navbar .navbar-brand .navbar-link::after { + border-color: whitesmoke; } + .navbar.is-dark .navbar-burger, .content kbd.navbar .navbar-burger { + color: whitesmoke; } + @media screen and (min-width: 1056px) { + .navbar.is-dark .navbar-start > .navbar-item, .content kbd.navbar .navbar-start > .navbar-item, + .navbar.is-dark .navbar-start .navbar-link, + .content kbd.navbar .navbar-start .navbar-link, + .navbar.is-dark .navbar-end > .navbar-item, + .content kbd.navbar .navbar-end > .navbar-item, + .navbar.is-dark .navbar-end .navbar-link, + .content kbd.navbar .navbar-end .navbar-link { + color: whitesmoke; } + .navbar.is-dark .navbar-start > a.navbar-item:focus, .content kbd.navbar .navbar-start > a.navbar-item:focus, .navbar.is-dark .navbar-start > a.navbar-item:hover, .content kbd.navbar .navbar-start > a.navbar-item:hover, .navbar.is-dark .navbar-start > a.navbar-item.is-active, .content kbd.navbar .navbar-start > a.navbar-item.is-active, + .navbar.is-dark .navbar-start .navbar-link:focus, + .content kbd.navbar .navbar-start .navbar-link:focus, + .navbar.is-dark .navbar-start .navbar-link:hover, + .content kbd.navbar .navbar-start .navbar-link:hover, + .navbar.is-dark .navbar-start .navbar-link.is-active, + .content kbd.navbar .navbar-start .navbar-link.is-active, + .navbar.is-dark .navbar-end > a.navbar-item:focus, + .content kbd.navbar .navbar-end > a.navbar-item:focus, + .navbar.is-dark .navbar-end > a.navbar-item:hover, + .content kbd.navbar .navbar-end > a.navbar-item:hover, + .navbar.is-dark .navbar-end > a.navbar-item.is-active, + .content kbd.navbar .navbar-end > a.navbar-item.is-active, + .navbar.is-dark .navbar-end .navbar-link:focus, + .content kbd.navbar .navbar-end .navbar-link:focus, + .navbar.is-dark .navbar-end .navbar-link:hover, + .content kbd.navbar .navbar-end .navbar-link:hover, + .navbar.is-dark .navbar-end .navbar-link.is-active, + .content kbd.navbar .navbar-end .navbar-link.is-active { + background-color: #292929; + color: whitesmoke; } + .navbar.is-dark .navbar-start .navbar-link::after, .content kbd.navbar .navbar-start .navbar-link::after, + .navbar.is-dark .navbar-end .navbar-link::after, + .content kbd.navbar .navbar-end .navbar-link::after { + border-color: whitesmoke; } + .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link, .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link, + .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link, + .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #292929; + color: whitesmoke; } + .navbar.is-dark .navbar-dropdown a.navbar-item.is-active, .content kbd.navbar .navbar-dropdown a.navbar-item.is-active { + background-color: #363636; + color: whitesmoke; } } + .navbar.is-primary, .docstring > section > a.navbar.docs-sourcelink { + background-color: #4eb5de; + color: #fff; } + .navbar.is-primary .navbar-brand > .navbar-item, .docstring > section > a.navbar.docs-sourcelink .navbar-brand > .navbar-item, + .navbar.is-primary .navbar-brand .navbar-link, + .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-primary .navbar-brand > a.navbar-item:focus, .docstring > section > a.navbar.docs-sourcelink .navbar-brand > a.navbar-item:focus, .navbar.is-primary .navbar-brand > a.navbar-item:hover, .docstring > section > a.navbar.docs-sourcelink .navbar-brand > a.navbar-item:hover, .navbar.is-primary .navbar-brand > a.navbar-item.is-active, .docstring > section > a.navbar.docs-sourcelink .navbar-brand > a.navbar-item.is-active, + .navbar.is-primary .navbar-brand .navbar-link:focus, + .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus, + .navbar.is-primary .navbar-brand .navbar-link:hover, + .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover, + .navbar.is-primary .navbar-brand .navbar-link.is-active, + .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active { + background-color: #39acda; + color: #fff; } + .navbar.is-primary .navbar-brand .navbar-link::after, .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-primary .navbar-burger, .docstring > section > a.navbar.docs-sourcelink .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-primary .navbar-start > .navbar-item, .docstring > section > a.navbar.docs-sourcelink .navbar-start > .navbar-item, + .navbar.is-primary .navbar-start .navbar-link, + .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link, + .navbar.is-primary .navbar-end > .navbar-item, + .docstring > section > a.navbar.docs-sourcelink .navbar-end > .navbar-item, + .navbar.is-primary .navbar-end .navbar-link, + .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link { + color: #fff; } + .navbar.is-primary .navbar-start > a.navbar-item:focus, .docstring > section > a.navbar.docs-sourcelink .navbar-start > a.navbar-item:focus, .navbar.is-primary .navbar-start > a.navbar-item:hover, .docstring > section > a.navbar.docs-sourcelink .navbar-start > a.navbar-item:hover, .navbar.is-primary .navbar-start > a.navbar-item.is-active, .docstring > section > a.navbar.docs-sourcelink .navbar-start > a.navbar-item.is-active, + .navbar.is-primary .navbar-start .navbar-link:focus, + .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link:focus, + .navbar.is-primary .navbar-start .navbar-link:hover, + .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link:hover, + .navbar.is-primary .navbar-start .navbar-link.is-active, + .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active, + .navbar.is-primary .navbar-end > a.navbar-item:focus, + .docstring > section > a.navbar.docs-sourcelink .navbar-end > a.navbar-item:focus, + .navbar.is-primary .navbar-end > a.navbar-item:hover, + .docstring > section > a.navbar.docs-sourcelink .navbar-end > a.navbar-item:hover, + .navbar.is-primary .navbar-end > a.navbar-item.is-active, + .docstring > section > a.navbar.docs-sourcelink .navbar-end > a.navbar-item.is-active, + .navbar.is-primary .navbar-end .navbar-link:focus, + .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link:focus, + .navbar.is-primary .navbar-end .navbar-link:hover, + .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link:hover, + .navbar.is-primary .navbar-end .navbar-link.is-active, + .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active { + background-color: #39acda; + color: #fff; } + .navbar.is-primary .navbar-start .navbar-link::after, .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link::after, + .navbar.is-primary .navbar-end .navbar-link::after, + .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link, .docstring > section > a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link, + .docstring > section > a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link, + .docstring > section > a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #39acda; + color: #fff; } + .navbar.is-primary .navbar-dropdown a.navbar-item.is-active, .docstring > section > a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active { + background-color: #4eb5de; + color: #fff; } } + .navbar.is-link { + background-color: #2e63b8; + color: #fff; } + .navbar.is-link .navbar-brand > .navbar-item, + .navbar.is-link .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-link .navbar-brand > a.navbar-item:focus, .navbar.is-link .navbar-brand > a.navbar-item:hover, .navbar.is-link .navbar-brand > a.navbar-item.is-active, + .navbar.is-link .navbar-brand .navbar-link:focus, + .navbar.is-link .navbar-brand .navbar-link:hover, + .navbar.is-link .navbar-brand .navbar-link.is-active { + background-color: #2958a4; + color: #fff; } + .navbar.is-link .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-link .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-link .navbar-start > .navbar-item, + .navbar.is-link .navbar-start .navbar-link, + .navbar.is-link .navbar-end > .navbar-item, + .navbar.is-link .navbar-end .navbar-link { + color: #fff; } + .navbar.is-link .navbar-start > a.navbar-item:focus, .navbar.is-link .navbar-start > a.navbar-item:hover, .navbar.is-link .navbar-start > a.navbar-item.is-active, + .navbar.is-link .navbar-start .navbar-link:focus, + .navbar.is-link .navbar-start .navbar-link:hover, + .navbar.is-link .navbar-start .navbar-link.is-active, + .navbar.is-link .navbar-end > a.navbar-item:focus, + .navbar.is-link .navbar-end > a.navbar-item:hover, + .navbar.is-link .navbar-end > a.navbar-item.is-active, + .navbar.is-link .navbar-end .navbar-link:focus, + .navbar.is-link .navbar-end .navbar-link:hover, + .navbar.is-link .navbar-end .navbar-link.is-active { + background-color: #2958a4; + color: #fff; } + .navbar.is-link .navbar-start .navbar-link::after, + .navbar.is-link .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #2958a4; + color: #fff; } + .navbar.is-link .navbar-dropdown a.navbar-item.is-active { + background-color: #2e63b8; + color: #fff; } } + .navbar.is-info { + background-color: #209cee; + color: #fff; } + .navbar.is-info .navbar-brand > .navbar-item, + .navbar.is-info .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-info .navbar-brand > a.navbar-item:focus, .navbar.is-info .navbar-brand > a.navbar-item:hover, .navbar.is-info .navbar-brand > a.navbar-item.is-active, + .navbar.is-info .navbar-brand .navbar-link:focus, + .navbar.is-info .navbar-brand .navbar-link:hover, + .navbar.is-info .navbar-brand .navbar-link.is-active { + background-color: #1190e3; + color: #fff; } + .navbar.is-info .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-info .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-info .navbar-start > .navbar-item, + .navbar.is-info .navbar-start .navbar-link, + .navbar.is-info .navbar-end > .navbar-item, + .navbar.is-info .navbar-end .navbar-link { + color: #fff; } + .navbar.is-info .navbar-start > a.navbar-item:focus, .navbar.is-info .navbar-start > a.navbar-item:hover, .navbar.is-info .navbar-start > a.navbar-item.is-active, + .navbar.is-info .navbar-start .navbar-link:focus, + .navbar.is-info .navbar-start .navbar-link:hover, + .navbar.is-info .navbar-start .navbar-link.is-active, + .navbar.is-info .navbar-end > a.navbar-item:focus, + .navbar.is-info .navbar-end > a.navbar-item:hover, + .navbar.is-info .navbar-end > a.navbar-item.is-active, + .navbar.is-info .navbar-end .navbar-link:focus, + .navbar.is-info .navbar-end .navbar-link:hover, + .navbar.is-info .navbar-end .navbar-link.is-active { + background-color: #1190e3; + color: #fff; } + .navbar.is-info .navbar-start .navbar-link::after, + .navbar.is-info .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #1190e3; + color: #fff; } + .navbar.is-info .navbar-dropdown a.navbar-item.is-active { + background-color: #209cee; + color: #fff; } } + .navbar.is-success { + background-color: #22c35b; + color: #fff; } + .navbar.is-success .navbar-brand > .navbar-item, + .navbar.is-success .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-success .navbar-brand > a.navbar-item:focus, .navbar.is-success .navbar-brand > a.navbar-item:hover, .navbar.is-success .navbar-brand > a.navbar-item.is-active, + .navbar.is-success .navbar-brand .navbar-link:focus, + .navbar.is-success .navbar-brand .navbar-link:hover, + .navbar.is-success .navbar-brand .navbar-link.is-active { + background-color: #1ead51; + color: #fff; } + .navbar.is-success .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-success .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-success .navbar-start > .navbar-item, + .navbar.is-success .navbar-start .navbar-link, + .navbar.is-success .navbar-end > .navbar-item, + .navbar.is-success .navbar-end .navbar-link { + color: #fff; } + .navbar.is-success .navbar-start > a.navbar-item:focus, .navbar.is-success .navbar-start > a.navbar-item:hover, .navbar.is-success .navbar-start > a.navbar-item.is-active, + .navbar.is-success .navbar-start .navbar-link:focus, + .navbar.is-success .navbar-start .navbar-link:hover, + .navbar.is-success .navbar-start .navbar-link.is-active, + .navbar.is-success .navbar-end > a.navbar-item:focus, + .navbar.is-success .navbar-end > a.navbar-item:hover, + .navbar.is-success .navbar-end > a.navbar-item.is-active, + .navbar.is-success .navbar-end .navbar-link:focus, + .navbar.is-success .navbar-end .navbar-link:hover, + .navbar.is-success .navbar-end .navbar-link.is-active { + background-color: #1ead51; + color: #fff; } + .navbar.is-success .navbar-start .navbar-link::after, + .navbar.is-success .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #1ead51; + color: #fff; } + .navbar.is-success .navbar-dropdown a.navbar-item.is-active { + background-color: #22c35b; + color: #fff; } } + .navbar.is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-brand > .navbar-item, + .navbar.is-warning .navbar-brand .navbar-link { + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-brand > a.navbar-item:focus, .navbar.is-warning .navbar-brand > a.navbar-item:hover, .navbar.is-warning .navbar-brand > a.navbar-item.is-active, + .navbar.is-warning .navbar-brand .navbar-link:focus, + .navbar.is-warning .navbar-brand .navbar-link:hover, + .navbar.is-warning .navbar-brand .navbar-link.is-active { + background-color: #ffd83e; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-brand .navbar-link::after { + border-color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-burger { + color: rgba(0, 0, 0, 0.7); } + @media screen and (min-width: 1056px) { + .navbar.is-warning .navbar-start > .navbar-item, + .navbar.is-warning .navbar-start .navbar-link, + .navbar.is-warning .navbar-end > .navbar-item, + .navbar.is-warning .navbar-end .navbar-link { + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-start > a.navbar-item:focus, .navbar.is-warning .navbar-start > a.navbar-item:hover, .navbar.is-warning .navbar-start > a.navbar-item.is-active, + .navbar.is-warning .navbar-start .navbar-link:focus, + .navbar.is-warning .navbar-start .navbar-link:hover, + .navbar.is-warning .navbar-start .navbar-link.is-active, + .navbar.is-warning .navbar-end > a.navbar-item:focus, + .navbar.is-warning .navbar-end > a.navbar-item:hover, + .navbar.is-warning .navbar-end > a.navbar-item.is-active, + .navbar.is-warning .navbar-end .navbar-link:focus, + .navbar.is-warning .navbar-end .navbar-link:hover, + .navbar.is-warning .navbar-end .navbar-link.is-active { + background-color: #ffd83e; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-start .navbar-link::after, + .navbar.is-warning .navbar-end .navbar-link::after { + border-color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #ffd83e; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-dropdown a.navbar-item.is-active { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } } + .navbar.is-danger { + background-color: #da0b00; + color: #fff; } + .navbar.is-danger .navbar-brand > .navbar-item, + .navbar.is-danger .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-danger .navbar-brand > a.navbar-item:focus, .navbar.is-danger .navbar-brand > a.navbar-item:hover, .navbar.is-danger .navbar-brand > a.navbar-item.is-active, + .navbar.is-danger .navbar-brand .navbar-link:focus, + .navbar.is-danger .navbar-brand .navbar-link:hover, + .navbar.is-danger .navbar-brand .navbar-link.is-active { + background-color: #c10a00; + color: #fff; } + .navbar.is-danger .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-danger .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-danger .navbar-start > .navbar-item, + .navbar.is-danger .navbar-start .navbar-link, + .navbar.is-danger .navbar-end > .navbar-item, + .navbar.is-danger .navbar-end .navbar-link { + color: #fff; } + .navbar.is-danger .navbar-start > a.navbar-item:focus, .navbar.is-danger .navbar-start > a.navbar-item:hover, .navbar.is-danger .navbar-start > a.navbar-item.is-active, + .navbar.is-danger .navbar-start .navbar-link:focus, + .navbar.is-danger .navbar-start .navbar-link:hover, + .navbar.is-danger .navbar-start .navbar-link.is-active, + .navbar.is-danger .navbar-end > a.navbar-item:focus, + .navbar.is-danger .navbar-end > a.navbar-item:hover, + .navbar.is-danger .navbar-end > a.navbar-item.is-active, + .navbar.is-danger .navbar-end .navbar-link:focus, + .navbar.is-danger .navbar-end .navbar-link:hover, + .navbar.is-danger .navbar-end .navbar-link.is-active { + background-color: #c10a00; + color: #fff; } + .navbar.is-danger .navbar-start .navbar-link::after, + .navbar.is-danger .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #c10a00; + color: #fff; } + .navbar.is-danger .navbar-dropdown a.navbar-item.is-active { + background-color: #da0b00; + color: #fff; } } + .navbar > .container { + align-items: stretch; + display: flex; + min-height: 3.25rem; + width: 100%; } + .navbar.has-shadow { + box-shadow: 0 2px 0 0 whitesmoke; } + .navbar.is-fixed-bottom, .navbar.is-fixed-top { + left: 0; + position: fixed; + right: 0; + z-index: 30; } + .navbar.is-fixed-bottom { + bottom: 0; } + .navbar.is-fixed-bottom.has-shadow { + box-shadow: 0 -2px 0 0 whitesmoke; } + .navbar.is-fixed-top { + top: 0; } + +html.has-navbar-fixed-top, +body.has-navbar-fixed-top { + padding-top: 3.25rem; } + +html.has-navbar-fixed-bottom, +body.has-navbar-fixed-bottom { + padding-bottom: 3.25rem; } + +.navbar-brand, +.navbar-tabs { + align-items: stretch; + display: flex; + flex-shrink: 0; + min-height: 3.25rem; } + +.navbar-brand a.navbar-item:focus, .navbar-brand a.navbar-item:hover { + background-color: transparent; } + +.navbar-tabs { + -webkit-overflow-scrolling: touch; + max-width: 100vw; + overflow-x: auto; + overflow-y: hidden; } + +.navbar-burger { + color: #4a4a4a; + cursor: pointer; + display: block; + height: 3.25rem; + position: relative; + width: 3.25rem; + margin-left: auto; } + .navbar-burger span { + background-color: currentColor; + display: block; + height: 1px; + left: calc(50% - 8px); + position: absolute; + transform-origin: center; + transition-duration: 86ms; + transition-property: background-color, opacity, transform; + transition-timing-function: ease-out; + width: 16px; } + .navbar-burger span:nth-child(1) { + top: calc(50% - 6px); } + .navbar-burger span:nth-child(2) { + top: calc(50% - 1px); } + .navbar-burger span:nth-child(3) { + top: calc(50% + 4px); } + .navbar-burger:hover { + background-color: rgba(0, 0, 0, 0.05); } + .navbar-burger.is-active span:nth-child(1) { + transform: translateY(5px) rotate(45deg); } + .navbar-burger.is-active span:nth-child(2) { + opacity: 0; } + .navbar-burger.is-active span:nth-child(3) { + transform: translateY(-5px) rotate(-45deg); } + +.navbar-menu { + display: none; } + +.navbar-item, +.navbar-link { + color: #4a4a4a; + display: block; + line-height: 1.5; + padding: 0.5rem 0.75rem; + position: relative; } + .navbar-item .icon:only-child, + .navbar-link .icon:only-child { + margin-left: -0.25rem; + margin-right: -0.25rem; } + +a.navbar-item, +.navbar-link { + cursor: pointer; } + a.navbar-item:focus, a.navbar-item:focus-within, a.navbar-item:hover, a.navbar-item.is-active, + .navbar-link:focus, + .navbar-link:focus-within, + .navbar-link:hover, + .navbar-link.is-active { + background-color: #fafafa; + color: #2e63b8; } + +.navbar-item { + display: block; + flex-grow: 0; + flex-shrink: 0; } + .navbar-item img { + max-height: 1.75rem; } + .navbar-item.has-dropdown { + padding: 0; } + .navbar-item.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + .navbar-item.is-tab { + border-bottom: 1px solid transparent; + min-height: 3.25rem; + padding-bottom: calc(0.5rem - 1px); } + .navbar-item.is-tab:focus, .navbar-item.is-tab:hover { + background-color: transparent; + border-bottom-color: #2e63b8; } + .navbar-item.is-tab.is-active { + background-color: transparent; + border-bottom-color: #2e63b8; + border-bottom-style: solid; + border-bottom-width: 3px; + color: #2e63b8; + padding-bottom: calc(0.5rem - 3px); } + +.navbar-content { + flex-grow: 1; + flex-shrink: 1; } + +.navbar-link:not(.is-arrowless) { + padding-right: 2.5em; } + .navbar-link:not(.is-arrowless)::after { + border-color: #2e63b8; + margin-top: -0.375em; + right: 1.125em; } + +.navbar-dropdown { + font-size: 0.875rem; + padding-bottom: 0.5rem; + padding-top: 0.5rem; } + .navbar-dropdown .navbar-item { + padding-left: 1.5rem; + padding-right: 1.5rem; } + +.navbar-divider { + background-color: whitesmoke; + border: none; + display: none; + height: 2px; + margin: 0.5rem 0; } + +@media screen and (max-width: 1055px) { + .navbar > .container { + display: block; } + .navbar-brand .navbar-item, + .navbar-tabs .navbar-item { + align-items: center; + display: flex; } + .navbar-link::after { + display: none; } + .navbar-menu { + background-color: white; + box-shadow: 0 8px 16px rgba(10, 10, 10, 0.1); + padding: 0.5rem 0; } + .navbar-menu.is-active { + display: block; } + .navbar.is-fixed-bottom-touch, .navbar.is-fixed-top-touch { + left: 0; + position: fixed; + right: 0; + z-index: 30; } + .navbar.is-fixed-bottom-touch { + bottom: 0; } + .navbar.is-fixed-bottom-touch.has-shadow { + box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); } + .navbar.is-fixed-top-touch { + top: 0; } + .navbar.is-fixed-top .navbar-menu, .navbar.is-fixed-top-touch .navbar-menu { + -webkit-overflow-scrolling: touch; + max-height: calc(100vh - 3.25rem); + overflow: auto; } + html.has-navbar-fixed-top-touch, + body.has-navbar-fixed-top-touch { + padding-top: 3.25rem; } + html.has-navbar-fixed-bottom-touch, + body.has-navbar-fixed-bottom-touch { + padding-bottom: 3.25rem; } } + +@media screen and (min-width: 1056px) { + .navbar, + .navbar-menu, + .navbar-start, + .navbar-end { + align-items: stretch; + display: flex; } + .navbar { + min-height: 3.25rem; } + .navbar.is-spaced { + padding: 1rem 2rem; } + .navbar.is-spaced .navbar-start, + .navbar.is-spaced .navbar-end { + align-items: center; } + .navbar.is-spaced a.navbar-item, + .navbar.is-spaced .navbar-link { + border-radius: 4px; } + .navbar.is-transparent a.navbar-item:focus, .navbar.is-transparent a.navbar-item:hover, .navbar.is-transparent a.navbar-item.is-active, + .navbar.is-transparent .navbar-link:focus, + .navbar.is-transparent .navbar-link:hover, + .navbar.is-transparent .navbar-link.is-active { + background-color: transparent !important; } + .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link { + background-color: transparent !important; } + .navbar.is-transparent .navbar-dropdown a.navbar-item:focus, .navbar.is-transparent .navbar-dropdown a.navbar-item:hover { + background-color: whitesmoke; + color: #0a0a0a; } + .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active { + background-color: whitesmoke; + color: #2e63b8; } + .navbar-burger { + display: none; } + .navbar-item, + .navbar-link { + align-items: center; + display: flex; } + .navbar-item { + display: flex; } + .navbar-item.has-dropdown { + align-items: stretch; } + .navbar-item.has-dropdown-up .navbar-link::after { + transform: rotate(135deg) translate(0.25em, -0.25em); } + .navbar-item.has-dropdown-up .navbar-dropdown { + border-bottom: 2px solid #dbdbdb; + border-radius: 6px 6px 0 0; + border-top: none; + bottom: 100%; + box-shadow: 0 -8px 8px rgba(10, 10, 10, 0.1); + top: auto; } + .navbar-item.is-active .navbar-dropdown, .navbar-item.is-hoverable:focus .navbar-dropdown, .navbar-item.is-hoverable:focus-within .navbar-dropdown, .navbar-item.is-hoverable:hover .navbar-dropdown { + display: block; } + .navbar.is-spaced .navbar-item.is-active .navbar-dropdown, .navbar-item.is-active .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown, .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown, .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown, .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed { + opacity: 1; + pointer-events: auto; + transform: translateY(0); } + .navbar-menu { + flex-grow: 1; + flex-shrink: 0; } + .navbar-start { + justify-content: flex-start; + margin-right: auto; } + .navbar-end { + justify-content: flex-end; + margin-left: auto; } + .navbar-dropdown { + background-color: white; + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px; + border-top: 2px solid #dbdbdb; + box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1); + display: none; + font-size: 0.875rem; + left: 0; + min-width: 100%; + position: absolute; + top: 100%; + z-index: 20; } + .navbar-dropdown .navbar-item { + padding: 0.375rem 1rem; + white-space: nowrap; } + .navbar-dropdown a.navbar-item { + padding-right: 3rem; } + .navbar-dropdown a.navbar-item:focus, .navbar-dropdown a.navbar-item:hover { + background-color: whitesmoke; + color: #0a0a0a; } + .navbar-dropdown a.navbar-item.is-active { + background-color: whitesmoke; + color: #2e63b8; } + .navbar.is-spaced .navbar-dropdown, .navbar-dropdown.is-boxed { + border-radius: 6px; + border-top: none; + box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + display: block; + opacity: 0; + pointer-events: none; + top: calc(100% + (-4px)); + transform: translateY(-5px); + transition-duration: 86ms; + transition-property: opacity, transform; } + .navbar-dropdown.is-right { + left: auto; + right: 0; } + .navbar-divider { + display: block; } + .navbar > .container .navbar-brand, + .container > .navbar .navbar-brand { + margin-left: -.75rem; } + .navbar > .container .navbar-menu, + .container > .navbar .navbar-menu { + margin-right: -.75rem; } + .navbar.is-fixed-bottom-desktop, .navbar.is-fixed-top-desktop { + left: 0; + position: fixed; + right: 0; + z-index: 30; } + .navbar.is-fixed-bottom-desktop { + bottom: 0; } + .navbar.is-fixed-bottom-desktop.has-shadow { + box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); } + .navbar.is-fixed-top-desktop { + top: 0; } + html.has-navbar-fixed-top-desktop, + body.has-navbar-fixed-top-desktop { + padding-top: 3.25rem; } + html.has-navbar-fixed-bottom-desktop, + body.has-navbar-fixed-bottom-desktop { + padding-bottom: 3.25rem; } + html.has-spaced-navbar-fixed-top, + body.has-spaced-navbar-fixed-top { + padding-top: 5.25rem; } + html.has-spaced-navbar-fixed-bottom, + body.has-spaced-navbar-fixed-bottom { + padding-bottom: 5.25rem; } + a.navbar-item.is-active, + .navbar-link.is-active { + color: #0a0a0a; } + a.navbar-item.is-active:not(:focus):not(:hover), + .navbar-link.is-active:not(:focus):not(:hover) { + background-color: transparent; } + .navbar-item.has-dropdown:focus .navbar-link, .navbar-item.has-dropdown:hover .navbar-link, .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #fafafa; } } + +.hero.is-fullheight-with-navbar { + min-height: calc(100vh - 3.25rem); } + +.pagination { + font-size: 1rem; + margin: -0.25rem; } + .pagination.is-small, #documenter .docs-sidebar form.docs-search > input.pagination { + font-size: 0.75rem; } + .pagination.is-medium { + font-size: 1.25rem; } + .pagination.is-large { + font-size: 1.5rem; } + .pagination.is-rounded .pagination-previous, #documenter .docs-sidebar form.docs-search > input.pagination .pagination-previous, + .pagination.is-rounded .pagination-next, + #documenter .docs-sidebar form.docs-search > input.pagination .pagination-next { + padding-left: 1em; + padding-right: 1em; + border-radius: 290486px; } + .pagination.is-rounded .pagination-link, #documenter .docs-sidebar form.docs-search > input.pagination .pagination-link { + border-radius: 290486px; } + +.pagination, +.pagination-list { + align-items: center; + display: flex; + justify-content: center; + text-align: center; } + +.pagination-previous, +.pagination-next, +.pagination-link, +.pagination-ellipsis { + font-size: 1em; + justify-content: center; + margin: 0.25rem; + padding-left: 0.5em; + padding-right: 0.5em; + text-align: center; } + +.pagination-previous, +.pagination-next, +.pagination-link { + border-color: #dbdbdb; + color: #363636; + min-width: 2.25em; } + .pagination-previous:hover, + .pagination-next:hover, + .pagination-link:hover { + border-color: #b5b5b5; + color: #363636; } + .pagination-previous:focus, + .pagination-next:focus, + .pagination-link:focus { + border-color: #3c5dcd; } + .pagination-previous:active, + .pagination-next:active, + .pagination-link:active { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2); } + .pagination-previous[disabled], + .pagination-next[disabled], + .pagination-link[disabled] { + background-color: #dbdbdb; + border-color: #dbdbdb; + box-shadow: none; + color: #7a7a7a; + opacity: 0.5; } + +.pagination-previous, +.pagination-next { + padding-left: 0.75em; + padding-right: 0.75em; + white-space: nowrap; } + +.pagination-link.is-current { + background-color: #2e63b8; + border-color: #2e63b8; + color: #fff; } + +.pagination-ellipsis { + color: #b5b5b5; + pointer-events: none; } + +.pagination-list { + flex-wrap: wrap; } + +@media screen and (max-width: 768px) { + .pagination { + flex-wrap: wrap; } + .pagination-previous, + .pagination-next { + flex-grow: 1; + flex-shrink: 1; } + .pagination-list li { + flex-grow: 1; + flex-shrink: 1; } } + +@media screen and (min-width: 769px), print { + .pagination-list { + flex-grow: 1; + flex-shrink: 1; + justify-content: flex-start; + order: 1; } + .pagination-previous { + order: 2; } + .pagination-next { + order: 3; } + .pagination { + justify-content: space-between; } + .pagination.is-centered .pagination-previous { + order: 1; } + .pagination.is-centered .pagination-list { + justify-content: center; + order: 2; } + .pagination.is-centered .pagination-next { + order: 3; } + .pagination.is-right .pagination-previous { + order: 1; } + .pagination.is-right .pagination-next { + order: 2; } + .pagination.is-right .pagination-list { + justify-content: flex-end; + order: 3; } } + +.panel { + font-size: 1rem; } + .panel:not(:last-child) { + margin-bottom: 1.5rem; } + +.panel-heading, +.panel-tabs, +.panel-block { + border-bottom: 1px solid #dbdbdb; + border-left: 1px solid #dbdbdb; + border-right: 1px solid #dbdbdb; } + .panel-heading:first-child, + .panel-tabs:first-child, + .panel-block:first-child { + border-top: 1px solid #dbdbdb; } + +.panel-heading { + background-color: whitesmoke; + border-radius: 4px 4px 0 0; + color: #222222; + font-size: 1.25em; + font-weight: 300; + line-height: 1.25; + padding: 0.5em 0.75em; } + +.panel-tabs { + align-items: flex-end; + display: flex; + font-size: 0.875em; + justify-content: center; } + .panel-tabs a { + border-bottom: 1px solid #dbdbdb; + margin-bottom: -1px; + padding: 0.5em; } + .panel-tabs a.is-active { + border-bottom-color: #4a4a4a; + color: #363636; } + +.panel-list a { + color: #222222; } + .panel-list a:hover { + color: #2e63b8; } + +.panel-block { + align-items: center; + color: #222222; + display: flex; + justify-content: flex-start; + padding: 0.5em 0.75em; } + .panel-block input[type="checkbox"] { + margin-right: 0.75em; } + .panel-block > .control { + flex-grow: 1; + flex-shrink: 1; + width: 100%; } + .panel-block.is-wrapped { + flex-wrap: wrap; } + .panel-block.is-active { + border-left-color: #2e63b8; + color: #363636; } + .panel-block.is-active .panel-icon { + color: #2e63b8; } + +a.panel-block, +label.panel-block { + cursor: pointer; } + a.panel-block:hover, + label.panel-block:hover { + background-color: whitesmoke; } + +.panel-icon { + display: inline-block; + font-size: 14px; + height: 1em; + line-height: 1em; + text-align: center; + vertical-align: top; + width: 1em; + color: #7a7a7a; + margin-right: 0.75em; } + .panel-icon .fa { + font-size: inherit; + line-height: inherit; } + +.tabs { + -webkit-overflow-scrolling: touch; + align-items: stretch; + display: flex; + font-size: 1rem; + justify-content: space-between; + overflow: hidden; + overflow-x: auto; + white-space: nowrap; } + .tabs a { + align-items: center; + border-bottom-color: #dbdbdb; + border-bottom-style: solid; + border-bottom-width: 1px; + color: #222222; + display: flex; + justify-content: center; + margin-bottom: -1px; + padding: 0.5em 1em; + vertical-align: top; } + .tabs a:hover { + border-bottom-color: #222222; + color: #222222; } + .tabs li { + display: block; } + .tabs li.is-active a { + border-bottom-color: #2e63b8; + color: #2e63b8; } + .tabs ul { + align-items: center; + border-bottom-color: #dbdbdb; + border-bottom-style: solid; + border-bottom-width: 1px; + display: flex; + flex-grow: 1; + flex-shrink: 0; + justify-content: flex-start; } + .tabs ul.is-left { + padding-right: 0.75em; } + .tabs ul.is-center { + flex: none; + justify-content: center; + padding-left: 0.75em; + padding-right: 0.75em; } + .tabs ul.is-right { + justify-content: flex-end; + padding-left: 0.75em; } + .tabs .icon:first-child { + margin-right: 0.5em; } + .tabs .icon:last-child { + margin-left: 0.5em; } + .tabs.is-centered ul { + justify-content: center; } + .tabs.is-right ul { + justify-content: flex-end; } + .tabs.is-boxed a { + border: 1px solid transparent; + border-radius: 4px 4px 0 0; } + .tabs.is-boxed a:hover { + background-color: whitesmoke; + border-bottom-color: #dbdbdb; } + .tabs.is-boxed li.is-active a { + background-color: white; + border-color: #dbdbdb; + border-bottom-color: transparent !important; } + .tabs.is-fullwidth li { + flex-grow: 1; + flex-shrink: 0; } + .tabs.is-toggle a { + border-color: #dbdbdb; + border-style: solid; + border-width: 1px; + margin-bottom: 0; + position: relative; } + .tabs.is-toggle a:hover { + background-color: whitesmoke; + border-color: #b5b5b5; + z-index: 2; } + .tabs.is-toggle li + li { + margin-left: -1px; } + .tabs.is-toggle li:first-child a { + border-radius: 4px 0 0 4px; } + .tabs.is-toggle li:last-child a { + border-radius: 0 4px 4px 0; } + .tabs.is-toggle li.is-active a { + background-color: #2e63b8; + border-color: #2e63b8; + color: #fff; + z-index: 1; } + .tabs.is-toggle ul { + border-bottom: none; } + .tabs.is-toggle.is-toggle-rounded li:first-child a { + border-bottom-left-radius: 290486px; + border-top-left-radius: 290486px; + padding-left: 1.25em; } + .tabs.is-toggle.is-toggle-rounded li:last-child a { + border-bottom-right-radius: 290486px; + border-top-right-radius: 290486px; + padding-right: 1.25em; } + .tabs.is-small, #documenter .docs-sidebar form.docs-search > input.tabs { + font-size: 0.75rem; } + .tabs.is-medium { + font-size: 1.25rem; } + .tabs.is-large { + font-size: 1.5rem; } + +.column { + display: block; + flex-basis: 0; + flex-grow: 1; + flex-shrink: 1; + padding: 0.75rem; } + .columns.is-mobile > .column.is-narrow { + flex: none; } + .columns.is-mobile > .column.is-full { + flex: none; + width: 100%; } + .columns.is-mobile > .column.is-three-quarters { + flex: none; + width: 75%; } + .columns.is-mobile > .column.is-two-thirds { + flex: none; + width: 66.6666%; } + .columns.is-mobile > .column.is-half { + flex: none; + width: 50%; } + .columns.is-mobile > .column.is-one-third { + flex: none; + width: 33.3333%; } + .columns.is-mobile > .column.is-one-quarter { + flex: none; + width: 25%; } + .columns.is-mobile > .column.is-one-fifth { + flex: none; + width: 20%; } + .columns.is-mobile > .column.is-two-fifths { + flex: none; + width: 40%; } + .columns.is-mobile > .column.is-three-fifths { + flex: none; + width: 60%; } + .columns.is-mobile > .column.is-four-fifths { + flex: none; + width: 80%; } + .columns.is-mobile > .column.is-offset-three-quarters { + margin-left: 75%; } + .columns.is-mobile > .column.is-offset-two-thirds { + margin-left: 66.6666%; } + .columns.is-mobile > .column.is-offset-half { + margin-left: 50%; } + .columns.is-mobile > .column.is-offset-one-third { + margin-left: 33.3333%; } + .columns.is-mobile > .column.is-offset-one-quarter { + margin-left: 25%; } + .columns.is-mobile > .column.is-offset-one-fifth { + margin-left: 20%; } + .columns.is-mobile > .column.is-offset-two-fifths { + margin-left: 40%; } + .columns.is-mobile > .column.is-offset-three-fifths { + margin-left: 60%; } + .columns.is-mobile > .column.is-offset-four-fifths { + margin-left: 80%; } + .columns.is-mobile > .column.is-0 { + flex: none; + width: 0%; } + .columns.is-mobile > .column.is-offset-0 { + margin-left: 0%; } + .columns.is-mobile > .column.is-1 { + flex: none; + width: 8.33333%; } + .columns.is-mobile > .column.is-offset-1 { + margin-left: 8.33333%; } + .columns.is-mobile > .column.is-2 { + flex: none; + width: 16.66667%; } + .columns.is-mobile > .column.is-offset-2 { + margin-left: 16.66667%; } + .columns.is-mobile > .column.is-3 { + flex: none; + width: 25%; } + .columns.is-mobile > .column.is-offset-3 { + margin-left: 25%; } + .columns.is-mobile > .column.is-4 { + flex: none; + width: 33.33333%; } + .columns.is-mobile > .column.is-offset-4 { + margin-left: 33.33333%; } + .columns.is-mobile > .column.is-5 { + flex: none; + width: 41.66667%; } + .columns.is-mobile > .column.is-offset-5 { + margin-left: 41.66667%; } + .columns.is-mobile > .column.is-6 { + flex: none; + width: 50%; } + .columns.is-mobile > .column.is-offset-6 { + margin-left: 50%; } + .columns.is-mobile > .column.is-7 { + flex: none; + width: 58.33333%; } + .columns.is-mobile > .column.is-offset-7 { + margin-left: 58.33333%; } + .columns.is-mobile > .column.is-8 { + flex: none; + width: 66.66667%; } + .columns.is-mobile > .column.is-offset-8 { + margin-left: 66.66667%; } + .columns.is-mobile > .column.is-9 { + flex: none; + width: 75%; } + .columns.is-mobile > .column.is-offset-9 { + margin-left: 75%; } + .columns.is-mobile > .column.is-10 { + flex: none; + width: 83.33333%; } + .columns.is-mobile > .column.is-offset-10 { + margin-left: 83.33333%; } + .columns.is-mobile > .column.is-11 { + flex: none; + width: 91.66667%; } + .columns.is-mobile > .column.is-offset-11 { + margin-left: 91.66667%; } + .columns.is-mobile > .column.is-12 { + flex: none; + width: 100%; } + .columns.is-mobile > .column.is-offset-12 { + margin-left: 100%; } + @media screen and (max-width: 768px) { + .column.is-narrow-mobile { + flex: none; } + .column.is-full-mobile { + flex: none; + width: 100%; } + .column.is-three-quarters-mobile { + flex: none; + width: 75%; } + .column.is-two-thirds-mobile { + flex: none; + width: 66.6666%; } + .column.is-half-mobile { + flex: none; + width: 50%; } + .column.is-one-third-mobile { + flex: none; + width: 33.3333%; } + .column.is-one-quarter-mobile { + flex: none; + width: 25%; } + .column.is-one-fifth-mobile { + flex: none; + width: 20%; } + .column.is-two-fifths-mobile { + flex: none; + width: 40%; } + .column.is-three-fifths-mobile { + flex: none; + width: 60%; } + .column.is-four-fifths-mobile { + flex: none; + width: 80%; } + .column.is-offset-three-quarters-mobile { + margin-left: 75%; } + .column.is-offset-two-thirds-mobile { + margin-left: 66.6666%; } + .column.is-offset-half-mobile { + margin-left: 50%; } + .column.is-offset-one-third-mobile { + margin-left: 33.3333%; } + .column.is-offset-one-quarter-mobile { + margin-left: 25%; } + .column.is-offset-one-fifth-mobile { + margin-left: 20%; } + .column.is-offset-two-fifths-mobile { + margin-left: 40%; } + .column.is-offset-three-fifths-mobile { + margin-left: 60%; } + .column.is-offset-four-fifths-mobile { + margin-left: 80%; } + .column.is-0-mobile { + flex: none; + width: 0%; } + .column.is-offset-0-mobile { + margin-left: 0%; } + .column.is-1-mobile { + flex: none; + width: 8.33333%; } + .column.is-offset-1-mobile { + margin-left: 8.33333%; } + .column.is-2-mobile { + flex: none; + width: 16.66667%; } + .column.is-offset-2-mobile { + margin-left: 16.66667%; } + .column.is-3-mobile { + flex: none; + width: 25%; } + .column.is-offset-3-mobile { + margin-left: 25%; } + .column.is-4-mobile { + flex: none; + width: 33.33333%; } + .column.is-offset-4-mobile { + margin-left: 33.33333%; } + .column.is-5-mobile { + flex: none; + width: 41.66667%; } + .column.is-offset-5-mobile { + margin-left: 41.66667%; } + .column.is-6-mobile { + flex: none; + width: 50%; } + .column.is-offset-6-mobile { + margin-left: 50%; } + .column.is-7-mobile { + flex: none; + width: 58.33333%; } + .column.is-offset-7-mobile { + margin-left: 58.33333%; } + .column.is-8-mobile { + flex: none; + width: 66.66667%; } + .column.is-offset-8-mobile { + margin-left: 66.66667%; } + .column.is-9-mobile { + flex: none; + width: 75%; } + .column.is-offset-9-mobile { + margin-left: 75%; } + .column.is-10-mobile { + flex: none; + width: 83.33333%; } + .column.is-offset-10-mobile { + margin-left: 83.33333%; } + .column.is-11-mobile { + flex: none; + width: 91.66667%; } + .column.is-offset-11-mobile { + margin-left: 91.66667%; } + .column.is-12-mobile { + flex: none; + width: 100%; } + .column.is-offset-12-mobile { + margin-left: 100%; } } + @media screen and (min-width: 769px), print { + .column.is-narrow, .column.is-narrow-tablet { + flex: none; } + .column.is-full, .column.is-full-tablet { + flex: none; + width: 100%; } + .column.is-three-quarters, .column.is-three-quarters-tablet { + flex: none; + width: 75%; } + .column.is-two-thirds, .column.is-two-thirds-tablet { + flex: none; + width: 66.6666%; } + .column.is-half, .column.is-half-tablet { + flex: none; + width: 50%; } + .column.is-one-third, .column.is-one-third-tablet { + flex: none; + width: 33.3333%; } + .column.is-one-quarter, .column.is-one-quarter-tablet { + flex: none; + width: 25%; } + .column.is-one-fifth, .column.is-one-fifth-tablet { + flex: none; + width: 20%; } + .column.is-two-fifths, .column.is-two-fifths-tablet { + flex: none; + width: 40%; } + .column.is-three-fifths, .column.is-three-fifths-tablet { + flex: none; + width: 60%; } + .column.is-four-fifths, .column.is-four-fifths-tablet { + flex: none; + width: 80%; } + .column.is-offset-three-quarters, .column.is-offset-three-quarters-tablet { + margin-left: 75%; } + .column.is-offset-two-thirds, .column.is-offset-two-thirds-tablet { + margin-left: 66.6666%; } + .column.is-offset-half, .column.is-offset-half-tablet { + margin-left: 50%; } + .column.is-offset-one-third, .column.is-offset-one-third-tablet { + margin-left: 33.3333%; } + .column.is-offset-one-quarter, .column.is-offset-one-quarter-tablet { + margin-left: 25%; } + .column.is-offset-one-fifth, .column.is-offset-one-fifth-tablet { + margin-left: 20%; } + .column.is-offset-two-fifths, .column.is-offset-two-fifths-tablet { + margin-left: 40%; } + .column.is-offset-three-fifths, .column.is-offset-three-fifths-tablet { + margin-left: 60%; } + .column.is-offset-four-fifths, .column.is-offset-four-fifths-tablet { + margin-left: 80%; } + .column.is-0, .column.is-0-tablet { + flex: none; + width: 0%; } + .column.is-offset-0, .column.is-offset-0-tablet { + margin-left: 0%; } + .column.is-1, .column.is-1-tablet { + flex: none; + width: 8.33333%; } + .column.is-offset-1, .column.is-offset-1-tablet { + margin-left: 8.33333%; } + .column.is-2, .column.is-2-tablet { + flex: none; + width: 16.66667%; } + .column.is-offset-2, .column.is-offset-2-tablet { + margin-left: 16.66667%; } + .column.is-3, .column.is-3-tablet { + flex: none; + width: 25%; } + .column.is-offset-3, .column.is-offset-3-tablet { + margin-left: 25%; } + .column.is-4, .column.is-4-tablet { + flex: none; + width: 33.33333%; } + .column.is-offset-4, .column.is-offset-4-tablet { + margin-left: 33.33333%; } + .column.is-5, .column.is-5-tablet { + flex: none; + width: 41.66667%; } + .column.is-offset-5, .column.is-offset-5-tablet { + margin-left: 41.66667%; } + .column.is-6, .column.is-6-tablet { + flex: none; + width: 50%; } + .column.is-offset-6, .column.is-offset-6-tablet { + margin-left: 50%; } + .column.is-7, .column.is-7-tablet { + flex: none; + width: 58.33333%; } + .column.is-offset-7, .column.is-offset-7-tablet { + margin-left: 58.33333%; } + .column.is-8, .column.is-8-tablet { + flex: none; + width: 66.66667%; } + .column.is-offset-8, .column.is-offset-8-tablet { + margin-left: 66.66667%; } + .column.is-9, .column.is-9-tablet { + flex: none; + width: 75%; } + .column.is-offset-9, .column.is-offset-9-tablet { + margin-left: 75%; } + .column.is-10, .column.is-10-tablet { + flex: none; + width: 83.33333%; } + .column.is-offset-10, .column.is-offset-10-tablet { + margin-left: 83.33333%; } + .column.is-11, .column.is-11-tablet { + flex: none; + width: 91.66667%; } + .column.is-offset-11, .column.is-offset-11-tablet { + margin-left: 91.66667%; } + .column.is-12, .column.is-12-tablet { + flex: none; + width: 100%; } + .column.is-offset-12, .column.is-offset-12-tablet { + margin-left: 100%; } } + @media screen and (max-width: 1055px) { + .column.is-narrow-touch { + flex: none; } + .column.is-full-touch { + flex: none; + width: 100%; } + .column.is-three-quarters-touch { + flex: none; + width: 75%; } + .column.is-two-thirds-touch { + flex: none; + width: 66.6666%; } + .column.is-half-touch { + flex: none; + width: 50%; } + .column.is-one-third-touch { + flex: none; + width: 33.3333%; } + .column.is-one-quarter-touch { + flex: none; + width: 25%; } + .column.is-one-fifth-touch { + flex: none; + width: 20%; } + .column.is-two-fifths-touch { + flex: none; + width: 40%; } + .column.is-three-fifths-touch { + flex: none; + width: 60%; } + .column.is-four-fifths-touch { + flex: none; + width: 80%; } + .column.is-offset-three-quarters-touch { + margin-left: 75%; } + .column.is-offset-two-thirds-touch { + margin-left: 66.6666%; } + .column.is-offset-half-touch { + margin-left: 50%; } + .column.is-offset-one-third-touch { + margin-left: 33.3333%; } + .column.is-offset-one-quarter-touch { + margin-left: 25%; } + .column.is-offset-one-fifth-touch { + margin-left: 20%; } + .column.is-offset-two-fifths-touch { + margin-left: 40%; } + .column.is-offset-three-fifths-touch { + margin-left: 60%; } + .column.is-offset-four-fifths-touch { + margin-left: 80%; } + .column.is-0-touch { + flex: none; + width: 0%; } + .column.is-offset-0-touch { + margin-left: 0%; } + .column.is-1-touch { + flex: none; + width: 8.33333%; } + .column.is-offset-1-touch { + margin-left: 8.33333%; } + .column.is-2-touch { + flex: none; + width: 16.66667%; } + .column.is-offset-2-touch { + margin-left: 16.66667%; } + .column.is-3-touch { + flex: none; + width: 25%; } + .column.is-offset-3-touch { + margin-left: 25%; } + .column.is-4-touch { + flex: none; + width: 33.33333%; } + .column.is-offset-4-touch { + margin-left: 33.33333%; } + .column.is-5-touch { + flex: none; + width: 41.66667%; } + .column.is-offset-5-touch { + margin-left: 41.66667%; } + .column.is-6-touch { + flex: none; + width: 50%; } + .column.is-offset-6-touch { + margin-left: 50%; } + .column.is-7-touch { + flex: none; + width: 58.33333%; } + .column.is-offset-7-touch { + margin-left: 58.33333%; } + .column.is-8-touch { + flex: none; + width: 66.66667%; } + .column.is-offset-8-touch { + margin-left: 66.66667%; } + .column.is-9-touch { + flex: none; + width: 75%; } + .column.is-offset-9-touch { + margin-left: 75%; } + .column.is-10-touch { + flex: none; + width: 83.33333%; } + .column.is-offset-10-touch { + margin-left: 83.33333%; } + .column.is-11-touch { + flex: none; + width: 91.66667%; } + .column.is-offset-11-touch { + margin-left: 91.66667%; } + .column.is-12-touch { + flex: none; + width: 100%; } + .column.is-offset-12-touch { + margin-left: 100%; } } + @media screen and (min-width: 1056px) { + .column.is-narrow-desktop { + flex: none; } + .column.is-full-desktop { + flex: none; + width: 100%; } + .column.is-three-quarters-desktop { + flex: none; + width: 75%; } + .column.is-two-thirds-desktop { + flex: none; + width: 66.6666%; } + .column.is-half-desktop { + flex: none; + width: 50%; } + .column.is-one-third-desktop { + flex: none; + width: 33.3333%; } + .column.is-one-quarter-desktop { + flex: none; + width: 25%; } + .column.is-one-fifth-desktop { + flex: none; + width: 20%; } + .column.is-two-fifths-desktop { + flex: none; + width: 40%; } + .column.is-three-fifths-desktop { + flex: none; + width: 60%; } + .column.is-four-fifths-desktop { + flex: none; + width: 80%; } + .column.is-offset-three-quarters-desktop { + margin-left: 75%; } + .column.is-offset-two-thirds-desktop { + margin-left: 66.6666%; } + .column.is-offset-half-desktop { + margin-left: 50%; } + .column.is-offset-one-third-desktop { + margin-left: 33.3333%; } + .column.is-offset-one-quarter-desktop { + margin-left: 25%; } + .column.is-offset-one-fifth-desktop { + margin-left: 20%; } + .column.is-offset-two-fifths-desktop { + margin-left: 40%; } + .column.is-offset-three-fifths-desktop { + margin-left: 60%; } + .column.is-offset-four-fifths-desktop { + margin-left: 80%; } + .column.is-0-desktop { + flex: none; + width: 0%; } + .column.is-offset-0-desktop { + margin-left: 0%; } + .column.is-1-desktop { + flex: none; + width: 8.33333%; } + .column.is-offset-1-desktop { + margin-left: 8.33333%; } + .column.is-2-desktop { + flex: none; + width: 16.66667%; } + .column.is-offset-2-desktop { + margin-left: 16.66667%; } + .column.is-3-desktop { + flex: none; + width: 25%; } + .column.is-offset-3-desktop { + margin-left: 25%; } + .column.is-4-desktop { + flex: none; + width: 33.33333%; } + .column.is-offset-4-desktop { + margin-left: 33.33333%; } + .column.is-5-desktop { + flex: none; + width: 41.66667%; } + .column.is-offset-5-desktop { + margin-left: 41.66667%; } + .column.is-6-desktop { + flex: none; + width: 50%; } + .column.is-offset-6-desktop { + margin-left: 50%; } + .column.is-7-desktop { + flex: none; + width: 58.33333%; } + .column.is-offset-7-desktop { + margin-left: 58.33333%; } + .column.is-8-desktop { + flex: none; + width: 66.66667%; } + .column.is-offset-8-desktop { + margin-left: 66.66667%; } + .column.is-9-desktop { + flex: none; + width: 75%; } + .column.is-offset-9-desktop { + margin-left: 75%; } + .column.is-10-desktop { + flex: none; + width: 83.33333%; } + .column.is-offset-10-desktop { + margin-left: 83.33333%; } + .column.is-11-desktop { + flex: none; + width: 91.66667%; } + .column.is-offset-11-desktop { + margin-left: 91.66667%; } + .column.is-12-desktop { + flex: none; + width: 100%; } + .column.is-offset-12-desktop { + margin-left: 100%; } } + @media screen and (min-width: 1216px) { + .column.is-narrow-widescreen { + flex: none; } + .column.is-full-widescreen { + flex: none; + width: 100%; } + .column.is-three-quarters-widescreen { + flex: none; + width: 75%; } + .column.is-two-thirds-widescreen { + flex: none; + width: 66.6666%; } + .column.is-half-widescreen { + flex: none; + width: 50%; } + .column.is-one-third-widescreen { + flex: none; + width: 33.3333%; } + .column.is-one-quarter-widescreen { + flex: none; + width: 25%; } + .column.is-one-fifth-widescreen { + flex: none; + width: 20%; } + .column.is-two-fifths-widescreen { + flex: none; + width: 40%; } + .column.is-three-fifths-widescreen { + flex: none; + width: 60%; } + .column.is-four-fifths-widescreen { + flex: none; + width: 80%; } + .column.is-offset-three-quarters-widescreen { + margin-left: 75%; } + .column.is-offset-two-thirds-widescreen { + margin-left: 66.6666%; } + .column.is-offset-half-widescreen { + margin-left: 50%; } + .column.is-offset-one-third-widescreen { + margin-left: 33.3333%; } + .column.is-offset-one-quarter-widescreen { + margin-left: 25%; } + .column.is-offset-one-fifth-widescreen { + margin-left: 20%; } + .column.is-offset-two-fifths-widescreen { + margin-left: 40%; } + .column.is-offset-three-fifths-widescreen { + margin-left: 60%; } + .column.is-offset-four-fifths-widescreen { + margin-left: 80%; } + .column.is-0-widescreen { + flex: none; + width: 0%; } + .column.is-offset-0-widescreen { + margin-left: 0%; } + .column.is-1-widescreen { + flex: none; + width: 8.33333%; } + .column.is-offset-1-widescreen { + margin-left: 8.33333%; } + .column.is-2-widescreen { + flex: none; + width: 16.66667%; } + .column.is-offset-2-widescreen { + margin-left: 16.66667%; } + .column.is-3-widescreen { + flex: none; + width: 25%; } + .column.is-offset-3-widescreen { + margin-left: 25%; } + .column.is-4-widescreen { + flex: none; + width: 33.33333%; } + .column.is-offset-4-widescreen { + margin-left: 33.33333%; } + .column.is-5-widescreen { + flex: none; + width: 41.66667%; } + .column.is-offset-5-widescreen { + margin-left: 41.66667%; } + .column.is-6-widescreen { + flex: none; + width: 50%; } + .column.is-offset-6-widescreen { + margin-left: 50%; } + .column.is-7-widescreen { + flex: none; + width: 58.33333%; } + .column.is-offset-7-widescreen { + margin-left: 58.33333%; } + .column.is-8-widescreen { + flex: none; + width: 66.66667%; } + .column.is-offset-8-widescreen { + margin-left: 66.66667%; } + .column.is-9-widescreen { + flex: none; + width: 75%; } + .column.is-offset-9-widescreen { + margin-left: 75%; } + .column.is-10-widescreen { + flex: none; + width: 83.33333%; } + .column.is-offset-10-widescreen { + margin-left: 83.33333%; } + .column.is-11-widescreen { + flex: none; + width: 91.66667%; } + .column.is-offset-11-widescreen { + margin-left: 91.66667%; } + .column.is-12-widescreen { + flex: none; + width: 100%; } + .column.is-offset-12-widescreen { + margin-left: 100%; } } + @media screen and (min-width: 1408px) { + .column.is-narrow-fullhd { + flex: none; } + .column.is-full-fullhd { + flex: none; + width: 100%; } + .column.is-three-quarters-fullhd { + flex: none; + width: 75%; } + .column.is-two-thirds-fullhd { + flex: none; + width: 66.6666%; } + .column.is-half-fullhd { + flex: none; + width: 50%; } + .column.is-one-third-fullhd { + flex: none; + width: 33.3333%; } + .column.is-one-quarter-fullhd { + flex: none; + width: 25%; } + .column.is-one-fifth-fullhd { + flex: none; + width: 20%; } + .column.is-two-fifths-fullhd { + flex: none; + width: 40%; } + .column.is-three-fifths-fullhd { + flex: none; + width: 60%; } + .column.is-four-fifths-fullhd { + flex: none; + width: 80%; } + .column.is-offset-three-quarters-fullhd { + margin-left: 75%; } + .column.is-offset-two-thirds-fullhd { + margin-left: 66.6666%; } + .column.is-offset-half-fullhd { + margin-left: 50%; } + .column.is-offset-one-third-fullhd { + margin-left: 33.3333%; } + .column.is-offset-one-quarter-fullhd { + margin-left: 25%; } + .column.is-offset-one-fifth-fullhd { + margin-left: 20%; } + .column.is-offset-two-fifths-fullhd { + margin-left: 40%; } + .column.is-offset-three-fifths-fullhd { + margin-left: 60%; } + .column.is-offset-four-fifths-fullhd { + margin-left: 80%; } + .column.is-0-fullhd { + flex: none; + width: 0%; } + .column.is-offset-0-fullhd { + margin-left: 0%; } + .column.is-1-fullhd { + flex: none; + width: 8.33333%; } + .column.is-offset-1-fullhd { + margin-left: 8.33333%; } + .column.is-2-fullhd { + flex: none; + width: 16.66667%; } + .column.is-offset-2-fullhd { + margin-left: 16.66667%; } + .column.is-3-fullhd { + flex: none; + width: 25%; } + .column.is-offset-3-fullhd { + margin-left: 25%; } + .column.is-4-fullhd { + flex: none; + width: 33.33333%; } + .column.is-offset-4-fullhd { + margin-left: 33.33333%; } + .column.is-5-fullhd { + flex: none; + width: 41.66667%; } + .column.is-offset-5-fullhd { + margin-left: 41.66667%; } + .column.is-6-fullhd { + flex: none; + width: 50%; } + .column.is-offset-6-fullhd { + margin-left: 50%; } + .column.is-7-fullhd { + flex: none; + width: 58.33333%; } + .column.is-offset-7-fullhd { + margin-left: 58.33333%; } + .column.is-8-fullhd { + flex: none; + width: 66.66667%; } + .column.is-offset-8-fullhd { + margin-left: 66.66667%; } + .column.is-9-fullhd { + flex: none; + width: 75%; } + .column.is-offset-9-fullhd { + margin-left: 75%; } + .column.is-10-fullhd { + flex: none; + width: 83.33333%; } + .column.is-offset-10-fullhd { + margin-left: 83.33333%; } + .column.is-11-fullhd { + flex: none; + width: 91.66667%; } + .column.is-offset-11-fullhd { + margin-left: 91.66667%; } + .column.is-12-fullhd { + flex: none; + width: 100%; } + .column.is-offset-12-fullhd { + margin-left: 100%; } } + +.columns { + margin-left: -0.75rem; + margin-right: -0.75rem; + margin-top: -0.75rem; } + .columns:last-child { + margin-bottom: -0.75rem; } + .columns:not(:last-child) { + margin-bottom: calc(1.5rem - 0.75rem); } + .columns.is-centered { + justify-content: center; } + .columns.is-gapless { + margin-left: 0; + margin-right: 0; + margin-top: 0; } + .columns.is-gapless > .column { + margin: 0; + padding: 0 !important; } + .columns.is-gapless:not(:last-child) { + margin-bottom: 1.5rem; } + .columns.is-gapless:last-child { + margin-bottom: 0; } + .columns.is-mobile { + display: flex; } + .columns.is-multiline { + flex-wrap: wrap; } + .columns.is-vcentered { + align-items: center; } + @media screen and (min-width: 769px), print { + .columns:not(.is-desktop) { + display: flex; } } + @media screen and (min-width: 1056px) { + .columns.is-desktop { + display: flex; } } + +.columns.is-variable { + --columnGap: 0.75rem; + margin-left: calc(-1 * var(--columnGap)); + margin-right: calc(-1 * var(--columnGap)); } + .columns.is-variable .column { + padding-left: var(--columnGap); + padding-right: var(--columnGap); } + .columns.is-variable.is-0 { + --columnGap: 0rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-0-mobile { + --columnGap: 0rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-0-tablet { + --columnGap: 0rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-0-tablet-only { + --columnGap: 0rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-0-touch { + --columnGap: 0rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-0-desktop { + --columnGap: 0rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-0-desktop-only { + --columnGap: 0rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-0-widescreen { + --columnGap: 0rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-0-widescreen-only { + --columnGap: 0rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-0-fullhd { + --columnGap: 0rem; } } + .columns.is-variable.is-1 { + --columnGap: 0.25rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-1-mobile { + --columnGap: 0.25rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-1-tablet { + --columnGap: 0.25rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-1-tablet-only { + --columnGap: 0.25rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-1-touch { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-1-desktop { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-1-desktop-only { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-1-widescreen { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-1-widescreen-only { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-1-fullhd { + --columnGap: 0.25rem; } } + .columns.is-variable.is-2 { + --columnGap: 0.5rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-2-mobile { + --columnGap: 0.5rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-2-tablet { + --columnGap: 0.5rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-2-tablet-only { + --columnGap: 0.5rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-2-touch { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-2-desktop { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-2-desktop-only { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-2-widescreen { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-2-widescreen-only { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-2-fullhd { + --columnGap: 0.5rem; } } + .columns.is-variable.is-3 { + --columnGap: 0.75rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-3-mobile { + --columnGap: 0.75rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-3-tablet { + --columnGap: 0.75rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-3-tablet-only { + --columnGap: 0.75rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-3-touch { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-3-desktop { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-3-desktop-only { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-3-widescreen { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-3-widescreen-only { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-3-fullhd { + --columnGap: 0.75rem; } } + .columns.is-variable.is-4 { + --columnGap: 1rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-4-mobile { + --columnGap: 1rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-4-tablet { + --columnGap: 1rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-4-tablet-only { + --columnGap: 1rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-4-touch { + --columnGap: 1rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-4-desktop { + --columnGap: 1rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-4-desktop-only { + --columnGap: 1rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-4-widescreen { + --columnGap: 1rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-4-widescreen-only { + --columnGap: 1rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-4-fullhd { + --columnGap: 1rem; } } + .columns.is-variable.is-5 { + --columnGap: 1.25rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-5-mobile { + --columnGap: 1.25rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-5-tablet { + --columnGap: 1.25rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-5-tablet-only { + --columnGap: 1.25rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-5-touch { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-5-desktop { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-5-desktop-only { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-5-widescreen { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-5-widescreen-only { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-5-fullhd { + --columnGap: 1.25rem; } } + .columns.is-variable.is-6 { + --columnGap: 1.5rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-6-mobile { + --columnGap: 1.5rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-6-tablet { + --columnGap: 1.5rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-6-tablet-only { + --columnGap: 1.5rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-6-touch { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-6-desktop { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-6-desktop-only { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-6-widescreen { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-6-widescreen-only { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-6-fullhd { + --columnGap: 1.5rem; } } + .columns.is-variable.is-7 { + --columnGap: 1.75rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-7-mobile { + --columnGap: 1.75rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-7-tablet { + --columnGap: 1.75rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-7-tablet-only { + --columnGap: 1.75rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-7-touch { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-7-desktop { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-7-desktop-only { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-7-widescreen { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-7-widescreen-only { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-7-fullhd { + --columnGap: 1.75rem; } } + .columns.is-variable.is-8 { + --columnGap: 2rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-8-mobile { + --columnGap: 2rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-8-tablet { + --columnGap: 2rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-8-tablet-only { + --columnGap: 2rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-8-touch { + --columnGap: 2rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-8-desktop { + --columnGap: 2rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-8-desktop-only { + --columnGap: 2rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-8-widescreen { + --columnGap: 2rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-8-widescreen-only { + --columnGap: 2rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-8-fullhd { + --columnGap: 2rem; } } + +.tile { + align-items: stretch; + display: block; + flex-basis: 0; + flex-grow: 1; + flex-shrink: 1; + min-height: min-content; } + .tile.is-ancestor { + margin-left: -0.75rem; + margin-right: -0.75rem; + margin-top: -0.75rem; } + .tile.is-ancestor:last-child { + margin-bottom: -0.75rem; } + .tile.is-ancestor:not(:last-child) { + margin-bottom: 0.75rem; } + .tile.is-child { + margin: 0 !important; } + .tile.is-parent { + padding: 0.75rem; } + .tile.is-vertical { + flex-direction: column; } + .tile.is-vertical > .tile.is-child:not(:last-child) { + margin-bottom: 1.5rem !important; } + @media screen and (min-width: 769px), print { + .tile:not(.is-child) { + display: flex; } + .tile.is-1 { + flex: none; + width: 8.33333%; } + .tile.is-2 { + flex: none; + width: 16.66667%; } + .tile.is-3 { + flex: none; + width: 25%; } + .tile.is-4 { + flex: none; + width: 33.33333%; } + .tile.is-5 { + flex: none; + width: 41.66667%; } + .tile.is-6 { + flex: none; + width: 50%; } + .tile.is-7 { + flex: none; + width: 58.33333%; } + .tile.is-8 { + flex: none; + width: 66.66667%; } + .tile.is-9 { + flex: none; + width: 75%; } + .tile.is-10 { + flex: none; + width: 83.33333%; } + .tile.is-11 { + flex: none; + width: 91.66667%; } + .tile.is-12 { + flex: none; + width: 100%; } } + +.hero { + align-items: stretch; + display: flex; + flex-direction: column; + justify-content: space-between; } + .hero .navbar { + background: none; } + .hero .tabs ul { + border-bottom: none; } + .hero.is-white { + background-color: white; + color: #0a0a0a; } + .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-white strong { + color: inherit; } + .hero.is-white .title { + color: #0a0a0a; } + .hero.is-white .subtitle { + color: rgba(10, 10, 10, 0.9); } + .hero.is-white .subtitle a:not(.button), + .hero.is-white .subtitle strong { + color: #0a0a0a; } + @media screen and (max-width: 1055px) { + .hero.is-white .navbar-menu { + background-color: white; } } + .hero.is-white .navbar-item, + .hero.is-white .navbar-link { + color: rgba(10, 10, 10, 0.7); } + .hero.is-white a.navbar-item:hover, .hero.is-white a.navbar-item.is-active, + .hero.is-white .navbar-link:hover, + .hero.is-white .navbar-link.is-active { + background-color: #f2f2f2; + color: #0a0a0a; } + .hero.is-white .tabs a { + color: #0a0a0a; + opacity: 0.9; } + .hero.is-white .tabs a:hover { + opacity: 1; } + .hero.is-white .tabs li.is-active a { + opacity: 1; } + .hero.is-white .tabs.is-boxed a, .hero.is-white .tabs.is-toggle a { + color: #0a0a0a; } + .hero.is-white .tabs.is-boxed a:hover, .hero.is-white .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-white .tabs.is-boxed li.is-active a, .hero.is-white .tabs.is-boxed li.is-active a:hover, .hero.is-white .tabs.is-toggle li.is-active a, .hero.is-white .tabs.is-toggle li.is-active a:hover { + background-color: #0a0a0a; + border-color: #0a0a0a; + color: white; } + .hero.is-white.is-bold { + background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); } + @media screen and (max-width: 768px) { + .hero.is-white.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); } } + .hero.is-black { + background-color: #0a0a0a; + color: white; } + .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-black strong { + color: inherit; } + .hero.is-black .title { + color: white; } + .hero.is-black .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-black .subtitle a:not(.button), + .hero.is-black .subtitle strong { + color: white; } + @media screen and (max-width: 1055px) { + .hero.is-black .navbar-menu { + background-color: #0a0a0a; } } + .hero.is-black .navbar-item, + .hero.is-black .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-black a.navbar-item:hover, .hero.is-black a.navbar-item.is-active, + .hero.is-black .navbar-link:hover, + .hero.is-black .navbar-link.is-active { + background-color: black; + color: white; } + .hero.is-black .tabs a { + color: white; + opacity: 0.9; } + .hero.is-black .tabs a:hover { + opacity: 1; } + .hero.is-black .tabs li.is-active a { + opacity: 1; } + .hero.is-black .tabs.is-boxed a, .hero.is-black .tabs.is-toggle a { + color: white; } + .hero.is-black .tabs.is-boxed a:hover, .hero.is-black .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-black .tabs.is-boxed li.is-active a, .hero.is-black .tabs.is-boxed li.is-active a:hover, .hero.is-black .tabs.is-toggle li.is-active a, .hero.is-black .tabs.is-toggle li.is-active a:hover { + background-color: white; + border-color: white; + color: #0a0a0a; } + .hero.is-black.is-bold { + background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); } + @media screen and (max-width: 768px) { + .hero.is-black.is-bold .navbar-menu { + background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); } } + .hero.is-light { + background-color: whitesmoke; + color: #363636; } + .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-light strong { + color: inherit; } + .hero.is-light .title { + color: #363636; } + .hero.is-light .subtitle { + color: rgba(54, 54, 54, 0.9); } + .hero.is-light .subtitle a:not(.button), + .hero.is-light .subtitle strong { + color: #363636; } + @media screen and (max-width: 1055px) { + .hero.is-light .navbar-menu { + background-color: whitesmoke; } } + .hero.is-light .navbar-item, + .hero.is-light .navbar-link { + color: rgba(54, 54, 54, 0.7); } + .hero.is-light a.navbar-item:hover, .hero.is-light a.navbar-item.is-active, + .hero.is-light .navbar-link:hover, + .hero.is-light .navbar-link.is-active { + background-color: #e8e8e8; + color: #363636; } + .hero.is-light .tabs a { + color: #363636; + opacity: 0.9; } + .hero.is-light .tabs a:hover { + opacity: 1; } + .hero.is-light .tabs li.is-active a { + opacity: 1; } + .hero.is-light .tabs.is-boxed a, .hero.is-light .tabs.is-toggle a { + color: #363636; } + .hero.is-light .tabs.is-boxed a:hover, .hero.is-light .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-light .tabs.is-boxed li.is-active a, .hero.is-light .tabs.is-boxed li.is-active a:hover, .hero.is-light .tabs.is-toggle li.is-active a, .hero.is-light .tabs.is-toggle li.is-active a:hover { + background-color: #363636; + border-color: #363636; + color: whitesmoke; } + .hero.is-light.is-bold { + background-image: linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%); } + @media screen and (max-width: 768px) { + .hero.is-light.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%); } } + .hero.is-dark, .content kbd.hero { + background-color: #363636; + color: whitesmoke; } + .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-dark strong, + .content kbd.hero strong { + color: inherit; } + .hero.is-dark .title, .content kbd.hero .title { + color: whitesmoke; } + .hero.is-dark .subtitle, .content kbd.hero .subtitle { + color: rgba(245, 245, 245, 0.9); } + .hero.is-dark .subtitle a:not(.button), .content kbd.hero .subtitle a:not(.button), + .hero.is-dark .subtitle strong, + .content kbd.hero .subtitle strong { + color: whitesmoke; } + @media screen and (max-width: 1055px) { + .hero.is-dark .navbar-menu, .content kbd.hero .navbar-menu { + background-color: #363636; } } + .hero.is-dark .navbar-item, .content kbd.hero .navbar-item, + .hero.is-dark .navbar-link, + .content kbd.hero .navbar-link { + color: rgba(245, 245, 245, 0.7); } + .hero.is-dark a.navbar-item:hover, .content kbd.hero a.navbar-item:hover, .hero.is-dark a.navbar-item.is-active, .content kbd.hero a.navbar-item.is-active, + .hero.is-dark .navbar-link:hover, + .content kbd.hero .navbar-link:hover, + .hero.is-dark .navbar-link.is-active, + .content kbd.hero .navbar-link.is-active { + background-color: #292929; + color: whitesmoke; } + .hero.is-dark .tabs a, .content kbd.hero .tabs a { + color: whitesmoke; + opacity: 0.9; } + .hero.is-dark .tabs a:hover, .content kbd.hero .tabs a:hover { + opacity: 1; } + .hero.is-dark .tabs li.is-active a, .content kbd.hero .tabs li.is-active a { + opacity: 1; } + .hero.is-dark .tabs.is-boxed a, .content kbd.hero .tabs.is-boxed a, .hero.is-dark .tabs.is-toggle a, .content kbd.hero .tabs.is-toggle a { + color: whitesmoke; } + .hero.is-dark .tabs.is-boxed a:hover, .content kbd.hero .tabs.is-boxed a:hover, .hero.is-dark .tabs.is-toggle a:hover, .content kbd.hero .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-dark .tabs.is-boxed li.is-active a, .content kbd.hero .tabs.is-boxed li.is-active a, .hero.is-dark .tabs.is-boxed li.is-active a:hover, .content kbd.hero .tabs.is-boxed li.is-active a:hover, .hero.is-dark .tabs.is-toggle li.is-active a, .content kbd.hero .tabs.is-toggle li.is-active a, .hero.is-dark .tabs.is-toggle li.is-active a:hover, .content kbd.hero .tabs.is-toggle li.is-active a:hover { + background-color: whitesmoke; + border-color: whitesmoke; + color: #363636; } + .hero.is-dark.is-bold, .content kbd.hero.is-bold { + background-image: linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%); } + @media screen and (max-width: 768px) { + .hero.is-dark.is-bold .navbar-menu, .content kbd.hero.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%); } } + .hero.is-primary, .docstring > section > a.hero.docs-sourcelink { + background-color: #4eb5de; + color: #fff; } + .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), .docstring > section > a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-primary strong, + .docstring > section > a.hero.docs-sourcelink strong { + color: inherit; } + .hero.is-primary .title, .docstring > section > a.hero.docs-sourcelink .title { + color: #fff; } + .hero.is-primary .subtitle, .docstring > section > a.hero.docs-sourcelink .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-primary .subtitle a:not(.button), .docstring > section > a.hero.docs-sourcelink .subtitle a:not(.button), + .hero.is-primary .subtitle strong, + .docstring > section > a.hero.docs-sourcelink .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-primary .navbar-menu, .docstring > section > a.hero.docs-sourcelink .navbar-menu { + background-color: #4eb5de; } } + .hero.is-primary .navbar-item, .docstring > section > a.hero.docs-sourcelink .navbar-item, + .hero.is-primary .navbar-link, + .docstring > section > a.hero.docs-sourcelink .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-primary a.navbar-item:hover, .docstring > section > a.hero.docs-sourcelink a.navbar-item:hover, .hero.is-primary a.navbar-item.is-active, .docstring > section > a.hero.docs-sourcelink a.navbar-item.is-active, + .hero.is-primary .navbar-link:hover, + .docstring > section > a.hero.docs-sourcelink .navbar-link:hover, + .hero.is-primary .navbar-link.is-active, + .docstring > section > a.hero.docs-sourcelink .navbar-link.is-active { + background-color: #39acda; + color: #fff; } + .hero.is-primary .tabs a, .docstring > section > a.hero.docs-sourcelink .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-primary .tabs a:hover, .docstring > section > a.hero.docs-sourcelink .tabs a:hover { + opacity: 1; } + .hero.is-primary .tabs li.is-active a, .docstring > section > a.hero.docs-sourcelink .tabs li.is-active a { + opacity: 1; } + .hero.is-primary .tabs.is-boxed a, .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed a, .hero.is-primary .tabs.is-toggle a, .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle a { + color: #fff; } + .hero.is-primary .tabs.is-boxed a:hover, .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed a:hover, .hero.is-primary .tabs.is-toggle a:hover, .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-primary .tabs.is-boxed li.is-active a, .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed li.is-active a, .hero.is-primary .tabs.is-boxed li.is-active a:hover, .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed li.is-active a:hover, .hero.is-primary .tabs.is-toggle li.is-active a, .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a, .hero.is-primary .tabs.is-toggle li.is-active a:hover, .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #4eb5de; } + .hero.is-primary.is-bold, .docstring > section > a.hero.is-bold.docs-sourcelink { + background-image: linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%); } + @media screen and (max-width: 768px) { + .hero.is-primary.is-bold .navbar-menu, .docstring > section > a.hero.is-bold.docs-sourcelink .navbar-menu { + background-image: linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%); } } + .hero.is-link { + background-color: #2e63b8; + color: #fff; } + .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-link strong { + color: inherit; } + .hero.is-link .title { + color: #fff; } + .hero.is-link .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-link .subtitle a:not(.button), + .hero.is-link .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-link .navbar-menu { + background-color: #2e63b8; } } + .hero.is-link .navbar-item, + .hero.is-link .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-link a.navbar-item:hover, .hero.is-link a.navbar-item.is-active, + .hero.is-link .navbar-link:hover, + .hero.is-link .navbar-link.is-active { + background-color: #2958a4; + color: #fff; } + .hero.is-link .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-link .tabs a:hover { + opacity: 1; } + .hero.is-link .tabs li.is-active a { + opacity: 1; } + .hero.is-link .tabs.is-boxed a, .hero.is-link .tabs.is-toggle a { + color: #fff; } + .hero.is-link .tabs.is-boxed a:hover, .hero.is-link .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-link .tabs.is-boxed li.is-active a, .hero.is-link .tabs.is-boxed li.is-active a:hover, .hero.is-link .tabs.is-toggle li.is-active a, .hero.is-link .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #2e63b8; } + .hero.is-link.is-bold { + background-image: linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%); } + @media screen and (max-width: 768px) { + .hero.is-link.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%); } } + .hero.is-info { + background-color: #209cee; + color: #fff; } + .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-info strong { + color: inherit; } + .hero.is-info .title { + color: #fff; } + .hero.is-info .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-info .subtitle a:not(.button), + .hero.is-info .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-info .navbar-menu { + background-color: #209cee; } } + .hero.is-info .navbar-item, + .hero.is-info .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-info a.navbar-item:hover, .hero.is-info a.navbar-item.is-active, + .hero.is-info .navbar-link:hover, + .hero.is-info .navbar-link.is-active { + background-color: #1190e3; + color: #fff; } + .hero.is-info .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-info .tabs a:hover { + opacity: 1; } + .hero.is-info .tabs li.is-active a { + opacity: 1; } + .hero.is-info .tabs.is-boxed a, .hero.is-info .tabs.is-toggle a { + color: #fff; } + .hero.is-info .tabs.is-boxed a:hover, .hero.is-info .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-info .tabs.is-boxed li.is-active a, .hero.is-info .tabs.is-boxed li.is-active a:hover, .hero.is-info .tabs.is-toggle li.is-active a, .hero.is-info .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #209cee; } + .hero.is-info.is-bold { + background-image: linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%); } + @media screen and (max-width: 768px) { + .hero.is-info.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%); } } + .hero.is-success { + background-color: #22c35b; + color: #fff; } + .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-success strong { + color: inherit; } + .hero.is-success .title { + color: #fff; } + .hero.is-success .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-success .subtitle a:not(.button), + .hero.is-success .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-success .navbar-menu { + background-color: #22c35b; } } + .hero.is-success .navbar-item, + .hero.is-success .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-success a.navbar-item:hover, .hero.is-success a.navbar-item.is-active, + .hero.is-success .navbar-link:hover, + .hero.is-success .navbar-link.is-active { + background-color: #1ead51; + color: #fff; } + .hero.is-success .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-success .tabs a:hover { + opacity: 1; } + .hero.is-success .tabs li.is-active a { + opacity: 1; } + .hero.is-success .tabs.is-boxed a, .hero.is-success .tabs.is-toggle a { + color: #fff; } + .hero.is-success .tabs.is-boxed a:hover, .hero.is-success .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-success .tabs.is-boxed li.is-active a, .hero.is-success .tabs.is-boxed li.is-active a:hover, .hero.is-success .tabs.is-toggle li.is-active a, .hero.is-success .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #22c35b; } + .hero.is-success.is-bold { + background-image: linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%); } + @media screen and (max-width: 768px) { + .hero.is-success.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%); } } + .hero.is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-warning strong { + color: inherit; } + .hero.is-warning .title { + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning .subtitle { + color: rgba(0, 0, 0, 0.9); } + .hero.is-warning .subtitle a:not(.button), + .hero.is-warning .subtitle strong { + color: rgba(0, 0, 0, 0.7); } + @media screen and (max-width: 1055px) { + .hero.is-warning .navbar-menu { + background-color: #ffdd57; } } + .hero.is-warning .navbar-item, + .hero.is-warning .navbar-link { + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning a.navbar-item:hover, .hero.is-warning a.navbar-item.is-active, + .hero.is-warning .navbar-link:hover, + .hero.is-warning .navbar-link.is-active { + background-color: #ffd83e; + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning .tabs a { + color: rgba(0, 0, 0, 0.7); + opacity: 0.9; } + .hero.is-warning .tabs a:hover { + opacity: 1; } + .hero.is-warning .tabs li.is-active a { + opacity: 1; } + .hero.is-warning .tabs.is-boxed a, .hero.is-warning .tabs.is-toggle a { + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning .tabs.is-boxed a:hover, .hero.is-warning .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-warning .tabs.is-boxed li.is-active a, .hero.is-warning .tabs.is-boxed li.is-active a:hover, .hero.is-warning .tabs.is-toggle li.is-active a, .hero.is-warning .tabs.is-toggle li.is-active a:hover { + background-color: rgba(0, 0, 0, 0.7); + border-color: rgba(0, 0, 0, 0.7); + color: #ffdd57; } + .hero.is-warning.is-bold { + background-image: linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%); } + @media screen and (max-width: 768px) { + .hero.is-warning.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%); } } + .hero.is-danger { + background-color: #da0b00; + color: #fff; } + .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-danger strong { + color: inherit; } + .hero.is-danger .title { + color: #fff; } + .hero.is-danger .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-danger .subtitle a:not(.button), + .hero.is-danger .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-danger .navbar-menu { + background-color: #da0b00; } } + .hero.is-danger .navbar-item, + .hero.is-danger .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-danger a.navbar-item:hover, .hero.is-danger a.navbar-item.is-active, + .hero.is-danger .navbar-link:hover, + .hero.is-danger .navbar-link.is-active { + background-color: #c10a00; + color: #fff; } + .hero.is-danger .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-danger .tabs a:hover { + opacity: 1; } + .hero.is-danger .tabs li.is-active a { + opacity: 1; } + .hero.is-danger .tabs.is-boxed a, .hero.is-danger .tabs.is-toggle a { + color: #fff; } + .hero.is-danger .tabs.is-boxed a:hover, .hero.is-danger .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-danger .tabs.is-boxed li.is-active a, .hero.is-danger .tabs.is-boxed li.is-active a:hover, .hero.is-danger .tabs.is-toggle li.is-active a, .hero.is-danger .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #da0b00; } + .hero.is-danger.is-bold { + background-image: linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%); } + @media screen and (max-width: 768px) { + .hero.is-danger.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%); } } + .hero.is-small .hero-body, #documenter .docs-sidebar form.docs-search > input.hero .hero-body { + padding-bottom: 1.5rem; + padding-top: 1.5rem; } + @media screen and (min-width: 769px), print { + .hero.is-medium .hero-body { + padding-bottom: 9rem; + padding-top: 9rem; } } + @media screen and (min-width: 769px), print { + .hero.is-large .hero-body { + padding-bottom: 18rem; + padding-top: 18rem; } } + .hero.is-halfheight .hero-body, .hero.is-fullheight .hero-body, .hero.is-fullheight-with-navbar .hero-body { + align-items: center; + display: flex; } + .hero.is-halfheight .hero-body > .container, .hero.is-fullheight .hero-body > .container, .hero.is-fullheight-with-navbar .hero-body > .container { + flex-grow: 1; + flex-shrink: 1; } + .hero.is-halfheight { + min-height: 50vh; } + .hero.is-fullheight { + min-height: 100vh; } + +.hero-video { + overflow: hidden; } + .hero-video video { + left: 50%; + min-height: 100%; + min-width: 100%; + position: absolute; + top: 50%; + transform: translate3d(-50%, -50%, 0); } + .hero-video.is-transparent { + opacity: 0.3; } + @media screen and (max-width: 768px) { + .hero-video { + display: none; } } + +.hero-buttons { + margin-top: 1.5rem; } + @media screen and (max-width: 768px) { + .hero-buttons .button { + display: flex; } + .hero-buttons .button:not(:last-child) { + margin-bottom: 0.75rem; } } + @media screen and (min-width: 769px), print { + .hero-buttons { + display: flex; + justify-content: center; } + .hero-buttons .button:not(:last-child) { + margin-right: 1.5rem; } } + +.hero-head, +.hero-foot { + flex-grow: 0; + flex-shrink: 0; } + +.hero-body { + flex-grow: 1; + flex-shrink: 0; + padding: 3rem 1.5rem; } + +.section { + padding: 3rem 1.5rem; } + @media screen and (min-width: 1056px) { + .section.is-medium { + padding: 9rem 1.5rem; } + .section.is-large { + padding: 18rem 1.5rem; } } + +.footer { + background-color: #fafafa; + padding: 3rem 1.5rem 6rem; } + +h1 .docs-heading-anchor, h1 .docs-heading-anchor:hover, h1 .docs-heading-anchor:visited, h2 .docs-heading-anchor, h2 .docs-heading-anchor:hover, h2 .docs-heading-anchor:visited, h3 .docs-heading-anchor, h3 .docs-heading-anchor:hover, h3 .docs-heading-anchor:visited, h4 .docs-heading-anchor, h4 .docs-heading-anchor:hover, h4 .docs-heading-anchor:visited, h5 .docs-heading-anchor, h5 .docs-heading-anchor:hover, h5 .docs-heading-anchor:visited, h6 .docs-heading-anchor, h6 .docs-heading-anchor:hover, h6 .docs-heading-anchor:visited { + color: #222222; } + +h1 .docs-heading-anchor-permalink, h2 .docs-heading-anchor-permalink, h3 .docs-heading-anchor-permalink, h4 .docs-heading-anchor-permalink, h5 .docs-heading-anchor-permalink, h6 .docs-heading-anchor-permalink { + visibility: hidden; + vertical-align: middle; + margin-left: 0.5em; + font-size: 0.7rem; } + h1 .docs-heading-anchor-permalink::before, h2 .docs-heading-anchor-permalink::before, h3 .docs-heading-anchor-permalink::before, h4 .docs-heading-anchor-permalink::before, h5 .docs-heading-anchor-permalink::before, h6 .docs-heading-anchor-permalink::before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + content: "\f0c1"; } + +h1:hover .docs-heading-anchor-permalink, h2:hover .docs-heading-anchor-permalink, h3:hover .docs-heading-anchor-permalink, h4:hover .docs-heading-anchor-permalink, h5:hover .docs-heading-anchor-permalink, h6:hover .docs-heading-anchor-permalink { + visibility: visible; } + +.docs-dark-only { + display: none !important; } + +.admonition { + background-color: #b5b5b5; + border-style: solid; + border-width: 1px; + border-color: #363636; + border-radius: 4px; + font-size: 1rem; } + .admonition strong { + color: currentColor; } + .admonition.is-small, #documenter .docs-sidebar form.docs-search > input.admonition { + font-size: 0.75rem; } + .admonition.is-medium { + font-size: 1.25rem; } + .admonition.is-large { + font-size: 1.5rem; } + .admonition.is-default { + background-color: #b5b5b5; + border-color: #363636; } + .admonition.is-default > .admonition-header { + background-color: #363636; + color: #fff; } + .admonition.is-default > .admonition-body { + color: #fff; } + .admonition.is-info { + background-color: #def0fc; + border-color: #209cee; } + .admonition.is-info > .admonition-header { + background-color: #209cee; + color: #fff; } + .admonition.is-info > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-success { + background-color: #bdf4d1; + border-color: #22c35b; } + .admonition.is-success > .admonition-header { + background-color: #22c35b; + color: #fff; } + .admonition.is-success > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-warning { + background-color: #fff3c5; + border-color: #ffdd57; } + .admonition.is-warning > .admonition-header { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .admonition.is-warning > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-danger { + background-color: #ffaba7; + border-color: #da0b00; } + .admonition.is-danger > .admonition-header { + background-color: #da0b00; + color: #fff; } + .admonition.is-danger > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-compat { + background-color: #bdeff5; + border-color: #1db5c9; } + .admonition.is-compat > .admonition-header { + background-color: #1db5c9; + color: #fff; } + .admonition.is-compat > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + +.admonition-header { + color: #fff; + background-color: #363636; + align-items: center; + font-weight: 700; + justify-content: space-between; + line-height: 1.25; + padding: 0.75em; + position: relative; } + .admonition-header:before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + margin-right: 0.75em; + content: "\f06a"; } + +.admonition-body { + color: #222222; + padding: 1em 1.25em; } + .admonition-body pre { + background-color: whitesmoke; } + .admonition-body code { + background-color: rgba(0, 0, 0, 0.05); } + +.docstring { + margin-bottom: 1em; + background-color: transparent; + border: 1px solid #dbdbdb; + box-shadow: 2px 2px 3px rgba(10, 10, 10, 0.1); + max-width: 100%; } + .docstring > header { + display: flex; + flex-grow: 1; + align-items: stretch; + padding: 0.75rem; + background-color: whitesmoke; + box-shadow: 0 1px 2px rgba(10, 10, 10, 0.1); + box-shadow: none; + border-bottom: 1px solid #dbdbdb; } + .docstring > header code { + background-color: transparent; } + .docstring > header .docstring-binding { + margin-right: 0.3em; } + .docstring > header .docstring-category { + margin-left: 0.3em; } + .docstring > section { + position: relative; + padding: 1rem 1.25rem; + border-bottom: 1px solid #dbdbdb; } + .docstring > section:last-child { + border-bottom: none; } + .docstring > section > a.docs-sourcelink { + transition: opacity 0.3s; + opacity: 0; + position: absolute; + right: 0.625rem; + bottom: 0.5rem; } + .docstring:hover > section > a.docs-sourcelink { + opacity: 0.2; } + .docstring > section:hover a.docs-sourcelink { + opacity: 1; } + +.documenter-example-output { + background-color: white; } + +.outdated-warning-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); + z-index: 999; + background-color: #ffaba7; + color: rgba(0, 0, 0, 0.7); + border-bottom: 3px solid #da0b00; + padding: 10px 35px; + text-align: center; + font-size: 15px; } + .outdated-warning-overlay .outdated-warning-closer { + position: absolute; + top: calc(50% - 10px); + right: 18px; + cursor: pointer; + width: 12px; } + .outdated-warning-overlay a { + color: #2e63b8; } + .outdated-warning-overlay a:hover { + color: #363636; } + +.content pre { + border: 1px solid #dbdbdb; } + +.content code { + font-weight: inherit; } + +.content a code { + color: #2e63b8; } + +.content h1 code, .content h2 code, .content h3 code, .content h4 code, .content h5 code, .content h6 code { + color: #222222; } + +.content table { + display: block; + width: initial; + max-width: 100%; + overflow-x: auto; } + +.content blockquote > ul:first-child, .content blockquote > ol:first-child, .content .admonition-body > ul:first-child, .content .admonition-body > ol:first-child { + margin-top: 0; } + +pre, code { + font-variant-ligatures: no-contextual; } + +.breadcrumb a.is-disabled { + cursor: default; + pointer-events: none; } + .breadcrumb a.is-disabled, .breadcrumb a.is-disabled:hover { + color: #222222; } + +.hljs { + background: initial !important; + padding: initial !important; } + +.katex .katex-mathml { + top: 0; + right: 0; } + +.katex-display, mjx-container, .MathJax_Display { + margin: 0.5em 0 !important; } + +html { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; } + +/* This file contain the overall layout. + * + * The main container is
    that is identified by id #documenter. + */ +#documenter .docs-main > article { + overflow-wrap: break-word; } + #documenter .docs-main > article .math-container { + overflow-x: auto; + overflow-y: hidden; } + +@media screen and (min-width: 1056px) { + #documenter .docs-main { + max-width: 52rem; + margin-left: 20rem; + padding-right: 1rem; } } + +@media screen and (max-width: 1055px) { + #documenter .docs-main { + width: 100%; } + #documenter .docs-main > article { + max-width: 52rem; + margin-left: auto; + margin-right: auto; + margin-bottom: 1rem; + padding: 0 1rem; } + #documenter .docs-main > header, #documenter .docs-main > nav { + max-width: 100%; + width: 100%; + margin: 0; } } + +#documenter .docs-main header.docs-navbar { + background-color: white; + border-bottom: 1px solid #dbdbdb; + z-index: 2; + min-height: 4rem; + margin-bottom: 1rem; + display: flex; } + #documenter .docs-main header.docs-navbar .breadcrumb { + flex-grow: 1; } + #documenter .docs-main header.docs-navbar .docs-right { + display: flex; + white-space: nowrap; } + #documenter .docs-main header.docs-navbar .docs-right .docs-icon, #documenter .docs-main header.docs-navbar .docs-right .docs-label, #documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button { + display: inline-block; } + #documenter .docs-main header.docs-navbar .docs-right .docs-label { + padding: 0; + margin-left: 0.3em; } + #documenter .docs-main header.docs-navbar .docs-right .docs-settings-button { + margin: auto 0 auto 1rem; } + #documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button { + font-size: 1.5rem; + margin: auto 0 auto 1rem; } + #documenter .docs-main header.docs-navbar > * { + margin: auto 0; } + @media screen and (max-width: 1055px) { + #documenter .docs-main header.docs-navbar { + position: sticky; + top: 0; + padding: 0 1rem; + /* For Headroom.js */ + transition-property: top, box-shadow; + -webkit-transition-property: top, box-shadow; + /* Safari */ + transition-duration: 0.3s; + -webkit-transition-duration: 0.3s; + /* Safari */ } + #documenter .docs-main header.docs-navbar.headroom--not-top { + box-shadow: 0.2rem 0rem 0.4rem #bbb; + transition-duration: 0.7s; + -webkit-transition-duration: 0.7s; + /* Safari */ } + #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom { + top: -4.5rem; + transition-duration: 0.7s; + -webkit-transition-duration: 0.7s; + /* Safari */ } } + +#documenter .docs-main section.footnotes { + border-top: 1px solid #dbdbdb; } + #documenter .docs-main section.footnotes li .tag:first-child, #documenter .docs-main section.footnotes li .docstring > section > a.docs-sourcelink:first-child, #documenter .docs-main section.footnotes li .content kbd:first-child, .content #documenter .docs-main section.footnotes li kbd:first-child { + margin-right: 1em; + margin-bottom: 0.4em; } + +#documenter .docs-main .docs-footer { + display: flex; + flex-wrap: wrap; + margin-left: 0; + margin-right: 0; + border-top: 1px solid #dbdbdb; + padding-top: 1rem; + padding-bottom: 1rem; } + @media screen and (max-width: 1055px) { + #documenter .docs-main .docs-footer { + padding-left: 1rem; + padding-right: 1rem; } } + #documenter .docs-main .docs-footer .docs-footer-nextpage, #documenter .docs-main .docs-footer .docs-footer-prevpage { + flex-grow: 1; } + #documenter .docs-main .docs-footer .docs-footer-nextpage { + text-align: right; } + #documenter .docs-main .docs-footer .flexbox-break { + flex-basis: 100%; + height: 0; } + #documenter .docs-main .docs-footer .footer-message { + font-size: 0.8em; + margin: 0.5em auto 0 auto; + text-align: center; } + +#documenter .docs-sidebar { + display: flex; + flex-direction: column; + color: #0a0a0a; + background-color: whitesmoke; + border-right: 1px solid #dbdbdb; + padding: 0; + flex: 0 0 18rem; + z-index: 5; + font-size: 1rem; + position: fixed; + left: -18rem; + width: 18rem; + height: 100%; + transition: left 0.3s; + /* Setting up a nicer theme style for the scrollbar */ } + #documenter .docs-sidebar.visible { + left: 0; + box-shadow: 0.4rem 0rem 0.8rem #bbb; } + @media screen and (min-width: 1056px) { + #documenter .docs-sidebar.visible { + box-shadow: none; } } + @media screen and (min-width: 1056px) { + #documenter .docs-sidebar { + left: 0; + top: 0; } } + #documenter .docs-sidebar .docs-logo { + margin-top: 1rem; + padding: 0 1rem; } + #documenter .docs-sidebar .docs-logo > img { + max-height: 6rem; + margin: auto; } + #documenter .docs-sidebar .docs-package-name { + flex-shrink: 0; + font-size: 1.5rem; + font-weight: 700; + text-align: center; + white-space: nowrap; + overflow: hidden; + padding: 0.5rem 0; } + #documenter .docs-sidebar .docs-package-name .docs-autofit { + max-width: 16.2rem; } + #documenter .docs-sidebar .docs-package-name a, #documenter .docs-sidebar .docs-package-name a:hover { + color: #0a0a0a; } + #documenter .docs-sidebar .docs-version-selector { + border-top: 1px solid #dbdbdb; + display: none; + padding: 0.5rem; } + #documenter .docs-sidebar .docs-version-selector.visible { + display: flex; } + #documenter .docs-sidebar ul.docs-menu { + flex-grow: 1; + user-select: none; + border-top: 1px solid #dbdbdb; + padding-bottom: 1.5rem; + /* Managing collapsible submenus */ } + #documenter .docs-sidebar ul.docs-menu > li > .tocitem { + font-weight: bold; } + #documenter .docs-sidebar ul.docs-menu > li li { + font-size: 0.95rem; + margin-left: 1em; + border-left: 1px solid #dbdbdb; } + #documenter .docs-sidebar ul.docs-menu input.collapse-toggle { + display: none; } + #documenter .docs-sidebar ul.docs-menu ul.collapsed { + display: none; } + #documenter .docs-sidebar ul.docs-menu input:checked ~ ul.collapsed { + display: block; } + #documenter .docs-sidebar ul.docs-menu label.tocitem { + display: flex; } + #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label { + flex-grow: 2; } + #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron { + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + line-height: 1; + font-size: 0.75rem; + margin-left: 1rem; + margin-top: auto; + margin-bottom: auto; } + #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + content: "\f054"; } + #documenter .docs-sidebar ul.docs-menu input:checked ~ label.tocitem .docs-chevron::before { + content: "\f078"; } + #documenter .docs-sidebar ul.docs-menu .tocitem { + display: block; + padding: 0.5rem 0.5rem; } + #documenter .docs-sidebar ul.docs-menu .tocitem, #documenter .docs-sidebar ul.docs-menu .tocitem:hover { + color: #0a0a0a; + background: whitesmoke; } + #documenter .docs-sidebar ul.docs-menu a.tocitem:hover, #documenter .docs-sidebar ul.docs-menu label.tocitem:hover { + color: #0a0a0a; + background-color: #ebebeb; } + #documenter .docs-sidebar ul.docs-menu li.is-active { + border-top: 1px solid #dbdbdb; + border-bottom: 1px solid #dbdbdb; + background-color: white; } + #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem, #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover { + background-color: white; + color: #0a0a0a; } + #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover { + background-color: #ebebeb; + color: #0a0a0a; } + #documenter .docs-sidebar ul.docs-menu > li.is-active:first-child { + border-top: none; } + #documenter .docs-sidebar ul.docs-menu ul.internal { + margin: 0 0.5rem 0.5rem; + border-top: 1px solid #dbdbdb; } + #documenter .docs-sidebar ul.docs-menu ul.internal li { + font-size: 0.85rem; + border-left: none; + margin-left: 0; + margin-top: 0.5rem; } + #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem { + width: 100%; + padding: 0; } + #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before { + content: "⚬"; + margin-right: 0.4em; } + #documenter .docs-sidebar form.docs-search { + margin: auto; + margin-top: 0.5rem; + margin-bottom: 0.5rem; } + #documenter .docs-sidebar form.docs-search > input { + width: 14.4rem; } + @media screen and (min-width: 1056px) { + #documenter .docs-sidebar ul.docs-menu { + overflow-y: auto; + -webkit-overflow-scroll: touch; } + #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar { + width: .3rem; + background: none; } + #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb { + border-radius: 5px 0px 0px 5px; + background: #e0e0e0; } + #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover { + background: #cccccc; } } + @media screen and (max-width: 1055px) { + #documenter .docs-sidebar { + overflow-y: auto; + -webkit-overflow-scroll: touch; } + #documenter .docs-sidebar::-webkit-scrollbar { + width: .3rem; + background: none; } + #documenter .docs-sidebar::-webkit-scrollbar-thumb { + border-radius: 5px 0px 0px 5px; + background: #e0e0e0; } + #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover { + background: #cccccc; } } + +#documenter .docs-main #documenter-search-info { + margin-bottom: 1rem; } + +#documenter .docs-main #documenter-search-results { + list-style-type: circle; + list-style-position: outside; } + #documenter .docs-main #documenter-search-results li { + margin-left: 2rem; } + #documenter .docs-main #documenter-search-results .docs-highlight { + background-color: yellow; } + +.ansi span.sgr1 { + font-weight: bolder; } + +.ansi span.sgr2 { + font-weight: lighter; } + +.ansi span.sgr3 { + font-style: italic; } + +.ansi span.sgr4 { + text-decoration: underline; } + +.ansi span.sgr7 { + color: white; + background-color: #222222; } + +.ansi span.sgr8 { + color: transparent; } + .ansi span.sgr8 span { + color: transparent; } + +.ansi span.sgr9 { + text-decoration: line-through; } + +.ansi span.sgr30 { + color: #242424; } + +.ansi span.sgr31 { + color: #a7201f; } + +.ansi span.sgr32 { + color: #066f00; } + +.ansi span.sgr33 { + color: #856b00; } + +.ansi span.sgr34 { + color: #2149b0; } + +.ansi span.sgr35 { + color: #7d4498; } + +.ansi span.sgr36 { + color: #007989; } + +.ansi span.sgr37 { + color: #8f8f8f; } + +.ansi span.sgr40 { + background-color: #242424; } + +.ansi span.sgr41 { + background-color: #a7201f; } + +.ansi span.sgr42 { + background-color: #066f00; } + +.ansi span.sgr43 { + background-color: #856b00; } + +.ansi span.sgr44 { + background-color: #2149b0; } + +.ansi span.sgr45 { + background-color: #7d4498; } + +.ansi span.sgr46 { + background-color: #007989; } + +.ansi span.sgr47 { + background-color: #8f8f8f; } + +.ansi span.sgr90 { + color: #707070; } + +.ansi span.sgr91 { + color: #cb3c33; } + +.ansi span.sgr92 { + color: #0e8300; } + +.ansi span.sgr93 { + color: #a98800; } + +.ansi span.sgr94 { + color: #3c5dcd; } + +.ansi span.sgr95 { + color: #9256af; } + +.ansi span.sgr96 { + color: #008fa3; } + +.ansi span.sgr97 { + color: whitesmoke; } + +.ansi span.sgr100 { + background-color: #707070; } + +.ansi span.sgr101 { + background-color: #cb3c33; } + +.ansi span.sgr102 { + background-color: #0e8300; } + +.ansi span.sgr103 { + background-color: #a98800; } + +.ansi span.sgr104 { + background-color: #3c5dcd; } + +.ansi span.sgr105 { + background-color: #9256af; } + +.ansi span.sgr106 { + background-color: #008fa3; } + +.ansi span.sgr107 { + background-color: whitesmoke; } + +code.language-julia-repl > span.hljs-meta { + color: #066f00; + font-weight: bolder; } + +/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/ +/* +This is left on purpose making default.css the single file that can be lifted +as-is from the repository directly without the need for a build step + +Typically this "required" baseline CSS is added by `makestuff.js` during build. +*/ +pre code.hljs { + display: block; + overflow-x: auto; + padding: 1em; } + +code.hljs { + padding: 3px 5px; } + +/* end baseline CSS */ +.hljs { + background: #F0F0F0; + color: #444; } + +/* Base color: saturation 0; */ +.hljs-subst { + /* default */ } + +/* purposely ignored */ +.hljs-comment { + color: #888888; } + +.hljs-tag, +.hljs-punctuation { + color: #444a; } + +.hljs-tag .hljs-name, +.hljs-tag .hljs-attr { + color: #444; } + +.hljs-keyword, +.hljs-attribute, +.hljs-selector-tag, +.hljs-meta .hljs-keyword, +.hljs-doctag, +.hljs-name { + font-weight: bold; } + +/* User color: hue: 0 */ +.hljs-type, +.hljs-string, +.hljs-number, +.hljs-selector-id, +.hljs-selector-class, +.hljs-quote, +.hljs-template-tag, +.hljs-deletion { + color: #880000; } + +.hljs-title, +.hljs-section { + color: #880000; + font-weight: bold; } + +.hljs-regexp, +.hljs-symbol, +.hljs-variable, +.hljs-template-variable, +.hljs-link, +.hljs-selector-attr, +.hljs-operator, +.hljs-selector-pseudo { + color: #BC6060; } + +/* Language color: hue: 90; */ +.hljs-literal { + color: #78A960; } + +.hljs-built_in, +.hljs-bullet, +.hljs-code, +.hljs-addition { + color: #397300; } + +/* Meta color: hue: 200 */ +.hljs-meta { + color: #1f7199; } + +.hljs-meta .hljs-string { + color: #4d99bf; } + +/* Misc effects */ +.hljs-emphasis { + font-style: italic; } + +.hljs-strong { + font-weight: bold; } diff --git a/docs/build/assets/themeswap.js b/docs/build/assets/themeswap.js new file mode 100644 index 00000000..c58e993e --- /dev/null +++ b/docs/build/assets/themeswap.js @@ -0,0 +1,66 @@ +// Small function to quickly swap out themes. Gets put into the tag.. +function set_theme_from_local_storage() { + // Intialize the theme to null, which means default + var theme = null; + // If the browser supports the localstorage and is not disabled then try to get the + // documenter theme + if(window.localStorage != null) { + // Get the user-picked theme from localStorage. May be `null`, which means the default + // theme. + theme = window.localStorage.getItem("documenter-theme"); + } + // Check if the browser supports user color preference + var darkPreference = false; + // Check if the users preference is for dark color scheme + if(window.matchMedia('(prefers-color-scheme: dark)').matches === true) { + darkPreference = true; + } + // Initialize a few variables for the loop: + // + // - active: will contain the index of the theme that should be active. Note that there + // is no guarantee that localStorage contains sane values. If `active` stays `null` + // we either could not find the theme or it is the default (primary) theme anyway. + // Either way, we then need to stick to the primary theme. + // + // - disabled: style sheets that should be disabled (i.e. all the theme style sheets + // that are not the currently active theme) + var active = null; var disabled = []; var darkTheme = null; + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + // The tag of each style sheet is expected to have a data-theme-name attribute + // which must contain the name of the theme. The names in localStorage much match this. + var themename = ss.ownerNode.getAttribute("data-theme-name"); + // attribute not set => non-theme stylesheet => ignore + if(themename === null) continue; + // To distinguish the default (primary) theme, it needs to have the data-theme-primary + // attribute set. + var isprimary = (ss.ownerNode.getAttribute("data-theme-primary") !== null); + // Check if the theme is primary dark theme + var isDarkTheme = (ss.ownerNode.getAttribute("data-theme-primary-dark") !== null); + // If ss is for dark theme then set the value of darkTheme to the name of the theme + if(isDarkTheme) darkTheme = themename; + // If we find a matching theme (and it's not the default), we'll set active to non-null + if(themename === theme) active = i; + // Store the style sheets of inactive themes so that we could disable them + if(themename !== theme) disabled.push(ss); + } + if(active !== null) { + // If we did find an active theme, we'll (1) add the theme--$(theme) class to + document.getElementsByTagName('html')[0].className = "theme--" + theme; + // and (2) disable all the other theme stylesheets + disabled.forEach(function(ss){ + ss.disabled = true; + }); + } + else if(darkTheme !== null && darkPreference === true) { + // If we did find an active theme, we'll (1) add the theme--$(theme) class to + document.getElementsByTagName('html')[0].className = "theme--" + darkTheme; + // and (2) disable all the other theme stylesheets + disabled.forEach(function(ss){ + if (ss.ownerNode.getAttribute("data-theme-name") !== darkTheme) { + ss.disabled = true; + } + }); + } +} +set_theme_from_local_storage(); diff --git a/docs/build/assets/warner.js b/docs/build/assets/warner.js new file mode 100644 index 00000000..e8184822 --- /dev/null +++ b/docs/build/assets/warner.js @@ -0,0 +1,49 @@ +function maybeAddWarning () { + // DOCUMENTER_NEWEST is defined in versions.js, DOCUMENTER_CURRENT_VERSION and DOCUMENTER_STABLE + // in siteinfo.js. + // If either of these are undefined something went horribly wrong, so we abort. + if ( + window.DOCUMENTER_NEWEST === undefined || + window.DOCUMENTER_CURRENT_VERSION === undefined || + window.DOCUMENTER_STABLE === undefined + ) { + return + }; + + // Current version is not a version number, so we can't tell if it's the newest version. Abort. + if (!/v(\d+\.)*\d+/.test(window.DOCUMENTER_CURRENT_VERSION)) { + return + }; + + // Current version is newest version, so no need to add a warning. + if (window.DOCUMENTER_NEWEST === window.DOCUMENTER_CURRENT_VERSION) { + return + }; + + // Add a noindex meta tag (unless one exists) so that search engines don't index this version of the docs. + if (document.body.querySelector('meta[name="robots"]') === null) { + const meta = document.createElement('meta'); + meta.name = 'robots'; + meta.content = 'noindex'; + + document.getElementsByTagName('head')[0].appendChild(meta); + }; + + const div = document.createElement('div'); + div.classList.add('outdated-warning-overlay'); + const closer = document.createElement('button'); + closer.classList.add('outdated-warning-closer', 'delete'); + closer.addEventListener('click', function () { + document.body.removeChild(div); + }); + const href = window.documenterBaseURL + '/../' + window.DOCUMENTER_STABLE; + div.innerHTML = 'This documentation is not for the latest version.
    Go to the latest documentation.'; + div.appendChild(closer); + document.body.appendChild(div); +}; + +if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', maybeAddWarning); +} else { + maybeAddWarning(); +}; diff --git a/docs/build/basis/index.html b/docs/build/basis/index.html new file mode 100644 index 00000000..be1c83a1 --- /dev/null +++ b/docs/build/basis/index.html @@ -0,0 +1,90 @@ + +Basis Sets · Quiqbox.jl

    Basis Sets

    The procedure to construct a basis set can be fundamentally broken down into several basic steps: first, choose a set of (tunable) parameters, and build the Gaussian functions around those parameters, then the basis functions around the Gaussian functions, finally the basis set.

    The data structure formularized by Quiqbox in each step, namely the level of data complexity, can be summarized in the following table.

    levelobjectiveproduct examplesabstract typetype instances
    4basis setArray of basis functions (with reusable integrals)Array, GTBasisArray{<:BasisFunc, 1}...
    3basis functionssingle or linear combination of Gaussian functionsFloatingGTBasisFuncBasisFunc{:S, 1}, BasisFuncs{:P, 3, 3}...
    2Gaussian functions(primitive) Gaussian functionsAbstractGaussFuncGaussFunc
    1a pool of parameterscenter coordinates, function coefficientsParamBoxParamBox{:xpn, Float64}...

    Depending on how much control the user wants to have over each step, Quiqbox provides several methods of related functions to leave the user with the freedom to balance between efficiency and customizability.

    Below are some examples from the simplest way to relatively more flexible ways to construct a basis set in Quiqbox. Hopefully these use cases can also work as inspirations for more creative ways to manipulate basis sets.

    Basis Set Construction

    Constructing basis sets from existed basis sets

    First, you can create a basis set at one coordinate by input the Vector of its center coordinate and a Tuple of its name and corresponding atom in String.


    julia> bsO = Quiqbox.genBasisFunc([0,0,0], ("STO-3G", "O"))3-element Vector{Quiqbox.FloatingGTBasisFunc}: + BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0] + BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0] + BasisFuncs{:P, 3, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0]

    Notice that in the above result there are 2 types of structs in the returned Vector: BasisFunc and BasisFuncs. BasisFunc is the most basic type to hold the data of a basis function; BasisFuncs is very similar except it may hold multiple orbitals with only the spherical harmonics $Y_{ml}$ being different when the orbital angular momentum $l>0$.

    Unit System

    Hartree atomic units are the unit system used in Quiqbox.

    If you want to postpone the specification of the center, you can replace the 1st argument with missing, and then use function assignCenter! to assign the coordinates later.

    julia> bsO = genBasisFunc(missing, ("STO-3G", "O"))3-element Vector{Quiqbox.FloatingGTBasisFunc}:
    + BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][NaN, NaN, NaN]
    + BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][NaN, NaN, NaN]
    + BasisFuncs{:P, 3, 3}(gauss, subshell, center)[3/3][NaN, NaN, NaN]
    julia> assignCenter!([0,0,0], bsO[1]);
    julia> bsO3-element Vector{Quiqbox.FloatingGTBasisFunc}: + BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0] + BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][NaN, NaN, NaN] + BasisFuncs{:P, 3, 3}(gauss, subshell, center)[3/3][NaN, NaN, NaN]
    julia> assignCenter!.(Ref([0,0,0]), bsO[2:end])2-element Vector{Tuple{ParamBox{:X, Float64}, ParamBox{:Y, Float64}, ParamBox{:Z, Float64}}}: + (ParamBox{:X, Float64}(0.0)[X][∂], ParamBox{:Y, Float64}(0.0)[Y][∂], ParamBox{:Z, Float64}(0.0)[Z][∂]) + (ParamBox{:X, Float64}(0.0)[X][∂], ParamBox{:Y, Float64}(0.0)[Y][∂], ParamBox{:Z, Float64}(0.0)[Z][∂])

    If you omit the atom in the arguments, H will be set in default. Notice that even there's only 1 single basis function in H's STO-3G basis set, the returned value is still in Array type.

    julia> bsH_1 = genBasisFunc([-0.5, 0, 0], "STO-3G")1-element Vector{Quiqbox.FloatingGTBasisFunc}:
    + BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][-0.5, 0.0, 0.0]
    julia> bsH_2 = genBasisFunc([ 0.5, 0, 0], "STO-3G")1-element Vector{Quiqbox.FloatingGTBasisFunc}: + BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.5, 0.0, 0.0]

    Finally, you can use Quiqbox's included tool function flatten to merge the three atomic basis set into one molecular basis set:

    julia> bsH20 = [bsO, bsH_1, bsH_2] |> flatten5-element Vector{Quiqbox.FloatingGTBasisFunc{Subshell, 3, OrbitalN} where {Subshell, OrbitalN}}:
    + BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]
    + BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]
    + BasisFuncs{:P, 3, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0]
    + BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][-0.5, 0.0, 0.0]
    + BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.5, 0.0, 0.0]

    Not simple enough? Here's a more compact way of realizing the above steps if you are familiar with some syntactic sugars in Julia:

    julia> cens = [[0,0,0], [-0.5,0,0], [0.5,0,0]]3-element Vector{Vector{Float64}}:
    + [0.0, 0.0, 0.0]
    + [-0.5, 0.0, 0.0]
    + [0.5, 0.0, 0.0]
    julia> bsH20_2 = genBasisFunc.(cens, [("STO-3G", "O"), fill("STO-3G", 2)...]) |> flatten5-element Vector{Quiqbox.FloatingGTBasisFunc{Subshell, 3, OrbitalN} where {Subshell, OrbitalN}}: + BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0] + BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0] + BasisFuncs{:P, 3, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0] + BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][-0.5, 0.0, 0.0] + BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.5, 0.0, 0.0]

    In quiqbox, the user can often deal with several multi-layer containers (mainly structs), it might be easy to get lost or uncertain that whether we are creating the objects intended. Quiqbox provides another tool function hasEqual that lets you compare if two objects hold the same data and structure. For example, if we want to see whether bsH20_2 created in the faster way is same (not identical) as bsH20, we can verify it as follows:

    julia> hasEqual(bsH20, bsH20_2)true

    If the basis set you want to use doesn't exist in Quiqbox's library, you can use Function genBFuncsFromText to generate the basis set from a Gaussian formatted String:

    julia> genBasisFunc(missing, ("6-31G", "Kr"))ERROR: KeyError: key "Kr" not found
    julia> # Data from https://www.basissetexchange.org + txt_Kr_631G = """ + Kr 0 + S 6 1.00 + 0.1205524000D+06 0.1714050000D-02 + 0.1810225000D+05 0.1313805000D-01 + 0.4124126000D+04 0.6490006000D-01 + 0.1163472000D+04 0.2265185000D+00 + 0.3734612000D+03 0.4764961000D+00 + 0.1280897000D+03 0.3591952000D+00 + SP 6 1.00 + 0.2634681000D+04 0.2225111000D-02 0.3761911000D-02 + 0.6284533000D+03 0.2971122000D-01 0.2977531000D-01 + 0.2047081000D+03 0.1253926000D+00 0.1311878000D+00 + 0.7790827000D+02 0.1947058000D-02 0.3425019000D+00 + 0.3213816000D+02 -0.5987388000D+00 0.4644938000D+00 + 0.1341845000D+02 -0.4958972000D+00 0.2087284000D+00 + SP 6 1.00 + 0.1175107000D+03 -0.6157662000D-02 -0.6922855000D-02 + 0.4152553000D+02 0.5464841000D-01 -0.3069239000D-01 + 0.1765290000D+02 0.2706994000D+00 0.4480260000D-01 + 0.7818313000D+01 -0.1426136000D+00 0.3636775000D+00 + 0.3571775000D+01 -0.7216781000D+00 0.4952412000D+00 + 0.1623750000D+01 -0.3412008000D+00 0.2086340000D+00 + SP 3 1.00 + 0.2374560000D+01 0.3251184000D+00 -0.3009554000D-01 + 0.8691930000D+00 -0.2141533000D+00 0.3598893000D+00 + 0.3474730000D+00 -0.9755083000D+00 0.7103098000D+00 + SP 1 1.00 + 0.1264790000D+00 0.1000000000D+01 0.1000000000D+01 + D 3 1.00 + 0.6853888000D+02 0.7530705000D-01 + 0.1914333000D+02 0.3673551000D+00 + 0.6251213000D+01 0.7120146000D+00 + D 1 1.00 + 0.1979236000D+01 1.0000000 + """;
    julia> genBFuncsFromText(txt_Kr_631G, adjustContent=true)11-element Vector{Quiqbox.FloatingGTBasisFunc}: + BasisFunc{:S, 6}(gauss, subshell, center)[X⁰Y⁰Z⁰][NaN, NaN, NaN] + BasisFunc{:S, 6}(gauss, subshell, center)[X⁰Y⁰Z⁰][NaN, NaN, NaN] + BasisFuncs{:P, 6, 3}(gauss, subshell, center)[3/3][NaN, NaN, NaN] + BasisFunc{:S, 6}(gauss, subshell, center)[X⁰Y⁰Z⁰][NaN, NaN, NaN] + BasisFuncs{:P, 6, 3}(gauss, subshell, center)[3/3][NaN, NaN, NaN] + BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][NaN, NaN, NaN] + BasisFuncs{:P, 3, 3}(gauss, subshell, center)[3/3][NaN, NaN, NaN] + BasisFunc{:S, 1}(gauss, subshell, center)[X⁰Y⁰Z⁰][NaN, NaN, NaN] + BasisFuncs{:P, 1, 3}(gauss, subshell, center)[3/3][NaN, NaN, NaN] + BasisFuncs{:D, 3, 6}(gauss, subshell, center)[6/6][NaN, NaN, NaN] + BasisFuncs{:D, 1, 6}(gauss, subshell, center)[6/6][NaN, NaN, NaN]

    Constructing basis sets from GaussFunc

    If you want to specify the parameters of each Gaussian function when constructing a basis set, you can first construct the container for Gaussian functions: GaussFunc, and then build the basis function upon them:


    julia> gf1 = GaussFunc(2.0, 1.0)GaussFunc(xpn=ParamBox{:α, Float64}(2.0)[α][∂], con=ParamBox{:d, Float64}(1.0)[d][∂])
    julia> gf2 = GaussFunc(2.5, 0.75)GaussFunc(xpn=ParamBox{:α, Float64}(2.5)[α][∂], con=ParamBox{:d, Float64}(0.75)[d][∂])
    julia> bf1 = genBasisFunc([1.0,0,0], [gf1, gf2])BasisFunc{:S, 2}(gauss, subshell, center)[X⁰Y⁰Z⁰][1.0, 0.0, 0.0]

    Unlike BasisFunc there's no proprietary function for it, you simply input the exponent coefficient and the contraction coefficient as the 1st and 2nd arguments respectively to its default constructor. As for the method of genBasisFunc in this case, the default subshell is set to be "S" as the optional 3rd argument, but you can construct a BasisFuncs which contains all the orbitals within a specified one:

    julia> bf2 = genBasisFunc([1.0,0,0], [gf1, gf2], "P")BasisFuncs{:P, 2, 3}(gauss, subshell, center)[3/3][1.0, 0.0, 0.0]

    You can even choose one or a few orbitals to keep by indicting them using a 3-element Array of the Cartesian representation:

    julia> bf3 = genBasisFunc([1.0,0,0], [gf1, gf2], [1,0,0])BasisFunc{:P, 2}(gauss, subshell, center)[X¹Y⁰Z⁰][1.0, 0.0, 0.0]
    julia> bf4 = genBasisFunc([1.0,0,0], [gf1, gf2], [[1,0,0], [0,0,1]])BasisFuncs{:P, 2, 2}(gauss, subshell, center)[2/3][1.0, 0.0, 0.0]

    Again, if you want a faster solution, you can also directly define the 2 GaussFunc parameter(s) in a 2-element Tuple as the 2nd argument for genBasisFunc:

    julia> bf5 = genBasisFunc([1.0,0,0], ([2.0, 2.5], [1.0, 0.75]), [[1,0,0], [0,0,1]])BasisFuncs{:P, 2, 2}(gauss, subshell, center)[2/3][1.0, 0.0, 0.0]
    julia> hasEqual(bf4, bf5)true

    Constructing basis sets based on ParamBox

    Sometimes you may want the parameters of basis functions (or GaussFunc) to be under some constrains (which can be crucial for the later basis set optimization), this is when you need a deeper level of control over the parameters, through its direct container: ParamBox. In fact, in the above example we have already had an glimpse on it through the printed info in the REPL:

    julia> gf1GaussFunc(xpn=ParamBox{:α, Float64}(2.0)[α][∂], con=ParamBox{:d, Float64}(1.0)[d][∂])

    the 2 fields of a GaussFunc, .xpn and .con are in fact ParamBox, and the actual value of them can be accessed through syntax []:

    julia> gf1.xpnParamBox{:α, Float64}(2.0)[α][∂]
    julia> gf1.conParamBox{:d, Float64}(1.0)[d][∂]
    julia> gf1.xpn[]2.0
    julia> gf1.con[]1.0

    Since the data are not directly stored as primitive types but rather inside struct ParamBox, this allows the direct assignment or shallow copy of them to not create new data with same values, but bindings to the original objects:

    julia> gf3 = GaussFunc(1.1, 1)GaussFunc(xpn=ParamBox{:α, Float64}(1.1)[α][∂], con=ParamBox{:d, Float64}(1.0)[d][∂])
    julia> # Direct assignment + gf3_2 = gf3GaussFunc(xpn=ParamBox{:α, Float64}(1.1)[α][∂], con=ParamBox{:d, Float64}(1.0)[d][∂])
    julia> gf3.xpn[] *= 22.2
    julia> gf3GaussFunc(xpn=ParamBox{:α, Float64}(2.2)[α][∂], con=ParamBox{:d, Float64}(1.0)[d][∂])
    julia> gf3_2GaussFunc(xpn=ParamBox{:α, Float64}(2.2)[α][∂], con=ParamBox{:d, Float64}(1.0)[d][∂])
    julia> # Shallow copy: `fill` + bf6 = genBasisFunc([1,0,0], fill(gf3, 2))BasisFunc{:S, 2}(gauss, subshell, center)[X⁰Y⁰Z⁰][1.0, 0.0, 0.0]
    julia> bf6.gauss(GaussFunc(xpn=ParamBox{:α, Float64}(2.2)[α][∂], con=ParamBox{:d, Float64}(1.0)[d][∂]), GaussFunc(xpn=ParamBox{:α, Float64}(2.2)[α][∂], con=ParamBox{:d, Float64}(1.0)[d][∂]))
    julia> bf6.gauss[1].xpn[] = 1.11.1
    julia> gf3_2.xpn[] == gf3.xpn[] == bf6.gauss[2].xpn[] == 1.1true

    Based on such trait in Julia, you can, for instance, create a basis set that enforces all the GaussFuncs have the identical parameters:

    julia> gf4 = GaussFunc(2.5, 0.5)GaussFunc(xpn=ParamBox{:α, Float64}(2.5)[α][∂], con=ParamBox{:d, Float64}(0.5)[d][∂])
    julia> bs7 = genBasisFunc.([rand(3) for _=1:2], Ref(gf4))2-element Vector{BasisFunc{:S, 1}}: + BasisFunc{:S, 1}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.6635945027, 0.8925858082, 0.2862022664] + BasisFunc{:S, 1}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.1215054095, 0.2330035984, 0.04466090991]
    julia> uniqueParams!(bs7)8-element Vector{ParamBox}: + ParamBox{:α, Float64}(2.5)[α₁][∂] + ParamBox{:d, Float64}(0.5)[d₁][∂] + ParamBox{:X, Float64}(0.6635945027)[X₁][∂] + ParamBox{:X, Float64}(0.1215054095)[X₂][∂] + ParamBox{:Y, Float64}(0.8925858082)[Y₁][∂] + ParamBox{:Y, Float64}(0.2330035984)[Y₂][∂] + ParamBox{:Z, Float64}(0.2862022664)[Z₁][∂] + ParamBox{:Z, Float64}(0.04466090991)[Z₂][∂]

    uniqueParams! marks all the parameters of the given basis set and return the unique parameters. As you can see, even though bs7 has 2 GaussFuncs as basis functions, but over all it only has 1 unique coefficient exponent $\alpha_1$ and 1 unique contraction coefficient $d_1$.

    Dependent Variable as Parameter

    Another control the user can have on the parameters in Quiqbox is to not only store the each unique parameter as an independent variable, but also as a dependent variable, i.e., a math function of some more primitive independent variable:

    julia> pb1 = gf4.xpnParamBox{:α, Float64}(2.5)[α₁][∂]
    julia> pb1.mapBase.RefValue{typeof(Quiqbox.itself)}(Quiqbox.itself)

    The map field of a ParamBox stores a RefValue{<:Function}, referencing the Function that maps the actual stored value to another value through math operations ($R \to R$). The output value can be access through syntax (). In default the the variable is mapped to itself:

    julia> pb1[] == pb1()true

    Since ParamBox is a mutable struct you can redefine your own mapping Functions for the parameters; thus gain another layer of control over the basis set parameters:

    julia> squareXpn(x) = x^2squareXpn (generic function with 1 method)
    julia> pb1.map = Ref(squareXpn)Base.RefValue{typeof(Main.squareXpn)}(Main.squareXpn)
    julia> pb1[] = 33
    julia> pb1()9.0

    You can get a clearer view of the mapping relations in a ParamBox using getVar

    julia> getVar(pb1, includeMapping=true)3-element Vector{Pair}:
    + squareXpn(α₁) => α₁^2
    +          α₁^2 => 9.0
    +            α₁ => 3.0
    diff --git a/docs/build/coreFunction/index.html b/docs/build/coreFunction/index.html new file mode 100644 index 00000000..adfc90e7 --- /dev/null +++ b/docs/build/coreFunction/index.html @@ -0,0 +1,115 @@ + +Core Functions · Quiqbox.jl

    Core Functions

    Quiqbox.genBasisFuncFunction
    genBasisFunc(args..., kws...) -> BasisFunc
    +genBasisFunc(args..., kws...) -> BasisFuncs
    +genBasisFunc(args..., kws...) -> collection

    Constructor of BasisFunc and BasisFuncs, but it also returns different kinds of collections of them based on the applied methods.

    ≡≡≡ Method 1 ≡≡≡

    genBasisFunc(coord::AbstractArray, gs::Array{<:GaussFunc, 1}, 
    +             ijkOrijks::Union{Array{Int, 1}, Array{Array{Int, 1}, 1}}; 
    +             normalizeGTO::Bool=false)

    ijkOrijks is the Array of the pseudo-quantum number(s) to specify the angular momentum(s). E.g., s is [0,0,0] and p is [[1,0,0], [0,1,0], [0,0,1]].

    ≡≡≡ Example(s) ≡≡≡

    julia> genBasisFunc([0,0,0], GaussFunc(2,1), [0,1,0])
    +BasisFunc{:P, 1}(gauss, subshell, center)[X⁰Y¹Z⁰][0.0, 0.0, 0.0]

    ≡≡≡ Method 2 ≡≡≡

    genBasisFunc(coord::AbstractArray, gs::Array{<:GaussFunc, 1}, subshell::String="S"; 
    +             ijkFilter::Array{Bool, 1}=fill(true, SubshellDimList[subshell]), 
    +             normalizeGTO::Bool=false)

    ≡≡≡ Example(s) ≡≡≡

    julia> genBasisFunc([0,0,0], GaussFunc(2,1), "S")
    +BasisFunc{:S, 1}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]
    +
    +julia> genBasisFunc([0,0,0], GaussFunc(2,1), "P")
    +BasisFuncs{:P, 1, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0]

    ≡≡≡ Method 3 ≡≡≡

    genBasisFunc(coord::AbstractArray, gExpsANDgCons::NTuple{2, Array{<:Real, 1}}, 
    +             subshell="S"; kw...)

    Instead of directly inputting GaussFunc, one can also input a 2-element Tuple of the exponent(s) and contraction coefficient(s) corresponding to the same GaussFunc(s).

    ≡≡≡ Example(s) ≡≡≡

    julia> genBasisFunc([0,0,0], (2, 1), "P")
    +BasisFuncs{:P, 1, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0]
    +
    +julia> genBasisFunc([0,0,0], ([2, 1.5], [1, 0.5]), "P")
    +BasisFuncs{:P, 2, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0]

    ≡≡≡ Method 4 ≡≡≡

    genBasisFunc(center, BSKeyANDnuc::Array{Tuple{String, String}, 1})

    If the user wants to construct existed atomic basis set(s), they can use the (Array of) (BS_name, Atom_name) as the second input. If the atom is omitted, then basis set for H is used.

    ≡≡≡ Example(s) ≡≡≡

    julia> genBasisFunc([0,0,0], ("STO-3G", "Li"))
    +3-element Vector{Quiqbox.FloatingGTBasisFunc}:
    +BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]
    +BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]
    +BasisFuncs{:P, 3, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0]
    +
    +julia> genBasisFunc([0,0,0], "STO-3G")
    +1-element Vector{Quiqbox.FloatingGTBasisFunc}:
    +BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]
    +
    +julia> genBasisFunc([0,0,0], ["STO-2G", "STO-3G"])
    +2-element Vector{Quiqbox.FloatingGTBasisFunc}:
    +BasisFunc{:S, 2}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]
    +BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]
    +
    +julia> genBasisFunc([0,0,0], [("STO-2G", "He"), ("STO-3G", "O")])
    +4-element Vector{Quiqbox.FloatingGTBasisFunc}:
    +BasisFunc{:S, 2}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]
    +BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]
    +BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]
    +BasisFuncs{:P, 3, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0]
    source
    Quiqbox.centerOfFunction
    centerOf(bf::FloatingGTBasisFunc) -> Array{<:Real, 1}

    Return the center coordinate of the input FloatingGTBasisFunc.

    source
    GTBasis(basis::Vector{<:Quiqbox.AbstractFloatingGTBasisFunc})
    Quiqbox.decomposeBasisFuncFunction
    decomposeBasisFunc(bf::FloatingGTBasisFunc; splitGaussFunc::Bool=false) -> 
    +Array{<:FloatingGTBasisFunc, 1}

    Decompose a FloatingGTBasisFunc into a Vector of BasisFuncs. If splitGaussFunc is true, then each BasisFunc in the returned Vector only contains 1 GaussFunc.

    source
    Quiqbox.basisSizeFunction
    basisSize(subshell::Union{String, Array{String, 1}}) -> Tuple

    Return the size (number of orbitals) of each subshell.

    source
    basisSize(basisFunctions) -> Tuple

    Return the numbers of orbitals of the input basis function(s).

    source
    Quiqbox.genBasisFuncTextFunction
    genBasisFuncText(bf::FloatingGTBasisFunc; norm=1.0, printCenter=true) -> String

    Generate a String of the text of the input FloatingGTBasisFunc. norm is the additional normalization factor. If printCenter is true, the center coordinate will be added on the first line of the String.

    source
    genBasisFuncText(bs::Array{<:FloatingGTBasisFunc, 1}; 
    +                 norm=1.0, printCenter=true, groupCenters::Bool=true) -> 
    +String

    Generate a String of the text of the input basis set. norm is the additional normalization factor. If printCenter is true, the center coordinate will be added on the first line of the String. groupCenters determines whether the function will group the basis functions with same center together.

    source
    Quiqbox.genBFuncsFromTextFunction
    genBFuncsFromText(content::String; adjustContent::Bool=false, 
    +                  adjustFunction::F=sciNotReplace, 
    +                  excludeFirstNlines=0, excludeLastNlines=0, 
    +                  center::Union{AbstractArray, 
    +                                Tuple{Vararg{<:ParamBox}}, 
    +                                Missing}=missing) where {F<:Function} -> 
    +Array{<:FloatingGTBasisFunc, 1}

    Generate the basis set from a String of basis set in Gaussian format or the String output from genBasisFuncText. For the former, adjustContent needs to be set to true. adjustFunction is only applied when adjustContent=true, which in default is a function used to detect and convert the format of the scientific notation in the String.

    excludeFirstNlines and excludeLastNlines are used to exclude first or last few lines of the String if intent. genBFuncsFromText can't directly read center coordinate information from the String even if it's included, so argument center is used to assign a coordinate for all the basis functions from the String; it can be a Vector, a Tuple of the positional ParamBoxs, or simply (in default) set to missing for later assignment.

    source
    Quiqbox.assignCenter!Function
    assignCenter!(center::AbstractArray, b::FloatingGTBasisFunc) -> NTuple{3, ParamBox}

    Assign a new coordinate to the center of the input FloatingGTBasisFunc. Also return the altered center.

    source
    Quiqbox.uniqueParams!Function
    uniqueParams!(bs; onlyDifferentiable::Bool=false, ignoreContainerType::Bool=false, 
    +              filter::Bool=true, filterMapping::Bool=false) -> Array{<:ParamBox, 1}

    Mark the parameters (ParamBox) in input bs which can a Vector of GaussFunc or FloatingGTBasisFunc. The identical parameters will be marked with same index.

    === Keyword argument(s) ===

    onlyDifferentiable: Determine whether ignore un-differentiable parameters.

    ignoreContainerType: If set to true, then only the field data of the ParamBoxs will be compared to determine whether each ParamBox are unique.

    filter: Determine whether filter out the identical ParamBoxs and only return the unique ones.

    filterMapping: Determine wether return the ParamBoxs with identical fields except the map field. When filter=false, this argument is automatically overwritten to be false.

    source
    Quiqbox.getVarFunction
    getVar(pb::ParamBox; markUndifferentiable::Bool=false, includeMapping::Bool=false) -> 
    +Array{<:Pair{Symbolics.Num, <:Number}, 1}

    Return a 1-element Vector of Pair to show the Symbol::Symbolics.Num of the stored variable and the corresponding values.

    source
    Quiqbox.getVarsFunction
    getVars(obj::Union{GaussFunc, BasisFunc}; markUndifferentiable::Bool=false, 
    +        includeMapping::Bool=false) -> Array{<:Pair, 1}
    +
    +getVars(collection::Array{<:Union{GaussFunc, BasisFunc, ParamBox}, 1}; 
    +        markUndifferentiable::Bool=false, includeMapping::Bool=false) -> 
    +Array{<:Pair, 1}

    Return a Vector of Pair to indicate the mapping relations of and between the variables stored in the ParamBoxs in the given input.

    source
    Quiqbox.expressionOfFunction
    expressionOf(gf::GaussFunc; markUndifferentiable::Bool=false, 
    +             substituteValue::Bool=false) -> Symbolics.Num
    +
    +expressionOf(gf::FloatingGTBasisFunc; markUndifferentiable::Bool=false, 
    +             substituteValue::Bool=false) -> Array{<:Symbolics.Num, 2}

    Return the expression of a given GaussFunc or FloatingGTBasisFunc. When the latter is the input, a Matrix is returned of which the row(s) is(are) one orbital with the expression(s) of its Gaussian function(s) as entry(entries).

    source
    Quiqbox.GridBoxType
    GridBox(nGridPerEdge::Int, spacing::Real=10, 
    +        centerCoord::Array{<:Real, 1}=[0.0,0.0,0.0]; 
    +        canDiff::Bool=true, index::Int=0) -> GridBox

    Method of generating a cubic GridBox. nGridPerEdge specifies the number of grids (number of grid points - 1) along each dimension.spacing specifies the length between adjacent grid points. centerCoord specifies the geometry center coordinate of the box. canDiff determines whether the ParamBox should be marked as differentiable. index defines the index number for the actual parameter: spacing L, with the default value 0 it would be L₀.

    source
    Quiqbox.gridPointFunction
    gridPoint(coord::Array{<:Real, 1}) -> NTuple{3, ParamBox}

    Generate a Tuple of coordinate ParamBoxs given a Vector.

    source
    Quiqbox.runHFFunction
    runHF(bs::Union{BasisSetData, Array{<:AbstractFloatingGTBasisFunc, 1}}, 
    +      nuc::Array{String, 1}, 
    +      nucCoords::Array{<:AbstractArray, 1}, 
    +      N::Union{NTuple{2, Int}, Int}=getCharge(nuc); 
    +      initialC::Union{Array{T, 2}, NTuple{2, Array{T, 2}}, Symbol}=:GWH, 
    +      HFtype::Symbol=:RHF, 
    +      scfConfig::SCFconfig=defaultSCFconfig, 
    +      earlyTermination::Bool=true, 
    +      printInfo::Bool=true, 
    +      maxSteps::Int=1000) where {Float64<:T<:Float64} -> HFfinalVars

    Main function to run Hartree-Fock in Quiqbox.

    === Positional argument(s) ===

    bs::Union{BasisSetData, Array{<:AbstractFloatingGTBasisFunc, 1}}: Basis set.

    nuc::Array{String, 1}: The element symbols of the nuclei for the Molecule.

    nucCoords::Array{<:AbstractArray, 1}: The coordinates of the nuclei.

    N::Union{NTuple{2, Int}, Int}: The total number of electrons or the numbers of electrons with different spins respectively.

    === Keyword argument(s) ===

    initialC::Union{Array{T, 2}, NTuple{2, Array{T, 2}}, Symbol}: Initial guess of the coefficient matrix(s) C of the molecular orbitals.

    HFtype::Symbol: Hartree-Fock type. Available values are :RHF and :UHF.

    scfConfig::SCFconfig: SCF iteration configuration.

    earlyTermination::Bool: Whether automatically early terminate (skip) a convergence method when its performance becomes unstable or poor.

    printInfo::Bool: Whether print out the information of each iteration step.

    maxSteps::Int: Maximum allowed iteration steps regardless of whether the SCF converges.

    source
    Quiqbox.runHFcoreFunction
    runHFcore(N::Union{NTuple{2, Int}, Int}, 
    +          Hcore::Array{T1, 2}, 
    +          HeeI::Array{T2, 4}, 
    +          S::Array{T3, 2}, 
    +          X::Array{T4, 2}=getX(S), 
    +          C::Union{Array{T, 2}, NTuple{2, Array{T, 2}}, Symbol}=guessC(S, Hcore; X);
    +          HFtype::Symbol=:RHF,  
    +          scfConfig::SCFconfig{L}, 
    +          earlyTermination::Bool=true, 
    +          printInfo::Bool=true, 
    +          maxSteps::Int=1000) where {Float64<:T1<:Float64, 
    +          Float64<:T2<:Float64, 
    +          Float64<:T3<:Float64, 
    +          Float64<:T4<:Float64, 
    +          Float64<:T5<:Float64, L}

    The core function of runHF.

    === Positional argument(s) ===

    N::Union{NTuple{2, Int}, Int}: The total number of electrons or the numbers of electrons with different spins respectively.

    Hcore::Array{T1, 2}: Core Hamiltonian of electronic Hamiltonian.

    HeeI::Array{T2, 4}: The electron-electron interaction Hamiltonian which includes both the Coulomb interactions and the Exchange Correlations.

    S::Array{T3, 2}: Overlap matrix of the corresponding basis set.

    X::Array{T4, 2}: Orthogonal transformation matrix of S. Default value is S^(-0.5).

    C::Union{Array{T, 2}, NTuple{2, Array{T, 2}}, Symbol}: Initial guess of the coefficient matrix(s) C of the molecular orbitals.

    === Keyword argument(s) ===

    HFtype::Symbol: Hartree-Fock type. Available values are :RHF and :UHF.

    scfConfig::SCFconfig: SCF iteration configuration.

    earlyTermination::Bool: Whether automatically early terminate (skip) a convergence method when its performance becomes unstable or poor.

    printInfo::Bool: Whether print out the information of each iteration step.

    maxSteps::Int: Maximum allowed iteration steps regardless of whether the SCF converges.

    source
    Quiqbox.MoleculeMethod
    Molecule(basis::Array{<:FloatingGTBasisFunc, 1}, nuc::Array{String, 1}, 
    +         nucCoords::Array{<:AbstractArray, 1}, HFfVars::HFfinalVars) -> Molecule

    Construct a Molecule from a basis set, nuclei information, and the result from the corresponding Hartree-Fock SCF procedure, specifically a HFfinalVars struct.

    source
    Quiqbox.getMolOrbitalsFunction
    getMolOrbitals(ens::Array{Float64, 1}, occus::Array{<:Real, 1}, C::Matrix{Float64}, 
    +               spins::Array{String, 1}, 
    +               symms::Array{String, 1}=repeat(["A"], length(occus))) -> 
    +Tuple{Vararg{getMolOrbitals}}

    A function that returns the molecular orbitals.

    source
    Quiqbox.nnRepulsionsFunction
    nnRepulsions(nuc::Array{String, 1}, nucCoords::Array{<:AbstractArray, 1}) -> Float64

    Calculate the nuclear-nuclear repulsion energy given the nuclei and their coordinates of a molecule.

    source
    Quiqbox.optimizeParams!Function
    optimizeParams!(bs::Array{<:FloatingGTBasisFunc, 1}, pbs::Array{<:ParamBox, 1},
    +                nuc::Array{String, 1}, nucCoords::Array{<:AbstractArray, 1}, 
    +                Ne::Union{NTuple{2, Int}, Int}=getCharge(nuc);
    +                Etarget::Float64=NaN, threshold::Float64=1e-4, maxSteps::Int=2000, 
    +                printInfo::Bool=true, GDmethod::F1=gradDescent!, HFtype::Symbol=:RHF, 
    +                ECmethod::F2=Quiqbox.defaultECmethod) where 
    +               {F1<:Function, F2<:Function} -> 
    +Es::Array{Float64, 1}, pars::Array{Float64, 2}, grads::Array{Float64, 2}

    The main function to optimize the parameters of a given basis set.

    === Positional argument(s) ===

    bs::Array{<:FloatingGTBasisFunc, 1}: Basis set.

    pbs::Array{<:ParamBox, 1}: The parameters to be optimized that are extracted from the basis set.

    nuc::Array{String, 1}: The nuclei of the molecule.

    nucCoords::Array{<:AbstractArray, 1}: The nuclei coordinates.

    Ne::Union{NTuple{2, Int}, Int}: The total number of electrons or the numbers of electrons with different spins respectively.

    === Keyword argument(s) ===

    Etarget::Float64: The target Hartree-Hock energy intent to achieve.

    threshold::Float64: The threshold for the convergence when evaluating difference between the latest two energies.

    maxSteps::Int: Maximum allowed iteration steps regardless of whether the optimization iteration converges.

    printInfo::Bool: Whether print out the information of each iteration step.

    GDmethod::F1: Applied gradient descent Function.

    HFtype::Symbol: Hartree-Fock type. Available values are :RHF and :UHF.

    ECmethod::F2: The Function used to update Hartree-Fock energy and coefficient matrix(s) during the optimization iterations. === Keyword argument(s) ===

    source
    Quiqbox.updateParams!Function
    updateParams!(pbs::Array{<:ParamBox, 1}, grads::Array{<:Real, 1}; 
    +              method::F=gradDescent!) where {F<:Function} -> Array{<:ParamBox, 1}

    Given a Vector of parameters::ParamBox and its gradients with respect to each parameter, update the ParamBoxs and return the updated values.

    source
    Quiqbox.gradDescent!Function
    gradDescent!(pars::Vector{<:Real}, grads::Vector{<:Real}, η=0.001) -> 
    +pars::Vector{<:Real}

    Default gradient descent method in used in Quiqbox.

    source
    Quiqbox.overlapFunction
    overlap(fb1::AbstractFloatingGTBasisFunc, fb2::AbstractFloatingGTBasisFunc) -> 
    +Array{Float64, 2}

    Return the orbital overlap matrix (an N×N Matrix where N is the number of spatial orbitals) given 2 basis functions.

    source
    Quiqbox.overlapsFunction
    overlaps(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}) -> Array{Float64, 2}

    Return the orbital overlap matrix (an N×N Matrix where N is the number of spatial orbitals) given a basis set in the form of an Array.

    source
    Quiqbox.nucAttractionFunction
    nucAttraction(fb1::AbstractFloatingGTBasisFunc, fb2::AbstractFloatingGTBasisFunc, 
    +              nuc::Array{String, 1}, nucCoords::Array{<:AbstractArray, 1}) -> 
    +Array{Float64, 2}

    Return the nuclear attraction matrix (an N×N Matrix where N is the number of spatial orbitals) given 2 basis functions, and the nuclei with their coordinates (in atomic unit).

    source
    Quiqbox.nucAttractionsFunction
    nucAttractions(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}, nuc::Array{String, 1}, 
    +               nucCoords::Array{<:AbstractArray, 1}) -> 
    +Array{Float64, 2}

    Return the nuclear attraction matrix (an N×N Matrix where N is the number of spatial orbitals) given a basis set in the form of an Array, and the nuclei with their coordinates (in atomic unit).

    source
    Quiqbox.elecKineticFunction
    elecKinetic(fb1::AbstractFloatingGTBasisFunc, fb2::AbstractFloatingGTBasisFunc) -> 
    +Array{Float64, 2}

    Return the electron kinetic energy matrix (an N×N Matrix where N is the number of spatial orbitals) given 2 basis functions.

    source
    Quiqbox.elecKineticsFunction
    elecKinetics(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}) -> Array{Float64, 2}

    Return the electron kinetic energy matrix (an N×N Matrix where N is the number of spatial orbitals) given a basis set in the form of an Array.

    source
    Quiqbox.coreHijFunction
    coreHij(fb1::AbstractFloatingGTBasisFunc, fb2::AbstractFloatingGTBasisFunc) -> 
    +Array{Float64, 2}

    Return a matrix element or block of the core Hamiltonian (an N×N Matrix where N is the number of spatial orbitals) given 2 basis functions.

    source
    Quiqbox.coreHFunction
    coreH(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}) -> Array{Float64, 2}

    Return the core Hamiltonian matrix (an N×N Matrix where N is the number of spatial orbitals) given a basis set in the form of an Array.

    source
    Quiqbox.eeInteractionFunction
    eeInteraction(bf1::AbstractFloatingGTBasisFunc, 
    +              bf2::AbstractFloatingGTBasisFunc, 
    +              bf3::AbstractFloatingGTBasisFunc, 
    +              bf4::AbstractFloatingGTBasisFunc) -> 
    +Array{Float64, 4}

    Return the electron-electron interaction tensor (an N×N×N×N Tensor where N is the number of spatial orbitals) given 4 basis functions.

    source
    Quiqbox.eeInteractionsFunction
    eeInteractions(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}) -> Array{Float64, 4}

    Return the electron-electron interaction tensor (an N×N×N×N Tensor where N is the number of spatial orbitals) given a basis set in the form of an Array.

    source
    Quiqbox.oneBodyBFTensorFunction
    oneBodyBFTensor(libcinFunc::Symbol, b1::AbstractFloatingGTBasisFunc, 
    +                b2::AbstractFloatingGTBasisFunc, nuclei::Array{String, 1}=String[], 
    +                nucleiCoords::Array{<:AbstractArray, 1}=Array[]; 
    +                isGradient::Bool=false) -> 
    +Array{Float64, 2}

    Core function for one-electron integrals.

    libcinFunc::Symbol specifies the backend libcint (https://github.com/sunqm/libcint) function name, e.g. "int1enuccart" should be converted to :int1e_nuc_cartas the input argument. If the integral does not need the information of nuclei and their coordinates, those 2 arguments can be omitted. If the integral is a spacial gradient, isGradient should be set to true.

    source
    Quiqbox.twoBodyBFTensorFunction
    twoBodyBFTensor(libcinFunc::Symbol, 
    +                b1::AbstractFloatingGTBasisFunc, b2::AbstractFloatingGTBasisFunc, 
    +                b3::AbstractFloatingGTBasisFunc, b4::AbstractFloatingGTBasisFunc; 
    +                isGradient::Bool=false) -> 
    +Array{Float64, 5}

    Core function for one-electron integrals.

    libcinFunc::Symbol specifies the backend libcint (https://github.com/sunqm/libcint) function name, e.g. "cint2ecart" should be converted to `:cint2ecart`as the input argument.

    source
    diff --git a/docs/build/coreType/index.html b/docs/build/coreType/index.html new file mode 100644 index 00000000..253d5074 --- /dev/null +++ b/docs/build/coreType/index.html @@ -0,0 +1,20 @@ + +Core Types · Quiqbox.jl

    Core Types

    Quiqbox.ParamBoxType
    ParamBox{V, T} <: DifferentiableParameter{ParamBox, T}

    Parameter container that enables parameter differentiations.

    ≡≡≡ Field(s) ≡≡≡

    data::T: Stored parameter. It can be accessed through syntax [].

    canDiff::Bool: Indicator that whether this container should be marked as differentiable.

    ≡≡≡ Initialization Method(s) ≡≡≡

    ParamBox(data::Number, name::Symbol=:undef; mapFunction::Function=itself, 
    +         canDiff::Bool=true, paramType::Type{T}=Float64) -> 
    +ParamBox{T}

    name specifies the name of the variable to be stored, which helps with symbolic representation and automatic differentiation.

    mapFunction is for the case to the store the variable that is a dependent variable (math function) f(x) of another variable x which is the actually stored in the struct, and linked to the f(x) via the mapFunction. After initializing the ParamBox, e.g pb1 = ParamBox(x, mapFunction=f), pb.data[] returns x, and pb.data() returns f(x).

    canDiff is used to mark the (independent) variable as differentiable when set to true, otherwise the ParamBox will be ignored in any differentiation process.

    paramType specifies the type of the stored variable to avoid data type mutation.

    ≡≡≡ Example(s) ≡≡≡

    julia> Quiqbox.ParamBox(1.0)
    +ParamBox{Float64}(1.0)[∂]

    NOTE: When the parameter inside x::ParamBox is marked as "differentiable" (a.k.a. x.canDiff=true), "[∂]" in the printing info is in color green, otherwise it's in grey.

    source
    Quiqbox.GaussFuncType
    GaussFunc <: AbstractGaussFunc

    A single contracted gaussian function struct from package Quiqbox.

    ≡≡≡ Field(s) ≡≡≡

    xpn::ParamBox{:𝛼, Float64}:Exponent of the gaussian function.

    con::ParamBox{:𝑑, Float64}: Contraction coefficient of the gaussian function.

    param::NTuple{2, ParamBox}: A Tuple that stores the ParamBoxs of xpn and con.

    ≡≡≡ Initialization Method(s) ≡≡≡

    GaussFunc(xpn::Real, con::Real) -> GaussFunc

    Generate a GaussFunc given the specified exponent and contraction coefficient.

    ≡≡≡ Example(s) ≡≡≡

    julia> GaussFunc(5.0, 1.0)
    +GaussFunc(xpn=ParamBox{:α, Float64}(5.0)[α][∂], con=ParamBox{:d, Float64}(1.0)[d][∂])
    source
    Quiqbox.BasisFuncType
    BasisFunc{S, GN} <: FloatingGTBasisFunc{S, GN, 1}

    A (floating) basis function with the center attached to it instead of any nucleus.

    ≡≡≡ Field(s) ≡≡≡

    center::NTuple{3, ParamBox}: The center coordinate in form of a 3-element ParamBox-type Tuple.

    gauss::NTuple{N, GaussFunc}: Gaussian functions within the basis function.

    subshell::String: The subshell (angular momentum symbol).

    ijk::Tuple{String}: Cartesian representation (pseudo-quantum number) of the angular momentum orientation. E.g., s would be ("X⁰Y⁰Z⁰")

    normalizeGTO::Bool: Whether the GTO::GaussFunc will be normalized in calculations.

    param::Tuple{Vararg{<:ParamBox}}: All the tunable parameters::ParamBox stored in the BasisFunc.

    ≡≡≡ Initialization Method(s) ≡≡≡

    BasisFunc(center::Tuple{Vararg{<:ParamBox}}, gauss::Array{<:GaussFunc, 1}, 
    +          ijk::Array{Int, 1}, normalizeGTO::Bool) -> BasisFunc{S, GN}
    source
    Quiqbox.BasisFuncsType
    BasisFuncs{S, GN, ON} <: FloatingGTBasisFunc{S, GN, ON}

    A group of basis functions with identical parameters except they have different subshell under the specified angular momentum. It has the same fields as BasisFunc and specifically, for ijk, instead of being a 1-element Tuple, the size of the Tuple is the size of the corresponding subshell.

    source
    Quiqbox.GTBasisType
    GTBasis{N, BT} <: BasisSetData{N}

    The container to store basis set information.

    ≡≡≡ Field(s) ≡≡≡

    basis::Array{<:AbstractFloatingGTBasisFunc, 1}: Basis set. S::Array{<:Number, 2}: Overlap matrix. Te::Array{<:Number, 2}: Kinetic energy part of the electronic core Hamiltonian. eeI::Array{<:Number, 4}: Electron-electron interaction. getVne::Function: A Function that returns the nuclear attraction Hamiltonian when nuclei::Array{String, 1} and their coordinates::Array{<:AbstractArray, 1} are input. getHcore::Function: Similar as getVne, a Function that returns the core Hamiltonian when nuclei and their coordinates of same DataType are input.

    ≡≡≡ Initialization Method(s) ≡≡≡

    GTBasis(basis::Vector{<:AbstractFloatingGTBasisFunc}, S::Matrix{<:Number}, 
    +        Te::Matrix{<:Number}, eeI::Array{<:Number, 4}) -> 
    +GTBasis
    source
    Quiqbox.GridBoxType
    GridBox{NX, NY, NZ} <: SemiMutableParameter{GridBox, Float64}

    A struct that stores coordinates of grid points in terms of both Vectors and ParamBoxs.

    ≡≡≡ Field(s) ≡≡≡

    num::Int: Total number of the grid points.

    spacing::Float64: The edge length of the grid box.

    box::Vector{NTuple{3, ParamBox}}: The coordinates of grid points in terms of ParamBoxs.

    coord::Array{Array{Float64, 1}, 1}: The coordinates of grid points in terms of Vectors.

    ≡≡≡ Initialization Method(s) ≡≡≡

    GridBox(nGrids::NTuple{3, Int}, spacing::Real=10, 
    +        centerCoord::Array{<:Real, 1}=[0.0,0.0,0.0];
    +        canDiff::Bool=true, index::Int=0) -> GridBox

    Constructor of a general GridBox that doesn't have to shape as a cube. nGrid is a 3-element Tuple that specifies the number of grids (number of grid points - 1) along 3 dimensions. spacing specifies the length between adjacent grid points. centerCoord specifies the geometry center coordinate of the box. canDiff determines whether the ParamBox should be marked as differentiable. index defines the index number for the actual parameter: spacing L, with the default value 0 it would be L₀.

    source
    Quiqbox.SCFconfigType
    SCFconfig{N} <: ImmutableParameter{SCFconfig, Any}

    The struct for SCF iteration configurations.

    ≡≡≡ Field(s) ≡≡≡

    methods::NTuple{N, Symbol}: The applied methods. The available methods are their configurations (in terms of keyword arguments):

    MethodsConfiguration(s)keyword argument(s)Default value(s)
    :DSDamping strength: [0,1]dampingStrength::Float640.0
    :DIIS, :EDIIS, :ADIISSubspace size (>1); Coefficient solver(:ADMM-> ADMM solver, :LCM -> Lagrange solver)DIISsize::Int; solver::Symbol15; :ADMM

    intervals: The stopping (skipping) thresholds for the required methods.

    methodConfigs: The additional keywords arguments for each method stored as Tuples of Pairs.

    oscillateThreshold: The threshold for oscillating convergence.

    ≡≡≡ Initialization Method(s) ≡≡≡

    SCFconfig(methods::Vector{Symbol}, intervals::Vector{Float64}, 
    +          configs::Dict{Int, <:Vector{<:Pair}}=Dict(1=>Pair[]);
    +          oscillateThreshold::Float64=1e-5) -> 
    +SCFconfig{N}

    methods and intervals are the methods to be applied and their stopping (skipping) thresholds respectively; the length of those two Vectors should be the same. configs specifies the additional keyword arguments for each methods by a Pair of which the Int key i is for ith method and the pointed Vector{<:Pair} is the pairs of keyword arguments and their values respectively.

    ≡≡≡ Example(s) ≡≡≡

    julia> SCFconfig([:SD, :ADIIS, :DIIS], [1e-4, 1e-12, 1e-13], Dict(2=>[:solver=>:LCM]) SCFconfig{3}((:SD, :ADIIS, :DIIS), (0.0001, 1.0e-12, 1.0e-13), ((), (:solver => :LCM,), ()), 1.0e-5)

    source
    Quiqbox.HFtempVarsType
    HFtempVars{HFtype, N} <: HartreeFockintermediateData

    The container to store the intermediate values (only of the same spin configuration) for each iteration during the Hartree-Fock SCF procedure.

    ≡≡≡ Field(s) ≡≡≡

    Cs::Array{Array{T1, 2}, 1} where {Float64<:T1<:Float64}: Coefficient matrices.

    Fs::Array{Array{T2, 2}, 1} where {Float64<:T2<:Float64}: Fock matrices

    Ds::Array{Array{T3, 2}, 1} where {Float64<:T3<:Float64}: Density matrices corresponding to only spin configuration. For RHF each elements means (unconverged) 0.5*Dᵀ.

    Es::Array{Float64, 1}: Part of Hartree-Fock energy corresponding to only spin configuration. For RHF each element means (unconverged) 0.5*E0HF.

    shared.Dtots::Array{Array{T, 2}, 1} where {Float64<:T<:Float64}: The total density matrices.

    shared.Etots::Array{Float64, 1}: The total Hartree-Fock energy.

    NOTE: For UHF, there are 2 HFtempVars being updated during the SCF iterations, and change the field shared.Dtots or shared.Etots of one container will affect the other one's.

    source
    Quiqbox.HFfinalVarsType
    HFfinalVars{T, N, Nb} <: HartreeFockFinalValue{T}

    The container of the final values after a Hartree-Fock SCF procedure.

    ≡≡≡ Field(s) ≡≡≡

    E0HF::Float64: Hartree-Fock energy of the electronic Hamiltonian.

    C::Union{Array{T1, 2}, NTuple{2, Array{T1, 2}}} where {Float64<:T1<:Float64}: Coefficient matrix(s) for one spin configuration.

    F::Union{Array{T2, 2}, NTuple{2, Array{T2, 2}}} where {Float64<:T2<:Float64}: Fock matrix(s) for one spin configuration.

    D::Union{Array{T3, 2}, NTuple{2, Array{T3, 2}}} where {Float64<:T3<:Float64}: Density matrix(s) for one spin configuration.

    Emo::Union{Array{Float64, 1}, NTuple{2, Array{Float64, 1}}}: Energies of molecular orbitals.

    occu::Union{Array{Int, 1}, NTuple{2, Array{Int, 1}}}: occupation numbers of molecular orbitals.

    temp::Union{HFtempVars{T}, NTuple{2, HFtempVars{T}}} the intermediate values.

    isConverged::Bool: Whether the SCF procedure is converged in the end.

    source
    Quiqbox.MoleculeType
    Molecule{Nc, Ne, Nb} <:MolecularHartreeFockCoefficient{Nc, Ne}

    Container for the information of a molecule.

    ≡≡≡ Field(s) ≡≡≡

    nuc::Tuple{Vararg{String}}: Nuclei of the molecule.

    nucCoords::Tuple{Vararg{NTuple{3, Real}}}: The coordinates of the nuclei.

    Ne::Int: The number of electrons.

    orbital::Tuple{Vararg{MolOrbital}}: Molecular orbitals.

    basis::Tuple{Vararg{FloatingGTBasisFunc}}: The basis set for the molecular orbitals.

    E0HF::Float64: Hartree-Fock energy of the electronic Hamiltonian from the basis set.

    EnnR::Float64: The nuclear-nuclear repulsion energy.

    ≡≡≡ Initialization Method(s) ≡≡≡

    Molecule(basis::Array{FloatingGTBasisFunc, 1}, nuc::Array{String, 1}, 
    +         nucCoords::Array{<:AbstractArray, 1}, Ne::Int, E0HF::Float64, 
    +         Emos::Array{Float64, 1}, occus::Array{<:Real, 1}, C::Array{Float64, 2}, 
    +         spins::Array{String, 1}, 
    +         symms::Array{String, 1}=repeat(["A"], length(occus))) -> 
    +Molecule{Nc, Ne, Nb}

    Emos are the energies of corresponding molecular energies. occus are the occupation numbers of the orbitals. C is the coefficient matrix, which does not need to be a square matrix since the number of rows is the size of the (spatial) basis set whereas the number of the columns represents the number of molecular orbitals. spin specifies the spin functions of the orbitals, entries of which can be set to "Alpha" or "Beta". symms are symmetries of the orbitals where the default entry value is "A" for being antisymmetric.

    source
    Quiqbox.MolOrbitalType
    MolOrbital{N} <: AbstractMolOrbital

    Struct of molecular orbitals.

    ≡≡≡ Field(s) ≡≡≡

    symmetry::String: The symmetry of the orbital. The default value is "A" for being antisymmetric.

    energy::Float64: Molecular energy.

    spin::String: Spin function of the orbital. Available values: "Alpha", "Beta".

    occupancy::Real: Occupation number.

    orbitalCoeffs::NTuple{N, Float64}: coefficients of the basis functions to form the molecular orbital.

    ≡≡≡ Initialization Method(s) ≡≡≡

    MolOrbital(energy::Float64, occupancy::Real, orbitalCoeffs::Array{Float64, 1}, 
    +           spin::String="Alpha", symmetry::String="A") -> MolOrbital{N}
    source
    diff --git a/docs/build/index.html b/docs/build/index.html new file mode 100644 index 00000000..f632940c --- /dev/null +++ b/docs/build/index.html @@ -0,0 +1,2 @@ + +Home · Quiqbox.jl

    Quiqbox.jl

    Quiqbox is a quantum chemistry and quantum computing software package that starts off around Gaussian basis set optimization of molecular electronic-structure problems. Quiqbox is written in pure Julia.

    Features

    • Floating and fixed-basis Gaussian-type orbital (GTO) configurations.
    • Symbolic representation and analysis of basis function parameters.
    • Standalone 1-electron and 2-electron integral functions (powered by libcint_jll).
    • Restricted (closed-shell) and unrestricted (open-shell) Hartree–Fock methods (RHF & UHF).
    • Molecular orbital data output in Molden file format.
    • Variational optimization of orbital geometry based on automatic differentiation (AD).

    Setup

    Supported system platforms (64-bit)

    Julia Environment

    Installation in Julia REPL

    Type ] to enter the Pkg mode:

    (@v1.x) pkg>

    Type add Quiqbox and hit Enter key to install Quiqbox:

    (@v1.x) pkg> add Quiqbox

    After the installation completes, hit Backspace key to go back to Julia REPL and use using to load Quiqbox:

    julia> using Quiqbox

    For more basic usage of the programming language behind Quiqbox, Julia, please refer to the official documentation or one official tutorial.

    diff --git a/docs/build/list/index.html b/docs/build/list/index.html new file mode 100644 index 00000000..65fe1b2b --- /dev/null +++ b/docs/build/list/index.html @@ -0,0 +1,2 @@ + +Index · Quiqbox.jl

    Index

    Below are the types and functions included in the documentation.

    Types

    Functions

    diff --git a/docs/build/molden/index.html b/docs/build/molden/index.html new file mode 100644 index 00000000..fdcfe92f --- /dev/null +++ b/docs/build/molden/index.html @@ -0,0 +1,2 @@ + +Molden · Quiqbox.jl

    Molden

    Quiqbox supports outputting molecular (in Molecule) information to Molden file format.

    Quiqbox.Molden.makeMoldenFileFunction
    makeMoldenFile(mol::Molecule; recordUMO::Bool=false, fileName::String = "MO") -> String

    Write the information of input Molecule into a Molden file. recordUMO determines whether to include the unoccupied molecular orbitals. fileName specifies the name of the file, which is also the returned value.

    source

    A concrete example of the above function can be found here.

    diff --git a/docs/build/optimization/index.html b/docs/build/optimization/index.html new file mode 100644 index 00000000..f74d9b07 --- /dev/null +++ b/docs/build/optimization/index.html @@ -0,0 +1,49 @@ + +Parameter Optimization · Quiqbox.jl

    Parameter Optimization

    Selectively Optimizing Parameters

    In the Basis Sets section we have briefly introduced the parameters in terms of ParamBox that are embedded in containers such as BasisFunc and BasisFuncs that are directly used to form a basis set. This means how we construct the basis set using the parameters will determine how large of a parameter space we have to optimize the basis set. For more information please refer to Constructing basis sets based on ParamBox. Here is a example to use GaussFunc and GridBox to quickly generate a grid-based basis set with only 3 actual parameters, 1 determines all the coordinates of basis function centers, the other 2 are the only exponent coefficient $\alpha$ and contraction coefficient $d$.


    julia> nuc = ["H", "H"]2-element Vector{String}: + "H" + "H"
    julia> nucCoords = [[-0.7,0.0,0.0], [0.7,0.0,0.0]]2-element Vector{Vector{Float64}}: + [-0.7, 0.0, 0.0] + [0.7, 0.0, 0.0]
    julia> grid = GridBox(1, 1.5)GridBox{1, 1, 1}(num, len, coord)
    julia> gf1 = GaussFunc(0.7,1)GaussFunc(xpn=ParamBox{:α, Float64}(0.7)[α][∂], con=ParamBox{:d, Float64}(1.0)[d][∂])
    julia> bs = genBasisFunc.(grid.box, Ref([gf1]))8-element Vector{BasisFunc{:S, 1}}: + BasisFunc{:S, 1}(gauss, subshell, center)[X⁰Y⁰Z⁰][-0.75, -0.75, -0.75] + BasisFunc{:S, 1}(gauss, subshell, center)[X⁰Y⁰Z⁰][-0.75, -0.75, 0.75] + BasisFunc{:S, 1}(gauss, subshell, center)[X⁰Y⁰Z⁰][-0.75, 0.75, -0.75] + BasisFunc{:S, 1}(gauss, subshell, center)[X⁰Y⁰Z⁰][-0.75, 0.75, 0.75] + BasisFunc{:S, 1}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.75, -0.75, -0.75] + BasisFunc{:S, 1}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.75, -0.75, 0.75] + BasisFunc{:S, 1}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.75, 0.75, -0.75] + BasisFunc{:S, 1}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.75, 0.75, 0.75]

    After constructing the basis set, we need to use uniqueParams! to mark all the unique parameters that can also be optimized later:

    julia> pars = uniqueParams!(bs, filterMapping=true)3-element Vector{ParamBox}:
    + ParamBox{:α, Float64}(0.7)[α₁][∂]
    + ParamBox{:d, Float64}(1.0)[d₁][∂]
    + ParamBox{:L, Float64}(1.5)[L₁ -> Xᴳ¹⁻¹⁻¹₁(L₁)][∂]

    As expected, there are indeed only 3 unique tunable parameters despite the basis set already has 8 basis functions. (note that keyword argument filterMapping in uniqueParams! is set to true because we want the function to only return independent parameters) However, if we take a step further, we can remove $d$ since each basis function here is just a single Gaussian function, which means the contraction coefficient won't affect the optimization results. Thus, input the intent parameters (along with other necessary arguments) into the Quiqbox function optimizeParams! and we can sit and wait for the optimization iterations to complete.

    julia> parsPartial = [pars[1], pars[3]]2-element Vector{ParamBox{V, Float64} where V}:
    + ParamBox{:α, Float64}(0.7)[α₁][∂]
    + ParamBox{:L, Float64}(1.5)[L₁ -> Xᴳ¹⁻¹⁻¹₁(L₁)][∂]
    julia> optimizeParams!(bs, parsPartial, nuc, nucCoords, maxSteps=20);Step 0: E = -1.5305265963421937 + params = [0.7, 1.5] + grad = [1.9008817106887395, 0.764364470550285] +Step duration: 71.027144 seconds. + +Step 5: E = -1.5062338139453617 + params = [0.6906484915420927, 1.496244505292448] + grad = [1.8271270696377335, 0.7313231766624024] +Step duration: 1.2183108 seconds. + +Step 10: E = -1.5430880100394075 + params = [0.6816634203307707, 1.4926470317018488] + grad = [1.754454179542366, 0.7018210309669057] +Step duration: 1.1235408 seconds. + +Step 15: E = -1.5486525071564103 + params = [0.6730263419447252, 1.4891939146629765] + grad = [1.687639832343507, 0.6742825520465396] +Step duration: 1.3170213 seconds. + +Step 20: E = -1.5538041176496564 + params = [0.6647120634709195, 1.4858747615229313] + grad = [1.6245288919052274, 0.6489052476238029] +Step duration: 1.3689478 seconds. + +The iteration just ended at +Step 20: E = -1.5538041176496564 + params = [0.6647120634709195, 1.4858747615229313] + grad = [1.6245288919052274, 0.6489052476238029] +Optimization duration: 1.6439471866666666 minutes. +The result has not converged.

    After the optimization, you can check the basis set and we can see the parameters inside of it is also changed. This is because the ! in the function names indicates that optimizeParams! is a function that modifies its arguments.

    julia> getParams(bs)ERROR: UndefVarError: getParams not defined

    It you want to go through the above example by yourself, you can also find the script here.

    Store Customized Basis Set

    Now, if you want, you can also store the information of the basis set in an container called GTBasis that not only includes the basis set, but also the related 1-electron and 2-electron integral values (nuclear attraction is not stored). GTBasis can also be accepted as an argument for runHF to save the time of calculating the integrals of the basis set.

    julia> GTBasis(bs)GTBasis{8, Vector{BasisFunc{:S, 1}}}(basis, S, Te, eeI, getVne, getHcore)
    diff --git a/docs/build/search/index.html b/docs/build/search/index.html new file mode 100644 index 00000000..63a1bf9c --- /dev/null +++ b/docs/build/search/index.html @@ -0,0 +1,2 @@ + +Search · Quiqbox.jl

    Loading search...

      diff --git a/docs/build/search_index.js b/docs/build/search_index.js new file mode 100644 index 00000000..bcce0e96 --- /dev/null +++ b/docs/build/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"basis/#Basis-Sets","page":"Basis Sets","title":"Basis Sets","text":"","category":"section"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"The procedure to construct a basis set can be fundamentally broken down into several basic steps: first, choose a set of (tunable) parameters, and build the Gaussian functions around those parameters, then the basis functions around the Gaussian functions, finally the basis set.","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"The data structure formularized by Quiqbox in each step, namely the level of data complexity, can be summarized in the following table.","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"level objective product examples abstract type type instances\n4 basis set Array of basis functions (with reusable integrals) Array, GTBasis Array{<:BasisFunc, 1}...\n3 basis functions single or linear combination of Gaussian functions FloatingGTBasisFunc BasisFunc{:S, 1}, BasisFuncs{:P, 3, 3}...\n2 Gaussian functions (primitive) Gaussian functions AbstractGaussFunc GaussFunc\n1 a pool of parameters center coordinates, function coefficients ParamBox ParamBox{:xpn, Float64}...","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"Depending on how much control the user wants to have over each step, Quiqbox provides several methods of related functions to leave the user with the freedom to balance between efficiency and customizability. ","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"Below are some examples from the simplest way to relatively more flexible ways to construct a basis set in Quiqbox. Hopefully these use cases can also work as inspirations for more creative ways to manipulate basis sets.","category":"page"},{"location":"basis/#Basis-Set-Construction","page":"Basis Sets","title":"Basis Set Construction","text":"","category":"section"},{"location":"basis/#Constructing-basis-sets-from-existed-basis-sets","page":"Basis Sets","title":"Constructing basis sets from existed basis sets","text":"","category":"section"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"First, you can create a basis set at one coordinate by input the Vector of its center coordinate and a Tuple of its name and corresponding atom in String.","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"push!(LOAD_PATH,\"../../src/\") # hide\nusing Quiqbox # hide\n\nbsO = Quiqbox.genBasisFunc([0,0,0], (\"STO-3G\", \"O\"))","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"Notice that in the above result there are 2 types of structs in the returned Vector: BasisFunc and BasisFuncs. BasisFunc is the most basic type to hold the data of a basis function; BasisFuncs is very similar except it may hold multiple orbitals with only the spherical harmonics Y_ml being different when the orbital angular momentum l0.","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"info: Unit System\nHartree atomic units are the unit system used in Quiqbox.","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"If you want to postpone the specification of the center, you can replace the 1st argument with missing, and then use function assignCenter! to assign the coordinates later.","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"bsO = genBasisFunc(missing, (\"STO-3G\", \"O\"))\n\nassignCenter!([0,0,0], bsO[1]);\n\nbsO\n\nassignCenter!.(Ref([0,0,0]), bsO[2:end])","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"If you omit the atom in the arguments, H will be set in default. Notice that even there's only 1 single basis function in H's STO-3G basis set, the returned value is still in Array type.","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"bsH_1 = genBasisFunc([-0.5, 0, 0], \"STO-3G\")\n\nbsH_2 = genBasisFunc([ 0.5, 0, 0], \"STO-3G\")","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"Finally, you can use Quiqbox's included tool function flatten to merge the three atomic basis set into one molecular basis set:","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"bsH20 = [bsO, bsH_1, bsH_2] |> flatten","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"Not simple enough? Here's a more compact way of realizing the above steps if you are familiar with some syntactic sugars in Julia:","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"cens = [[0,0,0], [-0.5,0,0], [0.5,0,0]]\n\nbsH20_2 = genBasisFunc.(cens, [(\"STO-3G\", \"O\"), fill(\"STO-3G\", 2)...]) |> flatten","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"In quiqbox, the user can often deal with several multi-layer containers (mainly structs), it might be easy to get lost or uncertain that whether we are creating the objects intended. Quiqbox provides another tool function hasEqual that lets you compare if two objects hold the same data and structure. For example, if we want to see whether bsH20_2 created in the faster way is same (not identical) as bsH20, we can verify it as follows:","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"hasEqual(bsH20, bsH20_2)","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"If the basis set you want to use doesn't exist in Quiqbox's library, you can use Function genBFuncsFromText to generate the basis set from a Gaussian formatted String:","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"genBasisFunc(missing, (\"6-31G\", \"Kr\"))\n\n# Data from https://www.basissetexchange.org\ntxt_Kr_631G = \"\"\" \nKr 0\nS 6 1.00\n 0.1205524000D+06 0.1714050000D-02\n 0.1810225000D+05 0.1313805000D-01\n 0.4124126000D+04 0.6490006000D-01\n 0.1163472000D+04 0.2265185000D+00\n 0.3734612000D+03 0.4764961000D+00\n 0.1280897000D+03 0.3591952000D+00\nSP 6 1.00\n 0.2634681000D+04 0.2225111000D-02 0.3761911000D-02\n 0.6284533000D+03 0.2971122000D-01 0.2977531000D-01\n 0.2047081000D+03 0.1253926000D+00 0.1311878000D+00\n 0.7790827000D+02 0.1947058000D-02 0.3425019000D+00\n 0.3213816000D+02 -0.5987388000D+00 0.4644938000D+00\n 0.1341845000D+02 -0.4958972000D+00 0.2087284000D+00\nSP 6 1.00\n 0.1175107000D+03 -0.6157662000D-02 -0.6922855000D-02\n 0.4152553000D+02 0.5464841000D-01 -0.3069239000D-01\n 0.1765290000D+02 0.2706994000D+00 0.4480260000D-01\n 0.7818313000D+01 -0.1426136000D+00 0.3636775000D+00\n 0.3571775000D+01 -0.7216781000D+00 0.4952412000D+00\n 0.1623750000D+01 -0.3412008000D+00 0.2086340000D+00\nSP 3 1.00\n 0.2374560000D+01 0.3251184000D+00 -0.3009554000D-01\n 0.8691930000D+00 -0.2141533000D+00 0.3598893000D+00\n 0.3474730000D+00 -0.9755083000D+00 0.7103098000D+00\nSP 1 1.00\n 0.1264790000D+00 0.1000000000D+01 0.1000000000D+01\nD 3 1.00\n 0.6853888000D+02 0.7530705000D-01\n 0.1914333000D+02 0.3673551000D+00\n 0.6251213000D+01 0.7120146000D+00\nD 1 1.00\n 0.1979236000D+01 1.0000000\n\"\"\";\n\ngenBFuncsFromText(txt_Kr_631G, adjustContent=true)","category":"page"},{"location":"basis/#Constructing-basis-sets-from-GaussFunc","page":"Basis Sets","title":"Constructing basis sets from GaussFunc","text":"","category":"section"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"If you want to specify the parameters of each Gaussian function when constructing a basis set, you can first construct the container for Gaussian functions: GaussFunc, and then build the basis function upon them:","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"using Quiqbox # hide\n\ngf1 = GaussFunc(2.0, 1.0)\n\ngf2 = GaussFunc(2.5, 0.75)\n\nbf1 = genBasisFunc([1.0,0,0], [gf1, gf2])","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"Unlike BasisFunc there's no proprietary function for it, you simply input the exponent coefficient and the contraction coefficient as the 1st and 2nd arguments respectively to its default constructor. As for the method of genBasisFunc in this case, the default subshell is set to be \"S\" as the optional 3rd argument, but you can construct a BasisFuncs which contains all the orbitals within a specified one:","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"bf2 = genBasisFunc([1.0,0,0], [gf1, gf2], \"P\")","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"You can even choose one or a few orbitals to keep by indicting them using a 3-element Array of the Cartesian representation:","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"bf3 = genBasisFunc([1.0,0,0], [gf1, gf2], [1,0,0])\n\nbf4 = genBasisFunc([1.0,0,0], [gf1, gf2], [[1,0,0], [0,0,1]])","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"Again, if you want a faster solution, you can also directly define the 2 GaussFunc parameter(s) in a 2-element Tuple as the 2nd argument for genBasisFunc:","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"bf5 = genBasisFunc([1.0,0,0], ([2.0, 2.5], [1.0, 0.75]), [[1,0,0], [0,0,1]])\n\nhasEqual(bf4, bf5)","category":"page"},{"location":"basis/#Constructing-basis-sets-based-on-ParamBox","page":"Basis Sets","title":"Constructing basis sets based on ParamBox","text":"","category":"section"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"Sometimes you may want the parameters of basis functions (or GaussFunc) to be under some constrains (which can be crucial for the later basis set optimization), this is when you need a deeper level of control over the parameters, through its direct container: ParamBox. In fact, in the above example we have already had an glimpse on it through the printed info in the REPL:","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"gf1","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"the 2 fields of a GaussFunc, .xpn and .con are in fact ParamBox, and the actual value of them can be accessed through syntax []:","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"gf1.xpn \n\ngf1.con\n\ngf1.xpn[] \n\ngf1.con[]","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"Since the data are not directly stored as primitive types but rather inside struct ParamBox, this allows the direct assignment or shallow copy of them to not create new data with same values, but bindings to the original objects:","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"gf3 = GaussFunc(1.1, 1)\n\n# Direct assignment\ngf3_2 = gf3\n\ngf3.xpn[] *= 2\n\ngf3 \n\ngf3_2\n\n# Shallow copy: `fill`\nbf6 = genBasisFunc([1,0,0], fill(gf3, 2))\n\nbf6.gauss\n\nbf6.gauss[1].xpn[] = 1.1\n\ngf3_2.xpn[] == gf3.xpn[] == bf6.gauss[2].xpn[] == 1.1\n","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"Based on such trait in Julia, you can, for instance, create a basis set that enforces all the GaussFuncs have the identical parameters:","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"gf4 = GaussFunc(2.5, 0.5)\n\nbs7 = genBasisFunc.([rand(3) for _=1:2], Ref(gf4))\n\nuniqueParams!(bs7)","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"uniqueParams! marks all the parameters of the given basis set and return the unique parameters. As you can see, even though bs7 has 2 GaussFuncs as basis functions, but over all it only has 1 unique coefficient exponent alpha_1 and 1 unique contraction coefficient d_1.","category":"page"},{"location":"basis/#Dependent-Variable-as-Parameter","page":"Basis Sets","title":"Dependent Variable as Parameter","text":"","category":"section"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"Another control the user can have on the parameters in Quiqbox is to not only store the each unique parameter as an independent variable, but also as a dependent variable, i.e., a math function of some more primitive independent variable:","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"pb1 = gf4.xpn\n\npb1.map","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"The map field of a ParamBox stores a RefValue{<:Function}, referencing the Function that maps the actual stored value to another value through math operations (R to R). The output value can be access through syntax (). In default the the variable is mapped to itself:","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"pb1[] == pb1()","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"Since ParamBox is a mutable struct you can redefine your own mapping Functions for the parameters; thus gain another layer of control over the basis set parameters:","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"squareXpn(x) = x^2\n\npb1.map = Ref(squareXpn)\n\npb1[] = 3\n\npb1()","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"You can get a clearer view of the mapping relations in a ParamBox using getVar","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"getVar(pb1, includeMapping=true)","category":"page"},{"location":"SCF/#Self-Consistent-Field-Methods","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"","category":"section"},{"location":"SCF/#Hartree-Fock-Methods","page":"Self-Consistent Field Methods","title":"Hartree-Fock Methods","text":"","category":"section"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"Quiqbox supports basic Hartree-Fock methods with various configurations: ","category":"page"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"Items Options\nHF Types Restricted Closed-Shell (RHF), Unrestricted Open-Shell (UHF)\nInitial Guesses Core Hamiltonian, Generalized Wolfsberg-Helmholtz, User-defined Coefficient Matrix\nConverging Methods Direct Diagonalization, DIIS, EDIIS, ADIIS, Combinations of Multi-methods\nDIIS-type Method Solvers Lagrange Multiplier Solver, ADMM Solver","category":"page"},{"location":"SCF/#Basic-Hartree-Fock","page":"Self-Consistent Field Methods","title":"Basic Hartree-Fock","text":"","category":"section"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"To run a Hartree-Fock method, the lines of code required in Quiqbox is as simple as below:","category":"page"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"push!(LOAD_PATH,\"../../src/\") # hide\nusing Quiqbox # hide\n\nnuc = [\"H\", \"H\"];\n\nnucCoords = [[-0.7, 0.0, 0.0], [0.7, 0.0, 0.0]];\n\nbs = genBasisFunc.(nucCoords, (\"STO-3G\", \"H\") |> Ref) |> flatten\n\nresRHF = runHF(bs, nuc, nucCoords, HFtype=:RHF)\n\n@show resRHF.E0HF resRHF.C resRHF.Emo resRHF.occu","category":"page"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"After the SCF procedure, one can also easily store the result in a Molecule for further data processing such as generating Molden files.","category":"page"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"mol = Molecule(bs, nuc, nucCoords, resRHF);","category":"page"},{"location":"SCF/#Flexible-core-functions","page":"Self-Consistent Field Methods","title":"Flexible core functions","text":"","category":"section"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"If the user want to fine-tune part of the SCF iteration steps to achieve better performance, Quiqbox also has provided various more flexible core functions that allows user to customize the HF methods:","category":"page"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"SCFconfig","category":"page"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"runHFcore","category":"page"},{"location":"SCF/#Standalone-Integral-Functions","page":"Self-Consistent Field Methods","title":"Standalone Integral Functions","text":"","category":"section"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"Quiqbox also provides several integral functions that can be used independently of any SCF functions if intended.Those functions are wrappers of binary Julia library package (JLL) libcint_jll, with more simplistic signature and versatile functionality.","category":"page"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"overlap","category":"page"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"overlaps","category":"page"},{"location":"SCF/#One-electron-functions","page":"Self-Consistent Field Methods","title":"One-electron functions","text":"","category":"section"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"nucAttraction","category":"page"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"nucAttractions","category":"page"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"elecKinetic","category":"page"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"elecKinetics","category":"page"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"Quiqbox.oneBodyBFTensor","category":"page"},{"location":"SCF/#Two-electron-functions","page":"Self-Consistent Field Methods","title":"Two-electron functions","text":"","category":"section"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"eeInteraction","category":"page"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"eeInteractions","category":"page"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"Quiqbox.twoBodyBFTensor","category":"page"},{"location":"coreType/#Core-Types","page":"Core Types","title":"Core Types","text":"","category":"section"},{"location":"coreType/","page":"Core Types","title":"Core Types","text":"ParamBox{V, T}","category":"page"},{"location":"coreType/#Quiqbox.ParamBox","page":"Core Types","title":"Quiqbox.ParamBox","text":"ParamBox{V, T} <: DifferentiableParameter{ParamBox, T}\n\nParameter container that enables parameter differentiations.\n\n≡≡≡ Field(s) ≡≡≡\n\ndata::T: Stored parameter. It can be accessed through syntax [].\n\ncanDiff::Bool: Indicator that whether this container should be marked as differentiable.\n\n≡≡≡ Initialization Method(s) ≡≡≡\n\nParamBox(data::Number, name::Symbol=:undef; mapFunction::Function=itself, \n canDiff::Bool=true, paramType::Type{T}=Float64) -> \nParamBox{T}\n\nname specifies the name of the variable to be stored, which helps with symbolic representation and automatic differentiation.\n\nmapFunction is for the case to the store the variable that is a dependent variable (math function) f(x) of another variable x which is the actually stored in the struct, and linked to the f(x) via the mapFunction. After initializing the ParamBox, e.g pb1 = ParamBox(x, mapFunction=f), pb.data[] returns x, and pb.data() returns f(x).\n\ncanDiff is used to mark the (independent) variable as differentiable when set to true, otherwise the ParamBox will be ignored in any differentiation process.\n\nparamType specifies the type of the stored variable to avoid data type mutation.\n\n≡≡≡ Example(s) ≡≡≡\n\njulia> Quiqbox.ParamBox(1.0)\nParamBox{Float64}(1.0)[∂]\n\nNOTE: When the parameter inside x::ParamBox is marked as \"differentiable\" (a.k.a. x.canDiff=true), \"[∂]\" in the printing info is in color green, otherwise it's in grey.\n\n\n\n\n\n","category":"type"},{"location":"coreType/","page":"Core Types","title":"Core Types","text":"GaussFunc","category":"page"},{"location":"coreType/#Quiqbox.GaussFunc","page":"Core Types","title":"Quiqbox.GaussFunc","text":"GaussFunc <: AbstractGaussFunc\n\nA single contracted gaussian function struct from package Quiqbox.\n\n≡≡≡ Field(s) ≡≡≡\n\nxpn::ParamBox{:𝛼, Float64}:Exponent of the gaussian function.\n\ncon::ParamBox{:𝑑, Float64}: Contraction coefficient of the gaussian function.\n\nparam::NTuple{2, ParamBox}: A Tuple that stores the ParamBoxs of xpn and con.\n\n≡≡≡ Initialization Method(s) ≡≡≡\n\nGaussFunc(xpn::Real, con::Real) -> GaussFunc\n\nGenerate a GaussFunc given the specified exponent and contraction coefficient.\n\n≡≡≡ Example(s) ≡≡≡\n\njulia> GaussFunc(5.0, 1.0)\nGaussFunc(xpn=ParamBox{:α, Float64}(5.0)[α][∂], con=ParamBox{:d, Float64}(1.0)[d][∂])\n\n\n\n\n\n","category":"type"},{"location":"coreType/","page":"Core Types","title":"Core Types","text":"BasisFunc{S, GN}","category":"page"},{"location":"coreType/#Quiqbox.BasisFunc","page":"Core Types","title":"Quiqbox.BasisFunc","text":"BasisFunc{S, GN} <: FloatingGTBasisFunc{S, GN, 1}\n\nA (floating) basis function with the center attached to it instead of any nucleus.\n\n≡≡≡ Field(s) ≡≡≡\n\ncenter::NTuple{3, ParamBox}: The center coordinate in form of a 3-element ParamBox-type Tuple.\n\ngauss::NTuple{N, GaussFunc}: Gaussian functions within the basis function.\n\nsubshell::String: The subshell (angular momentum symbol).\n\nijk::Tuple{String}: Cartesian representation (pseudo-quantum number) of the angular momentum orientation. E.g., s would be (\"X⁰Y⁰Z⁰\")\n\nnormalizeGTO::Bool: Whether the GTO::GaussFunc will be normalized in calculations.\n\nparam::Tuple{Vararg{<:ParamBox}}: All the tunable parameters::ParamBox stored in the BasisFunc.\n\n≡≡≡ Initialization Method(s) ≡≡≡\n\nBasisFunc(center::Tuple{Vararg{<:ParamBox}}, gauss::Array{<:GaussFunc, 1}, \n ijk::Array{Int, 1}, normalizeGTO::Bool) -> BasisFunc{S, GN}\n\n\n\n\n\n","category":"type"},{"location":"coreType/","page":"Core Types","title":"Core Types","text":"BasisFuncs{S, GN, ON}","category":"page"},{"location":"coreType/#Quiqbox.BasisFuncs","page":"Core Types","title":"Quiqbox.BasisFuncs","text":"BasisFuncs{S, GN, ON} <: FloatingGTBasisFunc{S, GN, ON}\n\nA group of basis functions with identical parameters except they have different subshell under the specified angular momentum. It has the same fields as BasisFunc and specifically, for ijk, instead of being a 1-element Tuple, the size of the Tuple is the size of the corresponding subshell.\n\n\n\n\n\n","category":"type"},{"location":"coreType/","page":"Core Types","title":"Core Types","text":"GTBasis{N, BT}","category":"page"},{"location":"coreType/#Quiqbox.GTBasis","page":"Core Types","title":"Quiqbox.GTBasis","text":"GTBasis{N, BT} <: BasisSetData{N}\n\nThe container to store basis set information.\n\n≡≡≡ Field(s) ≡≡≡\n\nbasis::Array{<:AbstractFloatingGTBasisFunc, 1}: Basis set. S::Array{<:Number, 2}: Overlap matrix. Te::Array{<:Number, 2}: Kinetic energy part of the electronic core Hamiltonian. eeI::Array{<:Number, 4}: Electron-electron interaction. getVne::Function: A Function that returns the nuclear attraction Hamiltonian when nuclei::Array{String, 1} and their coordinates::Array{<:AbstractArray, 1} are input. getHcore::Function: Similar as getVne, a Function that returns the core Hamiltonian when nuclei and their coordinates of same DataType are input.\n\n≡≡≡ Initialization Method(s) ≡≡≡\n\nGTBasis(basis::Vector{<:AbstractFloatingGTBasisFunc}, S::Matrix{<:Number}, \n Te::Matrix{<:Number}, eeI::Array{<:Number, 4}) -> \nGTBasis\n\n\n\n\n\n","category":"type"},{"location":"coreType/","page":"Core Types","title":"Core Types","text":"GridBox{NX, NY, NZ}","category":"page"},{"location":"coreType/#Quiqbox.GridBox","page":"Core Types","title":"Quiqbox.GridBox","text":"GridBox{NX, NY, NZ} <: SemiMutableParameter{GridBox, Float64}\n\nA struct that stores coordinates of grid points in terms of both Vectors and ParamBoxs.\n\n≡≡≡ Field(s) ≡≡≡\n\nnum::Int: Total number of the grid points.\n\nspacing::Float64: The edge length of the grid box.\n\nbox::Vector{NTuple{3, ParamBox}}: The coordinates of grid points in terms of ParamBoxs.\n\ncoord::Array{Array{Float64, 1}, 1}: The coordinates of grid points in terms of Vectors.\n\n≡≡≡ Initialization Method(s) ≡≡≡\n\nGridBox(nGrids::NTuple{3, Int}, spacing::Real=10, \n centerCoord::Array{<:Real, 1}=[0.0,0.0,0.0];\n canDiff::Bool=true, index::Int=0) -> GridBox\n\nConstructor of a general GridBox that doesn't have to shape as a cube. nGrid is a 3-element Tuple that specifies the number of grids (number of grid points - 1) along 3 dimensions. spacing specifies the length between adjacent grid points. centerCoord specifies the geometry center coordinate of the box. canDiff determines whether the ParamBox should be marked as differentiable. index defines the index number for the actual parameter: spacing L, with the default value 0 it would be L₀.\n\n\n\n\n\n","category":"type"},{"location":"coreType/","page":"Core Types","title":"Core Types","text":"SCFconfig{N}","category":"page"},{"location":"coreType/#Quiqbox.SCFconfig","page":"Core Types","title":"Quiqbox.SCFconfig","text":"SCFconfig{N} <: ImmutableParameter{SCFconfig, Any}\n\nThe struct for SCF iteration configurations.\n\n≡≡≡ Field(s) ≡≡≡\n\nmethods::NTuple{N, Symbol}: The applied methods. The available methods are their configurations (in terms of keyword arguments):\n\nMethods Configuration(s) keyword argument(s) Default value(s)\n:DS Damping strength: [0,1] dampingStrength::Float64 0.0\n:DIIS, :EDIIS, :ADIIS Subspace size (>1); Coefficient solver(:ADMM-> ADMM solver, :LCM -> Lagrange solver) DIISsize::Int; solver::Symbol 15; :ADMM\n\nintervals: The stopping (skipping) thresholds for the required methods.\n\nmethodConfigs: The additional keywords arguments for each method stored as Tuples of Pairs.\n\noscillateThreshold: The threshold for oscillating convergence.\n\n≡≡≡ Initialization Method(s) ≡≡≡\n\nSCFconfig(methods::Vector{Symbol}, intervals::Vector{Float64}, \n configs::Dict{Int, <:Vector{<:Pair}}=Dict(1=>Pair[]);\n oscillateThreshold::Float64=1e-5) -> \nSCFconfig{N}\n\nmethods and intervals are the methods to be applied and their stopping (skipping) thresholds respectively; the length of those two Vectors should be the same. configs specifies the additional keyword arguments for each methods by a Pair of which the Int key i is for ith method and the pointed Vector{<:Pair} is the pairs of keyword arguments and their values respectively.\n\n≡≡≡ Example(s) ≡≡≡\n\njulia> SCFconfig([:SD, :ADIIS, :DIIS], [1e-4, 1e-12, 1e-13], Dict(2=>[:solver=>:LCM]) SCFconfig{3}((:SD, :ADIIS, :DIIS), (0.0001, 1.0e-12, 1.0e-13), ((), (:solver => :LCM,), ()), 1.0e-5)\n\n\n\n\n\n","category":"type"},{"location":"coreType/","page":"Core Types","title":"Core Types","text":"Quiqbox.HFtempVars{HFtype, N}","category":"page"},{"location":"coreType/#Quiqbox.HFtempVars","page":"Core Types","title":"Quiqbox.HFtempVars","text":"HFtempVars{HFtype, N} <: HartreeFockintermediateData\n\nThe container to store the intermediate values (only of the same spin configuration) for each iteration during the Hartree-Fock SCF procedure. \n\n≡≡≡ Field(s) ≡≡≡\n\nCs::Array{Array{T1, 2}, 1} where {Float64<:T1<:Float64}: Coefficient matrices.\n\nFs::Array{Array{T2, 2}, 1} where {Float64<:T2<:Float64}: Fock matrices\n\nDs::Array{Array{T3, 2}, 1} where {Float64<:T3<:Float64}: Density matrices corresponding to only spin configuration. For RHF each elements means (unconverged) 0.5*Dᵀ.\n\nEs::Array{Float64, 1}: Part of Hartree-Fock energy corresponding to only spin configuration. For RHF each element means (unconverged) 0.5*E0HF.\n\nshared.Dtots::Array{Array{T, 2}, 1} where {Float64<:T<:Float64}: The total density matrices.\n\nshared.Etots::Array{Float64, 1}: The total Hartree-Fock energy.\n\nNOTE: For UHF, there are 2 HFtempVars being updated during the SCF iterations, and change the field shared.Dtots or shared.Etots of one container will affect the other one's.\n\n\n\n\n\n","category":"type"},{"location":"coreType/","page":"Core Types","title":"Core Types","text":"Quiqbox.HFfinalVars{T, N, Nb}","category":"page"},{"location":"coreType/#Quiqbox.HFfinalVars","page":"Core Types","title":"Quiqbox.HFfinalVars","text":"HFfinalVars{T, N, Nb} <: HartreeFockFinalValue{T}\n\nThe container of the final values after a Hartree-Fock SCF procedure.\n\n≡≡≡ Field(s) ≡≡≡\n\nE0HF::Float64: Hartree-Fock energy of the electronic Hamiltonian. \n\nC::Union{Array{T1, 2}, NTuple{2, Array{T1, 2}}} where {Float64<:T1<:Float64}: Coefficient matrix(s) for one spin configuration.\n\nF::Union{Array{T2, 2}, NTuple{2, Array{T2, 2}}} where {Float64<:T2<:Float64}: Fock matrix(s) for one spin configuration.\n\nD::Union{Array{T3, 2}, NTuple{2, Array{T3, 2}}} where {Float64<:T3<:Float64}: Density matrix(s) for one spin configuration.\n\nEmo::Union{Array{Float64, 1}, NTuple{2, Array{Float64, 1}}}: Energies of molecular orbitals.\n\noccu::Union{Array{Int, 1}, NTuple{2, Array{Int, 1}}}: occupation numbers of molecular orbitals.\n\ntemp::Union{HFtempVars{T}, NTuple{2, HFtempVars{T}}} the intermediate values.\n\nisConverged::Bool: Whether the SCF procedure is converged in the end.\n\n\n\n\n\n","category":"type"},{"location":"coreType/","page":"Core Types","title":"Core Types","text":"Molecule{Nc, Ne, Nb}","category":"page"},{"location":"coreType/#Quiqbox.Molecule","page":"Core Types","title":"Quiqbox.Molecule","text":"Molecule{Nc, Ne, Nb} <:MolecularHartreeFockCoefficient{Nc, Ne}\n\nContainer for the information of a molecule.\n\n≡≡≡ Field(s) ≡≡≡\n\nnuc::Tuple{Vararg{String}}: Nuclei of the molecule.\n\nnucCoords::Tuple{Vararg{NTuple{3, Real}}}: The coordinates of the nuclei.\n\nNe::Int: The number of electrons.\n\norbital::Tuple{Vararg{MolOrbital}}: Molecular orbitals.\n\nbasis::Tuple{Vararg{FloatingGTBasisFunc}}: The basis set for the molecular orbitals.\n\nE0HF::Float64: Hartree-Fock energy of the electronic Hamiltonian from the basis set.\n\nEnnR::Float64: The nuclear-nuclear repulsion energy.\n\n≡≡≡ Initialization Method(s) ≡≡≡\n\nMolecule(basis::Array{FloatingGTBasisFunc, 1}, nuc::Array{String, 1}, \n nucCoords::Array{<:AbstractArray, 1}, Ne::Int, E0HF::Float64, \n Emos::Array{Float64, 1}, occus::Array{<:Real, 1}, C::Array{Float64, 2}, \n spins::Array{String, 1}, \n symms::Array{String, 1}=repeat([\"A\"], length(occus))) -> \nMolecule{Nc, Ne, Nb}\n\nEmos are the energies of corresponding molecular energies. occus are the occupation numbers of the orbitals. C is the coefficient matrix, which does not need to be a square matrix since the number of rows is the size of the (spatial) basis set whereas the number of the columns represents the number of molecular orbitals. spin specifies the spin functions of the orbitals, entries of which can be set to \"Alpha\" or \"Beta\". symms are symmetries of the orbitals where the default entry value is \"A\" for being antisymmetric.\n\n\n\n\n\n","category":"type"},{"location":"coreType/","page":"Core Types","title":"Core Types","text":"MolOrbital{N}","category":"page"},{"location":"coreType/#Quiqbox.MolOrbital","page":"Core Types","title":"Quiqbox.MolOrbital","text":"MolOrbital{N} <: AbstractMolOrbital\n\nStruct of molecular orbitals.\n\n≡≡≡ Field(s) ≡≡≡\n\nsymmetry::String: The symmetry of the orbital. The default value is \"A\" for being antisymmetric.\n\nenergy::Float64: Molecular energy.\n\nspin::String: Spin function of the orbital. Available values: \"Alpha\", \"Beta\".\n\noccupancy::Real: Occupation number.\n\norbitalCoeffs::NTuple{N, Float64}: coefficients of the basis functions to form the molecular orbital.\n\n≡≡≡ Initialization Method(s) ≡≡≡\n\nMolOrbital(energy::Float64, occupancy::Real, orbitalCoeffs::Array{Float64, 1}, \n spin::String=\"Alpha\", symmetry::String=\"A\") -> MolOrbital{N}\n\n\n\n\n\n","category":"type"},{"location":"optimization/#Parameter-Optimization","page":"Parameter Optimization","title":"Parameter Optimization","text":"","category":"section"},{"location":"optimization/#Selectively-Optimizing-Parameters","page":"Parameter Optimization","title":"Selectively Optimizing Parameters","text":"","category":"section"},{"location":"optimization/","page":"Parameter Optimization","title":"Parameter Optimization","text":"In the Basis Sets section we have briefly introduced the parameters in terms of ParamBox that are embedded in containers such as BasisFunc and BasisFuncs that are directly used to form a basis set. This means how we construct the basis set using the parameters will determine how large of a parameter space we have to optimize the basis set. For more information please refer to Constructing basis sets based on ParamBox. Here is a example to use GaussFunc and GridBox to quickly generate a grid-based basis set with only 3 actual parameters, 1 determines all the coordinates of basis function centers, the other 2 are the only exponent coefficient alpha and contraction coefficient d.","category":"page"},{"location":"optimization/","page":"Parameter Optimization","title":"Parameter Optimization","text":"push!(LOAD_PATH,\"../../src/\") # hide\nusing Quiqbox # hide\n\nnuc = [\"H\", \"H\"]\n\nnucCoords = [[-0.7,0.0,0.0], [0.7,0.0,0.0]]\n\ngrid = GridBox(1, 1.5)\n\ngf1 = GaussFunc(0.7,1)\n\nbs = genBasisFunc.(grid.box, Ref([gf1]))","category":"page"},{"location":"optimization/","page":"Parameter Optimization","title":"Parameter Optimization","text":"After constructing the basis set, we need to use uniqueParams! to mark all the unique parameters that can also be optimized later:","category":"page"},{"location":"optimization/","page":"Parameter Optimization","title":"Parameter Optimization","text":"pars = uniqueParams!(bs, filterMapping=true)","category":"page"},{"location":"optimization/","page":"Parameter Optimization","title":"Parameter Optimization","text":"As expected, there are indeed only 3 unique tunable parameters despite the basis set already has 8 basis functions. (note that keyword argument filterMapping in uniqueParams! is set to true because we want the function to only return independent parameters) However, if we take a step further, we can remove d since each basis function here is just a single Gaussian function, which means the contraction coefficient won't affect the optimization results. Thus, input the intent parameters (along with other necessary arguments) into the Quiqbox function optimizeParams! and we can sit and wait for the optimization iterations to complete.","category":"page"},{"location":"optimization/","page":"Parameter Optimization","title":"Parameter Optimization","text":"parsPartial = [pars[1], pars[3]]\n\noptimizeParams!(bs, parsPartial, nuc, nucCoords, maxSteps=20);","category":"page"},{"location":"optimization/","page":"Parameter Optimization","title":"Parameter Optimization","text":"After the optimization, you can check the basis set and we can see the parameters inside of it is also changed. This is because the ! in the function names indicates that optimizeParams! is a function that modifies its arguments.","category":"page"},{"location":"optimization/","page":"Parameter Optimization","title":"Parameter Optimization","text":"getParams(bs)","category":"page"},{"location":"optimization/","page":"Parameter Optimization","title":"Parameter Optimization","text":"It you want to go through the above example by yourself, you can also find the script here.","category":"page"},{"location":"optimization/#Store-Customized-Basis-Set","page":"Parameter Optimization","title":"Store Customized Basis Set","text":"","category":"section"},{"location":"optimization/","page":"Parameter Optimization","title":"Parameter Optimization","text":"Now, if you want, you can also store the information of the basis set in an container called GTBasis that not only includes the basis set, but also the related 1-electron and 2-electron integral values (nuclear attraction is not stored). GTBasis can also be accepted as an argument for runHF to save the time of calculating the integrals of the basis set.","category":"page"},{"location":"optimization/","page":"Parameter Optimization","title":"Parameter Optimization","text":"GTBasis(bs)","category":"page"},{"location":"coreFunction/#Core-Functions","page":"Core Functions","title":"Core Functions","text":"","category":"section"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"genBasisFunc","category":"page"},{"location":"coreFunction/#Quiqbox.genBasisFunc","page":"Core Functions","title":"Quiqbox.genBasisFunc","text":"genBasisFunc(args..., kws...) -> BasisFunc\ngenBasisFunc(args..., kws...) -> BasisFuncs\ngenBasisFunc(args..., kws...) -> collection\n\nConstructor of BasisFunc and BasisFuncs, but it also returns different kinds of collections of them based on the applied methods.\n\n≡≡≡ Method 1 ≡≡≡\n\ngenBasisFunc(coord::AbstractArray, gs::Array{<:GaussFunc, 1}, \n ijkOrijks::Union{Array{Int, 1}, Array{Array{Int, 1}, 1}}; \n normalizeGTO::Bool=false)\n\nijkOrijks is the Array of the pseudo-quantum number(s) to specify the angular momentum(s). E.g., s is [0,0,0] and p is [[1,0,0], [0,1,0], [0,0,1]].\n\n≡≡≡ Example(s) ≡≡≡\n\njulia> genBasisFunc([0,0,0], GaussFunc(2,1), [0,1,0])\nBasisFunc{:P, 1}(gauss, subshell, center)[X⁰Y¹Z⁰][0.0, 0.0, 0.0]\n\n≡≡≡ Method 2 ≡≡≡\n\ngenBasisFunc(coord::AbstractArray, gs::Array{<:GaussFunc, 1}, subshell::String=\"S\"; \n ijkFilter::Array{Bool, 1}=fill(true, SubshellDimList[subshell]), \n normalizeGTO::Bool=false)\n\n≡≡≡ Example(s) ≡≡≡\n\njulia> genBasisFunc([0,0,0], GaussFunc(2,1), \"S\")\nBasisFunc{:S, 1}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]\n\njulia> genBasisFunc([0,0,0], GaussFunc(2,1), \"P\")\nBasisFuncs{:P, 1, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0]\n\n≡≡≡ Method 3 ≡≡≡\n\ngenBasisFunc(coord::AbstractArray, gExpsANDgCons::NTuple{2, Array{<:Real, 1}}, \n subshell=\"S\"; kw...)\n\nInstead of directly inputting GaussFunc, one can also input a 2-element Tuple of the exponent(s) and contraction coefficient(s) corresponding to the same GaussFunc(s).\n\n≡≡≡ Example(s) ≡≡≡\n\njulia> genBasisFunc([0,0,0], (2, 1), \"P\")\nBasisFuncs{:P, 1, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0]\n\njulia> genBasisFunc([0,0,0], ([2, 1.5], [1, 0.5]), \"P\")\nBasisFuncs{:P, 2, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0]\n\n≡≡≡ Method 4 ≡≡≡\n\ngenBasisFunc(center, BSKeyANDnuc::Array{Tuple{String, String}, 1})\n\nIf the user wants to construct existed atomic basis set(s), they can use the (Array of) (BS_name, Atom_name) as the second input. If the atom is omitted, then basis set for H is used.\n\n≡≡≡ Example(s) ≡≡≡\n\njulia> genBasisFunc([0,0,0], (\"STO-3G\", \"Li\"))\n3-element Vector{Quiqbox.FloatingGTBasisFunc}:\nBasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]\nBasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]\nBasisFuncs{:P, 3, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0]\n\njulia> genBasisFunc([0,0,0], \"STO-3G\")\n1-element Vector{Quiqbox.FloatingGTBasisFunc}:\nBasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]\n\njulia> genBasisFunc([0,0,0], [\"STO-2G\", \"STO-3G\"])\n2-element Vector{Quiqbox.FloatingGTBasisFunc}:\nBasisFunc{:S, 2}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]\nBasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]\n\njulia> genBasisFunc([0,0,0], [(\"STO-2G\", \"He\"), (\"STO-3G\", \"O\")])\n4-element Vector{Quiqbox.FloatingGTBasisFunc}:\nBasisFunc{:S, 2}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]\nBasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]\nBasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]\nBasisFuncs{:P, 3, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0]\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"centerOf","category":"page"},{"location":"coreFunction/#Quiqbox.centerOf","page":"Core Functions","title":"Quiqbox.centerOf","text":"centerOf(bf::FloatingGTBasisFunc) -> Array{<:Real, 1}\n\nReturn the center coordinate of the input FloatingGTBasisFunc.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"GTBasis(basis::Vector{<:Quiqbox.AbstractFloatingGTBasisFunc})","category":"page"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"decomposeBasisFunc","category":"page"},{"location":"coreFunction/#Quiqbox.decomposeBasisFunc","page":"Core Functions","title":"Quiqbox.decomposeBasisFunc","text":"decomposeBasisFunc(bf::FloatingGTBasisFunc; splitGaussFunc::Bool=false) -> \nArray{<:FloatingGTBasisFunc, 1}\n\nDecompose a FloatingGTBasisFunc into a Vector of BasisFuncs. If splitGaussFunc is true, then each BasisFunc in the returned Vector only contains 1 GaussFunc.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"basisSize","category":"page"},{"location":"coreFunction/#Quiqbox.basisSize","page":"Core Functions","title":"Quiqbox.basisSize","text":"basisSize(subshell::Union{String, Array{String, 1}}) -> Tuple\n\nReturn the size (number of orbitals) of each subshell.\n\n\n\n\n\nbasisSize(basisFunctions) -> Tuple\n\nReturn the numbers of orbitals of the input basis function(s).\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"genBasisFuncText","category":"page"},{"location":"coreFunction/#Quiqbox.genBasisFuncText","page":"Core Functions","title":"Quiqbox.genBasisFuncText","text":"genBasisFuncText(bf::FloatingGTBasisFunc; norm=1.0, printCenter=true) -> String\n\nGenerate a String of the text of the input FloatingGTBasisFunc. norm is the additional normalization factor. If printCenter is true, the center coordinate will be added on the first line of the String.\n\n\n\n\n\ngenBasisFuncText(bs::Array{<:FloatingGTBasisFunc, 1}; \n norm=1.0, printCenter=true, groupCenters::Bool=true) -> \nString\n\nGenerate a String of the text of the input basis set. norm is the additional normalization factor. If printCenter is true, the center coordinate will be added on the first line of the String. groupCenters determines whether the function will group the basis functions with same center together.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"genBFuncsFromText","category":"page"},{"location":"coreFunction/#Quiqbox.genBFuncsFromText","page":"Core Functions","title":"Quiqbox.genBFuncsFromText","text":"genBFuncsFromText(content::String; adjustContent::Bool=false, \n adjustFunction::F=sciNotReplace, \n excludeFirstNlines=0, excludeLastNlines=0, \n center::Union{AbstractArray, \n Tuple{Vararg{<:ParamBox}}, \n Missing}=missing) where {F<:Function} -> \nArray{<:FloatingGTBasisFunc, 1}\n\nGenerate the basis set from a String of basis set in Gaussian format or the String output from genBasisFuncText. For the former, adjustContent needs to be set to true. adjustFunction is only applied when adjustContent=true, which in default is a function used to detect and convert the format of the scientific notation in the String.\n\nexcludeFirstNlines and excludeLastNlines are used to exclude first or last few lines of the String if intent. genBFuncsFromText can't directly read center coordinate information from the String even if it's included, so argument center is used to assign a coordinate for all the basis functions from the String; it can be a Vector, a Tuple of the positional ParamBoxs, or simply (in default) set to missing for later assignment.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"assignCenter!","category":"page"},{"location":"coreFunction/#Quiqbox.assignCenter!","page":"Core Functions","title":"Quiqbox.assignCenter!","text":"assignCenter!(center::AbstractArray, b::FloatingGTBasisFunc) -> NTuple{3, ParamBox}\n\nAssign a new coordinate to the center of the input FloatingGTBasisFunc. Also return the altered center.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"uniqueParams!","category":"page"},{"location":"coreFunction/#Quiqbox.uniqueParams!","page":"Core Functions","title":"Quiqbox.uniqueParams!","text":"uniqueParams!(bs; onlyDifferentiable::Bool=false, ignoreContainerType::Bool=false, \n filter::Bool=true, filterMapping::Bool=false) -> Array{<:ParamBox, 1}\n\nMark the parameters (ParamBox) in input bs which can a Vector of GaussFunc or FloatingGTBasisFunc. The identical parameters will be marked with same index.\n\n=== Keyword argument(s) ===\n\nonlyDifferentiable: Determine whether ignore un-differentiable parameters.\n\nignoreContainerType: If set to true, then only the field data of the ParamBoxs will be compared to determine whether each ParamBox are unique. \n\nfilter: Determine whether filter out the identical ParamBoxs and only return the unique ones.\n\nfilterMapping: Determine wether return the ParamBoxs with identical fields except the map field. When filter=false, this argument is automatically overwritten to be false.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"getVar","category":"page"},{"location":"coreFunction/#Quiqbox.getVar","page":"Core Functions","title":"Quiqbox.getVar","text":"getVar(pb::ParamBox; markUndifferentiable::Bool=false, includeMapping::Bool=false) -> \nArray{<:Pair{Symbolics.Num, <:Number}, 1}\n\nReturn a 1-element Vector of Pair to show the Symbol::Symbolics.Num of the stored variable and the corresponding values.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"getVars","category":"page"},{"location":"coreFunction/#Quiqbox.getVars","page":"Core Functions","title":"Quiqbox.getVars","text":"getVars(obj::Union{GaussFunc, BasisFunc}; markUndifferentiable::Bool=false, \n includeMapping::Bool=false) -> Array{<:Pair, 1}\n\ngetVars(collection::Array{<:Union{GaussFunc, BasisFunc, ParamBox}, 1}; \n markUndifferentiable::Bool=false, includeMapping::Bool=false) -> \nArray{<:Pair, 1}\n\nReturn a Vector of Pair to indicate the mapping relations of and between the variables stored in the ParamBoxs in the given input.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"expressionOf","category":"page"},{"location":"coreFunction/#Quiqbox.expressionOf","page":"Core Functions","title":"Quiqbox.expressionOf","text":"expressionOf(gf::GaussFunc; markUndifferentiable::Bool=false, \n substituteValue::Bool=false) -> Symbolics.Num\n\nexpressionOf(gf::FloatingGTBasisFunc; markUndifferentiable::Bool=false, \n substituteValue::Bool=false) -> Array{<:Symbolics.Num, 2}\n\nReturn the expression of a given GaussFunc or FloatingGTBasisFunc. When the latter is the input, a Matrix is returned of which the row(s) is(are) one orbital with the expression(s) of its Gaussian function(s) as entry(entries).\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"GridBox(nGridPerEdge::Int, spacing::Real=10, \n centerCoord::Array{<:Real, 1}=[0.0,0.0,0.0]; \n canDiff::Bool=true, index::Int=0)","category":"page"},{"location":"coreFunction/#Quiqbox.GridBox","page":"Core Functions","title":"Quiqbox.GridBox","text":"GridBox(nGridPerEdge::Int, spacing::Real=10, \n centerCoord::Array{<:Real, 1}=[0.0,0.0,0.0]; \n canDiff::Bool=true, index::Int=0) -> GridBox\n\nMethod of generating a cubic GridBox. nGridPerEdge specifies the number of grids (number of grid points - 1) along each dimension.spacing specifies the length between adjacent grid points. centerCoord specifies the geometry center coordinate of the box. canDiff determines whether the ParamBox should be marked as differentiable. index defines the index number for the actual parameter: spacing L, with the default value 0 it would be L₀.\n\n\n\n\n\n","category":"type"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"gridPoint","category":"page"},{"location":"coreFunction/#Quiqbox.gridPoint","page":"Core Functions","title":"Quiqbox.gridPoint","text":"gridPoint(coord::Array{<:Real, 1}) -> NTuple{3, ParamBox}\n\nGenerate a Tuple of coordinate ParamBoxs given a Vector.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"runHF","category":"page"},{"location":"coreFunction/#Quiqbox.runHF","page":"Core Functions","title":"Quiqbox.runHF","text":"runHF(bs::Union{BasisSetData, Array{<:AbstractFloatingGTBasisFunc, 1}}, \n nuc::Array{String, 1}, \n nucCoords::Array{<:AbstractArray, 1}, \n N::Union{NTuple{2, Int}, Int}=getCharge(nuc); \n initialC::Union{Array{T, 2}, NTuple{2, Array{T, 2}}, Symbol}=:GWH, \n HFtype::Symbol=:RHF, \n scfConfig::SCFconfig=defaultSCFconfig, \n earlyTermination::Bool=true, \n printInfo::Bool=true, \n maxSteps::Int=1000) where {Float64<:T<:Float64} -> HFfinalVars\n\nMain function to run Hartree-Fock in Quiqbox.\n\n=== Positional argument(s) ===\n\nbs::Union{BasisSetData, Array{<:AbstractFloatingGTBasisFunc, 1}}: Basis set.\n\nnuc::Array{String, 1}: The element symbols of the nuclei for the Molecule.\n\nnucCoords::Array{<:AbstractArray, 1}: The coordinates of the nuclei.\n\nN::Union{NTuple{2, Int}, Int}: The total number of electrons or the numbers of electrons with different spins respectively.\n\n=== Keyword argument(s) ===\n\ninitialC::Union{Array{T, 2}, NTuple{2, Array{T, 2}}, Symbol}: Initial guess of the coefficient matrix(s) C of the molecular orbitals.\n\nHFtype::Symbol: Hartree-Fock type. Available values are :RHF and :UHF.\n\nscfConfig::SCFconfig: SCF iteration configuration.\n\nearlyTermination::Bool: Whether automatically early terminate (skip) a convergence method when its performance becomes unstable or poor.\n\nprintInfo::Bool: Whether print out the information of each iteration step.\n\nmaxSteps::Int: Maximum allowed iteration steps regardless of whether the SCF converges.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"runHFcore","category":"page"},{"location":"coreFunction/#Quiqbox.runHFcore","page":"Core Functions","title":"Quiqbox.runHFcore","text":"runHFcore(N::Union{NTuple{2, Int}, Int}, \n Hcore::Array{T1, 2}, \n HeeI::Array{T2, 4}, \n S::Array{T3, 2}, \n X::Array{T4, 2}=getX(S), \n C::Union{Array{T, 2}, NTuple{2, Array{T, 2}}, Symbol}=guessC(S, Hcore; X);\n HFtype::Symbol=:RHF, \n scfConfig::SCFconfig{L}, \n earlyTermination::Bool=true, \n printInfo::Bool=true, \n maxSteps::Int=1000) where {Float64<:T1<:Float64, \n Float64<:T2<:Float64, \n Float64<:T3<:Float64, \n Float64<:T4<:Float64, \n Float64<:T5<:Float64, L}\n\nThe core function of runHF.\n\n=== Positional argument(s) ===\n\nN::Union{NTuple{2, Int}, Int}: The total number of electrons or the numbers of electrons with different spins respectively.\n\nHcore::Array{T1, 2}: Core Hamiltonian of electronic Hamiltonian.\n\nHeeI::Array{T2, 4}: The electron-electron interaction Hamiltonian which includes both the Coulomb interactions and the Exchange Correlations.\n\nS::Array{T3, 2}: Overlap matrix of the corresponding basis set.\n\nX::Array{T4, 2}: Orthogonal transformation matrix of S. Default value is S^(-0.5).\n\nC::Union{Array{T, 2}, NTuple{2, Array{T, 2}}, Symbol}: Initial guess of the coefficient matrix(s) C of the molecular orbitals.\n\n=== Keyword argument(s) ===\n\nHFtype::Symbol: Hartree-Fock type. Available values are :RHF and :UHF.\n\nscfConfig::SCFconfig: SCF iteration configuration.\n\nearlyTermination::Bool: Whether automatically early terminate (skip) a convergence method when its performance becomes unstable or poor.\n\nprintInfo::Bool: Whether print out the information of each iteration step.\n\nmaxSteps::Int: Maximum allowed iteration steps regardless of whether the SCF converges.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"Molecule(basis::Array{<:Quiqbox.FloatingGTBasisFunc, 1}, nuc::Array{String, 1}, \n nucCoords::Array{<:AbstractArray, 1}, HFfVars::Quiqbox.HFfinalVars)","category":"page"},{"location":"coreFunction/#Quiqbox.Molecule-Tuple{Vector{var\"#s30\"} where var\"#s30\"<:Quiqbox.FloatingGTBasisFunc, Vector{String}, Vector{var\"#s29\"} where var\"#s29\"<:AbstractArray, Quiqbox.HFfinalVars}","page":"Core Functions","title":"Quiqbox.Molecule","text":"Molecule(basis::Array{<:FloatingGTBasisFunc, 1}, nuc::Array{String, 1}, \n nucCoords::Array{<:AbstractArray, 1}, HFfVars::HFfinalVars) -> Molecule\n\nConstruct a Molecule from a basis set, nuclei information, and the result from the corresponding Hartree-Fock SCF procedure, specifically a HFfinalVars struct.\n\n\n\n\n\n","category":"method"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"getMolOrbitals","category":"page"},{"location":"coreFunction/#Quiqbox.getMolOrbitals","page":"Core Functions","title":"Quiqbox.getMolOrbitals","text":"getMolOrbitals(ens::Array{Float64, 1}, occus::Array{<:Real, 1}, C::Matrix{Float64}, \n spins::Array{String, 1}, \n symms::Array{String, 1}=repeat([\"A\"], length(occus))) -> \nTuple{Vararg{getMolOrbitals}}\n\nA function that returns the molecular orbitals.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"nnRepulsions","category":"page"},{"location":"coreFunction/#Quiqbox.nnRepulsions","page":"Core Functions","title":"Quiqbox.nnRepulsions","text":"nnRepulsions(nuc::Array{String, 1}, nucCoords::Array{<:AbstractArray, 1}) -> Float64\n\nCalculate the nuclear-nuclear repulsion energy given the nuclei and their coordinates of a molecule.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"optimizeParams!","category":"page"},{"location":"coreFunction/#Quiqbox.optimizeParams!","page":"Core Functions","title":"Quiqbox.optimizeParams!","text":"optimizeParams!(bs::Array{<:FloatingGTBasisFunc, 1}, pbs::Array{<:ParamBox, 1},\n nuc::Array{String, 1}, nucCoords::Array{<:AbstractArray, 1}, \n Ne::Union{NTuple{2, Int}, Int}=getCharge(nuc);\n Etarget::Float64=NaN, threshold::Float64=1e-4, maxSteps::Int=2000, \n printInfo::Bool=true, GDmethod::F1=gradDescent!, HFtype::Symbol=:RHF, \n ECmethod::F2=Quiqbox.defaultECmethod) where \n {F1<:Function, F2<:Function} -> \nEs::Array{Float64, 1}, pars::Array{Float64, 2}, grads::Array{Float64, 2}\n\nThe main function to optimize the parameters of a given basis set.\n\n=== Positional argument(s) ===\n\nbs::Array{<:FloatingGTBasisFunc, 1}: Basis set.\n\npbs::Array{<:ParamBox, 1}: The parameters to be optimized that are extracted from the basis set.\n\nnuc::Array{String, 1}: The nuclei of the molecule.\n\nnucCoords::Array{<:AbstractArray, 1}: The nuclei coordinates.\n\nNe::Union{NTuple{2, Int}, Int}: The total number of electrons or the numbers of electrons with different spins respectively.\n\n=== Keyword argument(s) ===\n\nEtarget::Float64: The target Hartree-Hock energy intent to achieve.\n\nthreshold::Float64: The threshold for the convergence when evaluating difference between the latest two energies.\n\nmaxSteps::Int: Maximum allowed iteration steps regardless of whether the optimization iteration converges.\n\nprintInfo::Bool: Whether print out the information of each iteration step.\n\nGDmethod::F1: Applied gradient descent Function.\n\nHFtype::Symbol: Hartree-Fock type. Available values are :RHF and :UHF.\n\nECmethod::F2: The Function used to update Hartree-Fock energy and coefficient matrix(s) during the optimization iterations. === Keyword argument(s) ===\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"updateParams!","category":"page"},{"location":"coreFunction/#Quiqbox.updateParams!","page":"Core Functions","title":"Quiqbox.updateParams!","text":"updateParams!(pbs::Array{<:ParamBox, 1}, grads::Array{<:Real, 1}; \n method::F=gradDescent!) where {F<:Function} -> Array{<:ParamBox, 1}\n\nGiven a Vector of parameters::ParamBox and its gradients with respect to each parameter, update the ParamBoxs and return the updated values.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"gradDescent!","category":"page"},{"location":"coreFunction/#Quiqbox.gradDescent!","page":"Core Functions","title":"Quiqbox.gradDescent!","text":"gradDescent!(pars::Vector{<:Real}, grads::Vector{<:Real}, η=0.001) -> \npars::Vector{<:Real}\n\nDefault gradient descent method in used in Quiqbox.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"overlap","category":"page"},{"location":"coreFunction/#Quiqbox.overlap","page":"Core Functions","title":"Quiqbox.overlap","text":"overlap(fb1::AbstractFloatingGTBasisFunc, fb2::AbstractFloatingGTBasisFunc) -> \nArray{Float64, 2}\n\nReturn the orbital overlap matrix (an N×N Matrix where N is the number of spatial orbitals) given 2 basis functions.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"overlaps","category":"page"},{"location":"coreFunction/#Quiqbox.overlaps","page":"Core Functions","title":"Quiqbox.overlaps","text":"overlaps(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}) -> Array{Float64, 2}\n\nReturn the orbital overlap matrix (an N×N Matrix where N is the number of spatial orbitals) given a basis set in the form of an Array.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"nucAttraction","category":"page"},{"location":"coreFunction/#Quiqbox.nucAttraction","page":"Core Functions","title":"Quiqbox.nucAttraction","text":"nucAttraction(fb1::AbstractFloatingGTBasisFunc, fb2::AbstractFloatingGTBasisFunc, \n nuc::Array{String, 1}, nucCoords::Array{<:AbstractArray, 1}) -> \nArray{Float64, 2}\n\nReturn the nuclear attraction matrix (an N×N Matrix where N is the number of spatial orbitals) given 2 basis functions, and the nuclei with their coordinates (in atomic unit).\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"nucAttractions","category":"page"},{"location":"coreFunction/#Quiqbox.nucAttractions","page":"Core Functions","title":"Quiqbox.nucAttractions","text":"nucAttractions(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}, nuc::Array{String, 1}, \n nucCoords::Array{<:AbstractArray, 1}) -> \nArray{Float64, 2}\n\nReturn the nuclear attraction matrix (an N×N Matrix where N is the number of spatial orbitals) given a basis set in the form of an Array, and the nuclei with their coordinates (in atomic unit).\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"elecKinetic","category":"page"},{"location":"coreFunction/#Quiqbox.elecKinetic","page":"Core Functions","title":"Quiqbox.elecKinetic","text":"elecKinetic(fb1::AbstractFloatingGTBasisFunc, fb2::AbstractFloatingGTBasisFunc) -> \nArray{Float64, 2}\n\nReturn the electron kinetic energy matrix (an N×N Matrix where N is the number of spatial orbitals) given 2 basis functions.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"elecKinetics","category":"page"},{"location":"coreFunction/#Quiqbox.elecKinetics","page":"Core Functions","title":"Quiqbox.elecKinetics","text":"elecKinetics(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}) -> Array{Float64, 2}\n\nReturn the electron kinetic energy matrix (an N×N Matrix where N is the number of spatial orbitals) given a basis set in the form of an Array.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"coreHij","category":"page"},{"location":"coreFunction/#Quiqbox.coreHij","page":"Core Functions","title":"Quiqbox.coreHij","text":"coreHij(fb1::AbstractFloatingGTBasisFunc, fb2::AbstractFloatingGTBasisFunc) -> \nArray{Float64, 2}\n\nReturn a matrix element or block of the core Hamiltonian (an N×N Matrix where N is the number of spatial orbitals) given 2 basis functions.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"coreH","category":"page"},{"location":"coreFunction/#Quiqbox.coreH","page":"Core Functions","title":"Quiqbox.coreH","text":"coreH(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}) -> Array{Float64, 2}\n\nReturn the core Hamiltonian matrix (an N×N Matrix where N is the number of spatial orbitals) given a basis set in the form of an Array.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"eeInteraction","category":"page"},{"location":"coreFunction/#Quiqbox.eeInteraction","page":"Core Functions","title":"Quiqbox.eeInteraction","text":"eeInteraction(bf1::AbstractFloatingGTBasisFunc, \n bf2::AbstractFloatingGTBasisFunc, \n bf3::AbstractFloatingGTBasisFunc, \n bf4::AbstractFloatingGTBasisFunc) -> \nArray{Float64, 4}\n\nReturn the electron-electron interaction tensor (an N×N×N×N Tensor where N is the number of spatial orbitals) given 4 basis functions.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"eeInteractions","category":"page"},{"location":"coreFunction/#Quiqbox.eeInteractions","page":"Core Functions","title":"Quiqbox.eeInteractions","text":"eeInteractions(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}) -> Array{Float64, 4}\n\nReturn the electron-electron interaction tensor (an N×N×N×N Tensor where N is the number of spatial orbitals) given a basis set in the form of an Array. \n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"Quiqbox.oneBodyBFTensor","category":"page"},{"location":"coreFunction/#Quiqbox.oneBodyBFTensor","page":"Core Functions","title":"Quiqbox.oneBodyBFTensor","text":"oneBodyBFTensor(libcinFunc::Symbol, b1::AbstractFloatingGTBasisFunc, \n b2::AbstractFloatingGTBasisFunc, nuclei::Array{String, 1}=String[], \n nucleiCoords::Array{<:AbstractArray, 1}=Array[]; \n isGradient::Bool=false) -> \nArray{Float64, 2}\n\nCore function for one-electron integrals.\n\nlibcinFunc::Symbol specifies the backend libcint (https://github.com/sunqm/libcint) function name, e.g. \"int1enuccart\" should be converted to :int1e_nuc_cartas the input argument. If the integral does not need the information of nuclei and their coordinates, those 2 arguments can be omitted. If the integral is a spacial gradient, isGradient should be set to true.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"Quiqbox.twoBodyBFTensor","category":"page"},{"location":"coreFunction/#Quiqbox.twoBodyBFTensor","page":"Core Functions","title":"Quiqbox.twoBodyBFTensor","text":"twoBodyBFTensor(libcinFunc::Symbol, \n b1::AbstractFloatingGTBasisFunc, b2::AbstractFloatingGTBasisFunc, \n b3::AbstractFloatingGTBasisFunc, b4::AbstractFloatingGTBasisFunc; \n isGradient::Bool=false) -> \nArray{Float64, 5}\n\nCore function for one-electron integrals.\n\nlibcinFunc::Symbol specifies the backend libcint (https://github.com/sunqm/libcint) function name, e.g. \"cint2ecart\" should be converted to `:cint2ecart`as the input argument. \n\n\n\n\n\n","category":"function"},{"location":"list/#Index","page":"Index","title":"Index","text":"","category":"section"},{"location":"list/","page":"Index","title":"Index","text":"Below are the types and functions included in the documentation.","category":"page"},{"location":"list/#Types","page":"Index","title":"Types","text":"","category":"section"},{"location":"list/","page":"Index","title":"Index","text":"order = [:type]","category":"page"},{"location":"list/#Functions","page":"Index","title":"Functions","text":"","category":"section"},{"location":"list/","page":"Index","title":"Index","text":"order = [:function]","category":"page"},{"location":"toolFunction/#Tool-Functions","page":"Tool Functions","title":"Tool Functions","text":"","category":"section"},{"location":"toolFunction/","page":"Tool Functions","title":"Tool Functions","text":"Quiqbox.checkFname","category":"page"},{"location":"toolFunction/#Quiqbox.checkFname","page":"Tool Functions","title":"Quiqbox.checkFname","text":"checkFname(Fname::String; showWarning::Bool=true) -> String\n\nCheck if there is a file with the same name in the current directory. If so, will add an \"_N\" at the end of the file name String. showWarning determines whether prints out the WARNING info when there is a file with the same name.\n\n\n\n\n\n","category":"function"},{"location":"toolFunction/","page":"Tool Functions","title":"Tool Functions","text":"hasEqual","category":"page"},{"location":"toolFunction/#Quiqbox.hasEqual","page":"Tool Functions","title":"Quiqbox.hasEqual","text":"hasEqual(obj1, obj2, obj3...; ignoreFunction=false, ignoreContainerType=false) -> Bool\n\nCompare if two objects are the equal. \n\nIf ignoreFunction = true then the function will pop up a warning message when a field is a function.\n\nIf ignoreContainerType = true then the function will ignore the type difference of the (outermost) container as long as the inside fields are equal. \n\nThis function is an instantiation of hasBoolRelation.\n\n≡≡≡ Example(s) ≡≡≡\n\njulia> begin\n struct S\n a::Int\n b::Float64\n end\n a = S(1, 1.0)\n b = S(1, 1.0)\n c = S(1, 1.0)\n d = S(1, 1.1)\n\n @show hasEqual(a, b, c)\n @show hasEqual(a, b, c, d)\n end\nhasEqual(a, b, c) = true\nhasEqual(a, b, c, d) = false\nfalse\n\n\n\n\n\n","category":"function"},{"location":"toolFunction/","page":"Tool Functions","title":"Tool Functions","text":"hasIdentical","category":"page"},{"location":"toolFunction/#Quiqbox.hasIdentical","page":"Tool Functions","title":"Quiqbox.hasIdentical","text":"hasIdentical(obj1, obj2, obj3...; \n ignoreFunction=false, ignoreContainerType=false) -> Bool\n\nCompare if two objects are the Identical. An instantiation of hasBoolRelation.\n\nIf ignoreFunction = true then the function will pop up a warning message when a field is a function.\n\nIf ignoreContainerType = true then the function will ignore the type difference of the (outermost) container as long as the inside fields are identical.\n\nThis function is an instantiation of hasBoolRelation.\n\n≡≡≡ Example(s) ≡≡≡\n\njulia> begin\n struct S\n a::Int\n b::Array{Float64, 1}\n end\n \n a = S(1, [1.0, 1.1])\n b = a\n c = b\n d = S(1, [1.0, 1.1])\n\n @show hasIdentical(a, b, c)\n @show hasIdentical(a, b, c, d)\n end\nhasIdentical(a, b, c) = true\nhasIdentical(a, b, c, d) = false\nfalse\n\n\n\n\n\n","category":"function"},{"location":"toolFunction/","page":"Tool Functions","title":"Tool Functions","text":"flatten","category":"page"},{"location":"toolFunction/#Quiqbox.flatten","page":"Tool Functions","title":"Quiqbox.flatten","text":"flatten(a::Tuple) -> Tuple\n\nflatten(a::Array) -> Array\n\nFlatten a::Union{Array, Tuple} that contains Arrays and/or Tuples. Only operate on the outermost layer.\n\n≡≡≡ Example(s) ≡≡≡\n\njulia> flatten((:one, 2, [3, 4.0], ([5], \"six\"), \"7\"))\n(:one, 2, 3.0, 4.0, [5], \"six\", \"7\")\n\njulia> flatten([:one, 2, [3, 4.0], ([5], \"six\"), \"7\"])\n7-element Vector{Any}:\n :one\n 2\n 3.0\n 4.0\n [5]\n \"six\"\n \"7\"\n\n\n\n\n\n","category":"function"},{"location":"toolFunction/","page":"Tool Functions","title":"Tool Functions","text":"markUnique","category":"page"},{"location":"toolFunction/#Quiqbox.markUnique","page":"Tool Functions","title":"Quiqbox.markUnique","text":"markUnique(arr::AbstractArray, args...; compareFunction::Function = hasEqual, kws...)\n\nReturn a markingList using Int number to mark each different elements from (and inside) the input argument(s) and a uniqueList to contain all the unique elements when compareFunction is set to hasEqual (in default).\n\nargs and kws are positional arguments and keywords arguments respectively as parameters of the specified compareFunction.\n\n≡≡≡ Example(s) ≡≡≡\n\njulia> markUnique([1, [1, 2],\"s\", [1, 2]])\n([1, 2, 3, 2], Any[1, [1, 2], \"s\"])\n\njulia> begin \n struct S\n a::Int\n b::Float64\n end\n \n a = S(1, 2.0)\n b = S(1, 2.0)\n c = S(1, 2.1)\n d = a\n \n markUnique(a,b,c,d)\n end\n([1, 1, 2, 1], Any[S(1, 2.0), S(1, 2.1)])\n\n\n\n\n\n","category":"function"},{"location":"toolFunction/","page":"Tool Functions","title":"Tool Functions","text":"Quiqbox.itself","category":"page"},{"location":"toolFunction/#Quiqbox.itself","page":"Tool Functions","title":"Quiqbox.itself","text":"A function that only returns its argument.\n\n\n\n\n\n","category":"function"},{"location":"#Quiqbox.jl","page":"Home","title":"Quiqbox.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Quiqbox is a quantum chemistry and quantum computing software package that starts off around Gaussian basis set optimization of molecular electronic-structure problems. Quiqbox is written in pure Julia.","category":"page"},{"location":"#Features","page":"Home","title":"Features","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Floating and fixed-basis Gaussian-type orbital (GTO) configurations.\nSymbolic representation and analysis of basis function parameters.\nStandalone 1-electron and 2-electron integral functions (powered by libcint_jll).\nRestricted (closed-shell) and unrestricted (open-shell) Hartree–Fock methods (RHF & UHF).\nMolecular orbital data output in Molden file format.\nVariational optimization of orbital geometry based on automatic differentiation (AD).","category":"page"},{"location":"#Setup","page":"Home","title":"Setup","text":"","category":"section"},{"location":"#Supported-system-platforms-(64-bit)","page":"Home","title":"Supported system platforms (64-bit)","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Linux\nMac OS\nWindows Subsystem for Linux","category":"page"},{"location":"#Julia-Environment","page":"Home","title":"Julia Environment","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"1.5+","category":"page"},{"location":"#Installation-in-Julia-[REPL](https://docs.julialang.org/en/v1/manual/getting-started/)","page":"Home","title":"Installation in Julia REPL","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Type ] to enter the Pkg mode:","category":"page"},{"location":"","page":"Home","title":"Home","text":"(@v1.x) pkg>","category":"page"},{"location":"","page":"Home","title":"Home","text":"Type add Quiqbox and hit Enter key to install Quiqbox:","category":"page"},{"location":"","page":"Home","title":"Home","text":"(@v1.x) pkg> add Quiqbox","category":"page"},{"location":"","page":"Home","title":"Home","text":"After the installation completes, hit Backspace key to go back to Julia REPL and use using to load Quiqbox:","category":"page"},{"location":"","page":"Home","title":"Home","text":"julia> using Quiqbox","category":"page"},{"location":"","page":"Home","title":"Home","text":"For more basic usage of the programming language behind Quiqbox, Julia, please refer to the official documentation or one official tutorial.","category":"page"},{"location":"molden/#Molden","page":"Molden","title":"Molden","text":"","category":"section"},{"location":"molden/","page":"Molden","title":"Molden","text":"Quiqbox supports outputting molecular (in Molecule) information to Molden file format.","category":"page"},{"location":"molden/","page":"Molden","title":"Molden","text":"Quiqbox.Molden.makeMoldenFile","category":"page"},{"location":"molden/#Quiqbox.Molden.makeMoldenFile","page":"Molden","title":"Quiqbox.Molden.makeMoldenFile","text":"makeMoldenFile(mol::Molecule; recordUMO::Bool=false, fileName::String = \"MO\") -> String\n\nWrite the information of input Molecule into a Molden file. recordUMO determines whether to include the unoccupied molecular orbitals. fileName specifies the name of the file, which is also the returned value.\n\n\n\n\n\n","category":"function"},{"location":"molden/","page":"Molden","title":"Molden","text":"A concrete example of the above function can be found here.","category":"page"}] +} diff --git a/docs/build/toolFunction/index.html b/docs/build/toolFunction/index.html new file mode 100644 index 00000000..b31dd101 --- /dev/null +++ b/docs/build/toolFunction/index.html @@ -0,0 +1,63 @@ + +Tool Functions · Quiqbox.jl

      Tool Functions

      Quiqbox.checkFnameFunction
      checkFname(Fname::String; showWarning::Bool=true) -> String

      Check if there is a file with the same name in the current directory. If so, will add an "_N" at the end of the file name String. showWarning determines whether prints out the WARNING info when there is a file with the same name.

      source
      Quiqbox.hasEqualFunction

      hasEqual(obj1, obj2, obj3...; ignoreFunction=false, ignoreContainerType=false) -> Bool

      Compare if two objects are the equal.

      If ignoreFunction = true then the function will pop up a warning message when a field is a function.

      If ignoreContainerType = true then the function will ignore the type difference of the (outermost) container as long as the inside fields are equal.

      This function is an instantiation of hasBoolRelation.

      ≡≡≡ Example(s) ≡≡≡

      julia> begin
      +           struct S
      +               a::Int
      +               b::Float64
      +           end
      +           a = S(1, 1.0)
      +           b = S(1, 1.0)
      +           c = S(1, 1.0)
      +           d = S(1, 1.1)
      +
      +           @show hasEqual(a, b, c)
      +           @show hasEqual(a, b, c, d)
      +       end
      +hasEqual(a, b, c) = true
      +hasEqual(a, b, c, d) = false
      +false
      source
      Quiqbox.hasIdenticalFunction
      hasIdentical(obj1, obj2, obj3...; 
      +             ignoreFunction=false, ignoreContainerType=false) -> Bool

      Compare if two objects are the Identical. An instantiation of hasBoolRelation.

      If ignoreFunction = true then the function will pop up a warning message when a field is a function.

      If ignoreContainerType = true then the function will ignore the type difference of the (outermost) container as long as the inside fields are identical.

      This function is an instantiation of hasBoolRelation.

      ≡≡≡ Example(s) ≡≡≡

      julia> begin
      +           struct S
      +               a::Int
      +               b::Array{Float64, 1}
      +           end
      +            
      +           a = S(1, [1.0, 1.1])
      +           b = a
      +           c = b
      +           d = S(1, [1.0, 1.1])
      +
      +           @show hasIdentical(a, b, c)
      +           @show hasIdentical(a, b, c, d)
      +       end
      +hasIdentical(a, b, c) = true
      +hasIdentical(a, b, c, d) = false
      +false
      source
      Quiqbox.flattenFunction
      flatten(a::Tuple) -> Tuple
      +
      +flatten(a::Array) -> Array

      Flatten a::Union{Array, Tuple} that contains Arrays and/or Tuples. Only operate on the outermost layer.

      ≡≡≡ Example(s) ≡≡≡

      julia> flatten((:one, 2, [3, 4.0], ([5], "six"), "7"))
      +(:one, 2, 3.0, 4.0, [5], "six", "7")
      +
      +julia> flatten([:one, 2, [3, 4.0], ([5], "six"), "7"])
      +7-element Vector{Any}:
      +  :one
      + 2
      + 3.0
      + 4.0
      +  [5]
      +  "six"
      +  "7"
      source
      Quiqbox.markUniqueFunction
      markUnique(arr::AbstractArray, args...; compareFunction::Function = hasEqual, kws...)

      Return a markingList using Int number to mark each different elements from (and inside) the input argument(s) and a uniqueList to contain all the unique elements when compareFunction is set to hasEqual (in default).

      args and kws are positional arguments and keywords arguments respectively as parameters of the specified compareFunction.

      ≡≡≡ Example(s) ≡≡≡

      julia> markUnique([1, [1, 2],"s", [1, 2]])
      +([1, 2, 3, 2], Any[1, [1, 2], "s"])
      +
      +julia> begin 
      +           struct S
      +               a::Int
      +               b::Float64
      +           end
      +           
      +           a = S(1, 2.0)
      +           b = S(1, 2.0)
      +           c = S(1, 2.1)
      +           d = a
      +           
      +           markUnique(a,b,c,d)
      +       end
      +([1, 1, 2, 1], Any[S(1, 2.0), S(1, 2.1)])
      source
      diff --git a/docs/make.jl b/docs/make.jl new file mode 100644 index 00000000..b30c7a16 --- /dev/null +++ b/docs/make.jl @@ -0,0 +1,27 @@ +push!(LOAD_PATH,"../src/") +using Documenter, Quiqbox + +makedocs( + sitename="Quiqbox.jl", + modules = [Quiqbox], + authors="Weishi Wang", + pages=[ + "Home"=>"index.md" + "Manual"=>[ + "basis.md" + "SCF.md" + "optimization.md" + ] + "Base"=>[ + "coreFunction.md" + "toolFunction.md" + "coreType.md" + ] + "Submodule"=>[ + "molden.md" + ] + "Index"=>"list.md" + ] +) + +deploydocs(repo="github.com/frankwswang/Quiqbox.jl.git") \ No newline at end of file diff --git a/docs/src/SCF.md b/docs/src/SCF.md new file mode 100644 index 00000000..a5300783 --- /dev/null +++ b/docs/src/SCF.md @@ -0,0 +1,70 @@ +# Self-Consistent Field Methods + +## Hartree-Fock Methods + +Quiqbox supports basic Hartree-Fock methods with various configurations: + +| Items | Options | +| :--- | ---: | +| HF Types | Restricted Closed-Shell (RHF), Unrestricted Open-Shell (UHF) | +| Initial Guesses | Core Hamiltonian, Generalized Wolfsberg-Helmholtz, User-defined Coefficient Matrix | +| Converging Methods | Direct Diagonalization, [DIIS](https://onlinelibrary.wiley.com/doi/10.1002/jcc.540030413), [EDIIS](https://aip.scitation.org/doi/abs/10.1063/1.1470195), [ADIIS](https://aip.scitation.org/doi/10.1063/1.3304922), Combinations of Multi-methods | +| DIIS-type Method Solvers | Lagrange Multiplier Solver, [ADMM](https://github.com/JuliaFirstOrder/SeparableOptimization.jl) Solver | + +### Basic Hartree-Fock +To run a Hartree-Fock method, the lines of code required in Quiqbox is as simple as below: +```@repl 3 +push!(LOAD_PATH,"../../src/") # hide +using Quiqbox # hide + +nuc = ["H", "H"]; + +nucCoords = [[-0.7, 0.0, 0.0], [0.7, 0.0, 0.0]]; + +bs = genBasisFunc.(nucCoords, ("STO-3G", "H") |> Ref) |> flatten + +resRHF = runHF(bs, nuc, nucCoords, HFtype=:RHF) + +@show resRHF.E0HF resRHF.C resRHF.Emo resRHF.occu +``` + +After the SCF procedure, one can also easily store the result in a `Molecule` for further data processing such as generating [Molden](@ref) files. +```@repl 3 +mol = Molecule(bs, nuc, nucCoords, resRHF); +``` + +### Flexible core functions +If the user want to fine-tune part of the SCF iteration steps to achieve better performance, Quiqbox also has provided various more flexible core functions that +allows user to customize the HF methods: + +[`SCFconfig`](@ref) + +[`runHFcore`](@ref) + +## Standalone Integral Functions + +Quiqbox also provides several integral functions that can be used independently of any SCF functions if intended.Those functions are wrappers of binary Julia library package ([JLL](https://docs.binarybuilder.org/stable/jll/)) [**libcint_jll**](https://github.com/JuliaBinaryWrappers/libcint_jll.jl), with more simplistic signature and versatile functionality. + +[`overlap`](@ref) + +[`overlaps`](@ref) + +### One-electron functions + +[`nucAttraction`](@ref) + +[`nucAttractions`](@ref) + +[`elecKinetic`](@ref) + +[`elecKinetics`](@ref) + +[`Quiqbox.oneBodyBFTensor`](@ref) + +### Two-electron functions + +[`eeInteraction`](@ref) + +[`eeInteractions`](@ref) + +[`Quiqbox.twoBodyBFTensor`](@ref) \ No newline at end of file diff --git a/docs/src/basis.md b/docs/src/basis.md new file mode 100644 index 00000000..b9b90945 --- /dev/null +++ b/docs/src/basis.md @@ -0,0 +1,231 @@ +# Basis Sets + +The procedure to construct a basis set can be fundamentally broken down into several basic steps: first, choose a set of (tunable) parameters, and build the Gaussian functions around those parameters, then the basis functions around the Gaussian functions, finally the basis set. + +The data structure formularized by Quiqbox in each step, namely the level of data complexity, can be summarized in the following table. + +| level | objective | product examples | abstract type | type instances | +| :---: | :---: | :---: | :---: | :---: | +| 4 | basis set | Array of basis functions (with reusable integrals) | `Array`, `GTBasis` | `Array{<:BasisFunc, 1}`...| +| 3 | basis functions | single or linear combination of Gaussian functions | `FloatingGTBasisFunc` | `BasisFunc{:S, 1}`, `BasisFuncs{:P, 3, 3}`...| +| 2 | Gaussian functions | (primitive) Gaussian functions | `AbstractGaussFunc` | `GaussFunc`| +| 1 | a pool of parameters | center coordinates, function coefficients | `ParamBox` | `ParamBox{:xpn, Float64}`... | + + +Depending on how much control the user wants to have over each step, Quiqbox provides several [methods](https://docs.julialang.org/en/v1/manual/methods/) of related functions to leave the user with the freedom to balance between efficiency and customizability. + +Below are some examples from the simplest way to relatively more flexible ways to construct a basis set in Quiqbox. Hopefully these use cases can also work as inspirations for more creative ways to manipulate basis sets. + +## Basis Set Construction + +### Constructing basis sets from existed basis sets + +First, you can create a basis set at one coordinate by input the `Vector` of its center coordinate and a `Tuple` of its name and corresponding atom in `String`. +```@repl 1 +push!(LOAD_PATH,"../../src/") # hide +using Quiqbox # hide + +bsO = Quiqbox.genBasisFunc([0,0,0], ("STO-3G", "O")) +``` + +Notice that in the above result there are 2 types of `struct`s in the returned `Vector`: `BasisFunc` and `BasisFuncs`. `BasisFunc` is the most basic `type` to hold the data of a basis function; `BasisFuncs` is very similar except it may hold multiple orbitals with only the spherical harmonics ``Y_{ml}`` being different when the orbital angular momentum ``l>0``. + +!!! info "Unit System" + Hartree atomic units are the unit system used in Quiqbox. + +If you want to postpone the specification of the center, you can replace the 1st argument with `missing`, and then use function `assignCenter!` to assign the coordinates later. +```@repl 1 +bsO = genBasisFunc(missing, ("STO-3G", "O")) + +assignCenter!([0,0,0], bsO[1]); + +bsO + +assignCenter!.(Ref([0,0,0]), bsO[2:end]) +``` + +If you omit the atom in the arguments, H will be set in default. Notice that even there's only 1 single basis function in H's STO-3G basis set, the returned value is still in `Array` type. +```@repl 1 +bsH_1 = genBasisFunc([-0.5, 0, 0], "STO-3G") + +bsH_2 = genBasisFunc([ 0.5, 0, 0], "STO-3G") +``` + +Finally, you can use Quiqbox's included tool function `flatten` to merge the three atomic basis set into one molecular basis set: +```@repl 1 +bsH20 = [bsO, bsH_1, bsH_2] |> flatten +``` + +Not simple enough? Here's a more compact way of realizing the above steps if you are familiar with some [syntactic sugars](https://en.wikipedia.org/wiki/Syntactic_sugar) in Julia: +```@repl 1 +cens = [[0,0,0], [-0.5,0,0], [0.5,0,0]] + +bsH20_2 = genBasisFunc.(cens, [("STO-3G", "O"), fill("STO-3G", 2)...]) |> flatten +``` + +In quiqbox, the user can often deal with several multi-layer containers (mainly `struct`s), it might be easy to get lost or uncertain that whether we are creating the objects intended. Quiqbox provides another tool function `hasEqual` that lets you compare if two objects hold the same data and structure. For example, if we want to see whether `bsH20_2` created in the faster way is same (not identical) as `bsH20`, we can verify it as follows: +```@repl 1 +hasEqual(bsH20, bsH20_2) +``` + +If the basis set you want to use doesn't exist in Quiqbox's library, you can use `Function` `genBFuncsFromText` to generate the basis set from a **Gaussian** formatted `String`: +```@repl 1 +genBasisFunc(missing, ("6-31G", "Kr")) + +# Data from https://www.basissetexchange.org +txt_Kr_631G = """ +Kr 0 +S 6 1.00 + 0.1205524000D+06 0.1714050000D-02 + 0.1810225000D+05 0.1313805000D-01 + 0.4124126000D+04 0.6490006000D-01 + 0.1163472000D+04 0.2265185000D+00 + 0.3734612000D+03 0.4764961000D+00 + 0.1280897000D+03 0.3591952000D+00 +SP 6 1.00 + 0.2634681000D+04 0.2225111000D-02 0.3761911000D-02 + 0.6284533000D+03 0.2971122000D-01 0.2977531000D-01 + 0.2047081000D+03 0.1253926000D+00 0.1311878000D+00 + 0.7790827000D+02 0.1947058000D-02 0.3425019000D+00 + 0.3213816000D+02 -0.5987388000D+00 0.4644938000D+00 + 0.1341845000D+02 -0.4958972000D+00 0.2087284000D+00 +SP 6 1.00 + 0.1175107000D+03 -0.6157662000D-02 -0.6922855000D-02 + 0.4152553000D+02 0.5464841000D-01 -0.3069239000D-01 + 0.1765290000D+02 0.2706994000D+00 0.4480260000D-01 + 0.7818313000D+01 -0.1426136000D+00 0.3636775000D+00 + 0.3571775000D+01 -0.7216781000D+00 0.4952412000D+00 + 0.1623750000D+01 -0.3412008000D+00 0.2086340000D+00 +SP 3 1.00 + 0.2374560000D+01 0.3251184000D+00 -0.3009554000D-01 + 0.8691930000D+00 -0.2141533000D+00 0.3598893000D+00 + 0.3474730000D+00 -0.9755083000D+00 0.7103098000D+00 +SP 1 1.00 + 0.1264790000D+00 0.1000000000D+01 0.1000000000D+01 +D 3 1.00 + 0.6853888000D+02 0.7530705000D-01 + 0.1914333000D+02 0.3673551000D+00 + 0.6251213000D+01 0.7120146000D+00 +D 1 1.00 + 0.1979236000D+01 1.0000000 +"""; + +genBFuncsFromText(txt_Kr_631G, adjustContent=true) +``` + + +### Constructing basis sets from `GaussFunc` + +If you want to specify the parameters of each Gaussian function when constructing a basis set, you can first construct the container for Gaussian functions: `GaussFunc`, and then build the basis function upon them: +```@repl 2 +using Quiqbox # hide + +gf1 = GaussFunc(2.0, 1.0) + +gf2 = GaussFunc(2.5, 0.75) + +bf1 = genBasisFunc([1.0,0,0], [gf1, gf2]) +``` + +Unlike `BasisFunc` there's no proprietary function for it, you simply input the exponent coefficient and the contraction coefficient as the 1st and 2nd arguments respectively to its default constructor. As for the method of `genBasisFunc` in this case, the default subshell is set to be "S" as the optional 3rd argument, but you can construct a `BasisFuncs` which contains all the orbitals within a specified one: +```@repl 2 +bf2 = genBasisFunc([1.0,0,0], [gf1, gf2], "P") +``` + +You can even choose one or a few orbitals to keep by indicting them using a 3-element `Array` of the Cartesian representation: +```@repl 2 +bf3 = genBasisFunc([1.0,0,0], [gf1, gf2], [1,0,0]) + +bf4 = genBasisFunc([1.0,0,0], [gf1, gf2], [[1,0,0], [0,0,1]]) +``` + +Again, if you want a faster solution, you can also directly define the 2 `GaussFunc` parameter(s) in a 2-element `Tuple` as the 2nd argument for `genBasisFunc`: +```@repl 2 +bf5 = genBasisFunc([1.0,0,0], ([2.0, 2.5], [1.0, 0.75]), [[1,0,0], [0,0,1]]) + +hasEqual(bf4, bf5) +``` + +### Constructing basis sets based on `ParamBox` +Sometimes you may want the parameters of basis functions (or `GaussFunc`) to be under some constrains (which can be crucial for the later basis set optimization), this is when you need a deeper level of control over the parameters, through its direct container: `ParamBox`. In fact, in the above example we have already had an glimpse on it through the printed info in the REPL: +```@repl 2 +gf1 +``` +the 2 fields of a `GaussFunc`, `.xpn` and `.con` are in fact `ParamBox`, and the actual value of them can be accessed through syntax `[]`: +```@repl 2 +gf1.xpn + +gf1.con + +gf1.xpn[] + +gf1.con[] +``` + +Since the data are not directly stored as `primitive type`s but rather inside `struct` `ParamBox`, this allows the direct assignment or shallow copy of them to not create new data with same values, but bindings to the original objects: +```@repl 2 +gf3 = GaussFunc(1.1, 1) + +# Direct assignment +gf3_2 = gf3 + +gf3.xpn[] *= 2 + +gf3 + +gf3_2 + +# Shallow copy: `fill` +bf6 = genBasisFunc([1,0,0], fill(gf3, 2)) + +bf6.gauss + +bf6.gauss[1].xpn[] = 1.1 + +gf3_2.xpn[] == gf3.xpn[] == bf6.gauss[2].xpn[] == 1.1 + +``` + +Based on such trait in Julia, you can, for instance, create a basis set that enforces all the `GaussFunc`s have the **identical** parameters: +```@repl 2 +gf4 = GaussFunc(2.5, 0.5) + +bs7 = genBasisFunc.([rand(3) for _=1:2], Ref(gf4)) + +uniqueParams!(bs7) +``` + +`uniqueParams!` marks all the parameters of the given basis set and +return the unique parameters. As you can see, even though `bs7` has +2 `GaussFunc`s as basis functions, but over all it only has 1 unique coefficient exponent ``\alpha_1`` and 1 unique contraction coefficient ``d_1``. + + +## Dependent Variable as Parameter + +Another control the user can have on the parameters in Quiqbox is to not only store the each unique parameter as an independent variable, but also as a dependent variable, i.e., a math function of some more primitive independent variable: +```@repl 2 +pb1 = gf4.xpn + +pb1.map +``` + +The `map` field of a `ParamBox` stores a `RefValue{<:Function}`, referencing the `Function` that maps the actual stored value to another value through math operations (``R \to R``). The output value can be access through syntax `()`. In default the the variable is mapped to itself: +```@repl 2 +pb1[] == pb1() +``` + +Since `ParamBox` is a `mutable struct` you can redefine your own mapping `Functions` for the parameters; thus gain another layer of control over the basis set parameters: +```@repl 2 +squareXpn(x) = x^2 + +pb1.map = Ref(squareXpn) + +pb1[] = 3 + +pb1() +``` + +You can get a clearer view of the mapping relations in a `ParamBox` using `getVar` +```@repl 2 +getVar(pb1, includeMapping=true) +``` \ No newline at end of file diff --git a/docs/src/coreFunction.md b/docs/src/coreFunction.md new file mode 100644 index 00000000..28f85d46 --- /dev/null +++ b/docs/src/coreFunction.md @@ -0,0 +1,145 @@ +# Core Functions + +```@docs +genBasisFunc +``` + +```@docs +centerOf +``` + +```@doc +GTBasis(basis::Vector{<:Quiqbox.AbstractFloatingGTBasisFunc}) +``` + +```@docs +decomposeBasisFunc +``` + +```@docs +basisSize +``` + +```@docs +genBasisFuncText +``` + +```@docs +genBFuncsFromText +``` + +```@docs +assignCenter! +``` + +```@docs +uniqueParams! +``` + +```@docs +getVar +``` + +```@docs +getVars +``` + +```@docs +expressionOf +``` + + +```@docs +GridBox(nGridPerEdge::Int, spacing::Real=10, + centerCoord::Array{<:Real, 1}=[0.0,0.0,0.0]; + canDiff::Bool=true, index::Int=0) +``` + +```@docs +gridPoint +``` + + +```@docs +runHF +``` + +```@docs +runHFcore +``` + + +```@docs +Molecule(basis::Array{<:Quiqbox.FloatingGTBasisFunc, 1}, nuc::Array{String, 1}, + nucCoords::Array{<:AbstractArray, 1}, HFfVars::Quiqbox.HFfinalVars) +``` + +```@docs +getMolOrbitals +``` + +```@docs +nnRepulsions +``` + + +```@docs +optimizeParams! +``` + +```@docs +updateParams! +``` + +```@docs +gradDescent! +``` + + +```@docs +overlap +``` + +```@docs +overlaps +``` + +```@docs +nucAttraction +``` + +```@docs +nucAttractions +``` + +```@docs +elecKinetic +``` + +```@docs +elecKinetics +``` + +```@docs +coreHij +``` + +```@docs +coreH +``` + +```@docs +eeInteraction +``` + +```@docs +eeInteractions +``` + +```@docs +Quiqbox.oneBodyBFTensor +``` + +```@docs +Quiqbox.twoBodyBFTensor +``` \ No newline at end of file diff --git a/docs/src/coreType.md b/docs/src/coreType.md new file mode 100644 index 00000000..50924dc5 --- /dev/null +++ b/docs/src/coreType.md @@ -0,0 +1,45 @@ +# Core Types + +```@docs +ParamBox{V, T} +``` + +```@docs +GaussFunc +``` + +```@docs +BasisFunc{S, GN} +``` + +```@docs +BasisFuncs{S, GN, ON} +``` + +```@docs +GTBasis{N, BT} +``` + +```@docs +GridBox{NX, NY, NZ} +``` + +```@docs +SCFconfig{N} +``` + +```@docs +Quiqbox.HFtempVars{HFtype, N} +``` + +```@docs +Quiqbox.HFfinalVars{T, N, Nb} +``` + +```@docs +Molecule{Nc, Ne, Nb} +``` + +```@docs +MolOrbital{N} +``` \ No newline at end of file diff --git a/docs/src/index.md b/docs/src/index.md new file mode 100644 index 00000000..19db8790 --- /dev/null +++ b/docs/src/index.md @@ -0,0 +1,44 @@ +# Quiqbox.jl + +**Quiqbox** is a quantum chemistry and quantum computing software package that starts off around Gaussian basis set optimization of molecular electronic-structure problems. Quiqbox is written in pure [Julia](https://julialang.org/). + +## Features + +* Floating and fixed-basis Gaussian-type orbital (GTO) configurations. +* Symbolic representation and analysis of basis function parameters. +* Standalone 1-electron and 2-electron integral functions (powered by [libcint_jll](https://github.com/JuliaBinaryWrappers/libcint_jll.jl)). +* Restricted (closed-shell) and unrestricted (open-shell) Hartree–Fock methods (RHF & UHF). +* Molecular orbital data output in [Molden](https://www3.cmbi.umcn.nl/molden/) file format. +* Variational optimization of orbital geometry based on automatic differentiation (AD). + +## Setup + +### Supported system platforms (64-bit) +* Linux +* Mac OS +* [Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/about) + +### Julia Environment +* [1.5+](https://github.com/frankwswang/Quiqbox.jl/actions/workflows/CI.yml) + +### Installation in Julia [REPL](https://docs.julialang.org/en/v1/manual/getting-started/) + +Type `]` to enter the [`Pkg` mode](https://docs.julialang.org/en/v1/stdlib/REPL/#Pkg-mode): + +```julia +(@v1.x) pkg> +``` + +Type `add Quiqbox` and hit *Enter* key to install Quiqbox: + +```julia +(@v1.x) pkg> add Quiqbox +``` + +After the installation completes, hit *Backspace* key to go back to Julia REPL and use [`using`](https://docs.julialang.org/en/v1/base/base/#using) to load Quiqbox: + +```julia +julia> using Quiqbox +``` + +For more basic usage of the programming language behind Quiqbox, Julia, please refer to [the official documentation](https://docs.julialang.org/) or [one official tutorial](https://juliaacademy.com/p/intro-to-julia). \ No newline at end of file diff --git a/docs/src/list.md b/docs/src/list.md new file mode 100644 index 00000000..b9b67b6b --- /dev/null +++ b/docs/src/list.md @@ -0,0 +1,15 @@ +# Index + +Below are the types and functions included in the documentation. + +## Types + +```@index +order = [:type] +``` + +## Functions + +```@index +order = [:function] +``` \ No newline at end of file diff --git a/docs/src/molden.md b/docs/src/molden.md new file mode 100644 index 00000000..67e01021 --- /dev/null +++ b/docs/src/molden.md @@ -0,0 +1,9 @@ +# Molden + +Quiqbox supports outputting molecular (in `Molecule`) information to [**Molden**](https://www3.cmbi.umcn.nl/molden/) file format. + +```@docs +Quiqbox.Molden.makeMoldenFile +``` + +A concrete example of the above function can be found [here](https://github.com/frankwswang/Quiqbox.jl/tree/main/examples). \ No newline at end of file diff --git a/docs/src/optimization.md b/docs/src/optimization.md new file mode 100644 index 00000000..c58ad116 --- /dev/null +++ b/docs/src/optimization.md @@ -0,0 +1,47 @@ +# Parameter Optimization + +## Selectively Optimizing Parameters + +In the [Basis Sets](@ref) section we have briefly introduced the parameters in terms of +[`ParamBox`](@ref) that are embedded in containers such as [`BasisFunc`](@ref) and [`BasisFuncs`](@ref) that are directly used to form a basis set. This means how we construct the basis set using the parameters will determine how large of a parameter space we have to optimize the basis set. For more information please refer to [Constructing basis sets based on ParamBox](@ref). Here is a example to use [`GaussFunc`](@ref) and [`GridBox`](@ref) to quickly generate a grid-based basis set with only 3 actual parameters, 1 determines all the coordinates of basis function centers, the other 2 are the only exponent coefficient ``\alpha`` and contraction coefficient ``d``. +```@repl 4 +push!(LOAD_PATH,"../../src/") # hide +using Quiqbox # hide + +nuc = ["H", "H"] + +nucCoords = [[-0.7,0.0,0.0], [0.7,0.0,0.0]] + +grid = GridBox(1, 1.5) + +gf1 = GaussFunc(0.7,1) + +bs = genBasisFunc.(grid.box, Ref([gf1])) +``` + +After constructing the basis set, we need to use [`uniqueParams!`](@ref) to mark all the +unique parameters that can also be optimized later: +```@repl 4 +pars = uniqueParams!(bs, filterMapping=true) +``` + +As expected, there are indeed only 3 unique tunable parameters despite the basis set already has 8 basis functions. (note that keyword argument `filterMapping` in `uniqueParams!` is set to `true` because we want the function to only return independent parameters) However, if we take a step further, we can remove ``d`` since each basis function here is just a single Gaussian function, which means the contraction coefficient won't affect the optimization results. Thus, input the intent parameters (along with other necessary arguments) into the Quiqbox function [`optimizeParams!`](@ref) and we can sit and wait for the optimization iterations to complete. +```@repl 4 +parsPartial = [pars[1], pars[3]] + +optimizeParams!(bs, parsPartial, nuc, nucCoords, maxSteps=20); +``` + +After the optimization, you can check the basis set and we can see the parameters inside of it is also changed. This is because the `!` in the function names indicates that `optimizeParams!` is [a function that modifies its arguments](https://docs.julialang.org/en/v1/manual/style-guide/#bang-convention). +```@repl 4 +getParams(bs) +``` + +It you want to go through the above example by yourself, you can also find the script [here](https://github.com/frankwswang/Quiqbox.jl/blob/main/examples/OptimizeParams.jl). + +## Store Customized Basis Set + +Now, if you want, you can also store the information of the basis set in an container called [`GTBasis`](@ref) that not only includes the basis set, but also the related 1-electron and 2-electron integral values (nuclear attraction is not stored). `GTBasis` can also be accepted as an argument for [`runHF`](@ref) to save the time of calculating the integrals of the basis set. +```@repl 4 +GTBasis(bs) +``` \ No newline at end of file diff --git a/docs/src/toolFunction.md b/docs/src/toolFunction.md new file mode 100644 index 00000000..78ed109a --- /dev/null +++ b/docs/src/toolFunction.md @@ -0,0 +1,25 @@ +# Tool Functions + +```@docs +Quiqbox.checkFname +``` + +```@docs +hasEqual +``` + +```@docs +hasIdentical +``` + +```@docs +flatten +``` + +```@docs +markUnique +``` + +```@docs +Quiqbox.itself +``` \ No newline at end of file From ceaa93a0da0e39c3cbdd3a7501b6d99408ae9c2a Mon Sep 17 00:00:00 2001 From: frankwswang Date: Wed, 1 Sep 2021 19:54:46 -0400 Subject: [PATCH 22/33] Ignore Documentation build. --- .gitignore | 1 + docs/build/SCF/index.html | 19 - docs/build/assets/documenter.js | 264 - docs/build/assets/logo.svg | 1 - docs/build/assets/search.js | 251 - docs/build/assets/themes/documenter-dark.css | 7752 ---------------- docs/build/assets/themes/documenter-light.css | 7810 ----------------- docs/build/assets/themeswap.js | 66 - docs/build/assets/warner.js | 49 - docs/build/basis/index.html | 90 - docs/build/coreFunction/index.html | 115 - docs/build/coreType/index.html | 20 - docs/build/index.html | 2 - docs/build/list/index.html | 2 - docs/build/molden/index.html | 2 - docs/build/optimization/index.html | 49 - docs/build/search/index.html | 2 - docs/build/search_index.js | 3 - docs/build/toolFunction/index.html | 63 - 19 files changed, 1 insertion(+), 16560 deletions(-) delete mode 100644 docs/build/SCF/index.html delete mode 100644 docs/build/assets/documenter.js delete mode 100644 docs/build/assets/logo.svg delete mode 100644 docs/build/assets/search.js delete mode 100644 docs/build/assets/themes/documenter-dark.css delete mode 100644 docs/build/assets/themes/documenter-light.css delete mode 100644 docs/build/assets/themeswap.js delete mode 100644 docs/build/assets/warner.js delete mode 100644 docs/build/basis/index.html delete mode 100644 docs/build/coreFunction/index.html delete mode 100644 docs/build/coreType/index.html delete mode 100644 docs/build/index.html delete mode 100644 docs/build/list/index.html delete mode 100644 docs/build/molden/index.html delete mode 100644 docs/build/optimization/index.html delete mode 100644 docs/build/search/index.html delete mode 100644 docs/build/search_index.js delete mode 100644 docs/build/toolFunction/index.html diff --git a/.gitignore b/.gitignore index cdf19624..89669768 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ legacy/ +docs/build/ Manifest.toml __test__* \ No newline at end of file diff --git a/docs/build/SCF/index.html b/docs/build/SCF/index.html deleted file mode 100644 index a432ee3f..00000000 --- a/docs/build/SCF/index.html +++ /dev/null @@ -1,19 +0,0 @@ - -Self-Consistent Field Methods · Quiqbox.jl

      Self-Consistent Field Methods

      Hartree-Fock Methods

      Quiqbox supports basic Hartree-Fock methods with various configurations:

      ItemsOptions
      HF TypesRestricted Closed-Shell (RHF), Unrestricted Open-Shell (UHF)
      Initial GuessesCore Hamiltonian, Generalized Wolfsberg-Helmholtz, User-defined Coefficient Matrix
      Converging MethodsDirect Diagonalization, DIIS, EDIIS, ADIIS, Combinations of Multi-methods
      DIIS-type Method SolversLagrange Multiplier Solver, ADMM Solver

      Basic Hartree-Fock

      To run a Hartree-Fock method, the lines of code required in Quiqbox is as simple as below:


      julia> nuc = ["H", "H"];
      julia> nucCoords = [[-0.7, 0.0, 0.0], [0.7, 0.0, 0.0]];
      julia> bs = genBasisFunc.(nucCoords, ("STO-3G", "H") |> Ref) |> flatten2-element Vector{BasisFunc{:S, 3}}: - BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][-0.7, 0.0, 0.0] - BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.7, 0.0, 0.0]
      julia> resRHF = runHF(bs, nuc, nucCoords, HFtype=:RHF)RHF Initial Gauss E = -1.36211194485525 -Step 1 #1 (ADIIS) E = -1.8258918335311365 -Step 2 #1 (ADIIS) E = -1.8309529323419294 -Step 3 #1 (ADIIS) E = -1.8309996057713884 -Step 4 #2 (DIIS) E = -1.8309998285566 -Step 6 #3 (ADIIS) E = -1.8310000092621985 -Step 8 #3 (ADIIS) E = -1.8310000248934477 -The SCF procedure is converged. - -Quiqbox.HFfinalVars{:RHF, 2, 2}(E0HF=-1.831000028, C, F, D, Emo, occu, temp, isConverged)
      julia> @show resRHF.E0HF resRHF.C resRHF.Emo resRHF.occuresRHF.E0HF = -1.8310000284238752 -resRHF.C = [-0.548942168545129 -1.2114603899026102; -0.5489259123002208 1.21146775587111] -resRHF.Emo = [-0.578202974605133, 0.6702677584571967] -resRHF.occu = [2, 0] -2-element Vector{Int64}: - 2 - 0

      After the SCF procedure, one can also easily store the result in a Molecule for further data processing such as generating Molden files.

      julia> mol = Molecule(bs, nuc, nucCoords, resRHF);

      Flexible core functions

      If the user want to fine-tune part of the SCF iteration steps to achieve better performance, Quiqbox also has provided various more flexible core functions that allows user to customize the HF methods:

      SCFconfig

      runHFcore

      Standalone Integral Functions

      Quiqbox also provides several integral functions that can be used independently of any SCF functions if intended.Those functions are wrappers of binary Julia library package (JLL) libcint_jll, with more simplistic signature and versatile functionality.

      overlap

      overlaps

      One-electron functions

      nucAttraction

      nucAttractions

      elecKinetic

      elecKinetics

      Quiqbox.oneBodyBFTensor

      Two-electron functions

      eeInteraction

      eeInteractions

      Quiqbox.twoBodyBFTensor

      diff --git a/docs/build/assets/documenter.js b/docs/build/assets/documenter.js deleted file mode 100644 index 6d0b7853..00000000 --- a/docs/build/assets/documenter.js +++ /dev/null @@ -1,264 +0,0 @@ -// Generated by Documenter.jl -requirejs.config({ - paths: { - 'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.0.1/languages/julia.min', - 'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/headroom.min', - 'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min', - 'katex-auto-render': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.13.11/contrib/auto-render.min', - 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min', - 'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/jQuery.headroom.min', - 'katex': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.13.11/katex.min', - 'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.0.1/highlight.min', - 'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.0.1/languages/julia-repl.min', - }, - shim: { - "highlight-julia": { - "deps": [ - "highlight" - ] - }, - "katex-auto-render": { - "deps": [ - "katex" - ] - }, - "headroom-jquery": { - "deps": [ - "jquery", - "headroom" - ] - }, - "highlight-julia-repl": { - "deps": [ - "highlight" - ] - } -} -}); -//////////////////////////////////////////////////////////////////////////////// -require(['jquery', 'katex', 'katex-auto-render'], function($, katex, renderMathInElement) { -$(document).ready(function() { - renderMathInElement( - document.body, - { - "delimiters": [ - { - "left": "$", - "right": "$", - "display": false - }, - { - "left": "$$", - "right": "$$", - "display": true - }, - { - "left": "\\[", - "right": "\\]", - "display": true - } - ] -} - - ); -}) - -}) -//////////////////////////////////////////////////////////////////////////////// -require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($) { -$(document).ready(function() { - hljs.highlightAll(); -}) - -}) -//////////////////////////////////////////////////////////////////////////////// -require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) { - -// Manages the top navigation bar (hides it when the user starts scrolling down on the -// mobile). -window.Headroom = Headroom; // work around buggy module loading? -$(document).ready(function() { - $('#documenter .docs-navbar').headroom({ - "tolerance": {"up": 10, "down": 10}, - }); -}) - -}) -//////////////////////////////////////////////////////////////////////////////// -require(['jquery'], function($) { - -// Modal settings dialog -$(document).ready(function() { - var settings = $('#documenter-settings'); - $('#documenter-settings-button').click(function(){ - settings.toggleClass('is-active'); - }); - // Close the dialog if X is clicked - $('#documenter-settings button.delete').click(function(){ - settings.removeClass('is-active'); - }); - // Close dialog if ESC is pressed - $(document).keyup(function(e) { - if (e.keyCode == 27) settings.removeClass('is-active'); - }); -}); - -}) -//////////////////////////////////////////////////////////////////////////////// -require(['jquery'], function($) { - -// Manages the showing and hiding of the sidebar. -$(document).ready(function() { - var sidebar = $("#documenter > .docs-sidebar"); - var sidebar_button = $("#documenter-sidebar-button") - sidebar_button.click(function(ev) { - ev.preventDefault(); - sidebar.toggleClass('visible'); - if (sidebar.hasClass('visible')) { - // Makes sure that the current menu item is visible in the sidebar. - $("#documenter .docs-menu a.is-active").focus(); - } - }); - $("#documenter > .docs-main").bind('click', function(ev) { - if ($(ev.target).is(sidebar_button)) { - return; - } - if (sidebar.hasClass('visible')) { - sidebar.removeClass('visible'); - } - }); -}) - -// Resizes the package name / sitename in the sidebar if it is too wide. -// Inspired by: https://github.com/davatron5000/FitText.js -$(document).ready(function() { - e = $("#documenter .docs-autofit"); - function resize() { - var L = parseInt(e.css('max-width'), 10); - var L0 = e.width(); - if(L0 > L) { - var h0 = parseInt(e.css('font-size'), 10); - e.css('font-size', L * h0 / L0); - // TODO: make sure it survives resizes? - } - } - // call once and then register events - resize(); - $(window).resize(resize); - $(window).on('orientationchange', resize); -}); - -// Scroll the navigation bar to the currently selected menu item -$(document).ready(function() { - var sidebar = $("#documenter .docs-menu").get(0); - var active = $("#documenter .docs-menu .is-active").get(0); - if(typeof active !== 'undefined') { - sidebar.scrollTop = active.offsetTop - sidebar.offsetTop - 15; - } -}) - -}) -//////////////////////////////////////////////////////////////////////////////// -require(['jquery'], function($) { - -function set_theme(theme) { - var active = null; - var disabled = []; - for (var i = 0; i < document.styleSheets.length; i++) { - var ss = document.styleSheets[i]; - var themename = ss.ownerNode.getAttribute("data-theme-name"); - if(themename === null) continue; // ignore non-theme stylesheets - // Find the active theme - if(themename === theme) active = ss; - else disabled.push(ss); - } - if(active !== null) { - active.disabled = false; - if(active.ownerNode.getAttribute("data-theme-primary") === null) { - document.getElementsByTagName('html')[0].className = "theme--" + theme; - } else { - document.getElementsByTagName('html')[0].className = ""; - } - disabled.forEach(function(ss){ - ss.disabled = true; - }); - } - - // Store the theme in localStorage - if(typeof(window.localStorage) !== "undefined") { - window.localStorage.setItem("documenter-theme", theme); - } else { - console.error("Browser does not support window.localStorage"); - } -} - -// Theme picker setup -$(document).ready(function() { - // onchange callback - $('#documenter-themepicker').change(function themepick_callback(ev){ - var themename = $('#documenter-themepicker option:selected').attr('value'); - set_theme(themename); - }); - - // Make sure that the themepicker displays the correct theme when the theme is retrieved - // from localStorage - if(typeof(window.localStorage) !== "undefined") { - var theme = window.localStorage.getItem("documenter-theme"); - if(theme !== null) { - $('#documenter-themepicker option').each(function(i,e) { - e.selected = (e.value === theme); - }) - } else { - $('#documenter-themepicker option').each(function(i,e) { - e.selected = $("html").hasClass(`theme--${e.value}`); - }) - } - } -}) - -}) -//////////////////////////////////////////////////////////////////////////////// -require(['jquery'], function($) { - -// update the version selector with info from the siteinfo.js and ../versions.js files -$(document).ready(function() { - var version_selector = $("#documenter .docs-version-selector"); - var version_selector_select = $("#documenter .docs-version-selector select"); - - version_selector_select.change(function(x) { - target_href = version_selector_select.children("option:selected").get(0).value; - window.location.href = target_href; - }); - - // add the current version to the selector based on siteinfo.js, but only if the selector is empty - if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) { - var option = $(""); - version_selector_select.append(option); - } - - if (typeof DOC_VERSIONS !== 'undefined') { - var existing_versions = version_selector_select.children("option"); - var existing_versions_texts = existing_versions.map(function(i,x){return x.text}); - DOC_VERSIONS.forEach(function(each) { - var version_url = documenterBaseURL + "/../" + each; - var existing_id = $.inArray(each, existing_versions_texts); - // if not already in the version selector, add it as a new option, - // otherwise update the old option with the URL and enable it - if (existing_id == -1) { - var option = $(""); - version_selector_select.append(option); - } else { - var option = existing_versions[existing_id]; - option.value = version_url; - option.disabled = false; - } - }); - } - - // only show the version selector if the selector has been populated - if (version_selector_select.children("option").length > 0) { - version_selector.toggleClass("visible"); - } -}) - -}) diff --git a/docs/build/assets/logo.svg b/docs/build/assets/logo.svg deleted file mode 100644 index 1ed30d5a..00000000 --- a/docs/build/assets/logo.svg +++ /dev/null @@ -1 +0,0 @@ -Qu|i|qbox \ No newline at end of file diff --git a/docs/build/assets/search.js b/docs/build/assets/search.js deleted file mode 100644 index 1a514547..00000000 --- a/docs/build/assets/search.js +++ /dev/null @@ -1,251 +0,0 @@ -// Generated by Documenter.jl -requirejs.config({ - paths: { - 'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.9/lunr.min', - 'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min', - 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min', - } -}); -//////////////////////////////////////////////////////////////////////////////// -require(['jquery', 'lunr', 'lodash'], function($, lunr, _) { - -$(document).ready(function() { - // parseUri 1.2.2 - // (c) Steven Levithan - // MIT License - function parseUri (str) { - var o = parseUri.options, - m = o.parser[o.strictMode ? "strict" : "loose"].exec(str), - uri = {}, - i = 14; - - while (i--) uri[o.key[i]] = m[i] || ""; - - uri[o.q.name] = {}; - uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) { - if ($1) uri[o.q.name][$1] = $2; - }); - - return uri; - }; - parseUri.options = { - strictMode: false, - key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], - q: { - name: "queryKey", - parser: /(?:^|&)([^&=]*)=?([^&]*)/g - }, - parser: { - strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/, - loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ - } - }; - - $("#search-form").submit(function(e) { - e.preventDefault() - }) - - // list below is the lunr 2.1.3 list minus the intersect with names(Base) - // (all, any, get, in, is, only, which) and (do, else, for, let, where, while, with) - // ideally we'd just filter the original list but it's not available as a variable - lunr.stopWordFilter = lunr.generateStopWordFilter([ - 'a', - 'able', - 'about', - 'across', - 'after', - 'almost', - 'also', - 'am', - 'among', - 'an', - 'and', - 'are', - 'as', - 'at', - 'be', - 'because', - 'been', - 'but', - 'by', - 'can', - 'cannot', - 'could', - 'dear', - 'did', - 'does', - 'either', - 'ever', - 'every', - 'from', - 'got', - 'had', - 'has', - 'have', - 'he', - 'her', - 'hers', - 'him', - 'his', - 'how', - 'however', - 'i', - 'if', - 'into', - 'it', - 'its', - 'just', - 'least', - 'like', - 'likely', - 'may', - 'me', - 'might', - 'most', - 'must', - 'my', - 'neither', - 'no', - 'nor', - 'not', - 'of', - 'off', - 'often', - 'on', - 'or', - 'other', - 'our', - 'own', - 'rather', - 'said', - 'say', - 'says', - 'she', - 'should', - 'since', - 'so', - 'some', - 'than', - 'that', - 'the', - 'their', - 'them', - 'then', - 'there', - 'these', - 'they', - 'this', - 'tis', - 'to', - 'too', - 'twas', - 'us', - 'wants', - 'was', - 'we', - 'were', - 'what', - 'when', - 'who', - 'whom', - 'why', - 'will', - 'would', - 'yet', - 'you', - 'your' - ]) - - // add . as a separator, because otherwise "title": "Documenter.Anchors.add!" - // would not find anything if searching for "add!", only for the entire qualification - lunr.tokenizer.separator = /[\s\-\.]+/ - - // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names - lunr.trimmer = function (token) { - return token.update(function (s) { - return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '') - }) - } - - lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter') - lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer') - - var index = lunr(function () { - this.ref('location') - this.field('title',{boost: 100}) - this.field('text') - documenterSearchIndex['docs'].forEach(function(e) { - this.add(e) - }, this) - }) - var store = {} - - documenterSearchIndex['docs'].forEach(function(e) { - store[e.location] = {title: e.title, category: e.category, page: e.page} - }) - - $(function(){ - searchresults = $('#documenter-search-results'); - searchinfo = $('#documenter-search-info'); - searchbox = $('#documenter-search-query'); - function update_search(querystring) { - tokens = lunr.tokenizer(querystring) - results = index.query(function (q) { - tokens.forEach(function (t) { - q.term(t.toString(), { - fields: ["title"], - boost: 100, - usePipeline: true, - editDistance: 0, - wildcard: lunr.Query.wildcard.NONE - }) - q.term(t.toString(), { - fields: ["title"], - boost: 10, - usePipeline: true, - editDistance: 2, - wildcard: lunr.Query.wildcard.NONE - }) - q.term(t.toString(), { - fields: ["text"], - boost: 1, - usePipeline: true, - editDistance: 0, - wildcard: lunr.Query.wildcard.NONE - }) - }) - }) - searchinfo.text("Number of results: " + results.length) - searchresults.empty() - results.forEach(function(result) { - data = store[result.ref] - link = $(''+data.title+'') - link.attr('href', documenterBaseURL+'/'+result.ref) - if (data.category != "page"){ - cat = $('('+data.category+', '+data.page+')') - } else { - cat = $('('+data.category+')') - } - li = $('
    • ').append(link).append(" ").append(cat) - searchresults.append(li) - }) - } - - function update_search_box() { - querystring = searchbox.val() - update_search(querystring) - } - - searchbox.keyup(_.debounce(update_search_box, 250)) - searchbox.change(update_search_box) - - search_query_uri = parseUri(window.location).queryKey["q"] - if(search_query_uri !== undefined) { - search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) - searchbox.val(search_query) - } - update_search_box(); - }) -}) - -}) diff --git a/docs/build/assets/themes/documenter-dark.css b/docs/build/assets/themes/documenter-dark.css deleted file mode 100644 index 5a64259e..00000000 --- a/docs/build/assets/themes/documenter-dark.css +++ /dev/null @@ -1,7752 +0,0 @@ -@charset "UTF-8"; -/* Font Awesome 5 mixin. Can be included in any rule that should render Font Awesome icons. */ -@keyframes spinAround { - from { - transform: rotate(0deg); } - to { - transform: rotate(359deg); } } - -html.theme--documenter-dark .delete, html.theme--documenter-dark .modal-close, .is-unselectable, html.theme--documenter-dark .button, html.theme--documenter-dark .file, html.theme--documenter-dark .breadcrumb, html.theme--documenter-dark .pagination-previous, -html.theme--documenter-dark .pagination-next, -html.theme--documenter-dark .pagination-link, -html.theme--documenter-dark .pagination-ellipsis, html.theme--documenter-dark .tabs { - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; } - -html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after, html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after { - border: 3px solid transparent; - border-radius: 2px; - border-right: 0; - border-top: 0; - content: " "; - display: block; - height: 0.625em; - margin-top: -0.4375em; - pointer-events: none; - position: absolute; - top: 50%; - transform: rotate(-45deg); - transform-origin: center; - width: 0.625em; } - -html.theme--documenter-dark .box:not(:last-child), html.theme--documenter-dark .content:not(:last-child), html.theme--documenter-dark .notification:not(:last-child), html.theme--documenter-dark .progress:not(:last-child), html.theme--documenter-dark .table:not(:last-child), html.theme--documenter-dark .table-container:not(:last-child), html.theme--documenter-dark .title:not(:last-child), -html.theme--documenter-dark .subtitle:not(:last-child), html.theme--documenter-dark .block:not(:last-child), html.theme--documenter-dark .highlight:not(:last-child), html.theme--documenter-dark .breadcrumb:not(:last-child), html.theme--documenter-dark .level:not(:last-child), html.theme--documenter-dark .list:not(:last-child), html.theme--documenter-dark .message:not(:last-child), html.theme--documenter-dark .tabs:not(:last-child), html.theme--documenter-dark .admonition:not(:last-child) { - margin-bottom: 1.5rem; } - -html.theme--documenter-dark .delete, html.theme--documenter-dark .modal-close { - -moz-appearance: none; - -webkit-appearance: none; - background-color: rgba(10, 10, 10, 0.2); - border: none; - border-radius: 290486px; - cursor: pointer; - pointer-events: auto; - display: inline-block; - flex-grow: 0; - flex-shrink: 0; - font-size: 0; - height: 20px; - max-height: 20px; - max-width: 20px; - min-height: 20px; - min-width: 20px; - outline: none; - position: relative; - vertical-align: top; - width: 20px; } - html.theme--documenter-dark .delete::before, html.theme--documenter-dark .modal-close::before, html.theme--documenter-dark .delete::after, html.theme--documenter-dark .modal-close::after { - background-color: white; - content: ""; - display: block; - left: 50%; - position: absolute; - top: 50%; - transform: translateX(-50%) translateY(-50%) rotate(45deg); - transform-origin: center center; } - html.theme--documenter-dark .delete::before, html.theme--documenter-dark .modal-close::before { - height: 2px; - width: 50%; } - html.theme--documenter-dark .delete::after, html.theme--documenter-dark .modal-close::after { - height: 50%; - width: 2px; } - html.theme--documenter-dark .delete:hover, html.theme--documenter-dark .modal-close:hover, html.theme--documenter-dark .delete:focus, html.theme--documenter-dark .modal-close:focus { - background-color: rgba(10, 10, 10, 0.3); } - html.theme--documenter-dark .delete:active, html.theme--documenter-dark .modal-close:active { - background-color: rgba(10, 10, 10, 0.4); } - html.theme--documenter-dark .is-small.delete, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.delete, html.theme--documenter-dark .is-small.modal-close, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.modal-close { - height: 16px; - max-height: 16px; - max-width: 16px; - min-height: 16px; - min-width: 16px; - width: 16px; } - html.theme--documenter-dark .is-medium.delete, html.theme--documenter-dark .is-medium.modal-close { - height: 24px; - max-height: 24px; - max-width: 24px; - min-height: 24px; - min-width: 24px; - width: 24px; } - html.theme--documenter-dark .is-large.delete, html.theme--documenter-dark .is-large.modal-close { - height: 32px; - max-height: 32px; - max-width: 32px; - min-height: 32px; - min-width: 32px; - width: 32px; } - -html.theme--documenter-dark .button.is-loading::after, html.theme--documenter-dark .loader, html.theme--documenter-dark .select.is-loading::after, html.theme--documenter-dark .control.is-loading::after { - animation: spinAround 500ms infinite linear; - border: 2px solid #dbdee0; - border-radius: 290486px; - border-right-color: transparent; - border-top-color: transparent; - content: ""; - display: block; - height: 1em; - position: relative; - width: 1em; } - -.is-overlay, html.theme--documenter-dark .image.is-square img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square img, -html.theme--documenter-dark .image.is-square .has-ratio, -html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, html.theme--documenter-dark .image.is-1by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 img, -html.theme--documenter-dark .image.is-1by1 .has-ratio, -html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, html.theme--documenter-dark .image.is-5by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 img, -html.theme--documenter-dark .image.is-5by4 .has-ratio, -html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, html.theme--documenter-dark .image.is-4by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 img, -html.theme--documenter-dark .image.is-4by3 .has-ratio, -html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, html.theme--documenter-dark .image.is-3by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 img, -html.theme--documenter-dark .image.is-3by2 .has-ratio, -html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, html.theme--documenter-dark .image.is-5by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 img, -html.theme--documenter-dark .image.is-5by3 .has-ratio, -html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, html.theme--documenter-dark .image.is-16by9 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 img, -html.theme--documenter-dark .image.is-16by9 .has-ratio, -html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, html.theme--documenter-dark .image.is-2by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 img, -html.theme--documenter-dark .image.is-2by1 .has-ratio, -html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, html.theme--documenter-dark .image.is-3by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 img, -html.theme--documenter-dark .image.is-3by1 .has-ratio, -html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, html.theme--documenter-dark .image.is-4by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 img, -html.theme--documenter-dark .image.is-4by5 .has-ratio, -html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, html.theme--documenter-dark .image.is-3by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 img, -html.theme--documenter-dark .image.is-3by4 .has-ratio, -html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, html.theme--documenter-dark .image.is-2by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 img, -html.theme--documenter-dark .image.is-2by3 .has-ratio, -html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, html.theme--documenter-dark .image.is-3by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 img, -html.theme--documenter-dark .image.is-3by5 .has-ratio, -html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, html.theme--documenter-dark .image.is-9by16 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 img, -html.theme--documenter-dark .image.is-9by16 .has-ratio, -html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, html.theme--documenter-dark .image.is-1by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 img, -html.theme--documenter-dark .image.is-1by2 .has-ratio, -html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, html.theme--documenter-dark .image.is-1by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 img, -html.theme--documenter-dark .image.is-1by3 .has-ratio, -html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio, html.theme--documenter-dark .modal, html.theme--documenter-dark .modal-background, html.theme--documenter-dark .hero-video { - bottom: 0; - left: 0; - position: absolute; - right: 0; - top: 0; } - -html.theme--documenter-dark .button, html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark .textarea, html.theme--documenter-dark .select select, html.theme--documenter-dark .file-cta, -html.theme--documenter-dark .file-name, html.theme--documenter-dark .pagination-previous, -html.theme--documenter-dark .pagination-next, -html.theme--documenter-dark .pagination-link, -html.theme--documenter-dark .pagination-ellipsis { - -moz-appearance: none; - -webkit-appearance: none; - align-items: center; - border: 1px solid transparent; - border-radius: 0.4em; - box-shadow: none; - display: inline-flex; - font-size: 15px; - height: 2.25em; - justify-content: flex-start; - line-height: 1.5; - padding-bottom: calc(0.375em - 1px); - padding-left: calc(0.625em - 1px); - padding-right: calc(0.625em - 1px); - padding-top: calc(0.375em - 1px); - position: relative; - vertical-align: top; } - html.theme--documenter-dark .button:focus, html.theme--documenter-dark .input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:focus, html.theme--documenter-dark .textarea:focus, html.theme--documenter-dark .select select:focus, html.theme--documenter-dark .file-cta:focus, - html.theme--documenter-dark .file-name:focus, html.theme--documenter-dark .pagination-previous:focus, - html.theme--documenter-dark .pagination-next:focus, - html.theme--documenter-dark .pagination-link:focus, - html.theme--documenter-dark .pagination-ellipsis:focus, html.theme--documenter-dark .is-focused.button, html.theme--documenter-dark .is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-focused.textarea, html.theme--documenter-dark .select select.is-focused, html.theme--documenter-dark .is-focused.file-cta, - html.theme--documenter-dark .is-focused.file-name, html.theme--documenter-dark .is-focused.pagination-previous, - html.theme--documenter-dark .is-focused.pagination-next, - html.theme--documenter-dark .is-focused.pagination-link, - html.theme--documenter-dark .is-focused.pagination-ellipsis, html.theme--documenter-dark .button:active, html.theme--documenter-dark .input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:active, html.theme--documenter-dark .textarea:active, html.theme--documenter-dark .select select:active, html.theme--documenter-dark .file-cta:active, - html.theme--documenter-dark .file-name:active, html.theme--documenter-dark .pagination-previous:active, - html.theme--documenter-dark .pagination-next:active, - html.theme--documenter-dark .pagination-link:active, - html.theme--documenter-dark .pagination-ellipsis:active, html.theme--documenter-dark .is-active.button, html.theme--documenter-dark .is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active, html.theme--documenter-dark .is-active.textarea, html.theme--documenter-dark .select select.is-active, html.theme--documenter-dark .is-active.file-cta, - html.theme--documenter-dark .is-active.file-name, html.theme--documenter-dark .is-active.pagination-previous, - html.theme--documenter-dark .is-active.pagination-next, - html.theme--documenter-dark .is-active.pagination-link, - html.theme--documenter-dark .is-active.pagination-ellipsis { - outline: none; } - html.theme--documenter-dark .button[disabled], html.theme--documenter-dark .input[disabled], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled], html.theme--documenter-dark .textarea[disabled], html.theme--documenter-dark .select select[disabled], html.theme--documenter-dark .file-cta[disabled], - html.theme--documenter-dark .file-name[disabled], html.theme--documenter-dark .pagination-previous[disabled], - html.theme--documenter-dark .pagination-next[disabled], - html.theme--documenter-dark .pagination-link[disabled], - html.theme--documenter-dark .pagination-ellipsis[disabled], - fieldset[disabled] html.theme--documenter-dark .button, - html.theme--documenter-dark fieldset[disabled] .button, - fieldset[disabled] html.theme--documenter-dark .input, - html.theme--documenter-dark fieldset[disabled] .input, - fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, - html.theme--documenter-dark #documenter .docs-sidebar fieldset[disabled] form.docs-search > input, - fieldset[disabled] html.theme--documenter-dark .textarea, - html.theme--documenter-dark fieldset[disabled] .textarea, - fieldset[disabled] html.theme--documenter-dark .select select, - html.theme--documenter-dark .select fieldset[disabled] select, - fieldset[disabled] html.theme--documenter-dark .file-cta, - html.theme--documenter-dark fieldset[disabled] .file-cta, - fieldset[disabled] html.theme--documenter-dark .file-name, - html.theme--documenter-dark fieldset[disabled] .file-name, - fieldset[disabled] html.theme--documenter-dark .pagination-previous, - html.theme--documenter-dark fieldset[disabled] .pagination-previous, - fieldset[disabled] html.theme--documenter-dark .pagination-next, - html.theme--documenter-dark fieldset[disabled] .pagination-next, - fieldset[disabled] html.theme--documenter-dark .pagination-link, - html.theme--documenter-dark fieldset[disabled] .pagination-link, - fieldset[disabled] html.theme--documenter-dark .pagination-ellipsis, - html.theme--documenter-dark fieldset[disabled] .pagination-ellipsis { - cursor: not-allowed; } - -/*! minireset.css v0.0.4 | MIT License | github.com/jgthms/minireset.css */ -html, -body, -p, -ol, -ul, -li, -dl, -dt, -dd, -blockquote, -figure, -fieldset, -legend, -textarea, -pre, -iframe, -hr, -h1, -h2, -h3, -h4, -h5, -h6 { - margin: 0; - padding: 0; } - -h1, -h2, -h3, -h4, -h5, -h6 { - font-size: 100%; - font-weight: normal; } - -ul { - list-style: none; } - -button, -input, -select, -textarea { - margin: 0; } - -html { - box-sizing: border-box; } - -*, *::before, *::after { - box-sizing: inherit; } - -img, -embed, -iframe, -object, -video { - height: auto; - max-width: 100%; } - -audio { - max-width: 100%; } - -iframe { - border: 0; } - -table { - border-collapse: collapse; - border-spacing: 0; } - -td, -th { - padding: 0; } - td:not([align]), - th:not([align]) { - text-align: left; } - -.is-clearfix::after { - clear: both; - content: " "; - display: table; } - -.is-pulled-left { - float: left !important; } - -.is-pulled-right { - float: right !important; } - -.is-clipped { - overflow: hidden !important; } - -.is-size-1 { - font-size: 3rem !important; } - -.is-size-2 { - font-size: 2.5rem !important; } - -.is-size-3 { - font-size: 2rem !important; } - -.is-size-4 { - font-size: 1.5rem !important; } - -.is-size-5 { - font-size: 1.25rem !important; } - -.is-size-6 { - font-size: 15px !important; } - -.is-size-7, html.theme--documenter-dark .docstring > section > a.docs-sourcelink { - font-size: 0.85em !important; } - -@media screen and (max-width: 768px) { - .is-size-1-mobile { - font-size: 3rem !important; } - .is-size-2-mobile { - font-size: 2.5rem !important; } - .is-size-3-mobile { - font-size: 2rem !important; } - .is-size-4-mobile { - font-size: 1.5rem !important; } - .is-size-5-mobile { - font-size: 1.25rem !important; } - .is-size-6-mobile { - font-size: 15px !important; } - .is-size-7-mobile { - font-size: 0.85em !important; } } - -@media screen and (min-width: 769px), print { - .is-size-1-tablet { - font-size: 3rem !important; } - .is-size-2-tablet { - font-size: 2.5rem !important; } - .is-size-3-tablet { - font-size: 2rem !important; } - .is-size-4-tablet { - font-size: 1.5rem !important; } - .is-size-5-tablet { - font-size: 1.25rem !important; } - .is-size-6-tablet { - font-size: 15px !important; } - .is-size-7-tablet { - font-size: 0.85em !important; } } - -@media screen and (max-width: 1055px) { - .is-size-1-touch { - font-size: 3rem !important; } - .is-size-2-touch { - font-size: 2.5rem !important; } - .is-size-3-touch { - font-size: 2rem !important; } - .is-size-4-touch { - font-size: 1.5rem !important; } - .is-size-5-touch { - font-size: 1.25rem !important; } - .is-size-6-touch { - font-size: 15px !important; } - .is-size-7-touch { - font-size: 0.85em !important; } } - -@media screen and (min-width: 1056px) { - .is-size-1-desktop { - font-size: 3rem !important; } - .is-size-2-desktop { - font-size: 2.5rem !important; } - .is-size-3-desktop { - font-size: 2rem !important; } - .is-size-4-desktop { - font-size: 1.5rem !important; } - .is-size-5-desktop { - font-size: 1.25rem !important; } - .is-size-6-desktop { - font-size: 15px !important; } - .is-size-7-desktop { - font-size: 0.85em !important; } } - -@media screen and (min-width: 1216px) { - .is-size-1-widescreen { - font-size: 3rem !important; } - .is-size-2-widescreen { - font-size: 2.5rem !important; } - .is-size-3-widescreen { - font-size: 2rem !important; } - .is-size-4-widescreen { - font-size: 1.5rem !important; } - .is-size-5-widescreen { - font-size: 1.25rem !important; } - .is-size-6-widescreen { - font-size: 15px !important; } - .is-size-7-widescreen { - font-size: 0.85em !important; } } - -@media screen and (min-width: 1408px) { - .is-size-1-fullhd { - font-size: 3rem !important; } - .is-size-2-fullhd { - font-size: 2.5rem !important; } - .is-size-3-fullhd { - font-size: 2rem !important; } - .is-size-4-fullhd { - font-size: 1.5rem !important; } - .is-size-5-fullhd { - font-size: 1.25rem !important; } - .is-size-6-fullhd { - font-size: 15px !important; } - .is-size-7-fullhd { - font-size: 0.85em !important; } } - -.has-text-centered { - text-align: center !important; } - -.has-text-justified { - text-align: justify !important; } - -.has-text-left { - text-align: left !important; } - -.has-text-right { - text-align: right !important; } - -@media screen and (max-width: 768px) { - .has-text-centered-mobile { - text-align: center !important; } } - -@media screen and (min-width: 769px), print { - .has-text-centered-tablet { - text-align: center !important; } } - -@media screen and (min-width: 769px) and (max-width: 1055px) { - .has-text-centered-tablet-only { - text-align: center !important; } } - -@media screen and (max-width: 1055px) { - .has-text-centered-touch { - text-align: center !important; } } - -@media screen and (min-width: 1056px) { - .has-text-centered-desktop { - text-align: center !important; } } - -@media screen and (min-width: 1056px) and (max-width: 1215px) { - .has-text-centered-desktop-only { - text-align: center !important; } } - -@media screen and (min-width: 1216px) { - .has-text-centered-widescreen { - text-align: center !important; } } - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .has-text-centered-widescreen-only { - text-align: center !important; } } - -@media screen and (min-width: 1408px) { - .has-text-centered-fullhd { - text-align: center !important; } } - -@media screen and (max-width: 768px) { - .has-text-justified-mobile { - text-align: justify !important; } } - -@media screen and (min-width: 769px), print { - .has-text-justified-tablet { - text-align: justify !important; } } - -@media screen and (min-width: 769px) and (max-width: 1055px) { - .has-text-justified-tablet-only { - text-align: justify !important; } } - -@media screen and (max-width: 1055px) { - .has-text-justified-touch { - text-align: justify !important; } } - -@media screen and (min-width: 1056px) { - .has-text-justified-desktop { - text-align: justify !important; } } - -@media screen and (min-width: 1056px) and (max-width: 1215px) { - .has-text-justified-desktop-only { - text-align: justify !important; } } - -@media screen and (min-width: 1216px) { - .has-text-justified-widescreen { - text-align: justify !important; } } - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .has-text-justified-widescreen-only { - text-align: justify !important; } } - -@media screen and (min-width: 1408px) { - .has-text-justified-fullhd { - text-align: justify !important; } } - -@media screen and (max-width: 768px) { - .has-text-left-mobile { - text-align: left !important; } } - -@media screen and (min-width: 769px), print { - .has-text-left-tablet { - text-align: left !important; } } - -@media screen and (min-width: 769px) and (max-width: 1055px) { - .has-text-left-tablet-only { - text-align: left !important; } } - -@media screen and (max-width: 1055px) { - .has-text-left-touch { - text-align: left !important; } } - -@media screen and (min-width: 1056px) { - .has-text-left-desktop { - text-align: left !important; } } - -@media screen and (min-width: 1056px) and (max-width: 1215px) { - .has-text-left-desktop-only { - text-align: left !important; } } - -@media screen and (min-width: 1216px) { - .has-text-left-widescreen { - text-align: left !important; } } - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .has-text-left-widescreen-only { - text-align: left !important; } } - -@media screen and (min-width: 1408px) { - .has-text-left-fullhd { - text-align: left !important; } } - -@media screen and (max-width: 768px) { - .has-text-right-mobile { - text-align: right !important; } } - -@media screen and (min-width: 769px), print { - .has-text-right-tablet { - text-align: right !important; } } - -@media screen and (min-width: 769px) and (max-width: 1055px) { - .has-text-right-tablet-only { - text-align: right !important; } } - -@media screen and (max-width: 1055px) { - .has-text-right-touch { - text-align: right !important; } } - -@media screen and (min-width: 1056px) { - .has-text-right-desktop { - text-align: right !important; } } - -@media screen and (min-width: 1056px) and (max-width: 1215px) { - .has-text-right-desktop-only { - text-align: right !important; } } - -@media screen and (min-width: 1216px) { - .has-text-right-widescreen { - text-align: right !important; } } - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .has-text-right-widescreen-only { - text-align: right !important; } } - -@media screen and (min-width: 1408px) { - .has-text-right-fullhd { - text-align: right !important; } } - -.is-capitalized { - text-transform: capitalize !important; } - -.is-lowercase { - text-transform: lowercase !important; } - -.is-uppercase { - text-transform: uppercase !important; } - -.is-italic { - font-style: italic !important; } - -.has-text-white { - color: white !important; } - -a.has-text-white:hover, a.has-text-white:focus { - color: #e6e6e6 !important; } - -.has-background-white { - background-color: white !important; } - -.has-text-black { - color: #0a0a0a !important; } - -a.has-text-black:hover, a.has-text-black:focus { - color: black !important; } - -.has-background-black { - background-color: #0a0a0a !important; } - -.has-text-light { - color: #ecf0f1 !important; } - -a.has-text-light:hover, a.has-text-light:focus { - color: #cfd9db !important; } - -.has-background-light { - background-color: #ecf0f1 !important; } - -.has-text-dark { - color: #282f2f !important; } - -a.has-text-dark:hover, a.has-text-dark:focus { - color: #111414 !important; } - -.has-background-dark { - background-color: #282f2f !important; } - -.has-text-primary { - color: #375a7f !important; } - -a.has-text-primary:hover, a.has-text-primary:focus { - color: #28415b !important; } - -.has-background-primary { - background-color: #375a7f !important; } - -.has-text-link { - color: #1abc9c !important; } - -a.has-text-link:hover, a.has-text-link:focus { - color: #148f77 !important; } - -.has-background-link { - background-color: #1abc9c !important; } - -.has-text-info { - color: #024c7d !important; } - -a.has-text-info:hover, a.has-text-info:focus { - color: #012d4b !important; } - -.has-background-info { - background-color: #024c7d !important; } - -.has-text-success { - color: #008438 !important; } - -a.has-text-success:hover, a.has-text-success:focus { - color: #005122 !important; } - -.has-background-success { - background-color: #008438 !important; } - -.has-text-warning { - color: #ad8100 !important; } - -a.has-text-warning:hover, a.has-text-warning:focus { - color: #7a5b00 !important; } - -.has-background-warning { - background-color: #ad8100 !important; } - -.has-text-danger { - color: #9e1b0d !important; } - -a.has-text-danger:hover, a.has-text-danger:focus { - color: #6f1309 !important; } - -.has-background-danger { - background-color: #9e1b0d !important; } - -.has-text-black-bis { - color: #121212 !important; } - -.has-background-black-bis { - background-color: #121212 !important; } - -.has-text-black-ter { - color: #242424 !important; } - -.has-background-black-ter { - background-color: #242424 !important; } - -.has-text-grey-darker { - color: #282f2f !important; } - -.has-background-grey-darker { - background-color: #282f2f !important; } - -.has-text-grey-dark { - color: #343c3d !important; } - -.has-background-grey-dark { - background-color: #343c3d !important; } - -.has-text-grey { - color: #5e6d6f !important; } - -.has-background-grey { - background-color: #5e6d6f !important; } - -.has-text-grey-light { - color: #8c9b9d !important; } - -.has-background-grey-light { - background-color: #8c9b9d !important; } - -.has-text-grey-lighter { - color: #dbdee0 !important; } - -.has-background-grey-lighter { - background-color: #dbdee0 !important; } - -.has-text-white-ter { - color: #ecf0f1 !important; } - -.has-background-white-ter { - background-color: #ecf0f1 !important; } - -.has-text-white-bis { - color: #fafafa !important; } - -.has-background-white-bis { - background-color: #fafafa !important; } - -.has-text-weight-light { - font-weight: 300 !important; } - -.has-text-weight-normal { - font-weight: 400 !important; } - -.has-text-weight-medium { - font-weight: 500 !important; } - -.has-text-weight-semibold { - font-weight: 600 !important; } - -.has-text-weight-bold { - font-weight: 700 !important; } - -.is-family-primary { - font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } - -.is-family-secondary { - font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } - -.is-family-sans-serif { - font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } - -.is-family-monospace { - font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } - -.is-family-code { - font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } - -.is-block { - display: block !important; } - -@media screen and (max-width: 768px) { - .is-block-mobile { - display: block !important; } } - -@media screen and (min-width: 769px), print { - .is-block-tablet { - display: block !important; } } - -@media screen and (min-width: 769px) and (max-width: 1055px) { - .is-block-tablet-only { - display: block !important; } } - -@media screen and (max-width: 1055px) { - .is-block-touch { - display: block !important; } } - -@media screen and (min-width: 1056px) { - .is-block-desktop { - display: block !important; } } - -@media screen and (min-width: 1056px) and (max-width: 1215px) { - .is-block-desktop-only { - display: block !important; } } - -@media screen and (min-width: 1216px) { - .is-block-widescreen { - display: block !important; } } - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .is-block-widescreen-only { - display: block !important; } } - -@media screen and (min-width: 1408px) { - .is-block-fullhd { - display: block !important; } } - -.is-flex { - display: flex !important; } - -@media screen and (max-width: 768px) { - .is-flex-mobile { - display: flex !important; } } - -@media screen and (min-width: 769px), print { - .is-flex-tablet { - display: flex !important; } } - -@media screen and (min-width: 769px) and (max-width: 1055px) { - .is-flex-tablet-only { - display: flex !important; } } - -@media screen and (max-width: 1055px) { - .is-flex-touch { - display: flex !important; } } - -@media screen and (min-width: 1056px) { - .is-flex-desktop { - display: flex !important; } } - -@media screen and (min-width: 1056px) and (max-width: 1215px) { - .is-flex-desktop-only { - display: flex !important; } } - -@media screen and (min-width: 1216px) { - .is-flex-widescreen { - display: flex !important; } } - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .is-flex-widescreen-only { - display: flex !important; } } - -@media screen and (min-width: 1408px) { - .is-flex-fullhd { - display: flex !important; } } - -.is-inline { - display: inline !important; } - -@media screen and (max-width: 768px) { - .is-inline-mobile { - display: inline !important; } } - -@media screen and (min-width: 769px), print { - .is-inline-tablet { - display: inline !important; } } - -@media screen and (min-width: 769px) and (max-width: 1055px) { - .is-inline-tablet-only { - display: inline !important; } } - -@media screen and (max-width: 1055px) { - .is-inline-touch { - display: inline !important; } } - -@media screen and (min-width: 1056px) { - .is-inline-desktop { - display: inline !important; } } - -@media screen and (min-width: 1056px) and (max-width: 1215px) { - .is-inline-desktop-only { - display: inline !important; } } - -@media screen and (min-width: 1216px) { - .is-inline-widescreen { - display: inline !important; } } - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .is-inline-widescreen-only { - display: inline !important; } } - -@media screen and (min-width: 1408px) { - .is-inline-fullhd { - display: inline !important; } } - -.is-inline-block { - display: inline-block !important; } - -@media screen and (max-width: 768px) { - .is-inline-block-mobile { - display: inline-block !important; } } - -@media screen and (min-width: 769px), print { - .is-inline-block-tablet { - display: inline-block !important; } } - -@media screen and (min-width: 769px) and (max-width: 1055px) { - .is-inline-block-tablet-only { - display: inline-block !important; } } - -@media screen and (max-width: 1055px) { - .is-inline-block-touch { - display: inline-block !important; } } - -@media screen and (min-width: 1056px) { - .is-inline-block-desktop { - display: inline-block !important; } } - -@media screen and (min-width: 1056px) and (max-width: 1215px) { - .is-inline-block-desktop-only { - display: inline-block !important; } } - -@media screen and (min-width: 1216px) { - .is-inline-block-widescreen { - display: inline-block !important; } } - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .is-inline-block-widescreen-only { - display: inline-block !important; } } - -@media screen and (min-width: 1408px) { - .is-inline-block-fullhd { - display: inline-block !important; } } - -.is-inline-flex { - display: inline-flex !important; } - -@media screen and (max-width: 768px) { - .is-inline-flex-mobile { - display: inline-flex !important; } } - -@media screen and (min-width: 769px), print { - .is-inline-flex-tablet { - display: inline-flex !important; } } - -@media screen and (min-width: 769px) and (max-width: 1055px) { - .is-inline-flex-tablet-only { - display: inline-flex !important; } } - -@media screen and (max-width: 1055px) { - .is-inline-flex-touch { - display: inline-flex !important; } } - -@media screen and (min-width: 1056px) { - .is-inline-flex-desktop { - display: inline-flex !important; } } - -@media screen and (min-width: 1056px) and (max-width: 1215px) { - .is-inline-flex-desktop-only { - display: inline-flex !important; } } - -@media screen and (min-width: 1216px) { - .is-inline-flex-widescreen { - display: inline-flex !important; } } - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .is-inline-flex-widescreen-only { - display: inline-flex !important; } } - -@media screen and (min-width: 1408px) { - .is-inline-flex-fullhd { - display: inline-flex !important; } } - -.is-hidden { - display: none !important; } - -.is-sr-only { - border: none !important; - clip: rect(0, 0, 0, 0) !important; - height: 0.01em !important; - overflow: hidden !important; - padding: 0 !important; - position: absolute !important; - white-space: nowrap !important; - width: 0.01em !important; } - -@media screen and (max-width: 768px) { - .is-hidden-mobile { - display: none !important; } } - -@media screen and (min-width: 769px), print { - .is-hidden-tablet { - display: none !important; } } - -@media screen and (min-width: 769px) and (max-width: 1055px) { - .is-hidden-tablet-only { - display: none !important; } } - -@media screen and (max-width: 1055px) { - .is-hidden-touch { - display: none !important; } } - -@media screen and (min-width: 1056px) { - .is-hidden-desktop { - display: none !important; } } - -@media screen and (min-width: 1056px) and (max-width: 1215px) { - .is-hidden-desktop-only { - display: none !important; } } - -@media screen and (min-width: 1216px) { - .is-hidden-widescreen { - display: none !important; } } - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .is-hidden-widescreen-only { - display: none !important; } } - -@media screen and (min-width: 1408px) { - .is-hidden-fullhd { - display: none !important; } } - -.is-invisible { - visibility: hidden !important; } - -@media screen and (max-width: 768px) { - .is-invisible-mobile { - visibility: hidden !important; } } - -@media screen and (min-width: 769px), print { - .is-invisible-tablet { - visibility: hidden !important; } } - -@media screen and (min-width: 769px) and (max-width: 1055px) { - .is-invisible-tablet-only { - visibility: hidden !important; } } - -@media screen and (max-width: 1055px) { - .is-invisible-touch { - visibility: hidden !important; } } - -@media screen and (min-width: 1056px) { - .is-invisible-desktop { - visibility: hidden !important; } } - -@media screen and (min-width: 1056px) and (max-width: 1215px) { - .is-invisible-desktop-only { - visibility: hidden !important; } } - -@media screen and (min-width: 1216px) { - .is-invisible-widescreen { - visibility: hidden !important; } } - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .is-invisible-widescreen-only { - visibility: hidden !important; } } - -@media screen and (min-width: 1408px) { - .is-invisible-fullhd { - visibility: hidden !important; } } - -.is-marginless { - margin: 0 !important; } - -.is-paddingless { - padding: 0 !important; } - -.is-radiusless { - border-radius: 0 !important; } - -.is-shadowless { - box-shadow: none !important; } - -.is-relative { - position: relative !important; } - -html.theme--documenter-dark { - /* This file contain the overall layout. - * - * The main container is
      that is identified by id #documenter. - */ - /*! - Theme: a11y-dark - Author: @ericwbailey - Maintainer: @ericwbailey - - Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css -*/ - /* Comment */ - /* Red */ - /* Orange */ - /* Yellow */ - /* Green */ - /* Blue */ - /* Purple */ } - html.theme--documenter-dark html { - background-color: #1f2424; - font-size: 16px; - -moz-osx-font-smoothing: grayscale; - -webkit-font-smoothing: antialiased; - min-width: 300px; - overflow-x: auto; - overflow-y: scroll; - text-rendering: optimizeLegibility; - text-size-adjust: 100%; } - html.theme--documenter-dark article, - html.theme--documenter-dark aside, - html.theme--documenter-dark figure, - html.theme--documenter-dark footer, - html.theme--documenter-dark header, - html.theme--documenter-dark hgroup, - html.theme--documenter-dark section { - display: block; } - html.theme--documenter-dark body, - html.theme--documenter-dark button, - html.theme--documenter-dark input, - html.theme--documenter-dark select, - html.theme--documenter-dark textarea { - font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif; } - html.theme--documenter-dark code, - html.theme--documenter-dark pre { - -moz-osx-font-smoothing: auto; - -webkit-font-smoothing: auto; - font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace; } - html.theme--documenter-dark body { - color: #fff; - font-size: 1em; - font-weight: 400; - line-height: 1.5; } - html.theme--documenter-dark a { - color: #1abc9c; - cursor: pointer; - text-decoration: none; } - html.theme--documenter-dark a strong { - color: currentColor; } - html.theme--documenter-dark a:hover { - color: #1dd2af; } - html.theme--documenter-dark code { - background-color: rgba(255, 255, 255, 0.05); - color: #e74c3c; - font-size: 0.875em; - font-weight: normal; - padding: 0.1em; } - html.theme--documenter-dark hr { - background-color: #282f2f; - border: none; - display: block; - height: 2px; - margin: 1.5rem 0; } - html.theme--documenter-dark img { - height: auto; - max-width: 100%; } - html.theme--documenter-dark input[type="checkbox"], - html.theme--documenter-dark input[type="radio"] { - vertical-align: baseline; } - html.theme--documenter-dark small { - font-size: 0.875em; } - html.theme--documenter-dark span { - font-style: inherit; - font-weight: inherit; } - html.theme--documenter-dark strong { - color: #f2f2f2; - font-weight: 700; } - html.theme--documenter-dark fieldset { - border: none; } - html.theme--documenter-dark pre { - -webkit-overflow-scrolling: touch; - background-color: #282f2f; - color: #fff; - font-size: 0.875em; - overflow-x: auto; - padding: 1.25rem 1.5rem; - white-space: pre; - word-wrap: normal; } - html.theme--documenter-dark pre code { - background-color: transparent; - color: currentColor; - font-size: 1em; - padding: 0; } - html.theme--documenter-dark table td, - html.theme--documenter-dark table th { - vertical-align: top; } - html.theme--documenter-dark table td:not([align]), - html.theme--documenter-dark table th:not([align]) { - text-align: left; } - html.theme--documenter-dark table th { - color: #f2f2f2; } - html.theme--documenter-dark .box { - background-color: #343c3d; - border-radius: 8px; - box-shadow: none; - color: #fff; - display: block; - padding: 1.25rem; } - html.theme--documenter-dark a.box:hover, html.theme--documenter-dark a.box:focus { - box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px #1abc9c; } - html.theme--documenter-dark a.box:active { - box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2), 0 0 0 1px #1abc9c; } - html.theme--documenter-dark .button { - background-color: #282f2f; - border-color: #4c5759; - border-width: 1px; - color: #375a7f; - cursor: pointer; - justify-content: center; - padding-bottom: calc(0.375em - 1px); - padding-left: 0.75em; - padding-right: 0.75em; - padding-top: calc(0.375em - 1px); - text-align: center; - white-space: nowrap; } - html.theme--documenter-dark .button strong { - color: inherit; } - html.theme--documenter-dark .button .icon, html.theme--documenter-dark .button .icon.is-small, html.theme--documenter-dark .button #documenter .docs-sidebar form.docs-search > input.icon, html.theme--documenter-dark #documenter .docs-sidebar .button form.docs-search > input.icon, html.theme--documenter-dark .button .icon.is-medium, html.theme--documenter-dark .button .icon.is-large { - height: 1.5em; - width: 1.5em; } - html.theme--documenter-dark .button .icon:first-child:not(:last-child) { - margin-left: calc(-0.375em - 1px); - margin-right: 0.1875em; } - html.theme--documenter-dark .button .icon:last-child:not(:first-child) { - margin-left: 0.1875em; - margin-right: calc(-0.375em - 1px); } - html.theme--documenter-dark .button .icon:first-child:last-child { - margin-left: calc(-0.375em - 1px); - margin-right: calc(-0.375em - 1px); } - html.theme--documenter-dark .button:hover, html.theme--documenter-dark .button.is-hovered { - border-color: #8c9b9d; - color: #f2f2f2; } - html.theme--documenter-dark .button:focus, html.theme--documenter-dark .button.is-focused { - border-color: #8c9b9d; - color: #17a689; } - html.theme--documenter-dark .button:focus:not(:active), html.theme--documenter-dark .button.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } - html.theme--documenter-dark .button:active, html.theme--documenter-dark .button.is-active { - border-color: #343c3d; - color: #f2f2f2; } - html.theme--documenter-dark .button.is-text { - background-color: transparent; - border-color: transparent; - color: #fff; - text-decoration: underline; } - html.theme--documenter-dark .button.is-text:hover, html.theme--documenter-dark .button.is-text.is-hovered, html.theme--documenter-dark .button.is-text:focus, html.theme--documenter-dark .button.is-text.is-focused { - background-color: #282f2f; - color: #f2f2f2; } - html.theme--documenter-dark .button.is-text:active, html.theme--documenter-dark .button.is-text.is-active { - background-color: #1d2122; - color: #f2f2f2; } - html.theme--documenter-dark .button.is-text[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-text { - background-color: transparent; - border-color: transparent; - box-shadow: none; } - html.theme--documenter-dark .button.is-white { - background-color: white; - border-color: transparent; - color: #0a0a0a; } - html.theme--documenter-dark .button.is-white:hover, html.theme--documenter-dark .button.is-white.is-hovered { - background-color: #f9f9f9; - border-color: transparent; - color: #0a0a0a; } - html.theme--documenter-dark .button.is-white:focus, html.theme--documenter-dark .button.is-white.is-focused { - border-color: transparent; - color: #0a0a0a; } - html.theme--documenter-dark .button.is-white:focus:not(:active), html.theme--documenter-dark .button.is-white.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } - html.theme--documenter-dark .button.is-white:active, html.theme--documenter-dark .button.is-white.is-active { - background-color: #f2f2f2; - border-color: transparent; - color: #0a0a0a; } - html.theme--documenter-dark .button.is-white[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-white { - background-color: white; - border-color: transparent; - box-shadow: none; } - html.theme--documenter-dark .button.is-white.is-inverted { - background-color: #0a0a0a; - color: white; } - html.theme--documenter-dark .button.is-white.is-inverted:hover, html.theme--documenter-dark .button.is-white.is-inverted.is-hovered { - background-color: black; } - html.theme--documenter-dark .button.is-white.is-inverted[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted { - background-color: #0a0a0a; - border-color: transparent; - box-shadow: none; - color: white; } - html.theme--documenter-dark .button.is-white.is-loading::after { - border-color: transparent transparent #0a0a0a #0a0a0a !important; } - html.theme--documenter-dark .button.is-white.is-outlined { - background-color: transparent; - border-color: white; - color: white; } - html.theme--documenter-dark .button.is-white.is-outlined:hover, html.theme--documenter-dark .button.is-white.is-outlined.is-hovered, html.theme--documenter-dark .button.is-white.is-outlined:focus, html.theme--documenter-dark .button.is-white.is-outlined.is-focused { - background-color: white; - border-color: white; - color: #0a0a0a; } - html.theme--documenter-dark .button.is-white.is-outlined.is-loading::after { - border-color: transparent transparent white white !important; } - html.theme--documenter-dark .button.is-white.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-white.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #0a0a0a #0a0a0a !important; } - html.theme--documenter-dark .button.is-white.is-outlined[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-white.is-outlined { - background-color: transparent; - border-color: white; - box-shadow: none; - color: white; } - html.theme--documenter-dark .button.is-white.is-inverted.is-outlined { - background-color: transparent; - border-color: #0a0a0a; - color: #0a0a0a; } - html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-focused { - background-color: #0a0a0a; - color: white; } - html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent white white !important; } - html.theme--documenter-dark .button.is-white.is-inverted.is-outlined[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted.is-outlined { - background-color: transparent; - border-color: #0a0a0a; - box-shadow: none; - color: #0a0a0a; } - html.theme--documenter-dark .button.is-black { - background-color: #0a0a0a; - border-color: transparent; - color: white; } - html.theme--documenter-dark .button.is-black:hover, html.theme--documenter-dark .button.is-black.is-hovered { - background-color: #040404; - border-color: transparent; - color: white; } - html.theme--documenter-dark .button.is-black:focus, html.theme--documenter-dark .button.is-black.is-focused { - border-color: transparent; - color: white; } - html.theme--documenter-dark .button.is-black:focus:not(:active), html.theme--documenter-dark .button.is-black.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } - html.theme--documenter-dark .button.is-black:active, html.theme--documenter-dark .button.is-black.is-active { - background-color: black; - border-color: transparent; - color: white; } - html.theme--documenter-dark .button.is-black[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-black { - background-color: #0a0a0a; - border-color: transparent; - box-shadow: none; } - html.theme--documenter-dark .button.is-black.is-inverted { - background-color: white; - color: #0a0a0a; } - html.theme--documenter-dark .button.is-black.is-inverted:hover, html.theme--documenter-dark .button.is-black.is-inverted.is-hovered { - background-color: #f2f2f2; } - html.theme--documenter-dark .button.is-black.is-inverted[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted { - background-color: white; - border-color: transparent; - box-shadow: none; - color: #0a0a0a; } - html.theme--documenter-dark .button.is-black.is-loading::after { - border-color: transparent transparent white white !important; } - html.theme--documenter-dark .button.is-black.is-outlined { - background-color: transparent; - border-color: #0a0a0a; - color: #0a0a0a; } - html.theme--documenter-dark .button.is-black.is-outlined:hover, html.theme--documenter-dark .button.is-black.is-outlined.is-hovered, html.theme--documenter-dark .button.is-black.is-outlined:focus, html.theme--documenter-dark .button.is-black.is-outlined.is-focused { - background-color: #0a0a0a; - border-color: #0a0a0a; - color: white; } - html.theme--documenter-dark .button.is-black.is-outlined.is-loading::after { - border-color: transparent transparent #0a0a0a #0a0a0a !important; } - html.theme--documenter-dark .button.is-black.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-black.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent white white !important; } - html.theme--documenter-dark .button.is-black.is-outlined[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-black.is-outlined { - background-color: transparent; - border-color: #0a0a0a; - box-shadow: none; - color: #0a0a0a; } - html.theme--documenter-dark .button.is-black.is-inverted.is-outlined { - background-color: transparent; - border-color: white; - color: white; } - html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-focused { - background-color: white; - color: #0a0a0a; } - html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #0a0a0a #0a0a0a !important; } - html.theme--documenter-dark .button.is-black.is-inverted.is-outlined[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted.is-outlined { - background-color: transparent; - border-color: white; - box-shadow: none; - color: white; } - html.theme--documenter-dark .button.is-light { - background-color: #ecf0f1; - border-color: transparent; - color: #282f2f; } - html.theme--documenter-dark .button.is-light:hover, html.theme--documenter-dark .button.is-light.is-hovered { - background-color: #e5eaec; - border-color: transparent; - color: #282f2f; } - html.theme--documenter-dark .button.is-light:focus, html.theme--documenter-dark .button.is-light.is-focused { - border-color: transparent; - color: #282f2f; } - html.theme--documenter-dark .button.is-light:focus:not(:active), html.theme--documenter-dark .button.is-light.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(236, 240, 241, 0.25); } - html.theme--documenter-dark .button.is-light:active, html.theme--documenter-dark .button.is-light.is-active { - background-color: #dde4e6; - border-color: transparent; - color: #282f2f; } - html.theme--documenter-dark .button.is-light[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-light { - background-color: #ecf0f1; - border-color: transparent; - box-shadow: none; } - html.theme--documenter-dark .button.is-light.is-inverted { - background-color: #282f2f; - color: #ecf0f1; } - html.theme--documenter-dark .button.is-light.is-inverted:hover, html.theme--documenter-dark .button.is-light.is-inverted.is-hovered { - background-color: #1d2122; } - html.theme--documenter-dark .button.is-light.is-inverted[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted { - background-color: #282f2f; - border-color: transparent; - box-shadow: none; - color: #ecf0f1; } - html.theme--documenter-dark .button.is-light.is-loading::after { - border-color: transparent transparent #282f2f #282f2f !important; } - html.theme--documenter-dark .button.is-light.is-outlined { - background-color: transparent; - border-color: #ecf0f1; - color: #ecf0f1; } - html.theme--documenter-dark .button.is-light.is-outlined:hover, html.theme--documenter-dark .button.is-light.is-outlined.is-hovered, html.theme--documenter-dark .button.is-light.is-outlined:focus, html.theme--documenter-dark .button.is-light.is-outlined.is-focused { - background-color: #ecf0f1; - border-color: #ecf0f1; - color: #282f2f; } - html.theme--documenter-dark .button.is-light.is-outlined.is-loading::after { - border-color: transparent transparent #ecf0f1 #ecf0f1 !important; } - html.theme--documenter-dark .button.is-light.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-light.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #282f2f #282f2f !important; } - html.theme--documenter-dark .button.is-light.is-outlined[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-light.is-outlined { - background-color: transparent; - border-color: #ecf0f1; - box-shadow: none; - color: #ecf0f1; } - html.theme--documenter-dark .button.is-light.is-inverted.is-outlined { - background-color: transparent; - border-color: #282f2f; - color: #282f2f; } - html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-focused { - background-color: #282f2f; - color: #ecf0f1; } - html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #ecf0f1 #ecf0f1 !important; } - html.theme--documenter-dark .button.is-light.is-inverted.is-outlined[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted.is-outlined { - background-color: transparent; - border-color: #282f2f; - box-shadow: none; - color: #282f2f; } - html.theme--documenter-dark .button.is-dark, html.theme--documenter-dark .content kbd.button { - background-color: #282f2f; - border-color: transparent; - color: #ecf0f1; } - html.theme--documenter-dark .button.is-dark:hover, html.theme--documenter-dark .content kbd.button:hover, html.theme--documenter-dark .button.is-dark.is-hovered, html.theme--documenter-dark .content kbd.button.is-hovered { - background-color: #232829; - border-color: transparent; - color: #ecf0f1; } - html.theme--documenter-dark .button.is-dark:focus, html.theme--documenter-dark .content kbd.button:focus, html.theme--documenter-dark .button.is-dark.is-focused, html.theme--documenter-dark .content kbd.button.is-focused { - border-color: transparent; - color: #ecf0f1; } - html.theme--documenter-dark .button.is-dark:focus:not(:active), html.theme--documenter-dark .content kbd.button:focus:not(:active), html.theme--documenter-dark .button.is-dark.is-focused:not(:active), html.theme--documenter-dark .content kbd.button.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(40, 47, 47, 0.25); } - html.theme--documenter-dark .button.is-dark:active, html.theme--documenter-dark .content kbd.button:active, html.theme--documenter-dark .button.is-dark.is-active, html.theme--documenter-dark .content kbd.button.is-active { - background-color: #1d2122; - border-color: transparent; - color: #ecf0f1; } - html.theme--documenter-dark .button.is-dark[disabled], html.theme--documenter-dark .content kbd.button[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-dark, - fieldset[disabled] html.theme--documenter-dark .content kbd.button { - background-color: #282f2f; - border-color: transparent; - box-shadow: none; } - html.theme--documenter-dark .button.is-dark.is-inverted, html.theme--documenter-dark .content kbd.button.is-inverted { - background-color: #ecf0f1; - color: #282f2f; } - html.theme--documenter-dark .button.is-dark.is-inverted:hover, html.theme--documenter-dark .content kbd.button.is-inverted:hover, html.theme--documenter-dark .button.is-dark.is-inverted.is-hovered, html.theme--documenter-dark .content kbd.button.is-inverted.is-hovered { - background-color: #dde4e6; } - html.theme--documenter-dark .button.is-dark.is-inverted[disabled], html.theme--documenter-dark .content kbd.button.is-inverted[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted, - fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted { - background-color: #ecf0f1; - border-color: transparent; - box-shadow: none; - color: #282f2f; } - html.theme--documenter-dark .button.is-dark.is-loading::after, html.theme--documenter-dark .content kbd.button.is-loading::after { - border-color: transparent transparent #ecf0f1 #ecf0f1 !important; } - html.theme--documenter-dark .button.is-dark.is-outlined, html.theme--documenter-dark .content kbd.button.is-outlined { - background-color: transparent; - border-color: #282f2f; - color: #282f2f; } - html.theme--documenter-dark .button.is-dark.is-outlined:hover, html.theme--documenter-dark .content kbd.button.is-outlined:hover, html.theme--documenter-dark .button.is-dark.is-outlined.is-hovered, html.theme--documenter-dark .content kbd.button.is-outlined.is-hovered, html.theme--documenter-dark .button.is-dark.is-outlined:focus, html.theme--documenter-dark .content kbd.button.is-outlined:focus, html.theme--documenter-dark .button.is-dark.is-outlined.is-focused, html.theme--documenter-dark .content kbd.button.is-outlined.is-focused { - background-color: #282f2f; - border-color: #282f2f; - color: #ecf0f1; } - html.theme--documenter-dark .button.is-dark.is-outlined.is-loading::after, html.theme--documenter-dark .content kbd.button.is-outlined.is-loading::after { - border-color: transparent transparent #282f2f #282f2f !important; } - html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:hover::after, html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:focus::after, html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-focused::after, html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #ecf0f1 #ecf0f1 !important; } - html.theme--documenter-dark .button.is-dark.is-outlined[disabled], html.theme--documenter-dark .content kbd.button.is-outlined[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-outlined, - fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-outlined { - background-color: transparent; - border-color: #282f2f; - box-shadow: none; - color: #282f2f; } - html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined { - background-color: transparent; - border-color: #ecf0f1; - color: #ecf0f1; } - html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:hover, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:focus, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-focused, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-focused { - background-color: #ecf0f1; - color: #282f2f; } - html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #282f2f #282f2f !important; } - html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined[disabled], html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined, - fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined { - background-color: transparent; - border-color: #ecf0f1; - box-shadow: none; - color: #ecf0f1; } - html.theme--documenter-dark .button.is-primary, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink { - background-color: #375a7f; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .button.is-primary:hover, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:hover, html.theme--documenter-dark .button.is-primary.is-hovered, html.theme--documenter-dark .docstring > section > a.button.is-hovered.docs-sourcelink { - background-color: #335476; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .button.is-primary:focus, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:focus, html.theme--documenter-dark .button.is-primary.is-focused, html.theme--documenter-dark .docstring > section > a.button.is-focused.docs-sourcelink { - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .button.is-primary:focus:not(:active), html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:focus:not(:active), html.theme--documenter-dark .button.is-primary.is-focused:not(:active), html.theme--documenter-dark .docstring > section > a.button.is-focused.docs-sourcelink:not(:active) { - box-shadow: 0 0 0 0.125em rgba(55, 90, 127, 0.25); } - html.theme--documenter-dark .button.is-primary:active, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:active, html.theme--documenter-dark .button.is-primary.is-active, html.theme--documenter-dark .docstring > section > a.button.is-active.docs-sourcelink { - background-color: #2f4d6d; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .button.is-primary[disabled], html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-primary, - fieldset[disabled] html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink { - background-color: #375a7f; - border-color: transparent; - box-shadow: none; } - html.theme--documenter-dark .button.is-primary.is-inverted, html.theme--documenter-dark .docstring > section > a.button.is-inverted.docs-sourcelink { - background-color: #fff; - color: #375a7f; } - html.theme--documenter-dark .button.is-primary.is-inverted:hover, html.theme--documenter-dark .docstring > section > a.button.is-inverted.docs-sourcelink:hover, html.theme--documenter-dark .button.is-primary.is-inverted.is-hovered, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-hovered.docs-sourcelink { - background-color: #f2f2f2; } - html.theme--documenter-dark .button.is-primary.is-inverted[disabled], html.theme--documenter-dark .docstring > section > a.button.is-inverted.docs-sourcelink[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted, - fieldset[disabled] html.theme--documenter-dark .docstring > section > a.button.is-inverted.docs-sourcelink { - background-color: #fff; - border-color: transparent; - box-shadow: none; - color: #375a7f; } - html.theme--documenter-dark .button.is-primary.is-loading::after, html.theme--documenter-dark .docstring > section > a.button.is-loading.docs-sourcelink::after { - border-color: transparent transparent #fff #fff !important; } - html.theme--documenter-dark .button.is-primary.is-outlined, html.theme--documenter-dark .docstring > section > a.button.is-outlined.docs-sourcelink { - background-color: transparent; - border-color: #375a7f; - color: #375a7f; } - html.theme--documenter-dark .button.is-primary.is-outlined:hover, html.theme--documenter-dark .docstring > section > a.button.is-outlined.docs-sourcelink:hover, html.theme--documenter-dark .button.is-primary.is-outlined.is-hovered, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-hovered.docs-sourcelink, html.theme--documenter-dark .button.is-primary.is-outlined:focus, html.theme--documenter-dark .docstring > section > a.button.is-outlined.docs-sourcelink:focus, html.theme--documenter-dark .button.is-primary.is-outlined.is-focused, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-focused.docs-sourcelink { - background-color: #375a7f; - border-color: #375a7f; - color: #fff; } - html.theme--documenter-dark .button.is-primary.is-outlined.is-loading::after, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-loading.docs-sourcelink::after { - border-color: transparent transparent #375a7f #375a7f !important; } - html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:hover::after, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-loading.docs-sourcelink:hover::after, html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after, html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:focus::after, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-loading.docs-sourcelink:focus::after, html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-focused::after, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after { - border-color: transparent transparent #fff #fff !important; } - html.theme--documenter-dark .button.is-primary.is-outlined[disabled], html.theme--documenter-dark .docstring > section > a.button.is-outlined.docs-sourcelink[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-outlined, - fieldset[disabled] html.theme--documenter-dark .docstring > section > a.button.is-outlined.docs-sourcelink { - background-color: transparent; - border-color: #375a7f; - box-shadow: none; - color: #375a7f; } - html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink { - background-color: transparent; - border-color: #fff; - color: #fff; } - html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:hover, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink:hover, html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink, html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:focus, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink:focus, html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-focused, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.is-focused.docs-sourcelink { - background-color: #fff; - color: #375a7f; } - html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after, html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after, html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after, html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after { - border-color: transparent transparent #375a7f #375a7f !important; } - html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined[disabled], html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined, - fieldset[disabled] html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink { - background-color: transparent; - border-color: #fff; - box-shadow: none; - color: #fff; } - html.theme--documenter-dark .button.is-link { - background-color: #1abc9c; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .button.is-link:hover, html.theme--documenter-dark .button.is-link.is-hovered { - background-color: #18b193; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .button.is-link:focus, html.theme--documenter-dark .button.is-link.is-focused { - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .button.is-link:focus:not(:active), html.theme--documenter-dark .button.is-link.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } - html.theme--documenter-dark .button.is-link:active, html.theme--documenter-dark .button.is-link.is-active { - background-color: #17a689; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .button.is-link[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-link { - background-color: #1abc9c; - border-color: transparent; - box-shadow: none; } - html.theme--documenter-dark .button.is-link.is-inverted { - background-color: #fff; - color: #1abc9c; } - html.theme--documenter-dark .button.is-link.is-inverted:hover, html.theme--documenter-dark .button.is-link.is-inverted.is-hovered { - background-color: #f2f2f2; } - html.theme--documenter-dark .button.is-link.is-inverted[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted { - background-color: #fff; - border-color: transparent; - box-shadow: none; - color: #1abc9c; } - html.theme--documenter-dark .button.is-link.is-loading::after { - border-color: transparent transparent #fff #fff !important; } - html.theme--documenter-dark .button.is-link.is-outlined { - background-color: transparent; - border-color: #1abc9c; - color: #1abc9c; } - html.theme--documenter-dark .button.is-link.is-outlined:hover, html.theme--documenter-dark .button.is-link.is-outlined.is-hovered, html.theme--documenter-dark .button.is-link.is-outlined:focus, html.theme--documenter-dark .button.is-link.is-outlined.is-focused { - background-color: #1abc9c; - border-color: #1abc9c; - color: #fff; } - html.theme--documenter-dark .button.is-link.is-outlined.is-loading::after { - border-color: transparent transparent #1abc9c #1abc9c !important; } - html.theme--documenter-dark .button.is-link.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-link.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #fff #fff !important; } - html.theme--documenter-dark .button.is-link.is-outlined[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-link.is-outlined { - background-color: transparent; - border-color: #1abc9c; - box-shadow: none; - color: #1abc9c; } - html.theme--documenter-dark .button.is-link.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - color: #fff; } - html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-focused { - background-color: #fff; - color: #1abc9c; } - html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #1abc9c #1abc9c !important; } - html.theme--documenter-dark .button.is-link.is-inverted.is-outlined[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - box-shadow: none; - color: #fff; } - html.theme--documenter-dark .button.is-info { - background-color: #024c7d; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .button.is-info:hover, html.theme--documenter-dark .button.is-info.is-hovered { - background-color: #024470; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .button.is-info:focus, html.theme--documenter-dark .button.is-info.is-focused { - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .button.is-info:focus:not(:active), html.theme--documenter-dark .button.is-info.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(2, 76, 125, 0.25); } - html.theme--documenter-dark .button.is-info:active, html.theme--documenter-dark .button.is-info.is-active { - background-color: #023d64; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .button.is-info[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-info { - background-color: #024c7d; - border-color: transparent; - box-shadow: none; } - html.theme--documenter-dark .button.is-info.is-inverted { - background-color: #fff; - color: #024c7d; } - html.theme--documenter-dark .button.is-info.is-inverted:hover, html.theme--documenter-dark .button.is-info.is-inverted.is-hovered { - background-color: #f2f2f2; } - html.theme--documenter-dark .button.is-info.is-inverted[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted { - background-color: #fff; - border-color: transparent; - box-shadow: none; - color: #024c7d; } - html.theme--documenter-dark .button.is-info.is-loading::after { - border-color: transparent transparent #fff #fff !important; } - html.theme--documenter-dark .button.is-info.is-outlined { - background-color: transparent; - border-color: #024c7d; - color: #024c7d; } - html.theme--documenter-dark .button.is-info.is-outlined:hover, html.theme--documenter-dark .button.is-info.is-outlined.is-hovered, html.theme--documenter-dark .button.is-info.is-outlined:focus, html.theme--documenter-dark .button.is-info.is-outlined.is-focused { - background-color: #024c7d; - border-color: #024c7d; - color: #fff; } - html.theme--documenter-dark .button.is-info.is-outlined.is-loading::after { - border-color: transparent transparent #024c7d #024c7d !important; } - html.theme--documenter-dark .button.is-info.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-info.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #fff #fff !important; } - html.theme--documenter-dark .button.is-info.is-outlined[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-info.is-outlined { - background-color: transparent; - border-color: #024c7d; - box-shadow: none; - color: #024c7d; } - html.theme--documenter-dark .button.is-info.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - color: #fff; } - html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-focused { - background-color: #fff; - color: #024c7d; } - html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #024c7d #024c7d !important; } - html.theme--documenter-dark .button.is-info.is-inverted.is-outlined[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - box-shadow: none; - color: #fff; } - html.theme--documenter-dark .button.is-success { - background-color: #008438; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .button.is-success:hover, html.theme--documenter-dark .button.is-success.is-hovered { - background-color: #007733; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .button.is-success:focus, html.theme--documenter-dark .button.is-success.is-focused { - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .button.is-success:focus:not(:active), html.theme--documenter-dark .button.is-success.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(0, 132, 56, 0.25); } - html.theme--documenter-dark .button.is-success:active, html.theme--documenter-dark .button.is-success.is-active { - background-color: #006b2d; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .button.is-success[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-success { - background-color: #008438; - border-color: transparent; - box-shadow: none; } - html.theme--documenter-dark .button.is-success.is-inverted { - background-color: #fff; - color: #008438; } - html.theme--documenter-dark .button.is-success.is-inverted:hover, html.theme--documenter-dark .button.is-success.is-inverted.is-hovered { - background-color: #f2f2f2; } - html.theme--documenter-dark .button.is-success.is-inverted[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted { - background-color: #fff; - border-color: transparent; - box-shadow: none; - color: #008438; } - html.theme--documenter-dark .button.is-success.is-loading::after { - border-color: transparent transparent #fff #fff !important; } - html.theme--documenter-dark .button.is-success.is-outlined { - background-color: transparent; - border-color: #008438; - color: #008438; } - html.theme--documenter-dark .button.is-success.is-outlined:hover, html.theme--documenter-dark .button.is-success.is-outlined.is-hovered, html.theme--documenter-dark .button.is-success.is-outlined:focus, html.theme--documenter-dark .button.is-success.is-outlined.is-focused { - background-color: #008438; - border-color: #008438; - color: #fff; } - html.theme--documenter-dark .button.is-success.is-outlined.is-loading::after { - border-color: transparent transparent #008438 #008438 !important; } - html.theme--documenter-dark .button.is-success.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-success.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #fff #fff !important; } - html.theme--documenter-dark .button.is-success.is-outlined[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-success.is-outlined { - background-color: transparent; - border-color: #008438; - box-shadow: none; - color: #008438; } - html.theme--documenter-dark .button.is-success.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - color: #fff; } - html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-focused { - background-color: #fff; - color: #008438; } - html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #008438 #008438 !important; } - html.theme--documenter-dark .button.is-success.is-inverted.is-outlined[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - box-shadow: none; - color: #fff; } - html.theme--documenter-dark .button.is-warning { - background-color: #ad8100; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .button.is-warning:hover, html.theme--documenter-dark .button.is-warning.is-hovered { - background-color: #a07700; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .button.is-warning:focus, html.theme--documenter-dark .button.is-warning.is-focused { - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .button.is-warning:focus:not(:active), html.theme--documenter-dark .button.is-warning.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(173, 129, 0, 0.25); } - html.theme--documenter-dark .button.is-warning:active, html.theme--documenter-dark .button.is-warning.is-active { - background-color: #946e00; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .button.is-warning[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-warning { - background-color: #ad8100; - border-color: transparent; - box-shadow: none; } - html.theme--documenter-dark .button.is-warning.is-inverted { - background-color: #fff; - color: #ad8100; } - html.theme--documenter-dark .button.is-warning.is-inverted:hover, html.theme--documenter-dark .button.is-warning.is-inverted.is-hovered { - background-color: #f2f2f2; } - html.theme--documenter-dark .button.is-warning.is-inverted[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted { - background-color: #fff; - border-color: transparent; - box-shadow: none; - color: #ad8100; } - html.theme--documenter-dark .button.is-warning.is-loading::after { - border-color: transparent transparent #fff #fff !important; } - html.theme--documenter-dark .button.is-warning.is-outlined { - background-color: transparent; - border-color: #ad8100; - color: #ad8100; } - html.theme--documenter-dark .button.is-warning.is-outlined:hover, html.theme--documenter-dark .button.is-warning.is-outlined.is-hovered, html.theme--documenter-dark .button.is-warning.is-outlined:focus, html.theme--documenter-dark .button.is-warning.is-outlined.is-focused { - background-color: #ad8100; - border-color: #ad8100; - color: #fff; } - html.theme--documenter-dark .button.is-warning.is-outlined.is-loading::after { - border-color: transparent transparent #ad8100 #ad8100 !important; } - html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #fff #fff !important; } - html.theme--documenter-dark .button.is-warning.is-outlined[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-outlined { - background-color: transparent; - border-color: #ad8100; - box-shadow: none; - color: #ad8100; } - html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - color: #fff; } - html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-focused { - background-color: #fff; - color: #ad8100; } - html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #ad8100 #ad8100 !important; } - html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - box-shadow: none; - color: #fff; } - html.theme--documenter-dark .button.is-danger { - background-color: #9e1b0d; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .button.is-danger:hover, html.theme--documenter-dark .button.is-danger.is-hovered { - background-color: #92190c; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .button.is-danger:focus, html.theme--documenter-dark .button.is-danger.is-focused { - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .button.is-danger:focus:not(:active), html.theme--documenter-dark .button.is-danger.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(158, 27, 13, 0.25); } - html.theme--documenter-dark .button.is-danger:active, html.theme--documenter-dark .button.is-danger.is-active { - background-color: #86170b; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .button.is-danger[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-danger { - background-color: #9e1b0d; - border-color: transparent; - box-shadow: none; } - html.theme--documenter-dark .button.is-danger.is-inverted { - background-color: #fff; - color: #9e1b0d; } - html.theme--documenter-dark .button.is-danger.is-inverted:hover, html.theme--documenter-dark .button.is-danger.is-inverted.is-hovered { - background-color: #f2f2f2; } - html.theme--documenter-dark .button.is-danger.is-inverted[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted { - background-color: #fff; - border-color: transparent; - box-shadow: none; - color: #9e1b0d; } - html.theme--documenter-dark .button.is-danger.is-loading::after { - border-color: transparent transparent #fff #fff !important; } - html.theme--documenter-dark .button.is-danger.is-outlined { - background-color: transparent; - border-color: #9e1b0d; - color: #9e1b0d; } - html.theme--documenter-dark .button.is-danger.is-outlined:hover, html.theme--documenter-dark .button.is-danger.is-outlined.is-hovered, html.theme--documenter-dark .button.is-danger.is-outlined:focus, html.theme--documenter-dark .button.is-danger.is-outlined.is-focused { - background-color: #9e1b0d; - border-color: #9e1b0d; - color: #fff; } - html.theme--documenter-dark .button.is-danger.is-outlined.is-loading::after { - border-color: transparent transparent #9e1b0d #9e1b0d !important; } - html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #fff #fff !important; } - html.theme--documenter-dark .button.is-danger.is-outlined[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-outlined { - background-color: transparent; - border-color: #9e1b0d; - box-shadow: none; - color: #9e1b0d; } - html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - color: #fff; } - html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-focused { - background-color: #fff; - color: #9e1b0d; } - html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #9e1b0d #9e1b0d !important; } - html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined[disabled], - fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - box-shadow: none; - color: #fff; } - html.theme--documenter-dark .button.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.button { - border-radius: 3px; - font-size: 0.85em; } - html.theme--documenter-dark .button.is-normal { - font-size: 15px; } - html.theme--documenter-dark .button.is-medium { - font-size: 1.25rem; } - html.theme--documenter-dark .button.is-large { - font-size: 1.5rem; } - html.theme--documenter-dark .button[disabled], - fieldset[disabled] html.theme--documenter-dark .button { - background-color: #8c9b9d; - border-color: #dbdee0; - box-shadow: none; - opacity: 0.5; } - html.theme--documenter-dark .button.is-fullwidth { - display: flex; - width: 100%; } - html.theme--documenter-dark .button.is-loading { - color: transparent !important; - pointer-events: none; } - html.theme--documenter-dark .button.is-loading::after { - position: absolute; - left: calc(50% - (1em / 2)); - top: calc(50% - (1em / 2)); - position: absolute !important; } - html.theme--documenter-dark .button.is-static { - background-color: #282f2f; - border-color: #5e6d6f; - color: #dbdee0; - box-shadow: none; - pointer-events: none; } - html.theme--documenter-dark .button.is-rounded, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.button { - border-radius: 290486px; - padding-left: 1em; - padding-right: 1em; } - html.theme--documenter-dark .buttons { - align-items: center; - display: flex; - flex-wrap: wrap; - justify-content: flex-start; } - html.theme--documenter-dark .buttons .button { - margin-bottom: 0.5rem; } - html.theme--documenter-dark .buttons .button:not(:last-child):not(.is-fullwidth) { - margin-right: 0.5rem; } - html.theme--documenter-dark .buttons:last-child { - margin-bottom: -0.5rem; } - html.theme--documenter-dark .buttons:not(:last-child) { - margin-bottom: 1rem; } - html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large) { - border-radius: 3px; - font-size: 0.85em; } - html.theme--documenter-dark .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large) { - font-size: 1.25rem; } - html.theme--documenter-dark .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium) { - font-size: 1.5rem; } - html.theme--documenter-dark .buttons.has-addons .button:not(:first-child) { - border-bottom-left-radius: 0; - border-top-left-radius: 0; } - html.theme--documenter-dark .buttons.has-addons .button:not(:last-child) { - border-bottom-right-radius: 0; - border-top-right-radius: 0; - margin-right: -1px; } - html.theme--documenter-dark .buttons.has-addons .button:last-child { - margin-right: 0; } - html.theme--documenter-dark .buttons.has-addons .button:hover, html.theme--documenter-dark .buttons.has-addons .button.is-hovered { - z-index: 2; } - html.theme--documenter-dark .buttons.has-addons .button:focus, html.theme--documenter-dark .buttons.has-addons .button.is-focused, html.theme--documenter-dark .buttons.has-addons .button:active, html.theme--documenter-dark .buttons.has-addons .button.is-active, html.theme--documenter-dark .buttons.has-addons .button.is-selected { - z-index: 3; } - html.theme--documenter-dark .buttons.has-addons .button:focus:hover, html.theme--documenter-dark .buttons.has-addons .button.is-focused:hover, html.theme--documenter-dark .buttons.has-addons .button:active:hover, html.theme--documenter-dark .buttons.has-addons .button.is-active:hover, html.theme--documenter-dark .buttons.has-addons .button.is-selected:hover { - z-index: 4; } - html.theme--documenter-dark .buttons.has-addons .button.is-expanded { - flex-grow: 1; - flex-shrink: 1; } - html.theme--documenter-dark .buttons.is-centered { - justify-content: center; } - html.theme--documenter-dark .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth) { - margin-left: 0.25rem; - margin-right: 0.25rem; } - html.theme--documenter-dark .buttons.is-right { - justify-content: flex-end; } - html.theme--documenter-dark .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth) { - margin-left: 0.25rem; - margin-right: 0.25rem; } - html.theme--documenter-dark .container { - flex-grow: 1; - margin: 0 auto; - position: relative; - width: auto; } - @media screen and (min-width: 1056px) { - html.theme--documenter-dark .container { - max-width: 992px; } - html.theme--documenter-dark .container.is-fluid { - margin-left: 32px; - margin-right: 32px; - max-width: none; } } - @media screen and (max-width: 1215px) { - html.theme--documenter-dark .container.is-widescreen { - max-width: 1152px; } } - @media screen and (max-width: 1407px) { - html.theme--documenter-dark .container.is-fullhd { - max-width: 1344px; } } - @media screen and (min-width: 1216px) { - html.theme--documenter-dark .container { - max-width: 1152px; } } - @media screen and (min-width: 1408px) { - html.theme--documenter-dark .container { - max-width: 1344px; } } - html.theme--documenter-dark .content li + li { - margin-top: 0.25em; } - html.theme--documenter-dark .content p:not(:last-child), - html.theme--documenter-dark .content dl:not(:last-child), - html.theme--documenter-dark .content ol:not(:last-child), - html.theme--documenter-dark .content ul:not(:last-child), - html.theme--documenter-dark .content blockquote:not(:last-child), - html.theme--documenter-dark .content pre:not(:last-child), - html.theme--documenter-dark .content table:not(:last-child) { - margin-bottom: 1em; } - html.theme--documenter-dark .content h1, - html.theme--documenter-dark .content h2, - html.theme--documenter-dark .content h3, - html.theme--documenter-dark .content h4, - html.theme--documenter-dark .content h5, - html.theme--documenter-dark .content h6 { - color: #f2f2f2; - font-weight: 600; - line-height: 1.125; } - html.theme--documenter-dark .content h1 { - font-size: 2em; - margin-bottom: 0.5em; } - html.theme--documenter-dark .content h1:not(:first-child) { - margin-top: 1em; } - html.theme--documenter-dark .content h2 { - font-size: 1.75em; - margin-bottom: 0.5714em; } - html.theme--documenter-dark .content h2:not(:first-child) { - margin-top: 1.1428em; } - html.theme--documenter-dark .content h3 { - font-size: 1.5em; - margin-bottom: 0.6666em; } - html.theme--documenter-dark .content h3:not(:first-child) { - margin-top: 1.3333em; } - html.theme--documenter-dark .content h4 { - font-size: 1.25em; - margin-bottom: 0.8em; } - html.theme--documenter-dark .content h5 { - font-size: 1.125em; - margin-bottom: 0.8888em; } - html.theme--documenter-dark .content h6 { - font-size: 1em; - margin-bottom: 1em; } - html.theme--documenter-dark .content blockquote { - background-color: #282f2f; - border-left: 5px solid #5e6d6f; - padding: 1.25em 1.5em; } - html.theme--documenter-dark .content ol { - list-style-position: outside; - margin-left: 2em; - margin-top: 1em; } - html.theme--documenter-dark .content ol:not([type]) { - list-style-type: decimal; } - html.theme--documenter-dark .content ol:not([type]).is-lower-alpha { - list-style-type: lower-alpha; } - html.theme--documenter-dark .content ol:not([type]).is-lower-roman { - list-style-type: lower-roman; } - html.theme--documenter-dark .content ol:not([type]).is-upper-alpha { - list-style-type: upper-alpha; } - html.theme--documenter-dark .content ol:not([type]).is-upper-roman { - list-style-type: upper-roman; } - html.theme--documenter-dark .content ul { - list-style: disc outside; - margin-left: 2em; - margin-top: 1em; } - html.theme--documenter-dark .content ul ul { - list-style-type: circle; - margin-top: 0.5em; } - html.theme--documenter-dark .content ul ul ul { - list-style-type: square; } - html.theme--documenter-dark .content dd { - margin-left: 2em; } - html.theme--documenter-dark .content figure { - margin-left: 2em; - margin-right: 2em; - text-align: center; } - html.theme--documenter-dark .content figure:not(:first-child) { - margin-top: 2em; } - html.theme--documenter-dark .content figure:not(:last-child) { - margin-bottom: 2em; } - html.theme--documenter-dark .content figure img { - display: inline-block; } - html.theme--documenter-dark .content figure figcaption { - font-style: italic; } - html.theme--documenter-dark .content pre { - -webkit-overflow-scrolling: touch; - overflow-x: auto; - padding: 0.7rem 0.5rem; - white-space: pre; - word-wrap: normal; } - html.theme--documenter-dark .content sup, - html.theme--documenter-dark .content sub { - font-size: 75%; } - html.theme--documenter-dark .content table { - width: 100%; } - html.theme--documenter-dark .content table td, - html.theme--documenter-dark .content table th { - border: 1px solid #5e6d6f; - border-width: 0 0 1px; - padding: 0.5em 0.75em; - vertical-align: top; } - html.theme--documenter-dark .content table th { - color: #f2f2f2; } - html.theme--documenter-dark .content table th:not([align]) { - text-align: left; } - html.theme--documenter-dark .content table thead td, - html.theme--documenter-dark .content table thead th { - border-width: 0 0 2px; - color: #f2f2f2; } - html.theme--documenter-dark .content table tfoot td, - html.theme--documenter-dark .content table tfoot th { - border-width: 2px 0 0; - color: #f2f2f2; } - html.theme--documenter-dark .content table tbody tr:last-child td, - html.theme--documenter-dark .content table tbody tr:last-child th { - border-bottom-width: 0; } - html.theme--documenter-dark .content .tabs li + li { - margin-top: 0; } - html.theme--documenter-dark .content.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.content { - font-size: 0.85em; } - html.theme--documenter-dark .content.is-medium { - font-size: 1.25rem; } - html.theme--documenter-dark .content.is-large { - font-size: 1.5rem; } - html.theme--documenter-dark .icon { - align-items: center; - display: inline-flex; - justify-content: center; - height: 1.5rem; - width: 1.5rem; } - html.theme--documenter-dark .icon.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.icon { - height: 1rem; - width: 1rem; } - html.theme--documenter-dark .icon.is-medium { - height: 2rem; - width: 2rem; } - html.theme--documenter-dark .icon.is-large { - height: 3rem; - width: 3rem; } - html.theme--documenter-dark .image, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img { - display: block; - position: relative; } - html.theme--documenter-dark .image img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img img { - display: block; - height: auto; - width: 100%; } - html.theme--documenter-dark .image img.is-rounded, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img img.is-rounded { - border-radius: 290486px; } - html.theme--documenter-dark .image.is-square img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square img, - html.theme--documenter-dark .image.is-square .has-ratio, - html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, html.theme--documenter-dark .image.is-1by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 img, - html.theme--documenter-dark .image.is-1by1 .has-ratio, - html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, html.theme--documenter-dark .image.is-5by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 img, - html.theme--documenter-dark .image.is-5by4 .has-ratio, - html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, html.theme--documenter-dark .image.is-4by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 img, - html.theme--documenter-dark .image.is-4by3 .has-ratio, - html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, html.theme--documenter-dark .image.is-3by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 img, - html.theme--documenter-dark .image.is-3by2 .has-ratio, - html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, html.theme--documenter-dark .image.is-5by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 img, - html.theme--documenter-dark .image.is-5by3 .has-ratio, - html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, html.theme--documenter-dark .image.is-16by9 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 img, - html.theme--documenter-dark .image.is-16by9 .has-ratio, - html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, html.theme--documenter-dark .image.is-2by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 img, - html.theme--documenter-dark .image.is-2by1 .has-ratio, - html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, html.theme--documenter-dark .image.is-3by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 img, - html.theme--documenter-dark .image.is-3by1 .has-ratio, - html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, html.theme--documenter-dark .image.is-4by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 img, - html.theme--documenter-dark .image.is-4by5 .has-ratio, - html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, html.theme--documenter-dark .image.is-3by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 img, - html.theme--documenter-dark .image.is-3by4 .has-ratio, - html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, html.theme--documenter-dark .image.is-2by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 img, - html.theme--documenter-dark .image.is-2by3 .has-ratio, - html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, html.theme--documenter-dark .image.is-3by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 img, - html.theme--documenter-dark .image.is-3by5 .has-ratio, - html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, html.theme--documenter-dark .image.is-9by16 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 img, - html.theme--documenter-dark .image.is-9by16 .has-ratio, - html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, html.theme--documenter-dark .image.is-1by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 img, - html.theme--documenter-dark .image.is-1by2 .has-ratio, - html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, html.theme--documenter-dark .image.is-1by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 img, - html.theme--documenter-dark .image.is-1by3 .has-ratio, - html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio { - height: 100%; - width: 100%; } - html.theme--documenter-dark .image.is-square, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square, html.theme--documenter-dark .image.is-1by1, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 { - padding-top: 100%; } - html.theme--documenter-dark .image.is-5by4, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 { - padding-top: 80%; } - html.theme--documenter-dark .image.is-4by3, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 { - padding-top: 75%; } - html.theme--documenter-dark .image.is-3by2, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 { - padding-top: 66.6666%; } - html.theme--documenter-dark .image.is-5by3, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 { - padding-top: 60%; } - html.theme--documenter-dark .image.is-16by9, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 { - padding-top: 56.25%; } - html.theme--documenter-dark .image.is-2by1, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 { - padding-top: 50%; } - html.theme--documenter-dark .image.is-3by1, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 { - padding-top: 33.3333%; } - html.theme--documenter-dark .image.is-4by5, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 { - padding-top: 125%; } - html.theme--documenter-dark .image.is-3by4, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 { - padding-top: 133.3333%; } - html.theme--documenter-dark .image.is-2by3, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 { - padding-top: 150%; } - html.theme--documenter-dark .image.is-3by5, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 { - padding-top: 166.6666%; } - html.theme--documenter-dark .image.is-9by16, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 { - padding-top: 177.7777%; } - html.theme--documenter-dark .image.is-1by2, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 { - padding-top: 200%; } - html.theme--documenter-dark .image.is-1by3, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 { - padding-top: 300%; } - html.theme--documenter-dark .image.is-16x16, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16x16 { - height: 16px; - width: 16px; } - html.theme--documenter-dark .image.is-24x24, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-24x24 { - height: 24px; - width: 24px; } - html.theme--documenter-dark .image.is-32x32, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-32x32 { - height: 32px; - width: 32px; } - html.theme--documenter-dark .image.is-48x48, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-48x48 { - height: 48px; - width: 48px; } - html.theme--documenter-dark .image.is-64x64, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-64x64 { - height: 64px; - width: 64px; } - html.theme--documenter-dark .image.is-96x96, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-96x96 { - height: 96px; - width: 96px; } - html.theme--documenter-dark .image.is-128x128, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-128x128 { - height: 128px; - width: 128px; } - html.theme--documenter-dark .notification { - background-color: #282f2f; - border-radius: 0.4em; - padding: 1.25rem 2.5rem 1.25rem 1.5rem; - position: relative; } - html.theme--documenter-dark .notification a:not(.button):not(.dropdown-item) { - color: currentColor; - text-decoration: underline; } - html.theme--documenter-dark .notification strong { - color: currentColor; } - html.theme--documenter-dark .notification code, - html.theme--documenter-dark .notification pre { - background: white; } - html.theme--documenter-dark .notification pre code { - background: transparent; } - html.theme--documenter-dark .notification > .delete { - position: absolute; - right: 0.5rem; - top: 0.5rem; } - html.theme--documenter-dark .notification .title, - html.theme--documenter-dark .notification .subtitle, - html.theme--documenter-dark .notification .content { - color: currentColor; } - html.theme--documenter-dark .notification.is-white { - background-color: white; - color: #0a0a0a; } - html.theme--documenter-dark .notification.is-black { - background-color: #0a0a0a; - color: white; } - html.theme--documenter-dark .notification.is-light { - background-color: #ecf0f1; - color: #282f2f; } - html.theme--documenter-dark .notification.is-dark, html.theme--documenter-dark .content kbd.notification { - background-color: #282f2f; - color: #ecf0f1; } - html.theme--documenter-dark .notification.is-primary, html.theme--documenter-dark .docstring > section > a.notification.docs-sourcelink { - background-color: #375a7f; - color: #fff; } - html.theme--documenter-dark .notification.is-link { - background-color: #1abc9c; - color: #fff; } - html.theme--documenter-dark .notification.is-info { - background-color: #024c7d; - color: #fff; } - html.theme--documenter-dark .notification.is-success { - background-color: #008438; - color: #fff; } - html.theme--documenter-dark .notification.is-warning { - background-color: #ad8100; - color: #fff; } - html.theme--documenter-dark .notification.is-danger { - background-color: #9e1b0d; - color: #fff; } - html.theme--documenter-dark .progress { - -moz-appearance: none; - -webkit-appearance: none; - border: none; - border-radius: 290486px; - display: block; - height: 15px; - overflow: hidden; - padding: 0; - width: 100%; } - html.theme--documenter-dark .progress::-webkit-progress-bar { - background-color: #5e6d6f; } - html.theme--documenter-dark .progress::-webkit-progress-value { - background-color: #dbdee0; } - html.theme--documenter-dark .progress::-moz-progress-bar { - background-color: #dbdee0; } - html.theme--documenter-dark .progress::-ms-fill { - background-color: #dbdee0; - border: none; } - html.theme--documenter-dark .progress.is-white::-webkit-progress-value { - background-color: white; } - html.theme--documenter-dark .progress.is-white::-moz-progress-bar { - background-color: white; } - html.theme--documenter-dark .progress.is-white::-ms-fill { - background-color: white; } - html.theme--documenter-dark .progress.is-white:indeterminate { - background-image: linear-gradient(to right, white 30%, #5e6d6f 30%); } - html.theme--documenter-dark .progress.is-black::-webkit-progress-value { - background-color: #0a0a0a; } - html.theme--documenter-dark .progress.is-black::-moz-progress-bar { - background-color: #0a0a0a; } - html.theme--documenter-dark .progress.is-black::-ms-fill { - background-color: #0a0a0a; } - html.theme--documenter-dark .progress.is-black:indeterminate { - background-image: linear-gradient(to right, #0a0a0a 30%, #5e6d6f 30%); } - html.theme--documenter-dark .progress.is-light::-webkit-progress-value { - background-color: #ecf0f1; } - html.theme--documenter-dark .progress.is-light::-moz-progress-bar { - background-color: #ecf0f1; } - html.theme--documenter-dark .progress.is-light::-ms-fill { - background-color: #ecf0f1; } - html.theme--documenter-dark .progress.is-light:indeterminate { - background-image: linear-gradient(to right, #ecf0f1 30%, #5e6d6f 30%); } - html.theme--documenter-dark .progress.is-dark::-webkit-progress-value, html.theme--documenter-dark .content kbd.progress::-webkit-progress-value { - background-color: #282f2f; } - html.theme--documenter-dark .progress.is-dark::-moz-progress-bar, html.theme--documenter-dark .content kbd.progress::-moz-progress-bar { - background-color: #282f2f; } - html.theme--documenter-dark .progress.is-dark::-ms-fill, html.theme--documenter-dark .content kbd.progress::-ms-fill { - background-color: #282f2f; } - html.theme--documenter-dark .progress.is-dark:indeterminate, html.theme--documenter-dark .content kbd.progress:indeterminate { - background-image: linear-gradient(to right, #282f2f 30%, #5e6d6f 30%); } - html.theme--documenter-dark .progress.is-primary::-webkit-progress-value, html.theme--documenter-dark .docstring > section > a.progress.docs-sourcelink::-webkit-progress-value { - background-color: #375a7f; } - html.theme--documenter-dark .progress.is-primary::-moz-progress-bar, html.theme--documenter-dark .docstring > section > a.progress.docs-sourcelink::-moz-progress-bar { - background-color: #375a7f; } - html.theme--documenter-dark .progress.is-primary::-ms-fill, html.theme--documenter-dark .docstring > section > a.progress.docs-sourcelink::-ms-fill { - background-color: #375a7f; } - html.theme--documenter-dark .progress.is-primary:indeterminate, html.theme--documenter-dark .docstring > section > a.progress.docs-sourcelink:indeterminate { - background-image: linear-gradient(to right, #375a7f 30%, #5e6d6f 30%); } - html.theme--documenter-dark .progress.is-link::-webkit-progress-value { - background-color: #1abc9c; } - html.theme--documenter-dark .progress.is-link::-moz-progress-bar { - background-color: #1abc9c; } - html.theme--documenter-dark .progress.is-link::-ms-fill { - background-color: #1abc9c; } - html.theme--documenter-dark .progress.is-link:indeterminate { - background-image: linear-gradient(to right, #1abc9c 30%, #5e6d6f 30%); } - html.theme--documenter-dark .progress.is-info::-webkit-progress-value { - background-color: #024c7d; } - html.theme--documenter-dark .progress.is-info::-moz-progress-bar { - background-color: #024c7d; } - html.theme--documenter-dark .progress.is-info::-ms-fill { - background-color: #024c7d; } - html.theme--documenter-dark .progress.is-info:indeterminate { - background-image: linear-gradient(to right, #024c7d 30%, #5e6d6f 30%); } - html.theme--documenter-dark .progress.is-success::-webkit-progress-value { - background-color: #008438; } - html.theme--documenter-dark .progress.is-success::-moz-progress-bar { - background-color: #008438; } - html.theme--documenter-dark .progress.is-success::-ms-fill { - background-color: #008438; } - html.theme--documenter-dark .progress.is-success:indeterminate { - background-image: linear-gradient(to right, #008438 30%, #5e6d6f 30%); } - html.theme--documenter-dark .progress.is-warning::-webkit-progress-value { - background-color: #ad8100; } - html.theme--documenter-dark .progress.is-warning::-moz-progress-bar { - background-color: #ad8100; } - html.theme--documenter-dark .progress.is-warning::-ms-fill { - background-color: #ad8100; } - html.theme--documenter-dark .progress.is-warning:indeterminate { - background-image: linear-gradient(to right, #ad8100 30%, #5e6d6f 30%); } - html.theme--documenter-dark .progress.is-danger::-webkit-progress-value { - background-color: #9e1b0d; } - html.theme--documenter-dark .progress.is-danger::-moz-progress-bar { - background-color: #9e1b0d; } - html.theme--documenter-dark .progress.is-danger::-ms-fill { - background-color: #9e1b0d; } - html.theme--documenter-dark .progress.is-danger:indeterminate { - background-image: linear-gradient(to right, #9e1b0d 30%, #5e6d6f 30%); } - html.theme--documenter-dark .progress:indeterminate { - animation-duration: 1.5s; - animation-iteration-count: infinite; - animation-name: moveIndeterminate; - animation-timing-function: linear; - background-color: #5e6d6f; - background-image: linear-gradient(to right, #fff 30%, #5e6d6f 30%); - background-position: top left; - background-repeat: no-repeat; - background-size: 150% 150%; } - html.theme--documenter-dark .progress:indeterminate::-webkit-progress-bar { - background-color: transparent; } - html.theme--documenter-dark .progress:indeterminate::-moz-progress-bar { - background-color: transparent; } - html.theme--documenter-dark .progress.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.progress { - height: 0.85em; } - html.theme--documenter-dark .progress.is-medium { - height: 1.25rem; } - html.theme--documenter-dark .progress.is-large { - height: 1.5rem; } - -@keyframes moveIndeterminate { - from { - background-position: 200% 0; } - to { - background-position: -200% 0; } } - html.theme--documenter-dark .table { - background-color: #343c3d; - color: #fff; } - html.theme--documenter-dark .table td, - html.theme--documenter-dark .table th { - border: 1px solid #5e6d6f; - border-width: 0 0 1px; - padding: 0.5em 0.75em; - vertical-align: top; } - html.theme--documenter-dark .table td.is-white, - html.theme--documenter-dark .table th.is-white { - background-color: white; - border-color: white; - color: #0a0a0a; } - html.theme--documenter-dark .table td.is-black, - html.theme--documenter-dark .table th.is-black { - background-color: #0a0a0a; - border-color: #0a0a0a; - color: white; } - html.theme--documenter-dark .table td.is-light, - html.theme--documenter-dark .table th.is-light { - background-color: #ecf0f1; - border-color: #ecf0f1; - color: #282f2f; } - html.theme--documenter-dark .table td.is-dark, - html.theme--documenter-dark .table th.is-dark { - background-color: #282f2f; - border-color: #282f2f; - color: #ecf0f1; } - html.theme--documenter-dark .table td.is-primary, - html.theme--documenter-dark .table th.is-primary { - background-color: #375a7f; - border-color: #375a7f; - color: #fff; } - html.theme--documenter-dark .table td.is-link, - html.theme--documenter-dark .table th.is-link { - background-color: #1abc9c; - border-color: #1abc9c; - color: #fff; } - html.theme--documenter-dark .table td.is-info, - html.theme--documenter-dark .table th.is-info { - background-color: #024c7d; - border-color: #024c7d; - color: #fff; } - html.theme--documenter-dark .table td.is-success, - html.theme--documenter-dark .table th.is-success { - background-color: #008438; - border-color: #008438; - color: #fff; } - html.theme--documenter-dark .table td.is-warning, - html.theme--documenter-dark .table th.is-warning { - background-color: #ad8100; - border-color: #ad8100; - color: #fff; } - html.theme--documenter-dark .table td.is-danger, - html.theme--documenter-dark .table th.is-danger { - background-color: #9e1b0d; - border-color: #9e1b0d; - color: #fff; } - html.theme--documenter-dark .table td.is-narrow, - html.theme--documenter-dark .table th.is-narrow { - white-space: nowrap; - width: 1%; } - html.theme--documenter-dark .table td.is-selected, - html.theme--documenter-dark .table th.is-selected { - background-color: #375a7f; - color: #fff; } - html.theme--documenter-dark .table td.is-selected a, - html.theme--documenter-dark .table td.is-selected strong, - html.theme--documenter-dark .table th.is-selected a, - html.theme--documenter-dark .table th.is-selected strong { - color: currentColor; } - html.theme--documenter-dark .table th { - color: #f2f2f2; } - html.theme--documenter-dark .table th:not([align]) { - text-align: left; } - html.theme--documenter-dark .table tr.is-selected { - background-color: #375a7f; - color: #fff; } - html.theme--documenter-dark .table tr.is-selected a, - html.theme--documenter-dark .table tr.is-selected strong { - color: currentColor; } - html.theme--documenter-dark .table tr.is-selected td, - html.theme--documenter-dark .table tr.is-selected th { - border-color: #fff; - color: currentColor; } - html.theme--documenter-dark .table thead { - background-color: transparent; } - html.theme--documenter-dark .table thead td, - html.theme--documenter-dark .table thead th { - border-width: 0 0 2px; - color: #f2f2f2; } - html.theme--documenter-dark .table tfoot { - background-color: transparent; } - html.theme--documenter-dark .table tfoot td, - html.theme--documenter-dark .table tfoot th { - border-width: 2px 0 0; - color: #f2f2f2; } - html.theme--documenter-dark .table tbody { - background-color: transparent; } - html.theme--documenter-dark .table tbody tr:last-child td, - html.theme--documenter-dark .table tbody tr:last-child th { - border-bottom-width: 0; } - html.theme--documenter-dark .table.is-bordered td, - html.theme--documenter-dark .table.is-bordered th { - border-width: 1px; } - html.theme--documenter-dark .table.is-bordered tr:last-child td, - html.theme--documenter-dark .table.is-bordered tr:last-child th { - border-bottom-width: 1px; } - html.theme--documenter-dark .table.is-fullwidth { - width: 100%; } - html.theme--documenter-dark .table.is-hoverable tbody tr:not(.is-selected):hover { - background-color: #282f2f; } - html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover { - background-color: #282f2f; } - html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even) { - background-color: #2d3435; } - html.theme--documenter-dark .table.is-narrow td, - html.theme--documenter-dark .table.is-narrow th { - padding: 0.25em 0.5em; } - html.theme--documenter-dark .table.is-striped tbody tr:not(.is-selected):nth-child(even) { - background-color: #282f2f; } - html.theme--documenter-dark .table-container { - -webkit-overflow-scrolling: touch; - overflow: auto; - overflow-y: hidden; - max-width: 100%; } - html.theme--documenter-dark .tags { - align-items: center; - display: flex; - flex-wrap: wrap; - justify-content: flex-start; } - html.theme--documenter-dark .tags .tag, html.theme--documenter-dark .tags .docstring > section > a.docs-sourcelink, html.theme--documenter-dark .tags .content kbd, html.theme--documenter-dark .content .tags kbd { - margin-bottom: 0.5rem; } - html.theme--documenter-dark .tags .tag:not(:last-child), html.theme--documenter-dark .tags .docstring > section > a.docs-sourcelink:not(:last-child), html.theme--documenter-dark .tags .content kbd:not(:last-child), html.theme--documenter-dark .content .tags kbd:not(:last-child) { - margin-right: 0.5rem; } - html.theme--documenter-dark .tags:last-child { - margin-bottom: -0.5rem; } - html.theme--documenter-dark .tags:not(:last-child) { - margin-bottom: 1rem; } - html.theme--documenter-dark .tags.are-medium .tag:not(.is-normal):not(.is-large), html.theme--documenter-dark .tags.are-medium .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-large), html.theme--documenter-dark .tags.are-medium .content kbd:not(.is-normal):not(.is-large), html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large) { - font-size: 15px; } - html.theme--documenter-dark .tags.are-large .tag:not(.is-normal):not(.is-medium), html.theme--documenter-dark .tags.are-large .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-medium), html.theme--documenter-dark .tags.are-large .content kbd:not(.is-normal):not(.is-medium), html.theme--documenter-dark .content .tags.are-large kbd:not(.is-normal):not(.is-medium) { - font-size: 1.25rem; } - html.theme--documenter-dark .tags.is-centered { - justify-content: center; } - html.theme--documenter-dark .tags.is-centered .tag, html.theme--documenter-dark .tags.is-centered .docstring > section > a.docs-sourcelink, html.theme--documenter-dark .tags.is-centered .content kbd, html.theme--documenter-dark .content .tags.is-centered kbd { - margin-right: 0.25rem; - margin-left: 0.25rem; } - html.theme--documenter-dark .tags.is-right { - justify-content: flex-end; } - html.theme--documenter-dark .tags.is-right .tag:not(:first-child), html.theme--documenter-dark .tags.is-right .docstring > section > a.docs-sourcelink:not(:first-child), html.theme--documenter-dark .tags.is-right .content kbd:not(:first-child), html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child) { - margin-left: 0.5rem; } - html.theme--documenter-dark .tags.is-right .tag:not(:last-child), html.theme--documenter-dark .tags.is-right .docstring > section > a.docs-sourcelink:not(:last-child), html.theme--documenter-dark .tags.is-right .content kbd:not(:last-child), html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child) { - margin-right: 0; } - html.theme--documenter-dark .tags.has-addons .tag, html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink, html.theme--documenter-dark .tags.has-addons .content kbd, html.theme--documenter-dark .content .tags.has-addons kbd { - margin-right: 0; } - html.theme--documenter-dark .tags.has-addons .tag:not(:first-child), html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink:not(:first-child), html.theme--documenter-dark .tags.has-addons .content kbd:not(:first-child), html.theme--documenter-dark .content .tags.has-addons kbd:not(:first-child) { - margin-left: 0; - border-bottom-left-radius: 0; - border-top-left-radius: 0; } - html.theme--documenter-dark .tags.has-addons .tag:not(:last-child), html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink:not(:last-child), html.theme--documenter-dark .tags.has-addons .content kbd:not(:last-child), html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child) { - border-bottom-right-radius: 0; - border-top-right-radius: 0; } - html.theme--documenter-dark .tag:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body), html.theme--documenter-dark .content kbd:not(body) { - align-items: center; - background-color: #282f2f; - border-radius: 0.4em; - color: #fff; - display: inline-flex; - font-size: 0.85em; - height: 2em; - justify-content: center; - line-height: 1.5; - padding-left: 0.75em; - padding-right: 0.75em; - white-space: nowrap; } - html.theme--documenter-dark .tag:not(body) .delete, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .delete, html.theme--documenter-dark .content kbd:not(body) .delete { - margin-left: 0.25rem; - margin-right: -0.375rem; } - html.theme--documenter-dark .tag:not(body).is-white, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-white, html.theme--documenter-dark .content kbd:not(body).is-white { - background-color: white; - color: #0a0a0a; } - html.theme--documenter-dark .tag:not(body).is-black, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-black, html.theme--documenter-dark .content kbd:not(body).is-black { - background-color: #0a0a0a; - color: white; } - html.theme--documenter-dark .tag:not(body).is-light, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-light, html.theme--documenter-dark .content kbd:not(body).is-light { - background-color: #ecf0f1; - color: #282f2f; } - html.theme--documenter-dark .tag:not(body).is-dark, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-dark, html.theme--documenter-dark .content kbd:not(body) { - background-color: #282f2f; - color: #ecf0f1; } - html.theme--documenter-dark .tag:not(body).is-primary, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body), html.theme--documenter-dark .content kbd:not(body).is-primary { - background-color: #375a7f; - color: #fff; } - html.theme--documenter-dark .tag:not(body).is-link, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-link, html.theme--documenter-dark .content kbd:not(body).is-link { - background-color: #1abc9c; - color: #fff; } - html.theme--documenter-dark .tag:not(body).is-info, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-info, html.theme--documenter-dark .content kbd:not(body).is-info { - background-color: #024c7d; - color: #fff; } - html.theme--documenter-dark .tag:not(body).is-success, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-success, html.theme--documenter-dark .content kbd:not(body).is-success { - background-color: #008438; - color: #fff; } - html.theme--documenter-dark .tag:not(body).is-warning, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-warning, html.theme--documenter-dark .content kbd:not(body).is-warning { - background-color: #ad8100; - color: #fff; } - html.theme--documenter-dark .tag:not(body).is-danger, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-danger, html.theme--documenter-dark .content kbd:not(body).is-danger { - background-color: #9e1b0d; - color: #fff; } - html.theme--documenter-dark .tag:not(body).is-normal, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-normal, html.theme--documenter-dark .content kbd:not(body).is-normal { - font-size: 0.85em; } - html.theme--documenter-dark .tag:not(body).is-medium, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-medium, html.theme--documenter-dark .content kbd:not(body).is-medium { - font-size: 15px; } - html.theme--documenter-dark .tag:not(body).is-large, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-large, html.theme--documenter-dark .content kbd:not(body).is-large { - font-size: 1.25rem; } - html.theme--documenter-dark .tag:not(body) .icon:first-child:not(:last-child), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:not(:last-child), html.theme--documenter-dark .content kbd:not(body) .icon:first-child:not(:last-child) { - margin-left: -0.375em; - margin-right: 0.1875em; } - html.theme--documenter-dark .tag:not(body) .icon:last-child:not(:first-child), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:last-child:not(:first-child), html.theme--documenter-dark .content kbd:not(body) .icon:last-child:not(:first-child) { - margin-left: 0.1875em; - margin-right: -0.375em; } - html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:last-child, html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child { - margin-left: -0.375em; - margin-right: -0.375em; } - html.theme--documenter-dark .tag:not(body).is-delete, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete, html.theme--documenter-dark .content kbd:not(body).is-delete { - margin-left: 1px; - padding: 0; - position: relative; - width: 2em; } - html.theme--documenter-dark .tag:not(body).is-delete::before, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete::before, html.theme--documenter-dark .content kbd:not(body).is-delete::before, html.theme--documenter-dark .tag:not(body).is-delete::after, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete::after, html.theme--documenter-dark .content kbd:not(body).is-delete::after { - background-color: currentColor; - content: ""; - display: block; - left: 50%; - position: absolute; - top: 50%; - transform: translateX(-50%) translateY(-50%) rotate(45deg); - transform-origin: center center; } - html.theme--documenter-dark .tag:not(body).is-delete::before, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete::before, html.theme--documenter-dark .content kbd:not(body).is-delete::before { - height: 1px; - width: 50%; } - html.theme--documenter-dark .tag:not(body).is-delete::after, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete::after, html.theme--documenter-dark .content kbd:not(body).is-delete::after { - height: 50%; - width: 1px; } - html.theme--documenter-dark .tag:not(body).is-delete:hover, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete:hover, html.theme--documenter-dark .content kbd:not(body).is-delete:hover, html.theme--documenter-dark .tag:not(body).is-delete:focus, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete:focus, html.theme--documenter-dark .content kbd:not(body).is-delete:focus { - background-color: #1d2122; } - html.theme--documenter-dark .tag:not(body).is-delete:active, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete:active, html.theme--documenter-dark .content kbd:not(body).is-delete:active { - background-color: #111414; } - html.theme--documenter-dark .tag:not(body).is-rounded, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-rounded, html.theme--documenter-dark .content kbd:not(body).is-rounded, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.tag:not(body) { - border-radius: 290486px; } - html.theme--documenter-dark a.tag:hover, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:hover { - text-decoration: underline; } - html.theme--documenter-dark .title, - html.theme--documenter-dark .subtitle { - word-break: break-word; } - html.theme--documenter-dark .title em, - html.theme--documenter-dark .title span, - html.theme--documenter-dark .subtitle em, - html.theme--documenter-dark .subtitle span { - font-weight: inherit; } - html.theme--documenter-dark .title sub, - html.theme--documenter-dark .subtitle sub { - font-size: 0.75em; } - html.theme--documenter-dark .title sup, - html.theme--documenter-dark .subtitle sup { - font-size: 0.75em; } - html.theme--documenter-dark .title .tag, html.theme--documenter-dark .title .docstring > section > a.docs-sourcelink, html.theme--documenter-dark .title .content kbd, html.theme--documenter-dark .content .title kbd, - html.theme--documenter-dark .subtitle .tag, - html.theme--documenter-dark .subtitle .docstring > section > a.docs-sourcelink, - html.theme--documenter-dark .subtitle .content kbd, - html.theme--documenter-dark .content .subtitle kbd { - vertical-align: middle; } - html.theme--documenter-dark .title { - color: #fff; - font-size: 2rem; - font-weight: 500; - line-height: 1.125; } - html.theme--documenter-dark .title strong { - color: inherit; - font-weight: inherit; } - html.theme--documenter-dark .title + .highlight { - margin-top: -0.75rem; } - html.theme--documenter-dark .title:not(.is-spaced) + .subtitle { - margin-top: -1.25rem; } - html.theme--documenter-dark .title.is-1 { - font-size: 3rem; } - html.theme--documenter-dark .title.is-2 { - font-size: 2.5rem; } - html.theme--documenter-dark .title.is-3 { - font-size: 2rem; } - html.theme--documenter-dark .title.is-4 { - font-size: 1.5rem; } - html.theme--documenter-dark .title.is-5 { - font-size: 1.25rem; } - html.theme--documenter-dark .title.is-6 { - font-size: 15px; } - html.theme--documenter-dark .title.is-7 { - font-size: 0.85em; } - html.theme--documenter-dark .subtitle { - color: #8c9b9d; - font-size: 1.25rem; - font-weight: 400; - line-height: 1.25; } - html.theme--documenter-dark .subtitle strong { - color: #8c9b9d; - font-weight: 600; } - html.theme--documenter-dark .subtitle:not(.is-spaced) + .title { - margin-top: -1.25rem; } - html.theme--documenter-dark .subtitle.is-1 { - font-size: 3rem; } - html.theme--documenter-dark .subtitle.is-2 { - font-size: 2.5rem; } - html.theme--documenter-dark .subtitle.is-3 { - font-size: 2rem; } - html.theme--documenter-dark .subtitle.is-4 { - font-size: 1.5rem; } - html.theme--documenter-dark .subtitle.is-5 { - font-size: 1.25rem; } - html.theme--documenter-dark .subtitle.is-6 { - font-size: 15px; } - html.theme--documenter-dark .subtitle.is-7 { - font-size: 0.85em; } - html.theme--documenter-dark .heading { - display: block; - font-size: 11px; - letter-spacing: 1px; - margin-bottom: 5px; - text-transform: uppercase; } - html.theme--documenter-dark .highlight { - font-weight: 400; - max-width: 100%; - overflow: hidden; - padding: 0; } - html.theme--documenter-dark .highlight pre { - overflow: auto; - max-width: 100%; } - html.theme--documenter-dark .number { - align-items: center; - background-color: #282f2f; - border-radius: 290486px; - display: inline-flex; - font-size: 1.25rem; - height: 2em; - justify-content: center; - margin-right: 1.5rem; - min-width: 2.5em; - padding: 0.25rem 0.5rem; - text-align: center; - vertical-align: top; } - html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark .textarea, html.theme--documenter-dark .select select { - background-color: #1f2424; - border-color: #5e6d6f; - border-radius: 0.4em; - color: #dbdee0; } - html.theme--documenter-dark .input::-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-moz-placeholder, html.theme--documenter-dark .textarea::-moz-placeholder, html.theme--documenter-dark .select select::-moz-placeholder { - color: rgba(219, 222, 224, 0.3); } - html.theme--documenter-dark .input::-webkit-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder, html.theme--documenter-dark .textarea::-webkit-input-placeholder, html.theme--documenter-dark .select select::-webkit-input-placeholder { - color: rgba(219, 222, 224, 0.3); } - html.theme--documenter-dark .input:-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-moz-placeholder, html.theme--documenter-dark .textarea:-moz-placeholder, html.theme--documenter-dark .select select:-moz-placeholder { - color: rgba(219, 222, 224, 0.3); } - html.theme--documenter-dark .input:-ms-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder, html.theme--documenter-dark .textarea:-ms-input-placeholder, html.theme--documenter-dark .select select:-ms-input-placeholder { - color: rgba(219, 222, 224, 0.3); } - html.theme--documenter-dark .input:hover, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:hover, html.theme--documenter-dark .textarea:hover, html.theme--documenter-dark .select select:hover, html.theme--documenter-dark .is-hovered.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-hovered, html.theme--documenter-dark .is-hovered.textarea, html.theme--documenter-dark .select select.is-hovered { - border-color: #8c9b9d; } - html.theme--documenter-dark .input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:focus, html.theme--documenter-dark .textarea:focus, html.theme--documenter-dark .select select:focus, html.theme--documenter-dark .is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-focused.textarea, html.theme--documenter-dark .select select.is-focused, html.theme--documenter-dark .input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:active, html.theme--documenter-dark .textarea:active, html.theme--documenter-dark .select select:active, html.theme--documenter-dark .is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active, html.theme--documenter-dark .is-active.textarea, html.theme--documenter-dark .select select.is-active { - border-color: #1abc9c; - box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } - html.theme--documenter-dark .input[disabled], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled], html.theme--documenter-dark .textarea[disabled], html.theme--documenter-dark .select select[disabled], - fieldset[disabled] html.theme--documenter-dark .input, - fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, - fieldset[disabled] html.theme--documenter-dark .textarea, - fieldset[disabled] html.theme--documenter-dark .select select { - background-color: #8c9b9d; - border-color: #282f2f; - box-shadow: none; - color: white; } - html.theme--documenter-dark .input[disabled]::-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]::-moz-placeholder, html.theme--documenter-dark .textarea[disabled]::-moz-placeholder, html.theme--documenter-dark .select select[disabled]::-moz-placeholder, - fieldset[disabled] html.theme--documenter-dark .input::-moz-placeholder, - fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-moz-placeholder, - fieldset[disabled] html.theme--documenter-dark .textarea::-moz-placeholder, - fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder { - color: rgba(255, 255, 255, 0.3); } - html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]::-webkit-input-placeholder, html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder, html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder, - fieldset[disabled] html.theme--documenter-dark .input::-webkit-input-placeholder, - fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder, - fieldset[disabled] html.theme--documenter-dark .textarea::-webkit-input-placeholder, - fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder { - color: rgba(255, 255, 255, 0.3); } - html.theme--documenter-dark .input[disabled]:-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]:-moz-placeholder, html.theme--documenter-dark .textarea[disabled]:-moz-placeholder, html.theme--documenter-dark .select select[disabled]:-moz-placeholder, - fieldset[disabled] html.theme--documenter-dark .input:-moz-placeholder, - fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-moz-placeholder, - fieldset[disabled] html.theme--documenter-dark .textarea:-moz-placeholder, - fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder { - color: rgba(255, 255, 255, 0.3); } - html.theme--documenter-dark .input[disabled]:-ms-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]:-ms-input-placeholder, html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder, html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder, - fieldset[disabled] html.theme--documenter-dark .input:-ms-input-placeholder, - fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder, - fieldset[disabled] html.theme--documenter-dark .textarea:-ms-input-placeholder, - fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder { - color: rgba(255, 255, 255, 0.3); } - html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark .textarea { - box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); - max-width: 100%; - width: 100%; } - html.theme--documenter-dark .input[readonly], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[readonly], html.theme--documenter-dark .textarea[readonly] { - box-shadow: none; } - html.theme--documenter-dark .is-white.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white, html.theme--documenter-dark .is-white.textarea { - border-color: white; } - html.theme--documenter-dark .is-white.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white:focus, html.theme--documenter-dark .is-white.textarea:focus, html.theme--documenter-dark .is-white.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white.is-focused, html.theme--documenter-dark .is-white.is-focused.textarea, html.theme--documenter-dark .is-white.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white:active, html.theme--documenter-dark .is-white.textarea:active, html.theme--documenter-dark .is-white.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white.is-active, html.theme--documenter-dark .is-white.is-active.textarea { - box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } - html.theme--documenter-dark .is-black.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black, html.theme--documenter-dark .is-black.textarea { - border-color: #0a0a0a; } - html.theme--documenter-dark .is-black.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black:focus, html.theme--documenter-dark .is-black.textarea:focus, html.theme--documenter-dark .is-black.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black.is-focused, html.theme--documenter-dark .is-black.is-focused.textarea, html.theme--documenter-dark .is-black.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black:active, html.theme--documenter-dark .is-black.textarea:active, html.theme--documenter-dark .is-black.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black.is-active, html.theme--documenter-dark .is-black.is-active.textarea { - box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } - html.theme--documenter-dark .is-light.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light, html.theme--documenter-dark .is-light.textarea { - border-color: #ecf0f1; } - html.theme--documenter-dark .is-light.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light:focus, html.theme--documenter-dark .is-light.textarea:focus, html.theme--documenter-dark .is-light.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light.is-focused, html.theme--documenter-dark .is-light.is-focused.textarea, html.theme--documenter-dark .is-light.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light:active, html.theme--documenter-dark .is-light.textarea:active, html.theme--documenter-dark .is-light.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light.is-active, html.theme--documenter-dark .is-light.is-active.textarea { - box-shadow: 0 0 0 0.125em rgba(236, 240, 241, 0.25); } - html.theme--documenter-dark .is-dark.input, html.theme--documenter-dark .content kbd.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark, html.theme--documenter-dark .is-dark.textarea, html.theme--documenter-dark .content kbd.textarea { - border-color: #282f2f; } - html.theme--documenter-dark .is-dark.input:focus, html.theme--documenter-dark .content kbd.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark:focus, html.theme--documenter-dark .is-dark.textarea:focus, html.theme--documenter-dark .content kbd.textarea:focus, html.theme--documenter-dark .is-dark.is-focused.input, html.theme--documenter-dark .content kbd.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark.is-focused, html.theme--documenter-dark .is-dark.is-focused.textarea, html.theme--documenter-dark .content kbd.is-focused.textarea, html.theme--documenter-dark .is-dark.input:active, html.theme--documenter-dark .content kbd.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark:active, html.theme--documenter-dark .is-dark.textarea:active, html.theme--documenter-dark .content kbd.textarea:active, html.theme--documenter-dark .is-dark.is-active.input, html.theme--documenter-dark .content kbd.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark.is-active, html.theme--documenter-dark .is-dark.is-active.textarea, html.theme--documenter-dark .content kbd.is-active.textarea { - box-shadow: 0 0 0 0.125em rgba(40, 47, 47, 0.25); } - html.theme--documenter-dark .is-primary.input, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary, html.theme--documenter-dark .is-primary.textarea, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink { - border-color: #375a7f; } - html.theme--documenter-dark .is-primary.input:focus, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary:focus, html.theme--documenter-dark .is-primary.textarea:focus, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink:focus, html.theme--documenter-dark .is-primary.is-focused.input, html.theme--documenter-dark .docstring > section > a.is-focused.input.docs-sourcelink, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary.is-focused, html.theme--documenter-dark .is-primary.is-focused.textarea, html.theme--documenter-dark .docstring > section > a.is-focused.textarea.docs-sourcelink, html.theme--documenter-dark .is-primary.input:active, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary:active, html.theme--documenter-dark .is-primary.textarea:active, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink:active, html.theme--documenter-dark .is-primary.is-active.input, html.theme--documenter-dark .docstring > section > a.is-active.input.docs-sourcelink, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary.is-active, html.theme--documenter-dark .is-primary.is-active.textarea, html.theme--documenter-dark .docstring > section > a.is-active.textarea.docs-sourcelink { - box-shadow: 0 0 0 0.125em rgba(55, 90, 127, 0.25); } - html.theme--documenter-dark .is-link.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link, html.theme--documenter-dark .is-link.textarea { - border-color: #1abc9c; } - html.theme--documenter-dark .is-link.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link:focus, html.theme--documenter-dark .is-link.textarea:focus, html.theme--documenter-dark .is-link.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link.is-focused, html.theme--documenter-dark .is-link.is-focused.textarea, html.theme--documenter-dark .is-link.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link:active, html.theme--documenter-dark .is-link.textarea:active, html.theme--documenter-dark .is-link.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link.is-active, html.theme--documenter-dark .is-link.is-active.textarea { - box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } - html.theme--documenter-dark .is-info.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info, html.theme--documenter-dark .is-info.textarea { - border-color: #024c7d; } - html.theme--documenter-dark .is-info.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info:focus, html.theme--documenter-dark .is-info.textarea:focus, html.theme--documenter-dark .is-info.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info.is-focused, html.theme--documenter-dark .is-info.is-focused.textarea, html.theme--documenter-dark .is-info.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info:active, html.theme--documenter-dark .is-info.textarea:active, html.theme--documenter-dark .is-info.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info.is-active, html.theme--documenter-dark .is-info.is-active.textarea { - box-shadow: 0 0 0 0.125em rgba(2, 76, 125, 0.25); } - html.theme--documenter-dark .is-success.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success, html.theme--documenter-dark .is-success.textarea { - border-color: #008438; } - html.theme--documenter-dark .is-success.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success:focus, html.theme--documenter-dark .is-success.textarea:focus, html.theme--documenter-dark .is-success.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success.is-focused, html.theme--documenter-dark .is-success.is-focused.textarea, html.theme--documenter-dark .is-success.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success:active, html.theme--documenter-dark .is-success.textarea:active, html.theme--documenter-dark .is-success.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success.is-active, html.theme--documenter-dark .is-success.is-active.textarea { - box-shadow: 0 0 0 0.125em rgba(0, 132, 56, 0.25); } - html.theme--documenter-dark .is-warning.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning, html.theme--documenter-dark .is-warning.textarea { - border-color: #ad8100; } - html.theme--documenter-dark .is-warning.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning:focus, html.theme--documenter-dark .is-warning.textarea:focus, html.theme--documenter-dark .is-warning.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning.is-focused, html.theme--documenter-dark .is-warning.is-focused.textarea, html.theme--documenter-dark .is-warning.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning:active, html.theme--documenter-dark .is-warning.textarea:active, html.theme--documenter-dark .is-warning.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning.is-active, html.theme--documenter-dark .is-warning.is-active.textarea { - box-shadow: 0 0 0 0.125em rgba(173, 129, 0, 0.25); } - html.theme--documenter-dark .is-danger.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger, html.theme--documenter-dark .is-danger.textarea { - border-color: #9e1b0d; } - html.theme--documenter-dark .is-danger.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger:focus, html.theme--documenter-dark .is-danger.textarea:focus, html.theme--documenter-dark .is-danger.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger.is-focused, html.theme--documenter-dark .is-danger.is-focused.textarea, html.theme--documenter-dark .is-danger.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger:active, html.theme--documenter-dark .is-danger.textarea:active, html.theme--documenter-dark .is-danger.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger.is-active, html.theme--documenter-dark .is-danger.is-active.textarea { - box-shadow: 0 0 0 0.125em rgba(158, 27, 13, 0.25); } - html.theme--documenter-dark .is-small.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark .is-small.textarea { - border-radius: 3px; - font-size: 0.85em; } - html.theme--documenter-dark .is-medium.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-medium, html.theme--documenter-dark .is-medium.textarea { - font-size: 1.25rem; } - html.theme--documenter-dark .is-large.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-large, html.theme--documenter-dark .is-large.textarea { - font-size: 1.5rem; } - html.theme--documenter-dark .is-fullwidth.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-fullwidth, html.theme--documenter-dark .is-fullwidth.textarea { - display: block; - width: 100%; } - html.theme--documenter-dark .is-inline.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-inline, html.theme--documenter-dark .is-inline.textarea { - display: inline; - width: auto; } - html.theme--documenter-dark .input.is-rounded, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { - border-radius: 290486px; - padding-left: 1em; - padding-right: 1em; } - html.theme--documenter-dark .input.is-static, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-static { - background-color: transparent; - border-color: transparent; - box-shadow: none; - padding-left: 0; - padding-right: 0; } - html.theme--documenter-dark .textarea { - display: block; - max-width: 100%; - min-width: 100%; - padding: 0.625em; - resize: vertical; } - html.theme--documenter-dark .textarea:not([rows]) { - max-height: 600px; - min-height: 120px; } - html.theme--documenter-dark .textarea[rows] { - height: initial; } - html.theme--documenter-dark .textarea.has-fixed-size { - resize: none; } - html.theme--documenter-dark .checkbox, html.theme--documenter-dark .radio { - cursor: pointer; - display: inline-block; - line-height: 1.25; - position: relative; } - html.theme--documenter-dark .checkbox input, html.theme--documenter-dark .radio input { - cursor: pointer; } - html.theme--documenter-dark .checkbox:hover, html.theme--documenter-dark .radio:hover { - color: #8c9b9d; } - html.theme--documenter-dark .checkbox[disabled], html.theme--documenter-dark .radio[disabled], - fieldset[disabled] html.theme--documenter-dark .checkbox, - fieldset[disabled] html.theme--documenter-dark .radio { - color: white; - cursor: not-allowed; } - html.theme--documenter-dark .radio + .radio { - margin-left: 0.5em; } - html.theme--documenter-dark .select { - display: inline-block; - max-width: 100%; - position: relative; - vertical-align: top; } - html.theme--documenter-dark .select:not(.is-multiple) { - height: 2.25em; } - html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after { - border-color: #1abc9c; - right: 1.125em; - z-index: 4; } - html.theme--documenter-dark .select.is-rounded select, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.select select { - border-radius: 290486px; - padding-left: 1em; } - html.theme--documenter-dark .select select { - cursor: pointer; - display: block; - font-size: 1em; - max-width: 100%; - outline: none; } - html.theme--documenter-dark .select select::-ms-expand { - display: none; } - html.theme--documenter-dark .select select[disabled]:hover, - fieldset[disabled] html.theme--documenter-dark .select select:hover { - border-color: #282f2f; } - html.theme--documenter-dark .select select:not([multiple]) { - padding-right: 2.5em; } - html.theme--documenter-dark .select select[multiple] { - height: auto; - padding: 0; } - html.theme--documenter-dark .select select[multiple] option { - padding: 0.5em 1em; } - html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading):hover::after { - border-color: #8c9b9d; } - html.theme--documenter-dark .select.is-white:not(:hover)::after { - border-color: white; } - html.theme--documenter-dark .select.is-white select { - border-color: white; } - html.theme--documenter-dark .select.is-white select:hover, html.theme--documenter-dark .select.is-white select.is-hovered { - border-color: #f2f2f2; } - html.theme--documenter-dark .select.is-white select:focus, html.theme--documenter-dark .select.is-white select.is-focused, html.theme--documenter-dark .select.is-white select:active, html.theme--documenter-dark .select.is-white select.is-active { - box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } - html.theme--documenter-dark .select.is-black:not(:hover)::after { - border-color: #0a0a0a; } - html.theme--documenter-dark .select.is-black select { - border-color: #0a0a0a; } - html.theme--documenter-dark .select.is-black select:hover, html.theme--documenter-dark .select.is-black select.is-hovered { - border-color: black; } - html.theme--documenter-dark .select.is-black select:focus, html.theme--documenter-dark .select.is-black select.is-focused, html.theme--documenter-dark .select.is-black select:active, html.theme--documenter-dark .select.is-black select.is-active { - box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } - html.theme--documenter-dark .select.is-light:not(:hover)::after { - border-color: #ecf0f1; } - html.theme--documenter-dark .select.is-light select { - border-color: #ecf0f1; } - html.theme--documenter-dark .select.is-light select:hover, html.theme--documenter-dark .select.is-light select.is-hovered { - border-color: #dde4e6; } - html.theme--documenter-dark .select.is-light select:focus, html.theme--documenter-dark .select.is-light select.is-focused, html.theme--documenter-dark .select.is-light select:active, html.theme--documenter-dark .select.is-light select.is-active { - box-shadow: 0 0 0 0.125em rgba(236, 240, 241, 0.25); } - html.theme--documenter-dark .select.is-dark:not(:hover)::after, html.theme--documenter-dark .content kbd.select:not(:hover)::after { - border-color: #282f2f; } - html.theme--documenter-dark .select.is-dark select, html.theme--documenter-dark .content kbd.select select { - border-color: #282f2f; } - html.theme--documenter-dark .select.is-dark select:hover, html.theme--documenter-dark .content kbd.select select:hover, html.theme--documenter-dark .select.is-dark select.is-hovered, html.theme--documenter-dark .content kbd.select select.is-hovered { - border-color: #1d2122; } - html.theme--documenter-dark .select.is-dark select:focus, html.theme--documenter-dark .content kbd.select select:focus, html.theme--documenter-dark .select.is-dark select.is-focused, html.theme--documenter-dark .content kbd.select select.is-focused, html.theme--documenter-dark .select.is-dark select:active, html.theme--documenter-dark .content kbd.select select:active, html.theme--documenter-dark .select.is-dark select.is-active, html.theme--documenter-dark .content kbd.select select.is-active { - box-shadow: 0 0 0 0.125em rgba(40, 47, 47, 0.25); } - html.theme--documenter-dark .select.is-primary:not(:hover)::after, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink:not(:hover)::after { - border-color: #375a7f; } - html.theme--documenter-dark .select.is-primary select, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select { - border-color: #375a7f; } - html.theme--documenter-dark .select.is-primary select:hover, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select:hover, html.theme--documenter-dark .select.is-primary select.is-hovered, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select.is-hovered { - border-color: #2f4d6d; } - html.theme--documenter-dark .select.is-primary select:focus, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select:focus, html.theme--documenter-dark .select.is-primary select.is-focused, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select.is-focused, html.theme--documenter-dark .select.is-primary select:active, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select:active, html.theme--documenter-dark .select.is-primary select.is-active, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select.is-active { - box-shadow: 0 0 0 0.125em rgba(55, 90, 127, 0.25); } - html.theme--documenter-dark .select.is-link:not(:hover)::after { - border-color: #1abc9c; } - html.theme--documenter-dark .select.is-link select { - border-color: #1abc9c; } - html.theme--documenter-dark .select.is-link select:hover, html.theme--documenter-dark .select.is-link select.is-hovered { - border-color: #17a689; } - html.theme--documenter-dark .select.is-link select:focus, html.theme--documenter-dark .select.is-link select.is-focused, html.theme--documenter-dark .select.is-link select:active, html.theme--documenter-dark .select.is-link select.is-active { - box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } - html.theme--documenter-dark .select.is-info:not(:hover)::after { - border-color: #024c7d; } - html.theme--documenter-dark .select.is-info select { - border-color: #024c7d; } - html.theme--documenter-dark .select.is-info select:hover, html.theme--documenter-dark .select.is-info select.is-hovered { - border-color: #023d64; } - html.theme--documenter-dark .select.is-info select:focus, html.theme--documenter-dark .select.is-info select.is-focused, html.theme--documenter-dark .select.is-info select:active, html.theme--documenter-dark .select.is-info select.is-active { - box-shadow: 0 0 0 0.125em rgba(2, 76, 125, 0.25); } - html.theme--documenter-dark .select.is-success:not(:hover)::after { - border-color: #008438; } - html.theme--documenter-dark .select.is-success select { - border-color: #008438; } - html.theme--documenter-dark .select.is-success select:hover, html.theme--documenter-dark .select.is-success select.is-hovered { - border-color: #006b2d; } - html.theme--documenter-dark .select.is-success select:focus, html.theme--documenter-dark .select.is-success select.is-focused, html.theme--documenter-dark .select.is-success select:active, html.theme--documenter-dark .select.is-success select.is-active { - box-shadow: 0 0 0 0.125em rgba(0, 132, 56, 0.25); } - html.theme--documenter-dark .select.is-warning:not(:hover)::after { - border-color: #ad8100; } - html.theme--documenter-dark .select.is-warning select { - border-color: #ad8100; } - html.theme--documenter-dark .select.is-warning select:hover, html.theme--documenter-dark .select.is-warning select.is-hovered { - border-color: #946e00; } - html.theme--documenter-dark .select.is-warning select:focus, html.theme--documenter-dark .select.is-warning select.is-focused, html.theme--documenter-dark .select.is-warning select:active, html.theme--documenter-dark .select.is-warning select.is-active { - box-shadow: 0 0 0 0.125em rgba(173, 129, 0, 0.25); } - html.theme--documenter-dark .select.is-danger:not(:hover)::after { - border-color: #9e1b0d; } - html.theme--documenter-dark .select.is-danger select { - border-color: #9e1b0d; } - html.theme--documenter-dark .select.is-danger select:hover, html.theme--documenter-dark .select.is-danger select.is-hovered { - border-color: #86170b; } - html.theme--documenter-dark .select.is-danger select:focus, html.theme--documenter-dark .select.is-danger select.is-focused, html.theme--documenter-dark .select.is-danger select:active, html.theme--documenter-dark .select.is-danger select.is-active { - box-shadow: 0 0 0 0.125em rgba(158, 27, 13, 0.25); } - html.theme--documenter-dark .select.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.select { - border-radius: 3px; - font-size: 0.85em; } - html.theme--documenter-dark .select.is-medium { - font-size: 1.25rem; } - html.theme--documenter-dark .select.is-large { - font-size: 1.5rem; } - html.theme--documenter-dark .select.is-disabled::after { - border-color: white; } - html.theme--documenter-dark .select.is-fullwidth { - width: 100%; } - html.theme--documenter-dark .select.is-fullwidth select { - width: 100%; } - html.theme--documenter-dark .select.is-loading::after { - margin-top: 0; - position: absolute; - right: 0.625em; - top: 0.625em; - transform: none; } - html.theme--documenter-dark .select.is-loading.is-small:after, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.select.is-loading:after { - font-size: 0.85em; } - html.theme--documenter-dark .select.is-loading.is-medium:after { - font-size: 1.25rem; } - html.theme--documenter-dark .select.is-loading.is-large:after { - font-size: 1.5rem; } - html.theme--documenter-dark .file { - align-items: stretch; - display: flex; - justify-content: flex-start; - position: relative; } - html.theme--documenter-dark .file.is-white .file-cta { - background-color: white; - border-color: transparent; - color: #0a0a0a; } - html.theme--documenter-dark .file.is-white:hover .file-cta, html.theme--documenter-dark .file.is-white.is-hovered .file-cta { - background-color: #f9f9f9; - border-color: transparent; - color: #0a0a0a; } - html.theme--documenter-dark .file.is-white:focus .file-cta, html.theme--documenter-dark .file.is-white.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(255, 255, 255, 0.25); - color: #0a0a0a; } - html.theme--documenter-dark .file.is-white:active .file-cta, html.theme--documenter-dark .file.is-white.is-active .file-cta { - background-color: #f2f2f2; - border-color: transparent; - color: #0a0a0a; } - html.theme--documenter-dark .file.is-black .file-cta { - background-color: #0a0a0a; - border-color: transparent; - color: white; } - html.theme--documenter-dark .file.is-black:hover .file-cta, html.theme--documenter-dark .file.is-black.is-hovered .file-cta { - background-color: #040404; - border-color: transparent; - color: white; } - html.theme--documenter-dark .file.is-black:focus .file-cta, html.theme--documenter-dark .file.is-black.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(10, 10, 10, 0.25); - color: white; } - html.theme--documenter-dark .file.is-black:active .file-cta, html.theme--documenter-dark .file.is-black.is-active .file-cta { - background-color: black; - border-color: transparent; - color: white; } - html.theme--documenter-dark .file.is-light .file-cta { - background-color: #ecf0f1; - border-color: transparent; - color: #282f2f; } - html.theme--documenter-dark .file.is-light:hover .file-cta, html.theme--documenter-dark .file.is-light.is-hovered .file-cta { - background-color: #e5eaec; - border-color: transparent; - color: #282f2f; } - html.theme--documenter-dark .file.is-light:focus .file-cta, html.theme--documenter-dark .file.is-light.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(236, 240, 241, 0.25); - color: #282f2f; } - html.theme--documenter-dark .file.is-light:active .file-cta, html.theme--documenter-dark .file.is-light.is-active .file-cta { - background-color: #dde4e6; - border-color: transparent; - color: #282f2f; } - html.theme--documenter-dark .file.is-dark .file-cta, html.theme--documenter-dark .content kbd.file .file-cta { - background-color: #282f2f; - border-color: transparent; - color: #ecf0f1; } - html.theme--documenter-dark .file.is-dark:hover .file-cta, html.theme--documenter-dark .content kbd.file:hover .file-cta, html.theme--documenter-dark .file.is-dark.is-hovered .file-cta, html.theme--documenter-dark .content kbd.file.is-hovered .file-cta { - background-color: #232829; - border-color: transparent; - color: #ecf0f1; } - html.theme--documenter-dark .file.is-dark:focus .file-cta, html.theme--documenter-dark .content kbd.file:focus .file-cta, html.theme--documenter-dark .file.is-dark.is-focused .file-cta, html.theme--documenter-dark .content kbd.file.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(40, 47, 47, 0.25); - color: #ecf0f1; } - html.theme--documenter-dark .file.is-dark:active .file-cta, html.theme--documenter-dark .content kbd.file:active .file-cta, html.theme--documenter-dark .file.is-dark.is-active .file-cta, html.theme--documenter-dark .content kbd.file.is-active .file-cta { - background-color: #1d2122; - border-color: transparent; - color: #ecf0f1; } - html.theme--documenter-dark .file.is-primary .file-cta, html.theme--documenter-dark .docstring > section > a.file.docs-sourcelink .file-cta { - background-color: #375a7f; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .file.is-primary:hover .file-cta, html.theme--documenter-dark .docstring > section > a.file.docs-sourcelink:hover .file-cta, html.theme--documenter-dark .file.is-primary.is-hovered .file-cta, html.theme--documenter-dark .docstring > section > a.file.is-hovered.docs-sourcelink .file-cta { - background-color: #335476; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .file.is-primary:focus .file-cta, html.theme--documenter-dark .docstring > section > a.file.docs-sourcelink:focus .file-cta, html.theme--documenter-dark .file.is-primary.is-focused .file-cta, html.theme--documenter-dark .docstring > section > a.file.is-focused.docs-sourcelink .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(55, 90, 127, 0.25); - color: #fff; } - html.theme--documenter-dark .file.is-primary:active .file-cta, html.theme--documenter-dark .docstring > section > a.file.docs-sourcelink:active .file-cta, html.theme--documenter-dark .file.is-primary.is-active .file-cta, html.theme--documenter-dark .docstring > section > a.file.is-active.docs-sourcelink .file-cta { - background-color: #2f4d6d; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .file.is-link .file-cta { - background-color: #1abc9c; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .file.is-link:hover .file-cta, html.theme--documenter-dark .file.is-link.is-hovered .file-cta { - background-color: #18b193; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .file.is-link:focus .file-cta, html.theme--documenter-dark .file.is-link.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(26, 188, 156, 0.25); - color: #fff; } - html.theme--documenter-dark .file.is-link:active .file-cta, html.theme--documenter-dark .file.is-link.is-active .file-cta { - background-color: #17a689; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .file.is-info .file-cta { - background-color: #024c7d; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .file.is-info:hover .file-cta, html.theme--documenter-dark .file.is-info.is-hovered .file-cta { - background-color: #024470; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .file.is-info:focus .file-cta, html.theme--documenter-dark .file.is-info.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(2, 76, 125, 0.25); - color: #fff; } - html.theme--documenter-dark .file.is-info:active .file-cta, html.theme--documenter-dark .file.is-info.is-active .file-cta { - background-color: #023d64; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .file.is-success .file-cta { - background-color: #008438; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .file.is-success:hover .file-cta, html.theme--documenter-dark .file.is-success.is-hovered .file-cta { - background-color: #007733; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .file.is-success:focus .file-cta, html.theme--documenter-dark .file.is-success.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(0, 132, 56, 0.25); - color: #fff; } - html.theme--documenter-dark .file.is-success:active .file-cta, html.theme--documenter-dark .file.is-success.is-active .file-cta { - background-color: #006b2d; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .file.is-warning .file-cta { - background-color: #ad8100; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .file.is-warning:hover .file-cta, html.theme--documenter-dark .file.is-warning.is-hovered .file-cta { - background-color: #a07700; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .file.is-warning:focus .file-cta, html.theme--documenter-dark .file.is-warning.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(173, 129, 0, 0.25); - color: #fff; } - html.theme--documenter-dark .file.is-warning:active .file-cta, html.theme--documenter-dark .file.is-warning.is-active .file-cta { - background-color: #946e00; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .file.is-danger .file-cta { - background-color: #9e1b0d; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .file.is-danger:hover .file-cta, html.theme--documenter-dark .file.is-danger.is-hovered .file-cta { - background-color: #92190c; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .file.is-danger:focus .file-cta, html.theme--documenter-dark .file.is-danger.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(158, 27, 13, 0.25); - color: #fff; } - html.theme--documenter-dark .file.is-danger:active .file-cta, html.theme--documenter-dark .file.is-danger.is-active .file-cta { - background-color: #86170b; - border-color: transparent; - color: #fff; } - html.theme--documenter-dark .file.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.file { - font-size: 0.85em; } - html.theme--documenter-dark .file.is-medium { - font-size: 1.25rem; } - html.theme--documenter-dark .file.is-medium .file-icon .fa { - font-size: 21px; } - html.theme--documenter-dark .file.is-large { - font-size: 1.5rem; } - html.theme--documenter-dark .file.is-large .file-icon .fa { - font-size: 28px; } - html.theme--documenter-dark .file.has-name .file-cta { - border-bottom-right-radius: 0; - border-top-right-radius: 0; } - html.theme--documenter-dark .file.has-name .file-name { - border-bottom-left-radius: 0; - border-top-left-radius: 0; } - html.theme--documenter-dark .file.has-name.is-empty .file-cta { - border-radius: 0.4em; } - html.theme--documenter-dark .file.has-name.is-empty .file-name { - display: none; } - html.theme--documenter-dark .file.is-boxed .file-label { - flex-direction: column; } - html.theme--documenter-dark .file.is-boxed .file-cta { - flex-direction: column; - height: auto; - padding: 1em 3em; } - html.theme--documenter-dark .file.is-boxed .file-name { - border-width: 0 1px 1px; } - html.theme--documenter-dark .file.is-boxed .file-icon { - height: 1.5em; - width: 1.5em; } - html.theme--documenter-dark .file.is-boxed .file-icon .fa { - font-size: 21px; } - html.theme--documenter-dark .file.is-boxed.is-small .file-icon .fa, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.file.is-boxed .file-icon .fa { - font-size: 14px; } - html.theme--documenter-dark .file.is-boxed.is-medium .file-icon .fa { - font-size: 28px; } - html.theme--documenter-dark .file.is-boxed.is-large .file-icon .fa { - font-size: 35px; } - html.theme--documenter-dark .file.is-boxed.has-name .file-cta { - border-radius: 0.4em 0.4em 0 0; } - html.theme--documenter-dark .file.is-boxed.has-name .file-name { - border-radius: 0 0 0.4em 0.4em; - border-width: 0 1px 1px; } - html.theme--documenter-dark .file.is-centered { - justify-content: center; } - html.theme--documenter-dark .file.is-fullwidth .file-label { - width: 100%; } - html.theme--documenter-dark .file.is-fullwidth .file-name { - flex-grow: 1; - max-width: none; } - html.theme--documenter-dark .file.is-right { - justify-content: flex-end; } - html.theme--documenter-dark .file.is-right .file-cta { - border-radius: 0 0.4em 0.4em 0; } - html.theme--documenter-dark .file.is-right .file-name { - border-radius: 0.4em 0 0 0.4em; - border-width: 1px 0 1px 1px; - order: -1; } - html.theme--documenter-dark .file-label { - align-items: stretch; - display: flex; - cursor: pointer; - justify-content: flex-start; - overflow: hidden; - position: relative; } - html.theme--documenter-dark .file-label:hover .file-cta { - background-color: #e5eaec; - color: #282f2f; } - html.theme--documenter-dark .file-label:hover .file-name { - border-color: #596668; } - html.theme--documenter-dark .file-label:active .file-cta { - background-color: #dde4e6; - color: #282f2f; } - html.theme--documenter-dark .file-label:active .file-name { - border-color: #535f61; } - html.theme--documenter-dark .file-input { - height: 100%; - left: 0; - opacity: 0; - outline: none; - position: absolute; - top: 0; - width: 100%; } - html.theme--documenter-dark .file-cta, - html.theme--documenter-dark .file-name { - border-color: #5e6d6f; - border-radius: 0.4em; - font-size: 1em; - padding-left: 1em; - padding-right: 1em; - white-space: nowrap; } - html.theme--documenter-dark .file-cta { - background-color: #ecf0f1; - color: #343c3d; } - html.theme--documenter-dark .file-name { - border-color: #5e6d6f; - border-style: solid; - border-width: 1px 1px 1px 0; - display: block; - max-width: 16em; - overflow: hidden; - text-align: left; - text-overflow: ellipsis; } - html.theme--documenter-dark .file-icon { - align-items: center; - display: flex; - height: 1em; - justify-content: center; - margin-right: 0.5em; - width: 1em; } - html.theme--documenter-dark .file-icon .fa { - font-size: 14px; } - html.theme--documenter-dark .label { - color: #282f2f; - display: block; - font-size: 15px; - font-weight: 700; } - html.theme--documenter-dark .label:not(:last-child) { - margin-bottom: 0.5em; } - html.theme--documenter-dark .label.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.label { - font-size: 0.85em; } - html.theme--documenter-dark .label.is-medium { - font-size: 1.25rem; } - html.theme--documenter-dark .label.is-large { - font-size: 1.5rem; } - html.theme--documenter-dark .help { - display: block; - font-size: 0.85em; - margin-top: 0.25rem; } - html.theme--documenter-dark .help.is-white { - color: white; } - html.theme--documenter-dark .help.is-black { - color: #0a0a0a; } - html.theme--documenter-dark .help.is-light { - color: #ecf0f1; } - html.theme--documenter-dark .help.is-dark, html.theme--documenter-dark .content kbd.help { - color: #282f2f; } - html.theme--documenter-dark .help.is-primary, html.theme--documenter-dark .docstring > section > a.help.docs-sourcelink { - color: #375a7f; } - html.theme--documenter-dark .help.is-link { - color: #1abc9c; } - html.theme--documenter-dark .help.is-info { - color: #024c7d; } - html.theme--documenter-dark .help.is-success { - color: #008438; } - html.theme--documenter-dark .help.is-warning { - color: #ad8100; } - html.theme--documenter-dark .help.is-danger { - color: #9e1b0d; } - html.theme--documenter-dark .field:not(:last-child) { - margin-bottom: 0.75rem; } - html.theme--documenter-dark .field.has-addons { - display: flex; - justify-content: flex-start; } - html.theme--documenter-dark .field.has-addons .control:not(:last-child) { - margin-right: -1px; } - html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .button, - html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .input, - html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search > input, - html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search > input, - html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .select select { - border-radius: 0; } - html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .button, - html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .input, - html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search > input, - html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search > input, - html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .select select { - border-bottom-right-radius: 0; - border-top-right-radius: 0; } - html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .button, - html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .input, - html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search > input, - html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search > input, - html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .select select { - border-bottom-left-radius: 0; - border-top-left-radius: 0; } - html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):hover, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]).is-hovered, - html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):hover, - html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):hover, - html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):hover, - html.theme--documenter-dark .field.has-addons .control .input:not([disabled]).is-hovered, - html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-hovered, - html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-hovered, - html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover, - html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]).is-hovered { - z-index: 2; } - html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]).is-focused, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]).is-active, - html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus, - html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus, - html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus, - html.theme--documenter-dark .field.has-addons .control .input:not([disabled]).is-focused, - html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-focused, - html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-focused, - html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active, - html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active, - html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active, - html.theme--documenter-dark .field.has-addons .control .input:not([disabled]).is-active, - html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-active, - html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-active, - html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus, - html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]).is-focused, - html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active, - html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]).is-active { - z-index: 3; } - html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus:hover, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]).is-focused:hover, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active:hover, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]).is-active:hover, - html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus:hover, - html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus:hover, - html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus:hover, - html.theme--documenter-dark .field.has-addons .control .input:not([disabled]).is-focused:hover, - html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-focused:hover, - html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-focused:hover, - html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active:hover, - html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active:hover, - html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active:hover, - html.theme--documenter-dark .field.has-addons .control .input:not([disabled]).is-active:hover, - html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-active:hover, - html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-active:hover, - html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus:hover, - html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]).is-focused:hover, - html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active:hover, - html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]).is-active:hover { - z-index: 4; } - html.theme--documenter-dark .field.has-addons .control.is-expanded { - flex-grow: 1; - flex-shrink: 1; } - html.theme--documenter-dark .field.has-addons.has-addons-centered { - justify-content: center; } - html.theme--documenter-dark .field.has-addons.has-addons-right { - justify-content: flex-end; } - html.theme--documenter-dark .field.has-addons.has-addons-fullwidth .control { - flex-grow: 1; - flex-shrink: 0; } - html.theme--documenter-dark .field.is-grouped { - display: flex; - justify-content: flex-start; } - html.theme--documenter-dark .field.is-grouped > .control { - flex-shrink: 0; } - html.theme--documenter-dark .field.is-grouped > .control:not(:last-child) { - margin-bottom: 0; - margin-right: 0.75rem; } - html.theme--documenter-dark .field.is-grouped > .control.is-expanded { - flex-grow: 1; - flex-shrink: 1; } - html.theme--documenter-dark .field.is-grouped.is-grouped-centered { - justify-content: center; } - html.theme--documenter-dark .field.is-grouped.is-grouped-right { - justify-content: flex-end; } - html.theme--documenter-dark .field.is-grouped.is-grouped-multiline { - flex-wrap: wrap; } - html.theme--documenter-dark .field.is-grouped.is-grouped-multiline > .control:last-child, html.theme--documenter-dark .field.is-grouped.is-grouped-multiline > .control:not(:last-child) { - margin-bottom: 0.75rem; } - html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:last-child { - margin-bottom: -0.75rem; } - html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:not(:last-child) { - margin-bottom: 0; } - @media screen and (min-width: 769px), print { - html.theme--documenter-dark .field.is-horizontal { - display: flex; } } - html.theme--documenter-dark .field-label .label { - font-size: inherit; } - @media screen and (max-width: 768px) { - html.theme--documenter-dark .field-label { - margin-bottom: 0.5rem; } } - @media screen and (min-width: 769px), print { - html.theme--documenter-dark .field-label { - flex-basis: 0; - flex-grow: 1; - flex-shrink: 0; - margin-right: 1.5rem; - text-align: right; } - html.theme--documenter-dark .field-label.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.field-label { - font-size: 0.85em; - padding-top: 0.375em; } - html.theme--documenter-dark .field-label.is-normal { - padding-top: 0.375em; } - html.theme--documenter-dark .field-label.is-medium { - font-size: 1.25rem; - padding-top: 0.375em; } - html.theme--documenter-dark .field-label.is-large { - font-size: 1.5rem; - padding-top: 0.375em; } } - html.theme--documenter-dark .field-body .field .field { - margin-bottom: 0; } - @media screen and (min-width: 769px), print { - html.theme--documenter-dark .field-body { - display: flex; - flex-basis: 0; - flex-grow: 5; - flex-shrink: 1; } - html.theme--documenter-dark .field-body .field { - margin-bottom: 0; } - html.theme--documenter-dark .field-body > .field { - flex-shrink: 1; } - html.theme--documenter-dark .field-body > .field:not(.is-narrow) { - flex-grow: 1; } - html.theme--documenter-dark .field-body > .field:not(:last-child) { - margin-right: 0.75rem; } } - html.theme--documenter-dark .control { - box-sizing: border-box; - clear: both; - font-size: 15px; - position: relative; - text-align: left; } - html.theme--documenter-dark .control.has-icons-left .input:focus ~ .icon, html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search > input:focus ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search > input:focus ~ .icon, - html.theme--documenter-dark .control.has-icons-left .select:focus ~ .icon, html.theme--documenter-dark .control.has-icons-right .input:focus ~ .icon, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input:focus ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input:focus ~ .icon, - html.theme--documenter-dark .control.has-icons-right .select:focus ~ .icon { - color: #5e6d6f; } - html.theme--documenter-dark .control.has-icons-left .input.is-small ~ .icon, html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search > input ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search > input ~ .icon, - html.theme--documenter-dark .control.has-icons-left .select.is-small ~ .icon, - html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search > input.select ~ .icon, - html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search > input.select ~ .icon, html.theme--documenter-dark .control.has-icons-right .input.is-small ~ .icon, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input ~ .icon, - html.theme--documenter-dark .control.has-icons-right .select.is-small ~ .icon, - html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input.select ~ .icon, - html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input.select ~ .icon { - font-size: 0.85em; } - html.theme--documenter-dark .control.has-icons-left .input.is-medium ~ .icon, html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search > input.is-medium ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search > input.is-medium ~ .icon, - html.theme--documenter-dark .control.has-icons-left .select.is-medium ~ .icon, html.theme--documenter-dark .control.has-icons-right .input.is-medium ~ .icon, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input.is-medium ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input.is-medium ~ .icon, - html.theme--documenter-dark .control.has-icons-right .select.is-medium ~ .icon { - font-size: 1.25rem; } - html.theme--documenter-dark .control.has-icons-left .input.is-large ~ .icon, html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search > input.is-large ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search > input.is-large ~ .icon, - html.theme--documenter-dark .control.has-icons-left .select.is-large ~ .icon, html.theme--documenter-dark .control.has-icons-right .input.is-large ~ .icon, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input.is-large ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input.is-large ~ .icon, - html.theme--documenter-dark .control.has-icons-right .select.is-large ~ .icon { - font-size: 1.5rem; } - html.theme--documenter-dark .control.has-icons-left .icon, html.theme--documenter-dark .control.has-icons-right .icon { - color: #dbdee0; - height: 2.25em; - pointer-events: none; - position: absolute; - top: 0; - width: 2.25em; - z-index: 4; } - html.theme--documenter-dark .control.has-icons-left .input, html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search > input, - html.theme--documenter-dark .control.has-icons-left .select select { - padding-left: 2.25em; } - html.theme--documenter-dark .control.has-icons-left .icon.is-left { - left: 0; } - html.theme--documenter-dark .control.has-icons-right .input, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input, - html.theme--documenter-dark .control.has-icons-right .select select { - padding-right: 2.25em; } - html.theme--documenter-dark .control.has-icons-right .icon.is-right { - right: 0; } - html.theme--documenter-dark .control.is-loading::after { - position: absolute !important; - right: 0.625em; - top: 0.625em; - z-index: 4; } - html.theme--documenter-dark .control.is-loading.is-small:after, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.control.is-loading:after { - font-size: 0.85em; } - html.theme--documenter-dark .control.is-loading.is-medium:after { - font-size: 1.25rem; } - html.theme--documenter-dark .control.is-loading.is-large:after { - font-size: 1.5rem; } - html.theme--documenter-dark .breadcrumb { - font-size: 15px; - white-space: nowrap; } - html.theme--documenter-dark .breadcrumb a { - align-items: center; - color: #1abc9c; - display: flex; - justify-content: center; - padding: 0 0.75em; } - html.theme--documenter-dark .breadcrumb a:hover { - color: #1dd2af; } - html.theme--documenter-dark .breadcrumb li { - align-items: center; - display: flex; } - html.theme--documenter-dark .breadcrumb li:first-child a { - padding-left: 0; } - html.theme--documenter-dark .breadcrumb li.is-active a { - color: #f2f2f2; - cursor: default; - pointer-events: none; } - html.theme--documenter-dark .breadcrumb li + li::before { - color: #8c9b9d; - content: "\0002f"; } - html.theme--documenter-dark .breadcrumb ul, - html.theme--documenter-dark .breadcrumb ol { - align-items: flex-start; - display: flex; - flex-wrap: wrap; - justify-content: flex-start; } - html.theme--documenter-dark .breadcrumb .icon:first-child { - margin-right: 0.5em; } - html.theme--documenter-dark .breadcrumb .icon:last-child { - margin-left: 0.5em; } - html.theme--documenter-dark .breadcrumb.is-centered ol, - html.theme--documenter-dark .breadcrumb.is-centered ul { - justify-content: center; } - html.theme--documenter-dark .breadcrumb.is-right ol, - html.theme--documenter-dark .breadcrumb.is-right ul { - justify-content: flex-end; } - html.theme--documenter-dark .breadcrumb.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.breadcrumb { - font-size: 0.85em; } - html.theme--documenter-dark .breadcrumb.is-medium { - font-size: 1.25rem; } - html.theme--documenter-dark .breadcrumb.is-large { - font-size: 1.5rem; } - html.theme--documenter-dark .breadcrumb.has-arrow-separator li + li::before { - content: "\02192"; } - html.theme--documenter-dark .breadcrumb.has-bullet-separator li + li::before { - content: "\02022"; } - html.theme--documenter-dark .breadcrumb.has-dot-separator li + li::before { - content: "\000b7"; } - html.theme--documenter-dark .breadcrumb.has-succeeds-separator li + li::before { - content: "\0227B"; } - html.theme--documenter-dark .card { - background-color: white; - box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); - color: #fff; - max-width: 100%; - position: relative; } - html.theme--documenter-dark .card-header { - background-color: transparent; - align-items: stretch; - box-shadow: 0 1px 2px rgba(10, 10, 10, 0.1); - display: flex; } - html.theme--documenter-dark .card-header-title { - align-items: center; - color: #f2f2f2; - display: flex; - flex-grow: 1; - font-weight: 700; - padding: 0.75rem; } - html.theme--documenter-dark .card-header-title.is-centered { - justify-content: center; } - html.theme--documenter-dark .card-header-icon { - align-items: center; - cursor: pointer; - display: flex; - justify-content: center; - padding: 0.75rem; } - html.theme--documenter-dark .card-image { - display: block; - position: relative; } - html.theme--documenter-dark .card-content { - background-color: transparent; - padding: 1rem 1.25rem; } - html.theme--documenter-dark .card-footer { - background-color: transparent; - border-top: 1px solid #5e6d6f; - align-items: stretch; - display: flex; } - html.theme--documenter-dark .card-footer-item { - align-items: center; - display: flex; - flex-basis: 0; - flex-grow: 1; - flex-shrink: 0; - justify-content: center; - padding: 0.75rem; } - html.theme--documenter-dark .card-footer-item:not(:last-child) { - border-right: 1px solid #5e6d6f; } - html.theme--documenter-dark .card .media:not(:last-child) { - margin-bottom: 1.5rem; } - html.theme--documenter-dark .dropdown { - display: inline-flex; - position: relative; - vertical-align: top; } - html.theme--documenter-dark .dropdown.is-active .dropdown-menu, html.theme--documenter-dark .dropdown.is-hoverable:hover .dropdown-menu { - display: block; } - html.theme--documenter-dark .dropdown.is-right .dropdown-menu { - left: auto; - right: 0; } - html.theme--documenter-dark .dropdown.is-up .dropdown-menu { - bottom: 100%; - padding-bottom: 4px; - padding-top: initial; - top: auto; } - html.theme--documenter-dark .dropdown-menu { - display: none; - left: 0; - min-width: 12rem; - padding-top: 4px; - position: absolute; - top: 100%; - z-index: 20; } - html.theme--documenter-dark .dropdown-content { - background-color: #282f2f; - border-radius: 0.4em; - box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); - padding-bottom: 0.5rem; - padding-top: 0.5rem; } - html.theme--documenter-dark .dropdown-item { - color: #fff; - display: block; - font-size: 0.875rem; - line-height: 1.5; - padding: 0.375rem 1rem; - position: relative; } - html.theme--documenter-dark a.dropdown-item, - html.theme--documenter-dark button.dropdown-item { - padding-right: 3rem; - text-align: left; - white-space: nowrap; - width: 100%; } - html.theme--documenter-dark a.dropdown-item:hover, - html.theme--documenter-dark button.dropdown-item:hover { - background-color: #282f2f; - color: #0a0a0a; } - html.theme--documenter-dark a.dropdown-item.is-active, - html.theme--documenter-dark button.dropdown-item.is-active { - background-color: #1abc9c; - color: #fff; } - html.theme--documenter-dark .dropdown-divider { - background-color: #5e6d6f; - border: none; - display: block; - height: 1px; - margin: 0.5rem 0; } - html.theme--documenter-dark .level { - align-items: center; - justify-content: space-between; } - html.theme--documenter-dark .level code { - border-radius: 0.4em; } - html.theme--documenter-dark .level img { - display: inline-block; - vertical-align: top; } - html.theme--documenter-dark .level.is-mobile { - display: flex; } - html.theme--documenter-dark .level.is-mobile .level-left, - html.theme--documenter-dark .level.is-mobile .level-right { - display: flex; } - html.theme--documenter-dark .level.is-mobile .level-left + .level-right { - margin-top: 0; } - html.theme--documenter-dark .level.is-mobile .level-item:not(:last-child) { - margin-bottom: 0; - margin-right: 0.75rem; } - html.theme--documenter-dark .level.is-mobile .level-item:not(.is-narrow) { - flex-grow: 1; } - @media screen and (min-width: 769px), print { - html.theme--documenter-dark .level { - display: flex; } - html.theme--documenter-dark .level > .level-item:not(.is-narrow) { - flex-grow: 1; } } - html.theme--documenter-dark .level-item { - align-items: center; - display: flex; - flex-basis: auto; - flex-grow: 0; - flex-shrink: 0; - justify-content: center; } - html.theme--documenter-dark .level-item .title, - html.theme--documenter-dark .level-item .subtitle { - margin-bottom: 0; } - @media screen and (max-width: 768px) { - html.theme--documenter-dark .level-item:not(:last-child) { - margin-bottom: 0.75rem; } } - html.theme--documenter-dark .level-left, - html.theme--documenter-dark .level-right { - flex-basis: auto; - flex-grow: 0; - flex-shrink: 0; } - html.theme--documenter-dark .level-left .level-item.is-flexible, - html.theme--documenter-dark .level-right .level-item.is-flexible { - flex-grow: 1; } - @media screen and (min-width: 769px), print { - html.theme--documenter-dark .level-left .level-item:not(:last-child), - html.theme--documenter-dark .level-right .level-item:not(:last-child) { - margin-right: 0.75rem; } } - html.theme--documenter-dark .level-left { - align-items: center; - justify-content: flex-start; } - @media screen and (max-width: 768px) { - html.theme--documenter-dark .level-left + .level-right { - margin-top: 1.5rem; } } - @media screen and (min-width: 769px), print { - html.theme--documenter-dark .level-left { - display: flex; } } - html.theme--documenter-dark .level-right { - align-items: center; - justify-content: flex-end; } - @media screen and (min-width: 769px), print { - html.theme--documenter-dark .level-right { - display: flex; } } - html.theme--documenter-dark .list { - background-color: white; - border-radius: 0.4em; - box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); } - html.theme--documenter-dark .list-item { - display: block; - padding: 0.5em 1em; } - html.theme--documenter-dark .list-item:not(a) { - color: #fff; } - html.theme--documenter-dark .list-item:first-child { - border-top-left-radius: 0.4em; - border-top-right-radius: 0.4em; } - html.theme--documenter-dark .list-item:last-child { - border-bottom-left-radius: 0.4em; - border-bottom-right-radius: 0.4em; } - html.theme--documenter-dark .list-item:not(:last-child) { - border-bottom: 1px solid #5e6d6f; } - html.theme--documenter-dark .list-item.is-active { - background-color: #1abc9c; - color: #fff; } - html.theme--documenter-dark a.list-item { - background-color: #282f2f; - cursor: pointer; } - html.theme--documenter-dark .media { - align-items: flex-start; - display: flex; - text-align: left; } - html.theme--documenter-dark .media .content:not(:last-child) { - margin-bottom: 0.75rem; } - html.theme--documenter-dark .media .media { - border-top: 1px solid rgba(94, 109, 111, 0.5); - display: flex; - padding-top: 0.75rem; } - html.theme--documenter-dark .media .media .content:not(:last-child), - html.theme--documenter-dark .media .media .control:not(:last-child) { - margin-bottom: 0.5rem; } - html.theme--documenter-dark .media .media .media { - padding-top: 0.5rem; } - html.theme--documenter-dark .media .media .media + .media { - margin-top: 0.5rem; } - html.theme--documenter-dark .media + .media { - border-top: 1px solid rgba(94, 109, 111, 0.5); - margin-top: 1rem; - padding-top: 1rem; } - html.theme--documenter-dark .media.is-large + .media { - margin-top: 1.5rem; - padding-top: 1.5rem; } - html.theme--documenter-dark .media-left, - html.theme--documenter-dark .media-right { - flex-basis: auto; - flex-grow: 0; - flex-shrink: 0; } - html.theme--documenter-dark .media-left { - margin-right: 1rem; } - html.theme--documenter-dark .media-right { - margin-left: 1rem; } - html.theme--documenter-dark .media-content { - flex-basis: auto; - flex-grow: 1; - flex-shrink: 1; - text-align: left; } - @media screen and (max-width: 768px) { - html.theme--documenter-dark .media-content { - overflow-x: auto; } } - html.theme--documenter-dark .menu { - font-size: 15px; } - html.theme--documenter-dark .menu.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.menu { - font-size: 0.85em; } - html.theme--documenter-dark .menu.is-medium { - font-size: 1.25rem; } - html.theme--documenter-dark .menu.is-large { - font-size: 1.5rem; } - html.theme--documenter-dark .menu-list { - line-height: 1.25; } - html.theme--documenter-dark .menu-list a { - border-radius: 3px; - color: #fff; - display: block; - padding: 0.5em 0.75em; } - html.theme--documenter-dark .menu-list a:hover { - background-color: #282f2f; - color: #f2f2f2; } - html.theme--documenter-dark .menu-list a.is-active { - background-color: #1abc9c; - color: #fff; } - html.theme--documenter-dark .menu-list li ul { - border-left: 1px solid #5e6d6f; - margin: 0.75em; - padding-left: 0.75em; } - html.theme--documenter-dark .menu-label { - color: white; - font-size: 0.75em; - letter-spacing: 0.1em; - text-transform: uppercase; } - html.theme--documenter-dark .menu-label:not(:first-child) { - margin-top: 1em; } - html.theme--documenter-dark .menu-label:not(:last-child) { - margin-bottom: 1em; } - html.theme--documenter-dark .message { - background-color: #282f2f; - border-radius: 0.4em; - font-size: 15px; } - html.theme--documenter-dark .message strong { - color: currentColor; } - html.theme--documenter-dark .message a:not(.button):not(.tag):not(.dropdown-item) { - color: currentColor; - text-decoration: underline; } - html.theme--documenter-dark .message.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.message { - font-size: 0.85em; } - html.theme--documenter-dark .message.is-medium { - font-size: 1.25rem; } - html.theme--documenter-dark .message.is-large { - font-size: 1.5rem; } - html.theme--documenter-dark .message.is-white { - background-color: white; } - html.theme--documenter-dark .message.is-white .message-header { - background-color: white; - color: #0a0a0a; } - html.theme--documenter-dark .message.is-white .message-body { - border-color: white; - color: #4d4d4d; } - html.theme--documenter-dark .message.is-black { - background-color: #fafafa; } - html.theme--documenter-dark .message.is-black .message-header { - background-color: #0a0a0a; - color: white; } - html.theme--documenter-dark .message.is-black .message-body { - border-color: #0a0a0a; - color: #090909; } - html.theme--documenter-dark .message.is-light { - background-color: #f9fafb; } - html.theme--documenter-dark .message.is-light .message-header { - background-color: #ecf0f1; - color: #282f2f; } - html.theme--documenter-dark .message.is-light .message-body { - border-color: #ecf0f1; - color: #505050; } - html.theme--documenter-dark .message.is-dark, html.theme--documenter-dark .content kbd.message { - background-color: #f9fafa; } - html.theme--documenter-dark .message.is-dark .message-header, html.theme--documenter-dark .content kbd.message .message-header { - background-color: #282f2f; - color: #ecf0f1; } - html.theme--documenter-dark .message.is-dark .message-body, html.theme--documenter-dark .content kbd.message .message-body { - border-color: #282f2f; - color: #212526; } - html.theme--documenter-dark .message.is-primary, html.theme--documenter-dark .docstring > section > a.message.docs-sourcelink { - background-color: #f8fafc; } - html.theme--documenter-dark .message.is-primary .message-header, html.theme--documenter-dark .docstring > section > a.message.docs-sourcelink .message-header { - background-color: #375a7f; - color: #fff; } - html.theme--documenter-dark .message.is-primary .message-body, html.theme--documenter-dark .docstring > section > a.message.docs-sourcelink .message-body { - border-color: #375a7f; - color: #2b4159; } - html.theme--documenter-dark .message.is-link { - background-color: #f6fefc; } - html.theme--documenter-dark .message.is-link .message-header { - background-color: #1abc9c; - color: #fff; } - html.theme--documenter-dark .message.is-link .message-body { - border-color: #1abc9c; - color: #0b2f28; } - html.theme--documenter-dark .message.is-info { - background-color: #f5fbff; } - html.theme--documenter-dark .message.is-info .message-header { - background-color: #024c7d; - color: #fff; } - html.theme--documenter-dark .message.is-info .message-body { - border-color: #024c7d; - color: #033659; } - html.theme--documenter-dark .message.is-success { - background-color: #f5fff9; } - html.theme--documenter-dark .message.is-success .message-header { - background-color: #008438; - color: #fff; } - html.theme--documenter-dark .message.is-success .message-body { - border-color: #008438; - color: #023518; } - html.theme--documenter-dark .message.is-warning { - background-color: #fffcf5; } - html.theme--documenter-dark .message.is-warning .message-header { - background-color: #ad8100; - color: #fff; } - html.theme--documenter-dark .message.is-warning .message-body { - border-color: #ad8100; - color: #3d2e03; } - html.theme--documenter-dark .message.is-danger { - background-color: #fef6f6; } - html.theme--documenter-dark .message.is-danger .message-header { - background-color: #9e1b0d; - color: #fff; } - html.theme--documenter-dark .message.is-danger .message-body { - border-color: #9e1b0d; - color: #7a170c; } - html.theme--documenter-dark .message-header { - align-items: center; - background-color: #fff; - border-radius: 0.4em 0.4em 0 0; - color: rgba(0, 0, 0, 0.7); - display: flex; - font-weight: 700; - justify-content: space-between; - line-height: 1.25; - padding: 0.75em; - position: relative; } - html.theme--documenter-dark .message-header .delete { - flex-grow: 0; - flex-shrink: 0; - margin-left: 0.75em; } - html.theme--documenter-dark .message-header + .message-body { - border-width: 0; - border-top-left-radius: 0; - border-top-right-radius: 0; } - html.theme--documenter-dark .message-body { - border-color: #5e6d6f; - border-radius: 0.4em; - border-style: solid; - border-width: 0 0 0 4px; - color: #fff; - padding: 1em 1.25em; } - html.theme--documenter-dark .message-body code, - html.theme--documenter-dark .message-body pre { - background-color: white; } - html.theme--documenter-dark .message-body pre code { - background-color: transparent; } - html.theme--documenter-dark .modal { - align-items: center; - display: none; - flex-direction: column; - justify-content: center; - overflow: hidden; - position: fixed; - z-index: 40; } - html.theme--documenter-dark .modal.is-active { - display: flex; } - html.theme--documenter-dark .modal-background { - background-color: rgba(10, 10, 10, 0.86); } - html.theme--documenter-dark .modal-content, - html.theme--documenter-dark .modal-card { - margin: 0 20px; - max-height: calc(100vh - 160px); - overflow: auto; - position: relative; - width: 100%; } - @media screen and (min-width: 769px), print { - html.theme--documenter-dark .modal-content, - html.theme--documenter-dark .modal-card { - margin: 0 auto; - max-height: calc(100vh - 40px); - width: 640px; } } - html.theme--documenter-dark .modal-close { - background: none; - height: 40px; - position: fixed; - right: 20px; - top: 20px; - width: 40px; } - html.theme--documenter-dark .modal-card { - display: flex; - flex-direction: column; - max-height: calc(100vh - 40px); - overflow: hidden; - -ms-overflow-y: visible; } - html.theme--documenter-dark .modal-card-head, - html.theme--documenter-dark .modal-card-foot { - align-items: center; - background-color: #282f2f; - display: flex; - flex-shrink: 0; - justify-content: flex-start; - padding: 20px; - position: relative; } - html.theme--documenter-dark .modal-card-head { - border-bottom: 1px solid #5e6d6f; - border-top-left-radius: 8px; - border-top-right-radius: 8px; } - html.theme--documenter-dark .modal-card-title { - color: #f2f2f2; - flex-grow: 1; - flex-shrink: 0; - font-size: 1.5rem; - line-height: 1; } - html.theme--documenter-dark .modal-card-foot { - border-bottom-left-radius: 8px; - border-bottom-right-radius: 8px; - border-top: 1px solid #5e6d6f; } - html.theme--documenter-dark .modal-card-foot .button:not(:last-child) { - margin-right: 0.5em; } - html.theme--documenter-dark .modal-card-body { - -webkit-overflow-scrolling: touch; - background-color: white; - flex-grow: 1; - flex-shrink: 1; - overflow: auto; - padding: 20px; } - html.theme--documenter-dark .navbar { - background-color: #375a7f; - min-height: 4rem; - position: relative; - z-index: 30; } - html.theme--documenter-dark .navbar.is-white { - background-color: white; - color: #0a0a0a; } - html.theme--documenter-dark .navbar.is-white .navbar-brand > .navbar-item, - html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link { - color: #0a0a0a; } - html.theme--documenter-dark .navbar.is-white .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-white .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-white .navbar-brand > a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:focus, - html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:hover, - html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link.is-active { - background-color: #f2f2f2; - color: #0a0a0a; } - html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link::after { - border-color: #0a0a0a; } - html.theme--documenter-dark .navbar.is-white .navbar-burger { - color: #0a0a0a; } - @media screen and (min-width: 1056px) { - html.theme--documenter-dark .navbar.is-white .navbar-start > .navbar-item, - html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link, - html.theme--documenter-dark .navbar.is-white .navbar-end > .navbar-item, - html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link { - color: #0a0a0a; } - html.theme--documenter-dark .navbar.is-white .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-white .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-white .navbar-start > a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:focus, - html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:hover, - html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link.is-active, - html.theme--documenter-dark .navbar.is-white .navbar-end > a.navbar-item:focus, - html.theme--documenter-dark .navbar.is-white .navbar-end > a.navbar-item:hover, - html.theme--documenter-dark .navbar.is-white .navbar-end > a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:focus, - html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:hover, - html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link.is-active { - background-color: #f2f2f2; - color: #0a0a0a; } - html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link::after, - html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link::after { - border-color: #0a0a0a; } - html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link, - html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link, - html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #f2f2f2; - color: #0a0a0a; } - html.theme--documenter-dark .navbar.is-white .navbar-dropdown a.navbar-item.is-active { - background-color: white; - color: #0a0a0a; } } - html.theme--documenter-dark .navbar.is-black { - background-color: #0a0a0a; - color: white; } - html.theme--documenter-dark .navbar.is-black .navbar-brand > .navbar-item, - html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link { - color: white; } - html.theme--documenter-dark .navbar.is-black .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-black .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-black .navbar-brand > a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:focus, - html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:hover, - html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link.is-active { - background-color: black; - color: white; } - html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link::after { - border-color: white; } - html.theme--documenter-dark .navbar.is-black .navbar-burger { - color: white; } - @media screen and (min-width: 1056px) { - html.theme--documenter-dark .navbar.is-black .navbar-start > .navbar-item, - html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link, - html.theme--documenter-dark .navbar.is-black .navbar-end > .navbar-item, - html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link { - color: white; } - html.theme--documenter-dark .navbar.is-black .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-black .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-black .navbar-start > a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:focus, - html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:hover, - html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link.is-active, - html.theme--documenter-dark .navbar.is-black .navbar-end > a.navbar-item:focus, - html.theme--documenter-dark .navbar.is-black .navbar-end > a.navbar-item:hover, - html.theme--documenter-dark .navbar.is-black .navbar-end > a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:focus, - html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:hover, - html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link.is-active { - background-color: black; - color: white; } - html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link::after, - html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link::after { - border-color: white; } - html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link, - html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link, - html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link { - background-color: black; - color: white; } - html.theme--documenter-dark .navbar.is-black .navbar-dropdown a.navbar-item.is-active { - background-color: #0a0a0a; - color: white; } } - html.theme--documenter-dark .navbar.is-light { - background-color: #ecf0f1; - color: #282f2f; } - html.theme--documenter-dark .navbar.is-light .navbar-brand > .navbar-item, - html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link { - color: #282f2f; } - html.theme--documenter-dark .navbar.is-light .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-light .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-light .navbar-brand > a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:focus, - html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:hover, - html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link.is-active { - background-color: #dde4e6; - color: #282f2f; } - html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link::after { - border-color: #282f2f; } - html.theme--documenter-dark .navbar.is-light .navbar-burger { - color: #282f2f; } - @media screen and (min-width: 1056px) { - html.theme--documenter-dark .navbar.is-light .navbar-start > .navbar-item, - html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link, - html.theme--documenter-dark .navbar.is-light .navbar-end > .navbar-item, - html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link { - color: #282f2f; } - html.theme--documenter-dark .navbar.is-light .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-light .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-light .navbar-start > a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:focus, - html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:hover, - html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link.is-active, - html.theme--documenter-dark .navbar.is-light .navbar-end > a.navbar-item:focus, - html.theme--documenter-dark .navbar.is-light .navbar-end > a.navbar-item:hover, - html.theme--documenter-dark .navbar.is-light .navbar-end > a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:focus, - html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:hover, - html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link.is-active { - background-color: #dde4e6; - color: #282f2f; } - html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link::after, - html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link::after { - border-color: #282f2f; } - html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link, - html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link, - html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #dde4e6; - color: #282f2f; } - html.theme--documenter-dark .navbar.is-light .navbar-dropdown a.navbar-item.is-active { - background-color: #ecf0f1; - color: #282f2f; } } - html.theme--documenter-dark .navbar.is-dark, html.theme--documenter-dark .content kbd.navbar { - background-color: #282f2f; - color: #ecf0f1; } - html.theme--documenter-dark .navbar.is-dark .navbar-brand > .navbar-item, html.theme--documenter-dark .content kbd.navbar .navbar-brand > .navbar-item, - html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link, - html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link { - color: #ecf0f1; } - html.theme--documenter-dark .navbar.is-dark .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .content kbd.navbar .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-dark .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .content kbd.navbar .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-dark .navbar-brand > a.navbar-item.is-active, html.theme--documenter-dark .content kbd.navbar .navbar-brand > a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:focus, - html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:focus, - html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:hover, - html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:hover, - html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link.is-active, - html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link.is-active { - background-color: #1d2122; - color: #ecf0f1; } - html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link::after, html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link::after { - border-color: #ecf0f1; } - html.theme--documenter-dark .navbar.is-dark .navbar-burger, html.theme--documenter-dark .content kbd.navbar .navbar-burger { - color: #ecf0f1; } - @media screen and (min-width: 1056px) { - html.theme--documenter-dark .navbar.is-dark .navbar-start > .navbar-item, html.theme--documenter-dark .content kbd.navbar .navbar-start > .navbar-item, - html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link, - html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link, - html.theme--documenter-dark .navbar.is-dark .navbar-end > .navbar-item, - html.theme--documenter-dark .content kbd.navbar .navbar-end > .navbar-item, - html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link, - html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link { - color: #ecf0f1; } - html.theme--documenter-dark .navbar.is-dark .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .content kbd.navbar .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-dark .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .content kbd.navbar .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-dark .navbar-start > a.navbar-item.is-active, html.theme--documenter-dark .content kbd.navbar .navbar-start > a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:focus, - html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:focus, - html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:hover, - html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:hover, - html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link.is-active, - html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link.is-active, - html.theme--documenter-dark .navbar.is-dark .navbar-end > a.navbar-item:focus, - html.theme--documenter-dark .content kbd.navbar .navbar-end > a.navbar-item:focus, - html.theme--documenter-dark .navbar.is-dark .navbar-end > a.navbar-item:hover, - html.theme--documenter-dark .content kbd.navbar .navbar-end > a.navbar-item:hover, - html.theme--documenter-dark .navbar.is-dark .navbar-end > a.navbar-item.is-active, - html.theme--documenter-dark .content kbd.navbar .navbar-end > a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:focus, - html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:focus, - html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:hover, - html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:hover, - html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link.is-active, - html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link.is-active { - background-color: #1d2122; - color: #ecf0f1; } - html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link::after, html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link::after, - html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link::after, - html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link::after { - border-color: #ecf0f1; } - html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link, html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link, - html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link, - html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link, - html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link, - html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #1d2122; - color: #ecf0f1; } - html.theme--documenter-dark .navbar.is-dark .navbar-dropdown a.navbar-item.is-active, html.theme--documenter-dark .content kbd.navbar .navbar-dropdown a.navbar-item.is-active { - background-color: #282f2f; - color: #ecf0f1; } } - html.theme--documenter-dark .navbar.is-primary, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink { - background-color: #375a7f; - color: #fff; } - html.theme--documenter-dark .navbar.is-primary .navbar-brand > .navbar-item, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand > .navbar-item, - html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link, - html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link { - color: #fff; } - html.theme--documenter-dark .navbar.is-primary .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-primary .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-primary .navbar-brand > a.navbar-item.is-active, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand > a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:focus, - html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus, - html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:hover, - html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover, - html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link.is-active, - html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active { - background-color: #2f4d6d; - color: #fff; } - html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link::after, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link::after { - border-color: #fff; } - html.theme--documenter-dark .navbar.is-primary .navbar-burger, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-burger { - color: #fff; } - @media screen and (min-width: 1056px) { - html.theme--documenter-dark .navbar.is-primary .navbar-start > .navbar-item, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start > .navbar-item, - html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link, - html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link, - html.theme--documenter-dark .navbar.is-primary .navbar-end > .navbar-item, - html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end > .navbar-item, - html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link, - html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link { - color: #fff; } - html.theme--documenter-dark .navbar.is-primary .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-primary .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-primary .navbar-start > a.navbar-item.is-active, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start > a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:focus, - html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link:focus, - html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:hover, - html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link:hover, - html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link.is-active, - html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active, - html.theme--documenter-dark .navbar.is-primary .navbar-end > a.navbar-item:focus, - html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end > a.navbar-item:focus, - html.theme--documenter-dark .navbar.is-primary .navbar-end > a.navbar-item:hover, - html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end > a.navbar-item:hover, - html.theme--documenter-dark .navbar.is-primary .navbar-end > a.navbar-item.is-active, - html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end > a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:focus, - html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link:focus, - html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:hover, - html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link:hover, - html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link.is-active, - html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active { - background-color: #2f4d6d; - color: #fff; } - html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link::after, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link::after, - html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link::after, - html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link::after { - border-color: #fff; } - html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link, - html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link, - html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link, - html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link, - html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #2f4d6d; - color: #fff; } - html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active { - background-color: #375a7f; - color: #fff; } } - html.theme--documenter-dark .navbar.is-link { - background-color: #1abc9c; - color: #fff; } - html.theme--documenter-dark .navbar.is-link .navbar-brand > .navbar-item, - html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link { - color: #fff; } - html.theme--documenter-dark .navbar.is-link .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-link .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-link .navbar-brand > a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:focus, - html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:hover, - html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link.is-active { - background-color: #17a689; - color: #fff; } - html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link::after { - border-color: #fff; } - html.theme--documenter-dark .navbar.is-link .navbar-burger { - color: #fff; } - @media screen and (min-width: 1056px) { - html.theme--documenter-dark .navbar.is-link .navbar-start > .navbar-item, - html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link, - html.theme--documenter-dark .navbar.is-link .navbar-end > .navbar-item, - html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link { - color: #fff; } - html.theme--documenter-dark .navbar.is-link .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-link .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-link .navbar-start > a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:focus, - html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:hover, - html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link.is-active, - html.theme--documenter-dark .navbar.is-link .navbar-end > a.navbar-item:focus, - html.theme--documenter-dark .navbar.is-link .navbar-end > a.navbar-item:hover, - html.theme--documenter-dark .navbar.is-link .navbar-end > a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:focus, - html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:hover, - html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link.is-active { - background-color: #17a689; - color: #fff; } - html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link::after, - html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link::after { - border-color: #fff; } - html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link, - html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link, - html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #17a689; - color: #fff; } - html.theme--documenter-dark .navbar.is-link .navbar-dropdown a.navbar-item.is-active { - background-color: #1abc9c; - color: #fff; } } - html.theme--documenter-dark .navbar.is-info { - background-color: #024c7d; - color: #fff; } - html.theme--documenter-dark .navbar.is-info .navbar-brand > .navbar-item, - html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link { - color: #fff; } - html.theme--documenter-dark .navbar.is-info .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-info .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-info .navbar-brand > a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:focus, - html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:hover, - html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link.is-active { - background-color: #023d64; - color: #fff; } - html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link::after { - border-color: #fff; } - html.theme--documenter-dark .navbar.is-info .navbar-burger { - color: #fff; } - @media screen and (min-width: 1056px) { - html.theme--documenter-dark .navbar.is-info .navbar-start > .navbar-item, - html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link, - html.theme--documenter-dark .navbar.is-info .navbar-end > .navbar-item, - html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link { - color: #fff; } - html.theme--documenter-dark .navbar.is-info .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-info .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-info .navbar-start > a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:focus, - html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:hover, - html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link.is-active, - html.theme--documenter-dark .navbar.is-info .navbar-end > a.navbar-item:focus, - html.theme--documenter-dark .navbar.is-info .navbar-end > a.navbar-item:hover, - html.theme--documenter-dark .navbar.is-info .navbar-end > a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:focus, - html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:hover, - html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link.is-active { - background-color: #023d64; - color: #fff; } - html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link::after, - html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link::after { - border-color: #fff; } - html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link, - html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link, - html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #023d64; - color: #fff; } - html.theme--documenter-dark .navbar.is-info .navbar-dropdown a.navbar-item.is-active { - background-color: #024c7d; - color: #fff; } } - html.theme--documenter-dark .navbar.is-success { - background-color: #008438; - color: #fff; } - html.theme--documenter-dark .navbar.is-success .navbar-brand > .navbar-item, - html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link { - color: #fff; } - html.theme--documenter-dark .navbar.is-success .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-success .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-success .navbar-brand > a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:focus, - html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:hover, - html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link.is-active { - background-color: #006b2d; - color: #fff; } - html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link::after { - border-color: #fff; } - html.theme--documenter-dark .navbar.is-success .navbar-burger { - color: #fff; } - @media screen and (min-width: 1056px) { - html.theme--documenter-dark .navbar.is-success .navbar-start > .navbar-item, - html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link, - html.theme--documenter-dark .navbar.is-success .navbar-end > .navbar-item, - html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link { - color: #fff; } - html.theme--documenter-dark .navbar.is-success .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-success .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-success .navbar-start > a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:focus, - html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:hover, - html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link.is-active, - html.theme--documenter-dark .navbar.is-success .navbar-end > a.navbar-item:focus, - html.theme--documenter-dark .navbar.is-success .navbar-end > a.navbar-item:hover, - html.theme--documenter-dark .navbar.is-success .navbar-end > a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:focus, - html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:hover, - html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link.is-active { - background-color: #006b2d; - color: #fff; } - html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link::after, - html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link::after { - border-color: #fff; } - html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link, - html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link, - html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #006b2d; - color: #fff; } - html.theme--documenter-dark .navbar.is-success .navbar-dropdown a.navbar-item.is-active { - background-color: #008438; - color: #fff; } } - html.theme--documenter-dark .navbar.is-warning { - background-color: #ad8100; - color: #fff; } - html.theme--documenter-dark .navbar.is-warning .navbar-brand > .navbar-item, - html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link { - color: #fff; } - html.theme--documenter-dark .navbar.is-warning .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-warning .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-warning .navbar-brand > a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:focus, - html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:hover, - html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link.is-active { - background-color: #946e00; - color: #fff; } - html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link::after { - border-color: #fff; } - html.theme--documenter-dark .navbar.is-warning .navbar-burger { - color: #fff; } - @media screen and (min-width: 1056px) { - html.theme--documenter-dark .navbar.is-warning .navbar-start > .navbar-item, - html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link, - html.theme--documenter-dark .navbar.is-warning .navbar-end > .navbar-item, - html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link { - color: #fff; } - html.theme--documenter-dark .navbar.is-warning .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-warning .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-warning .navbar-start > a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:focus, - html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:hover, - html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link.is-active, - html.theme--documenter-dark .navbar.is-warning .navbar-end > a.navbar-item:focus, - html.theme--documenter-dark .navbar.is-warning .navbar-end > a.navbar-item:hover, - html.theme--documenter-dark .navbar.is-warning .navbar-end > a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:focus, - html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:hover, - html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link.is-active { - background-color: #946e00; - color: #fff; } - html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link::after, - html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link::after { - border-color: #fff; } - html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link, - html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link, - html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #946e00; - color: #fff; } - html.theme--documenter-dark .navbar.is-warning .navbar-dropdown a.navbar-item.is-active { - background-color: #ad8100; - color: #fff; } } - html.theme--documenter-dark .navbar.is-danger { - background-color: #9e1b0d; - color: #fff; } - html.theme--documenter-dark .navbar.is-danger .navbar-brand > .navbar-item, - html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link { - color: #fff; } - html.theme--documenter-dark .navbar.is-danger .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-danger .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-danger .navbar-brand > a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:focus, - html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:hover, - html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link.is-active { - background-color: #86170b; - color: #fff; } - html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link::after { - border-color: #fff; } - html.theme--documenter-dark .navbar.is-danger .navbar-burger { - color: #fff; } - @media screen and (min-width: 1056px) { - html.theme--documenter-dark .navbar.is-danger .navbar-start > .navbar-item, - html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link, - html.theme--documenter-dark .navbar.is-danger .navbar-end > .navbar-item, - html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link { - color: #fff; } - html.theme--documenter-dark .navbar.is-danger .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-danger .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-danger .navbar-start > a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:focus, - html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:hover, - html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link.is-active, - html.theme--documenter-dark .navbar.is-danger .navbar-end > a.navbar-item:focus, - html.theme--documenter-dark .navbar.is-danger .navbar-end > a.navbar-item:hover, - html.theme--documenter-dark .navbar.is-danger .navbar-end > a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:focus, - html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:hover, - html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link.is-active { - background-color: #86170b; - color: #fff; } - html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link::after, - html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link::after { - border-color: #fff; } - html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link, - html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link, - html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #86170b; - color: #fff; } - html.theme--documenter-dark .navbar.is-danger .navbar-dropdown a.navbar-item.is-active { - background-color: #9e1b0d; - color: #fff; } } - html.theme--documenter-dark .navbar > .container { - align-items: stretch; - display: flex; - min-height: 4rem; - width: 100%; } - html.theme--documenter-dark .navbar.has-shadow { - box-shadow: 0 2px 0 0 #282f2f; } - html.theme--documenter-dark .navbar.is-fixed-bottom, html.theme--documenter-dark .navbar.is-fixed-top { - left: 0; - position: fixed; - right: 0; - z-index: 30; } - html.theme--documenter-dark .navbar.is-fixed-bottom { - bottom: 0; } - html.theme--documenter-dark .navbar.is-fixed-bottom.has-shadow { - box-shadow: 0 -2px 0 0 #282f2f; } - html.theme--documenter-dark .navbar.is-fixed-top { - top: 0; } - html.theme--documenter-dark html.has-navbar-fixed-top, - html.theme--documenter-dark body.has-navbar-fixed-top { - padding-top: 4rem; } - html.theme--documenter-dark html.has-navbar-fixed-bottom, - html.theme--documenter-dark body.has-navbar-fixed-bottom { - padding-bottom: 4rem; } - html.theme--documenter-dark .navbar-brand, - html.theme--documenter-dark .navbar-tabs { - align-items: stretch; - display: flex; - flex-shrink: 0; - min-height: 4rem; } - html.theme--documenter-dark .navbar-brand a.navbar-item:focus, html.theme--documenter-dark .navbar-brand a.navbar-item:hover { - background-color: transparent; } - html.theme--documenter-dark .navbar-tabs { - -webkit-overflow-scrolling: touch; - max-width: 100vw; - overflow-x: auto; - overflow-y: hidden; } - html.theme--documenter-dark .navbar-burger { - color: #fff; - cursor: pointer; - display: block; - height: 4rem; - position: relative; - width: 4rem; - margin-left: auto; } - html.theme--documenter-dark .navbar-burger span { - background-color: currentColor; - display: block; - height: 1px; - left: calc(50% - 8px); - position: absolute; - transform-origin: center; - transition-duration: 86ms; - transition-property: background-color, opacity, transform; - transition-timing-function: ease-out; - width: 16px; } - html.theme--documenter-dark .navbar-burger span:nth-child(1) { - top: calc(50% - 6px); } - html.theme--documenter-dark .navbar-burger span:nth-child(2) { - top: calc(50% - 1px); } - html.theme--documenter-dark .navbar-burger span:nth-child(3) { - top: calc(50% + 4px); } - html.theme--documenter-dark .navbar-burger:hover { - background-color: rgba(0, 0, 0, 0.05); } - html.theme--documenter-dark .navbar-burger.is-active span:nth-child(1) { - transform: translateY(5px) rotate(45deg); } - html.theme--documenter-dark .navbar-burger.is-active span:nth-child(2) { - opacity: 0; } - html.theme--documenter-dark .navbar-burger.is-active span:nth-child(3) { - transform: translateY(-5px) rotate(-45deg); } - html.theme--documenter-dark .navbar-menu { - display: none; } - html.theme--documenter-dark .navbar-item, - html.theme--documenter-dark .navbar-link { - color: #fff; - display: block; - line-height: 1.5; - padding: 0.5rem 0.75rem; - position: relative; } - html.theme--documenter-dark .navbar-item .icon:only-child, - html.theme--documenter-dark .navbar-link .icon:only-child { - margin-left: -0.25rem; - margin-right: -0.25rem; } - html.theme--documenter-dark a.navbar-item, - html.theme--documenter-dark .navbar-link { - cursor: pointer; } - html.theme--documenter-dark a.navbar-item:focus, html.theme--documenter-dark a.navbar-item:focus-within, html.theme--documenter-dark a.navbar-item:hover, html.theme--documenter-dark a.navbar-item.is-active, - html.theme--documenter-dark .navbar-link:focus, - html.theme--documenter-dark .navbar-link:focus-within, - html.theme--documenter-dark .navbar-link:hover, - html.theme--documenter-dark .navbar-link.is-active { - background-color: transparent; - color: #1abc9c; } - html.theme--documenter-dark .navbar-item { - display: block; - flex-grow: 0; - flex-shrink: 0; } - html.theme--documenter-dark .navbar-item img { - max-height: 1.75rem; } - html.theme--documenter-dark .navbar-item.has-dropdown { - padding: 0; } - html.theme--documenter-dark .navbar-item.is-expanded { - flex-grow: 1; - flex-shrink: 1; } - html.theme--documenter-dark .navbar-item.is-tab { - border-bottom: 1px solid transparent; - min-height: 4rem; - padding-bottom: calc(0.5rem - 1px); } - html.theme--documenter-dark .navbar-item.is-tab:focus, html.theme--documenter-dark .navbar-item.is-tab:hover { - background-color: transparent; - border-bottom-color: #1abc9c; } - html.theme--documenter-dark .navbar-item.is-tab.is-active { - background-color: transparent; - border-bottom-color: #1abc9c; - border-bottom-style: solid; - border-bottom-width: 3px; - color: #1abc9c; - padding-bottom: calc(0.5rem - 3px); } - html.theme--documenter-dark .navbar-content { - flex-grow: 1; - flex-shrink: 1; } - html.theme--documenter-dark .navbar-link:not(.is-arrowless) { - padding-right: 2.5em; } - html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after { - border-color: #fff; - margin-top: -0.375em; - right: 1.125em; } - html.theme--documenter-dark .navbar-dropdown { - font-size: 0.875rem; - padding-bottom: 0.5rem; - padding-top: 0.5rem; } - html.theme--documenter-dark .navbar-dropdown .navbar-item { - padding-left: 1.5rem; - padding-right: 1.5rem; } - html.theme--documenter-dark .navbar-divider { - background-color: rgba(0, 0, 0, 0.2); - border: none; - display: none; - height: 2px; - margin: 0.5rem 0; } - @media screen and (max-width: 1055px) { - html.theme--documenter-dark .navbar > .container { - display: block; } - html.theme--documenter-dark .navbar-brand .navbar-item, - html.theme--documenter-dark .navbar-tabs .navbar-item { - align-items: center; - display: flex; } - html.theme--documenter-dark .navbar-link::after { - display: none; } - html.theme--documenter-dark .navbar-menu { - background-color: #375a7f; - box-shadow: 0 8px 16px rgba(10, 10, 10, 0.1); - padding: 0.5rem 0; } - html.theme--documenter-dark .navbar-menu.is-active { - display: block; } - html.theme--documenter-dark .navbar.is-fixed-bottom-touch, html.theme--documenter-dark .navbar.is-fixed-top-touch { - left: 0; - position: fixed; - right: 0; - z-index: 30; } - html.theme--documenter-dark .navbar.is-fixed-bottom-touch { - bottom: 0; } - html.theme--documenter-dark .navbar.is-fixed-bottom-touch.has-shadow { - box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); } - html.theme--documenter-dark .navbar.is-fixed-top-touch { - top: 0; } - html.theme--documenter-dark .navbar.is-fixed-top .navbar-menu, html.theme--documenter-dark .navbar.is-fixed-top-touch .navbar-menu { - -webkit-overflow-scrolling: touch; - max-height: calc(100vh - 4rem); - overflow: auto; } - html.theme--documenter-dark html.has-navbar-fixed-top-touch, - html.theme--documenter-dark body.has-navbar-fixed-top-touch { - padding-top: 4rem; } - html.theme--documenter-dark html.has-navbar-fixed-bottom-touch, - html.theme--documenter-dark body.has-navbar-fixed-bottom-touch { - padding-bottom: 4rem; } } - @media screen and (min-width: 1056px) { - html.theme--documenter-dark .navbar, - html.theme--documenter-dark .navbar-menu, - html.theme--documenter-dark .navbar-start, - html.theme--documenter-dark .navbar-end { - align-items: stretch; - display: flex; } - html.theme--documenter-dark .navbar { - min-height: 4rem; } - html.theme--documenter-dark .navbar.is-spaced { - padding: 1rem 2rem; } - html.theme--documenter-dark .navbar.is-spaced .navbar-start, - html.theme--documenter-dark .navbar.is-spaced .navbar-end { - align-items: center; } - html.theme--documenter-dark .navbar.is-spaced a.navbar-item, - html.theme--documenter-dark .navbar.is-spaced .navbar-link { - border-radius: 0.4em; } - html.theme--documenter-dark .navbar.is-transparent a.navbar-item:focus, html.theme--documenter-dark .navbar.is-transparent a.navbar-item:hover, html.theme--documenter-dark .navbar.is-transparent a.navbar-item.is-active, - html.theme--documenter-dark .navbar.is-transparent .navbar-link:focus, - html.theme--documenter-dark .navbar.is-transparent .navbar-link:hover, - html.theme--documenter-dark .navbar.is-transparent .navbar-link.is-active { - background-color: transparent !important; } - html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link, html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link, html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link, html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link { - background-color: transparent !important; } - html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:focus, html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:hover { - background-color: transparent; - color: #dbdee0; } - html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active { - background-color: transparent; - color: #1abc9c; } - html.theme--documenter-dark .navbar-burger { - display: none; } - html.theme--documenter-dark .navbar-item, - html.theme--documenter-dark .navbar-link { - align-items: center; - display: flex; } - html.theme--documenter-dark .navbar-item { - display: flex; } - html.theme--documenter-dark .navbar-item.has-dropdown { - align-items: stretch; } - html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-link::after { - transform: rotate(135deg) translate(0.25em, -0.25em); } - html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-dropdown { - border-bottom: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 8px 8px 0 0; - border-top: none; - bottom: 100%; - box-shadow: 0 -8px 8px rgba(10, 10, 10, 0.1); - top: auto; } - html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown { - display: block; } - .navbar.is-spaced html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown.is-boxed, .navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed, .navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed, .navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed { - opacity: 1; - pointer-events: auto; - transform: translateY(0); } - html.theme--documenter-dark .navbar-menu { - flex-grow: 1; - flex-shrink: 0; } - html.theme--documenter-dark .navbar-start { - justify-content: flex-start; - margin-right: auto; } - html.theme--documenter-dark .navbar-end { - justify-content: flex-end; - margin-left: auto; } - html.theme--documenter-dark .navbar-dropdown { - background-color: #375a7f; - border-bottom-left-radius: 8px; - border-bottom-right-radius: 8px; - border-top: 1px solid rgba(0, 0, 0, 0.2); - box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1); - display: none; - font-size: 0.875rem; - left: 0; - min-width: 100%; - position: absolute; - top: 100%; - z-index: 20; } - html.theme--documenter-dark .navbar-dropdown .navbar-item { - padding: 0.375rem 1rem; - white-space: nowrap; } - html.theme--documenter-dark .navbar-dropdown a.navbar-item { - padding-right: 3rem; } - html.theme--documenter-dark .navbar-dropdown a.navbar-item:focus, html.theme--documenter-dark .navbar-dropdown a.navbar-item:hover { - background-color: transparent; - color: #dbdee0; } - html.theme--documenter-dark .navbar-dropdown a.navbar-item.is-active { - background-color: transparent; - color: #1abc9c; } - .navbar.is-spaced html.theme--documenter-dark .navbar-dropdown, html.theme--documenter-dark .navbar-dropdown.is-boxed { - border-radius: 8px; - border-top: none; - box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); - display: block; - opacity: 0; - pointer-events: none; - top: calc(100% + (-4px)); - transform: translateY(-5px); - transition-duration: 86ms; - transition-property: opacity, transform; } - html.theme--documenter-dark .navbar-dropdown.is-right { - left: auto; - right: 0; } - html.theme--documenter-dark .navbar-divider { - display: block; } - html.theme--documenter-dark .navbar > .container .navbar-brand, - html.theme--documenter-dark .container > .navbar .navbar-brand { - margin-left: -.75rem; } - html.theme--documenter-dark .navbar > .container .navbar-menu, - html.theme--documenter-dark .container > .navbar .navbar-menu { - margin-right: -.75rem; } - html.theme--documenter-dark .navbar.is-fixed-bottom-desktop, html.theme--documenter-dark .navbar.is-fixed-top-desktop { - left: 0; - position: fixed; - right: 0; - z-index: 30; } - html.theme--documenter-dark .navbar.is-fixed-bottom-desktop { - bottom: 0; } - html.theme--documenter-dark .navbar.is-fixed-bottom-desktop.has-shadow { - box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); } - html.theme--documenter-dark .navbar.is-fixed-top-desktop { - top: 0; } - html.theme--documenter-dark html.has-navbar-fixed-top-desktop, - html.theme--documenter-dark body.has-navbar-fixed-top-desktop { - padding-top: 4rem; } - html.theme--documenter-dark html.has-navbar-fixed-bottom-desktop, - html.theme--documenter-dark body.has-navbar-fixed-bottom-desktop { - padding-bottom: 4rem; } - html.theme--documenter-dark html.has-spaced-navbar-fixed-top, - html.theme--documenter-dark body.has-spaced-navbar-fixed-top { - padding-top: 6rem; } - html.theme--documenter-dark html.has-spaced-navbar-fixed-bottom, - html.theme--documenter-dark body.has-spaced-navbar-fixed-bottom { - padding-bottom: 6rem; } - html.theme--documenter-dark a.navbar-item.is-active, - html.theme--documenter-dark .navbar-link.is-active { - color: #1abc9c; } - html.theme--documenter-dark a.navbar-item.is-active:not(:focus):not(:hover), - html.theme--documenter-dark .navbar-link.is-active:not(:focus):not(:hover) { - background-color: transparent; } - html.theme--documenter-dark .navbar-item.has-dropdown:focus .navbar-link, html.theme--documenter-dark .navbar-item.has-dropdown:hover .navbar-link, html.theme--documenter-dark .navbar-item.has-dropdown.is-active .navbar-link { - background-color: transparent; } } - html.theme--documenter-dark .hero.is-fullheight-with-navbar { - min-height: calc(100vh - 4rem); } - html.theme--documenter-dark .pagination { - font-size: 15px; - margin: -0.25rem; } - html.theme--documenter-dark .pagination.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.pagination { - font-size: 0.85em; } - html.theme--documenter-dark .pagination.is-medium { - font-size: 1.25rem; } - html.theme--documenter-dark .pagination.is-large { - font-size: 1.5rem; } - html.theme--documenter-dark .pagination.is-rounded .pagination-previous, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.pagination .pagination-previous, - html.theme--documenter-dark .pagination.is-rounded .pagination-next, - html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.pagination .pagination-next { - padding-left: 1em; - padding-right: 1em; - border-radius: 290486px; } - html.theme--documenter-dark .pagination.is-rounded .pagination-link, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.pagination .pagination-link { - border-radius: 290486px; } - html.theme--documenter-dark .pagination, - html.theme--documenter-dark .pagination-list { - align-items: center; - display: flex; - justify-content: center; - text-align: center; } - html.theme--documenter-dark .pagination-previous, - html.theme--documenter-dark .pagination-next, - html.theme--documenter-dark .pagination-link, - html.theme--documenter-dark .pagination-ellipsis { - font-size: 1em; - justify-content: center; - margin: 0.25rem; - padding-left: 0.5em; - padding-right: 0.5em; - text-align: center; } - html.theme--documenter-dark .pagination-previous, - html.theme--documenter-dark .pagination-next, - html.theme--documenter-dark .pagination-link { - border-color: #5e6d6f; - color: #1abc9c; - min-width: 2.25em; } - html.theme--documenter-dark .pagination-previous:hover, - html.theme--documenter-dark .pagination-next:hover, - html.theme--documenter-dark .pagination-link:hover { - border-color: #8c9b9d; - color: #1dd2af; } - html.theme--documenter-dark .pagination-previous:focus, - html.theme--documenter-dark .pagination-next:focus, - html.theme--documenter-dark .pagination-link:focus { - border-color: #8c9b9d; } - html.theme--documenter-dark .pagination-previous:active, - html.theme--documenter-dark .pagination-next:active, - html.theme--documenter-dark .pagination-link:active { - box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2); } - html.theme--documenter-dark .pagination-previous[disabled], - html.theme--documenter-dark .pagination-next[disabled], - html.theme--documenter-dark .pagination-link[disabled] { - background-color: #dbdee0; - border-color: #dbdee0; - box-shadow: none; - color: #5e6d6f; - opacity: 0.5; } - html.theme--documenter-dark .pagination-previous, - html.theme--documenter-dark .pagination-next { - padding-left: 0.75em; - padding-right: 0.75em; - white-space: nowrap; } - html.theme--documenter-dark .pagination-link.is-current { - background-color: #1abc9c; - border-color: #1abc9c; - color: #fff; } - html.theme--documenter-dark .pagination-ellipsis { - color: #8c9b9d; - pointer-events: none; } - html.theme--documenter-dark .pagination-list { - flex-wrap: wrap; } - @media screen and (max-width: 768px) { - html.theme--documenter-dark .pagination { - flex-wrap: wrap; } - html.theme--documenter-dark .pagination-previous, - html.theme--documenter-dark .pagination-next { - flex-grow: 1; - flex-shrink: 1; } - html.theme--documenter-dark .pagination-list li { - flex-grow: 1; - flex-shrink: 1; } } - @media screen and (min-width: 769px), print { - html.theme--documenter-dark .pagination-list { - flex-grow: 1; - flex-shrink: 1; - justify-content: flex-start; - order: 1; } - html.theme--documenter-dark .pagination-previous { - order: 2; } - html.theme--documenter-dark .pagination-next { - order: 3; } - html.theme--documenter-dark .pagination { - justify-content: space-between; } - html.theme--documenter-dark .pagination.is-centered .pagination-previous { - order: 1; } - html.theme--documenter-dark .pagination.is-centered .pagination-list { - justify-content: center; - order: 2; } - html.theme--documenter-dark .pagination.is-centered .pagination-next { - order: 3; } - html.theme--documenter-dark .pagination.is-right .pagination-previous { - order: 1; } - html.theme--documenter-dark .pagination.is-right .pagination-next { - order: 2; } - html.theme--documenter-dark .pagination.is-right .pagination-list { - justify-content: flex-end; - order: 3; } } - html.theme--documenter-dark .panel { - font-size: 15px; } - html.theme--documenter-dark .panel:not(:last-child) { - margin-bottom: 1.5rem; } - html.theme--documenter-dark .panel-heading, - html.theme--documenter-dark .panel-tabs, - html.theme--documenter-dark .panel-block { - border-bottom: 1px solid #5e6d6f; - border-left: 1px solid #5e6d6f; - border-right: 1px solid #5e6d6f; } - html.theme--documenter-dark .panel-heading:first-child, - html.theme--documenter-dark .panel-tabs:first-child, - html.theme--documenter-dark .panel-block:first-child { - border-top: 1px solid #5e6d6f; } - html.theme--documenter-dark .panel-heading { - background-color: #282f2f; - border-radius: 0.4em 0.4em 0 0; - color: #f2f2f2; - font-size: 1.25em; - font-weight: 300; - line-height: 1.25; - padding: 0.5em 0.75em; } - html.theme--documenter-dark .panel-tabs { - align-items: flex-end; - display: flex; - font-size: 0.875em; - justify-content: center; } - html.theme--documenter-dark .panel-tabs a { - border-bottom: 1px solid #5e6d6f; - margin-bottom: -1px; - padding: 0.5em; } - html.theme--documenter-dark .panel-tabs a.is-active { - border-bottom-color: #343c3d; - color: #17a689; } - html.theme--documenter-dark .panel-list a { - color: #fff; } - html.theme--documenter-dark .panel-list a:hover { - color: #1abc9c; } - html.theme--documenter-dark .panel-block { - align-items: center; - color: #f2f2f2; - display: flex; - justify-content: flex-start; - padding: 0.5em 0.75em; } - html.theme--documenter-dark .panel-block input[type="checkbox"] { - margin-right: 0.75em; } - html.theme--documenter-dark .panel-block > .control { - flex-grow: 1; - flex-shrink: 1; - width: 100%; } - html.theme--documenter-dark .panel-block.is-wrapped { - flex-wrap: wrap; } - html.theme--documenter-dark .panel-block.is-active { - border-left-color: #1abc9c; - color: #17a689; } - html.theme--documenter-dark .panel-block.is-active .panel-icon { - color: #1abc9c; } - html.theme--documenter-dark a.panel-block, - html.theme--documenter-dark label.panel-block { - cursor: pointer; } - html.theme--documenter-dark a.panel-block:hover, - html.theme--documenter-dark label.panel-block:hover { - background-color: #282f2f; } - html.theme--documenter-dark .panel-icon { - display: inline-block; - font-size: 14px; - height: 1em; - line-height: 1em; - text-align: center; - vertical-align: top; - width: 1em; - color: white; - margin-right: 0.75em; } - html.theme--documenter-dark .panel-icon .fa { - font-size: inherit; - line-height: inherit; } - html.theme--documenter-dark .tabs { - -webkit-overflow-scrolling: touch; - align-items: stretch; - display: flex; - font-size: 15px; - justify-content: space-between; - overflow: hidden; - overflow-x: auto; - white-space: nowrap; } - html.theme--documenter-dark .tabs a { - align-items: center; - border-bottom-color: #5e6d6f; - border-bottom-style: solid; - border-bottom-width: 1px; - color: #fff; - display: flex; - justify-content: center; - margin-bottom: -1px; - padding: 0.5em 1em; - vertical-align: top; } - html.theme--documenter-dark .tabs a:hover { - border-bottom-color: #f2f2f2; - color: #f2f2f2; } - html.theme--documenter-dark .tabs li { - display: block; } - html.theme--documenter-dark .tabs li.is-active a { - border-bottom-color: #1abc9c; - color: #1abc9c; } - html.theme--documenter-dark .tabs ul { - align-items: center; - border-bottom-color: #5e6d6f; - border-bottom-style: solid; - border-bottom-width: 1px; - display: flex; - flex-grow: 1; - flex-shrink: 0; - justify-content: flex-start; } - html.theme--documenter-dark .tabs ul.is-left { - padding-right: 0.75em; } - html.theme--documenter-dark .tabs ul.is-center { - flex: none; - justify-content: center; - padding-left: 0.75em; - padding-right: 0.75em; } - html.theme--documenter-dark .tabs ul.is-right { - justify-content: flex-end; - padding-left: 0.75em; } - html.theme--documenter-dark .tabs .icon:first-child { - margin-right: 0.5em; } - html.theme--documenter-dark .tabs .icon:last-child { - margin-left: 0.5em; } - html.theme--documenter-dark .tabs.is-centered ul { - justify-content: center; } - html.theme--documenter-dark .tabs.is-right ul { - justify-content: flex-end; } - html.theme--documenter-dark .tabs.is-boxed a { - border: 1px solid transparent; - border-radius: 0.4em 0.4em 0 0; } - html.theme--documenter-dark .tabs.is-boxed a:hover { - background-color: #282f2f; - border-bottom-color: #5e6d6f; } - html.theme--documenter-dark .tabs.is-boxed li.is-active a { - background-color: white; - border-color: #5e6d6f; - border-bottom-color: transparent !important; } - html.theme--documenter-dark .tabs.is-fullwidth li { - flex-grow: 1; - flex-shrink: 0; } - html.theme--documenter-dark .tabs.is-toggle a { - border-color: #5e6d6f; - border-style: solid; - border-width: 1px; - margin-bottom: 0; - position: relative; } - html.theme--documenter-dark .tabs.is-toggle a:hover { - background-color: #282f2f; - border-color: #8c9b9d; - z-index: 2; } - html.theme--documenter-dark .tabs.is-toggle li + li { - margin-left: -1px; } - html.theme--documenter-dark .tabs.is-toggle li:first-child a { - border-radius: 0.4em 0 0 0.4em; } - html.theme--documenter-dark .tabs.is-toggle li:last-child a { - border-radius: 0 0.4em 0.4em 0; } - html.theme--documenter-dark .tabs.is-toggle li.is-active a { - background-color: #1abc9c; - border-color: #1abc9c; - color: #fff; - z-index: 1; } - html.theme--documenter-dark .tabs.is-toggle ul { - border-bottom: none; } - html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:first-child a { - border-bottom-left-radius: 290486px; - border-top-left-radius: 290486px; - padding-left: 1.25em; } - html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:last-child a { - border-bottom-right-radius: 290486px; - border-top-right-radius: 290486px; - padding-right: 1.25em; } - html.theme--documenter-dark .tabs.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.tabs { - font-size: 0.85em; } - html.theme--documenter-dark .tabs.is-medium { - font-size: 1.25rem; } - html.theme--documenter-dark .tabs.is-large { - font-size: 1.5rem; } - html.theme--documenter-dark .column { - display: block; - flex-basis: 0; - flex-grow: 1; - flex-shrink: 1; - padding: 0.75rem; } - .columns.is-mobile > html.theme--documenter-dark .column.is-narrow { - flex: none; } - .columns.is-mobile > html.theme--documenter-dark .column.is-full { - flex: none; - width: 100%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-three-quarters { - flex: none; - width: 75%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-two-thirds { - flex: none; - width: 66.6666%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-half { - flex: none; - width: 50%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-one-third { - flex: none; - width: 33.3333%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-one-quarter { - flex: none; - width: 25%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-one-fifth { - flex: none; - width: 20%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-two-fifths { - flex: none; - width: 40%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-three-fifths { - flex: none; - width: 60%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-four-fifths { - flex: none; - width: 80%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-offset-three-quarters { - margin-left: 75%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-offset-two-thirds { - margin-left: 66.6666%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-offset-half { - margin-left: 50%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-offset-one-third { - margin-left: 33.3333%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-offset-one-quarter { - margin-left: 25%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-offset-one-fifth { - margin-left: 20%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-offset-two-fifths { - margin-left: 40%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-offset-three-fifths { - margin-left: 60%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-offset-four-fifths { - margin-left: 80%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-0 { - flex: none; - width: 0%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-offset-0 { - margin-left: 0%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-1 { - flex: none; - width: 8.33333%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-offset-1 { - margin-left: 8.33333%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-2 { - flex: none; - width: 16.66667%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-offset-2 { - margin-left: 16.66667%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-3 { - flex: none; - width: 25%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-offset-3 { - margin-left: 25%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-4 { - flex: none; - width: 33.33333%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-offset-4 { - margin-left: 33.33333%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-5 { - flex: none; - width: 41.66667%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-offset-5 { - margin-left: 41.66667%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-6 { - flex: none; - width: 50%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-offset-6 { - margin-left: 50%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-7 { - flex: none; - width: 58.33333%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-offset-7 { - margin-left: 58.33333%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-8 { - flex: none; - width: 66.66667%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-offset-8 { - margin-left: 66.66667%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-9 { - flex: none; - width: 75%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-offset-9 { - margin-left: 75%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-10 { - flex: none; - width: 83.33333%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-offset-10 { - margin-left: 83.33333%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-11 { - flex: none; - width: 91.66667%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-offset-11 { - margin-left: 91.66667%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-12 { - flex: none; - width: 100%; } - .columns.is-mobile > html.theme--documenter-dark .column.is-offset-12 { - margin-left: 100%; } - @media screen and (max-width: 768px) { - html.theme--documenter-dark .column.is-narrow-mobile { - flex: none; } - html.theme--documenter-dark .column.is-full-mobile { - flex: none; - width: 100%; } - html.theme--documenter-dark .column.is-three-quarters-mobile { - flex: none; - width: 75%; } - html.theme--documenter-dark .column.is-two-thirds-mobile { - flex: none; - width: 66.6666%; } - html.theme--documenter-dark .column.is-half-mobile { - flex: none; - width: 50%; } - html.theme--documenter-dark .column.is-one-third-mobile { - flex: none; - width: 33.3333%; } - html.theme--documenter-dark .column.is-one-quarter-mobile { - flex: none; - width: 25%; } - html.theme--documenter-dark .column.is-one-fifth-mobile { - flex: none; - width: 20%; } - html.theme--documenter-dark .column.is-two-fifths-mobile { - flex: none; - width: 40%; } - html.theme--documenter-dark .column.is-three-fifths-mobile { - flex: none; - width: 60%; } - html.theme--documenter-dark .column.is-four-fifths-mobile { - flex: none; - width: 80%; } - html.theme--documenter-dark .column.is-offset-three-quarters-mobile { - margin-left: 75%; } - html.theme--documenter-dark .column.is-offset-two-thirds-mobile { - margin-left: 66.6666%; } - html.theme--documenter-dark .column.is-offset-half-mobile { - margin-left: 50%; } - html.theme--documenter-dark .column.is-offset-one-third-mobile { - margin-left: 33.3333%; } - html.theme--documenter-dark .column.is-offset-one-quarter-mobile { - margin-left: 25%; } - html.theme--documenter-dark .column.is-offset-one-fifth-mobile { - margin-left: 20%; } - html.theme--documenter-dark .column.is-offset-two-fifths-mobile { - margin-left: 40%; } - html.theme--documenter-dark .column.is-offset-three-fifths-mobile { - margin-left: 60%; } - html.theme--documenter-dark .column.is-offset-four-fifths-mobile { - margin-left: 80%; } - html.theme--documenter-dark .column.is-0-mobile { - flex: none; - width: 0%; } - html.theme--documenter-dark .column.is-offset-0-mobile { - margin-left: 0%; } - html.theme--documenter-dark .column.is-1-mobile { - flex: none; - width: 8.33333%; } - html.theme--documenter-dark .column.is-offset-1-mobile { - margin-left: 8.33333%; } - html.theme--documenter-dark .column.is-2-mobile { - flex: none; - width: 16.66667%; } - html.theme--documenter-dark .column.is-offset-2-mobile { - margin-left: 16.66667%; } - html.theme--documenter-dark .column.is-3-mobile { - flex: none; - width: 25%; } - html.theme--documenter-dark .column.is-offset-3-mobile { - margin-left: 25%; } - html.theme--documenter-dark .column.is-4-mobile { - flex: none; - width: 33.33333%; } - html.theme--documenter-dark .column.is-offset-4-mobile { - margin-left: 33.33333%; } - html.theme--documenter-dark .column.is-5-mobile { - flex: none; - width: 41.66667%; } - html.theme--documenter-dark .column.is-offset-5-mobile { - margin-left: 41.66667%; } - html.theme--documenter-dark .column.is-6-mobile { - flex: none; - width: 50%; } - html.theme--documenter-dark .column.is-offset-6-mobile { - margin-left: 50%; } - html.theme--documenter-dark .column.is-7-mobile { - flex: none; - width: 58.33333%; } - html.theme--documenter-dark .column.is-offset-7-mobile { - margin-left: 58.33333%; } - html.theme--documenter-dark .column.is-8-mobile { - flex: none; - width: 66.66667%; } - html.theme--documenter-dark .column.is-offset-8-mobile { - margin-left: 66.66667%; } - html.theme--documenter-dark .column.is-9-mobile { - flex: none; - width: 75%; } - html.theme--documenter-dark .column.is-offset-9-mobile { - margin-left: 75%; } - html.theme--documenter-dark .column.is-10-mobile { - flex: none; - width: 83.33333%; } - html.theme--documenter-dark .column.is-offset-10-mobile { - margin-left: 83.33333%; } - html.theme--documenter-dark .column.is-11-mobile { - flex: none; - width: 91.66667%; } - html.theme--documenter-dark .column.is-offset-11-mobile { - margin-left: 91.66667%; } - html.theme--documenter-dark .column.is-12-mobile { - flex: none; - width: 100%; } - html.theme--documenter-dark .column.is-offset-12-mobile { - margin-left: 100%; } } - @media screen and (min-width: 769px), print { - html.theme--documenter-dark .column.is-narrow, html.theme--documenter-dark .column.is-narrow-tablet { - flex: none; } - html.theme--documenter-dark .column.is-full, html.theme--documenter-dark .column.is-full-tablet { - flex: none; - width: 100%; } - html.theme--documenter-dark .column.is-three-quarters, html.theme--documenter-dark .column.is-three-quarters-tablet { - flex: none; - width: 75%; } - html.theme--documenter-dark .column.is-two-thirds, html.theme--documenter-dark .column.is-two-thirds-tablet { - flex: none; - width: 66.6666%; } - html.theme--documenter-dark .column.is-half, html.theme--documenter-dark .column.is-half-tablet { - flex: none; - width: 50%; } - html.theme--documenter-dark .column.is-one-third, html.theme--documenter-dark .column.is-one-third-tablet { - flex: none; - width: 33.3333%; } - html.theme--documenter-dark .column.is-one-quarter, html.theme--documenter-dark .column.is-one-quarter-tablet { - flex: none; - width: 25%; } - html.theme--documenter-dark .column.is-one-fifth, html.theme--documenter-dark .column.is-one-fifth-tablet { - flex: none; - width: 20%; } - html.theme--documenter-dark .column.is-two-fifths, html.theme--documenter-dark .column.is-two-fifths-tablet { - flex: none; - width: 40%; } - html.theme--documenter-dark .column.is-three-fifths, html.theme--documenter-dark .column.is-three-fifths-tablet { - flex: none; - width: 60%; } - html.theme--documenter-dark .column.is-four-fifths, html.theme--documenter-dark .column.is-four-fifths-tablet { - flex: none; - width: 80%; } - html.theme--documenter-dark .column.is-offset-three-quarters, html.theme--documenter-dark .column.is-offset-three-quarters-tablet { - margin-left: 75%; } - html.theme--documenter-dark .column.is-offset-two-thirds, html.theme--documenter-dark .column.is-offset-two-thirds-tablet { - margin-left: 66.6666%; } - html.theme--documenter-dark .column.is-offset-half, html.theme--documenter-dark .column.is-offset-half-tablet { - margin-left: 50%; } - html.theme--documenter-dark .column.is-offset-one-third, html.theme--documenter-dark .column.is-offset-one-third-tablet { - margin-left: 33.3333%; } - html.theme--documenter-dark .column.is-offset-one-quarter, html.theme--documenter-dark .column.is-offset-one-quarter-tablet { - margin-left: 25%; } - html.theme--documenter-dark .column.is-offset-one-fifth, html.theme--documenter-dark .column.is-offset-one-fifth-tablet { - margin-left: 20%; } - html.theme--documenter-dark .column.is-offset-two-fifths, html.theme--documenter-dark .column.is-offset-two-fifths-tablet { - margin-left: 40%; } - html.theme--documenter-dark .column.is-offset-three-fifths, html.theme--documenter-dark .column.is-offset-three-fifths-tablet { - margin-left: 60%; } - html.theme--documenter-dark .column.is-offset-four-fifths, html.theme--documenter-dark .column.is-offset-four-fifths-tablet { - margin-left: 80%; } - html.theme--documenter-dark .column.is-0, html.theme--documenter-dark .column.is-0-tablet { - flex: none; - width: 0%; } - html.theme--documenter-dark .column.is-offset-0, html.theme--documenter-dark .column.is-offset-0-tablet { - margin-left: 0%; } - html.theme--documenter-dark .column.is-1, html.theme--documenter-dark .column.is-1-tablet { - flex: none; - width: 8.33333%; } - html.theme--documenter-dark .column.is-offset-1, html.theme--documenter-dark .column.is-offset-1-tablet { - margin-left: 8.33333%; } - html.theme--documenter-dark .column.is-2, html.theme--documenter-dark .column.is-2-tablet { - flex: none; - width: 16.66667%; } - html.theme--documenter-dark .column.is-offset-2, html.theme--documenter-dark .column.is-offset-2-tablet { - margin-left: 16.66667%; } - html.theme--documenter-dark .column.is-3, html.theme--documenter-dark .column.is-3-tablet { - flex: none; - width: 25%; } - html.theme--documenter-dark .column.is-offset-3, html.theme--documenter-dark .column.is-offset-3-tablet { - margin-left: 25%; } - html.theme--documenter-dark .column.is-4, html.theme--documenter-dark .column.is-4-tablet { - flex: none; - width: 33.33333%; } - html.theme--documenter-dark .column.is-offset-4, html.theme--documenter-dark .column.is-offset-4-tablet { - margin-left: 33.33333%; } - html.theme--documenter-dark .column.is-5, html.theme--documenter-dark .column.is-5-tablet { - flex: none; - width: 41.66667%; } - html.theme--documenter-dark .column.is-offset-5, html.theme--documenter-dark .column.is-offset-5-tablet { - margin-left: 41.66667%; } - html.theme--documenter-dark .column.is-6, html.theme--documenter-dark .column.is-6-tablet { - flex: none; - width: 50%; } - html.theme--documenter-dark .column.is-offset-6, html.theme--documenter-dark .column.is-offset-6-tablet { - margin-left: 50%; } - html.theme--documenter-dark .column.is-7, html.theme--documenter-dark .column.is-7-tablet { - flex: none; - width: 58.33333%; } - html.theme--documenter-dark .column.is-offset-7, html.theme--documenter-dark .column.is-offset-7-tablet { - margin-left: 58.33333%; } - html.theme--documenter-dark .column.is-8, html.theme--documenter-dark .column.is-8-tablet { - flex: none; - width: 66.66667%; } - html.theme--documenter-dark .column.is-offset-8, html.theme--documenter-dark .column.is-offset-8-tablet { - margin-left: 66.66667%; } - html.theme--documenter-dark .column.is-9, html.theme--documenter-dark .column.is-9-tablet { - flex: none; - width: 75%; } - html.theme--documenter-dark .column.is-offset-9, html.theme--documenter-dark .column.is-offset-9-tablet { - margin-left: 75%; } - html.theme--documenter-dark .column.is-10, html.theme--documenter-dark .column.is-10-tablet { - flex: none; - width: 83.33333%; } - html.theme--documenter-dark .column.is-offset-10, html.theme--documenter-dark .column.is-offset-10-tablet { - margin-left: 83.33333%; } - html.theme--documenter-dark .column.is-11, html.theme--documenter-dark .column.is-11-tablet { - flex: none; - width: 91.66667%; } - html.theme--documenter-dark .column.is-offset-11, html.theme--documenter-dark .column.is-offset-11-tablet { - margin-left: 91.66667%; } - html.theme--documenter-dark .column.is-12, html.theme--documenter-dark .column.is-12-tablet { - flex: none; - width: 100%; } - html.theme--documenter-dark .column.is-offset-12, html.theme--documenter-dark .column.is-offset-12-tablet { - margin-left: 100%; } } - @media screen and (max-width: 1055px) { - html.theme--documenter-dark .column.is-narrow-touch { - flex: none; } - html.theme--documenter-dark .column.is-full-touch { - flex: none; - width: 100%; } - html.theme--documenter-dark .column.is-three-quarters-touch { - flex: none; - width: 75%; } - html.theme--documenter-dark .column.is-two-thirds-touch { - flex: none; - width: 66.6666%; } - html.theme--documenter-dark .column.is-half-touch { - flex: none; - width: 50%; } - html.theme--documenter-dark .column.is-one-third-touch { - flex: none; - width: 33.3333%; } - html.theme--documenter-dark .column.is-one-quarter-touch { - flex: none; - width: 25%; } - html.theme--documenter-dark .column.is-one-fifth-touch { - flex: none; - width: 20%; } - html.theme--documenter-dark .column.is-two-fifths-touch { - flex: none; - width: 40%; } - html.theme--documenter-dark .column.is-three-fifths-touch { - flex: none; - width: 60%; } - html.theme--documenter-dark .column.is-four-fifths-touch { - flex: none; - width: 80%; } - html.theme--documenter-dark .column.is-offset-three-quarters-touch { - margin-left: 75%; } - html.theme--documenter-dark .column.is-offset-two-thirds-touch { - margin-left: 66.6666%; } - html.theme--documenter-dark .column.is-offset-half-touch { - margin-left: 50%; } - html.theme--documenter-dark .column.is-offset-one-third-touch { - margin-left: 33.3333%; } - html.theme--documenter-dark .column.is-offset-one-quarter-touch { - margin-left: 25%; } - html.theme--documenter-dark .column.is-offset-one-fifth-touch { - margin-left: 20%; } - html.theme--documenter-dark .column.is-offset-two-fifths-touch { - margin-left: 40%; } - html.theme--documenter-dark .column.is-offset-three-fifths-touch { - margin-left: 60%; } - html.theme--documenter-dark .column.is-offset-four-fifths-touch { - margin-left: 80%; } - html.theme--documenter-dark .column.is-0-touch { - flex: none; - width: 0%; } - html.theme--documenter-dark .column.is-offset-0-touch { - margin-left: 0%; } - html.theme--documenter-dark .column.is-1-touch { - flex: none; - width: 8.33333%; } - html.theme--documenter-dark .column.is-offset-1-touch { - margin-left: 8.33333%; } - html.theme--documenter-dark .column.is-2-touch { - flex: none; - width: 16.66667%; } - html.theme--documenter-dark .column.is-offset-2-touch { - margin-left: 16.66667%; } - html.theme--documenter-dark .column.is-3-touch { - flex: none; - width: 25%; } - html.theme--documenter-dark .column.is-offset-3-touch { - margin-left: 25%; } - html.theme--documenter-dark .column.is-4-touch { - flex: none; - width: 33.33333%; } - html.theme--documenter-dark .column.is-offset-4-touch { - margin-left: 33.33333%; } - html.theme--documenter-dark .column.is-5-touch { - flex: none; - width: 41.66667%; } - html.theme--documenter-dark .column.is-offset-5-touch { - margin-left: 41.66667%; } - html.theme--documenter-dark .column.is-6-touch { - flex: none; - width: 50%; } - html.theme--documenter-dark .column.is-offset-6-touch { - margin-left: 50%; } - html.theme--documenter-dark .column.is-7-touch { - flex: none; - width: 58.33333%; } - html.theme--documenter-dark .column.is-offset-7-touch { - margin-left: 58.33333%; } - html.theme--documenter-dark .column.is-8-touch { - flex: none; - width: 66.66667%; } - html.theme--documenter-dark .column.is-offset-8-touch { - margin-left: 66.66667%; } - html.theme--documenter-dark .column.is-9-touch { - flex: none; - width: 75%; } - html.theme--documenter-dark .column.is-offset-9-touch { - margin-left: 75%; } - html.theme--documenter-dark .column.is-10-touch { - flex: none; - width: 83.33333%; } - html.theme--documenter-dark .column.is-offset-10-touch { - margin-left: 83.33333%; } - html.theme--documenter-dark .column.is-11-touch { - flex: none; - width: 91.66667%; } - html.theme--documenter-dark .column.is-offset-11-touch { - margin-left: 91.66667%; } - html.theme--documenter-dark .column.is-12-touch { - flex: none; - width: 100%; } - html.theme--documenter-dark .column.is-offset-12-touch { - margin-left: 100%; } } - @media screen and (min-width: 1056px) { - html.theme--documenter-dark .column.is-narrow-desktop { - flex: none; } - html.theme--documenter-dark .column.is-full-desktop { - flex: none; - width: 100%; } - html.theme--documenter-dark .column.is-three-quarters-desktop { - flex: none; - width: 75%; } - html.theme--documenter-dark .column.is-two-thirds-desktop { - flex: none; - width: 66.6666%; } - html.theme--documenter-dark .column.is-half-desktop { - flex: none; - width: 50%; } - html.theme--documenter-dark .column.is-one-third-desktop { - flex: none; - width: 33.3333%; } - html.theme--documenter-dark .column.is-one-quarter-desktop { - flex: none; - width: 25%; } - html.theme--documenter-dark .column.is-one-fifth-desktop { - flex: none; - width: 20%; } - html.theme--documenter-dark .column.is-two-fifths-desktop { - flex: none; - width: 40%; } - html.theme--documenter-dark .column.is-three-fifths-desktop { - flex: none; - width: 60%; } - html.theme--documenter-dark .column.is-four-fifths-desktop { - flex: none; - width: 80%; } - html.theme--documenter-dark .column.is-offset-three-quarters-desktop { - margin-left: 75%; } - html.theme--documenter-dark .column.is-offset-two-thirds-desktop { - margin-left: 66.6666%; } - html.theme--documenter-dark .column.is-offset-half-desktop { - margin-left: 50%; } - html.theme--documenter-dark .column.is-offset-one-third-desktop { - margin-left: 33.3333%; } - html.theme--documenter-dark .column.is-offset-one-quarter-desktop { - margin-left: 25%; } - html.theme--documenter-dark .column.is-offset-one-fifth-desktop { - margin-left: 20%; } - html.theme--documenter-dark .column.is-offset-two-fifths-desktop { - margin-left: 40%; } - html.theme--documenter-dark .column.is-offset-three-fifths-desktop { - margin-left: 60%; } - html.theme--documenter-dark .column.is-offset-four-fifths-desktop { - margin-left: 80%; } - html.theme--documenter-dark .column.is-0-desktop { - flex: none; - width: 0%; } - html.theme--documenter-dark .column.is-offset-0-desktop { - margin-left: 0%; } - html.theme--documenter-dark .column.is-1-desktop { - flex: none; - width: 8.33333%; } - html.theme--documenter-dark .column.is-offset-1-desktop { - margin-left: 8.33333%; } - html.theme--documenter-dark .column.is-2-desktop { - flex: none; - width: 16.66667%; } - html.theme--documenter-dark .column.is-offset-2-desktop { - margin-left: 16.66667%; } - html.theme--documenter-dark .column.is-3-desktop { - flex: none; - width: 25%; } - html.theme--documenter-dark .column.is-offset-3-desktop { - margin-left: 25%; } - html.theme--documenter-dark .column.is-4-desktop { - flex: none; - width: 33.33333%; } - html.theme--documenter-dark .column.is-offset-4-desktop { - margin-left: 33.33333%; } - html.theme--documenter-dark .column.is-5-desktop { - flex: none; - width: 41.66667%; } - html.theme--documenter-dark .column.is-offset-5-desktop { - margin-left: 41.66667%; } - html.theme--documenter-dark .column.is-6-desktop { - flex: none; - width: 50%; } - html.theme--documenter-dark .column.is-offset-6-desktop { - margin-left: 50%; } - html.theme--documenter-dark .column.is-7-desktop { - flex: none; - width: 58.33333%; } - html.theme--documenter-dark .column.is-offset-7-desktop { - margin-left: 58.33333%; } - html.theme--documenter-dark .column.is-8-desktop { - flex: none; - width: 66.66667%; } - html.theme--documenter-dark .column.is-offset-8-desktop { - margin-left: 66.66667%; } - html.theme--documenter-dark .column.is-9-desktop { - flex: none; - width: 75%; } - html.theme--documenter-dark .column.is-offset-9-desktop { - margin-left: 75%; } - html.theme--documenter-dark .column.is-10-desktop { - flex: none; - width: 83.33333%; } - html.theme--documenter-dark .column.is-offset-10-desktop { - margin-left: 83.33333%; } - html.theme--documenter-dark .column.is-11-desktop { - flex: none; - width: 91.66667%; } - html.theme--documenter-dark .column.is-offset-11-desktop { - margin-left: 91.66667%; } - html.theme--documenter-dark .column.is-12-desktop { - flex: none; - width: 100%; } - html.theme--documenter-dark .column.is-offset-12-desktop { - margin-left: 100%; } } - @media screen and (min-width: 1216px) { - html.theme--documenter-dark .column.is-narrow-widescreen { - flex: none; } - html.theme--documenter-dark .column.is-full-widescreen { - flex: none; - width: 100%; } - html.theme--documenter-dark .column.is-three-quarters-widescreen { - flex: none; - width: 75%; } - html.theme--documenter-dark .column.is-two-thirds-widescreen { - flex: none; - width: 66.6666%; } - html.theme--documenter-dark .column.is-half-widescreen { - flex: none; - width: 50%; } - html.theme--documenter-dark .column.is-one-third-widescreen { - flex: none; - width: 33.3333%; } - html.theme--documenter-dark .column.is-one-quarter-widescreen { - flex: none; - width: 25%; } - html.theme--documenter-dark .column.is-one-fifth-widescreen { - flex: none; - width: 20%; } - html.theme--documenter-dark .column.is-two-fifths-widescreen { - flex: none; - width: 40%; } - html.theme--documenter-dark .column.is-three-fifths-widescreen { - flex: none; - width: 60%; } - html.theme--documenter-dark .column.is-four-fifths-widescreen { - flex: none; - width: 80%; } - html.theme--documenter-dark .column.is-offset-three-quarters-widescreen { - margin-left: 75%; } - html.theme--documenter-dark .column.is-offset-two-thirds-widescreen { - margin-left: 66.6666%; } - html.theme--documenter-dark .column.is-offset-half-widescreen { - margin-left: 50%; } - html.theme--documenter-dark .column.is-offset-one-third-widescreen { - margin-left: 33.3333%; } - html.theme--documenter-dark .column.is-offset-one-quarter-widescreen { - margin-left: 25%; } - html.theme--documenter-dark .column.is-offset-one-fifth-widescreen { - margin-left: 20%; } - html.theme--documenter-dark .column.is-offset-two-fifths-widescreen { - margin-left: 40%; } - html.theme--documenter-dark .column.is-offset-three-fifths-widescreen { - margin-left: 60%; } - html.theme--documenter-dark .column.is-offset-four-fifths-widescreen { - margin-left: 80%; } - html.theme--documenter-dark .column.is-0-widescreen { - flex: none; - width: 0%; } - html.theme--documenter-dark .column.is-offset-0-widescreen { - margin-left: 0%; } - html.theme--documenter-dark .column.is-1-widescreen { - flex: none; - width: 8.33333%; } - html.theme--documenter-dark .column.is-offset-1-widescreen { - margin-left: 8.33333%; } - html.theme--documenter-dark .column.is-2-widescreen { - flex: none; - width: 16.66667%; } - html.theme--documenter-dark .column.is-offset-2-widescreen { - margin-left: 16.66667%; } - html.theme--documenter-dark .column.is-3-widescreen { - flex: none; - width: 25%; } - html.theme--documenter-dark .column.is-offset-3-widescreen { - margin-left: 25%; } - html.theme--documenter-dark .column.is-4-widescreen { - flex: none; - width: 33.33333%; } - html.theme--documenter-dark .column.is-offset-4-widescreen { - margin-left: 33.33333%; } - html.theme--documenter-dark .column.is-5-widescreen { - flex: none; - width: 41.66667%; } - html.theme--documenter-dark .column.is-offset-5-widescreen { - margin-left: 41.66667%; } - html.theme--documenter-dark .column.is-6-widescreen { - flex: none; - width: 50%; } - html.theme--documenter-dark .column.is-offset-6-widescreen { - margin-left: 50%; } - html.theme--documenter-dark .column.is-7-widescreen { - flex: none; - width: 58.33333%; } - html.theme--documenter-dark .column.is-offset-7-widescreen { - margin-left: 58.33333%; } - html.theme--documenter-dark .column.is-8-widescreen { - flex: none; - width: 66.66667%; } - html.theme--documenter-dark .column.is-offset-8-widescreen { - margin-left: 66.66667%; } - html.theme--documenter-dark .column.is-9-widescreen { - flex: none; - width: 75%; } - html.theme--documenter-dark .column.is-offset-9-widescreen { - margin-left: 75%; } - html.theme--documenter-dark .column.is-10-widescreen { - flex: none; - width: 83.33333%; } - html.theme--documenter-dark .column.is-offset-10-widescreen { - margin-left: 83.33333%; } - html.theme--documenter-dark .column.is-11-widescreen { - flex: none; - width: 91.66667%; } - html.theme--documenter-dark .column.is-offset-11-widescreen { - margin-left: 91.66667%; } - html.theme--documenter-dark .column.is-12-widescreen { - flex: none; - width: 100%; } - html.theme--documenter-dark .column.is-offset-12-widescreen { - margin-left: 100%; } } - @media screen and (min-width: 1408px) { - html.theme--documenter-dark .column.is-narrow-fullhd { - flex: none; } - html.theme--documenter-dark .column.is-full-fullhd { - flex: none; - width: 100%; } - html.theme--documenter-dark .column.is-three-quarters-fullhd { - flex: none; - width: 75%; } - html.theme--documenter-dark .column.is-two-thirds-fullhd { - flex: none; - width: 66.6666%; } - html.theme--documenter-dark .column.is-half-fullhd { - flex: none; - width: 50%; } - html.theme--documenter-dark .column.is-one-third-fullhd { - flex: none; - width: 33.3333%; } - html.theme--documenter-dark .column.is-one-quarter-fullhd { - flex: none; - width: 25%; } - html.theme--documenter-dark .column.is-one-fifth-fullhd { - flex: none; - width: 20%; } - html.theme--documenter-dark .column.is-two-fifths-fullhd { - flex: none; - width: 40%; } - html.theme--documenter-dark .column.is-three-fifths-fullhd { - flex: none; - width: 60%; } - html.theme--documenter-dark .column.is-four-fifths-fullhd { - flex: none; - width: 80%; } - html.theme--documenter-dark .column.is-offset-three-quarters-fullhd { - margin-left: 75%; } - html.theme--documenter-dark .column.is-offset-two-thirds-fullhd { - margin-left: 66.6666%; } - html.theme--documenter-dark .column.is-offset-half-fullhd { - margin-left: 50%; } - html.theme--documenter-dark .column.is-offset-one-third-fullhd { - margin-left: 33.3333%; } - html.theme--documenter-dark .column.is-offset-one-quarter-fullhd { - margin-left: 25%; } - html.theme--documenter-dark .column.is-offset-one-fifth-fullhd { - margin-left: 20%; } - html.theme--documenter-dark .column.is-offset-two-fifths-fullhd { - margin-left: 40%; } - html.theme--documenter-dark .column.is-offset-three-fifths-fullhd { - margin-left: 60%; } - html.theme--documenter-dark .column.is-offset-four-fifths-fullhd { - margin-left: 80%; } - html.theme--documenter-dark .column.is-0-fullhd { - flex: none; - width: 0%; } - html.theme--documenter-dark .column.is-offset-0-fullhd { - margin-left: 0%; } - html.theme--documenter-dark .column.is-1-fullhd { - flex: none; - width: 8.33333%; } - html.theme--documenter-dark .column.is-offset-1-fullhd { - margin-left: 8.33333%; } - html.theme--documenter-dark .column.is-2-fullhd { - flex: none; - width: 16.66667%; } - html.theme--documenter-dark .column.is-offset-2-fullhd { - margin-left: 16.66667%; } - html.theme--documenter-dark .column.is-3-fullhd { - flex: none; - width: 25%; } - html.theme--documenter-dark .column.is-offset-3-fullhd { - margin-left: 25%; } - html.theme--documenter-dark .column.is-4-fullhd { - flex: none; - width: 33.33333%; } - html.theme--documenter-dark .column.is-offset-4-fullhd { - margin-left: 33.33333%; } - html.theme--documenter-dark .column.is-5-fullhd { - flex: none; - width: 41.66667%; } - html.theme--documenter-dark .column.is-offset-5-fullhd { - margin-left: 41.66667%; } - html.theme--documenter-dark .column.is-6-fullhd { - flex: none; - width: 50%; } - html.theme--documenter-dark .column.is-offset-6-fullhd { - margin-left: 50%; } - html.theme--documenter-dark .column.is-7-fullhd { - flex: none; - width: 58.33333%; } - html.theme--documenter-dark .column.is-offset-7-fullhd { - margin-left: 58.33333%; } - html.theme--documenter-dark .column.is-8-fullhd { - flex: none; - width: 66.66667%; } - html.theme--documenter-dark .column.is-offset-8-fullhd { - margin-left: 66.66667%; } - html.theme--documenter-dark .column.is-9-fullhd { - flex: none; - width: 75%; } - html.theme--documenter-dark .column.is-offset-9-fullhd { - margin-left: 75%; } - html.theme--documenter-dark .column.is-10-fullhd { - flex: none; - width: 83.33333%; } - html.theme--documenter-dark .column.is-offset-10-fullhd { - margin-left: 83.33333%; } - html.theme--documenter-dark .column.is-11-fullhd { - flex: none; - width: 91.66667%; } - html.theme--documenter-dark .column.is-offset-11-fullhd { - margin-left: 91.66667%; } - html.theme--documenter-dark .column.is-12-fullhd { - flex: none; - width: 100%; } - html.theme--documenter-dark .column.is-offset-12-fullhd { - margin-left: 100%; } } - html.theme--documenter-dark .columns { - margin-left: -0.75rem; - margin-right: -0.75rem; - margin-top: -0.75rem; } - html.theme--documenter-dark .columns:last-child { - margin-bottom: -0.75rem; } - html.theme--documenter-dark .columns:not(:last-child) { - margin-bottom: calc(1.5rem - 0.75rem); } - html.theme--documenter-dark .columns.is-centered { - justify-content: center; } - html.theme--documenter-dark .columns.is-gapless { - margin-left: 0; - margin-right: 0; - margin-top: 0; } - html.theme--documenter-dark .columns.is-gapless > .column { - margin: 0; - padding: 0 !important; } - html.theme--documenter-dark .columns.is-gapless:not(:last-child) { - margin-bottom: 1.5rem; } - html.theme--documenter-dark .columns.is-gapless:last-child { - margin-bottom: 0; } - html.theme--documenter-dark .columns.is-mobile { - display: flex; } - html.theme--documenter-dark .columns.is-multiline { - flex-wrap: wrap; } - html.theme--documenter-dark .columns.is-vcentered { - align-items: center; } - @media screen and (min-width: 769px), print { - html.theme--documenter-dark .columns:not(.is-desktop) { - display: flex; } } - @media screen and (min-width: 1056px) { - html.theme--documenter-dark .columns.is-desktop { - display: flex; } } - html.theme--documenter-dark .columns.is-variable { - --columnGap: 0.75rem; - margin-left: calc(-1 * var(--columnGap)); - margin-right: calc(-1 * var(--columnGap)); } - html.theme--documenter-dark .columns.is-variable .column { - padding-left: var(--columnGap); - padding-right: var(--columnGap); } - html.theme--documenter-dark .columns.is-variable.is-0 { - --columnGap: 0rem; } - @media screen and (max-width: 768px) { - html.theme--documenter-dark .columns.is-variable.is-0-mobile { - --columnGap: 0rem; } } - @media screen and (min-width: 769px), print { - html.theme--documenter-dark .columns.is-variable.is-0-tablet { - --columnGap: 0rem; } } - @media screen and (min-width: 769px) and (max-width: 1055px) { - html.theme--documenter-dark .columns.is-variable.is-0-tablet-only { - --columnGap: 0rem; } } - @media screen and (max-width: 1055px) { - html.theme--documenter-dark .columns.is-variable.is-0-touch { - --columnGap: 0rem; } } - @media screen and (min-width: 1056px) { - html.theme--documenter-dark .columns.is-variable.is-0-desktop { - --columnGap: 0rem; } } - @media screen and (min-width: 1056px) and (max-width: 1215px) { - html.theme--documenter-dark .columns.is-variable.is-0-desktop-only { - --columnGap: 0rem; } } - @media screen and (min-width: 1216px) { - html.theme--documenter-dark .columns.is-variable.is-0-widescreen { - --columnGap: 0rem; } } - @media screen and (min-width: 1216px) and (max-width: 1407px) { - html.theme--documenter-dark .columns.is-variable.is-0-widescreen-only { - --columnGap: 0rem; } } - @media screen and (min-width: 1408px) { - html.theme--documenter-dark .columns.is-variable.is-0-fullhd { - --columnGap: 0rem; } } - html.theme--documenter-dark .columns.is-variable.is-1 { - --columnGap: 0.25rem; } - @media screen and (max-width: 768px) { - html.theme--documenter-dark .columns.is-variable.is-1-mobile { - --columnGap: 0.25rem; } } - @media screen and (min-width: 769px), print { - html.theme--documenter-dark .columns.is-variable.is-1-tablet { - --columnGap: 0.25rem; } } - @media screen and (min-width: 769px) and (max-width: 1055px) { - html.theme--documenter-dark .columns.is-variable.is-1-tablet-only { - --columnGap: 0.25rem; } } - @media screen and (max-width: 1055px) { - html.theme--documenter-dark .columns.is-variable.is-1-touch { - --columnGap: 0.25rem; } } - @media screen and (min-width: 1056px) { - html.theme--documenter-dark .columns.is-variable.is-1-desktop { - --columnGap: 0.25rem; } } - @media screen and (min-width: 1056px) and (max-width: 1215px) { - html.theme--documenter-dark .columns.is-variable.is-1-desktop-only { - --columnGap: 0.25rem; } } - @media screen and (min-width: 1216px) { - html.theme--documenter-dark .columns.is-variable.is-1-widescreen { - --columnGap: 0.25rem; } } - @media screen and (min-width: 1216px) and (max-width: 1407px) { - html.theme--documenter-dark .columns.is-variable.is-1-widescreen-only { - --columnGap: 0.25rem; } } - @media screen and (min-width: 1408px) { - html.theme--documenter-dark .columns.is-variable.is-1-fullhd { - --columnGap: 0.25rem; } } - html.theme--documenter-dark .columns.is-variable.is-2 { - --columnGap: 0.5rem; } - @media screen and (max-width: 768px) { - html.theme--documenter-dark .columns.is-variable.is-2-mobile { - --columnGap: 0.5rem; } } - @media screen and (min-width: 769px), print { - html.theme--documenter-dark .columns.is-variable.is-2-tablet { - --columnGap: 0.5rem; } } - @media screen and (min-width: 769px) and (max-width: 1055px) { - html.theme--documenter-dark .columns.is-variable.is-2-tablet-only { - --columnGap: 0.5rem; } } - @media screen and (max-width: 1055px) { - html.theme--documenter-dark .columns.is-variable.is-2-touch { - --columnGap: 0.5rem; } } - @media screen and (min-width: 1056px) { - html.theme--documenter-dark .columns.is-variable.is-2-desktop { - --columnGap: 0.5rem; } } - @media screen and (min-width: 1056px) and (max-width: 1215px) { - html.theme--documenter-dark .columns.is-variable.is-2-desktop-only { - --columnGap: 0.5rem; } } - @media screen and (min-width: 1216px) { - html.theme--documenter-dark .columns.is-variable.is-2-widescreen { - --columnGap: 0.5rem; } } - @media screen and (min-width: 1216px) and (max-width: 1407px) { - html.theme--documenter-dark .columns.is-variable.is-2-widescreen-only { - --columnGap: 0.5rem; } } - @media screen and (min-width: 1408px) { - html.theme--documenter-dark .columns.is-variable.is-2-fullhd { - --columnGap: 0.5rem; } } - html.theme--documenter-dark .columns.is-variable.is-3 { - --columnGap: 0.75rem; } - @media screen and (max-width: 768px) { - html.theme--documenter-dark .columns.is-variable.is-3-mobile { - --columnGap: 0.75rem; } } - @media screen and (min-width: 769px), print { - html.theme--documenter-dark .columns.is-variable.is-3-tablet { - --columnGap: 0.75rem; } } - @media screen and (min-width: 769px) and (max-width: 1055px) { - html.theme--documenter-dark .columns.is-variable.is-3-tablet-only { - --columnGap: 0.75rem; } } - @media screen and (max-width: 1055px) { - html.theme--documenter-dark .columns.is-variable.is-3-touch { - --columnGap: 0.75rem; } } - @media screen and (min-width: 1056px) { - html.theme--documenter-dark .columns.is-variable.is-3-desktop { - --columnGap: 0.75rem; } } - @media screen and (min-width: 1056px) and (max-width: 1215px) { - html.theme--documenter-dark .columns.is-variable.is-3-desktop-only { - --columnGap: 0.75rem; } } - @media screen and (min-width: 1216px) { - html.theme--documenter-dark .columns.is-variable.is-3-widescreen { - --columnGap: 0.75rem; } } - @media screen and (min-width: 1216px) and (max-width: 1407px) { - html.theme--documenter-dark .columns.is-variable.is-3-widescreen-only { - --columnGap: 0.75rem; } } - @media screen and (min-width: 1408px) { - html.theme--documenter-dark .columns.is-variable.is-3-fullhd { - --columnGap: 0.75rem; } } - html.theme--documenter-dark .columns.is-variable.is-4 { - --columnGap: 1rem; } - @media screen and (max-width: 768px) { - html.theme--documenter-dark .columns.is-variable.is-4-mobile { - --columnGap: 1rem; } } - @media screen and (min-width: 769px), print { - html.theme--documenter-dark .columns.is-variable.is-4-tablet { - --columnGap: 1rem; } } - @media screen and (min-width: 769px) and (max-width: 1055px) { - html.theme--documenter-dark .columns.is-variable.is-4-tablet-only { - --columnGap: 1rem; } } - @media screen and (max-width: 1055px) { - html.theme--documenter-dark .columns.is-variable.is-4-touch { - --columnGap: 1rem; } } - @media screen and (min-width: 1056px) { - html.theme--documenter-dark .columns.is-variable.is-4-desktop { - --columnGap: 1rem; } } - @media screen and (min-width: 1056px) and (max-width: 1215px) { - html.theme--documenter-dark .columns.is-variable.is-4-desktop-only { - --columnGap: 1rem; } } - @media screen and (min-width: 1216px) { - html.theme--documenter-dark .columns.is-variable.is-4-widescreen { - --columnGap: 1rem; } } - @media screen and (min-width: 1216px) and (max-width: 1407px) { - html.theme--documenter-dark .columns.is-variable.is-4-widescreen-only { - --columnGap: 1rem; } } - @media screen and (min-width: 1408px) { - html.theme--documenter-dark .columns.is-variable.is-4-fullhd { - --columnGap: 1rem; } } - html.theme--documenter-dark .columns.is-variable.is-5 { - --columnGap: 1.25rem; } - @media screen and (max-width: 768px) { - html.theme--documenter-dark .columns.is-variable.is-5-mobile { - --columnGap: 1.25rem; } } - @media screen and (min-width: 769px), print { - html.theme--documenter-dark .columns.is-variable.is-5-tablet { - --columnGap: 1.25rem; } } - @media screen and (min-width: 769px) and (max-width: 1055px) { - html.theme--documenter-dark .columns.is-variable.is-5-tablet-only { - --columnGap: 1.25rem; } } - @media screen and (max-width: 1055px) { - html.theme--documenter-dark .columns.is-variable.is-5-touch { - --columnGap: 1.25rem; } } - @media screen and (min-width: 1056px) { - html.theme--documenter-dark .columns.is-variable.is-5-desktop { - --columnGap: 1.25rem; } } - @media screen and (min-width: 1056px) and (max-width: 1215px) { - html.theme--documenter-dark .columns.is-variable.is-5-desktop-only { - --columnGap: 1.25rem; } } - @media screen and (min-width: 1216px) { - html.theme--documenter-dark .columns.is-variable.is-5-widescreen { - --columnGap: 1.25rem; } } - @media screen and (min-width: 1216px) and (max-width: 1407px) { - html.theme--documenter-dark .columns.is-variable.is-5-widescreen-only { - --columnGap: 1.25rem; } } - @media screen and (min-width: 1408px) { - html.theme--documenter-dark .columns.is-variable.is-5-fullhd { - --columnGap: 1.25rem; } } - html.theme--documenter-dark .columns.is-variable.is-6 { - --columnGap: 1.5rem; } - @media screen and (max-width: 768px) { - html.theme--documenter-dark .columns.is-variable.is-6-mobile { - --columnGap: 1.5rem; } } - @media screen and (min-width: 769px), print { - html.theme--documenter-dark .columns.is-variable.is-6-tablet { - --columnGap: 1.5rem; } } - @media screen and (min-width: 769px) and (max-width: 1055px) { - html.theme--documenter-dark .columns.is-variable.is-6-tablet-only { - --columnGap: 1.5rem; } } - @media screen and (max-width: 1055px) { - html.theme--documenter-dark .columns.is-variable.is-6-touch { - --columnGap: 1.5rem; } } - @media screen and (min-width: 1056px) { - html.theme--documenter-dark .columns.is-variable.is-6-desktop { - --columnGap: 1.5rem; } } - @media screen and (min-width: 1056px) and (max-width: 1215px) { - html.theme--documenter-dark .columns.is-variable.is-6-desktop-only { - --columnGap: 1.5rem; } } - @media screen and (min-width: 1216px) { - html.theme--documenter-dark .columns.is-variable.is-6-widescreen { - --columnGap: 1.5rem; } } - @media screen and (min-width: 1216px) and (max-width: 1407px) { - html.theme--documenter-dark .columns.is-variable.is-6-widescreen-only { - --columnGap: 1.5rem; } } - @media screen and (min-width: 1408px) { - html.theme--documenter-dark .columns.is-variable.is-6-fullhd { - --columnGap: 1.5rem; } } - html.theme--documenter-dark .columns.is-variable.is-7 { - --columnGap: 1.75rem; } - @media screen and (max-width: 768px) { - html.theme--documenter-dark .columns.is-variable.is-7-mobile { - --columnGap: 1.75rem; } } - @media screen and (min-width: 769px), print { - html.theme--documenter-dark .columns.is-variable.is-7-tablet { - --columnGap: 1.75rem; } } - @media screen and (min-width: 769px) and (max-width: 1055px) { - html.theme--documenter-dark .columns.is-variable.is-7-tablet-only { - --columnGap: 1.75rem; } } - @media screen and (max-width: 1055px) { - html.theme--documenter-dark .columns.is-variable.is-7-touch { - --columnGap: 1.75rem; } } - @media screen and (min-width: 1056px) { - html.theme--documenter-dark .columns.is-variable.is-7-desktop { - --columnGap: 1.75rem; } } - @media screen and (min-width: 1056px) and (max-width: 1215px) { - html.theme--documenter-dark .columns.is-variable.is-7-desktop-only { - --columnGap: 1.75rem; } } - @media screen and (min-width: 1216px) { - html.theme--documenter-dark .columns.is-variable.is-7-widescreen { - --columnGap: 1.75rem; } } - @media screen and (min-width: 1216px) and (max-width: 1407px) { - html.theme--documenter-dark .columns.is-variable.is-7-widescreen-only { - --columnGap: 1.75rem; } } - @media screen and (min-width: 1408px) { - html.theme--documenter-dark .columns.is-variable.is-7-fullhd { - --columnGap: 1.75rem; } } - html.theme--documenter-dark .columns.is-variable.is-8 { - --columnGap: 2rem; } - @media screen and (max-width: 768px) { - html.theme--documenter-dark .columns.is-variable.is-8-mobile { - --columnGap: 2rem; } } - @media screen and (min-width: 769px), print { - html.theme--documenter-dark .columns.is-variable.is-8-tablet { - --columnGap: 2rem; } } - @media screen and (min-width: 769px) and (max-width: 1055px) { - html.theme--documenter-dark .columns.is-variable.is-8-tablet-only { - --columnGap: 2rem; } } - @media screen and (max-width: 1055px) { - html.theme--documenter-dark .columns.is-variable.is-8-touch { - --columnGap: 2rem; } } - @media screen and (min-width: 1056px) { - html.theme--documenter-dark .columns.is-variable.is-8-desktop { - --columnGap: 2rem; } } - @media screen and (min-width: 1056px) and (max-width: 1215px) { - html.theme--documenter-dark .columns.is-variable.is-8-desktop-only { - --columnGap: 2rem; } } - @media screen and (min-width: 1216px) { - html.theme--documenter-dark .columns.is-variable.is-8-widescreen { - --columnGap: 2rem; } } - @media screen and (min-width: 1216px) and (max-width: 1407px) { - html.theme--documenter-dark .columns.is-variable.is-8-widescreen-only { - --columnGap: 2rem; } } - @media screen and (min-width: 1408px) { - html.theme--documenter-dark .columns.is-variable.is-8-fullhd { - --columnGap: 2rem; } } - html.theme--documenter-dark .tile { - align-items: stretch; - display: block; - flex-basis: 0; - flex-grow: 1; - flex-shrink: 1; - min-height: min-content; } - html.theme--documenter-dark .tile.is-ancestor { - margin-left: -0.75rem; - margin-right: -0.75rem; - margin-top: -0.75rem; } - html.theme--documenter-dark .tile.is-ancestor:last-child { - margin-bottom: -0.75rem; } - html.theme--documenter-dark .tile.is-ancestor:not(:last-child) { - margin-bottom: 0.75rem; } - html.theme--documenter-dark .tile.is-child { - margin: 0 !important; } - html.theme--documenter-dark .tile.is-parent { - padding: 0.75rem; } - html.theme--documenter-dark .tile.is-vertical { - flex-direction: column; } - html.theme--documenter-dark .tile.is-vertical > .tile.is-child:not(:last-child) { - margin-bottom: 1.5rem !important; } - @media screen and (min-width: 769px), print { - html.theme--documenter-dark .tile:not(.is-child) { - display: flex; } - html.theme--documenter-dark .tile.is-1 { - flex: none; - width: 8.33333%; } - html.theme--documenter-dark .tile.is-2 { - flex: none; - width: 16.66667%; } - html.theme--documenter-dark .tile.is-3 { - flex: none; - width: 25%; } - html.theme--documenter-dark .tile.is-4 { - flex: none; - width: 33.33333%; } - html.theme--documenter-dark .tile.is-5 { - flex: none; - width: 41.66667%; } - html.theme--documenter-dark .tile.is-6 { - flex: none; - width: 50%; } - html.theme--documenter-dark .tile.is-7 { - flex: none; - width: 58.33333%; } - html.theme--documenter-dark .tile.is-8 { - flex: none; - width: 66.66667%; } - html.theme--documenter-dark .tile.is-9 { - flex: none; - width: 75%; } - html.theme--documenter-dark .tile.is-10 { - flex: none; - width: 83.33333%; } - html.theme--documenter-dark .tile.is-11 { - flex: none; - width: 91.66667%; } - html.theme--documenter-dark .tile.is-12 { - flex: none; - width: 100%; } } - html.theme--documenter-dark .hero { - align-items: stretch; - display: flex; - flex-direction: column; - justify-content: space-between; } - html.theme--documenter-dark .hero .navbar { - background: none; } - html.theme--documenter-dark .hero .tabs ul { - border-bottom: none; } - html.theme--documenter-dark .hero.is-white { - background-color: white; - color: #0a0a0a; } - html.theme--documenter-dark .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), - html.theme--documenter-dark .hero.is-white strong { - color: inherit; } - html.theme--documenter-dark .hero.is-white .title { - color: #0a0a0a; } - html.theme--documenter-dark .hero.is-white .subtitle { - color: rgba(10, 10, 10, 0.9); } - html.theme--documenter-dark .hero.is-white .subtitle a:not(.button), - html.theme--documenter-dark .hero.is-white .subtitle strong { - color: #0a0a0a; } - @media screen and (max-width: 1055px) { - html.theme--documenter-dark .hero.is-white .navbar-menu { - background-color: white; } } - html.theme--documenter-dark .hero.is-white .navbar-item, - html.theme--documenter-dark .hero.is-white .navbar-link { - color: rgba(10, 10, 10, 0.7); } - html.theme--documenter-dark .hero.is-white a.navbar-item:hover, html.theme--documenter-dark .hero.is-white a.navbar-item.is-active, - html.theme--documenter-dark .hero.is-white .navbar-link:hover, - html.theme--documenter-dark .hero.is-white .navbar-link.is-active { - background-color: #f2f2f2; - color: #0a0a0a; } - html.theme--documenter-dark .hero.is-white .tabs a { - color: #0a0a0a; - opacity: 0.9; } - html.theme--documenter-dark .hero.is-white .tabs a:hover { - opacity: 1; } - html.theme--documenter-dark .hero.is-white .tabs li.is-active a { - opacity: 1; } - html.theme--documenter-dark .hero.is-white .tabs.is-boxed a, html.theme--documenter-dark .hero.is-white .tabs.is-toggle a { - color: #0a0a0a; } - html.theme--documenter-dark .hero.is-white .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-white .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); } - html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a:hover { - background-color: #0a0a0a; - border-color: #0a0a0a; - color: white; } - html.theme--documenter-dark .hero.is-white.is-bold { - background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); } - @media screen and (max-width: 768px) { - html.theme--documenter-dark .hero.is-white.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); } } - html.theme--documenter-dark .hero.is-black { - background-color: #0a0a0a; - color: white; } - html.theme--documenter-dark .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), - html.theme--documenter-dark .hero.is-black strong { - color: inherit; } - html.theme--documenter-dark .hero.is-black .title { - color: white; } - html.theme--documenter-dark .hero.is-black .subtitle { - color: rgba(255, 255, 255, 0.9); } - html.theme--documenter-dark .hero.is-black .subtitle a:not(.button), - html.theme--documenter-dark .hero.is-black .subtitle strong { - color: white; } - @media screen and (max-width: 1055px) { - html.theme--documenter-dark .hero.is-black .navbar-menu { - background-color: #0a0a0a; } } - html.theme--documenter-dark .hero.is-black .navbar-item, - html.theme--documenter-dark .hero.is-black .navbar-link { - color: rgba(255, 255, 255, 0.7); } - html.theme--documenter-dark .hero.is-black a.navbar-item:hover, html.theme--documenter-dark .hero.is-black a.navbar-item.is-active, - html.theme--documenter-dark .hero.is-black .navbar-link:hover, - html.theme--documenter-dark .hero.is-black .navbar-link.is-active { - background-color: black; - color: white; } - html.theme--documenter-dark .hero.is-black .tabs a { - color: white; - opacity: 0.9; } - html.theme--documenter-dark .hero.is-black .tabs a:hover { - opacity: 1; } - html.theme--documenter-dark .hero.is-black .tabs li.is-active a { - opacity: 1; } - html.theme--documenter-dark .hero.is-black .tabs.is-boxed a, html.theme--documenter-dark .hero.is-black .tabs.is-toggle a { - color: white; } - html.theme--documenter-dark .hero.is-black .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-black .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); } - html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a:hover { - background-color: white; - border-color: white; - color: #0a0a0a; } - html.theme--documenter-dark .hero.is-black.is-bold { - background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); } - @media screen and (max-width: 768px) { - html.theme--documenter-dark .hero.is-black.is-bold .navbar-menu { - background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); } } - html.theme--documenter-dark .hero.is-light { - background-color: #ecf0f1; - color: #282f2f; } - html.theme--documenter-dark .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), - html.theme--documenter-dark .hero.is-light strong { - color: inherit; } - html.theme--documenter-dark .hero.is-light .title { - color: #282f2f; } - html.theme--documenter-dark .hero.is-light .subtitle { - color: rgba(40, 47, 47, 0.9); } - html.theme--documenter-dark .hero.is-light .subtitle a:not(.button), - html.theme--documenter-dark .hero.is-light .subtitle strong { - color: #282f2f; } - @media screen and (max-width: 1055px) { - html.theme--documenter-dark .hero.is-light .navbar-menu { - background-color: #ecf0f1; } } - html.theme--documenter-dark .hero.is-light .navbar-item, - html.theme--documenter-dark .hero.is-light .navbar-link { - color: rgba(40, 47, 47, 0.7); } - html.theme--documenter-dark .hero.is-light a.navbar-item:hover, html.theme--documenter-dark .hero.is-light a.navbar-item.is-active, - html.theme--documenter-dark .hero.is-light .navbar-link:hover, - html.theme--documenter-dark .hero.is-light .navbar-link.is-active { - background-color: #dde4e6; - color: #282f2f; } - html.theme--documenter-dark .hero.is-light .tabs a { - color: #282f2f; - opacity: 0.9; } - html.theme--documenter-dark .hero.is-light .tabs a:hover { - opacity: 1; } - html.theme--documenter-dark .hero.is-light .tabs li.is-active a { - opacity: 1; } - html.theme--documenter-dark .hero.is-light .tabs.is-boxed a, html.theme--documenter-dark .hero.is-light .tabs.is-toggle a { - color: #282f2f; } - html.theme--documenter-dark .hero.is-light .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-light .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); } - html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a:hover { - background-color: #282f2f; - border-color: #282f2f; - color: #ecf0f1; } - html.theme--documenter-dark .hero.is-light.is-bold { - background-image: linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%); } - @media screen and (max-width: 768px) { - html.theme--documenter-dark .hero.is-light.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%); } } - html.theme--documenter-dark .hero.is-dark, html.theme--documenter-dark .content kbd.hero { - background-color: #282f2f; - color: #ecf0f1; } - html.theme--documenter-dark .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), html.theme--documenter-dark .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), - html.theme--documenter-dark .hero.is-dark strong, - html.theme--documenter-dark .content kbd.hero strong { - color: inherit; } - html.theme--documenter-dark .hero.is-dark .title, html.theme--documenter-dark .content kbd.hero .title { - color: #ecf0f1; } - html.theme--documenter-dark .hero.is-dark .subtitle, html.theme--documenter-dark .content kbd.hero .subtitle { - color: rgba(236, 240, 241, 0.9); } - html.theme--documenter-dark .hero.is-dark .subtitle a:not(.button), html.theme--documenter-dark .content kbd.hero .subtitle a:not(.button), - html.theme--documenter-dark .hero.is-dark .subtitle strong, - html.theme--documenter-dark .content kbd.hero .subtitle strong { - color: #ecf0f1; } - @media screen and (max-width: 1055px) { - html.theme--documenter-dark .hero.is-dark .navbar-menu, html.theme--documenter-dark .content kbd.hero .navbar-menu { - background-color: #282f2f; } } - html.theme--documenter-dark .hero.is-dark .navbar-item, html.theme--documenter-dark .content kbd.hero .navbar-item, - html.theme--documenter-dark .hero.is-dark .navbar-link, - html.theme--documenter-dark .content kbd.hero .navbar-link { - color: rgba(236, 240, 241, 0.7); } - html.theme--documenter-dark .hero.is-dark a.navbar-item:hover, html.theme--documenter-dark .content kbd.hero a.navbar-item:hover, html.theme--documenter-dark .hero.is-dark a.navbar-item.is-active, html.theme--documenter-dark .content kbd.hero a.navbar-item.is-active, - html.theme--documenter-dark .hero.is-dark .navbar-link:hover, - html.theme--documenter-dark .content kbd.hero .navbar-link:hover, - html.theme--documenter-dark .hero.is-dark .navbar-link.is-active, - html.theme--documenter-dark .content kbd.hero .navbar-link.is-active { - background-color: #1d2122; - color: #ecf0f1; } - html.theme--documenter-dark .hero.is-dark .tabs a, html.theme--documenter-dark .content kbd.hero .tabs a { - color: #ecf0f1; - opacity: 0.9; } - html.theme--documenter-dark .hero.is-dark .tabs a:hover, html.theme--documenter-dark .content kbd.hero .tabs a:hover { - opacity: 1; } - html.theme--documenter-dark .hero.is-dark .tabs li.is-active a, html.theme--documenter-dark .content kbd.hero .tabs li.is-active a { - opacity: 1; } - html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a, html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a, html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a, html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a { - color: #ecf0f1; } - html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a:hover, html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a:hover, html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); } - html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a, html.theme--documenter-dark .content kbd.hero .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .content kbd.hero .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a, html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a:hover, html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a:hover { - background-color: #ecf0f1; - border-color: #ecf0f1; - color: #282f2f; } - html.theme--documenter-dark .hero.is-dark.is-bold, html.theme--documenter-dark .content kbd.hero.is-bold { - background-image: linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%); } - @media screen and (max-width: 768px) { - html.theme--documenter-dark .hero.is-dark.is-bold .navbar-menu, html.theme--documenter-dark .content kbd.hero.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%); } } - html.theme--documenter-dark .hero.is-primary, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink { - background-color: #375a7f; - color: #fff; } - html.theme--documenter-dark .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), - html.theme--documenter-dark .hero.is-primary strong, - html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink strong { - color: inherit; } - html.theme--documenter-dark .hero.is-primary .title, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .title { - color: #fff; } - html.theme--documenter-dark .hero.is-primary .subtitle, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .subtitle { - color: rgba(255, 255, 255, 0.9); } - html.theme--documenter-dark .hero.is-primary .subtitle a:not(.button), html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .subtitle a:not(.button), - html.theme--documenter-dark .hero.is-primary .subtitle strong, - html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .subtitle strong { - color: #fff; } - @media screen and (max-width: 1055px) { - html.theme--documenter-dark .hero.is-primary .navbar-menu, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .navbar-menu { - background-color: #375a7f; } } - html.theme--documenter-dark .hero.is-primary .navbar-item, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .navbar-item, - html.theme--documenter-dark .hero.is-primary .navbar-link, - html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .navbar-link { - color: rgba(255, 255, 255, 0.7); } - html.theme--documenter-dark .hero.is-primary a.navbar-item:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink a.navbar-item:hover, html.theme--documenter-dark .hero.is-primary a.navbar-item.is-active, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink a.navbar-item.is-active, - html.theme--documenter-dark .hero.is-primary .navbar-link:hover, - html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .navbar-link:hover, - html.theme--documenter-dark .hero.is-primary .navbar-link.is-active, - html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .navbar-link.is-active { - background-color: #2f4d6d; - color: #fff; } - html.theme--documenter-dark .hero.is-primary .tabs a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs a { - color: #fff; - opacity: 0.9; } - html.theme--documenter-dark .hero.is-primary .tabs a:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs a:hover { - opacity: 1; } - html.theme--documenter-dark .hero.is-primary .tabs li.is-active a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs li.is-active a { - opacity: 1; } - html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed a, html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle a { - color: #fff; } - html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); } - html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a:hover { - background-color: #fff; - border-color: #fff; - color: #375a7f; } - html.theme--documenter-dark .hero.is-primary.is-bold, html.theme--documenter-dark .docstring > section > a.hero.is-bold.docs-sourcelink { - background-image: linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%); } - @media screen and (max-width: 768px) { - html.theme--documenter-dark .hero.is-primary.is-bold .navbar-menu, html.theme--documenter-dark .docstring > section > a.hero.is-bold.docs-sourcelink .navbar-menu { - background-image: linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%); } } - html.theme--documenter-dark .hero.is-link { - background-color: #1abc9c; - color: #fff; } - html.theme--documenter-dark .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), - html.theme--documenter-dark .hero.is-link strong { - color: inherit; } - html.theme--documenter-dark .hero.is-link .title { - color: #fff; } - html.theme--documenter-dark .hero.is-link .subtitle { - color: rgba(255, 255, 255, 0.9); } - html.theme--documenter-dark .hero.is-link .subtitle a:not(.button), - html.theme--documenter-dark .hero.is-link .subtitle strong { - color: #fff; } - @media screen and (max-width: 1055px) { - html.theme--documenter-dark .hero.is-link .navbar-menu { - background-color: #1abc9c; } } - html.theme--documenter-dark .hero.is-link .navbar-item, - html.theme--documenter-dark .hero.is-link .navbar-link { - color: rgba(255, 255, 255, 0.7); } - html.theme--documenter-dark .hero.is-link a.navbar-item:hover, html.theme--documenter-dark .hero.is-link a.navbar-item.is-active, - html.theme--documenter-dark .hero.is-link .navbar-link:hover, - html.theme--documenter-dark .hero.is-link .navbar-link.is-active { - background-color: #17a689; - color: #fff; } - html.theme--documenter-dark .hero.is-link .tabs a { - color: #fff; - opacity: 0.9; } - html.theme--documenter-dark .hero.is-link .tabs a:hover { - opacity: 1; } - html.theme--documenter-dark .hero.is-link .tabs li.is-active a { - opacity: 1; } - html.theme--documenter-dark .hero.is-link .tabs.is-boxed a, html.theme--documenter-dark .hero.is-link .tabs.is-toggle a { - color: #fff; } - html.theme--documenter-dark .hero.is-link .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-link .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); } - html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a:hover { - background-color: #fff; - border-color: #fff; - color: #1abc9c; } - html.theme--documenter-dark .hero.is-link.is-bold { - background-image: linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%); } - @media screen and (max-width: 768px) { - html.theme--documenter-dark .hero.is-link.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%); } } - html.theme--documenter-dark .hero.is-info { - background-color: #024c7d; - color: #fff; } - html.theme--documenter-dark .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), - html.theme--documenter-dark .hero.is-info strong { - color: inherit; } - html.theme--documenter-dark .hero.is-info .title { - color: #fff; } - html.theme--documenter-dark .hero.is-info .subtitle { - color: rgba(255, 255, 255, 0.9); } - html.theme--documenter-dark .hero.is-info .subtitle a:not(.button), - html.theme--documenter-dark .hero.is-info .subtitle strong { - color: #fff; } - @media screen and (max-width: 1055px) { - html.theme--documenter-dark .hero.is-info .navbar-menu { - background-color: #024c7d; } } - html.theme--documenter-dark .hero.is-info .navbar-item, - html.theme--documenter-dark .hero.is-info .navbar-link { - color: rgba(255, 255, 255, 0.7); } - html.theme--documenter-dark .hero.is-info a.navbar-item:hover, html.theme--documenter-dark .hero.is-info a.navbar-item.is-active, - html.theme--documenter-dark .hero.is-info .navbar-link:hover, - html.theme--documenter-dark .hero.is-info .navbar-link.is-active { - background-color: #023d64; - color: #fff; } - html.theme--documenter-dark .hero.is-info .tabs a { - color: #fff; - opacity: 0.9; } - html.theme--documenter-dark .hero.is-info .tabs a:hover { - opacity: 1; } - html.theme--documenter-dark .hero.is-info .tabs li.is-active a { - opacity: 1; } - html.theme--documenter-dark .hero.is-info .tabs.is-boxed a, html.theme--documenter-dark .hero.is-info .tabs.is-toggle a { - color: #fff; } - html.theme--documenter-dark .hero.is-info .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-info .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); } - html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a:hover { - background-color: #fff; - border-color: #fff; - color: #024c7d; } - html.theme--documenter-dark .hero.is-info.is-bold { - background-image: linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%); } - @media screen and (max-width: 768px) { - html.theme--documenter-dark .hero.is-info.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%); } } - html.theme--documenter-dark .hero.is-success { - background-color: #008438; - color: #fff; } - html.theme--documenter-dark .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), - html.theme--documenter-dark .hero.is-success strong { - color: inherit; } - html.theme--documenter-dark .hero.is-success .title { - color: #fff; } - html.theme--documenter-dark .hero.is-success .subtitle { - color: rgba(255, 255, 255, 0.9); } - html.theme--documenter-dark .hero.is-success .subtitle a:not(.button), - html.theme--documenter-dark .hero.is-success .subtitle strong { - color: #fff; } - @media screen and (max-width: 1055px) { - html.theme--documenter-dark .hero.is-success .navbar-menu { - background-color: #008438; } } - html.theme--documenter-dark .hero.is-success .navbar-item, - html.theme--documenter-dark .hero.is-success .navbar-link { - color: rgba(255, 255, 255, 0.7); } - html.theme--documenter-dark .hero.is-success a.navbar-item:hover, html.theme--documenter-dark .hero.is-success a.navbar-item.is-active, - html.theme--documenter-dark .hero.is-success .navbar-link:hover, - html.theme--documenter-dark .hero.is-success .navbar-link.is-active { - background-color: #006b2d; - color: #fff; } - html.theme--documenter-dark .hero.is-success .tabs a { - color: #fff; - opacity: 0.9; } - html.theme--documenter-dark .hero.is-success .tabs a:hover { - opacity: 1; } - html.theme--documenter-dark .hero.is-success .tabs li.is-active a { - opacity: 1; } - html.theme--documenter-dark .hero.is-success .tabs.is-boxed a, html.theme--documenter-dark .hero.is-success .tabs.is-toggle a { - color: #fff; } - html.theme--documenter-dark .hero.is-success .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-success .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); } - html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a:hover { - background-color: #fff; - border-color: #fff; - color: #008438; } - html.theme--documenter-dark .hero.is-success.is-bold { - background-image: linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%); } - @media screen and (max-width: 768px) { - html.theme--documenter-dark .hero.is-success.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%); } } - html.theme--documenter-dark .hero.is-warning { - background-color: #ad8100; - color: #fff; } - html.theme--documenter-dark .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), - html.theme--documenter-dark .hero.is-warning strong { - color: inherit; } - html.theme--documenter-dark .hero.is-warning .title { - color: #fff; } - html.theme--documenter-dark .hero.is-warning .subtitle { - color: rgba(255, 255, 255, 0.9); } - html.theme--documenter-dark .hero.is-warning .subtitle a:not(.button), - html.theme--documenter-dark .hero.is-warning .subtitle strong { - color: #fff; } - @media screen and (max-width: 1055px) { - html.theme--documenter-dark .hero.is-warning .navbar-menu { - background-color: #ad8100; } } - html.theme--documenter-dark .hero.is-warning .navbar-item, - html.theme--documenter-dark .hero.is-warning .navbar-link { - color: rgba(255, 255, 255, 0.7); } - html.theme--documenter-dark .hero.is-warning a.navbar-item:hover, html.theme--documenter-dark .hero.is-warning a.navbar-item.is-active, - html.theme--documenter-dark .hero.is-warning .navbar-link:hover, - html.theme--documenter-dark .hero.is-warning .navbar-link.is-active { - background-color: #946e00; - color: #fff; } - html.theme--documenter-dark .hero.is-warning .tabs a { - color: #fff; - opacity: 0.9; } - html.theme--documenter-dark .hero.is-warning .tabs a:hover { - opacity: 1; } - html.theme--documenter-dark .hero.is-warning .tabs li.is-active a { - opacity: 1; } - html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a, html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a { - color: #fff; } - html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); } - html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a:hover { - background-color: #fff; - border-color: #fff; - color: #ad8100; } - html.theme--documenter-dark .hero.is-warning.is-bold { - background-image: linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%); } - @media screen and (max-width: 768px) { - html.theme--documenter-dark .hero.is-warning.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%); } } - html.theme--documenter-dark .hero.is-danger { - background-color: #9e1b0d; - color: #fff; } - html.theme--documenter-dark .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), - html.theme--documenter-dark .hero.is-danger strong { - color: inherit; } - html.theme--documenter-dark .hero.is-danger .title { - color: #fff; } - html.theme--documenter-dark .hero.is-danger .subtitle { - color: rgba(255, 255, 255, 0.9); } - html.theme--documenter-dark .hero.is-danger .subtitle a:not(.button), - html.theme--documenter-dark .hero.is-danger .subtitle strong { - color: #fff; } - @media screen and (max-width: 1055px) { - html.theme--documenter-dark .hero.is-danger .navbar-menu { - background-color: #9e1b0d; } } - html.theme--documenter-dark .hero.is-danger .navbar-item, - html.theme--documenter-dark .hero.is-danger .navbar-link { - color: rgba(255, 255, 255, 0.7); } - html.theme--documenter-dark .hero.is-danger a.navbar-item:hover, html.theme--documenter-dark .hero.is-danger a.navbar-item.is-active, - html.theme--documenter-dark .hero.is-danger .navbar-link:hover, - html.theme--documenter-dark .hero.is-danger .navbar-link.is-active { - background-color: #86170b; - color: #fff; } - html.theme--documenter-dark .hero.is-danger .tabs a { - color: #fff; - opacity: 0.9; } - html.theme--documenter-dark .hero.is-danger .tabs a:hover { - opacity: 1; } - html.theme--documenter-dark .hero.is-danger .tabs li.is-active a { - opacity: 1; } - html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a, html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a { - color: #fff; } - html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); } - html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a:hover { - background-color: #fff; - border-color: #fff; - color: #9e1b0d; } - html.theme--documenter-dark .hero.is-danger.is-bold { - background-image: linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%); } - @media screen and (max-width: 768px) { - html.theme--documenter-dark .hero.is-danger.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%); } } - html.theme--documenter-dark .hero.is-small .hero-body, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.hero .hero-body { - padding-bottom: 1.5rem; - padding-top: 1.5rem; } - @media screen and (min-width: 769px), print { - html.theme--documenter-dark .hero.is-medium .hero-body { - padding-bottom: 9rem; - padding-top: 9rem; } } - @media screen and (min-width: 769px), print { - html.theme--documenter-dark .hero.is-large .hero-body { - padding-bottom: 18rem; - padding-top: 18rem; } } - html.theme--documenter-dark .hero.is-halfheight .hero-body, html.theme--documenter-dark .hero.is-fullheight .hero-body, html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body { - align-items: center; - display: flex; } - html.theme--documenter-dark .hero.is-halfheight .hero-body > .container, html.theme--documenter-dark .hero.is-fullheight .hero-body > .container, html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body > .container { - flex-grow: 1; - flex-shrink: 1; } - html.theme--documenter-dark .hero.is-halfheight { - min-height: 50vh; } - html.theme--documenter-dark .hero.is-fullheight { - min-height: 100vh; } - html.theme--documenter-dark .hero-video { - overflow: hidden; } - html.theme--documenter-dark .hero-video video { - left: 50%; - min-height: 100%; - min-width: 100%; - position: absolute; - top: 50%; - transform: translate3d(-50%, -50%, 0); } - html.theme--documenter-dark .hero-video.is-transparent { - opacity: 0.3; } - @media screen and (max-width: 768px) { - html.theme--documenter-dark .hero-video { - display: none; } } - html.theme--documenter-dark .hero-buttons { - margin-top: 1.5rem; } - @media screen and (max-width: 768px) { - html.theme--documenter-dark .hero-buttons .button { - display: flex; } - html.theme--documenter-dark .hero-buttons .button:not(:last-child) { - margin-bottom: 0.75rem; } } - @media screen and (min-width: 769px), print { - html.theme--documenter-dark .hero-buttons { - display: flex; - justify-content: center; } - html.theme--documenter-dark .hero-buttons .button:not(:last-child) { - margin-right: 1.5rem; } } - html.theme--documenter-dark .hero-head, - html.theme--documenter-dark .hero-foot { - flex-grow: 0; - flex-shrink: 0; } - html.theme--documenter-dark .hero-body { - flex-grow: 1; - flex-shrink: 0; - padding: 3rem 1.5rem; } - html.theme--documenter-dark .section { - padding: 3rem 1.5rem; } - @media screen and (min-width: 1056px) { - html.theme--documenter-dark .section.is-medium { - padding: 9rem 1.5rem; } - html.theme--documenter-dark .section.is-large { - padding: 18rem 1.5rem; } } - html.theme--documenter-dark .footer { - background-color: #282f2f; - padding: 3rem 1.5rem 6rem; } - html.theme--documenter-dark hr { - height: 1px; } - html.theme--documenter-dark h6 { - text-transform: uppercase; - letter-spacing: 0.5px; } - html.theme--documenter-dark .hero { - background-color: #343c3d; } - html.theme--documenter-dark a { - transition: all 200ms ease; } - html.theme--documenter-dark .button { - transition: all 200ms ease; - border-width: 1px; - color: white; } - html.theme--documenter-dark .button.is-active, html.theme--documenter-dark .button.is-focused, html.theme--documenter-dark .button:active, html.theme--documenter-dark .button:focus { - box-shadow: 0 0 0 2px rgba(140, 155, 157, 0.5); } - html.theme--documenter-dark .button.is-white.is-hovered, html.theme--documenter-dark .button.is-white:hover { - background-color: white; } - html.theme--documenter-dark .button.is-white.is-active, html.theme--documenter-dark .button.is-white.is-focused, html.theme--documenter-dark .button.is-white:active, html.theme--documenter-dark .button.is-white:focus { - border-color: white; - box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5); } - html.theme--documenter-dark .button.is-black.is-hovered, html.theme--documenter-dark .button.is-black:hover { - background-color: #1d1d1d; } - html.theme--documenter-dark .button.is-black.is-active, html.theme--documenter-dark .button.is-black.is-focused, html.theme--documenter-dark .button.is-black:active, html.theme--documenter-dark .button.is-black:focus { - border-color: #0a0a0a; - box-shadow: 0 0 0 2px rgba(10, 10, 10, 0.5); } - html.theme--documenter-dark .button.is-light.is-hovered, html.theme--documenter-dark .button.is-light:hover { - background-color: white; } - html.theme--documenter-dark .button.is-light.is-active, html.theme--documenter-dark .button.is-light.is-focused, html.theme--documenter-dark .button.is-light:active, html.theme--documenter-dark .button.is-light:focus { - border-color: #ecf0f1; - box-shadow: 0 0 0 2px rgba(236, 240, 241, 0.5); } - html.theme--documenter-dark .button.is-dark.is-hovered, html.theme--documenter-dark .content kbd.button.is-hovered, html.theme--documenter-dark .button.is-dark:hover, html.theme--documenter-dark .content kbd.button:hover { - background-color: #3a4344; } - html.theme--documenter-dark .button.is-dark.is-active, html.theme--documenter-dark .content kbd.button.is-active, html.theme--documenter-dark .button.is-dark.is-focused, html.theme--documenter-dark .content kbd.button.is-focused, html.theme--documenter-dark .button.is-dark:active, html.theme--documenter-dark .content kbd.button:active, html.theme--documenter-dark .button.is-dark:focus, html.theme--documenter-dark .content kbd.button:focus { - border-color: #282f2f; - box-shadow: 0 0 0 2px rgba(40, 47, 47, 0.5); } - html.theme--documenter-dark .button.is-primary.is-hovered, html.theme--documenter-dark .docstring > section > a.button.is-hovered.docs-sourcelink, html.theme--documenter-dark .button.is-primary:hover, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:hover { - background-color: #436d9a; } - html.theme--documenter-dark .button.is-primary.is-active, html.theme--documenter-dark .docstring > section > a.button.is-active.docs-sourcelink, html.theme--documenter-dark .button.is-primary.is-focused, html.theme--documenter-dark .docstring > section > a.button.is-focused.docs-sourcelink, html.theme--documenter-dark .button.is-primary:active, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:active, html.theme--documenter-dark .button.is-primary:focus, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:focus { - border-color: #375a7f; - box-shadow: 0 0 0 2px rgba(55, 90, 127, 0.5); } - html.theme--documenter-dark .button.is-link.is-hovered, html.theme--documenter-dark .button.is-link:hover { - background-color: #1fdeb8; } - html.theme--documenter-dark .button.is-link.is-active, html.theme--documenter-dark .button.is-link.is-focused, html.theme--documenter-dark .button.is-link:active, html.theme--documenter-dark .button.is-link:focus { - border-color: #1abc9c; - box-shadow: 0 0 0 2px rgba(26, 188, 156, 0.5); } - html.theme--documenter-dark .button.is-info.is-hovered, html.theme--documenter-dark .button.is-info:hover { - background-color: #0363a3; } - html.theme--documenter-dark .button.is-info.is-active, html.theme--documenter-dark .button.is-info.is-focused, html.theme--documenter-dark .button.is-info:active, html.theme--documenter-dark .button.is-info:focus { - border-color: #024c7d; - box-shadow: 0 0 0 2px rgba(2, 76, 125, 0.5); } - html.theme--documenter-dark .button.is-success.is-hovered, html.theme--documenter-dark .button.is-success:hover { - background-color: #00aa48; } - html.theme--documenter-dark .button.is-success.is-active, html.theme--documenter-dark .button.is-success.is-focused, html.theme--documenter-dark .button.is-success:active, html.theme--documenter-dark .button.is-success:focus { - border-color: #008438; - box-shadow: 0 0 0 2px rgba(0, 132, 56, 0.5); } - html.theme--documenter-dark .button.is-warning.is-hovered, html.theme--documenter-dark .button.is-warning:hover { - background-color: #d39e00; } - html.theme--documenter-dark .button.is-warning.is-active, html.theme--documenter-dark .button.is-warning.is-focused, html.theme--documenter-dark .button.is-warning:active, html.theme--documenter-dark .button.is-warning:focus { - border-color: #ad8100; - box-shadow: 0 0 0 2px rgba(173, 129, 0, 0.5); } - html.theme--documenter-dark .button.is-danger.is-hovered, html.theme--documenter-dark .button.is-danger:hover { - background-color: #c12110; } - html.theme--documenter-dark .button.is-danger.is-active, html.theme--documenter-dark .button.is-danger.is-focused, html.theme--documenter-dark .button.is-danger:active, html.theme--documenter-dark .button.is-danger:focus { - border-color: #9e1b0d; - box-shadow: 0 0 0 2px rgba(158, 27, 13, 0.5); } - html.theme--documenter-dark .label { - color: #dbdee0; } - html.theme--documenter-dark .button, - html.theme--documenter-dark .control.has-icons-left .icon, - html.theme--documenter-dark .control.has-icons-right .icon, - html.theme--documenter-dark .input, - html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, - html.theme--documenter-dark .pagination-ellipsis, - html.theme--documenter-dark .pagination-link, - html.theme--documenter-dark .pagination-next, - html.theme--documenter-dark .pagination-previous, - html.theme--documenter-dark .select, - html.theme--documenter-dark .select select, - html.theme--documenter-dark .textarea { - height: 2.5em; } - - html.theme--documenter-dark .input, - html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, - html.theme--documenter-dark .textarea { - transition: all 200ms ease; - box-shadow: none; - border-width: 1px; - padding-left: 1em; - padding-right: 1em; } - html.theme--documenter-dark .select:after, - html.theme--documenter-dark .select select { - border-width: 1px; } - html.theme--documenter-dark .control.has-addons .button, - html.theme--documenter-dark .control.has-addons .input, - html.theme--documenter-dark .control.has-addons #documenter .docs-sidebar form.docs-search > input, - html.theme--documenter-dark #documenter .docs-sidebar .control.has-addons form.docs-search > input, - html.theme--documenter-dark .control.has-addons .select { - margin-right: -1px; } - html.theme--documenter-dark .notification { - background-color: #343c3d; } - html.theme--documenter-dark .card { - box-shadow: none; - border: 1px solid #343c3d; - background-color: #282f2f; - border-radius: 0.4em; } - html.theme--documenter-dark .card .card-image img { - border-radius: 0.4em 0.4em 0 0; } - html.theme--documenter-dark .card .card-header { - box-shadow: none; - background-color: rgba(18, 18, 18, 0.2); - border-radius: 0.4em 0.4em 0 0; } - html.theme--documenter-dark .card .card-footer { - background-color: rgba(18, 18, 18, 0.2); } - html.theme--documenter-dark .card .card-footer, - html.theme--documenter-dark .card .card-footer-item { - border-width: 1px; - border-color: #343c3d; } - html.theme--documenter-dark .notification.is-white a:not(.button) { - color: #0a0a0a; - text-decoration: underline; } - html.theme--documenter-dark .notification.is-black a:not(.button) { - color: white; - text-decoration: underline; } - html.theme--documenter-dark .notification.is-light a:not(.button) { - color: #282f2f; - text-decoration: underline; } - html.theme--documenter-dark .notification.is-dark a:not(.button), html.theme--documenter-dark .content kbd.notification a:not(.button) { - color: #ecf0f1; - text-decoration: underline; } - html.theme--documenter-dark .notification.is-primary a:not(.button), html.theme--documenter-dark .docstring > section > a.notification.docs-sourcelink a:not(.button) { - color: #fff; - text-decoration: underline; } - html.theme--documenter-dark .notification.is-link a:not(.button) { - color: #fff; - text-decoration: underline; } - html.theme--documenter-dark .notification.is-info a:not(.button) { - color: #fff; - text-decoration: underline; } - html.theme--documenter-dark .notification.is-success a:not(.button) { - color: #fff; - text-decoration: underline; } - html.theme--documenter-dark .notification.is-warning a:not(.button) { - color: #fff; - text-decoration: underline; } - html.theme--documenter-dark .notification.is-danger a:not(.button) { - color: #fff; - text-decoration: underline; } - html.theme--documenter-dark .tag, html.theme--documenter-dark .docstring > section > a.docs-sourcelink, html.theme--documenter-dark .content kbd { - border-radius: 0.4em; } - html.theme--documenter-dark .menu-list a { - transition: all 300ms ease; } - html.theme--documenter-dark .modal-card-body { - background-color: #282f2f; } - html.theme--documenter-dark .modal-card-foot, - html.theme--documenter-dark .modal-card-head { - border-color: #343c3d; } - html.theme--documenter-dark .message-header { - font-weight: 700; - background-color: #343c3d; - color: white; } - html.theme--documenter-dark .message-body { - border-width: 1px; - border-color: #343c3d; } - html.theme--documenter-dark .navbar { - border-radius: 0.4em; } - html.theme--documenter-dark .navbar.is-transparent { - background: none; } - html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active { - background-color: #1abc9c; } - @media screen and (max-width: 1055px) { - html.theme--documenter-dark .navbar .navbar-menu { - background-color: #375a7f; - border-radius: 0 0 0.4em 0.4em; } } - html.theme--documenter-dark .hero .navbar, - html.theme--documenter-dark body > .navbar { - border-radius: 0; } - html.theme--documenter-dark .pagination-link, - html.theme--documenter-dark .pagination-next, - html.theme--documenter-dark .pagination-previous { - border-width: 1px; } - html.theme--documenter-dark .panel-block, - html.theme--documenter-dark .panel-heading, - html.theme--documenter-dark .panel-tabs { - border-width: 1px; } - html.theme--documenter-dark .panel-block:first-child, - html.theme--documenter-dark .panel-heading:first-child, - html.theme--documenter-dark .panel-tabs:first-child { - border-top-width: 1px; } - html.theme--documenter-dark .panel-heading { - font-weight: 700; } - html.theme--documenter-dark .panel-tabs a { - border-width: 1px; - margin-bottom: -1px; } - html.theme--documenter-dark .panel-tabs a.is-active { - border-bottom-color: #17a689; } - html.theme--documenter-dark .panel-block:hover { - color: #1dd2af; } - html.theme--documenter-dark .panel-block:hover .panel-icon { - color: #1dd2af; } - html.theme--documenter-dark .panel-block.is-active .panel-icon { - color: #17a689; } - html.theme--documenter-dark .tabs a { - border-bottom-width: 1px; - margin-bottom: -1px; } - html.theme--documenter-dark .tabs ul { - border-bottom-width: 1px; } - html.theme--documenter-dark .tabs.is-boxed a { - border-width: 1px; } - html.theme--documenter-dark .tabs.is-boxed li.is-active a { - background-color: #1f2424; } - html.theme--documenter-dark .tabs.is-toggle li a { - border-width: 1px; - margin-bottom: 0; } - html.theme--documenter-dark .tabs.is-toggle li + li { - margin-left: -1px; } - html.theme--documenter-dark .hero.is-white .navbar .navbar-dropdown .navbar-item:hover { - background-color: transparent; } - html.theme--documenter-dark .hero.is-black .navbar .navbar-dropdown .navbar-item:hover { - background-color: transparent; } - html.theme--documenter-dark .hero.is-light .navbar .navbar-dropdown .navbar-item:hover { - background-color: transparent; } - html.theme--documenter-dark .hero.is-dark .navbar .navbar-dropdown .navbar-item:hover, html.theme--documenter-dark .content kbd.hero .navbar .navbar-dropdown .navbar-item:hover { - background-color: transparent; } - html.theme--documenter-dark .hero.is-primary .navbar .navbar-dropdown .navbar-item:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .navbar .navbar-dropdown .navbar-item:hover { - background-color: transparent; } - html.theme--documenter-dark .hero.is-link .navbar .navbar-dropdown .navbar-item:hover { - background-color: transparent; } - html.theme--documenter-dark .hero.is-info .navbar .navbar-dropdown .navbar-item:hover { - background-color: transparent; } - html.theme--documenter-dark .hero.is-success .navbar .navbar-dropdown .navbar-item:hover { - background-color: transparent; } - html.theme--documenter-dark .hero.is-warning .navbar .navbar-dropdown .navbar-item:hover { - background-color: transparent; } - html.theme--documenter-dark .hero.is-danger .navbar .navbar-dropdown .navbar-item:hover { - background-color: transparent; } - html.theme--documenter-dark h1 .docs-heading-anchor, html.theme--documenter-dark h1 .docs-heading-anchor:hover, html.theme--documenter-dark h1 .docs-heading-anchor:visited, html.theme--documenter-dark h2 .docs-heading-anchor, html.theme--documenter-dark h2 .docs-heading-anchor:hover, html.theme--documenter-dark h2 .docs-heading-anchor:visited, html.theme--documenter-dark h3 .docs-heading-anchor, html.theme--documenter-dark h3 .docs-heading-anchor:hover, html.theme--documenter-dark h3 .docs-heading-anchor:visited, html.theme--documenter-dark h4 .docs-heading-anchor, html.theme--documenter-dark h4 .docs-heading-anchor:hover, html.theme--documenter-dark h4 .docs-heading-anchor:visited, html.theme--documenter-dark h5 .docs-heading-anchor, html.theme--documenter-dark h5 .docs-heading-anchor:hover, html.theme--documenter-dark h5 .docs-heading-anchor:visited, html.theme--documenter-dark h6 .docs-heading-anchor, html.theme--documenter-dark h6 .docs-heading-anchor:hover, html.theme--documenter-dark h6 .docs-heading-anchor:visited { - color: #f2f2f2; } - html.theme--documenter-dark h1 .docs-heading-anchor-permalink, html.theme--documenter-dark h2 .docs-heading-anchor-permalink, html.theme--documenter-dark h3 .docs-heading-anchor-permalink, html.theme--documenter-dark h4 .docs-heading-anchor-permalink, html.theme--documenter-dark h5 .docs-heading-anchor-permalink, html.theme--documenter-dark h6 .docs-heading-anchor-permalink { - visibility: hidden; - vertical-align: middle; - margin-left: 0.5em; - font-size: 0.7rem; } - html.theme--documenter-dark h1 .docs-heading-anchor-permalink::before, html.theme--documenter-dark h2 .docs-heading-anchor-permalink::before, html.theme--documenter-dark h3 .docs-heading-anchor-permalink::before, html.theme--documenter-dark h4 .docs-heading-anchor-permalink::before, html.theme--documenter-dark h5 .docs-heading-anchor-permalink::before, html.theme--documenter-dark h6 .docs-heading-anchor-permalink::before { - font-family: "Font Awesome 5 Free"; - font-weight: 900; - content: "\f0c1"; } - html.theme--documenter-dark h1:hover .docs-heading-anchor-permalink, html.theme--documenter-dark h2:hover .docs-heading-anchor-permalink, html.theme--documenter-dark h3:hover .docs-heading-anchor-permalink, html.theme--documenter-dark h4:hover .docs-heading-anchor-permalink, html.theme--documenter-dark h5:hover .docs-heading-anchor-permalink, html.theme--documenter-dark h6:hover .docs-heading-anchor-permalink { - visibility: visible; } - html.theme--documenter-dark .docs-light-only { - display: none !important; } - html.theme--documenter-dark .admonition { - background-color: #282f2f; - border-style: solid; - border-width: 1px; - border-color: #5e6d6f; - border-radius: 0.4em; - font-size: 15px; } - html.theme--documenter-dark .admonition strong { - color: currentColor; } - html.theme--documenter-dark .admonition.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.admonition { - font-size: 0.85em; } - html.theme--documenter-dark .admonition.is-medium { - font-size: 1.25rem; } - html.theme--documenter-dark .admonition.is-large { - font-size: 1.5rem; } - html.theme--documenter-dark .admonition.is-default { - background-color: #282f2f; - border-color: #5e6d6f; } - html.theme--documenter-dark .admonition.is-default > .admonition-header { - background-color: #5e6d6f; } - html.theme--documenter-dark .admonition.is-info { - background-color: #282f2f; - border-color: #024c7d; } - html.theme--documenter-dark .admonition.is-info > .admonition-header { - background-color: #024c7d; } - html.theme--documenter-dark .admonition.is-success { - background-color: #282f2f; - border-color: #008438; } - html.theme--documenter-dark .admonition.is-success > .admonition-header { - background-color: #008438; } - html.theme--documenter-dark .admonition.is-warning { - background-color: #282f2f; - border-color: #ad8100; } - html.theme--documenter-dark .admonition.is-warning > .admonition-header { - background-color: #ad8100; } - html.theme--documenter-dark .admonition.is-danger { - background-color: #282f2f; - border-color: #9e1b0d; } - html.theme--documenter-dark .admonition.is-danger > .admonition-header { - background-color: #9e1b0d; } - html.theme--documenter-dark .admonition.is-compat { - background-color: #282f2f; - border-color: #137886; } - html.theme--documenter-dark .admonition.is-compat > .admonition-header { - background-color: #137886; } - html.theme--documenter-dark .admonition-header { - background-color: #5e6d6f; - align-items: center; - font-weight: 700; - justify-content: space-between; - line-height: 1.25; - padding: 0.75em; - position: relative; } - html.theme--documenter-dark .admonition-header:before { - font-family: "Font Awesome 5 Free"; - font-weight: 900; - margin-right: 0.75em; - content: "\f06a"; } - html.theme--documenter-dark .admonition-body { - color: #fff; - padding: 1em 1.25em; } - html.theme--documenter-dark .admonition-body pre { - background-color: #282f2f; } - html.theme--documenter-dark .admonition-body code { - background-color: rgba(255, 255, 255, 0.05); } - html.theme--documenter-dark .docstring { - margin-bottom: 1em; - background-color: transparent; - border: 1px solid #5e6d6f; - box-shadow: none; - max-width: 100%; } - html.theme--documenter-dark .docstring > header { - display: flex; - flex-grow: 1; - align-items: stretch; - padding: 0.75rem; - background-color: #282f2f; - box-shadow: 0 1px 2px rgba(10, 10, 10, 0.1); - box-shadow: none; - border-bottom: 1px solid #5e6d6f; } - html.theme--documenter-dark .docstring > header code { - background-color: transparent; } - html.theme--documenter-dark .docstring > header .docstring-binding { - margin-right: 0.3em; } - html.theme--documenter-dark .docstring > header .docstring-category { - margin-left: 0.3em; } - html.theme--documenter-dark .docstring > section { - position: relative; - padding: 1rem 1.25rem; - border-bottom: 1px solid #5e6d6f; } - html.theme--documenter-dark .docstring > section:last-child { - border-bottom: none; } - html.theme--documenter-dark .docstring > section > a.docs-sourcelink { - transition: opacity 0.3s; - opacity: 0; - position: absolute; - right: 0.625rem; - bottom: 0.5rem; } - html.theme--documenter-dark .docstring:hover > section > a.docs-sourcelink { - opacity: 0.2; } - html.theme--documenter-dark .docstring > section:hover a.docs-sourcelink { - opacity: 1; } - html.theme--documenter-dark .documenter-example-output { - background-color: #1f2424; } - html.theme--documenter-dark .outdated-warning-overlay { - position: fixed; - top: 0; - left: 0; - right: 0; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); - z-index: 999; - background-color: #282f2f; - border-bottom: 3px solid #9e1b0d; - padding: 10px 35px; - text-align: center; - font-size: 15px; } - html.theme--documenter-dark .outdated-warning-overlay .outdated-warning-closer { - position: absolute; - top: calc(50% - 10px); - right: 18px; - cursor: pointer; - width: 12px; } - html.theme--documenter-dark .outdated-warning-overlay a { - color: #1abc9c; } - html.theme--documenter-dark .outdated-warning-overlay a:hover { - color: #1dd2af; } - html.theme--documenter-dark .content pre { - border: 1px solid #5e6d6f; } - html.theme--documenter-dark .content code { - font-weight: inherit; } - html.theme--documenter-dark .content a code { - color: #1abc9c; } - html.theme--documenter-dark .content h1 code, html.theme--documenter-dark .content h2 code, html.theme--documenter-dark .content h3 code, html.theme--documenter-dark .content h4 code, html.theme--documenter-dark .content h5 code, html.theme--documenter-dark .content h6 code { - color: #f2f2f2; } - html.theme--documenter-dark .content table { - display: block; - width: initial; - max-width: 100%; - overflow-x: auto; } - html.theme--documenter-dark .content blockquote > ul:first-child, html.theme--documenter-dark .content blockquote > ol:first-child, html.theme--documenter-dark .content .admonition-body > ul:first-child, html.theme--documenter-dark .content .admonition-body > ol:first-child { - margin-top: 0; } - html.theme--documenter-dark pre, html.theme--documenter-dark code { - font-variant-ligatures: no-contextual; } - html.theme--documenter-dark .breadcrumb a.is-disabled { - cursor: default; - pointer-events: none; } - html.theme--documenter-dark .breadcrumb a.is-disabled, html.theme--documenter-dark .breadcrumb a.is-disabled:hover { - color: #f2f2f2; } - html.theme--documenter-dark .hljs { - background: initial !important; - padding: initial !important; } - html.theme--documenter-dark .katex .katex-mathml { - top: 0; - right: 0; } - html.theme--documenter-dark .katex-display, html.theme--documenter-dark mjx-container, html.theme--documenter-dark .MathJax_Display { - margin: 0.5em 0 !important; } - html.theme--documenter-dark html { - -moz-osx-font-smoothing: auto; - -webkit-font-smoothing: auto; } - html.theme--documenter-dark #documenter .docs-main > article { - overflow-wrap: break-word; } - html.theme--documenter-dark #documenter .docs-main > article .math-container { - overflow-x: auto; - overflow-y: hidden; } - @media screen and (min-width: 1056px) { - html.theme--documenter-dark #documenter .docs-main { - max-width: 52rem; - margin-left: 20rem; - padding-right: 1rem; } } - @media screen and (max-width: 1055px) { - html.theme--documenter-dark #documenter .docs-main { - width: 100%; } - html.theme--documenter-dark #documenter .docs-main > article { - max-width: 52rem; - margin-left: auto; - margin-right: auto; - margin-bottom: 1rem; - padding: 0 1rem; } - html.theme--documenter-dark #documenter .docs-main > header, html.theme--documenter-dark #documenter .docs-main > nav { - max-width: 100%; - width: 100%; - margin: 0; } } - html.theme--documenter-dark #documenter .docs-main header.docs-navbar { - background-color: #1f2424; - border-bottom: 1px solid #5e6d6f; - z-index: 2; - min-height: 4rem; - margin-bottom: 1rem; - display: flex; } - html.theme--documenter-dark #documenter .docs-main header.docs-navbar .breadcrumb { - flex-grow: 1; } - html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right { - display: flex; - white-space: nowrap; } - html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-icon, html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label, html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button { - display: inline-block; } - html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label { - padding: 0; - margin-left: 0.3em; } - html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-settings-button { - margin: auto 0 auto 1rem; } - html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button { - font-size: 1.5rem; - margin: auto 0 auto 1rem; } - html.theme--documenter-dark #documenter .docs-main header.docs-navbar > * { - margin: auto 0; } - @media screen and (max-width: 1055px) { - html.theme--documenter-dark #documenter .docs-main header.docs-navbar { - position: sticky; - top: 0; - padding: 0 1rem; - /* For Headroom.js */ - transition-property: top, box-shadow; - -webkit-transition-property: top, box-shadow; - /* Safari */ - transition-duration: 0.3s; - -webkit-transition-duration: 0.3s; - /* Safari */ } - html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--not-top { - box-shadow: 0.2rem 0rem 0.4rem #171717; - transition-duration: 0.7s; - -webkit-transition-duration: 0.7s; - /* Safari */ } - html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom { - top: -4.5rem; - transition-duration: 0.7s; - -webkit-transition-duration: 0.7s; - /* Safari */ } } - html.theme--documenter-dark #documenter .docs-main section.footnotes { - border-top: 1px solid #5e6d6f; } - html.theme--documenter-dark #documenter .docs-main section.footnotes li .tag:first-child, html.theme--documenter-dark #documenter .docs-main section.footnotes li .docstring > section > a.docs-sourcelink:first-child, html.theme--documenter-dark #documenter .docs-main section.footnotes li .content kbd:first-child, html.theme--documenter-dark .content #documenter .docs-main section.footnotes li kbd:first-child { - margin-right: 1em; - margin-bottom: 0.4em; } - html.theme--documenter-dark #documenter .docs-main .docs-footer { - display: flex; - flex-wrap: wrap; - margin-left: 0; - margin-right: 0; - border-top: 1px solid #5e6d6f; - padding-top: 1rem; - padding-bottom: 1rem; } - @media screen and (max-width: 1055px) { - html.theme--documenter-dark #documenter .docs-main .docs-footer { - padding-left: 1rem; - padding-right: 1rem; } } - html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage, html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-prevpage { - flex-grow: 1; } - html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage { - text-align: right; } - html.theme--documenter-dark #documenter .docs-main .docs-footer .flexbox-break { - flex-basis: 100%; - height: 0; } - html.theme--documenter-dark #documenter .docs-main .docs-footer .footer-message { - font-size: 0.8em; - margin: 0.5em auto 0 auto; - text-align: center; } - html.theme--documenter-dark #documenter .docs-sidebar { - display: flex; - flex-direction: column; - color: #fff; - background-color: #282f2f; - border-right: 1px solid #5e6d6f; - padding: 0; - flex: 0 0 18rem; - z-index: 5; - font-size: 15px; - position: fixed; - left: -18rem; - width: 18rem; - height: 100%; - transition: left 0.3s; - /* Setting up a nicer theme style for the scrollbar */ } - html.theme--documenter-dark #documenter .docs-sidebar.visible { - left: 0; - box-shadow: 0.4rem 0rem 0.8rem #171717; } - @media screen and (min-width: 1056px) { - html.theme--documenter-dark #documenter .docs-sidebar.visible { - box-shadow: none; } } - @media screen and (min-width: 1056px) { - html.theme--documenter-dark #documenter .docs-sidebar { - left: 0; - top: 0; } } - html.theme--documenter-dark #documenter .docs-sidebar .docs-logo { - margin-top: 1rem; - padding: 0 1rem; } - html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img { - max-height: 6rem; - margin: auto; } - html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name { - flex-shrink: 0; - font-size: 1.5rem; - font-weight: 700; - text-align: center; - white-space: nowrap; - overflow: hidden; - padding: 0.5rem 0; } - html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name .docs-autofit { - max-width: 16.2rem; } - html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a, html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a:hover { - color: #fff; } - html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector { - border-top: 1px solid #5e6d6f; - display: none; - padding: 0.5rem; } - html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector.visible { - display: flex; } - html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu { - flex-grow: 1; - user-select: none; - border-top: 1px solid #5e6d6f; - padding-bottom: 1.5rem; - /* Managing collapsible submenus */ } - html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu > li > .tocitem { - font-weight: bold; } - html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu > li li { - font-size: 14.25px; - margin-left: 1em; - border-left: 1px solid #5e6d6f; } - html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input.collapse-toggle { - display: none; } - html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.collapsed { - display: none; } - html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked ~ ul.collapsed { - display: block; } - html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem { - display: flex; } - html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label { - flex-grow: 2; } - html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron { - display: inline-block; - font-style: normal; - font-variant: normal; - text-rendering: auto; - line-height: 1; - font-size: 11.25px; - margin-left: 1rem; - margin-top: auto; - margin-bottom: auto; } - html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before { - font-family: "Font Awesome 5 Free"; - font-weight: 900; - content: "\f054"; } - html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked ~ label.tocitem .docs-chevron::before { - content: "\f078"; } - html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem { - display: block; - padding: 0.5rem 0.5rem; } - html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem, html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem:hover { - color: #fff; - background: #282f2f; } - html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu a.tocitem:hover, html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem:hover { - color: #fff; - background-color: #32393a; } - html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active { - border-top: 1px solid #5e6d6f; - border-bottom: 1px solid #5e6d6f; - background-color: #1f2424; } - html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem, html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover { - background-color: #1f2424; - color: #fff; } - html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover { - background-color: #32393a; - color: #fff; } - html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu > li.is-active:first-child { - border-top: none; } - html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal { - margin: 0 0.5rem 0.5rem; - border-top: 1px solid #5e6d6f; } - html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal li { - font-size: 12.75px; - border-left: none; - margin-left: 0; - margin-top: 0.5rem; } - html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem { - width: 100%; - padding: 0; } - html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before { - content: "⚬"; - margin-right: 0.4em; } - html.theme--documenter-dark #documenter .docs-sidebar form.docs-search { - margin: auto; - margin-top: 0.5rem; - margin-bottom: 0.5rem; } - html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { - width: 14.4rem; } - @media screen and (min-width: 1056px) { - html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu { - overflow-y: auto; - -webkit-overflow-scroll: touch; } - html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar { - width: .3rem; - background: none; } - html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb { - border-radius: 5px 0px 0px 5px; - background: #3b4445; } - html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover { - background: #4e5a5c; } } - @media screen and (max-width: 1055px) { - html.theme--documenter-dark #documenter .docs-sidebar { - overflow-y: auto; - -webkit-overflow-scroll: touch; } - html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar { - width: .3rem; - background: none; } - html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb { - border-radius: 5px 0px 0px 5px; - background: #3b4445; } - html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover { - background: #4e5a5c; } } - html.theme--documenter-dark #documenter .docs-main #documenter-search-info { - margin-bottom: 1rem; } - html.theme--documenter-dark #documenter .docs-main #documenter-search-results { - list-style-type: circle; - list-style-position: outside; } - html.theme--documenter-dark #documenter .docs-main #documenter-search-results li { - margin-left: 2rem; } - html.theme--documenter-dark #documenter .docs-main #documenter-search-results .docs-highlight { - background-color: yellow; } - html.theme--documenter-dark { - background-color: #1f2424; - font-size: 16px; - min-width: 300px; - overflow-x: auto; - overflow-y: scroll; - text-rendering: optimizeLegibility; - text-size-adjust: 100%; } - html.theme--documenter-dark .ansi span.sgr1 { - font-weight: bolder; } - html.theme--documenter-dark .ansi span.sgr2 { - font-weight: lighter; } - html.theme--documenter-dark .ansi span.sgr3 { - font-style: italic; } - html.theme--documenter-dark .ansi span.sgr4 { - text-decoration: underline; } - html.theme--documenter-dark .ansi span.sgr7 { - color: #1f2424; - background-color: #fff; } - html.theme--documenter-dark .ansi span.sgr8 { - color: transparent; } - html.theme--documenter-dark .ansi span.sgr8 span { - color: transparent; } - html.theme--documenter-dark .ansi span.sgr9 { - text-decoration: line-through; } - html.theme--documenter-dark .ansi span.sgr30 { - color: #242424; } - html.theme--documenter-dark .ansi span.sgr31 { - color: #f6705f; } - html.theme--documenter-dark .ansi span.sgr32 { - color: #4fb43a; } - html.theme--documenter-dark .ansi span.sgr33 { - color: #f4c72f; } - html.theme--documenter-dark .ansi span.sgr34 { - color: #7587f0; } - html.theme--documenter-dark .ansi span.sgr35 { - color: #bc89d3; } - html.theme--documenter-dark .ansi span.sgr36 { - color: #49b6ca; } - html.theme--documenter-dark .ansi span.sgr37 { - color: #b3bdbe; } - html.theme--documenter-dark .ansi span.sgr40 { - background-color: #242424; } - html.theme--documenter-dark .ansi span.sgr41 { - background-color: #f6705f; } - html.theme--documenter-dark .ansi span.sgr42 { - background-color: #4fb43a; } - html.theme--documenter-dark .ansi span.sgr43 { - background-color: #f4c72f; } - html.theme--documenter-dark .ansi span.sgr44 { - background-color: #7587f0; } - html.theme--documenter-dark .ansi span.sgr45 { - background-color: #bc89d3; } - html.theme--documenter-dark .ansi span.sgr46 { - background-color: #49b6ca; } - html.theme--documenter-dark .ansi span.sgr47 { - background-color: #b3bdbe; } - html.theme--documenter-dark .ansi span.sgr90 { - color: #92a0a2; } - html.theme--documenter-dark .ansi span.sgr91 { - color: #ff8674; } - html.theme--documenter-dark .ansi span.sgr92 { - color: #79d462; } - html.theme--documenter-dark .ansi span.sgr93 { - color: #ffe76b; } - html.theme--documenter-dark .ansi span.sgr94 { - color: #8a98ff; } - html.theme--documenter-dark .ansi span.sgr95 { - color: #d2a4e6; } - html.theme--documenter-dark .ansi span.sgr96 { - color: #6bc8db; } - html.theme--documenter-dark .ansi span.sgr97 { - color: #ecf0f1; } - html.theme--documenter-dark .ansi span.sgr100 { - background-color: #92a0a2; } - html.theme--documenter-dark .ansi span.sgr101 { - background-color: #ff8674; } - html.theme--documenter-dark .ansi span.sgr102 { - background-color: #79d462; } - html.theme--documenter-dark .ansi span.sgr103 { - background-color: #ffe76b; } - html.theme--documenter-dark .ansi span.sgr104 { - background-color: #8a98ff; } - html.theme--documenter-dark .ansi span.sgr105 { - background-color: #d2a4e6; } - html.theme--documenter-dark .ansi span.sgr106 { - background-color: #6bc8db; } - html.theme--documenter-dark .ansi span.sgr107 { - background-color: #ecf0f1; } - html.theme--documenter-dark code.language-julia-repl > span.hljs-meta { - color: #4fb43a; - font-weight: bolder; } - html.theme--documenter-dark .hljs { - background: #2b2b2b; - color: #f8f8f2; } - html.theme--documenter-dark .hljs-comment, - html.theme--documenter-dark .hljs-quote { - color: #d4d0ab; } - html.theme--documenter-dark .hljs-variable, - html.theme--documenter-dark .hljs-template-variable, - html.theme--documenter-dark .hljs-tag, - html.theme--documenter-dark .hljs-name, - html.theme--documenter-dark .hljs-selector-id, - html.theme--documenter-dark .hljs-selector-class, - html.theme--documenter-dark .hljs-regexp, - html.theme--documenter-dark .hljs-deletion { - color: #ffa07a; } - html.theme--documenter-dark .hljs-number, - html.theme--documenter-dark .hljs-built_in, - html.theme--documenter-dark .hljs-literal, - html.theme--documenter-dark .hljs-type, - html.theme--documenter-dark .hljs-params, - html.theme--documenter-dark .hljs-meta, - html.theme--documenter-dark .hljs-link { - color: #f5ab35; } - html.theme--documenter-dark .hljs-attribute { - color: #ffd700; } - html.theme--documenter-dark .hljs-string, - html.theme--documenter-dark .hljs-symbol, - html.theme--documenter-dark .hljs-bullet, - html.theme--documenter-dark .hljs-addition { - color: #abe338; } - html.theme--documenter-dark .hljs-title, - html.theme--documenter-dark .hljs-section { - color: #00e0e0; } - html.theme--documenter-dark .hljs-keyword, - html.theme--documenter-dark .hljs-selector-tag { - color: #dcc6e0; } - html.theme--documenter-dark .hljs-emphasis { - font-style: italic; } - html.theme--documenter-dark .hljs-strong { - font-weight: bold; } - @media screen and (-ms-high-contrast: active) { - html.theme--documenter-dark .hljs-addition, - html.theme--documenter-dark .hljs-attribute, - html.theme--documenter-dark .hljs-built_in, - html.theme--documenter-dark .hljs-bullet, - html.theme--documenter-dark .hljs-comment, - html.theme--documenter-dark .hljs-link, - html.theme--documenter-dark .hljs-literal, - html.theme--documenter-dark .hljs-meta, - html.theme--documenter-dark .hljs-number, - html.theme--documenter-dark .hljs-params, - html.theme--documenter-dark .hljs-string, - html.theme--documenter-dark .hljs-symbol, - html.theme--documenter-dark .hljs-type, - html.theme--documenter-dark .hljs-quote { - color: highlight; } - html.theme--documenter-dark .hljs-keyword, - html.theme--documenter-dark .hljs-selector-tag { - font-weight: bold; } } - html.theme--documenter-dark .hljs-subst { - color: #f8f8f2; } diff --git a/docs/build/assets/themes/documenter-light.css b/docs/build/assets/themes/documenter-light.css deleted file mode 100644 index 3ce80106..00000000 --- a/docs/build/assets/themes/documenter-light.css +++ /dev/null @@ -1,7810 +0,0 @@ -@charset "UTF-8"; -/* Font Awesome 5 mixin. Can be included in any rule that should render Font Awesome icons. */ -@keyframes spinAround { - from { - transform: rotate(0deg); } - to { - transform: rotate(359deg); } } - -.delete, .modal-close, .is-unselectable, .button, .file, .breadcrumb, .pagination-previous, -.pagination-next, -.pagination-link, -.pagination-ellipsis, .tabs { - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; } - -.select:not(.is-multiple):not(.is-loading)::after, .navbar-link:not(.is-arrowless)::after { - border: 3px solid transparent; - border-radius: 2px; - border-right: 0; - border-top: 0; - content: " "; - display: block; - height: 0.625em; - margin-top: -0.4375em; - pointer-events: none; - position: absolute; - top: 50%; - transform: rotate(-45deg); - transform-origin: center; - width: 0.625em; } - -.box:not(:last-child), .content:not(:last-child), .notification:not(:last-child), .progress:not(:last-child), .table:not(:last-child), .table-container:not(:last-child), .title:not(:last-child), -.subtitle:not(:last-child), .block:not(:last-child), .highlight:not(:last-child), .breadcrumb:not(:last-child), .level:not(:last-child), .list:not(:last-child), .message:not(:last-child), .tabs:not(:last-child), .admonition:not(:last-child) { - margin-bottom: 1.5rem; } - -.delete, .modal-close { - -moz-appearance: none; - -webkit-appearance: none; - background-color: rgba(10, 10, 10, 0.2); - border: none; - border-radius: 290486px; - cursor: pointer; - pointer-events: auto; - display: inline-block; - flex-grow: 0; - flex-shrink: 0; - font-size: 0; - height: 20px; - max-height: 20px; - max-width: 20px; - min-height: 20px; - min-width: 20px; - outline: none; - position: relative; - vertical-align: top; - width: 20px; } - .delete::before, .modal-close::before, .delete::after, .modal-close::after { - background-color: white; - content: ""; - display: block; - left: 50%; - position: absolute; - top: 50%; - transform: translateX(-50%) translateY(-50%) rotate(45deg); - transform-origin: center center; } - .delete::before, .modal-close::before { - height: 2px; - width: 50%; } - .delete::after, .modal-close::after { - height: 50%; - width: 2px; } - .delete:hover, .modal-close:hover, .delete:focus, .modal-close:focus { - background-color: rgba(10, 10, 10, 0.3); } - .delete:active, .modal-close:active { - background-color: rgba(10, 10, 10, 0.4); } - .is-small.delete, #documenter .docs-sidebar form.docs-search > input.delete, .is-small.modal-close, #documenter .docs-sidebar form.docs-search > input.modal-close { - height: 16px; - max-height: 16px; - max-width: 16px; - min-height: 16px; - min-width: 16px; - width: 16px; } - .is-medium.delete, .is-medium.modal-close { - height: 24px; - max-height: 24px; - max-width: 24px; - min-height: 24px; - min-width: 24px; - width: 24px; } - .is-large.delete, .is-large.modal-close { - height: 32px; - max-height: 32px; - max-width: 32px; - min-height: 32px; - min-width: 32px; - width: 32px; } - -.button.is-loading::after, .loader, .select.is-loading::after, .control.is-loading::after { - animation: spinAround 500ms infinite linear; - border: 2px solid #dbdbdb; - border-radius: 290486px; - border-right-color: transparent; - border-top-color: transparent; - content: ""; - display: block; - height: 1em; - position: relative; - width: 1em; } - -.is-overlay, .image.is-square img, #documenter .docs-sidebar .docs-logo > img.is-square img, -.image.is-square .has-ratio, -#documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, .image.is-1by1 img, #documenter .docs-sidebar .docs-logo > img.is-1by1 img, -.image.is-1by1 .has-ratio, -#documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, .image.is-5by4 img, #documenter .docs-sidebar .docs-logo > img.is-5by4 img, -.image.is-5by4 .has-ratio, -#documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, .image.is-4by3 img, #documenter .docs-sidebar .docs-logo > img.is-4by3 img, -.image.is-4by3 .has-ratio, -#documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, .image.is-3by2 img, #documenter .docs-sidebar .docs-logo > img.is-3by2 img, -.image.is-3by2 .has-ratio, -#documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, .image.is-5by3 img, #documenter .docs-sidebar .docs-logo > img.is-5by3 img, -.image.is-5by3 .has-ratio, -#documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, .image.is-16by9 img, #documenter .docs-sidebar .docs-logo > img.is-16by9 img, -.image.is-16by9 .has-ratio, -#documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, .image.is-2by1 img, #documenter .docs-sidebar .docs-logo > img.is-2by1 img, -.image.is-2by1 .has-ratio, -#documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, .image.is-3by1 img, #documenter .docs-sidebar .docs-logo > img.is-3by1 img, -.image.is-3by1 .has-ratio, -#documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, .image.is-4by5 img, #documenter .docs-sidebar .docs-logo > img.is-4by5 img, -.image.is-4by5 .has-ratio, -#documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, .image.is-3by4 img, #documenter .docs-sidebar .docs-logo > img.is-3by4 img, -.image.is-3by4 .has-ratio, -#documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, .image.is-2by3 img, #documenter .docs-sidebar .docs-logo > img.is-2by3 img, -.image.is-2by3 .has-ratio, -#documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, .image.is-3by5 img, #documenter .docs-sidebar .docs-logo > img.is-3by5 img, -.image.is-3by5 .has-ratio, -#documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, .image.is-9by16 img, #documenter .docs-sidebar .docs-logo > img.is-9by16 img, -.image.is-9by16 .has-ratio, -#documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, .image.is-1by2 img, #documenter .docs-sidebar .docs-logo > img.is-1by2 img, -.image.is-1by2 .has-ratio, -#documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, .image.is-1by3 img, #documenter .docs-sidebar .docs-logo > img.is-1by3 img, -.image.is-1by3 .has-ratio, -#documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio, .modal, .modal-background, .hero-video { - bottom: 0; - left: 0; - position: absolute; - right: 0; - top: 0; } - -.button, .input, #documenter .docs-sidebar form.docs-search > input, .textarea, .select select, .file-cta, -.file-name, .pagination-previous, -.pagination-next, -.pagination-link, -.pagination-ellipsis { - -moz-appearance: none; - -webkit-appearance: none; - align-items: center; - border: 1px solid transparent; - border-radius: 4px; - box-shadow: none; - display: inline-flex; - font-size: 1rem; - height: 2.25em; - justify-content: flex-start; - line-height: 1.5; - padding-bottom: calc(0.375em - 1px); - padding-left: calc(0.625em - 1px); - padding-right: calc(0.625em - 1px); - padding-top: calc(0.375em - 1px); - position: relative; - vertical-align: top; } - .button:focus, .input:focus, #documenter .docs-sidebar form.docs-search > input:focus, .textarea:focus, .select select:focus, .file-cta:focus, - .file-name:focus, .pagination-previous:focus, - .pagination-next:focus, - .pagination-link:focus, - .pagination-ellipsis:focus, .is-focused.button, .is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-focused.textarea, .select select.is-focused, .is-focused.file-cta, - .is-focused.file-name, .is-focused.pagination-previous, - .is-focused.pagination-next, - .is-focused.pagination-link, - .is-focused.pagination-ellipsis, .button:active, .input:active, #documenter .docs-sidebar form.docs-search > input:active, .textarea:active, .select select:active, .file-cta:active, - .file-name:active, .pagination-previous:active, - .pagination-next:active, - .pagination-link:active, - .pagination-ellipsis:active, .is-active.button, .is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active, .is-active.textarea, .select select.is-active, .is-active.file-cta, - .is-active.file-name, .is-active.pagination-previous, - .is-active.pagination-next, - .is-active.pagination-link, - .is-active.pagination-ellipsis { - outline: none; } - .button[disabled], .input[disabled], #documenter .docs-sidebar form.docs-search > input[disabled], .textarea[disabled], .select select[disabled], .file-cta[disabled], - .file-name[disabled], .pagination-previous[disabled], - .pagination-next[disabled], - .pagination-link[disabled], - .pagination-ellipsis[disabled], - fieldset[disabled] .button, - fieldset[disabled] .input, - fieldset[disabled] #documenter .docs-sidebar form.docs-search > input, - #documenter .docs-sidebar fieldset[disabled] form.docs-search > input, - fieldset[disabled] .textarea, - fieldset[disabled] .select select, - .select fieldset[disabled] select, - fieldset[disabled] .file-cta, - fieldset[disabled] .file-name, - fieldset[disabled] .pagination-previous, - fieldset[disabled] .pagination-next, - fieldset[disabled] .pagination-link, - fieldset[disabled] .pagination-ellipsis { - cursor: not-allowed; } - -/*! minireset.css v0.0.4 | MIT License | github.com/jgthms/minireset.css */ -html, -body, -p, -ol, -ul, -li, -dl, -dt, -dd, -blockquote, -figure, -fieldset, -legend, -textarea, -pre, -iframe, -hr, -h1, -h2, -h3, -h4, -h5, -h6 { - margin: 0; - padding: 0; } - -h1, -h2, -h3, -h4, -h5, -h6 { - font-size: 100%; - font-weight: normal; } - -ul { - list-style: none; } - -button, -input, -select, -textarea { - margin: 0; } - -html { - box-sizing: border-box; } - -*, *::before, *::after { - box-sizing: inherit; } - -img, -embed, -iframe, -object, -video { - height: auto; - max-width: 100%; } - -audio { - max-width: 100%; } - -iframe { - border: 0; } - -table { - border-collapse: collapse; - border-spacing: 0; } - -td, -th { - padding: 0; } - td:not([align]), - th:not([align]) { - text-align: left; } - -html { - background-color: white; - font-size: 16px; - -moz-osx-font-smoothing: grayscale; - -webkit-font-smoothing: antialiased; - min-width: 300px; - overflow-x: auto; - overflow-y: scroll; - text-rendering: optimizeLegibility; - text-size-adjust: 100%; } - -article, -aside, -figure, -footer, -header, -hgroup, -section { - display: block; } - -body, -button, -input, -select, -textarea { - font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif; } - -code, -pre { - -moz-osx-font-smoothing: auto; - -webkit-font-smoothing: auto; - font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace; } - -body { - color: #222222; - font-size: 1em; - font-weight: 400; - line-height: 1.5; } - -a { - color: #2e63b8; - cursor: pointer; - text-decoration: none; } - a strong { - color: currentColor; } - a:hover { - color: #363636; } - -code { - background-color: rgba(0, 0, 0, 0.05); - color: #000000; - font-size: 0.875em; - font-weight: normal; - padding: 0.1em; } - -hr { - background-color: whitesmoke; - border: none; - display: block; - height: 2px; - margin: 1.5rem 0; } - -img { - height: auto; - max-width: 100%; } - -input[type="checkbox"], -input[type="radio"] { - vertical-align: baseline; } - -small { - font-size: 0.875em; } - -span { - font-style: inherit; - font-weight: inherit; } - -strong { - color: #222222; - font-weight: 700; } - -fieldset { - border: none; } - -pre { - -webkit-overflow-scrolling: touch; - background-color: whitesmoke; - color: #222222; - font-size: 0.875em; - overflow-x: auto; - padding: 1.25rem 1.5rem; - white-space: pre; - word-wrap: normal; } - pre code { - background-color: transparent; - color: currentColor; - font-size: 1em; - padding: 0; } - -table td, -table th { - vertical-align: top; } - table td:not([align]), - table th:not([align]) { - text-align: left; } - -table th { - color: #222222; } - -.is-clearfix::after { - clear: both; - content: " "; - display: table; } - -.is-pulled-left { - float: left !important; } - -.is-pulled-right { - float: right !important; } - -.is-clipped { - overflow: hidden !important; } - -.is-size-1 { - font-size: 3rem !important; } - -.is-size-2 { - font-size: 2.5rem !important; } - -.is-size-3 { - font-size: 2rem !important; } - -.is-size-4 { - font-size: 1.5rem !important; } - -.is-size-5 { - font-size: 1.25rem !important; } - -.is-size-6 { - font-size: 1rem !important; } - -.is-size-7, .docstring > section > a.docs-sourcelink { - font-size: 0.75rem !important; } - -@media screen and (max-width: 768px) { - .is-size-1-mobile { - font-size: 3rem !important; } - .is-size-2-mobile { - font-size: 2.5rem !important; } - .is-size-3-mobile { - font-size: 2rem !important; } - .is-size-4-mobile { - font-size: 1.5rem !important; } - .is-size-5-mobile { - font-size: 1.25rem !important; } - .is-size-6-mobile { - font-size: 1rem !important; } - .is-size-7-mobile { - font-size: 0.75rem !important; } } - -@media screen and (min-width: 769px), print { - .is-size-1-tablet { - font-size: 3rem !important; } - .is-size-2-tablet { - font-size: 2.5rem !important; } - .is-size-3-tablet { - font-size: 2rem !important; } - .is-size-4-tablet { - font-size: 1.5rem !important; } - .is-size-5-tablet { - font-size: 1.25rem !important; } - .is-size-6-tablet { - font-size: 1rem !important; } - .is-size-7-tablet { - font-size: 0.75rem !important; } } - -@media screen and (max-width: 1055px) { - .is-size-1-touch { - font-size: 3rem !important; } - .is-size-2-touch { - font-size: 2.5rem !important; } - .is-size-3-touch { - font-size: 2rem !important; } - .is-size-4-touch { - font-size: 1.5rem !important; } - .is-size-5-touch { - font-size: 1.25rem !important; } - .is-size-6-touch { - font-size: 1rem !important; } - .is-size-7-touch { - font-size: 0.75rem !important; } } - -@media screen and (min-width: 1056px) { - .is-size-1-desktop { - font-size: 3rem !important; } - .is-size-2-desktop { - font-size: 2.5rem !important; } - .is-size-3-desktop { - font-size: 2rem !important; } - .is-size-4-desktop { - font-size: 1.5rem !important; } - .is-size-5-desktop { - font-size: 1.25rem !important; } - .is-size-6-desktop { - font-size: 1rem !important; } - .is-size-7-desktop { - font-size: 0.75rem !important; } } - -@media screen and (min-width: 1216px) { - .is-size-1-widescreen { - font-size: 3rem !important; } - .is-size-2-widescreen { - font-size: 2.5rem !important; } - .is-size-3-widescreen { - font-size: 2rem !important; } - .is-size-4-widescreen { - font-size: 1.5rem !important; } - .is-size-5-widescreen { - font-size: 1.25rem !important; } - .is-size-6-widescreen { - font-size: 1rem !important; } - .is-size-7-widescreen { - font-size: 0.75rem !important; } } - -@media screen and (min-width: 1408px) { - .is-size-1-fullhd { - font-size: 3rem !important; } - .is-size-2-fullhd { - font-size: 2.5rem !important; } - .is-size-3-fullhd { - font-size: 2rem !important; } - .is-size-4-fullhd { - font-size: 1.5rem !important; } - .is-size-5-fullhd { - font-size: 1.25rem !important; } - .is-size-6-fullhd { - font-size: 1rem !important; } - .is-size-7-fullhd { - font-size: 0.75rem !important; } } - -.has-text-centered { - text-align: center !important; } - -.has-text-justified { - text-align: justify !important; } - -.has-text-left { - text-align: left !important; } - -.has-text-right { - text-align: right !important; } - -@media screen and (max-width: 768px) { - .has-text-centered-mobile { - text-align: center !important; } } - -@media screen and (min-width: 769px), print { - .has-text-centered-tablet { - text-align: center !important; } } - -@media screen and (min-width: 769px) and (max-width: 1055px) { - .has-text-centered-tablet-only { - text-align: center !important; } } - -@media screen and (max-width: 1055px) { - .has-text-centered-touch { - text-align: center !important; } } - -@media screen and (min-width: 1056px) { - .has-text-centered-desktop { - text-align: center !important; } } - -@media screen and (min-width: 1056px) and (max-width: 1215px) { - .has-text-centered-desktop-only { - text-align: center !important; } } - -@media screen and (min-width: 1216px) { - .has-text-centered-widescreen { - text-align: center !important; } } - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .has-text-centered-widescreen-only { - text-align: center !important; } } - -@media screen and (min-width: 1408px) { - .has-text-centered-fullhd { - text-align: center !important; } } - -@media screen and (max-width: 768px) { - .has-text-justified-mobile { - text-align: justify !important; } } - -@media screen and (min-width: 769px), print { - .has-text-justified-tablet { - text-align: justify !important; } } - -@media screen and (min-width: 769px) and (max-width: 1055px) { - .has-text-justified-tablet-only { - text-align: justify !important; } } - -@media screen and (max-width: 1055px) { - .has-text-justified-touch { - text-align: justify !important; } } - -@media screen and (min-width: 1056px) { - .has-text-justified-desktop { - text-align: justify !important; } } - -@media screen and (min-width: 1056px) and (max-width: 1215px) { - .has-text-justified-desktop-only { - text-align: justify !important; } } - -@media screen and (min-width: 1216px) { - .has-text-justified-widescreen { - text-align: justify !important; } } - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .has-text-justified-widescreen-only { - text-align: justify !important; } } - -@media screen and (min-width: 1408px) { - .has-text-justified-fullhd { - text-align: justify !important; } } - -@media screen and (max-width: 768px) { - .has-text-left-mobile { - text-align: left !important; } } - -@media screen and (min-width: 769px), print { - .has-text-left-tablet { - text-align: left !important; } } - -@media screen and (min-width: 769px) and (max-width: 1055px) { - .has-text-left-tablet-only { - text-align: left !important; } } - -@media screen and (max-width: 1055px) { - .has-text-left-touch { - text-align: left !important; } } - -@media screen and (min-width: 1056px) { - .has-text-left-desktop { - text-align: left !important; } } - -@media screen and (min-width: 1056px) and (max-width: 1215px) { - .has-text-left-desktop-only { - text-align: left !important; } } - -@media screen and (min-width: 1216px) { - .has-text-left-widescreen { - text-align: left !important; } } - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .has-text-left-widescreen-only { - text-align: left !important; } } - -@media screen and (min-width: 1408px) { - .has-text-left-fullhd { - text-align: left !important; } } - -@media screen and (max-width: 768px) { - .has-text-right-mobile { - text-align: right !important; } } - -@media screen and (min-width: 769px), print { - .has-text-right-tablet { - text-align: right !important; } } - -@media screen and (min-width: 769px) and (max-width: 1055px) { - .has-text-right-tablet-only { - text-align: right !important; } } - -@media screen and (max-width: 1055px) { - .has-text-right-touch { - text-align: right !important; } } - -@media screen and (min-width: 1056px) { - .has-text-right-desktop { - text-align: right !important; } } - -@media screen and (min-width: 1056px) and (max-width: 1215px) { - .has-text-right-desktop-only { - text-align: right !important; } } - -@media screen and (min-width: 1216px) { - .has-text-right-widescreen { - text-align: right !important; } } - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .has-text-right-widescreen-only { - text-align: right !important; } } - -@media screen and (min-width: 1408px) { - .has-text-right-fullhd { - text-align: right !important; } } - -.is-capitalized { - text-transform: capitalize !important; } - -.is-lowercase { - text-transform: lowercase !important; } - -.is-uppercase { - text-transform: uppercase !important; } - -.is-italic { - font-style: italic !important; } - -.has-text-white { - color: white !important; } - -a.has-text-white:hover, a.has-text-white:focus { - color: #e6e6e6 !important; } - -.has-background-white { - background-color: white !important; } - -.has-text-black { - color: #0a0a0a !important; } - -a.has-text-black:hover, a.has-text-black:focus { - color: black !important; } - -.has-background-black { - background-color: #0a0a0a !important; } - -.has-text-light { - color: whitesmoke !important; } - -a.has-text-light:hover, a.has-text-light:focus { - color: #dbdbdb !important; } - -.has-background-light { - background-color: whitesmoke !important; } - -.has-text-dark { - color: #363636 !important; } - -a.has-text-dark:hover, a.has-text-dark:focus { - color: #1c1c1c !important; } - -.has-background-dark { - background-color: #363636 !important; } - -.has-text-primary { - color: #4eb5de !important; } - -a.has-text-primary:hover, a.has-text-primary:focus { - color: #27a1d2 !important; } - -.has-background-primary { - background-color: #4eb5de !important; } - -.has-text-link { - color: #2e63b8 !important; } - -a.has-text-link:hover, a.has-text-link:focus { - color: #244d8f !important; } - -.has-background-link { - background-color: #2e63b8 !important; } - -.has-text-info { - color: #209cee !important; } - -a.has-text-info:hover, a.has-text-info:focus { - color: #1081cb !important; } - -.has-background-info { - background-color: #209cee !important; } - -.has-text-success { - color: #22c35b !important; } - -a.has-text-success:hover, a.has-text-success:focus { - color: #1a9847 !important; } - -.has-background-success { - background-color: #22c35b !important; } - -.has-text-warning { - color: #ffdd57 !important; } - -a.has-text-warning:hover, a.has-text-warning:focus { - color: #ffd324 !important; } - -.has-background-warning { - background-color: #ffdd57 !important; } - -.has-text-danger { - color: #da0b00 !important; } - -a.has-text-danger:hover, a.has-text-danger:focus { - color: #a70800 !important; } - -.has-background-danger { - background-color: #da0b00 !important; } - -.has-text-black-bis { - color: #121212 !important; } - -.has-background-black-bis { - background-color: #121212 !important; } - -.has-text-black-ter { - color: #242424 !important; } - -.has-background-black-ter { - background-color: #242424 !important; } - -.has-text-grey-darker { - color: #363636 !important; } - -.has-background-grey-darker { - background-color: #363636 !important; } - -.has-text-grey-dark { - color: #4a4a4a !important; } - -.has-background-grey-dark { - background-color: #4a4a4a !important; } - -.has-text-grey { - color: #7a7a7a !important; } - -.has-background-grey { - background-color: #7a7a7a !important; } - -.has-text-grey-light { - color: #b5b5b5 !important; } - -.has-background-grey-light { - background-color: #b5b5b5 !important; } - -.has-text-grey-lighter { - color: #dbdbdb !important; } - -.has-background-grey-lighter { - background-color: #dbdbdb !important; } - -.has-text-white-ter { - color: whitesmoke !important; } - -.has-background-white-ter { - background-color: whitesmoke !important; } - -.has-text-white-bis { - color: #fafafa !important; } - -.has-background-white-bis { - background-color: #fafafa !important; } - -.has-text-weight-light { - font-weight: 300 !important; } - -.has-text-weight-normal { - font-weight: 400 !important; } - -.has-text-weight-medium { - font-weight: 500 !important; } - -.has-text-weight-semibold { - font-weight: 600 !important; } - -.has-text-weight-bold { - font-weight: 700 !important; } - -.is-family-primary { - font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } - -.is-family-secondary { - font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } - -.is-family-sans-serif { - font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } - -.is-family-monospace { - font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } - -.is-family-code { - font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } - -.is-block { - display: block !important; } - -@media screen and (max-width: 768px) { - .is-block-mobile { - display: block !important; } } - -@media screen and (min-width: 769px), print { - .is-block-tablet { - display: block !important; } } - -@media screen and (min-width: 769px) and (max-width: 1055px) { - .is-block-tablet-only { - display: block !important; } } - -@media screen and (max-width: 1055px) { - .is-block-touch { - display: block !important; } } - -@media screen and (min-width: 1056px) { - .is-block-desktop { - display: block !important; } } - -@media screen and (min-width: 1056px) and (max-width: 1215px) { - .is-block-desktop-only { - display: block !important; } } - -@media screen and (min-width: 1216px) { - .is-block-widescreen { - display: block !important; } } - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .is-block-widescreen-only { - display: block !important; } } - -@media screen and (min-width: 1408px) { - .is-block-fullhd { - display: block !important; } } - -.is-flex { - display: flex !important; } - -@media screen and (max-width: 768px) { - .is-flex-mobile { - display: flex !important; } } - -@media screen and (min-width: 769px), print { - .is-flex-tablet { - display: flex !important; } } - -@media screen and (min-width: 769px) and (max-width: 1055px) { - .is-flex-tablet-only { - display: flex !important; } } - -@media screen and (max-width: 1055px) { - .is-flex-touch { - display: flex !important; } } - -@media screen and (min-width: 1056px) { - .is-flex-desktop { - display: flex !important; } } - -@media screen and (min-width: 1056px) and (max-width: 1215px) { - .is-flex-desktop-only { - display: flex !important; } } - -@media screen and (min-width: 1216px) { - .is-flex-widescreen { - display: flex !important; } } - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .is-flex-widescreen-only { - display: flex !important; } } - -@media screen and (min-width: 1408px) { - .is-flex-fullhd { - display: flex !important; } } - -.is-inline { - display: inline !important; } - -@media screen and (max-width: 768px) { - .is-inline-mobile { - display: inline !important; } } - -@media screen and (min-width: 769px), print { - .is-inline-tablet { - display: inline !important; } } - -@media screen and (min-width: 769px) and (max-width: 1055px) { - .is-inline-tablet-only { - display: inline !important; } } - -@media screen and (max-width: 1055px) { - .is-inline-touch { - display: inline !important; } } - -@media screen and (min-width: 1056px) { - .is-inline-desktop { - display: inline !important; } } - -@media screen and (min-width: 1056px) and (max-width: 1215px) { - .is-inline-desktop-only { - display: inline !important; } } - -@media screen and (min-width: 1216px) { - .is-inline-widescreen { - display: inline !important; } } - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .is-inline-widescreen-only { - display: inline !important; } } - -@media screen and (min-width: 1408px) { - .is-inline-fullhd { - display: inline !important; } } - -.is-inline-block { - display: inline-block !important; } - -@media screen and (max-width: 768px) { - .is-inline-block-mobile { - display: inline-block !important; } } - -@media screen and (min-width: 769px), print { - .is-inline-block-tablet { - display: inline-block !important; } } - -@media screen and (min-width: 769px) and (max-width: 1055px) { - .is-inline-block-tablet-only { - display: inline-block !important; } } - -@media screen and (max-width: 1055px) { - .is-inline-block-touch { - display: inline-block !important; } } - -@media screen and (min-width: 1056px) { - .is-inline-block-desktop { - display: inline-block !important; } } - -@media screen and (min-width: 1056px) and (max-width: 1215px) { - .is-inline-block-desktop-only { - display: inline-block !important; } } - -@media screen and (min-width: 1216px) { - .is-inline-block-widescreen { - display: inline-block !important; } } - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .is-inline-block-widescreen-only { - display: inline-block !important; } } - -@media screen and (min-width: 1408px) { - .is-inline-block-fullhd { - display: inline-block !important; } } - -.is-inline-flex { - display: inline-flex !important; } - -@media screen and (max-width: 768px) { - .is-inline-flex-mobile { - display: inline-flex !important; } } - -@media screen and (min-width: 769px), print { - .is-inline-flex-tablet { - display: inline-flex !important; } } - -@media screen and (min-width: 769px) and (max-width: 1055px) { - .is-inline-flex-tablet-only { - display: inline-flex !important; } } - -@media screen and (max-width: 1055px) { - .is-inline-flex-touch { - display: inline-flex !important; } } - -@media screen and (min-width: 1056px) { - .is-inline-flex-desktop { - display: inline-flex !important; } } - -@media screen and (min-width: 1056px) and (max-width: 1215px) { - .is-inline-flex-desktop-only { - display: inline-flex !important; } } - -@media screen and (min-width: 1216px) { - .is-inline-flex-widescreen { - display: inline-flex !important; } } - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .is-inline-flex-widescreen-only { - display: inline-flex !important; } } - -@media screen and (min-width: 1408px) { - .is-inline-flex-fullhd { - display: inline-flex !important; } } - -.is-hidden { - display: none !important; } - -.is-sr-only { - border: none !important; - clip: rect(0, 0, 0, 0) !important; - height: 0.01em !important; - overflow: hidden !important; - padding: 0 !important; - position: absolute !important; - white-space: nowrap !important; - width: 0.01em !important; } - -@media screen and (max-width: 768px) { - .is-hidden-mobile { - display: none !important; } } - -@media screen and (min-width: 769px), print { - .is-hidden-tablet { - display: none !important; } } - -@media screen and (min-width: 769px) and (max-width: 1055px) { - .is-hidden-tablet-only { - display: none !important; } } - -@media screen and (max-width: 1055px) { - .is-hidden-touch { - display: none !important; } } - -@media screen and (min-width: 1056px) { - .is-hidden-desktop { - display: none !important; } } - -@media screen and (min-width: 1056px) and (max-width: 1215px) { - .is-hidden-desktop-only { - display: none !important; } } - -@media screen and (min-width: 1216px) { - .is-hidden-widescreen { - display: none !important; } } - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .is-hidden-widescreen-only { - display: none !important; } } - -@media screen and (min-width: 1408px) { - .is-hidden-fullhd { - display: none !important; } } - -.is-invisible { - visibility: hidden !important; } - -@media screen and (max-width: 768px) { - .is-invisible-mobile { - visibility: hidden !important; } } - -@media screen and (min-width: 769px), print { - .is-invisible-tablet { - visibility: hidden !important; } } - -@media screen and (min-width: 769px) and (max-width: 1055px) { - .is-invisible-tablet-only { - visibility: hidden !important; } } - -@media screen and (max-width: 1055px) { - .is-invisible-touch { - visibility: hidden !important; } } - -@media screen and (min-width: 1056px) { - .is-invisible-desktop { - visibility: hidden !important; } } - -@media screen and (min-width: 1056px) and (max-width: 1215px) { - .is-invisible-desktop-only { - visibility: hidden !important; } } - -@media screen and (min-width: 1216px) { - .is-invisible-widescreen { - visibility: hidden !important; } } - -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .is-invisible-widescreen-only { - visibility: hidden !important; } } - -@media screen and (min-width: 1408px) { - .is-invisible-fullhd { - visibility: hidden !important; } } - -.is-marginless { - margin: 0 !important; } - -.is-paddingless { - padding: 0 !important; } - -.is-radiusless { - border-radius: 0 !important; } - -.is-shadowless { - box-shadow: none !important; } - -.is-relative { - position: relative !important; } - -.box { - background-color: white; - border-radius: 6px; - box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); - color: #222222; - display: block; - padding: 1.25rem; } - -a.box:hover, a.box:focus { - box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px #2e63b8; } - -a.box:active { - box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2), 0 0 0 1px #2e63b8; } - -.button { - background-color: white; - border-color: #dbdbdb; - border-width: 1px; - color: #363636; - cursor: pointer; - justify-content: center; - padding-bottom: calc(0.375em - 1px); - padding-left: 0.75em; - padding-right: 0.75em; - padding-top: calc(0.375em - 1px); - text-align: center; - white-space: nowrap; } - .button strong { - color: inherit; } - .button .icon, .button .icon.is-small, .button #documenter .docs-sidebar form.docs-search > input.icon, #documenter .docs-sidebar .button form.docs-search > input.icon, .button .icon.is-medium, .button .icon.is-large { - height: 1.5em; - width: 1.5em; } - .button .icon:first-child:not(:last-child) { - margin-left: calc(-0.375em - 1px); - margin-right: 0.1875em; } - .button .icon:last-child:not(:first-child) { - margin-left: 0.1875em; - margin-right: calc(-0.375em - 1px); } - .button .icon:first-child:last-child { - margin-left: calc(-0.375em - 1px); - margin-right: calc(-0.375em - 1px); } - .button:hover, .button.is-hovered { - border-color: #b5b5b5; - color: #363636; } - .button:focus, .button.is-focused { - border-color: #3c5dcd; - color: #363636; } - .button:focus:not(:active), .button.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } - .button:active, .button.is-active { - border-color: #4a4a4a; - color: #363636; } - .button.is-text { - background-color: transparent; - border-color: transparent; - color: #222222; - text-decoration: underline; } - .button.is-text:hover, .button.is-text.is-hovered, .button.is-text:focus, .button.is-text.is-focused { - background-color: whitesmoke; - color: #222222; } - .button.is-text:active, .button.is-text.is-active { - background-color: #e8e8e8; - color: #222222; } - .button.is-text[disabled], - fieldset[disabled] .button.is-text { - background-color: transparent; - border-color: transparent; - box-shadow: none; } - .button.is-white { - background-color: white; - border-color: transparent; - color: #0a0a0a; } - .button.is-white:hover, .button.is-white.is-hovered { - background-color: #f9f9f9; - border-color: transparent; - color: #0a0a0a; } - .button.is-white:focus, .button.is-white.is-focused { - border-color: transparent; - color: #0a0a0a; } - .button.is-white:focus:not(:active), .button.is-white.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } - .button.is-white:active, .button.is-white.is-active { - background-color: #f2f2f2; - border-color: transparent; - color: #0a0a0a; } - .button.is-white[disabled], - fieldset[disabled] .button.is-white { - background-color: white; - border-color: transparent; - box-shadow: none; } - .button.is-white.is-inverted { - background-color: #0a0a0a; - color: white; } - .button.is-white.is-inverted:hover, .button.is-white.is-inverted.is-hovered { - background-color: black; } - .button.is-white.is-inverted[disabled], - fieldset[disabled] .button.is-white.is-inverted { - background-color: #0a0a0a; - border-color: transparent; - box-shadow: none; - color: white; } - .button.is-white.is-loading::after { - border-color: transparent transparent #0a0a0a #0a0a0a !important; } - .button.is-white.is-outlined { - background-color: transparent; - border-color: white; - color: white; } - .button.is-white.is-outlined:hover, .button.is-white.is-outlined.is-hovered, .button.is-white.is-outlined:focus, .button.is-white.is-outlined.is-focused { - background-color: white; - border-color: white; - color: #0a0a0a; } - .button.is-white.is-outlined.is-loading::after { - border-color: transparent transparent white white !important; } - .button.is-white.is-outlined.is-loading:hover::after, .button.is-white.is-outlined.is-loading.is-hovered::after, .button.is-white.is-outlined.is-loading:focus::after, .button.is-white.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #0a0a0a #0a0a0a !important; } - .button.is-white.is-outlined[disabled], - fieldset[disabled] .button.is-white.is-outlined { - background-color: transparent; - border-color: white; - box-shadow: none; - color: white; } - .button.is-white.is-inverted.is-outlined { - background-color: transparent; - border-color: #0a0a0a; - color: #0a0a0a; } - .button.is-white.is-inverted.is-outlined:hover, .button.is-white.is-inverted.is-outlined.is-hovered, .button.is-white.is-inverted.is-outlined:focus, .button.is-white.is-inverted.is-outlined.is-focused { - background-color: #0a0a0a; - color: white; } - .button.is-white.is-inverted.is-outlined.is-loading:hover::after, .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-white.is-inverted.is-outlined.is-loading:focus::after, .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent white white !important; } - .button.is-white.is-inverted.is-outlined[disabled], - fieldset[disabled] .button.is-white.is-inverted.is-outlined { - background-color: transparent; - border-color: #0a0a0a; - box-shadow: none; - color: #0a0a0a; } - .button.is-black { - background-color: #0a0a0a; - border-color: transparent; - color: white; } - .button.is-black:hover, .button.is-black.is-hovered { - background-color: #040404; - border-color: transparent; - color: white; } - .button.is-black:focus, .button.is-black.is-focused { - border-color: transparent; - color: white; } - .button.is-black:focus:not(:active), .button.is-black.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } - .button.is-black:active, .button.is-black.is-active { - background-color: black; - border-color: transparent; - color: white; } - .button.is-black[disabled], - fieldset[disabled] .button.is-black { - background-color: #0a0a0a; - border-color: transparent; - box-shadow: none; } - .button.is-black.is-inverted { - background-color: white; - color: #0a0a0a; } - .button.is-black.is-inverted:hover, .button.is-black.is-inverted.is-hovered { - background-color: #f2f2f2; } - .button.is-black.is-inverted[disabled], - fieldset[disabled] .button.is-black.is-inverted { - background-color: white; - border-color: transparent; - box-shadow: none; - color: #0a0a0a; } - .button.is-black.is-loading::after { - border-color: transparent transparent white white !important; } - .button.is-black.is-outlined { - background-color: transparent; - border-color: #0a0a0a; - color: #0a0a0a; } - .button.is-black.is-outlined:hover, .button.is-black.is-outlined.is-hovered, .button.is-black.is-outlined:focus, .button.is-black.is-outlined.is-focused { - background-color: #0a0a0a; - border-color: #0a0a0a; - color: white; } - .button.is-black.is-outlined.is-loading::after { - border-color: transparent transparent #0a0a0a #0a0a0a !important; } - .button.is-black.is-outlined.is-loading:hover::after, .button.is-black.is-outlined.is-loading.is-hovered::after, .button.is-black.is-outlined.is-loading:focus::after, .button.is-black.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent white white !important; } - .button.is-black.is-outlined[disabled], - fieldset[disabled] .button.is-black.is-outlined { - background-color: transparent; - border-color: #0a0a0a; - box-shadow: none; - color: #0a0a0a; } - .button.is-black.is-inverted.is-outlined { - background-color: transparent; - border-color: white; - color: white; } - .button.is-black.is-inverted.is-outlined:hover, .button.is-black.is-inverted.is-outlined.is-hovered, .button.is-black.is-inverted.is-outlined:focus, .button.is-black.is-inverted.is-outlined.is-focused { - background-color: white; - color: #0a0a0a; } - .button.is-black.is-inverted.is-outlined.is-loading:hover::after, .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-black.is-inverted.is-outlined.is-loading:focus::after, .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #0a0a0a #0a0a0a !important; } - .button.is-black.is-inverted.is-outlined[disabled], - fieldset[disabled] .button.is-black.is-inverted.is-outlined { - background-color: transparent; - border-color: white; - box-shadow: none; - color: white; } - .button.is-light { - background-color: whitesmoke; - border-color: transparent; - color: #363636; } - .button.is-light:hover, .button.is-light.is-hovered { - background-color: #eeeeee; - border-color: transparent; - color: #363636; } - .button.is-light:focus, .button.is-light.is-focused { - border-color: transparent; - color: #363636; } - .button.is-light:focus:not(:active), .button.is-light.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); } - .button.is-light:active, .button.is-light.is-active { - background-color: #e8e8e8; - border-color: transparent; - color: #363636; } - .button.is-light[disabled], - fieldset[disabled] .button.is-light { - background-color: whitesmoke; - border-color: transparent; - box-shadow: none; } - .button.is-light.is-inverted { - background-color: #363636; - color: whitesmoke; } - .button.is-light.is-inverted:hover, .button.is-light.is-inverted.is-hovered { - background-color: #292929; } - .button.is-light.is-inverted[disabled], - fieldset[disabled] .button.is-light.is-inverted { - background-color: #363636; - border-color: transparent; - box-shadow: none; - color: whitesmoke; } - .button.is-light.is-loading::after { - border-color: transparent transparent #363636 #363636 !important; } - .button.is-light.is-outlined { - background-color: transparent; - border-color: whitesmoke; - color: whitesmoke; } - .button.is-light.is-outlined:hover, .button.is-light.is-outlined.is-hovered, .button.is-light.is-outlined:focus, .button.is-light.is-outlined.is-focused { - background-color: whitesmoke; - border-color: whitesmoke; - color: #363636; } - .button.is-light.is-outlined.is-loading::after { - border-color: transparent transparent whitesmoke whitesmoke !important; } - .button.is-light.is-outlined.is-loading:hover::after, .button.is-light.is-outlined.is-loading.is-hovered::after, .button.is-light.is-outlined.is-loading:focus::after, .button.is-light.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #363636 #363636 !important; } - .button.is-light.is-outlined[disabled], - fieldset[disabled] .button.is-light.is-outlined { - background-color: transparent; - border-color: whitesmoke; - box-shadow: none; - color: whitesmoke; } - .button.is-light.is-inverted.is-outlined { - background-color: transparent; - border-color: #363636; - color: #363636; } - .button.is-light.is-inverted.is-outlined:hover, .button.is-light.is-inverted.is-outlined.is-hovered, .button.is-light.is-inverted.is-outlined:focus, .button.is-light.is-inverted.is-outlined.is-focused { - background-color: #363636; - color: whitesmoke; } - .button.is-light.is-inverted.is-outlined.is-loading:hover::after, .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-light.is-inverted.is-outlined.is-loading:focus::after, .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent whitesmoke whitesmoke !important; } - .button.is-light.is-inverted.is-outlined[disabled], - fieldset[disabled] .button.is-light.is-inverted.is-outlined { - background-color: transparent; - border-color: #363636; - box-shadow: none; - color: #363636; } - .button.is-dark, .content kbd.button { - background-color: #363636; - border-color: transparent; - color: whitesmoke; } - .button.is-dark:hover, .content kbd.button:hover, .button.is-dark.is-hovered, .content kbd.button.is-hovered { - background-color: #2f2f2f; - border-color: transparent; - color: whitesmoke; } - .button.is-dark:focus, .content kbd.button:focus, .button.is-dark.is-focused, .content kbd.button.is-focused { - border-color: transparent; - color: whitesmoke; } - .button.is-dark:focus:not(:active), .content kbd.button:focus:not(:active), .button.is-dark.is-focused:not(:active), .content kbd.button.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); } - .button.is-dark:active, .content kbd.button:active, .button.is-dark.is-active, .content kbd.button.is-active { - background-color: #292929; - border-color: transparent; - color: whitesmoke; } - .button.is-dark[disabled], .content kbd.button[disabled], - fieldset[disabled] .button.is-dark, - fieldset[disabled] .content kbd.button, - .content fieldset[disabled] kbd.button { - background-color: #363636; - border-color: transparent; - box-shadow: none; } - .button.is-dark.is-inverted, .content kbd.button.is-inverted { - background-color: whitesmoke; - color: #363636; } - .button.is-dark.is-inverted:hover, .content kbd.button.is-inverted:hover, .button.is-dark.is-inverted.is-hovered, .content kbd.button.is-inverted.is-hovered { - background-color: #e8e8e8; } - .button.is-dark.is-inverted[disabled], .content kbd.button.is-inverted[disabled], - fieldset[disabled] .button.is-dark.is-inverted, - fieldset[disabled] .content kbd.button.is-inverted, - .content fieldset[disabled] kbd.button.is-inverted { - background-color: whitesmoke; - border-color: transparent; - box-shadow: none; - color: #363636; } - .button.is-dark.is-loading::after, .content kbd.button.is-loading::after { - border-color: transparent transparent whitesmoke whitesmoke !important; } - .button.is-dark.is-outlined, .content kbd.button.is-outlined { - background-color: transparent; - border-color: #363636; - color: #363636; } - .button.is-dark.is-outlined:hover, .content kbd.button.is-outlined:hover, .button.is-dark.is-outlined.is-hovered, .content kbd.button.is-outlined.is-hovered, .button.is-dark.is-outlined:focus, .content kbd.button.is-outlined:focus, .button.is-dark.is-outlined.is-focused, .content kbd.button.is-outlined.is-focused { - background-color: #363636; - border-color: #363636; - color: whitesmoke; } - .button.is-dark.is-outlined.is-loading::after, .content kbd.button.is-outlined.is-loading::after { - border-color: transparent transparent #363636 #363636 !important; } - .button.is-dark.is-outlined.is-loading:hover::after, .content kbd.button.is-outlined.is-loading:hover::after, .button.is-dark.is-outlined.is-loading.is-hovered::after, .content kbd.button.is-outlined.is-loading.is-hovered::after, .button.is-dark.is-outlined.is-loading:focus::after, .content kbd.button.is-outlined.is-loading:focus::after, .button.is-dark.is-outlined.is-loading.is-focused::after, .content kbd.button.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent whitesmoke whitesmoke !important; } - .button.is-dark.is-outlined[disabled], .content kbd.button.is-outlined[disabled], - fieldset[disabled] .button.is-dark.is-outlined, - fieldset[disabled] .content kbd.button.is-outlined, - .content fieldset[disabled] kbd.button.is-outlined { - background-color: transparent; - border-color: #363636; - box-shadow: none; - color: #363636; } - .button.is-dark.is-inverted.is-outlined, .content kbd.button.is-inverted.is-outlined { - background-color: transparent; - border-color: whitesmoke; - color: whitesmoke; } - .button.is-dark.is-inverted.is-outlined:hover, .content kbd.button.is-inverted.is-outlined:hover, .button.is-dark.is-inverted.is-outlined.is-hovered, .content kbd.button.is-inverted.is-outlined.is-hovered, .button.is-dark.is-inverted.is-outlined:focus, .content kbd.button.is-inverted.is-outlined:focus, .button.is-dark.is-inverted.is-outlined.is-focused, .content kbd.button.is-inverted.is-outlined.is-focused { - background-color: whitesmoke; - color: #363636; } - .button.is-dark.is-inverted.is-outlined.is-loading:hover::after, .content kbd.button.is-inverted.is-outlined.is-loading:hover::after, .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after, .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-dark.is-inverted.is-outlined.is-loading:focus::after, .content kbd.button.is-inverted.is-outlined.is-loading:focus::after, .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after, .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #363636 #363636 !important; } - .button.is-dark.is-inverted.is-outlined[disabled], .content kbd.button.is-inverted.is-outlined[disabled], - fieldset[disabled] .button.is-dark.is-inverted.is-outlined, - fieldset[disabled] .content kbd.button.is-inverted.is-outlined, - .content fieldset[disabled] kbd.button.is-inverted.is-outlined { - background-color: transparent; - border-color: whitesmoke; - box-shadow: none; - color: whitesmoke; } - .button.is-primary, .docstring > section > a.button.docs-sourcelink { - background-color: #4eb5de; - border-color: transparent; - color: #fff; } - .button.is-primary:hover, .docstring > section > a.button.docs-sourcelink:hover, .button.is-primary.is-hovered, .docstring > section > a.button.is-hovered.docs-sourcelink { - background-color: #43b1dc; - border-color: transparent; - color: #fff; } - .button.is-primary:focus, .docstring > section > a.button.docs-sourcelink:focus, .button.is-primary.is-focused, .docstring > section > a.button.is-focused.docs-sourcelink { - border-color: transparent; - color: #fff; } - .button.is-primary:focus:not(:active), .docstring > section > a.button.docs-sourcelink:focus:not(:active), .button.is-primary.is-focused:not(:active), .docstring > section > a.button.is-focused.docs-sourcelink:not(:active) { - box-shadow: 0 0 0 0.125em rgba(78, 181, 222, 0.25); } - .button.is-primary:active, .docstring > section > a.button.docs-sourcelink:active, .button.is-primary.is-active, .docstring > section > a.button.is-active.docs-sourcelink { - background-color: #39acda; - border-color: transparent; - color: #fff; } - .button.is-primary[disabled], .docstring > section > a.button.docs-sourcelink[disabled], - fieldset[disabled] .button.is-primary, - fieldset[disabled] .docstring > section > a.button.docs-sourcelink { - background-color: #4eb5de; - border-color: transparent; - box-shadow: none; } - .button.is-primary.is-inverted, .docstring > section > a.button.is-inverted.docs-sourcelink { - background-color: #fff; - color: #4eb5de; } - .button.is-primary.is-inverted:hover, .docstring > section > a.button.is-inverted.docs-sourcelink:hover, .button.is-primary.is-inverted.is-hovered, .docstring > section > a.button.is-inverted.is-hovered.docs-sourcelink { - background-color: #f2f2f2; } - .button.is-primary.is-inverted[disabled], .docstring > section > a.button.is-inverted.docs-sourcelink[disabled], - fieldset[disabled] .button.is-primary.is-inverted, - fieldset[disabled] .docstring > section > a.button.is-inverted.docs-sourcelink { - background-color: #fff; - border-color: transparent; - box-shadow: none; - color: #4eb5de; } - .button.is-primary.is-loading::after, .docstring > section > a.button.is-loading.docs-sourcelink::after { - border-color: transparent transparent #fff #fff !important; } - .button.is-primary.is-outlined, .docstring > section > a.button.is-outlined.docs-sourcelink { - background-color: transparent; - border-color: #4eb5de; - color: #4eb5de; } - .button.is-primary.is-outlined:hover, .docstring > section > a.button.is-outlined.docs-sourcelink:hover, .button.is-primary.is-outlined.is-hovered, .docstring > section > a.button.is-outlined.is-hovered.docs-sourcelink, .button.is-primary.is-outlined:focus, .docstring > section > a.button.is-outlined.docs-sourcelink:focus, .button.is-primary.is-outlined.is-focused, .docstring > section > a.button.is-outlined.is-focused.docs-sourcelink { - background-color: #4eb5de; - border-color: #4eb5de; - color: #fff; } - .button.is-primary.is-outlined.is-loading::after, .docstring > section > a.button.is-outlined.is-loading.docs-sourcelink::after { - border-color: transparent transparent #4eb5de #4eb5de !important; } - .button.is-primary.is-outlined.is-loading:hover::after, .docstring > section > a.button.is-outlined.is-loading.docs-sourcelink:hover::after, .button.is-primary.is-outlined.is-loading.is-hovered::after, .docstring > section > a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after, .button.is-primary.is-outlined.is-loading:focus::after, .docstring > section > a.button.is-outlined.is-loading.docs-sourcelink:focus::after, .button.is-primary.is-outlined.is-loading.is-focused::after, .docstring > section > a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after { - border-color: transparent transparent #fff #fff !important; } - .button.is-primary.is-outlined[disabled], .docstring > section > a.button.is-outlined.docs-sourcelink[disabled], - fieldset[disabled] .button.is-primary.is-outlined, - fieldset[disabled] .docstring > section > a.button.is-outlined.docs-sourcelink { - background-color: transparent; - border-color: #4eb5de; - box-shadow: none; - color: #4eb5de; } - .button.is-primary.is-inverted.is-outlined, .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink { - background-color: transparent; - border-color: #fff; - color: #fff; } - .button.is-primary.is-inverted.is-outlined:hover, .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink:hover, .button.is-primary.is-inverted.is-outlined.is-hovered, .docstring > section > a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink, .button.is-primary.is-inverted.is-outlined:focus, .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink:focus, .button.is-primary.is-inverted.is-outlined.is-focused, .docstring > section > a.button.is-inverted.is-outlined.is-focused.docs-sourcelink { - background-color: #fff; - color: #4eb5de; } - .button.is-primary.is-inverted.is-outlined.is-loading:hover::after, .docstring > section > a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after, .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after, .docstring > section > a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after, .button.is-primary.is-inverted.is-outlined.is-loading:focus::after, .docstring > section > a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after, .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after, .docstring > section > a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after { - border-color: transparent transparent #4eb5de #4eb5de !important; } - .button.is-primary.is-inverted.is-outlined[disabled], .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink[disabled], - fieldset[disabled] .button.is-primary.is-inverted.is-outlined, - fieldset[disabled] .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink { - background-color: transparent; - border-color: #fff; - box-shadow: none; - color: #fff; } - .button.is-link { - background-color: #2e63b8; - border-color: transparent; - color: #fff; } - .button.is-link:hover, .button.is-link.is-hovered { - background-color: #2b5eae; - border-color: transparent; - color: #fff; } - .button.is-link:focus, .button.is-link.is-focused { - border-color: transparent; - color: #fff; } - .button.is-link:focus:not(:active), .button.is-link.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } - .button.is-link:active, .button.is-link.is-active { - background-color: #2958a4; - border-color: transparent; - color: #fff; } - .button.is-link[disabled], - fieldset[disabled] .button.is-link { - background-color: #2e63b8; - border-color: transparent; - box-shadow: none; } - .button.is-link.is-inverted { - background-color: #fff; - color: #2e63b8; } - .button.is-link.is-inverted:hover, .button.is-link.is-inverted.is-hovered { - background-color: #f2f2f2; } - .button.is-link.is-inverted[disabled], - fieldset[disabled] .button.is-link.is-inverted { - background-color: #fff; - border-color: transparent; - box-shadow: none; - color: #2e63b8; } - .button.is-link.is-loading::after { - border-color: transparent transparent #fff #fff !important; } - .button.is-link.is-outlined { - background-color: transparent; - border-color: #2e63b8; - color: #2e63b8; } - .button.is-link.is-outlined:hover, .button.is-link.is-outlined.is-hovered, .button.is-link.is-outlined:focus, .button.is-link.is-outlined.is-focused { - background-color: #2e63b8; - border-color: #2e63b8; - color: #fff; } - .button.is-link.is-outlined.is-loading::after { - border-color: transparent transparent #2e63b8 #2e63b8 !important; } - .button.is-link.is-outlined.is-loading:hover::after, .button.is-link.is-outlined.is-loading.is-hovered::after, .button.is-link.is-outlined.is-loading:focus::after, .button.is-link.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #fff #fff !important; } - .button.is-link.is-outlined[disabled], - fieldset[disabled] .button.is-link.is-outlined { - background-color: transparent; - border-color: #2e63b8; - box-shadow: none; - color: #2e63b8; } - .button.is-link.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - color: #fff; } - .button.is-link.is-inverted.is-outlined:hover, .button.is-link.is-inverted.is-outlined.is-hovered, .button.is-link.is-inverted.is-outlined:focus, .button.is-link.is-inverted.is-outlined.is-focused { - background-color: #fff; - color: #2e63b8; } - .button.is-link.is-inverted.is-outlined.is-loading:hover::after, .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-link.is-inverted.is-outlined.is-loading:focus::after, .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #2e63b8 #2e63b8 !important; } - .button.is-link.is-inverted.is-outlined[disabled], - fieldset[disabled] .button.is-link.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - box-shadow: none; - color: #fff; } - .button.is-info { - background-color: #209cee; - border-color: transparent; - color: #fff; } - .button.is-info:hover, .button.is-info.is-hovered { - background-color: #1497ed; - border-color: transparent; - color: #fff; } - .button.is-info:focus, .button.is-info.is-focused { - border-color: transparent; - color: #fff; } - .button.is-info:focus:not(:active), .button.is-info.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } - .button.is-info:active, .button.is-info.is-active { - background-color: #1190e3; - border-color: transparent; - color: #fff; } - .button.is-info[disabled], - fieldset[disabled] .button.is-info { - background-color: #209cee; - border-color: transparent; - box-shadow: none; } - .button.is-info.is-inverted { - background-color: #fff; - color: #209cee; } - .button.is-info.is-inverted:hover, .button.is-info.is-inverted.is-hovered { - background-color: #f2f2f2; } - .button.is-info.is-inverted[disabled], - fieldset[disabled] .button.is-info.is-inverted { - background-color: #fff; - border-color: transparent; - box-shadow: none; - color: #209cee; } - .button.is-info.is-loading::after { - border-color: transparent transparent #fff #fff !important; } - .button.is-info.is-outlined { - background-color: transparent; - border-color: #209cee; - color: #209cee; } - .button.is-info.is-outlined:hover, .button.is-info.is-outlined.is-hovered, .button.is-info.is-outlined:focus, .button.is-info.is-outlined.is-focused { - background-color: #209cee; - border-color: #209cee; - color: #fff; } - .button.is-info.is-outlined.is-loading::after { - border-color: transparent transparent #209cee #209cee !important; } - .button.is-info.is-outlined.is-loading:hover::after, .button.is-info.is-outlined.is-loading.is-hovered::after, .button.is-info.is-outlined.is-loading:focus::after, .button.is-info.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #fff #fff !important; } - .button.is-info.is-outlined[disabled], - fieldset[disabled] .button.is-info.is-outlined { - background-color: transparent; - border-color: #209cee; - box-shadow: none; - color: #209cee; } - .button.is-info.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - color: #fff; } - .button.is-info.is-inverted.is-outlined:hover, .button.is-info.is-inverted.is-outlined.is-hovered, .button.is-info.is-inverted.is-outlined:focus, .button.is-info.is-inverted.is-outlined.is-focused { - background-color: #fff; - color: #209cee; } - .button.is-info.is-inverted.is-outlined.is-loading:hover::after, .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-info.is-inverted.is-outlined.is-loading:focus::after, .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #209cee #209cee !important; } - .button.is-info.is-inverted.is-outlined[disabled], - fieldset[disabled] .button.is-info.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - box-shadow: none; - color: #fff; } - .button.is-success { - background-color: #22c35b; - border-color: transparent; - color: #fff; } - .button.is-success:hover, .button.is-success.is-hovered { - background-color: #20b856; - border-color: transparent; - color: #fff; } - .button.is-success:focus, .button.is-success.is-focused { - border-color: transparent; - color: #fff; } - .button.is-success:focus:not(:active), .button.is-success.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(34, 195, 91, 0.25); } - .button.is-success:active, .button.is-success.is-active { - background-color: #1ead51; - border-color: transparent; - color: #fff; } - .button.is-success[disabled], - fieldset[disabled] .button.is-success { - background-color: #22c35b; - border-color: transparent; - box-shadow: none; } - .button.is-success.is-inverted { - background-color: #fff; - color: #22c35b; } - .button.is-success.is-inverted:hover, .button.is-success.is-inverted.is-hovered { - background-color: #f2f2f2; } - .button.is-success.is-inverted[disabled], - fieldset[disabled] .button.is-success.is-inverted { - background-color: #fff; - border-color: transparent; - box-shadow: none; - color: #22c35b; } - .button.is-success.is-loading::after { - border-color: transparent transparent #fff #fff !important; } - .button.is-success.is-outlined { - background-color: transparent; - border-color: #22c35b; - color: #22c35b; } - .button.is-success.is-outlined:hover, .button.is-success.is-outlined.is-hovered, .button.is-success.is-outlined:focus, .button.is-success.is-outlined.is-focused { - background-color: #22c35b; - border-color: #22c35b; - color: #fff; } - .button.is-success.is-outlined.is-loading::after { - border-color: transparent transparent #22c35b #22c35b !important; } - .button.is-success.is-outlined.is-loading:hover::after, .button.is-success.is-outlined.is-loading.is-hovered::after, .button.is-success.is-outlined.is-loading:focus::after, .button.is-success.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #fff #fff !important; } - .button.is-success.is-outlined[disabled], - fieldset[disabled] .button.is-success.is-outlined { - background-color: transparent; - border-color: #22c35b; - box-shadow: none; - color: #22c35b; } - .button.is-success.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - color: #fff; } - .button.is-success.is-inverted.is-outlined:hover, .button.is-success.is-inverted.is-outlined.is-hovered, .button.is-success.is-inverted.is-outlined:focus, .button.is-success.is-inverted.is-outlined.is-focused { - background-color: #fff; - color: #22c35b; } - .button.is-success.is-inverted.is-outlined.is-loading:hover::after, .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-success.is-inverted.is-outlined.is-loading:focus::after, .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #22c35b #22c35b !important; } - .button.is-success.is-inverted.is-outlined[disabled], - fieldset[disabled] .button.is-success.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - box-shadow: none; - color: #fff; } - .button.is-warning { - background-color: #ffdd57; - border-color: transparent; - color: rgba(0, 0, 0, 0.7); } - .button.is-warning:hover, .button.is-warning.is-hovered { - background-color: #ffda4a; - border-color: transparent; - color: rgba(0, 0, 0, 0.7); } - .button.is-warning:focus, .button.is-warning.is-focused { - border-color: transparent; - color: rgba(0, 0, 0, 0.7); } - .button.is-warning:focus:not(:active), .button.is-warning.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } - .button.is-warning:active, .button.is-warning.is-active { - background-color: #ffd83e; - border-color: transparent; - color: rgba(0, 0, 0, 0.7); } - .button.is-warning[disabled], - fieldset[disabled] .button.is-warning { - background-color: #ffdd57; - border-color: transparent; - box-shadow: none; } - .button.is-warning.is-inverted { - background-color: rgba(0, 0, 0, 0.7); - color: #ffdd57; } - .button.is-warning.is-inverted:hover, .button.is-warning.is-inverted.is-hovered { - background-color: rgba(0, 0, 0, 0.7); } - .button.is-warning.is-inverted[disabled], - fieldset[disabled] .button.is-warning.is-inverted { - background-color: rgba(0, 0, 0, 0.7); - border-color: transparent; - box-shadow: none; - color: #ffdd57; } - .button.is-warning.is-loading::after { - border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important; } - .button.is-warning.is-outlined { - background-color: transparent; - border-color: #ffdd57; - color: #ffdd57; } - .button.is-warning.is-outlined:hover, .button.is-warning.is-outlined.is-hovered, .button.is-warning.is-outlined:focus, .button.is-warning.is-outlined.is-focused { - background-color: #ffdd57; - border-color: #ffdd57; - color: rgba(0, 0, 0, 0.7); } - .button.is-warning.is-outlined.is-loading::after { - border-color: transparent transparent #ffdd57 #ffdd57 !important; } - .button.is-warning.is-outlined.is-loading:hover::after, .button.is-warning.is-outlined.is-loading.is-hovered::after, .button.is-warning.is-outlined.is-loading:focus::after, .button.is-warning.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important; } - .button.is-warning.is-outlined[disabled], - fieldset[disabled] .button.is-warning.is-outlined { - background-color: transparent; - border-color: #ffdd57; - box-shadow: none; - color: #ffdd57; } - .button.is-warning.is-inverted.is-outlined { - background-color: transparent; - border-color: rgba(0, 0, 0, 0.7); - color: rgba(0, 0, 0, 0.7); } - .button.is-warning.is-inverted.is-outlined:hover, .button.is-warning.is-inverted.is-outlined.is-hovered, .button.is-warning.is-inverted.is-outlined:focus, .button.is-warning.is-inverted.is-outlined.is-focused { - background-color: rgba(0, 0, 0, 0.7); - color: #ffdd57; } - .button.is-warning.is-inverted.is-outlined.is-loading:hover::after, .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-warning.is-inverted.is-outlined.is-loading:focus::after, .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #ffdd57 #ffdd57 !important; } - .button.is-warning.is-inverted.is-outlined[disabled], - fieldset[disabled] .button.is-warning.is-inverted.is-outlined { - background-color: transparent; - border-color: rgba(0, 0, 0, 0.7); - box-shadow: none; - color: rgba(0, 0, 0, 0.7); } - .button.is-danger { - background-color: #da0b00; - border-color: transparent; - color: #fff; } - .button.is-danger:hover, .button.is-danger.is-hovered { - background-color: #cd0a00; - border-color: transparent; - color: #fff; } - .button.is-danger:focus, .button.is-danger.is-focused { - border-color: transparent; - color: #fff; } - .button.is-danger:focus:not(:active), .button.is-danger.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(218, 11, 0, 0.25); } - .button.is-danger:active, .button.is-danger.is-active { - background-color: #c10a00; - border-color: transparent; - color: #fff; } - .button.is-danger[disabled], - fieldset[disabled] .button.is-danger { - background-color: #da0b00; - border-color: transparent; - box-shadow: none; } - .button.is-danger.is-inverted { - background-color: #fff; - color: #da0b00; } - .button.is-danger.is-inverted:hover, .button.is-danger.is-inverted.is-hovered { - background-color: #f2f2f2; } - .button.is-danger.is-inverted[disabled], - fieldset[disabled] .button.is-danger.is-inverted { - background-color: #fff; - border-color: transparent; - box-shadow: none; - color: #da0b00; } - .button.is-danger.is-loading::after { - border-color: transparent transparent #fff #fff !important; } - .button.is-danger.is-outlined { - background-color: transparent; - border-color: #da0b00; - color: #da0b00; } - .button.is-danger.is-outlined:hover, .button.is-danger.is-outlined.is-hovered, .button.is-danger.is-outlined:focus, .button.is-danger.is-outlined.is-focused { - background-color: #da0b00; - border-color: #da0b00; - color: #fff; } - .button.is-danger.is-outlined.is-loading::after { - border-color: transparent transparent #da0b00 #da0b00 !important; } - .button.is-danger.is-outlined.is-loading:hover::after, .button.is-danger.is-outlined.is-loading.is-hovered::after, .button.is-danger.is-outlined.is-loading:focus::after, .button.is-danger.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #fff #fff !important; } - .button.is-danger.is-outlined[disabled], - fieldset[disabled] .button.is-danger.is-outlined { - background-color: transparent; - border-color: #da0b00; - box-shadow: none; - color: #da0b00; } - .button.is-danger.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - color: #fff; } - .button.is-danger.is-inverted.is-outlined:hover, .button.is-danger.is-inverted.is-outlined.is-hovered, .button.is-danger.is-inverted.is-outlined:focus, .button.is-danger.is-inverted.is-outlined.is-focused { - background-color: #fff; - color: #da0b00; } - .button.is-danger.is-inverted.is-outlined.is-loading:hover::after, .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-danger.is-inverted.is-outlined.is-loading:focus::after, .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #da0b00 #da0b00 !important; } - .button.is-danger.is-inverted.is-outlined[disabled], - fieldset[disabled] .button.is-danger.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - box-shadow: none; - color: #fff; } - .button.is-small, #documenter .docs-sidebar form.docs-search > input.button { - border-radius: 2px; - font-size: 0.75rem; } - .button.is-normal { - font-size: 1rem; } - .button.is-medium { - font-size: 1.25rem; } - .button.is-large { - font-size: 1.5rem; } - .button[disabled], - fieldset[disabled] .button { - background-color: white; - border-color: #dbdbdb; - box-shadow: none; - opacity: 0.5; } - .button.is-fullwidth { - display: flex; - width: 100%; } - .button.is-loading { - color: transparent !important; - pointer-events: none; } - .button.is-loading::after { - position: absolute; - left: calc(50% - (1em / 2)); - top: calc(50% - (1em / 2)); - position: absolute !important; } - .button.is-static { - background-color: whitesmoke; - border-color: #dbdbdb; - color: #7a7a7a; - box-shadow: none; - pointer-events: none; } - .button.is-rounded, #documenter .docs-sidebar form.docs-search > input.button { - border-radius: 290486px; - padding-left: 1em; - padding-right: 1em; } - -.buttons { - align-items: center; - display: flex; - flex-wrap: wrap; - justify-content: flex-start; } - .buttons .button { - margin-bottom: 0.5rem; } - .buttons .button:not(:last-child):not(.is-fullwidth) { - margin-right: 0.5rem; } - .buttons:last-child { - margin-bottom: -0.5rem; } - .buttons:not(:last-child) { - margin-bottom: 1rem; } - .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large) { - border-radius: 2px; - font-size: 0.75rem; } - .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large) { - font-size: 1.25rem; } - .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium) { - font-size: 1.5rem; } - .buttons.has-addons .button:not(:first-child) { - border-bottom-left-radius: 0; - border-top-left-radius: 0; } - .buttons.has-addons .button:not(:last-child) { - border-bottom-right-radius: 0; - border-top-right-radius: 0; - margin-right: -1px; } - .buttons.has-addons .button:last-child { - margin-right: 0; } - .buttons.has-addons .button:hover, .buttons.has-addons .button.is-hovered { - z-index: 2; } - .buttons.has-addons .button:focus, .buttons.has-addons .button.is-focused, .buttons.has-addons .button:active, .buttons.has-addons .button.is-active, .buttons.has-addons .button.is-selected { - z-index: 3; } - .buttons.has-addons .button:focus:hover, .buttons.has-addons .button.is-focused:hover, .buttons.has-addons .button:active:hover, .buttons.has-addons .button.is-active:hover, .buttons.has-addons .button.is-selected:hover { - z-index: 4; } - .buttons.has-addons .button.is-expanded { - flex-grow: 1; - flex-shrink: 1; } - .buttons.is-centered { - justify-content: center; } - .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth) { - margin-left: 0.25rem; - margin-right: 0.25rem; } - .buttons.is-right { - justify-content: flex-end; } - .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth) { - margin-left: 0.25rem; - margin-right: 0.25rem; } - -.container { - flex-grow: 1; - margin: 0 auto; - position: relative; - width: auto; } - @media screen and (min-width: 1056px) { - .container { - max-width: 992px; } - .container.is-fluid { - margin-left: 32px; - margin-right: 32px; - max-width: none; } } - @media screen and (max-width: 1215px) { - .container.is-widescreen { - max-width: 1152px; } } - @media screen and (max-width: 1407px) { - .container.is-fullhd { - max-width: 1344px; } } - @media screen and (min-width: 1216px) { - .container { - max-width: 1152px; } } - @media screen and (min-width: 1408px) { - .container { - max-width: 1344px; } } - -.content li + li { - margin-top: 0.25em; } - -.content p:not(:last-child), -.content dl:not(:last-child), -.content ol:not(:last-child), -.content ul:not(:last-child), -.content blockquote:not(:last-child), -.content pre:not(:last-child), -.content table:not(:last-child) { - margin-bottom: 1em; } - -.content h1, -.content h2, -.content h3, -.content h4, -.content h5, -.content h6 { - color: #222222; - font-weight: 600; - line-height: 1.125; } - -.content h1 { - font-size: 2em; - margin-bottom: 0.5em; } - .content h1:not(:first-child) { - margin-top: 1em; } - -.content h2 { - font-size: 1.75em; - margin-bottom: 0.5714em; } - .content h2:not(:first-child) { - margin-top: 1.1428em; } - -.content h3 { - font-size: 1.5em; - margin-bottom: 0.6666em; } - .content h3:not(:first-child) { - margin-top: 1.3333em; } - -.content h4 { - font-size: 1.25em; - margin-bottom: 0.8em; } - -.content h5 { - font-size: 1.125em; - margin-bottom: 0.8888em; } - -.content h6 { - font-size: 1em; - margin-bottom: 1em; } - -.content blockquote { - background-color: whitesmoke; - border-left: 5px solid #dbdbdb; - padding: 1.25em 1.5em; } - -.content ol { - list-style-position: outside; - margin-left: 2em; - margin-top: 1em; } - .content ol:not([type]) { - list-style-type: decimal; } - .content ol:not([type]).is-lower-alpha { - list-style-type: lower-alpha; } - .content ol:not([type]).is-lower-roman { - list-style-type: lower-roman; } - .content ol:not([type]).is-upper-alpha { - list-style-type: upper-alpha; } - .content ol:not([type]).is-upper-roman { - list-style-type: upper-roman; } - -.content ul { - list-style: disc outside; - margin-left: 2em; - margin-top: 1em; } - .content ul ul { - list-style-type: circle; - margin-top: 0.5em; } - .content ul ul ul { - list-style-type: square; } - -.content dd { - margin-left: 2em; } - -.content figure { - margin-left: 2em; - margin-right: 2em; - text-align: center; } - .content figure:not(:first-child) { - margin-top: 2em; } - .content figure:not(:last-child) { - margin-bottom: 2em; } - .content figure img { - display: inline-block; } - .content figure figcaption { - font-style: italic; } - -.content pre { - -webkit-overflow-scrolling: touch; - overflow-x: auto; - padding: 0.7rem 0.5rem; - white-space: pre; - word-wrap: normal; } - -.content sup, -.content sub { - font-size: 75%; } - -.content table { - width: 100%; } - .content table td, - .content table th { - border: 1px solid #dbdbdb; - border-width: 0 0 1px; - padding: 0.5em 0.75em; - vertical-align: top; } - .content table th { - color: #222222; } - .content table th:not([align]) { - text-align: left; } - .content table thead td, - .content table thead th { - border-width: 0 0 2px; - color: #222222; } - .content table tfoot td, - .content table tfoot th { - border-width: 2px 0 0; - color: #222222; } - .content table tbody tr:last-child td, - .content table tbody tr:last-child th { - border-bottom-width: 0; } - -.content .tabs li + li { - margin-top: 0; } - -.content.is-small, #documenter .docs-sidebar form.docs-search > input.content { - font-size: 0.75rem; } - -.content.is-medium { - font-size: 1.25rem; } - -.content.is-large { - font-size: 1.5rem; } - -.icon { - align-items: center; - display: inline-flex; - justify-content: center; - height: 1.5rem; - width: 1.5rem; } - .icon.is-small, #documenter .docs-sidebar form.docs-search > input.icon { - height: 1rem; - width: 1rem; } - .icon.is-medium { - height: 2rem; - width: 2rem; } - .icon.is-large { - height: 3rem; - width: 3rem; } - -.image, #documenter .docs-sidebar .docs-logo > img { - display: block; - position: relative; } - .image img, #documenter .docs-sidebar .docs-logo > img img { - display: block; - height: auto; - width: 100%; } - .image img.is-rounded, #documenter .docs-sidebar .docs-logo > img img.is-rounded { - border-radius: 290486px; } - .image.is-square img, #documenter .docs-sidebar .docs-logo > img.is-square img, - .image.is-square .has-ratio, - #documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, .image.is-1by1 img, #documenter .docs-sidebar .docs-logo > img.is-1by1 img, - .image.is-1by1 .has-ratio, - #documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, .image.is-5by4 img, #documenter .docs-sidebar .docs-logo > img.is-5by4 img, - .image.is-5by4 .has-ratio, - #documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, .image.is-4by3 img, #documenter .docs-sidebar .docs-logo > img.is-4by3 img, - .image.is-4by3 .has-ratio, - #documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, .image.is-3by2 img, #documenter .docs-sidebar .docs-logo > img.is-3by2 img, - .image.is-3by2 .has-ratio, - #documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, .image.is-5by3 img, #documenter .docs-sidebar .docs-logo > img.is-5by3 img, - .image.is-5by3 .has-ratio, - #documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, .image.is-16by9 img, #documenter .docs-sidebar .docs-logo > img.is-16by9 img, - .image.is-16by9 .has-ratio, - #documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, .image.is-2by1 img, #documenter .docs-sidebar .docs-logo > img.is-2by1 img, - .image.is-2by1 .has-ratio, - #documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, .image.is-3by1 img, #documenter .docs-sidebar .docs-logo > img.is-3by1 img, - .image.is-3by1 .has-ratio, - #documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, .image.is-4by5 img, #documenter .docs-sidebar .docs-logo > img.is-4by5 img, - .image.is-4by5 .has-ratio, - #documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, .image.is-3by4 img, #documenter .docs-sidebar .docs-logo > img.is-3by4 img, - .image.is-3by4 .has-ratio, - #documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, .image.is-2by3 img, #documenter .docs-sidebar .docs-logo > img.is-2by3 img, - .image.is-2by3 .has-ratio, - #documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, .image.is-3by5 img, #documenter .docs-sidebar .docs-logo > img.is-3by5 img, - .image.is-3by5 .has-ratio, - #documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, .image.is-9by16 img, #documenter .docs-sidebar .docs-logo > img.is-9by16 img, - .image.is-9by16 .has-ratio, - #documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, .image.is-1by2 img, #documenter .docs-sidebar .docs-logo > img.is-1by2 img, - .image.is-1by2 .has-ratio, - #documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, .image.is-1by3 img, #documenter .docs-sidebar .docs-logo > img.is-1by3 img, - .image.is-1by3 .has-ratio, - #documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio { - height: 100%; - width: 100%; } - .image.is-square, #documenter .docs-sidebar .docs-logo > img.is-square, .image.is-1by1, #documenter .docs-sidebar .docs-logo > img.is-1by1 { - padding-top: 100%; } - .image.is-5by4, #documenter .docs-sidebar .docs-logo > img.is-5by4 { - padding-top: 80%; } - .image.is-4by3, #documenter .docs-sidebar .docs-logo > img.is-4by3 { - padding-top: 75%; } - .image.is-3by2, #documenter .docs-sidebar .docs-logo > img.is-3by2 { - padding-top: 66.6666%; } - .image.is-5by3, #documenter .docs-sidebar .docs-logo > img.is-5by3 { - padding-top: 60%; } - .image.is-16by9, #documenter .docs-sidebar .docs-logo > img.is-16by9 { - padding-top: 56.25%; } - .image.is-2by1, #documenter .docs-sidebar .docs-logo > img.is-2by1 { - padding-top: 50%; } - .image.is-3by1, #documenter .docs-sidebar .docs-logo > img.is-3by1 { - padding-top: 33.3333%; } - .image.is-4by5, #documenter .docs-sidebar .docs-logo > img.is-4by5 { - padding-top: 125%; } - .image.is-3by4, #documenter .docs-sidebar .docs-logo > img.is-3by4 { - padding-top: 133.3333%; } - .image.is-2by3, #documenter .docs-sidebar .docs-logo > img.is-2by3 { - padding-top: 150%; } - .image.is-3by5, #documenter .docs-sidebar .docs-logo > img.is-3by5 { - padding-top: 166.6666%; } - .image.is-9by16, #documenter .docs-sidebar .docs-logo > img.is-9by16 { - padding-top: 177.7777%; } - .image.is-1by2, #documenter .docs-sidebar .docs-logo > img.is-1by2 { - padding-top: 200%; } - .image.is-1by3, #documenter .docs-sidebar .docs-logo > img.is-1by3 { - padding-top: 300%; } - .image.is-16x16, #documenter .docs-sidebar .docs-logo > img.is-16x16 { - height: 16px; - width: 16px; } - .image.is-24x24, #documenter .docs-sidebar .docs-logo > img.is-24x24 { - height: 24px; - width: 24px; } - .image.is-32x32, #documenter .docs-sidebar .docs-logo > img.is-32x32 { - height: 32px; - width: 32px; } - .image.is-48x48, #documenter .docs-sidebar .docs-logo > img.is-48x48 { - height: 48px; - width: 48px; } - .image.is-64x64, #documenter .docs-sidebar .docs-logo > img.is-64x64 { - height: 64px; - width: 64px; } - .image.is-96x96, #documenter .docs-sidebar .docs-logo > img.is-96x96 { - height: 96px; - width: 96px; } - .image.is-128x128, #documenter .docs-sidebar .docs-logo > img.is-128x128 { - height: 128px; - width: 128px; } - -.notification { - background-color: whitesmoke; - border-radius: 4px; - padding: 1.25rem 2.5rem 1.25rem 1.5rem; - position: relative; } - .notification a:not(.button):not(.dropdown-item) { - color: currentColor; - text-decoration: underline; } - .notification strong { - color: currentColor; } - .notification code, - .notification pre { - background: white; } - .notification pre code { - background: transparent; } - .notification > .delete { - position: absolute; - right: 0.5rem; - top: 0.5rem; } - .notification .title, - .notification .subtitle, - .notification .content { - color: currentColor; } - .notification.is-white { - background-color: white; - color: #0a0a0a; } - .notification.is-black { - background-color: #0a0a0a; - color: white; } - .notification.is-light { - background-color: whitesmoke; - color: #363636; } - .notification.is-dark, .content kbd.notification { - background-color: #363636; - color: whitesmoke; } - .notification.is-primary, .docstring > section > a.notification.docs-sourcelink { - background-color: #4eb5de; - color: #fff; } - .notification.is-link { - background-color: #2e63b8; - color: #fff; } - .notification.is-info { - background-color: #209cee; - color: #fff; } - .notification.is-success { - background-color: #22c35b; - color: #fff; } - .notification.is-warning { - background-color: #ffdd57; - color: rgba(0, 0, 0, 0.7); } - .notification.is-danger { - background-color: #da0b00; - color: #fff; } - -.progress { - -moz-appearance: none; - -webkit-appearance: none; - border: none; - border-radius: 290486px; - display: block; - height: 1rem; - overflow: hidden; - padding: 0; - width: 100%; } - .progress::-webkit-progress-bar { - background-color: #dbdbdb; } - .progress::-webkit-progress-value { - background-color: #222222; } - .progress::-moz-progress-bar { - background-color: #222222; } - .progress::-ms-fill { - background-color: #222222; - border: none; } - .progress.is-white::-webkit-progress-value { - background-color: white; } - .progress.is-white::-moz-progress-bar { - background-color: white; } - .progress.is-white::-ms-fill { - background-color: white; } - .progress.is-white:indeterminate { - background-image: linear-gradient(to right, white 30%, #dbdbdb 30%); } - .progress.is-black::-webkit-progress-value { - background-color: #0a0a0a; } - .progress.is-black::-moz-progress-bar { - background-color: #0a0a0a; } - .progress.is-black::-ms-fill { - background-color: #0a0a0a; } - .progress.is-black:indeterminate { - background-image: linear-gradient(to right, #0a0a0a 30%, #dbdbdb 30%); } - .progress.is-light::-webkit-progress-value { - background-color: whitesmoke; } - .progress.is-light::-moz-progress-bar { - background-color: whitesmoke; } - .progress.is-light::-ms-fill { - background-color: whitesmoke; } - .progress.is-light:indeterminate { - background-image: linear-gradient(to right, whitesmoke 30%, #dbdbdb 30%); } - .progress.is-dark::-webkit-progress-value, .content kbd.progress::-webkit-progress-value { - background-color: #363636; } - .progress.is-dark::-moz-progress-bar, .content kbd.progress::-moz-progress-bar { - background-color: #363636; } - .progress.is-dark::-ms-fill, .content kbd.progress::-ms-fill { - background-color: #363636; } - .progress.is-dark:indeterminate, .content kbd.progress:indeterminate { - background-image: linear-gradient(to right, #363636 30%, #dbdbdb 30%); } - .progress.is-primary::-webkit-progress-value, .docstring > section > a.progress.docs-sourcelink::-webkit-progress-value { - background-color: #4eb5de; } - .progress.is-primary::-moz-progress-bar, .docstring > section > a.progress.docs-sourcelink::-moz-progress-bar { - background-color: #4eb5de; } - .progress.is-primary::-ms-fill, .docstring > section > a.progress.docs-sourcelink::-ms-fill { - background-color: #4eb5de; } - .progress.is-primary:indeterminate, .docstring > section > a.progress.docs-sourcelink:indeterminate { - background-image: linear-gradient(to right, #4eb5de 30%, #dbdbdb 30%); } - .progress.is-link::-webkit-progress-value { - background-color: #2e63b8; } - .progress.is-link::-moz-progress-bar { - background-color: #2e63b8; } - .progress.is-link::-ms-fill { - background-color: #2e63b8; } - .progress.is-link:indeterminate { - background-image: linear-gradient(to right, #2e63b8 30%, #dbdbdb 30%); } - .progress.is-info::-webkit-progress-value { - background-color: #209cee; } - .progress.is-info::-moz-progress-bar { - background-color: #209cee; } - .progress.is-info::-ms-fill { - background-color: #209cee; } - .progress.is-info:indeterminate { - background-image: linear-gradient(to right, #209cee 30%, #dbdbdb 30%); } - .progress.is-success::-webkit-progress-value { - background-color: #22c35b; } - .progress.is-success::-moz-progress-bar { - background-color: #22c35b; } - .progress.is-success::-ms-fill { - background-color: #22c35b; } - .progress.is-success:indeterminate { - background-image: linear-gradient(to right, #22c35b 30%, #dbdbdb 30%); } - .progress.is-warning::-webkit-progress-value { - background-color: #ffdd57; } - .progress.is-warning::-moz-progress-bar { - background-color: #ffdd57; } - .progress.is-warning::-ms-fill { - background-color: #ffdd57; } - .progress.is-warning:indeterminate { - background-image: linear-gradient(to right, #ffdd57 30%, #dbdbdb 30%); } - .progress.is-danger::-webkit-progress-value { - background-color: #da0b00; } - .progress.is-danger::-moz-progress-bar { - background-color: #da0b00; } - .progress.is-danger::-ms-fill { - background-color: #da0b00; } - .progress.is-danger:indeterminate { - background-image: linear-gradient(to right, #da0b00 30%, #dbdbdb 30%); } - .progress:indeterminate { - animation-duration: 1.5s; - animation-iteration-count: infinite; - animation-name: moveIndeterminate; - animation-timing-function: linear; - background-color: #dbdbdb; - background-image: linear-gradient(to right, #222222 30%, #dbdbdb 30%); - background-position: top left; - background-repeat: no-repeat; - background-size: 150% 150%; } - .progress:indeterminate::-webkit-progress-bar { - background-color: transparent; } - .progress:indeterminate::-moz-progress-bar { - background-color: transparent; } - .progress.is-small, #documenter .docs-sidebar form.docs-search > input.progress { - height: 0.75rem; } - .progress.is-medium { - height: 1.25rem; } - .progress.is-large { - height: 1.5rem; } - -@keyframes moveIndeterminate { - from { - background-position: 200% 0; } - to { - background-position: -200% 0; } } - -.table { - background-color: white; - color: #363636; } - .table td, - .table th { - border: 1px solid #dbdbdb; - border-width: 0 0 1px; - padding: 0.5em 0.75em; - vertical-align: top; } - .table td.is-white, - .table th.is-white { - background-color: white; - border-color: white; - color: #0a0a0a; } - .table td.is-black, - .table th.is-black { - background-color: #0a0a0a; - border-color: #0a0a0a; - color: white; } - .table td.is-light, - .table th.is-light { - background-color: whitesmoke; - border-color: whitesmoke; - color: #363636; } - .table td.is-dark, - .table th.is-dark { - background-color: #363636; - border-color: #363636; - color: whitesmoke; } - .table td.is-primary, - .table th.is-primary { - background-color: #4eb5de; - border-color: #4eb5de; - color: #fff; } - .table td.is-link, - .table th.is-link { - background-color: #2e63b8; - border-color: #2e63b8; - color: #fff; } - .table td.is-info, - .table th.is-info { - background-color: #209cee; - border-color: #209cee; - color: #fff; } - .table td.is-success, - .table th.is-success { - background-color: #22c35b; - border-color: #22c35b; - color: #fff; } - .table td.is-warning, - .table th.is-warning { - background-color: #ffdd57; - border-color: #ffdd57; - color: rgba(0, 0, 0, 0.7); } - .table td.is-danger, - .table th.is-danger { - background-color: #da0b00; - border-color: #da0b00; - color: #fff; } - .table td.is-narrow, - .table th.is-narrow { - white-space: nowrap; - width: 1%; } - .table td.is-selected, - .table th.is-selected { - background-color: #4eb5de; - color: #fff; } - .table td.is-selected a, - .table td.is-selected strong, - .table th.is-selected a, - .table th.is-selected strong { - color: currentColor; } - .table th { - color: #222222; } - .table th:not([align]) { - text-align: left; } - .table tr.is-selected { - background-color: #4eb5de; - color: #fff; } - .table tr.is-selected a, - .table tr.is-selected strong { - color: currentColor; } - .table tr.is-selected td, - .table tr.is-selected th { - border-color: #fff; - color: currentColor; } - .table thead { - background-color: transparent; } - .table thead td, - .table thead th { - border-width: 0 0 2px; - color: #222222; } - .table tfoot { - background-color: transparent; } - .table tfoot td, - .table tfoot th { - border-width: 2px 0 0; - color: #222222; } - .table tbody { - background-color: transparent; } - .table tbody tr:last-child td, - .table tbody tr:last-child th { - border-bottom-width: 0; } - .table.is-bordered td, - .table.is-bordered th { - border-width: 1px; } - .table.is-bordered tr:last-child td, - .table.is-bordered tr:last-child th { - border-bottom-width: 1px; } - .table.is-fullwidth { - width: 100%; } - .table.is-hoverable tbody tr:not(.is-selected):hover { - background-color: #fafafa; } - .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover { - background-color: #fafafa; } - .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even) { - background-color: whitesmoke; } - .table.is-narrow td, - .table.is-narrow th { - padding: 0.25em 0.5em; } - .table.is-striped tbody tr:not(.is-selected):nth-child(even) { - background-color: #fafafa; } - -.table-container { - -webkit-overflow-scrolling: touch; - overflow: auto; - overflow-y: hidden; - max-width: 100%; } - -.tags { - align-items: center; - display: flex; - flex-wrap: wrap; - justify-content: flex-start; } - .tags .tag, .tags .docstring > section > a.docs-sourcelink, .tags .content kbd, .content .tags kbd { - margin-bottom: 0.5rem; } - .tags .tag:not(:last-child), .tags .docstring > section > a.docs-sourcelink:not(:last-child), .tags .content kbd:not(:last-child), .content .tags kbd:not(:last-child) { - margin-right: 0.5rem; } - .tags:last-child { - margin-bottom: -0.5rem; } - .tags:not(:last-child) { - margin-bottom: 1rem; } - .tags.are-medium .tag:not(.is-normal):not(.is-large), .tags.are-medium .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-large), .tags.are-medium .content kbd:not(.is-normal):not(.is-large), .content .tags.are-medium kbd:not(.is-normal):not(.is-large) { - font-size: 1rem; } - .tags.are-large .tag:not(.is-normal):not(.is-medium), .tags.are-large .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-medium), .tags.are-large .content kbd:not(.is-normal):not(.is-medium), .content .tags.are-large kbd:not(.is-normal):not(.is-medium) { - font-size: 1.25rem; } - .tags.is-centered { - justify-content: center; } - .tags.is-centered .tag, .tags.is-centered .docstring > section > a.docs-sourcelink, .tags.is-centered .content kbd, .content .tags.is-centered kbd { - margin-right: 0.25rem; - margin-left: 0.25rem; } - .tags.is-right { - justify-content: flex-end; } - .tags.is-right .tag:not(:first-child), .tags.is-right .docstring > section > a.docs-sourcelink:not(:first-child), .tags.is-right .content kbd:not(:first-child), .content .tags.is-right kbd:not(:first-child) { - margin-left: 0.5rem; } - .tags.is-right .tag:not(:last-child), .tags.is-right .docstring > section > a.docs-sourcelink:not(:last-child), .tags.is-right .content kbd:not(:last-child), .content .tags.is-right kbd:not(:last-child) { - margin-right: 0; } - .tags.has-addons .tag, .tags.has-addons .docstring > section > a.docs-sourcelink, .tags.has-addons .content kbd, .content .tags.has-addons kbd { - margin-right: 0; } - .tags.has-addons .tag:not(:first-child), .tags.has-addons .docstring > section > a.docs-sourcelink:not(:first-child), .tags.has-addons .content kbd:not(:first-child), .content .tags.has-addons kbd:not(:first-child) { - margin-left: 0; - border-bottom-left-radius: 0; - border-top-left-radius: 0; } - .tags.has-addons .tag:not(:last-child), .tags.has-addons .docstring > section > a.docs-sourcelink:not(:last-child), .tags.has-addons .content kbd:not(:last-child), .content .tags.has-addons kbd:not(:last-child) { - border-bottom-right-radius: 0; - border-top-right-radius: 0; } - -.tag:not(body), .docstring > section > a.docs-sourcelink:not(body), .content kbd:not(body) { - align-items: center; - background-color: whitesmoke; - border-radius: 4px; - color: #222222; - display: inline-flex; - font-size: 0.75rem; - height: 2em; - justify-content: center; - line-height: 1.5; - padding-left: 0.75em; - padding-right: 0.75em; - white-space: nowrap; } - .tag:not(body) .delete, .docstring > section > a.docs-sourcelink:not(body) .delete, .content kbd:not(body) .delete { - margin-left: 0.25rem; - margin-right: -0.375rem; } - .tag:not(body).is-white, .docstring > section > a.docs-sourcelink:not(body).is-white, .content kbd:not(body).is-white { - background-color: white; - color: #0a0a0a; } - .tag:not(body).is-black, .docstring > section > a.docs-sourcelink:not(body).is-black, .content kbd:not(body).is-black { - background-color: #0a0a0a; - color: white; } - .tag:not(body).is-light, .docstring > section > a.docs-sourcelink:not(body).is-light, .content kbd:not(body).is-light { - background-color: whitesmoke; - color: #363636; } - .tag:not(body).is-dark, .docstring > section > a.docs-sourcelink:not(body).is-dark, .content kbd:not(body) { - background-color: #363636; - color: whitesmoke; } - .tag:not(body).is-primary, .docstring > section > a.docs-sourcelink:not(body), .content kbd:not(body).is-primary { - background-color: #4eb5de; - color: #fff; } - .tag:not(body).is-link, .docstring > section > a.docs-sourcelink:not(body).is-link, .content kbd:not(body).is-link { - background-color: #2e63b8; - color: #fff; } - .tag:not(body).is-info, .docstring > section > a.docs-sourcelink:not(body).is-info, .content kbd:not(body).is-info { - background-color: #209cee; - color: #fff; } - .tag:not(body).is-success, .docstring > section > a.docs-sourcelink:not(body).is-success, .content kbd:not(body).is-success { - background-color: #22c35b; - color: #fff; } - .tag:not(body).is-warning, .docstring > section > a.docs-sourcelink:not(body).is-warning, .content kbd:not(body).is-warning { - background-color: #ffdd57; - color: rgba(0, 0, 0, 0.7); } - .tag:not(body).is-danger, .docstring > section > a.docs-sourcelink:not(body).is-danger, .content kbd:not(body).is-danger { - background-color: #da0b00; - color: #fff; } - .tag:not(body).is-normal, .docstring > section > a.docs-sourcelink:not(body).is-normal, .content kbd:not(body).is-normal { - font-size: 0.75rem; } - .tag:not(body).is-medium, .docstring > section > a.docs-sourcelink:not(body).is-medium, .content kbd:not(body).is-medium { - font-size: 1rem; } - .tag:not(body).is-large, .docstring > section > a.docs-sourcelink:not(body).is-large, .content kbd:not(body).is-large { - font-size: 1.25rem; } - .tag:not(body) .icon:first-child:not(:last-child), .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:not(:last-child), .content kbd:not(body) .icon:first-child:not(:last-child) { - margin-left: -0.375em; - margin-right: 0.1875em; } - .tag:not(body) .icon:last-child:not(:first-child), .docstring > section > a.docs-sourcelink:not(body) .icon:last-child:not(:first-child), .content kbd:not(body) .icon:last-child:not(:first-child) { - margin-left: 0.1875em; - margin-right: -0.375em; } - .tag:not(body) .icon:first-child:last-child, .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:last-child, .content kbd:not(body) .icon:first-child:last-child { - margin-left: -0.375em; - margin-right: -0.375em; } - .tag:not(body).is-delete, .docstring > section > a.docs-sourcelink:not(body).is-delete, .content kbd:not(body).is-delete { - margin-left: 1px; - padding: 0; - position: relative; - width: 2em; } - .tag:not(body).is-delete::before, .docstring > section > a.docs-sourcelink:not(body).is-delete::before, .content kbd:not(body).is-delete::before, .tag:not(body).is-delete::after, .docstring > section > a.docs-sourcelink:not(body).is-delete::after, .content kbd:not(body).is-delete::after { - background-color: currentColor; - content: ""; - display: block; - left: 50%; - position: absolute; - top: 50%; - transform: translateX(-50%) translateY(-50%) rotate(45deg); - transform-origin: center center; } - .tag:not(body).is-delete::before, .docstring > section > a.docs-sourcelink:not(body).is-delete::before, .content kbd:not(body).is-delete::before { - height: 1px; - width: 50%; } - .tag:not(body).is-delete::after, .docstring > section > a.docs-sourcelink:not(body).is-delete::after, .content kbd:not(body).is-delete::after { - height: 50%; - width: 1px; } - .tag:not(body).is-delete:hover, .docstring > section > a.docs-sourcelink:not(body).is-delete:hover, .content kbd:not(body).is-delete:hover, .tag:not(body).is-delete:focus, .docstring > section > a.docs-sourcelink:not(body).is-delete:focus, .content kbd:not(body).is-delete:focus { - background-color: #e8e8e8; } - .tag:not(body).is-delete:active, .docstring > section > a.docs-sourcelink:not(body).is-delete:active, .content kbd:not(body).is-delete:active { - background-color: #dbdbdb; } - .tag:not(body).is-rounded, .docstring > section > a.docs-sourcelink:not(body).is-rounded, .content kbd:not(body).is-rounded, #documenter .docs-sidebar form.docs-search > input.tag:not(body) { - border-radius: 290486px; } - -a.tag:hover, .docstring > section > a.docs-sourcelink:hover { - text-decoration: underline; } - -.title, -.subtitle { - word-break: break-word; } - .title em, - .title span, - .subtitle em, - .subtitle span { - font-weight: inherit; } - .title sub, - .subtitle sub { - font-size: 0.75em; } - .title sup, - .subtitle sup { - font-size: 0.75em; } - .title .tag, .title .docstring > section > a.docs-sourcelink, .title .content kbd, .content .title kbd, - .subtitle .tag, - .subtitle .docstring > section > a.docs-sourcelink, - .subtitle .content kbd, - .content .subtitle kbd { - vertical-align: middle; } - -.title { - color: #363636; - font-size: 2rem; - font-weight: 600; - line-height: 1.125; } - .title strong { - color: inherit; - font-weight: inherit; } - .title + .highlight { - margin-top: -0.75rem; } - .title:not(.is-spaced) + .subtitle { - margin-top: -1.25rem; } - .title.is-1 { - font-size: 3rem; } - .title.is-2 { - font-size: 2.5rem; } - .title.is-3 { - font-size: 2rem; } - .title.is-4 { - font-size: 1.5rem; } - .title.is-5 { - font-size: 1.25rem; } - .title.is-6 { - font-size: 1rem; } - .title.is-7 { - font-size: 0.75rem; } - -.subtitle { - color: #4a4a4a; - font-size: 1.25rem; - font-weight: 400; - line-height: 1.25; } - .subtitle strong { - color: #363636; - font-weight: 600; } - .subtitle:not(.is-spaced) + .title { - margin-top: -1.25rem; } - .subtitle.is-1 { - font-size: 3rem; } - .subtitle.is-2 { - font-size: 2.5rem; } - .subtitle.is-3 { - font-size: 2rem; } - .subtitle.is-4 { - font-size: 1.5rem; } - .subtitle.is-5 { - font-size: 1.25rem; } - .subtitle.is-6 { - font-size: 1rem; } - .subtitle.is-7 { - font-size: 0.75rem; } - -.heading { - display: block; - font-size: 11px; - letter-spacing: 1px; - margin-bottom: 5px; - text-transform: uppercase; } - -.highlight { - font-weight: 400; - max-width: 100%; - overflow: hidden; - padding: 0; } - .highlight pre { - overflow: auto; - max-width: 100%; } - -.number { - align-items: center; - background-color: whitesmoke; - border-radius: 290486px; - display: inline-flex; - font-size: 1.25rem; - height: 2em; - justify-content: center; - margin-right: 1.5rem; - min-width: 2.5em; - padding: 0.25rem 0.5rem; - text-align: center; - vertical-align: top; } - -.input, #documenter .docs-sidebar form.docs-search > input, .textarea, .select select { - background-color: white; - border-color: #dbdbdb; - border-radius: 4px; - color: #363636; } - .input::-moz-placeholder, #documenter .docs-sidebar form.docs-search > input::-moz-placeholder, .textarea::-moz-placeholder, .select select::-moz-placeholder { - color: rgba(54, 54, 54, 0.3); } - .input::-webkit-input-placeholder, #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder, .textarea::-webkit-input-placeholder, .select select::-webkit-input-placeholder { - color: rgba(54, 54, 54, 0.3); } - .input:-moz-placeholder, #documenter .docs-sidebar form.docs-search > input:-moz-placeholder, .textarea:-moz-placeholder, .select select:-moz-placeholder { - color: rgba(54, 54, 54, 0.3); } - .input:-ms-input-placeholder, #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder, .textarea:-ms-input-placeholder, .select select:-ms-input-placeholder { - color: rgba(54, 54, 54, 0.3); } - .input:hover, #documenter .docs-sidebar form.docs-search > input:hover, .textarea:hover, .select select:hover, .is-hovered.input, #documenter .docs-sidebar form.docs-search > input.is-hovered, .is-hovered.textarea, .select select.is-hovered { - border-color: #b5b5b5; } - .input:focus, #documenter .docs-sidebar form.docs-search > input:focus, .textarea:focus, .select select:focus, .is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-focused.textarea, .select select.is-focused, .input:active, #documenter .docs-sidebar form.docs-search > input:active, .textarea:active, .select select:active, .is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active, .is-active.textarea, .select select.is-active { - border-color: #2e63b8; - box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } - .input[disabled], #documenter .docs-sidebar form.docs-search > input[disabled], .textarea[disabled], .select select[disabled], - fieldset[disabled] .input, - fieldset[disabled] #documenter .docs-sidebar form.docs-search > input, - #documenter .docs-sidebar fieldset[disabled] form.docs-search > input, - fieldset[disabled] .textarea, - fieldset[disabled] .select select, - .select fieldset[disabled] select { - background-color: whitesmoke; - border-color: whitesmoke; - box-shadow: none; - color: #7a7a7a; } - .input[disabled]::-moz-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]::-moz-placeholder, .textarea[disabled]::-moz-placeholder, .select select[disabled]::-moz-placeholder, - fieldset[disabled] .input::-moz-placeholder, - fieldset[disabled] #documenter .docs-sidebar form.docs-search > input::-moz-placeholder, - #documenter .docs-sidebar fieldset[disabled] form.docs-search > input::-moz-placeholder, - fieldset[disabled] .textarea::-moz-placeholder, - fieldset[disabled] .select select::-moz-placeholder, - .select fieldset[disabled] select::-moz-placeholder { - color: rgba(122, 122, 122, 0.3); } - .input[disabled]::-webkit-input-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]::-webkit-input-placeholder, .textarea[disabled]::-webkit-input-placeholder, .select select[disabled]::-webkit-input-placeholder, - fieldset[disabled] .input::-webkit-input-placeholder, - fieldset[disabled] #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder, - #documenter .docs-sidebar fieldset[disabled] form.docs-search > input::-webkit-input-placeholder, - fieldset[disabled] .textarea::-webkit-input-placeholder, - fieldset[disabled] .select select::-webkit-input-placeholder, - .select fieldset[disabled] select::-webkit-input-placeholder { - color: rgba(122, 122, 122, 0.3); } - .input[disabled]:-moz-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]:-moz-placeholder, .textarea[disabled]:-moz-placeholder, .select select[disabled]:-moz-placeholder, - fieldset[disabled] .input:-moz-placeholder, - fieldset[disabled] #documenter .docs-sidebar form.docs-search > input:-moz-placeholder, - #documenter .docs-sidebar fieldset[disabled] form.docs-search > input:-moz-placeholder, - fieldset[disabled] .textarea:-moz-placeholder, - fieldset[disabled] .select select:-moz-placeholder, - .select fieldset[disabled] select:-moz-placeholder { - color: rgba(122, 122, 122, 0.3); } - .input[disabled]:-ms-input-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]:-ms-input-placeholder, .textarea[disabled]:-ms-input-placeholder, .select select[disabled]:-ms-input-placeholder, - fieldset[disabled] .input:-ms-input-placeholder, - fieldset[disabled] #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder, - #documenter .docs-sidebar fieldset[disabled] form.docs-search > input:-ms-input-placeholder, - fieldset[disabled] .textarea:-ms-input-placeholder, - fieldset[disabled] .select select:-ms-input-placeholder, - .select fieldset[disabled] select:-ms-input-placeholder { - color: rgba(122, 122, 122, 0.3); } - -.input, #documenter .docs-sidebar form.docs-search > input, .textarea { - box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); - max-width: 100%; - width: 100%; } - .input[readonly], #documenter .docs-sidebar form.docs-search > input[readonly], .textarea[readonly] { - box-shadow: none; } - .is-white.input, #documenter .docs-sidebar form.docs-search > input.is-white, .is-white.textarea { - border-color: white; } - .is-white.input:focus, #documenter .docs-sidebar form.docs-search > input.is-white:focus, .is-white.textarea:focus, .is-white.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-white.is-focused, .is-white.is-focused.textarea, .is-white.input:active, #documenter .docs-sidebar form.docs-search > input.is-white:active, .is-white.textarea:active, .is-white.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-white.is-active, .is-white.is-active.textarea { - box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } - .is-black.input, #documenter .docs-sidebar form.docs-search > input.is-black, .is-black.textarea { - border-color: #0a0a0a; } - .is-black.input:focus, #documenter .docs-sidebar form.docs-search > input.is-black:focus, .is-black.textarea:focus, .is-black.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-black.is-focused, .is-black.is-focused.textarea, .is-black.input:active, #documenter .docs-sidebar form.docs-search > input.is-black:active, .is-black.textarea:active, .is-black.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-black.is-active, .is-black.is-active.textarea { - box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } - .is-light.input, #documenter .docs-sidebar form.docs-search > input.is-light, .is-light.textarea { - border-color: whitesmoke; } - .is-light.input:focus, #documenter .docs-sidebar form.docs-search > input.is-light:focus, .is-light.textarea:focus, .is-light.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-light.is-focused, .is-light.is-focused.textarea, .is-light.input:active, #documenter .docs-sidebar form.docs-search > input.is-light:active, .is-light.textarea:active, .is-light.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-light.is-active, .is-light.is-active.textarea { - box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); } - .is-dark.input, .content kbd.input, #documenter .docs-sidebar form.docs-search > input.is-dark, .is-dark.textarea, .content kbd.textarea { - border-color: #363636; } - .is-dark.input:focus, .content kbd.input:focus, #documenter .docs-sidebar form.docs-search > input.is-dark:focus, .is-dark.textarea:focus, .content kbd.textarea:focus, .is-dark.is-focused.input, .content kbd.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-dark.is-focused, .is-dark.is-focused.textarea, .content kbd.is-focused.textarea, .is-dark.input:active, .content kbd.input:active, #documenter .docs-sidebar form.docs-search > input.is-dark:active, .is-dark.textarea:active, .content kbd.textarea:active, .is-dark.is-active.input, .content kbd.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-dark.is-active, .is-dark.is-active.textarea, .content kbd.is-active.textarea { - box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); } - .is-primary.input, .docstring > section > a.input.docs-sourcelink, #documenter .docs-sidebar form.docs-search > input.is-primary, .is-primary.textarea, .docstring > section > a.textarea.docs-sourcelink { - border-color: #4eb5de; } - .is-primary.input:focus, .docstring > section > a.input.docs-sourcelink:focus, #documenter .docs-sidebar form.docs-search > input.is-primary:focus, .is-primary.textarea:focus, .docstring > section > a.textarea.docs-sourcelink:focus, .is-primary.is-focused.input, .docstring > section > a.is-focused.input.docs-sourcelink, #documenter .docs-sidebar form.docs-search > input.is-primary.is-focused, .is-primary.is-focused.textarea, .docstring > section > a.is-focused.textarea.docs-sourcelink, .is-primary.input:active, .docstring > section > a.input.docs-sourcelink:active, #documenter .docs-sidebar form.docs-search > input.is-primary:active, .is-primary.textarea:active, .docstring > section > a.textarea.docs-sourcelink:active, .is-primary.is-active.input, .docstring > section > a.is-active.input.docs-sourcelink, #documenter .docs-sidebar form.docs-search > input.is-primary.is-active, .is-primary.is-active.textarea, .docstring > section > a.is-active.textarea.docs-sourcelink { - box-shadow: 0 0 0 0.125em rgba(78, 181, 222, 0.25); } - .is-link.input, #documenter .docs-sidebar form.docs-search > input.is-link, .is-link.textarea { - border-color: #2e63b8; } - .is-link.input:focus, #documenter .docs-sidebar form.docs-search > input.is-link:focus, .is-link.textarea:focus, .is-link.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-link.is-focused, .is-link.is-focused.textarea, .is-link.input:active, #documenter .docs-sidebar form.docs-search > input.is-link:active, .is-link.textarea:active, .is-link.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-link.is-active, .is-link.is-active.textarea { - box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } - .is-info.input, #documenter .docs-sidebar form.docs-search > input.is-info, .is-info.textarea { - border-color: #209cee; } - .is-info.input:focus, #documenter .docs-sidebar form.docs-search > input.is-info:focus, .is-info.textarea:focus, .is-info.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-info.is-focused, .is-info.is-focused.textarea, .is-info.input:active, #documenter .docs-sidebar form.docs-search > input.is-info:active, .is-info.textarea:active, .is-info.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-info.is-active, .is-info.is-active.textarea { - box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } - .is-success.input, #documenter .docs-sidebar form.docs-search > input.is-success, .is-success.textarea { - border-color: #22c35b; } - .is-success.input:focus, #documenter .docs-sidebar form.docs-search > input.is-success:focus, .is-success.textarea:focus, .is-success.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-success.is-focused, .is-success.is-focused.textarea, .is-success.input:active, #documenter .docs-sidebar form.docs-search > input.is-success:active, .is-success.textarea:active, .is-success.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-success.is-active, .is-success.is-active.textarea { - box-shadow: 0 0 0 0.125em rgba(34, 195, 91, 0.25); } - .is-warning.input, #documenter .docs-sidebar form.docs-search > input.is-warning, .is-warning.textarea { - border-color: #ffdd57; } - .is-warning.input:focus, #documenter .docs-sidebar form.docs-search > input.is-warning:focus, .is-warning.textarea:focus, .is-warning.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-warning.is-focused, .is-warning.is-focused.textarea, .is-warning.input:active, #documenter .docs-sidebar form.docs-search > input.is-warning:active, .is-warning.textarea:active, .is-warning.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-warning.is-active, .is-warning.is-active.textarea { - box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } - .is-danger.input, #documenter .docs-sidebar form.docs-search > input.is-danger, .is-danger.textarea { - border-color: #da0b00; } - .is-danger.input:focus, #documenter .docs-sidebar form.docs-search > input.is-danger:focus, .is-danger.textarea:focus, .is-danger.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-danger.is-focused, .is-danger.is-focused.textarea, .is-danger.input:active, #documenter .docs-sidebar form.docs-search > input.is-danger:active, .is-danger.textarea:active, .is-danger.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-danger.is-active, .is-danger.is-active.textarea { - box-shadow: 0 0 0 0.125em rgba(218, 11, 0, 0.25); } - .is-small.input, #documenter .docs-sidebar form.docs-search > input, .is-small.textarea { - border-radius: 2px; - font-size: 0.75rem; } - .is-medium.input, #documenter .docs-sidebar form.docs-search > input.is-medium, .is-medium.textarea { - font-size: 1.25rem; } - .is-large.input, #documenter .docs-sidebar form.docs-search > input.is-large, .is-large.textarea { - font-size: 1.5rem; } - .is-fullwidth.input, #documenter .docs-sidebar form.docs-search > input.is-fullwidth, .is-fullwidth.textarea { - display: block; - width: 100%; } - .is-inline.input, #documenter .docs-sidebar form.docs-search > input.is-inline, .is-inline.textarea { - display: inline; - width: auto; } - -.input.is-rounded, #documenter .docs-sidebar form.docs-search > input { - border-radius: 290486px; - padding-left: 1em; - padding-right: 1em; } - -.input.is-static, #documenter .docs-sidebar form.docs-search > input.is-static { - background-color: transparent; - border-color: transparent; - box-shadow: none; - padding-left: 0; - padding-right: 0; } - -.textarea { - display: block; - max-width: 100%; - min-width: 100%; - padding: 0.625em; - resize: vertical; } - .textarea:not([rows]) { - max-height: 600px; - min-height: 120px; } - .textarea[rows] { - height: initial; } - .textarea.has-fixed-size { - resize: none; } - -.checkbox, .radio { - cursor: pointer; - display: inline-block; - line-height: 1.25; - position: relative; } - .checkbox input, .radio input { - cursor: pointer; } - .checkbox:hover, .radio:hover { - color: #363636; } - .checkbox[disabled], .radio[disabled], - fieldset[disabled] .checkbox, - fieldset[disabled] .radio { - color: #7a7a7a; - cursor: not-allowed; } - -.radio + .radio { - margin-left: 0.5em; } - -.select { - display: inline-block; - max-width: 100%; - position: relative; - vertical-align: top; } - .select:not(.is-multiple) { - height: 2.25em; } - .select:not(.is-multiple):not(.is-loading)::after { - border-color: #2e63b8; - right: 1.125em; - z-index: 4; } - .select.is-rounded select, #documenter .docs-sidebar form.docs-search > input.select select { - border-radius: 290486px; - padding-left: 1em; } - .select select { - cursor: pointer; - display: block; - font-size: 1em; - max-width: 100%; - outline: none; } - .select select::-ms-expand { - display: none; } - .select select[disabled]:hover, - fieldset[disabled] .select select:hover { - border-color: whitesmoke; } - .select select:not([multiple]) { - padding-right: 2.5em; } - .select select[multiple] { - height: auto; - padding: 0; } - .select select[multiple] option { - padding: 0.5em 1em; } - .select:not(.is-multiple):not(.is-loading):hover::after { - border-color: #363636; } - .select.is-white:not(:hover)::after { - border-color: white; } - .select.is-white select { - border-color: white; } - .select.is-white select:hover, .select.is-white select.is-hovered { - border-color: #f2f2f2; } - .select.is-white select:focus, .select.is-white select.is-focused, .select.is-white select:active, .select.is-white select.is-active { - box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } - .select.is-black:not(:hover)::after { - border-color: #0a0a0a; } - .select.is-black select { - border-color: #0a0a0a; } - .select.is-black select:hover, .select.is-black select.is-hovered { - border-color: black; } - .select.is-black select:focus, .select.is-black select.is-focused, .select.is-black select:active, .select.is-black select.is-active { - box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } - .select.is-light:not(:hover)::after { - border-color: whitesmoke; } - .select.is-light select { - border-color: whitesmoke; } - .select.is-light select:hover, .select.is-light select.is-hovered { - border-color: #e8e8e8; } - .select.is-light select:focus, .select.is-light select.is-focused, .select.is-light select:active, .select.is-light select.is-active { - box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); } - .select.is-dark:not(:hover)::after, .content kbd.select:not(:hover)::after { - border-color: #363636; } - .select.is-dark select, .content kbd.select select { - border-color: #363636; } - .select.is-dark select:hover, .content kbd.select select:hover, .select.is-dark select.is-hovered, .content kbd.select select.is-hovered { - border-color: #292929; } - .select.is-dark select:focus, .content kbd.select select:focus, .select.is-dark select.is-focused, .content kbd.select select.is-focused, .select.is-dark select:active, .content kbd.select select:active, .select.is-dark select.is-active, .content kbd.select select.is-active { - box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); } - .select.is-primary:not(:hover)::after, .docstring > section > a.select.docs-sourcelink:not(:hover)::after { - border-color: #4eb5de; } - .select.is-primary select, .docstring > section > a.select.docs-sourcelink select { - border-color: #4eb5de; } - .select.is-primary select:hover, .docstring > section > a.select.docs-sourcelink select:hover, .select.is-primary select.is-hovered, .docstring > section > a.select.docs-sourcelink select.is-hovered { - border-color: #39acda; } - .select.is-primary select:focus, .docstring > section > a.select.docs-sourcelink select:focus, .select.is-primary select.is-focused, .docstring > section > a.select.docs-sourcelink select.is-focused, .select.is-primary select:active, .docstring > section > a.select.docs-sourcelink select:active, .select.is-primary select.is-active, .docstring > section > a.select.docs-sourcelink select.is-active { - box-shadow: 0 0 0 0.125em rgba(78, 181, 222, 0.25); } - .select.is-link:not(:hover)::after { - border-color: #2e63b8; } - .select.is-link select { - border-color: #2e63b8; } - .select.is-link select:hover, .select.is-link select.is-hovered { - border-color: #2958a4; } - .select.is-link select:focus, .select.is-link select.is-focused, .select.is-link select:active, .select.is-link select.is-active { - box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } - .select.is-info:not(:hover)::after { - border-color: #209cee; } - .select.is-info select { - border-color: #209cee; } - .select.is-info select:hover, .select.is-info select.is-hovered { - border-color: #1190e3; } - .select.is-info select:focus, .select.is-info select.is-focused, .select.is-info select:active, .select.is-info select.is-active { - box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } - .select.is-success:not(:hover)::after { - border-color: #22c35b; } - .select.is-success select { - border-color: #22c35b; } - .select.is-success select:hover, .select.is-success select.is-hovered { - border-color: #1ead51; } - .select.is-success select:focus, .select.is-success select.is-focused, .select.is-success select:active, .select.is-success select.is-active { - box-shadow: 0 0 0 0.125em rgba(34, 195, 91, 0.25); } - .select.is-warning:not(:hover)::after { - border-color: #ffdd57; } - .select.is-warning select { - border-color: #ffdd57; } - .select.is-warning select:hover, .select.is-warning select.is-hovered { - border-color: #ffd83e; } - .select.is-warning select:focus, .select.is-warning select.is-focused, .select.is-warning select:active, .select.is-warning select.is-active { - box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } - .select.is-danger:not(:hover)::after { - border-color: #da0b00; } - .select.is-danger select { - border-color: #da0b00; } - .select.is-danger select:hover, .select.is-danger select.is-hovered { - border-color: #c10a00; } - .select.is-danger select:focus, .select.is-danger select.is-focused, .select.is-danger select:active, .select.is-danger select.is-active { - box-shadow: 0 0 0 0.125em rgba(218, 11, 0, 0.25); } - .select.is-small, #documenter .docs-sidebar form.docs-search > input.select { - border-radius: 2px; - font-size: 0.75rem; } - .select.is-medium { - font-size: 1.25rem; } - .select.is-large { - font-size: 1.5rem; } - .select.is-disabled::after { - border-color: #7a7a7a; } - .select.is-fullwidth { - width: 100%; } - .select.is-fullwidth select { - width: 100%; } - .select.is-loading::after { - margin-top: 0; - position: absolute; - right: 0.625em; - top: 0.625em; - transform: none; } - .select.is-loading.is-small:after, #documenter .docs-sidebar form.docs-search > input.select.is-loading:after { - font-size: 0.75rem; } - .select.is-loading.is-medium:after { - font-size: 1.25rem; } - .select.is-loading.is-large:after { - font-size: 1.5rem; } - -.file { - align-items: stretch; - display: flex; - justify-content: flex-start; - position: relative; } - .file.is-white .file-cta { - background-color: white; - border-color: transparent; - color: #0a0a0a; } - .file.is-white:hover .file-cta, .file.is-white.is-hovered .file-cta { - background-color: #f9f9f9; - border-color: transparent; - color: #0a0a0a; } - .file.is-white:focus .file-cta, .file.is-white.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(255, 255, 255, 0.25); - color: #0a0a0a; } - .file.is-white:active .file-cta, .file.is-white.is-active .file-cta { - background-color: #f2f2f2; - border-color: transparent; - color: #0a0a0a; } - .file.is-black .file-cta { - background-color: #0a0a0a; - border-color: transparent; - color: white; } - .file.is-black:hover .file-cta, .file.is-black.is-hovered .file-cta { - background-color: #040404; - border-color: transparent; - color: white; } - .file.is-black:focus .file-cta, .file.is-black.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(10, 10, 10, 0.25); - color: white; } - .file.is-black:active .file-cta, .file.is-black.is-active .file-cta { - background-color: black; - border-color: transparent; - color: white; } - .file.is-light .file-cta { - background-color: whitesmoke; - border-color: transparent; - color: #363636; } - .file.is-light:hover .file-cta, .file.is-light.is-hovered .file-cta { - background-color: #eeeeee; - border-color: transparent; - color: #363636; } - .file.is-light:focus .file-cta, .file.is-light.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(245, 245, 245, 0.25); - color: #363636; } - .file.is-light:active .file-cta, .file.is-light.is-active .file-cta { - background-color: #e8e8e8; - border-color: transparent; - color: #363636; } - .file.is-dark .file-cta, .content kbd.file .file-cta { - background-color: #363636; - border-color: transparent; - color: whitesmoke; } - .file.is-dark:hover .file-cta, .content kbd.file:hover .file-cta, .file.is-dark.is-hovered .file-cta, .content kbd.file.is-hovered .file-cta { - background-color: #2f2f2f; - border-color: transparent; - color: whitesmoke; } - .file.is-dark:focus .file-cta, .content kbd.file:focus .file-cta, .file.is-dark.is-focused .file-cta, .content kbd.file.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(54, 54, 54, 0.25); - color: whitesmoke; } - .file.is-dark:active .file-cta, .content kbd.file:active .file-cta, .file.is-dark.is-active .file-cta, .content kbd.file.is-active .file-cta { - background-color: #292929; - border-color: transparent; - color: whitesmoke; } - .file.is-primary .file-cta, .docstring > section > a.file.docs-sourcelink .file-cta { - background-color: #4eb5de; - border-color: transparent; - color: #fff; } - .file.is-primary:hover .file-cta, .docstring > section > a.file.docs-sourcelink:hover .file-cta, .file.is-primary.is-hovered .file-cta, .docstring > section > a.file.is-hovered.docs-sourcelink .file-cta { - background-color: #43b1dc; - border-color: transparent; - color: #fff; } - .file.is-primary:focus .file-cta, .docstring > section > a.file.docs-sourcelink:focus .file-cta, .file.is-primary.is-focused .file-cta, .docstring > section > a.file.is-focused.docs-sourcelink .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(78, 181, 222, 0.25); - color: #fff; } - .file.is-primary:active .file-cta, .docstring > section > a.file.docs-sourcelink:active .file-cta, .file.is-primary.is-active .file-cta, .docstring > section > a.file.is-active.docs-sourcelink .file-cta { - background-color: #39acda; - border-color: transparent; - color: #fff; } - .file.is-link .file-cta { - background-color: #2e63b8; - border-color: transparent; - color: #fff; } - .file.is-link:hover .file-cta, .file.is-link.is-hovered .file-cta { - background-color: #2b5eae; - border-color: transparent; - color: #fff; } - .file.is-link:focus .file-cta, .file.is-link.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(46, 99, 184, 0.25); - color: #fff; } - .file.is-link:active .file-cta, .file.is-link.is-active .file-cta { - background-color: #2958a4; - border-color: transparent; - color: #fff; } - .file.is-info .file-cta { - background-color: #209cee; - border-color: transparent; - color: #fff; } - .file.is-info:hover .file-cta, .file.is-info.is-hovered .file-cta { - background-color: #1497ed; - border-color: transparent; - color: #fff; } - .file.is-info:focus .file-cta, .file.is-info.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(32, 156, 238, 0.25); - color: #fff; } - .file.is-info:active .file-cta, .file.is-info.is-active .file-cta { - background-color: #1190e3; - border-color: transparent; - color: #fff; } - .file.is-success .file-cta { - background-color: #22c35b; - border-color: transparent; - color: #fff; } - .file.is-success:hover .file-cta, .file.is-success.is-hovered .file-cta { - background-color: #20b856; - border-color: transparent; - color: #fff; } - .file.is-success:focus .file-cta, .file.is-success.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(34, 195, 91, 0.25); - color: #fff; } - .file.is-success:active .file-cta, .file.is-success.is-active .file-cta { - background-color: #1ead51; - border-color: transparent; - color: #fff; } - .file.is-warning .file-cta { - background-color: #ffdd57; - border-color: transparent; - color: rgba(0, 0, 0, 0.7); } - .file.is-warning:hover .file-cta, .file.is-warning.is-hovered .file-cta { - background-color: #ffda4a; - border-color: transparent; - color: rgba(0, 0, 0, 0.7); } - .file.is-warning:focus .file-cta, .file.is-warning.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(255, 221, 87, 0.25); - color: rgba(0, 0, 0, 0.7); } - .file.is-warning:active .file-cta, .file.is-warning.is-active .file-cta { - background-color: #ffd83e; - border-color: transparent; - color: rgba(0, 0, 0, 0.7); } - .file.is-danger .file-cta { - background-color: #da0b00; - border-color: transparent; - color: #fff; } - .file.is-danger:hover .file-cta, .file.is-danger.is-hovered .file-cta { - background-color: #cd0a00; - border-color: transparent; - color: #fff; } - .file.is-danger:focus .file-cta, .file.is-danger.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(218, 11, 0, 0.25); - color: #fff; } - .file.is-danger:active .file-cta, .file.is-danger.is-active .file-cta { - background-color: #c10a00; - border-color: transparent; - color: #fff; } - .file.is-small, #documenter .docs-sidebar form.docs-search > input.file { - font-size: 0.75rem; } - .file.is-medium { - font-size: 1.25rem; } - .file.is-medium .file-icon .fa { - font-size: 21px; } - .file.is-large { - font-size: 1.5rem; } - .file.is-large .file-icon .fa { - font-size: 28px; } - .file.has-name .file-cta { - border-bottom-right-radius: 0; - border-top-right-radius: 0; } - .file.has-name .file-name { - border-bottom-left-radius: 0; - border-top-left-radius: 0; } - .file.has-name.is-empty .file-cta { - border-radius: 4px; } - .file.has-name.is-empty .file-name { - display: none; } - .file.is-boxed .file-label { - flex-direction: column; } - .file.is-boxed .file-cta { - flex-direction: column; - height: auto; - padding: 1em 3em; } - .file.is-boxed .file-name { - border-width: 0 1px 1px; } - .file.is-boxed .file-icon { - height: 1.5em; - width: 1.5em; } - .file.is-boxed .file-icon .fa { - font-size: 21px; } - .file.is-boxed.is-small .file-icon .fa, #documenter .docs-sidebar form.docs-search > input.file.is-boxed .file-icon .fa { - font-size: 14px; } - .file.is-boxed.is-medium .file-icon .fa { - font-size: 28px; } - .file.is-boxed.is-large .file-icon .fa { - font-size: 35px; } - .file.is-boxed.has-name .file-cta { - border-radius: 4px 4px 0 0; } - .file.is-boxed.has-name .file-name { - border-radius: 0 0 4px 4px; - border-width: 0 1px 1px; } - .file.is-centered { - justify-content: center; } - .file.is-fullwidth .file-label { - width: 100%; } - .file.is-fullwidth .file-name { - flex-grow: 1; - max-width: none; } - .file.is-right { - justify-content: flex-end; } - .file.is-right .file-cta { - border-radius: 0 4px 4px 0; } - .file.is-right .file-name { - border-radius: 4px 0 0 4px; - border-width: 1px 0 1px 1px; - order: -1; } - -.file-label { - align-items: stretch; - display: flex; - cursor: pointer; - justify-content: flex-start; - overflow: hidden; - position: relative; } - .file-label:hover .file-cta { - background-color: #eeeeee; - color: #363636; } - .file-label:hover .file-name { - border-color: #d5d5d5; } - .file-label:active .file-cta { - background-color: #e8e8e8; - color: #363636; } - .file-label:active .file-name { - border-color: #cfcfcf; } - -.file-input { - height: 100%; - left: 0; - opacity: 0; - outline: none; - position: absolute; - top: 0; - width: 100%; } - -.file-cta, -.file-name { - border-color: #dbdbdb; - border-radius: 4px; - font-size: 1em; - padding-left: 1em; - padding-right: 1em; - white-space: nowrap; } - -.file-cta { - background-color: whitesmoke; - color: #4a4a4a; } - -.file-name { - border-color: #dbdbdb; - border-style: solid; - border-width: 1px 1px 1px 0; - display: block; - max-width: 16em; - overflow: hidden; - text-align: left; - text-overflow: ellipsis; } - -.file-icon { - align-items: center; - display: flex; - height: 1em; - justify-content: center; - margin-right: 0.5em; - width: 1em; } - .file-icon .fa { - font-size: 14px; } - -.label { - color: #363636; - display: block; - font-size: 1rem; - font-weight: 700; } - .label:not(:last-child) { - margin-bottom: 0.5em; } - .label.is-small, #documenter .docs-sidebar form.docs-search > input.label { - font-size: 0.75rem; } - .label.is-medium { - font-size: 1.25rem; } - .label.is-large { - font-size: 1.5rem; } - -.help { - display: block; - font-size: 0.75rem; - margin-top: 0.25rem; } - .help.is-white { - color: white; } - .help.is-black { - color: #0a0a0a; } - .help.is-light { - color: whitesmoke; } - .help.is-dark, .content kbd.help { - color: #363636; } - .help.is-primary, .docstring > section > a.help.docs-sourcelink { - color: #4eb5de; } - .help.is-link { - color: #2e63b8; } - .help.is-info { - color: #209cee; } - .help.is-success { - color: #22c35b; } - .help.is-warning { - color: #ffdd57; } - .help.is-danger { - color: #da0b00; } - -.field:not(:last-child) { - margin-bottom: 0.75rem; } - -.field.has-addons { - display: flex; - justify-content: flex-start; } - .field.has-addons .control:not(:last-child) { - margin-right: -1px; } - .field.has-addons .control:not(:first-child):not(:last-child) .button, - .field.has-addons .control:not(:first-child):not(:last-child) .input, - .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search > input, - #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search > input, - .field.has-addons .control:not(:first-child):not(:last-child) .select select { - border-radius: 0; } - .field.has-addons .control:first-child:not(:only-child) .button, - .field.has-addons .control:first-child:not(:only-child) .input, - .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search > input, - #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search > input, - .field.has-addons .control:first-child:not(:only-child) .select select { - border-bottom-right-radius: 0; - border-top-right-radius: 0; } - .field.has-addons .control:last-child:not(:only-child) .button, - .field.has-addons .control:last-child:not(:only-child) .input, - .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search > input, - #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search > input, - .field.has-addons .control:last-child:not(:only-child) .select select { - border-bottom-left-radius: 0; - border-top-left-radius: 0; } - .field.has-addons .control .button:not([disabled]):hover, .field.has-addons .control .button:not([disabled]).is-hovered, - .field.has-addons .control .input:not([disabled]):hover, - .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):hover, - #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):hover, - .field.has-addons .control .input:not([disabled]).is-hovered, - .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-hovered, - #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-hovered, - .field.has-addons .control .select select:not([disabled]):hover, - .field.has-addons .control .select select:not([disabled]).is-hovered { - z-index: 2; } - .field.has-addons .control .button:not([disabled]):focus, .field.has-addons .control .button:not([disabled]).is-focused, .field.has-addons .control .button:not([disabled]):active, .field.has-addons .control .button:not([disabled]).is-active, - .field.has-addons .control .input:not([disabled]):focus, - .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus, - #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus, - .field.has-addons .control .input:not([disabled]).is-focused, - .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-focused, - #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-focused, - .field.has-addons .control .input:not([disabled]):active, - .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active, - #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active, - .field.has-addons .control .input:not([disabled]).is-active, - .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-active, - #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-active, - .field.has-addons .control .select select:not([disabled]):focus, - .field.has-addons .control .select select:not([disabled]).is-focused, - .field.has-addons .control .select select:not([disabled]):active, - .field.has-addons .control .select select:not([disabled]).is-active { - z-index: 3; } - .field.has-addons .control .button:not([disabled]):focus:hover, .field.has-addons .control .button:not([disabled]).is-focused:hover, .field.has-addons .control .button:not([disabled]):active:hover, .field.has-addons .control .button:not([disabled]).is-active:hover, - .field.has-addons .control .input:not([disabled]):focus:hover, - .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus:hover, - #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus:hover, - .field.has-addons .control .input:not([disabled]).is-focused:hover, - .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-focused:hover, - #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-focused:hover, - .field.has-addons .control .input:not([disabled]):active:hover, - .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active:hover, - #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active:hover, - .field.has-addons .control .input:not([disabled]).is-active:hover, - .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-active:hover, - #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-active:hover, - .field.has-addons .control .select select:not([disabled]):focus:hover, - .field.has-addons .control .select select:not([disabled]).is-focused:hover, - .field.has-addons .control .select select:not([disabled]):active:hover, - .field.has-addons .control .select select:not([disabled]).is-active:hover { - z-index: 4; } - .field.has-addons .control.is-expanded { - flex-grow: 1; - flex-shrink: 1; } - .field.has-addons.has-addons-centered { - justify-content: center; } - .field.has-addons.has-addons-right { - justify-content: flex-end; } - .field.has-addons.has-addons-fullwidth .control { - flex-grow: 1; - flex-shrink: 0; } - -.field.is-grouped { - display: flex; - justify-content: flex-start; } - .field.is-grouped > .control { - flex-shrink: 0; } - .field.is-grouped > .control:not(:last-child) { - margin-bottom: 0; - margin-right: 0.75rem; } - .field.is-grouped > .control.is-expanded { - flex-grow: 1; - flex-shrink: 1; } - .field.is-grouped.is-grouped-centered { - justify-content: center; } - .field.is-grouped.is-grouped-right { - justify-content: flex-end; } - .field.is-grouped.is-grouped-multiline { - flex-wrap: wrap; } - .field.is-grouped.is-grouped-multiline > .control:last-child, .field.is-grouped.is-grouped-multiline > .control:not(:last-child) { - margin-bottom: 0.75rem; } - .field.is-grouped.is-grouped-multiline:last-child { - margin-bottom: -0.75rem; } - .field.is-grouped.is-grouped-multiline:not(:last-child) { - margin-bottom: 0; } - -@media screen and (min-width: 769px), print { - .field.is-horizontal { - display: flex; } } - -.field-label .label { - font-size: inherit; } - -@media screen and (max-width: 768px) { - .field-label { - margin-bottom: 0.5rem; } } - -@media screen and (min-width: 769px), print { - .field-label { - flex-basis: 0; - flex-grow: 1; - flex-shrink: 0; - margin-right: 1.5rem; - text-align: right; } - .field-label.is-small, #documenter .docs-sidebar form.docs-search > input.field-label { - font-size: 0.75rem; - padding-top: 0.375em; } - .field-label.is-normal { - padding-top: 0.375em; } - .field-label.is-medium { - font-size: 1.25rem; - padding-top: 0.375em; } - .field-label.is-large { - font-size: 1.5rem; - padding-top: 0.375em; } } - -.field-body .field .field { - margin-bottom: 0; } - -@media screen and (min-width: 769px), print { - .field-body { - display: flex; - flex-basis: 0; - flex-grow: 5; - flex-shrink: 1; } - .field-body .field { - margin-bottom: 0; } - .field-body > .field { - flex-shrink: 1; } - .field-body > .field:not(.is-narrow) { - flex-grow: 1; } - .field-body > .field:not(:last-child) { - margin-right: 0.75rem; } } - -.control { - box-sizing: border-box; - clear: both; - font-size: 1rem; - position: relative; - text-align: left; } - .control.has-icons-left .input:focus ~ .icon, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input:focus ~ .icon, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input:focus ~ .icon, - .control.has-icons-left .select:focus ~ .icon, .control.has-icons-right .input:focus ~ .icon, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input:focus ~ .icon, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input:focus ~ .icon, - .control.has-icons-right .select:focus ~ .icon { - color: #7a7a7a; } - .control.has-icons-left .input.is-small ~ .icon, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input ~ .icon, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input ~ .icon, - .control.has-icons-left .select.is-small ~ .icon, - .control.has-icons-left #documenter .docs-sidebar form.docs-search > input.select ~ .icon, - #documenter .docs-sidebar .control.has-icons-left form.docs-search > input.select ~ .icon, .control.has-icons-right .input.is-small ~ .icon, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input ~ .icon, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input ~ .icon, - .control.has-icons-right .select.is-small ~ .icon, - .control.has-icons-right #documenter .docs-sidebar form.docs-search > input.select ~ .icon, - #documenter .docs-sidebar .control.has-icons-right form.docs-search > input.select ~ .icon { - font-size: 0.75rem; } - .control.has-icons-left .input.is-medium ~ .icon, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input.is-medium ~ .icon, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input.is-medium ~ .icon, - .control.has-icons-left .select.is-medium ~ .icon, .control.has-icons-right .input.is-medium ~ .icon, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input.is-medium ~ .icon, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input.is-medium ~ .icon, - .control.has-icons-right .select.is-medium ~ .icon { - font-size: 1.25rem; } - .control.has-icons-left .input.is-large ~ .icon, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input.is-large ~ .icon, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input.is-large ~ .icon, - .control.has-icons-left .select.is-large ~ .icon, .control.has-icons-right .input.is-large ~ .icon, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input.is-large ~ .icon, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input.is-large ~ .icon, - .control.has-icons-right .select.is-large ~ .icon { - font-size: 1.5rem; } - .control.has-icons-left .icon, .control.has-icons-right .icon { - color: #dbdbdb; - height: 2.25em; - pointer-events: none; - position: absolute; - top: 0; - width: 2.25em; - z-index: 4; } - .control.has-icons-left .input, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input, - .control.has-icons-left .select select { - padding-left: 2.25em; } - .control.has-icons-left .icon.is-left { - left: 0; } - .control.has-icons-right .input, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input, - .control.has-icons-right .select select { - padding-right: 2.25em; } - .control.has-icons-right .icon.is-right { - right: 0; } - .control.is-loading::after { - position: absolute !important; - right: 0.625em; - top: 0.625em; - z-index: 4; } - .control.is-loading.is-small:after, #documenter .docs-sidebar form.docs-search > input.control.is-loading:after { - font-size: 0.75rem; } - .control.is-loading.is-medium:after { - font-size: 1.25rem; } - .control.is-loading.is-large:after { - font-size: 1.5rem; } - -.breadcrumb { - font-size: 1rem; - white-space: nowrap; } - .breadcrumb a { - align-items: center; - color: #2e63b8; - display: flex; - justify-content: center; - padding: 0 0.75em; } - .breadcrumb a:hover { - color: #363636; } - .breadcrumb li { - align-items: center; - display: flex; } - .breadcrumb li:first-child a { - padding-left: 0; } - .breadcrumb li.is-active a { - color: #222222; - cursor: default; - pointer-events: none; } - .breadcrumb li + li::before { - color: #b5b5b5; - content: "\0002f"; } - .breadcrumb ul, - .breadcrumb ol { - align-items: flex-start; - display: flex; - flex-wrap: wrap; - justify-content: flex-start; } - .breadcrumb .icon:first-child { - margin-right: 0.5em; } - .breadcrumb .icon:last-child { - margin-left: 0.5em; } - .breadcrumb.is-centered ol, - .breadcrumb.is-centered ul { - justify-content: center; } - .breadcrumb.is-right ol, - .breadcrumb.is-right ul { - justify-content: flex-end; } - .breadcrumb.is-small, #documenter .docs-sidebar form.docs-search > input.breadcrumb { - font-size: 0.75rem; } - .breadcrumb.is-medium { - font-size: 1.25rem; } - .breadcrumb.is-large { - font-size: 1.5rem; } - .breadcrumb.has-arrow-separator li + li::before { - content: "\02192"; } - .breadcrumb.has-bullet-separator li + li::before { - content: "\02022"; } - .breadcrumb.has-dot-separator li + li::before { - content: "\000b7"; } - .breadcrumb.has-succeeds-separator li + li::before { - content: "\0227B"; } - -.card { - background-color: white; - box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); - color: #222222; - max-width: 100%; - position: relative; } - -.card-header { - background-color: transparent; - align-items: stretch; - box-shadow: 0 1px 2px rgba(10, 10, 10, 0.1); - display: flex; } - -.card-header-title { - align-items: center; - color: #222222; - display: flex; - flex-grow: 1; - font-weight: 700; - padding: 0.75rem; } - .card-header-title.is-centered { - justify-content: center; } - -.card-header-icon { - align-items: center; - cursor: pointer; - display: flex; - justify-content: center; - padding: 0.75rem; } - -.card-image { - display: block; - position: relative; } - -.card-content { - background-color: transparent; - padding: 1rem 1.25rem; } - -.card-footer { - background-color: transparent; - border-top: 1px solid #dbdbdb; - align-items: stretch; - display: flex; } - -.card-footer-item { - align-items: center; - display: flex; - flex-basis: 0; - flex-grow: 1; - flex-shrink: 0; - justify-content: center; - padding: 0.75rem; } - .card-footer-item:not(:last-child) { - border-right: 1px solid #dbdbdb; } - -.card .media:not(:last-child) { - margin-bottom: 1.5rem; } - -.dropdown { - display: inline-flex; - position: relative; - vertical-align: top; } - .dropdown.is-active .dropdown-menu, .dropdown.is-hoverable:hover .dropdown-menu { - display: block; } - .dropdown.is-right .dropdown-menu { - left: auto; - right: 0; } - .dropdown.is-up .dropdown-menu { - bottom: 100%; - padding-bottom: 4px; - padding-top: initial; - top: auto; } - -.dropdown-menu { - display: none; - left: 0; - min-width: 12rem; - padding-top: 4px; - position: absolute; - top: 100%; - z-index: 20; } - -.dropdown-content { - background-color: white; - border-radius: 4px; - box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); - padding-bottom: 0.5rem; - padding-top: 0.5rem; } - -.dropdown-item { - color: #4a4a4a; - display: block; - font-size: 0.875rem; - line-height: 1.5; - padding: 0.375rem 1rem; - position: relative; } - -a.dropdown-item, -button.dropdown-item { - padding-right: 3rem; - text-align: left; - white-space: nowrap; - width: 100%; } - a.dropdown-item:hover, - button.dropdown-item:hover { - background-color: whitesmoke; - color: #0a0a0a; } - a.dropdown-item.is-active, - button.dropdown-item.is-active { - background-color: #2e63b8; - color: #fff; } - -.dropdown-divider { - background-color: #dbdbdb; - border: none; - display: block; - height: 1px; - margin: 0.5rem 0; } - -.level { - align-items: center; - justify-content: space-between; } - .level code { - border-radius: 4px; } - .level img { - display: inline-block; - vertical-align: top; } - .level.is-mobile { - display: flex; } - .level.is-mobile .level-left, - .level.is-mobile .level-right { - display: flex; } - .level.is-mobile .level-left + .level-right { - margin-top: 0; } - .level.is-mobile .level-item:not(:last-child) { - margin-bottom: 0; - margin-right: 0.75rem; } - .level.is-mobile .level-item:not(.is-narrow) { - flex-grow: 1; } - @media screen and (min-width: 769px), print { - .level { - display: flex; } - .level > .level-item:not(.is-narrow) { - flex-grow: 1; } } - -.level-item { - align-items: center; - display: flex; - flex-basis: auto; - flex-grow: 0; - flex-shrink: 0; - justify-content: center; } - .level-item .title, - .level-item .subtitle { - margin-bottom: 0; } - @media screen and (max-width: 768px) { - .level-item:not(:last-child) { - margin-bottom: 0.75rem; } } - -.level-left, -.level-right { - flex-basis: auto; - flex-grow: 0; - flex-shrink: 0; } - .level-left .level-item.is-flexible, - .level-right .level-item.is-flexible { - flex-grow: 1; } - @media screen and (min-width: 769px), print { - .level-left .level-item:not(:last-child), - .level-right .level-item:not(:last-child) { - margin-right: 0.75rem; } } - -.level-left { - align-items: center; - justify-content: flex-start; } - @media screen and (max-width: 768px) { - .level-left + .level-right { - margin-top: 1.5rem; } } - @media screen and (min-width: 769px), print { - .level-left { - display: flex; } } - -.level-right { - align-items: center; - justify-content: flex-end; } - @media screen and (min-width: 769px), print { - .level-right { - display: flex; } } - -.list { - background-color: white; - border-radius: 4px; - box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); } - -.list-item { - display: block; - padding: 0.5em 1em; } - .list-item:not(a) { - color: #222222; } - .list-item:first-child { - border-top-left-radius: 4px; - border-top-right-radius: 4px; } - .list-item:last-child { - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; } - .list-item:not(:last-child) { - border-bottom: 1px solid #dbdbdb; } - .list-item.is-active { - background-color: #2e63b8; - color: #fff; } - -a.list-item { - background-color: whitesmoke; - cursor: pointer; } - -.media { - align-items: flex-start; - display: flex; - text-align: left; } - .media .content:not(:last-child) { - margin-bottom: 0.75rem; } - .media .media { - border-top: 1px solid rgba(219, 219, 219, 0.5); - display: flex; - padding-top: 0.75rem; } - .media .media .content:not(:last-child), - .media .media .control:not(:last-child) { - margin-bottom: 0.5rem; } - .media .media .media { - padding-top: 0.5rem; } - .media .media .media + .media { - margin-top: 0.5rem; } - .media + .media { - border-top: 1px solid rgba(219, 219, 219, 0.5); - margin-top: 1rem; - padding-top: 1rem; } - .media.is-large + .media { - margin-top: 1.5rem; - padding-top: 1.5rem; } - -.media-left, -.media-right { - flex-basis: auto; - flex-grow: 0; - flex-shrink: 0; } - -.media-left { - margin-right: 1rem; } - -.media-right { - margin-left: 1rem; } - -.media-content { - flex-basis: auto; - flex-grow: 1; - flex-shrink: 1; - text-align: left; } - -@media screen and (max-width: 768px) { - .media-content { - overflow-x: auto; } } - -.menu { - font-size: 1rem; } - .menu.is-small, #documenter .docs-sidebar form.docs-search > input.menu { - font-size: 0.75rem; } - .menu.is-medium { - font-size: 1.25rem; } - .menu.is-large { - font-size: 1.5rem; } - -.menu-list { - line-height: 1.25; } - .menu-list a { - border-radius: 2px; - color: #222222; - display: block; - padding: 0.5em 0.75em; } - .menu-list a:hover { - background-color: whitesmoke; - color: #222222; } - .menu-list a.is-active { - background-color: #2e63b8; - color: #fff; } - .menu-list li ul { - border-left: 1px solid #dbdbdb; - margin: 0.75em; - padding-left: 0.75em; } - -.menu-label { - color: #7a7a7a; - font-size: 0.75em; - letter-spacing: 0.1em; - text-transform: uppercase; } - .menu-label:not(:first-child) { - margin-top: 1em; } - .menu-label:not(:last-child) { - margin-bottom: 1em; } - -.message { - background-color: whitesmoke; - border-radius: 4px; - font-size: 1rem; } - .message strong { - color: currentColor; } - .message a:not(.button):not(.tag):not(.dropdown-item) { - color: currentColor; - text-decoration: underline; } - .message.is-small, #documenter .docs-sidebar form.docs-search > input.message { - font-size: 0.75rem; } - .message.is-medium { - font-size: 1.25rem; } - .message.is-large { - font-size: 1.5rem; } - .message.is-white { - background-color: white; } - .message.is-white .message-header { - background-color: white; - color: #0a0a0a; } - .message.is-white .message-body { - border-color: white; - color: #4d4d4d; } - .message.is-black { - background-color: #fafafa; } - .message.is-black .message-header { - background-color: #0a0a0a; - color: white; } - .message.is-black .message-body { - border-color: #0a0a0a; - color: #090909; } - .message.is-light { - background-color: #fafafa; } - .message.is-light .message-header { - background-color: whitesmoke; - color: #363636; } - .message.is-light .message-body { - border-color: whitesmoke; - color: #505050; } - .message.is-dark, .content kbd.message { - background-color: #fafafa; } - .message.is-dark .message-header, .content kbd.message .message-header { - background-color: #363636; - color: whitesmoke; } - .message.is-dark .message-body, .content kbd.message .message-body { - border-color: #363636; - color: #2a2a2a; } - .message.is-primary, .docstring > section > a.message.docs-sourcelink { - background-color: #f6fbfd; } - .message.is-primary .message-header, .docstring > section > a.message.docs-sourcelink .message-header { - background-color: #4eb5de; - color: #fff; } - .message.is-primary .message-body, .docstring > section > a.message.docs-sourcelink .message-body { - border-color: #4eb5de; - color: #1f556a; } - .message.is-link { - background-color: #f7f9fd; } - .message.is-link .message-header { - background-color: #2e63b8; - color: #fff; } - .message.is-link .message-body { - border-color: #2e63b8; - color: #264981; } - .message.is-info { - background-color: #f6fbfe; } - .message.is-info .message-header { - background-color: #209cee; - color: #fff; } - .message.is-info .message-body { - border-color: #209cee; - color: #12537d; } - .message.is-success { - background-color: #f6fdf9; } - .message.is-success .message-header { - background-color: #22c35b; - color: #fff; } - .message.is-success .message-body { - border-color: #22c35b; - color: #0f361d; } - .message.is-warning { - background-color: #fffdf5; } - .message.is-warning .message-header { - background-color: #ffdd57; - color: rgba(0, 0, 0, 0.7); } - .message.is-warning .message-body { - border-color: #ffdd57; - color: #3c3108; } - .message.is-danger { - background-color: #fff5f5; } - .message.is-danger .message-header { - background-color: #da0b00; - color: #fff; } - .message.is-danger .message-body { - border-color: #da0b00; - color: #9b0c04; } - -.message-header { - align-items: center; - background-color: #222222; - border-radius: 4px 4px 0 0; - color: #fff; - display: flex; - font-weight: 700; - justify-content: space-between; - line-height: 1.25; - padding: 0.75em; - position: relative; } - .message-header .delete { - flex-grow: 0; - flex-shrink: 0; - margin-left: 0.75em; } - .message-header + .message-body { - border-width: 0; - border-top-left-radius: 0; - border-top-right-radius: 0; } - -.message-body { - border-color: #dbdbdb; - border-radius: 4px; - border-style: solid; - border-width: 0 0 0 4px; - color: #222222; - padding: 1em 1.25em; } - .message-body code, - .message-body pre { - background-color: white; } - .message-body pre code { - background-color: transparent; } - -.modal { - align-items: center; - display: none; - flex-direction: column; - justify-content: center; - overflow: hidden; - position: fixed; - z-index: 40; } - .modal.is-active { - display: flex; } - -.modal-background { - background-color: rgba(10, 10, 10, 0.86); } - -.modal-content, -.modal-card { - margin: 0 20px; - max-height: calc(100vh - 160px); - overflow: auto; - position: relative; - width: 100%; } - @media screen and (min-width: 769px), print { - .modal-content, - .modal-card { - margin: 0 auto; - max-height: calc(100vh - 40px); - width: 640px; } } - -.modal-close { - background: none; - height: 40px; - position: fixed; - right: 20px; - top: 20px; - width: 40px; } - -.modal-card { - display: flex; - flex-direction: column; - max-height: calc(100vh - 40px); - overflow: hidden; - -ms-overflow-y: visible; } - -.modal-card-head, -.modal-card-foot { - align-items: center; - background-color: whitesmoke; - display: flex; - flex-shrink: 0; - justify-content: flex-start; - padding: 20px; - position: relative; } - -.modal-card-head { - border-bottom: 1px solid #dbdbdb; - border-top-left-radius: 6px; - border-top-right-radius: 6px; } - -.modal-card-title { - color: #222222; - flex-grow: 1; - flex-shrink: 0; - font-size: 1.5rem; - line-height: 1; } - -.modal-card-foot { - border-bottom-left-radius: 6px; - border-bottom-right-radius: 6px; - border-top: 1px solid #dbdbdb; } - .modal-card-foot .button:not(:last-child) { - margin-right: 0.5em; } - -.modal-card-body { - -webkit-overflow-scrolling: touch; - background-color: white; - flex-grow: 1; - flex-shrink: 1; - overflow: auto; - padding: 20px; } - -.navbar { - background-color: white; - min-height: 3.25rem; - position: relative; - z-index: 30; } - .navbar.is-white { - background-color: white; - color: #0a0a0a; } - .navbar.is-white .navbar-brand > .navbar-item, - .navbar.is-white .navbar-brand .navbar-link { - color: #0a0a0a; } - .navbar.is-white .navbar-brand > a.navbar-item:focus, .navbar.is-white .navbar-brand > a.navbar-item:hover, .navbar.is-white .navbar-brand > a.navbar-item.is-active, - .navbar.is-white .navbar-brand .navbar-link:focus, - .navbar.is-white .navbar-brand .navbar-link:hover, - .navbar.is-white .navbar-brand .navbar-link.is-active { - background-color: #f2f2f2; - color: #0a0a0a; } - .navbar.is-white .navbar-brand .navbar-link::after { - border-color: #0a0a0a; } - .navbar.is-white .navbar-burger { - color: #0a0a0a; } - @media screen and (min-width: 1056px) { - .navbar.is-white .navbar-start > .navbar-item, - .navbar.is-white .navbar-start .navbar-link, - .navbar.is-white .navbar-end > .navbar-item, - .navbar.is-white .navbar-end .navbar-link { - color: #0a0a0a; } - .navbar.is-white .navbar-start > a.navbar-item:focus, .navbar.is-white .navbar-start > a.navbar-item:hover, .navbar.is-white .navbar-start > a.navbar-item.is-active, - .navbar.is-white .navbar-start .navbar-link:focus, - .navbar.is-white .navbar-start .navbar-link:hover, - .navbar.is-white .navbar-start .navbar-link.is-active, - .navbar.is-white .navbar-end > a.navbar-item:focus, - .navbar.is-white .navbar-end > a.navbar-item:hover, - .navbar.is-white .navbar-end > a.navbar-item.is-active, - .navbar.is-white .navbar-end .navbar-link:focus, - .navbar.is-white .navbar-end .navbar-link:hover, - .navbar.is-white .navbar-end .navbar-link.is-active { - background-color: #f2f2f2; - color: #0a0a0a; } - .navbar.is-white .navbar-start .navbar-link::after, - .navbar.is-white .navbar-end .navbar-link::after { - border-color: #0a0a0a; } - .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link, - .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link, - .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #f2f2f2; - color: #0a0a0a; } - .navbar.is-white .navbar-dropdown a.navbar-item.is-active { - background-color: white; - color: #0a0a0a; } } - .navbar.is-black { - background-color: #0a0a0a; - color: white; } - .navbar.is-black .navbar-brand > .navbar-item, - .navbar.is-black .navbar-brand .navbar-link { - color: white; } - .navbar.is-black .navbar-brand > a.navbar-item:focus, .navbar.is-black .navbar-brand > a.navbar-item:hover, .navbar.is-black .navbar-brand > a.navbar-item.is-active, - .navbar.is-black .navbar-brand .navbar-link:focus, - .navbar.is-black .navbar-brand .navbar-link:hover, - .navbar.is-black .navbar-brand .navbar-link.is-active { - background-color: black; - color: white; } - .navbar.is-black .navbar-brand .navbar-link::after { - border-color: white; } - .navbar.is-black .navbar-burger { - color: white; } - @media screen and (min-width: 1056px) { - .navbar.is-black .navbar-start > .navbar-item, - .navbar.is-black .navbar-start .navbar-link, - .navbar.is-black .navbar-end > .navbar-item, - .navbar.is-black .navbar-end .navbar-link { - color: white; } - .navbar.is-black .navbar-start > a.navbar-item:focus, .navbar.is-black .navbar-start > a.navbar-item:hover, .navbar.is-black .navbar-start > a.navbar-item.is-active, - .navbar.is-black .navbar-start .navbar-link:focus, - .navbar.is-black .navbar-start .navbar-link:hover, - .navbar.is-black .navbar-start .navbar-link.is-active, - .navbar.is-black .navbar-end > a.navbar-item:focus, - .navbar.is-black .navbar-end > a.navbar-item:hover, - .navbar.is-black .navbar-end > a.navbar-item.is-active, - .navbar.is-black .navbar-end .navbar-link:focus, - .navbar.is-black .navbar-end .navbar-link:hover, - .navbar.is-black .navbar-end .navbar-link.is-active { - background-color: black; - color: white; } - .navbar.is-black .navbar-start .navbar-link::after, - .navbar.is-black .navbar-end .navbar-link::after { - border-color: white; } - .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link, - .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link, - .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link { - background-color: black; - color: white; } - .navbar.is-black .navbar-dropdown a.navbar-item.is-active { - background-color: #0a0a0a; - color: white; } } - .navbar.is-light { - background-color: whitesmoke; - color: #363636; } - .navbar.is-light .navbar-brand > .navbar-item, - .navbar.is-light .navbar-brand .navbar-link { - color: #363636; } - .navbar.is-light .navbar-brand > a.navbar-item:focus, .navbar.is-light .navbar-brand > a.navbar-item:hover, .navbar.is-light .navbar-brand > a.navbar-item.is-active, - .navbar.is-light .navbar-brand .navbar-link:focus, - .navbar.is-light .navbar-brand .navbar-link:hover, - .navbar.is-light .navbar-brand .navbar-link.is-active { - background-color: #e8e8e8; - color: #363636; } - .navbar.is-light .navbar-brand .navbar-link::after { - border-color: #363636; } - .navbar.is-light .navbar-burger { - color: #363636; } - @media screen and (min-width: 1056px) { - .navbar.is-light .navbar-start > .navbar-item, - .navbar.is-light .navbar-start .navbar-link, - .navbar.is-light .navbar-end > .navbar-item, - .navbar.is-light .navbar-end .navbar-link { - color: #363636; } - .navbar.is-light .navbar-start > a.navbar-item:focus, .navbar.is-light .navbar-start > a.navbar-item:hover, .navbar.is-light .navbar-start > a.navbar-item.is-active, - .navbar.is-light .navbar-start .navbar-link:focus, - .navbar.is-light .navbar-start .navbar-link:hover, - .navbar.is-light .navbar-start .navbar-link.is-active, - .navbar.is-light .navbar-end > a.navbar-item:focus, - .navbar.is-light .navbar-end > a.navbar-item:hover, - .navbar.is-light .navbar-end > a.navbar-item.is-active, - .navbar.is-light .navbar-end .navbar-link:focus, - .navbar.is-light .navbar-end .navbar-link:hover, - .navbar.is-light .navbar-end .navbar-link.is-active { - background-color: #e8e8e8; - color: #363636; } - .navbar.is-light .navbar-start .navbar-link::after, - .navbar.is-light .navbar-end .navbar-link::after { - border-color: #363636; } - .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link, - .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link, - .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #e8e8e8; - color: #363636; } - .navbar.is-light .navbar-dropdown a.navbar-item.is-active { - background-color: whitesmoke; - color: #363636; } } - .navbar.is-dark, .content kbd.navbar { - background-color: #363636; - color: whitesmoke; } - .navbar.is-dark .navbar-brand > .navbar-item, .content kbd.navbar .navbar-brand > .navbar-item, - .navbar.is-dark .navbar-brand .navbar-link, - .content kbd.navbar .navbar-brand .navbar-link { - color: whitesmoke; } - .navbar.is-dark .navbar-brand > a.navbar-item:focus, .content kbd.navbar .navbar-brand > a.navbar-item:focus, .navbar.is-dark .navbar-brand > a.navbar-item:hover, .content kbd.navbar .navbar-brand > a.navbar-item:hover, .navbar.is-dark .navbar-brand > a.navbar-item.is-active, .content kbd.navbar .navbar-brand > a.navbar-item.is-active, - .navbar.is-dark .navbar-brand .navbar-link:focus, - .content kbd.navbar .navbar-brand .navbar-link:focus, - .navbar.is-dark .navbar-brand .navbar-link:hover, - .content kbd.navbar .navbar-brand .navbar-link:hover, - .navbar.is-dark .navbar-brand .navbar-link.is-active, - .content kbd.navbar .navbar-brand .navbar-link.is-active { - background-color: #292929; - color: whitesmoke; } - .navbar.is-dark .navbar-brand .navbar-link::after, .content kbd.navbar .navbar-brand .navbar-link::after { - border-color: whitesmoke; } - .navbar.is-dark .navbar-burger, .content kbd.navbar .navbar-burger { - color: whitesmoke; } - @media screen and (min-width: 1056px) { - .navbar.is-dark .navbar-start > .navbar-item, .content kbd.navbar .navbar-start > .navbar-item, - .navbar.is-dark .navbar-start .navbar-link, - .content kbd.navbar .navbar-start .navbar-link, - .navbar.is-dark .navbar-end > .navbar-item, - .content kbd.navbar .navbar-end > .navbar-item, - .navbar.is-dark .navbar-end .navbar-link, - .content kbd.navbar .navbar-end .navbar-link { - color: whitesmoke; } - .navbar.is-dark .navbar-start > a.navbar-item:focus, .content kbd.navbar .navbar-start > a.navbar-item:focus, .navbar.is-dark .navbar-start > a.navbar-item:hover, .content kbd.navbar .navbar-start > a.navbar-item:hover, .navbar.is-dark .navbar-start > a.navbar-item.is-active, .content kbd.navbar .navbar-start > a.navbar-item.is-active, - .navbar.is-dark .navbar-start .navbar-link:focus, - .content kbd.navbar .navbar-start .navbar-link:focus, - .navbar.is-dark .navbar-start .navbar-link:hover, - .content kbd.navbar .navbar-start .navbar-link:hover, - .navbar.is-dark .navbar-start .navbar-link.is-active, - .content kbd.navbar .navbar-start .navbar-link.is-active, - .navbar.is-dark .navbar-end > a.navbar-item:focus, - .content kbd.navbar .navbar-end > a.navbar-item:focus, - .navbar.is-dark .navbar-end > a.navbar-item:hover, - .content kbd.navbar .navbar-end > a.navbar-item:hover, - .navbar.is-dark .navbar-end > a.navbar-item.is-active, - .content kbd.navbar .navbar-end > a.navbar-item.is-active, - .navbar.is-dark .navbar-end .navbar-link:focus, - .content kbd.navbar .navbar-end .navbar-link:focus, - .navbar.is-dark .navbar-end .navbar-link:hover, - .content kbd.navbar .navbar-end .navbar-link:hover, - .navbar.is-dark .navbar-end .navbar-link.is-active, - .content kbd.navbar .navbar-end .navbar-link.is-active { - background-color: #292929; - color: whitesmoke; } - .navbar.is-dark .navbar-start .navbar-link::after, .content kbd.navbar .navbar-start .navbar-link::after, - .navbar.is-dark .navbar-end .navbar-link::after, - .content kbd.navbar .navbar-end .navbar-link::after { - border-color: whitesmoke; } - .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link, .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link, - .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link, - .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link, - .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link, - .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #292929; - color: whitesmoke; } - .navbar.is-dark .navbar-dropdown a.navbar-item.is-active, .content kbd.navbar .navbar-dropdown a.navbar-item.is-active { - background-color: #363636; - color: whitesmoke; } } - .navbar.is-primary, .docstring > section > a.navbar.docs-sourcelink { - background-color: #4eb5de; - color: #fff; } - .navbar.is-primary .navbar-brand > .navbar-item, .docstring > section > a.navbar.docs-sourcelink .navbar-brand > .navbar-item, - .navbar.is-primary .navbar-brand .navbar-link, - .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link { - color: #fff; } - .navbar.is-primary .navbar-brand > a.navbar-item:focus, .docstring > section > a.navbar.docs-sourcelink .navbar-brand > a.navbar-item:focus, .navbar.is-primary .navbar-brand > a.navbar-item:hover, .docstring > section > a.navbar.docs-sourcelink .navbar-brand > a.navbar-item:hover, .navbar.is-primary .navbar-brand > a.navbar-item.is-active, .docstring > section > a.navbar.docs-sourcelink .navbar-brand > a.navbar-item.is-active, - .navbar.is-primary .navbar-brand .navbar-link:focus, - .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus, - .navbar.is-primary .navbar-brand .navbar-link:hover, - .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover, - .navbar.is-primary .navbar-brand .navbar-link.is-active, - .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active { - background-color: #39acda; - color: #fff; } - .navbar.is-primary .navbar-brand .navbar-link::after, .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link::after { - border-color: #fff; } - .navbar.is-primary .navbar-burger, .docstring > section > a.navbar.docs-sourcelink .navbar-burger { - color: #fff; } - @media screen and (min-width: 1056px) { - .navbar.is-primary .navbar-start > .navbar-item, .docstring > section > a.navbar.docs-sourcelink .navbar-start > .navbar-item, - .navbar.is-primary .navbar-start .navbar-link, - .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link, - .navbar.is-primary .navbar-end > .navbar-item, - .docstring > section > a.navbar.docs-sourcelink .navbar-end > .navbar-item, - .navbar.is-primary .navbar-end .navbar-link, - .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link { - color: #fff; } - .navbar.is-primary .navbar-start > a.navbar-item:focus, .docstring > section > a.navbar.docs-sourcelink .navbar-start > a.navbar-item:focus, .navbar.is-primary .navbar-start > a.navbar-item:hover, .docstring > section > a.navbar.docs-sourcelink .navbar-start > a.navbar-item:hover, .navbar.is-primary .navbar-start > a.navbar-item.is-active, .docstring > section > a.navbar.docs-sourcelink .navbar-start > a.navbar-item.is-active, - .navbar.is-primary .navbar-start .navbar-link:focus, - .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link:focus, - .navbar.is-primary .navbar-start .navbar-link:hover, - .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link:hover, - .navbar.is-primary .navbar-start .navbar-link.is-active, - .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active, - .navbar.is-primary .navbar-end > a.navbar-item:focus, - .docstring > section > a.navbar.docs-sourcelink .navbar-end > a.navbar-item:focus, - .navbar.is-primary .navbar-end > a.navbar-item:hover, - .docstring > section > a.navbar.docs-sourcelink .navbar-end > a.navbar-item:hover, - .navbar.is-primary .navbar-end > a.navbar-item.is-active, - .docstring > section > a.navbar.docs-sourcelink .navbar-end > a.navbar-item.is-active, - .navbar.is-primary .navbar-end .navbar-link:focus, - .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link:focus, - .navbar.is-primary .navbar-end .navbar-link:hover, - .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link:hover, - .navbar.is-primary .navbar-end .navbar-link.is-active, - .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active { - background-color: #39acda; - color: #fff; } - .navbar.is-primary .navbar-start .navbar-link::after, .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link::after, - .navbar.is-primary .navbar-end .navbar-link::after, - .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link::after { - border-color: #fff; } - .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link, .docstring > section > a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link, - .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link, - .docstring > section > a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link, - .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link, - .docstring > section > a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #39acda; - color: #fff; } - .navbar.is-primary .navbar-dropdown a.navbar-item.is-active, .docstring > section > a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active { - background-color: #4eb5de; - color: #fff; } } - .navbar.is-link { - background-color: #2e63b8; - color: #fff; } - .navbar.is-link .navbar-brand > .navbar-item, - .navbar.is-link .navbar-brand .navbar-link { - color: #fff; } - .navbar.is-link .navbar-brand > a.navbar-item:focus, .navbar.is-link .navbar-brand > a.navbar-item:hover, .navbar.is-link .navbar-brand > a.navbar-item.is-active, - .navbar.is-link .navbar-brand .navbar-link:focus, - .navbar.is-link .navbar-brand .navbar-link:hover, - .navbar.is-link .navbar-brand .navbar-link.is-active { - background-color: #2958a4; - color: #fff; } - .navbar.is-link .navbar-brand .navbar-link::after { - border-color: #fff; } - .navbar.is-link .navbar-burger { - color: #fff; } - @media screen and (min-width: 1056px) { - .navbar.is-link .navbar-start > .navbar-item, - .navbar.is-link .navbar-start .navbar-link, - .navbar.is-link .navbar-end > .navbar-item, - .navbar.is-link .navbar-end .navbar-link { - color: #fff; } - .navbar.is-link .navbar-start > a.navbar-item:focus, .navbar.is-link .navbar-start > a.navbar-item:hover, .navbar.is-link .navbar-start > a.navbar-item.is-active, - .navbar.is-link .navbar-start .navbar-link:focus, - .navbar.is-link .navbar-start .navbar-link:hover, - .navbar.is-link .navbar-start .navbar-link.is-active, - .navbar.is-link .navbar-end > a.navbar-item:focus, - .navbar.is-link .navbar-end > a.navbar-item:hover, - .navbar.is-link .navbar-end > a.navbar-item.is-active, - .navbar.is-link .navbar-end .navbar-link:focus, - .navbar.is-link .navbar-end .navbar-link:hover, - .navbar.is-link .navbar-end .navbar-link.is-active { - background-color: #2958a4; - color: #fff; } - .navbar.is-link .navbar-start .navbar-link::after, - .navbar.is-link .navbar-end .navbar-link::after { - border-color: #fff; } - .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link, - .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link, - .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #2958a4; - color: #fff; } - .navbar.is-link .navbar-dropdown a.navbar-item.is-active { - background-color: #2e63b8; - color: #fff; } } - .navbar.is-info { - background-color: #209cee; - color: #fff; } - .navbar.is-info .navbar-brand > .navbar-item, - .navbar.is-info .navbar-brand .navbar-link { - color: #fff; } - .navbar.is-info .navbar-brand > a.navbar-item:focus, .navbar.is-info .navbar-brand > a.navbar-item:hover, .navbar.is-info .navbar-brand > a.navbar-item.is-active, - .navbar.is-info .navbar-brand .navbar-link:focus, - .navbar.is-info .navbar-brand .navbar-link:hover, - .navbar.is-info .navbar-brand .navbar-link.is-active { - background-color: #1190e3; - color: #fff; } - .navbar.is-info .navbar-brand .navbar-link::after { - border-color: #fff; } - .navbar.is-info .navbar-burger { - color: #fff; } - @media screen and (min-width: 1056px) { - .navbar.is-info .navbar-start > .navbar-item, - .navbar.is-info .navbar-start .navbar-link, - .navbar.is-info .navbar-end > .navbar-item, - .navbar.is-info .navbar-end .navbar-link { - color: #fff; } - .navbar.is-info .navbar-start > a.navbar-item:focus, .navbar.is-info .navbar-start > a.navbar-item:hover, .navbar.is-info .navbar-start > a.navbar-item.is-active, - .navbar.is-info .navbar-start .navbar-link:focus, - .navbar.is-info .navbar-start .navbar-link:hover, - .navbar.is-info .navbar-start .navbar-link.is-active, - .navbar.is-info .navbar-end > a.navbar-item:focus, - .navbar.is-info .navbar-end > a.navbar-item:hover, - .navbar.is-info .navbar-end > a.navbar-item.is-active, - .navbar.is-info .navbar-end .navbar-link:focus, - .navbar.is-info .navbar-end .navbar-link:hover, - .navbar.is-info .navbar-end .navbar-link.is-active { - background-color: #1190e3; - color: #fff; } - .navbar.is-info .navbar-start .navbar-link::after, - .navbar.is-info .navbar-end .navbar-link::after { - border-color: #fff; } - .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link, - .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link, - .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #1190e3; - color: #fff; } - .navbar.is-info .navbar-dropdown a.navbar-item.is-active { - background-color: #209cee; - color: #fff; } } - .navbar.is-success { - background-color: #22c35b; - color: #fff; } - .navbar.is-success .navbar-brand > .navbar-item, - .navbar.is-success .navbar-brand .navbar-link { - color: #fff; } - .navbar.is-success .navbar-brand > a.navbar-item:focus, .navbar.is-success .navbar-brand > a.navbar-item:hover, .navbar.is-success .navbar-brand > a.navbar-item.is-active, - .navbar.is-success .navbar-brand .navbar-link:focus, - .navbar.is-success .navbar-brand .navbar-link:hover, - .navbar.is-success .navbar-brand .navbar-link.is-active { - background-color: #1ead51; - color: #fff; } - .navbar.is-success .navbar-brand .navbar-link::after { - border-color: #fff; } - .navbar.is-success .navbar-burger { - color: #fff; } - @media screen and (min-width: 1056px) { - .navbar.is-success .navbar-start > .navbar-item, - .navbar.is-success .navbar-start .navbar-link, - .navbar.is-success .navbar-end > .navbar-item, - .navbar.is-success .navbar-end .navbar-link { - color: #fff; } - .navbar.is-success .navbar-start > a.navbar-item:focus, .navbar.is-success .navbar-start > a.navbar-item:hover, .navbar.is-success .navbar-start > a.navbar-item.is-active, - .navbar.is-success .navbar-start .navbar-link:focus, - .navbar.is-success .navbar-start .navbar-link:hover, - .navbar.is-success .navbar-start .navbar-link.is-active, - .navbar.is-success .navbar-end > a.navbar-item:focus, - .navbar.is-success .navbar-end > a.navbar-item:hover, - .navbar.is-success .navbar-end > a.navbar-item.is-active, - .navbar.is-success .navbar-end .navbar-link:focus, - .navbar.is-success .navbar-end .navbar-link:hover, - .navbar.is-success .navbar-end .navbar-link.is-active { - background-color: #1ead51; - color: #fff; } - .navbar.is-success .navbar-start .navbar-link::after, - .navbar.is-success .navbar-end .navbar-link::after { - border-color: #fff; } - .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link, - .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link, - .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #1ead51; - color: #fff; } - .navbar.is-success .navbar-dropdown a.navbar-item.is-active { - background-color: #22c35b; - color: #fff; } } - .navbar.is-warning { - background-color: #ffdd57; - color: rgba(0, 0, 0, 0.7); } - .navbar.is-warning .navbar-brand > .navbar-item, - .navbar.is-warning .navbar-brand .navbar-link { - color: rgba(0, 0, 0, 0.7); } - .navbar.is-warning .navbar-brand > a.navbar-item:focus, .navbar.is-warning .navbar-brand > a.navbar-item:hover, .navbar.is-warning .navbar-brand > a.navbar-item.is-active, - .navbar.is-warning .navbar-brand .navbar-link:focus, - .navbar.is-warning .navbar-brand .navbar-link:hover, - .navbar.is-warning .navbar-brand .navbar-link.is-active { - background-color: #ffd83e; - color: rgba(0, 0, 0, 0.7); } - .navbar.is-warning .navbar-brand .navbar-link::after { - border-color: rgba(0, 0, 0, 0.7); } - .navbar.is-warning .navbar-burger { - color: rgba(0, 0, 0, 0.7); } - @media screen and (min-width: 1056px) { - .navbar.is-warning .navbar-start > .navbar-item, - .navbar.is-warning .navbar-start .navbar-link, - .navbar.is-warning .navbar-end > .navbar-item, - .navbar.is-warning .navbar-end .navbar-link { - color: rgba(0, 0, 0, 0.7); } - .navbar.is-warning .navbar-start > a.navbar-item:focus, .navbar.is-warning .navbar-start > a.navbar-item:hover, .navbar.is-warning .navbar-start > a.navbar-item.is-active, - .navbar.is-warning .navbar-start .navbar-link:focus, - .navbar.is-warning .navbar-start .navbar-link:hover, - .navbar.is-warning .navbar-start .navbar-link.is-active, - .navbar.is-warning .navbar-end > a.navbar-item:focus, - .navbar.is-warning .navbar-end > a.navbar-item:hover, - .navbar.is-warning .navbar-end > a.navbar-item.is-active, - .navbar.is-warning .navbar-end .navbar-link:focus, - .navbar.is-warning .navbar-end .navbar-link:hover, - .navbar.is-warning .navbar-end .navbar-link.is-active { - background-color: #ffd83e; - color: rgba(0, 0, 0, 0.7); } - .navbar.is-warning .navbar-start .navbar-link::after, - .navbar.is-warning .navbar-end .navbar-link::after { - border-color: rgba(0, 0, 0, 0.7); } - .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link, - .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link, - .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #ffd83e; - color: rgba(0, 0, 0, 0.7); } - .navbar.is-warning .navbar-dropdown a.navbar-item.is-active { - background-color: #ffdd57; - color: rgba(0, 0, 0, 0.7); } } - .navbar.is-danger { - background-color: #da0b00; - color: #fff; } - .navbar.is-danger .navbar-brand > .navbar-item, - .navbar.is-danger .navbar-brand .navbar-link { - color: #fff; } - .navbar.is-danger .navbar-brand > a.navbar-item:focus, .navbar.is-danger .navbar-brand > a.navbar-item:hover, .navbar.is-danger .navbar-brand > a.navbar-item.is-active, - .navbar.is-danger .navbar-brand .navbar-link:focus, - .navbar.is-danger .navbar-brand .navbar-link:hover, - .navbar.is-danger .navbar-brand .navbar-link.is-active { - background-color: #c10a00; - color: #fff; } - .navbar.is-danger .navbar-brand .navbar-link::after { - border-color: #fff; } - .navbar.is-danger .navbar-burger { - color: #fff; } - @media screen and (min-width: 1056px) { - .navbar.is-danger .navbar-start > .navbar-item, - .navbar.is-danger .navbar-start .navbar-link, - .navbar.is-danger .navbar-end > .navbar-item, - .navbar.is-danger .navbar-end .navbar-link { - color: #fff; } - .navbar.is-danger .navbar-start > a.navbar-item:focus, .navbar.is-danger .navbar-start > a.navbar-item:hover, .navbar.is-danger .navbar-start > a.navbar-item.is-active, - .navbar.is-danger .navbar-start .navbar-link:focus, - .navbar.is-danger .navbar-start .navbar-link:hover, - .navbar.is-danger .navbar-start .navbar-link.is-active, - .navbar.is-danger .navbar-end > a.navbar-item:focus, - .navbar.is-danger .navbar-end > a.navbar-item:hover, - .navbar.is-danger .navbar-end > a.navbar-item.is-active, - .navbar.is-danger .navbar-end .navbar-link:focus, - .navbar.is-danger .navbar-end .navbar-link:hover, - .navbar.is-danger .navbar-end .navbar-link.is-active { - background-color: #c10a00; - color: #fff; } - .navbar.is-danger .navbar-start .navbar-link::after, - .navbar.is-danger .navbar-end .navbar-link::after { - border-color: #fff; } - .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link, - .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link, - .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #c10a00; - color: #fff; } - .navbar.is-danger .navbar-dropdown a.navbar-item.is-active { - background-color: #da0b00; - color: #fff; } } - .navbar > .container { - align-items: stretch; - display: flex; - min-height: 3.25rem; - width: 100%; } - .navbar.has-shadow { - box-shadow: 0 2px 0 0 whitesmoke; } - .navbar.is-fixed-bottom, .navbar.is-fixed-top { - left: 0; - position: fixed; - right: 0; - z-index: 30; } - .navbar.is-fixed-bottom { - bottom: 0; } - .navbar.is-fixed-bottom.has-shadow { - box-shadow: 0 -2px 0 0 whitesmoke; } - .navbar.is-fixed-top { - top: 0; } - -html.has-navbar-fixed-top, -body.has-navbar-fixed-top { - padding-top: 3.25rem; } - -html.has-navbar-fixed-bottom, -body.has-navbar-fixed-bottom { - padding-bottom: 3.25rem; } - -.navbar-brand, -.navbar-tabs { - align-items: stretch; - display: flex; - flex-shrink: 0; - min-height: 3.25rem; } - -.navbar-brand a.navbar-item:focus, .navbar-brand a.navbar-item:hover { - background-color: transparent; } - -.navbar-tabs { - -webkit-overflow-scrolling: touch; - max-width: 100vw; - overflow-x: auto; - overflow-y: hidden; } - -.navbar-burger { - color: #4a4a4a; - cursor: pointer; - display: block; - height: 3.25rem; - position: relative; - width: 3.25rem; - margin-left: auto; } - .navbar-burger span { - background-color: currentColor; - display: block; - height: 1px; - left: calc(50% - 8px); - position: absolute; - transform-origin: center; - transition-duration: 86ms; - transition-property: background-color, opacity, transform; - transition-timing-function: ease-out; - width: 16px; } - .navbar-burger span:nth-child(1) { - top: calc(50% - 6px); } - .navbar-burger span:nth-child(2) { - top: calc(50% - 1px); } - .navbar-burger span:nth-child(3) { - top: calc(50% + 4px); } - .navbar-burger:hover { - background-color: rgba(0, 0, 0, 0.05); } - .navbar-burger.is-active span:nth-child(1) { - transform: translateY(5px) rotate(45deg); } - .navbar-burger.is-active span:nth-child(2) { - opacity: 0; } - .navbar-burger.is-active span:nth-child(3) { - transform: translateY(-5px) rotate(-45deg); } - -.navbar-menu { - display: none; } - -.navbar-item, -.navbar-link { - color: #4a4a4a; - display: block; - line-height: 1.5; - padding: 0.5rem 0.75rem; - position: relative; } - .navbar-item .icon:only-child, - .navbar-link .icon:only-child { - margin-left: -0.25rem; - margin-right: -0.25rem; } - -a.navbar-item, -.navbar-link { - cursor: pointer; } - a.navbar-item:focus, a.navbar-item:focus-within, a.navbar-item:hover, a.navbar-item.is-active, - .navbar-link:focus, - .navbar-link:focus-within, - .navbar-link:hover, - .navbar-link.is-active { - background-color: #fafafa; - color: #2e63b8; } - -.navbar-item { - display: block; - flex-grow: 0; - flex-shrink: 0; } - .navbar-item img { - max-height: 1.75rem; } - .navbar-item.has-dropdown { - padding: 0; } - .navbar-item.is-expanded { - flex-grow: 1; - flex-shrink: 1; } - .navbar-item.is-tab { - border-bottom: 1px solid transparent; - min-height: 3.25rem; - padding-bottom: calc(0.5rem - 1px); } - .navbar-item.is-tab:focus, .navbar-item.is-tab:hover { - background-color: transparent; - border-bottom-color: #2e63b8; } - .navbar-item.is-tab.is-active { - background-color: transparent; - border-bottom-color: #2e63b8; - border-bottom-style: solid; - border-bottom-width: 3px; - color: #2e63b8; - padding-bottom: calc(0.5rem - 3px); } - -.navbar-content { - flex-grow: 1; - flex-shrink: 1; } - -.navbar-link:not(.is-arrowless) { - padding-right: 2.5em; } - .navbar-link:not(.is-arrowless)::after { - border-color: #2e63b8; - margin-top: -0.375em; - right: 1.125em; } - -.navbar-dropdown { - font-size: 0.875rem; - padding-bottom: 0.5rem; - padding-top: 0.5rem; } - .navbar-dropdown .navbar-item { - padding-left: 1.5rem; - padding-right: 1.5rem; } - -.navbar-divider { - background-color: whitesmoke; - border: none; - display: none; - height: 2px; - margin: 0.5rem 0; } - -@media screen and (max-width: 1055px) { - .navbar > .container { - display: block; } - .navbar-brand .navbar-item, - .navbar-tabs .navbar-item { - align-items: center; - display: flex; } - .navbar-link::after { - display: none; } - .navbar-menu { - background-color: white; - box-shadow: 0 8px 16px rgba(10, 10, 10, 0.1); - padding: 0.5rem 0; } - .navbar-menu.is-active { - display: block; } - .navbar.is-fixed-bottom-touch, .navbar.is-fixed-top-touch { - left: 0; - position: fixed; - right: 0; - z-index: 30; } - .navbar.is-fixed-bottom-touch { - bottom: 0; } - .navbar.is-fixed-bottom-touch.has-shadow { - box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); } - .navbar.is-fixed-top-touch { - top: 0; } - .navbar.is-fixed-top .navbar-menu, .navbar.is-fixed-top-touch .navbar-menu { - -webkit-overflow-scrolling: touch; - max-height: calc(100vh - 3.25rem); - overflow: auto; } - html.has-navbar-fixed-top-touch, - body.has-navbar-fixed-top-touch { - padding-top: 3.25rem; } - html.has-navbar-fixed-bottom-touch, - body.has-navbar-fixed-bottom-touch { - padding-bottom: 3.25rem; } } - -@media screen and (min-width: 1056px) { - .navbar, - .navbar-menu, - .navbar-start, - .navbar-end { - align-items: stretch; - display: flex; } - .navbar { - min-height: 3.25rem; } - .navbar.is-spaced { - padding: 1rem 2rem; } - .navbar.is-spaced .navbar-start, - .navbar.is-spaced .navbar-end { - align-items: center; } - .navbar.is-spaced a.navbar-item, - .navbar.is-spaced .navbar-link { - border-radius: 4px; } - .navbar.is-transparent a.navbar-item:focus, .navbar.is-transparent a.navbar-item:hover, .navbar.is-transparent a.navbar-item.is-active, - .navbar.is-transparent .navbar-link:focus, - .navbar.is-transparent .navbar-link:hover, - .navbar.is-transparent .navbar-link.is-active { - background-color: transparent !important; } - .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link { - background-color: transparent !important; } - .navbar.is-transparent .navbar-dropdown a.navbar-item:focus, .navbar.is-transparent .navbar-dropdown a.navbar-item:hover { - background-color: whitesmoke; - color: #0a0a0a; } - .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active { - background-color: whitesmoke; - color: #2e63b8; } - .navbar-burger { - display: none; } - .navbar-item, - .navbar-link { - align-items: center; - display: flex; } - .navbar-item { - display: flex; } - .navbar-item.has-dropdown { - align-items: stretch; } - .navbar-item.has-dropdown-up .navbar-link::after { - transform: rotate(135deg) translate(0.25em, -0.25em); } - .navbar-item.has-dropdown-up .navbar-dropdown { - border-bottom: 2px solid #dbdbdb; - border-radius: 6px 6px 0 0; - border-top: none; - bottom: 100%; - box-shadow: 0 -8px 8px rgba(10, 10, 10, 0.1); - top: auto; } - .navbar-item.is-active .navbar-dropdown, .navbar-item.is-hoverable:focus .navbar-dropdown, .navbar-item.is-hoverable:focus-within .navbar-dropdown, .navbar-item.is-hoverable:hover .navbar-dropdown { - display: block; } - .navbar.is-spaced .navbar-item.is-active .navbar-dropdown, .navbar-item.is-active .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown, .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown, .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown, .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed { - opacity: 1; - pointer-events: auto; - transform: translateY(0); } - .navbar-menu { - flex-grow: 1; - flex-shrink: 0; } - .navbar-start { - justify-content: flex-start; - margin-right: auto; } - .navbar-end { - justify-content: flex-end; - margin-left: auto; } - .navbar-dropdown { - background-color: white; - border-bottom-left-radius: 6px; - border-bottom-right-radius: 6px; - border-top: 2px solid #dbdbdb; - box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1); - display: none; - font-size: 0.875rem; - left: 0; - min-width: 100%; - position: absolute; - top: 100%; - z-index: 20; } - .navbar-dropdown .navbar-item { - padding: 0.375rem 1rem; - white-space: nowrap; } - .navbar-dropdown a.navbar-item { - padding-right: 3rem; } - .navbar-dropdown a.navbar-item:focus, .navbar-dropdown a.navbar-item:hover { - background-color: whitesmoke; - color: #0a0a0a; } - .navbar-dropdown a.navbar-item.is-active { - background-color: whitesmoke; - color: #2e63b8; } - .navbar.is-spaced .navbar-dropdown, .navbar-dropdown.is-boxed { - border-radius: 6px; - border-top: none; - box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); - display: block; - opacity: 0; - pointer-events: none; - top: calc(100% + (-4px)); - transform: translateY(-5px); - transition-duration: 86ms; - transition-property: opacity, transform; } - .navbar-dropdown.is-right { - left: auto; - right: 0; } - .navbar-divider { - display: block; } - .navbar > .container .navbar-brand, - .container > .navbar .navbar-brand { - margin-left: -.75rem; } - .navbar > .container .navbar-menu, - .container > .navbar .navbar-menu { - margin-right: -.75rem; } - .navbar.is-fixed-bottom-desktop, .navbar.is-fixed-top-desktop { - left: 0; - position: fixed; - right: 0; - z-index: 30; } - .navbar.is-fixed-bottom-desktop { - bottom: 0; } - .navbar.is-fixed-bottom-desktop.has-shadow { - box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); } - .navbar.is-fixed-top-desktop { - top: 0; } - html.has-navbar-fixed-top-desktop, - body.has-navbar-fixed-top-desktop { - padding-top: 3.25rem; } - html.has-navbar-fixed-bottom-desktop, - body.has-navbar-fixed-bottom-desktop { - padding-bottom: 3.25rem; } - html.has-spaced-navbar-fixed-top, - body.has-spaced-navbar-fixed-top { - padding-top: 5.25rem; } - html.has-spaced-navbar-fixed-bottom, - body.has-spaced-navbar-fixed-bottom { - padding-bottom: 5.25rem; } - a.navbar-item.is-active, - .navbar-link.is-active { - color: #0a0a0a; } - a.navbar-item.is-active:not(:focus):not(:hover), - .navbar-link.is-active:not(:focus):not(:hover) { - background-color: transparent; } - .navbar-item.has-dropdown:focus .navbar-link, .navbar-item.has-dropdown:hover .navbar-link, .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #fafafa; } } - -.hero.is-fullheight-with-navbar { - min-height: calc(100vh - 3.25rem); } - -.pagination { - font-size: 1rem; - margin: -0.25rem; } - .pagination.is-small, #documenter .docs-sidebar form.docs-search > input.pagination { - font-size: 0.75rem; } - .pagination.is-medium { - font-size: 1.25rem; } - .pagination.is-large { - font-size: 1.5rem; } - .pagination.is-rounded .pagination-previous, #documenter .docs-sidebar form.docs-search > input.pagination .pagination-previous, - .pagination.is-rounded .pagination-next, - #documenter .docs-sidebar form.docs-search > input.pagination .pagination-next { - padding-left: 1em; - padding-right: 1em; - border-radius: 290486px; } - .pagination.is-rounded .pagination-link, #documenter .docs-sidebar form.docs-search > input.pagination .pagination-link { - border-radius: 290486px; } - -.pagination, -.pagination-list { - align-items: center; - display: flex; - justify-content: center; - text-align: center; } - -.pagination-previous, -.pagination-next, -.pagination-link, -.pagination-ellipsis { - font-size: 1em; - justify-content: center; - margin: 0.25rem; - padding-left: 0.5em; - padding-right: 0.5em; - text-align: center; } - -.pagination-previous, -.pagination-next, -.pagination-link { - border-color: #dbdbdb; - color: #363636; - min-width: 2.25em; } - .pagination-previous:hover, - .pagination-next:hover, - .pagination-link:hover { - border-color: #b5b5b5; - color: #363636; } - .pagination-previous:focus, - .pagination-next:focus, - .pagination-link:focus { - border-color: #3c5dcd; } - .pagination-previous:active, - .pagination-next:active, - .pagination-link:active { - box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2); } - .pagination-previous[disabled], - .pagination-next[disabled], - .pagination-link[disabled] { - background-color: #dbdbdb; - border-color: #dbdbdb; - box-shadow: none; - color: #7a7a7a; - opacity: 0.5; } - -.pagination-previous, -.pagination-next { - padding-left: 0.75em; - padding-right: 0.75em; - white-space: nowrap; } - -.pagination-link.is-current { - background-color: #2e63b8; - border-color: #2e63b8; - color: #fff; } - -.pagination-ellipsis { - color: #b5b5b5; - pointer-events: none; } - -.pagination-list { - flex-wrap: wrap; } - -@media screen and (max-width: 768px) { - .pagination { - flex-wrap: wrap; } - .pagination-previous, - .pagination-next { - flex-grow: 1; - flex-shrink: 1; } - .pagination-list li { - flex-grow: 1; - flex-shrink: 1; } } - -@media screen and (min-width: 769px), print { - .pagination-list { - flex-grow: 1; - flex-shrink: 1; - justify-content: flex-start; - order: 1; } - .pagination-previous { - order: 2; } - .pagination-next { - order: 3; } - .pagination { - justify-content: space-between; } - .pagination.is-centered .pagination-previous { - order: 1; } - .pagination.is-centered .pagination-list { - justify-content: center; - order: 2; } - .pagination.is-centered .pagination-next { - order: 3; } - .pagination.is-right .pagination-previous { - order: 1; } - .pagination.is-right .pagination-next { - order: 2; } - .pagination.is-right .pagination-list { - justify-content: flex-end; - order: 3; } } - -.panel { - font-size: 1rem; } - .panel:not(:last-child) { - margin-bottom: 1.5rem; } - -.panel-heading, -.panel-tabs, -.panel-block { - border-bottom: 1px solid #dbdbdb; - border-left: 1px solid #dbdbdb; - border-right: 1px solid #dbdbdb; } - .panel-heading:first-child, - .panel-tabs:first-child, - .panel-block:first-child { - border-top: 1px solid #dbdbdb; } - -.panel-heading { - background-color: whitesmoke; - border-radius: 4px 4px 0 0; - color: #222222; - font-size: 1.25em; - font-weight: 300; - line-height: 1.25; - padding: 0.5em 0.75em; } - -.panel-tabs { - align-items: flex-end; - display: flex; - font-size: 0.875em; - justify-content: center; } - .panel-tabs a { - border-bottom: 1px solid #dbdbdb; - margin-bottom: -1px; - padding: 0.5em; } - .panel-tabs a.is-active { - border-bottom-color: #4a4a4a; - color: #363636; } - -.panel-list a { - color: #222222; } - .panel-list a:hover { - color: #2e63b8; } - -.panel-block { - align-items: center; - color: #222222; - display: flex; - justify-content: flex-start; - padding: 0.5em 0.75em; } - .panel-block input[type="checkbox"] { - margin-right: 0.75em; } - .panel-block > .control { - flex-grow: 1; - flex-shrink: 1; - width: 100%; } - .panel-block.is-wrapped { - flex-wrap: wrap; } - .panel-block.is-active { - border-left-color: #2e63b8; - color: #363636; } - .panel-block.is-active .panel-icon { - color: #2e63b8; } - -a.panel-block, -label.panel-block { - cursor: pointer; } - a.panel-block:hover, - label.panel-block:hover { - background-color: whitesmoke; } - -.panel-icon { - display: inline-block; - font-size: 14px; - height: 1em; - line-height: 1em; - text-align: center; - vertical-align: top; - width: 1em; - color: #7a7a7a; - margin-right: 0.75em; } - .panel-icon .fa { - font-size: inherit; - line-height: inherit; } - -.tabs { - -webkit-overflow-scrolling: touch; - align-items: stretch; - display: flex; - font-size: 1rem; - justify-content: space-between; - overflow: hidden; - overflow-x: auto; - white-space: nowrap; } - .tabs a { - align-items: center; - border-bottom-color: #dbdbdb; - border-bottom-style: solid; - border-bottom-width: 1px; - color: #222222; - display: flex; - justify-content: center; - margin-bottom: -1px; - padding: 0.5em 1em; - vertical-align: top; } - .tabs a:hover { - border-bottom-color: #222222; - color: #222222; } - .tabs li { - display: block; } - .tabs li.is-active a { - border-bottom-color: #2e63b8; - color: #2e63b8; } - .tabs ul { - align-items: center; - border-bottom-color: #dbdbdb; - border-bottom-style: solid; - border-bottom-width: 1px; - display: flex; - flex-grow: 1; - flex-shrink: 0; - justify-content: flex-start; } - .tabs ul.is-left { - padding-right: 0.75em; } - .tabs ul.is-center { - flex: none; - justify-content: center; - padding-left: 0.75em; - padding-right: 0.75em; } - .tabs ul.is-right { - justify-content: flex-end; - padding-left: 0.75em; } - .tabs .icon:first-child { - margin-right: 0.5em; } - .tabs .icon:last-child { - margin-left: 0.5em; } - .tabs.is-centered ul { - justify-content: center; } - .tabs.is-right ul { - justify-content: flex-end; } - .tabs.is-boxed a { - border: 1px solid transparent; - border-radius: 4px 4px 0 0; } - .tabs.is-boxed a:hover { - background-color: whitesmoke; - border-bottom-color: #dbdbdb; } - .tabs.is-boxed li.is-active a { - background-color: white; - border-color: #dbdbdb; - border-bottom-color: transparent !important; } - .tabs.is-fullwidth li { - flex-grow: 1; - flex-shrink: 0; } - .tabs.is-toggle a { - border-color: #dbdbdb; - border-style: solid; - border-width: 1px; - margin-bottom: 0; - position: relative; } - .tabs.is-toggle a:hover { - background-color: whitesmoke; - border-color: #b5b5b5; - z-index: 2; } - .tabs.is-toggle li + li { - margin-left: -1px; } - .tabs.is-toggle li:first-child a { - border-radius: 4px 0 0 4px; } - .tabs.is-toggle li:last-child a { - border-radius: 0 4px 4px 0; } - .tabs.is-toggle li.is-active a { - background-color: #2e63b8; - border-color: #2e63b8; - color: #fff; - z-index: 1; } - .tabs.is-toggle ul { - border-bottom: none; } - .tabs.is-toggle.is-toggle-rounded li:first-child a { - border-bottom-left-radius: 290486px; - border-top-left-radius: 290486px; - padding-left: 1.25em; } - .tabs.is-toggle.is-toggle-rounded li:last-child a { - border-bottom-right-radius: 290486px; - border-top-right-radius: 290486px; - padding-right: 1.25em; } - .tabs.is-small, #documenter .docs-sidebar form.docs-search > input.tabs { - font-size: 0.75rem; } - .tabs.is-medium { - font-size: 1.25rem; } - .tabs.is-large { - font-size: 1.5rem; } - -.column { - display: block; - flex-basis: 0; - flex-grow: 1; - flex-shrink: 1; - padding: 0.75rem; } - .columns.is-mobile > .column.is-narrow { - flex: none; } - .columns.is-mobile > .column.is-full { - flex: none; - width: 100%; } - .columns.is-mobile > .column.is-three-quarters { - flex: none; - width: 75%; } - .columns.is-mobile > .column.is-two-thirds { - flex: none; - width: 66.6666%; } - .columns.is-mobile > .column.is-half { - flex: none; - width: 50%; } - .columns.is-mobile > .column.is-one-third { - flex: none; - width: 33.3333%; } - .columns.is-mobile > .column.is-one-quarter { - flex: none; - width: 25%; } - .columns.is-mobile > .column.is-one-fifth { - flex: none; - width: 20%; } - .columns.is-mobile > .column.is-two-fifths { - flex: none; - width: 40%; } - .columns.is-mobile > .column.is-three-fifths { - flex: none; - width: 60%; } - .columns.is-mobile > .column.is-four-fifths { - flex: none; - width: 80%; } - .columns.is-mobile > .column.is-offset-three-quarters { - margin-left: 75%; } - .columns.is-mobile > .column.is-offset-two-thirds { - margin-left: 66.6666%; } - .columns.is-mobile > .column.is-offset-half { - margin-left: 50%; } - .columns.is-mobile > .column.is-offset-one-third { - margin-left: 33.3333%; } - .columns.is-mobile > .column.is-offset-one-quarter { - margin-left: 25%; } - .columns.is-mobile > .column.is-offset-one-fifth { - margin-left: 20%; } - .columns.is-mobile > .column.is-offset-two-fifths { - margin-left: 40%; } - .columns.is-mobile > .column.is-offset-three-fifths { - margin-left: 60%; } - .columns.is-mobile > .column.is-offset-four-fifths { - margin-left: 80%; } - .columns.is-mobile > .column.is-0 { - flex: none; - width: 0%; } - .columns.is-mobile > .column.is-offset-0 { - margin-left: 0%; } - .columns.is-mobile > .column.is-1 { - flex: none; - width: 8.33333%; } - .columns.is-mobile > .column.is-offset-1 { - margin-left: 8.33333%; } - .columns.is-mobile > .column.is-2 { - flex: none; - width: 16.66667%; } - .columns.is-mobile > .column.is-offset-2 { - margin-left: 16.66667%; } - .columns.is-mobile > .column.is-3 { - flex: none; - width: 25%; } - .columns.is-mobile > .column.is-offset-3 { - margin-left: 25%; } - .columns.is-mobile > .column.is-4 { - flex: none; - width: 33.33333%; } - .columns.is-mobile > .column.is-offset-4 { - margin-left: 33.33333%; } - .columns.is-mobile > .column.is-5 { - flex: none; - width: 41.66667%; } - .columns.is-mobile > .column.is-offset-5 { - margin-left: 41.66667%; } - .columns.is-mobile > .column.is-6 { - flex: none; - width: 50%; } - .columns.is-mobile > .column.is-offset-6 { - margin-left: 50%; } - .columns.is-mobile > .column.is-7 { - flex: none; - width: 58.33333%; } - .columns.is-mobile > .column.is-offset-7 { - margin-left: 58.33333%; } - .columns.is-mobile > .column.is-8 { - flex: none; - width: 66.66667%; } - .columns.is-mobile > .column.is-offset-8 { - margin-left: 66.66667%; } - .columns.is-mobile > .column.is-9 { - flex: none; - width: 75%; } - .columns.is-mobile > .column.is-offset-9 { - margin-left: 75%; } - .columns.is-mobile > .column.is-10 { - flex: none; - width: 83.33333%; } - .columns.is-mobile > .column.is-offset-10 { - margin-left: 83.33333%; } - .columns.is-mobile > .column.is-11 { - flex: none; - width: 91.66667%; } - .columns.is-mobile > .column.is-offset-11 { - margin-left: 91.66667%; } - .columns.is-mobile > .column.is-12 { - flex: none; - width: 100%; } - .columns.is-mobile > .column.is-offset-12 { - margin-left: 100%; } - @media screen and (max-width: 768px) { - .column.is-narrow-mobile { - flex: none; } - .column.is-full-mobile { - flex: none; - width: 100%; } - .column.is-three-quarters-mobile { - flex: none; - width: 75%; } - .column.is-two-thirds-mobile { - flex: none; - width: 66.6666%; } - .column.is-half-mobile { - flex: none; - width: 50%; } - .column.is-one-third-mobile { - flex: none; - width: 33.3333%; } - .column.is-one-quarter-mobile { - flex: none; - width: 25%; } - .column.is-one-fifth-mobile { - flex: none; - width: 20%; } - .column.is-two-fifths-mobile { - flex: none; - width: 40%; } - .column.is-three-fifths-mobile { - flex: none; - width: 60%; } - .column.is-four-fifths-mobile { - flex: none; - width: 80%; } - .column.is-offset-three-quarters-mobile { - margin-left: 75%; } - .column.is-offset-two-thirds-mobile { - margin-left: 66.6666%; } - .column.is-offset-half-mobile { - margin-left: 50%; } - .column.is-offset-one-third-mobile { - margin-left: 33.3333%; } - .column.is-offset-one-quarter-mobile { - margin-left: 25%; } - .column.is-offset-one-fifth-mobile { - margin-left: 20%; } - .column.is-offset-two-fifths-mobile { - margin-left: 40%; } - .column.is-offset-three-fifths-mobile { - margin-left: 60%; } - .column.is-offset-four-fifths-mobile { - margin-left: 80%; } - .column.is-0-mobile { - flex: none; - width: 0%; } - .column.is-offset-0-mobile { - margin-left: 0%; } - .column.is-1-mobile { - flex: none; - width: 8.33333%; } - .column.is-offset-1-mobile { - margin-left: 8.33333%; } - .column.is-2-mobile { - flex: none; - width: 16.66667%; } - .column.is-offset-2-mobile { - margin-left: 16.66667%; } - .column.is-3-mobile { - flex: none; - width: 25%; } - .column.is-offset-3-mobile { - margin-left: 25%; } - .column.is-4-mobile { - flex: none; - width: 33.33333%; } - .column.is-offset-4-mobile { - margin-left: 33.33333%; } - .column.is-5-mobile { - flex: none; - width: 41.66667%; } - .column.is-offset-5-mobile { - margin-left: 41.66667%; } - .column.is-6-mobile { - flex: none; - width: 50%; } - .column.is-offset-6-mobile { - margin-left: 50%; } - .column.is-7-mobile { - flex: none; - width: 58.33333%; } - .column.is-offset-7-mobile { - margin-left: 58.33333%; } - .column.is-8-mobile { - flex: none; - width: 66.66667%; } - .column.is-offset-8-mobile { - margin-left: 66.66667%; } - .column.is-9-mobile { - flex: none; - width: 75%; } - .column.is-offset-9-mobile { - margin-left: 75%; } - .column.is-10-mobile { - flex: none; - width: 83.33333%; } - .column.is-offset-10-mobile { - margin-left: 83.33333%; } - .column.is-11-mobile { - flex: none; - width: 91.66667%; } - .column.is-offset-11-mobile { - margin-left: 91.66667%; } - .column.is-12-mobile { - flex: none; - width: 100%; } - .column.is-offset-12-mobile { - margin-left: 100%; } } - @media screen and (min-width: 769px), print { - .column.is-narrow, .column.is-narrow-tablet { - flex: none; } - .column.is-full, .column.is-full-tablet { - flex: none; - width: 100%; } - .column.is-three-quarters, .column.is-three-quarters-tablet { - flex: none; - width: 75%; } - .column.is-two-thirds, .column.is-two-thirds-tablet { - flex: none; - width: 66.6666%; } - .column.is-half, .column.is-half-tablet { - flex: none; - width: 50%; } - .column.is-one-third, .column.is-one-third-tablet { - flex: none; - width: 33.3333%; } - .column.is-one-quarter, .column.is-one-quarter-tablet { - flex: none; - width: 25%; } - .column.is-one-fifth, .column.is-one-fifth-tablet { - flex: none; - width: 20%; } - .column.is-two-fifths, .column.is-two-fifths-tablet { - flex: none; - width: 40%; } - .column.is-three-fifths, .column.is-three-fifths-tablet { - flex: none; - width: 60%; } - .column.is-four-fifths, .column.is-four-fifths-tablet { - flex: none; - width: 80%; } - .column.is-offset-three-quarters, .column.is-offset-three-quarters-tablet { - margin-left: 75%; } - .column.is-offset-two-thirds, .column.is-offset-two-thirds-tablet { - margin-left: 66.6666%; } - .column.is-offset-half, .column.is-offset-half-tablet { - margin-left: 50%; } - .column.is-offset-one-third, .column.is-offset-one-third-tablet { - margin-left: 33.3333%; } - .column.is-offset-one-quarter, .column.is-offset-one-quarter-tablet { - margin-left: 25%; } - .column.is-offset-one-fifth, .column.is-offset-one-fifth-tablet { - margin-left: 20%; } - .column.is-offset-two-fifths, .column.is-offset-two-fifths-tablet { - margin-left: 40%; } - .column.is-offset-three-fifths, .column.is-offset-three-fifths-tablet { - margin-left: 60%; } - .column.is-offset-four-fifths, .column.is-offset-four-fifths-tablet { - margin-left: 80%; } - .column.is-0, .column.is-0-tablet { - flex: none; - width: 0%; } - .column.is-offset-0, .column.is-offset-0-tablet { - margin-left: 0%; } - .column.is-1, .column.is-1-tablet { - flex: none; - width: 8.33333%; } - .column.is-offset-1, .column.is-offset-1-tablet { - margin-left: 8.33333%; } - .column.is-2, .column.is-2-tablet { - flex: none; - width: 16.66667%; } - .column.is-offset-2, .column.is-offset-2-tablet { - margin-left: 16.66667%; } - .column.is-3, .column.is-3-tablet { - flex: none; - width: 25%; } - .column.is-offset-3, .column.is-offset-3-tablet { - margin-left: 25%; } - .column.is-4, .column.is-4-tablet { - flex: none; - width: 33.33333%; } - .column.is-offset-4, .column.is-offset-4-tablet { - margin-left: 33.33333%; } - .column.is-5, .column.is-5-tablet { - flex: none; - width: 41.66667%; } - .column.is-offset-5, .column.is-offset-5-tablet { - margin-left: 41.66667%; } - .column.is-6, .column.is-6-tablet { - flex: none; - width: 50%; } - .column.is-offset-6, .column.is-offset-6-tablet { - margin-left: 50%; } - .column.is-7, .column.is-7-tablet { - flex: none; - width: 58.33333%; } - .column.is-offset-7, .column.is-offset-7-tablet { - margin-left: 58.33333%; } - .column.is-8, .column.is-8-tablet { - flex: none; - width: 66.66667%; } - .column.is-offset-8, .column.is-offset-8-tablet { - margin-left: 66.66667%; } - .column.is-9, .column.is-9-tablet { - flex: none; - width: 75%; } - .column.is-offset-9, .column.is-offset-9-tablet { - margin-left: 75%; } - .column.is-10, .column.is-10-tablet { - flex: none; - width: 83.33333%; } - .column.is-offset-10, .column.is-offset-10-tablet { - margin-left: 83.33333%; } - .column.is-11, .column.is-11-tablet { - flex: none; - width: 91.66667%; } - .column.is-offset-11, .column.is-offset-11-tablet { - margin-left: 91.66667%; } - .column.is-12, .column.is-12-tablet { - flex: none; - width: 100%; } - .column.is-offset-12, .column.is-offset-12-tablet { - margin-left: 100%; } } - @media screen and (max-width: 1055px) { - .column.is-narrow-touch { - flex: none; } - .column.is-full-touch { - flex: none; - width: 100%; } - .column.is-three-quarters-touch { - flex: none; - width: 75%; } - .column.is-two-thirds-touch { - flex: none; - width: 66.6666%; } - .column.is-half-touch { - flex: none; - width: 50%; } - .column.is-one-third-touch { - flex: none; - width: 33.3333%; } - .column.is-one-quarter-touch { - flex: none; - width: 25%; } - .column.is-one-fifth-touch { - flex: none; - width: 20%; } - .column.is-two-fifths-touch { - flex: none; - width: 40%; } - .column.is-three-fifths-touch { - flex: none; - width: 60%; } - .column.is-four-fifths-touch { - flex: none; - width: 80%; } - .column.is-offset-three-quarters-touch { - margin-left: 75%; } - .column.is-offset-two-thirds-touch { - margin-left: 66.6666%; } - .column.is-offset-half-touch { - margin-left: 50%; } - .column.is-offset-one-third-touch { - margin-left: 33.3333%; } - .column.is-offset-one-quarter-touch { - margin-left: 25%; } - .column.is-offset-one-fifth-touch { - margin-left: 20%; } - .column.is-offset-two-fifths-touch { - margin-left: 40%; } - .column.is-offset-three-fifths-touch { - margin-left: 60%; } - .column.is-offset-four-fifths-touch { - margin-left: 80%; } - .column.is-0-touch { - flex: none; - width: 0%; } - .column.is-offset-0-touch { - margin-left: 0%; } - .column.is-1-touch { - flex: none; - width: 8.33333%; } - .column.is-offset-1-touch { - margin-left: 8.33333%; } - .column.is-2-touch { - flex: none; - width: 16.66667%; } - .column.is-offset-2-touch { - margin-left: 16.66667%; } - .column.is-3-touch { - flex: none; - width: 25%; } - .column.is-offset-3-touch { - margin-left: 25%; } - .column.is-4-touch { - flex: none; - width: 33.33333%; } - .column.is-offset-4-touch { - margin-left: 33.33333%; } - .column.is-5-touch { - flex: none; - width: 41.66667%; } - .column.is-offset-5-touch { - margin-left: 41.66667%; } - .column.is-6-touch { - flex: none; - width: 50%; } - .column.is-offset-6-touch { - margin-left: 50%; } - .column.is-7-touch { - flex: none; - width: 58.33333%; } - .column.is-offset-7-touch { - margin-left: 58.33333%; } - .column.is-8-touch { - flex: none; - width: 66.66667%; } - .column.is-offset-8-touch { - margin-left: 66.66667%; } - .column.is-9-touch { - flex: none; - width: 75%; } - .column.is-offset-9-touch { - margin-left: 75%; } - .column.is-10-touch { - flex: none; - width: 83.33333%; } - .column.is-offset-10-touch { - margin-left: 83.33333%; } - .column.is-11-touch { - flex: none; - width: 91.66667%; } - .column.is-offset-11-touch { - margin-left: 91.66667%; } - .column.is-12-touch { - flex: none; - width: 100%; } - .column.is-offset-12-touch { - margin-left: 100%; } } - @media screen and (min-width: 1056px) { - .column.is-narrow-desktop { - flex: none; } - .column.is-full-desktop { - flex: none; - width: 100%; } - .column.is-three-quarters-desktop { - flex: none; - width: 75%; } - .column.is-two-thirds-desktop { - flex: none; - width: 66.6666%; } - .column.is-half-desktop { - flex: none; - width: 50%; } - .column.is-one-third-desktop { - flex: none; - width: 33.3333%; } - .column.is-one-quarter-desktop { - flex: none; - width: 25%; } - .column.is-one-fifth-desktop { - flex: none; - width: 20%; } - .column.is-two-fifths-desktop { - flex: none; - width: 40%; } - .column.is-three-fifths-desktop { - flex: none; - width: 60%; } - .column.is-four-fifths-desktop { - flex: none; - width: 80%; } - .column.is-offset-three-quarters-desktop { - margin-left: 75%; } - .column.is-offset-two-thirds-desktop { - margin-left: 66.6666%; } - .column.is-offset-half-desktop { - margin-left: 50%; } - .column.is-offset-one-third-desktop { - margin-left: 33.3333%; } - .column.is-offset-one-quarter-desktop { - margin-left: 25%; } - .column.is-offset-one-fifth-desktop { - margin-left: 20%; } - .column.is-offset-two-fifths-desktop { - margin-left: 40%; } - .column.is-offset-three-fifths-desktop { - margin-left: 60%; } - .column.is-offset-four-fifths-desktop { - margin-left: 80%; } - .column.is-0-desktop { - flex: none; - width: 0%; } - .column.is-offset-0-desktop { - margin-left: 0%; } - .column.is-1-desktop { - flex: none; - width: 8.33333%; } - .column.is-offset-1-desktop { - margin-left: 8.33333%; } - .column.is-2-desktop { - flex: none; - width: 16.66667%; } - .column.is-offset-2-desktop { - margin-left: 16.66667%; } - .column.is-3-desktop { - flex: none; - width: 25%; } - .column.is-offset-3-desktop { - margin-left: 25%; } - .column.is-4-desktop { - flex: none; - width: 33.33333%; } - .column.is-offset-4-desktop { - margin-left: 33.33333%; } - .column.is-5-desktop { - flex: none; - width: 41.66667%; } - .column.is-offset-5-desktop { - margin-left: 41.66667%; } - .column.is-6-desktop { - flex: none; - width: 50%; } - .column.is-offset-6-desktop { - margin-left: 50%; } - .column.is-7-desktop { - flex: none; - width: 58.33333%; } - .column.is-offset-7-desktop { - margin-left: 58.33333%; } - .column.is-8-desktop { - flex: none; - width: 66.66667%; } - .column.is-offset-8-desktop { - margin-left: 66.66667%; } - .column.is-9-desktop { - flex: none; - width: 75%; } - .column.is-offset-9-desktop { - margin-left: 75%; } - .column.is-10-desktop { - flex: none; - width: 83.33333%; } - .column.is-offset-10-desktop { - margin-left: 83.33333%; } - .column.is-11-desktop { - flex: none; - width: 91.66667%; } - .column.is-offset-11-desktop { - margin-left: 91.66667%; } - .column.is-12-desktop { - flex: none; - width: 100%; } - .column.is-offset-12-desktop { - margin-left: 100%; } } - @media screen and (min-width: 1216px) { - .column.is-narrow-widescreen { - flex: none; } - .column.is-full-widescreen { - flex: none; - width: 100%; } - .column.is-three-quarters-widescreen { - flex: none; - width: 75%; } - .column.is-two-thirds-widescreen { - flex: none; - width: 66.6666%; } - .column.is-half-widescreen { - flex: none; - width: 50%; } - .column.is-one-third-widescreen { - flex: none; - width: 33.3333%; } - .column.is-one-quarter-widescreen { - flex: none; - width: 25%; } - .column.is-one-fifth-widescreen { - flex: none; - width: 20%; } - .column.is-two-fifths-widescreen { - flex: none; - width: 40%; } - .column.is-three-fifths-widescreen { - flex: none; - width: 60%; } - .column.is-four-fifths-widescreen { - flex: none; - width: 80%; } - .column.is-offset-three-quarters-widescreen { - margin-left: 75%; } - .column.is-offset-two-thirds-widescreen { - margin-left: 66.6666%; } - .column.is-offset-half-widescreen { - margin-left: 50%; } - .column.is-offset-one-third-widescreen { - margin-left: 33.3333%; } - .column.is-offset-one-quarter-widescreen { - margin-left: 25%; } - .column.is-offset-one-fifth-widescreen { - margin-left: 20%; } - .column.is-offset-two-fifths-widescreen { - margin-left: 40%; } - .column.is-offset-three-fifths-widescreen { - margin-left: 60%; } - .column.is-offset-four-fifths-widescreen { - margin-left: 80%; } - .column.is-0-widescreen { - flex: none; - width: 0%; } - .column.is-offset-0-widescreen { - margin-left: 0%; } - .column.is-1-widescreen { - flex: none; - width: 8.33333%; } - .column.is-offset-1-widescreen { - margin-left: 8.33333%; } - .column.is-2-widescreen { - flex: none; - width: 16.66667%; } - .column.is-offset-2-widescreen { - margin-left: 16.66667%; } - .column.is-3-widescreen { - flex: none; - width: 25%; } - .column.is-offset-3-widescreen { - margin-left: 25%; } - .column.is-4-widescreen { - flex: none; - width: 33.33333%; } - .column.is-offset-4-widescreen { - margin-left: 33.33333%; } - .column.is-5-widescreen { - flex: none; - width: 41.66667%; } - .column.is-offset-5-widescreen { - margin-left: 41.66667%; } - .column.is-6-widescreen { - flex: none; - width: 50%; } - .column.is-offset-6-widescreen { - margin-left: 50%; } - .column.is-7-widescreen { - flex: none; - width: 58.33333%; } - .column.is-offset-7-widescreen { - margin-left: 58.33333%; } - .column.is-8-widescreen { - flex: none; - width: 66.66667%; } - .column.is-offset-8-widescreen { - margin-left: 66.66667%; } - .column.is-9-widescreen { - flex: none; - width: 75%; } - .column.is-offset-9-widescreen { - margin-left: 75%; } - .column.is-10-widescreen { - flex: none; - width: 83.33333%; } - .column.is-offset-10-widescreen { - margin-left: 83.33333%; } - .column.is-11-widescreen { - flex: none; - width: 91.66667%; } - .column.is-offset-11-widescreen { - margin-left: 91.66667%; } - .column.is-12-widescreen { - flex: none; - width: 100%; } - .column.is-offset-12-widescreen { - margin-left: 100%; } } - @media screen and (min-width: 1408px) { - .column.is-narrow-fullhd { - flex: none; } - .column.is-full-fullhd { - flex: none; - width: 100%; } - .column.is-three-quarters-fullhd { - flex: none; - width: 75%; } - .column.is-two-thirds-fullhd { - flex: none; - width: 66.6666%; } - .column.is-half-fullhd { - flex: none; - width: 50%; } - .column.is-one-third-fullhd { - flex: none; - width: 33.3333%; } - .column.is-one-quarter-fullhd { - flex: none; - width: 25%; } - .column.is-one-fifth-fullhd { - flex: none; - width: 20%; } - .column.is-two-fifths-fullhd { - flex: none; - width: 40%; } - .column.is-three-fifths-fullhd { - flex: none; - width: 60%; } - .column.is-four-fifths-fullhd { - flex: none; - width: 80%; } - .column.is-offset-three-quarters-fullhd { - margin-left: 75%; } - .column.is-offset-two-thirds-fullhd { - margin-left: 66.6666%; } - .column.is-offset-half-fullhd { - margin-left: 50%; } - .column.is-offset-one-third-fullhd { - margin-left: 33.3333%; } - .column.is-offset-one-quarter-fullhd { - margin-left: 25%; } - .column.is-offset-one-fifth-fullhd { - margin-left: 20%; } - .column.is-offset-two-fifths-fullhd { - margin-left: 40%; } - .column.is-offset-three-fifths-fullhd { - margin-left: 60%; } - .column.is-offset-four-fifths-fullhd { - margin-left: 80%; } - .column.is-0-fullhd { - flex: none; - width: 0%; } - .column.is-offset-0-fullhd { - margin-left: 0%; } - .column.is-1-fullhd { - flex: none; - width: 8.33333%; } - .column.is-offset-1-fullhd { - margin-left: 8.33333%; } - .column.is-2-fullhd { - flex: none; - width: 16.66667%; } - .column.is-offset-2-fullhd { - margin-left: 16.66667%; } - .column.is-3-fullhd { - flex: none; - width: 25%; } - .column.is-offset-3-fullhd { - margin-left: 25%; } - .column.is-4-fullhd { - flex: none; - width: 33.33333%; } - .column.is-offset-4-fullhd { - margin-left: 33.33333%; } - .column.is-5-fullhd { - flex: none; - width: 41.66667%; } - .column.is-offset-5-fullhd { - margin-left: 41.66667%; } - .column.is-6-fullhd { - flex: none; - width: 50%; } - .column.is-offset-6-fullhd { - margin-left: 50%; } - .column.is-7-fullhd { - flex: none; - width: 58.33333%; } - .column.is-offset-7-fullhd { - margin-left: 58.33333%; } - .column.is-8-fullhd { - flex: none; - width: 66.66667%; } - .column.is-offset-8-fullhd { - margin-left: 66.66667%; } - .column.is-9-fullhd { - flex: none; - width: 75%; } - .column.is-offset-9-fullhd { - margin-left: 75%; } - .column.is-10-fullhd { - flex: none; - width: 83.33333%; } - .column.is-offset-10-fullhd { - margin-left: 83.33333%; } - .column.is-11-fullhd { - flex: none; - width: 91.66667%; } - .column.is-offset-11-fullhd { - margin-left: 91.66667%; } - .column.is-12-fullhd { - flex: none; - width: 100%; } - .column.is-offset-12-fullhd { - margin-left: 100%; } } - -.columns { - margin-left: -0.75rem; - margin-right: -0.75rem; - margin-top: -0.75rem; } - .columns:last-child { - margin-bottom: -0.75rem; } - .columns:not(:last-child) { - margin-bottom: calc(1.5rem - 0.75rem); } - .columns.is-centered { - justify-content: center; } - .columns.is-gapless { - margin-left: 0; - margin-right: 0; - margin-top: 0; } - .columns.is-gapless > .column { - margin: 0; - padding: 0 !important; } - .columns.is-gapless:not(:last-child) { - margin-bottom: 1.5rem; } - .columns.is-gapless:last-child { - margin-bottom: 0; } - .columns.is-mobile { - display: flex; } - .columns.is-multiline { - flex-wrap: wrap; } - .columns.is-vcentered { - align-items: center; } - @media screen and (min-width: 769px), print { - .columns:not(.is-desktop) { - display: flex; } } - @media screen and (min-width: 1056px) { - .columns.is-desktop { - display: flex; } } - -.columns.is-variable { - --columnGap: 0.75rem; - margin-left: calc(-1 * var(--columnGap)); - margin-right: calc(-1 * var(--columnGap)); } - .columns.is-variable .column { - padding-left: var(--columnGap); - padding-right: var(--columnGap); } - .columns.is-variable.is-0 { - --columnGap: 0rem; } - @media screen and (max-width: 768px) { - .columns.is-variable.is-0-mobile { - --columnGap: 0rem; } } - @media screen and (min-width: 769px), print { - .columns.is-variable.is-0-tablet { - --columnGap: 0rem; } } - @media screen and (min-width: 769px) and (max-width: 1055px) { - .columns.is-variable.is-0-tablet-only { - --columnGap: 0rem; } } - @media screen and (max-width: 1055px) { - .columns.is-variable.is-0-touch { - --columnGap: 0rem; } } - @media screen and (min-width: 1056px) { - .columns.is-variable.is-0-desktop { - --columnGap: 0rem; } } - @media screen and (min-width: 1056px) and (max-width: 1215px) { - .columns.is-variable.is-0-desktop-only { - --columnGap: 0rem; } } - @media screen and (min-width: 1216px) { - .columns.is-variable.is-0-widescreen { - --columnGap: 0rem; } } - @media screen and (min-width: 1216px) and (max-width: 1407px) { - .columns.is-variable.is-0-widescreen-only { - --columnGap: 0rem; } } - @media screen and (min-width: 1408px) { - .columns.is-variable.is-0-fullhd { - --columnGap: 0rem; } } - .columns.is-variable.is-1 { - --columnGap: 0.25rem; } - @media screen and (max-width: 768px) { - .columns.is-variable.is-1-mobile { - --columnGap: 0.25rem; } } - @media screen and (min-width: 769px), print { - .columns.is-variable.is-1-tablet { - --columnGap: 0.25rem; } } - @media screen and (min-width: 769px) and (max-width: 1055px) { - .columns.is-variable.is-1-tablet-only { - --columnGap: 0.25rem; } } - @media screen and (max-width: 1055px) { - .columns.is-variable.is-1-touch { - --columnGap: 0.25rem; } } - @media screen and (min-width: 1056px) { - .columns.is-variable.is-1-desktop { - --columnGap: 0.25rem; } } - @media screen and (min-width: 1056px) and (max-width: 1215px) { - .columns.is-variable.is-1-desktop-only { - --columnGap: 0.25rem; } } - @media screen and (min-width: 1216px) { - .columns.is-variable.is-1-widescreen { - --columnGap: 0.25rem; } } - @media screen and (min-width: 1216px) and (max-width: 1407px) { - .columns.is-variable.is-1-widescreen-only { - --columnGap: 0.25rem; } } - @media screen and (min-width: 1408px) { - .columns.is-variable.is-1-fullhd { - --columnGap: 0.25rem; } } - .columns.is-variable.is-2 { - --columnGap: 0.5rem; } - @media screen and (max-width: 768px) { - .columns.is-variable.is-2-mobile { - --columnGap: 0.5rem; } } - @media screen and (min-width: 769px), print { - .columns.is-variable.is-2-tablet { - --columnGap: 0.5rem; } } - @media screen and (min-width: 769px) and (max-width: 1055px) { - .columns.is-variable.is-2-tablet-only { - --columnGap: 0.5rem; } } - @media screen and (max-width: 1055px) { - .columns.is-variable.is-2-touch { - --columnGap: 0.5rem; } } - @media screen and (min-width: 1056px) { - .columns.is-variable.is-2-desktop { - --columnGap: 0.5rem; } } - @media screen and (min-width: 1056px) and (max-width: 1215px) { - .columns.is-variable.is-2-desktop-only { - --columnGap: 0.5rem; } } - @media screen and (min-width: 1216px) { - .columns.is-variable.is-2-widescreen { - --columnGap: 0.5rem; } } - @media screen and (min-width: 1216px) and (max-width: 1407px) { - .columns.is-variable.is-2-widescreen-only { - --columnGap: 0.5rem; } } - @media screen and (min-width: 1408px) { - .columns.is-variable.is-2-fullhd { - --columnGap: 0.5rem; } } - .columns.is-variable.is-3 { - --columnGap: 0.75rem; } - @media screen and (max-width: 768px) { - .columns.is-variable.is-3-mobile { - --columnGap: 0.75rem; } } - @media screen and (min-width: 769px), print { - .columns.is-variable.is-3-tablet { - --columnGap: 0.75rem; } } - @media screen and (min-width: 769px) and (max-width: 1055px) { - .columns.is-variable.is-3-tablet-only { - --columnGap: 0.75rem; } } - @media screen and (max-width: 1055px) { - .columns.is-variable.is-3-touch { - --columnGap: 0.75rem; } } - @media screen and (min-width: 1056px) { - .columns.is-variable.is-3-desktop { - --columnGap: 0.75rem; } } - @media screen and (min-width: 1056px) and (max-width: 1215px) { - .columns.is-variable.is-3-desktop-only { - --columnGap: 0.75rem; } } - @media screen and (min-width: 1216px) { - .columns.is-variable.is-3-widescreen { - --columnGap: 0.75rem; } } - @media screen and (min-width: 1216px) and (max-width: 1407px) { - .columns.is-variable.is-3-widescreen-only { - --columnGap: 0.75rem; } } - @media screen and (min-width: 1408px) { - .columns.is-variable.is-3-fullhd { - --columnGap: 0.75rem; } } - .columns.is-variable.is-4 { - --columnGap: 1rem; } - @media screen and (max-width: 768px) { - .columns.is-variable.is-4-mobile { - --columnGap: 1rem; } } - @media screen and (min-width: 769px), print { - .columns.is-variable.is-4-tablet { - --columnGap: 1rem; } } - @media screen and (min-width: 769px) and (max-width: 1055px) { - .columns.is-variable.is-4-tablet-only { - --columnGap: 1rem; } } - @media screen and (max-width: 1055px) { - .columns.is-variable.is-4-touch { - --columnGap: 1rem; } } - @media screen and (min-width: 1056px) { - .columns.is-variable.is-4-desktop { - --columnGap: 1rem; } } - @media screen and (min-width: 1056px) and (max-width: 1215px) { - .columns.is-variable.is-4-desktop-only { - --columnGap: 1rem; } } - @media screen and (min-width: 1216px) { - .columns.is-variable.is-4-widescreen { - --columnGap: 1rem; } } - @media screen and (min-width: 1216px) and (max-width: 1407px) { - .columns.is-variable.is-4-widescreen-only { - --columnGap: 1rem; } } - @media screen and (min-width: 1408px) { - .columns.is-variable.is-4-fullhd { - --columnGap: 1rem; } } - .columns.is-variable.is-5 { - --columnGap: 1.25rem; } - @media screen and (max-width: 768px) { - .columns.is-variable.is-5-mobile { - --columnGap: 1.25rem; } } - @media screen and (min-width: 769px), print { - .columns.is-variable.is-5-tablet { - --columnGap: 1.25rem; } } - @media screen and (min-width: 769px) and (max-width: 1055px) { - .columns.is-variable.is-5-tablet-only { - --columnGap: 1.25rem; } } - @media screen and (max-width: 1055px) { - .columns.is-variable.is-5-touch { - --columnGap: 1.25rem; } } - @media screen and (min-width: 1056px) { - .columns.is-variable.is-5-desktop { - --columnGap: 1.25rem; } } - @media screen and (min-width: 1056px) and (max-width: 1215px) { - .columns.is-variable.is-5-desktop-only { - --columnGap: 1.25rem; } } - @media screen and (min-width: 1216px) { - .columns.is-variable.is-5-widescreen { - --columnGap: 1.25rem; } } - @media screen and (min-width: 1216px) and (max-width: 1407px) { - .columns.is-variable.is-5-widescreen-only { - --columnGap: 1.25rem; } } - @media screen and (min-width: 1408px) { - .columns.is-variable.is-5-fullhd { - --columnGap: 1.25rem; } } - .columns.is-variable.is-6 { - --columnGap: 1.5rem; } - @media screen and (max-width: 768px) { - .columns.is-variable.is-6-mobile { - --columnGap: 1.5rem; } } - @media screen and (min-width: 769px), print { - .columns.is-variable.is-6-tablet { - --columnGap: 1.5rem; } } - @media screen and (min-width: 769px) and (max-width: 1055px) { - .columns.is-variable.is-6-tablet-only { - --columnGap: 1.5rem; } } - @media screen and (max-width: 1055px) { - .columns.is-variable.is-6-touch { - --columnGap: 1.5rem; } } - @media screen and (min-width: 1056px) { - .columns.is-variable.is-6-desktop { - --columnGap: 1.5rem; } } - @media screen and (min-width: 1056px) and (max-width: 1215px) { - .columns.is-variable.is-6-desktop-only { - --columnGap: 1.5rem; } } - @media screen and (min-width: 1216px) { - .columns.is-variable.is-6-widescreen { - --columnGap: 1.5rem; } } - @media screen and (min-width: 1216px) and (max-width: 1407px) { - .columns.is-variable.is-6-widescreen-only { - --columnGap: 1.5rem; } } - @media screen and (min-width: 1408px) { - .columns.is-variable.is-6-fullhd { - --columnGap: 1.5rem; } } - .columns.is-variable.is-7 { - --columnGap: 1.75rem; } - @media screen and (max-width: 768px) { - .columns.is-variable.is-7-mobile { - --columnGap: 1.75rem; } } - @media screen and (min-width: 769px), print { - .columns.is-variable.is-7-tablet { - --columnGap: 1.75rem; } } - @media screen and (min-width: 769px) and (max-width: 1055px) { - .columns.is-variable.is-7-tablet-only { - --columnGap: 1.75rem; } } - @media screen and (max-width: 1055px) { - .columns.is-variable.is-7-touch { - --columnGap: 1.75rem; } } - @media screen and (min-width: 1056px) { - .columns.is-variable.is-7-desktop { - --columnGap: 1.75rem; } } - @media screen and (min-width: 1056px) and (max-width: 1215px) { - .columns.is-variable.is-7-desktop-only { - --columnGap: 1.75rem; } } - @media screen and (min-width: 1216px) { - .columns.is-variable.is-7-widescreen { - --columnGap: 1.75rem; } } - @media screen and (min-width: 1216px) and (max-width: 1407px) { - .columns.is-variable.is-7-widescreen-only { - --columnGap: 1.75rem; } } - @media screen and (min-width: 1408px) { - .columns.is-variable.is-7-fullhd { - --columnGap: 1.75rem; } } - .columns.is-variable.is-8 { - --columnGap: 2rem; } - @media screen and (max-width: 768px) { - .columns.is-variable.is-8-mobile { - --columnGap: 2rem; } } - @media screen and (min-width: 769px), print { - .columns.is-variable.is-8-tablet { - --columnGap: 2rem; } } - @media screen and (min-width: 769px) and (max-width: 1055px) { - .columns.is-variable.is-8-tablet-only { - --columnGap: 2rem; } } - @media screen and (max-width: 1055px) { - .columns.is-variable.is-8-touch { - --columnGap: 2rem; } } - @media screen and (min-width: 1056px) { - .columns.is-variable.is-8-desktop { - --columnGap: 2rem; } } - @media screen and (min-width: 1056px) and (max-width: 1215px) { - .columns.is-variable.is-8-desktop-only { - --columnGap: 2rem; } } - @media screen and (min-width: 1216px) { - .columns.is-variable.is-8-widescreen { - --columnGap: 2rem; } } - @media screen and (min-width: 1216px) and (max-width: 1407px) { - .columns.is-variable.is-8-widescreen-only { - --columnGap: 2rem; } } - @media screen and (min-width: 1408px) { - .columns.is-variable.is-8-fullhd { - --columnGap: 2rem; } } - -.tile { - align-items: stretch; - display: block; - flex-basis: 0; - flex-grow: 1; - flex-shrink: 1; - min-height: min-content; } - .tile.is-ancestor { - margin-left: -0.75rem; - margin-right: -0.75rem; - margin-top: -0.75rem; } - .tile.is-ancestor:last-child { - margin-bottom: -0.75rem; } - .tile.is-ancestor:not(:last-child) { - margin-bottom: 0.75rem; } - .tile.is-child { - margin: 0 !important; } - .tile.is-parent { - padding: 0.75rem; } - .tile.is-vertical { - flex-direction: column; } - .tile.is-vertical > .tile.is-child:not(:last-child) { - margin-bottom: 1.5rem !important; } - @media screen and (min-width: 769px), print { - .tile:not(.is-child) { - display: flex; } - .tile.is-1 { - flex: none; - width: 8.33333%; } - .tile.is-2 { - flex: none; - width: 16.66667%; } - .tile.is-3 { - flex: none; - width: 25%; } - .tile.is-4 { - flex: none; - width: 33.33333%; } - .tile.is-5 { - flex: none; - width: 41.66667%; } - .tile.is-6 { - flex: none; - width: 50%; } - .tile.is-7 { - flex: none; - width: 58.33333%; } - .tile.is-8 { - flex: none; - width: 66.66667%; } - .tile.is-9 { - flex: none; - width: 75%; } - .tile.is-10 { - flex: none; - width: 83.33333%; } - .tile.is-11 { - flex: none; - width: 91.66667%; } - .tile.is-12 { - flex: none; - width: 100%; } } - -.hero { - align-items: stretch; - display: flex; - flex-direction: column; - justify-content: space-between; } - .hero .navbar { - background: none; } - .hero .tabs ul { - border-bottom: none; } - .hero.is-white { - background-color: white; - color: #0a0a0a; } - .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), - .hero.is-white strong { - color: inherit; } - .hero.is-white .title { - color: #0a0a0a; } - .hero.is-white .subtitle { - color: rgba(10, 10, 10, 0.9); } - .hero.is-white .subtitle a:not(.button), - .hero.is-white .subtitle strong { - color: #0a0a0a; } - @media screen and (max-width: 1055px) { - .hero.is-white .navbar-menu { - background-color: white; } } - .hero.is-white .navbar-item, - .hero.is-white .navbar-link { - color: rgba(10, 10, 10, 0.7); } - .hero.is-white a.navbar-item:hover, .hero.is-white a.navbar-item.is-active, - .hero.is-white .navbar-link:hover, - .hero.is-white .navbar-link.is-active { - background-color: #f2f2f2; - color: #0a0a0a; } - .hero.is-white .tabs a { - color: #0a0a0a; - opacity: 0.9; } - .hero.is-white .tabs a:hover { - opacity: 1; } - .hero.is-white .tabs li.is-active a { - opacity: 1; } - .hero.is-white .tabs.is-boxed a, .hero.is-white .tabs.is-toggle a { - color: #0a0a0a; } - .hero.is-white .tabs.is-boxed a:hover, .hero.is-white .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); } - .hero.is-white .tabs.is-boxed li.is-active a, .hero.is-white .tabs.is-boxed li.is-active a:hover, .hero.is-white .tabs.is-toggle li.is-active a, .hero.is-white .tabs.is-toggle li.is-active a:hover { - background-color: #0a0a0a; - border-color: #0a0a0a; - color: white; } - .hero.is-white.is-bold { - background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); } - @media screen and (max-width: 768px) { - .hero.is-white.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); } } - .hero.is-black { - background-color: #0a0a0a; - color: white; } - .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), - .hero.is-black strong { - color: inherit; } - .hero.is-black .title { - color: white; } - .hero.is-black .subtitle { - color: rgba(255, 255, 255, 0.9); } - .hero.is-black .subtitle a:not(.button), - .hero.is-black .subtitle strong { - color: white; } - @media screen and (max-width: 1055px) { - .hero.is-black .navbar-menu { - background-color: #0a0a0a; } } - .hero.is-black .navbar-item, - .hero.is-black .navbar-link { - color: rgba(255, 255, 255, 0.7); } - .hero.is-black a.navbar-item:hover, .hero.is-black a.navbar-item.is-active, - .hero.is-black .navbar-link:hover, - .hero.is-black .navbar-link.is-active { - background-color: black; - color: white; } - .hero.is-black .tabs a { - color: white; - opacity: 0.9; } - .hero.is-black .tabs a:hover { - opacity: 1; } - .hero.is-black .tabs li.is-active a { - opacity: 1; } - .hero.is-black .tabs.is-boxed a, .hero.is-black .tabs.is-toggle a { - color: white; } - .hero.is-black .tabs.is-boxed a:hover, .hero.is-black .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); } - .hero.is-black .tabs.is-boxed li.is-active a, .hero.is-black .tabs.is-boxed li.is-active a:hover, .hero.is-black .tabs.is-toggle li.is-active a, .hero.is-black .tabs.is-toggle li.is-active a:hover { - background-color: white; - border-color: white; - color: #0a0a0a; } - .hero.is-black.is-bold { - background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); } - @media screen and (max-width: 768px) { - .hero.is-black.is-bold .navbar-menu { - background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); } } - .hero.is-light { - background-color: whitesmoke; - color: #363636; } - .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), - .hero.is-light strong { - color: inherit; } - .hero.is-light .title { - color: #363636; } - .hero.is-light .subtitle { - color: rgba(54, 54, 54, 0.9); } - .hero.is-light .subtitle a:not(.button), - .hero.is-light .subtitle strong { - color: #363636; } - @media screen and (max-width: 1055px) { - .hero.is-light .navbar-menu { - background-color: whitesmoke; } } - .hero.is-light .navbar-item, - .hero.is-light .navbar-link { - color: rgba(54, 54, 54, 0.7); } - .hero.is-light a.navbar-item:hover, .hero.is-light a.navbar-item.is-active, - .hero.is-light .navbar-link:hover, - .hero.is-light .navbar-link.is-active { - background-color: #e8e8e8; - color: #363636; } - .hero.is-light .tabs a { - color: #363636; - opacity: 0.9; } - .hero.is-light .tabs a:hover { - opacity: 1; } - .hero.is-light .tabs li.is-active a { - opacity: 1; } - .hero.is-light .tabs.is-boxed a, .hero.is-light .tabs.is-toggle a { - color: #363636; } - .hero.is-light .tabs.is-boxed a:hover, .hero.is-light .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); } - .hero.is-light .tabs.is-boxed li.is-active a, .hero.is-light .tabs.is-boxed li.is-active a:hover, .hero.is-light .tabs.is-toggle li.is-active a, .hero.is-light .tabs.is-toggle li.is-active a:hover { - background-color: #363636; - border-color: #363636; - color: whitesmoke; } - .hero.is-light.is-bold { - background-image: linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%); } - @media screen and (max-width: 768px) { - .hero.is-light.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%); } } - .hero.is-dark, .content kbd.hero { - background-color: #363636; - color: whitesmoke; } - .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), - .hero.is-dark strong, - .content kbd.hero strong { - color: inherit; } - .hero.is-dark .title, .content kbd.hero .title { - color: whitesmoke; } - .hero.is-dark .subtitle, .content kbd.hero .subtitle { - color: rgba(245, 245, 245, 0.9); } - .hero.is-dark .subtitle a:not(.button), .content kbd.hero .subtitle a:not(.button), - .hero.is-dark .subtitle strong, - .content kbd.hero .subtitle strong { - color: whitesmoke; } - @media screen and (max-width: 1055px) { - .hero.is-dark .navbar-menu, .content kbd.hero .navbar-menu { - background-color: #363636; } } - .hero.is-dark .navbar-item, .content kbd.hero .navbar-item, - .hero.is-dark .navbar-link, - .content kbd.hero .navbar-link { - color: rgba(245, 245, 245, 0.7); } - .hero.is-dark a.navbar-item:hover, .content kbd.hero a.navbar-item:hover, .hero.is-dark a.navbar-item.is-active, .content kbd.hero a.navbar-item.is-active, - .hero.is-dark .navbar-link:hover, - .content kbd.hero .navbar-link:hover, - .hero.is-dark .navbar-link.is-active, - .content kbd.hero .navbar-link.is-active { - background-color: #292929; - color: whitesmoke; } - .hero.is-dark .tabs a, .content kbd.hero .tabs a { - color: whitesmoke; - opacity: 0.9; } - .hero.is-dark .tabs a:hover, .content kbd.hero .tabs a:hover { - opacity: 1; } - .hero.is-dark .tabs li.is-active a, .content kbd.hero .tabs li.is-active a { - opacity: 1; } - .hero.is-dark .tabs.is-boxed a, .content kbd.hero .tabs.is-boxed a, .hero.is-dark .tabs.is-toggle a, .content kbd.hero .tabs.is-toggle a { - color: whitesmoke; } - .hero.is-dark .tabs.is-boxed a:hover, .content kbd.hero .tabs.is-boxed a:hover, .hero.is-dark .tabs.is-toggle a:hover, .content kbd.hero .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); } - .hero.is-dark .tabs.is-boxed li.is-active a, .content kbd.hero .tabs.is-boxed li.is-active a, .hero.is-dark .tabs.is-boxed li.is-active a:hover, .content kbd.hero .tabs.is-boxed li.is-active a:hover, .hero.is-dark .tabs.is-toggle li.is-active a, .content kbd.hero .tabs.is-toggle li.is-active a, .hero.is-dark .tabs.is-toggle li.is-active a:hover, .content kbd.hero .tabs.is-toggle li.is-active a:hover { - background-color: whitesmoke; - border-color: whitesmoke; - color: #363636; } - .hero.is-dark.is-bold, .content kbd.hero.is-bold { - background-image: linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%); } - @media screen and (max-width: 768px) { - .hero.is-dark.is-bold .navbar-menu, .content kbd.hero.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%); } } - .hero.is-primary, .docstring > section > a.hero.docs-sourcelink { - background-color: #4eb5de; - color: #fff; } - .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), .docstring > section > a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), - .hero.is-primary strong, - .docstring > section > a.hero.docs-sourcelink strong { - color: inherit; } - .hero.is-primary .title, .docstring > section > a.hero.docs-sourcelink .title { - color: #fff; } - .hero.is-primary .subtitle, .docstring > section > a.hero.docs-sourcelink .subtitle { - color: rgba(255, 255, 255, 0.9); } - .hero.is-primary .subtitle a:not(.button), .docstring > section > a.hero.docs-sourcelink .subtitle a:not(.button), - .hero.is-primary .subtitle strong, - .docstring > section > a.hero.docs-sourcelink .subtitle strong { - color: #fff; } - @media screen and (max-width: 1055px) { - .hero.is-primary .navbar-menu, .docstring > section > a.hero.docs-sourcelink .navbar-menu { - background-color: #4eb5de; } } - .hero.is-primary .navbar-item, .docstring > section > a.hero.docs-sourcelink .navbar-item, - .hero.is-primary .navbar-link, - .docstring > section > a.hero.docs-sourcelink .navbar-link { - color: rgba(255, 255, 255, 0.7); } - .hero.is-primary a.navbar-item:hover, .docstring > section > a.hero.docs-sourcelink a.navbar-item:hover, .hero.is-primary a.navbar-item.is-active, .docstring > section > a.hero.docs-sourcelink a.navbar-item.is-active, - .hero.is-primary .navbar-link:hover, - .docstring > section > a.hero.docs-sourcelink .navbar-link:hover, - .hero.is-primary .navbar-link.is-active, - .docstring > section > a.hero.docs-sourcelink .navbar-link.is-active { - background-color: #39acda; - color: #fff; } - .hero.is-primary .tabs a, .docstring > section > a.hero.docs-sourcelink .tabs a { - color: #fff; - opacity: 0.9; } - .hero.is-primary .tabs a:hover, .docstring > section > a.hero.docs-sourcelink .tabs a:hover { - opacity: 1; } - .hero.is-primary .tabs li.is-active a, .docstring > section > a.hero.docs-sourcelink .tabs li.is-active a { - opacity: 1; } - .hero.is-primary .tabs.is-boxed a, .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed a, .hero.is-primary .tabs.is-toggle a, .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle a { - color: #fff; } - .hero.is-primary .tabs.is-boxed a:hover, .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed a:hover, .hero.is-primary .tabs.is-toggle a:hover, .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); } - .hero.is-primary .tabs.is-boxed li.is-active a, .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed li.is-active a, .hero.is-primary .tabs.is-boxed li.is-active a:hover, .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed li.is-active a:hover, .hero.is-primary .tabs.is-toggle li.is-active a, .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a, .hero.is-primary .tabs.is-toggle li.is-active a:hover, .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a:hover { - background-color: #fff; - border-color: #fff; - color: #4eb5de; } - .hero.is-primary.is-bold, .docstring > section > a.hero.is-bold.docs-sourcelink { - background-image: linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%); } - @media screen and (max-width: 768px) { - .hero.is-primary.is-bold .navbar-menu, .docstring > section > a.hero.is-bold.docs-sourcelink .navbar-menu { - background-image: linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%); } } - .hero.is-link { - background-color: #2e63b8; - color: #fff; } - .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), - .hero.is-link strong { - color: inherit; } - .hero.is-link .title { - color: #fff; } - .hero.is-link .subtitle { - color: rgba(255, 255, 255, 0.9); } - .hero.is-link .subtitle a:not(.button), - .hero.is-link .subtitle strong { - color: #fff; } - @media screen and (max-width: 1055px) { - .hero.is-link .navbar-menu { - background-color: #2e63b8; } } - .hero.is-link .navbar-item, - .hero.is-link .navbar-link { - color: rgba(255, 255, 255, 0.7); } - .hero.is-link a.navbar-item:hover, .hero.is-link a.navbar-item.is-active, - .hero.is-link .navbar-link:hover, - .hero.is-link .navbar-link.is-active { - background-color: #2958a4; - color: #fff; } - .hero.is-link .tabs a { - color: #fff; - opacity: 0.9; } - .hero.is-link .tabs a:hover { - opacity: 1; } - .hero.is-link .tabs li.is-active a { - opacity: 1; } - .hero.is-link .tabs.is-boxed a, .hero.is-link .tabs.is-toggle a { - color: #fff; } - .hero.is-link .tabs.is-boxed a:hover, .hero.is-link .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); } - .hero.is-link .tabs.is-boxed li.is-active a, .hero.is-link .tabs.is-boxed li.is-active a:hover, .hero.is-link .tabs.is-toggle li.is-active a, .hero.is-link .tabs.is-toggle li.is-active a:hover { - background-color: #fff; - border-color: #fff; - color: #2e63b8; } - .hero.is-link.is-bold { - background-image: linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%); } - @media screen and (max-width: 768px) { - .hero.is-link.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%); } } - .hero.is-info { - background-color: #209cee; - color: #fff; } - .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), - .hero.is-info strong { - color: inherit; } - .hero.is-info .title { - color: #fff; } - .hero.is-info .subtitle { - color: rgba(255, 255, 255, 0.9); } - .hero.is-info .subtitle a:not(.button), - .hero.is-info .subtitle strong { - color: #fff; } - @media screen and (max-width: 1055px) { - .hero.is-info .navbar-menu { - background-color: #209cee; } } - .hero.is-info .navbar-item, - .hero.is-info .navbar-link { - color: rgba(255, 255, 255, 0.7); } - .hero.is-info a.navbar-item:hover, .hero.is-info a.navbar-item.is-active, - .hero.is-info .navbar-link:hover, - .hero.is-info .navbar-link.is-active { - background-color: #1190e3; - color: #fff; } - .hero.is-info .tabs a { - color: #fff; - opacity: 0.9; } - .hero.is-info .tabs a:hover { - opacity: 1; } - .hero.is-info .tabs li.is-active a { - opacity: 1; } - .hero.is-info .tabs.is-boxed a, .hero.is-info .tabs.is-toggle a { - color: #fff; } - .hero.is-info .tabs.is-boxed a:hover, .hero.is-info .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); } - .hero.is-info .tabs.is-boxed li.is-active a, .hero.is-info .tabs.is-boxed li.is-active a:hover, .hero.is-info .tabs.is-toggle li.is-active a, .hero.is-info .tabs.is-toggle li.is-active a:hover { - background-color: #fff; - border-color: #fff; - color: #209cee; } - .hero.is-info.is-bold { - background-image: linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%); } - @media screen and (max-width: 768px) { - .hero.is-info.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%); } } - .hero.is-success { - background-color: #22c35b; - color: #fff; } - .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), - .hero.is-success strong { - color: inherit; } - .hero.is-success .title { - color: #fff; } - .hero.is-success .subtitle { - color: rgba(255, 255, 255, 0.9); } - .hero.is-success .subtitle a:not(.button), - .hero.is-success .subtitle strong { - color: #fff; } - @media screen and (max-width: 1055px) { - .hero.is-success .navbar-menu { - background-color: #22c35b; } } - .hero.is-success .navbar-item, - .hero.is-success .navbar-link { - color: rgba(255, 255, 255, 0.7); } - .hero.is-success a.navbar-item:hover, .hero.is-success a.navbar-item.is-active, - .hero.is-success .navbar-link:hover, - .hero.is-success .navbar-link.is-active { - background-color: #1ead51; - color: #fff; } - .hero.is-success .tabs a { - color: #fff; - opacity: 0.9; } - .hero.is-success .tabs a:hover { - opacity: 1; } - .hero.is-success .tabs li.is-active a { - opacity: 1; } - .hero.is-success .tabs.is-boxed a, .hero.is-success .tabs.is-toggle a { - color: #fff; } - .hero.is-success .tabs.is-boxed a:hover, .hero.is-success .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); } - .hero.is-success .tabs.is-boxed li.is-active a, .hero.is-success .tabs.is-boxed li.is-active a:hover, .hero.is-success .tabs.is-toggle li.is-active a, .hero.is-success .tabs.is-toggle li.is-active a:hover { - background-color: #fff; - border-color: #fff; - color: #22c35b; } - .hero.is-success.is-bold { - background-image: linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%); } - @media screen and (max-width: 768px) { - .hero.is-success.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%); } } - .hero.is-warning { - background-color: #ffdd57; - color: rgba(0, 0, 0, 0.7); } - .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), - .hero.is-warning strong { - color: inherit; } - .hero.is-warning .title { - color: rgba(0, 0, 0, 0.7); } - .hero.is-warning .subtitle { - color: rgba(0, 0, 0, 0.9); } - .hero.is-warning .subtitle a:not(.button), - .hero.is-warning .subtitle strong { - color: rgba(0, 0, 0, 0.7); } - @media screen and (max-width: 1055px) { - .hero.is-warning .navbar-menu { - background-color: #ffdd57; } } - .hero.is-warning .navbar-item, - .hero.is-warning .navbar-link { - color: rgba(0, 0, 0, 0.7); } - .hero.is-warning a.navbar-item:hover, .hero.is-warning a.navbar-item.is-active, - .hero.is-warning .navbar-link:hover, - .hero.is-warning .navbar-link.is-active { - background-color: #ffd83e; - color: rgba(0, 0, 0, 0.7); } - .hero.is-warning .tabs a { - color: rgba(0, 0, 0, 0.7); - opacity: 0.9; } - .hero.is-warning .tabs a:hover { - opacity: 1; } - .hero.is-warning .tabs li.is-active a { - opacity: 1; } - .hero.is-warning .tabs.is-boxed a, .hero.is-warning .tabs.is-toggle a { - color: rgba(0, 0, 0, 0.7); } - .hero.is-warning .tabs.is-boxed a:hover, .hero.is-warning .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); } - .hero.is-warning .tabs.is-boxed li.is-active a, .hero.is-warning .tabs.is-boxed li.is-active a:hover, .hero.is-warning .tabs.is-toggle li.is-active a, .hero.is-warning .tabs.is-toggle li.is-active a:hover { - background-color: rgba(0, 0, 0, 0.7); - border-color: rgba(0, 0, 0, 0.7); - color: #ffdd57; } - .hero.is-warning.is-bold { - background-image: linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%); } - @media screen and (max-width: 768px) { - .hero.is-warning.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%); } } - .hero.is-danger { - background-color: #da0b00; - color: #fff; } - .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), - .hero.is-danger strong { - color: inherit; } - .hero.is-danger .title { - color: #fff; } - .hero.is-danger .subtitle { - color: rgba(255, 255, 255, 0.9); } - .hero.is-danger .subtitle a:not(.button), - .hero.is-danger .subtitle strong { - color: #fff; } - @media screen and (max-width: 1055px) { - .hero.is-danger .navbar-menu { - background-color: #da0b00; } } - .hero.is-danger .navbar-item, - .hero.is-danger .navbar-link { - color: rgba(255, 255, 255, 0.7); } - .hero.is-danger a.navbar-item:hover, .hero.is-danger a.navbar-item.is-active, - .hero.is-danger .navbar-link:hover, - .hero.is-danger .navbar-link.is-active { - background-color: #c10a00; - color: #fff; } - .hero.is-danger .tabs a { - color: #fff; - opacity: 0.9; } - .hero.is-danger .tabs a:hover { - opacity: 1; } - .hero.is-danger .tabs li.is-active a { - opacity: 1; } - .hero.is-danger .tabs.is-boxed a, .hero.is-danger .tabs.is-toggle a { - color: #fff; } - .hero.is-danger .tabs.is-boxed a:hover, .hero.is-danger .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); } - .hero.is-danger .tabs.is-boxed li.is-active a, .hero.is-danger .tabs.is-boxed li.is-active a:hover, .hero.is-danger .tabs.is-toggle li.is-active a, .hero.is-danger .tabs.is-toggle li.is-active a:hover { - background-color: #fff; - border-color: #fff; - color: #da0b00; } - .hero.is-danger.is-bold { - background-image: linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%); } - @media screen and (max-width: 768px) { - .hero.is-danger.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%); } } - .hero.is-small .hero-body, #documenter .docs-sidebar form.docs-search > input.hero .hero-body { - padding-bottom: 1.5rem; - padding-top: 1.5rem; } - @media screen and (min-width: 769px), print { - .hero.is-medium .hero-body { - padding-bottom: 9rem; - padding-top: 9rem; } } - @media screen and (min-width: 769px), print { - .hero.is-large .hero-body { - padding-bottom: 18rem; - padding-top: 18rem; } } - .hero.is-halfheight .hero-body, .hero.is-fullheight .hero-body, .hero.is-fullheight-with-navbar .hero-body { - align-items: center; - display: flex; } - .hero.is-halfheight .hero-body > .container, .hero.is-fullheight .hero-body > .container, .hero.is-fullheight-with-navbar .hero-body > .container { - flex-grow: 1; - flex-shrink: 1; } - .hero.is-halfheight { - min-height: 50vh; } - .hero.is-fullheight { - min-height: 100vh; } - -.hero-video { - overflow: hidden; } - .hero-video video { - left: 50%; - min-height: 100%; - min-width: 100%; - position: absolute; - top: 50%; - transform: translate3d(-50%, -50%, 0); } - .hero-video.is-transparent { - opacity: 0.3; } - @media screen and (max-width: 768px) { - .hero-video { - display: none; } } - -.hero-buttons { - margin-top: 1.5rem; } - @media screen and (max-width: 768px) { - .hero-buttons .button { - display: flex; } - .hero-buttons .button:not(:last-child) { - margin-bottom: 0.75rem; } } - @media screen and (min-width: 769px), print { - .hero-buttons { - display: flex; - justify-content: center; } - .hero-buttons .button:not(:last-child) { - margin-right: 1.5rem; } } - -.hero-head, -.hero-foot { - flex-grow: 0; - flex-shrink: 0; } - -.hero-body { - flex-grow: 1; - flex-shrink: 0; - padding: 3rem 1.5rem; } - -.section { - padding: 3rem 1.5rem; } - @media screen and (min-width: 1056px) { - .section.is-medium { - padding: 9rem 1.5rem; } - .section.is-large { - padding: 18rem 1.5rem; } } - -.footer { - background-color: #fafafa; - padding: 3rem 1.5rem 6rem; } - -h1 .docs-heading-anchor, h1 .docs-heading-anchor:hover, h1 .docs-heading-anchor:visited, h2 .docs-heading-anchor, h2 .docs-heading-anchor:hover, h2 .docs-heading-anchor:visited, h3 .docs-heading-anchor, h3 .docs-heading-anchor:hover, h3 .docs-heading-anchor:visited, h4 .docs-heading-anchor, h4 .docs-heading-anchor:hover, h4 .docs-heading-anchor:visited, h5 .docs-heading-anchor, h5 .docs-heading-anchor:hover, h5 .docs-heading-anchor:visited, h6 .docs-heading-anchor, h6 .docs-heading-anchor:hover, h6 .docs-heading-anchor:visited { - color: #222222; } - -h1 .docs-heading-anchor-permalink, h2 .docs-heading-anchor-permalink, h3 .docs-heading-anchor-permalink, h4 .docs-heading-anchor-permalink, h5 .docs-heading-anchor-permalink, h6 .docs-heading-anchor-permalink { - visibility: hidden; - vertical-align: middle; - margin-left: 0.5em; - font-size: 0.7rem; } - h1 .docs-heading-anchor-permalink::before, h2 .docs-heading-anchor-permalink::before, h3 .docs-heading-anchor-permalink::before, h4 .docs-heading-anchor-permalink::before, h5 .docs-heading-anchor-permalink::before, h6 .docs-heading-anchor-permalink::before { - font-family: "Font Awesome 5 Free"; - font-weight: 900; - content: "\f0c1"; } - -h1:hover .docs-heading-anchor-permalink, h2:hover .docs-heading-anchor-permalink, h3:hover .docs-heading-anchor-permalink, h4:hover .docs-heading-anchor-permalink, h5:hover .docs-heading-anchor-permalink, h6:hover .docs-heading-anchor-permalink { - visibility: visible; } - -.docs-dark-only { - display: none !important; } - -.admonition { - background-color: #b5b5b5; - border-style: solid; - border-width: 1px; - border-color: #363636; - border-radius: 4px; - font-size: 1rem; } - .admonition strong { - color: currentColor; } - .admonition.is-small, #documenter .docs-sidebar form.docs-search > input.admonition { - font-size: 0.75rem; } - .admonition.is-medium { - font-size: 1.25rem; } - .admonition.is-large { - font-size: 1.5rem; } - .admonition.is-default { - background-color: #b5b5b5; - border-color: #363636; } - .admonition.is-default > .admonition-header { - background-color: #363636; - color: #fff; } - .admonition.is-default > .admonition-body { - color: #fff; } - .admonition.is-info { - background-color: #def0fc; - border-color: #209cee; } - .admonition.is-info > .admonition-header { - background-color: #209cee; - color: #fff; } - .admonition.is-info > .admonition-body { - color: rgba(0, 0, 0, 0.7); } - .admonition.is-success { - background-color: #bdf4d1; - border-color: #22c35b; } - .admonition.is-success > .admonition-header { - background-color: #22c35b; - color: #fff; } - .admonition.is-success > .admonition-body { - color: rgba(0, 0, 0, 0.7); } - .admonition.is-warning { - background-color: #fff3c5; - border-color: #ffdd57; } - .admonition.is-warning > .admonition-header { - background-color: #ffdd57; - color: rgba(0, 0, 0, 0.7); } - .admonition.is-warning > .admonition-body { - color: rgba(0, 0, 0, 0.7); } - .admonition.is-danger { - background-color: #ffaba7; - border-color: #da0b00; } - .admonition.is-danger > .admonition-header { - background-color: #da0b00; - color: #fff; } - .admonition.is-danger > .admonition-body { - color: rgba(0, 0, 0, 0.7); } - .admonition.is-compat { - background-color: #bdeff5; - border-color: #1db5c9; } - .admonition.is-compat > .admonition-header { - background-color: #1db5c9; - color: #fff; } - .admonition.is-compat > .admonition-body { - color: rgba(0, 0, 0, 0.7); } - -.admonition-header { - color: #fff; - background-color: #363636; - align-items: center; - font-weight: 700; - justify-content: space-between; - line-height: 1.25; - padding: 0.75em; - position: relative; } - .admonition-header:before { - font-family: "Font Awesome 5 Free"; - font-weight: 900; - margin-right: 0.75em; - content: "\f06a"; } - -.admonition-body { - color: #222222; - padding: 1em 1.25em; } - .admonition-body pre { - background-color: whitesmoke; } - .admonition-body code { - background-color: rgba(0, 0, 0, 0.05); } - -.docstring { - margin-bottom: 1em; - background-color: transparent; - border: 1px solid #dbdbdb; - box-shadow: 2px 2px 3px rgba(10, 10, 10, 0.1); - max-width: 100%; } - .docstring > header { - display: flex; - flex-grow: 1; - align-items: stretch; - padding: 0.75rem; - background-color: whitesmoke; - box-shadow: 0 1px 2px rgba(10, 10, 10, 0.1); - box-shadow: none; - border-bottom: 1px solid #dbdbdb; } - .docstring > header code { - background-color: transparent; } - .docstring > header .docstring-binding { - margin-right: 0.3em; } - .docstring > header .docstring-category { - margin-left: 0.3em; } - .docstring > section { - position: relative; - padding: 1rem 1.25rem; - border-bottom: 1px solid #dbdbdb; } - .docstring > section:last-child { - border-bottom: none; } - .docstring > section > a.docs-sourcelink { - transition: opacity 0.3s; - opacity: 0; - position: absolute; - right: 0.625rem; - bottom: 0.5rem; } - .docstring:hover > section > a.docs-sourcelink { - opacity: 0.2; } - .docstring > section:hover a.docs-sourcelink { - opacity: 1; } - -.documenter-example-output { - background-color: white; } - -.outdated-warning-overlay { - position: fixed; - top: 0; - left: 0; - right: 0; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); - z-index: 999; - background-color: #ffaba7; - color: rgba(0, 0, 0, 0.7); - border-bottom: 3px solid #da0b00; - padding: 10px 35px; - text-align: center; - font-size: 15px; } - .outdated-warning-overlay .outdated-warning-closer { - position: absolute; - top: calc(50% - 10px); - right: 18px; - cursor: pointer; - width: 12px; } - .outdated-warning-overlay a { - color: #2e63b8; } - .outdated-warning-overlay a:hover { - color: #363636; } - -.content pre { - border: 1px solid #dbdbdb; } - -.content code { - font-weight: inherit; } - -.content a code { - color: #2e63b8; } - -.content h1 code, .content h2 code, .content h3 code, .content h4 code, .content h5 code, .content h6 code { - color: #222222; } - -.content table { - display: block; - width: initial; - max-width: 100%; - overflow-x: auto; } - -.content blockquote > ul:first-child, .content blockquote > ol:first-child, .content .admonition-body > ul:first-child, .content .admonition-body > ol:first-child { - margin-top: 0; } - -pre, code { - font-variant-ligatures: no-contextual; } - -.breadcrumb a.is-disabled { - cursor: default; - pointer-events: none; } - .breadcrumb a.is-disabled, .breadcrumb a.is-disabled:hover { - color: #222222; } - -.hljs { - background: initial !important; - padding: initial !important; } - -.katex .katex-mathml { - top: 0; - right: 0; } - -.katex-display, mjx-container, .MathJax_Display { - margin: 0.5em 0 !important; } - -html { - -moz-osx-font-smoothing: auto; - -webkit-font-smoothing: auto; } - -/* This file contain the overall layout. - * - * The main container is
      that is identified by id #documenter. - */ -#documenter .docs-main > article { - overflow-wrap: break-word; } - #documenter .docs-main > article .math-container { - overflow-x: auto; - overflow-y: hidden; } - -@media screen and (min-width: 1056px) { - #documenter .docs-main { - max-width: 52rem; - margin-left: 20rem; - padding-right: 1rem; } } - -@media screen and (max-width: 1055px) { - #documenter .docs-main { - width: 100%; } - #documenter .docs-main > article { - max-width: 52rem; - margin-left: auto; - margin-right: auto; - margin-bottom: 1rem; - padding: 0 1rem; } - #documenter .docs-main > header, #documenter .docs-main > nav { - max-width: 100%; - width: 100%; - margin: 0; } } - -#documenter .docs-main header.docs-navbar { - background-color: white; - border-bottom: 1px solid #dbdbdb; - z-index: 2; - min-height: 4rem; - margin-bottom: 1rem; - display: flex; } - #documenter .docs-main header.docs-navbar .breadcrumb { - flex-grow: 1; } - #documenter .docs-main header.docs-navbar .docs-right { - display: flex; - white-space: nowrap; } - #documenter .docs-main header.docs-navbar .docs-right .docs-icon, #documenter .docs-main header.docs-navbar .docs-right .docs-label, #documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button { - display: inline-block; } - #documenter .docs-main header.docs-navbar .docs-right .docs-label { - padding: 0; - margin-left: 0.3em; } - #documenter .docs-main header.docs-navbar .docs-right .docs-settings-button { - margin: auto 0 auto 1rem; } - #documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button { - font-size: 1.5rem; - margin: auto 0 auto 1rem; } - #documenter .docs-main header.docs-navbar > * { - margin: auto 0; } - @media screen and (max-width: 1055px) { - #documenter .docs-main header.docs-navbar { - position: sticky; - top: 0; - padding: 0 1rem; - /* For Headroom.js */ - transition-property: top, box-shadow; - -webkit-transition-property: top, box-shadow; - /* Safari */ - transition-duration: 0.3s; - -webkit-transition-duration: 0.3s; - /* Safari */ } - #documenter .docs-main header.docs-navbar.headroom--not-top { - box-shadow: 0.2rem 0rem 0.4rem #bbb; - transition-duration: 0.7s; - -webkit-transition-duration: 0.7s; - /* Safari */ } - #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom { - top: -4.5rem; - transition-duration: 0.7s; - -webkit-transition-duration: 0.7s; - /* Safari */ } } - -#documenter .docs-main section.footnotes { - border-top: 1px solid #dbdbdb; } - #documenter .docs-main section.footnotes li .tag:first-child, #documenter .docs-main section.footnotes li .docstring > section > a.docs-sourcelink:first-child, #documenter .docs-main section.footnotes li .content kbd:first-child, .content #documenter .docs-main section.footnotes li kbd:first-child { - margin-right: 1em; - margin-bottom: 0.4em; } - -#documenter .docs-main .docs-footer { - display: flex; - flex-wrap: wrap; - margin-left: 0; - margin-right: 0; - border-top: 1px solid #dbdbdb; - padding-top: 1rem; - padding-bottom: 1rem; } - @media screen and (max-width: 1055px) { - #documenter .docs-main .docs-footer { - padding-left: 1rem; - padding-right: 1rem; } } - #documenter .docs-main .docs-footer .docs-footer-nextpage, #documenter .docs-main .docs-footer .docs-footer-prevpage { - flex-grow: 1; } - #documenter .docs-main .docs-footer .docs-footer-nextpage { - text-align: right; } - #documenter .docs-main .docs-footer .flexbox-break { - flex-basis: 100%; - height: 0; } - #documenter .docs-main .docs-footer .footer-message { - font-size: 0.8em; - margin: 0.5em auto 0 auto; - text-align: center; } - -#documenter .docs-sidebar { - display: flex; - flex-direction: column; - color: #0a0a0a; - background-color: whitesmoke; - border-right: 1px solid #dbdbdb; - padding: 0; - flex: 0 0 18rem; - z-index: 5; - font-size: 1rem; - position: fixed; - left: -18rem; - width: 18rem; - height: 100%; - transition: left 0.3s; - /* Setting up a nicer theme style for the scrollbar */ } - #documenter .docs-sidebar.visible { - left: 0; - box-shadow: 0.4rem 0rem 0.8rem #bbb; } - @media screen and (min-width: 1056px) { - #documenter .docs-sidebar.visible { - box-shadow: none; } } - @media screen and (min-width: 1056px) { - #documenter .docs-sidebar { - left: 0; - top: 0; } } - #documenter .docs-sidebar .docs-logo { - margin-top: 1rem; - padding: 0 1rem; } - #documenter .docs-sidebar .docs-logo > img { - max-height: 6rem; - margin: auto; } - #documenter .docs-sidebar .docs-package-name { - flex-shrink: 0; - font-size: 1.5rem; - font-weight: 700; - text-align: center; - white-space: nowrap; - overflow: hidden; - padding: 0.5rem 0; } - #documenter .docs-sidebar .docs-package-name .docs-autofit { - max-width: 16.2rem; } - #documenter .docs-sidebar .docs-package-name a, #documenter .docs-sidebar .docs-package-name a:hover { - color: #0a0a0a; } - #documenter .docs-sidebar .docs-version-selector { - border-top: 1px solid #dbdbdb; - display: none; - padding: 0.5rem; } - #documenter .docs-sidebar .docs-version-selector.visible { - display: flex; } - #documenter .docs-sidebar ul.docs-menu { - flex-grow: 1; - user-select: none; - border-top: 1px solid #dbdbdb; - padding-bottom: 1.5rem; - /* Managing collapsible submenus */ } - #documenter .docs-sidebar ul.docs-menu > li > .tocitem { - font-weight: bold; } - #documenter .docs-sidebar ul.docs-menu > li li { - font-size: 0.95rem; - margin-left: 1em; - border-left: 1px solid #dbdbdb; } - #documenter .docs-sidebar ul.docs-menu input.collapse-toggle { - display: none; } - #documenter .docs-sidebar ul.docs-menu ul.collapsed { - display: none; } - #documenter .docs-sidebar ul.docs-menu input:checked ~ ul.collapsed { - display: block; } - #documenter .docs-sidebar ul.docs-menu label.tocitem { - display: flex; } - #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label { - flex-grow: 2; } - #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron { - display: inline-block; - font-style: normal; - font-variant: normal; - text-rendering: auto; - line-height: 1; - font-size: 0.75rem; - margin-left: 1rem; - margin-top: auto; - margin-bottom: auto; } - #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before { - font-family: "Font Awesome 5 Free"; - font-weight: 900; - content: "\f054"; } - #documenter .docs-sidebar ul.docs-menu input:checked ~ label.tocitem .docs-chevron::before { - content: "\f078"; } - #documenter .docs-sidebar ul.docs-menu .tocitem { - display: block; - padding: 0.5rem 0.5rem; } - #documenter .docs-sidebar ul.docs-menu .tocitem, #documenter .docs-sidebar ul.docs-menu .tocitem:hover { - color: #0a0a0a; - background: whitesmoke; } - #documenter .docs-sidebar ul.docs-menu a.tocitem:hover, #documenter .docs-sidebar ul.docs-menu label.tocitem:hover { - color: #0a0a0a; - background-color: #ebebeb; } - #documenter .docs-sidebar ul.docs-menu li.is-active { - border-top: 1px solid #dbdbdb; - border-bottom: 1px solid #dbdbdb; - background-color: white; } - #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem, #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover { - background-color: white; - color: #0a0a0a; } - #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover { - background-color: #ebebeb; - color: #0a0a0a; } - #documenter .docs-sidebar ul.docs-menu > li.is-active:first-child { - border-top: none; } - #documenter .docs-sidebar ul.docs-menu ul.internal { - margin: 0 0.5rem 0.5rem; - border-top: 1px solid #dbdbdb; } - #documenter .docs-sidebar ul.docs-menu ul.internal li { - font-size: 0.85rem; - border-left: none; - margin-left: 0; - margin-top: 0.5rem; } - #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem { - width: 100%; - padding: 0; } - #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before { - content: "⚬"; - margin-right: 0.4em; } - #documenter .docs-sidebar form.docs-search { - margin: auto; - margin-top: 0.5rem; - margin-bottom: 0.5rem; } - #documenter .docs-sidebar form.docs-search > input { - width: 14.4rem; } - @media screen and (min-width: 1056px) { - #documenter .docs-sidebar ul.docs-menu { - overflow-y: auto; - -webkit-overflow-scroll: touch; } - #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar { - width: .3rem; - background: none; } - #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb { - border-radius: 5px 0px 0px 5px; - background: #e0e0e0; } - #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover { - background: #cccccc; } } - @media screen and (max-width: 1055px) { - #documenter .docs-sidebar { - overflow-y: auto; - -webkit-overflow-scroll: touch; } - #documenter .docs-sidebar::-webkit-scrollbar { - width: .3rem; - background: none; } - #documenter .docs-sidebar::-webkit-scrollbar-thumb { - border-radius: 5px 0px 0px 5px; - background: #e0e0e0; } - #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover { - background: #cccccc; } } - -#documenter .docs-main #documenter-search-info { - margin-bottom: 1rem; } - -#documenter .docs-main #documenter-search-results { - list-style-type: circle; - list-style-position: outside; } - #documenter .docs-main #documenter-search-results li { - margin-left: 2rem; } - #documenter .docs-main #documenter-search-results .docs-highlight { - background-color: yellow; } - -.ansi span.sgr1 { - font-weight: bolder; } - -.ansi span.sgr2 { - font-weight: lighter; } - -.ansi span.sgr3 { - font-style: italic; } - -.ansi span.sgr4 { - text-decoration: underline; } - -.ansi span.sgr7 { - color: white; - background-color: #222222; } - -.ansi span.sgr8 { - color: transparent; } - .ansi span.sgr8 span { - color: transparent; } - -.ansi span.sgr9 { - text-decoration: line-through; } - -.ansi span.sgr30 { - color: #242424; } - -.ansi span.sgr31 { - color: #a7201f; } - -.ansi span.sgr32 { - color: #066f00; } - -.ansi span.sgr33 { - color: #856b00; } - -.ansi span.sgr34 { - color: #2149b0; } - -.ansi span.sgr35 { - color: #7d4498; } - -.ansi span.sgr36 { - color: #007989; } - -.ansi span.sgr37 { - color: #8f8f8f; } - -.ansi span.sgr40 { - background-color: #242424; } - -.ansi span.sgr41 { - background-color: #a7201f; } - -.ansi span.sgr42 { - background-color: #066f00; } - -.ansi span.sgr43 { - background-color: #856b00; } - -.ansi span.sgr44 { - background-color: #2149b0; } - -.ansi span.sgr45 { - background-color: #7d4498; } - -.ansi span.sgr46 { - background-color: #007989; } - -.ansi span.sgr47 { - background-color: #8f8f8f; } - -.ansi span.sgr90 { - color: #707070; } - -.ansi span.sgr91 { - color: #cb3c33; } - -.ansi span.sgr92 { - color: #0e8300; } - -.ansi span.sgr93 { - color: #a98800; } - -.ansi span.sgr94 { - color: #3c5dcd; } - -.ansi span.sgr95 { - color: #9256af; } - -.ansi span.sgr96 { - color: #008fa3; } - -.ansi span.sgr97 { - color: whitesmoke; } - -.ansi span.sgr100 { - background-color: #707070; } - -.ansi span.sgr101 { - background-color: #cb3c33; } - -.ansi span.sgr102 { - background-color: #0e8300; } - -.ansi span.sgr103 { - background-color: #a98800; } - -.ansi span.sgr104 { - background-color: #3c5dcd; } - -.ansi span.sgr105 { - background-color: #9256af; } - -.ansi span.sgr106 { - background-color: #008fa3; } - -.ansi span.sgr107 { - background-color: whitesmoke; } - -code.language-julia-repl > span.hljs-meta { - color: #066f00; - font-weight: bolder; } - -/*! - Theme: Default - Description: Original highlight.js style - Author: (c) Ivan Sagalaev - Maintainer: @highlightjs/core-team - Website: https://highlightjs.org/ - License: see project LICENSE - Touched: 2021 -*/ -/* -This is left on purpose making default.css the single file that can be lifted -as-is from the repository directly without the need for a build step - -Typically this "required" baseline CSS is added by `makestuff.js` during build. -*/ -pre code.hljs { - display: block; - overflow-x: auto; - padding: 1em; } - -code.hljs { - padding: 3px 5px; } - -/* end baseline CSS */ -.hljs { - background: #F0F0F0; - color: #444; } - -/* Base color: saturation 0; */ -.hljs-subst { - /* default */ } - -/* purposely ignored */ -.hljs-comment { - color: #888888; } - -.hljs-tag, -.hljs-punctuation { - color: #444a; } - -.hljs-tag .hljs-name, -.hljs-tag .hljs-attr { - color: #444; } - -.hljs-keyword, -.hljs-attribute, -.hljs-selector-tag, -.hljs-meta .hljs-keyword, -.hljs-doctag, -.hljs-name { - font-weight: bold; } - -/* User color: hue: 0 */ -.hljs-type, -.hljs-string, -.hljs-number, -.hljs-selector-id, -.hljs-selector-class, -.hljs-quote, -.hljs-template-tag, -.hljs-deletion { - color: #880000; } - -.hljs-title, -.hljs-section { - color: #880000; - font-weight: bold; } - -.hljs-regexp, -.hljs-symbol, -.hljs-variable, -.hljs-template-variable, -.hljs-link, -.hljs-selector-attr, -.hljs-operator, -.hljs-selector-pseudo { - color: #BC6060; } - -/* Language color: hue: 90; */ -.hljs-literal { - color: #78A960; } - -.hljs-built_in, -.hljs-bullet, -.hljs-code, -.hljs-addition { - color: #397300; } - -/* Meta color: hue: 200 */ -.hljs-meta { - color: #1f7199; } - -.hljs-meta .hljs-string { - color: #4d99bf; } - -/* Misc effects */ -.hljs-emphasis { - font-style: italic; } - -.hljs-strong { - font-weight: bold; } diff --git a/docs/build/assets/themeswap.js b/docs/build/assets/themeswap.js deleted file mode 100644 index c58e993e..00000000 --- a/docs/build/assets/themeswap.js +++ /dev/null @@ -1,66 +0,0 @@ -// Small function to quickly swap out themes. Gets put into the tag.. -function set_theme_from_local_storage() { - // Intialize the theme to null, which means default - var theme = null; - // If the browser supports the localstorage and is not disabled then try to get the - // documenter theme - if(window.localStorage != null) { - // Get the user-picked theme from localStorage. May be `null`, which means the default - // theme. - theme = window.localStorage.getItem("documenter-theme"); - } - // Check if the browser supports user color preference - var darkPreference = false; - // Check if the users preference is for dark color scheme - if(window.matchMedia('(prefers-color-scheme: dark)').matches === true) { - darkPreference = true; - } - // Initialize a few variables for the loop: - // - // - active: will contain the index of the theme that should be active. Note that there - // is no guarantee that localStorage contains sane values. If `active` stays `null` - // we either could not find the theme or it is the default (primary) theme anyway. - // Either way, we then need to stick to the primary theme. - // - // - disabled: style sheets that should be disabled (i.e. all the theme style sheets - // that are not the currently active theme) - var active = null; var disabled = []; var darkTheme = null; - for (var i = 0; i < document.styleSheets.length; i++) { - var ss = document.styleSheets[i]; - // The tag of each style sheet is expected to have a data-theme-name attribute - // which must contain the name of the theme. The names in localStorage much match this. - var themename = ss.ownerNode.getAttribute("data-theme-name"); - // attribute not set => non-theme stylesheet => ignore - if(themename === null) continue; - // To distinguish the default (primary) theme, it needs to have the data-theme-primary - // attribute set. - var isprimary = (ss.ownerNode.getAttribute("data-theme-primary") !== null); - // Check if the theme is primary dark theme - var isDarkTheme = (ss.ownerNode.getAttribute("data-theme-primary-dark") !== null); - // If ss is for dark theme then set the value of darkTheme to the name of the theme - if(isDarkTheme) darkTheme = themename; - // If we find a matching theme (and it's not the default), we'll set active to non-null - if(themename === theme) active = i; - // Store the style sheets of inactive themes so that we could disable them - if(themename !== theme) disabled.push(ss); - } - if(active !== null) { - // If we did find an active theme, we'll (1) add the theme--$(theme) class to - document.getElementsByTagName('html')[0].className = "theme--" + theme; - // and (2) disable all the other theme stylesheets - disabled.forEach(function(ss){ - ss.disabled = true; - }); - } - else if(darkTheme !== null && darkPreference === true) { - // If we did find an active theme, we'll (1) add the theme--$(theme) class to - document.getElementsByTagName('html')[0].className = "theme--" + darkTheme; - // and (2) disable all the other theme stylesheets - disabled.forEach(function(ss){ - if (ss.ownerNode.getAttribute("data-theme-name") !== darkTheme) { - ss.disabled = true; - } - }); - } -} -set_theme_from_local_storage(); diff --git a/docs/build/assets/warner.js b/docs/build/assets/warner.js deleted file mode 100644 index e8184822..00000000 --- a/docs/build/assets/warner.js +++ /dev/null @@ -1,49 +0,0 @@ -function maybeAddWarning () { - // DOCUMENTER_NEWEST is defined in versions.js, DOCUMENTER_CURRENT_VERSION and DOCUMENTER_STABLE - // in siteinfo.js. - // If either of these are undefined something went horribly wrong, so we abort. - if ( - window.DOCUMENTER_NEWEST === undefined || - window.DOCUMENTER_CURRENT_VERSION === undefined || - window.DOCUMENTER_STABLE === undefined - ) { - return - }; - - // Current version is not a version number, so we can't tell if it's the newest version. Abort. - if (!/v(\d+\.)*\d+/.test(window.DOCUMENTER_CURRENT_VERSION)) { - return - }; - - // Current version is newest version, so no need to add a warning. - if (window.DOCUMENTER_NEWEST === window.DOCUMENTER_CURRENT_VERSION) { - return - }; - - // Add a noindex meta tag (unless one exists) so that search engines don't index this version of the docs. - if (document.body.querySelector('meta[name="robots"]') === null) { - const meta = document.createElement('meta'); - meta.name = 'robots'; - meta.content = 'noindex'; - - document.getElementsByTagName('head')[0].appendChild(meta); - }; - - const div = document.createElement('div'); - div.classList.add('outdated-warning-overlay'); - const closer = document.createElement('button'); - closer.classList.add('outdated-warning-closer', 'delete'); - closer.addEventListener('click', function () { - document.body.removeChild(div); - }); - const href = window.documenterBaseURL + '/../' + window.DOCUMENTER_STABLE; - div.innerHTML = 'This documentation is not for the latest version.
      Go to the latest documentation.'; - div.appendChild(closer); - document.body.appendChild(div); -}; - -if (document.readyState === 'loading') { - document.addEventListener('DOMContentLoaded', maybeAddWarning); -} else { - maybeAddWarning(); -}; diff --git a/docs/build/basis/index.html b/docs/build/basis/index.html deleted file mode 100644 index be1c83a1..00000000 --- a/docs/build/basis/index.html +++ /dev/null @@ -1,90 +0,0 @@ - -Basis Sets · Quiqbox.jl

      Basis Sets

      The procedure to construct a basis set can be fundamentally broken down into several basic steps: first, choose a set of (tunable) parameters, and build the Gaussian functions around those parameters, then the basis functions around the Gaussian functions, finally the basis set.

      The data structure formularized by Quiqbox in each step, namely the level of data complexity, can be summarized in the following table.

      levelobjectiveproduct examplesabstract typetype instances
      4basis setArray of basis functions (with reusable integrals)Array, GTBasisArray{<:BasisFunc, 1}...
      3basis functionssingle or linear combination of Gaussian functionsFloatingGTBasisFuncBasisFunc{:S, 1}, BasisFuncs{:P, 3, 3}...
      2Gaussian functions(primitive) Gaussian functionsAbstractGaussFuncGaussFunc
      1a pool of parameterscenter coordinates, function coefficientsParamBoxParamBox{:xpn, Float64}...

      Depending on how much control the user wants to have over each step, Quiqbox provides several methods of related functions to leave the user with the freedom to balance between efficiency and customizability.

      Below are some examples from the simplest way to relatively more flexible ways to construct a basis set in Quiqbox. Hopefully these use cases can also work as inspirations for more creative ways to manipulate basis sets.

      Basis Set Construction

      Constructing basis sets from existed basis sets

      First, you can create a basis set at one coordinate by input the Vector of its center coordinate and a Tuple of its name and corresponding atom in String.


      julia> bsO = Quiqbox.genBasisFunc([0,0,0], ("STO-3G", "O"))3-element Vector{Quiqbox.FloatingGTBasisFunc}: - BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0] - BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0] - BasisFuncs{:P, 3, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0]

      Notice that in the above result there are 2 types of structs in the returned Vector: BasisFunc and BasisFuncs. BasisFunc is the most basic type to hold the data of a basis function; BasisFuncs is very similar except it may hold multiple orbitals with only the spherical harmonics $Y_{ml}$ being different when the orbital angular momentum $l>0$.

      Unit System

      Hartree atomic units are the unit system used in Quiqbox.

      If you want to postpone the specification of the center, you can replace the 1st argument with missing, and then use function assignCenter! to assign the coordinates later.

      julia> bsO = genBasisFunc(missing, ("STO-3G", "O"))3-element Vector{Quiqbox.FloatingGTBasisFunc}:
      - BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][NaN, NaN, NaN]
      - BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][NaN, NaN, NaN]
      - BasisFuncs{:P, 3, 3}(gauss, subshell, center)[3/3][NaN, NaN, NaN]
      julia> assignCenter!([0,0,0], bsO[1]);
      julia> bsO3-element Vector{Quiqbox.FloatingGTBasisFunc}: - BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0] - BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][NaN, NaN, NaN] - BasisFuncs{:P, 3, 3}(gauss, subshell, center)[3/3][NaN, NaN, NaN]
      julia> assignCenter!.(Ref([0,0,0]), bsO[2:end])2-element Vector{Tuple{ParamBox{:X, Float64}, ParamBox{:Y, Float64}, ParamBox{:Z, Float64}}}: - (ParamBox{:X, Float64}(0.0)[X][∂], ParamBox{:Y, Float64}(0.0)[Y][∂], ParamBox{:Z, Float64}(0.0)[Z][∂]) - (ParamBox{:X, Float64}(0.0)[X][∂], ParamBox{:Y, Float64}(0.0)[Y][∂], ParamBox{:Z, Float64}(0.0)[Z][∂])

      If you omit the atom in the arguments, H will be set in default. Notice that even there's only 1 single basis function in H's STO-3G basis set, the returned value is still in Array type.

      julia> bsH_1 = genBasisFunc([-0.5, 0, 0], "STO-3G")1-element Vector{Quiqbox.FloatingGTBasisFunc}:
      - BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][-0.5, 0.0, 0.0]
      julia> bsH_2 = genBasisFunc([ 0.5, 0, 0], "STO-3G")1-element Vector{Quiqbox.FloatingGTBasisFunc}: - BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.5, 0.0, 0.0]

      Finally, you can use Quiqbox's included tool function flatten to merge the three atomic basis set into one molecular basis set:

      julia> bsH20 = [bsO, bsH_1, bsH_2] |> flatten5-element Vector{Quiqbox.FloatingGTBasisFunc{Subshell, 3, OrbitalN} where {Subshell, OrbitalN}}:
      - BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]
      - BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]
      - BasisFuncs{:P, 3, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0]
      - BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][-0.5, 0.0, 0.0]
      - BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.5, 0.0, 0.0]

      Not simple enough? Here's a more compact way of realizing the above steps if you are familiar with some syntactic sugars in Julia:

      julia> cens = [[0,0,0], [-0.5,0,0], [0.5,0,0]]3-element Vector{Vector{Float64}}:
      - [0.0, 0.0, 0.0]
      - [-0.5, 0.0, 0.0]
      - [0.5, 0.0, 0.0]
      julia> bsH20_2 = genBasisFunc.(cens, [("STO-3G", "O"), fill("STO-3G", 2)...]) |> flatten5-element Vector{Quiqbox.FloatingGTBasisFunc{Subshell, 3, OrbitalN} where {Subshell, OrbitalN}}: - BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0] - BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0] - BasisFuncs{:P, 3, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0] - BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][-0.5, 0.0, 0.0] - BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.5, 0.0, 0.0]

      In quiqbox, the user can often deal with several multi-layer containers (mainly structs), it might be easy to get lost or uncertain that whether we are creating the objects intended. Quiqbox provides another tool function hasEqual that lets you compare if two objects hold the same data and structure. For example, if we want to see whether bsH20_2 created in the faster way is same (not identical) as bsH20, we can verify it as follows:

      julia> hasEqual(bsH20, bsH20_2)true

      If the basis set you want to use doesn't exist in Quiqbox's library, you can use Function genBFuncsFromText to generate the basis set from a Gaussian formatted String:

      julia> genBasisFunc(missing, ("6-31G", "Kr"))ERROR: KeyError: key "Kr" not found
      julia> # Data from https://www.basissetexchange.org - txt_Kr_631G = """ - Kr 0 - S 6 1.00 - 0.1205524000D+06 0.1714050000D-02 - 0.1810225000D+05 0.1313805000D-01 - 0.4124126000D+04 0.6490006000D-01 - 0.1163472000D+04 0.2265185000D+00 - 0.3734612000D+03 0.4764961000D+00 - 0.1280897000D+03 0.3591952000D+00 - SP 6 1.00 - 0.2634681000D+04 0.2225111000D-02 0.3761911000D-02 - 0.6284533000D+03 0.2971122000D-01 0.2977531000D-01 - 0.2047081000D+03 0.1253926000D+00 0.1311878000D+00 - 0.7790827000D+02 0.1947058000D-02 0.3425019000D+00 - 0.3213816000D+02 -0.5987388000D+00 0.4644938000D+00 - 0.1341845000D+02 -0.4958972000D+00 0.2087284000D+00 - SP 6 1.00 - 0.1175107000D+03 -0.6157662000D-02 -0.6922855000D-02 - 0.4152553000D+02 0.5464841000D-01 -0.3069239000D-01 - 0.1765290000D+02 0.2706994000D+00 0.4480260000D-01 - 0.7818313000D+01 -0.1426136000D+00 0.3636775000D+00 - 0.3571775000D+01 -0.7216781000D+00 0.4952412000D+00 - 0.1623750000D+01 -0.3412008000D+00 0.2086340000D+00 - SP 3 1.00 - 0.2374560000D+01 0.3251184000D+00 -0.3009554000D-01 - 0.8691930000D+00 -0.2141533000D+00 0.3598893000D+00 - 0.3474730000D+00 -0.9755083000D+00 0.7103098000D+00 - SP 1 1.00 - 0.1264790000D+00 0.1000000000D+01 0.1000000000D+01 - D 3 1.00 - 0.6853888000D+02 0.7530705000D-01 - 0.1914333000D+02 0.3673551000D+00 - 0.6251213000D+01 0.7120146000D+00 - D 1 1.00 - 0.1979236000D+01 1.0000000 - """;
      julia> genBFuncsFromText(txt_Kr_631G, adjustContent=true)11-element Vector{Quiqbox.FloatingGTBasisFunc}: - BasisFunc{:S, 6}(gauss, subshell, center)[X⁰Y⁰Z⁰][NaN, NaN, NaN] - BasisFunc{:S, 6}(gauss, subshell, center)[X⁰Y⁰Z⁰][NaN, NaN, NaN] - BasisFuncs{:P, 6, 3}(gauss, subshell, center)[3/3][NaN, NaN, NaN] - BasisFunc{:S, 6}(gauss, subshell, center)[X⁰Y⁰Z⁰][NaN, NaN, NaN] - BasisFuncs{:P, 6, 3}(gauss, subshell, center)[3/3][NaN, NaN, NaN] - BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][NaN, NaN, NaN] - BasisFuncs{:P, 3, 3}(gauss, subshell, center)[3/3][NaN, NaN, NaN] - BasisFunc{:S, 1}(gauss, subshell, center)[X⁰Y⁰Z⁰][NaN, NaN, NaN] - BasisFuncs{:P, 1, 3}(gauss, subshell, center)[3/3][NaN, NaN, NaN] - BasisFuncs{:D, 3, 6}(gauss, subshell, center)[6/6][NaN, NaN, NaN] - BasisFuncs{:D, 1, 6}(gauss, subshell, center)[6/6][NaN, NaN, NaN]

      Constructing basis sets from GaussFunc

      If you want to specify the parameters of each Gaussian function when constructing a basis set, you can first construct the container for Gaussian functions: GaussFunc, and then build the basis function upon them:


      julia> gf1 = GaussFunc(2.0, 1.0)GaussFunc(xpn=ParamBox{:α, Float64}(2.0)[α][∂], con=ParamBox{:d, Float64}(1.0)[d][∂])
      julia> gf2 = GaussFunc(2.5, 0.75)GaussFunc(xpn=ParamBox{:α, Float64}(2.5)[α][∂], con=ParamBox{:d, Float64}(0.75)[d][∂])
      julia> bf1 = genBasisFunc([1.0,0,0], [gf1, gf2])BasisFunc{:S, 2}(gauss, subshell, center)[X⁰Y⁰Z⁰][1.0, 0.0, 0.0]

      Unlike BasisFunc there's no proprietary function for it, you simply input the exponent coefficient and the contraction coefficient as the 1st and 2nd arguments respectively to its default constructor. As for the method of genBasisFunc in this case, the default subshell is set to be "S" as the optional 3rd argument, but you can construct a BasisFuncs which contains all the orbitals within a specified one:

      julia> bf2 = genBasisFunc([1.0,0,0], [gf1, gf2], "P")BasisFuncs{:P, 2, 3}(gauss, subshell, center)[3/3][1.0, 0.0, 0.0]

      You can even choose one or a few orbitals to keep by indicting them using a 3-element Array of the Cartesian representation:

      julia> bf3 = genBasisFunc([1.0,0,0], [gf1, gf2], [1,0,0])BasisFunc{:P, 2}(gauss, subshell, center)[X¹Y⁰Z⁰][1.0, 0.0, 0.0]
      julia> bf4 = genBasisFunc([1.0,0,0], [gf1, gf2], [[1,0,0], [0,0,1]])BasisFuncs{:P, 2, 2}(gauss, subshell, center)[2/3][1.0, 0.0, 0.0]

      Again, if you want a faster solution, you can also directly define the 2 GaussFunc parameter(s) in a 2-element Tuple as the 2nd argument for genBasisFunc:

      julia> bf5 = genBasisFunc([1.0,0,0], ([2.0, 2.5], [1.0, 0.75]), [[1,0,0], [0,0,1]])BasisFuncs{:P, 2, 2}(gauss, subshell, center)[2/3][1.0, 0.0, 0.0]
      julia> hasEqual(bf4, bf5)true

      Constructing basis sets based on ParamBox

      Sometimes you may want the parameters of basis functions (or GaussFunc) to be under some constrains (which can be crucial for the later basis set optimization), this is when you need a deeper level of control over the parameters, through its direct container: ParamBox. In fact, in the above example we have already had an glimpse on it through the printed info in the REPL:

      julia> gf1GaussFunc(xpn=ParamBox{:α, Float64}(2.0)[α][∂], con=ParamBox{:d, Float64}(1.0)[d][∂])

      the 2 fields of a GaussFunc, .xpn and .con are in fact ParamBox, and the actual value of them can be accessed through syntax []:

      julia> gf1.xpnParamBox{:α, Float64}(2.0)[α][∂]
      julia> gf1.conParamBox{:d, Float64}(1.0)[d][∂]
      julia> gf1.xpn[]2.0
      julia> gf1.con[]1.0

      Since the data are not directly stored as primitive types but rather inside struct ParamBox, this allows the direct assignment or shallow copy of them to not create new data with same values, but bindings to the original objects:

      julia> gf3 = GaussFunc(1.1, 1)GaussFunc(xpn=ParamBox{:α, Float64}(1.1)[α][∂], con=ParamBox{:d, Float64}(1.0)[d][∂])
      julia> # Direct assignment - gf3_2 = gf3GaussFunc(xpn=ParamBox{:α, Float64}(1.1)[α][∂], con=ParamBox{:d, Float64}(1.0)[d][∂])
      julia> gf3.xpn[] *= 22.2
      julia> gf3GaussFunc(xpn=ParamBox{:α, Float64}(2.2)[α][∂], con=ParamBox{:d, Float64}(1.0)[d][∂])
      julia> gf3_2GaussFunc(xpn=ParamBox{:α, Float64}(2.2)[α][∂], con=ParamBox{:d, Float64}(1.0)[d][∂])
      julia> # Shallow copy: `fill` - bf6 = genBasisFunc([1,0,0], fill(gf3, 2))BasisFunc{:S, 2}(gauss, subshell, center)[X⁰Y⁰Z⁰][1.0, 0.0, 0.0]
      julia> bf6.gauss(GaussFunc(xpn=ParamBox{:α, Float64}(2.2)[α][∂], con=ParamBox{:d, Float64}(1.0)[d][∂]), GaussFunc(xpn=ParamBox{:α, Float64}(2.2)[α][∂], con=ParamBox{:d, Float64}(1.0)[d][∂]))
      julia> bf6.gauss[1].xpn[] = 1.11.1
      julia> gf3_2.xpn[] == gf3.xpn[] == bf6.gauss[2].xpn[] == 1.1true

      Based on such trait in Julia, you can, for instance, create a basis set that enforces all the GaussFuncs have the identical parameters:

      julia> gf4 = GaussFunc(2.5, 0.5)GaussFunc(xpn=ParamBox{:α, Float64}(2.5)[α][∂], con=ParamBox{:d, Float64}(0.5)[d][∂])
      julia> bs7 = genBasisFunc.([rand(3) for _=1:2], Ref(gf4))2-element Vector{BasisFunc{:S, 1}}: - BasisFunc{:S, 1}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.6635945027, 0.8925858082, 0.2862022664] - BasisFunc{:S, 1}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.1215054095, 0.2330035984, 0.04466090991]
      julia> uniqueParams!(bs7)8-element Vector{ParamBox}: - ParamBox{:α, Float64}(2.5)[α₁][∂] - ParamBox{:d, Float64}(0.5)[d₁][∂] - ParamBox{:X, Float64}(0.6635945027)[X₁][∂] - ParamBox{:X, Float64}(0.1215054095)[X₂][∂] - ParamBox{:Y, Float64}(0.8925858082)[Y₁][∂] - ParamBox{:Y, Float64}(0.2330035984)[Y₂][∂] - ParamBox{:Z, Float64}(0.2862022664)[Z₁][∂] - ParamBox{:Z, Float64}(0.04466090991)[Z₂][∂]

      uniqueParams! marks all the parameters of the given basis set and return the unique parameters. As you can see, even though bs7 has 2 GaussFuncs as basis functions, but over all it only has 1 unique coefficient exponent $\alpha_1$ and 1 unique contraction coefficient $d_1$.

      Dependent Variable as Parameter

      Another control the user can have on the parameters in Quiqbox is to not only store the each unique parameter as an independent variable, but also as a dependent variable, i.e., a math function of some more primitive independent variable:

      julia> pb1 = gf4.xpnParamBox{:α, Float64}(2.5)[α₁][∂]
      julia> pb1.mapBase.RefValue{typeof(Quiqbox.itself)}(Quiqbox.itself)

      The map field of a ParamBox stores a RefValue{<:Function}, referencing the Function that maps the actual stored value to another value through math operations ($R \to R$). The output value can be access through syntax (). In default the the variable is mapped to itself:

      julia> pb1[] == pb1()true

      Since ParamBox is a mutable struct you can redefine your own mapping Functions for the parameters; thus gain another layer of control over the basis set parameters:

      julia> squareXpn(x) = x^2squareXpn (generic function with 1 method)
      julia> pb1.map = Ref(squareXpn)Base.RefValue{typeof(Main.squareXpn)}(Main.squareXpn)
      julia> pb1[] = 33
      julia> pb1()9.0

      You can get a clearer view of the mapping relations in a ParamBox using getVar

      julia> getVar(pb1, includeMapping=true)3-element Vector{Pair}:
      - squareXpn(α₁) => α₁^2
      -          α₁^2 => 9.0
      -            α₁ => 3.0
      diff --git a/docs/build/coreFunction/index.html b/docs/build/coreFunction/index.html deleted file mode 100644 index adfc90e7..00000000 --- a/docs/build/coreFunction/index.html +++ /dev/null @@ -1,115 +0,0 @@ - -Core Functions · Quiqbox.jl

      Core Functions

      Quiqbox.genBasisFuncFunction
      genBasisFunc(args..., kws...) -> BasisFunc
      -genBasisFunc(args..., kws...) -> BasisFuncs
      -genBasisFunc(args..., kws...) -> collection

      Constructor of BasisFunc and BasisFuncs, but it also returns different kinds of collections of them based on the applied methods.

      ≡≡≡ Method 1 ≡≡≡

      genBasisFunc(coord::AbstractArray, gs::Array{<:GaussFunc, 1}, 
      -             ijkOrijks::Union{Array{Int, 1}, Array{Array{Int, 1}, 1}}; 
      -             normalizeGTO::Bool=false)

      ijkOrijks is the Array of the pseudo-quantum number(s) to specify the angular momentum(s). E.g., s is [0,0,0] and p is [[1,0,0], [0,1,0], [0,0,1]].

      ≡≡≡ Example(s) ≡≡≡

      julia> genBasisFunc([0,0,0], GaussFunc(2,1), [0,1,0])
      -BasisFunc{:P, 1}(gauss, subshell, center)[X⁰Y¹Z⁰][0.0, 0.0, 0.0]

      ≡≡≡ Method 2 ≡≡≡

      genBasisFunc(coord::AbstractArray, gs::Array{<:GaussFunc, 1}, subshell::String="S"; 
      -             ijkFilter::Array{Bool, 1}=fill(true, SubshellDimList[subshell]), 
      -             normalizeGTO::Bool=false)

      ≡≡≡ Example(s) ≡≡≡

      julia> genBasisFunc([0,0,0], GaussFunc(2,1), "S")
      -BasisFunc{:S, 1}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]
      -
      -julia> genBasisFunc([0,0,0], GaussFunc(2,1), "P")
      -BasisFuncs{:P, 1, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0]

      ≡≡≡ Method 3 ≡≡≡

      genBasisFunc(coord::AbstractArray, gExpsANDgCons::NTuple{2, Array{<:Real, 1}}, 
      -             subshell="S"; kw...)

      Instead of directly inputting GaussFunc, one can also input a 2-element Tuple of the exponent(s) and contraction coefficient(s) corresponding to the same GaussFunc(s).

      ≡≡≡ Example(s) ≡≡≡

      julia> genBasisFunc([0,0,0], (2, 1), "P")
      -BasisFuncs{:P, 1, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0]
      -
      -julia> genBasisFunc([0,0,0], ([2, 1.5], [1, 0.5]), "P")
      -BasisFuncs{:P, 2, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0]

      ≡≡≡ Method 4 ≡≡≡

      genBasisFunc(center, BSKeyANDnuc::Array{Tuple{String, String}, 1})

      If the user wants to construct existed atomic basis set(s), they can use the (Array of) (BS_name, Atom_name) as the second input. If the atom is omitted, then basis set for H is used.

      ≡≡≡ Example(s) ≡≡≡

      julia> genBasisFunc([0,0,0], ("STO-3G", "Li"))
      -3-element Vector{Quiqbox.FloatingGTBasisFunc}:
      -BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]
      -BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]
      -BasisFuncs{:P, 3, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0]
      -
      -julia> genBasisFunc([0,0,0], "STO-3G")
      -1-element Vector{Quiqbox.FloatingGTBasisFunc}:
      -BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]
      -
      -julia> genBasisFunc([0,0,0], ["STO-2G", "STO-3G"])
      -2-element Vector{Quiqbox.FloatingGTBasisFunc}:
      -BasisFunc{:S, 2}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]
      -BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]
      -
      -julia> genBasisFunc([0,0,0], [("STO-2G", "He"), ("STO-3G", "O")])
      -4-element Vector{Quiqbox.FloatingGTBasisFunc}:
      -BasisFunc{:S, 2}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]
      -BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]
      -BasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]
      -BasisFuncs{:P, 3, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0]
      source
      Quiqbox.centerOfFunction
      centerOf(bf::FloatingGTBasisFunc) -> Array{<:Real, 1}

      Return the center coordinate of the input FloatingGTBasisFunc.

      source
      GTBasis(basis::Vector{<:Quiqbox.AbstractFloatingGTBasisFunc})
      Quiqbox.decomposeBasisFuncFunction
      decomposeBasisFunc(bf::FloatingGTBasisFunc; splitGaussFunc::Bool=false) -> 
      -Array{<:FloatingGTBasisFunc, 1}

      Decompose a FloatingGTBasisFunc into a Vector of BasisFuncs. If splitGaussFunc is true, then each BasisFunc in the returned Vector only contains 1 GaussFunc.

      source
      Quiqbox.basisSizeFunction
      basisSize(subshell::Union{String, Array{String, 1}}) -> Tuple

      Return the size (number of orbitals) of each subshell.

      source
      basisSize(basisFunctions) -> Tuple

      Return the numbers of orbitals of the input basis function(s).

      source
      Quiqbox.genBasisFuncTextFunction
      genBasisFuncText(bf::FloatingGTBasisFunc; norm=1.0, printCenter=true) -> String

      Generate a String of the text of the input FloatingGTBasisFunc. norm is the additional normalization factor. If printCenter is true, the center coordinate will be added on the first line of the String.

      source
      genBasisFuncText(bs::Array{<:FloatingGTBasisFunc, 1}; 
      -                 norm=1.0, printCenter=true, groupCenters::Bool=true) -> 
      -String

      Generate a String of the text of the input basis set. norm is the additional normalization factor. If printCenter is true, the center coordinate will be added on the first line of the String. groupCenters determines whether the function will group the basis functions with same center together.

      source
      Quiqbox.genBFuncsFromTextFunction
      genBFuncsFromText(content::String; adjustContent::Bool=false, 
      -                  adjustFunction::F=sciNotReplace, 
      -                  excludeFirstNlines=0, excludeLastNlines=0, 
      -                  center::Union{AbstractArray, 
      -                                Tuple{Vararg{<:ParamBox}}, 
      -                                Missing}=missing) where {F<:Function} -> 
      -Array{<:FloatingGTBasisFunc, 1}

      Generate the basis set from a String of basis set in Gaussian format or the String output from genBasisFuncText. For the former, adjustContent needs to be set to true. adjustFunction is only applied when adjustContent=true, which in default is a function used to detect and convert the format of the scientific notation in the String.

      excludeFirstNlines and excludeLastNlines are used to exclude first or last few lines of the String if intent. genBFuncsFromText can't directly read center coordinate information from the String even if it's included, so argument center is used to assign a coordinate for all the basis functions from the String; it can be a Vector, a Tuple of the positional ParamBoxs, or simply (in default) set to missing for later assignment.

      source
      Quiqbox.assignCenter!Function
      assignCenter!(center::AbstractArray, b::FloatingGTBasisFunc) -> NTuple{3, ParamBox}

      Assign a new coordinate to the center of the input FloatingGTBasisFunc. Also return the altered center.

      source
      Quiqbox.uniqueParams!Function
      uniqueParams!(bs; onlyDifferentiable::Bool=false, ignoreContainerType::Bool=false, 
      -              filter::Bool=true, filterMapping::Bool=false) -> Array{<:ParamBox, 1}

      Mark the parameters (ParamBox) in input bs which can a Vector of GaussFunc or FloatingGTBasisFunc. The identical parameters will be marked with same index.

      === Keyword argument(s) ===

      onlyDifferentiable: Determine whether ignore un-differentiable parameters.

      ignoreContainerType: If set to true, then only the field data of the ParamBoxs will be compared to determine whether each ParamBox are unique.

      filter: Determine whether filter out the identical ParamBoxs and only return the unique ones.

      filterMapping: Determine wether return the ParamBoxs with identical fields except the map field. When filter=false, this argument is automatically overwritten to be false.

      source
      Quiqbox.getVarFunction
      getVar(pb::ParamBox; markUndifferentiable::Bool=false, includeMapping::Bool=false) -> 
      -Array{<:Pair{Symbolics.Num, <:Number}, 1}

      Return a 1-element Vector of Pair to show the Symbol::Symbolics.Num of the stored variable and the corresponding values.

      source
      Quiqbox.getVarsFunction
      getVars(obj::Union{GaussFunc, BasisFunc}; markUndifferentiable::Bool=false, 
      -        includeMapping::Bool=false) -> Array{<:Pair, 1}
      -
      -getVars(collection::Array{<:Union{GaussFunc, BasisFunc, ParamBox}, 1}; 
      -        markUndifferentiable::Bool=false, includeMapping::Bool=false) -> 
      -Array{<:Pair, 1}

      Return a Vector of Pair to indicate the mapping relations of and between the variables stored in the ParamBoxs in the given input.

      source
      Quiqbox.expressionOfFunction
      expressionOf(gf::GaussFunc; markUndifferentiable::Bool=false, 
      -             substituteValue::Bool=false) -> Symbolics.Num
      -
      -expressionOf(gf::FloatingGTBasisFunc; markUndifferentiable::Bool=false, 
      -             substituteValue::Bool=false) -> Array{<:Symbolics.Num, 2}

      Return the expression of a given GaussFunc or FloatingGTBasisFunc. When the latter is the input, a Matrix is returned of which the row(s) is(are) one orbital with the expression(s) of its Gaussian function(s) as entry(entries).

      source
      Quiqbox.GridBoxType
      GridBox(nGridPerEdge::Int, spacing::Real=10, 
      -        centerCoord::Array{<:Real, 1}=[0.0,0.0,0.0]; 
      -        canDiff::Bool=true, index::Int=0) -> GridBox

      Method of generating a cubic GridBox. nGridPerEdge specifies the number of grids (number of grid points - 1) along each dimension.spacing specifies the length between adjacent grid points. centerCoord specifies the geometry center coordinate of the box. canDiff determines whether the ParamBox should be marked as differentiable. index defines the index number for the actual parameter: spacing L, with the default value 0 it would be L₀.

      source
      Quiqbox.gridPointFunction
      gridPoint(coord::Array{<:Real, 1}) -> NTuple{3, ParamBox}

      Generate a Tuple of coordinate ParamBoxs given a Vector.

      source
      Quiqbox.runHFFunction
      runHF(bs::Union{BasisSetData, Array{<:AbstractFloatingGTBasisFunc, 1}}, 
      -      nuc::Array{String, 1}, 
      -      nucCoords::Array{<:AbstractArray, 1}, 
      -      N::Union{NTuple{2, Int}, Int}=getCharge(nuc); 
      -      initialC::Union{Array{T, 2}, NTuple{2, Array{T, 2}}, Symbol}=:GWH, 
      -      HFtype::Symbol=:RHF, 
      -      scfConfig::SCFconfig=defaultSCFconfig, 
      -      earlyTermination::Bool=true, 
      -      printInfo::Bool=true, 
      -      maxSteps::Int=1000) where {Float64<:T<:Float64} -> HFfinalVars

      Main function to run Hartree-Fock in Quiqbox.

      === Positional argument(s) ===

      bs::Union{BasisSetData, Array{<:AbstractFloatingGTBasisFunc, 1}}: Basis set.

      nuc::Array{String, 1}: The element symbols of the nuclei for the Molecule.

      nucCoords::Array{<:AbstractArray, 1}: The coordinates of the nuclei.

      N::Union{NTuple{2, Int}, Int}: The total number of electrons or the numbers of electrons with different spins respectively.

      === Keyword argument(s) ===

      initialC::Union{Array{T, 2}, NTuple{2, Array{T, 2}}, Symbol}: Initial guess of the coefficient matrix(s) C of the molecular orbitals.

      HFtype::Symbol: Hartree-Fock type. Available values are :RHF and :UHF.

      scfConfig::SCFconfig: SCF iteration configuration.

      earlyTermination::Bool: Whether automatically early terminate (skip) a convergence method when its performance becomes unstable or poor.

      printInfo::Bool: Whether print out the information of each iteration step.

      maxSteps::Int: Maximum allowed iteration steps regardless of whether the SCF converges.

      source
      Quiqbox.runHFcoreFunction
      runHFcore(N::Union{NTuple{2, Int}, Int}, 
      -          Hcore::Array{T1, 2}, 
      -          HeeI::Array{T2, 4}, 
      -          S::Array{T3, 2}, 
      -          X::Array{T4, 2}=getX(S), 
      -          C::Union{Array{T, 2}, NTuple{2, Array{T, 2}}, Symbol}=guessC(S, Hcore; X);
      -          HFtype::Symbol=:RHF,  
      -          scfConfig::SCFconfig{L}, 
      -          earlyTermination::Bool=true, 
      -          printInfo::Bool=true, 
      -          maxSteps::Int=1000) where {Float64<:T1<:Float64, 
      -          Float64<:T2<:Float64, 
      -          Float64<:T3<:Float64, 
      -          Float64<:T4<:Float64, 
      -          Float64<:T5<:Float64, L}

      The core function of runHF.

      === Positional argument(s) ===

      N::Union{NTuple{2, Int}, Int}: The total number of electrons or the numbers of electrons with different spins respectively.

      Hcore::Array{T1, 2}: Core Hamiltonian of electronic Hamiltonian.

      HeeI::Array{T2, 4}: The electron-electron interaction Hamiltonian which includes both the Coulomb interactions and the Exchange Correlations.

      S::Array{T3, 2}: Overlap matrix of the corresponding basis set.

      X::Array{T4, 2}: Orthogonal transformation matrix of S. Default value is S^(-0.5).

      C::Union{Array{T, 2}, NTuple{2, Array{T, 2}}, Symbol}: Initial guess of the coefficient matrix(s) C of the molecular orbitals.

      === Keyword argument(s) ===

      HFtype::Symbol: Hartree-Fock type. Available values are :RHF and :UHF.

      scfConfig::SCFconfig: SCF iteration configuration.

      earlyTermination::Bool: Whether automatically early terminate (skip) a convergence method when its performance becomes unstable or poor.

      printInfo::Bool: Whether print out the information of each iteration step.

      maxSteps::Int: Maximum allowed iteration steps regardless of whether the SCF converges.

      source
      Quiqbox.MoleculeMethod
      Molecule(basis::Array{<:FloatingGTBasisFunc, 1}, nuc::Array{String, 1}, 
      -         nucCoords::Array{<:AbstractArray, 1}, HFfVars::HFfinalVars) -> Molecule

      Construct a Molecule from a basis set, nuclei information, and the result from the corresponding Hartree-Fock SCF procedure, specifically a HFfinalVars struct.

      source
      Quiqbox.getMolOrbitalsFunction
      getMolOrbitals(ens::Array{Float64, 1}, occus::Array{<:Real, 1}, C::Matrix{Float64}, 
      -               spins::Array{String, 1}, 
      -               symms::Array{String, 1}=repeat(["A"], length(occus))) -> 
      -Tuple{Vararg{getMolOrbitals}}

      A function that returns the molecular orbitals.

      source
      Quiqbox.nnRepulsionsFunction
      nnRepulsions(nuc::Array{String, 1}, nucCoords::Array{<:AbstractArray, 1}) -> Float64

      Calculate the nuclear-nuclear repulsion energy given the nuclei and their coordinates of a molecule.

      source
      Quiqbox.optimizeParams!Function
      optimizeParams!(bs::Array{<:FloatingGTBasisFunc, 1}, pbs::Array{<:ParamBox, 1},
      -                nuc::Array{String, 1}, nucCoords::Array{<:AbstractArray, 1}, 
      -                Ne::Union{NTuple{2, Int}, Int}=getCharge(nuc);
      -                Etarget::Float64=NaN, threshold::Float64=1e-4, maxSteps::Int=2000, 
      -                printInfo::Bool=true, GDmethod::F1=gradDescent!, HFtype::Symbol=:RHF, 
      -                ECmethod::F2=Quiqbox.defaultECmethod) where 
      -               {F1<:Function, F2<:Function} -> 
      -Es::Array{Float64, 1}, pars::Array{Float64, 2}, grads::Array{Float64, 2}

      The main function to optimize the parameters of a given basis set.

      === Positional argument(s) ===

      bs::Array{<:FloatingGTBasisFunc, 1}: Basis set.

      pbs::Array{<:ParamBox, 1}: The parameters to be optimized that are extracted from the basis set.

      nuc::Array{String, 1}: The nuclei of the molecule.

      nucCoords::Array{<:AbstractArray, 1}: The nuclei coordinates.

      Ne::Union{NTuple{2, Int}, Int}: The total number of electrons or the numbers of electrons with different spins respectively.

      === Keyword argument(s) ===

      Etarget::Float64: The target Hartree-Hock energy intent to achieve.

      threshold::Float64: The threshold for the convergence when evaluating difference between the latest two energies.

      maxSteps::Int: Maximum allowed iteration steps regardless of whether the optimization iteration converges.

      printInfo::Bool: Whether print out the information of each iteration step.

      GDmethod::F1: Applied gradient descent Function.

      HFtype::Symbol: Hartree-Fock type. Available values are :RHF and :UHF.

      ECmethod::F2: The Function used to update Hartree-Fock energy and coefficient matrix(s) during the optimization iterations. === Keyword argument(s) ===

      source
      Quiqbox.updateParams!Function
      updateParams!(pbs::Array{<:ParamBox, 1}, grads::Array{<:Real, 1}; 
      -              method::F=gradDescent!) where {F<:Function} -> Array{<:ParamBox, 1}

      Given a Vector of parameters::ParamBox and its gradients with respect to each parameter, update the ParamBoxs and return the updated values.

      source
      Quiqbox.gradDescent!Function
      gradDescent!(pars::Vector{<:Real}, grads::Vector{<:Real}, η=0.001) -> 
      -pars::Vector{<:Real}

      Default gradient descent method in used in Quiqbox.

      source
      Quiqbox.overlapFunction
      overlap(fb1::AbstractFloatingGTBasisFunc, fb2::AbstractFloatingGTBasisFunc) -> 
      -Array{Float64, 2}

      Return the orbital overlap matrix (an N×N Matrix where N is the number of spatial orbitals) given 2 basis functions.

      source
      Quiqbox.overlapsFunction
      overlaps(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}) -> Array{Float64, 2}

      Return the orbital overlap matrix (an N×N Matrix where N is the number of spatial orbitals) given a basis set in the form of an Array.

      source
      Quiqbox.nucAttractionFunction
      nucAttraction(fb1::AbstractFloatingGTBasisFunc, fb2::AbstractFloatingGTBasisFunc, 
      -              nuc::Array{String, 1}, nucCoords::Array{<:AbstractArray, 1}) -> 
      -Array{Float64, 2}

      Return the nuclear attraction matrix (an N×N Matrix where N is the number of spatial orbitals) given 2 basis functions, and the nuclei with their coordinates (in atomic unit).

      source
      Quiqbox.nucAttractionsFunction
      nucAttractions(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}, nuc::Array{String, 1}, 
      -               nucCoords::Array{<:AbstractArray, 1}) -> 
      -Array{Float64, 2}

      Return the nuclear attraction matrix (an N×N Matrix where N is the number of spatial orbitals) given a basis set in the form of an Array, and the nuclei with their coordinates (in atomic unit).

      source
      Quiqbox.elecKineticFunction
      elecKinetic(fb1::AbstractFloatingGTBasisFunc, fb2::AbstractFloatingGTBasisFunc) -> 
      -Array{Float64, 2}

      Return the electron kinetic energy matrix (an N×N Matrix where N is the number of spatial orbitals) given 2 basis functions.

      source
      Quiqbox.elecKineticsFunction
      elecKinetics(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}) -> Array{Float64, 2}

      Return the electron kinetic energy matrix (an N×N Matrix where N is the number of spatial orbitals) given a basis set in the form of an Array.

      source
      Quiqbox.coreHijFunction
      coreHij(fb1::AbstractFloatingGTBasisFunc, fb2::AbstractFloatingGTBasisFunc) -> 
      -Array{Float64, 2}

      Return a matrix element or block of the core Hamiltonian (an N×N Matrix where N is the number of spatial orbitals) given 2 basis functions.

      source
      Quiqbox.coreHFunction
      coreH(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}) -> Array{Float64, 2}

      Return the core Hamiltonian matrix (an N×N Matrix where N is the number of spatial orbitals) given a basis set in the form of an Array.

      source
      Quiqbox.eeInteractionFunction
      eeInteraction(bf1::AbstractFloatingGTBasisFunc, 
      -              bf2::AbstractFloatingGTBasisFunc, 
      -              bf3::AbstractFloatingGTBasisFunc, 
      -              bf4::AbstractFloatingGTBasisFunc) -> 
      -Array{Float64, 4}

      Return the electron-electron interaction tensor (an N×N×N×N Tensor where N is the number of spatial orbitals) given 4 basis functions.

      source
      Quiqbox.eeInteractionsFunction
      eeInteractions(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}) -> Array{Float64, 4}

      Return the electron-electron interaction tensor (an N×N×N×N Tensor where N is the number of spatial orbitals) given a basis set in the form of an Array.

      source
      Quiqbox.oneBodyBFTensorFunction
      oneBodyBFTensor(libcinFunc::Symbol, b1::AbstractFloatingGTBasisFunc, 
      -                b2::AbstractFloatingGTBasisFunc, nuclei::Array{String, 1}=String[], 
      -                nucleiCoords::Array{<:AbstractArray, 1}=Array[]; 
      -                isGradient::Bool=false) -> 
      -Array{Float64, 2}

      Core function for one-electron integrals.

      libcinFunc::Symbol specifies the backend libcint (https://github.com/sunqm/libcint) function name, e.g. "int1enuccart" should be converted to :int1e_nuc_cartas the input argument. If the integral does not need the information of nuclei and their coordinates, those 2 arguments can be omitted. If the integral is a spacial gradient, isGradient should be set to true.

      source
      Quiqbox.twoBodyBFTensorFunction
      twoBodyBFTensor(libcinFunc::Symbol, 
      -                b1::AbstractFloatingGTBasisFunc, b2::AbstractFloatingGTBasisFunc, 
      -                b3::AbstractFloatingGTBasisFunc, b4::AbstractFloatingGTBasisFunc; 
      -                isGradient::Bool=false) -> 
      -Array{Float64, 5}

      Core function for one-electron integrals.

      libcinFunc::Symbol specifies the backend libcint (https://github.com/sunqm/libcint) function name, e.g. "cint2ecart" should be converted to `:cint2ecart`as the input argument.

      source
      diff --git a/docs/build/coreType/index.html b/docs/build/coreType/index.html deleted file mode 100644 index 253d5074..00000000 --- a/docs/build/coreType/index.html +++ /dev/null @@ -1,20 +0,0 @@ - -Core Types · Quiqbox.jl

      Core Types

      Quiqbox.ParamBoxType
      ParamBox{V, T} <: DifferentiableParameter{ParamBox, T}

      Parameter container that enables parameter differentiations.

      ≡≡≡ Field(s) ≡≡≡

      data::T: Stored parameter. It can be accessed through syntax [].

      canDiff::Bool: Indicator that whether this container should be marked as differentiable.

      ≡≡≡ Initialization Method(s) ≡≡≡

      ParamBox(data::Number, name::Symbol=:undef; mapFunction::Function=itself, 
      -         canDiff::Bool=true, paramType::Type{T}=Float64) -> 
      -ParamBox{T}

      name specifies the name of the variable to be stored, which helps with symbolic representation and automatic differentiation.

      mapFunction is for the case to the store the variable that is a dependent variable (math function) f(x) of another variable x which is the actually stored in the struct, and linked to the f(x) via the mapFunction. After initializing the ParamBox, e.g pb1 = ParamBox(x, mapFunction=f), pb.data[] returns x, and pb.data() returns f(x).

      canDiff is used to mark the (independent) variable as differentiable when set to true, otherwise the ParamBox will be ignored in any differentiation process.

      paramType specifies the type of the stored variable to avoid data type mutation.

      ≡≡≡ Example(s) ≡≡≡

      julia> Quiqbox.ParamBox(1.0)
      -ParamBox{Float64}(1.0)[∂]

      NOTE: When the parameter inside x::ParamBox is marked as "differentiable" (a.k.a. x.canDiff=true), "[∂]" in the printing info is in color green, otherwise it's in grey.

      source
      Quiqbox.GaussFuncType
      GaussFunc <: AbstractGaussFunc

      A single contracted gaussian function struct from package Quiqbox.

      ≡≡≡ Field(s) ≡≡≡

      xpn::ParamBox{:𝛼, Float64}:Exponent of the gaussian function.

      con::ParamBox{:𝑑, Float64}: Contraction coefficient of the gaussian function.

      param::NTuple{2, ParamBox}: A Tuple that stores the ParamBoxs of xpn and con.

      ≡≡≡ Initialization Method(s) ≡≡≡

      GaussFunc(xpn::Real, con::Real) -> GaussFunc

      Generate a GaussFunc given the specified exponent and contraction coefficient.

      ≡≡≡ Example(s) ≡≡≡

      julia> GaussFunc(5.0, 1.0)
      -GaussFunc(xpn=ParamBox{:α, Float64}(5.0)[α][∂], con=ParamBox{:d, Float64}(1.0)[d][∂])
      source
      Quiqbox.BasisFuncType
      BasisFunc{S, GN} <: FloatingGTBasisFunc{S, GN, 1}

      A (floating) basis function with the center attached to it instead of any nucleus.

      ≡≡≡ Field(s) ≡≡≡

      center::NTuple{3, ParamBox}: The center coordinate in form of a 3-element ParamBox-type Tuple.

      gauss::NTuple{N, GaussFunc}: Gaussian functions within the basis function.

      subshell::String: The subshell (angular momentum symbol).

      ijk::Tuple{String}: Cartesian representation (pseudo-quantum number) of the angular momentum orientation. E.g., s would be ("X⁰Y⁰Z⁰")

      normalizeGTO::Bool: Whether the GTO::GaussFunc will be normalized in calculations.

      param::Tuple{Vararg{<:ParamBox}}: All the tunable parameters::ParamBox stored in the BasisFunc.

      ≡≡≡ Initialization Method(s) ≡≡≡

      BasisFunc(center::Tuple{Vararg{<:ParamBox}}, gauss::Array{<:GaussFunc, 1}, 
      -          ijk::Array{Int, 1}, normalizeGTO::Bool) -> BasisFunc{S, GN}
      source
      Quiqbox.BasisFuncsType
      BasisFuncs{S, GN, ON} <: FloatingGTBasisFunc{S, GN, ON}

      A group of basis functions with identical parameters except they have different subshell under the specified angular momentum. It has the same fields as BasisFunc and specifically, for ijk, instead of being a 1-element Tuple, the size of the Tuple is the size of the corresponding subshell.

      source
      Quiqbox.GTBasisType
      GTBasis{N, BT} <: BasisSetData{N}

      The container to store basis set information.

      ≡≡≡ Field(s) ≡≡≡

      basis::Array{<:AbstractFloatingGTBasisFunc, 1}: Basis set. S::Array{<:Number, 2}: Overlap matrix. Te::Array{<:Number, 2}: Kinetic energy part of the electronic core Hamiltonian. eeI::Array{<:Number, 4}: Electron-electron interaction. getVne::Function: A Function that returns the nuclear attraction Hamiltonian when nuclei::Array{String, 1} and their coordinates::Array{<:AbstractArray, 1} are input. getHcore::Function: Similar as getVne, a Function that returns the core Hamiltonian when nuclei and their coordinates of same DataType are input.

      ≡≡≡ Initialization Method(s) ≡≡≡

      GTBasis(basis::Vector{<:AbstractFloatingGTBasisFunc}, S::Matrix{<:Number}, 
      -        Te::Matrix{<:Number}, eeI::Array{<:Number, 4}) -> 
      -GTBasis
      source
      Quiqbox.GridBoxType
      GridBox{NX, NY, NZ} <: SemiMutableParameter{GridBox, Float64}

      A struct that stores coordinates of grid points in terms of both Vectors and ParamBoxs.

      ≡≡≡ Field(s) ≡≡≡

      num::Int: Total number of the grid points.

      spacing::Float64: The edge length of the grid box.

      box::Vector{NTuple{3, ParamBox}}: The coordinates of grid points in terms of ParamBoxs.

      coord::Array{Array{Float64, 1}, 1}: The coordinates of grid points in terms of Vectors.

      ≡≡≡ Initialization Method(s) ≡≡≡

      GridBox(nGrids::NTuple{3, Int}, spacing::Real=10, 
      -        centerCoord::Array{<:Real, 1}=[0.0,0.0,0.0];
      -        canDiff::Bool=true, index::Int=0) -> GridBox

      Constructor of a general GridBox that doesn't have to shape as a cube. nGrid is a 3-element Tuple that specifies the number of grids (number of grid points - 1) along 3 dimensions. spacing specifies the length between adjacent grid points. centerCoord specifies the geometry center coordinate of the box. canDiff determines whether the ParamBox should be marked as differentiable. index defines the index number for the actual parameter: spacing L, with the default value 0 it would be L₀.

      source
      Quiqbox.SCFconfigType
      SCFconfig{N} <: ImmutableParameter{SCFconfig, Any}

      The struct for SCF iteration configurations.

      ≡≡≡ Field(s) ≡≡≡

      methods::NTuple{N, Symbol}: The applied methods. The available methods are their configurations (in terms of keyword arguments):

      MethodsConfiguration(s)keyword argument(s)Default value(s)
      :DSDamping strength: [0,1]dampingStrength::Float640.0
      :DIIS, :EDIIS, :ADIISSubspace size (>1); Coefficient solver(:ADMM-> ADMM solver, :LCM -> Lagrange solver)DIISsize::Int; solver::Symbol15; :ADMM

      intervals: The stopping (skipping) thresholds for the required methods.

      methodConfigs: The additional keywords arguments for each method stored as Tuples of Pairs.

      oscillateThreshold: The threshold for oscillating convergence.

      ≡≡≡ Initialization Method(s) ≡≡≡

      SCFconfig(methods::Vector{Symbol}, intervals::Vector{Float64}, 
      -          configs::Dict{Int, <:Vector{<:Pair}}=Dict(1=>Pair[]);
      -          oscillateThreshold::Float64=1e-5) -> 
      -SCFconfig{N}

      methods and intervals are the methods to be applied and their stopping (skipping) thresholds respectively; the length of those two Vectors should be the same. configs specifies the additional keyword arguments for each methods by a Pair of which the Int key i is for ith method and the pointed Vector{<:Pair} is the pairs of keyword arguments and their values respectively.

      ≡≡≡ Example(s) ≡≡≡

      julia> SCFconfig([:SD, :ADIIS, :DIIS], [1e-4, 1e-12, 1e-13], Dict(2=>[:solver=>:LCM]) SCFconfig{3}((:SD, :ADIIS, :DIIS), (0.0001, 1.0e-12, 1.0e-13), ((), (:solver => :LCM,), ()), 1.0e-5)

      source
      Quiqbox.HFtempVarsType
      HFtempVars{HFtype, N} <: HartreeFockintermediateData

      The container to store the intermediate values (only of the same spin configuration) for each iteration during the Hartree-Fock SCF procedure.

      ≡≡≡ Field(s) ≡≡≡

      Cs::Array{Array{T1, 2}, 1} where {Float64<:T1<:Float64}: Coefficient matrices.

      Fs::Array{Array{T2, 2}, 1} where {Float64<:T2<:Float64}: Fock matrices

      Ds::Array{Array{T3, 2}, 1} where {Float64<:T3<:Float64}: Density matrices corresponding to only spin configuration. For RHF each elements means (unconverged) 0.5*Dᵀ.

      Es::Array{Float64, 1}: Part of Hartree-Fock energy corresponding to only spin configuration. For RHF each element means (unconverged) 0.5*E0HF.

      shared.Dtots::Array{Array{T, 2}, 1} where {Float64<:T<:Float64}: The total density matrices.

      shared.Etots::Array{Float64, 1}: The total Hartree-Fock energy.

      NOTE: For UHF, there are 2 HFtempVars being updated during the SCF iterations, and change the field shared.Dtots or shared.Etots of one container will affect the other one's.

      source
      Quiqbox.HFfinalVarsType
      HFfinalVars{T, N, Nb} <: HartreeFockFinalValue{T}

      The container of the final values after a Hartree-Fock SCF procedure.

      ≡≡≡ Field(s) ≡≡≡

      E0HF::Float64: Hartree-Fock energy of the electronic Hamiltonian.

      C::Union{Array{T1, 2}, NTuple{2, Array{T1, 2}}} where {Float64<:T1<:Float64}: Coefficient matrix(s) for one spin configuration.

      F::Union{Array{T2, 2}, NTuple{2, Array{T2, 2}}} where {Float64<:T2<:Float64}: Fock matrix(s) for one spin configuration.

      D::Union{Array{T3, 2}, NTuple{2, Array{T3, 2}}} where {Float64<:T3<:Float64}: Density matrix(s) for one spin configuration.

      Emo::Union{Array{Float64, 1}, NTuple{2, Array{Float64, 1}}}: Energies of molecular orbitals.

      occu::Union{Array{Int, 1}, NTuple{2, Array{Int, 1}}}: occupation numbers of molecular orbitals.

      temp::Union{HFtempVars{T}, NTuple{2, HFtempVars{T}}} the intermediate values.

      isConverged::Bool: Whether the SCF procedure is converged in the end.

      source
      Quiqbox.MoleculeType
      Molecule{Nc, Ne, Nb} <:MolecularHartreeFockCoefficient{Nc, Ne}

      Container for the information of a molecule.

      ≡≡≡ Field(s) ≡≡≡

      nuc::Tuple{Vararg{String}}: Nuclei of the molecule.

      nucCoords::Tuple{Vararg{NTuple{3, Real}}}: The coordinates of the nuclei.

      Ne::Int: The number of electrons.

      orbital::Tuple{Vararg{MolOrbital}}: Molecular orbitals.

      basis::Tuple{Vararg{FloatingGTBasisFunc}}: The basis set for the molecular orbitals.

      E0HF::Float64: Hartree-Fock energy of the electronic Hamiltonian from the basis set.

      EnnR::Float64: The nuclear-nuclear repulsion energy.

      ≡≡≡ Initialization Method(s) ≡≡≡

      Molecule(basis::Array{FloatingGTBasisFunc, 1}, nuc::Array{String, 1}, 
      -         nucCoords::Array{<:AbstractArray, 1}, Ne::Int, E0HF::Float64, 
      -         Emos::Array{Float64, 1}, occus::Array{<:Real, 1}, C::Array{Float64, 2}, 
      -         spins::Array{String, 1}, 
      -         symms::Array{String, 1}=repeat(["A"], length(occus))) -> 
      -Molecule{Nc, Ne, Nb}

      Emos are the energies of corresponding molecular energies. occus are the occupation numbers of the orbitals. C is the coefficient matrix, which does not need to be a square matrix since the number of rows is the size of the (spatial) basis set whereas the number of the columns represents the number of molecular orbitals. spin specifies the spin functions of the orbitals, entries of which can be set to "Alpha" or "Beta". symms are symmetries of the orbitals where the default entry value is "A" for being antisymmetric.

      source
      Quiqbox.MolOrbitalType
      MolOrbital{N} <: AbstractMolOrbital

      Struct of molecular orbitals.

      ≡≡≡ Field(s) ≡≡≡

      symmetry::String: The symmetry of the orbital. The default value is "A" for being antisymmetric.

      energy::Float64: Molecular energy.

      spin::String: Spin function of the orbital. Available values: "Alpha", "Beta".

      occupancy::Real: Occupation number.

      orbitalCoeffs::NTuple{N, Float64}: coefficients of the basis functions to form the molecular orbital.

      ≡≡≡ Initialization Method(s) ≡≡≡

      MolOrbital(energy::Float64, occupancy::Real, orbitalCoeffs::Array{Float64, 1}, 
      -           spin::String="Alpha", symmetry::String="A") -> MolOrbital{N}
      source
      diff --git a/docs/build/index.html b/docs/build/index.html deleted file mode 100644 index f632940c..00000000 --- a/docs/build/index.html +++ /dev/null @@ -1,2 +0,0 @@ - -Home · Quiqbox.jl

      Quiqbox.jl

      Quiqbox is a quantum chemistry and quantum computing software package that starts off around Gaussian basis set optimization of molecular electronic-structure problems. Quiqbox is written in pure Julia.

      Features

      • Floating and fixed-basis Gaussian-type orbital (GTO) configurations.
      • Symbolic representation and analysis of basis function parameters.
      • Standalone 1-electron and 2-electron integral functions (powered by libcint_jll).
      • Restricted (closed-shell) and unrestricted (open-shell) Hartree–Fock methods (RHF & UHF).
      • Molecular orbital data output in Molden file format.
      • Variational optimization of orbital geometry based on automatic differentiation (AD).

      Setup

      Supported system platforms (64-bit)

      Julia Environment

      Installation in Julia REPL

      Type ] to enter the Pkg mode:

      (@v1.x) pkg>

      Type add Quiqbox and hit Enter key to install Quiqbox:

      (@v1.x) pkg> add Quiqbox

      After the installation completes, hit Backspace key to go back to Julia REPL and use using to load Quiqbox:

      julia> using Quiqbox

      For more basic usage of the programming language behind Quiqbox, Julia, please refer to the official documentation or one official tutorial.

      diff --git a/docs/build/list/index.html b/docs/build/list/index.html deleted file mode 100644 index 65fe1b2b..00000000 --- a/docs/build/list/index.html +++ /dev/null @@ -1,2 +0,0 @@ - -Index · Quiqbox.jl

      Index

      Below are the types and functions included in the documentation.

      Types

      Functions

      diff --git a/docs/build/molden/index.html b/docs/build/molden/index.html deleted file mode 100644 index fdcfe92f..00000000 --- a/docs/build/molden/index.html +++ /dev/null @@ -1,2 +0,0 @@ - -Molden · Quiqbox.jl

      Molden

      Quiqbox supports outputting molecular (in Molecule) information to Molden file format.

      Quiqbox.Molden.makeMoldenFileFunction
      makeMoldenFile(mol::Molecule; recordUMO::Bool=false, fileName::String = "MO") -> String

      Write the information of input Molecule into a Molden file. recordUMO determines whether to include the unoccupied molecular orbitals. fileName specifies the name of the file, which is also the returned value.

      source

      A concrete example of the above function can be found here.

      diff --git a/docs/build/optimization/index.html b/docs/build/optimization/index.html deleted file mode 100644 index f74d9b07..00000000 --- a/docs/build/optimization/index.html +++ /dev/null @@ -1,49 +0,0 @@ - -Parameter Optimization · Quiqbox.jl

      Parameter Optimization

      Selectively Optimizing Parameters

      In the Basis Sets section we have briefly introduced the parameters in terms of ParamBox that are embedded in containers such as BasisFunc and BasisFuncs that are directly used to form a basis set. This means how we construct the basis set using the parameters will determine how large of a parameter space we have to optimize the basis set. For more information please refer to Constructing basis sets based on ParamBox. Here is a example to use GaussFunc and GridBox to quickly generate a grid-based basis set with only 3 actual parameters, 1 determines all the coordinates of basis function centers, the other 2 are the only exponent coefficient $\alpha$ and contraction coefficient $d$.


      julia> nuc = ["H", "H"]2-element Vector{String}: - "H" - "H"
      julia> nucCoords = [[-0.7,0.0,0.0], [0.7,0.0,0.0]]2-element Vector{Vector{Float64}}: - [-0.7, 0.0, 0.0] - [0.7, 0.0, 0.0]
      julia> grid = GridBox(1, 1.5)GridBox{1, 1, 1}(num, len, coord)
      julia> gf1 = GaussFunc(0.7,1)GaussFunc(xpn=ParamBox{:α, Float64}(0.7)[α][∂], con=ParamBox{:d, Float64}(1.0)[d][∂])
      julia> bs = genBasisFunc.(grid.box, Ref([gf1]))8-element Vector{BasisFunc{:S, 1}}: - BasisFunc{:S, 1}(gauss, subshell, center)[X⁰Y⁰Z⁰][-0.75, -0.75, -0.75] - BasisFunc{:S, 1}(gauss, subshell, center)[X⁰Y⁰Z⁰][-0.75, -0.75, 0.75] - BasisFunc{:S, 1}(gauss, subshell, center)[X⁰Y⁰Z⁰][-0.75, 0.75, -0.75] - BasisFunc{:S, 1}(gauss, subshell, center)[X⁰Y⁰Z⁰][-0.75, 0.75, 0.75] - BasisFunc{:S, 1}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.75, -0.75, -0.75] - BasisFunc{:S, 1}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.75, -0.75, 0.75] - BasisFunc{:S, 1}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.75, 0.75, -0.75] - BasisFunc{:S, 1}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.75, 0.75, 0.75]

      After constructing the basis set, we need to use uniqueParams! to mark all the unique parameters that can also be optimized later:

      julia> pars = uniqueParams!(bs, filterMapping=true)3-element Vector{ParamBox}:
      - ParamBox{:α, Float64}(0.7)[α₁][∂]
      - ParamBox{:d, Float64}(1.0)[d₁][∂]
      - ParamBox{:L, Float64}(1.5)[L₁ -> Xᴳ¹⁻¹⁻¹₁(L₁)][∂]

      As expected, there are indeed only 3 unique tunable parameters despite the basis set already has 8 basis functions. (note that keyword argument filterMapping in uniqueParams! is set to true because we want the function to only return independent parameters) However, if we take a step further, we can remove $d$ since each basis function here is just a single Gaussian function, which means the contraction coefficient won't affect the optimization results. Thus, input the intent parameters (along with other necessary arguments) into the Quiqbox function optimizeParams! and we can sit and wait for the optimization iterations to complete.

      julia> parsPartial = [pars[1], pars[3]]2-element Vector{ParamBox{V, Float64} where V}:
      - ParamBox{:α, Float64}(0.7)[α₁][∂]
      - ParamBox{:L, Float64}(1.5)[L₁ -> Xᴳ¹⁻¹⁻¹₁(L₁)][∂]
      julia> optimizeParams!(bs, parsPartial, nuc, nucCoords, maxSteps=20);Step 0: E = -1.5305265963421937 - params = [0.7, 1.5] - grad = [1.9008817106887395, 0.764364470550285] -Step duration: 71.027144 seconds. - -Step 5: E = -1.5062338139453617 - params = [0.6906484915420927, 1.496244505292448] - grad = [1.8271270696377335, 0.7313231766624024] -Step duration: 1.2183108 seconds. - -Step 10: E = -1.5430880100394075 - params = [0.6816634203307707, 1.4926470317018488] - grad = [1.754454179542366, 0.7018210309669057] -Step duration: 1.1235408 seconds. - -Step 15: E = -1.5486525071564103 - params = [0.6730263419447252, 1.4891939146629765] - grad = [1.687639832343507, 0.6742825520465396] -Step duration: 1.3170213 seconds. - -Step 20: E = -1.5538041176496564 - params = [0.6647120634709195, 1.4858747615229313] - grad = [1.6245288919052274, 0.6489052476238029] -Step duration: 1.3689478 seconds. - -The iteration just ended at -Step 20: E = -1.5538041176496564 - params = [0.6647120634709195, 1.4858747615229313] - grad = [1.6245288919052274, 0.6489052476238029] -Optimization duration: 1.6439471866666666 minutes. -The result has not converged.

      After the optimization, you can check the basis set and we can see the parameters inside of it is also changed. This is because the ! in the function names indicates that optimizeParams! is a function that modifies its arguments.

      julia> getParams(bs)ERROR: UndefVarError: getParams not defined

      It you want to go through the above example by yourself, you can also find the script here.

      Store Customized Basis Set

      Now, if you want, you can also store the information of the basis set in an container called GTBasis that not only includes the basis set, but also the related 1-electron and 2-electron integral values (nuclear attraction is not stored). GTBasis can also be accepted as an argument for runHF to save the time of calculating the integrals of the basis set.

      julia> GTBasis(bs)GTBasis{8, Vector{BasisFunc{:S, 1}}}(basis, S, Te, eeI, getVne, getHcore)
      diff --git a/docs/build/search/index.html b/docs/build/search/index.html deleted file mode 100644 index 63a1bf9c..00000000 --- a/docs/build/search/index.html +++ /dev/null @@ -1,2 +0,0 @@ - -Search · Quiqbox.jl

      Loading search...

        diff --git a/docs/build/search_index.js b/docs/build/search_index.js deleted file mode 100644 index bcce0e96..00000000 --- a/docs/build/search_index.js +++ /dev/null @@ -1,3 +0,0 @@ -var documenterSearchIndex = {"docs": -[{"location":"basis/#Basis-Sets","page":"Basis Sets","title":"Basis Sets","text":"","category":"section"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"The procedure to construct a basis set can be fundamentally broken down into several basic steps: first, choose a set of (tunable) parameters, and build the Gaussian functions around those parameters, then the basis functions around the Gaussian functions, finally the basis set.","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"The data structure formularized by Quiqbox in each step, namely the level of data complexity, can be summarized in the following table.","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"level objective product examples abstract type type instances\n4 basis set Array of basis functions (with reusable integrals) Array, GTBasis Array{<:BasisFunc, 1}...\n3 basis functions single or linear combination of Gaussian functions FloatingGTBasisFunc BasisFunc{:S, 1}, BasisFuncs{:P, 3, 3}...\n2 Gaussian functions (primitive) Gaussian functions AbstractGaussFunc GaussFunc\n1 a pool of parameters center coordinates, function coefficients ParamBox ParamBox{:xpn, Float64}...","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"Depending on how much control the user wants to have over each step, Quiqbox provides several methods of related functions to leave the user with the freedom to balance between efficiency and customizability. ","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"Below are some examples from the simplest way to relatively more flexible ways to construct a basis set in Quiqbox. Hopefully these use cases can also work as inspirations for more creative ways to manipulate basis sets.","category":"page"},{"location":"basis/#Basis-Set-Construction","page":"Basis Sets","title":"Basis Set Construction","text":"","category":"section"},{"location":"basis/#Constructing-basis-sets-from-existed-basis-sets","page":"Basis Sets","title":"Constructing basis sets from existed basis sets","text":"","category":"section"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"First, you can create a basis set at one coordinate by input the Vector of its center coordinate and a Tuple of its name and corresponding atom in String.","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"push!(LOAD_PATH,\"../../src/\") # hide\nusing Quiqbox # hide\n\nbsO = Quiqbox.genBasisFunc([0,0,0], (\"STO-3G\", \"O\"))","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"Notice that in the above result there are 2 types of structs in the returned Vector: BasisFunc and BasisFuncs. BasisFunc is the most basic type to hold the data of a basis function; BasisFuncs is very similar except it may hold multiple orbitals with only the spherical harmonics Y_ml being different when the orbital angular momentum l0.","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"info: Unit System\nHartree atomic units are the unit system used in Quiqbox.","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"If you want to postpone the specification of the center, you can replace the 1st argument with missing, and then use function assignCenter! to assign the coordinates later.","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"bsO = genBasisFunc(missing, (\"STO-3G\", \"O\"))\n\nassignCenter!([0,0,0], bsO[1]);\n\nbsO\n\nassignCenter!.(Ref([0,0,0]), bsO[2:end])","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"If you omit the atom in the arguments, H will be set in default. Notice that even there's only 1 single basis function in H's STO-3G basis set, the returned value is still in Array type.","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"bsH_1 = genBasisFunc([-0.5, 0, 0], \"STO-3G\")\n\nbsH_2 = genBasisFunc([ 0.5, 0, 0], \"STO-3G\")","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"Finally, you can use Quiqbox's included tool function flatten to merge the three atomic basis set into one molecular basis set:","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"bsH20 = [bsO, bsH_1, bsH_2] |> flatten","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"Not simple enough? Here's a more compact way of realizing the above steps if you are familiar with some syntactic sugars in Julia:","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"cens = [[0,0,0], [-0.5,0,0], [0.5,0,0]]\n\nbsH20_2 = genBasisFunc.(cens, [(\"STO-3G\", \"O\"), fill(\"STO-3G\", 2)...]) |> flatten","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"In quiqbox, the user can often deal with several multi-layer containers (mainly structs), it might be easy to get lost or uncertain that whether we are creating the objects intended. Quiqbox provides another tool function hasEqual that lets you compare if two objects hold the same data and structure. For example, if we want to see whether bsH20_2 created in the faster way is same (not identical) as bsH20, we can verify it as follows:","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"hasEqual(bsH20, bsH20_2)","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"If the basis set you want to use doesn't exist in Quiqbox's library, you can use Function genBFuncsFromText to generate the basis set from a Gaussian formatted String:","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"genBasisFunc(missing, (\"6-31G\", \"Kr\"))\n\n# Data from https://www.basissetexchange.org\ntxt_Kr_631G = \"\"\" \nKr 0\nS 6 1.00\n 0.1205524000D+06 0.1714050000D-02\n 0.1810225000D+05 0.1313805000D-01\n 0.4124126000D+04 0.6490006000D-01\n 0.1163472000D+04 0.2265185000D+00\n 0.3734612000D+03 0.4764961000D+00\n 0.1280897000D+03 0.3591952000D+00\nSP 6 1.00\n 0.2634681000D+04 0.2225111000D-02 0.3761911000D-02\n 0.6284533000D+03 0.2971122000D-01 0.2977531000D-01\n 0.2047081000D+03 0.1253926000D+00 0.1311878000D+00\n 0.7790827000D+02 0.1947058000D-02 0.3425019000D+00\n 0.3213816000D+02 -0.5987388000D+00 0.4644938000D+00\n 0.1341845000D+02 -0.4958972000D+00 0.2087284000D+00\nSP 6 1.00\n 0.1175107000D+03 -0.6157662000D-02 -0.6922855000D-02\n 0.4152553000D+02 0.5464841000D-01 -0.3069239000D-01\n 0.1765290000D+02 0.2706994000D+00 0.4480260000D-01\n 0.7818313000D+01 -0.1426136000D+00 0.3636775000D+00\n 0.3571775000D+01 -0.7216781000D+00 0.4952412000D+00\n 0.1623750000D+01 -0.3412008000D+00 0.2086340000D+00\nSP 3 1.00\n 0.2374560000D+01 0.3251184000D+00 -0.3009554000D-01\n 0.8691930000D+00 -0.2141533000D+00 0.3598893000D+00\n 0.3474730000D+00 -0.9755083000D+00 0.7103098000D+00\nSP 1 1.00\n 0.1264790000D+00 0.1000000000D+01 0.1000000000D+01\nD 3 1.00\n 0.6853888000D+02 0.7530705000D-01\n 0.1914333000D+02 0.3673551000D+00\n 0.6251213000D+01 0.7120146000D+00\nD 1 1.00\n 0.1979236000D+01 1.0000000\n\"\"\";\n\ngenBFuncsFromText(txt_Kr_631G, adjustContent=true)","category":"page"},{"location":"basis/#Constructing-basis-sets-from-GaussFunc","page":"Basis Sets","title":"Constructing basis sets from GaussFunc","text":"","category":"section"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"If you want to specify the parameters of each Gaussian function when constructing a basis set, you can first construct the container for Gaussian functions: GaussFunc, and then build the basis function upon them:","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"using Quiqbox # hide\n\ngf1 = GaussFunc(2.0, 1.0)\n\ngf2 = GaussFunc(2.5, 0.75)\n\nbf1 = genBasisFunc([1.0,0,0], [gf1, gf2])","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"Unlike BasisFunc there's no proprietary function for it, you simply input the exponent coefficient and the contraction coefficient as the 1st and 2nd arguments respectively to its default constructor. As for the method of genBasisFunc in this case, the default subshell is set to be \"S\" as the optional 3rd argument, but you can construct a BasisFuncs which contains all the orbitals within a specified one:","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"bf2 = genBasisFunc([1.0,0,0], [gf1, gf2], \"P\")","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"You can even choose one or a few orbitals to keep by indicting them using a 3-element Array of the Cartesian representation:","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"bf3 = genBasisFunc([1.0,0,0], [gf1, gf2], [1,0,0])\n\nbf4 = genBasisFunc([1.0,0,0], [gf1, gf2], [[1,0,0], [0,0,1]])","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"Again, if you want a faster solution, you can also directly define the 2 GaussFunc parameter(s) in a 2-element Tuple as the 2nd argument for genBasisFunc:","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"bf5 = genBasisFunc([1.0,0,0], ([2.0, 2.5], [1.0, 0.75]), [[1,0,0], [0,0,1]])\n\nhasEqual(bf4, bf5)","category":"page"},{"location":"basis/#Constructing-basis-sets-based-on-ParamBox","page":"Basis Sets","title":"Constructing basis sets based on ParamBox","text":"","category":"section"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"Sometimes you may want the parameters of basis functions (or GaussFunc) to be under some constrains (which can be crucial for the later basis set optimization), this is when you need a deeper level of control over the parameters, through its direct container: ParamBox. In fact, in the above example we have already had an glimpse on it through the printed info in the REPL:","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"gf1","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"the 2 fields of a GaussFunc, .xpn and .con are in fact ParamBox, and the actual value of them can be accessed through syntax []:","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"gf1.xpn \n\ngf1.con\n\ngf1.xpn[] \n\ngf1.con[]","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"Since the data are not directly stored as primitive types but rather inside struct ParamBox, this allows the direct assignment or shallow copy of them to not create new data with same values, but bindings to the original objects:","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"gf3 = GaussFunc(1.1, 1)\n\n# Direct assignment\ngf3_2 = gf3\n\ngf3.xpn[] *= 2\n\ngf3 \n\ngf3_2\n\n# Shallow copy: `fill`\nbf6 = genBasisFunc([1,0,0], fill(gf3, 2))\n\nbf6.gauss\n\nbf6.gauss[1].xpn[] = 1.1\n\ngf3_2.xpn[] == gf3.xpn[] == bf6.gauss[2].xpn[] == 1.1\n","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"Based on such trait in Julia, you can, for instance, create a basis set that enforces all the GaussFuncs have the identical parameters:","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"gf4 = GaussFunc(2.5, 0.5)\n\nbs7 = genBasisFunc.([rand(3) for _=1:2], Ref(gf4))\n\nuniqueParams!(bs7)","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"uniqueParams! marks all the parameters of the given basis set and return the unique parameters. As you can see, even though bs7 has 2 GaussFuncs as basis functions, but over all it only has 1 unique coefficient exponent alpha_1 and 1 unique contraction coefficient d_1.","category":"page"},{"location":"basis/#Dependent-Variable-as-Parameter","page":"Basis Sets","title":"Dependent Variable as Parameter","text":"","category":"section"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"Another control the user can have on the parameters in Quiqbox is to not only store the each unique parameter as an independent variable, but also as a dependent variable, i.e., a math function of some more primitive independent variable:","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"pb1 = gf4.xpn\n\npb1.map","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"The map field of a ParamBox stores a RefValue{<:Function}, referencing the Function that maps the actual stored value to another value through math operations (R to R). The output value can be access through syntax (). In default the the variable is mapped to itself:","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"pb1[] == pb1()","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"Since ParamBox is a mutable struct you can redefine your own mapping Functions for the parameters; thus gain another layer of control over the basis set parameters:","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"squareXpn(x) = x^2\n\npb1.map = Ref(squareXpn)\n\npb1[] = 3\n\npb1()","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"You can get a clearer view of the mapping relations in a ParamBox using getVar","category":"page"},{"location":"basis/","page":"Basis Sets","title":"Basis Sets","text":"getVar(pb1, includeMapping=true)","category":"page"},{"location":"SCF/#Self-Consistent-Field-Methods","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"","category":"section"},{"location":"SCF/#Hartree-Fock-Methods","page":"Self-Consistent Field Methods","title":"Hartree-Fock Methods","text":"","category":"section"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"Quiqbox supports basic Hartree-Fock methods with various configurations: ","category":"page"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"Items Options\nHF Types Restricted Closed-Shell (RHF), Unrestricted Open-Shell (UHF)\nInitial Guesses Core Hamiltonian, Generalized Wolfsberg-Helmholtz, User-defined Coefficient Matrix\nConverging Methods Direct Diagonalization, DIIS, EDIIS, ADIIS, Combinations of Multi-methods\nDIIS-type Method Solvers Lagrange Multiplier Solver, ADMM Solver","category":"page"},{"location":"SCF/#Basic-Hartree-Fock","page":"Self-Consistent Field Methods","title":"Basic Hartree-Fock","text":"","category":"section"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"To run a Hartree-Fock method, the lines of code required in Quiqbox is as simple as below:","category":"page"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"push!(LOAD_PATH,\"../../src/\") # hide\nusing Quiqbox # hide\n\nnuc = [\"H\", \"H\"];\n\nnucCoords = [[-0.7, 0.0, 0.0], [0.7, 0.0, 0.0]];\n\nbs = genBasisFunc.(nucCoords, (\"STO-3G\", \"H\") |> Ref) |> flatten\n\nresRHF = runHF(bs, nuc, nucCoords, HFtype=:RHF)\n\n@show resRHF.E0HF resRHF.C resRHF.Emo resRHF.occu","category":"page"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"After the SCF procedure, one can also easily store the result in a Molecule for further data processing such as generating Molden files.","category":"page"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"mol = Molecule(bs, nuc, nucCoords, resRHF);","category":"page"},{"location":"SCF/#Flexible-core-functions","page":"Self-Consistent Field Methods","title":"Flexible core functions","text":"","category":"section"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"If the user want to fine-tune part of the SCF iteration steps to achieve better performance, Quiqbox also has provided various more flexible core functions that allows user to customize the HF methods:","category":"page"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"SCFconfig","category":"page"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"runHFcore","category":"page"},{"location":"SCF/#Standalone-Integral-Functions","page":"Self-Consistent Field Methods","title":"Standalone Integral Functions","text":"","category":"section"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"Quiqbox also provides several integral functions that can be used independently of any SCF functions if intended.Those functions are wrappers of binary Julia library package (JLL) libcint_jll, with more simplistic signature and versatile functionality.","category":"page"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"overlap","category":"page"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"overlaps","category":"page"},{"location":"SCF/#One-electron-functions","page":"Self-Consistent Field Methods","title":"One-electron functions","text":"","category":"section"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"nucAttraction","category":"page"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"nucAttractions","category":"page"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"elecKinetic","category":"page"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"elecKinetics","category":"page"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"Quiqbox.oneBodyBFTensor","category":"page"},{"location":"SCF/#Two-electron-functions","page":"Self-Consistent Field Methods","title":"Two-electron functions","text":"","category":"section"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"eeInteraction","category":"page"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"eeInteractions","category":"page"},{"location":"SCF/","page":"Self-Consistent Field Methods","title":"Self-Consistent Field Methods","text":"Quiqbox.twoBodyBFTensor","category":"page"},{"location":"coreType/#Core-Types","page":"Core Types","title":"Core Types","text":"","category":"section"},{"location":"coreType/","page":"Core Types","title":"Core Types","text":"ParamBox{V, T}","category":"page"},{"location":"coreType/#Quiqbox.ParamBox","page":"Core Types","title":"Quiqbox.ParamBox","text":"ParamBox{V, T} <: DifferentiableParameter{ParamBox, T}\n\nParameter container that enables parameter differentiations.\n\n≡≡≡ Field(s) ≡≡≡\n\ndata::T: Stored parameter. It can be accessed through syntax [].\n\ncanDiff::Bool: Indicator that whether this container should be marked as differentiable.\n\n≡≡≡ Initialization Method(s) ≡≡≡\n\nParamBox(data::Number, name::Symbol=:undef; mapFunction::Function=itself, \n canDiff::Bool=true, paramType::Type{T}=Float64) -> \nParamBox{T}\n\nname specifies the name of the variable to be stored, which helps with symbolic representation and automatic differentiation.\n\nmapFunction is for the case to the store the variable that is a dependent variable (math function) f(x) of another variable x which is the actually stored in the struct, and linked to the f(x) via the mapFunction. After initializing the ParamBox, e.g pb1 = ParamBox(x, mapFunction=f), pb.data[] returns x, and pb.data() returns f(x).\n\ncanDiff is used to mark the (independent) variable as differentiable when set to true, otherwise the ParamBox will be ignored in any differentiation process.\n\nparamType specifies the type of the stored variable to avoid data type mutation.\n\n≡≡≡ Example(s) ≡≡≡\n\njulia> Quiqbox.ParamBox(1.0)\nParamBox{Float64}(1.0)[∂]\n\nNOTE: When the parameter inside x::ParamBox is marked as \"differentiable\" (a.k.a. x.canDiff=true), \"[∂]\" in the printing info is in color green, otherwise it's in grey.\n\n\n\n\n\n","category":"type"},{"location":"coreType/","page":"Core Types","title":"Core Types","text":"GaussFunc","category":"page"},{"location":"coreType/#Quiqbox.GaussFunc","page":"Core Types","title":"Quiqbox.GaussFunc","text":"GaussFunc <: AbstractGaussFunc\n\nA single contracted gaussian function struct from package Quiqbox.\n\n≡≡≡ Field(s) ≡≡≡\n\nxpn::ParamBox{:𝛼, Float64}:Exponent of the gaussian function.\n\ncon::ParamBox{:𝑑, Float64}: Contraction coefficient of the gaussian function.\n\nparam::NTuple{2, ParamBox}: A Tuple that stores the ParamBoxs of xpn and con.\n\n≡≡≡ Initialization Method(s) ≡≡≡\n\nGaussFunc(xpn::Real, con::Real) -> GaussFunc\n\nGenerate a GaussFunc given the specified exponent and contraction coefficient.\n\n≡≡≡ Example(s) ≡≡≡\n\njulia> GaussFunc(5.0, 1.0)\nGaussFunc(xpn=ParamBox{:α, Float64}(5.0)[α][∂], con=ParamBox{:d, Float64}(1.0)[d][∂])\n\n\n\n\n\n","category":"type"},{"location":"coreType/","page":"Core Types","title":"Core Types","text":"BasisFunc{S, GN}","category":"page"},{"location":"coreType/#Quiqbox.BasisFunc","page":"Core Types","title":"Quiqbox.BasisFunc","text":"BasisFunc{S, GN} <: FloatingGTBasisFunc{S, GN, 1}\n\nA (floating) basis function with the center attached to it instead of any nucleus.\n\n≡≡≡ Field(s) ≡≡≡\n\ncenter::NTuple{3, ParamBox}: The center coordinate in form of a 3-element ParamBox-type Tuple.\n\ngauss::NTuple{N, GaussFunc}: Gaussian functions within the basis function.\n\nsubshell::String: The subshell (angular momentum symbol).\n\nijk::Tuple{String}: Cartesian representation (pseudo-quantum number) of the angular momentum orientation. E.g., s would be (\"X⁰Y⁰Z⁰\")\n\nnormalizeGTO::Bool: Whether the GTO::GaussFunc will be normalized in calculations.\n\nparam::Tuple{Vararg{<:ParamBox}}: All the tunable parameters::ParamBox stored in the BasisFunc.\n\n≡≡≡ Initialization Method(s) ≡≡≡\n\nBasisFunc(center::Tuple{Vararg{<:ParamBox}}, gauss::Array{<:GaussFunc, 1}, \n ijk::Array{Int, 1}, normalizeGTO::Bool) -> BasisFunc{S, GN}\n\n\n\n\n\n","category":"type"},{"location":"coreType/","page":"Core Types","title":"Core Types","text":"BasisFuncs{S, GN, ON}","category":"page"},{"location":"coreType/#Quiqbox.BasisFuncs","page":"Core Types","title":"Quiqbox.BasisFuncs","text":"BasisFuncs{S, GN, ON} <: FloatingGTBasisFunc{S, GN, ON}\n\nA group of basis functions with identical parameters except they have different subshell under the specified angular momentum. It has the same fields as BasisFunc and specifically, for ijk, instead of being a 1-element Tuple, the size of the Tuple is the size of the corresponding subshell.\n\n\n\n\n\n","category":"type"},{"location":"coreType/","page":"Core Types","title":"Core Types","text":"GTBasis{N, BT}","category":"page"},{"location":"coreType/#Quiqbox.GTBasis","page":"Core Types","title":"Quiqbox.GTBasis","text":"GTBasis{N, BT} <: BasisSetData{N}\n\nThe container to store basis set information.\n\n≡≡≡ Field(s) ≡≡≡\n\nbasis::Array{<:AbstractFloatingGTBasisFunc, 1}: Basis set. S::Array{<:Number, 2}: Overlap matrix. Te::Array{<:Number, 2}: Kinetic energy part of the electronic core Hamiltonian. eeI::Array{<:Number, 4}: Electron-electron interaction. getVne::Function: A Function that returns the nuclear attraction Hamiltonian when nuclei::Array{String, 1} and their coordinates::Array{<:AbstractArray, 1} are input. getHcore::Function: Similar as getVne, a Function that returns the core Hamiltonian when nuclei and their coordinates of same DataType are input.\n\n≡≡≡ Initialization Method(s) ≡≡≡\n\nGTBasis(basis::Vector{<:AbstractFloatingGTBasisFunc}, S::Matrix{<:Number}, \n Te::Matrix{<:Number}, eeI::Array{<:Number, 4}) -> \nGTBasis\n\n\n\n\n\n","category":"type"},{"location":"coreType/","page":"Core Types","title":"Core Types","text":"GridBox{NX, NY, NZ}","category":"page"},{"location":"coreType/#Quiqbox.GridBox","page":"Core Types","title":"Quiqbox.GridBox","text":"GridBox{NX, NY, NZ} <: SemiMutableParameter{GridBox, Float64}\n\nA struct that stores coordinates of grid points in terms of both Vectors and ParamBoxs.\n\n≡≡≡ Field(s) ≡≡≡\n\nnum::Int: Total number of the grid points.\n\nspacing::Float64: The edge length of the grid box.\n\nbox::Vector{NTuple{3, ParamBox}}: The coordinates of grid points in terms of ParamBoxs.\n\ncoord::Array{Array{Float64, 1}, 1}: The coordinates of grid points in terms of Vectors.\n\n≡≡≡ Initialization Method(s) ≡≡≡\n\nGridBox(nGrids::NTuple{3, Int}, spacing::Real=10, \n centerCoord::Array{<:Real, 1}=[0.0,0.0,0.0];\n canDiff::Bool=true, index::Int=0) -> GridBox\n\nConstructor of a general GridBox that doesn't have to shape as a cube. nGrid is a 3-element Tuple that specifies the number of grids (number of grid points - 1) along 3 dimensions. spacing specifies the length between adjacent grid points. centerCoord specifies the geometry center coordinate of the box. canDiff determines whether the ParamBox should be marked as differentiable. index defines the index number for the actual parameter: spacing L, with the default value 0 it would be L₀.\n\n\n\n\n\n","category":"type"},{"location":"coreType/","page":"Core Types","title":"Core Types","text":"SCFconfig{N}","category":"page"},{"location":"coreType/#Quiqbox.SCFconfig","page":"Core Types","title":"Quiqbox.SCFconfig","text":"SCFconfig{N} <: ImmutableParameter{SCFconfig, Any}\n\nThe struct for SCF iteration configurations.\n\n≡≡≡ Field(s) ≡≡≡\n\nmethods::NTuple{N, Symbol}: The applied methods. The available methods are their configurations (in terms of keyword arguments):\n\nMethods Configuration(s) keyword argument(s) Default value(s)\n:DS Damping strength: [0,1] dampingStrength::Float64 0.0\n:DIIS, :EDIIS, :ADIIS Subspace size (>1); Coefficient solver(:ADMM-> ADMM solver, :LCM -> Lagrange solver) DIISsize::Int; solver::Symbol 15; :ADMM\n\nintervals: The stopping (skipping) thresholds for the required methods.\n\nmethodConfigs: The additional keywords arguments for each method stored as Tuples of Pairs.\n\noscillateThreshold: The threshold for oscillating convergence.\n\n≡≡≡ Initialization Method(s) ≡≡≡\n\nSCFconfig(methods::Vector{Symbol}, intervals::Vector{Float64}, \n configs::Dict{Int, <:Vector{<:Pair}}=Dict(1=>Pair[]);\n oscillateThreshold::Float64=1e-5) -> \nSCFconfig{N}\n\nmethods and intervals are the methods to be applied and their stopping (skipping) thresholds respectively; the length of those two Vectors should be the same. configs specifies the additional keyword arguments for each methods by a Pair of which the Int key i is for ith method and the pointed Vector{<:Pair} is the pairs of keyword arguments and their values respectively.\n\n≡≡≡ Example(s) ≡≡≡\n\njulia> SCFconfig([:SD, :ADIIS, :DIIS], [1e-4, 1e-12, 1e-13], Dict(2=>[:solver=>:LCM]) SCFconfig{3}((:SD, :ADIIS, :DIIS), (0.0001, 1.0e-12, 1.0e-13), ((), (:solver => :LCM,), ()), 1.0e-5)\n\n\n\n\n\n","category":"type"},{"location":"coreType/","page":"Core Types","title":"Core Types","text":"Quiqbox.HFtempVars{HFtype, N}","category":"page"},{"location":"coreType/#Quiqbox.HFtempVars","page":"Core Types","title":"Quiqbox.HFtempVars","text":"HFtempVars{HFtype, N} <: HartreeFockintermediateData\n\nThe container to store the intermediate values (only of the same spin configuration) for each iteration during the Hartree-Fock SCF procedure. \n\n≡≡≡ Field(s) ≡≡≡\n\nCs::Array{Array{T1, 2}, 1} where {Float64<:T1<:Float64}: Coefficient matrices.\n\nFs::Array{Array{T2, 2}, 1} where {Float64<:T2<:Float64}: Fock matrices\n\nDs::Array{Array{T3, 2}, 1} where {Float64<:T3<:Float64}: Density matrices corresponding to only spin configuration. For RHF each elements means (unconverged) 0.5*Dᵀ.\n\nEs::Array{Float64, 1}: Part of Hartree-Fock energy corresponding to only spin configuration. For RHF each element means (unconverged) 0.5*E0HF.\n\nshared.Dtots::Array{Array{T, 2}, 1} where {Float64<:T<:Float64}: The total density matrices.\n\nshared.Etots::Array{Float64, 1}: The total Hartree-Fock energy.\n\nNOTE: For UHF, there are 2 HFtempVars being updated during the SCF iterations, and change the field shared.Dtots or shared.Etots of one container will affect the other one's.\n\n\n\n\n\n","category":"type"},{"location":"coreType/","page":"Core Types","title":"Core Types","text":"Quiqbox.HFfinalVars{T, N, Nb}","category":"page"},{"location":"coreType/#Quiqbox.HFfinalVars","page":"Core Types","title":"Quiqbox.HFfinalVars","text":"HFfinalVars{T, N, Nb} <: HartreeFockFinalValue{T}\n\nThe container of the final values after a Hartree-Fock SCF procedure.\n\n≡≡≡ Field(s) ≡≡≡\n\nE0HF::Float64: Hartree-Fock energy of the electronic Hamiltonian. \n\nC::Union{Array{T1, 2}, NTuple{2, Array{T1, 2}}} where {Float64<:T1<:Float64}: Coefficient matrix(s) for one spin configuration.\n\nF::Union{Array{T2, 2}, NTuple{2, Array{T2, 2}}} where {Float64<:T2<:Float64}: Fock matrix(s) for one spin configuration.\n\nD::Union{Array{T3, 2}, NTuple{2, Array{T3, 2}}} where {Float64<:T3<:Float64}: Density matrix(s) for one spin configuration.\n\nEmo::Union{Array{Float64, 1}, NTuple{2, Array{Float64, 1}}}: Energies of molecular orbitals.\n\noccu::Union{Array{Int, 1}, NTuple{2, Array{Int, 1}}}: occupation numbers of molecular orbitals.\n\ntemp::Union{HFtempVars{T}, NTuple{2, HFtempVars{T}}} the intermediate values.\n\nisConverged::Bool: Whether the SCF procedure is converged in the end.\n\n\n\n\n\n","category":"type"},{"location":"coreType/","page":"Core Types","title":"Core Types","text":"Molecule{Nc, Ne, Nb}","category":"page"},{"location":"coreType/#Quiqbox.Molecule","page":"Core Types","title":"Quiqbox.Molecule","text":"Molecule{Nc, Ne, Nb} <:MolecularHartreeFockCoefficient{Nc, Ne}\n\nContainer for the information of a molecule.\n\n≡≡≡ Field(s) ≡≡≡\n\nnuc::Tuple{Vararg{String}}: Nuclei of the molecule.\n\nnucCoords::Tuple{Vararg{NTuple{3, Real}}}: The coordinates of the nuclei.\n\nNe::Int: The number of electrons.\n\norbital::Tuple{Vararg{MolOrbital}}: Molecular orbitals.\n\nbasis::Tuple{Vararg{FloatingGTBasisFunc}}: The basis set for the molecular orbitals.\n\nE0HF::Float64: Hartree-Fock energy of the electronic Hamiltonian from the basis set.\n\nEnnR::Float64: The nuclear-nuclear repulsion energy.\n\n≡≡≡ Initialization Method(s) ≡≡≡\n\nMolecule(basis::Array{FloatingGTBasisFunc, 1}, nuc::Array{String, 1}, \n nucCoords::Array{<:AbstractArray, 1}, Ne::Int, E0HF::Float64, \n Emos::Array{Float64, 1}, occus::Array{<:Real, 1}, C::Array{Float64, 2}, \n spins::Array{String, 1}, \n symms::Array{String, 1}=repeat([\"A\"], length(occus))) -> \nMolecule{Nc, Ne, Nb}\n\nEmos are the energies of corresponding molecular energies. occus are the occupation numbers of the orbitals. C is the coefficient matrix, which does not need to be a square matrix since the number of rows is the size of the (spatial) basis set whereas the number of the columns represents the number of molecular orbitals. spin specifies the spin functions of the orbitals, entries of which can be set to \"Alpha\" or \"Beta\". symms are symmetries of the orbitals where the default entry value is \"A\" for being antisymmetric.\n\n\n\n\n\n","category":"type"},{"location":"coreType/","page":"Core Types","title":"Core Types","text":"MolOrbital{N}","category":"page"},{"location":"coreType/#Quiqbox.MolOrbital","page":"Core Types","title":"Quiqbox.MolOrbital","text":"MolOrbital{N} <: AbstractMolOrbital\n\nStruct of molecular orbitals.\n\n≡≡≡ Field(s) ≡≡≡\n\nsymmetry::String: The symmetry of the orbital. The default value is \"A\" for being antisymmetric.\n\nenergy::Float64: Molecular energy.\n\nspin::String: Spin function of the orbital. Available values: \"Alpha\", \"Beta\".\n\noccupancy::Real: Occupation number.\n\norbitalCoeffs::NTuple{N, Float64}: coefficients of the basis functions to form the molecular orbital.\n\n≡≡≡ Initialization Method(s) ≡≡≡\n\nMolOrbital(energy::Float64, occupancy::Real, orbitalCoeffs::Array{Float64, 1}, \n spin::String=\"Alpha\", symmetry::String=\"A\") -> MolOrbital{N}\n\n\n\n\n\n","category":"type"},{"location":"optimization/#Parameter-Optimization","page":"Parameter Optimization","title":"Parameter Optimization","text":"","category":"section"},{"location":"optimization/#Selectively-Optimizing-Parameters","page":"Parameter Optimization","title":"Selectively Optimizing Parameters","text":"","category":"section"},{"location":"optimization/","page":"Parameter Optimization","title":"Parameter Optimization","text":"In the Basis Sets section we have briefly introduced the parameters in terms of ParamBox that are embedded in containers such as BasisFunc and BasisFuncs that are directly used to form a basis set. This means how we construct the basis set using the parameters will determine how large of a parameter space we have to optimize the basis set. For more information please refer to Constructing basis sets based on ParamBox. Here is a example to use GaussFunc and GridBox to quickly generate a grid-based basis set with only 3 actual parameters, 1 determines all the coordinates of basis function centers, the other 2 are the only exponent coefficient alpha and contraction coefficient d.","category":"page"},{"location":"optimization/","page":"Parameter Optimization","title":"Parameter Optimization","text":"push!(LOAD_PATH,\"../../src/\") # hide\nusing Quiqbox # hide\n\nnuc = [\"H\", \"H\"]\n\nnucCoords = [[-0.7,0.0,0.0], [0.7,0.0,0.0]]\n\ngrid = GridBox(1, 1.5)\n\ngf1 = GaussFunc(0.7,1)\n\nbs = genBasisFunc.(grid.box, Ref([gf1]))","category":"page"},{"location":"optimization/","page":"Parameter Optimization","title":"Parameter Optimization","text":"After constructing the basis set, we need to use uniqueParams! to mark all the unique parameters that can also be optimized later:","category":"page"},{"location":"optimization/","page":"Parameter Optimization","title":"Parameter Optimization","text":"pars = uniqueParams!(bs, filterMapping=true)","category":"page"},{"location":"optimization/","page":"Parameter Optimization","title":"Parameter Optimization","text":"As expected, there are indeed only 3 unique tunable parameters despite the basis set already has 8 basis functions. (note that keyword argument filterMapping in uniqueParams! is set to true because we want the function to only return independent parameters) However, if we take a step further, we can remove d since each basis function here is just a single Gaussian function, which means the contraction coefficient won't affect the optimization results. Thus, input the intent parameters (along with other necessary arguments) into the Quiqbox function optimizeParams! and we can sit and wait for the optimization iterations to complete.","category":"page"},{"location":"optimization/","page":"Parameter Optimization","title":"Parameter Optimization","text":"parsPartial = [pars[1], pars[3]]\n\noptimizeParams!(bs, parsPartial, nuc, nucCoords, maxSteps=20);","category":"page"},{"location":"optimization/","page":"Parameter Optimization","title":"Parameter Optimization","text":"After the optimization, you can check the basis set and we can see the parameters inside of it is also changed. This is because the ! in the function names indicates that optimizeParams! is a function that modifies its arguments.","category":"page"},{"location":"optimization/","page":"Parameter Optimization","title":"Parameter Optimization","text":"getParams(bs)","category":"page"},{"location":"optimization/","page":"Parameter Optimization","title":"Parameter Optimization","text":"It you want to go through the above example by yourself, you can also find the script here.","category":"page"},{"location":"optimization/#Store-Customized-Basis-Set","page":"Parameter Optimization","title":"Store Customized Basis Set","text":"","category":"section"},{"location":"optimization/","page":"Parameter Optimization","title":"Parameter Optimization","text":"Now, if you want, you can also store the information of the basis set in an container called GTBasis that not only includes the basis set, but also the related 1-electron and 2-electron integral values (nuclear attraction is not stored). GTBasis can also be accepted as an argument for runHF to save the time of calculating the integrals of the basis set.","category":"page"},{"location":"optimization/","page":"Parameter Optimization","title":"Parameter Optimization","text":"GTBasis(bs)","category":"page"},{"location":"coreFunction/#Core-Functions","page":"Core Functions","title":"Core Functions","text":"","category":"section"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"genBasisFunc","category":"page"},{"location":"coreFunction/#Quiqbox.genBasisFunc","page":"Core Functions","title":"Quiqbox.genBasisFunc","text":"genBasisFunc(args..., kws...) -> BasisFunc\ngenBasisFunc(args..., kws...) -> BasisFuncs\ngenBasisFunc(args..., kws...) -> collection\n\nConstructor of BasisFunc and BasisFuncs, but it also returns different kinds of collections of them based on the applied methods.\n\n≡≡≡ Method 1 ≡≡≡\n\ngenBasisFunc(coord::AbstractArray, gs::Array{<:GaussFunc, 1}, \n ijkOrijks::Union{Array{Int, 1}, Array{Array{Int, 1}, 1}}; \n normalizeGTO::Bool=false)\n\nijkOrijks is the Array of the pseudo-quantum number(s) to specify the angular momentum(s). E.g., s is [0,0,0] and p is [[1,0,0], [0,1,0], [0,0,1]].\n\n≡≡≡ Example(s) ≡≡≡\n\njulia> genBasisFunc([0,0,0], GaussFunc(2,1), [0,1,0])\nBasisFunc{:P, 1}(gauss, subshell, center)[X⁰Y¹Z⁰][0.0, 0.0, 0.0]\n\n≡≡≡ Method 2 ≡≡≡\n\ngenBasisFunc(coord::AbstractArray, gs::Array{<:GaussFunc, 1}, subshell::String=\"S\"; \n ijkFilter::Array{Bool, 1}=fill(true, SubshellDimList[subshell]), \n normalizeGTO::Bool=false)\n\n≡≡≡ Example(s) ≡≡≡\n\njulia> genBasisFunc([0,0,0], GaussFunc(2,1), \"S\")\nBasisFunc{:S, 1}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]\n\njulia> genBasisFunc([0,0,0], GaussFunc(2,1), \"P\")\nBasisFuncs{:P, 1, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0]\n\n≡≡≡ Method 3 ≡≡≡\n\ngenBasisFunc(coord::AbstractArray, gExpsANDgCons::NTuple{2, Array{<:Real, 1}}, \n subshell=\"S\"; kw...)\n\nInstead of directly inputting GaussFunc, one can also input a 2-element Tuple of the exponent(s) and contraction coefficient(s) corresponding to the same GaussFunc(s).\n\n≡≡≡ Example(s) ≡≡≡\n\njulia> genBasisFunc([0,0,0], (2, 1), \"P\")\nBasisFuncs{:P, 1, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0]\n\njulia> genBasisFunc([0,0,0], ([2, 1.5], [1, 0.5]), \"P\")\nBasisFuncs{:P, 2, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0]\n\n≡≡≡ Method 4 ≡≡≡\n\ngenBasisFunc(center, BSKeyANDnuc::Array{Tuple{String, String}, 1})\n\nIf the user wants to construct existed atomic basis set(s), they can use the (Array of) (BS_name, Atom_name) as the second input. If the atom is omitted, then basis set for H is used.\n\n≡≡≡ Example(s) ≡≡≡\n\njulia> genBasisFunc([0,0,0], (\"STO-3G\", \"Li\"))\n3-element Vector{Quiqbox.FloatingGTBasisFunc}:\nBasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]\nBasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]\nBasisFuncs{:P, 3, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0]\n\njulia> genBasisFunc([0,0,0], \"STO-3G\")\n1-element Vector{Quiqbox.FloatingGTBasisFunc}:\nBasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]\n\njulia> genBasisFunc([0,0,0], [\"STO-2G\", \"STO-3G\"])\n2-element Vector{Quiqbox.FloatingGTBasisFunc}:\nBasisFunc{:S, 2}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]\nBasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]\n\njulia> genBasisFunc([0,0,0], [(\"STO-2G\", \"He\"), (\"STO-3G\", \"O\")])\n4-element Vector{Quiqbox.FloatingGTBasisFunc}:\nBasisFunc{:S, 2}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]\nBasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]\nBasisFunc{:S, 3}(gauss, subshell, center)[X⁰Y⁰Z⁰][0.0, 0.0, 0.0]\nBasisFuncs{:P, 3, 3}(gauss, subshell, center)[3/3][0.0, 0.0, 0.0]\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"centerOf","category":"page"},{"location":"coreFunction/#Quiqbox.centerOf","page":"Core Functions","title":"Quiqbox.centerOf","text":"centerOf(bf::FloatingGTBasisFunc) -> Array{<:Real, 1}\n\nReturn the center coordinate of the input FloatingGTBasisFunc.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"GTBasis(basis::Vector{<:Quiqbox.AbstractFloatingGTBasisFunc})","category":"page"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"decomposeBasisFunc","category":"page"},{"location":"coreFunction/#Quiqbox.decomposeBasisFunc","page":"Core Functions","title":"Quiqbox.decomposeBasisFunc","text":"decomposeBasisFunc(bf::FloatingGTBasisFunc; splitGaussFunc::Bool=false) -> \nArray{<:FloatingGTBasisFunc, 1}\n\nDecompose a FloatingGTBasisFunc into a Vector of BasisFuncs. If splitGaussFunc is true, then each BasisFunc in the returned Vector only contains 1 GaussFunc.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"basisSize","category":"page"},{"location":"coreFunction/#Quiqbox.basisSize","page":"Core Functions","title":"Quiqbox.basisSize","text":"basisSize(subshell::Union{String, Array{String, 1}}) -> Tuple\n\nReturn the size (number of orbitals) of each subshell.\n\n\n\n\n\nbasisSize(basisFunctions) -> Tuple\n\nReturn the numbers of orbitals of the input basis function(s).\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"genBasisFuncText","category":"page"},{"location":"coreFunction/#Quiqbox.genBasisFuncText","page":"Core Functions","title":"Quiqbox.genBasisFuncText","text":"genBasisFuncText(bf::FloatingGTBasisFunc; norm=1.0, printCenter=true) -> String\n\nGenerate a String of the text of the input FloatingGTBasisFunc. norm is the additional normalization factor. If printCenter is true, the center coordinate will be added on the first line of the String.\n\n\n\n\n\ngenBasisFuncText(bs::Array{<:FloatingGTBasisFunc, 1}; \n norm=1.0, printCenter=true, groupCenters::Bool=true) -> \nString\n\nGenerate a String of the text of the input basis set. norm is the additional normalization factor. If printCenter is true, the center coordinate will be added on the first line of the String. groupCenters determines whether the function will group the basis functions with same center together.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"genBFuncsFromText","category":"page"},{"location":"coreFunction/#Quiqbox.genBFuncsFromText","page":"Core Functions","title":"Quiqbox.genBFuncsFromText","text":"genBFuncsFromText(content::String; adjustContent::Bool=false, \n adjustFunction::F=sciNotReplace, \n excludeFirstNlines=0, excludeLastNlines=0, \n center::Union{AbstractArray, \n Tuple{Vararg{<:ParamBox}}, \n Missing}=missing) where {F<:Function} -> \nArray{<:FloatingGTBasisFunc, 1}\n\nGenerate the basis set from a String of basis set in Gaussian format or the String output from genBasisFuncText. For the former, adjustContent needs to be set to true. adjustFunction is only applied when adjustContent=true, which in default is a function used to detect and convert the format of the scientific notation in the String.\n\nexcludeFirstNlines and excludeLastNlines are used to exclude first or last few lines of the String if intent. genBFuncsFromText can't directly read center coordinate information from the String even if it's included, so argument center is used to assign a coordinate for all the basis functions from the String; it can be a Vector, a Tuple of the positional ParamBoxs, or simply (in default) set to missing for later assignment.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"assignCenter!","category":"page"},{"location":"coreFunction/#Quiqbox.assignCenter!","page":"Core Functions","title":"Quiqbox.assignCenter!","text":"assignCenter!(center::AbstractArray, b::FloatingGTBasisFunc) -> NTuple{3, ParamBox}\n\nAssign a new coordinate to the center of the input FloatingGTBasisFunc. Also return the altered center.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"uniqueParams!","category":"page"},{"location":"coreFunction/#Quiqbox.uniqueParams!","page":"Core Functions","title":"Quiqbox.uniqueParams!","text":"uniqueParams!(bs; onlyDifferentiable::Bool=false, ignoreContainerType::Bool=false, \n filter::Bool=true, filterMapping::Bool=false) -> Array{<:ParamBox, 1}\n\nMark the parameters (ParamBox) in input bs which can a Vector of GaussFunc or FloatingGTBasisFunc. The identical parameters will be marked with same index.\n\n=== Keyword argument(s) ===\n\nonlyDifferentiable: Determine whether ignore un-differentiable parameters.\n\nignoreContainerType: If set to true, then only the field data of the ParamBoxs will be compared to determine whether each ParamBox are unique. \n\nfilter: Determine whether filter out the identical ParamBoxs and only return the unique ones.\n\nfilterMapping: Determine wether return the ParamBoxs with identical fields except the map field. When filter=false, this argument is automatically overwritten to be false.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"getVar","category":"page"},{"location":"coreFunction/#Quiqbox.getVar","page":"Core Functions","title":"Quiqbox.getVar","text":"getVar(pb::ParamBox; markUndifferentiable::Bool=false, includeMapping::Bool=false) -> \nArray{<:Pair{Symbolics.Num, <:Number}, 1}\n\nReturn a 1-element Vector of Pair to show the Symbol::Symbolics.Num of the stored variable and the corresponding values.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"getVars","category":"page"},{"location":"coreFunction/#Quiqbox.getVars","page":"Core Functions","title":"Quiqbox.getVars","text":"getVars(obj::Union{GaussFunc, BasisFunc}; markUndifferentiable::Bool=false, \n includeMapping::Bool=false) -> Array{<:Pair, 1}\n\ngetVars(collection::Array{<:Union{GaussFunc, BasisFunc, ParamBox}, 1}; \n markUndifferentiable::Bool=false, includeMapping::Bool=false) -> \nArray{<:Pair, 1}\n\nReturn a Vector of Pair to indicate the mapping relations of and between the variables stored in the ParamBoxs in the given input.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"expressionOf","category":"page"},{"location":"coreFunction/#Quiqbox.expressionOf","page":"Core Functions","title":"Quiqbox.expressionOf","text":"expressionOf(gf::GaussFunc; markUndifferentiable::Bool=false, \n substituteValue::Bool=false) -> Symbolics.Num\n\nexpressionOf(gf::FloatingGTBasisFunc; markUndifferentiable::Bool=false, \n substituteValue::Bool=false) -> Array{<:Symbolics.Num, 2}\n\nReturn the expression of a given GaussFunc or FloatingGTBasisFunc. When the latter is the input, a Matrix is returned of which the row(s) is(are) one orbital with the expression(s) of its Gaussian function(s) as entry(entries).\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"GridBox(nGridPerEdge::Int, spacing::Real=10, \n centerCoord::Array{<:Real, 1}=[0.0,0.0,0.0]; \n canDiff::Bool=true, index::Int=0)","category":"page"},{"location":"coreFunction/#Quiqbox.GridBox","page":"Core Functions","title":"Quiqbox.GridBox","text":"GridBox(nGridPerEdge::Int, spacing::Real=10, \n centerCoord::Array{<:Real, 1}=[0.0,0.0,0.0]; \n canDiff::Bool=true, index::Int=0) -> GridBox\n\nMethod of generating a cubic GridBox. nGridPerEdge specifies the number of grids (number of grid points - 1) along each dimension.spacing specifies the length between adjacent grid points. centerCoord specifies the geometry center coordinate of the box. canDiff determines whether the ParamBox should be marked as differentiable. index defines the index number for the actual parameter: spacing L, with the default value 0 it would be L₀.\n\n\n\n\n\n","category":"type"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"gridPoint","category":"page"},{"location":"coreFunction/#Quiqbox.gridPoint","page":"Core Functions","title":"Quiqbox.gridPoint","text":"gridPoint(coord::Array{<:Real, 1}) -> NTuple{3, ParamBox}\n\nGenerate a Tuple of coordinate ParamBoxs given a Vector.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"runHF","category":"page"},{"location":"coreFunction/#Quiqbox.runHF","page":"Core Functions","title":"Quiqbox.runHF","text":"runHF(bs::Union{BasisSetData, Array{<:AbstractFloatingGTBasisFunc, 1}}, \n nuc::Array{String, 1}, \n nucCoords::Array{<:AbstractArray, 1}, \n N::Union{NTuple{2, Int}, Int}=getCharge(nuc); \n initialC::Union{Array{T, 2}, NTuple{2, Array{T, 2}}, Symbol}=:GWH, \n HFtype::Symbol=:RHF, \n scfConfig::SCFconfig=defaultSCFconfig, \n earlyTermination::Bool=true, \n printInfo::Bool=true, \n maxSteps::Int=1000) where {Float64<:T<:Float64} -> HFfinalVars\n\nMain function to run Hartree-Fock in Quiqbox.\n\n=== Positional argument(s) ===\n\nbs::Union{BasisSetData, Array{<:AbstractFloatingGTBasisFunc, 1}}: Basis set.\n\nnuc::Array{String, 1}: The element symbols of the nuclei for the Molecule.\n\nnucCoords::Array{<:AbstractArray, 1}: The coordinates of the nuclei.\n\nN::Union{NTuple{2, Int}, Int}: The total number of electrons or the numbers of electrons with different spins respectively.\n\n=== Keyword argument(s) ===\n\ninitialC::Union{Array{T, 2}, NTuple{2, Array{T, 2}}, Symbol}: Initial guess of the coefficient matrix(s) C of the molecular orbitals.\n\nHFtype::Symbol: Hartree-Fock type. Available values are :RHF and :UHF.\n\nscfConfig::SCFconfig: SCF iteration configuration.\n\nearlyTermination::Bool: Whether automatically early terminate (skip) a convergence method when its performance becomes unstable or poor.\n\nprintInfo::Bool: Whether print out the information of each iteration step.\n\nmaxSteps::Int: Maximum allowed iteration steps regardless of whether the SCF converges.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"runHFcore","category":"page"},{"location":"coreFunction/#Quiqbox.runHFcore","page":"Core Functions","title":"Quiqbox.runHFcore","text":"runHFcore(N::Union{NTuple{2, Int}, Int}, \n Hcore::Array{T1, 2}, \n HeeI::Array{T2, 4}, \n S::Array{T3, 2}, \n X::Array{T4, 2}=getX(S), \n C::Union{Array{T, 2}, NTuple{2, Array{T, 2}}, Symbol}=guessC(S, Hcore; X);\n HFtype::Symbol=:RHF, \n scfConfig::SCFconfig{L}, \n earlyTermination::Bool=true, \n printInfo::Bool=true, \n maxSteps::Int=1000) where {Float64<:T1<:Float64, \n Float64<:T2<:Float64, \n Float64<:T3<:Float64, \n Float64<:T4<:Float64, \n Float64<:T5<:Float64, L}\n\nThe core function of runHF.\n\n=== Positional argument(s) ===\n\nN::Union{NTuple{2, Int}, Int}: The total number of electrons or the numbers of electrons with different spins respectively.\n\nHcore::Array{T1, 2}: Core Hamiltonian of electronic Hamiltonian.\n\nHeeI::Array{T2, 4}: The electron-electron interaction Hamiltonian which includes both the Coulomb interactions and the Exchange Correlations.\n\nS::Array{T3, 2}: Overlap matrix of the corresponding basis set.\n\nX::Array{T4, 2}: Orthogonal transformation matrix of S. Default value is S^(-0.5).\n\nC::Union{Array{T, 2}, NTuple{2, Array{T, 2}}, Symbol}: Initial guess of the coefficient matrix(s) C of the molecular orbitals.\n\n=== Keyword argument(s) ===\n\nHFtype::Symbol: Hartree-Fock type. Available values are :RHF and :UHF.\n\nscfConfig::SCFconfig: SCF iteration configuration.\n\nearlyTermination::Bool: Whether automatically early terminate (skip) a convergence method when its performance becomes unstable or poor.\n\nprintInfo::Bool: Whether print out the information of each iteration step.\n\nmaxSteps::Int: Maximum allowed iteration steps regardless of whether the SCF converges.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"Molecule(basis::Array{<:Quiqbox.FloatingGTBasisFunc, 1}, nuc::Array{String, 1}, \n nucCoords::Array{<:AbstractArray, 1}, HFfVars::Quiqbox.HFfinalVars)","category":"page"},{"location":"coreFunction/#Quiqbox.Molecule-Tuple{Vector{var\"#s30\"} where var\"#s30\"<:Quiqbox.FloatingGTBasisFunc, Vector{String}, Vector{var\"#s29\"} where var\"#s29\"<:AbstractArray, Quiqbox.HFfinalVars}","page":"Core Functions","title":"Quiqbox.Molecule","text":"Molecule(basis::Array{<:FloatingGTBasisFunc, 1}, nuc::Array{String, 1}, \n nucCoords::Array{<:AbstractArray, 1}, HFfVars::HFfinalVars) -> Molecule\n\nConstruct a Molecule from a basis set, nuclei information, and the result from the corresponding Hartree-Fock SCF procedure, specifically a HFfinalVars struct.\n\n\n\n\n\n","category":"method"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"getMolOrbitals","category":"page"},{"location":"coreFunction/#Quiqbox.getMolOrbitals","page":"Core Functions","title":"Quiqbox.getMolOrbitals","text":"getMolOrbitals(ens::Array{Float64, 1}, occus::Array{<:Real, 1}, C::Matrix{Float64}, \n spins::Array{String, 1}, \n symms::Array{String, 1}=repeat([\"A\"], length(occus))) -> \nTuple{Vararg{getMolOrbitals}}\n\nA function that returns the molecular orbitals.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"nnRepulsions","category":"page"},{"location":"coreFunction/#Quiqbox.nnRepulsions","page":"Core Functions","title":"Quiqbox.nnRepulsions","text":"nnRepulsions(nuc::Array{String, 1}, nucCoords::Array{<:AbstractArray, 1}) -> Float64\n\nCalculate the nuclear-nuclear repulsion energy given the nuclei and their coordinates of a molecule.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"optimizeParams!","category":"page"},{"location":"coreFunction/#Quiqbox.optimizeParams!","page":"Core Functions","title":"Quiqbox.optimizeParams!","text":"optimizeParams!(bs::Array{<:FloatingGTBasisFunc, 1}, pbs::Array{<:ParamBox, 1},\n nuc::Array{String, 1}, nucCoords::Array{<:AbstractArray, 1}, \n Ne::Union{NTuple{2, Int}, Int}=getCharge(nuc);\n Etarget::Float64=NaN, threshold::Float64=1e-4, maxSteps::Int=2000, \n printInfo::Bool=true, GDmethod::F1=gradDescent!, HFtype::Symbol=:RHF, \n ECmethod::F2=Quiqbox.defaultECmethod) where \n {F1<:Function, F2<:Function} -> \nEs::Array{Float64, 1}, pars::Array{Float64, 2}, grads::Array{Float64, 2}\n\nThe main function to optimize the parameters of a given basis set.\n\n=== Positional argument(s) ===\n\nbs::Array{<:FloatingGTBasisFunc, 1}: Basis set.\n\npbs::Array{<:ParamBox, 1}: The parameters to be optimized that are extracted from the basis set.\n\nnuc::Array{String, 1}: The nuclei of the molecule.\n\nnucCoords::Array{<:AbstractArray, 1}: The nuclei coordinates.\n\nNe::Union{NTuple{2, Int}, Int}: The total number of electrons or the numbers of electrons with different spins respectively.\n\n=== Keyword argument(s) ===\n\nEtarget::Float64: The target Hartree-Hock energy intent to achieve.\n\nthreshold::Float64: The threshold for the convergence when evaluating difference between the latest two energies.\n\nmaxSteps::Int: Maximum allowed iteration steps regardless of whether the optimization iteration converges.\n\nprintInfo::Bool: Whether print out the information of each iteration step.\n\nGDmethod::F1: Applied gradient descent Function.\n\nHFtype::Symbol: Hartree-Fock type. Available values are :RHF and :UHF.\n\nECmethod::F2: The Function used to update Hartree-Fock energy and coefficient matrix(s) during the optimization iterations. === Keyword argument(s) ===\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"updateParams!","category":"page"},{"location":"coreFunction/#Quiqbox.updateParams!","page":"Core Functions","title":"Quiqbox.updateParams!","text":"updateParams!(pbs::Array{<:ParamBox, 1}, grads::Array{<:Real, 1}; \n method::F=gradDescent!) where {F<:Function} -> Array{<:ParamBox, 1}\n\nGiven a Vector of parameters::ParamBox and its gradients with respect to each parameter, update the ParamBoxs and return the updated values.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"gradDescent!","category":"page"},{"location":"coreFunction/#Quiqbox.gradDescent!","page":"Core Functions","title":"Quiqbox.gradDescent!","text":"gradDescent!(pars::Vector{<:Real}, grads::Vector{<:Real}, η=0.001) -> \npars::Vector{<:Real}\n\nDefault gradient descent method in used in Quiqbox.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"overlap","category":"page"},{"location":"coreFunction/#Quiqbox.overlap","page":"Core Functions","title":"Quiqbox.overlap","text":"overlap(fb1::AbstractFloatingGTBasisFunc, fb2::AbstractFloatingGTBasisFunc) -> \nArray{Float64, 2}\n\nReturn the orbital overlap matrix (an N×N Matrix where N is the number of spatial orbitals) given 2 basis functions.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"overlaps","category":"page"},{"location":"coreFunction/#Quiqbox.overlaps","page":"Core Functions","title":"Quiqbox.overlaps","text":"overlaps(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}) -> Array{Float64, 2}\n\nReturn the orbital overlap matrix (an N×N Matrix where N is the number of spatial orbitals) given a basis set in the form of an Array.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"nucAttraction","category":"page"},{"location":"coreFunction/#Quiqbox.nucAttraction","page":"Core Functions","title":"Quiqbox.nucAttraction","text":"nucAttraction(fb1::AbstractFloatingGTBasisFunc, fb2::AbstractFloatingGTBasisFunc, \n nuc::Array{String, 1}, nucCoords::Array{<:AbstractArray, 1}) -> \nArray{Float64, 2}\n\nReturn the nuclear attraction matrix (an N×N Matrix where N is the number of spatial orbitals) given 2 basis functions, and the nuclei with their coordinates (in atomic unit).\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"nucAttractions","category":"page"},{"location":"coreFunction/#Quiqbox.nucAttractions","page":"Core Functions","title":"Quiqbox.nucAttractions","text":"nucAttractions(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}, nuc::Array{String, 1}, \n nucCoords::Array{<:AbstractArray, 1}) -> \nArray{Float64, 2}\n\nReturn the nuclear attraction matrix (an N×N Matrix where N is the number of spatial orbitals) given a basis set in the form of an Array, and the nuclei with their coordinates (in atomic unit).\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"elecKinetic","category":"page"},{"location":"coreFunction/#Quiqbox.elecKinetic","page":"Core Functions","title":"Quiqbox.elecKinetic","text":"elecKinetic(fb1::AbstractFloatingGTBasisFunc, fb2::AbstractFloatingGTBasisFunc) -> \nArray{Float64, 2}\n\nReturn the electron kinetic energy matrix (an N×N Matrix where N is the number of spatial orbitals) given 2 basis functions.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"elecKinetics","category":"page"},{"location":"coreFunction/#Quiqbox.elecKinetics","page":"Core Functions","title":"Quiqbox.elecKinetics","text":"elecKinetics(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}) -> Array{Float64, 2}\n\nReturn the electron kinetic energy matrix (an N×N Matrix where N is the number of spatial orbitals) given a basis set in the form of an Array.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"coreHij","category":"page"},{"location":"coreFunction/#Quiqbox.coreHij","page":"Core Functions","title":"Quiqbox.coreHij","text":"coreHij(fb1::AbstractFloatingGTBasisFunc, fb2::AbstractFloatingGTBasisFunc) -> \nArray{Float64, 2}\n\nReturn a matrix element or block of the core Hamiltonian (an N×N Matrix where N is the number of spatial orbitals) given 2 basis functions.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"coreH","category":"page"},{"location":"coreFunction/#Quiqbox.coreH","page":"Core Functions","title":"Quiqbox.coreH","text":"coreH(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}) -> Array{Float64, 2}\n\nReturn the core Hamiltonian matrix (an N×N Matrix where N is the number of spatial orbitals) given a basis set in the form of an Array.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"eeInteraction","category":"page"},{"location":"coreFunction/#Quiqbox.eeInteraction","page":"Core Functions","title":"Quiqbox.eeInteraction","text":"eeInteraction(bf1::AbstractFloatingGTBasisFunc, \n bf2::AbstractFloatingGTBasisFunc, \n bf3::AbstractFloatingGTBasisFunc, \n bf4::AbstractFloatingGTBasisFunc) -> \nArray{Float64, 4}\n\nReturn the electron-electron interaction tensor (an N×N×N×N Tensor where N is the number of spatial orbitals) given 4 basis functions.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"eeInteractions","category":"page"},{"location":"coreFunction/#Quiqbox.eeInteractions","page":"Core Functions","title":"Quiqbox.eeInteractions","text":"eeInteractions(BSet::Array{<:AbstractFloatingGTBasisFunc, 1}) -> Array{Float64, 4}\n\nReturn the electron-electron interaction tensor (an N×N×N×N Tensor where N is the number of spatial orbitals) given a basis set in the form of an Array. \n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"Quiqbox.oneBodyBFTensor","category":"page"},{"location":"coreFunction/#Quiqbox.oneBodyBFTensor","page":"Core Functions","title":"Quiqbox.oneBodyBFTensor","text":"oneBodyBFTensor(libcinFunc::Symbol, b1::AbstractFloatingGTBasisFunc, \n b2::AbstractFloatingGTBasisFunc, nuclei::Array{String, 1}=String[], \n nucleiCoords::Array{<:AbstractArray, 1}=Array[]; \n isGradient::Bool=false) -> \nArray{Float64, 2}\n\nCore function for one-electron integrals.\n\nlibcinFunc::Symbol specifies the backend libcint (https://github.com/sunqm/libcint) function name, e.g. \"int1enuccart\" should be converted to :int1e_nuc_cartas the input argument. If the integral does not need the information of nuclei and their coordinates, those 2 arguments can be omitted. If the integral is a spacial gradient, isGradient should be set to true.\n\n\n\n\n\n","category":"function"},{"location":"coreFunction/","page":"Core Functions","title":"Core Functions","text":"Quiqbox.twoBodyBFTensor","category":"page"},{"location":"coreFunction/#Quiqbox.twoBodyBFTensor","page":"Core Functions","title":"Quiqbox.twoBodyBFTensor","text":"twoBodyBFTensor(libcinFunc::Symbol, \n b1::AbstractFloatingGTBasisFunc, b2::AbstractFloatingGTBasisFunc, \n b3::AbstractFloatingGTBasisFunc, b4::AbstractFloatingGTBasisFunc; \n isGradient::Bool=false) -> \nArray{Float64, 5}\n\nCore function for one-electron integrals.\n\nlibcinFunc::Symbol specifies the backend libcint (https://github.com/sunqm/libcint) function name, e.g. \"cint2ecart\" should be converted to `:cint2ecart`as the input argument. \n\n\n\n\n\n","category":"function"},{"location":"list/#Index","page":"Index","title":"Index","text":"","category":"section"},{"location":"list/","page":"Index","title":"Index","text":"Below are the types and functions included in the documentation.","category":"page"},{"location":"list/#Types","page":"Index","title":"Types","text":"","category":"section"},{"location":"list/","page":"Index","title":"Index","text":"order = [:type]","category":"page"},{"location":"list/#Functions","page":"Index","title":"Functions","text":"","category":"section"},{"location":"list/","page":"Index","title":"Index","text":"order = [:function]","category":"page"},{"location":"toolFunction/#Tool-Functions","page":"Tool Functions","title":"Tool Functions","text":"","category":"section"},{"location":"toolFunction/","page":"Tool Functions","title":"Tool Functions","text":"Quiqbox.checkFname","category":"page"},{"location":"toolFunction/#Quiqbox.checkFname","page":"Tool Functions","title":"Quiqbox.checkFname","text":"checkFname(Fname::String; showWarning::Bool=true) -> String\n\nCheck if there is a file with the same name in the current directory. If so, will add an \"_N\" at the end of the file name String. showWarning determines whether prints out the WARNING info when there is a file with the same name.\n\n\n\n\n\n","category":"function"},{"location":"toolFunction/","page":"Tool Functions","title":"Tool Functions","text":"hasEqual","category":"page"},{"location":"toolFunction/#Quiqbox.hasEqual","page":"Tool Functions","title":"Quiqbox.hasEqual","text":"hasEqual(obj1, obj2, obj3...; ignoreFunction=false, ignoreContainerType=false) -> Bool\n\nCompare if two objects are the equal. \n\nIf ignoreFunction = true then the function will pop up a warning message when a field is a function.\n\nIf ignoreContainerType = true then the function will ignore the type difference of the (outermost) container as long as the inside fields are equal. \n\nThis function is an instantiation of hasBoolRelation.\n\n≡≡≡ Example(s) ≡≡≡\n\njulia> begin\n struct S\n a::Int\n b::Float64\n end\n a = S(1, 1.0)\n b = S(1, 1.0)\n c = S(1, 1.0)\n d = S(1, 1.1)\n\n @show hasEqual(a, b, c)\n @show hasEqual(a, b, c, d)\n end\nhasEqual(a, b, c) = true\nhasEqual(a, b, c, d) = false\nfalse\n\n\n\n\n\n","category":"function"},{"location":"toolFunction/","page":"Tool Functions","title":"Tool Functions","text":"hasIdentical","category":"page"},{"location":"toolFunction/#Quiqbox.hasIdentical","page":"Tool Functions","title":"Quiqbox.hasIdentical","text":"hasIdentical(obj1, obj2, obj3...; \n ignoreFunction=false, ignoreContainerType=false) -> Bool\n\nCompare if two objects are the Identical. An instantiation of hasBoolRelation.\n\nIf ignoreFunction = true then the function will pop up a warning message when a field is a function.\n\nIf ignoreContainerType = true then the function will ignore the type difference of the (outermost) container as long as the inside fields are identical.\n\nThis function is an instantiation of hasBoolRelation.\n\n≡≡≡ Example(s) ≡≡≡\n\njulia> begin\n struct S\n a::Int\n b::Array{Float64, 1}\n end\n \n a = S(1, [1.0, 1.1])\n b = a\n c = b\n d = S(1, [1.0, 1.1])\n\n @show hasIdentical(a, b, c)\n @show hasIdentical(a, b, c, d)\n end\nhasIdentical(a, b, c) = true\nhasIdentical(a, b, c, d) = false\nfalse\n\n\n\n\n\n","category":"function"},{"location":"toolFunction/","page":"Tool Functions","title":"Tool Functions","text":"flatten","category":"page"},{"location":"toolFunction/#Quiqbox.flatten","page":"Tool Functions","title":"Quiqbox.flatten","text":"flatten(a::Tuple) -> Tuple\n\nflatten(a::Array) -> Array\n\nFlatten a::Union{Array, Tuple} that contains Arrays and/or Tuples. Only operate on the outermost layer.\n\n≡≡≡ Example(s) ≡≡≡\n\njulia> flatten((:one, 2, [3, 4.0], ([5], \"six\"), \"7\"))\n(:one, 2, 3.0, 4.0, [5], \"six\", \"7\")\n\njulia> flatten([:one, 2, [3, 4.0], ([5], \"six\"), \"7\"])\n7-element Vector{Any}:\n :one\n 2\n 3.0\n 4.0\n [5]\n \"six\"\n \"7\"\n\n\n\n\n\n","category":"function"},{"location":"toolFunction/","page":"Tool Functions","title":"Tool Functions","text":"markUnique","category":"page"},{"location":"toolFunction/#Quiqbox.markUnique","page":"Tool Functions","title":"Quiqbox.markUnique","text":"markUnique(arr::AbstractArray, args...; compareFunction::Function = hasEqual, kws...)\n\nReturn a markingList using Int number to mark each different elements from (and inside) the input argument(s) and a uniqueList to contain all the unique elements when compareFunction is set to hasEqual (in default).\n\nargs and kws are positional arguments and keywords arguments respectively as parameters of the specified compareFunction.\n\n≡≡≡ Example(s) ≡≡≡\n\njulia> markUnique([1, [1, 2],\"s\", [1, 2]])\n([1, 2, 3, 2], Any[1, [1, 2], \"s\"])\n\njulia> begin \n struct S\n a::Int\n b::Float64\n end\n \n a = S(1, 2.0)\n b = S(1, 2.0)\n c = S(1, 2.1)\n d = a\n \n markUnique(a,b,c,d)\n end\n([1, 1, 2, 1], Any[S(1, 2.0), S(1, 2.1)])\n\n\n\n\n\n","category":"function"},{"location":"toolFunction/","page":"Tool Functions","title":"Tool Functions","text":"Quiqbox.itself","category":"page"},{"location":"toolFunction/#Quiqbox.itself","page":"Tool Functions","title":"Quiqbox.itself","text":"A function that only returns its argument.\n\n\n\n\n\n","category":"function"},{"location":"#Quiqbox.jl","page":"Home","title":"Quiqbox.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Quiqbox is a quantum chemistry and quantum computing software package that starts off around Gaussian basis set optimization of molecular electronic-structure problems. Quiqbox is written in pure Julia.","category":"page"},{"location":"#Features","page":"Home","title":"Features","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Floating and fixed-basis Gaussian-type orbital (GTO) configurations.\nSymbolic representation and analysis of basis function parameters.\nStandalone 1-electron and 2-electron integral functions (powered by libcint_jll).\nRestricted (closed-shell) and unrestricted (open-shell) Hartree–Fock methods (RHF & UHF).\nMolecular orbital data output in Molden file format.\nVariational optimization of orbital geometry based on automatic differentiation (AD).","category":"page"},{"location":"#Setup","page":"Home","title":"Setup","text":"","category":"section"},{"location":"#Supported-system-platforms-(64-bit)","page":"Home","title":"Supported system platforms (64-bit)","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Linux\nMac OS\nWindows Subsystem for Linux","category":"page"},{"location":"#Julia-Environment","page":"Home","title":"Julia Environment","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"1.5+","category":"page"},{"location":"#Installation-in-Julia-[REPL](https://docs.julialang.org/en/v1/manual/getting-started/)","page":"Home","title":"Installation in Julia REPL","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Type ] to enter the Pkg mode:","category":"page"},{"location":"","page":"Home","title":"Home","text":"(@v1.x) pkg>","category":"page"},{"location":"","page":"Home","title":"Home","text":"Type add Quiqbox and hit Enter key to install Quiqbox:","category":"page"},{"location":"","page":"Home","title":"Home","text":"(@v1.x) pkg> add Quiqbox","category":"page"},{"location":"","page":"Home","title":"Home","text":"After the installation completes, hit Backspace key to go back to Julia REPL and use using to load Quiqbox:","category":"page"},{"location":"","page":"Home","title":"Home","text":"julia> using Quiqbox","category":"page"},{"location":"","page":"Home","title":"Home","text":"For more basic usage of the programming language behind Quiqbox, Julia, please refer to the official documentation or one official tutorial.","category":"page"},{"location":"molden/#Molden","page":"Molden","title":"Molden","text":"","category":"section"},{"location":"molden/","page":"Molden","title":"Molden","text":"Quiqbox supports outputting molecular (in Molecule) information to Molden file format.","category":"page"},{"location":"molden/","page":"Molden","title":"Molden","text":"Quiqbox.Molden.makeMoldenFile","category":"page"},{"location":"molden/#Quiqbox.Molden.makeMoldenFile","page":"Molden","title":"Quiqbox.Molden.makeMoldenFile","text":"makeMoldenFile(mol::Molecule; recordUMO::Bool=false, fileName::String = \"MO\") -> String\n\nWrite the information of input Molecule into a Molden file. recordUMO determines whether to include the unoccupied molecular orbitals. fileName specifies the name of the file, which is also the returned value.\n\n\n\n\n\n","category":"function"},{"location":"molden/","page":"Molden","title":"Molden","text":"A concrete example of the above function can be found here.","category":"page"}] -} diff --git a/docs/build/toolFunction/index.html b/docs/build/toolFunction/index.html deleted file mode 100644 index b31dd101..00000000 --- a/docs/build/toolFunction/index.html +++ /dev/null @@ -1,63 +0,0 @@ - -Tool Functions · Quiqbox.jl

        Tool Functions

        Quiqbox.checkFnameFunction
        checkFname(Fname::String; showWarning::Bool=true) -> String

        Check if there is a file with the same name in the current directory. If so, will add an "_N" at the end of the file name String. showWarning determines whether prints out the WARNING info when there is a file with the same name.

        source
        Quiqbox.hasEqualFunction

        hasEqual(obj1, obj2, obj3...; ignoreFunction=false, ignoreContainerType=false) -> Bool

        Compare if two objects are the equal.

        If ignoreFunction = true then the function will pop up a warning message when a field is a function.

        If ignoreContainerType = true then the function will ignore the type difference of the (outermost) container as long as the inside fields are equal.

        This function is an instantiation of hasBoolRelation.

        ≡≡≡ Example(s) ≡≡≡

        julia> begin
        -           struct S
        -               a::Int
        -               b::Float64
        -           end
        -           a = S(1, 1.0)
        -           b = S(1, 1.0)
        -           c = S(1, 1.0)
        -           d = S(1, 1.1)
        -
        -           @show hasEqual(a, b, c)
        -           @show hasEqual(a, b, c, d)
        -       end
        -hasEqual(a, b, c) = true
        -hasEqual(a, b, c, d) = false
        -false
        source
        Quiqbox.hasIdenticalFunction
        hasIdentical(obj1, obj2, obj3...; 
        -             ignoreFunction=false, ignoreContainerType=false) -> Bool

        Compare if two objects are the Identical. An instantiation of hasBoolRelation.

        If ignoreFunction = true then the function will pop up a warning message when a field is a function.

        If ignoreContainerType = true then the function will ignore the type difference of the (outermost) container as long as the inside fields are identical.

        This function is an instantiation of hasBoolRelation.

        ≡≡≡ Example(s) ≡≡≡

        julia> begin
        -           struct S
        -               a::Int
        -               b::Array{Float64, 1}
        -           end
        -            
        -           a = S(1, [1.0, 1.1])
        -           b = a
        -           c = b
        -           d = S(1, [1.0, 1.1])
        -
        -           @show hasIdentical(a, b, c)
        -           @show hasIdentical(a, b, c, d)
        -       end
        -hasIdentical(a, b, c) = true
        -hasIdentical(a, b, c, d) = false
        -false
        source
        Quiqbox.flattenFunction
        flatten(a::Tuple) -> Tuple
        -
        -flatten(a::Array) -> Array

        Flatten a::Union{Array, Tuple} that contains Arrays and/or Tuples. Only operate on the outermost layer.

        ≡≡≡ Example(s) ≡≡≡

        julia> flatten((:one, 2, [3, 4.0], ([5], "six"), "7"))
        -(:one, 2, 3.0, 4.0, [5], "six", "7")
        -
        -julia> flatten([:one, 2, [3, 4.0], ([5], "six"), "7"])
        -7-element Vector{Any}:
        -  :one
        - 2
        - 3.0
        - 4.0
        -  [5]
        -  "six"
        -  "7"
        source
        Quiqbox.markUniqueFunction
        markUnique(arr::AbstractArray, args...; compareFunction::Function = hasEqual, kws...)

        Return a markingList using Int number to mark each different elements from (and inside) the input argument(s) and a uniqueList to contain all the unique elements when compareFunction is set to hasEqual (in default).

        args and kws are positional arguments and keywords arguments respectively as parameters of the specified compareFunction.

        ≡≡≡ Example(s) ≡≡≡

        julia> markUnique([1, [1, 2],"s", [1, 2]])
        -([1, 2, 3, 2], Any[1, [1, 2], "s"])
        -
        -julia> begin 
        -           struct S
        -               a::Int
        -               b::Float64
        -           end
        -           
        -           a = S(1, 2.0)
        -           b = S(1, 2.0)
        -           c = S(1, 2.1)
        -           d = a
        -           
        -           markUnique(a,b,c,d)
        -       end
        -([1, 1, 2, 1], Any[S(1, 2.0), S(1, 2.1)])
        source
        From 2879b448257440a3677c1a6cf8af788341296702 Mon Sep 17 00:00:00 2001 From: frankwswang Date: Wed, 1 Sep 2021 19:55:09 -0400 Subject: [PATCH 23/33] Updated logo. --- docs/src/assets/logo.png | Bin 0 -> 652058 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/src/assets/logo.png diff --git a/docs/src/assets/logo.png b/docs/src/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..817a68a48d7fd1d3aacafe7aad48a22aef2eb499 GIT binary patch literal 652058 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 z zZO#4D-+gljV1DO*S1-k+~>QK^BiSFCmyA;Ad$o{>f3*A06G_nb_2K&5wzowfR3z?pO8*k;~l}nsyI8!S_uU(_+axoG?Yu=lG1H z{9{GQD|;6eV0?)JZ7|mK^4=wWM2Zd!UbHQ~ONXandA9QdBIZhb$y6HNjY^JEY{^eSIiMXsI~O z*zG`nDBYSF2Zz?xcB`0+%#Xz|YtRSVz=65DvGTD})`wiihoNxq-Qj`}3W?cBMo8TU zRsS}faOEuiLYDnV@^jI4&-h8(TY_Uc}nixtJiYOqozU;b1o%Sl=;!5o`2c8A& z-OZigOTm%%)K*5u#tOk|XoPEGJ$33}9+$uTX?h2BMBce|$p7e>TyUqsS1B4loMqwD zHKs*G48d#MyCFhwihM7Ude1`mE4Me} z9=^PYQLVa7f5cjF6P*?4n$#9J3pIPGV)5>tWdQGXUC7W%kR>h-BTn$)cTiA*0gta| z%nv>^cc6gm6&!!Mwc1C>?ih^#&K^-Sg})lI3Yec0^jS8YOd;HJ}b zAHVvhMU?pC_F(LJ*E>`wE02JorH0dqFGQg(Ze5%+kM=F} z=SGkoj1b<#=k7h3ZH4}W*(dE*tl=9? z6V{A=gh6`hD-L}u1Ls3^YK;X~7q7^3r3<$3y$20|^f5`chAn*fn%m1WB=F#1k70_T z(``MeaiDzbM0g|Js5-yr+spXnb2p?u{}Y=ptujxCg^TC?3XJKbDiDW%5yBd6QFYWr zc{>-CW2TOLj%wf9pzrEOOk#F>1)VR=M$R+5r`^hTlE1g~R!};b(@@WL#eZKlG-2-y z#vtZx3wWBmP=2Bxg&mio?~?i%yTN}O8?;-Ednre0kI0&L+e7!w`}0*KLV}hWwA#y} zOez%Gg#|FDI%Q`fXS6tit`qlT3>B8(Gk0IY(6zu_j#7`zpp285N%mH02=5!e6F90Z z7N|!V9+Atf^qu(!%6RmUB&E6}7!kk2{>*iT*)O@5@K4~S8~I|}&v!Z-mWr!Y;wP3- z(c~42Ad3XMYqP`Rm-i!{p}vdX5*U}swG11pPMhi>Hkn~yoelF&6?uCkMR`e>>a^pV zN#}0ayo59ZZ`LhjNPm0bl4c1Y;6H@hdHdtFRy6YAw!J~!8^GmroVVm*lB3&e@23Z$baA8GjqWJwqxZVj;nfbO0H`Z@N00(KA8H~^Bv2~>LBIR-o)Be4er^`{?F?;c}@ zXo+%hAZ{7{X7Fzp_!#l=%`_MFVW9R-F1@Jr{3G|uJUo_r>Ac5J>5M$TaeZ0bMjwb4 z8KuyTifBW29{$ZNtP|Z5@_5IUXV>U;HQNeOIN?5!cxAibum~hK#^WG$DSGfe1a|-+ zEG-fWCKMJ5E%pcgvrqcZ3oAHSEOE9;3}Hmkc>aE%!dkycgv%~nDUQkU^h991g1i`89t0pCnnr*0VYJa9jYtnKx6 z-F51SOxOHbq$ul_Y&qLDzw1hUg%F9Pe!hW!z3>CMeXrQpZ-&*boV{JeQlag*OC+P^ zpQ^+N;_WqKpQ^l?OL+?g_38w|cT0VO7iXwWe%4lk8T90uhc;KWiZF5ocj_g{S0l$P zpWRwi-GlZ$b+VaTE>A0%(~(S~pQVD2?2EGGUU}{QQkcBS_bxXqsAW#!_rSdzmPK}T zK&_Q>6{uwkxG-Myl@HtmkkeqF`vTRc84^-6>Ay_zK6&meJMB4jcWM=pF845R)xD&J z?-p+JS*yA-R&E>q{aH;}d?FQYPtQVnB(@pAl8R9~uAXr&&KSn0d`naK{kcmNyTe5~ z)DWzX@E5Kll@(*^S`Z^-im!K0k6c=jBytelxiXGQ3s=%3NeiALyRx+CujRj5ZM)yU z3t{;6$l3DEmW%RaxW{u@)jJ_uUz$#ggZ}Bu0cV^kjIH53yZ6V4plrig#hj7>a4E$) zaw6Q$?&npeRQL^^)(TDU`&HhGm%&{fFo8|3j86Cb;JkD|4 zc;_R8UncK7SZgV=geE%Y1={amWC*0>G@DRsH6Zv!1tce|P&SCNaZ$t+0a&cgHZMe- zab5a(>uWFKbG1O?eMgDWZ1!?9eO2cM=eI*kpO*@UCx&kfJXb1_qr4IZ{X-~nK=4aw zENwMD?^c;fBE%TLio2wEn`{i{p|eo7Y#2-4m~W)Gwrz12Gw&XIZmi*&XZGY-tnqE_ zT=H$2+e5HFF8H%RfMCnoi=3y_XJvKlIkznxJX2I-cMr9;=Dqym``Yu4{uE3H*p;w> zFMa{t_hz3{L~oaNdCR=#v+R`5XZP|hL}2G#>EB4Ha)pb!r(w3Eo|$?@!3WFkTPp-@ zZC#7Gf4lqD-R>EWKtwnG%Kh>{b#re1oYKxq>XB!teN5kby|^*TK{^;UcHAnhr&-*2 z*uKBCB~9Ez?^!I_GH#CfkLLa)rRlu?xKlkPjBYH$kg>Q5KNf2FnOTE-95!N~3AaKC zaZK{%7ko@w_yvP@wsuhdL7_?gnDiaB{1JZLCWYU%_e|Z2*I^%()ukhqP9R-*Y|Y}> zSe?ZiCWhn_aM(3m+FqzKwD9=BGXRta8>7$*DxT*zNxPyS`My~8a>@1Yvkc|VHU^V6 zCSz(_MBrr~f+4SmQgl`j2A&ZUH;~-ts~W`NoZjTsAGkQAe2~KwyW`z|KWcn;t8Gwn zlznGsrC$=De9th8=myT&$c)ocfsj4G(U z?eVt$Q53l@%U#pjbam~D8dq7nXtzr;${t)?e42)tRhObH2Qs#Xm{p%#k5Vl}8qdiZ zPWpa{T?yQT+5H%Ck814p@n=R+o_=IP9A2%qi;$N)TJq8Hpm}F^gBU&~o^Zp$09+U4 zGYNtPa!z#_>2Zb73V3eWgOsxVH|R8TN2Kax!M;#5hjwCJ~}gHYgffJ;AET=m@$I9%_`#0XqDm*y%u+Ch-rUJXI#JK zYT0f$cN%Chkfm`-$&j}0?JZqU@3v8&vx42of zW1~i%mHq@)dI``;zp+>kc?I_-ON4FG@E^|9twctVLifwga;OE`g1EoXwJss8P#Gq^ z`-^YBtRa=9JdGiG-!H7bd`))Yw9GF|9stO>#w&7r=i#g6VLCfaKG%7ev>YZqolPcmVnCNX zmG~4}3rMH}N%+HUCrn=j=wzY>Vln4s*o?K{fOi2yx8+ln3S*PnvRkDgUWuBxGuP$9wqf$IXAGP~lE0TfR^FOQGv^l*Pb8N|a-J3!t6c$Iwpt4)~`9 zDzh!3=p;v9&^S<_ zy#%-@x$d&tDJCbp%Ge-2?17A~+w?o?RI`Uo0pJ!B6LS9X2EZ>F+;wLM#cL%`>b)F< z2S(Mi)m`rwa!+x3gXS0bSHzW|fEm`QUB2OaA)%KP4%T<_?V`=+m%kPzGqeiPS3f+_ z0XnV&=mAdIHEw_A-D6EkdXc`0-W8SiGfYB{-Pp!H;7w+gxgvR=1nr6>e0uSG zqvV7!dGyABsuCgbTY`FM%EtP zc00eM@}?wQz2j49wxVi%R%J+p+w&SKcBXf|JQx*cksBV9x^<+C9(xIMeAkC8`-Am^S^@J(e}=hQ?L_xKPXakvqs)%yUt=s6#oiV z>XSfBBo0aG>W)YrSI8`>Eo{5Jy)ji*_cRDjVQUe$5w)?X>{}6}Mz}iqJ@CB|4I12c z#EF8Gb_es1(7i7Xeb`bLoxvhaEU_~(M2vzVKpW@!=#3Q4<4OlH{2VNF-?J*2Xo`=ex}^ljK?hy zH7av6A~4jt{xK+v6KettTGq zG+=1_0C_+`=_%nEl1b42O(<#0JQ(;CAiMwx!LB8JKO~Iti$opVG`x*`ivG+N)Kg4I_&T(&}~w{AQ0;PcQFu z&sPZH681mjuEzDiuEr`|$kUO#rtrqCI;BRd2_gdHf`!0f{xo0qn`T|lj9r-8_Hg-T zhHs>9DZd6k9Y^H%SFOj)yl?gC-#UTzjlQ?C#a<+{z4bk#T{s+)Y;|?KDaP^#!%P`J zH~m1uOmdRlsXZ6l@kHRXW^M@bC(8r+f$F3!U~^fpp1E{A&4cjlsI#b^N^`X7htdAF z2)*A(ascP2C1LzD zBv0Q{P{0#h>}8pAMD_>Tv{%$7+T&y}vpz?%m{|m@b|p$e`F(|8X24Nml`sl-;(d0F zA1L(oY~bb%w701asXFVw54zU2gtlX|{XL*RnYF!n|I_B(+YOWwrJi&b)~$t@L5o zSoch|Dc>&{n`7wfZ$o_YaWHritk;^8^>A9lK>I(|Tb?+!3*P5Hzkjvu=`e<4|Cp4Z zP(%gCe&!Cy>T@nzU!)@}f;#&D3+?*npI@4iaiWhv8!(_IKatl1Sq2{KXWZw#!RZ~? zju3|mG3CeQg~R0prI!g_h=Q<<2;otMsq5}VLXSzPG(t@VJw_dTw%e1FeIT7me ze=9kDR)K8TeOn=g>?{Fey8p`NHh*3*ms*>&y1m00BixSUHM%_&foH%TF_(fIu+ypq zc?JmUVL(_XjdBd;8(-c@rT;_cvQ;y_Jtqpk4ISa7<56hLx7Mx!j;S4!8M~uj7gSL< zok)k@k0lr>myhiDaPYZ6t)W>ZD5?6r#NY)gdqm-m*$4kJs)g=btx=U0Nkwm zH+%a~rE5ZRcA$C{yE9t}3&xs}`&L2>RgkJa-{9aQH;2MW+}l4n=uel|XQ+MPTbKX9 zdM6v&q|uc|+4)om&iE7j+kSI4?Qn`Qi^IS)ZJfHCL*U`tamEWY!JGOok4S&?wJ@By zZ^u^iVCV(9xZDLgQffehO@`}q>3U{C%BAZbGo#3b1##Z9+IjgM=jlwx+)1QLfQNPC zk7K#*>oaXkBL8}<4&hNnxL+kX;J%8!=Gf<7_H`^yW1X{cdFJLuHQrkqr83g zg``lf6&Ws%T;&V~G6!$Ku03`oF3)SO3+2Qp=%!Bp^G98h0929urr33Yno3u^hpu?- zq&6QpevO74vGAc#l6u3WB8=wcXPc`p5$&v72RkvVK~rmgKINY-{lVegv z3i`G5JMHQyE|BzC|LB!C#TDOwGf}Aj_T^9B{Uu2iZg(k2!CrzFPRS=fmC|ge@P_c6 z?ttjrB37J5IYn^ChdcNe)bM`wI-dma}vu9a5;XpIOhHw99av$UHwNI0Qcwxnc zXuGYSHthJtFgC!oJ&wBl(8?8-n<#}17;&wRyPv=fwyn`9FEBxk76Nyj?wk1$)c*17 zgeJ9%Nbr>_?MOajcan25WoI!C!0P`09K+&O0?a5<3 zhJ2>vzw5$A9J$YE)s$ryXHq9FjcR;X&s&-1B(WznibCZBu&&G)B7deUZo3~sx{1^sD z131!)&Qi_4^zd9N6tLAgZaLa-gOjO@LN_;;mxwyYA-rU?SfZ=Wp4jcMxg=KGO@^mjos$vWlHJ0~)L!j7V+Q6G~EL z7H>j>jp-56rXMGN59_VEzJARUlp_3c!1F`Nz7A9G?mo1q`kkm?7LCy{g3F6z@lj}F zIf7;NYgU~tamIYA1FysWWQ$he$T5vJpkuuuaYRCEUrruJquF4|nhGai>-m-j&Kp~2_sn}eNOrUP5_kHPjs zi4td@R{#=|01SZdD%2vRjcD^m?w4r!xQP6{FqfTjar#g4`J0pG^gBy6X4?9k(_&RV zrst@X^5MTh(l3!(lfnevq*z`NANm4);jhy@muT)b*_}V624*TPDZsyuq)78(rxeXw z>;IoJA`HOi18Or}^pSN9LXIBm?{~(&(x-{}*?DvN3G`czw4``0iHQbj<4Sw{^Y`;B--IS-@Eg|FUEHa=XcLW0P7DR^ZW!cxhmBp zoXS04@Id075b2Q5ilt{=(MNjp`+o@T@^wAU6gy1`l^Rte0Lb@s;UBue@2mLjsF@|Q zCjQ&6Z`a@Cvu|7^ogwrlq;xfR^MpQmGjL4FU(5+zHi2@pb$*W72~9mZjQnNZALzQ8 z|A6sLuYgg51I^KuC$dDc0hjuIZc;yNpEy#R=`| zG%PlbY1U-(3k^C7IWS0dBCU)B5)h={lw&Jv#$x=&m)o>PsyE2%IqZ>HhGT28fCai^ zz;C(nr;yEOj~?(WE65fH3OWx zCPwf@yry=o!G??(cER(R=Ca%G!`wvO!V$kwmq*9fK?vC%hvR1)? z{GO6MFZ+znwZ3mMuAJypTG^ut;YVp6X&%#Xl-BHj=$+d{n`=T}Nn5Adil)9$`D_rP zu@!xsn(IW~46AVKLh%IM1fvAA5faJoZMDgdcx?+co-!c4XQ^d4b(it0)ON#AbOW7p z9t;@tGMR%=7RV8*xN*?X7fqFTB-v3)c)%IeCoY}1ovc3o=0{;-h(&_3mV z+P88RL?dJ#pffTGTrTgFeDe7xf(mN~4l=%s(YcV`xy+LoKn#zI&J2nqYWBm9q_ly9 z`pbwn!*i`dSiMXAzE4|IiOE;lX_?kdr#0N}as}QS{^&Eces8lt@lg2QP>-xcr)wuI~D(Q zc`A#io6#&fYB{J0wTJkN?9p`5FiFBN_*+HwoG+o-fSn=x@i7UK>U}btq+~xk1aKtZ zwFRzKHXdQrEc5VXMlCakDe2azGr(fUyeS~1J^b3LCl1KK$`uAIaMF@ou-;7u9x_y}`Cy&yIZZ*` zZKi-&wzS^w71F*RqF4$gu_i+vBcw2Xo($TjFN09;f8EL54UkH>?!K{XufBb*+%glu ze%W@+Cl)}N;}_zvPB;$Qn|ZWIyOy;ECO3Wd z=XNbSn$~X ze05eNYtp_}*KjFd`(WEt5?j*DIAUam^i~k5Loa)oU~K>>8K27Y7(JT@Jb)(}Scv7)&tZVf*}pETkJ3JB zgvoG~XuV@70CSpsE`9-k8i5k${|D44YE$y{#49^cH^2G%j!K>4btLb{$P3!sRLAxcJpDFfuwGkM~Y*qTbcj3Isf20F(SLoDMMgd5Ysc zsRa8{ssv*4+;;(N{7e%Fj2ApyZ~8hO2h?*2BXlmZ*ZQ|duoLaRCZ5Z9wwprU^GzuAm><7qHfhXLgu|C4WD-&453S!FbM zW%44V+W5tjbl@Y0PW)RSmM`BF)sFUcNC*cRG)>cz5FN2T>KpQ4D zF197q-cjRaUMsKhI$W+^{A?GS%)zQFxT*-Wj*hlU_7FHWj8hFqs|(b{SV?X2$MuCU zV<8MkxX{8Mak|)syvf|V72=jz$rBNVS<tKfVfyco9v@)n~2+LxJ=5&>&CnDZCq8^A~15cIgCw^Iy$M)z|m z@OJ-Ju9&Oi40wWm^*1A5Af}Pex-d7{eMP=?B01T;Ey@bysJszh3uJ(BRL>(_)2>5% zH%Uj-SdnK4xg%@~@n&{pe#<3vwZ8t3iVdE~S@Pvob})e^&R^r z&h($4z|u>K5u2?XfHh2@jogd6A6w;-nN6UtjWA^4ZUU7xHr7d%#FG~NfP47(B4p{7 zN(#8fslQCTvE|R15Q9|O@LLD-(X941GVq{UH5o*=k*Z@Hb z0&NtrrHCnZTp{d#HkL1zQa?If-u=_C@A+$e>U&SAq(`(;!|Ya%3<|lTmR&ieKi!kF z|MNtfy{IrwX9Nc$yZChHE8O-F@vh@Dyyod@841>h5u4Z>FwoK)r+Nzt9VvUdQXam!ue?l=Xb}HL4!z}u7vPg5>3pIOU3bv3D)m_$6?Bdlr(nac3gLSVF4HfcSSSH z)Y>-F^^==9=2$} z;L&|i;j;bBk8p!tj*_1O61F_N_q)*Zifs{)!6HvtHG_IvTwNkWJD4!3*#UN( zCDE1H+FKI{lWq_iebs!8JT5&hw?6wEV+sda6XgP?HoOI}J|Cbe+dl2zZa)IIHq_C` zbfK&adQ?Um2ELKa8^zp5M_-TZ^A{@TOBebxOmXUBY|h$ig#8*e4O)3+QeBfgckdwE zTqEIh?=wnPMT6jUB}n?-jE{Op^NFp46@`vs7~BBDYtVLA(XZFAClzI|Tgw-}*MIYD zPu7Z>Nu|7oL5l-SNnpzoPIAdyuxF(B)Bo1Fh( z)w|z??73emYC}i;>$aCNAV!4pF4*t(_Zh9&7B6kwCEbW@GMOzKfS!7sl2;dVnMMpG zP5}a_^DdhMDte{ykG)9s8_D^k;;rJ|jStI92~6ihCtj~M#NcM?J4gmN_n4v7-4PpG>wxDB9 zV`dG9-%faMV^8kDN{t)nhRHw%LTjAR=r+-v3p-9i0rzHeL9M<+uNcVR_u_ z3hzeNFusaGH(O8qy;=ikblD~=1Nlwrol^7ZV!ZPI#rs6~D=9w>eDUNfsloW)myc7N z@Hh0w_mFr%3qY{`-U7g<%7f@&mO%e10Dee%Dg%+yp%`mDgXD_(ESZ4X`2Zq-PIb25 z-crhyLiuK>U!y#3z4xuShlzod4A6^M;){=1RJ`+x2SJP2I2qX7DM}Obzg;~9z*Jfs zJ)8P;aq-#zNLxwK2ho5%{h%LVK?=Jg^z8Fy^vOx;y!SP^X``J5?gdv79X9-z;o{n| zAYvzGBC-1I}RE`uth{s~ts*QI6DuSNK*@|#d-UgPIM97V)T z4gd5^UEsc@5aY5nHN_iJXXDKpMvtbB=eA;kY2%sWOhi>AViZXmir^fopNpDA!5sgN zaR+Z#e=iOJ%h3mg!)iIjn&#@%96y)Pji>+}rX7wYv)fZM#)6^Q#RWQ%iLGD?ayMgV zWw{keh*48_po6Gy@>q3X;bm9upfJ)NyU>R38zN1l>><#7=bGU%xtYbp`eyPH(nf%2c3@OTZAWip(Z3aslo$?e2r%q55s(fRT?%y}_ZeEniYuBQ*rOx-@c>^)DEW z92k}NsEH`F*I5jrRN5+C6ArXO%L25WY)U*EfXT4|z;;Gd||1&nyg1sGI)hgJeevN;W z_3auVzB_crv+=?|J4S~QzT#Jzs8{%*{4)Mk&L_6shyA0eA{u`(V_oGYQWA_8nxJVe zrT&$t>R0%*_sXTrOlJSJEpF*RgwDW$wr5Xyla}LpU6dctM045N#);aRE=ryT1coXn z=Rj0*gHXfD8Y4dmVMP~42)(qRDHjKo?I`LbX)gRiKa~x3_a};v16v+hX1$K3uWq*t z6N7@xCFB23dIOCkM#fyK+hN7Dqv2D(ceCqm|0Q#Sk8K(%SH5B$WgcC`5n`nGxlid0&gHU_ zMFLt^?)>H5T+wO^waK1alP(Mg3T1d7JU_>u;Woot2oY(?k3_mJ{$z~|$Usdzufuyp z&Ed%I-8%kT7;qIoT5y@$Z_hmE|1O_Mvet6v z0*5IplF!(Y%W=(7={>SdmI&~ZMDU`$XS@lMP=uJ{pDRg}%>m3Dx+umffzxXcR(lku zPHI=jiqS3J2wrrrRxL-E)c1`dP{_L(_9i+zsWi%7?K7NdvBXCZVlsWMTpAV!FY0-+Nh30FSEapp-(Yq67=-xa z%>dcHf-bj+Vsf4l;!d+qoSdG~ZJk|zK&B630E@K$QeO1h=<_;Y+Hr4{W6+_#o_qai$9MGY6ocHk#59n#k@zE$A6dl&TI zqV)S%WC;76Kt51D6(1Xb18cZUpze3}v2K0fx)uR6L;{qa=zahdt1;^YQvoi0sLROR z2Crf(M_^G(U->UxrCy1jkw^9-HE-zmq1Gj5;n{<(%oc!D?G68^f&eP9%twl0w`X!Dx-;Z*WY0%KX1t+i zQtnQXzD~M10LMA|3|iWwvt#9&KUpR+uXEUwdhgMON6y=6H@8Pnsn$HRl}=I1V+`-o zizqYtSH4Na9%g@9P1ML*ZvPS}`f*vrbr%U2tJ1(CV8W-qqLG4h%d{3zw#~0}k-2%& zW9b^%k}k{L(X_n(_nU`Y;o(~GxLeV|lx8t#~<$+ijJNMQomXkjGI{(ik@1pjNKaJ^=!22{POt@pbD3R2|QoS z=&io3@Ah1!O=BunXrHEJWdCo$`Wmag9#3rbUUNQ0i>~Z7UJCS4thKMDk%QnIv~E(O zn~AfK5`rt=w5drH^y$g?mNl-9*1FLLrn*k^JJO3)sbM`fZCcRiep+e^jgS5_j zy|`pAW!$=>s8i6<6m)A(lOZJ1^J%|_SLmv5oUSFe7=@4HoROdrR_r837$B~t}5q&#R%){Pqyh@b7+6ygp zQIGfbl$6ls15uf`l0>k7aHA(Sr<%`~rTW9J*oc3JBxbsao;-@ubr(sYKND}VA6B7i zQpwQvYPqSQs!eG#px>tkn>-&Wp0=efbHcjy^dYe z#$%a>_oi%+k9u7;wUAQ>iKp8EoSnv3nz#CucujRV+lSB%#JIVf*jx2qSFydm7iOw{ zpSp`GA7Z4kd;vC~tv~w_sunFA+>qCc*Cqde>c-sG##cm;uO)2*2T{&OX*cS_612{e zD5RP+q~WIlk)m29Bc6*s{xH-iSBO8&f*Db<35 zIpx$^uf0(DefjH(J)tadlGKKlirf)5H_sj97DP;dj|;`&RG8}=`H;hzR8N3NCAnj` zE?vrM-B!@^p}*WZ)T%6Ep?AM@{{`fJ=WQqjzV4^18ON6g#^U%pEy2}hth`SbwMUPq z<Dh1l_F0fQI7uG5*U6|uCE77^TQXSe0XX&`+q-@3`o-KNgR-B` zO1y+=S9K4bgigcz)IDWE+EwIoWtu_!}>fdHxe%yWUnd#Ltn4 z2f;U+8$*Q-QPN{X7oFGJwGfZHc1mA^#OEwPl;b3lOs4`?ck1FEj){DyI)^gp5N8KE z;jWDx;@iBdKLVj74g$XiMvh)mU1^g039j6!vo#JDx4PpNL`FcIj9Vo-;3YC-5f}u) zxvPDjV-)4XQr(l(VN6Es|Bh?yEdCY3J|N8WZ1W}dDm}VL(2bSaV}47TJd4P@y)Imi z(%iRt-i_JPY@9J;vz`M(a_x}2C$$d68Fn#6vEvrnVw54f3a-*V(W!NZL&>=+h<(2#bqhBHY0q$=`$9?xsTw*73*KwCT1XyNrhadAav6KJt#z zDyFP9v*Q%W*U*=LXBs3eAwGm97)a?Szb)CX48}g9;(+9_=*w_lo#}QpShZgp`j;1A z%BmkK--r$|5Vx~Bv)nNvo!(h2$9v_|<*|8OU8?y@Q1Frj3L^>mG zm_lGhTUnqz6qaXmQ<%VuE?;;1o)ZjuecvH|Ngm9DfAnEfj>q*(YS+(fF zri&38EvJ5D51k+p z9AC+;%As+)`VfiFxY?vtne$7hNMk;Mf>_#f3!*(zIKO3=`#Wev#bNTWPongBIJ7Y$i`3jIPe6m#O|L1KIC(%aBBZ2sl8O!+_gFa) zB>CBj%b@WD?ld_Hs;7AosqwTed$=0XjznRfo_UAV=EkPLHt}`P!{#>9@UsFr5Lq#` zF9c;VhMRMth>w4l1)`W^4N*cR=KY0<;|Pf3_!D$+lzP;He_;^zkKtxAN^R%Mv7@}2 zP(N_OU=R`E8#PSr;Yx4Tu5CwWRrvLmSJ-!M?RJ4o4Mh?P+&F>a%TxSKg^aLs>+7QT z_JO|ks^x6hE?kp3?wS47B6RBRw+bYF+hq0g+;Y|*!Hw?rReR<8(V`57*;Ql9@G}|9 zVBq^m?(bFJ%}Uy;Lr3aS_X})7#GVr7%WHmfe8dU&ZU(s9H~2#q$VDTbyC<14ik2OL z9|d`VGMBdqd`K8TgpfRWo!+>nIB4|Ao9rZ3%eIZ8q8=6EKy;)KOAA}{Q#j-7LM8HN zJ)TMYZzXLb?dH93GX7Nj;{$VjuXop1PeE%>zus?bA=xiL$y=I}EwjcYd zyZg`Ja#^{*Hl+f6T_JXeoTk7@!O!uZ+8!%-RhjwTs2WKauudK0n9(hB%2*f+GwDBR z1moC{IQIlH<wKxx$tm&-3Y3|S5RVJ#;wB#AK%kjuP3&^`6~4Kz&ZdFhEJeYCA!#u4)Rjd zf|!rI+;mAhc4da!s=X3FXX$T6DsTXp_r9MA@hRn1||3GF`ciolshSTCE5!SO zl_Q}cJZI}o2F;Ne_R!t1U)Cn&XlcHC8O$(&zsRYn=-WeY$Egk({1S4T8=oai&^vAw zY#Y}BW>PvZ!P~X%dED^X?_FqnX8==%b6h?kvYdwbiG4pq961#gfRBZ!X~ENl!%sUd zL4^T%;lQV5-qI*_P?pI$sKYPL3Oukr$NXfK1Y-+6u69c0&xK`O9Sh6xaywvoPJWTD z1^LrFsdch0K+zmd1y?YWo7grB{$9r!6M3-Z5?!?cx*?OeWMUhoct?@jV>4<D=wE!qL`jYaUcHFh?EE`2vyIvV=PgHaoSxx1N^RNMLyJbzpj znl`gRhEZB$5q-o_*NTI!pi{0@yN*;&nj~+W#r{>ozH9nZ!86@onBbbfdiCU*U!Oia zIO4#z-EmZl&Vt*6*~FD88no0BKd05gHTcZ zW3#`+Q?RF^@5hf^vupcCH^MWpt^RgQ{(5=D3BK2i+Vr*Vj9MPj#D4ZV)?ewAGSkWG zWv-^mWd{3I_H{I*eQZYz3SMKE$h8@M6ORpk`PTzBu|jyM(Xz^0wjg_5k`qABb;Z_J znR`7Xe)0aDUY+uq(yi0W)yK=UwG6_(<9OHWj-I!<1W3^`>RRS+kJu3aQu4u{^<6P3 zaa*%@3YOwL@07p372DZl(w$rRA`oqmx^4Ap+;i6NCuqY^+k3S~{#usR>1$Gq?Y`Qd zn#ONduOuYih{eC?t&#Xst4JNWfe$jg=wS$QeH z)?TxIro7gw0iSwX+RxnIImsJ%#|c*V_>teuOaA{FPX9-d{m5UFIv7i`Dn$~p3dfv3 zU4Ov|W_>$%b^9eV>KW@hUoMwOe71hfn_4d-8sCv(N928xa_?DF#)dtY?XmS=zB6lq zEb8LyS^?v+L>aRJGP2sUesR`nrS@A4CBtV?Jg(z4)-Pa3);pT{?ia4y^-VEqjxXH3 zx#WZ9pab?sks?T)r^zj{UmbqkLp8BoM%d-sy!6g@H|9j@+=yRo7P*=BovabQgz%3m?tXdv-Z6=QDaoOy38(2 z%Mfi5?x1OZA4wZ+HUG%;BKQH=o%PZt*+Dbsxt|E>rg2a`tJ#O8dC67>TSitBw@)Pm z{v=1Z=i)D$zt-3<0&MpXg9fg9)LLUaLG6<$2z<>SAxqmt$Kk-@h7_(-m7$jvArJ8?;{b5 zhSIOTW@Ygn|8?;r6nLW6X+;YnNn+#TXt-~eNMXA+MkkWcK-2*bK~<9pIIcP=<$eik z5VlD44r4nb4m84J=8=1^%1?CfSNsERu#A>vjpXI_Zd6>)O`3%L& zvG3_!fErGE#+(;oGa?)dST-D)r>*?IkJMicEu-gY-iB?`cKJ7V= zfFBVh(v+GVKcvk_es1wykTh?4jY?0S+FR(vUR455sLPWoG5!_nravsstT6T%C*Osl zUfeD=%3W`89TO$-NWsY$kmGvLdBxv$oJ_n@-%@LjTvk{9s=ZlgIYr0oDqBqzB8L}* z3~5r83^l1=ZAFXCaI=H86akqOQv&q$W;TgDH}icD2&>kyD7xou(P8T!T{TL)b9Q-4 zmWN{)lIPL}1=-m_d0|Cz3Zp@s{GgOm9E7z$=w+3tc^?NKsR0gxcDKC8Y}Aj)syI^u z*#YL1c(0EYd;k1)M#)WaPL!QnE8Qh$BR|+x#D;msQ>iz={UtQC-yDRG>xFhR0KOH@dyAP*e=Cx+&yd|wl6w;6~+i&dLUy<3M;Unsy z-<4Ro^Au^UMn4uoMu2A0(|VvjmBe?z%BheCwSL(tx??r@w-ySCf$47(Va+jQy zxO7&$1eO&u+42J)C!QLBv@T3Ux$3c>X-hfABp0IONIj-a34}7(w|3V8nzNZGK zL54GM(LL?ut2Xod*f$>3PesxvS+cFYP7pLi0%~fMq0u5OHM$hZzDZxs*)Z$v( zfeS@o16NxFtGyp>^6ddK)LrmX!pxTygWp_L?Ishc0pN9G{rFH3Mnc>|x{jf&H!Xd} z>hbk;B>nn!c(A!{)6AViET6C1el|D6cSgNhbKTRyHg5Kvf2_EDrIP|t&vuoVpxx+s zIg);DFzd(waf!2`1mtw?(Ij3m18~uAJP@;-$;9-Yc+?m6>6c|Fwi!@43)NjTh5Fw(Z`Iq$-4R) z+W3Envh6Ljnq!`*9y&e0+IDkaSvx)4y~JVHpoZAq5bQ$z7!)libq>X@;RQMWs_ zviwITTax8e%wbrZC%&3O>@eE>@f?)v>-n4FKu$S#w!`RK`)sp--VAzT24cc*N{Uj= z9;-&wO=FeWYGh;ICxe4c+yuv>eV^tegK|<+<_W(hyponvB4O)TJ2w_VLX^BkksuvL z0mG9s#mDXmLtn*WnLIbEY|IH*2W>z(qhw!lUB4>OxOJ<0FsE(V6>zI$7Z=MY9gU47 zT6U^gXlSR|BpWwo5%8j3%AS_&Wai4**|O$2cCpiu+|8=$*MwKHwz>6;8}vx%Kd)jK zP|ag!Y60C%bA7Z(0uR}v6fl6@l_U_z90R4El3+jLJy>*2J$*l2s{2@XR-ox$`8%l# ztL^eVrs9r8d_p>PhNnR|EN*Wnz138CSQiut!_sqcXP9<0h-g5TvMEAt56QlicE)q(*U*=-N|a+TI3w0%-EN+CceHrHIC@IAqlA%M^4wPPjCzR^ z*2c={_-Mor65=oydBD8VXUjfuU95jQzUZ0z?H1x2qLdpi3aG^Jo4Kuu&D*TFtJQr~ z&TCtp7fXSxhg-;(en(f0dq(%(!bDfDW~+5rrwG){3u-87y$X63^H=0{k#TGH5a9Ri zVGE=CN?8!W(?F4hvXw6!Uhb%54#D;uMPJ<0wvkqy-)5s7-x>aUMI29sl^yms{Edo? z9lj{Xe#T$E*a(oO(v-tKUze~OW$u%D@bb%(PJAC+n$;4Aw>@}^90_yoH*$w_c*lq5TTx`GE7so)hH2QOboqd^A- z^uS0PSP+02sF8m<%y#-qUv4(j_laWy zrpH%k)WoEhLDLVn;@O3Eb}T0tM+`zgl39oYeT>eyhHZ=njM`fS%9A{?mN%}X%AIm| z{rdzGC}oJ2Cv;8C&&<&RGr9L|xB(-7J22I@M@R-=^YBE_i&v#@u+Bez@6Ils9p-fWR5V9Y739VyJpQSXN`I$)gY=y&51(HT|1=IR!48ED z=UZIWv5(b>82$#5yGQtrG;3oQcP}fvF@z0zXNlzROlC0ZaC?q0G1w`buNelvJA`JQ z+h%wKwV!ccs^pGO7{WUd#d+<(26Bc9j1oB5i@mMKl2!J&bIO*0@6YAfwZnOjK@P6| zNkXb3_{tdF6Wax%@RRb(nk3q4fn(677Vx!&^Z$Dd;SgVGMmjdg9kg5t46tS0uW}?# z7!xmf{y%HvuRQN5sqZ{F#_fO$4TuOq{7I$m0dwuPj#^x~(Tp(W5d8Q|&tdQvJr%Rc zFCPbeIV2Nv1SaWjJ?qYCBKe#P{CGNISN}JvF}RZZ$mkk|IrO4v5TG;a?FyjW0;n9P zS~IZ?c;L`af^jvrg5^ExoHsb{z(bgz^b4B0p;%pCCXvdB4=-NrevX4(fd}%AdEHrR zd%`_Z8Lx8v<(}z6MF)a2A|ReoSNJ9;O~8J63O=D+0sMV#w=@1bJMVlZuJ4@g8`u`* zC}wT&+tp&a8hZB&ot7jf8gtQ24JXVPcKLIuI)lWeKu9AJru8vHt1-{vVhnmSwQy}Z zTN_akNSc1&>Zhr28;Oz0D%VtEyvd+)BP;>l)fy$YD$!8(%krFFS$6n+K7C(d?Qc25 z&55Hc|A|9gL8tT`YjSC}D_OtdzwPp*rK`{PvU`KGfk$&?lA|dkH@B&m`YVN(UMhg* zwhHKeZX(!tB1k{@_e+AU%J)*{%0ISx`LeRCqo!}na(>uH*%FF%*NBl3_rCc4q*=CGH?<1Lmg@7X?e;d+*d@LT}4%-{xO z8th%b)8pOUk>W;Hb($>1elS|?o)v42U=hU`Ev)UCQ9!iE`2;oWe>=rqL>x^oBfj8n zskdL0=rj!hUF1?O3Vfy-SZ4}8{!x(o zV75>xd$R;dH#lyWe85`k);)pqqUbT6 zipD+p09jP`V9;aJ$E-YV-$fwroup^dLRD~6KqP*-I;t}2(FxMy&X2y&(`Ea)9!`~1 z*pru$zf59Kh|Fmqm9Eq-nG%OL=6w1{l8m#NpKb0oB)l0+AxhXYp4lTo@?wTJ$Vt=| z!tEFuOzL(e`Xm?!Ukn&$#R?&tgZ~6~t-3>i4@DwJ;v@1zEVX~=;mN{Cvf0%#Bc1~i z)chU^+EkN`0%+W)v$brSJb!Z%T%-wKFT5tA2GKyw2`If5g8CZ9C?J7I91AYk65X(V zQRnTr=*>2Er3*rLNOqLM zrhaRbf(wDC(RHk?=MS^eYvheUR&;DP17NDO{-F8?(z*|zJJ(%5&( zrN-bz!xMvJ4`XvrLf1*t>rPIKV9uKkb|Btc^Yn^LB6JIc2-5 zTIfnyQ`*q2m($eQM+Db?&VcyvFXkkOEqueGgBrroLd&5r0twm;+rZ(JDe=a<2f+%+ zIdKk>vU9`ZK>j#&_@cDuZTJsUoguj_ya!C8V{ZzKX$k#igdF58uHW8faEd~*%v7BA15pu^e$hs+?@J^B*|GE~ksf?-)=;KnW3R;pyuqAE$o%B4sgY7KUn_U-;ei61B5xBppJ?^7tfjxDl-tFh9iLgg5yaA z2u<@?xFVA zmDx-v9+ky0s6nCH7PtPbP1IF9~NQn}5z)yK4c zA+9CL_G~HSwX-5E7ZT$Ywl@fZ<2>zs-i9A%?NVXk1C7tKslXqW%6@?B6Lh`4K;%f= zvE6ud71wYl>91XA_AHJv^6tS9Y}e%;qPE9IUSh|?M(*S4&zBBcT(e92W^Yk~m#u4o zGq|`yj0N)+Mm>5B^hh$BExl3!8#F;ulN6H0W;B}xaUwwO@PeHip6F)a|L&5eE{<`x zlFxU>0$zl^2@7cNboWeq6^M(w^CV18BP^b}xgz%Dp;1-*{=>M7#>$%&V8QGVz=r@j z-X?Q4o__RIT~ku@dt~izSmmm8%iBD(c?SP@c9PY&aRSfwx9xtnkJ1|Va^4P!q}1#c zRh`zeNz5{xcU!J2eR<~QE`Bun&3?brJN?bgrF_!^7GK3jGn@UFVJoO9s=>JDy;&7X z7o~3Hho3er0NEXL(`{ftpCumGFSZ85*G4APE1y-c%uWHJ ztO@d7Ia8BK>f}5jRvPuTPms~(&+>a0N`csz>V4A;Rsi(CreR*73= z{;}nj?;5Ot=e8^&LxU%9KBFQnyag}BOHUXN9#h|pt-2LStBha^MvwD}7LbRk?E#xW z580zW?%FrB?lD(uLV-(CY7M-0(%D-<>qrSEzzF#_dD|!aFOFj$>#VUWIo|72X0!Xm zBviIUc{v3L;SVySY1}ncPuSd?CFkn6PD^(TW?LK?!_YrN#c?KsBzNl^t9}U(RVCqW zIftj016%FFOb0tqDD&MQrO2C15T3_fGAec%k6jQXDtPnu!4B;SA4u7|dHTpflu`rrOlt6u`8Y$iGr&%AFFzDOs2B&UQzgWC>5H^?0^dqs1xqZ zF%UKLuI*SJ@Z0#HL$43zDT{{YnkRu6ClU%k@yDPbFuISot>@P(D;@QvTb9EuBTc`q zZxIQ{Z(*eMIx^=f$P$V+oNf)NL_9^5<*+cL4M{5wPr?6T>%D`T?t{MFgpTwgy($t^ zdT$9;0TF_tA|2^cq$8csrAU`f02_ixFM>#uD!m6n6O2>@cXzMPwN%@2hw8KJe7@I2R{R68zjx_RzoG8bLXxS(eM=LaG0YSs=!1*WZce&0 z%9AHmUyBor!Tf}{xYrl`7V3q-YPE^0ERV9HqfrM5{ z746u8JCt0yy%z7!3|v|z@h}Qlbra8uxw6xDF!9agBbX+ou6pTcOk{N*hJ@la*d~l$ zz{-?@a%AmAs1Q5Ygea%Tc@Iiy)qNOAPb*F<@ja=HDt{?GCF9yR?0?)}^a|KyVUx$`nXdojX)X!E?` zIj|^}5pMbT*D3vMEcJyD9r#okuEd`m(|(D;o7vn@h+)^4z6}}aDQZLtsu4!iBi}zm zL*9$+N%dhOcMm_^0ZKVYs+g^sY4e@$ed{oKNTHnzuqz@Fv7xHv*Q>NBYJ~9%P|hmV zqF^oKJ6Yku5ppCUNv#?R;w^=9bkia$?7t=JRr^ulTL;NSAi8!&{4mk?Zfk93l$gLZ zzI0VE7aef2$u*F|0MSPRrU3tT%f$RbKqzvC!)IlyhSR|6=r1a4Cg|G?_QfPkMWM)g zpz4#xu5ldK;kPpm9yJL7%v<~x`d}>5GWsZ8r zWdqjmQ|I)AtsCDYRmWe)Q~nO~|4su$ExiYsmzomGeia7s;iZR+a7^^Q8FYTVa8-vB z$jll)%=j;a(VZgqR9f(TH7q}WJ}x`{Gd8z@TZ%p9RKU2viOLwjEL~=8RuPy58kr=F z+|Q;vA9^kkjlNqJK-howr{k77GXX0-BnsSK8tCyCS6G=# z@4?MLnpX+^WIo26Ow{^IU2Hnsz`o<7Le ztG+p6Z{`t)o6Fn_ZaxwH4^MuCLp7{6+p+{8x+E?S|UnRhlWG}rF;LpZG zN2g>rN*<>nyIq9PhJBHju7#}T-=dCH#jh>#gT6FyZ7zwyRpUHeM$h=bx4j>X?!Os6 zT{Te@gtEJ)6MKsv(L0hwnb8K*9BHrTBKF%{Q7ugLkF|hP5mcqw4@3(>a2rlshOKX> zZEOF??9aOAH{U0NNxX?`r&GrijwcPNr0dZ$Zt0Qd6A7MbD=Bt_CmDze#|7qd>dXGr zp07qyn(x+|)7NXD>gg0KQ1yFRUIaa{D<1LrS3=@*dw&YsVD&R^*PEcl-yFR- zl0nrw8nh&@?iu%njl5pL8y19KoH?Lklr&&~D1s|-(29i2UemxH1ldL=YAVvQo2kag z<)?c;A5(C|L?jN0<0)!rTv_GIT$wmRQV8dwp&wo}+`gPvS=~o*9Uh_es^GKl)+k59 zHu$07z_G9)=M}cXZnc#+qyqAuw)|PpiN>UAk4E#U-&8jLjrDLDUH=Zt> z)&h9?-?)pH3yJ-KWIdE^hh&CrO!9-iJ+NGiK(O|4nkw(u2toT;$z!tyz}mTR2ndKm zd?+Xw{>x1O0iOx;`0I?GObiMR9Vcj?@ZP{&uvic0KDc(d_6ENAa+wLwjknUmJR$wu z8=MEei`m7TIO(tX$IDm|xq*iL=mrCuQMX}fa!ndBWS$IjtoFqt_RZu126T93H8VtV zfs0a?FXEh}mebv4(K(g|wedMaUFnYe70Gp-0Y8^8&(u^gTS$m`3vQO1ajWfVQFSj4 z9$tN3NMvcZ(}R~?qV#>{B__qwMoSzC2};6>8gqj*9vXP9soFy@4uvfw^2F-iM9Q`# zszkX(w<_7M>NB|&hW-E?7M%0kK*{cRdVI)Pzoo@V@6DuyS58h%b{FSoOqY8xDi85n zmY0f$jcZ8!?k(MnbHU91L6drynYnj&jbM$|U2#1IL)MF!jEoF&OTd$2xgQvMaab^( zq;hfU+In$Zp*0tLGSB))Uck54V?yE<2&nZ1MNnHIRU%}V0r2Th;e9_lY)R0R3cH^j zG5jc%^qL*asPFkTKZ<)Jl51g8YE@*Yp2GXYJ1bfJyNp7)Roo`4ha|s?yaH-DiD!LQ z^9`OarucJ&Y_a3PluM-QYiB4i8x>&HxZw}uTWQ%`EIO2e?rfbIldn2z#&p)hk6Xj) z1Q+7{ESLQcc*-!Z;%~sd8Q0j~N_>4cv48D=)58o_Y#FiLUlmO0&Oc1bCs9bYBn6{X z#Owy`OcUlbLe!0`^VHJ#ZWFksdkaG}Jk^cg=x_cw*L%cxt3_A6h+he;e9?%2C{go~ zJXiaha+L|=2`gr^lYDY%q$3I`N* z3thTd@?sK1MxyCST`8_ByR~V21_9#_fn4gPJ`z#@I3sYyYfv(){vZ*Wy>)R@9I{e_ zYzif*j$2=Y%of)_3Vg+4UmUrpFEetzHRb0k{^ds5;K7Tg%1t5fK`j-kFF4u(@X;X% ztxH7!@|NGlfyNYlC50=q)^ z<^FIujc*)PUQOYQRu)2ucL|lhbl@rkZ>K*UQ70l6&8O3qXk)RK(;K_^q=x!>djLe? zjWoYpo^dG1KbtUw>-{2xsN2}AoGxBq8$Q?%WO*Ea)JZ#i{Q14CZXp++%zI3gIR>Hw zBm_-*4K`;xeLaGsJ1Hn)8PMG!Rq$>-3@hVJD-3JFVMu>q)BvSlDCuc}{gg_j%AQ#l zo_5VYZ})}iP6aTiA$9$g2T>2KzN_vQ6~gj-3!>=M!*LJO_<_-hm$RB`{ryMC)`iPd zwO_%ie9ylA{MSJ#Nxu3v#b-W)igLp}Ba*M*>lG4gTS!Ds4BfL0exay?QnFCnU;s_%MUV89dDK zqZ+bdxb9_EL2Le6E!WTDT2!!o0_lLFQjf8t|El$+m5Q2zIQev2)!!Mg$?7tILJEO+ zB)NxH_zKq*6PmP`&11r_Wk2ve6zgpPCHGTWG*9ng1AF1Cp)Je@YYqxMApR zU>7b?S6X#GFT<-G}TUhOPb&&o;|Ym)uP%qsri_-Ndjw&ZZZH8`B6X{eJL{_vi}5UK8*{ zOGbgi1^NS%Hk^5q_1XwkdHshD-=LSptVckLmZVyus^pH?M+EsubKJr{+N8JhWvW|J26G?Lw6O)9u&krQVo_p|iE!B2UyaF! zw=#_^{Qte+%G9@4%nw`y?$J`;c!9msXa8%9%aS5a@lB$%qvFpKb@Ofg7#jLstR^I8 zn!#5}&K);YU_Q=100q+#>LgGP|on`$ZbG-J3mEc_MIW!Un32d)F(~4$`(q zVq`x`DSq*pXYwVWZPM;*2fA!nmq$(8S$-`io=>9Se)x@R`ZF&WS;l~nKb|3L)*4Y5 z+7COSX-gAHkR>Jw*91|PN3l4-y!o^{=|TX~O=Cohx{;^{Mz-bwY@D6JOy?1>YBAg! zN^0;!-fH4d5PXCV7hlX<)bfz`#yR0jB%ydOH1YH({}!yOl_3Dxr7#_hnP`cLnYrEa zA$A~a-vWJSn+lye6XnZc|KW5_YV}ZQgfWO%q+M==@e8?M_!9VV>V>K#0u;Ef?BAm7 z7Ssdm19JR=E491|qF9uU$>$tRpW2u?yxouTed68;(F(f8fNxG1bY5>MbuA!FBX`ww zdDozQg3wWxbSMeYKE|JSt*llg9qOfG7aE3_brDbgL%CS|jp`32*0s74RJ^PrKui^~ z1xyvR5mMN|H~J_RV6;r>(k%rdj=zOsJHa(w71Hi2V@$~>-Avf|taAn7DxW?SirXl@ z)lY#3YDVzEeh+VJ*vj8$-%O5Uf?$_>SK)>yKmpN9gTPm%9`Y?^Pj@(XWC>}K=E?Q3 zMw5_IJObm1G)XaZw$AM^Mon8`QX(%N$F!$(c!kd#OF#19RPC`#uPe79dB8U{64uD} zJMR}2yPbx?V%okXA&F#f*-yP%RY4p}9EQ*xI-JpJgnbA<(&!=3keV=J&l6O~aXq2$ zHQtBzUyh#Gx+ZNZte9#9byU3~J{{xX!hKEwNl9CR&90e|B=e~OCoSQS7fTUz7ACDB1oF*P-5YEw3qf1o8ay3qRHWtPR1Sc4TL_K3)}|5J;bTO^3gQXBwMCr#&;S%Gh!i$J#DJm> z2JR=e(4qu z+^!sawYuCW82s%*v2yeN=I>G^sU7-Kq=qG;u)D}Nc373~@GHlM@1nmvoFXEDq@@xV z6UY-t8kzTo&}{*x8;!+YGbcVOkae9+ekka*QZo$8T_&6qT%ND-F8Z(Kr!JhRT%I2u zvvFFO{_x#C6#IEJmKM(V+w~?t$fqCt*x;06p^0hsS{>ID!%Dv#0=7-ue2!7R~VD;(IJQWq8sVOZO@qbcI-VJw2V4Xe z&gH|z{AcstH)1sm0d~DruHGUVct!|^+D}TU2bB&jWdC0#er0A~J|>sLTJOVH)#okF zWj!Me%LV#ji!u6KCF$#K50?UoH@|YO01pkS$5jK3C8eJWCVHfTKlkLk7kD-JW*8c) zS-$a9Pm8K*>m0)`5RkGb^GWi@i8&DA7AKzSY^iCQD3A*U*67;IKMsLd9R%xdy+tmw z|I$xlnW<>@NgceX?|&U>FbX>Hr&GOb%Tlk0=rz5VDk9qG%iJzecL;Q%9mHx@)9I)P zT&C0gp9tFT)Ne7VTu=BY|G|ZL^OQa*kD5HQ$lSgDtv{cq#984-S^X!s3fq=yu+p&0b)CrH~8SJ$0@%?;GkWr zp!Lnly_&3r+97W3rNyLtz#I#z<{@h(NQp?)>A z$fChX44uXg?OU$9uM>6YR>*3)k+)AC1I8l_uYya)r>v!0~+34d}y>=sCcMxlX4H$;inhKY(uz?q;mbM-Pnil9$IO)9KvG#2QgSRR|JF3YIEBIZjKE-dS`0|cT55bsyha+W&g2}Yj@q$(hYht^M%P+I2n^kLIcf7ci5RuBix1I=O3i;QA2T8rAlf zr8n@z)4xpkyo8_5>o5-ABtcA}zRE`5&`!x(5H93xH9NU{O!e*za7gDnlkaUW6_nT_ z*ABljSdodUkETd%2v~TF^N1S&96Xq5F5v)#XzvJ;{n91xJ8B4r%A9qvS_XN~H~9<- z@D^FfDxCoqRtwWQr%6L9R?+5@hE~G%aWk0(RYmM{w5JU61>1lgQ8cADnE;x&4aX2p zvGw*i2FLK82&+>lg_ZD%Mym8bj~mvbzggQ?T3poqtUf#J;$g7Sa4V4}#F4TrQr1Qp zNDouxxQevN*7#GTbTwF}nb?+BTo|r8A_!Aw@7sSMl#QyAHm!66=Nww6R$%lwRUi|W zu4?Y8+ceUP(;Sz_yQjRHA&gmahe1a_v(|p&#j$R&>;vKE}E4tj_%+RyeyGA;8s+WcAiY>NU9fC;Gbvtvr&=k6NiEPT2U z(gsFAzS7{-5POk}q^n>AJu|rPfa08_b&aDiCXXUZ*aa~_3Y=B!U0q!ze^z0k=V`cw zJKkEnZ|?H!K!L;;KV0WL-2(bSnCHDb?b&#}7<}^Xdo-1Yt98S73w}*CD)wtYkB@M8 z1|HaXi|Rl>^5UA=xS=i+(^i|I*Sf<^V(OeR}T^B4Lz^O0@OdbEW^q&&rUF zsm4M%dC@K37sReF7-tLK&>Tbf(vLpk(+F* zere)^rB97`{LU+}BuS2E(cs;NtcYx}LsMy05CKx~Zi2V&Vr3ZCT?KJEV5))r7fI`^ zu|bT|OnPYnD8RISl0!wO!!IB%e((6{OcTz}o*p~BG<(NmD0s^zyN0tgSKsZ8%Iw{z zlh0*8C+#ae?+Vo2lX}-v43& zn5x^&N7)5)%wDhmQ~kfE!bjh;41a$^mcYLeOEqqpf^=Cn{Fhbn25vrV@%?(NlE5Bd zN=f3d4|JL-(Q-wL{!G0a5=pp9g}YSrMl}ZC>{}(S3>Jqem1#+aGGlpJ0fPN@&cJI{ zqS53j!~W>M!@|1tgj(g902sChAOk{!o|!(&`=Uv>QSnvyM%8A|ON7i*S#L}9AoS$y=M9*I&K^>uN(3na`efQ3VF zAgx6;>sFDG=YG-+4c47GJ-a}~6wN9CYT$~(ZTWusjg1VrRrT-qT zMcurV%R!S(TsVHnxPG^=g7p5fQUV))_OGIg@+y!+&w z-29M4UKOPNV?|Q|G*bn)Ni|e0*99&VNR*iVON)a0Mf?2_2)q8TU6lJ6<@+u32I3;_ zfcm%eE?Rf}I!N?J8lw&pOL<3P9k~4JzXAEA*dZCjkgTFFUX?SI52LCbK0>|TNRboS z{1vff#VMznMEa`zWVg*Bm769D3v?qzf5R+Hu67M9Tm^164u#-~Fk2o)>J6cfY00$e zifw0twqyxAvHLINP@1f0_Ae132+)4)8_gTm5R}oted;3z+>eZ4f36zkXoBp6wnKYE zZqQd^%k|{R?UM3)T<4{FgPb8%!z*(}uEK7oUG)$lMxTEkJ2eTH8N;X0pjSY(rTp9J zp$y)~7@nGi%kJR~Vp?cXl@T%^%I{-p9504~CU;x!+PvG)z;RGo)LduY+|a^4FU-fQ z{$T&*Hw-#=lcb?xRLj*Z6yf`*po(L#!oel>ltz$k^p5;vU~mi!mr6<9Uf+}LcEazH z+Xf9T&}cM2VDjdxtp9)8_M5OehvJdwO5o$QaT71g=li>X_5(Z@A&S;N_8XR96>pcT zWT$lh%ciG9+^N5>RAtyvug7_cBw1Sean;7JKv-Xcn&1+71m}%k)lw=6usqYAtrb`~lBAGqJ;`QIK~++*Jv!!Ux?Ru=oLJYo>c(Uz zezDvhP_MEd%yGE-m&FKQ>t|ey>H;god|^XuoO<=-h#8OP@G`N!BgC-I-kxn3k*zZ6 zRR7BN<>ZC>fiIb@H$Q2!{Tea+qMRqW{Z#|wG_W`SmVz}z=c-slh zORBv*F+LlWp?j-m>%>TZm=(E0|Mw(MKGb9K?OA7rfDkgj?x1k2O%k3YXUq950r&cx z?zmvlWSMDbg%&ZqV&marF9vDcbwY><|B2TXCCS>4^qosudvo{>6vC$(LX=h2H|~J4 zl%A+h&M%~yp$zWS@a>S@zTeH_LKU_QjGQ=ezyZYpGr<0{sGHwal76uBV^`G8**WkW zxP3A&t(=)`C8#On*e6a*kxhh7Ww^GNTxj4X$i(a}YE`XTf=l-xMb~a4*CUYr+4Xv= zL|Y!T0xErnOuGyS2aC@IMSG@jD`+jhJ}B{=nR!@d-FbXu+GR3o;_Xu-`{sR>uUiU; z(#tj~dX$BWTzvsYJas#9{Xc)6Hdr?K5?){;KvMZds{;?nj{*+bUZgJo_hC9ch`wA5 zx`lYjxL{l47W`IT&MC<$rH*$~V6gWF09nOBAEdabTr}#NN3db9!S`1{c0GQZ2>8~~ z_OB4G_CKlVKZ2#?K#^QDdkfCh-_Kmx#D|~NzOah;%XT$RpWS+ygIWq58apv1wm5r~lB zvg6Ew`ke2mE;ik3oPod5S`l*7ODH|+l-7^Jz)_bG^>2oqe(ZPjZ02-teb?(jML^j( zMKh~E`)>GpnbJgw@!E~Jy5dQgX`CM}^)dkCAPSvg#0F5+8e7K5I)4z#m0@kO9k(&H zQcBlc+l80D)eBX(l=kveU0q(+Dq3=g#37Ai!eqBTA!4+P6Gb$2PzZjNKi|1`v_>R( z7e`J(^C>=TZ{IKT!zj--biuLk)Z>@y9hWyGw1CfV(#6oq4)dW4BoL%(>ph%0Q>*|@BM1|IzIU}6G(vndc6Ocf7~X!U4HRm0UGNroQ#UzokL-S_9AmMJe068u1< zi%Pu)>hp94sgF4s@D(_uDCzl)o!IJ_f@W=(Xl*YOev6s~@WGS>QXLiEH)Fd#+>D*u z|8ImIk%<-NotyirJnCs8J?iBsc!aV=-%`>ySw+p z`9|Ft1L`$#i;AF0CZ{EGVDYyLTmUM89@ni1ZhHL9E#u*D#>Ru{rcY3R8c&gkoTNW> z_sIUywaak#y17q_QstRk90&!xXRTaS%+! zX70O(!=KaQ+dUNdeBP;JYQN=FrBLtO@T^+owGecgZ#b@x%iASVLFQcTzC3BG;V&IX zYd?@Sz$*qLG>Twfnd$!YoeR9;!UZ8PBn$XDkXDb)ua}fQ>nlo(Y~dFJ zR-zgqV?#k$ezInFQB}MhuhVc!#rAUm@|*lnf@VA}=(q&3-$0nWv#PJ&aB^2!ZE7Se zP`2{s+AHeEFD|E6pm-=u3M^kqN!ID#9jN+-wo-!9U312!SSUVUowe@KvBEBuAcAT( z;pDVD+5BZO3QOWX<9m%{L7uwTk4_uZ%-u{Xa)J)spQ{~7yasgCZ{QCwUJ|}QZN62s z4a4y0p?9@EL)sF+c|UB>a}{Cl-D+Y8I($5swE8{;b{$Dc+BT#eHArBD9Ur+D>B-m2 zZpBvtgu7s3+4+dsv%@vGNlTDFla$gqFUj=fHzqSqp4LOUVI(v+yTE@tNaxyCxX*Im z5lA~(3hUo{1LZ)JU&YO)E0M^-m=5eRgJ#=i-CCi@)|1xewt=;xK#g2Ja{!b_~&-XdZ zwi+H^S&l9P4+rH;y&BENKP15dmkAB4$c%@tR1thMeye1vLf~uLz4bta z^&7HTEn0c`tBtJYF3~Ei-~Yy1ylhoFJY;Ox7&~jCwflqPiy)dTE|!o_i`GGzu+*-x z8#6t1pZKOspGTM#+^wyJklPf~iN}gx92O#7hqk|q>c3a& zvB~(i@Mf_;kIrP(KeKhb-giE(wOs15Mr^==KSEm$qV~}= zq$(?~QK1I1!!#q+7T4C-$bfb?FNPf=58S3iY=cJG3j$Y{Yq@8Wd3c`$vt9Ce$Gm|@ zR?xkyg{YTF{DqwHG8T;Zst4tqS^7>v7=5#i4*jnI%s`#uAY|elrs8govm9H{6eGoc1pPu*PF#B#mjov$DLP^ zxruVfcZqiJ6$QD@)g#;0Quh7s6+;=X#Fy)f-kOTC_>qlCJ#zi6f-?yz3yH()Tko$F zX#!DIiO-E*BgemQYu?=&XY0dB9|x8>Of}q8`CkQTk2<2HsMKrE;!ZWk42AYLejA0f zx!faNHbnbEomh6=!{2RhJn6&M+KSmj743Rc34s%JToWJa&nm0i8*lbAx&p?~zJd`i z?VWUF>{PYmjYXx@fr3XF1BBYL@;Wzv^Oid~y~ptao)J~8wBO|)Pb)T;mH)eA9~k$4 zb!e%LRRDA+a=Nqq4=A6NXbaIZ^!sNQhbu1L+PVTcW@Av3A4earTxipGvsFrsT+uJ& zlOp3wr-0|QqM>jrvD3l(zPRHXH6@0im?08H9z8Nn zgqz!6PHwU8i~hojXnO=jM1D88!8(wr);17#HXM3!ck*HW4H_Dn{am+}>_k~I#gVWM zRfwXIpR3mBs2YU)H{KiwiwUBc@@-EO^d*_Bu4(Uu`}z?TX%acE4DglJdyX~UI4(!4 zHBja256E|7t$)1KlCUBI2Iucbz|6B22C|xJh#_S~;|+H^-|J+$52he4GO8^iX}2+>UxWPyI|%csiHSAub;w&OS2>Qp&%NAF z3Y{ZzEv$DFJUYn`HkPDiL(k0x8S3ixztznY<<9T_cfV*s%Q{fg)D-R0pCR&t%r)e? z`@dgwDg!GIRv|v+oYZl)^EI@U^W{t#u6rUpHGet$pg0@_mOHpY03)GF9uE@CiX-&W zGXDt)5@E>{Gk&)V9O%^c=<>=t{9gU{l(;|E-uKbAq z0!g6w&VU|EIyh@S;y)^O29r5GSfU%!qGZDz!4jpqIR)^8rCXH0hRh;q}zK_y; ze5wK@;f5FrP^}bShy95>tbTa5+K1Y;)@?K6p=$D&6U?O$)eP8|ov%@nkIasJ_l4z6 zL`r4Dqha9l+7Y$%woMP1ICE(fV!{?GU_U6o?*jlAFU?%rB_cl&(ZW+7AmVcDgxY*J zUJT!*MN7MJcb~lhm`uNTFWN*ouGfC%%`l5%+9vQrRi5o5OXVrn*+=bH9#u-~f|#D} zUslIYs|bmy$fIBmJIaogprm2XhA(nSD?Hpe|0rd<5OQQK*&ZNyuq#b;rabwAOu3~lPKFrr~7frG@rEsh0X{?N7gq*dzRPYiFlVD|C_kcD6%{ILdd8X&R{ zNM++f5FI$~I8N5ev~oyCdc1vAFok9wMF&P7|eAGux$9zj4binl~mI;G*qUj^K zkH%gjnBP?KA2PO#zvTGlEO!zbNDG=5-RMISySEHf#T+^eeW)5{N}%hl0kt7s_u)!s z=MU!+Lq@p?5jJUM1W?X|8WDL-9HkmV;r#f;UC6_%5neAs_AW3zXh_XNF`Qw5jkZ~% z=Rd>jhxSC9@!1EWWLYA^8sS6&Ow9C^mY9|JsUc$OFa{u{4$D*kFIBy0o3p8-Ax2{0 z-!pgO12-1TsP-3~_mzz49tGb{?{qvPlATQyQ4$g?s#ix{{<@s5yHAF_}v%?>V<8Syc$qZ&6dZYeOp?-PY_Vyn1h?kY)r{ z%bM7u?iV9_qCLQ18+2b`qy@C*75y>pKq9ZdaSOs2TLMa+e?=f>D4IV-&2 zx(BL-6eqh*iISrX-hH)xdp#cL;7^BaLy}ZOe*(uAi!Sxe0ECrfopL0I;lmOCk|s~V zT9_muOj!)4LhLM#fatc&#{j0FA}E2P>E=q;=!UICgw(4-eRVOUGI`ocV;OaUZU7m%gC-wQT4Ah~S8A3;~ADuxj87 zFdZ;&YTCcE{-q$y5y8ft?)XH$ZA&1YzVE!&cO>)Y+T@dNFY5YVhv= z2L4N;<=L`vKXAk2f6~OTW?gUuRjn~sCC&pAP$_U-|2a1 z1WXyA*=MDIJ_mTP^aE~iO$o+sV25HCXwA*~22OR6c0BC6mx_D?JUg@y{RF2`^xF9t zEma#yw3Akp=fLYf>MgXIVfK7kw6ic1g?H;*R+aRN%{@yu^_IUhmC&zCJXa9k7-{Ch zajd6|JUr<{qyUJV(BWW`VL>ocIBEaw>0a~SzH?*GV zw-9RN>>GUUs(Jaoh?K?KWaiJ07CgDE7oSPUs;~Q2alr+@5GhKdsrZJVj@;U}+f5Ne z2i7iRRwEyiNx@{Z5?}Ot!$-VPmOw&AmjkwD`l&~KF+A8>uFV#co6%=m{XJSgc1lCLYxk;il}LlEGxgMpHPbpoWmupGqKO2(6dX^(%!SJtmT!R(W{Li6dR(YocY87Uu@O*!Hbz_KMnQ!@ZTc2cn_4@d7pjVcK9v{t-3c ztMjP^darK5B3|`}T`V&fSbohr#CI zI%mvwn@H}*_148%uP1?J5ckv6x=&Y%xHLvQ7tx8WN|{0|s+k*6tOG~Uk|=wX7e^>m z&A+1Op{MZeCY-bJ9fi0KpBZEf&m}a$ zcylr|WV580jfDFFLj5P8i7pbJF)@&x5i8o3YYIeMGKMo1wb)2v8BWcr8Os2iy;+vCpkFJykJuK(x2B~P%=X-y884ey^ zHRremE?>(FS^5HZWmxE;!nr+SCM&z^JYdOb$#aP@Z}=X_(z*k4OJH6*l&nLNRtND~ z;>&OpCQ{OMDJb2}#UGd!YY`3$E`#y}h|B>u3y$M_dbQwW3$IetlU1pJxbb=K);**GXd3ff|9!#q(?I_>!)-;> z0X-*r8IU7zA1+REy7fC54{#%l8|e>fYtiIn^}Jyq6MAu8RXM!~BwW@CmO1i;`~kY& z=;}9@ZhCt9FiIHE`^>h{vxU(xvVk=a9k4!nl4NF)ljrHsPO>&-OK`Mp8Itl$l7BdW zf^XOuqx*t{{2quQv~9Y|=1Ghz-3#kbiwTSKL%VelfL_Grh>;-EW@Ph4zCQbw6JKwA zUo3l9?Jz1}6-LQD+oH8n?Y=3}c3HwCZi%Ps4kcAsIDF$kkHhE|U z3kT{oHEkRKmhxLPRRac?3capsfauCu{@;kMlHV>#KqH;zK5t%p;-(nzV6yCH*36x! zKm^_7-fGYHmY<)El)r10dhV1D;GU>hVfD*yP8pSYw#$YbjI&LMZ27m7#lmw5sHOk^ zB@O@%*KvrmkiLts%_Z88Wshk&r?cn1!5-7em3!)q9eHYc?@n%m!iPmE^gS|Y>rY!L zj-18pnYRI0(?-*emS`jdlCh(~nB0ez21;25kEyI}AEi1+sq^+sjp*WClLic6UqjCf zV3~D9zY6QFIvMb=ed~t+WAA%yd)ktrb{|Dwy9&%mGNS)G#8KTe=Z9&PNp<;oGsh*H zO{exDZhd7~%IKEAEtoU)gn0=vk z8q0;?Cjxcxe4eghj{j)P_0gyT+ z*9bK|d&KS{(H!_;2lj83O^?3$&w%5vV+Q$rp?LJ-tM;>VTVSRg$8hzP~wkA!jvC{Lt~fVVZr)IQUne5o0A& zhZE$bT*tNYz2+GM@+ab1>S?54jex@WLb}lst;b+u2%B_!n@*~o0D{T{LzY9kV9>$m zF7o>Wh@YA$Xk2Vd%mdoel*vAnD`?X|B=B~ZR zJoN2vwN*P28Fe40N0EPMCW3xG##@yFOPY5U(jiv6p|L$vRURtaDVX}-+`1v<^zRvb zKIXi>bX!`ukScf#(1*85jF^xsmsUL{H>K)(I-`L&A`wwbRP}eDF942V>iA_)6U##= z7s6RmZ*;RzHmezjANWC=MJ;&iyYwf6hZ0WM#{Y&mqf6?a29`}%ZiX1fo)=t|Kc-Gt z$WlmIk?VX;l3%#|OeVog*^#NYBw|ng@<~0v7oe5-0|w;G_yZE955hCh7nVgc+?9h4 z+GKsYg;FhIVMAHDy3r7qX{+3@CTbM7vcpiG$6cfHAjXxRz%hwDlE3+{7y1ZS{(^XJ z+y`13wJ@K!VDK2l7LT3YGkNZn_c0{*3I~4^MhZ%H_wg>eF!Wwy!lln@j*K(U)8eO+ z{<}XUg-o8LiQB*;kB7PUG-fw|Nc32WW!DRPKF}%)=H_dD73be_!F{Q*m|K@W z3ou$WQdl>SP6$^#duBE_VoTcwyilB-ZCnleqb&BT-ZuCKAlDy0;;E)t;y+ZAy7^FO z56Z8!j~`JlylSH5>;Z`FR;ckr#+|E3XW$ikNC1lUE3IHk%4=3EqWq5v&B?&TpqES- zCL+?!T<{5XEo39XITDGHK-u$B+d6!BYh5N6Hj4QLT65q@y-~pM@+(Sg*btjTu}##( z{I__}7;`wcqznS|BLzMmdRU?4R)i|iD$CUi6vP=CaFOKs!wYaP3?uv>QO;&&tH{&( zTOdHm;%H8^Bppb*`yDl0i0aP<@G#^KZ#=KKA}}&NT=ix7fNF)qr@>(}h=68hHnKO{ z9r`gKP62TuB((twMsvcluy~d#TV6xa*zWeL?a?NZiLbZq{w+My&etFCEOCBS>pW%u z>X^SE^NGamHPH^Yo-g58%=CiT$l`SCw2-VrJwauYYp{RU09zJcZt=5;_u|L+KLF+b z$>e(H5L(Ny8z_M1xWUYK2y3eq8=)$M{$`_boz0Y`79n{WiYDS5D9nEFiMq(urpL}K z@fDydo!!>LDPmwBd(5##;$vwt6=|@}Cfoe#S5@2m&?0VSvB+>1>)W$uk)%{C)NPI4 zr33j&uR%E7_0y$Yl@Vka{Nf^_X@3s=(sKKlcfHNb?AM~cYT#qX{!k55BAg0<8-<6H9}85_oorO-v&@OY#vcnZl`oTS6ITbqw=S2G z3<*-?$;{H9N;lp-`8Q_+$W?mep4c^gDy@NzJ$?IcOXZ^Mqq9vx$oY&`N$G(30B(YQ zcp)Xx!Hu-LczH$w#gm^X_qMaqEPng0;iO)se#MYQR(YSm_@o~3md#8~G-~cap4TGo z`6>pt`FWgkIoslDm@Rdu8dChV8Y11vne?q9+w1Q{T=%alf2xyw0kDvsad28R4jfv? zqh1L_43-V;Bm|&Se7Y2E=2MhqS25Y9DW}rs2_=g*+-awpweX->;U2R8O<#I(-C8Wi zBkZt0bQ)-o1FK`Qi-)`FmHUXh9iv5iQ zfG#5)1JdjKABzV8AM0xE2*CUsx8DnNY@sQbG5M=^>dgpd{7$1sUfE|RRla9$s~B|4 zizYu=h%WMT#KAI96KQ*}PlYV$pd0~Q?srvt0JnhLKL8ME(c&m!vLyf%HTt{{QfQ$FX-LWXr1TJ&#!kQ7WtK8M5~}MkLuH8HWmy zY)7_a&lA}*>sZHjY`#zL_viEbet);y=b!v1=T=^i*W-Fz*Zpd&5vMYETTYBq9Tr_F z3f;!LaqV7)nM8(1G2TWvDi(%J14}7QJ-!c9AYAJ0IR$L&Ph;tAX7vJS!7gf`N6~b^A85PxOD$`5ha+5YhOfqJYSoB%rY*)#o)_7heqtmlE zZyBlxukVxO=neKF7e4s%51w#Z8S9*53H8Qv!_c{qnIrNreg?kVkkU-00HYc=F6ic> zb{>k_F}H&+cGgQsuH^k_ufu2vgW@9|K66=fSE=B0=K>CNNr{>%VitSQka$3SKTAb= z+v_=&eMGjKTKzRr$cn^{0h-OAu03DMF0Z7yeVwgUdQL0DxNE5(Kg+@_s=n{K(ToAb z3$b*vQ>x5kUPeZnz^^z&I%Yb;vLgor5&zYPpV1&((pZc!od(X61#8t7`EX)CRZ|`% zZ-t55Y)Vq798P^Zb{^%! z8{S)*x(o^fwbOed%Xc}=zL3R1w}g7`-N_+Uw!z^Tx{ClVf}VF|?eEd~g$_LXcQBqY zPbR6}>8h;oJ6P-Zvzn}R#ouYl3Dz)^sEkJlWijs3oaEuXP$pbHZqC{m+L+|^&nlA< z8K`#bd3PLcjbNrem%WIrjlF5bUKl6>64 zS{%H?#T`H#&!fw_5Z(1G)FGky75Ui(F5?+RGu`Lb3lPdVT$Y>-s2IvRY$6Xm=~g&i zOuGGNmaDn#tELJZmoxg^E4t)dZQZR19DJwp=b3WBn%7!L9!CGZUM9 z4$}j_$Cldg{qQoL_$A`_RMzawx=#(((}YCzUsVstsh!95#U7Q-gJaR2lf!6nAi?Ou zqC;mSYtYesfmDBw-Ni1>#SG6ev@(m)&O$8kdi|(-CYKq&vdB`g zjU&c*d=zkdHD5c*F4t4fCY=gw*)pmGy&Q;jJvPTWI5Vznt6MNA4xpOH0?v*Ejp zi~EIVgddAPaxVmx`Zj04bFE_VE$!XSpJnok>id$7Uj#hP@wcr4TO_u)vQnwW9C8^| z0?JP*{yOuRsf2E2^8=RmUT)->st84twBEpnL-{UU4{YyuZfvl{y6k}cREps{ZiKAu zX&uPyy1u;XP230e<4xFY3EPq=e`x*7V>3{oA(+L&c0N@G#Va^T=}7F1Mk$+ z(^`fO!!qev|JP30wJhNGvj|54v{$hgGJSrdqYpa|`+OoeAp9 zte@x5bSBrfDP`J^+;Mv059BV^X8CjZPfbcb&3^<;QnmYQMsZP`ZXIfCMzzA0j}1BW zXGH&TN%=jid^KJJgiVrw{EwhCgW4$yKt|1hbxPxlK=3`z-+tPhX{?Vrv42FkKX%5% zaqd>nRad7DFY^dZ4!zY^Ff=si=gZu$vGXm_bKR60ef8SmuXq*HHHME0AUw3(1=uX= zJ+F97E5B-PX&QOGeSR^BwIy?&jI}C*={GfscUkskw8?N4^im;o(MA63@=gS;JOafh z%yg&_w(A0&LuH?#t=nmME-LBSx^vkHx71kjn0_kHWDkMljq^Jed81Co?!N|MPC6qu z1H1qX#jeXJY!}n4s#q>B4@?|f!QaYLhQH}6gt+J5O8%+q;U@GUk1>pHg zHocoHx0eVix?Et2jQ7X)*-e@-y@a?SY$(Y8Z%&R-BV3|bjE5l{ymaI%xVS&1D)q3I zy=bc-(v2AZYCI#$&AW!v9;}mh{cNx$H))%sIVtv^l5p^OjcF4(Fi&D6 zA+p1VMt`(_XY-5qgF3}&$pmG806!V>PCT+=9UVhPZ2H#lXY&HYiX5v5TY%C-c=GGj#jdo+rQF-XF7!n{M>N zOx*h+!DFiT0kYP`gQzDzuoqFxaeQ+N&clc^(E{oo5t$4GLHECI5&tIs*u?cWCdfx{g%Ieiha@Vbf5792NAjUm&i~I!!kL?m}Zwe>t>7 zvQ5tPGWIfOll|Uk2GVMNXl?kL>CduF0`9pV0TfLPXt=gBxL^u~HR7Fc*s&`>l*=Jn z3d_fq#-X+1KQJnCNnOvkMC1ZReL*ec4M}nF=@^+NJhs~yWkvPtUoGt!9T{=2pD=3J zCK^&;I2MWRV$XZoI#RPr6+Rv_oUD}jHC2(- z;VCtaw|f=F9vmDLp>&sO#Onsm?ubt@YdDuIHL#Q zY|u{k8(Rvzq+Jjy>RS`Cia{+w6^+Q-82Z%B>RH{Dt<_oku|1nhzZ4_`2C8g0a?e+1 z#NEcR=i`l1G#U}yNYSzKzgg9un%Ab_s**?Ko- zL=WutPOY&kC`BUguC-O(UJqZ0YM5CHj^*|+HX7h-o7ges$JTg!z5MDhX?AITc^Fq+ zq&LD3OD*#IdZ?JkgCwskss_vZaGZq8!bIyXVX|nMDKB+C)Ud5 z;l~>T`;VU*ix}4JW~P2Pxc%aN8qU;=?yv`G1x)-asE%CQc;f-|)<8LTe5Bw{>}&F! zcGcQiSF<}=1rOWO?_A|)hvs8!|N7_WI^67G1W4}@{Q;Qt3-R^vf}KdPJ$`Vv`p3G2 zmSpzP0fMXO-3osl5G`8R1pOQiE2pZd8n&Nb^?$7U)!Q8zBz5qP5Sdh@^Ht^l>6zlc z7j%aT(YQ~AAR4y&f4h+Xzq+Z>+|ts5M{M%)U&`faK?BB8hHyQ`zxQD{=KF{5Z$Q)=d+)x|qN-NUonoha~;!Iz0Lj3yXH;b6V}?l3%u;yOWL?Z*^r@ z`QOo8dqVgDJb;acbMdm@;bD0TGv?etSRob;2JNY7G!!3 zv+BC&b!%G}wDLFF`OH#vIkr@3wHJF;QfUgtZ~ae4ouW&iFGml1oqBkboiIi-k*4xJ zBy)hsQ-$M(Q$tpY;1ZlTc8NHg4&*MCZaC^x-9K6;br?$f%$#Jh>A(DCf2C+j{5*P> z*N**Fb^sw8g9F^Y=6UfD?ynmH&pREZ!EA(w#Ofr{AGNE=$T95S?~r89^sw{6ZCdU9 z=>?aYqr5ZtkgUbaVs1N#(7^V9l*eSJGUOE<@|yW1c}`}#huehG4ODy386?Fc9Fiza zbbg;mtP-)a&=Gx(t$ju+bv3 zV#YhZ=xYcqp?a^yZw_Opwd=*AX=@(mmQC+o6kTF*MY3aPZY-6a%s#%?j~G=3p^3mZ zqnIZBm+6Gz8$?bSXDG7Rl~2rPyn9*fhuU`RdWxiJxaTSvr;1>71$I!O#~O1}z{e>k z=%5|sh+XaChB`5w07!=Iq!6-Co+@6EYGM+U0E{XyTG0H9@|3+75K3`18J)}WG7A;2 zv)AlqwFZ$h(uQ(4CY`@1FaLYNZ#e#hDx*=yUtI@f`xkbkQ*cJzJ(#QMTQVBr%QIhJ z>&B!suJSlMMe^BRtu962LMhAEIm8%q4MCLAp659FpD`H=#^lggRmAkx7^OXWVubiI zFs&5509H!g2Y#QXf4w>)2nNcuO=&Ink90Pm#BPxBb9&qL2Q#Q^x{-w~yv~5vNL5h8 zhYL$3b-jC0VH0!fj-#?6NZ7JoNfSM~1Budvo=!x%W8C(tBIs;wGGdaCUtS|3LJ-&1 z{FOaIQ{KsG07E@8Dgt_CV$$P2=B!Qq4$) z)AuoHJ6WY0l>mp)amgzYx7-kkZgHPTjM9-}F_mgL_$I4sL$K`1d*$;fA*9a^#uux| z+*?w3PAbX}Q3?*4x+z*V8y#a<_$l#J{<_PHy+4059dSdn6(k)-_==$>BwNf{PSDYi{Ab~PS?PYqq;*bx$92*s-zfm~$SBW0EFT~AO?;u+7^5zPrtG0Zf z#-?K6zORz`y+g;)R-2bMPtLwOh=Bd{gT?G+PG1JA(K613CyV?c`bR;#4&`bThG2z` zl_|~(TmJI=UasU9nP8O4)Df4-dVe8D_A_XRK1wwMxdtty_=+zSNp89E4a z_Z&eW#l$m_A34+VKbd%oTTZyprs6AU?z5Kz77N&QC z5q-qS;5hweWg~u2?w^ApQ=+wI|Ef%?L~B%js0eUSV>}FE7_TLF2)BhTMf5n~4XS4RQG}yxUB$hkfqN%9j%j1G(8O<@Dp4zrUtV&?D zrk_#0&khmN-5{(8sM=+jgekYdCyWM*N1wGS4u!pp@I!hZ7?cyOVs#U1?->Q zOZeZiMf7I3qgtxNpv+g`{}{{Tx1c`wjeKiSv(!@8buP~&QdkeMp}pCd2*b+onVPbx$^UX;%Cove$W<0^Eo zXbT)?BEU<+`(A9NPb3XN+AmMU_rX*botm8_jl=4N*t2}&I$>iFdy=?hV zgAdkt$_CP}o7Xg!KUsIBz^qkvZBr->y&j7F_EO^feG{yIP>_jHHGHv-%JSq-%?|M8 zOsM02oX&bp8#x1HR_B((cHv1HnCN&`meJ8n#Y^T2E6~k8YNFNh?7t+cl}rOa$1V1n zTRPeT())kFnrem2*L#Z0?<`IA!npr-154vSbx$%Le<=-Zi|Q)0k@=~O!HV#sCkCkN zgGqeP){*01+t!@#xbZcZ^|$S*b5gs|Pd*fE#(N9lCc+ou#F?YoPza^?%;;Rd6VCYR zhf?U}Bdk>sgS?*@6rWzKS@P>{%)3-2)7MS}VN-As(-?o!Zf{&~h#r_r#+M_;&flME zKXtRWvop)SK9Gj)cQA8Fuh&Mz(l=Wb<@_QzjiGrLOC}>;1=W%j4GA7*+|LXUEt}++ zJJNIFaq9AVO7SpmL8qZha88H-t9ohf@|vOuD6U6Q$rH|Q_g8zJGp)w|k-=z5+*!j{twjajl<>f`YY7qpX%6j2c1m_-Y z2f}lacqL)OoHFPsx6wOd6EEfXXYNjcFS^TO}LW@n#quRN@# zD^?0M_ti!X+Q9Leaj5Y~Ga%|ze2qLxrFKaV2o`|7$dX(LmlAfAy@^exsC zwm+`$N?e~c)20v+N3tO&#W4(AWdd8C`!++NlT*DnUHAsXFVd1Ckcibjznoq=hV z^4%dd-$|a(B;GZ9bIz;zOd>#lQ=g!&S%RL72WYMgTV*;kn==fp`G6Z>?7~Mdr#^S1 zU!^JGd8o5gV>X|v{#YSibL4n|yy-L`H|I?LY#Dw3p8@$649J18%7~_c-|bbIH1&vV zXTQ*`jT&YTHk`OGJn!&dfa<8yyIba^Nr3NX*R|d3&%PCP6x(}{tz9ZwSr%+pqhs0F z(Thvg!qhz13jkCue;i60u(r>WlBhcYouUke7*Gg5!N#kB!Gyz0O8nL-OrjRYlDons z9C!AwCW-n>s!uc?xhIsxmPE%^pbD%>KT;s=stRo2uK{%>DbX?UWMT|%yktMrCTjpj z`XO5r>##Ddu^om5^-t-`=k8+i*t@bcb-z~M$QvOi*nc-I1b_8cH)A<>Vu$@T&~xdn zbAbgMcRKNkl8U|s*DL)6cd*axrRN2;O^tE#*fG!bk?*IZ z#URkud8K;xf4UdF+-!3E`0L+hF8G)rN+9H#Q?I8?@hEY~wQVXZR2I)?$2Sx|^4&1^ zM@D>flxsNC5ZOzx`VfCt-XrF7M)FComaL>n;~`uh@?8~C-s z5t~z#*WCx)JZB58>XV*GpV+uU3~FqBOLon~O5Gj%fmD4KV)cR<6+|^a+6Gs&!T4|1 zp!Wv=n99k1|6wACW5uoIBEw_8?@%vU5$y}9MWoF@{Cdju@`@vXSUv1pe)hu zep3f%j_8GqH!uRzr#@>sh**TZWRWjthi#474{P(}S-R__8D+-EAzrxV7S1PXOd?GE z^VqY}KD-s5=>m&lVK4t`;l|OEr(RkzDGlt*JErZUkZYwlq(%_wT^7m*wC2YmzyB|e zRARYn2sS@a_l}GXFm&;I)g+f5>ym;yaI(ItZ)Ru!G!GwCMGwS?v#$u?}@ zT*q*>dvmJ4>nBNGaysgkR^@>~f34uG#11e}*{Cz(gf*{(TQn;&i!mp7Xpz`MPwvB= z+Z)K^9mSg~Z|mhHbJ9y`UD;xCe-Ow>(m%ISXZ&$rWujSP_DqB4L%c-gEtTOIyz7wm zs7HM9$rM_XzDje~W$JXK>`gbYcB7E5PMw$SDiiSvV~OYZh@sVLN#>vx{lrJOfp47O z)9q%va{f+)uSnR z91tWE+vkprC#=$=5|Rjau;hM=s!q7u;m^Ao5w6{IP9;@eNn168cIKJL#>_?D-~l-_ z+`o`GcZ3r@1`Moi{y1tMLXf45XnENV@KJSx|*v!dgX^h9Chc(0TJ1p^*`8>J>^ zMUu?*;UI@jF^f(lJTx z7R&*lzS*}6!l?8^1K&L%bRme3&YBga;`q!sc83 z+cOuH^>2_gys4>-@+BkBm;%OMLb_;N}=+xgczG<+@0q=BZJD=9#<5$-skuW#()-Iq@TqBZYu+_ZD@9m7A4>=(z~I zduAJCa0Csg;)=;RpXZduAxq}|8=^E61{jP_-9-9iLAaT6|8`;-=VvmPn{1Fec)zMS zs64bv43QXrF%G=;;}>UpXV{TD*=<-C8H=Qp?_TQrz>kXQ`+Oj}m+~OMsKSO^6eipw zQo*kizU(e#x-3e8wzUncy)hZE8fV25lF}Tok+i|d%j3GK3=g$omG}W76~zVs#h~n| z&cl_G3PKEVE4I(SUB|_rP_4c;sfN3eL+*>~L{F4>KUl1l7&xpxV`ydgl8SwcamkLm zvMS7t9rXt$iR8VZR`R2@k`V;j3%ic~Gfb`T_)n(xYhD_RQu$p*3S1o!-xh7T@GXwD z98kg#?g2l4(0qV?#U?n$IZ7s5UrY3*g z8&k+HbKy2kv4oOl0+k7*Z07_kRI9{J<|6VCd110FswF884;lV=n~~el9Hc4BUNTM`&3c@kl*7nh z7<8V9{o|$i4N?_yAXSkDR=?65n@x%XsLj?NRPZx8o4{Iq>p%`-yYAySCaLc-{^}}E zhpurFC-A8bqAJHSvQ`V*cMn*Du^$W95<7WVi!X(k9Ws)yP=c|xuXF&Hc%(z*4iHf9 zZ!o6CT9??ru`O0_`zX+crUQjZ>uU>XN(W_*+A7+4A}=!K1(}`YNM~iqXV>2sg5sqI z`qnyjfJxlrkZyQ>#C|2ga*juXpLJEzStqgi=83{@>&Kp6wj&AsC#r+=>v5bS&LjD0 z%0YJ?222z!|4*IM1G#cf1Yh7CE-374ygsj&doN&3#$)(dU~y2OgN=X%!7UqqjhvUiN2?_r8*rv=v1%;8>{)YD>7hP0x9*ylxcB*hzSFyhr!%|G&VqD^P1Nm)bpy_8^n%H zKV}<@Z+E#+0So+4#rx(8Z+C5`K(3cP|XCtXz7P!0I&qnU98R16V;4@(BCw+R@J+2FX#Ut?{sqcX@ zCQ_H;D;%mzXo3?#2BAl@X6CJ^$czng57|W`@Z2C|g;cVkFiNx1tg&livs8h^-4<%i z>d6ex#aXN^)yA^CKxR;mEwi4+3V8m4+m8new9stK-DKCLAfsM77+HrSkJh5i_>ZBr20#UfWR4??mRW(XC!BFjthaCYziKFYFMn z1uD~%N%hR<{E7*P{2E~s-@idr-go{zcNTz1 zGe=jNOegw-WSehN8QUs^-cVCGNx*wkI-sHnN}y(RVwH~#2#m84^dk6dAy2NR+$&D` z2S_2uQFUmlfy)+i_(FQKQ8Rc?9i{H%ZH6sU;+jv7Nlaydnf7?=b>0}~TyWuzvfsQcSw3Xi~+58ZYJdYD`lFp%M zP99^SO0+02RdB=W!0?V{19 zPx38+)2F77aP*Tq){fIbu}cjkNESBvpC(dGvL6QgP--nEoWG!zcym8v#cHPUWTD)3 zP>$=5GRCJ#eHg^yyu>v>WD$GAHxi}SXRx-N<{zfIWYr9~2C zQn%_e=;sUJ71jM{b)7()$29O@IFS(9bTDE(u<(Hv2XWa?@Im7lt{{ZQC#t+Y8{gWu z2CukFbig(^GNp=S0@uSVi_&qMi(iUs@|i5>8TrpyhtmUv=vCkS6s-WGE6cRhh!|7S zz;sgfR;#aXIZP=IuejsFA-kj%W&>-wZnn&mY1m1Xot>7Wx_uQEIk|F#=ta5@YV7_b zWGxB;0gRy)9p!9Ac#rhS%A zK%!+1YSSMlyss$U=mRXJR(`K-PP^P?CJN}fxhHS28Kw!3^tK$!j*~5d>zKdi=2Xpr z-7V4nmRRiwdB=1zC0#5vukv0850&8m28U*2}E7WE#_+^abt=` zHA<(=clG?eib6CcuqsCihm*QvOcPB4H}3}wf&v)w9pV!uB@Z#dL*&xvtNh`Lf{HhIYMJzbPv zz4(`W+PlxReo1?N3^?2AC^3JBGPJmhx=^+Ql|z!-@R-2va?Tjj$*43;`-&V1fl!$H0zIO5W1sR8A|eN2#Iv*kN<0< z%j6&7V4%Ba4Z-vT(+%n^0{o70z*SBm(X*eW_T{(EQgLoT_KP;1VHffE+y9Rpg?(~} z6vX%}y0F(7k`+`%IEJfO^dx+u!0qmv@k9k*!d*d~%8VP@l^KAvi(oA1d738t%-ddFclCZ?iS!(UYe|!GUT9-fhN|k{BC}@d36SJxb;0!&NRD(1-!?@hP4LLe~E%`CsoCwLuG(kdD z@ZHkcUS;!|L#3FgTH3!p`pk)gKl|5s|6xZ^qj&}b`pQ}=U@{) z_}YB^OyKH zWKvR}&eh<<*k!=+CXESAQL!yV;YaT%Trg)ek-{e_Ru99-8F1OLqF>WOXgwPDwBIL6 zll!qXu6Jcb45*nYK))S%txn=}Wk_7Xj1b_%MhJmq2;Pb7S3zp#Cwt-Bak z@H}5vBx}Yq2WX=Dl~XRv^F#KHRDbTUVV?n2UmcmI z9PJdf`_$$HDh!Md$h1q`=JtL;{MNQ&uNNbSmCb#>CM!NZ% z@_|G$ieGUWS+UE;!I$hL+GQGFP?XF&tFoY^UG8UmGxpAQZ?6;B*Pb@PaIihnh+gM1 z<_B)~(n40q-k6)!T3MYQEyU?-E~V-M>OpT!InOC!vupUCOVUBq0(tkTYcZsO2S(ag zN;EbORYrfm*vUd+%>J%F$dUiI%5Nj6Jt+Sqi+C(NMY_6?ZW59{(SPpl46FD(;yW;Z zMmQ@B_EiEz`Z2Q;u@UZeHt-v1`_s6|b|=PM`#4Syl5+iExh#HxbTsTTotgg<2;9Iy zR2YrWP%D)Aq~evbnfud8;m@I*6;JZIt_^DcHOO|p?3z`+#7;U3wv<_{*wU4jKmw3+ zq68H&8l?iwo^*R|#E!s23aBnhyLjCqo9n(oWv)$Q6)D!=n5myffTiWvg{`oB91_u1 zdg(xeDDA_sB`Ej4vqRjW{r7`j4j1T&WJXov_S#W!rKKGwQWpolAP17EQPRr@2#G@ znKsMQQE|izj|J2VP$ohxgEQlBAA6MqRKK6P9Mc3W>T|Xw-SAL zC%AUO)k+AGnqxuGjU-#4$=Dq0>F*zyzoDO7vP!trrmCkYkVeuL$1}9ZZ$rbZjd@`{Luc9;~a(ALsoa-$tMPkykro z_M5`D3VeNdr*6Qk>0QlNwM74zE$Bpi7K&n*gE!f~7ongKvbXv~sm?8SmhzlS(S|@S zt;MBy*(7$IsNREMY_XLmS-b9Nl5))8nwz%42xxW_15ccFXhvTTnbL z%3wYlE1EX0ZXNj1D6GIg&UC?{{F)#fWKZCY978yh+N-9Vom`d!eT z-?ue^w4%V(Y1#rG8;d(5cIB{Ku5~>dN0oY4F>IXKNdCzko51epMy$^Dc1CXQ2CgpNh`MbciO=R=|WShOYy#eP_^B@-YooYEL=R z_UEl{-5<&iO-TytH0$x6T{2bRKI!<34VD0ZW=ENN(DgqMc{B}*?f8$X-Z0z`;8=|s zkGfMFutXSmLRT*D`ThBh%En})@$P$O|34R&sY!{^!9c~VR4td!6e)GOWPut{tUa0x zFo?6d_?o3+6uX}0C|{=Lrg6wp#h-8m?)h)T(Ax8RV9)yQ)8DGarXVXJmH7M_oyM}@ zeP18LPfLa66S<@Bx!gW?C-O^z#yr>GRu{|V6H`tJ6I0CARma3C9St6FMs<8?^=AV* z=^S0puXk+DkdFR#aOrVvaCy;-eUjD5+`I9t{*}q)?I^U@*6S0qhJBXpjfX|~qUzTf zkv5F%u*?^1urd>;c|9z`cwQ(^DKNm7jYb-*{4u*<%5@3J^0W)IyLF_>#8N!$e-g2*Z2 zDSWLq+XC+yU)xNvXHnK5L9z9YQ8Kn)Tc-RVJ$bb^zM2!6YpaQ z$jAFdg4TQF%1#F8Q}atdajnyzM`jae|8W; zryQZ!^m*ugt1N+7(i@&WqJCD>EE6q-rD^j16Ka$2DqHW4?$@3li_i^$xyeznJ+Wi7 z(N!sf;rV17k723qWS^hg>S^S#$^f(G$D=PDegqt=Wh|2-)%OtM&Kx6NBp)_{D)k(l z;}=PUq$2PxKLQUZKVX;R#&-3Fa+-H$(8k00WAB#g5W`0gjglFrZvT`7y~BOQ^{-;} zm`e7~Qx@o9K=r)2PVRZz>!t0TgIRY^S%ah6$96jZ(rc$XiePjf93tiGc1_3{lm?S( zy%`2+#L#&bTPS5eTq(*_GD=iNG$LY)_%_4R-gZ6jp>6W(WHNc5ks?FM`SB{wz_zaT zo^=3Y)87w^77n(!fz$N~3JPW|bP;?0%3jL;N#QMK6VclWWJL{&@AXZNlVnu87W+U{ z0n+j9z5>vs8#lb+42Q0;-NYM;ovSP9+`4o`T=|m=FsFNQr;2bP2y?AXj$@Td%NEVq zcckUz#87p}QFsvcW^8Kvj+`MP8_YK`L|@HJ8``7sYim3L-c!bJsDYYMhPO0EgW@!C z(5UdNLMA*ZxXkRiskA@V5&4~pH(Q!T9m@mmblIlu_9eWUc|^&tr6ByR#Myu&Y!;gL zdrR`|8QurJapo#(T$|cQ5)Dypu%O?kO<9wBMrR9=jhE}8Z-`{yXqubd*rdDgW*rapQx#rU)V4rNdytu=3N>Z7|p7-em=P6CUW@kY&8+;r_E={{_6@<%C>FLNQ zLRzeEas=gHrDJ&!TyBx zlSD{tAii}m)c1`W9KEF5%*_Q;@}E$vM!b%>pw4VGHTWT>gy{R=BBMa$ET}fQ+j#&y|A*zmm{vL zq$2;iR7}cYeKWy+j{S|RV;K!L`+<(t5sf+?X-_iW7wIGs_KnY21zs(o5l3RrX%IK= z%(ICy9%$1Uy%4K}A ze=|{`LM}m;=c8R6TcTZz8uc+`>|yd~6-CU*l3*0KTdG=8&9~1{X9p-rRT_S9_p9Qs z2JLB9o3VBx3g$m&XZ-JfH%`&IsI$kk$bHQYcVg909{c)eaRA#Y@f$N# z!x5eP!z%6;gN)b_o>6E=G-By<1v;SKCbZ!%Be{%!fVIO^fGTcS$(pZqT3%uxtS|Xu1~p@`$ktLy^?M5BAV#8MAk9CA*QEhKP6@E z;Pnr!F;n68zlkM|qKeTs)g%GsGt9PuQ1@@zd__3-A+BAQrHUQ+uO zibeAmFOADH;YGodS!bn_k*Eb`Dwj>upyMTO#Rzohf~E@@hS^WyT^RRWI;0BpFGL4R z`KONRnXXNQ07&8nJOXj^-D5e?l_)4{yyW2SlrQ-L|KQuTu#gkNccM3paD~RI#|Jza zsgR;KA~Afxny%V!Y#P}p&=m8naizu-mxU4C09ktB>GG!07Ie3smy+rrc@%NKK~%D! z;aU(OHnnn!IWWt>FFbEpAT*prk%+cgiK#k!2~&;Y{)~er%aC=U$O%(83t`2|Uy~`i zbR@ZbmU;^oh>p_18kC@s=3Z}WG9t5yTrTvJ7fI^kiyTXP9%SF7-v%{fB?;g-CkJpL zNiNU9Cu{CCmTnZnp|mC*X^|3yY~MNJ-RB>MPdQ791y^m=)H3r0ytrMN9}2#Eb(BtR z@U;uy45ZWfR3R0SUtY|fNvl6KT9T~sbLL(UzRTt@g9k5`REkCPkvdq=Y)N63D;s~P1Bg52SnX0XC>nmIR;@^X%tD`b z1Z1RS<$J2{A08VYC}iFbP?kptBxT+UXc1=Ip3;xA++C7SJRml@5-B5>_k2N#ZC`4t z`kaK=>FD-&g{{sRC~JA}@RL{hPPtWAVohO#7M7>7E}kb_1NjXiH_m|)lpp8F)`kP3 zxkAoB`nzlOYLEz!;0vi?#NZp@VxHpov7t-`{=O0Nk4T$XaTM-YuA#cRyzO3;pm8qB zR9<|Wy3DEm8I-p0nQver1L~4BfWCU;*vIQT*g!eP*{Oi%y=c;CP1EK1mfHNxU_0!u zRZl!H5&4!rVox6o`i)MxNpMi2V55NZWaa_lCJ5 zcsGd7rUR_0%Co6e+DDigd4t*W`(TZUVRn5Nn&MlD%sE&eZOSXG8?rjyT?%e3TY`~n zFBzwnoq%O4=74=di@l}Gc!j77bJs)~qiL4D( zrgdc_s#pcOSdyY1tFQd{c5TEo8|sj~QL-Nl0(*1p>4lA3U8UbnNihTxi|q2>O&U(v zkq)+9g-^d_*(m&!#&5?_B#MW}e}EJpk{(|ZGThlQ9;hYVzkdyJc8DQAxHcVhL&E6o zHH3PrIX6c#*ZRj@9@R}0*vGr%d~a9o!;TqHSpH8Fs}Ldsk=a{Epb4wV&GHDdccJF*F*AgBkf>E z3$a?3XICgQ8D@yMc?a#0X)^2~76lUVoT??Dku?7atWuKLOb-|>X~9SXVF}T@=*#UH z)deJHY=UC@3Fl7K!M7+KX3&6AH8K7_HnAlBCx7NYa7@PUgBXS|{ydF_&c`Fwate@I z?-rj_$9_^0bPB$yAwPVadAbjBc~|9{R~dt>41-!q4Mng9Nx;8kPbFAK<^F?E)lD(* z66sQrU*B!``}&$(#+`OQ@aNRxe)y-Q+oHxRUo1 zzgvFpLZ*L?0>`~w)y;k|y>`MV6)qLQ^iqW#9qj?{=k)@o&1;~eqyT`^t}riNKECs9 zVXqfG|7xCM>wU&edi`=M01ox>SX;FBii}4aWg6G|*NYNoCmIBW)Mv$jx2hh<{1#lB zkT=*8F4*e5C(5!Sj)di2EDnSObc;1YC1EP7V>L_PB+oE}OkbGxf#~|wN0dAB9w)_) zQ>*fy9|hYZtv3TAogcB_3i+&%1OzcxvcJTshSG#|DV~Fe54vFaP7QD=h~AB*63=c+ zh!V*ZiukI;Ly-9bWT@mzOyA(5?m^X7=?5PQFneS(9lmaJT(TR){EBcZH@q5RlGCw; z+HEP0{-G&mT8bGRUTn+5`lkHOimgE^MGOi-XCXLY!}I~ZOed_&tICB+HI$BPT5x9; z>utta0Ubht%o>l4n;h&ex4Kz4*s0w0|7{xo24Bt*ps-3h%C5lU; z0@Wvdg!2{VR#o6qXRb}x8S@ty!TPnL#&|Cay7>KIL*LzFfM8)#)jn^w35xNi; zxkOm_o{+OxF1gB9pCp3{9T#+=LQ#lCckM#&h*d4Xt(E890U7Tv7<-KcqD-$bB;DP3 zU!R@#(xmkYb<{DGk6L=ec$$y2(Nk1gfx(9%lu`rxyae-PSzgv zhUB4faQrj>!{^f!HyVqtPv`+4X=7b0&vdnz-Oxm_%JNvqX=#?jXC|V?g@B|(%dt@6 zk#OctcRnQa3y-zF#TM^gT8iKv7){+4d%Tn%g)Q4@9l&b!_2Zu|n>$x-H|O6by}Qkh zHDqtN%zxrwx};?k>gXrpGq(d1A01`1Wlwz5ZS(^t+u*0cz@7~N*mMg9)J3GNE-Yj% zDUt*3nfSb;djSC>0@9g#j}9DZYF|O#$dB&@tSF+m9%>E@$#9;Wo_#+-z?p|4q;(eM zCrBzU+FNK9LuB4u2N}J8}t(; zwLHvZvfJ^9?aXHP8%XkF;&^GM4b80Tmhug1u8fXA<^;=659Hl_17k7Mm&2mDhCRO* z2)lRr`j7e1HB4$!7p_@x=a|H-Z0Wp=PGMT3lAm3g8rd2qNxlm0mxQ^uq{ip*4u_X6 z_Y^LFy*pA)%sI!cN2i1BOWBO9!aP|c6n&D{Rr_Xu3~XKM>hDm%ObB)`ojkVYsW>ND zY)SeGTDYZAa{aWzX}}yc`)F2F^~QOT<79G!#LMY8Xe*DnK-cq|r){x57yvypRekE2 z-wi4oN`hk4bIP+8nzOFJ%=zdjLe~~m zEJCf3@C^|&?H>9u(&k5vpy6io5(3q zH4B|g5NnsQdeMJZ`3l5Fg89n@bNYQj`@c{t5=JD^7SGAvSL55y1AXlp!`@P`7xPIj z6#_iyU+FjQhJkVN99RnbERrw<`fhD;>PPH5JZ|Q%X4T7&;b73rnN&GN9z0l%yTe-f z!=ch^RpYl+V;$9-h{}J6D;4@8heNwoJ;!6L(VTndx2kF;fJTV2<518lmmgj#X|Wx> zx9;{i+xbq312bKLLtR@xR%|ap^5*bI>#oJ|HdZYGoysdKW#(fxmn!CO74ipHUDW|* zlNU=-bcgIa(Rigvf<`l3B4WT4*#LA-F~`1?cuW*W^cTNt?{!I6Sa{04*oMaM6B2Z1 zvAu#nlp&ta8?voD@KR`|5^s-TR8wQq!118k{yvsPCf=OOyXO==3MD(ECl!(UIoxQPTA22Ws52D;jDMcyWVKKOGjUER03|phA>*=(<@Vx#o!3 z?ks-^7vQtGtCsYNRU$d5&*)30N8PGdC36^3UMX5ncQVP%B})4@J5j?ojtuouaj{c6 zQTE@40;#p|v#IMSK1#gawX-A8pC*|iHvZ&}Xl=9y_=t0!{)Rvy@h9u+tghN_ksZho!WEl83ZLfRrhg#rZ5J@gst7}nlAsNHR60YNGBbskNn z(idsISyYzCG$&lsQg0Kaze;0spiuuybjCbjPwblubbOKXB)x(L5jQ#=rKNK>MC5NW z*#fUL6*Iem`jnGTRu&CeR`Wz3O-wHB%X#Gk()&c4)-Rz6xXbx6KTc&}f{&^*?KGV$ zev}PlgFA*7*Ej>y&pv4ps*@S;ieuU)!IvQhm5|5(;W0JN1}eUcF4dJ!SD^3ERn|fQ z!PmVI4E!ecE6AcZ)xoBos>g_@(oErDlYI}e@j7ndj&W2uIh87xqJ#3l*>A-Q0S42WyED!1@D z>t>9cJqCnmm)==qk5J;DFj9nU1D;$8em2WcIDDM8H|uV5 z6Ahoaemtz1ceBQUB}&t-9?|eWjIm=yO(NTd0DzpYwbhsOlC@0A`1sNE<(Z=wsR@P+ z8&MnkM>T);hI5%D7s-VI;koyLa8S&{5Qrr_S@r zBpLityw*no_YgfAE$>Zp{>1x~bpvq@-uB7W4GSV;0?ug#6r9w+wLXq#!`yW=&vF!` zyMasqSTN7)2`EG$a1iW>Oa+r~Eckr9*UErB%dn15Ho!w(3aH)0iE^ zHS*Wz5l0pKcm8*`fO{=b_E|@XO77gIa6&{-*-e(x4%#K>hW5I;3k(JO?%`lD{SVTd zitoE$-AeYJyqFst=<^jUU}={QLh^VyKD~Ur9&njUEF0Ih-iYPSS8FAP85%>DIq*GX zs~za7Qt+bSI~IIU##;-1%1i!jvCi~L)oDcEP`Zdf?^<&5X%0MjysF!SVsi5Ur%0#F zG_`Q;O)Ny}=2#*;NFTlB>EG|?@xqCHD3@veQKq?qaWk_nnf_T+xt-1U$VFb{;xT6-R86+k;c6$((jDn zuJ-4aVy8i?`BZ=)!l07U$8kzoPOg3Wp4vAOs1_?Y0oF)8#1oAmUOprhfOO4fxX?Xpp)R7~EJNI;4OjfCYVg=G`qQ~PmQ zxML3#h;LH0;y2Ta2NiFV-H!~%F_>dP3Z)8T&%MnX#8r&$o*e8H6?`47z0^6)(|FGR z@T$1IPCp(dV2CgAOEQ7{z0tVNes;e4`OU{&t?tX?40BJ}Iq02qi|b4-aILrh(q)oVnP45W_PzEm zYnAi39I32GygpV%BLCO^OX=Yw6MbyWM~R^Ms=(I;U6|3+V2GLFrKE~jG>AgP4zUqI?(UH5-uQ;x1p!k3nb}1m|6Il68M+ypTi!+~XRQV+8yxY1z~u9C`Mw^o z0h37HEwISit+dQq{bgxzJF9F^%FL}j553C5C*mFor0(7CUiq97YFdJ;)F z>G7<%iF6Caxss#DSoUGV`6{(C5uOT+NODa_A8O?Q)*sQ{~&DXt_P=ID1|;#`Tg!Ejyfmc7}xpckn&^9;K=GpaS&3+Wkh=*4B6g1O%`I`T3kIHlUtv@-K6+><%+cdx>bD`WE9k?k4tkybykCM*g7iBs^yic|?!ge;$0Kcg z;&~1_DWFybLxd;MQE{Rk98>x-Pr)X!Fwhp&)}0E0p=`hD6I2A@0=EdLu zpKxAKB^n0RncHjiNt<~cinXY!ZKE30#S(WY$BXZruU8sRoX@YKq&8kI@b5}?xTEdk z6>{^J{*kkhzl#=H%0ghf;y<>Ky40l$!@YcnZUE#Stu`UJv$Yxm_A0pr1tDEAH4A7T ze9UFc@A9cL?lz2RMuW&!Q07dQV*fi$*}fy+mh(X6jC@8*vxV=>#O9S<4m5wt_FHX+ zP|_S^2H?V?lD1zes<+1O;{0e&J;c+zVUAr-cZZpO#PPur{%m*sFDhJQ&=}5Y#@@@) zPP^6d*x=+Q;Y{9xrJCZYxy5+Jf>w*wOz-}^fJDKgJd!v`PY?0BGY`l6FZFtG>QCbq z*Ut}xy9B2}c19En9Z+^4yD(KCC@O(&pIOg7#9<-eQr<)hPr2|m&BLMr9pl!dl74-; z{h+Z!00*;+BBKdln}Pf*6}6HnmxmvL9ha5TEjHq7_whCIl zb1;cj`+Q&2;4uXh*ai(5)EDa(ZnHHzZ+D3Db0@j}(}_XL++RRlU$IIyf#`srLy}VM zykNccHu5M5Z6Gm{=jxD}&9SI23Qm`e3b>o%CEkkxq-%vOj^zQ}>rr<%3wJjn$VjH1 zSD6y1r$hY@bt1gjJ8(`RJNzrGHdx&dx4pbQH83FL+ntK7QpZv=Yr(0^m&n#XPVTcE zrQp#Qh zAD}qb0H?KoZofsL+~eXk%*i5z*x)M)uj7g8-=Agkj4Uhgh+-|zn&ayGE>S{8~E-=U`g+Ist;$)CU{I& z{a1{JA;tSOrZ{<{=u5BPs~dF*v?=n(ciYQWQ)b-z<4KNS{r?HBa;DO#k|Sly!o9ODHcZfX>9 z>zz-M9NXEaq78FG8FG`#yIz^TEVCFl-)>$J!u_u`zFKX`dAQ~?NN)auOmUfeii$Nn z!4bb_L+{->uG>Js`&&}r7(Twb=T+g7g0!9Ze*w`g?Bl92Ck2`Jz{`Qz|5j^&OyGO9 z#_>wFrv`uA>xt&`QwJhA(BI>L{g#+|*$(ssG+yclJ4wKP_M%!T$86e~Vkwye&`EMZ zX$vU$s?MMpOFi^3T6$FrK^=gzHE$eR)|~%?y-=?n*Hi{Jk-C@KXSc)-y~g31xA( zVF;Nu-YG%nf&tFuqPuqdWR)SMN;T{`WX-l?eVHMo5hN-;n@->AEK1Fsc=n2=iCm*+$E{r5P{@4kBunQ8739dHij=(gJTb!HnEn%d%{w z7a);R#xBx(Q83~*YsKv=AO2IE7Oq7R6AKmQzHXE2r6-}VL^055#TTtewYg=0=FYsS z$pr;V)h^G$l$?(~O+S_ulF%+pa_>PK z#%ctW$l>EDd_R=%QJn~WQ|(Ij7P+@#*U%J(|5L-9W`?+SU54MxluC=GQ=aZ)QTg8l zp(;gC2y6-em6w<=*aplJpSCh0>`2kXRvjOiFj7)`- z3-WKMJPzELpHSo+cIB5wFKXAXNqBsPrzX*t-w3tNTH8}I?S2<|-o@M+MWRdVhQA#Q z0WN?NI>}55w9{Yc`@wh*=4JZ$IsVd1*ux@rfyH_@@gz(PguEh&s{?|=59?4uNKChD z2_BJO*n%!cV#Mc7wQ?KTB^^?YPn3|2|7UEV`Iq00#Qa!1v0Ug@7dFo5tHD=M*dTo4bsfLw%LYB7Oc0Lf40t?n~RZ2e9)o z8G0ZrY#{AQ332%jb9lJkcJjRWtN(OAYev6?1MvE$*s{@IsdPg)IXPRjy;sd2k<1d% z$cq{Jo+kG5qD+2FDoD)vgF0n<&&^1N4@tejS|NWl1B#M^&kIz_C=1Tk{>9^?r|T8H zAN%owMRNx$m2IpW@}ko}N!+-F5L+{M1gn6x`i@;!7polSTCU2j5N zR(yPpx)XG{0}NKXV7=2OnNRv2*;AvcRbtpgawapsz%2LJCO(-qp!Elo>@g9><*O%` ze;y1SF5$!>gG#79?2Nte$`u8-nJIgV=q?pD0> z3^AJ#$g6y~K5BK?Nol)chc6rMcWVBios6!7)j0bKvv)+O_SE_e&k`}4;<;=D@mSg) zBJe5w1z}n_uaE@HC<3S)5kZeQfN|W*^m3l9@40C!jMAt-1GuW6-PcLFQAv0qy3r#C zu1W%9{hQxIh0;5Isr08G16s(dH!zQXmk;=zfmpDxfA>FLXr0k1jpvSLV6#;Y%+65Y ziGKD3VHoI1I;m~3O|hg3(sjxO&JF$tEQJ5R<9N2FSp@-pIZf?oBYKpBf}kO2y2!NR z3^Lw77qn7R0(Mw40VnO?{=>@lt^q-sYg=a`-*#-`e^p(u|Ng@xO$fCaA?6)Z@+hnY zjA9-$LVnVF4PiTt0Qdfod#knB$!5!sSLSbzikmR`X4H@7!D>nh2BLT#lY?=aMt68+ zqqURrwn}v71M_X#%J>VoDM$*Xb+X~e3P29H%LI~hZ+eahvz)U+l=U%XFj!MNfE zfjcEImcz+JW=A3U*o%~Z7w5nLJ)sQUgE;^(`x&D7NW1C{NaFe6vdesr-D)D{WIdya zk;;5tcC6E5{>KJF3T|fG>)eBusKpK6YPtxa5LSN-LWA-vxC|T7`OVUX_mg*%*uy$_ zRXs%i;-;M6iy-SjBuNiV7bYo!F*+DWyo}mFG?;RA_l1m{$g)clU@54ch7M;pk-x3o zh(wS%$>qb%rP^+fKG$#Ny|ly(9j@!BVa0D>mmTt1)BCJ;O!T7E7FptbvmKOECMuJ_ zW$-@I?4^&86M3-=Hbu5#ged0vp8aQ;SFNbjdTf;I4~$da|M`YnIf@o^ELN6kqsy?H zHxmslL~0?YT^QutcS2z{HjgqNzn}k(0}X~a;i3hhG0lR?wBb%<7t!1;o$P4B>alH! z*Xr|~eyYnx*28R3V2H5{-lieT)^RGo(U6({CYdjnsqMt%5NTa9@Y_DZ05v_F7sU^S z%>P*q&Z>N3%?DZcorhDQgIXzH(Qm4PA=d;*wi%3>z?Fi9kA*g3FVL}_=+p`5$oEh% zrIVz;jtQmZf#kwgp&p|L`jdd2!Tc&=HgiyQiv~MNYlz^3zFbS3{qA?`;^>;TWk>b9 zotj@9;1?oDckNsP_3tbX2uZDJ#`mTjsorg|7_p~T^r&A=&?B>3ErX7qF|%O^lf(P; z-l%;|eVvbSFXJ}t$(WQnaKSvTW*_*a~nn8A47Ev)%B9p+zhEedd?N*vD=|Q_#HBBcx9)%n64lZE zj=Q=A7yE#QOI)U6YMxw>UEU0K@}G3wG*u7TCnQxLeoN)!KWeN%=eL?{Bxo!CGFm<0 zPO>h>MhV&koMv>iyMb>G89d^M;`A&%f(esoOA%4_ARZM>dz>5NEa}rnbli!LC4=vcF)(=(-X?Duan29@`{(zv*D&CC?Qff67rV zNq=|0g%iEh>e0m;MEIil=%e%oS_N<7LyT5u@{cQdyA!4@_tXk=DEjL)R?9Sd!!=tr zQf8@PnjKdv_>4$??%am)Cl3VB8V;2QKg*(a2!rIZ5yW9P{=33B7 zD+?yrgtj^h(++Nf9oP(5Q4NX=3O*P_AMDhz!?b($x93NXH9D-r*=<7YAh~kYABR|c z#o=<~+N^vIHnnag_xn@6>2g`;mlXY&oAKhM&(yHlu9ZaRIW^HEYG==qNK{_+H`HORSciJK*(_l*lNTyr~B^Xa1iR zVzC?Qw6?RJ?`#GQnNUDknzMCt9`yxEKDlk{H7b>?xAjKINb=E!V+3>x|% z5LUq-5FOsf$u!oXc_4=1V+SRKA==vQKB-Q#0+!_JbsD9iu!cg^JW}g5fgWN^d^NcB z&U^kkP5CjS+Rh*lT$nwhMSffx+R6?H6k2-y$QJKI*9ba<;TyDr($#V$L zjC!B4O(bk$wd=lU0ofolT0RVH^F#K%&o8b%rIj-swspZv!kHY0m7&c_ImNkpt_HU7BLQDl>6Le2@ z9IcNKH4uM;Co3jUS<&a>H0{fJTXSW232hL z#_WhgDd(Z*bRG9b&S83XTfRSJmft?ur^ldTTt%WX4dL^UOWQ$X7V(9>e?7q__*yQ3 z>QoMThf#>syKxOZ-Ac>hG~om<4rZ12G$Rj7aNw@kY2a!jCnbK1u12NX@Y0!9qcfzU z<#WBHZrAPY(#v=pv>}%wsxg)nN;(%j6G>{ z4tl%^s@JQ19>cl7oSi6=SsCj}cD;IMawsMl&+`^zw#7+Mot|yUkzO92lrzS4+PIjFMTpMfblJ0x-K-k-)<>TE)sV*-B@Q*e&jA<%^{-ZpkjPf9ysZs5iWwL5Ojs1(mki ze-wK`?qa~Um&_!+bsY#An#9@+o0xi$o?k2Z|*dDRVE!?5H-eRug z%6iaz0NvLZ{}$>eadF)5+@zwI?+wlU4%yEQ!ANA_y8tt-m>_G}-u}M#`9iy&T|v-k2P{jzwuvMM>1zdtaiUG)Csk>;N? zmLxGwB{BOwMWa}A@85M_yCG}<+bE5@P>1q2Ox5y^g^|`6R5;2COib!E#)siOZk+vI zb=Z|wO43MwY|2=B6}S1-u1Ug+qFab3E=?@AqWm15;PhJv-yWLV4Sy-@7HmbUm-IzdXvdjKxc+>StQl|=^Z}^_`-KAE>P&9VKHuYL5OGi;>nHJ`!U zi&9C!{JcyS_2lBg^h6j!;%D=x!A-n_*W5AH%JcVJ4>06@;s_&g(6%|1VRG-O%EsT* z0xj4>fPm~-AH?aobhx2S>;MB{eSO`8Ur1+4sjFB8F)h`@kxkK{BE&1Y%t+ zQsuBn;6CP>l6t>l3X+2@)bIz2L4}>LX2Uh(p zG3Oo2 zQ87HqM@?TS&E0(@6MrrMMuWLNlzbmgWa7P%q8WyPXC*vc-tk$?%m`U*qr`XR>+mtT zb-Og9IHjoOBTQSyU@Ffn-ZpF8R-R-A?L5Jje(D_h=)3K+CYleJ+Y#s;)hKcv?*Z}l z<>ona0(d2PNWdWa#Im5+6IokiC?=^#?PkvS|BL)`4S7OluFT=| zQkIlC8;2M)Y@D1N4t%^G>vxEGcb^_L{auiA(&AnMZDpdw z#YAWE>k&~FYalWbB+Vwf3+CKL^fGF~;7J_`YMIyX=<$bxi~3dC6z)$hdfke<>Bxt|7u| znTdtAj+Euaw#1=*lIFAvf+15*KMd-swI(heo(p1#AA~pvG+?HS=kvyzHSIc`8IS6B zRCr(9Y{_2mS=8(#W7WMo$ob-~zn3LiM9mGw3 zOvt9>DPofG=J7!lN*O{u&8si?(JgDjM01e`I<^=>G1j(^0bO9H?AIEKJ|fkkjupbE z)$-dOXIS&%QR-MDy7*?&ISDb`E$p1+c7Z5gj9z>`aD8Oao)mie%U;2eWW;Odf#Sy% zeyI`{mk2z0We7#z5aGHQ-BJf?D?`22b4-WeO6>IehQ?3JYJr~6YB3GC2_r20Ttmf= zhU5qay4Q~;^}TOSh>PpizT2y+s*>shYeV)1|6tbZH>7L?N{{*83g#bPkcS^x2nh

        &1OqK!XyEtND9(_ba1Y;J}x2(L{@Em27CMrjH#G=pVX^(`V(9WQ2q$xMQ5l;Oz3 z7=NNQ)nRei*V^eXZey!0Y*%$%zgP>mUgE}sF0*L)?Pum3 zR;Ovp$Q%NI2D$~nYDr>^%^EH9zVLnA{gVFeogEJ!-ns{3sc!9fLa&)3!BK#ew>i?} zS~94yFC8z=mv-H%#G*T$oV3%>d0dn9P~W+ysAeAdb;0v&?id_J7i8`(yHjkN>wGNW zLU&j=TsK8e(n~%@c`FRnY(O`%g$2?L~T7y?tY^8<> zG<=kgJ;s^qZQ#H79OM&?r3TjCFA6}lBmZtIE;;JFFWYap!@2un-+;Z>b=HLX^3w1x zys0uB?WLixjL3ycrWfhVzg@Iri@mX*geOVf*U6HqH{S{2K88MDpX)q72tgz&2cmmH zsgt1D4N!uNomo9QLF)1uWp}$1^4~&_t2mGfKHs=ep*(a;WbCZqA-wRH9n05)r8b2I zi)+IgEd;_WnZ7|DpKKP=S4>38dx|=(X{i<@>{3`Cim4WVo-1M(aV)VJ=nvHvTc~IG z@tr0Xt2jkWP7Pk(b6u;?=WU{1ej?5znrI_|l`0}K?)FI?dfQ?1%-e=*+Cg4$T$~}r zhCICpO3f!S{%%xb(t!tl=k|`T#k)Aqm3AbgM}X7)sA8quN!;NnNspT;Y2{KPYe!B`f97M7y8f>{eKFAk|yi#U_`pF+I27)3rbkj z*Dfs~Ax>9Zp>Z0#9$pKfPVSnT_0X1Hry10EJZdav3gl1X6KK_w6KIfT?#yU>@@YG9 za&J1$CMi-Z-3OZxg-ir}H+v+U z-9cOg=ywO$Ns1y^XyZQ~Zw#9$Zx7TwjmLb=l;#Pd$!?!$=tlP5KhbDso79TK)dd1z zcIUW*`5}A6KP`|-L@q_<^D;vtc?cK1WWY97$Kh^_@=cwavkP-=ggMk$q|3T0vQ#}$ zutj)ZC15>(p?zpgydX-@0+yT;VczcAWIvQzTt+KmJ`r23Ol+y}q}=k;#<0h}haGQi z-2R)tvpK+}Fvwnco1O?@tV$~(H>E|-_S(c&*==QLR)fpS4q<{8HkD1xqlC8KRKLuS zVSLm(HruNC^((+3HtTcYH>Jvz@wBAo|27QdW%msOuPY&nkS_B zs`T}5wuEnmyWjcom^vh4{k_&{Yt{)0L*uj%AuT4aBjl zADaTMa5uX~4(d-S5Y6thLej+(Ec~p$KCScP^Hdxh zY1`%0t^<<^1+Q{!h^0v1)}QBYzW#*i!V~WUusOc#8PyxNearWQpC&b4tflPg>pAi& zqz#erQx$EP35@wET%kLR)mVC4lA8QZ<*_>Q!jn5v8%##eyY!sK?Fw^l)>xo*OW>ni zt?qXj$V!x*Jv*8CGmsw!j~2OuhMgZ%Og5!k8$R+vIG5xV7c-@yGd$z??UVI=TY+hL z9|Td%e1mgoUx1+-sZnlmnJQEokaaxD7xEw^KP!nY4@#> z`iN4k^QW^}JceZ{s}@7N**@IoOW0k}%EfK`=bz)6+{>Z{P=yoJuTa6EXuW6Z&rhxB z1qKrjZ|&u)T$Gvp?^l7a^P9%$1gkw)Ui_3^^I#fMFUvFD_N3QWIX{_k-r?RY*<<(zf=5Z6+FWWt=3)zVGI+(;t%b_R(l{*{%cwc4OGA` zBAB#~i>3uPHZtCxYAwky`;NQ84W}GqZxB6F>3WqJk539d zh}W{Ed=imL{6rnAx~k+`Q5QLSalO*{Jz?3g;970^J9&_W`oN|QpSNXkwLrXTm6pZ! zd;ITlpCoBc0CRf;E!fX6e0Xvku`T*PYb~h1n+;?L z6qLJT6?qvA9W7y;r_B$;;uK3!86?OLtTbGg)K74@Z;Tf*Aw|y*VG7(7rz>0T=4(X- zmXI4h#Em)J=?X%OXRxiE3tzA+A#@a)=D0b2>WROPtcT>8H8eAl>{`u#_Ef6e9~YX_ zRZHI6Fq$s?o9N+ftRT0Z5gG{l9{O6_;6t9H4#Vg$3QYNh6OH=tkc+88-tt(e(^YcF zCCrg1d2l#Bx%lYW2sJ6oNZRrb-@3vum1+^@3_~Kbw`FpHE9Fso}S;6^-WKhE$zqd$2W(v$tz1c)Ys^ zInOzqb&`%d*9bm6{^R{b86y2?v|4y~h$CzJYpufJo}i%g^v07!1DE7TABVMMi(=M% za_E+&4DDBjR*?s+luf*&^T7xa+8cSwE2KExT&sx4p5@Wo6kMcJyxFkMh?{%)ypOvG ze6y&wZr;sg1-yYuru9eX6L1;c$XTS?cM2N!ff?W)f)?2nxyF8@CwLq0?d-v#qTjAT6? z3V!zVM1eXWQ=X|@VbfWL*#%WAOXRHnb;8(Gu4J{_0|`HeCU4~>SQsP=cGxGoF*&C~ z#G#L_DJ|I1MQ-k%ce_v5DEcLxYnYFsCg%fUk;u9SRIUBD8Oyr3Zqg;Mh3ZJl3P0nE zED2ZqITR`ro#EM)C?~hKe*gH*iSm#+eL=D-(7LE^X5k|1S?X~=yCu?7VbzH>Jdq2kyHq+F zZ)`f0R?WHA7Q{=uq)Or46quqclAd^k2O;%!s5)b;|HSMB&UgacEg9yNFCW@nj1{PR z-)(~Di0Haf`@xl4kh|wMkq*wvv#?s)3K^`uiYdjWn}>0`+JRTlb8nITVv8K*WA?b% zbbI+)@uIS_gU0&}^%gWhQBD)GG>eo1UJU-? zrqlOD@X?O&T1xWu2P64?#Y2jgiekUtnWujFJNs^?p?Mv+ZECE2mt&I?)9kNyYaq!& zw)1KCrpJa(B;6y9N;V|5>swuRDM>d4ksV3l{-tjR|HSH?elMxo2ulKUT@q5 zf8+8T#&%lPJngdgzsA@hA5cK7P0jElZA5Gke}=yN9unR^^$+bbACav8#5)||7V#MV zLXg8K=f;g)u$J^~WscWsCQteaz4;)Ryf2lTSC_>u zV#cjd@{WXK)p{vvt%x#qR0uIXS8ad#cSf-B)6lOIP5jVr0%ezLRmFK8EVwBq;95%a z<)K-UA?Gii@tyzyf(D(`aHRXvC@Jp&`~O;v_Z!dusI;>Y!XFN&%QxERuqt`H#7()m zkthtymKe}2LJ%T;WdvTo$!5!c2gu7aCS$KIG9lr@<6!F&okav_L zpSSB2b{e-SEEK&*6|4Lu)hKzd@khDgaJnd0)4Hwg*?CHwZT-za_Ep}xwnom(=`XVR zGHV65TUe;MX7uK4q3QYcz@=d0zoWwAYdnSP@^0;93$H9?9frUVy6TyzAnhk6pec^e z?R`PC8^Xu^82&kg2>$zIOzghQ{@EV-UAHiWZEME~OCp?~rI^7ZM1gkT(qZ*4gp>1s zEEU9479(m^^T<FwoMqx|(Rz9BA4hPO z_u8?OWnm7i>6iznKC72bHUCce_A*GwJ}k|$l_&(#%HWg1DF5PciO~n8iGFGe9SU=a zJIY)^C~YmC3)>M5Vg5{2Q#^Tk5VEa1jqccp;&xRSIe~ty*mNlb9gL|Sm}ZV|LDu~A zvzvZIe|28nV+y4(m|$m`4g4(_A;`zLo9X`?mqCqa*dd`z`Ew)}=7^q2uW;5-B{E}Wo84EoOGVjpTp@H=YWrV{1qb>M0bDXn+%n|9lFUpNjPYh zzIj#Ck)Pqsw_b0&bL3KZ_?t^&SYXFTU3|iUqp$G4T3xYM9*1`-35?Yo{$1}gQ>n8- z+bcXlww#tu?rk$0FM;KlGElaPy-D_UgxE?X$z7I_jb35^I556zj@8J66O?z;zxy0o z-VePb656r3jwAOs5mZHv@!1}ZwXFf zF=2DgB*P;a?v_?oby-D4yD-p?**fw9R$?j$PA7dQje#l|X_#r{uP+z}>DYeau z6AUQ??!!*92!YTn13@J1djw1LkJMITINDWdFwy(vXuO^TbM>vWx$EaU!C|m|L@npK zQ=P_AbIAgim860B%tB`{L$p2iPg9xRI# zKkN<{n*W;3(LGTkOD464f0%u!HU9($*$qiGGW91!Hb*`qtaMF5Y}OHRHgF}6ip;D{ ztvSz4*F5&Ze6>qNn`?gK{ROmKVYySG2;5TBf+Dpz=w}bG6 zG%m4sP;4Pq5d2X{>#nrHHOTv}P*}m*_+52Nd3C&^KS|(BO&q8<{Ix=-5AF>~< z4KxI~3mp=#{yKa&A5JF&evno|ri9Sz9A~=92t-Z9<` zBi5mbr^++>c<0s9MlLOyZ@GI6z-ue}^5vF6&f7_;_mt8<7Y;Fm2RAPehFo$IS7phL zPf=;7+}MB@L=H+rhWh46qjF&qC5$>z#a&M^F}&~32}G-R{6;ALulI3_+LF5OwFaGJ z1mDtV$G$4H;K>!kPH^pVmZX8mdBQl!@Wu%8IRKK&v-sbuy{h-B@f0w=>(A8d zsynP{MU3-T59EITVpG_&kJL$7;7_#K6}#IbeN+8%OJ=k7F1Ll^pg>THE2ZD)#}A0{ zYcMOGwJE&Vv4I|KQo+aKY$RchN*~pW7;C#O^Tzr!BLoK6_fDep3r|}04ZQ9;HTs%k zV~gTLb#i||R@~Qn)=rE?8Q&7gE5#0+wsn2ScP z-N7Ir*H!isH|$hnL9(7=};#+Zoh6Nt@9Ycz&*+S??KUSIHXPLZmdPXMtD%Gi7BH&#iP_zjA$5bKdy0ZZmfc zsbh47;ma7%vX-tgdGk-ca%znIm`m^3A?+@mAdxs%sF%-z3G ze@TXc>9!Pp-_*?~IKM&5>KdkR|M~Hazgd&WuHB%OoCYNvX(=3bWHvxJzm&2Udk~aKN3b_gIFn}INj`6~0V3CC-ohT_yb6Z21sdbgblhqNw0TtzZz!XY^CX)4? z-=$RTlP#yB9?3%|b3dIAq;c87uRaK!t6Vh?dge8A%`Rj{oMUJ$ejU$J)!*LNH^^Y@ z$Oqofz1NbzTF~8Il`8xl=@dpX%x12}u~}f#qWT}ROTWq2y6;_kuw=mIMjTu}v9=tm z*;~#%NO`N3ipysq!}*4iP49M?0b&H0sGG5rBoE3 zh-34@ zSCfo~>7HnSbpgDzhR_ibD*B_&H#*$!N-&6uu8T2RN>E*r9ZPEB=}duRM;liY#ZPJ-$h=9S>^HO7Q*1bmrb%kJ zSl6V((iq5J)oJE-FsCSjUb3k3){|qLH4Hok zb5>&*VnsyOL6$b`DNY+z+Hfch2bT1Sm0Pj!tnYHPNAuXw*_^G&ZIRr+78g9&s{AkO z@8|+uCSBWRpFvR$6BQHNzy8-wuz+1YlRYv#e4t(IDS6_JI<&p$nZwG1`WhnwG`L6K z;Kxag2c48@aY1Wdg^XcO{U(ysiFOH^rhcRv%ca{kG8V7>bZhhNRG8d%oWJxGLVWS` z7V^A(7jo6?)sS;hxz`>snrig1BmdsF*%bmQX*}%R9_vx1BRUCjuYLHM9;ybv?^0=4 z`&Gd1Ioo?AVZR<+uxd~%VXEU`n9BVddY6&|Rhc(TLU{cO6>E^2@G||X2z|YXK-&FE zDPmC1o#G)ri^0^7NRyfsRwpJ?TsM?bi!ZPz z)N?w|9$`{QgxCF$q0 zzV0`FUn3JD=as#}cQ9TmzpbsM-iF5q0TSo?d9=tB*Wie!@b0w=- z)fQtS z>Ok3<@F-@>mg=VucbNIw&Mmg>DSo!AO|@HRmB+Ul_7+Eo3hOy`?YWnW2(e(Xg_L75 zxa7N!O2kyNNgWH^GE1e-1YXoml-#6Jo^KQa<(+Qi-bH+@*k0{2WL8`Eka+0)2k%?x zRP6M*J_6m1>))`KPf-A>0vA%#+RfuL_)1SbVuunH;*rc_@_VbW%Z};TP9m#F%Ehz% z@fKqd!ii4r)fSv_eeP^-KWwILDZOcE?zGA6^x@&wT#D?;X<6!K9Pm?jq*F(znUPUtuy?0&Bx5Lb8{{&d9VXx|cQD-xr z(2gNuwmfx}{~28_yrsk;ge&g-vXpmxzBT#-=z>OI-D1ll0Y4yh^(hmU;!c;5T;wmH z&}h%|K{stGw?53+!0P`ylP>v@Ts^SzePUPPX>Z=gJ+8yI>Z*?87PQ{;**VLR^LHzA zo#scm5d{ecsscr%0(pm|FLDpfQerr>D|!+fzrW+OFt<*D^yI$(f9QJea4O*c{XZk4 zLMS67hY(3oI9VyP;@FW{cD6&}n2|k_6^C=I?A@_<_TKB*dvA`-_vQWm{I2VFeaAoj z@#z3}65?Ls3PFz*HBGZqPAedZ765a)#s zop)8f>>=zbvs$!+9r%mymc3)k%gWq3al%c-{yJDtio=t zAS4SWx`xBJ=kQsNlxys_AXc$X@U8~-@P1=D=guQ`@kXk5j|&?9w?B57BL4kLX-?<8 zD48TNOi7b`jtwVy30bwN{N*PM*|xD7Y{>tS#ZZt|ZO+rTwlACw7o~KUyrzudU?qIf zaVh2bV1K;}a!bwlB`%k-H&Qlec|0wt+ThYHCRgu+(MyU&m%b#?KV!ZeeU_}5d`vQ` z#@Nsti)En#zJ3R;mA_yg$2KQ)XT2}clXYfXd3Wz}UmBjzK5D>ca&a1-*%yD;)wcv_ z-2B#plw~J|FN^s=hc)Fowqg2^l!BH%Ca)`$a-78{r>wj+e% z36c0%%&@f5>iEC0_xy4F?CAm`MRodNFxk-S&d5RzqoDhuQF=P2d%WN*rh=OVL5Myl|anOI||TD(vgqF ztSx!>5Pc@yA&t0=_Hg%lgr!E8c5kduVCu}Qv)P!X_a#qB98I@KD6+ffG!!^!GKiNC zP7SV1;j5qj@4#i0;PC5P*00|IBU!flL0BC@Zrzo1nd}GqQ(6)n0GyutJwc&aE6 zz<`Z=VJ0YTEQvr$w@cKwz$NY;rg!{)_J+JKOqS1d$>Re6u&4UQ0$3I9&)8D^_L7;F z{Uq>yw5cKO_tAclcXp)Eb~;led|YYjkJ#h!VPb>#4GJ%4%-%ybcxSOZ5PL&4ZK9rvB?!GNVMeKjaq8|eUL@Pg{%V$UX2 zt=q~paNi>&sAA+t(=%4lR%4-y7j%UGl*U&2yHqtx zHgIf8bj4%}4@S1VH6(>qfZ@f>F>D=Z~3ANzVGY_OSs^ZRY|$bmb+gIONU`1 zvof-{<(BS)lMlq-^A3Mk0zWjg&ux(7ch1d}&dKY2sBy`1@1BN&13dg@G7R$?F{6-) zfPD4p^)8;PQ5#_RhmC$gs;gD{J3fl=g;86?&81G{p$RH$iXuS& zM+7)mJ54d3=UB)=@sLv5BaEGM&l7Wur_Zb?P)^u^D&^R zp?TDJIdjb$jgS6k3YQN{FP{ir_@4S~pFA%&?3CX7HY{_ERX^dNqblQs6w}5@W$Vqi z-*w2iW~5W|S?t*|_?@inT%2XKU2$p4z_*T0t_rI2DV_Ky)V-t0$S_J8_ZFM<^7=-W z_j1FM@nK5mV(;W+ukn%#$LFal836ulU-Xb6q~@1p@}LYoWq`BT2GHKS+<_rreO)U5 zUkg~rU&fyX{Y1AMQocG?nLOxA2G>1q5jtD#&vQ(ZQrFQHlUeq(z%Y7&cL*TernPyk zP%W|D7FJ97KO<4?IbiZ4z~mMFR6*UAqh;>i(pd$?nd?ZP=UC5MHd|oc7A?OmcyBAw zCmhBbK zi<)JSaLC?z^tSg(g9aNXWcNLtfWbjl)|NK>^Femeor8>LgJ=EzZ;W%$Imoh^hWUMY zc2z;^XJzG1YpJU3UxQy9$FmO>Zw^Jom3>gL6x;dIT;puW^!)K5EMBya|eMz zz6T$MD?>LCb~^2oF4mx9GAKSWul0?w<;3qw*FArlgO!lr*k6tp?+Kr_na2AM3g&@b zTjdc);EBEd9z`Cr^KhHs2l0I`J0-NsXx3&%G(bK7FVmK)-BI<%&2TqQJ759#Pb=+R zpp!&5Z2!FxA5rKEtn!*rQf^_wpE7kg9Mdh-i>2Cd!wR%`g zg<9h_&XT)NM_B#VB_CF$(eJvNYroFvBdm&1{dcb;9fzdEzr{(38~Fg%D(CBW`)2f} zS;^lgWR7|T7fu}$(hq!Q@nU`wkQJ7T)#$d*`n`kXelszMy_SOTKD>a!V z!e&CJbc(4IC*U8(q{Ys6Q($APXJ_v}>Ub~eB*aw95v*Z(jA5R-V6tbMpKB8QXeL z5p_-o)(faqujx?-V<|XGs2%9`uRuV2LE{gZ22{m7SuPCLMS%7G<#n-;EE9_I>$(8; z-d3cb6_EGRtnGN684Qj#EEiQ@y`1d{4v|dm^$|AP>d6V_E;%NFSZhC?%;w5vzTIA; z^>+PnnCww-!>qidK7(JEtruoWI<>C{q()M#%bj)J-ouInfxWgf8M0T;k;WB#E^N0>Ez5rOD{SEmu=G`|JVaU zN)x6M2~Huco9ms!61MJ30=p6g)Hw%^YDj-p&GW+`t93N;Ssu)=?{$D6x z2@N41cF$HM*Bt}+Y{yq(XaBbdSpNVS?KeMZksP&uf1Y*rb}MwM84scLynKDJa&0a^ z(4_txIc@Q}X@@7AO6zL~UM`s#+CezLDBZVEPLS7~cDrgNn z#YmAQ#~-DCGKG@1n)Q~j^eqvojVJS2VxLRVbNYjJKo+quURe4yV5+c-t20Zw+fzLyHcc?GhSDPU z_@6eLoZNsrr@91K@pC7EBY=wdn?;QoyU3dF8IFNPI=Vm^k{KAUTHT7Se;8RUQB1MLCHzapJO|Y$d^VvP!R_A9uSh>Z@~II-1P{B0 zYKORA<6NfKZ#SVr7s1ILcLC&Jsmkkb_|g_c(qHid zb~jrUYN?ref%kE}+CU&=bEq1shac}~Gqq4zVvQLUz>dAZHsPk-2AIL5H(-@W?5t)6 z_&#z9u~qfK>$4`yJgC=I9C#2&VyD_?NS^l}|g|K#;xNuO_ zksU=-n#n7yJxXcMZMUt|fFw_&#^O4Epyu9Mz(~Z!lUe7Z^Uup(s2m8#>LpCXX6Rx* z71MS|yr@BlGI3p=@iOO*m6P4X^j9Zs*=OR&FOQ2s4N< z)h$k4LpW{rY4?$&J?K09zQIYXC4(0bvY;naM>oOR-8Ug;V33TXZI?cMEwfH1xytkn zpY>^<){aJYF?n&4%bABtk3wp(EW>K?-iM(@_c#XUVeIH9{^1xGjWw`q z$CjkS0=x$z;;PkhQyq{N6CF&cDOOVt1r3Mpml>K*nTJ-JyJzL!j~J$XyxNxf@kuND z-W*t|X{{tv8O+nRpbrNt-xXUmk+&fsT1Hu0PSMmmZ7*+$%N5 z)oepvyelJ!Gs~aAN<+g2kt)6yWRa0Et4>u5%{@!sP$lye(hFJHByhOO7nyZYwQMs$^>s}Ne6WO$%N{mg}?muy(l4f2}r-&vz49tE+?zE`81;jySr=Xu36{Eub1=5Q`^PynX5}y z*1g$x2ERxSv#YHvxnj~9@}1T=Z$u@1%7`Pnl~@VhByVjo9FcjHXwJQ-J7!QB#IMpd z`ti>hW9twm+gWmfj-a12jP0^xO+;A6H(tRE&`!>meu!`_e*?~s$d<)gvehmgApuh_ zl@MB-fD1-|5p$~VeXC2St&B8+z4=2h^S|qK6qPWXAs{i>@N&^vAL*y>P~!C7 znF;$VPOZcC4bmiT>Yjz~`Hv~pykK?Kx2DuIh#e&#S%y)c?#|;_%%o|0ybkOsA@!>{ zPz-3Jr%xpMbY+g$ZH17EPq8*JQHjFRk2Dm8gzHr9e{jD8#Wukf!O@?Y-R zb=OS+`*{8wcnY36Mac4sz>bbP$LZ4j&ejkER%c~m)N+PPSX6&vSdWLJcUoL1#Feq9 zDN|smX!IqKcFz?RmC=bk_t=_~MZPgq#8KLDfcQeIWe2VB2f_u*4LutHmbs%SxrV6v zE|!^Re;IdLi&(Cn;!kNwzmFmH{t8P>1tyT$HatS;9T}waQbFM2> z8rb_SF+DQB0JNxlN?d_*zc?1wryct)Ybe=C+w4-9$u$>C7Bn=GknXC zXw$%PX>61BDB({6C-?1l`g2d7_EG;N*s^Il?2k!4AW2+Awp?*^GnGzzn^j<8J%A9v zy@^oUgdL=@7q7_U7O%;p4VB`B@|GcsN4J8eJ#ggR9r7Kc^gP7Ilt*iXeRdZrqms3k z?8hB%n#sY0bGOm`&m>nE-tOv4>C}wfl8XCty(^|3Q|rX~CQ+1h6+}s^qn3`1F8)Pa zG2qY(y?H)SL8m_I;duO9uz*`oRAUXUs($Qkc?R=V)w*KZO4_81qEo7a;>cZ86)>U( zcw2rq9~W}xyXl$Jr&ywxQFHK0jaij%xm)WWiK>NI7$!HprlLp6kuciO{yJATo>`Ti zMd!$)2G=uEzcYL4{B+oO^HzFRmL6iGDB3IU3IFl57lp1nsAEohHZ?T<27X)StDmIf zjIQK^{a&Q3@UO4~yt7>I5lJlNz4;dA6>7r1u!~yHZU~7xtjGF#-vsWu=|pH)Vo%qF z)KkGE!lzVsgrX|VI^VdWk|s3naGrRZ?UUwRZ^Zl~aXpd&ZNXU(YldS|)A(0TR6FmT z)HRPdspl_0U|bPC#JKP5Jv^UY!!`F$>|~=it|7?b=8rxJQ#1`18u~YmoG6cqP#ueD zh6bH~zo;2M;w?QE=A^$Y+bW!^*(J9)OB1m;qc|badNaqLqb8FiYUef$QcK4PYF&0T z7EZl!Q21tIXay+X{Om&q3wRGF_mljFFEB*FDx7%mi-~ryQ#OQg>|3Y+lGv?MCVE7u zJlpbS9CyLm(^5g}CC2C?OU&qtk8I)$bDkxZeFCZQEgG^Lrj^2*fT^h5ym~i?ai%Uj zxl&aI^LV4q2qWAn!&w2!eQYYhIOfb~iDCQBu+8iBi^p82D<`8RDimzPg9TbzAHrNq z9qtNR`C5+FiB>=>xQnaoaI|OEY_nW`9d!=wrp%T+%Yg$Nqp`GRH9llP_UVO+F#y0j z6&3U4iUN8_LS#7@@P{6Je2G$*c+N^5l**o=P0dTvhOCxh?!Wak2zfD57c<)P4_OD& z29t*x{~gew9Pw(Z@3}2XNB`8H6hu*U{)ah$-YkpWyL*t4A>eK$ zFluL)!v^5GOpzV41QKDdr5ro` z@^fFBjTJwWp^<~0V&)C#enyeh{)(f~?h(}Jb1#ZY=83k+)B|k4Ta1%=X11y^SA{35 zo~Bvo>T67zJnpc(||7`Xxx!uyn4BlvI;YqS1hqM3* z|Bb*WhVAB=n{-Ev46j=7dp4_5cl) zC(q3JAK(koyNC>xe1j5sbj>0$I8L8GFZ=J$wsuPmys_-Q)JEl(H=!VH73CLCD&Z;< zS1~UAxy8R;fU<}sRo=2sy0kZy-qM<1|0_|DKAlDGmwKMpPaD2g!fDMwQ3{EVEa}b) zNLHX|eoKV5gMq^SlY{vgdy6mPT~Y~uNWC?8NF`IjxA3Qx5*l4Y+Q&B&x9s1!;1|a* z!{Z+Q&DV#w3e!{eQQ%CJlAGnOTgrfk?wf2>loW?+}->9gFXP_5z7en z@rQL$5?a__DH?B`tVoM{N0OfT>`f|BGqH5{Dp-t5%J>E4lG$3>C;A}NQ(@>QyD3t? z@J{=s2evfW=tn)_LwJ<4Do^$N{9(^_%zi+`dMDK*|I(e;IF8$feKxH?CA2spRG#G@ z^H@$SmY5=^k}SvngqGOS@-&N96-@!}8+HmNjkCyXZ9Rp!%iUoW@lPRztKy}C%rg`l z$=tv4Y`n#{7_*=}fLsRl`2wKTi~h7|(=&k+Y3F}4ux7X8`@4~zP#wO>Z)xwKNf{I2 zPi)Hx?bt5w+VuLra14jnkh~%jl}I{Hy*g+(^-kPD>@Z!fs`AAIa+Ot~ro-g3{Ew1FJ<{ zNw*V%6^2>|?aRZ^2X(_y{w|<;#u`*Z7`V^Zgf85pnYqp=hYDWzj*|D|ocE`|5VO8a zbY-qx3bB}PrEs~wLP6Ly3>;-zp(kU4Bra}G(a{^U`@-kCmv2N@YO;BI4rEU+JPc%f zcEJ%kT<7L-9*Nv{ds4jBMBn@6kxLtg-#=@yNH%=Kmdj>IyCsp^UrM{p#)Yw~KGDDJ zM3temCc0=!arQ2j6U|gW!77di$22QIx_4_A9czVk2w2}GRQ12m_^73K4;ktb{aB{S z)pr{V>M}$r?3K(=>LBlO*)Nx|ljr$6%txlM2d~Q$7+o7ELs)z7ujpM`L>9*Vuw8W9 zl$omtlr~7=P>dSC1#(=3VDY9zELBp*o0=QXnZj&dBVCg#ip;x^qK?F_xmy|F@wHqd zr1v#WW{fVh_!(-;39xc9&IHmngwh@-YkHT?tml(VHFegD$oVJDh_3U?O$^s)nt8m?Q>|467#Q;m#l!HNG z!j5?5P$RVFYtEX_(u|8SZ_8XI!Ztbw`8iqI1J5Y=!bbO0ikPSoYrcEDguX%jy0Td zB|L**ilYMhdwR8RP|Nmm{S_`dZzFe$>^yhOStj~nT+|xk1up^RKL$>gxbHW5w){Cz zLcXUfFFq*@Nu2Avig%i&c14Q{Cl)oWkhauTsn(9=Ht8$!5$(kwJdqqc-(}~eMkROd zz00rpa-dV$MHPeyWb$oQPI0R%jF=WbxYXwGs3-f@j`~!lhN`qfsVn>@lwEj!&!+2J4e(d6H{Z) zav|hKYsTs#u7`VRnhOUBn2FOqFW{JW&c%NDo(^jr+Ox|zOHaj~Y09@o^&g$3q#Ewo z24^fL+qFi8#pPMQExKj-b}@YXv@TBkX>`XH%ncV47pD}H6F+J4Hq+@p55;miB)g?)DO$*Ee;OrRjT9^B)}lphPpSnAvzA?YF%R_;@D-$7Tns z>EIV%5l*tykrGxONWM6TXE=mnEcXK5FR9g` zr@TNEC*WQkBRXiezm?mD8CEmK`lt!m8&Z*N)W`!)P2sscBU;uG71x4^4@=(?@`WdJ z^XmYyy)bbvDboi?BJqdf?i?Dv>y%EHUfp_kGy@UKD$pdjV{Qdp&2kjsp8z}G*fumHD(B+-Kmgl(`Zk$6dLl3^Ke2LP((byox%-k{SzP4ljvK_@Yo ze2eZamKqOJ=7|gA?s~bFP1Y^ECBkZGY7hcnq;po73ErhC`}}@}>>G9j3}nlEl$MR^ zFR$;Dk{K<$&h@bZOw!2!>UuIa!Wamo#B!up=9;aUxj9m@dj8tdWOaH;pA&~t*Kx_5 z`P{Qg&qT5Z`H%MtzNN2 zsDQ6*0^-n!0z{EyIg9U1rbTa)obN#Ow>Qi{U|^)9;X4UM<*7T&2Db z-@CkSmm3F>W2+8=c~u5~wl~69MT3Vcpywj-zvTDF*F$aC%(X3}v^tG~zA%~lWj8i* zypQJBBQC_KVuIlh_p~rl#s;_iB%ez$%+PH#PfR`#JKwN&uZUeUbK97d&bg?EoY{t= zfXi+#wGe6mb4l7NEQqoPsjdQM^Z))OKFaCC5X9ZM&Kq4;6WXJrPc$ByhP&ma9{Xc+ zP_5s0nuJC9pJW6xI4K!KELyx$x^ZCq6`^olz?#5rB+?*rl&|ILqLriOpX>*_Cu@0* zI-o~Hh3;@6-^80k-G%7szgi7k4@*U`b zBUcucVhH5-w}{gaw{DXYibHoh#=%Qu^7C@)=vt#AtZFuZyQy;f-_1}WsnXXi?|7^Bg`CuwtwM%P55^!a zoO-KEs=To#nL$K-7oENLRq<CLwSBDi=w4;A;~YumP~n(T&TH3R!JGbZt8!y zE*@bmiezDb7g){ReR1-Wsm&($M1ZNehU3g%tkRC3F_})ZKtdF0+`zIeUh;KF#z-c{ zjHxZD^XdwYVCIvkv>p?CU4Tm8Q|YRgen$d}qg_$+z6I|ip7@1?KB3=|L*@|th3gB1 z2<);f+@{~F_-k&`JyGWxiecW8i)LEub&Df59;=mAtQ`|D3naWgkk={}lFEawW!&JE z*x?cUPn6v3%a?KwL}B`~fp`lI*Mcy#kUE+>Nz+nsa#co6`s2Gt40XY{%$<%F*fNP( zQ%l|RK+s}__D+$?pRdIL35 z7m1G_uX3$ixO`X}A#jS?hI(Zt|+qWxV?*0N8?1=&CvaAdKH^m3` zkxWZ(Auf0Gd})T^r6H}q@`kU8vedc5bFOWk{82(L-boT;;$K5R);U-E58iBj1VSd* zaQkIksYYc|(A-2zg11RI|G!A}6}}cM`#RY7`PQ#2vrz+OJL##^@)$L=+x}>ly1ytJ zbJbz1FhmSk@@0mTNn)PQ7}4=Lo#@Gk4s_hRB1W`)@%@R2w#(v2qrc2D%|wH?1^|pc zDF5Pk>iM5oifP2@PL|(&9qGM61S*jTB5B=rxAZxbY$-$mx{p&woKB!TtacRLg z+&z#>c?$S6o1UOSDH>|C_w&yvTic{u`TAnaZ%RxMiV^)Eh}wVV`K~2RNzdH}55|Oc zU~kQGR=jRhbAhr~412CWWAyk!fJ2^vIO1EG2E$T6Y~e(_7aO zcRUp%+YkDP^+>n(#d`h}cx_iYfX15Pcs!=4TJ;)(t~T{HTUQsr|k0q;)> z?yeM5bMrB!?N;&kE+sYZGSjN23O{*o_>y+Fz$du@zLjTL*i z8XZ%j<<4p+T47mJ|No0hQ_j3=;H9j^-2#Sxn3I`2Wy4p7zM@PLgR$!k9APbOlxWNY z?FVB1el+Z22g~>lj#SmTdYG?BZR|3g$hUk)A-sjjb@kUSudO?rph9D*g#zDt7H#-a zr%f|DMc~t7CHWZ{B?9II{YhvWU52x?#G<;Cl687|0#|4=^|93)ldPhH=+$BAWzO83 zk|T5eae*A!E&D6mk+_(AcNHA=8nag&y#{l+Axx3}-YYl-Wq&)^sF5lQ_Ms+oZMzBb za<*f|LLTW~$H3f4IyQQb({>Yoa;Qf->YAN^5M9MHEdp#@B!RaS>YDSL?9qEYM0p%y zJ7eQO2EaiN$L4m2v_OO4!My302GRtQdm%zIt%9b1Us!GvGh{tPo^n+*THYy_*ZFYq zdL+@<%paC85;o)qGYw=+=!ETynZgsK+B4oT{IPqy2lVgNx)#){^UmYx*#&?&Jxt-h zO^ts2xy`a%`GSr8zzz@WhFl5r&!yTwS(j0vpVurpOS{aX7Bte1OBn6J z*QUYltowLJZlS^Uy-NUayD?%9f4t-=RQn_ce;y)Q@EZf2y4xN7LNAOzG42L5?Rajn zWB9Q$ml@*IwPO9Qs1(+)`}x$OX>Db?^CV$-eH0?wufo+@ZalaG1&FT>YoibcAw44% zP>Jx6+ra&~BZU8(;CV~B^|gSg`DBr6tU}k8j$ED^8IX5JG)qKyGDg2JQB6^Ve$A}u z*E)W25vcK3wdas&AJH}HZu|IiYTG0=q=!=ZPPrC`8D_PObn;uBT> zPZy4L%C=_kk|fbB#qew^SA057FAWdkUTT^%#Oo3Kh?x0NyaB`IBknLtOtrb;O#q!Q zc2`kB%Y=`C2SYmnjB5V$tw!l@%BR-?UeC4Ap~l~fMafzb83PskXIzib2GZVN2cGRV zINf#k&D8LgY;@3}>0e8G!?>jjk-D%g@Iqmfv0%{f7PQ&lU+L#P2MsQRb8}m>-UVd< zbCV3|tqN0j&vsUdr~5>7Yw>TRw9VY9v|HbZG?w}i9a?I=AHMpTl?clBqiL%)#Nv!R zbY}CIXP?nziOKM^(ctfG-97wbtIRdxd8WV3`sY1)@xN$US&~@6>f8-cLLYT`UfmR$ zkSM^#UX|>*&tN}>-#zx{Ds+lM>P6rFT>1eqw0K&WOhtuU)QPCGsvT-Nsvcy;hNF9` zVdTTfNUxn^Whwj{gJ}2Ek5mIoK5G+$e-+=`5lm1i9IQ)WNz&%!;BE3Pz8hqH#;!W> zb<#9_v{WF?1oIu&ycT)EiIj8;=eneWf{{lh2IpD2Hym#?KO_`Xq}m`|r|8ff{OXC# zm#SJq6cfEgl_)}g;v}Ua!?pDAic#bc^F*uMjn$Fhs>XwNUjv$_P!a!1&udEAZ4Re# zWi@PKz4r-b!&_b^6D@vF9!Sz6>egK#Vm??=2s~j+f*E8Ur^&a{iz9!=74$aLr&{-Y zTi!sz82c(6R5Fb!w7(36glB0vB31hf9j{2Y)$b+FhN6IUlXo?a^@D-z^<7EVw+qbz zLyO&=>{?y(;~Da;Xa1wA7l3j*@UzHtB3$w{G1u~auTV7b{Gk@PRc7nuOXL^&pIK&; zY0sd^c6^83hhNdk;Zt(QvD%{MYuXNfLr(@GD)&sde0RL8HD$c>o2K4hDs6him}`rG zoLdtU2&WBe4WwyCWcb0pNA9KL?_`J^|K9`G8r6eIQn}ZXB?})tmX!8~>Cx@9N+J0E zb%pJzKcj+iV*61wu3rFff5J3brmOZpF|k~svr$mEsa$S}Y{>6o;_~U9D1uBBn@GJe znaZ4DI?wFWIaNy?BTokaIcIN=ZhX3RR!*k1a5mQjDz^i}+;yBxb->j8!T2RC^Sxu7 zkJwGoOul|wU8C~z*HVbLDK|mhn#OJ5Znik?_dxvd;kg3{(GO2Nd}c989woS&UWv2( zHnW5Xb+PgiC12Bqu{{mM*{hC)o-ppr-t+$i%dNhOTFc);l?1dY0?EAI7y;VI$`v<1 z`aPxvhihrl+vSe14?_|^Y78%aHC5p*Y-RDKwrsj19G6g(UQ;Fj_khO5QCD^bV;rZ6 zq??3F@|`k*31Rrt!eTebP9Qd-}rRo->TZuMFq@LCHw8`6_KG+Z|=H6?D!sbK_NHc8Ch$%l5_UmA1EB z_DTCFf3a*Uj7&#kV9+})p053|0RgfdS(V)|D6+tYaq3x`vqLU&exHVZSNWWed1ukSP}^%Rmy~yHAsX96QX5Z zZscwWZh0ciGl25#h%k7xLbBt}7fGEYAYa8QlJ9(tW+7w>)qNQRmhOJw@;#Yzwi60V ze%qkQ)$$HF3seC-vk41L@0UdW6~qy~jU(t8@=>*FoMY!?s0u#eWO>%75Y*sTEbCtj zd6*=+LmFptcf1}lOTF=t+}BR^7i;(^?@~}HN%=!DvwHMg(O?OXr+**Kug$!3F<>#D zz;cy?Za~b|no*kFE67G`)BcZl0Hm_3jx<2VCC%q&3c7J~HPc`5(#|;cFP$ZF?O}=v z4za#jdPSZn1H+$q4=(coA^ zbVu*MF2_a#i=L>!r7y-cDZ%OFV3Zp~Bc$*4N`vR=wfWy4(VfOHecd5*YgWCutL;0K z-|9-~ zU5pfp&@gq)jPCGybdy_HQ`C)3L3{_+X2tW+bB^Xor+bzmecIjBVEQqo^iD{7CSLA^ zCA9cDMl6ocfU1`Y8;~r%`90|zYX|-VT>Q91-pZYSIqaePP|Q|T$~TNZcU61-3A79` zOa0NP?7cs%u(?*CQ=w*41a0x{)bXnxShEY*-`gM2P@}B~N<75BBaJ&_9rU($hNFPs zei;nFj=i_Lre9%hkg$o;kT51W1irV$cMQiXLO3DJ9x}m$2g#R_`MjM%+*hr4`v_G6 z4{66;|5Unl|HrD|3>z&=bL&Ee*`?1PfI+)KdwlGqHu3 zsZtoTrH}Iv zyef2Gwm`Wyb2nlB8WkhHDCGIj)Rl}j$(7Y^V!tF{47*b%qVgiZ~s(!XAg0 z@Q0utYlwlEnfPS#I}3(yRCmmZ4rSRmr!5)i3Szbx@V<1#LEX>R0qag0P&{ljS?T1y zs2eQn2}(ZAD0?Z0R|6rGh8|Kj1gm?hR*?CzcU*ukf1ij8n!JM?eEBO3z29-q&6uEA zdP$bQHgu|1mZuQtUEdKt@a~RAlF-hO+tkH!I`7~<`j*X$^IhzoIiHeU2htMsxEKyd z(_Kg6&Ooo)ri1b-sJ&^Pf>Q*L%qQdF<&?DI9tY6&+>gSdEaU~$qwWxh_y?aoDF*Y} z;2W%UFnRIwfLBgrnVTl?wnH;6{+;j5CTx-BcBwUkx&+ZOC%ToESW>^+;~t&OJ-C0Q zm>k<*lQDe$w-rELK%qp~VZap+`?qZKM=j+TW5K{MFK%UxmQIQCcaGg%w z+#QT7>mx2K^}(`U)bdbYd*|QYFx!$+t5)Tmk+J@NFG`KCIWmVFv31;kae7I&V^*8J z6?_jQyPvFvLuln0?dmfF3_&}a4xcF&`(#z+D$xyhD6teND|YzHZN8_)#YctSc>2)c z^hxmGu_(NCsCqblJ6cau3YSn>J)QFeq^$v{R+w?tIBK}}Be*qcPd4;RW+!?OAm=>M zUqmwsQWuW2x!hHY+1<`YwLaQc1}Ikuk4AU}s<1)R}!%g6gm-IMBx(Nz^EaU-%H+5p$AEH)LPY=C^9Whk52=>IhBPI;Gx0EcoX|`nGv~)Ju&Ih@^rBFj1|I@(`wbt# z>6c?U7Ht1G`k_yeHD=f^SN`O=NXdVL-O%-zjT3U~u?*`}c!^j{NY&|p<3p;0_)|7M zCIT+LjhbB3Wkz6REA760ph#Bz?X6~_4g^rKkSaE6)H zl!7eTS^i&i_jU77QFeFt^Kjw2e=>ia=3OOu?M1&wqPhgtdCDtsv1}9sH)u>MkQ^K zAFcip9FZAY8k-r!VM5*PbhoADEp1E*WEh}~TQ&;YII+G()vrUECT4JzkZ787?=8)J z>f25XV(4&@Ly>*Jg!fSkiIYwYjE+LZ)2r`Co99)jE4;ye8#q7hbUUPehWaTCiVum&F^nV_|0gEwP!h=&s#%O{;ZLjqa_?_7(SGm$U$FD_QsM#n1g9r@aB)tNcaNp9pS+i^`afl zQ!+-6e+(62B~g8}rNIb9;6t-40*n+zPpTj`Zk0Akn4aD3jy z`)QB>6)P4*w3aLq1O~Vp(zL9r4xVF6IK*txcE+G=0a$V%rS%!yln6PJ)GJkO;1DZ$ z7QJs{0dxUR>dw~Xg|{xs?ytd*c(n(Ix!`N<9<%SSggND`ZT&|SUnK*)RY-9uv~ba7 z1{#Zyd-b$>grOOGjJ!heJ@ZZ<34*;Ds5*VS(maVc z0=K?0j+WgWM|Do|BwaHT6+Z>-*XAMg{ztV=f$R7|%LzLSoS*$D89kt4UVi=jic{>r ze#J#EOmi$5AFyxo$7I2%{&kf#ld!0RDE@3V@Jvc;UzvhbE9Q~aQlmUVkMKoS z!Y;Rab&tjmuP+y}kzfu;mt76>Qe10l3l7Neo5S4dJiE&`Xc@mx$(&rrggxx77Jp#r ziuchq`eciQG~f)(-3L=29iN{rA&gH`TnRZtq!fgXLDoA4%fS0U^Ve0|X*XOvU~?`h zXj%7QJ?&-DGIfNfY!(fV&m7f1!hGoc<3rwGiMM!82+P+`jGpG6l<7JujF2vpd_pco z(F#u8L?7DJIM~1)9Lf3~&efdY3tnXL_I&(_sQ$Y5b$3y&dwwjb{hAhUa>v)}ZfC@+ z41-Z_=U0l9#gD0Ws-P{Nfjp@Pc;lmH-B4r*rK9o z$4Xas_!xfxeX*amHw8M-mb^Z1Iw-M0H=7~X6G49vcAXCF)|?bHJS6t-(x*!%qv%UI zqIk=fAvwh6>!&e8AFdAQNJ@A5dY#|XGUy%AvD}}|{GFiQ~E??AG`_LAM!k#k*?S-8%dLS3}?}Xx^@WqydQiRl1 z0OBJ4q&M)cD~6+%M^oI~fTx+`si3`~@&uS5!kc|`;F>td3h7fIF{z?8hcxTbm8qGXX#UdVnLW)r$TF?`s#T zxGCQ(iVrY}KmXSpH&uIy-1sa_&*x~pGp^fcD*w?-lcg~DMP3r+k7QB*QdazKF;=ve zd|1$(Uej(+JDNix6M(}Uwm32DTP`0tLH_EiNWISd^7}F{^Q3Dd>mJro;gLm40`?3{!=A%F>p`v$GXTZa#QP zCf&ul@%fstVD4M-nomiI=I7OKutPvoJ+6Jh+%8fCxTnux*e~WuP~;+&n6I{0oPq z!y4L4-ikEHhb{~9wpnTuI)F6ayKG&xn(wRFQRLsE&uQe-8)VrT@{I|u^u3C>ufPMc zCYsNunS3hHNA{8YrrqcKWolFCxyC+eg8WCQoMy!D-sGZa;Z+y#eTJaH@+f%fdo{)m zbSdAObDOtd;UEc=^qh=AM9swtH1begU&*h^`9t;rS|!vhBF3M@LL$5nITFY1UT3*o z{<3E=_e5k#zZtr9i{fenP7cR_NsvR{WA`$GAZk*Po0ymxkC1MZ+LT`hnMb>Qz5`lK zl)(h4(3qum0(vw{;z%Xg%`T-{D1#93&jiMf5H$f)^EX_ACe0CPaB={q`x`(Hf%&aL zcmsIPgd$EMQ*qY+-N1+Y$D-Zq&s%pC72c_(bV~SQO7s+?jtJMu=1gm5LPLZWN(Jt) zt0>-W&piK6%{SQ00le|5Ot1;z`vud)3%%XOB27swGD>G@@Z@8cvI&lAN3QG8E>p!l zY_?j`#wMiTT=ujC247z)swFv(HA(pIh<`Mzk|-9quG*trH)>u6wcFu0E12V7f^<2K zWTCm?76y-h?j=G$;6rh%o$FR{4!k#eTzL2$H^-4Vkf>zPu_J7KwiD`J8E{&#Offze zv;S=IeV_n`X`i(7gAJe~n{=L55jt)Vb#7|~W3HJ&yOYn5b6#Pzps#lXQ zidT6(Z>D*OPj`%$u00@**i|t%Uo(o>yD1UoZgf>Z$~-HcM^rN>mb(G867h>23Mm(= zn+gg$c9}yAtC7ru8y~9dyeb4Xuy<&0DAunF$kFb*hC_;sx#!ijaPH z321r5@bn+`?MDhBxB!Jjfh0Ts+wnroED{O9;|)%0)P!C11)lal)_-HR7zjgH&%f6m zTb*8K*&qAmhG*%DKlN7(Px6EyAzd|~I5FLUGKmm%b~+2l)`*7T@461h|gnuY3aj7DLBi>#!Xq*$bS>va% zB|M_F3zK0L%?f=phJEfAbm=0K;*IBGGQHO=?w)+tnYTSjDp2>dp7|o7pk8>EAaK`v z;$sBIrrLbTFTW5*h8a>*omz`{`-U#h&~-wQGJ4Z^EkoA7w)(hWoI&-gmwb!u($FUb z3*cHt)|9RG=P~W6^?Q~ERjY)S2BO=9GWx(WF%Wrb$C|&R<3!PxfI7jngw!TgQ~@M_ zg0OKSYj>xaxhA~RSPHcR8eO7P@gis!-Z`nBb6!$vHTkgi8a}Dqel7Y}^ErJR&+d4t zQ^C5Xf$`2?kZpSIgA^4;>QenH&bTB!xsFgmHJRl!f6)!QE3-;TcMMi|R`DOF3$w?+hlKteET1gRx_z`+(nfQamJeQn8wlpH zGvz$&qSyZyUGE)F_5c6>+cabqW!9m{2;p#W4zg1Y*@Vg-$BeRPWy?w-#|+6n_AZ$n zdmiH;d+$BI53kqf{ri2tm&^O}Z~rte-Jkcz{dT)vm)*hozV*VxAEUAVP)@#ls|k90 zwA_M!?jfA@mI&|I=-YgIQ|RQe{@PtyY^e7Tq{LCxD|dirK0HaO%HY_PcU*aIu~{Ee zpo3X8&aN?~%QyOE!;_Ms+A+XsWgKam`}X9DX z)_DM8Za0FDVwuEIs~sPn7`&POXtm6<6$QC{pZ3{*sBAaXEuZb~jLR`6=zc~1sh(*nn=L6bD%E1$5pVp8+C_7bm9yPf6(^LgN|u%%Dsz+P>h(IE(a^ebG$B zZ(ZIJx3cW$D!7@1f8n%?T~=3E20w3HI4IAVl{%6`&o`n|-{d_9j}q+?kG(JBnnR}E zQ2)1HxeBieU*oG!2E&)BKceUrJ!$nUCR<@V!8JnC9LX=Q=;-`U;jE4wH+W;wq6<(& z!G3NxmX-QHfj4$sxkz+(P=w*}HG6!neN{=C{jZW!ZYKJZ=yfVhOqQH^F1h)p?&pOG|z^4{M4Gyi1pAe|aQ0p(p8lS*s9;vSZTuV#P%Dz-_*^tFFgDEuMqT zbLTKLWG^;*eL+JHUsMq|{Y^kd#S<>9e zj=quxuPrNX@1{XRSp;&WJ#m%No=3*X2OJRnzypk={LnrZuO>s%QJ7rfPOG~Z)%>kMA)J}%Ku zbB=djA-Jo`g5#1+42WL|hw6f`*miAm*e#PiGRZ}<<6vq^7+aAj^&Lk4m9a`^w6Mtn zX(hNJ%Ds&xevi7E9&V{rS5xb_!czQ8RlGrBj&M|%B-EwbahAX0taHE*`gUL*MlR9$ zj>X0kofU4l)=`UfDgySCp(Du`UaYtnxF588cJkr-op&i_N)M1D!u2WAMrNre*OF%On!%XtCDQj)z<^gy`pKuM0kb69%8{zJh45Q)85<`vc zivv7rn^i9zy4xuP_qEIf9K*3bHnO;b7FR%`%cq1XUIVvwu#}6^77ym-rPYIE)o>#C zl+q77kTV!MQB$o*;BTLD1;O*2`pJa*yKG~LH0VNEb_5|?TkQ5fjWfVt%~6Y&hb~Rp zYN0~h0EYB51oJBsbRYr!`r$94|?H@{=DyS|T z6~K4TGhDvXl3RhXO~4M{fUh%S0gIlLxz*xs6S*4g9shO4!(dF3PNe(cY&;uf$QjS2 z?Y&4YXL;N)eBs7)-!g!P^B!tct6^+mze7(T)1gW$hoNk{CX6 z<@HW|vbpUg5WiOzxo09){#nSM<)^^Cn3`ZqZjfZOAo>xP~WU`N^#Iki*5b^XdL zk+H$JcwDp+9C{W&e0DTcA5rvk%`A1@?fubWCyg z*}A#YDY5Q}`nfR_2aK<0!8SI=kC!po&Rx^PisX-$Gl>&?6d`XNCt`+MbMvAIJr*hE zO&JuFNWH%%uAegBR3?*4Zq)juBI|t_*f`Ffvn>}^xVt#>?~lzM8L4fJkwSLAyWMnm zZe}tr@T|Ks98i;EABEcYnT^x2qYSCg$;ix{jU4_W?=hV${Gm4yFBTR(a?mL_Ng+Ta zXB)F_^&quQGw{!u^fq;=R_TagVLgj*C-*wD0frM3Uc$`|I8R0mqjS?sbcPRGT)Bku z_Yz{+5tks-VPjteJvaEyyIPSge~yw{#dRY76mU%UiCBSQXCcy==j}4rDRN_6$rRmj z&Bky&M0T4ghy*;rn`!XX3q-4p|M}_+v{+9bm+hgxf6?1rY(dvEYN8@r71zDD%7Tz! zG2aAF?f)a+nyq=xEybN^jgUzE^Zy6g@=!2$C)Ak(qDy!H!#eo+&(Lf%UqGVucD>bO ztYk_N*xEe{jLY&XUp+>7ciofs63=jJ;kj1nQXM>iH4p`1wg<&J7pDMDKzTij1^SX& z$nFO;7vrEAAj0GnGb(;j|CF13RUVS4CFcn|;+J=)mOgx6+AX8`??c;I@vNRG>K+N7 z{{z3B43Owf+UTVMv=`QsDFplck3qnB6gdhV*1(s33PN~fj{4x<9QdQ}f)TAGcbmpv z?&?zf;&47bh*UyrunS-Nu&=0`CP?A+nua>QND2=t1Y0@9d`$3@mTtK!XR({W6Czej zy_$2%fsiOIPCfn8{$#Wgn7uyBRsB6_f8QDUo$>l=&T6!>Xe|^DY*&JAX{V>QTHs^g zaZ}!tc{{*jTkYrE{^RPkG>_u**BN-}EUJ9f2A{pYQ7NSXTS<1CNQ3iXEHCo; z8a%noTFIF`$#o0wcQ|-;dUoNLuMA`+Vp9xgr3){WL_mlADHEp4trML`VDoay1SZX4 z7gKxg2Xtk(Ocr%!^|uw$ouZgtdS8(BxvD#)zAG8fq;<#!hW>7WGUscDr>OUd?4sRd zs1XYK-%PhUqY}aY)P6xRA4h#5s4IPsvQ=Ll+652rV6B5Y4ebJGV#l9n}b z2x|IZqQuaeRIy>*xENK_zto>)p@mOnQ9l{%8834mZzvQ15-JOCPS=$cFXF<@;h%}j z;Rk_bh)8j+(fO!P>2aJOLXOa7A%Im{(rI_{$M2ABE*7=0Y8W1iHm19DIgv%nhD_+* zqCcj|ikYKYVHQy!MAkMUsIRI=BQYldGGNVc?W79}bmTlk zUEt-)EU6d`dZH|;tnt?K*6R%uVyeeFfsYci9C@R|qC)*f@{=Ym00HxPw4Y-BB#N$k zul<%VNJGxo$)!lrpj5jp*>+|2!#`m=HhUG{LhR`W-gzD^s7iZ%iemDO`sz#bRcz0c z%zOT8l5(Pkkd^$m{?Wq$D(f{S!qfDl>r_Y4(d!gPUfuESBU)VoNA}LqgD%R7K~xJA zi+<}j7YP?e8kMLrc6slR+auj4S!rrn*go3N=668>j_G-yi(eGB!|Y9#?^7x|vK`@p4H@Q411cykeKduWEFv&Y2_ zQ$JxR6G4%d?1(fzcM34OyXg-}b)^X8jzX!EeRoOwy)GTnpiC)V$ZNl zmcvOSOV^OL@m-ZDQ6O3ZU#@iBlYi?u{csI>-DTgipz`&>EwGEiPUUI}WYlId^tM6w%@?MeDI#p)>7Z(6 z&1pVF)M7qrX+LT$yAYJu?j0Yvv42?5`kC#dd;}`~aDv!=Xe@Eg=I)F_iX?Y|erO?u znvCAnDclFbRgt%&7hjM&7tlEM4~I?<->f|!D2+n<%EuArBSg*xXxR%bWg6&seV3ki zC35N#gwnrmBxP8r%;RnR89v3xzdL=oQ+`mn$Gofa+gCWlFZdAb_TwXV4a*NG3mO46??cX>-4?K>E+IrM#A_5xhx!w6RJ){94&2dMQ|ODg=A`mVee zp6?C)6|(%0wlNehr(~NH+Rr`@i4uib1oo$#a|bt*LzeS1@*WuCR|c^p1IP-5;c2Ct zentI_NBH$mJDN|#W|MZSrJWVn+Cq;oE>C+y%x58{ic7Ju?h%>Iy%4bZOSQY~`is`e z{Zz8`o#8rvcqs*j8Mxc+`P~4*)P3^EE1HHD28A%Gz2-64ms4!k9muqOVYN!jqGzyZ zm&C`YWD)2yG9=CzzRx13j%jhQ?@AfSZ}Yb2g;-pKic7XFst z<8I~D+;xw`!uG-}LU%E=tRI)!4(Z0=t(;KHb}`oadv@QkoJQ-Oxr&4Gznsq3lPjOj zWIacDGw(alEN&-8=l#P`ZTONT5$6FDOl)UMR4HSPdMXk*dEy`s+U9dH;B`LW@MNgc z)cgGT_#ZFE7$I&>=W_sZyFX*`42xNnU!iTZxnQBUzo9$Sfdx@Oi`)nG!|T7CvB$-< zt7HhuW2=4~rLyVvXAy$SIY$ZDp%AxUPWL_3`w;qHWSXD~o=ji<`NoTWF7}Z?Wu$^9 z<1VO}kwsn(LZ;JuqyNV3!Ihh`_So*dhgTl44r~uT>32PO+m+gtKmJB(w912duySJJ z1EO38ePjX6zlrcE3HdXYN4r>tqNV&Q!O^=~&B0i;muTu;l!}X!;=*Yp83nzA zAoSTV4S#-7SL?hs-R6DAnHnuu*2DJ4V6LyMQ;FRR+M5YRf^K?tWVE|}UD~pT^OKb1xyi3p|v1@(l3?OUfBfv8!7W_n^oE z(AL}3<9wT!SVqLI+OxhF^)U3AUy|O_f8yCombtu*peZO zAP7+(4M?cfo{?YB8=dYT)awR^qROxaYM*9q#mbu!*F86$Zy!Sy$DC>JyIePDQtv2b zFTIlrK;fR|QKL!#!^D@xRlADLK+PC;Gc{$6+EqVQ)l*(mIqi_nXS;LRgbrZcI&<;G zSRWjS&RxXGA5YV5*k?8?)Zb|01Y=r0C6*X8(0!Axgt8R;Yu5sgO@J~Mr+<8@C=l!GdvN-K3;pc6Z?vfUnwe z3Sam!?+X0wnWG3F6e^Z?lVJ;mX6a#~Sh}n1VVjD~DQ$@`X%IgL7jY?KtjJ8wJPTS& zH8zX+Fl;gqd_0K_s$AL`OLa^06W^E=+T~=O>LS@^I{hH6@AZ8mHb0wVj*I2_kc0yH zMnq5Jse6lMXT0180ve+0-JW-+nV(h#o-~~^W0?<;GFrT)0{cg7xP|Z&ML;J4{^{9S zH9qn&lZt)(vu_~OM_0-&%j|2I{R9GpDG0f%2dZ@Fe$@lpcefFnS5qvJX!5Lh{TZq%Wr`C}Wu+45=3ylls>7Rr0LA%X@pABy7K5SRn0cst;m}I6!deSK4XQRIU99lFOd(-p-zl3mOc22c%wJ~ zCwXztrA)V%4hNfNs*I{za=c@DR-AC^p^R88APIvCgWb}ThS6T(uxXm zauFK(2XO8ro0aEv2;RU|nIED~RhH~VH?~0ayDn|740~^2uKdpc#x4d_wE`e_MF!{g z|J*e=KAY-4zE*g7O$H=t@;aYW@7|AZHy#5I;tlXH?4WQYn7mzJ+ylQ?%l4uA2<~L6 zQq#FAr|huM_IoBY(K;_V$rhG1X9Y7(yXh4=@Ih^_#&K!#@Z1J8CfBK%W}$ z!|CK;V$Q3KfnD?aQA7fe zeSMUx@)Db8YM=qWYZIP66el-ML%!9uNC&^h`d@>lY6WKY3Szf{pD zz*N0O){|_+!?tSG&v2e4Ep{acS;ocE>}2fldVf;%>#xpxsn|$6{8$#{&H3v~(0pI! znOUy-aoBv4NuoAzW(1p{o?H_bb+}CG)UOZOyd>=ZZE$c-TQT?vVNr4p> zY^0>0e-U&W9EJrtng<o8YaFh1{5X%O9*S$&A6FDsSoz-fGA7Z2HQ2H z&rzSS(0ikg05i2Lvqc>&8Mp_^Q?*e^7)~bZUpHdKOap$~&3zDE`*mu#F}=!ca%w*YY$uS999*9H@wpB}k=@6O9`b^^R>Re`Ur9VYG{wYT!I2yO5pr&ivbvq- zM9D38mD|}DgNTK}$+i1!-b2AxvT6#y1K-msT11HO50!jKViG}y`3f34Gg5gQY_Z7H z4>9{;&X7Q7hQFIZ{u%~}Ju*hVo%Gaeu}rD4NnU1`B?vwG=@xfkYdBf}ttF4k+c`eu z1I3!XgM&~s-e@$ji4!LW8sxj+j-Gn@!=Wil5qzrfD0;YWG?Hg&e6VoFD+Em@cSI+5 zD|pKtTiQ1q5iRNdtsk7?#Tj(7f^j$>z9I)`+Uj=htg(4|Xx}{&rCxNu{@qib(n;QNbLe*^>%+tj$?J;)_!zsuV0_Ad79)mfk zHOQ$()e(0R+cjS>gTUB15UITu1@)>kx#1AGOf`gGUJilB17gIpuy)qi@FSAP%q1Og zH0kzY@gBcJhj$V``9A!#GyK#)F)Ki+pJtrgis^j3D(r{=JK#5$OTT)*HJ%e5qb+e? z;;aveoHKIQS_Au^dA<*#yDC!tHA%5O(t%9D{ZXiA)}|!~+KLjntOT6^CFreGDDOiw z4wKw6&|F<=f162gRAKZpRoFrx{btjOe#%LWA^GegDgjge_jlunsMT>T^$}8PE?s4X zG3aBdTs4_HnGn%+D|YBJM8KgGJ2ZN5tdow($|P$adKhd`FIri)-r`qoGETSAWLo>jo%35G>;}khQo=WP{jE~8HFq5k*a~H&aG_TBmg{N zajN+?SIFJ>Vzq7E(6V!RZg9$d+0NGNa;@g}3hVWJY%K}b7@pyLlm`7%9nHL{+!GR# zjxaRznokI^i)E2?{@U@~-Uz84`Mf{t5_rGm;_l73IKH|Fz0t;S$Ug-}%l(Oy1@GJ$ z)>x*<^YtX~)*OTV+wcx-liR)*i)CqYYBusB>9r%6BmvP$v{&oTvPCUZd+P|n2E?;- z%$p08sao%CpJw%Af86%*c$)vUE-_7avwHQOj;Ott*47@j4c`nz(@f7EEb{>C=8LC4 z>fHF`e_t%ijUZhPdsrWxX7P_wjE?-tNpibxQSWP|5`wl<;-_G$)KDH> zTm2{K)z?%Q!FPiu=X;$qC`EUzjb+t2@5^~9vLSMRw7y<7h*~_+0=#gUxW#-~+Qm*y z$hf1Wd==afP{^XU74I&MMj$grkqT&|D6nfn`Wzp$m>f(Tg8ejIgLA}7%@!@UiHfp%wt=2VaLZ$;*mLH=Xvx(p!~-w!NLz z6K{n&(-KW6-yRm*VY=y`%b=wOCSt0dJTn|j#8HRW(5$^_W=YI_?dHn92>@*9n`0Dc zxrWPOz7c*fV;ivzo@+&&d>djcj-gK8i06(tk+HdCV zZY@jp$=12n0O!^SY6rR7j?j51wU#-zgoX1IR<_*l=0wGt)31~5c+}o|QTML_l%Q;N zX_)C<4{l`#+_!HGGw8-jOs0=TecEn!;zYnfr_3xEDZ>g@!CR@rRi!WQtO)p?DO`-* zS^8CGc#=t(e7f`nDTU98Nk3p-*Wu+8PkrnAC&+)+%UU_lM+FW|oGU{AQomFI_3P`# z*q_L(1QSci->y0?U1{+E%@8T_Nz7nCl9a_QKyr0>;x-Z|fqzL(!})lG*I{Po{gAQG zDGkrb?Cp#8@|FFcsNqm)VX5mcpYd~dCvDz5qF(3da130KPOc#qE<)j zWh>?1OecXzE+6Sb@BpDY`x#1^NbMr zsj4%vpUG+b*${IEOy`liv`35OIFA*(L`pcxZ27@)^>GPe!O?5PjNUmXLF<7)ju-8z$){plkIwy0LY zv68f-0|epC`?PXFv>0-DLAHH=Nod+bo3C=HN6zKqYGwQcoC4)br3>4?w<3K`ObGX% zOD@L#26flsoIBQ?lvHI!@gT+&A;e^Nv#v#HN8}xfB*VE z;h0mKm@#M|tw@CoHAyRDvL@>wo%=HQ*>pHzX&mjmM|-2v_3!7o1$9-|JUo$RqXtfZ zW&I>8B21D{ftVc*qC6E*$(A2N!=N(2sEaC58DF_D?z8$#yP}gMT(+NkmDyfd~ zwfuq`{rCs@XG)_-K}*zmyVWkQjmOe=s~e==+-GAR6~E+G!c{G8qIRC2pWmD!1`^dL z^HRXO5t>7lSK!gh=#>)%KGobGv5`j*eIRD@3h%=ByfS^I_Nk)z+(Uw7X$YE*wMNvw z6nG$?27lKwFkRZ!T~jqG^19f}gu8D(Gr?rPa2PHZjFjw>0E~^j^IMfA0I^+^jZ7z+ zrfUHTjD(#4sn_c0{2$nJT{-l9*)_nZ)nnVuaVhyW^CypS*$xklPbf9%`*@On;jc2c zN#MbqZA~v~_rSSOCB{|t(w^;+9e1}G%x&~Ly9O{}R$zhD>d*RS+F|AC{Y<0yumbSJ zqAE>0lwQN}QkbGLk+@teTlCX1=GeS1o4NlHU5?;9+0INN7394bB~3m&$6`?Vl4A8{ zWmRT<7m;e~#}kJo9p4Rx=xA1=!Hw4L1iQm#s0kRQkPx%T8nZZ+_eS+waqI=p7mJrV zyahIIuDA-gKJeGOba>xVNanQS=-Kc8C1ZV=OTX#zokyPBA$!6p)s{%m2u7#f3ST*J z{1+xR{m$jas`3o_KQJ+8c2Y`vymn7A_xm?1`cZbHCHC&#@>;Tr_3cxu^-ucCDSu?! zGxhWL3083T8C`^?v`4z5l!YOnT z*K{i4m)WC&aTjDI?xWXoK;sJ+#&l-sYPZdWSm&Yoi5<^ z6Ezb*D$P5Ad4sM-AnPgPrRFafQ7HAbZZIV?cE9PMD%!vBJ@Py{_!|j)M&DXEfXC4# zb+{c@=*-PEFI>nAYDc@K5eb;cVlWf{^FDGkF9P28idm=>8QNPM@)oHA)ZvC}ke?^Cb(un$_%I154GI9Pg&%x~N;k*g1 zt~@zq^4LmM>I$ma1DnaLSMZ0#b@E^AoLkC$dO6A4s0arQL9|Hl(!k?%%cg^Rs1tZvE7Z z&j)hJ!kpmq1lt2zHl9S#E~+IMkc;>}s+>GdImjxeC7nDU?}e=yt;Fb5NAtA&-bxK9|OweOT7Tr`V7V zh3-&VA_F0LhhK1ITQ7TF`9eNqk9(wDw20MUsa`vrAiVXyc+fpF3VmV2k|NdWUv|QK z?VtJ`!)_c<+^{Aei$CI{S<~oG-+CE=%czZkw?OJZR2yFnL;Ex<+SDzxU}Va->o%&) z-=67=QGxA~)#zI19O-FfVtU8kI5W#``TT@PXJ>FSlC0bK&ier zp)EER<&6mu*ik>9Ix?E+ur-}kfALZOBkggI>8k=iA!?`Ah+M?z+*-`Nr{cVzi$sU5 z%&xwY%>L&+mp|LVpF{bM zclk|-2iJ*8hrBN$=RqkqJ>)+RVgIs9E?znicivOP8F3R<-DM-n6%A*S{`+BoX&&-7 z2lv3r*na1OR9`aT;_pGGmZ;iCcT9DllIuJPP zcedX9*DE=Hu+Ua|_zNf}zkI_D{&H&bWN~Bq1E;cnQg+q$$Cpi&x*=o+UsQR5^;Y%V zGpvMaPGV7Bt6_|dfhZ4HMNzU*_1~_3DYLU%Ftjn&PdqP*`o)!N(~FhT1O+7Y^zFSocG}d&f&U90TXhVg4H!~K)AeBo!b?}!5tP?x&~n2g`x#l<^nQwR ztTgW6X0w-$*fq4d`yOlXVf+6QV2J;)p^GRVJ}x}0A2#SoeqU+;Ojw{w%%k}FpDM9t z|C<$KFc`t3fSZHaH})^!S@x;$>ucof+`TM{+5oN8!4K8ud?FTu-k7`-aai z=R}?G1ssRt+hYZ9y)|#FzYP1bg%V~fksbq7?&%!h?X%O^|wPl#!;igb~1{G zUa`BVKbPvzd3_pGqW99#eZ%K2ZE!Re6nLHAG-bUIGG{M;nMp|%QQA|(gLdN-+95#1 z^v&Lxr)L)0p|2r}h$NvuBtel7$T893vMa7W;XpNIfyJV1oV$o&2J|*yi8k)@Y8W3T zHlSmgJ&)B;6`ZESZ!hL(qd7c4)Uk3Y4@Zs*d>y1b!Gmg;#*PSu^rTmp$gOPk5 zpH4pKX}XVn3GxJl9q$fyhD{=ab-#P`88pDBcw1!w?1LR#J>P#N4#It+-r2?n9dLYL zMF8|xXPa9Vcykq)rn?QZuB1V?hBCuyR{af|Bf>AdW5EVqVl%b0nKecc{dOZlXG}Zc%APq@FF3mndZ%O%-VpIQZ6O@YU8;s-nXny zW^#DMrD=k+Gk%o`glGB-96I+w0O}5RMcpptLbSKc;pDKQ-!sGj`PP@Dg>bIMqIS8i zr9n25*?Ya8qd0scsncDF!cLktHzNVI1}mer`&|H0+X){&@O6#Yn=8!oAeC(`mv{f0 z1RLQ&H>4qQn0=S@O=;ue=Sl&EhKAguyzbdanD!X?^{(@fWB=ccSnMv_Z`Xq5z!qncx>sn^%lc0g^fJ0~f*DTZuvTjN~X3*~t<(BEosV9ErL}%0@ZWQy*9grWo|n zb?bkHO@S*Xor@*YdfSKaeak$-9AqD3L~Ct3nkHGv!@s0i{(*!P(GWrCkxS*w0DoDZX)`n|%q+NNe{Kh$`@@$lVIda*0z-i(wd zC^8?%Xv1^YHEta`COc`}a(~5sZZ?y(KjBdTG+1GytAHw*G=;#N(<}~Eaw^)2{tR1V zSvc$kla=GPL4n42^x%o&?B8I9{trtET?L3GjTfTc<93dFE4KO$uB(%s60a?)EfcG& z9TQFJlfM@wRz2SbrG(PTY8>I=MA)`M@>Dg%c~yz^4e5lppS%t6Ud`zrp)S*lH(s}s z&6e{=wFe6_4MAMb_XB3-AV+`ze3U z#{0_eFKIjw*`Bt2=<`yec(>*UAY^%Jn>aOFEzp(Z%$Yd1ePZuszsG6t-nm}(P_-CH zt{P_+8qb8#CItqHG`mntj;B0sa-iF}tn(wWWUJ-8{Ddj!D$@wCLBsW?G2Ho?>Z6>aZ zPLv);#!ks72c!5K>Gf#K1zdXCOK&`IM`~$Rq3YXTj}l%;Def}ja&wm?Y#Lu`E$)Hr z(WyfxTO1%}l9$wI>CwWfl_@zZ*-LOeC>-JAV z;IQ0x0V{Fu_8W|n_LoWnM{l87JvXGVWNlshD`Y!|y2N~o*HW@xx)`pH75wd{c!DS2 zvkoQX-KMM?rjFt>rjS6Er$3o=?D{UhwGiSPmYAmFa{C3IQ(u;FSd-$Cp87(WOJN0~ z1J*HJLC6K6o@{m8^+9ux(2}P6e6o~Vu!s9L^FyyB; z8&-c+ncgxpZ7MS{+R667-h&lQ_akjJ-DdFX;24IWVU~@~VM|!1r7V`t9!PD)1{Kni zaF|W|&aVprg>10Re!%65BuRcNR8@HRpao|CCWF&&>_Ttj-Ux9wva6VS|I*~L{S+Ut zD~iJ4H{BqZFKmu~F43XI>}P_zzpXuFNBHdqc<6p>;*?7)W{8?s@!*-J8yXn($KIi3 z0qN1(|KH&3?rY+FVZwO2C zW8!g%oO-j78SNLjC#`Q17qk~pNR`M$?%FG0(V4V-C3B*BYpa95>+jLo>Sl%)2LZ;1 z4%RXktEdk(1alN+&%ueJVN>z|*G=ai?d;PhVP1*bCGC`Xhsp9T(oA0nQ6yv-m|(6w zwNkFVaJNqT{k{}$6GsQUbG_C$>G}Mb@zBF8OOPu8jtmLkAPr$P;GBAt%`CS5HLYjj zegZy0L)dJY{Sg7X1OaxaRP|2Q4BZ74b1tP_n*w|?knZOQDyp+f0!%nW8f@kMs|DZ# zs(HP-qGh|$a%tK2h3dfMTL$nnl4F*#SWY=j^HSe(kSWe zo9vQ=Y@3w4H+n9iyojyvQrQpukGK|@0v(LiuB~~j?aL(Y%v|an6m^(5A|HU^j^0li zv7ZtF2V!e((!y?7?!)fw{5ctJrqHv%h>sjxe>0AVdm#z>J`F{jQi4Wf^qP7F?Q}>< z!I)(O5`i@>o9vKlGeHiFY|oNJIX!ym@4v6n@8^7BlfWI5;;GpcHSbBSH$;-#vDd91 zzoq^v1ied&y%?iwDeD!LZkA(_Ki*aD-t2`cW}V+RqAC%&RZ6~<24(z`1)gZhT~IV8 zt>*<7!b2mEFM}5XG>IYMUOItd5+~@YO>hRtO`&Qysh|_-s2auN?1&TlraEPhhv`Q@ zUyYKfpaA~@x=LMU5TV6DQ_&TI(m%g(f?gK-lTX?UP#7gPNA67PE?vy=!=+m{XI$QR zmoQK-s+dg$cUq44HcMmUc)v5vazBgWlscWF^0~PSA~N38ntG8P7u7tbA<-?m?kl!o zO%(n0mOdP`F7J=`0&k_jo&*Ze^%rqIY-jCO_?&uehu6mD0i(ot!j+aN3t0IYq?I*v zRs8Cki93?!)un|SC*yhVD!n-JJ~%Resn6{UID*pVE`6@ipSgXz_ZxP~uU(qM$AIa0 zUh4c%>B6=wI{rE)x#$;%!s^SfWU53^dqo2h{@%SbqRBKtZrU$t#YdLM4Yt}S@j|Uq zms;Q3TTk+38XXODJgA#Q)o{>73^j z9mFuBRc0gG2WP0dGWGkOieNv0>Q1R=y|{tsc8YS&9Pz<~cTz#S<2r0h;9bqe$hFGU zywQ*6d~rj{vfx*c2{BS93-J~CCz%UmQa$}I!6bjX!IvAJ{zuc5TQ)AU9Rp6eKSOl` z%INx^PR9H%O<10^3eq1$auxSgJQ?p!_x)U_0(z&+rpb}ql{oK>4-!<#CHk+1V{&;C z0O9H)0u*zhVFY_*o^hPF_pe%oKjRrl+0i+#i$xF#G>moZ^eg?MeU%1ynpKb8r*E_Y z1p0^*V66_$8baQ8%4kuth{P@K0Vu|?L#L=OJGhyeaQC7(!9uE9YKh!sndexNP}CWG zlcb}L_kQ{6?Xg&IeE-)Y+XuP^pks5$h8{E2!+*+VhQ6^6-4pg~RMp!3I;z70J!b%e zmhWdz@*XV2Nz7?NoSQ-Z*E1N)=d*b#I>ox8kRTHYsto4)T~EouyZt*$r1437Xw9zK z_z&tU{jOBk-@SQA^E0t?DjY1JH-f0qkC-~oQ1&Lo(|seP(K3DoV0rK|MAFun_WOtJ#{hbehR{rad_|cy?G5cp!HiBxdQnrqm0{t~lz7 zY|$X(jA7@<{WaN6mw)z0fS$PV`53Ebf9`m`%#snXtk9}v=^S!x zj&3Oztc%ia+az3tSIj2cuEhp0|B}BfR7^aiR*y0zcPKnkPT7k4Rm2>rwZ;unha{@r zpi9bj`MX`E3T&EgpTA`>toioG4BLKHfTvDzeaZhR#i*YibbBvDuF&(ojXu(dC6bro z58fjY-XC(VNsDHAJU*}qXO|%g-&AlL$M+jVuWtqHr#smtk&+2`(tAlo~ z#MXn-DPEKWY6E31UW~4jQTysbzR$96uq)($rsLohfXi{%{LP>k6x~>>a73E2OT5gW z#H8+znS(Pj@IsiakU?_C3&;i~T4^)enXHr*FOCZE60%p9vgH00yzj?Q0W6Z#`(pt` zkF}ANMy6S#YD2IpjpN2xLf_brOC$GSwp>DrQ37e{-^U}p`A z{4}*$3H~d#)aJEmO?)0-XFki%y-}8sRq-8Tg@{KU4>h|BbWOQ1krbI8a~?F+WOqrp z&X9puqz2P(to{iKx1{-?`99>2!6WY~5ZFoZw_bLff;rIac4pRd{Bf{Xumvx$0>3QA zY0a~Z+5eF2)*Q++7-qQjz8?;!5%8}Q-Qs2VliLw}%Pg{Z(aDv?y|ZNd+SI&FIqN-% zYlE(j2QiH}YjPQh5}4%f>XH5IFDZLs_FjV0H^>(ms`AhB4lndvS3=5kOaUXb;F+Sk zUK~xV@~Fxcv1|31Nu`L=Au|(^LJFg#bIL;|C2w-yXzwrL{bTaSRtD;I^9c`SS7~9eeNn`F*~8M4x#Dbxdt3Z{ByR5M-S+ zRFjTpkCb$BRkN*yP)VI^pzm9-tzNQxVCE7C_4u`?3PJT$`ua2zDL^v}^=6*z-fA%7 zBD@aM=8xHk8uT5YtK#To+}I_7*vw_9tXvz_UlDse_-VlXF*0aeL8~kTvHIkE zG7UkQc(>=goY=v%J40IW_WL)42I+kRCGa`0`YQFKcV$(t?Q?0-_UR zFHO}oC`{G%P5)ng;j$f@k~=~Dx>V-3%C!41lY+K^ylTDcJX@LB+VtbxFt3=EMj_D} z>+T=BSy!t}{td-yW)xO^u?ad5wr-%z4LNw-RyS0z5`=`r1s|C9loD;l1R-bJkpC@4 zRMb>F-FCizw}@;w?Gw-w%PAotb6gMA{VvoXON948eqgH0-gsbRrSo5!Lrg1g_K#M~>ZrY3%Ndwf#5{e5A2@oy=6wIxTsQ#C zg~fHN*&s0M8266xIdFc|1F02tqoY=%&(VuOhfYim#>W+YY5kSdG2~=gojt^EjxKKlU+< z1)vo_Yb=ad#Dj8XZDwx}64c*)K_YeMEs*VgB-TJE{D64K*i|ilyE9e}g<%}OW1+|f z0vgV>7u$PGpnNbB(y#hz@mA51iwi5R`$)ejtE7`#%q@Daa~Ly{8G<3(ah;4-vbp`p z^8yrL%&RNc)nO6||5iR_Ei3g%EOtCKP73MSJ7-@sPPqP=I85@+b^Ga=-c765je;Nt>*e*Izz$x0n(p)i zv)kh!zZ<=}PCq%X)z`@G91`}(4Bg9H_Mp{t@R_3yhkmfcILGoWQ)4X@e4iOe zC(2@Q#P#7H(bB=PuhrHf7G9{M8*=(bOJr_5&;gI5c)ov-Ns;k6@tghVB$pe?Khxk* zWeCE9RuWHh)y<3>109e?0CXT^m+^l*`}J=$LS~lO^ZLyfr$qC-L{~qSxG4W0zTN^T z3jgc(r$eMgq$Q*jP^4q&5@A6=L_kzfK)R(tkd_bxC3X>z?pV4M>28*8SXerjx*xvZ z-!squfA4eeIPN&kII{@5XU{qB^LjN>#8qrFm=(=mvYHKbW%$mC4a%gBK-f9B0rAMW z53mnqed4kT{4fw`SjN)_Pi|UnP;+xhJB5m&)To*;cyk@lxXNv6KP8{E8RRG4P2u&m zwJP|=#sqXj?DipXh)`@iI`;OPR+TW;`tfY2T)maCf+CyYr0!|#QJ-b=J_uQaoncQ{ ze`LP1MZ##rGM@@~$SFxll1XD%v_*fhWMs&Z@}anpwfF~euw%G{3+g9`pqvKFJvz!h z2iJvmtBI6@)TtjDA`TRc>DGz8Z>@oq;uWxwyUQ}$a5Q~(;WyFcfl1-w z66UqjZnoak5n74T2$qc!La1}*MRxaNr`29`MY|9hjV8CZ36~8J`F*orie26o|9w{z z=Hu368sLQLT)k7gS=^EhWh=2bzd2dPFe%rOm{Vp6>`I=!PW!IGbG3*})aainsaIn} z)OW;b-TkrK-gkLrB65g)64O1X*pG|6?;RQ*QQ^)V#YdFS3=TTJyzb%lSNpCQ#^SvV zg;-y^eu3bhfD#oR{Q=NPd2qq#Q@o<@tE#+3g-tlet#aQ9`9R%tjN;khi*jFOl}WFH zJIR%Y4!@>7-t`kqCH^W1z7-1_4#GJrua_BHO|!B7g+{AR4u=yQ4C3cy0Y3=i^=U@~ z%`MQk0`_W2v>+IjVt+L`0$H8RsA7UA?Uu6p?^Wm{BT_o=@5EI1d&CQRl61DC2*;T} zmx*uYnUUU;3QFsV@BH%9%+8=7>mbe^I>l~(e12~?)GPE{$g%e-MeOy$aVA+3#+%ZW zpU&f=lWpfIqoCCYG2uT>KgluO;jH`5_++$)vqAwA7+z3o1GGimUl?MCMD3pRPUV(( zv?8c=dL&$Zkj|NW*Qw^suPw9U#M+viyk48$jm&~l*Aw*_XwBhZuy|KXv z+rF!-x7XWEYnQIf+v~g`7-!*S5T@mY6NATuoAp-9UAZin<`&Z%|BuA$bK=|50e|zf z(<3YvXEtN+=m9^@_eD_VHUOQNNQ$v2@eacN5El$Kzgz}4oTqySLuwK25WqDw|Bq4N z`jq3^=f@749#xfRhfP)h@E{aqPAB^ZiU0v2;lHjb0i`$~Pte!})TlQgCO&;R`OjUY zLfdX=(2)+PT92s?Z9pG4siHsZmYk5iUFA3X&v+9yYl0cAg&(e^oq$`v%V*bep=|hA zR%wHiTTIn0G!IDqa6Za6?E(a)|Hd5oI!c34?0zM*VEQT>!E$)bDR$LyHz?;)0oMnF zygDpsp7{{y=RLQ>-FMOj6mO5^9Tby$r&_<=o+2b?W^@peOB$jJ5&I1D+UvN~NK#5- zLE=R#G;f*H%W!WUTu}XW-ZMM z6g9QNy1geh9_`q_L3TxFsV95MGImH)5(HlcSG2}Mlbpb!aKZ6DMp^kmmvX+3aeXbR zSp{LG0Z^dFRn#_VH^p+Qc40S3dh}~1gq2WzJ{ z;!o4+y=zYI?DYNo@JG%N@MW49?+J6^u5j~6%35h!4*-Qw1)$I=+eIY3xptMwRIMah zaSrM~aLM4>dw6Hf0I3RX0vMqrT%nhmjfs+0%;seMaS3TOcBI{*U!7n(x1_pU)m@(% zkYun&_A**+U6}Snb@}%#ZR$Hh?1#%|gD&&(70NMlsVuMZ6`UV7a)T0fuF%`WChNXO z{V>?#@=rV9316~hInom6i*)L@ zuD2?eO!D<>;zmyHwnHeri%)K81Rg>9fmGrfS$^Uz`_kbA@&?%e27Y*xbx>sjg53`B zS`r0?Z6`46ZrayvTBBKt@r((J_V+2IDj33vT8b^)Pp*1{GF96(*UxwI65IIN%@>LH z?hJnqr5f{rrB)l_I6RXy8!q%XX$gD7nMt>h!XS%?WVEKA$9~ zca-=vMdHwLOK$%O`_nZaXOoPc4wy3)n*A@p9(F2wf1QrD^VE!$#&_WxR5!b%^?81O zi=-xr@J6ApJ-6tVq^Fyc6JWjSOcHIiji#=X2$8*ryR%2Z`ULOv@!;eB@cewp72q{a zG2JqW>YTJ|ypTA~OZfQhp7hU(%lC)MEEy&D1ZM(((l?tACH_bC3s4rRIItHWtOJSX z825S*Ig?bsskK^!!Z(G0Nu$itzwgUhph%LAdji98N`b`WaxzlYAh2P-0-flA*qxaW zJ{|Nbnp}gHle2g37$5q3Xb#aQz`S*X-j9_B%f*$AK7S^AlqNjb4bC>ltrnYmL}!y1 z6Dj2hicjHNN~X77ZUlphx8gHZtK^+#ZRFfXM2CAqBxJ!brdI^w(m5#E!?#D9?NHF4 zUGMyeCT+#nBzxmOJ6gSM+Wc_@%)=VTblocKippP>b9Dw05P}Dv7*@M8{gqZdK{Ibh z5>_#`bTnyq#eVDvIb1Y(?KcV=?YK+TO!C5bkEzVc{_g4Ucsd(aR^uqo=;}h#6JaO-xsEWCJE|@n*dU96|_$% zMB1^Ppk8s%H7czCG^b~~W4EwccR%ur%VUJFqrM|%r8>aeHa{Cm&4(H)chTbK%-@QT(8VSIgL z$aYijy~L3S&Ok`7H!o^+dsblRa3lBWYI8D_Q;QK zJS}9J{O>@)5M51vI&m9imR9N)H5=6rxUC}Dt+!{gul027fNLJe8q8+%@WY~}UEO09 zHVOwKQW0)`MH3vU-SynOLQJflnLr2VulNa{ueLBbko6P9iBL}y5EfU~;4?IVViCX9 zf*KpCos@m<$&HZKTG+wv?oem=@RuP9>7{eF^fBR)X{*IhdEiMP-#TBAaw3*TQuYip z$ZN{lDMe7gZ}S_CTM`VATraz3JB53AB&)8d7Gg1Ud$zsqyunS{Y^9+A zZ(0U)s5401)0%jd=%?&+fVfQ-Bj;b+hbn6JRL83+uUt%;#EU%#skLN)dOMZY`QxX6 zy@=--y5W0@$aYd$?}W~_5Yj}?)R7{(`OpSU1T(ATPw9csa&d{gbNt8=mOBSihGbru zm%qieJn%IA=4TVcls0NIQWh)36*p!+K_(c}0%~X<{h>}BCTp*B3t6e7Wb$KFl^*bS z6b!bgAT3|vbCep{ACzs#a^Gc*bEj%o({oA9Hst>uuH@~3S^A2qhRJ63JDATJ_V2h1HW**Zj@S#Is{^aBF_=LcyM;!H#I<0gRD2--HPH zd6ehd?AJADTO|9)SoXS=n3nRA+{|yF4`TdsmDwFe@ zObEA%fYgElrl|z*f;6|~;}n!3-?PjxFTMiVsgJf=&eFVaAIv(}n6cZmaGbAN3*{V2 zy$=sk%5E7h!3K6`9MUl?;S0*hG^reBaS?gb{#I{YmEuRP%fwJd&swt1!Pu0BLJg;x z&1y#Z+0gL{S&x!MNJum+KtiA8-lxpUjnoTz?6AJ>LcnPL7Sk$aMZ&1Endn5hM_s&o zSx`BX$f9c=)d?Ds0iY*i^TDYgfp%&o5p4lSC=T0!fgx5nxSnJa_y7_fUvF|-0qqNd zx^u$*4kof;HbukgCV8yYaL}g)Z=2~P6rHDAi(b+Y;UOwicv!!qj@iN|-7&`p=z?lK zrJ-r&-7lF?$^)Ofdk3bF;?EPBRCaJ;YL;efHVNo!zY!{NP#dT^xyJ-gNzF(n*%cmX zRx6@(OjE5@mhVKQK=xuWP!*pW0e!lCM_!*1AvGAE9ZB<|cWO|ttP}SxRFIb%*3VWHcrWE#;;~8|(F7rxt;LEMUoJS+)Lzznva1Bim0(jzx;jBij@LeDK zO~-wh;0Mh2aNSkH9g(v$z@qCX|2N1UC(7O;vyTo$-fMJLo&AR z_HotYECTq_AcuX{MvuHM-_w9Vhk;^7P%jhJ`jIhMgLys|ay}}!Q<9o%2eKrf<`nTV zNRWY>d%gV>WNuLJAKnc~L9n~B0l(LeVu6HpXuw=QQxXJ8B-?JMNmrP(RD;oBr1}cq zNwG@u-`|cc-)Vg{U>Ht%UmWk;McHz z{oele40eF*l%%DE1A@)pD~$*+Dr_K9h0b;1|D{p0_K#iQ-f&)Flut<~e$ip`th$Gy z`27w-mK~BpgLGz=bj=sRLP%!KJx%|jT<`sofdKhB?(sk~QWq=OF?ppObcUHB6G9-)8XvD%lOP`2X&v4m41sK0vi8-OQu|&0~k1!?z&?P=((ovLh4Tz!X14YBhCgNr!u;#{5-V&c%#28 zEiE08eNxT+B<9kUv7{xhs1C9obh{@4DayEOAW;rRIe~(eN1t6P=Yeq}#kc_n&eJM8 zqGNItJY~`4j`|QZ?)1SP%g-zRb(T+OC7!s-pX3c^DYj@;J#lWebvAM-Irgf?lv7Jz z@yf@K3eYG)og^nTh)+X3v}PGuWp<6G^8_rvE;&{^7)^$hO(lp=5FYD7Q_ixXOMfND zheSY+g@b75aI+>0Ir7FvuK4A$Ot4xujxJzujvqX&3FMxigE$fObqqj|v4*~!1tO_d zfDrRQ;wCap`X?VUb_-r!@E7ZFd&Lj>G7x9kbMCsyQq;1R=DiLzsz$Iq#DuVi#DEgM z>N&_?+DD}Zl?`Mn7#jah&cUSR~`Bh2SiQR+COen&?hAzVd3))i#}cA zXGQ(KlNG;R`PLdfL1rdh9&U$Iq&8)q_pNxjslRqD5Oi?Wpxf#_t|(kUCzi*+Phea! z*gX|O0*sNyDF+kg@WYdr$!4SZ24hYd_2=lDs9B5`Md%J;(4IlycR7gS+R*uPZ4Gun zT8j}}6E$Xd=t+h$TFw&`ut!{-2_U%?r(cb^1*7VR{mw`5{vxfe8GTvRwBeh|-al`+5I;dtS#%e>OV8$U`Xb2k zj))@4Z+gu>{b2zqa_HPlblkmg>L*8b9hZx8O*)v`zcyC}SEaVnx`fSMg&>={uIjsC z9oe_}E?5@bwRzLVDxvg|7B;2=frumu%hEU7nyMyuUCK}B2&EWWOuOu;y3ZV^YO3@5~;S!h@4RWWWEKQ ztYm1}qp&gU_z$-A$t_zwF;+JMlW%vfvOqF9Qxbl1TZXwzrkN0a#h&0>D zQqWAr(Xv8jfuuuw`C%E*o_)`&wOQ<_C`b~%mu2@Y&vKg6P}C`yCuh>FgY-v*3jYN1 zc%_U*s-IqgyfZK5>I3a=&Z7w_G8=7p;u#udxq9(`li@W?l1c6x zoTxefIiag=BQo+b<)1@8n+uxLal2<9UN#y5QF$wJ-BVLdcpF&6O9J*Xr8FT`E@e~A zl{Q|>bLRxWkvgV>mp`l5_cCv{fBp8M8gQ85e#(Z%{R}bV9Rt$U`xJ0xa3~*`s)2vF zh*GDa{hvXsUE1X@@XIN9(?~(>P;B9$MO)4SNy-Bp^3~^hx6&_e^;np-MIB$D%dEgn z!n_k7QfK5^eMEKTNwOyYQxrlF0o>}E$wcv7LTFH-{{_7S zq27qwux{og*pH$AP_H8>fnJ=Qnlz;i3?I2tq2OAf5A4a3|E!wwJ~jsQ82R!nOyq8d z4y_QrRj4#)(fMMm%>5^N?=nrnsus*JSHV(awx#&!OWf5p*BxXkBW^uE?xsJBNG?OZ zS|{|)-Xn>H5r8|z^qTM^Gm^0TU&j|Xl@?N-2EGl}TD8DAC-^3!HT7P#ST6Uo_p0;C z>^VUv72MAabX8v6thX#;FU=w=CRRhCYwFE3ce{3%uHOsz^SWO}_sLwH$IijN5c%<| z<6$8>{Ex`wZ3EcHRe4!~kit+4pWpJ3>TdjY;R~i(4|2O(w36=rR0}$DH?_cEG4r84 z8Oytr5`S@zPoR6UCjY`qVW(>H#DmS^gO!zM=4%>hfold_#D>+rK3VPzPg0%x!q9k$ zDUh z2FqzAP=XD)1)MA)RdyL)*dx|g-X!lMauD2;9Ow?Rrj@tJmF8NnBm0_K2a3G~<1rRc z3(qo{{VBT7U$>at(G_F2?Y;SpL)LJF$hSwusp1q}u$4VNGe_QkD$J~qvGdC}SZ ztL00Xsvu*XG4ieEG=(Yy@semKRcz7=BVYWL5YX&?V>8 z$at+H^;Udll;B%uPLQ%}=z+hf46q`)1>~Y#t`}fF3qx0T^^ILdwsRg!#~Q2FTQJ>p zi3Ct*qrh%?WU_O|5NngO3Mqlr#=(U>Zz3rd%c!LvZ5 zLX|HOs(EuHhE>(G_I7+GoO|D3N#>yO&F?^pErw5?H)2ztVDJZFcXG}Nm$l+=sk!H# zcbC8f4>*V^SY@yaa=62SVH-3fi{saHfcex9o=PiyaG4}m%214A5Ts}6JZ z8sL$nirY?bKavx7+h`%RJ|AVQJ(-wo?)k%XP`{JR2tHEH8EDxkjO|)IEIpp{VcY1- zRVjxj;Ti@!ho~9CeZcu%3MJUX{0oFHoNcOlSd|p;YT8wHLi2x*1LHTXJlKF zn1Uv8Z~)*tdFXtxQ?;$C)mx}=SoElqsP6+|#sgU0NJIjA#}$|*o6zc7Mcr8Z zNPFCLuTPr9#z}sTn7*7G`tcsQ2n$ESBX6v>X;7-!NZmc3n}kHx<)f<>BXuSc#>*IH zY0dkVff5s=QSFd?wQprwxaA_y+hED{yi!)1&}H^$6OD?MLaSb){}L>TzFlm>tX@+@ zOH(a8HQx8ZrhivlKZ$1vcNse>tOHr+R*sIm$TpP-EWQPV)P}icx&ocpT!#p6SCdb- z&%k@DUIHdD{rH1GgmCohsmc(myL(@Wx0<<1x%b9TuF&7H`caD6#PT9`vy zX?fL8tywLg+nm|2EWbEavR2w>;MJFwgUz0Z17*`^{-z%}lJ&wQd`9;j)qxxWL3dDe zFN5n_#U@Eov2gF!CW+0yIbo^!zN!DZ15LtM~tBc?|u~^8hdi&6_{Q+=k{o-tlO}nR2XgOgx5If_! zA3!+F>G7;k5(Bdq`N3kY4FHa}4|8}X1SJwW;VF4N@ZM^jlTEy>?eEs5%OR~uF9rS) z!3X*YMT@n=bBmXBKN9Ju%Tf6N(Ng{$R;JFQ{uoj( zn};<$e~ZyS!5lCKB+rZZZzZuvet!5v-agV$PW%BB+>NUg-QE80*6Y?kc8$TXi`EL# z9^!+bjUA&0QsnoK&pXU}bBt{sFWga+{2~Uy70>Tzo=lU@xk&fE#o|m~E0%mZDie^l zMRN)yM$wBks}@rP9+%SCjJS2wLdEUm5f{^-VkL4ZGNul!FcJ&d=~P?5=vhUu4y{V9 zl%RW&eFwpmZL7t9VBlWuyPm)&j9>rv`WIE(K|inN%0f)bDO@95%?PLU?d?#(bqdb* zS1>&M-9ASX}6WFR~~A-JY)#HY~5Xn1AG*GEh_9*@n^w5J?y;$=Qb0{C(0E{rk!j< zF9J49PaX`)WZT(;A)!reg8kLpD32O|lPznzn49`fnKBE~={y91=jr^n_S@1eDr^(ipV@CD=QEf~etXKjTR3JuyUs zpHqyv&o|PSR!_lMoa;(Du#B{8ymWctTJZOfSl+^RobS=^o{qytjPHoU?s$>MQe6}g zt`rZ>$HB6_EU&NeJ>*^+1(nPik!Vg0fPA{K;pMHo1>rwz(x;K%S@wlj{J#=G{rSe7D$A@`i<91c==*Cw zi|#E{n-pde+9Cl-^biWh0htwFHoRz)sSV^g!ox|C<5r;a5O(d>_AsXw(7x7k4eck70S`+{ETUh6wE@bLnelp5^_f$vF z*A^_V-s|KZ4qN9gXJne~JAjM^J6G0AmDG)-XM73_U?lRT;#7fNr+{$f>*)o94&Rxk zCgS;ft9@@r;i02;Fh_KE)Yv#Wzoe~3Ng^l))B^=58x^r?B}VpQLxI&|j^s_ z(!Z$cdk@cEpC-FUjDZGOqM2m zYiW2-Z$w{j*0W()pzde)kLTRpg*2M_ai4YcX6#E_Z*Xno+pmh4D8fli@ZqPH=@~kDM6RE?CsD=l*xN}+Xi+$m*75T4gS`6XqhR+jFI=78{ zj3&PKrr$w_atK&$b`i#n7LF%q7a0w}T5~L*Ifu%gZ{rF!-={I5)kLxml@~HOx}#=f zS6j38{ho*i=KkUFBaENQUY!r&G_lv2h1lN;)?yCaxl530`dKV-r z3#Ww@i-M4qd1jt@L!C@4&Xk)8XLvqn@wJu+T(7p+Kf-z-?F|0GbL7gAJjnl3hQd@I zJB0NYWN?>N07>8ACT@zG=p3>^vYWyQnJ>GKq(7ShgS9Jbg#IlP$kqA&*shU7uYylt zU_hLmz=+)oyggMhRCJ7Y6k(Or>x_WUW!uZlGt|Af?!Vo+`x;lTvfJ7?Mc2`eldXY|Ruj zOoJx2ls;2K#Cs~o^BE%W`ZDW{`>SdCdp~jqN5ilp@8i!BL^*DR@T>l1jXG>TjX%QQ z2=S&nt}tcZh(-_fdb%XsBsMI~&5gp@%W&HKz9?;>rLhGTxZG_8OC)T_4UK@b~UDRWnM)JjX8ekw?)F zJsLGR2KHi_U)y%7H+L=f0Yk;0Y{j@7cWhDzyRgx&)!eAFCV9iDAyqL=dcKxaIkd@J z$&B)h;V@Rkpffe3a=e$7BR`@XLIqTmw-Ugi3Q z{Dbw~WYYlC#ulXrGdjy5E&Ufhqqq%=60g`^$eO%R!S8@p-KHW%jVgti8Or)PAISPq zO7nj_nlN7-*O+48OK3d5rHxNE5&c#piGH$YN^W z^}{q_T+3@Ch^NsN#Zbx3-=tfOci+|KS#aR5`XE@I)f3`caCymA{Mh`1Wqu8nd{&zq z##_wAEceP*rCw7$Wj4^9{ZwLs=vl(Pbdy7(X+L*UlvJ6?suI&1$$3eKreL2MRj4Y7 zviky~#aMz>uQ@~RDa`)J%G`vrLEX0(d|Mx8(F^)9 z`8e#rRP2lBQdSg>3?B?G-*Rxt{ z%ShU)QGxGR8KlvK8nUK7-vx}iVE39_I_`FRk4=sYuE3G?X$tjmD|+9bWo*HWckClmHs7dbVAc z;VkWNGIsG0j-Q!fM-YvMkBt^eX@MMRE^yz|+o*hty$(WneUv%$-f2##HvGJxQt5ox zFwI}lG+)rcxLnY|r5j#V$3xL5hKe%jH~MjhVZZH9NhjhFr7tkk^1kw)O<^D@htus= zoZ~byC=QP1cPd_ex0~rW)~#S+;jt4BTH^m&r$tMsl*c>+cWJ88(uS*&CAmh1VT39{ zHWHG(0Z!yD+0}hIF}z*^p3cesD%9#qzOW()|Iiy24 zTT!{G&auX1W$-efb2!E;7(yYq^1hRK<*ugS8@Z@ z*qF!f4u%3P6zBao*b?b4+e-Nko*DbS$XaHv+BG{oPu6c{euoH~kBfmG0_uydg^11OCgu^d}=)LfR=?XX#di@sF-&Qy4$>0GPV+$8m zSKtXpMpn`07sYaX(X4j?FW_vi$zDz(dWYSw}MV*nzL*I{mPVZ`scr z4S4tq8d5rpfgjfbg`!UI7@a{pt~vx-ekBql^ZLBbr~Dx z+N$h3*gM|zxoX9b+nu|sGGc`ier=S4@TH^?nt`InGG8rKe2L%ri|AHj;GbQ5v50pB zLd1k?zsNp*dmOp%7t=0X$MvxQm0~|CeFeK}b9iVS0*#b#i*(EF%_*u5t^xE^a%Vl0 z*IDDqcq5r-{6CW=#SqjVw#ql;R-lvq!TXQ^HGa zDk;6Ga=?#irHc^#^zCEBs^QfLc+pw~tMmu4N`aZTHIc^ z8QRAfF0@X}L;OJA1E+;2>f+A$kWXxbYgkJKr_=;ltNeReUb6Ph#Yl03ob~HB^XWjRkdi1ohjSc(B*0jOgUmUgRKkWHc=+-z5P|U_oz|O zM6boF#<0Nb3BLz!gzO}kk7Mt9}+c0du(J! zRkwdLKKoiGWbm6G7yVo#4ZoZz$5Ztvbg}G_OYUJ6gli2#@T(ZgA z{^|q1;^r2sp0e!`ST3ruEYarrOSDr%isl*Mo%b1v|2RDm4_mA9mx&XK$tg4M zmUxa=rTPWy82#aEhglQ_o$tklNuM&T=3XnifP8$ji=VsMD+j(K)`Mx9Lt>HWwNT?D zg-4vIZ0Ki9nG=h0#p5$he|H1SK`RA3WC~)^-l~#&RwLb}#pRY+==jQAhi*mW{l+=;(D57D*+R(BUnnCb{@tm9=}AqZ>feBv3lyczBX zY>oE_m#DK=-?XxvQGG6op-Khjk>V?z5aJD{=n%tvh2fm>?p&Gqmn*6njEe^|nbTZ1kiFcA zuLP(c#yXXBsIxA_QrP9+ld-%@m-TiF`uW_98om-IQ!x@S5?)!oy*Y|j^>S49PGk<* z?zK>P&zjQXxuG50;Q={I#^*Q93X=_FxGC-vy${n2w#R6%yB*-^ODTYu}} ztnUIop2M{8TlaI_IPG{;IU_ zQk(Z2aB14@Rlw+XD?cWA@A~(Av&rh-yQi7Fp5$iaY<8aggPj?YtXT9u?hH0ha{NQs zYXFu{PW77uHS_~5sZsd77B~G}kF6F^vCDhC)#amt$B(ygvBD-UZ*V{;4NN|7zl-Yq z{};A@N?nZI{Uc62)AVRqX;P>O2nj?Ul`pMcbi$Fj&_9C(YBL>F@aJeP!L4s8s$1(O z7xDsmnWj;4rm)$w;h@NiC!e~=_9DE=Bw8uzXV!mjkidD75%Q?*f~?S zGe*6?pWHyRjy|ys6HRU~Jq?3CJGy)`uvC|1B9Y`?iK@YrJm41SY$^RkZeE@>SaaZ? z9eY9WrDLRDS9tP>gUV7Syjo>MRK`mHfG)={c2fI^;S<8B8XzJ|3wG z%I^7g|L2cs{x8HIWE9pYUirm56OLq++4XRdZ^k;mH z2am;GPw*RW@*97%iK}|ZNFUXf^#uPo8i>iR1YiZTSW!|{GqSx6VP}P+(YOo4VSO0V zCBzrb{rk}>9=|KPuoGQccW-(>Uok?Kxu)FakSf_4G3rLxA2^XBMuPl~E_k%pB-xIA z9i^W4mBD#>`@2c@1Fbq(Z16MW{ZPGhiLST1zIax15Uv_-fVUWmPdA%X%ks_9L|;5N zzF-1NUbP;Al2BBdRMXZ%0T(g(_mGS{I%?e_SQ5MNqUuUX@)g_h-Cy2tS~M}wWUQj5 zM&#>LtVmC!T;d|mUCnL3$b&#Di3SonsNpfUJHY?M{#7_SZ!le!#hvdZcA$lsZ$a`9kz0S>?J7gukflhu5{U z`9+XoxrAP56acW(QDtMwTTz#&_Vg%7=jmVJ$~lh*&%SyI8{p)OG8st{J4G~GPqT})Vva-R2A*RgL30<2l{Ma`OBi2T9=G#&8<4VSDOC`5;FCbdQKypz+ z04HLa>qW!km7XNG24f|qSYL(I<1+2Ou$@$p^Wh)Fbyk#|os`fCtwXIvVudpBFW`0# z@eR;f$_-LCg{YQKzw1@GKuI%X6s~FZLQ;nM_Aqa3P4u+(y;(uAI=ym)Wwpi0Um$yH zts1g47ha~xIP|oZkiy?J5WWyaMaXa5aAC^fw3(AAGQs74wn)h06km2AlD6B&7yuM#S`D5F-xNO49_u~CUL zDre*EZ+B^GCz#K`XQLx(a})W21CJkmp~>MrAj4Pw2uOLXwywm9B`30>>KrI)cDkHw zsK%ew!$e`P8Q9~XzDX{Lh4~Bf=WXN>&)Yov@}Dx!ELllPyd3a3&u{t^%eEYPsd0%I zJQY1(W*j!wUM@H|Q&aY)+S9rFNSsP_ik^hSHd2q%HsX|e?C<$*-rLLgF7}3#zZ(86 zr`jf6;})sHw+^|KMfDK)_QsI1(&ecasfSO`FUx-{?-K~08a|<`{_s5YFvCKrYxjX+ zx6D<@N+&{LizkYuJw%_wPi>fMm{{#iK0DRl%;f2s>0#90$?R-sz78woCoH8UYbqNm z4k1a3^`ZMeIqzQI)_=TT3i zsc{fARQXYUebQd~M+?^#&3$vEXRuPN=Y;QY;LSPW+)rSQIH7Nz%^SF{r0G^zypB zFw_!C?XKEfSw0;$JLA7m>%b(34BUR-2(b17YUxLQULeYCEM@<@%su*#qZii#^+qgV zBPx~sxJj#mgrU9tHsAD-j0^WuEt70fshcaTLgf7)qg!!>4f~G11EIkT>h7KKyP){l zA8@&wiWd*GWXYV*lS`v+-VXo!T}2`~Pn7cbPt_pd++>2V|EG86Omm(ZUO28R&En+! zHo>7%gwihd&>f_~HcA%e(iiYV@3_i51j>Eir%Y}kcK>yP)*+g4n`ne~oJWL9u427G zox6=}x#ic2W-x9aIY2i9sE=g`l!0sF%Je_g>fe$DevF6;8`fUnE{iMXLWtKYxS~bf z*rc&sfB4`^&3WO9AHHPVwbw8gSx;EQmH0qD7<9dwXk$xk077>4-R?TkQ`2M$E{hdn zidE;-WG4t(WscU*)#9%kC|c}%svb4qfAF|DIhW``sd7E|H-9x(JkluUL%m=2G)FcR zFr`c=cgD}$;jYc@cMHV$-stpsmdY=7AoqH;Xp%^)(;*)7+i?-bDUP*pQ^OF?g)1`I z^ZVDvjtszdB!9HUbk>kYXG{B0uwh&3bWfH;Ie75~6%4qp z%a>>3%}^_ipz;mfo?V6ryu~$mO&=A5+)8#+islV zw5)dW$pQS_&k7Vt{&)|t7?D&HjCGdG{F3yuLX)pu+?JgT@MEUkbp7h8>&n_}^;=wE z9P@M48}YNiX(Qzv3p3DVWqAall*{9uim4nckpU?+Oc9 z37f(V*_W1083-i28?|=RS>0Kg7abrJb%3{|WWPAx(eM*fk+@A9S<-u%JQ+o^WBkhZ zo^I`J`7OJVD^#J$V*vzd+Nu{@r3tS40JC1BvVrju*DnFp&zlh*G=n!$QD=NLCb(}O z<4lRtJY#=YQ(u4azP37?7Z@(E`XELKHkg1JozX@%lv@SMeHhO@LW4i;<`z#%%wEKWAj3R&Nr)zmgzlyJ0SQ5f@i}wMwR4)a+FG#nrG^KN{e8o+ zs-iYyF9-{~4M$!Gmjj1wj@}JhLqv%shR72^YA=L>szUprIaY>Tpm$3>qilO2+>q;_ z_XXbDpli{nh`r*#FTxcgwfYra+LEQL;l(B%4DeN6Al2&eEDaJf{3jdwxN~*$cER^r z6{pkW`YiqK>7we)Wj{L86&6Oi`nmoUZIY-6{M*cvx&t#@^cLHbn}!b`F4*n+)L~-N z8mqQ{?z4o0VxsN4AR=`f|6K-B(veUFSqV46HKNShH(puw038%MN&`D1^iMuD0m84 zXgKQtm6Tg_l511(v(l#drZAdbb^9#B>HY@xg+VOrg^C}iNb%KR(BF?)HX<2?++Z_x z`olD>G)Y`p0xd2-A;A!EPd)xTko$mX{=D%mKW@fSDVIbqBDq)jV%;<;pXK>ZZSu`I4?(g^2Zk(j_)y?F@%6t%tZ!A8(E_gABK z!c$SzOa2lpqaL$EyuoQIoQ?ePfTkOEgd;?)f*qpX!kqEJ%U;Rz_cn(FcA>E;?p@6R ztYe&EWPxbg6IoSgq_{EKumkzy@P{Nn#in^Dzd3^#=I4RNh(43IND-74b=HDuB}nVP z>U58{@@lHEvVJXogYq60tJ-)?dT2~G9E|o{O$J)%*J2~N@wDK9cZeg>H0Pa|nrOR? zc0iot_VkR-UefG&koMl+X67oq)A(#?Kk>2=JWGK)n8Mn=z(y{Ek=kfOq%C>Dafd(= z8uzN$W_UbxQ$ADCb~5)8Z6RYRDjc6z4evv^=(pM}@!4&uh?`yE&)wm&+21g^k}%WP z7{D7ktC8HUixt?QBJ`3`6x71Dd6@v1S1xhAAn^)L49 zK+%5k4%+*yu04`b-RVrY(Ab-P%>ANoLdNOm%9%X(!P(SR%48Af91*MVy3-jLiF3J% zk(IaH#b%cTPKJq2R!mJhRCXqre9ec{;@Kh?HJ<6$PK0yb*DpN3e}Er#CV`@cnBZ8j zJxEOl({bi>@D1Fn!aPp3Q5u2gJXSq^8_3d&`vGR2QtHDb@}{}|`&2da1i!^<-f6OZ z@A_wqw2Mv!PwLpbwR-;FU)#9Xt4YryYZciva%`h0^(#US585qDoXN(^!y=bw&C(nx zDJf7eULRunNta-v!ir<0U5E8!5qm70e5cZV>AhD`8?I58*caV)s9!!d7OPCjR`iw} z!#H!TxQNC7V(YD=qHwpie>$Z>x)BfsM5JNpQej8|DFqP_kOqmNYv>fEhVD?hLlF>= zhM~Jty5YU~o^zhx^ZwrR2Wt(iCC)hGz3*%9&vos5k%5~TBhR;J&gcV<8P~U#&}gYV zc&pDYKZqpDuLzrAJpk7_H@>tUfrMxk^%~IG##2E4FxQdDqC*{daLPkX(W~8`?|SWr zJOAnG)s$x8t)0Pl=ciFe*%!p834h)Ev-4!GLwqcOR#K0)jqk+j$;T0{Q%CHU=^Y$4 zfF@R`de}i0M56kI=J6u%4s%bEou0y9Ni^O{jP9dT<33!qm1NOq23al(6ILiOOr&Ir)S0!hR(`uYxC8$)Y+wL-N6cF!Q>Vo!NNob@^KhOq+^lVA$X6{I7 zz%xjjKJ_57ULP-GtKDW&@HhzISNyc8*@>f^pY{%P?P7zUZw>i3Iu{u0wkaMZh)}!J#7atytxHSpITOS2z2rV6!ym}%qLHlxc zfq)~g`LwM*lL5o~VnWiGRqut8zQAuUP}DBp{WeHd0v(5hh>H=RHE z7~%&XN{jgXeS^Rru1&FOwkb{?w3I1xpxEvOy#cx>&<@J`S>$ zf7&-`#*MSp9|bkf;S6V>EpRDZ_&xe!h`$!2D9z$sn-7)slxY#TD@Q{+e+8N=(k*6Aw6p)+veWWhjJs0U@blXY8=)S@ z;+euP5UzEYtxR=x_SQO~v?0k(Ix@D{ZBKa!Bi+zzwd<9Jh|(;j$!#g;4dZWba@VuP zDJ!_twWa0#Vx~VQ&QqLbm6lJ@MFq2`cwd)q?x>2mrPMY7yc8r;_h6&P)vi)>3=`&h z&|=;beTscwD;zPdSa!ku^Uue->pdpCYm@ec-ri*S-=(Ttne%T|IK`ev3X=1%vuR5 z`xP6N!H2MG^7o90V0y3U5LqYq1SlFRPSuau*Sf@{;*74@8QOWOslkvFc{?t>Tc@BB zVPdY`+DGE!MK;!UU>i_|lcRSTr|Tb(sYSE-_B(yK@4(%<{>aH7aUV50 z-|h}=`{`0aX-K6<+&`+0h!z@TU6-TRP^f1*uc15rwLpuU&Wo;+lrphlygCuyB!={O z;X5lu0CTTMTKNrL$&5p1(DX@BC-%BJ*DE#*Cf-lp~+8qwGof zKj&bgx@n6q~VImOohirf$%#kj?X>qQbaBRe1Gb zllnEy@fwTdf{@#w70Lz@uCFR=SCMN#n~p-pgrG3zO`b#0S4IJW;t0#K7P8bCK|j4c9797n?Gjn*IeSwh zu%+>{xpVKl0j73ZY`pPEsucD(Mt$F!o|+<>(-Pr%pxn*lFt`GOKDK4(Rit6Fk@4n1 zY@atSR#1`(;k;s(oE<6#aY-)oBhj;9cQe zGmz*aEWE;?MQv`7(!k@v%rWbiUv=Z*4?K8EyP(DbUS^80*9UPy5Go?;MKV@$<&nIg z9R0XfM`KRfV|aF&$Iqy3an@S98Vi+62GqWEKV#C!0ZjrSlPx+XfYKN(o|EgMxlKXfU;E|ShFwL+k(2XR9p zqY#UHZYkt{p(w0XO>AFISX^!1mheuJ!9}lm+?*c)G;V}tdTO@N&8xF53o((yb~gQy z?cyFz&WTAStAYeq(Vpm+fOKiohDbVcRYtLVuV3)lH|EB+!V&|8db?GAsQ{x$%_G9g z>*K=bQ2b;ic3rDu6R1)3ic=2&6-$i^BZ0H^M>(^0$b|5dcbLOMx(g$6S5f+n8Amo} zGvu*pyS29wbth?Hvh=GIYMvPQG;L^d#AnEEHGXJv8UBD%NBP^55@};O=+#Xk21|8` z{D1WP)4n?)TO2+V6U~zN&d|ax0i)l6JNI3fi@k$GO9|Rl)W7gfXmQjo=&ehAFolEr zT(XdT2^@M>JXep~H5H3$FOCkR&_G|hlC4bl&n5B2;mIniFjWk-1CR?S(c_tAJ@@r2 zU<7QU5tgs2+V$>!*y_eqOz1b-29au-oEYP$+=pXNR2$*#<6dwr(`L&wOLzbDXqHY> zP3UG;Btt~kUodKrnt=B4n>IhiZBU91K-!QXOWCH%*xZ*hjO~0naUVZbVI@OC%0_6u z?57ib?bGfI8T!_#{zszw8^ch^8GuOm2oII_>CP3F7WDV=5fy~H24pc>zw-OwDB>!7 z$@BJq`fwOvowng#*Yi@={u+vN4RdW=oyh^N3h2+7uIMI;;lF7CE>*z*w;?`BTR!W!%JJ)4| z-J~6@-{$EYdEITES^&;8Qn0@KJI?A%2LB>)$=J(o7wnW6rb=|~BTimCjP&hK_L=50 zORjFFGn@$=NUfbbwBQik zQB*AA(;X$!<5=ohQw~IrWM(=>p^ma zvRpAg?fyvUGD5cU{c1l`{+Ztku<*BnJ4j3XaGt$jwA-oUoI%BlATXi5|AF@hUs^+l ztyIUyYJxQ{2(3GpM_+53HD#;7sn`?-0@`x9+W@NVH;-^m7T0HtAK|Rti3x zH;fAmMk13D0q{YPTrunDa!9EHLVXeK!hW6avmgs~NmAI?vEYU-iKS-M(0FsN7U#Rq z_L{o4Fz@{9Of(TE#j<_fvggJ=dte8#P06Y=OP-Bcipz<21NY%1$vLtb^wb>sjyYXx z+O?!`tU<7~d(^I_X~`{W+KbEE`_&vnv?#l&_Io;GXsw@omMY}DFbkhxX`%ewuPI%R ztmUa?ka`_`6;PjP$cDk`QT&Gf!}zIg-c@R7e!{5+3IyBP;2WZGUtz!BDdCOytkBDTwt;6_|Ms*H{1p6 zSs!VZ++`%+=M{ER0Bx@CQdi?4y!MN|-PM}!&!({FJ^Js6h8j*)l9kg61fu7zyS5e2 z?!8$3rDf;-8BCtp)1+}Xq!mwU%*|)g7XELHcYjo6kyXQSNh*+sF^rvH|0lBuQ<9i z)OhywRXkeVwKL9lZm{?@ZIky(vX%f2B?U#Y98DcjISbpV`IfVu{C^>O{~{Uw$c}Vq z-Jcfj1xXnfP-cjL7uYcps*rp(a(2+a@3zI9*z}Enl`?hmn^SOXp_!Oo!VA}(JEB3s zW3vx@3f zl6tK=ikGimXB=60QXY($(fpO{tJxf))X(Sz{jz0(_oasc!$OOPDrYlnww#U)oslO; zCP)rtkCty1PZv&f`a}{2)6{~j^>o?eBh2LVDhAVDfuNwFi{-TIevb^~{9#-}e7Jr! z+1B$+3B!{yK^V>KcoJLrtZYl<2^(NLfG|Q7(gz&LtqV@F1)j%7IQ!A2o#Zyqi5C7; zSd%7?R`g6ta@JkV`0b@*3_F$2D!|xKAVEZL{(LW$(i1=26-0RNA8!1LQ*KhfszsFe z)pgXxkDpJSzY*1@NJYE6@caQ|hAfByc5jr>L(1s(r|V*P1h^n5<=iq~ONT%KFYy>2 zwfH4MT(_&G=yt)2VZWf^276g#As?djck-r~XdwnjqZ%d%>c!5t!qU`8{=WT4HJDH8 zTSro@qi>4aFY}#7ye=B@`J{THR55#Q)kvi( zLo9MOiHT+6jf%}cl>9?mx&`H9%Tccx)RqL7S>5HECe!WcHLm0k@9 z7WAjN=sei3%{ny`qd#E3_F*GUqz{UZ+<4lY)pTXStCA_p#cSUNqn^_#Gin<8c#|2% z0$G?qGDU$FEHyFWZrS*#MKX1(VOQt7Y^T{3_VFqu-p;kKXb#d%w&z5X3ahr+~5e}9mg*dC|O)Rr3!z?(4FQ>hF-l(H0;3ItaY>jFIiF=5s7NhH<#}L|Acxy zw1hq%%7YWG-|Ttr*>E1l69sI|w+j<8jncCgu1_bUdxex93=!|f-P;a*9CBslK^)!n z)@9;24d2FOOmlY}B}65}rOWZ;mHSUCjuaSefe~+o&3McC?Y^Yh?%iB7N5u}hCxR~X zTKdM2MCq^hyE%MkhN_}$3%~Pg%aM(pPqS=3>cjhIWmysnuNCQ0H+{r2`AaS19IaQ+ zMr^bw*VEV~P(|xmOAlFUzY~t8l#PuRuc4XNR7O=WE*Kek^NjHBC;P$9lBKT8rf+t- z!p10acmsy0JyeIX70g?(4pu$$2s8SWEQIkMIyb#xqxHG=$AB-K5g0RQAFpRc-A|o< z`Qu&(adS9Vlw5FQxMHF5VeQFM+L5`>JMS3;D)TP~9t~BJkjLE<#o(P_`jmy;fLN)i(!7Qh8bxY9H9=(cqpdcOV%*G1fky6Y zwQFuMetIGc!(YHfddBzxBZLA@R-aNfN47@Ir_#vq6R>{Fz?QN?@f`@tZ;^pm@Xtiv zFb}3h=h51iC_|M*)&_$_8L9AE=M$QTFusmS!shQ8gYlh+K)1yK7_4|KF2gxCi_hyTK*^Q?L2MbS@SbZ@${!mqY zGp=-atGtz+7ZkQgu0E^Ogn0K4kcVw2cEI;=wFkJgOQSBxbe1lASbhJ+I1F~T|HC+x zJP(h=T1*&}(m#J`+*8MoUShuJn)j=4vM1?^J4YpJ@%laHYiQ`JD!Tsi@8N?E@m1np z^GBiWUVm0>JQN>Io}QVV|CnJ}>ziA-aeVEP!nc{Rla~UUb76xB5GFTOu|P6P1J5e6 zzdzZ3_`+*4)9Jt9cwM>Np)XBk1&gK!)5!NN*8>9G2Gdljk163NY=hx|8hBbC!#}C1 z{KPTZe7jo~u;V0Y7YUu8WDGf;JlD{(`GAte?k1b+Ut;H;&ygZ(rDpj4lirh^NBFMV zZa=@$*cysj2WqULl8I+515tFbWdUs)k+U^ieSfu6@=92MdTxgAV5l^tNk{jY+hvn; zl!w3J{VZ)a|5RAdrUtCruP5qJ(Uy3qdI{A`ccC)9+Uo|HObNaVZRKxPHN!v3cEjr{ zvLu=+xVNH?yDr4b7au8B0;=2ss<)`=RmouzN51+(5Q+Qo(`53V191*vE`6UI4_FR~ z4cEjcMtrO$O56S!qY2P(rz{{o*dfeK0O;hGB0qhY(CLFmfXZA>WxQdOuu9#0$D2nq=UQia1c+=6~m#tjemd4bmf6x z>P&*rRh=GI6_%>GChBq=(1b(q)#jJQyHe45Z zi2df@a>ux4?R2#C-yOKhufzxx6$ACYjcW9w-LNl=l}lV2-3EPnFgo zsWWVo4~K#h9_c_n=-8;60lXEFB_8+pB`M7^!CqH?U{`Q7&A5=gN`qR;{@;m}5W*0D zRwl=Xmz)}u-%%a&TzuXGoO{SfyYG_}!^XzVB>>!eJPM^sa%t5m`LPVcoM(~_or1m7%^i6-L3 z5Ec+`pujhOxcsalrj0%*Ibf?C+&Gxbd6CHTO*?%(7O;jq7zSXt_9~#B5zO+;5?nC6 z>=uW?j+fJWY5f9%$TtR#!)@2@%Q4GJ%!N#&HX+rx^J4ba!Mhv#s0AMtuN0JGe74my z7}nc+CD8OZ&=;o(L;gf)O~xO?M+6W>5VO-q5`yE`JY`VQ!Z|KZ!>&>IowsW3#v9Zd z&#E-nNP_3CI92SLq5)gSv26L!52bHmETgLPK9P9AR`ADYUG9ubF@c0zqCc2gyA0R7 zfxm`vl1ohs>}1kO>*P;xyf#xhPVv{uBw$`~*BHB1`szxtpUK$0;c)f-Ttx7jYP<^0 z(c*Zk*Ovyb9(u+Uo6Ocdyki^BF_*KPM5CmtOWi;el-na^Ik2y}C1&$G&46Re3}rht zBjVTnTX4`DRTgD){(x;*4(H1MeGFgsTT_*DN7tZK$3!@fkZfXf(oegRq@u#t(bh#6 zk4uftSTCQ@O^p-Qe)cL^^)z^aA(U;BRUv^FlNSBl*sdCXa3-ZJdW!O{_?%41TpJ&Y zPxovgYscKPRz1uS3WZscB5=pE6l7UUD8qusM2jrFM!$&H2QkutYnte;3?Df{%)&YE z+iSCG8giBUk9GgH43LTMTCvdE;U2VI%c`VwR;`nj8n){mSyJ+Su5Ulc^ln(i&SNOJ zrZQ+aIkro!>2usfE8lu;E4E;5?D<)+>Ncvf-~&`@>Z4B)eT*dKIqn?)UOA8A*MKj0 z*5tlB&6m4HiFmuxdgbqwAEim)?r25#2KDneuyx=tZ_L{sbj6%Kj$yDb>BP;Z!w0D5 zX#ksL6lF2TrugqhG|%_fF~q;Dy!s`K6o!@zklY)%1-rBsH5JWQ2R)g4W}I$d0(tAR z_B@+oWTGUWkzz;r0$W3&XW0|UJwa|p^;?8y-rySF=TN?8iAQ5?HYdy)Z`~1F0DE!L z?8Qp2@6+6Z8y_p3Ip2pVVchcB;(&72-32}+wzcT&pGxvzT$GzST)xz_61CmCt}qx{ z=ka8cB#S}dQlIe4it(o>Sh{i3eFDT4C zWDQwM)Yw}spl3WGTkcR!iCMDehRX!zJQaSwi<;U-oM)M`By!j$$(maTkeXCG4{zF& z9-Khl4rU*pG8*vZ^Jt0+$8Ss4LSP5;YHPUuTbi9I&rOiy3Bl3p@;?%_PZuHKCvq%Q zxNq5ljxBYoe)mje8EJ=;EFxcIzkbj|B*d$V48GVozNoG zp2zKfmOYlzy^H2BH(R#$GMlTrK)B=w!xllRIGr%fX%u$AG|GTmgu9A~k8lwSckr$b zOOAj3k>XK{>vkb`;bZ;kZF})O_i#)d)I|Gc1%|%PCafa?dKfyVxe@A40AW1ZwQrnF zr!2hHS8H~>j82Cd7u|8qDACyKoMAn#Y5j4ey~?Tf3d)~)Gw%l*a8pE*F|Jw5{OfIj z(O^epAuT?+;T}J^Oh${njD*gLEb5%4xkZj7hO^Q}49#!?0q6>*=cKmPR6K&A1t?)} zn}SCMp8! zb6+P+*0USDajwo~AR2%0ls!TGZ!3CB$Kjqr+O8BWA1MYd8In0?sZ_Xn$s^XR_7!7b z_5MOyG+Vj{={YL0Qmj%_tUI0FS)Fon3=817QXN4CiiX)d4O6&^-j9SK%hi`bK3rY2 zWGS3SLaO;|D`1G!`=}Xd>Tj4U?!aBz@IX>zjkdLJ%vC;6_8NZy3rVVnfm}3*vVs%( zpA@0K3)gM-bi?n~anh^#I0JkzEb~eu%-K)(m{u49mQ(Sr_>s3%DwlrY+J9YE344=}rT~{K9ea07jdat`$qUr2l9l*2G zS5cH@5&M!I(RN4$%bv2}slAWwX%LLMiH2J-LI4-_tAC&Ugp@zvQ;^ly!~N9lHmS9D z*WutXswKMAN%OX7EY3$I{Ma-t{cnBR9^br$FP|-J51$!)+k2RPhIzT$0XPn}kweGJ z>YoZEh8hK+2b3HltuU zrutEShWG8|oN=oopS+4w%tmw+ehgj=332Q_$cuN1o*dWI(fs$M%Jxw<`oH-H$SE4i zOdLTrQ(b2_Hv3Z;QykHq6*t1OVA(U#GZ7zj47T_tZ;U^r{bnsiFK0Iw8!G*EZB*$P z!~1`pg<&+G~%KUjVm%+mdn7g?7K0EQqP<#oD;tAJ;Enf zxghABH?US_F>@e8&;;H=Xx!(@vW($7z@hvn79k`W0zC~(oBrtX%T#Py8)9xw>Y0n} z)pS`5v{VY;hgryAVelyj3FjihJD=FU@O7jmUS%5b;RDskc#aE2SV`K*60h;2=UQ@l z&1WkdnZ9Qu`7O@R<0S3%fw^g9Ic$#nkmDmpY1sLa&cbDn$<0`pNdkOd<>nLm(3_FD zr=l7YG!}&~!>#cuQ|XVZQb=&ygP&dMHx726KR9E&W(mL08gvkc8>*~?5r%#4^boqF zq$fU8ODnHGVzRZ_q?}b-efe)d zqWebym#whg5<%|IS-bcDF*Q}o6g(=nTcvsQrLm3nxsbbTL9#vU(a=;=+cN#Eo%`md zz}9TVDQ*}G0(Mh|RAb;()}MWoTSoEPC02XbzVRPF)nl<~JlCT>fC@J6rStXgsgUa4 zZc@4vFr-fBWPg}YWrGvora4IG7fsx?cXz3%2$L>n1}~G`{d6+p)>~k`?v_V^`4*o;^q=eQD*`Dl=GJ= z;O#N_6?*x_c$F4r3n-0ZN`r~q(5xtz5ac}`2VqavYr>9n^?%mWrAK>lP60}-($y3;%;r&%X*1^ zL9lmbltO3EJ?IwQT~AhDmUY;^w4W(ftT9%if4Z^!J8on76L$xiy&skq8>P-Nff(ZM zykGPoT$Xoy`;{+oNLpPi1D#gI+D^e8SU$_j4ed%&5%6i}%?>nqq{qE2*^Cxv842T+ zPF&BjRP)hKs+_d5BBh{O9gP!)kUe8^q1tiFu7n;LVIAXHw(&8XP|>Fws<+$SqE%Lm zA1Rex&ifM?DT;*gut65Sb_EF!0#7rFtmkW@ecWT#6DKGMBAs$?;VZvSLo`P$yRZUN z4D4G^j8VX4I5Dd!h8nz@#Ds0vo|}mc*T6A~+t%}q*kY2^@b#OPZ57%eE5cF<;k2RI z>faD|2F0Yc{Gtv_fiki_$d{=xT6`_(SzR@pz?(7LV^8xm9M8N?tQ^^Z*U1z~R`CEb zf;e}Jtf6G;XDhh?{bxR2b;sK{X21ejaG4% zrOBvK;VeP@?rBn7pm4dNMJoyVj6IYZbMuk=F3ok(UJrb4UKnyw4r?Ac{I#E5WIrRt zK8hW^h#IW3Dd- zTn~j=&%-}Fm2vFKXh`Ok@PjTl;}W8GjZ(>YZ?R9EoP>R{U&GHrt}1LqR_)8w;t*=s zbQL0k4%4f`4+jzCf5oajY%42R39d+C05~-?HsSrWK>_*JpN(QiDaZ{(;nGj#vk~YfVyTFr~V4 z2GRc(54ZS-f4eg`nT&8;y|)D>Ts;QK=y&N~6W~9SJr5(SQ;re3?jyqMJ3C zaOt{(2F;^Xw~+?3)vlG9uqfltywfV1xl$t>q`%7n9DYCY;)roTzQM-&HjrB#JL2DT z-v3IIuole}%(TWC3f9p8l&J74_&xi^ zVRPrSiLY~(^>NbUt&3$N@gA-s6#^=QWQd!Z%|W}g=};%3%sEz+Dns|ds)7d>E~JJw zOF~befA3Q_=Lqu5wOXS3qQvIH@L=;*=vli3RK~NsoTOT-z2q@T1R;aSPNgN@;fkn} zR zRoKVt@`>F&rr?;GcXOUoCH@TQL|ZY>8QBK*Du;uIef`vq`@E9HP9Ao`cT?=5X%@*g zdpGFbB1?pYh3`zas4hWwrdyt1dh@vl@rOafUqP19zvClt3xG_k`L|39J8SpKUwu)U zJTi5$uXieI<~oQa?M}SShfE^t3TyNg(Y#=}$S4+z3Eio3Sn2-dQgvVZRk7~=y|lb6 ziHuuIU|hmP{KBPiV}OrPoTDNRQ?z%Q-8eU;R@Jj7Z!qy<(}YVGDtgZK{uBk22ilkH zR2t|CU0=gueO??*Zbcy!dnkjjs z<#N80aX@8U>BJYTXNEvgz!JAbvIA&d{|Bi|OujkJEM~}cYdgofJeJ$Sg*(?~N;a;j zG=FAr(e+E;cP?87JE< zJ8#;a*;Tb4Gc@P&i7)%LQO1pJhWVP`MV7UM-wKGVa~_Gr_v1D=#b({$@Mhd-e#UFBb4yj0PH zrC6UR!44;g^jyDCGzy&dv4S7re6#%)m2wRN5t=^e$g96Q-W&~=a=>nt;4f{k--tZH zSO$GR`&LDWvp3ck*RO~6P@^M%EAWfmT~9WeY??;4%;n#`qi1nGw$i?>{Vefy+ACG; z{TiA)_j5#Fpu6hsA^mxr_#QD@pa(%3$kSvyXB>Xj99movBh3zYyHwX&KzSC9m~n8j+$B@cuA^!?>z3N*Yj!1nQ93AfDpY1 zx!q1yCPTnThEt)KLvhj}YSS32V76pkmkqR<71i*uk{8!A9u%;BzLVLeA!GWfAk&|) zS(v8ae z0`0NC+#|H->Ru{dXtfL`6UvKO1nth~Hm^~)LRtloYSS&N0xhf=iSHgpp0Yvr14&6o zi3fme^4Hhb-`ZI`3K73p&pK4+5T|V<_<}KgPim(kW&mY3Yb#%`R`Nbhg)vGNisS+J z)?=Sb(0|8XV(34^LgOhfFf=EnASkfn#jq=>LeY8mY!o^IGRB^l5(Jt!3zdF^vzR@S z^VC?*Q@}Sx#T5at-P?tJB~O5j$bz%{efaCz>q;=ld8d{251JrE>?#NQFy|fQebaVl z4w@7%JnqtE^0IDE6#ibfVk20w-$DOttq(zIV6l4N6@Oup4g`)K({f zFo-k5x!lmtkjFZA#-#9%zc_VHGp0}P8Q1m~FNB>~(=^v2(bpir5Hm&whidj!XF)P} zC@0(V9-mvDcyn6GB7JX-dMbc)l-s1l?DJ=(6ew3M*XMZ@?XG(@}$dZUj2Ri7i zQ2;!;JIUD~%5qt6kRNMjO$Ww%XN?s-HrEaBKc|27s%DY1h}{t=mDG2m&c_urLl4r_ z3VX?RX*BNlr7V=ZK$v1`uDp7pw}H#vId6Lx`0#iau}6@@^JC8NW8kn3fF+K>;Av1l zv3>&V88E5j@DvIJuwAd`kmVlHeHEU%rO}17`j-XqzGmOEB-|8uC4Xp6xhYvXUr5C^ zs}kg#+&QUmOywSrC4j+L%K_NKk@?-OlB4?PdpY;aC$^>N3eG5IwtZ#DbH-Bxu*ie1 z@78CFiDv$7xG?HGgy@69v;`RgMRb{*4Z@sy59l9Y^=tikS6^sZAgGH}-Ts=QpXVo? zi9za(f*{jfIZ239Ep;TEXMyZLp(${|Ld6r=a(?0I$8-423+S9P$mDQ)9!RD%<4FT3 zg_0ZR1UG=n6*5)FUU+KsF|NB#7Q7g(`Ek(!xv_=(bRm4w&M|_i0sD(@v4$fsJ8@i; z${HQoOjbzrjo(`J4z^nZuw4e7(DwIRY*xrM8B2tLob&|2zp{uxAdx|zU9q{jvHU9s zde7#Pt~uJp;Z+q+jq8CiN+8VaNUjT9w}We4NNCgZoMy>P(4~R}>^}xT!e%hLQsB?} z_vv6|`Lk!%dy$58TAXPfOHmV!CNOvxMy59To49^#0 zHeQK`BHz?ON4{yio(^5x`@uMSoghtU`YB$>wBU7fM%q&E&!G7c4w;Sk@|AtP6!X!u zzIt`l0o56_04?kRg_!Gmk-V_VrhXa@MG*L;iab}qe& z&s&!Pl?JS|htQtCW!w4Q1>ykTdbT#*$xEk=A<3n$!_f$_=-E(nsNANLg(TygeFWz+ zc{-ZS5)JEi`O#0R=u-`b?DAJj4D_Y=qMK+u4guv=_!0PcXWN?|oT0lFs_7zOXrL4x z4${+|e=g^2h`MOMM%nyE!)Vu{e-KxWnxRv^8mx+|>~|4(aX%IV+3T}ihXQ(dmnQg` z*CWm5+(#u|H&^FzKo9^Ep?CBB{tnX$M`8{72UzD_tg|f6F`Fpg@lmN6)i{FDGWEeH zBZv6Gc5}_6t(Skq&WfEMnWqc{aQMwl%vt?#{CIuWjRNDj3ncHkv^%+mjepjz_S}7w zO|a6^tHh8%KCb0zg%^x`R8iUd@Y8l!_)sWOHRhC@VXS4WmdQ^Lcjh6b5t4@R^0{7n z>VnAm4tMkG`Lx~P4}In{nq~I=B9Mj?Q?0o!`Z7mfllxWBH5mzBAx195%(11+#+RXo zWBw&kCQz=XMTUD2M}rYZERCT95UAlV&Lg?|ConVSZK{^X&&oL0)&t?#F{~Q0bfS-;A)q zr_Vu}ouRFcbJTBiB5^z3G$>lshv8{X`)~%XWqQy18nmrlsnb@bm0YoVA}%@n8o$!?KHbux#XWSQ`1Q)BWcy3*Xn30gyv*ch-07EodAB=? zc5Na7Zdjp?m^^*co;5)Mzy2pVK}m`4_KKB?+Onf-jO;z;{S@+t&?DP}ngn)s2?-7I z!jJ=Z2j@IF*g-=UL>?X90R&9_7fCN|O(rkB-Z>X_Abz|?5~*kjDg)nNyzZRe;{w@3 z2l#S_|x+W-dme~Fv_$Q^gpT3k%KI4!~eJdh9A z_qH<6D^a{^^!q5Uwd^8U7G+GYrp9r%>MP(#x*2`skq~)tnRe$l4L{K$?WJ2TFmwyy zND=v=nJn5twkewNY})?0CG3NgCFjz^5`B^U%8$Qz|6aaLd-J}QjY_c9y)>_K@S3kYV;OH-d)YmuNhT3HA zm%=ib_G1EwmR*`*=O;aX4!r4i3ao@;e-wuq&8labMtGa+GeZb^Kt=<*BgkmT<{l-i zhdmRte0yUM9CqTXU8Bk_Znv0xo2!!iDjMYDrGQksJ5Q4E*Lkty6U`kI6bo~3(;=>< z8;HEEMF2LB-(1yzrZ#waiWHGzJ8U*n;QwPpuH@7N*;rEu3-!@Ak~01QXJGTr7Cp7bhxmO%Z*$r z2nu4sBSHLa5`M`k+zDBE*5_B z?jFJDr?G)V*U>TD?Hi3%RaJ^9ecyvT$*xtz3Rs$m=RFOh`YTb3VuqNFSn8NorXQ+? zchz{Ii%6Ly_9D(y#TFlSIvVuQb=PNV<|ipSDnnJ1A0v4jC*OBnoQ~?Wln5hcxV0eK z&G;J>J-r7@73@MNrF;x;t|^>KYqku@wgyzesjPK`U+|&@g%qz(u_4s(c53dX8rSV{ z{W2*6rIfpaO9CCZTFF=-;MqNhPHfok{rySsv@yD?$D56d=n0`sn+1`nogsYggQ81o z6;IG?TFAkR%LPZHXToC7q(f*yNn$;0x zVzLt0t@>7am%!xF;s~8ibe0@@B;$o<@u<#PI-T6qm73|2=j`#ael_b5pA?R$&UNgJw4n_4tG6zjF+ijFx!jy533|e zBl~#bD2*G;v_hhDWv2$EQro$bds#2@VE(oB-yH!?`M9^KR2+pVzrt2~dy= zqLXAyFzN#0R8;!6_;$b|RMug-Np^a${6Mnya}#BD`Nv#HAtb_Ml40+ob#H!QQDTLX$S^v}v zGsA*&w9{W{7zan)Z$0WJaVN%HlE^ka^8P3YBUcIu3VQnXrT<*^G9KazpAMaL!k8s9 z=DMz;+@teTeZt9nDp{F$6;T3OBkNi)-M0ALZm&exB6S&LwjC_E*7Kv*YaainE_S$T7hhaELv>ShhBeLt z?hbU3s8fqsV&T?ae6jv{i1!&n#@&4>LTGjT7YL~{Y&bz5LH(UmgI(fB&kG-16jn2P@6>GX=Iu<<^VQ~Hx$&P8607CSe^Vm^f;`ISB1F4bCG4kjN(-7Z z`Y!%9g*QpnEPecVEA>5_aXHel_48v51&)2Vn)4!{$d1~C)%Z^HBF2#Ic?BS2FRueq^%4|v6Om85;o)cIjHoqrCvMfpI60&R&> zyxf(|Y?O}oK{n?rl9iTDo;2!x5Gn+pGP$YN_kpW>Uj+eSqXK3iD(bJtZd_c%{XaFFOs#Q`wrA*%0;q^A$F*z``vy5 zX@+)G>;XcfR(Cj*F7Xo++-e60%{l_YfgKxk7S9`WcJv2x^z&MyFYq8e>CAfU#P#or zaA!n?QRw}4K02>v`6mzoXpD*eEq{#TUzS^i$GO9GB&Ub7n~`;3#XYL%He8eSm`c}H zjv?E$p}yXo&2Iy6V>ML$!|Ddnq5fPQ0e%1{9hzNnpI8a+1Rjwyo~RKNrIzLTX(QTN zYvVjtBUeGaQp2EP+k8V0nH0D6`@Kc{dy)2v9iMXaKZNIbJxn&*pxlaD65nkI;a6HQ z<9XgWpkRVzrD&M_$ZzkZ@H)_iBKaOwl!w#nCNyu4nHJ_uVtH~>#9wjd31(w}PRF!! z9DR?msA1rM2nY!|8m%%Qca&^j*#v8muqCiI$c3Oj6Cr)La}P}HtrS>>Rky7rvy<4~ zMkSk=qR)T@VFaUBh86})120Q&u&>l&lcU7bla9ydIiu2CQ-EF+$M$%mI6ZYf^n!PE zS!vu)Cf3L6cN)I)y#jXSbcu1qI|jdxb=%UFIgItWxV3kb;&ibfxz1gW4~cg1i|;v$ z36ojcGivODNKUME0XinpAP5KH!n${9h(8_c_DyY5)9fGC#U~H)T_cab7soWvCKmkc z^CF;6REj!#?D5AZyvJwTIb+sr_ZAqdkdxYKAiTlj=Ym4)yb)Q!Cq_2fDzNqj+z(@vzTu$MIgG&2K((I}#dH9S|m)^u&J- z>jq?rlV9g}QSpA3@+MbSIJ$>S*)qJQCYF&n$i3uGU%Mxj8G=?mX6k0oYul%GJyFVU zqlxBr2nI%b51FPiHS5&oDy|)n=pgw+U^M8%Y-d&YpG|Q*WK!+NDQ<(jwJO$4sSZ4; z4)ZbG)_V2JiWRW;!=Ca0X*x7G*wz&lex^h#)j?$7nBqdhf$FA*#$<}qfj5~lZOY`9 zy!?8!gN?)fy7j4p_*=IJ7i61$YiJ|pvB^sBD4xa>FpKZI*5)=lO8SUGY5fJ`zZ$*Xmn4hRAR@*aWei8H>C_$uOk_}WHY zJ4dXO(iq8sra%3$<%kUYqCH=M^tiy?sH`Ele@Zh%QhVo8NV^Kyd-^5+vG>FrV0JzO z*mB4@DMy?z`EiwpD5LjEeert==x1)PjeXtpoyhzaZP1s(T#PgE9ZNP%fYXAAQmg%$ z1U~P@p9D=Oo^ZsBZT<&~`>^_oB3`qCzlU_kTS2zavWrrL5+tDY#*OC8KN< z&Xa({hjp-MqGcV0v_%QUs?ccqg*;4VX6KA}Gc16Qv~x9`VXv&t7<8SDV-dP@KvC$p zh)GHARDYl9`LFC6j!?Q!N5`#Vv=b|c6O#A5cut16NC2^|-|nomjgBsyRjG0wG&Rud029J>63Rt75wgtm#Ax=&ahN z;G-`|2A>~5RA8=u>PIJR+7`Ra5w}~;P)_Zjt9V_IdBA3$fXUyfJfYk1H*}T_s2%<9 zyuXdve1X{qSbV-kUZj^Q-8Ze|;MfPFpvU{a%bPEhKcB^ycr!}?4Uzl{t9qGaG>0gC zWC4I>84gbud>24=Z)put7Kqm7U}&9=Ub+`Lhk?>u7irtN>>DYJgNjs15hjteOu_ie zUF*7Vc+Ws+!Tp3aO8nrkOE=0VciiUfT0@llw8*C!V>W%Lq91 zM7p-84j-nPB7JZFq4B-_jb!}7KP!z3+YJE@<95O>|5?cJk2r9()&Ixy=@|m;a-V%2 zr*@K<#EUASbHChKM2BT1>4lgidZ)CvSrcw8oo2zBl5;k}DAC~FY&;%!`7!aF<5jjk|OVpHW|PchpP08U6zaRL`iXV zlWOu%#vtyU-LWDg>?o*&R6fpi4(5uP=8Eq0BC~$J4wM7bMY74A$JO-B9N$A?Y~2IS zjzIj4caY0hEW4dwRf6Cqd|gaB&FxJTsSQsAcDF3Vfm@$kc+EyW zT+2hVmREJV7rCyzam%a~#Bzc~+1a!B^^2$R;&sxhJZBdY=*Y|_H zc6vp%M6qf+aI&4^Kd;MLkio?*YNEoJaFv|+vcqLaA{DX{)fq#%?;2x@pK>Ef{k2wE za!i#JSqYdB^?N-FL3K>A_JRgN3`^2x{8QBJGbByaPXqMWRnOp56_{Bev_UFHqq z`Eo8Jv3u49hbW=lOmEZ+z%qexxx^Grc#&E}R+jWPZ-(%}4;wP{=W~okJT)RyM1W}K z^6iGclDY7BmgcBiI=iY}h)grqmhK+C@`o@6ce*fv7fK zYG;}(nHPIXiju2T+DaJ-Ya}`#4iF@k8^|dEJ8z~+k7Ad7zEfZFXPSt@j5*QM?t^wq?D`a3^7$1 zNFt3~t=A0#5Keii{Y#z!Awj?u;8+ctLwnVV*aYF_QShnwyu7~XUt}clWWa@{5vSeF z(jeXYq{}q5K;+%12i^`WU@n>Tup+kis47~f3vn8D2ic`52VI(8st5rP0oZw@=QeK< z-9TaA48~;OH$L6&@PWFd@MmhDGHj~v)AxpBot5HqR`8HlMmSvOomhv%{tIV-{Lwe- zL#+949}W26Q4Elp3{j4AK|t6%F$~$A0P~=A=YSLN(L~nxxeA~=A4l!C4MsBoEc&0V zdV550p!&N+5gTOz+d%$$w^ZO(0I-1f>`62mSXq4scesCdfB6XGkA7(M4`yH&m$}{b zcMeW>i%#5I`*?N{`yBIzg`*HTtG2nx!IVg%?e($C*|U%a*0(&Gm5ald^~cCcO-wq~ z6R5m^yM=u5rkqU0W6IxaZ@9Mm56Wmj^G6q?y(Ah6#NcXp>+*Q^5BP#`Ejn3q6==nC zzGm&<-A@iR?fWf3gE@fe<#&f)IO&yB@t0la)NofhHmkXNV9U_LJD0xB0O8QBKePF` zOhY8?hPJGjBnMUo9jA|w8w}gzV|AcnV+`H+TD=o{)(Y`Ia$0*rZC%R@S>VRM$1lG) z4BqaiOetU~53MYVgk;OY*w^kaioDmb4t4L6SEVi;9`wOu6?xxo0su8Sbfck!Acl*U;;D1_t4q92SsY_F;#+ah7e_W)B z?vQ=l+=xu>t&;3tB&(2R*TBJU7Pf zA2GbQydt5^-C{%Cb_bEz@sVtUjnXThAC($>JPwl7Y%iHCbyuwM{26t3;8E5m{o1a< z*5y+_IXSOC$NtJO=(C~83DTBz{d)X!>jG@KwKwC3J872E@^ieRCivtI+g!@Cq)OW= zq(~&Y)^wkbf%c`#>o@Fytl*Wj?GK<1r0O}E#((yS2otNnJ`MNLO^N0jMZiA9zl zbSoFi>H8?4o~^D>CD)_>E3g3($piYdHH+px%_`evL7s}hG!MS72t+MR&h z`$m2d2kU7m#vVZGUE`j!*Y+gx@5X`81O#({G$vbLPJUt}!hh?kO96&5PL4_yP)i^x zdCQ({Vn$OsUa!x{@OtU4z0%h?!A(l*zDo%iBlji2!Uj@tLW(0HiUEUz1YYx$k|5m& z$e=PJo10{N{f&4Bn->@+(PyC4hN5ct$cp!$dlB@Yl>CZ#=~;QKuw|Y3oJI{lCu~Fk zkr02JD9n;~^Gd+3sSZ+543L2eD;g_$-bSjMLSKv=`Yz3AWqK(=#igw##Pyk3NEMCf z@F7MjRtUdG0F6R`FM(#StJ*+d_pk2KU~5}uCg5C_0Kq8x?s@R!k)!ncL)6w6I? zA4mt7!n8$yi)!u?Zk9cYSkaz=&wmGRww4+h#9_q7wKXrF@aYIj;pp)@?-lgrA8sh} z5YEq!w@|2m;gIi7+xAPp9T#ObA1~DTia7A~Bs#`wvHu$G;#Dsv<8WEq0Zb(kFyM<~ zaw2+!o?{f9=BempTaT=3Cb`+f3H=#lu3`9O+F&l4m$bQ|Q#(B;zs%bGiGAxN*;a}8$)n^$ zO8dT=v2>-}iZ_mx(Pet6rZw)1?QCrPZK#yFpGsR!3c)N)_}i$fulbdZI6k^v~+fFp>Mha zS;PLMT#AWk$+`nfW|UWA`pp?`iTD(6HLD6N-MiJdWBAN8wSs1DRL0#hV^0`aV5!e} z47vYLfrVn_kVB>*K@)QOK&B)xx{8WXrQiw&FL?pxxyKVtd0g5*lR>(@9(>Wd_BNkO zrd$8Igl0ws_H+#UJiwMM0D9+WzZ!%z|}q7>Y6P1Reo;yjgF@W7$2 zZD;m-i27x2>^6^+-DffxKCnNYo&ye^KmW(UBa3_AIFynAnXHZ5LgZ{eFoEo?xFl6fTd}K_J&RL;hZnv#=K=us&CF!(AxrIpu>?LMF&1=AqrI?PBLz{M(Z0sRTNfKIZA`HlNOCCI<^$GHZ}m0jHZk5McT!QHyC_)6U3 z*$S46F zqJ{Q6WNy2q+YyoV46c;Gf9^1N+6Z1aQw|+Fw%`(I=WyggSI*9w;FO1!Eot+kL zipiu+Q6_%fuhB~NWc1WwyJz}zL`>|1EOxV_Dhne?y*BuB$tdA$X(yT5gCD}N<F$%1> z+H%aNxzzbs=HXCZJnVIf`Kw(!dQGKjR!M}CQqnVfI04zyA)2XI4hBxnKmKvLA zrQ@0Ib|j$EJu@X}Gm=5mm!gxo_wc+=cvpm;WLC1&Y%~`!5L$)ebfsu`ig}JTKlz>D zb%fPuCHMm7hW5CUwXteUv>M@fVdFw?g=HlImR~$a9+G_2B zjuECDnOW+ONy^H!{&sxGoH$Q^Ig`H7|EMeVBs1`c$(CXx)RrQ{5WDliN*>BL^x#!{ zp=O~E?!}zTD@12A0Rx8yA6XaSysM8XzaNH|am}YpsF+Rvu}|UXv56}#c9?ChzGNgF zL*MxQEjI(OUkp&N1o`%J21_#_xC$1EX!rpl!G=fd0T(=;aX&Yl8+K@Tt@w8xUr{ASBc; zGpUlCuH8Vb2=~sUiFCctXd1|~8!2;*Jd!+s%3DvqNGVD7b86`hE0*ZY5X}&V(rIP` zmz&p+a#lO#2Gv%9!gUKai=SrNQ4QcNtB@*zLVf2$_N4r>FUd>!%4TRgditY33Y#0u z^J|fjChkEHXKI<74c*NOKe8M1)#2W1Xio2(+I8Q@U{5-D_scGT|NFlUqMAAg74Sy! z)i~lTP@;s?t4aKH4 z2yMM~CkX%Tl1jH9;AcDVLeWh^j2Ns5VhCWVbrMOva|Xs61&}Sq-Nu`qZzXle#qypVBIRZg`egr4|u=Ku=XnPlj1ilOjwq zB@SfY;km~h|J?YBbj_8i#!Hh%FByyMnk`F4QG^FZ3AWvVdwKLAn9@zN)H6Y!-IU_Ycqw85QJE?U-o12wT7N+vs9=pmqp&N8@#CFV$I?S5oh+^Ohu(X+q8Put89F zeDo}QGdsxG=9uffEwRSU>l#4rvG4g7dXc&H;)lr=x^~?H|Dv|lDdFU;R8vF)Su+rN z&28GC2~Y~LUdYrDe8hzHZwA=IwX7OOeGxByG=|FgnA5M)*#nZY#vKXmpu#kZq^Qtu zN&#O5HW;nMyzD{!z+^mW`Ry>)gx|J}Pc56lvrP*7rbEzje~erLWE4Zyiq2oTL8$r# zANDWP#1W{d_~k-z2#>iu&%1jaN`hECFNR^HX^raTtc6wkXBKy8v~g5WJA(H7ubv47 zjd0B~q@%br-8B*ocJVbY`K1yD2g9P0cU)@Fec|=~8e7Ov{XY5RZKK703aLqoz1|z^ zd_f-PdpV&e*(XQV92fVh$DGY}vXmHOYG{{o2_D)MjJurac06~WObOWSm%e-+>9GPz zrkW#c+rXdajNWe}O^(i_N|(BNRnPVb>;qi1H=Sv%*D0054KX?r@U45P^G&h}=|^2+ zhmBt@b2n);F`re{Y-?oW+JyCws|ec^Oc7ek1Pm{6tAZE6coO&J`{^~D`*#e(aOY=Z z2-Lj~kj_G#oFke@U=MeLv|-bWEu5P|Cc~N@Dlb($R0H{(AIq3EB4RO2=FY*Zpi5gS{+cSKy_CSc){^Ms7s3(dQQX7%B_sIkySoEiYt zBVmE?HeMYw%R;rA+LEng@)mDuY zDQB9nG3@+q)E+y=0)2wzaKeF=g@MQ9oeiI+{ChiMn%hOso9J3E8-FOa& zlWMzIKiXX-a)Lw_MvPLFRntYCTh=K>?Lp`7mXAG}X_RWL*+eqA{T@<{Ky>}Alw_IM+&Xl&4U z>#GkCjcxtLvcYR<2=Zq4-rSG3va7QP&@VM>cYg54g#p zNh$3nvEf2lxc%S&jDxnmHsi~xq2?Kea%ILUE{Y*4@wIGlf;J&Qm{DE03?k7fpoRJbG$QcPF^MsqR;$|+Ug5=o0zXo$Jmyr*NVO9uz_ub2s;gff; zM8oqnShpJ^Yx3x;3W2e2NTy(^7FH+oCd8cuuT&-FUH# z&(ZhXVkF_^wt4Z+Tfg#ck{r|}(e}FQRPzG~Eb%ti>G24=LEXYN{j(=N_trAQw@`$# zb^VV@<8)otKdJ;X1OiD5q&16w&h3y{WEW2)k&C-()0y0ElqBIQKJ;uqH)VRb9omhi$`w^KTOF}{}6E2nS_EN8l(@?-{=gTP^R zzkg{qv`0bi^#ek%;_jD-ZZ@Hgz)!X(fSZ*k4L%%*E?L9T4=w`*ZuENA0&VQcJxV}YR^D58xiN?b~BliV7Zt9m}!82)C!@sCyf zA693{mCqu~bR_xsGfnPJ^_P6Ii-1`};d@AU4j)QmKckpnJ085NI%|q(n{iNBMOV>K zvT2A=1Xbpaz9F3q=ED>@CeAqQUHZTCF1Dqa@02`)7~yL&%|@o&(w}T2V9K0|9uh)m z&L$&|;d~aheZm%wMDeDl#n*y6)(tO+lDuH3p=lCMExht-N$A!1o+kkDs^-8K#OZlC zHJ2i;DNvbf>O!R#VVLore&x!ZVk6)(1?(G8-69xH1;}UOxMIjZj-zKdJxd_V&>J*n z9Sm`uO25pmGf2gka7pj=k9HNgw3%J_uArmpj&jP}qMKF`Ydihg-P<~}!DqgsuaiYfv(%K1Yt)7N#Z$F1h$@W&cpo_+SCJp&ZO{kc43 zN8-Ly9Ws9kIe%vbx_11a;PBTb#sF+$Hts6<&!0gan&yRFOqpjiR;mn&*Wu5FHD8zQ ziG7oiWxlrr*S|>w;pw3VrlKF-oPRM$=++9WZ*Q6(&}7?n2TN`4jnSFkh;6~^C!i8o zMj7xSpLJy6#JM%A4UcTUQ_-WV(vM#3zl@F^eX;(HHUBfG-j`Lutu&um!iC`(Ao~Th zQk!21Po=yo`3D90w@nQI^i!#Oxie7EDtKI=(`fZ^1_$HaLg?(9-=)8q8C0LzQZX`V z+IM<@MY1Yb@4k8XGUd(Rnu8*23D-WPTq53!+Fsh-7M=yWJycwc|7*6S=VH~gk6)tb>@t(14ZZY>9=pD7_QuUS zq2ysHt9m_Lg0U&JanC+FbFxUFyVt4uvbR4)mqC)6=~ zPrkXQL}Bq?G~w)bLc}Agl4q+4TUj$5Q6$`25XNqf{UBC;Bl~fSh6v<6RShFf-fTBP zSViZxkPu;iXmu=q6grp^-KKwSV*#ImIak7dB+TB~itR36!kLdNC#&d@Faq@lizs1V zN&h;Xw<|c+g%`6gjCJTZ)_gMBgtcH**^=+o6H|n-kX^W_5Ydy{_pMo6^#5x=aDQLk zpS15Uv$5+N)dJs}zaNBddPvRcsre#7(RqG#njUa(go_m{hjn*I&P zVz-B4A*vD5u}0mo*EIbjR*SNaBY2;ZVq*D*I?JtCE_akUJeA!Dyz=sp`y5vvKs(@b zFH7<gm6D*C9vhawdnSJmn>>!%sg;f;qLFs=`Pu5+m1y|-&TlD4@cE!EG$F>j;MnW1?#mDFeCza|mXoYK*`LtsN z@7R|hn<`^nUOhG=2D}L2_78^Fm!-cvO>JUdoErJ=T=1v{tbQv`Ex=my47I-} zr6sy__JdMN{s=J(>Dw>bN6sYr)zn57xq#nm3^a zxA7?38MeA$e0lD063AI>a2sl(BtrwF-r+9dkC~ok7Gl2j3NAxAeRrh5j1sHU_Rj01 za7!NT<*rePZ=<4wwiO&ICtn)V&?#{dwySN9=E|+y?Z(%&1}=h*54Ss8W6XRt*+LE z;NS-ZW?~+-TsEIGpAUNeZ2G|i%GH+#L7t7tqxFj&?Yr(5p8#b(YB>vFK(MW~T4|e@ zAIkB765F^e+P=BijhG-Dm2x+bShyGEuMTu3u^9S=S$g)-^jwrsqREkp3USG25SLj_*He%LoMUyDcX*AzdG^@Ho!XISIiLJx1X<5!ZGGd@i< zqu4)LT)(ah*DoB6$e-409)0~98Uwo-qI~tvX;$2-xNJA|f`ko~=m^Rt4pHLIL+~#Ggw{VpCwLvCxJtESSA=M5R2HSt@69;dBR?EIuNQ1D-uFllr zP0Ll6H*v&_scutLz~TG#L?T#W-Hwnuo%?VVD6};o0$5YdqIewsBlM$z(XbJ&ar{D@ zb|??xzZt>+dBN{1u(0(N02fQ}(d^0>KWu<9^hLYa&7d~|q=Vf1!NGs7ZB>n2EvsTg z_j&kxAnfo|@FLI<6Yc08H~5#$hv0hw0@fs{X!f;04GD#uBaOQ+fZ2qKFUdWw!+rqe zU+rg5SOa;Yx~hLhKf0}~6>Ut}jOD+QDoHPv#s*F8w2s=hvlJ668OP(3Sog1KDsQ$i zE)|lRV98&7e zn1g~c_15r)sre+QHdcYk-- zD;C$@ZU6SU{KJJdoXQGW!6ygvuhj%3vz;SyQwiL7i<(vmV z;ttb@c(qT#OUmy>0>6^-oN~We(g0xqN}QVLRG_7CRWkf51**<)=JedvD!-^i$2BNF zoM5KJk;P-?u)tryjs(12OK;KEYOv;LF)-=LV9XNthrTRRxsf(V=5|7rtQ9Saf^ejr zqn-7RO`44yZK-4$k03Z6tgWR;$nvp+O%O}`t8avze*|gm9dJ~^BcOa!@I=?&T#*gk zu7Lq?+QmzK!;@7~h*9DXy(LXIQ(q-)S%g^?nnLr{j68+MJ9EW|bHx~^(hvW(8&}i2 zTRxWrD+!FzI@@9*IK~of0Z&)ealfIG-*SeuVM*kR!yusyDp?xgd_peOh2t~(%^B<=jrt%o}Awq~%_|+ZJ`SXVe(w#$F{4axz z)wF4t%G0u$G}fGpy2;2_!1)!mUWa(1!5Qr4C`;a<(nV?@WjNw?3N_`$T89QfiemU% zm%CkZqD=(zwSl&AQlsd(D1`;fKZu^NHnZt&Wx3?vt?vI-87F5_sZ^bAgyvj}FMxP9 z9*;Iu-|)#qPkgYleE-yy7`(y39JhnW25f~RZGHZ7b(0RVDqXBQ7A;rdpwi4QQu(_9 zVAhT87$edB`j{<8hd!N8;-EkN<~h|0N@eKQmaTK2U-!(pe0)Lx^Xgw>hzY2b zqthkcXU$Ex+Q(i#oc0%kJW-uI2?9DT<*23t9#u$_C)3{{(Dj*|bN4f%(XM~lMtTe7 z{sJ~muSvFD!|(GUg(D-KfC^7D_2DI;!vAeP*vdNs(>=Iq{@*fl=0r;`OKOP5zLb&cMI z90QTM>^~*?`m$x+V1FjyYfHSE995~AsxJG4b1v(Ib1k6j<~>QGTEKO@uqlFL|NN5j zJ{K^a!cM=bk^$6ix3zl=e^M=;r)x$Pr+pb~bZsy8kDuX3hQ33NHyp?Eehs%8JT;%& z%vX%kl%O9i&AhT8?xn0F_Gnl-0G@~m-R_cn`6d2qm&8A*pbJ=4sRkc>m|Ym)>j4k` zZ!J4tmUaCR3|OnE>U4Pc*gtsaU?`p3b4NDOwl3(wbfd7PF?6)&@rvHHpmVHCQ1^XyKs>jF@{r^#yvUZ0m4^BZ$(wP9J zewoM1lD5T}RWLduH2l&0g$DBlUTSi8THRu~zqydDnHElt)Tmcuw@859bY4;8yQ4Uh ze30@}6A5zQu@pM7KXE>B4@C{$`z1#!VJ!Ywh1W}jl8hirM7)SQ;$=B29KT%pBVsXS z$4`!z;_gH$W6F$@RzmjYnj@w4q|#m#%Q(Sgm<@E3YD0U=wfql#u}-;rzk|d(H2=PZ zG6L8@rT*MfEop7m_?sN{jlq0}2T%aCFH`3sv+=sO_5jeVPEsBegU`|4bf+n0Buluz z+Tn^E7n;x0UsvQto;8@*2M~O{Qt%;PCF>X#JmMV`j3vw2`qeBm=K9p(+JDvt zBAX!VwpeXm6d>qXWARD6?Y&l*uh(L}*8Ck|uImB6A7b1^a(?!9cCA~Bq>7|my3=1w zN^V~ol4i<1ERv>SGNUXMJoz+|gl}5PO?Mo4K`cRWqrFd7{fiGSU`5Eu)0wv@}h=0(6!VLv!<8U(!EUskYo6|@t%kxroy zB;vjIq1!Q#XX46i^t|5G+sr(0mD_2$y_s~X3}o?>g1_y6p7q$@J-yOiX3Z=Yu9<6g zmQEK#O+dM;EbENdUZN9`b|)KyUU(s)Y3WSt0Bn1yj={4czobmvPP5v2L1bAJh=eis zadM)mQ$u0+;S*e$Twa$O9;=BfC{p97eYg^&vNf0R3r+)$u2+dS%37@2mBe(HkzQ+} z?b^J4f~O)QH<`8tD^!jo%Jm#JSJx?b>_gMUkq7>B5At43V``HfSLsskvvP)=YjL$8 z_CbQ59w7OWDEu{+cK-@Gc3`~2Fah_UMaLs=om&FwZ=cAjy}PkdSazFl8xQkw>Wn8`Jwf(+_Vys`jg#-G`tnTf=7wK=5))y* za%Jg&g5N^jEL*!bIsgRnn_3uKnO}9g7Aw8w&(BCBuB~L<|A_3J9Z`I{$a6kNH24Xn zi}HFL6Gx`J-PJ^Uh;O^)FgTI#b8b&9FqwEXBNYGOvmClh^x07saGLcG&Ht~4*4|@3 zi+0o^fi+YyV7&mn+)}i2l6FcFn3CE5Igh()#>ND<-v_BDJzoodfnlr-?wiO6KKO+M z>?6Th=E1fYW#-D@7$Pr#=$y7^*)hj3?Te_6wP&$Yv(TOwSSzS^r~RmVM4kB@il&cX zpuPop#imahMuW=*RkIuAhz0h&SA~{3cOGQAQPv5>GOlQMvb|1PqNvy~?1=z7RhSMR z*^v8NGPw%LS!ptza>jP{P_482L8%9ZYR7*#UYFmjY$TWNqLy?=yZ7^cE#0*dW0HLk8xLd+M5AwibeZCD#rJ7r;}Qv{Yj5v*=wO!Ap7Tqrrg zB&G&L`f|ZoO($@3s9{Bh)4`+(%stoyO9c(gy0qU@9X8jape|c69YAHBb|`GzhWQwF z6r!JrC$*tcKVo$BC`If~n;JN0vTkJAUj5j4oJc8Dbov%W(dnM{rh#yg2?&hVu5op= zoH44%?}@NJd$H=a{F_3WoogdB8M>;Gw2w+QNg;6G2tscEv$Ib;WxMxcSzxWaA=#Bf zy1a>>H{u}sAm`xmgLk|1G3R=dNqqoilGF6LGR+R(5ViKr+2*(_q~V-PTuT%YbM@NCdX_>ry8*MO?}lP^LMxvwPg?IZ~2p}?9Sk| zexg6P)`Z*pnnjl=@wet?X4>rL6z-gM-Z zDHHWZS0NQuT55!s#qixVfLK8VdZW(>TYT5XhE)InkZRMd->Wuv7#aS-KL9EHn8*2HQ8&J%sYVVtV&nWg4 z@$!M_25*Wdu~%5gxUHz~(aX#@R5Da5y?%6416#eXMn;11jvdBmF-9tOT)mRYg_%!bO((_*aeCLLs$2xy7+ ztDG}P4i)wi8x={m-4j5kcZS%XmbdI+;djQ${wy-&iLCza;{2VVCj1Qf_cNQ%s-~DfdFt06nSB#^9M^Wzv#%ujxghMP!8J{zm5{}%H)b{y63C0{fRfz zahq&sB3`9LiC*5qt-Uh8&SRzMlQfZLnkh8lY}tbBmoaNk*=BQ2o#d?q-bXRI{q;v5 z_x@uH4s#XX6_`ezL_k*T)Vf0|%7AR%D0CG4Z9TC(0toKEx8y|Z{dL&wmC4|oYEbFF zPvjb^9L@f|#=v|xy-=~gcV>{{M6p~#D{S;rx6tO5T`cQHB?)iDxZiTchLYU_V0bAV`?${+~q7w9QHXS(kTM%wDKdY<+O~%oo`X^-&1OLTznPAck# za+)l4*ELwhwY!#!QS^I18qY$!^NU%gA;vZ@K z)I*aU-zyM3BJP&UeomYVEwTbrr17hw6Jr!bw^i*g(JHXerHLT(00N(rZblx+_0h1S znnvKGVs2W$P#ak69YT?dZ|3_J@s~CnD$}V767`Y~n?=d?@m#VyPtG7=J#yD-n-F-? zR-)3i+NIlB_xnrW_> zP^3Z!^p4J)+dF}57uy5QjGta4r-oW&yQqQJ{2QR&&LDspUj-XdM>_lj;bo|GvrGe6Wli}vG zXpt27Un-|8ob?vV8BK8+-&_2eaAo-;;^6$+1k`A2vvRLNW(Ap+d{ty2Y-sF!)r@5J zBy>-mr0}}UrXbO!F7J=7bP{qsDv0IvZP{Zj*i~TPj5?uAQ4#7a_FD`P_n1+=I-SyO z!=v&4JIC&*BK`DS5M(i!=G~5A!4gcM>Iw{YfKkTDxc{hv8VDJ>gdI2^d48&D^fs!) z$ILt_1yhShI1S~uUKcAEQ3UGG!ALpM`eFj)Mgo2;gsQ#VR6~C$M~D3bLu-LVQgorP z40wYutpv8KTGq|-IMvL3pC6xj)bmHzc3}VD)EG>$E*d0$Ib(5mxau8}nbWJzo>a4$ zd^+A>uzN`&4Y|D1vx*t}iGiEj9gT;_e2HHOg^37^IDa9i1^LOn5eFKHbPdgHThCZp zqnR=*r^%h{JROBLj;S2z?_BE4#>YaH)MI;XW5Ef3E=C4Z@+}NGB2%idzK?SzW<8xN z{LSK;(Kz+{1&uoU&>wtI^F0KIYdMe0e~z&I>h9t>c-pmQA%h?!%i~}`O?x#+2pcQZ z0q^>Mur?2oSR21jT8RG~JY$JRxsCsW-t6@|TYkH_T=4Am95O43pu!42vnAN#Dk-y| z7X2kCtN$q)9Mq?xYeE?u1Lw9|k<1FlQ=@Oy&qs?qc!}M0{qK88S^qMLd~X&$lvA8^ zD4=TdSoX0MlPrby$(ytqqMV)>uRMG-Eu@I$xkh?_K(FrsX&L?}yhZpF9XO=@XD1!L zDeQXb#LVVYkW6`Rzo5JaGqUtmr!utRaKUhYut;2J)Fb=yATanGcrcuG{ zg=TS>9rz5Y)lCUkz|u}Pl#ejWUPJ?+y9M%>%ECv($!3gAiDjM+m~&^=_M&{`&MYOp z$D`S@P+!*o4{NEI7|n;)i7f-N^8>Am3A!&oCsHl_d91j+gxYVyg=I_TCM<0Pj#Q{N z(p&+ppfF%IZN?|5+d=xJiEX9r_Kf44=!@u#jxWa^!YO|3wTutw?IV~_WfTpMq(Vtb zQzW}?GBSu4%C^3iPCGOWhc2Bsy?7qwK$C?B-+WImI(b@C)H2sGfg=|!+vAwv6v)%R zdM}e}$u&o9*#xk?L>(%0deX7l4t`{3JaYO8KADEhVf6xd=O2zp=p)l;YK+H^1JsGh zk$2{S%dW1SpDFacWpxpx+Kj}T6kqwxp3L5t?(${n+8oZ+6Gjka&B!O)g&Rp>Sh^|{ zoa0G|#a>fn7G{Te&FcL*)ko*y<>mD+eW3DmuE|G)?cj;}cH8Dt6H{ub#}Vie&(o78 zk~$OaZ30YPxCdONuhxKv!a;?R4)0J0=y9R z#O818&tYazgfqz{@g+$c4ZYf;YeP!&>GQ%=B_Cz1HQu|;=W!7}T_whzB^%=Ohoo3p>q)LYDW^p| zfv<1n1+o?DJ@$^~i!u-UYGBE^-uY2j&{7wzb{&3by=Go`!%p5Aw?)23o6Rmhn#?dC z{?{%*a-fz0uErw_(ryfCSvk4xSr{^6l?rOd^}1zXMqt~P?R+VfM>Bi7lk11iK+m>n zCB~pS`uWu`K$z)+P`P5G@3kDA8Fnj%`}rTSppCq}uu)he@$sMCz`O7r)02vsP{bUF zl^-)dOmqv_WNbX+1xNJ3_on0Yw?_JIt+ZDD>MUPM#OsAtp=Sm+XPDDs><>+8A5vFX zKgH5w`otU8FUGu>=%{aDcr`(>QXngHb%<{%;hX`Mowq3qIH&QvZi6ZKczV-8KE--z z9>y9yGu|qtz~LgZc>`l#9FA<$1`vY(I#gbEjkx7f$SncxoJ`hF;v@`^XMi@TpgWTb z{Y|OG{dw?F#!abc0F*UMX-Ac43*MW%K4CEM9dT;h%4ojTjqw)5NQ@9a@YwUTY}6+w zdTfHjmkV~cy8Yz=iRO5O#V>l)xNmRlXMf3;oX_mv^UEdH2aVFyJ1CVxDq1>my#7u! zpltR9BuaDdeYuJEPph0H*QcyKu{}Hyy}edfEOjdyBJ0}6>(^kQF^>IHA-~p8OyrU& zuW-qUJz4~A_SQk5J2zbv_hHmzqWxggg|BWtzBj>wtm(^J@lh}ynmTu(bPr%I)`&Q0C@~lCnX7B;W{%2D)Zzot*lwe zKaxl+P4uW0(dX-5Q2JE*PiPKk!F>v|@kcB(R|aeY>d|$6q90U~u)h(BE%>vDwL0aw z7=O`wDYx>kf6zN%o8Vs$XY0e9Bk?L1zqgl`;aP8g?qV-*>#-L%y0wLCcj!BAS1BT(?#DuyD`A z31C}%=zNbBiBmc&D)V~7H~1uPe4cuXJm2sU$YUI}|F&)-a>|4h<;Qzmv zoUI|fcK|YyO)6TJ^pX6~5(s9NyZ=Z9KDy~;_$Jv%O(lMsCs8uyxU2-LQ3~3GE>mrX z$e)we3V|VX7mic#03aDXk43xI{f1bu2^nXgEp)~{k9Ed=UoHhNvO7aeuw16f9Yfeu zx5fMR(Z-2l2$UVtrQ9VRpD|hb@bfeg`t|Za39dS zYMq62uX+IJ^-Vvg@!&EPM7tTCW(`LM3!HwkB-7cCG84$?9?G%G)or#18{3l~`>nJ! zxDS}vFY~=eOdpp#^z^QGCq!<)ew%&=*$8jD`csorLfIBvZ@zqmXZZL?U4$XQI zeBGmroSEEVf|hOfqiZ7@owod_kSLzk{eUIWU#?e*d&r*w?8|*=vfwP7y`HIki+~d! z^T=Nj9p4{E6oh~7UuN)X<)qL;js5Dn?op0&N<$G7L5;Zc@cl2{&1&UE2_~!DjtP@&rgS-5;NYkhJfJ%JR8aT zY9b#elLCNzlZ&N=??v{n${BPiaLZ$s{>gAKc;A&|=&%JD4kFz0lYfOcf=!X=$YRZ# zbBwZ{C&HUv_Vf|OU5G7_x`h(z9URbH!7>Q`4rI&;MFCJ?C_8UuE$IF)sqJ7l#uEP6 zEybTm%1btG_AwzWw7}y7s4M1}Um}go5!1s>E=F8#O&IcG=#)Yy>;($6YZOz?{!)^; zP-=rwqtL2{a-=U${&I*10!vGk$3Omuq(x*w{q;v6X(>?fE2u3z+~Wrx%%dO8ug`V> z4&Ob4q-)w|4s>>AcCdc#7JrGai*?A~Et@9(A8L{JNn)JMMP|6eoK%npy37Q^&{L^K#l4zN^(Isz?&1REYK1xa}nkN3H_%hxqm?j9yVlWm#X zi?k7Hi?WSvfa)5v^XT&aKxltWEyj$hLE~pP(jjVl{B8B8fjE$$VeV#r1h)&eycJpI z@OpX??7=?PAuhEvNQM)$LKd9u4x|}2Av4C}qVUvt?GSUtNU3-qCaex^MQWqO4^IZo zKUBu+h)KA8hJy<(ug2~7c1($wnY1d(2C`f^qVkAT*HT)q%7_Z8!ap*GuJpZAK`OO= z4y5VJ0AYK`uO%JGQY#Ay>Gxi5uCxMf)mr-QOS%~CVLBB;1iJZy;SJ_UW;JP8}PrC0P z1xaOyT7v|uOZPtvxxk{cVvKmH1K);<4%i1AU`+Q=x#DBV$WG422Q9F|(Z2fw)jt*qFEbLklAAkyAHWuN}k zGaC}pLGiucxp5sfS;7XC2tQ*M^2QSi&=^4;3Q)PL^s`oT@u6I@w267)d-slf12ri$s~of)o-8orr@2aSml~NaWn5aRy74I!jy=%pGiIbElsSi6enC( z8#?%D$@!jqtHjVI` z)taSXv8ZP7|Izgx&~UbE+psPOq7%InK|*u}QNzRNB5L%SAwqPbM2#L2#E24|Xrq&e z6213cqW3yR`!3J3_xHZv{`Y^cm9f^W#6sN1eO||T6uyHEp7lfhfkiONdUd>J{Vy_TYKRd@WN;kK4)wCv zwjso~exHmz3;{8VUHCcn#Tw`Fsy?Q!HPolHU&-1JkL~Z}QG%JN~mbXycOk z+q|bzxs4&)6pn?w&y7$W;>^#bRnE{{;&p`~%Qc*!q9e_{se0PJu@2Xk zwwW^=`h((kD45wnEOVDyixO1PC-XzJl4`IheGVq~_=ntVf&Y+v= zSwU@z!(E$HbnG?z=8P^f}>d_Qva7HH{uv8R+qnZ1& zj2_{E{1@H5Y8WvV`N7rcS%8NJ0oB@`4Y5^_2 zqy@E;XCVSxe4CWtvWV3_n#; zsw0)mq*zz|0*@l5ye8e%jAt1(Ly?p z%D3{=#Pq_)$y`r%Nx7^`UeQi|w*)0oR}3K1sk}8U=SHYHb2*o7>(L96EXdy(;un3d zX8$fFe4<;mC%>dUyzkkljI`r}O?$g5m^XVDEaM96Bj`zwsu@YRVPfC72fSK}egr14 z{0YC-G%d{K{%$q^)X0ZAdJ>VG74}p;VW4?e9y7eNOlD~eWS|o~db}AkfA3cPK-kJ3 z3Dge}x*Y9Fmj~}Zl?qW8hUs@);z|37V4U^0z}_ofh5ytvt>;{Y(cD%aCLQWj(fv9s zOB3u~##L9UwYdwg?!PsjbfV0jJXCD+vK?vJ*(0cW)!~&o8#|FQSP}e}wUV!vydeF_ zhIB@^d+J0Jv10On>3zB#Z9i@kegg{S8Sn#g4LJs>uPiTZp8pyuE(U$I6|K3t630Ay z6Q5giW#8%6Cy(9uLKP)94UaC-G20(XQ#Xq_E_~|C!od;j_&Ab{O2m@5ND59SJ|5%b z<@qEwO7<6g7cZxekHALJ;}_4RUQOZsJ6@XtggI^-N5yr=ZD6$)LeXbrfjun3^ktp! z?d%d>4(!(zHwZ&qn`zsln)PHlXicG2b&$aEw3krTZ1VFseMb88!7X*5%=iiz(>V^p z<4ULxBH~KH)~){5F@rrWk-3Yo@r`>lW<$MMy7~uBOrOFIF&NX=>Mxknl~{M5Y*2V} zSGNXu5mPY^>;^Lxnv>t}F+XnQWL2R2JK9`EU(B))a>v$&b`;lTHmfx^1O!5q*DJ*Q z4h5qo#$h3-dv_=L!^{D>c^(F3ocdq&w-&bwwcFhrh-?DX!-s_J8}Nz$N2!)c0=M-Z z6kbTJaHXR#zAC9dCpi=8IxE+cX( z)2Ul#EP z<1TtRRgjJ{>43CaVk<0|D||16D_kex%`Ly9=tRL?&;ysgX+HQ%Z34aKhBcUeMX8-Y zM!D`cYll!He}K*&!9w-Zp|+|y0)+>t&|5HGe!tFq!SmChWv<&?p6gn1oKM6^w zw_c_MXU7f1HOjf59I$SL&t%YYXR3-Z!=#4aUBa0lU4kTbo$Yt%@yiURNt*dBFUvVi z_06Ddn@Nkr5+#{cAMd}0HI>oIYSE=mF|gNsuydAmP8s8rKMz`#)CQY1@Al#RsM;Mr zMdmx9MU_qAVAm*$qdTokWywD9E>c#yEhem}c%d!ndDJVS|FoGJ?{|LWR+V&Ib)cmp z6RecjS%G1BGDdt}p=OUgQsV`d|*$7cv?1Lf@ox2-YXhlGQeEmR_Zr3yQVr+-nR#Q2?&v=03- ziguO|f)?TvFWPz~OM$(Ku}%=K!6!4%e-5%1Bb(-nEc?>Lh?i>Vlsw0nG>c+I*k0qv zKHa7G&3V@T8P=y}aUgbgKzQl0Rfys2xyLtV{&+OoanAw$XGD7r{q;{DS~V*aJgZA9 zOsgZTX*ckejJ+bvE)k;qdOY(rhEGa?#6QZRWKRKDd^peTo>?Sa25-UpsO$D^B9Kq2 zQZ(U7juQ3eCHLUU`{!2YEwh;vu4lG<|Iz}--61db%RcJ?ju5pbL>Bu~Ed_7*ZQCA) zzp7nPLF2=7o}SgXqS7ee(0|NdLwiJkHQZ{l9<7z#a`(7x9hadPAb1=Q;pbk4Ooh#EKue~8i)@=g5Wm(RB z4^A51YB7ZTe-vn|1wlq@KP8!PL7CRl@NLeUf*Sx~UWE>S@h!r>to=x%G%QQG;IdAKU})7fyzbi2f>fPWuTv zeMvJa`s?*_daN#b^yE+z+F7|JKh=Vf59O2>@|Jlu%x3mdHu2u6x|`m6U?VU!q;Ma@ zSptq0a=~_Qut`HR1FHra|E)b0WI>8tJXT0|Fc| zTI=v|Gi}IqO|Msk zMyfXo4@S1uu^2eop9D>RC!C4uXVa2oIZ|A=`H>09SCmR3mzCe}f=hMyG~ya`o0 zCr5Q1)ynyQRb%hff0M$gN4ZpeygXz4ECjrX>1NAJZ~fHqNVeM)!hAm0hFtga&UB4( z=`0SbJvbPQmklNa1uZ@W_UMlYCoVOJ$yLem{1hisAC5CS63xK$|P5aQBjl8&Z zeb52QR-&uPq1m~k&-cFG&JSB?RJ>5p;)mjAKKI2J=cQRc_dN5_f~5`Zlv#zXQx^=n zJqoKd0(1KHcJ6HZ3HzGT3|X%B6m5WLJmwTP ziD=uH;b!T?^AQKI7jrSNSV~ccFPnHQhRmyAQyOTLq#n%h>>DwsGf^nL&R$ZEKKB-7 zQqM)Bw>nx?&Yp^+b9*|}YeE+kyV@An5L=wHUHodbvjH&`kFAz@CgM1){YGOF`2#0Q zD({4%U7o__FR`{$g$s%iX_;+7nNv{#;CLRtUEl41t(KBm)P7d9R~j<7VPINcnM|2q zUYzJo7Ge8>E80B40bYjMV`?i9C<83G;DMif#7>yq!ejf0?QJzxWl zSI>pFSJbGl_{E5R#(X-W013_`P?jfLfs(n!)g2SZHfpRdFt5X=zS41b+&xvQVq}fO zcj-O&rQpRflD20=#`yu#Vi)8tl8cry5Ox|br3WO~bv@i@XWeXvtUD5wJNtIS-#&cpBRBj8 zg+nlpsQUj3Rwgit?4QDE6LN}ukv)YYlcHpeW#oH*y;lHi8S#f+WyR!+wUtbt^zzUS zDUI)G$m>gpUxOX&pQ$^+6~^dgI};__&~>@ZOO^Kfm11k^Qr4~}Ru`GCY^gdSbU$2~ z>?{Ht)+!F_NxoCPxCPhi%Qb1~_crtI5MKg?8|lYMukhfopKGZBiUC-n%rcADLdc#g z9A;UP8tW%qyHqBMk{8<*#M3uT>n&VX9ta+LilZo>$NfEfx;-xU$KpG<}7@>6DE312LK+uNiTFqVEmy--rX zbYb*!ef4m_&$Wl3z_WC*9>)(CDeFo*Mw>6!wW}`uV#mkCnjsrW4%_pjUDOaXZC4X2Tn$?3G z|6PSJ9oG0YaTW<$$eK|8lk0K@O9>IDPu@Ho@4qcVpn$-nR?4dp%yGD92%9IYq;Qme z>9+1IC8|4KMT{rI{?iHlZn1dh*zo6@DvH0bi#5K@{oC9Y1k7zW_A~W!_%<9~zl^IF>Zd{eU4%$lI?8d4 zvwQohF|*TcP+!SY?n}^T7-@CUKvzP!JYQnupF(3$+-Z!GA#K9>(7COKF%i2-<%P#w zwE6K1O2-mN-lEE`sdvIpxHT&^I(BUV%2a}h)epp_@Wr1?}@xhs@O|%_Rs~CD9fwrK64&T*{f1MiJY7N z?gT9k3K)|%a#(vVLk16+InkBH^{JN~uQ zepGQtup0AwMtQx{QS!{5L#wPd_N5*;6<$a=`q;R${pqgyoMleV+KstGp`H z5_)`FjLH;kzQ$uMr%?01MuQb)$o2=LGh+g}iO|^Mr$Ir(weZQePoyy&H^lu3cPy1_ z-||>0_HdHAk>}q#h_z>7c%znJ7Z(8mN&4E1E~ce7vGx*ZcIlAUMh`2Y355v-#*Rf$ zqvk*Jq?`T+HwBMV76eDVOeXPy%PF=SMaF@SfJSfEBS>fGPZx?|IrYA)4|3CFI)0w#|&CDLVUjpuBpfSrZf4rk&yOp}{$r2D_ZedHBhyfYitwH_7Wo+oa zu9jl4jj_vSaipNICh<^&%t_ z!hLm}g3SK!D=uM`Z9;Z$*G`T(P#5svzJy6GTY!j1I2_XADCg zhdg;rf^8-854oCKg!!2nB8JMZC}rUpBC?I&oBGEQY;_Mlf+B_I^lNrZtU0T#Rr)^S z{EZ?#Bf^b-&&L4xz`M%lr(UFgLgkt_9F0EsaSBro9gPKT@27#v@}ck-@#Ghhct_nK)w>XQ(Pdv{6$)<4tBS@O>4mA>unRu@Yz zzy!OIXMpQVXA=gc&3((&uDJJ1?8}IYe+4+fdd?h?g2|QOAlUQ!5$GSDah)7dzW6HX z`<$Z^U*2Pt8t${Bhpr!7+wv(C&@+u zW2(e0Pn*BaJlki0Bn%h$dAl-trl%Ugc^fn@cZErQ5KSV(*ShBN8@J=(ZvUnjK|aS8 z%P4|{$s2P-HYr&=tY16@=Yp++$SBfP?4n@S)K1QRDB((K3#!!Ha?{NkvskhFD}X~1 z^Hy3%X#uE^|a-c&Dpa_Q@1Jf zfc2~wH=3LuA%4VL(rd6kFuao+{Hk1gZ7ZIM0Zo*1v6G~XBhIPN)Fg8IzH2N)xHwa% zaXbA4KI!5xV%q8p@o%IrNc(PtJ=S+7; zZd>Fx(=Vcols10XqMeyc2pg$(`ms7cIicS8T8SN3cPbFjaG<**C4MSsv|Kdg)biE8 zR=6ZEZjUR%R&FVQMOx^^`WD-t32+d8U_O$YFUK&$@uJMqP*I?+`J0szsgHGH|K!e` zjL(^JhFd8ZNlg`HB5qgvA6~q(E z^LO*j$)10Ii4&aig!5ag&%rc^YA*IT?frLOV`ceCge|Dpw6(g#SaAS8GRhX1lG1}| zjJU4W-^v*~+n=vnHv|i(pdXNi4T6AoIJjtv(+nrGcsI{Ld(X>Dt6Ed{;sf!zj97*rsM_VNGM^INWI4ojJ$RTVz4 z_62biZA6lipq-!GrV4b}pp0>1h2f@k!PGW^beVm{?(0A*Um z;t0Tcb{N7p9Iz!+ik!Q)^3{kAM%>dEi`D*jrMySbmzO*vp6L|oCTK?HAzJz#PyeZ3 zNv|8})f4sQx%MmP{M2NzyL84_adsNPalpKC=P@E_{#^dsdB_uH`|SP9^|@p5Wky#*e-p?EKQql zhc6YC%+TmdO*$9Zgk5!+_+6rf-5ORVbRBogXK!&wXsnOLAK*WG%d#0I*z?6jPm?5m zR~^mer_&oc1sx5Vo4pISFLJtXIRgfm7d+u>zUppnoVq7p_R_@N`p(AAY#T*oaDU!` z-^IV157WIlWjSysfxI*fhH@R@tiJohg!%Q{{RNIg7!oJv4t!stN$Pbd9()dDX|A~# zCGX=+mzdE$D%}siA`5aTS0L|WlB$$gd-@IQ!vpaP$aOLP_g@fJAAuH5^qy7x7H5R< z&>eWxe&_8A-jf#2>0MEZd|aJQ#2AS9A%W}|wQ!<>@5AyhSl92WBnm4rI;g(Ec;%8R z*I7MtY;+G`58u5-^OCJihNF0o`D7Ou2uHb+%Tu0-;-$E?(X5AhB> zjRZbF^x!bUrrX++*MsmpuNEcU5$iSZ)` zzHuB;zb(uz0=E6n780E=-aDjs-0yx*)*Rar*TpGl_-75q0o6pJZ#A$-gKYvd6 zPu%sN)pWg#jQ;R(1g;@rJJ>lWb9sE42>JB8d zSYz}4z9N*%vyd~bX_!p?!=WB~q156^BXSxK`3k^uI%+r6w9%%2ivr8^)dUh6QQM__JjFcWfKkaug5OHR{?8M2mMuSKU?ir|fV$D%@p5 zpvdh**~FzFMP#Mbb!hj%m7=?^7`)rV=ftSpMrwQBE(FSTKI6-S$m#!4i{;73RDtGl zmwD3Mx#Z9YXVdZV#8|)8v1XL^AwK+jqs^%i`8Ll<4k%DN@!jP~8*kLT4)qzFpT*kLgMaDkG=Q*}gid9HY<4M_M?AD66KcByR@!M~@g!x3;s8Mev&+yX){j zO@Ugi9urOFRaGZ=F6kIcK+o+5hlE?G|9H%8|5A~$uhSW#>_eJk$qYhZpGR~AeZ?pH#r4%$0Wk!*KrGrp^h+CU(~q*x zf}=}VL4%8(j9dj3w*T2C-E-zz1iRz5x$Nzz=l;aLT*P;cC<@^HB$4{sfZagSKuL#> zBOCFf+iYITnaP9OwI&k!Obe>70{CV zj({jKQH0^yV~r0tpOPvs+gFE4Cy~#d}HTQQ#C{TD*uN&g-0=1b9Iub%ty@6ScRl08QykK zB{uZas;Fh}=Zhm&{ROqXLVlHx_51JOed9+2^7=N)CFmUt=s^1ij%(93jttVfM(om^ zyPuImPVfl7dmS>B+p)V*3i8mj6*ijWac3zW*XwoH-KzL`fygLo0Th8jk_w%2y z`aJm3Y?ld@hYI93s;V6yh#L_+vtP_BR=DoPgV!ia`SFB6CpxNY!}syv=k1!E!a?z{ z;gzT9s>tI3Ibtbx^#R#OEu29Za+`*u{_f6s_CX8QA<+Gw+toS<9v_T9J1u7QEu4vh z2fiz}zjuAFDCq;M=l$v#I)qws-L|fsQnSq-wd5A#{(GXN+@fAgxCO?)U&z9=Cr!|w z9-aX_I>LwlXn;+wO?)_0bY!%=m?7Dm3-j)H#)KK-hW2DP^lrcy`U;oozM(Hne!58$C)bszKD|t|Q#64w`idy5Gwt2h#|u^!yb+6= zAgwv|l60Ojwbaf}dLJs%cGN#qIKS}RTD!n7k=|MG7<0#iAD%PiVWw-^FD6L6it}SU zc|*CWVKdSOlSc+$DI&4Nw;OerpBS}M_CL#C6M$^Jyy0W_X+a#*HxD?|)H6 z25(U=lA+YbjS{c6Q^-aNQ3SeBfW&V8b2N($yL30pzTF%C_9ke6Q_1+UQx>mv_i z1%IL0bI|se`#tmy+_~pMCU=Leo=62}yQ1G_-t_%ZeZ-m#oU=c9`6GcDBN$qJ8hbhx%Q()|9MIB5Vo+HREjADn@tc#V$Ve|lx1x)cqGYE(DHn=u*1QS2>3?R^Sa5*xdDh0l z8*0-`7-9BtyzPQxI$dfv?f_H8=H^$FYkU>)i4XekzvK=Zh+mhad=66)cAU`A_!&$F z=$R|(6XT%e*Iyik5mk30S`n&u6wJNx(<>N|fA^{1d|Qw)OpRQQSjV%R?~Kycfw=U> zOm?mprcu?>G%&14aotr(5*WZ8viWQrc|=Lq+||u0)0xs;C!24={MB*|ySzEfs`6KUX37Jp)A(zY~PfXn7yO1U_k#o}YG zmt|)a6TZ)_HRYk<^z7HyI375J^djb^aCTnvL3T=f-LN(GW`6{VbWQQfO)AR@k7o&b z9FDbgHLvD-ycKmuNz~u(v*GX3(5Yz(jJ@;Du!pgE(I~Pk;8QRbO$O-6kvOh^aU#ch z?P1lbFMVgtG{RS39`i%;LN%3QH*KWF^?Me4xIMuRp`zMOX$ue+4{P7=G2CEq~V~R|brRkinC0EZ7dHjvn=S6V{6o^s_bVpx* z6LS0`1{4BHdj(0EnO$%8mNd3P<}|w5)6HIIaDF=Vl*^aZ%gZ69+r-N$Jqk8_1xos= zJqw548hjnGbxxyDnFj&A>x3M+msxhR4yQgQKObdUs}11iUU}De0T~`rWDHP%jL7uL#vAuUgPo@UDVHX%=e8I z^^}kk*wy0qm-E*mJ6og>7cD~$1jSpteQ~2m|9ecIBseS}3>1IF58uZdkrmD$>XGYg16W6e zW&$2(wn_x>IiI86TxXMc17xrh{lgY)Sf!Z3z>}6-BkINBF-&V$Y%|emK0DliFygO? zrw+kTFwfq;1cO65qWIOHy$}0#YvhppgOB#E8BtE$X3h}9%-&~cVyBE2xMePPS(bT_ zg;DH z*Z4VrGO|Uo)2eeYZq{-E3TK)f!0M3(7Z{^ur{vBV^V=gbW~#T>$YyQw#AqHVA+a{g z%$p#X>=kHQOuvc(Mc5a_uRXRPG04^hB%1%|L573+R#prI zmEdcDjT!y3h&?UA8cljF4Pv0reh*bR5_gX6pW zB<@Z@*cEBXAiMR76nTy$W~O9odPSGP@(+jo&}CT zy`N?T^4SOa3C5TH$)KB@xWr2Rh_*-Q=ePXsAS`fL ztXb|OTL}20TF>36hc=#ckZO{yk;xj!nR^Rw8U|}{Dcs2kJ5cJnJ_^KiG9&4Gi7$$` z_A~ju3W787Y(a31XfJs7Rhuw8^%dG==wVJ+S}FBioc$|ZrnPO<-Aq4M5OfS|Pgqo0v zd8IGSTdA7)LB`C7^GzjfBsoDVEHY_yJ`EgP!HsD}7{v0frj%pg(f4*nMh)#TXA-~h z)Rx?o_z)>BpNPbU&+xZbaP@5Ej)EEDC~HB zx-3;*3}%UrZ2vrKZ2XuXS!DKFX3wl!24+<;kN*wV@Tbmq(NFhR2{}qZ#;u6q*O47P zQ7McD@SQInUjfTj{`~%NC9G+(W-z^<=g!=P?Jwz~f)zBF?q;TW8jPebwS_mWL#$>@ z@K4?Q9O$u*Fk{D7&H{nESTM#T>mPOZ+`sywhShV_ULaR`PAzr$uhDlNW^!s#+NaI1 z|JZWoWpd*Coz1&QMn%5c%j#23#e&57SxgG~K(9JG%&|xYaa~jlhE`bjK0wmeq-E^m zb?g${Urdl?W;!X}H07Ns!1f%)k){81=1T%;yhd%sWc5Ca%>!isNFAnsL#HW#&ip{$ z?IzQy(*GGgRakwd5Op7$MOt#d$RS(3n*ee$m|Ee+3f>{H>Z3i?>_XyabNxDb?~5$P zN?AH$pRiVBXS_5l|GXq9$YVe%3vQ64;MyFkR=oZO-dkfFs>Gu}x2qJe3 zUkAiyREWdyXT~4Dwq2~Lq9vRzlv5p4TV*KMuWPh1Ml*c}7`zeOK3cAH6MY+JVts2h zAhQwIrz> z&6v5;sCv#~8mr)vuqh{h+}iI$glHaa;k=gOIx?8xr|FTE%8gn+s@2-P;1W}M(*{c2 z&XWLc{sL`wZP#x1Me$AtKfC>qaADvZq|OV8M5?EUYuXP|t9WuCuAZ*Od-i5*y1K5$ z9~cn8b^Hsb9$k%8E;kJ97z|F9$nr+Loc|=nV8v*Ekw^I?&`T1(%ZG72#R0pGfB69E zbc>KnZIQGtk|_2Nb{1=S{}!9S@KxkvL$#)!H1WG4>>MLa1A8(G+MMJy-^S%dnwJ81$I8JMUtyK2Ol%u^iM3%_gJBGX%htz?DiJfH9Laun za!O#apWoYxM6-*gFC9I>&eSh?QB@!}ULYzR<5jHND%Ps(7)g!q#&6Db7~_9w@v}n& zu8zQW(@HR0F%zpBPhL^-yMbvU+?b;kWF4|;hASy)4Wbx{53P<3 z63M?=o#npf$55#3K=gRun-<=i-Y1k2e##9gTBUs!%28tcTJp4zsfOr09tI!#$Jv=aMlPNl;izxR9PGrJQh9hKJ#d z#@+x0dwEsUsE>F>KR#u~f6wI;-}CI9$KHL@Sp}i%5KPF`TAjb8WbLDgngeOtwYzp{ zlz40$3K)cE3Ri>{7Vlcul?}}0fnk7t?NHFC39=eP9GS!(I4I-u==37%8u=0F!!4*C zuF*T8fC zKc>qc85!R>HFv_<4FiUg_VeX~p?l!0Yq(M1J4Fd;ba{d;n_l>tgxf8JbHppjX1%~Q z@`1Kgq#SR$$=5fG)>>eeOr{J?(D(XfCk-J+v=skbDoA=cS8#lyr;D-ycB)W{SGCh* z>d^-}IqjhK4R1o^ymRgPq(LfK|Ix_J^*k9@Pm7qTj?Ux=?YOq3E_*$deoh?)u3;Y+ zL-`W9!$dim!h(>`iKgD@bSMR(@A85l;4{q$RrmZ~)^Nw{Z}7ADh#TO+i=y_QP5KUF z!I${ZO+p_=$ERuNMJi54Dm?ftkB#jTXY2Y8;rOOXS?bk{D4!OLYH=8oSaLs4^eL_^ z9^Bc_rvf}|XdGd;q^5r4fg;duR`ckW_+U9j!`>z`X{L3&rG&gI&v=%GV+sv{VudyU-L^f8MUoReE#lSGOtBf8O)yv4v!G zCsR}E!0PReA^yyEcJ({26VaJV_vEUxX<`x0L{flMV#(uT`bWF>hs%4#0*@_yKF+Rc zP>8u5`C=607)$G1LGnVNPUp-WymZYAM__BCu~s*~$F)cn?Gy}^cn4t7gRsMV4D;jT zc6Ohq^pA$$jZpQuRPdv@oYG|UDE#q84=dmw5F!o%BQjmKl(LXscCi`fcw@Jihzz5p z9t4%)bhBNH{*hksf@$-wU?@@&&Fx{PvBs{k$16k5Xf2sraoA1kfk%I4U?>Iy$xh(w zJ&e!{W9JeC)*AP+LgJP4oS2`j={z2C_xXg}s{GDH@}@M~@cW&F%3*Xigu-#_{6zDp zxy_|C30**L!D-~Oia&w<^jH4<$z&Z35QU)c(qQ+!Uq04Awe{7+>dXnRC}XlSN#beb zR&10La)$P#r%4HW>nLSn{xCgrE&j`nh&Lb2Mb&=zb>5WoyY|U?e4~EK53_GU` ziL4rP@3mr-4rpm&0*AgW#sJLxEXdF%v_c;f(s6kh_4~ z7ToI)-V;HJ>Xl2qd%GZ5VXWosP5=AgK}Z()>=4uw+CX}0Da;#j{K>eGI`OU*li=Eh z_dS))^w6P?p7+QPc-Ol!*U}t%7`nwTIrlzMCflMWF@CZ8kODV+fSjzl;$@|LE40FK zad_rs_$+Hq77Qur@ zwD7J`5E>5-gQgmj(EUzY6=SQAcyyk`rYSO&kcPz(XOOCm-VoBlxlOx4m}}gU`&N2p zzeFlV|DI3n%Vj0KymNe5-k*Uk!5-0GQXE~5zEKY?RNq?v`J z*1hv^l2Qv zKqn<6zwO6GIk*LBJqebiKFi!EfqYG5BHOMfAA!j+NO?V>T0*`T;X|xZK;D57$Q79* zDu=sRj}MnIc&-^a`haVsHY4y*0vDHNTObytcTyVYs3U{056W^mSn{bb-QF z^@R`SAz_usf;V2f;v{!4l$V#c`A1oE!hR=B2Ch9gh|jtUFAjr{XzO6;mwS&=c|NsI zx=-VOTf9Qc!7^AO__i1*<$Fh1sD)F48Xc^}!2rpzFf`>@c#EUAd-D9C5NJW8m9(L` zX>L@cVKJIww$+a(3~OLf#G81UTWt zHB@3@hAo^B%;gFP2K+x~QnBNnvtkws)9PZbm=j}10`3>(JR%!K09KB+FVB(V2pisx6Gw+9l*f+7~!g}a8}L5-i?nq5tU$wx#?-j z4qO7cB(!Zcr-sG$rsw%^Aaa9f#RTQag;@uJvG7^h49I1oU= z`B!FoxUN6JHSyJ;*qCB%W5;CuU0Y%+#?!Z(bD8Prvg1aCd2nn4Z2py*TKhMR4y$e;qFBL$;*I8(9@`|CDREY zutV`3$o8G6kf}5ar!AV;Hxtuh9J6}OBR8Qp2{)-=qtkh$;Z}rtCA5lZrLNw)6A0)> z6~-6HN;u3 z{MBF6o^^=n& z4P!Ukn&gl+l}%`v(MJ+UTNiD8?_pcLQWt4sW)o^@3aquWixzVMmK~NhU7}cB)-e`` ziJLq`mY{!q+vm0>fM>G!sLYVyvAxPa5t(So#UX)=BJX2>Q*@!TRC4brCtvjW=7nN6 z>6oMGW#FV0;aVHUiA|diVXi=yu9LwpmogsOm~f-><2dz2?OqB3e}S^gvaA2bEoPZP zvv0Y@AGh4%Ti0M{V?lgJHx%yk~zk)xE5D)0r3#fr=b z%-~ng1nj{Muu}KP7qz(zfE{x$XMZF8cZ%txs|WV4!VNd5RWS4!3B+KLVh;S{^Gg$o z?z%;B^*stl@mibpDl#u3C#f;OW~Q+Fpr+?4X>M2UCHr>QH)MlkwRV9}mw$oVhY|BQ zu&*Su%nTg1?)g-9d$(;TWBY;aB&$;Nh%Co)`-l2F)1;OHUdQWbHEk`Nk0N|sof`tN zE)m#3g~RnIyGi$|kSTRLfYj_uiFs%vv>q~zU^5IUer>VRrdApJE;#)5x z0#hlf`9D}PLEr?{clv+$dh=+g`~H92E_-&_MhiwlQFenOrR+)Bi%19wVeI>^D3xVU zvQ&0sA3Is1EEy)t*tf~p#xR!eYr3z`=l=ZebDy6-x|~kuijMd5{dhjMCo=GG-@tW? zn|bxuSJKHY0m^dMii9n+Dm|)JHJBtnfRjyL?D2H?6`O?)k}hGuY~C*XlR&6~w4&(q z0zXxf#MC~S+FdC9Dl)Ww{ZybzgVIjILe6Ap2tCGf7OXM>5!~HMJjB?B*eBvzCR1N6foN>6Egy08oz2A9IymA?PPwXXDXc&?bqQ3yr*FMO`wrx*7s*>@dk~7ly}Lfb>0F$P>9{WSEo4!S+@p8| z*%w1<(!%$-|BN=h!P zm%{mXL(C8Clg?@_b(V#HKs^ea7!wa^*v+E#@8&x>XUQwae(5Z`9A|gU3_0NWyfB-! z72GI_QvXoAh($MPSq*qTTOQ04dK1DpdZ?4pMy<%ZaWnN5jzKhbl_-%A@iEHqDVTaRBVGzs&L zY;=A44)27rAYK+JJMOy`6fm6ubm#sPh?T_mvo_B!L>N?w#_1>0&E$9KuGVQ&B`oUb zayF73JN!|2C%vtxt&T#bXzd{zzjF&Eh?6YCNlE*wU0MfTXFs5bnZPGRMrj_s0G&y| z{iI9qPAko{R{wQ6wRC^fmo6@e&!5@L09Ife6BZRZA%m zg6Piys`2kl6N8#6oBG!L)4fS*O*11Oz7&nJO7ia;r-KC;d;{_j`&L>rN4z>=x!F}Z za$@zw5qfEv{ZjsgG;jLI zRdJ}>Sz4=*G0W+8@-Xq_QTX|1n=0S)L554o`t0$-rJC&60U(N6WTzgnKBq-XSb%s+ z+&5^))Xfn(G@rLvvrDlplOsm-A9MsDk_NyhxJ0t*d+o34>v;lk$G_sR6|nsCsDf~V zv0d%dGXSgP;?k5U_+g)^vyF6EkV36&<3>%y@Y=V4;mvYs&+Q|nlEph<7wtG(UgK;?e;&y zq2GK_&bIf}D(o6Vdp{b{^c5ce(r5R8q=mFeE%xO$95@^1yJ&icB#Lor`>1(0y&qML zKjl8z;Je0K#RtLcpE~)Rk$*={WJUjvl*l?_0_TzGe4*4EHy*0Wq!_aJtxEAtPjTB$ zO2Zh9QKW{`kfNE>Pa zBgV`^nLaKhI9p}ZJ4B9t2Iy=k$8*thq3?dQCp^4;BZ7Rzq2;J<`o&_V&s{9qQsHf) zad~pi@K}~cqR~2)8};5`+p6Y#I^26!ExA=S@xz{_PKYGQpRqSqBe8aeFWQSTXuhUF zay8m3!WC)a>k-ah|19GLs2N#3;_5rqqj2k+uwcznsT4N=O^8}Wp2syV9X3;i++ETlNBj4lV8yT|4{x_arWmm%c2oR8nQ5*0 z=2CFKz}^Uhoc+d6tn#hm)c^4j)*6~}GhOUW5z}e7d97<}{`qQrH)Eby5MfWj8K=|` zIz8pw`Z!CqRq$y^}Hy!$!QMLsIXy~xe(k4CZP=V10J{lb0(miNs z9~|pVQ?9vJ+ZJv>E;yrBwK1f+uHmb4M3e`c z9Lz0P_^nS!imM^GJuNS8I@RT!KC!zIw8eM+L@VnFU@M7gte}4Gf~li=&SffKYlnVE zQBfNzmEoH9ce4UMM~D;5`1=Ee!9b!6WRL%PuWV+NFwezBzOrh0M^t(g#iK>DcdNAX^{oKzpRHbvOfl0OqF%~1pHGY^hn8RKuO z2v7?8@c*$(!3Omee^{5wj^6Nqna2;1gpiMJ#~${5`k*aJ{L(?ho4hOWNW5v(17}&U ze{wr^z+w(@ZnbrR5PG1#bIgr-K}fFa|I;>dj|wxG6js-7YLhqs=TVB>wHW@qy(oey ziMbq`oo(Em^oMjE*l>6q@~y0S2p)TqRzqi;DR5$p z$L~XCB~NFq$Qa!*v6Xyilze{^TApWfH{><3UUOTIh&2_7uzMxNHuvH?wfdZLu)S!T zv0Cvbb#FFWD-IxfcH1kEWtpQDzTds`XcYxNxJXCXU!*h zjfBGqVzcIWC^46RR2d=ZwLqV$w5#n7MV9yj*pQC~lK{5A^ug3+C_Ato_U%%Zq#fOh z)BUEMX14v99nDiVIWBVFQZ@a@22!)xVe^!(8WxIcGw){&4+D|OpVY9NU6;_}hp@M1 z#CB!+lIxB9k$qg+*tZF!%=w|vy~+?lU{)OojeqU`5<2B6-79*5atF?Xs-Ma9ne_cdUOPs? zW?-inB{5Bd)^2}@1_rgBbVKX7!0_3F(`bi=<;_lHy@qq8Bs^E9^sD`_G1L zs($(BS>G=SqdT>9$;rZ%|51NqhXkBT`^OCkE!e*c%tZT!R)wJSfd?C1w`7Iy-0RCy ztLN#;2(^n1dYC>&di{1o%y9g&uEWSndDp39dlcPv@LJkOJv)nEN*afP(Z-~F{*>`8 zbHA)B{;1C7e?8>ktEUiimof*0i;8bL2B;vep_4GP49mT~U)K=O7i}rpY^qbHQp?H|VWJJy@4kbXSj=eG9*jW!{d+ zFv|+Zky<=TBkcXDwBzXq#ovj#@wpUgAsdc80%hae-ryLtoptwZPiQ+Dv;H$Q4vC^>~Sfj_*Q z{EY*4#rrM3&=384;$Q_uTA-?ApODdz&H&poak>k1NWKJYsx2sUW7hx4^b5KZ zdIkKE(p&XRzs5A52sMa2{^5K2uh>3V6zsAe_aun8#(44(>6!%72Gn!%Lj2+25gBf9 z7GNMq3^(kMt~6ac$`-T&!UaCkI3)EpjM>P1+uC1Sea^r(2Kg!7PoZWg^X)^QQ#=AwJL-QN?|A$!yGyH$KR`;~Jdsz>x|#NGr*iq*M1o{+&xA z&w~F=Bzc|3rhLW~DVwcwTVL-=5v`H5$v5u@eGC9eM!^>B1GdTePri&7=%DQS@55f)V z+#d7R#DDL<`E$2om5JnY9y=u9*090f52zbOf{@}<{eZDUU<$!e{9vt&X-nE72xLpz zoyOcmLPGr-qLE%aD=AyiUv$*0X(WhAJY-XEAHN~A+l(t-5$18 z!!TcEYt5b%(0}F?MHLt~Y;9hvB4k^9L)uSi!r_Fd-&K``U9MEYM0v?AiESr;X20_& z70xa&PYx1Y%?2C++&JD(4^X1*I7^YJKubv02z0qc;BbipJ~uko`xxd$@rRdE!RDp= zP6tU6l>(IWBY#E&v%F@~P0W)a=uRUo#$UOM>WSqOQXvs~AXfq$QHuxQ329?fKXC30 zV~hi3ytfZH`?_yL0%cye`^NR-cHdR`1kX=zjSe_dur<5rGt#=Fi)f7SRFXjid2);5oa2HPv6>`Q0QMCV{jHO+C3+=eaE znL(QaV__imA^=w^toy>(NqE?sk|~P$+Wsua4`ckxDh2muBrpiRyIJhRIDPc-9Ebf6wN*nSFu&7Jgzrn`a}~ukQr# z{>(HotG*qm-@dih+f4w1@gd8x{y=_k#w{4<)aoU9Xn>UNJA)(O%{E`_m4F6PPQL~G zh(yQ%`c1qtRH=BNyMVep=)qy^J?6YsUo?T~l;e<%VUMaTrr1xo6Xw*E%>&yQ6Rkgd zwQWJqBHuESg{iMD@F=XS#-kibU+te!KSFV*@-~LZE=JXRmK||*rJsbRFWF7Sky7Xj7(a~uLYUTRgb>L}OSB`7XVTW+q>Y|1P zewjbbVPG`bmAFKR{M~fJ>w=?IimJHj;>WEqgk9{7bGZl|jpYGNUolExs(}eT(udGy zg$3$n>1oJ}%gJ$jNXNg6Q(U*EvLV*r`6V3*ERRcSmNv}0(!gS$c}A7%kBb3Os-tRK z$5)ePjW77PY+x=Ra^Sh3LA@4|_?x9^_MZN)X+=VgTkEecoa|~Lo4?z=dkN_SI%QuM zxibSK*0=O+Oxr~rk`fr_+vuc!ER;5WcLjn4O<=%{VH=+pfQ>8HDk&&I)ySV*=aq0K zE_b@g^K5rKfD|8X@9+m5R=y7g&WryH)vb;HePTt~r(FyHnf8?vW}4S_cjOHN;>luA za_Qn0W2Aaxows)v143i;9HjPE@F>>&+!N>1$#GXLFSyekhxOB*zJEgS(!=l*GHV*~ zV2|%%+GxCR=fieFS=h0rR711RnFfkIc|CHLw+afeta>uS=n>A^%xeQLW9%Z+-hY%@ zna~};dW>TFmwsTxo&1%`WwS~hGhpc^GJhr;mxi(Wd$G9i8qYennBM#L>X*8<@)$_} z)CmM54Ujbb0BuJ>rtM6Ft0#5=-!8O73mkX<80TDXO@KNxtjQuL49n%2C2{i#%6M11 z6ukbs?s^A50+0Wc(+1U_h)qj|I$4GfjooO*`JLW3Qj)|BnhkK7`$ETtb~8mC)$OrK z!)Lz_O)5pD=IAltg-W0kxJdy)ZY4UlWNf_Vw*wBgyaXIaHp^qCC@V`(!J?@t>sE2N zaPa>3?kB(jV)1KnR`%IGn`1!E@A+_p{(V3e6nbj7Xw)Y^={r%k&*DCSJUFS!yptPY zFfD=3?~3bTGkVf;j!$F4rt#T)&vo#Oekd$lE>Zl{^X)Y1#FLjax}$H|F@3hL&Q8uZ zz8mdY4HvpY_u=eV6ngiWQ1VlZPF&UvuO@m4ikU6!hPTZ}ZQ93dzFlYmc^6_ncw1__ zy5g=WW&vhjkajX+>m+zTf@Nz>he}l;>ufRbQ$hhqeMlSUJ$Qfkl?a7yT_N6nK!^AM^?SK@cX*u}gbEx$k3CYJ8tFjW7bq&O@E$|*0&pKybgUNxOB37bKIVlVt7W}-}2ln6Vk>7 z!K||J?tb}RSwdT42I*C;P4cO#JI8-WKsbV>Fk&KtQ5%;m(@!7_pMAGgRy>uu_9ELJ zLTxpcRchn-je5kBBjRDkH7*3rh-Kx9f`Lh(lE+NDogrI8*NPIO;R0ui{Na#<-&Kjg zmmt<1-PD;1Hw2BgbzM{F_bkF)U~k^Bzq&?VDHw<(*b`(N0IJC$W;7xYTxM4gp<8M# zj0#>=k@<<|i!1|Q{QNQ3a#(zStb>1n3)TWGvi_`mNc-JCqCtB`AXfDb@BJ)|qNJ@# zqp~(aqpBt;U@T4(VEQL_#N08g?cnF@g)r}+;j@jaOfogily#xUnnKL6&jbTOveliA z;Dj{+7I<0md;kjlB$Brn8Hblp3C5I(h%;R%vc9KDSFd`5>I}>hjHMn(b(NY= z;6cVf4mlB?;Ze|?^bJk$Bg_%cG8u`J2Mau?>^gE$hzp%vEonLu>}q6QJnwdf){63M zb_0$*wb{jRavPBNXzwa@_k3(*W=Mm#$6e|;I-Vo=>4YY{81TeM<04d`P013L*)Bd2^ z1Q7EOe`pMN#gt8qAM0p|qIonaVXKZ0QZoc*1b>i$p}O%OvldFQ2GfYsQDQ2-nQhaffdLntqPy4sVsNxV6Zy@AWteT}IPPyb;>{ zBtNQBnt2v(ymbXofQCW)+9uQY(Ip_%`>3CdRPq9Jqa!M;3bOCjJzut&_8Ic{eRDbh zef?!^Q+DbGg|3>g;Vy6TmTnzb&6DUgMjIfy4(>y+SmQr3dvGp!>Fxg=897T|JYOx& z!;f?dNuH^)W?i>6Gg4*(o&!H|`DBN)&$j7ixq7O2uKiRO%4%U^nO=l+ex%9sPv!uH zs0^s`rYS77qLFF9w?ZxkzK?T`YbklV5##J_9!&oXX1uSvmf~Vi8etNyz=tVnYG6K) zfa9(v+g)ZmczIQpa4fr!^VI|Ln#7Dbt?O(3Z~{Nsii{1|?EAQH(7!rev058*=ji63 zjw|G6U>F!CoD%%cPuK>fzf*p2fo7k>d4r7y)0)2r0{(v8DeCW)i7(a80Pk1EmB%ju zG5@E_vzLQ303uFb7=|IT70-{@D{jr`=;+Q^*@b1Po#u!}$YMs_=};=-3voV4djhcz z^fQegj@lz^;B`6o1sgQb_zttxGa-@7XW*M4{13vbz$kXWva3bS;xoG?^ipGn>;ap( z1xyKA*NJl`t@#nWUGSX%a*S)mZB41({sH)HXGQK&R}c??IXrcmIUx#vZ(6<-46JIy zEd%R0a0SPU18+f+*JeQSPJP8!>?khQl6?&sploB@;>1A>>g z;gWwira^Ucw0!l+0-oKnBql44lZ>(Wm^jRb>$QNr0Fa5v+47*p8=wu6C=mjXkA}4D z0L31U5=!sspQ+=c-Jl=z%2e z)2oxU&~%|>oJ$aMq#@G=G2s@GMz~}gf~+Fa4Qu*By$pq+t>SpGwR)D1kI$6gm%(XP z=@(7KrNHvA`vav#q>)XASG0;(EycKwrV9fBWt{n6>?N3bcWebqUf*fq`u~}GQrHxZ z^nx<(u2XPSE0QMR!>}vMly51Hk)K}Ff=)NHdmCJ4wK@|ic@f-F+EEZRYq}2st9og> zFexS(vgrK4B6N?K@nu|~W&$t?q9eahqX09pjcf0H*wjumFl|CefebDXQ_i0Qj+UWo z{{WbfkR zKnVLSH}7x|9C|{Ve@Kb*~7~FPD5)S-2aU0v^2De&wt3k7~4@9c2bvmKZkQp|VQeKspeyp@NW3m&LyMg+2gCYFo@*Wxh`eP1d?VVE!53x#hkp&6?vO7G;g z7ii(o!(tZ${Iy9oQudtZAno)XLCxgPrOGQX6L+z(EI^l6W%r5ZK2Hdkj+3=EwKLuS zv}rJih0Ms*G^}kT=W5coNclY!_@u}Z5Ce!p0BCrW!VOYnK2ODkX2qmk{*wk$;DFvm zsXupcYUP2cje2?C2M+t`F%t(iU?_Of!=ZKt<;O;*<3~1E+gq5Txr3~?cB5rrY8=s^ zLW(m*0uG8tI*o{261U=`_c^OaY4`(qHoCNlTsxwnTrl9~Iske6o`RA;#s{uJYpa|R zZrfTQh`N#Pc{b0>(U^E{R6%j_^=SP~;^kvt<~I<=pInpuko(joA0I>bjQnrLiHoJ; zW`8~X6}|wsyumMXOTp`G?+vkYk-b<}Ul|z@uky`Jr5ydv4=ws#?H2CHabSzknk*XD zzH9o7BEn#@$DxV)HZb%T+IpDwUUW0v_j7}KRdDN0JdGGS+w5PeCVdwEBx{aEOq=)| zcj(4*4muPwI<;5+Q{c&;wylLd6QaH8l}w3I@?6X>-&3?+r!`X$`YD&H{L$ydYY+=P zZ-Yc|z;?nW>e3o^&VGKl@$`@+v;Uy_Z&dV_isvgCJJQM*aDtiUg-|i=nJN)`8Jcfb zv*kp%`tF~g5xuwsoVPJ?9N8CW5(SlH9Z$PkE_@#qwN?72aa+3G%1tKPJtQ%1-SQ3! z5+p~9Vf$NWvPeD~a;)wV%Gx{%?!CtZOrFVob-XEM?)jQXrhar6Elhg*W-wIO(LI3&*5c^p&Y~-nO0S#DTch2YpLZ+G`v!$X z8Msl!lOaPrSaYwB){ueEC~m_xG5D%fXP7zBo=ML#B)4DNAhmpY`5pzZy@J_x25g7Z zjNE+rp%Qn3s~JC0_(bEK+9FxVl_K8`Ab`mt|FOTntXu?;4!+~ywKfW>HISh)MIuXb z*!;yA;kQG-nm?BcQA8tkYyO%6O%0Qk<9s9O=_N~IKWhFjFGXO2!g6eGnrq!}W ztdB)%3)k?hB=X7?RI5ZGlF&%!s^R}by5I4_c*3j+nRo@75#WOv8P392woeNDkp9Ro z7wWr6kN0(RY-;g;tLE^G0r3NA3EdM*e~fk;B(+G~J6<-cf)LOZO{G67QGYL(3>np`=-KjYC4P(1QI zV<4nR@AC%5+looesreVdyS)1nhk~SerIQ%*jHtofq=y!8E^u^&OvE??>qCUyvqpQ_ zrA?#ccixJlOFg=go?bCq`1=dyn%%mQuL6EC)J$g7-X(Z#8#!EGx!o$xvG8N|g!uh+ zZ~vFb*$irp!o}4WQVn9(>1wEx5DKgNAY!F0kdw;nMYLY{gSRqB9*}S$t;uyjG<@&g zulL3=7S?2PA*gB+Z9>`F(iTFE+<6p*Mxlr26j`T|I*BXN$8TjTsH@^)gt2*lAVSZ0l{zXN9akakLyCJXp^Hl!nPYicEK=idl6&*m!USrRDA|0#oF8ygfq4PuF>{L0MKF z8TT;cg&QLh`r8yzj$=|ZS81vTK*2QLy^$C$fCS`{jtLZjhkc$MyP&fIbMac{Uh(pn4_}%U7 z;JB;Oj0jciytol@Sh8k~&sw1bK~)NNW`*5Vi@GO>th77=C^^9di`GkGhb{s*O0E?N zH<&BF^0NzMI9UrjM7Zs*Du)egG@g9iq$i~V!tu%?sZ1f32epe?{?g4p#T`%JGJwBv z2<|dWj$2c2^C9z?;9+!=25d6{v>kv-4;lR*l*9#a^MOy{DcH~rb#0-%RW&uVS*i~u z!woDAKd3DZAl$&xpY9rjqxB6r0}qv{qteo3D5f;f@$dHid{LL7$3)XQn z*2L3u%h-uaD45(dB$`oj0+cx^%!e{Zvr}q&H=lqqA;#i1#wh*3kb9~^YJ`XARjLti zC$J_h)UzN_PmW9>Zz+d8{9c_6Xx$P$i{zX?vV@3(tUxS+F_?GS`?BZWU?rl zQjm1&BLLkD{?c%uZ)6PAd&xc}QruPb*k(Nj%gCG$l$2jEdf#*FM5YVCBDOog5C*@SE3gMs=# zJwI5SftO?6+tail8Dqh~{S}}C2*IEOg+y`66-8JDZi-g-E-P@d^M#z5YjGUi5&|k8 z)c3nNQOn|o7(uQiI_pQEL}YFP)K58M*WZvy_r*YdW2qD<(;M31kV;JhCr^S<1E|zc z>Ml6N@29QeBi>~IR=4B>v`e~H{YZP{Q|3Sj^ig9Qs%c)8zC3XFkoNgkpX@{c>+Y6V zABN+u(sq#LMp&W*ESB_+2o<^CT`G0I+fetDQ1Y%a3OcQuF`K98CQSQ4L}G5z&Pj1aic-19_@79n8xhT6UrVT%(pfJ9*ok zzxd_W=x#_IB3wpSJqG7&dp46j4XH8afD|WU#!8h)w@?RHr)+EumgSa{zHnYyFoHP^ zRIltPq$|11>d?N>nx@-cb`N^9M6-z!i)L;qOw1ICgZ< zZPzik#JGI{gNF_u!Bf_m_48G@HgCb95tQ|^ zKm@lw2wGb7He%l}x|oHG`n49OtC}ubY^2wh2BlV?x5BaHukS>@7dOxO2rMmaQbW#& zgY2JKQ<8i~o8xuMleUBBi*N62Ge24=TBuNcT{xtQeUsv6Dw+h$_)4F23iiJJX|vEG z4%^`er2~qs0YTkzz4Y33;^p|({E_;drm~%=yga?*YZ&v9xFC_`?WTOd2{DCaThq+6 zQt|TD{AkvW^4|h7FN5*5Lh5QGYvx$I(;B+$ktLDh)KZIry`149YbwV9+wZ7XZqgZv zxG|y%2A~Og|c| ztZ|3d*MpLW1jye?b?Mt~VEtJUkx6En9(_2aN6gYp_xWHy+sh8i8(J14Pbv_FL&!|m z>`Q$Vp$@k^BPiXu_1+h^6n3tFj#L#K%7o|-ez``WRwZKa%wjC_IUV{^=}lVn0|aoY zGWFL40)s6^dYL)*^cJnrzq^)lK$D2;XNx_506q3VdOYwmihuOkmrfLfL@?Xc+85M~ z4c2N1c4d%`KrE=5y17O(}1jjQyT&1@@y1gM0~`mWGmk}=N# z+c1BjN4!8en_a13C~NJhPh}eD(SC^;Htm} zjC@h(VDHnJcGu^lD)SCAW|))H0;xaNEE*zD;~)QGCoI>VG8|ybo|D@ZwT)szpaA2> zqPRdKXd>&G{XFKJ2GHIxf&)Db%y1LgXSNo9?9fx6@G-cTNL!mHQ&V0@KwZBB_Ccj1 zRqiQIVWpBrL+g!k=aP=KTM|%ts#40uTwqiPQNG3lb>)3Dsl<)6dL(JtM6(g5WaqM| z$^%>Vhv|-H#BSaPnwjR58CRw&|2$~E%I>QjG%L&85{y>vSCO}>efB7-a-K|R$q9nD zVfJUeu<8dSu~b3cUNjf;wBVzDIt<*wD?zU;KWy;YU!$m$ftznmaV}8|t11UtaB}IQOjT$AQA4A}MD@H>6CUWJTcSk|Ln33}sv9M)o=@GDkpPQGrn9(j2{S!Wj^4I=@n)lF^#~?q75tE5MrnMQevD zuEpH-f9Ui%+#skT!k`x<5qp7YL`$>H!a$l;TKz-K`H}BMH@vGum#yzA&hLb$9D-Sd zFwa?#{8ID_9Dp;m=F-1=4{QIL+XV$s*VFCrSJi%P%PNi7)Dr+#Z8v5aKA}1ad<9A| zAJUo(HRcS*55SHWJpB_(M2OEP6uwX9dbQcy$VaGa_&*+`t|cp>ffXGCGdMvTxxb z8VbS<@P+R#uF^D#!fNB(A0rQ$iMGve0mG%=N_Y-e7kI>lSRDTK3ntC_L$ldy^J_x+ z;{;=#uj}5RKiC)ib5s_Zzv#ApZnV?ND2vYf=|Jjb-K45|e3dr3sKZR1yC_smqVtUutPt|7;#C{=KGD zE9H*GjZ7*=o#tp@vI_z3CN(1?(Wj(kpMme@$`z)6#q^SAoKnKUEnV%_K<>s zS(+MP0QQSdls#(fscBC5EaDE>lSKhpHV*X3gL9>9AAej8z4a4uaW+cQgbqC-Y#gi;1Ndz}CwS_6B7JSuh3eH&DMwZf$Q&eTFg7mYrC5AAA>G}j0oz%e2Qm$y|( z#*DFFfeJG?x_R&-%lmMluMld1^;1yEZ$0W)>O>y?xRRd>|D_qG=boU~y(a&4!KGQy z2<6%T`Y7IY)Ki4e>qn1DDU;AWm7W`@a+_!$#|I>m=@Y-Ffd6FiPK2wP{JhdkMZDfm zRyDN4uk-8~*#pnMkD+mQwDzE)^{}^|Ngj!MM#%a6h|mg_x#9X;yS_Cztb3In{pLt$ z*pq5ILS?-n#gmH5r)Qtn#h2*eM*a;f`FRhcxGz9z4YGuQq%A#^P z2>J`8f-t2%-he54n1yP46OAt%80kiA*El>%%gyNy`&#s?E%w@X9a$!0F#+SD?#9;T zA?*uXF0d&9eVb{a_my9Az6YpX8{+l<{9dLyw2(vc?S(Cxlxqzw3#HsoP@RCpr*JDP zGWK~gsE2?3Vl!VrHIUaC`;Egddhxn5?{uRO|_F}~DS zHBn=@qDyw2sSncKgyzmfN6VB-g2fh3%=#y8f^mmM19o^yh?bVGsP1KLw-gFkQvBaJwEB~5GFNo3T3#W`StH@heg zb$d@!iwAypvL!GT`V2D(Jb7hjhR!f1aZBDkc=o%-V_&Zp{U&?u=ez3J#Y(jw+-n_3 zN2b@?S5=XDxIzHKh&P{MYVkPc(%Grc6e??St>TuFfp*~r_glF7{lyDI#n%FD=zTw= zPBZKm38@+zVut{f+R3}~j55R-h&caHWv{YtJF0jgO*3ML|BobU4YH0+^_^Adeo2t+ zxxkT+oov~d^4&JYI6kt}w)tdWS15;g(iMQ&xf@`} zg!u7EpVnZmYJ9f4O%Y|^^kLk>A0*4(;QEx1|A$AD-^(hy1C)Y~Mg#YXrv83i<5{4& zQ=hGj5_i=h=@glU`^kG>!Nuf@L?>cURPsLH){sPstNm^4YVC(|_;M<{r85MT6X%xwsB+D2J zI!O&DDT;23kwaY`vAo`|P&^pNHr~n`%&-rO$wp6q@~KSy1Ik*i$ct{N(dVWrnTfvW z&hn%kE8g)GSuqNiE>HnO?|>}sB9m6)RTSAKK54Sgf0(Pe7cMR`YD;XT=thQ>%fM4T z^~e@R_W266&zC~f^r!A(O>*GFd&dzMlRp2snU%CjImz@IVxJ^en(1>S^qjCE%hpG5 zsdiqjpXOZ*7F_MMytr0`xQ`bYx3<1Y4#2YIai}PfPfM{Bkn%nHlK_Ppjx#T%LqM7x zm(Oa7HVg%v>%l@zd0J%0gOSa!ajpHEsXz><6m{+KV1+@bAzYWFkY0B!Cw-Jy=R7$G zaWbLBi|33Je9IAOTplrFD7(_xWOlW~v?7EX=(}~z84!*{nk!H7sC~yI*V#j=mReuy$4g zewCyV@Lzh-T6{v(uwY585{Iu$?O*%+aOY{C`S3b&mynGwJWlxPZ#M<~1t4$huLL@W(tTSA(y36%XJ;pG+N_<#wGt#83 z(R6wBtL-MaAE=&Nf6_`&e<}>;0k&L(LhAcyTsJY@Da&vr#ChF+Htp~1{8cZo^7R3L zi>BrN9wR-#1M)`B{lMgF>~_rE7usfwh_|>RpikUb#}`ri(^{}8@_Of7Tx-xQ9rDui zm$kSHBx*On7}PlHZO0_FgyW=XifBbHmJmZ*xPgj4)nZxG>ElbSR}*}xhsP%SIc+!q zc;<03_&qWBB8N@zD=)hF3#l*5?7DvC!rcKqFSNp2Cg0M{uhLd^f zOT@=8Wv?Y|R;h7kq`6V1&LPWHmMw`3S5crH3kAl=SF8G8fZIB4i@y?e==J{S;JHjX_M zqBU%fC>9IB^7fn8i0mna`M#;_N&(L%*mfr}@ZB5CFDL$C+M)t1$@357&i}5?+#JBZ zvV2-T+v?lerL#4F(E9;`s!9v5NPMe&7!@tzW!Le`v7(BL!4H`c5UVkz=8V1w^j#`z zToMrYJ^<&b^P4`w2E^FmiLQPicK)eu%3ojMCE|~pt--MZ4rJg|FCt{e@%!N=_K4%_6j!`Kz`@7JX1 zfiz9{tAzJka^PEf28EvT(O}QYcEv%lCZ`WBla84l2%8;l!H4<6=4#K|xF@o-s4X)= z^OEQvSyQB@C6!II8k}3@M3|)-Op`KvRnevcY|{!EkmRGIF-JtB!THjZ*~0uRKlViu z7g4bo8{~1+)K0i2GP>YkH${!kigyN6ZHYfAmwATN0#&+>;*fvocy>JUh<@dgM4-5{ zEB>0pAubmAZI8E`poOusSYXxMxOOGz+eXg&6hk|cM4#ceT}m>*_a!%r=%+5EW(UNX zM2ZJghxptMbXwVyO&a6tdun1p4B(YJWrQ~I>~IT`{cQh}l8x3HxcB=8_jLNCV<2i3 zYs<3>Z$$Ou_joeQZ(&V*?Gzktk%_SVQ456hNgWvxp7_0?hUk*hDY$OLTR|3Z(1$vP z^a0gQjBdha703kofC96|PTu4DdLkYH?Pdz990hFJ2VQ2Q#1-l*sJhRfwY>M?QG3TF z8@s8;H(O)(1^j=#xttMo==fd2ccHTO(LknR1(9?El@f7Co|(LsGv9t&;8L=^jNuIH~GyqlJ&%MEhE$YrFaqO|Hs&2X#gGj;A48r z$iuX*y867=OViha(}hn?-4nb`YRDNDkxVUWN99Z!ZYsMedU3u;=hjbbKKcoYAIS&J zkcX^=}{JUCsF`L7v>y-QZ+j#Jv( zlWD8L3|rDP4)pJXeW!xIO*8s$oOT384<5^!=0Ksxp~m!dg&LfOR97{nD?M8>-2~?? z826B^F(P4`j-l)>TVJ1ffZst z3H87yd7LkW<$PCoCd`U&@aRsX=f+6+1+(CS3LG$wiPQPEEV4$f-%RE$;I&*v5HmRA zztdhP#~-+U(tL}+r?;q-evME-d;jaWPW4C4=M+bT>ZT3iK1=eF8Ni0cdQFGyB(G9l z-kFN9EfD)0r}|eHWv~DGofgjX(Vc&G!CK3j`+$PFi-G9!zb5!?E0G|eZ`4QP8B&oB zBp&Jy%g!7(qK&~h2i<1HKOxGtf@F)Wz5B$D$*0@3Ch@;04FRv{gdP85T0k5Z;bNE%*5 z>3+MvHk;2=p+7>VrIy?)z) z>20ds$V%CyHr@;6cMd)idQD>B{Mf1u$mXfO;9Hx0&qQZ+$h&4vqvH8==W1$ElZ>X- zH@IqNG}Ha4OzvBJkiK~eisNlS^xS!K!Kr0Wy1f?U2$n!1V(xv5{aO>7sCReou-0?> zo|; z@ac^7Kzx8Qua<2}CQbr8um{u*=W=g!y~D*&Wkp>BtrBFbSr?u9l<5Byean^T3vOrt zcmygJyX4Lq>-kPNk&6<+h^jRTvKojk`B|}%oa`pnDsA6mullEuLt_OIfU8mYO zBH9E1Kgd8vxfYu>7)qCH+6pUrImE96$D73Vdkf{`XmVF>LTbPIjc{Ahfx{P*^Ijy7 zUb=&J_3O3?)Up`-#FZL@@9rlIBk|ppod1z#rw)^fQp>S7kTx}oTZ*I-6ovOhBT$Fy z#k$1Hw%vcY@Y~Fd;BJGp7XzY>&3DI;F&K~e0EM4tZ43;xzh3l2Y3P3rEwF&rv8#nM zVw{|3$-kcSrE@BwI<%YgZs)H- zt+j9&h@|mKTk6mkrCqo55PHkp)`6NvHS-PR>LBte?N6Jo|Ht&TYSyV@zwq}-m2{2X z_kL#2wKP)qvR3vCl5Fk`ZqK6fJ`-v$q>lHVcOCcC5NOShC&qZ^6D3U8(pMbwBQ2@> z(tN<+qRGq4EAD^*`K2@d6lsAI=J6AB{rrT>34}S018Ot1S;UY^4}Tv_G+^k@2*wo> z1I2py;fXmJBy1EUP~`O#<&AS3mc(^6=`Ey@^{sl~>x~04Xmn1aYkGP|+B)yYK+{G~ z_Cyc_Rq^-eA0cR%1w)q@H>tdWq0kmI-h?rt@-dYtFH+_j8UHk#g3N^yg+!+MqmxEJ zmkZcV(DV>EzW8!9YqMM6RyyV<@|-OVPJdG4i47a?%RO(nugM>fmi`>J^*9L*T)uz| zqXR~do#3&}NfqC(ALXLyKto0jF7e-+>^R|HmAdQI;35@BQoNIMOyv6DMFIG@ko~U< z*`Qv8l(Tw&P}qPUWR$6Zi9>O1mSeCW5X2ASK_Cj~o3{~V+Fn(0f1PS$cGtlYJNz4p z^wGtFvukSY*?0}oOaKe+jp+IY7n9)A zT>y$`RJsLaUnnC7TFVr7+enZ4iGJVTUl|w&^9s%jOw>w*d2j~-C)?SH64Yb>4Ql6^ zE$vKXr#wa8sjXMb0TK0xZKejyKt&Fm4>0NqO@+d<0f%L#4ck-wV>_N5FVPB|xpCivaZ(UPV<|FAO!gb$MenxUti zwO+~%z-o6KI(5!H5p*k%HP-_%i|0N9sFd3^=mpj26HZ34>p8;#=g>^UG7%J3M_nF@ zu-=B#0pteX|Hs&S$77-Y|Nn?=l38X$$c(IT86~B-Y{|^d2q}AH7D7WJ<1({XxRAY) zosgBivNxCgdtT0aea`#+z1@E2k8^IfZk_6Mx?Y~o$Mf;HKloTpnKKHw{yen18SQKn z+`3@teZ8M7qULt*TlLKdZOnC^0{4_>NAZQHrM~XGZe7@JtYTHiTo(e`bVrQ^rTMqy zJGEsRDF^;lsPb$ z3C&wh8UVO#RCOY!h^6X|xX+&B#c8Z_jD~S@k+={_wsN-mm>chFD`IZNNa7FuxLtUf zcTnPzhnp$o;G2O$!K5_yi*8ni7}LSvzd0^^YJb(nt4vIteV|_nRIP=tpQSn(H$|xs z`V3F@9P-Av2{$SDCGss`_fnl+ug?kYQEj~W5PQ(%OSeL#iuFIe?Vy<%BijG8N;I~r zh9s>b-u{cBL+NfBFk+{*1T>8a-kUWhZuU0bRKH*+_Ags(Ay!k9%Xm9t|MWGjVrZdU zGfY>T{u3%zUuYGP8-Z#5E5fui;qQ3?w>qbk-ndzxDv@?z{BYD>ys$pF=w;d&CCZf!dpb=pMEO79lXbWU{Vk30LjCHk}-F2qm%X=@@)y{)f*<9rfiJzu7+n()kVBO&q z_x8Ac9JV93N`v*z2`H%eE@h2)?hKC(V5h7M;J=yJ^k65!R3gP1rvRh}-8b};@`TOe zOq8bWN3Z{!whD)?BU%fMwkuGMk~mL305T;N!W(UlDJ-?}WNb!+bC@l}4?SGSW(ydbAxSjZv{vseV2or9gRF8`FMmjkb(dM&Y-eMy>EtPiNur7y#Y&?B&VIem_OEtiHs9&b(E zeE)n$l;*=e-m~e_(rS@^pv7;&klKR(Ox51{0@h9T`a!~@8)4GIz&{Mzo1k9XMcC^V z@m#wy5gy)9_S>gZx_+CS%Fx)Q2dj;d-&_?ndn-rMivEDQ1V zcvfz^MXeC)iQ--iO5EU3Ok=4WW%;%s}v)2Bs&z*#HFd<1Ft>*9ht7>oZaq21w84C!w&1F9~3Y>is06=i%JGb5HO$1z1;_mj+^>bp$YpyGC6)CfBg);u9 zHUaMAbi}AHE8sx8D~wLci8JAjeP?AoY7O9nm-UE2dU1p%mW*5XIyBh}v3@D!U zeupM)DHPb3De7yNB8}OOA?@prc!qv_7PaL@xV^GmQQf~&g$1}p?NAl<&0%v=PxJNlrOWn-$X(NAB@ zpk)90;cwq1>aLG*ilZ-V%g06aq~D1@>VMEloXjID)!h0$Uw!7$5I^yBY0FbQo^J)Dwz9xgqM%@f+GEYI}xNM`u5pf0Kx#RHGjSu+F0Vd&Sum z>hcta>QCHsM^m%xAr!A7L|8WM$3$P=I_zXdlwbCGmNHeAi(T^sxz$pNmfJpM&38sm zhd3X%nlxXSSR`o3tghU^s{WTILXhF7&wp-!64Ptm#&Sj3<0E(25PTDMr5wPqrrP3o z(o_|*cDQxTdousdV^7Wrq@Mm{7G+Nadu}knJb(SDKGR0;4)`^A%(IMtT{X`$rpp?9 zC(qFrc{uaeC1CyAB@6P0&-!C!Nh#vbVYYm#zwVVtCqe=1oZXJAm_{`mR@)*!@Or34 z7sKFZS9lBg)BNw{ePm?l^D$SVG7J5YzrZZf492fyf8!AHG`wRR24r4{p zy_0?JWf7BGZT{y=!I?i5+^@y}CRh$tH!!=yhmxwc0^^5FCw`j(Nx$=XoTd-3LIYVj@Y{?I+U8-sETozOc9+K*zh8# zA6l_Z=g!2M+NPfu#ZRAuPK_;cJ4CLw{lGQPmrzc%vsyxtij&xJ=H-Z?i|IpB9~y2C_@P}m`Z+o$upB7I9!hej8v{%^m|!`D!Aqz?^hp7sKOhDt&52ejhT!Ep(=r5_2zCIwgS~H5>Qctga3H| z{l^X}t$XL>ebl(~pOz2US#KHshUaiT*!QDI05aX#6}MFPx{R}?@TT+q zAZzVY?0#PHv0&*@%*I89@jWgpWAi6r7vwih?Lc+J#9$j@$|4*AFg59X!(Dt^e+w4< zqv5L8zH+c;+H{0Ge#>ARptkq0A2~#V!h*@;sejaQxOcFDq1txNV#tL~WJ#1BE&_8l z-MjGwaXa+;Bk<*9RdX*37Hf37yQMRReOAf|{PA7jbY*Jt#HoTWIs$nzltUL~YDJpb z!E54L$ojPXu%KFPhrwfn4?+TIUoRc>xZeNBzxq2u`i-);O!NNqa)$*SS_!Q>V$$nK z`scj+57GQ~SM|9jnYoQey3w8W=uH#OJh{0~95tA+;}kh(0ejYmejB^w9Sb`7AQgIv zQV+%6i^s95KIJGF`ly^{`)vU^VnN*ENAb77QF~t1a66aLvBI}fzgic(IiDLgyJ;LL zpeOxOYQqBbDgUI^&L6k*Q1^|*)uoly&m4)OkJG*yk36ASY-4`Y9|!u`N#KcPalgP+ zn`JNe5FUL_{k3o2Nkw5s>yUE%4@SUS=k6zvv!M-G@_F)r;E8$v9GVm+bz z8~o5p^3OGv{k&xq1Nr6UytSqkf~MPeL0urC>A#gZ5V0Ah;k~CvPkfy$6f^mO%CJ5m zy}Bd3x?1p|mNS=ExAa8b0`*$2J2qA2!dz%CCCvUjZEepbuJB&GwA+>3m_8)#1Di2l zJ{te_tOpe<*f4_%r^xfw4fh{jG;dVzKxb#-ieKF0m4iBtZms`%)u5B~?&o<)7**<+ zNKl+TiAGRP?d3N*PHr*Nd&@M0kL8&rCu9>vPb) zvJ>-66OA}OM}DR0!G{bub-J=5kem4L)w7MPZlGClEVA9)4;i5kTNwPo>vGvGa#D$0pO)gZ_yh3krghv^I|4v1x~gW-xt{C9ejdzvNmE zZfw@x+xg?w3R>a?oyX5_gL#JIl5@uqx ztDjq+B_d$kREY$h|HzE*t4e{1vp8eeSivq1I4iwzQYIvDRsct+u4mIEel18R83-+^PC%Bjp2T09+!K-*CAcEyKG}%8IG)S0{D=sQ`(6Rfb zz?DS&hIHhiJ<+_34JcA79XQrA?J+z4!%QS$ozlm#weA<=Wio_v9+fi=#^DD|?CDJq zLp@!?3#!wXGn^D+-t~*rrSbfA1+W% z?NN8A8=hmY4=q?m*dYz7@L++>+&i?n5Q+tPs9yjiRUC`)slk9Y79rn67~s2YbA1;(00(ID3vc=r0u$GpJ&7QrO(H1~y08P{3(0;6KpMcus5 z0+P9pP2oib8Qnj)Esg?;RAevM!RWu1wQWX21A{RGd`>MP6P?1$%$2FggBjeG1c(eOwVi`QE)S>F!Z9ZdHESCs1=I1K( zK9Pyy>5+o~{HU=KC<6Y5vJ!5O39(m8+Php)&dbR5fj1rdZO-SYZ4|_YZX0;3AY{>f zeI^nXVJ}R!v0k;qPm<+7%vVVf<=-W7J!DD6=2$Vzv&{hW8Ex4homY~s_5gIjiel>dyG zAnKh7JsqF7-AyS;Q07~PMJGy~XFAx~I!qZaeb=KC^Tf2Fi%oXQ zk^h~s4E3mULFe9K>y#l=;Qr*m+(dS^S=!BdDW+{(V=~V@;hUi}uUcf39`!5aYy63w zai%5(ysci)@HDRfu;-|%rk!;*X<)5Jf96r8C2im~KDy~_|jyA{?s#{;0)e|kcSGXKDH;{`gJkg-ea?axMc z<)xhimXk_)(corF-N6R~x&z+uMXiYT@B6Et?QQe3Z|XRd5oQg@(O^t7#Llm3tps+K z!^rlGGT7x-n|guU=<;}p*Kcl23vOk7E5#zC+wPmBmg$$ev>D04FN;`onH1wxBuyK+ zux5*3Zna@By=_#EZxZ~|vkSJkNzs20KJL|!lu)33|5pE$zDoh5k0FxO+wM0XH}7eH z&%-X@-TT_dTBT-RIU?M~#tB#vCY{H$WXBJV1}jJG1chvK}LH=Y%4 zjLsUV*QH1$%GS=`dO`Y#agbNV+)jr1 zRp?Wu?*xwEH_pnkZYv6`o5Zr*E``NyIC(^TVF>oTSo7!yE~ji#0+0Vsks>PF)WJBC zv#Cn9-bpkfE+P8q6C2^HgWX{h+O@Wd57omLFfwVQTWngk9J2M+dxaHzU_u_^8U<=p58 z{QCX?#gKki?qzDk{5?{XOb2(%0Z!G>g}OATd)a=>qz$=G%%v8QMoF0V@W0Lw+cSen z@XJ0uyW5^}T^bUxo6`K(m?l&8sugf0i2r`DKvC$?O`}He;@kg*NzaA8ABq}gd7_oAwC3YodbGf>`;EK0Lh~9FcN|mfm=+N7! zLrShS&}8&5`@<>7g}7sKM=WhL$wnPu!z>L|oGsX&KmsvJW)NbVyFp&-bgs%GlH0ue z=g!#(H=Fux{Q237izYKNQY-}J_8#x^P(=$Z@T=zQfBr&*82xc6NGHe~+YQ&I)?gza zPUhuBY0iJr5C`TgFJW!|1L8s{)x~-n1)5{5w?gUK8F|@jqrU2wK&GE48J@vE-)VT* zLbx-?XDD#6)I4?3+#Lk|?%IrhxW#+`{^M-}ZwkkG%TkF68A6zaPhFF`4DGzhJ;5rT} zX-#kL2@Z3Pqz7sHymp7LbV4{ilHPzQ=%&9vqc4g#V1zVZDJ^0 z2Ry}ErC$!mPKKWALzK#bjwj^M>9jw)x%u5~WmMcLsGB>Ax1U!-nyo7$1(rbX_sdqv z{7J(8((PvRLPg?C3~Y+Fm?eEq1y{ehYZxzVjj;uR`ukPatAz+vuwwd#W9#TI`%=|{!qGXYS8T6)|_BJ z_8R$Krw|)XPlimHolsrcJkL1w<37@>cN{EyH!Ac=rMK&3M#k7w_%ZgixTzE(Wuk?z zcx4lT7&=>50#g5ZVMX5(SsgMaY~zw-?gSnYg0j}4ig@`U-+_>bHX=U zdVNlar68*kTDl55BPaCsLtA;iZrlJEhN3-OAkVgxuvzj)PV2vM;M3#2G5^ho9{=}M zi(1-L>qOdAiq(mvct_lLA7P9E-mP)>Tmlyrf6-O-wAGo5m<$6W0xWl^D)C6fLlkdX zYD~;S8n>q|4Jen+4+4utM_eX}nRJ1zD?%VfhRFA`d}hRAdrSA4B?Jm4-FZEHbDW{X zNdf(sr?ahlA6&SZR!E9BGJxQuy z{3n(C$id4w>%VE6^5tWpQkK&a6ZH#0#Pngn4q`h4>s8*n-aiMe6rrKSOnqQU+m*{I zx94;7AOZWrHf4jj9ej}$x4XHYA

        I6}8J};=4p-G4y?nuxYm}UT5%AtI58p#Iz?} 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%0Ap^!i`ggX@SuHS9yw@a#n zt!Ho_H1>zicsX>!_kL=wSNJZ=AQ2ol95!?B?)H!Vu`aJv5#)liL&h22WL8yY`#~8O zp6HD+5j>qmFhR)2;W}@`%vO2iwAHBW*IG|RzjG0XwX%qe9@lx01+QuEk~__))A|XC zA5No_s7d7N(`U@VmVbyc@vW_8{3tq8<-QuzO{dc2n?5U|5uT6@{a&cbe6_`mF&yM! z!@8$2Gp*p(X(h+kI@WSWDc4A2%T-BkIDN~7y35u>xPG-Z@{oa{tRymlOJ{;B$soQv ziFftZR9JL+eeR z`hJdj^?Lx_F-(HWD$tur1Mbt0!rr`})vaj<{@sSAtMI31U$;n1cos!NDT|EMaD8?i zIk>y>+kbMjePi<%t%NXap_P*3=63(=T!qh;4IPGgrXPBrbG}n|9|%gl7Hm|Y?JIMi z$g}!xP|4Pd6uh1=)~{9-r^@eE{u9S2&UYlMR{;_Qxk@{+J;mg`v;hGn50q9la`iwf%Yo-$D*n7EY3X)wfE>)qt?wv!vk*5#IhO1^J zPb0WD6t(XiwsA+Et)!yR0`AEm3Q>4~ib6aDUDx;KXIq2WgsCnDDCO06H4*t(!sz=fJ-OI+`qX@9I08$fyf~h3Ru!8S1(@H!b8Nt!QYQn$a_Pg}z zC#IfgNK3}QNCR&Fq~q@qD5Ob!QB8O>^k-NtZhat2czRGP?K~a@8^hzO{x@qNxm({x zN!SQe4dlGLi$N2W@Qu<2_;~D;BQV5+wknqoq}yzKBUJKHm454?-RF+#M}>0RP91>X zFuZBvimuoT^xRGlagCJY!r#1JUu609diZ0cSbieyL$IntP>(sOg30eM?wGPv{%%*# z`4V6w7N|_(?1whH+hb<2Vc(u-#vLPi#NgilAUlLskX7=5qv-rtg+C9y3>4<9g25~Z z(cDeP;q-m*E0{P(T0EeS6oyxbE)P}OgWO-ZG@>Vv(epZ64*WZAfo~ubi!(;1ec;(6 zcdUXG(bQ$KG|CH6fQ?;&n%O8<21XjEvK&*nGa?t^(Ae%mktZ_3nz=DLKLnb#QpcE+ zkMBd%9;#xs3I9+&4tC#~W?lc_@A=3lpoS!0=XYPgbO;%FTj?QlU0z0G{B2OfxyD!wR+GA2X*2csgUhmIo1NrK zjDeuCI;B0AYOB17Tc91Z;F-4{4j!bUeS+n9xHf%MJMPjp4l%eBJprF1t90UJ;{k@; z3$I9{6HaKB76DlcvfqHQ0`_t93CMVvv%;ubB^wF_oq509pn){TL> z@eAY2(|rQfPjhN!v3h>6l%^bDu9e=LQ~Q)fpTux-744L>qOqazKFZ4V@ZHoz)G&4> z=757c-wOLAI==!ysbmZw`)P$YaVGJiAJfgbUl(ujI~gxw7`l*7~dCsN03$3 z(Y&*S%L{4fCTL}H)}R|%k!84;BHxc)>wIW)>mXCOUz);?+wN{r2Py+gtA6B6c;Rq3&|PTXqry)y=uL z#gk))GN5+Gc_`~n_*@>>8EFl@;Lb2De=QE&9>tnkk~hm`suCwq4fdxu(G><}t`b4@ zTc8FPKK7e4xpuD^-&Cht3U)XR>O9{j5J7>_g^(yLJY;+{a|f^Ztd`xhS`rg&KA*6e}JX{D5pl=oevy z9J;>T=}-ia1c}s}*WEWpee%oN#GRv7t&K*j;L!B6>YzjI^T5ZX!q3~G0mY$gH%CAs z6Hb`ipm%y;3MN8agKlJto8eW@nt&mN3xZW(UtuzRT6`SA^WSzv1EU&}iaBF{BdU~B z=B1pUHi4JSEjjgt4fHQ^P}S9=>Ib02>ayJ|_EVi}B2FXX^EA#ZUB9vI%A5nYjd(aS zJeI+RI&hZ8#kwapu9qfRsL)+0Kh8ydg_^y8Y8vlbZMv!=or+lpCU`QAKzB7!qbYnA zFPpo~1*)QykC1~eo2NGP;$>SSq}C@D{qp8fio{irwm71n)fP?uNBU);3zPIuAxUB03XV#w(aeNJkW;8VDbGl%wvR@86Qq_{;d47Pkf$=1F{@F`bv}iF(h$T2xul$EcmvA162{fBDOi5q)3zPq0q8I7=qRjFG|CkF*TJ8*@Xhkrg z%Qq+PWBBL{0b4lleze@x_hS&ZDlxi=`nM)GjzPSFYG2_NC1Xsx^;%dB1)d)kn4PM4 z-ZyeB3n@^wy42Yzqjmar>8~E7%G|`&V{2cmO59Yl8JZT&2{*JITenn<&ldmKefMY% z+@orE-s|_WToL!lF?`O-=n%zUw(kke4D4PkC(CxDA^S7M=+d5tCuRJpk{iaX4!5^FhV1O*^g&GfqOd0{gh5b$%< z9h8)vmfcyMS%JE%Hu*TO6-TOq!dgWvr_%J6`zvGPYTS{g6&^CQn!%MZx-srl=Qb~Y z!z4Ok@OK$DaTYA!Z)62{Hrgqt8E)^EencDvu3!*6nY1)i?pJucmP$@6sjr_U!_u?!An)sU7gA2drNbq2|^P> zj1xm(8>9S|E){=X&}N3P@WOtlHU&{|{=|3kx@2WmE9>@FUx3(+UES_2q)6D&`^X6G zj7*yRYSyxdW+LL&vtRm#3&k)hbE<&4T`o#PeBNd%A4r!#m& zN5j}D?QC@|Ni;1EhR#`7l%YJ+88_%D)^DCKE^LCDwwV83CMWB7n>8q;*&-WNzeN0^UbJl z&6ARE3Nw-Twso`DcIM%4pf5*Mi0>~EV>%M}k@p6w?71Aaz~qlvF|UhK}rD=$(QC6*@| z&^}g(h5tgsa`7id){IA+vh4Ts8;6?CG@}3yMck zub$|TAX(1?u*H`nUNP6SVcq}v{G_e#<17Aj<(KM~b82m}&&cHBw)p1%ppc)BE=Xb< z?>$@H7C8s1oTzHRYUoD38aI*?==axUu>b1U2{h~2%fydCn1Nk5l|r*R@%05#Tui#_WS9K;dVxwE zI3P(8;C)j8EatwoTjt_5ZPBj;Ja+f75|2uy*6Tr7Jxr7@3CiN@SS|4Ro*Aav@SEIk zt$3W(fACC-_OZ0AkAnVGx>@kJNNpCVoNk+SoZmK2f-R6e-c+FzGb~mClm@M%aWOIJ zq%wCR4Y&IM7(K-CSHNC`;zYc8{mj&p@m9emTph{uxcjHIY;Zj&J)!uYDmWVRa1KO`Z%vS#}+ilMukUw=Q1-~O{copP7A4Y&OJ0l0x8?L z4Rpj);A!o1a7=7AtL4s>QMit?Fd%5A2vd_E#2 zM0N-o6dv`g(^D)$+n}_YZk{>h*XQLe(J+J0jYIR?KJPv+WD%8XPsqj2v;;MLA_TCG zjQQ@3O^x<=rl0FaJo3VhBU}@Q?*9^z-zJ65R~THR2!1BrjO57W?FYco|4A1HuDwrm zU{&hUoKO+!a_JP<0&!r$Bv>8P$7+s0Tu3cAST9tKM@P7}9`%erV}0H|`e?NK*zWYq zY%%j?0j*R0W|R2VH+bFxcexIz*#O=MK<7C&D~_6 zCf5}^QG@nu1d?Pg(JaE8*!l}#&@^eKU3@NZQEb4%{WrH*8`%SmzV_i+cTnkVF>j00=Bia3J{8*!j z0GXxV3pM7OITMY}x{Vt3t73u1-()3*=}d(kG!Yu!;${4$%^dxt52T~f6g&laP-@5lJh_(+1y7#nADE1lL@a~y z0zYn^hd8JnV64O@Jw+0brQ-mex(ai*^bv0GQ`ANVfTSBAm&DA!`Y^(o+kSnDdcYSj!$t-z_*;BJ8sK8zpGG%k z4^BY!4_5Ptu>k8-)Ifqg&B;Uuvp(p8#jo(44dc>C1~RgcZ=Q93CIhLm z2bcAIU&x`<$kF>h!4MG%NZHwfw3yb`yEvv3MN(+(Mu}71Mv0w%z*Ldj=C~Z3%MOA3 zXyy0Zpz~K)iqpa3KC0>bP{3xQf{-ivRa{~9~-3Jd@pL){P1@wVquKaHU;Gs~|IvUK%uf23LtWdqYN@t@@SzQNWz ziRS&y8QlgjK6tN!UM7l-K z}i@lEZXT93DGe0OzB2DhQ?eV|d8CL^3}9gpuh)IqTw#(Qr{cD36g z`r9Gx5QJ@C9NB*kZ7ZjHP!Flc6Qq$1D?%&CZ-_wKpf3K zo@6hvl}+*N4J-*=67FFUe8&yNi9nkNMFO$ONnMxgQ9_*Hwjlr_S9kALjAsGcr><@J zKG{LfZ)$Nm=j?5Jt;Q}crEi}`RAq04VLjt_M}%IzVk@a0cW$K6yt7IGXl#k>sd-^X z%(OufsJ8#Z9`A5$QqDLC=;ED*-pL$1f0gO`_iFov^DF14e;AB5D0YOG9!<7IVT&`R zH69VhvYkXu;Lqul+qHET9XdZ+8m3CI78rK4-*{lNt|$FyS4Owd9500q7Xu;_eQF-^ z!hi}clf;nE6KKRon>PNm*dA|nfAq`bGKKa921tE>vf}aIth#>y)bPtfwk5^b&ZbgN zMM%37I%g`E^37_9!>}Q>=;PJhmpzwi)-(60nmN!GGS&nGE&I~9r!!4O{860E1J4b? zwYJBtRM>3z0F)_juANHXDK^Obwp`1PWb#80vZWYjz0{iz`_~+Lx}E&1=*UK`gj~!O z0Lgj0KgaL~Ame#Jnzzm;`K9}=g0pCTXOqn6R_LGAQYn%ak(?0taQ+@%zfZNUDU5&4 z!3y%bT)UesCd&#^OUQ;HHb$OM?3#^j>%m$;QQ1B^=_artMA^ z|0(#QeESLnfok?Gq7l|rXDjifY-D)LMq4azrZ9Z6WMpqA4mi40WH z%}K}aqCQyGc>+E%r+nEI2KeMVxYuXI_Ybhyr+mYN@+Tl0Mvfilf^%Df(xj`yDIMO2 zxD;Q+f)?~-ZP-+L{{U`=pO!_b8WLs|Es27IknrQ*ct7lzBV7Qx~@^Yj9W<1#tuwn!@6f04tN!8Q;`<`KTo(a-s8Zg69h5`+C%X}c@^ zDd}F;bJmm;6W8lT-Oeqowy5NQE1GT@;g83w=&q>x)dlz%3~F!$Z#L`<|C8Gx5m>GC zL+CN@{Vduxk0K`|!TE!-w@W`B;9Z=btFfwvumc>DeZv8Q-HPZ_1-OFMH#mDP*o!DX zAs0X9RKcc@BahF({U!0YZ_Qo8y-DZLGylQ{lY0)o)$uBLPIF`e?{8s!MNPLQZ|e#KVX^psgD zB?5er90BIwxs3OQ(3mVl?5na{w}Hglb{pe7W3%rfp$vXYCE`k>i#L0uu8r{}tlp5s z?QcKy{n0;TPnUC+Xt$B6PMKZSkYc;l@vTGVA3B{LU+idvk{Dw0T2Dc}uxPhIwsQoWev-;=Got7^9^Jy^{=)`>pVVgdOvE$OjD zvL!12kBf5EH(5!zT%GL7Ex#kcT%^t{#?a_Xw=`1dMuRdUipaKg`w!}xtx8eeAk9zT z7)msB?jUA=us$(@(dauF=`=;e$C_MkhR^?m5HeyW5vWuxsDZEgZ8Jivtl=)cb$%VT zSNk^Be(;Pz6Z)c9vt``|eVvS?*M+{y)q?Iz7j-rqMPE0rU+la3ZTnP#OYKiSg1VCL zprak7hO}3^U1^=DyrpmD8HQKr650+}$y&?$p*&cxab&V_Q$n!=G=xbRmPb?*jl8KC1$^33i-0v7~vUl7OF{(s(}A z<3u@M4r(XmD_n~}^M^kHR49yaF;MNhg#K5;-UKEqEd@?XX!51Fhbvh;%7*`<5~pYX zzc!}iO0DpejJ-EgEG118tMRb8W`h$*uehb>Bsg1(>?5DIjtqg5o4oy8zIL4nyJ^yk zv+-B!QJ1#knD{eHd6=kXREj6?zjJ`v2_$M@I0RppM^gnx1XxY3QPk8!1j?|*RhN_Z zn7lx&4AJ6&)SBcpSR~53lxQlP;3keklN!L3FI}oiRQ%6Z*k%f>NWZC@=I(ovQ^-~H zO{BW=n5qBPbZ2cK%5&64&X7U)0Tx06r)Dy&(tLW0|u zxg*KBPJZD)$3)1mDl_^$%4_E?)JjX9N??nf0e!0IMYNiwd_%UL2F{iAwkq|od%*%a z8GV|YLjomR*Oc>p69LYLDq^0i)cEAR`McQKu*%V2Lj3eZh4TpFAM;w$O0Tjd&$qIW zey{(0VF**d^qV?`S6H_!hn%J-o7YRp7g(~r8+lkafcnOGtBkHDM0fU4sn6kOo;mZr z+&10`G4;GQ4db8`A$ri~LUPUg{TTN~`XGll6FRwNnCswIjN&wbzJ3gC0QcN}J)=HT zUrR`u=*3W*+50Jqra~G)tdhtK>)hQ}4PW6Za=t!J5n$lMenIZVB+c+!o{m$xGZ*TK zC$@3}V~TRjk`K}^?iYQ5G*+@#UML#qhJ1$wf9>NeKsP|ZkN8#C(&_xck2?fc28v&dl!_r)FebU*nGWGYZ1VR3g*^z*s`4q2|h0jSy4zPxTQ{~q?^tc zv&doig&!lcKk&U8!Dd|3^viwjjD7Nwiq(%q=NTmaRL^f${NbI{oxxot6QNdsKfTQI z9tmemBaEnb;hhZxS*EmJ?8H)~Paf)wqh~apCF1mQms)Ule;-5co*(ixdRd-^yO2S< zWZK&H-4t8~1JOu~^Y*zPbc&9Y6Blo{^fc$;{U?@|2(vJ|i8$WlHVnhO5Jl>iKc#EKbZ=BgE`W#YjJg}YrUI`p_OFLSs zFGdGiFstIXV5L-j1?0xivx!#;O&p}q?pfcrX0`27n^|o(q9 z{j7v84tnkaJ{VUdn;ao`X||EJihqK^SxqH;*j^Bq{*pINU}vDW@1F8Mi_yOVb>~v> zm^W`sN0Yz(?2htkC<2_P;M@9ll}OsV=ZnIut)$;iB_jIU?t#*zRQuYy@0N_@`PRyR z62Zm#U$f|Wuh+&lcR7XjdMaoXxmT=g?C#Fp%^ClGG^z~PZmscao3l(ibU$8L_s6q_ z5ZerLSJ2Mu(1GmjS9LWjI+O})e}215$o>G{sjjxTNa-0xBL=(9Eq zrR#B9n^&2zl56|Bu;nhcl>M&kiDEC*Oz02j-;|}2@{DpXz#cTZpX6P=w~7w5KdQuw z<~d{|*4?me3yC%8Jd6K>k>()QV+p0^v)?EH)A9e!jf>*-*r5(Ucrkj97f5=FO75NQ zR*0Sq33p2gFRQ-!%2u3*`da$w4VM!q(*vvvg}=P=SX@&U?VBkY{Aw+y({IP($6nMI z#WN9d6b9!_vI}CTJmPL<`qe<4NS4XWC93;|)U*(bHwH4(k}E5D2VhKhiFIm1I7iZW z?gBQ>czNk&gRm#WwzF@05XoUV$6S`*hJ%`;KQ(a+=<``dC9gbxd!!P^FT&bnSJg59 z1Th;%-O|!ZH94u8_k1KlS*2XkSM16K9g%FUJ*_E(tu~kCgfUc#u?Uu>Hyc$Spq5+M zP4ea0IwKUE$qo5M`I*I;>$dP1M2q7D?v4-u9t}7^%^z1A7!jOtP7rfMC;DrOl8OAG zMj1JO;>CAh#NiJmwDxV=&gG(B4a3XFS_=SjU2i$g49${%2y(u9lcW}SIv`dCmIHsR zYt{Oj3|=o*PkW!C9&RTbtHHw`nvjs-eZWHKuFNSfO5LBa-3r)7{@T8nr5SPZN7G8J zM!PC^QUAnV6s*QP6~jRNB*=X(uf0+9|VbLyL` zLP1hn^a+1U&aD-{*Q*N1X-mvOo?HZ9&@+)~h_cC`$?`jR?xUlxP43Q2x~hB2YXGGn z_29abx}f%NR04If@N|ISE~%MfN#!remUtckZahVsN&UCC@y$8iRsK6L{X=>QFKmB~ zqtMP=mdm_1FBzY7HMA)E;~7F*!XYs@YJ* zciXuY6MB6-JpZ>yUjHV6reBz>d;3Vkj46VsPvCm8-!Ej*o$^M}Yz*y3fyWGwfd{^> zD5udu8i!>%auiylZ~YzLdw;L6jWf%04z`2Deal8N z(XI=N1j!5+jUiuS^h@wCn8UWCyAR*K*YF;_`t2=F@(WJOd!$fU@-drfg)b4O8e1KI z^BF6NTXSPer217=dR8-~q{Vk6DI8P%WmpR;)*tc6($c_v<#Bkt&i+K`dG5h9;s#(H z|6Q@{U`GKYTgfrkQ7XptZDA7p=um*nB}RP}Iyqp{t6ur0ZI~iditq4?7qe%MQ{{+6Ecr5ioW-H(RNjT-+)z` zBI>6}+e^aCWtWjxUChw5doc}cMOq*kyzoVzG(rEUdbshI;Rl5+C4MS)nEJ4E?pTQb z1gi%LGty*#)xky=jwUdknC)D?ak`cHqtwvxhFP5GhZM#+a$hfilX0XQPxfU+uHhf_ zMkJU;ir^x;Yx{0oG@H+Jw1F}AbN@k%f-hN+l0vRsoPKkuB+YHJb599c6)i3Cqh{Mx zSIh}~HE>98)p%o7GQK6&ww1MoTwD|kU?dIC^}Y;a{9yh)e;Mw-+7)#Olb)L*+xRAm1Zm^_n0&m+*&=Z<6@kEV7vIS6V73W*t4#*%)`^t1xWw%tsh^tJd>YpN*I{cRG=P?GLY{Oxj&GoEo7%qfU)L zE%xr*qjMhFn$drlHN=|QE~P4Zv(1>)R8sooue~|xAiH`l46L`V489PZ)*LEkdgF^a zD}4BtEkS`y<$qiRXiOqAgNRD z&aR3Sk&nokZSyy zzv|5utsITO7MWXDrp;e`D75B+%jx@M#2Fipxsh@_L@vnt3~z3G@Ye6 zCP2UfJLukh(ACP3KkNxyMiI3pxcO*AO;b`@j*5vpOm*}a@-h3;jN`eh1LA%6l^P#Q zQJ!}jbNj>5Y>?k|9u<|sCXmNth~783(=U;Jo504(McO*r{J38&^PA+y65ltAa#YE& z{A}@w^Dls-``g*c7>w1y76tcQ@+&P%F*0Y%d=#m#_Z5n~;Hz8j_bICb91SO?Z`X-f z5rnes8c*@R>a9ztU+^>V$y1X^_$3|<{butBmU57wa&a+vIC&IUhRAIe`GC9|;((U7 zOc}L2iTVkR4>w&XZ6qG8PMTC}Dtb4&8j|qE>Eii|l#F3D%fXI38_!Kc=icwSFUd>{ zB&r_X(N@{R0#GJ)Lh&1|&rgQtfE-boFj>h6Qc;2sSxM;62ym$8KX_p|pwd&M|DMFn zco#oe(sAl0WWzTfNC3VV(pED4C>_t{i;U3-ts&8nFhO6NABm;snXWoy^>lE~J zOn*{PivMo`SW{#4-`ejn^pY+9pvSu-x(A$@#(qBf(Bgvr+AdChwGaW$ku& zb>d@rb?!kpu!T*q1@v`0NJWl5Z}8AD6*vd;QdNxTiJ;V;B8qy%SHG1e>aE@f?szk3 zy(&HFrhS71am$tV8#y%bb`NilxW7+UxL$}=Sz(E`THgLrO?zTx_6Ksa+_0sV-7d_< z4AGWpJq@#Ad;3T@68akh;D3Lw0VWS5vx;e%a3?5I?Yd$9rW z&+|{R4{XCBW*sV5U(Sl*^zPPZ{4`8-RMxP|Czr^+zQ^4dv;ncL^eJD&$AF z^Ts!N-nu_0Yhx^FfK>@uYJ+qOuv4Gy_6BU^+MgWDq2lLYRVZDYknJuzlQB5eI5eQGQ_j0~R9;LMS7USGih ziSRTJOWK%i_c=#P7o&q5l9^6H*=B=FLU4$wWitG9rLeOX+a)WnfuIkYrG#tQh~zaetVjaq!T=4SAURiFJY zeM+{(!8Qtqa4b^C=$q5|J7H83D@aIH59P$Nt1tvEEw&aGTLwy6>#iBgc{Gosuw>JY z0MG&)X%uH_bIZbxGdT~#t|RuhwE=eJ!nd9xxeF$H{(QyE#eMKq_p@{QWV1gl|Gs5? z&Ap}5X};ks?z`P9VVE^Wv8dM1yk%7<4Jj2lp;l^#l=xA!>krH(^dn*@qu!h=Pdt4_!FIz{-n zXk&V-bLn>#uUe_%{YaXp-bKlp!pghVzpkEbwsI9_2g?nom6dpr3NIM3r>JdVcHbode=YP5qazGaRxlO#%|C*>==g%0nDLAJyMV`7t|LSLj3q@(#!m z?MP^UTvl$}aqWHG{G>*9iYVCGU26zG_=Hezo8a4KxJPG9+KVS6`(6&mT_+DcZ#nKL zqM^;!xF^`u@SxB9?R!u93E6_E;iS0t9}TKYTQR9nNnYIhp)^n?W6Je3>Y}xvqEr$! z$m;6t@AH16-rDrx$4cxEKg5K43BK$k~Mb(P?fh80ZhB2nZQ&5Jj` z$92%UUy1RY)^`PRYym47GYE(>S^uvq-jRr^)&Un}|25Q3x`&FQ|C-S(3`@{qmQW+| z=-Xes@Dq9iYv)y>VJ7?HjwM;@?)lNsk`BP)PTa;)QF^l_(v>kJfK3oK8LdGeQ1~jl zccPtIZ4Ga2g(Thjag$;MO?s9HWrsOQQ|I@yRFUBG{Z}N22Yy{oK=<}5&r)nMVSs`o zJaS<2qC(sGq*%K7DN+$a=MeZ~NiWRwpc;%@$RNyltl|nBfdktbqR1ZBzr-sn-9iDm z!JvLLkly4sU2q#8dijL;&1a_&W{`?M&>;re`w3}y9d#p+o)5nTr%CY1XT#=bBS_iyeUFy=(vQ4@D8o*<&Rg8=wH?7!EPO)R=AD*=r5XfI%}v?X?RudWY;~I5UT&>lN1eFQ5o`( zVW62Z!Xvcij5z|StFzQL1-fUpP^INfq~Pxoz7eEXe2dd{I4=-LsvZRQ5#@|<`$R~d z!0LrymOKZPWA0Y1iNL?!U&t^8An{Cb6ir=0lbNg0$6P!H5ORGJcIh=4CK5za5E2ht zpp!%J55%Msu^+)>!26pa3X1-=|2a;%>yl|mA5+KJR8hx-rm@L+Q#B1Fn|P3 zfbE{S(!ojnk(`}9?Lr?`DQ9|CDUB+cyZXkN<_e)$d?Rsn+5HCzS@m&tpRWM+RS&+p zOjl{is~u^<%CZ&T9Mq$Yl7A^I9Jjz*LGMqk04HixU_w%^GsODky5cpfsx=lpoyS8_ zf@qG452mg(#~UZCfxGL0!&coP_;Zd_)(xw54G6rO%SRv4Se-jU=5s8PqBJ)NFR=WU`(Q%uoBon#cf!o>$S<$wGsLe`V>o~j-gA}-;Mga8tMO+H znmyJ0dq#Tr=9e{GpviGDq4Nq|H!b4u!U>!cV`MUH?RbeQ-x7nk#b#S0a<32doQs8m zX@(077(VQ%fB~5YrexnXc$nr<4{+!c4s)s6r7T+~)+JWQtRI%R6}N#8?78YUXV3#% z20n@>ZCf8Qa!KjO(48tbpa1^(P5mlNOUVZjBw(<0xQZ}b$XY!D+06zU702yePe-3F z^K2*qs;+@?v0*d0cwhR5OUvm_3pCSzwq4aa`uge@JEQlQ(&nqT#&wnSb;o@yNkdtw z7v-B$4q?KZdtqO%?=_VEZ&FWz%p3L|UVURi&Mvy1B>eHMF;roYl#k<$FT7-VexY@Qgb;tH zZF5_wu6Y|SVv$C#14Z5``Wc*j*D^3MFKg&3%5S*447WECPBFT!(5k$XC^bBB^S|i$ zea2;wtqw)DRWs|h1AWo9_RcehDzFL0!#RAZsyw6pv`Oe94OQ*crDY)Py|<$6%?37+ zOqT@iL%a&yVLEwxDIktbmdB*8ToHZ_K_t7TK6 z)8(kzK}Mb{?p<7S2fv4<0EZ;$u1FDUby7zVHCf=wP!kseLDx>o%KOGSx}SOiV>_%?s~LqN}YQePC(b$y&G(-zY1*G)no5OzkHF_Q8&4!K@o z&R^hd!=cU55+4;kj&!Ef$UeFgvTa`6zd0%xAiFWKr=yLy)EZL`mJCZWljW^f8(YtkgY=|Fd5{Tg-B-MRAU>pJ9;miAuTm|1L`s&9HNRP(Q+js=y=##<)3=Kx zgL*Yi+aimXn{f|@mvjGH>)pLufgh2t&)};1CWcNZx1LFlWlXt0HPZu!9Cv;fn}M#6 zyC3*XjWP0J+iU@6{d=>iFNlWk30srVe7O9JIXZftV&kxx|AnD7$vRWE4AMAl%8@Yh zD>_0>(klMpN4r;NuSwL_@z!u$)@wZFNahV_W`ZwNzACkQ$m7^cw;5HDvCRzB=*y68D(Wz|eo2pbHCm3qy^69mpGCO1RkNCn zd8mmAMvC>Y0-f`YspV*HSt^}O)oJdeXX16Q%zlrJgsUIZ!R}?FqRqfrH{x~<8i?FJ zZiyjhig&?B{!ZE)Nh2Qa5hRv8?nX+22hJqn=U?5Flh0!n#;L)y0#yp#?S1iIjv4Tt zxA#pJe}srkH5T)`_)QOd-2pwzN2U=R>YG=m)O14jN=w4sMXJ3S7ZB8UEm97W@gvDk zr*-Cj2Amzy&bUu-3Orwhzad=KQ4Z~^Xs?Mdk>w?MBbz6;wX&{uDO@o`?*GST1wfqhex z>ndi{Di`WWxVv4wlhSr5NOb|g12?hO)E{soZpCu;^a>DdgD+fmqx%r#rDdO-J{ngi6!zWtt= z;rYHu40WZn?cES#x%Kt4yiSoDVAx@sDfl>3@_Of6l**SXCHmM_doek zM1D`W`2Kle-lMcFnPaAXS zp6{-Y@tXx*R(eab3ZlsKkwGMIeJZV;^_$GEUfOYOq4SkO!YOe-Erzb;E$lJ(@NHw6 z_K-v5P^bQ$a(n_lPLY5UjOTIk%@@!UDAB0#hi()L5&r;`(`oHOR? zF&3BIWUYkGzJ(iXF;surwDZ)%{+@sH`5>5@MatdEr`W^7r+7mkY(#=T>}_}0)jJpt zaNF-iC7_4b46u^znU&Ryx%Z;X(A^;qK~H)fpc_nUEle4EIOygVawl$YRSdZtb(^Rj z*I1E<3m9Rxl*UDz!1TLU5)&*{y0O_^x7w;<723F{b2sf`i~uUs{q-MrXtw`sgQ73L z6F4~^-y-)?>k#?xc>KQ!J(RRwJvAC;aqZdpDnz z((j{m0!04^bE?Z91#&elb{a7=rwjlI6+104w|wys^epwzu>|k`A za&35$r&U=65~}=vz7#*D`OWLNHGlDx7qM!9=mUD2zve8XI8GKz0Uao?2XryVy#0pH z!EY?1C;>IdV;2uA!N1x?AatL$NR4C;J(Kn?aMr5~xHB_{T$9WJxA7leeCmT5Hz3IwX*hf(iE)Uj4mw9MVD=!u#Z57&UP-CHsYq`G# zHzYvY-@lKTHBgs)$W~{Fr5Q_{sWl@1?&^7RntX$YR6N=Ii>Zz^-0$lB!KTrhPe%A{ zcrC@vL|dMwv!n`}y-{R(V8n}HlVnK$!bHM~!OHO!C7}8czN%_aZ!^U>w3;`(4`5iW za~*IZRFc^JVw!U-h&MV^-)OU52c;LRG`LgK>1aPM%huj9ABg6Yf3^1u-tc5|s_`A! z@X}|kf(z^$rytbsE`4HYWSl!}XPI>Ul269s%&p?zB0lEsb3UT&!|#&iEUMwCrS?v$ z8QM!ahJ^B4FmZZU05g4ryH2xEs*v6MP0ne0K8~&Qn=_^5_E}QgKDufN2i*asph7Nl zY?8f+7!4iI&>r>PGw4G4#;~8?o)ho0%bCwbynHyKh>pVu*-NFs?dz7XbC`LWVxl17LD zp_~?mMH$uWlQbx6H0hP_5pO*gBI2mMlH_b@p36Ys z;Dp0?u+tF z9{$k{k2+71c3d|kO5o^qDBm=Bega3(e3F>I2yV2?84dbWAy7!!zvuuN7K1Yb7FnJ^nu$KMsKL426=obk(wo&~b)W+m!CFCZe?iMCxq1sopqUuI8rpuIRDoa<`= zQ+n;2NXeSuW5uYka8Tyt5wNvKD&la`NBXF-)oSC$L0oBkwNpyUQz;=Bt~9<>(cwLg zKqc0j?isDtf33=woWm?nQ|*=(@d86XzYjqF^dm19^w1fR>oY!V-8!+O?3n`xOq_rV zhUV98jX+kb(!@K;Y5LtmbD%^jc@#e~VU_+;Ujo^)jy(V=8~=bS0S_&Bo|#+gD?$EJ3RDeAejmZ%&xxL9@E7%Dc-Ad*G+tOIEd6q%?}38@w>rMF3r; z|8?}IU@uSjj%3lw$QUT+_!q*@Nuh^-^#EgJ77=NUwXbs>wxV>q*eYKY80E`W1(sj( z@hl%XJ2Dh$bZTlnnC{pcptztF_BaXhHP(e1`F!>>`2RX%Vl z348llfY#yjfSmL*S!R$18(&e1uCQW?Hj|ZUzx%r(&P^<{XcCrZ*zr9;Ts5!^X2r@t z_@=0zsr>j_;k)K)@Wmq%^tHl*|CkVLwtY-1=^yG2Rw!%i`|e8FI5>#*!b072gTs_# zOl9$Y^bOmy!Y6fzYMF=9Ri95bN*3#^vwB}|a8$lXPBiA*9b(yh_$E=WGLY*Ro=RDf zG^deN!4+j0ml;6?VTVSvNTSXXJ7HnTCq-H&szH*>Ai{jLk(9M?5qNaMO<)3jpxR1I zgFA2RL=nDJ*d=v$gul#V1Y9EhS|If1aqCOtb}!-GN8tk9(e?N-8%l-`btE*VQo^_> zzA5UzxA@@)>7yojf%kpkVu+E z8$t#fgzKhe4E_h%R8|Io@&|miboj=-_}?r{vX1`E8>0nbhV!p|Ss1RRZdw2JNB?h8 z{G0I~^C!`X3e(j*-fcVAB?uqa*TgLxLxE=*IEiQ5g|V$9mxT3)D5jw)aSCAtf?Z9YFdK#fhtW+D#q1O0yZxB&C*>wk+tH{-f#JU+ z(Lpse3|eRF4{z3<2+vEOFPM9l($DHko)1k-&Yz>xBJ7Iv^b%W@bBYI>RR<+#pJ5kK00E=eN^Jz6~bcC z3z%aO$NZclN}Xyyx`+&_=s0^fZK|L}avr%$xt2!)Q&M0Dou?W&img(}kM(;yCBRA^ z^*oR{>fme9mkW z8TVh9$|vj5q*yU$5^s)l!3d^6^nP8g$m-rD@{3;oimZzRskoE+GD?v>x!c}$=MX1j z*D;|F4PpAjGhpeC?8a~M4ja!V+ncbEn881H`cl!P0};`k6{Jmm)bOMPtD&?Co^MBx z&YaSAT$Zu2az6=L8wBTw`BA+L4tSW z7Z5u|Lsmz-d!~@u-|_!A0BMERlNN|}@2)&YV7q~SC$B&T!7RlhZAYwk^r*yTqH4`P zdaIK@{oZp)DXa=5cjXl2Jigu})Zx4gjew`;CMh5n5v*rMtTMaO&D$N))K`(}M_luV zJrP`*#nFZxK4*`(At5aP79WD#(wklmzh)2^LsL&0e?Mg@xlb=?TBvDyWWeOLjP1co zi;qW&YKbVR3Be~Yw{U3?XlSxoouoS07Kf=-1YCBE*xZp6U|8;d_!{d>+nPM6M)W3t z2|=|R=`6C2-2FPx2I6-=eMM{H3Y0%!zGfw8e6j00a|Z1w0NgMrFTuJRhy-bnxRSe{ zN`GF)m=xrA#m`F6li1tpYIw0IvnuCC>6afY^0L1!=5jV8BfuN9;%*CR#jx=5LAkPF zxx0U5JByB`)=NAsTET~dPdeuk4#yir+~aJ)l!~a1;@H&QsZb@i##7%0ff*^u)n#oM z;=O3zx0dSF=yxz<7B}je7k+GtI*| z3-9_BwD=lR4EOmm8)GD1&bl@&fDg!Nf+CN`{s#r$-I{DC;UlHI7 z^h%dX8`o{mP}j3MH=wnavqc1fd&SSFJ$(#!3ali#9klsXQ^EJs;F-zE0s05j9g-%L zAY}Kqri>diiREq{g`v){I|yle?9kzqmjCPQ(Cha}R2S2_DfkehMu~@(Y@x z+4B-Fw6~T9g#hP+ni)v|V|3&6PcSOdG1Y5o5{&JWLv!S8EJ!+EJm~W7X6F7whQ7wJ z0_sJL`R;TPvHm7e?I=|Gj&0iZp)!h2!Zy}dna}d!(IcLh-kMlT#~r3#4@V=yCJ9#x zaB<%&k9%wYWbQo*9=SsQU@~97%!!-R0QfKc^j4%0(WjfWn<=3bAp?m@2b41 z(gaHhWrIHaH0^_ntP#ytNJ|-h72=}4$alaa=IM^M2z)ZfU;L;9o4gTAAQxBB>)!iw zm0eHfcsWB372}gx;Md<7<7xlf%AhFhA*>%X8T}mY6)pH@n3+n4JX03WjCcJMm;Mv1 zQ!0(tHMwb3xuZ(;BeL&b;k@$MZY`V6f%GuJ&Qt}0Sxh`o0?q=%&R4PX4x^Ab0ej7k zVN+RLr>&l-_}>mJOFsY}aP5n&%!hy0dAvM$Q}05xonsj`^9J=ElzKh9lGb+y$I_0vUV;_ zf$~iO>8I&EbTGa?{a)Tx(ocldEr$U3>gI)QRZDryCC-7CkDNetWFz(ebJCR6{FlD0 zX9fnw4cH+zmZ+XlEssFTCXPG^Z$QcB4vJCVvdHH=@CSZ6k%NuN!E679Jk0<$3#&UN+$iVfg zq3#8`p%Xh5M!PWCKmGcIs2RjseocgD55C_&;7vlrpND)9N9_1=7SiJF%jBQ87r{$H z6X^XE`#f^F5UmLo_mBKL3-ls+JejJgVO?WM~1C5N{oVX!GF zRuWpqg8q_#pc>{>;ji8~fBIVCloucEWCx549!-yb{IVFh;G+)kuyN{%KOWtN_CPLx zF(-z@4qqtsb=1?9A@l}4E6Fo_Fo%>dDBd5fsF1#fs0lqMQu;f(Bv8#4y!x|Uik$dM zZu6P5S6tNLTe5)&u;b_?6cMoeoae7 zol^Y)^S+Yv6N?=QN-~9?(BerRc4Tihad3%}Toziz?zk7bSMS~OaK=prj8uK?=VQGO zAzwkNkVY5oi`emP3fv1hZzvXRV*j+Fv+n8kps3{^oqDiDsGmWDJd9mlVrIG6ze4z6 z+driV?p2=?q}R0tKPCPB{bS7~IbZ-u2B12(in&}y;chhWqmDq(E2leQ>%gNxnQ{(7 z#1cW5T7YP>@1p-p-lLD1lyl=U$DCyi&+2pNPeseZNF3Ce}i5}r_4y)ePNZ(bQG(5kGT%~t~8F?CQ)r#8G`d*BR(66)mWq3N79jSrhkye3EuN zEb(6khL5Pvg693%6{ugMtHtQ_tECC?;_WE<-4+Q?;fsSzMzH{JLYM-L4?0G~#AVKy z{A$U>1ce=}TA%XR#c^hq$#oIv~Ve<6P|AmdMne zKx&m;M=Z=9b@(@40tuFZ{$eKQY%^c#MEV44` zforHZNC&P`pwGtTPK&;1kv_P}ynk9)?bQ(A1N*M39RbO!XVVo?c3zFbmD0(rC9|DR z8DuYRJCf=za_V40oSV4)lDD+RdaaO4f$tPAWHxRWK_YXax_8D8DAPy9WsRHDAiLCR zmLwX68dc$%Q=tyr$MgC=*4z*sm-(I*9?<`Y_+A*!hmU0OL);^ZOsfjmBukN0*gOtnvhE92F^Rc}t!W zpZRX?;ip9=4bi)X5p%5mr$0^TS(98GR)OR25;FXA&zH)DE&XLoa6nF>F9u(fgz9{yS<0Hc#&9e1$pvGUhj?G=+W zj+lH)OeJd=YO7RsTxGKkEv{${Gd<+Yy)1kd&PRzFKlnQ~9GQy7^i}@F4gYy@NT4_F zoI=BInYxG4lK!^h#Ob1F&g=#$J6wOJ*4?1DgVwtdjGlg933?RQN}hGCh=_wNZ#K;? zb2}>;1J}DAmjkMo2n}%shuIcCE1^;d?jkk{OJkqe%c)?rw9jEiF2StW_85^`pCG z?DOT>=)clBr)P%c-gJ+`bHkU6%J&02tquHq8R_R2+E^}Wu{xw#HX*@gCOBPd4~gd& z-_sd`K>h3uj%%R~n;W;Is``rW8_~6UVvEKXchwQG17Kcl5sa8Q5yezud8(1FFP-Fas z-}U*zLN6Z|_L|N;Yy6kbX1)-y;j$jiWgCh_)!&kNMOybPlUu>k%{(otkI~cRK#os6 z=_03g=e&B_->a2#SJYHCRxkC*nx6jyUy16N!5XwpG88%X%R}^LR+{H{6Zg8m9lGa= z<8IoByYtzKXS4fE08Pv+9;0{T^(9Kxud*DpJ?kLLu$j-ml@(nU@vL7IA>K+ED~jJV zqW^}~6yct0V5dtgDit}7VSn+|(V$C~?(Un1n)d1-#K)PXqsj|7hb|2Pu` zcRo%uPJVmPh|}T69JaB98+C#8!bC#?J4lZ~Lv%vo{(c17`BeA?B@z<1|5lb9G7e=0uNklhNg7-YEL*X>v%hBl zM{$*4_#)dlw5dqZk_Ivu8}=K|Dywowx-To!H#!vkX2jUX_`YR(%?pJyWI!nhGk)nQ z#yd|nTrZ%*GoM_3Z*FP`-EoAXLMEP}k`;V48$i4O zeFOp~^D|m9-v4nHK8j7D%m*#@;jkPs}ay%N`2W|%+zW50{hIdc|D zK-2W*q{4pJ><>-h)@Zht11zercK%c2`XBRwKh-Kv-)H!3 z?@@ZP?RJ{pfU|Qy_h!B$rn4UBP+CqOh|OV3nt<_KF6T-yAWS|e`Bwc!q*xO0wv&9 zi8@A;Y+7~RpHa*eW=qsn`%SK89DqS^S4v%2WI58Q{~H;wVs>*rmF`WR6LNPb{>WBP2-tt)HU&J;^s^%65c#jzp(rqtvK*zsdrA zKR2c3b_0e4Y<1&!?=)eFwa6_hF*GSgx25Q!-m#lX(^{UqVyL$h-~3I^Vk9vDR=|{$ z*2F)5j(d!Lm2`+TV2X()&*V%(7deG9kV2?;jxD0`vS0I66;|K?Fsm1v#2-sjuwHrj z2^%H)reUzeesc>;%xA2&>mS6oIyt`1UQ3KO$rC{2Ypq%j< zHE1v+bf)R_h5a;@QPx=E$@WCGG8Aw};Jj>&lvl9D1V3og9cm>`p(xK)Nha*qLm#(Z zUwVz2cJBwj>kziV&1j+w+75Q!tXRs?OTsYYPJF~~QPKYs{TYK`8`s>N*twWA{_yQ4 zI$iOw6^B;Tw~=Y%o`c+;`5oLY#nqV@BDNTp&KJ6GMO_vm*Pd9>kk;=)UzT#0Oc*|& z!|K#u5}6xUYzY=Qb>m%30txd1`_IlA^Uslcx{`2=GHgx`(drG4 zv9PDit!9nlEPZ$T8M5RLI{ds6{b1pD056Xtja9n)OUAUIsU}mm%dG_rfyvWT{>B{? zOyGM9Rl%?~e(jVi%-i=&>>HBz;dGhr49Z-rppgP2FreAdq{|%pX#7Le0pnT}P=LWi zHCxQUeVc!c@V^A?n0Zi&4%AyD-LGEYrvnQ>&8R*RtaIa4+I zp&2DR){hTQPWyIC3!$!b-Ii#(LFbm)ja>ynOqBZl`LyuRV@uNOwSqcZ`r6L1p zlj9&jLa%y4uqKo1QBRW`slJP{*uFRASK?>_F5<6PUe)S16$wJ|gL~okizRn{i+Uvj z>Wuk!mJ%C|Z~NWDr)`9Cdq}|@nvHPvE>0hzTkQrE!fwELN7T4f+He85^#18$HRmE& zOqZ~>Q}*H8c8)qV<_H9-LBZD>P2QBkyTr2%$&2K3yx_e-|98rx8-12%9*E% zJj5FRRP$g|G$CO3@1+DDP~ zt2V<=*V3-P4)}f!L1C>q#~gk>enH%SKX^ZxpW*K7Gd$w37T^4igN$9s*Vp)K#`X^K z@Yhjd>i!Q!SC@CNStb;r%u8biz;Ff)KXF6Nbb(0V{P+D8$ba!`ekN#~|Ehy219@}X z=B4@Yx}^|#?UmUw#|$_c4w&PK8cm22|POb zRA$4+XQXw&F*Ku<=XAF|_9WOh4+-~eGzB@5G#|B}`Aw~z$7;P+-rwm4je0z458s@q zEtj|*YtTg*E&TBb9kkz~m*5k3OhJ8xKY^xa`@Bn^)10z-sWMEly2$1a@{Jl)1y8}} z1duHg}aJ+zO*?6pv5 ziOOD}iwQZF&G4y?$%`ZY_!~GQJ`cKK!^mgG)n$X6{df1x;OBKo6geUG3&|mMoHM|- z>K_wQ+XCC{LHjdLG`_KBL+EDO8hI-k+3nl8|7LzJxZ)jCI7~iPXz1)#R8wA)RpaOj zR#eSCq}G0u@4J_<+UqZ8_PfDn_6r{zePEk>H|NPd!ub^!}>|f6-z4{I5E?7qkT`q5V!!*6| z$(~PLL_bjv(!j`KWthurr6Tprt;N^Lx!FnYV`q=vORvP6S_cpByuW52?$b4a4|{s~ zZImNO(%3-t4DKAt&-epK(v-ey_ZCz?d$DqjXuZn z-y={wvJa9HBGoN$8FMq)J5Bf25*slyYS{{m!TA!)BsormAZ?TWQLCY}RZJSz<(8+dfn1n7G~w+@QAtUl=a$g>ZLqq>sY5s`U2&kJ!4G#R*;~d6qZ%SfHREu7#XbADx?w2l zAV3NOZf41N8kl0nf$Q*L&#*-(PF;ZqWiNaQA_y(%zW5RU;|wBoPRq`|tX2pSKRORS zIc$F{aq36;Sq0~d?8MH+nf`X%$l0Ql9f!KJB6bCue^Gd6=HYFS6*p}scNkm+*^{&( zzSYv24$R=u=VFxUm;x)|Y<*yi_WVJT{X=1HVm77aThv_(XftWLI=QT*N1G zU2Uy_DW5nc-(}m#D`@V?t8d|rcg?Z3E0;`3R+H=w&T>Q^y0aYhkzY7F3yFp57~( zWavFhUW$fEUVx z(TiE!;TEXYTIRuO*->BfNIu|1brn<3-CJF*#`#TEV3NGtoH*rw&JTv``WPMhaAjfr zLTnN2v|m}o1Dy1d`b(!XI9BO!hr5oya+a6`rBDdTAQ3nBa9B=x-ssqvE8Q?Y*jHfSk2C?uW7>QpxH!<@4AVq)L^aI>bieDZzp;oRfXlK!W@ABjJ^}=k$er z^!-vU$kMu@T)*2J;r!MyI;1T}UOF)frkMFo4(>{Ho0p8l%r@GZO_lj4%I~7kE{t+uvnDB2t`Yxj^3=W5T`9a zc&g`A`xEuG52Q>Eo~&knCx8WU$KDPg>3e^qTIzqRm1wEi>W7>23iNa~8MS9j7_=@f zi5Jn~G+?SfhKm$Qc~DP$s%G;?x$d&B$S=n*e;d}b^u z`|Y&MeDnZP!@HegdQ50XIJ?p=`6%w-U4q9WFQruf-*XEU%4Jz%zt0g8UOu)^4^@!U zSA&QHHg5CB_MD?n9e04zD!#TIJ`CNkX8n>ld>9GRjxD08=Nr*($2@d{9~^HiK}h=y ze?=c}zG8mX{?O|gg?jmjIzFW zutTeC$KQGul*c!#Dz)UoWARt#&gkq$Hl0`h7vt?8_w6F)zC*OUX)sM(<~%Pd0r#2A zSTOVTVS1@jzo7fMkZGw=T4 zbXdeLel!|h54oG4zq?8Cs|06-IKyxR-y}~G*s&8bfP{Z>;p99-^Y_xPLc_{JPK3~R z5J-BQgmh4;LEl)0L_eSBllqlEL|g}jOfH=kPWk~R9I*SqlJ|eFoEbXX7L^KbFEL15 z+SSFp;`7=nM3j>T*jXDaNZ{0R{2mk2@2k=QG0M(q`l+{5Q=t<6rnQbLUNFti1@_ts zZ0sc6gyNkfz&O1`YGJ@6(Tw&7(V;r1lXufw!6zEtw=XPII%= zTeYi_$2Xo5%?t*(cwA^oJe}gceHV_Y92Gd%C9WnS(u&2Jmqwz% zhhJorcB&joIIfV%(Ag6AvUXuQN1c#V%kOSy1=9Apd$M58iw0~~bVwnZhs!{4We-*w zVjh$;y^9^}Z|S8k*54D_Yn)ueviezUdWu+lN^UjVMboQr_HbuyQp%v%k+>UwOXsKv zv&@_x-ayffyE(j;36|VhW$?iOw9vY83=2Rht053&r_xH+HTT#NcsqDvMIOF=M7vP? zp3ZQ&zYSM7SfR0Wvg|^55fK{a#R9I{6S8i;lki=nlxymm;Bkri)%Z^lA_9z;M>nt> zd)-F@3E%_d)n_Z4*2l^(!tYb_b45Z16)gW`csV_cs(hB|=a4~9RRv%Fq?h>^-_E5* zrOZ6oiWnl9bc|GF2#cCPZX#9-CK>1^pBG)0Em5u7?AsU`WIm1@JT2px{<1qmwm+4D zU-2#%l?yL52`ZWotY?^>1c#>>VSk>JURrge zFnECQ&L5q9T&})$sdO!GQrRNq)pN7Ma$nxb{OL2wb9s5$>h_9(zX2$9{uJ8`VTX`4 z`Fmdo2O!jxIBp{;aWJLw4UYF`2fEUFS{UqFC|WlPHWf*1%(UxS%KJ1y0{*8wl!>JN z<}3M%{uNi!?=DUnA1c}SUYX<&oK#2nLY{sB5s2^I*GEL4H^``OOPf z^b<|5k2u>yY|eb5*U8)#6-?S51mwGA>hCI51P-uef-{7STgqx znsr9BK>}gdl^j$;#b>4YQ;|w?!^IR21g?wpQg3Kcm`Vj!;bBZ&E)Y7Kf5JcCs zGbHM@MgGpAjJc1~W|i9(KN?j}hNlx1{XUX!@GC(Ve3|$q`V7nOR-hH_S73@J**tWh z`r-z-D5&yWYI;L2(A!H97xUHWp+9SKkJJNaynH+qDQ>=>2(yJc+%sDUD!7N2;sU{H zXXm;z@maT9Zjqc%!%4DbaVJqgLvE&D@}uoFS7LrPZQNnVJE}X!FMhLyt#r75$TF03 ze%r6R@UD=C3IiwmnR?P;*YVbhdf7yD(EW6z(`zPNISEs2Ua5RieIM-nz$d@jdwqR5 zzjv-kUMv!|=8DZzG$6~GI3XsBD{?g!+<$D^rSesjf7yn(^GZ2cP$h1$x$0gmx@oZX zWN(kv$%4(+cs{&qI?j>(S8di&oBM#1CN`PIQbIS^63-IgK?Suxs;K;^j=lce)g=ES z=8LfNH{7?p`msRJdlBeb&xINKvCZP}lD(t?M;bH@)L12Qj`IGwyKHI_HAtNuPV;$? zb!hw1fNj62Bk?NI-3Xg3uEow>cC@5S+iI8m!vD-lZZUHgN`ADbKt2EdXH>pr4vD~b zjCMuLDca|hYI(U^Z}d!AiZshCzewNy8NOL1Y3A4nI8zx|m+Zk4zf0MGoI(pZv9=6%w{K z@!>m9kPaG}6g7Xx;>k`QbanTAq!$lFto7)=Hc`ti-YSxd=sQXA7;lMc5zIe*rL(ve9 zirD_$U#S&=Cvr_hT{oUA<=r{3@@^c>IGVIo)x1Mc8{2t7%1AO~3Tj%SNP;ZNI) zU%lTOW`hPjKRx-1&M-MRt(BX9ox`%D1M|SlG9uZ$WTv&o9B9k%#@%&n6YIceC9LLI z3I(q}n`smktV31>PuiWnRCu?5#Lfd&6BVwt*WU@yZn zGDl|itS0kdPLJ}era!^6#(5f7J-Bk;+vu{9cH%6zb2?}GnEk3rj6lL+)z!}{lQZ)` znsJmQ25ncGh8rcEEtreClVuWw=O}Hf+vekQ2C*qEydl;SiLrwPY(xz6Hl#OjNcFCE0CmJ36h^8HM)q?YnJZ?zXc z%z}?>Fv>tA1Jujfj@a8P;aVIn^4!)gAg3^pSF(bZh{aUW8bH$H=J2+dXHHImP<+lPC zFCTK-o|)GZHXWp~GiIB3>+ojcpj=`hZl~q@|HcU21yb>U$4P^M@wZ`nV`q1rZ_dgs z$46~@zzx>KHz%Gk{QcBzu^tG{FTfa`0#}wNV0{K4A(8Bc;)e^Gl;FD$?&%E60>2|P zt`Q7PfIH9s{Vz>=ns=H>PPOIW2(9~k1FkIslQj(BNW>kUY(M_bNtk)AUkblxh&Q@> zp`>D`8>QDxos0J*K_l|c|~Qj4-tsVNZOacCC~_h!3RWTjy`{j3u`T&kNF;7xd)(ySu=L9PcZ=&cH{XMRfO=Z{X#jv(Z?s~>zOd9OhFofa$*MF9gFdiHiykLUiPA1l(GZsc#d8|$IA#; z38AI1M80HsxY_$T&X$uU@!a>ZOdw~lhpSj<^@c=7)cLcza+IU$7vW#{F9OtN#c=*o z3bW>L-O)NJ^@1@CEJWz7wh*BJ$m<;|1E-_{C5C0M%h0p+l)zE;sxKr^MoFbt%n&I? zd5eL9AM7TR$rme0Jb^;Q;cNogduUn>(~!aAV^Rrm2^hWagT$2r>BJ1vyqP44 z)4cnAuIodk4RuWcZ&v%0h+@mlZOU(+|HSX6Qp}>b4$1X3GX+_Bj>Sco~E=xWmE;S4ffeT+S7 zOqO3FNc3@`4-`^&&drWIWos|z_2Bt->2*+Hr` z@)fL|l@I>}y!RX!A=I0@U#3I#R1WC{lNv4MES#jgfW_FhMlqpgr=}Kr6hzH4ewT2CUx3d2+`=dE-n< zqAfR%QRn+vRL|}U#c&4qj2vIk>brB4UMcy>tMfqIcJ4sjh<%8#Dm|pGuPBT>PHU3? zAf9!ZBexV`uP(h}b5Rn_#(S*?Pp%gN{)~}O89Yt*Gg5%R9yGq<#OatK>}bDJhF_{` zlP+_bTFHWI=Q-J28=`wjT$CXvSILvX?YaEuVuute=FH$l!%qUPxj+B7f^s;o(Jz3h ztK8j4gSEc_{ANb&u3RhxC~WEKH{)u5`|htXhalsCAc;GuNTD4`By~_n$1CH7^*X1& z7m?dPxNSEj*78Xts@caU5mAZrDgy0Lgr@7fuDxhQ+{w&C(=qT1mJn^+#nQ|~D2!^}uguST482iYFv_txCKn)AXhZOyM0JKrQ35fqmZZg)u? zxv$g&|Mo$A>1Lh&8Q%mHaPtt6zmy|C-#gjh+fZ+HV6VQQt3tb%opfs zsH~+n=Ubw=&9ef1*JGEn+0)nOZYO?&;wn~eN;P@b zMYUu9`Wm2I?}XK`Byoieo- zadb<9m~Oz)<%k9rSNBUCHGvv998J#okewfm1dRLPZ$F{(e2al>Z#Ne zb)U{G$BQj1Nl|BRB9r(M{Tf?li>J3wek z{#`(6@rm(3T3-LB@8MDHZ(mgMc%B_@EH>YpGAuY%T}~jJ8uOGlDQL{!(6E5}N_L4G zET7LTS0S{XheJtMwl`Ml!l9^_k5EIAz;$B}*2@3p8+p#<`zLN(MZ(1|oyG%8Epyi$ zeB1%+U4*8oC2@FmZ#DYG@y<4=4at}g_PAc!hJINqsnjF$U<+Q$R6A4KdEt>c^;^?=`D)5nWw^jMugMG0--E%F-Z-_D z5Z?uqBUdfHG=JBTflm$R?2`S6lI}7ixxM?pR8Eh8FnwluY-P!?2p88-Lmly-_Ljw{ z(HWtRs^9aHZxqV;re6B%Ot#FzV2N=V!T1J~OB@lH+7e+mKK zDWpO2+NLXvCC8p8>Hbmlym3YL%6IDc^4;+2Bux zv8(ys7o^nC$0t*I!zWfY9&uW+(D)NwYHR(^cd%lAvd-_tKf{ zaW+-DUoNgFwUB}nuLf@5H)7f!HB=)QtYtxFk7Fx?)q+a)jJuCHpO<-q<=gJ9n0V|3 zFta3SL`C{UGhXwa5Ux-Xs} zi9WbA9`WDszdX59M5T>oZde}1^42_g8Y7EJ?KXOBuFZJ7baOtEMOz}+(rF#}Wxqf2 zu{3uij%GwA*Bwr7sQZl;Xmm49EV4W|Bv9DKLX8$C4pqn&)t_>#{j1g1odUx{m58589^x# z(xOO-|I(&OB==gy&<;igDI}iuVaiIEQ==4PDUuxJa^Ph4JG%jG2A4S}63~ zeHT}Qj&SvY`NRqoLyO)uFZyd;nP6rqQx`=O#lfde)FlLO&8)LB&`52m)AS1t z2z50lx2FV%hi$8(ntuTsuZa6#s(@o`UFyAIFIVtxtYw3E)IL2%q?jP~@r!Z+k1~B; zl&|b`YJ-(4Vb(Ff^&62hRWOwW1xGAvqlW~3)sn&d54N9(w0fSLjadB>5UvoYw@c<3 z$rHP^N_Rq9f zBXONLf0AT{1VINqcNhtEpa0ag&gb`1QU~tRv)!AhGh+C@_;KWg_I$Z`(P3#3EY`kt z{Sw|^C7b!6zHahatFL7DvEBAFTiTTjwB1^`UhBJ6`%CI6Gk(THJBcd4o2IY{U&)=t zP==OFD-c$C81UlxHQ^f(83Wls%jp)hRYwX14>94>+X1xq?4h4(?;o@=q|<1Z`3?S^ zQL7%5+q5Y~Zy+vq>RyI!UIz=-Jx30gUY1@-c~WpO;P}q5niPpH@w_HPgn|Oqk~wnZ z*WMezAm8wDPX3?myOsMXdrv#?WC&v^Bp~uAA5m?5ZQAJki+u)ZNvtg=u`*T3oOh)j zkLseUF5e}kPy3P0A}HUw(jl&H-Kq)wa~XbJ$|xBZ!o3^d6iahFNHhIS{-cPI27c-d z%9AKQL}i0w(j=Dhlng77D)Uacz9CH(ZCAHx{}c#Ky@c&DRbP@I=p8t*0?rmfoMq|oRfW7>brfMt6!Ra(MtMu z$ivdRtk`9!7$k#t7DzxM9E9I=)N^@_xGT(Il;l`#*o8FJEnXEaAD*yQaTJ)1syoM9ufxW*= znqdGO%8W_dX^H(0xYp)#yI2mI3PE1B8n6T-&LeKTRH*_9N>v#mMJvrk9*$mByyY*~ z=8F8!%Oe~7XKpZ08NO)GSa4YTHU@&^hh%`PAJ|PC|5SK+`ybYG z*BQz}qvi!#;Li>DsNKA_Dtqu&eyBarnPFzA9J39evcCoC7XDB|HLldYnOHWdCh(vD zUQA_KH1rKmM)z3y*%P_$Y>%f`l0X!$&8=OY`REA1ds(GMy;5yxp#}PZKhYH(-1I5! zbXlA8_{&s5CG)w#%!$&GR7-(UwipVNUqn52S`&t(;{dVe@>zyW$h#Z?%BA~4AGr7N zUZ-_4%ZNs$RCeQMUwG!Yps=4AQw?|^l>H*2c_z98Z2vU93`GWBw*XD(9XX9ke-E)^ zjt=k&T6eo5c}sHf2WV)WX&_IAr8b%8+m7EP>YJ4eItJ=;Pk;2fgXue{cDp6gi8^yI zXUEumLimZxoI4_2W%|Dh$a3E~c1s3>T+pblQop3Qu4v^=37NmcQo`Cx$BP0G4XeGH zObxuU4v87ay~^=}6umdC=wBzljH_iZvWi*P#}3UuLZj!_BI?&rfZQXwvgQc%&FMr! zzK&)6PzL_*^xWppmlk2fw2JeX4FL_~y#)QO{nE&L#Jy~7YdWnvOmAT?Eks6|GEMwX z-Jz!<1IIQd{Gn})4r$rW$W-wAfo@J z#lYnsbii3f!gjcBHOmCUqUX-c*(HD^7B&1bZU7np5$FB}D9!%6eCnN#xJo=KbldwN z6d@5O@+;##Tx#k>ivBhIr*K_Q7RF(e2rXfDfuP{~sd?f8MoF*u;Bxa#X3M=DjgOV> z*NDb84|AJBK?&mNskTeXXMrP=K5RHO&NXOTbIb~HrG7z$h@6YTHhM62)tm6n<9&7Q z%6Ool%QU^L(T?-yCyu7jbpr#L0py(xJ|?=XIET}LFrgf-YL>P1iqKB+=7j03uEheq?WwZmYIqikif2=PopZpQ0__vNBX zI!Htv159_%oof3$Si$${?)6(=jmF3eJqc`euB@HJ=M!}Mn5VO1?sI@c$x_cmM|Sg6 zKRB5ES(xxs+kaf^4oT>_74fE%1l^k)_f)SyOmE3bZ!CpwjL?MS6c#2FC4B$%EGNBK z!ol#*xq`QgdC=hbTX=N9Ih!uK!9**PX0)>~QXGTr<ttv{{WQn4v+pgwwIQOdqNZ8zkYvtyez-+|Ju zTCL(#eL1q5=6Hy@+eAoEr{pt?fo)gvO|Eb2o94-p-O|6OIi2nK9K?>A_pW1DBnE|j zyF<&+UHSVTq8{@bwf3#p1B}yJoKQ9x!-Hl0ZvG0!(Uy@ZRXSHG3-)7P0~gz?ca-L1 zSI7(bs!YqHH9lP8QCu(Dz5FbYn17zJ3p`rBu5}Ozch#Z%du!W;RSiCx&l{bjpEn|B zqYvS`9@S(ZROFT(@3vcY0n^6@CfAv|n_@-AT*KxWQ0y|ir0r26|>;ZpY%bVh}pEQ#y zHK^5*eYYXVbUU0_I~lpqaMP#a{@cQ50$gKt0khsz@12cN=hV{PStZN_XwLK+h)GeV zBz8f8l{1COb?+Xq3Oj(jZCzX6tfctF2-w8E7 z%Ca@i)W)IV-dFloP5C4qFGz5S9Gl(v+1)?{nW?hFA9Aj|Soq&>A8TDB?uc3t;{Qd5 z`?TZUjbwUD?~3dGeTKEmLh3%`z7xlXacw^?M-^QX$KBms6T_m#_GDdvdRPP`27SB~ zaOKTnZNLp`r^zBy*F3|K*A-w+PUP-VCD|e8(Zn52;emX);*g~%Pb4W2(i-x-quQ|e zQHn0D<1yY&57|VZB*#Uw%wa1SzN5sEY{80+#qsHhj#ht3BTeBQI;*Q>WoxV9BhydR zPrLD7kH3@_=1BxbULaK~q)b}c6a$4?ibV{_6X_>^n;TPlcw1ZrkKe$V*dMSSxCO4P z0IL!~mDb)xxq{csw`i6)7ZR^W;T@bFnMy zV7rCsrmftnB&ExGx`*2ODNpB(18mcX1GLZ-Vc_L!JkYKV61B+~G~on)uU(PKi$I{tsyzg?s^ji35y+Hm$yGELZ256k1%q%ACa(#L1 zap1fAi4N`7Z!nO9-!b{tUdMcUCEOsLxO*-Xx>(AQwxT8C=fD&?u3#Ier+p-M0(G6x5Bnu*DRM-@#@+3S!jS&n_QXXnlLA3b&%|6vBtgp{t{n}{ zdn!b6dNG~+q|Z&-#)!%Q^I0I$)O6T=YGzS?SC$Ihe0^4aO|9(+k-R<~wmR5K`6Xn7 z=Mb(grwW-P?iLFRaH_a_DzMAl)k#k{wFVBMyfH(wADa>9wU`}Kj3FgrzPAfdG9K(QIJqie<(q-r&`7e24joO8T^8&nEgGpBHXt5yrzYlc%yF^+0`jp&yXCRTz+19O^QuN;x!@C zy%`Osp$gp_xe3LMh&7hoh`{J?m-SNKx6Pj3@;(+?qTZJZ#%jkT;T|rR${EC1!02rq zJO~b0!3U9{*Jq4_c5k_;fR`XdH?qeCf*%{yr)AnQgX*-|sIOj3te&L&95@zua@BR}-82s#d?1y7Y z5;3y`)u~Mf*m!MID^?cdMwL`O4?7JV-TqP$*+0EcbS&|S`rvP#!j6s6kxd*dgm&S& z;U++YuBgSSRayPC6-#Y0tF-bJbLP_)$jqXb&syVcjd=N!kj3RcIYg^D5!Yy7xys(` z;kYqU4c{24HowDuH`ZS5ck27J8Uce9xbljE1_z&a&4B#`SQdcI3aZq&itRYmz{3-L zaX5Rg_VSRXX{Gt*j-KV~Q zA1B2aOME>Kc3}ToIbvVBYSe<$e6LQ|p^(IY>&TlT2z*hhYVT-R`4iPhXQn&j)r09l$bE2rW!QVq9m zd=sp4-^cWPhOxINR zbd}D{`(IxM`NhB12J=Po#ba@4B}GcnsQ4CJmXG&|x^>yOWDc<8DEZ*G^WNZ0UitbQ z09=q-y+lO22js}$I&-zVUSk#RD5Mc2N-R*Mew~1N_C>D5`Qr$CXjFv~<-uRffxm=b zXOCp0;!tK1${yJ>D_cgk?7ipV*g`fXdy`G}o*^T$ zv$r^LIL5L4F5UP2`+k1E$Nl|}|I&kVUDx~ldOe@8^X(61=-A>00A}>PW^4Hv4>R}i zs=$?q^$Y5ql*<%!179g$v#j$I{FSf9Ar&ZD>gcGKznnVi!##qKHxNsO12;pF&{y3f zUk>!n^qyg$M|A^9_=Ka$QM8Zw8m3C~OcDaCTgQm8z_|>TubwsR7|lNDMx(_3!AdVy zb?)h&?i`IsI=`t(6v5Mf5R8B1MJYXanYL)uiAFrqU}*CGKkH}*NhbE+kJen*`f+e0 zT)dn@l%Ml#jn(E^CrW0vV2WJ8vjeKLkY3lsS9$zscUDN0*g8swqY#9mdv2So^$(FW z{V6;)nuY-4ms0=QIVmaY3oSRIT9L+c7V}|YYr8rHtZa!XGX~ymU~WrEKMjbFA?%tqQ;$s(Vre`^PiT!*MFp+O42)Jrn>g-Mx+pB z*ot#;g3&cgfJv`oB%R(t_~H)EL90L)d)=YFpk+wag6wwBZq`E)LA!(1?|1chh>8J5 zBTo{?{PtB$d{ETheq%6}g@QulGG$U~q;Uk{dSxe> z!s0R~sB!J|M$c0#S5+dA9$ezSYyzyfacw%kD!_}GDlvB!fq6p^gGBL)8ochq78Pmm z39h0YbMG>UnT_pLC=cqaABgrGn!_@COz<~6H9)u$EF==Q1TZN&INb2a@8lIi1*j%h^~jGE6#$ROP}&z8VZ-4Rtyz2O+LjL=%MfX%{-xi83#Q`C4OUz0)oWGJQ{e zi}SPp(P}@}pvfdjNg^`}ewgK(LH;`cy1DY&4XtfwlM+6iCrZ9JE?p9zIdJaw>Igsh z>QNUy`rEviQn#Nm6Z(^F@5-oURCoDQPj9HdDwEb9y}qbf-tuXWx!YwxaDcqxhfjBm z5Egt{d{!CU;VKaWvH_ve?oC+b??c|L(Oks zP(BY8sBHC&Vk(vtWp!EFiQ&c>qetx$)0PjfQF?uyaq$BmST=hbFPTA1 zezeDuMmUIVVy^8RB}V(TJH$o&cWrlx(9v)R{`ktSJ;{z54*rEvm~&AMyL#k{!)`er z-PNjlhLOtslL8IjHvi^n4QJs(Fvg;1Z$`%n`&smpJ?XE)A>C(s@S$8p%i+&K{a;{e z4P+xR2ez$-MVEF2(p}_3ZZuiW=?rC?SHzfI5Y+JCBbAI$=9u|v{y0u{&dLFaHC($% zSBD)LX1-bECbROa8##2aPoMZao)S@fLjUd1U^lgew94W&;2h&QKn|GXy@BHsuLxwN zZe^isEkci;Tpz~#2#S*x9+%pK0IR50^q1=IrM(#=x6|zN0TWpDRjG-0n`K^BFQrFn z-1h7n)9jPajX0%VCc_^!<9On=G}}&EWR)eLO*T4hfO_28c){rfMNbeIJ7oJKO9m`) z%|G{KM+B>L^WhU<7G6JhD~eOp|LxNRp3W{>1+DpxwiX3j{XgUQVBnhIYYA;C6j|c- z_!GIwFF6~tJIe<`UL&^})}OX#!%B2sw?!uZ?sDe@#VIcQFWg;C@OOB_iic#DGl zab*>*kn}nP%(y>nX!>ySTo(<80tMS<2Z&VxacOtMcL1%jJB#ktP1@z;)|%Isq9qBX z=skWi6T4ecGV+K>X(Qsp^u~GHyXh&>ob0k0z06(8PXi}W8!*aORpoBmOaS(XnA(c4 zIQY%KdCWBJV32uwmG9%>oOsHO63wh=T-C%=hX8|B@aFQcaQ`>A1fVtptw}4J^cw>M@9q5WN&4=|57-O^!LM*D zZD1ry;Y^V{(LhZI&2JSIt=92%D32UdE%42c<_(|^Hz^ziSBuC*fIJFi4W`bGe*g42 zlO>&e3fjYUs`-x)PTZOxd`~QtV8D&tzlXLm+Cv{5`rVh_V-=A02A|%ryTMbBz`?%v z$)D!=a1oh0Iy!_RMLcpx{J66=@%_qEqpmD}EY1{N#_ezfz*HIxbTs-Tbwp<8^)z2* zK=;nlZCDW>Z~p^s#03;O_mHHACq1w z%NWPD&VEp{bbjM{W60soq!`D0#F4MN9rOI-F1OmT_^khf9{2kksMo<l5Obbn%THCXAZPc}LB z6fc1F)}y+lPW;pV5sTB6A8=0nTQj$4VGI3NvzT6lwyN!G?Po+x`9kpVqslYQ!+=e! zVIuooqtMc8VUn5oomtybWpsLeaJ*ZGdeWRk%UT}p%s0ANe3tieTrUFEsn{*+bS-1t zVK;0{dd+<5ne8hv-^s}R{_3*o+NmQrt5N7^+tT@Q-IT#RU#@2R<})gS?AntPxWlnU zJ9f$DftE?3q2#Bak?tlNUzKZUd)r#ITlwH+!|t@1L?aq^cGTKHyJ2e4?pL47S%Mj> zlVIr#45<2EojFdozZYTF-`%UIk=+h-2}lV=0AZTX@uZgWEw3rd%PcB_QG|9YRvIEx zqHp!{SF@Rf4>P2!{L?9BuP|UYBjzrS+ixz~4c}0#udJb$9pJg$=`G58hdm~(jkcNY z4-FufoA1S5)p76(xhxjJunMsed@OT}-zAs~b*MeAFIkE}adsJ%zR?dBAj`Q@Q)!Pn z*>K)Zjks=SO}zP#LA(F%`zi4P1`;YN-%L%d2P^gtR(*F`6#ysS#=D)H_hJvc+IiO> z*@|bkfFrH4$!SpUQ7=R7d-O=FHHZ$pGS@0R%TEXb>lqydwmAb|T74w>gBxTazJX;~ z!4Zk)V+hrS*&pQ1&QKAeO5&g9AP{ZWzQWdo2R4qKz9Ty?IWutXV>;0blVY3rWb8&A zbgyXV&FzFDW>&O&b}MODHxCX#h%0?LqPXBz+4f?~s~Cq$pHA3cOb2a=ZnutgOAx3H zTy=c!lnrl`F%O+Bvm`b{77tU6JS#3q>x0a3Yun9xQNP;m+5YsvL>4bzPxEZuZQB!S z(5f9NzqfI-QdKTeR?~Q-u{&-*^bN&ZD_5(y3MOPm(1D*PCb(sWCA-A4kH!7iuh6qw zN6>TyziA4eQG-7v3UDt-0GFV1+S#BJH*_bAKg+ycXxzxhyPZ>!JsU4YJnqPu2ekixEPSR`lGIcW<7dkJ9vyt}+NzkRWF*H3|TU*uj;s_(=J(hgi z3tQN5GF)>dOTK1=b0F#6%z7wSXAwLO6>WrPWpOE;{%{y^?;R~dj*4gs483Fszs3gn zZ;yK_{LNL9gxEASZk)ynsO*~~8?z+`|G3PzCwVW2KF~-%T8H)t0Spdb6CK6BY84ss z?;9p{uX#Fa==RhHF`5h~M0$%yvW%icd!|($*HRL0w*elm30viv>J?Ly`-$(5c4d-! z*y=?r&Tp@Z6QwDwzx=9W31hTlQH&xlUBP|e=UhUV0P^Ih8c26Uty|6#z}LA7D2tZ* z!tHIZxu3ElSAi|U!`6Ri^XbPy*wMup0i@&?C{~|K?vf6Qf%qGrzo@g#Jr;uGy`oz? zo`=2;(9LpjWbW~cX6}i6a7~~5rFP1?@7(kx~Dv)KDC656E#LrzC=z$&`Sb>;Z2Ut~mC z#zw@~HjaxL(uHWf{vo+e6wEG8KzNLh-_*y+QvW17)cCjAhkJu3F#1pW-mb-V?@Wrz z+Vjh6QQ$PD_zV}M{RF=ve3d@Z&IpoOTay-0#{IJpFf3;PF4#f1F0>GNBkd!wQ)9Mk z?^kV(99x>2za7G7+3PvA-?|lU!)h8-pQerNV(dIdPd9W6r2$-|!pnD7nW{<&WVz#d z2&vsreQ(`mBK@p$fwf%($$PL}cK^UiBK-6zfG*;?)rd!oJ&gQ~S?@$0sfk(f2fY)n z-s8wXP9tmehFs|+A?G!I=o{8XQ!SA>7qy2$Pus|ZzTTm~pQfd@59JI`9Nv8WTK>5N zeLS&zg4THmn%n6F3dRyPm=Z>3EM06Sz}ck?8mUTanuTuDHo z&0*wyvCkl9m=4P87c?8`&pu7o&pb zVDooGzVL@E$o(pH?{XV@Wnd=$=N|LWpXgBnC%mXqJZbfIwYC%-^ujN-ym!Jr%R1b8 zvSIHZa>(9(YR-Rm0kmxLNn0O?A8&0U+e5=be(w$?-^9vT zEP`K2Fs+p76Gv}l5KNcqkBUsN25w0>e!mM)4;ET>LCpX8kTd6cD+rEfg1?#dahK>hvR7TfzN7Df{Aq~)Xb z>*I<+JyoKJc>rqSRGUt_ellhrIts2Z_w(NAVvVq_Gi+jM!&%SsA>!ydKlTUTPk`AZ%5s9Z~E0S<&vK(k9gy7kKrF2^aKTz z_hL)X%k4KVKB<{zPrR6=98Z}eSkS-LAPl(d@r5#~`_T~e{wj~QgRwEn;llLG1;V25 zc8Qtd#UMotMV?8iUN0bTkR$J=PlBP0~6fsSSC{I%3bTf|`p0(6RVIO*D^ zgdZ>Q>Mdxe7a8DTpwa1!oX^)%mPkrWW|GkQq=vdf@~5C z+$(6>fEGeRIt7E-PnR#yBojQM#gmty-rm>gbtEmqR;+iHaOegoomgkx8yr56{&I*x zU&_k#ZWY%+*scHWcitHZuIm2UQ101IU-|{EQ33YeST}83Ti5*;hNUB(2<@M`VqxjLeO6c3zGhY;7c9{>q?8&TgF3kER;J#QNrm}W$kA+&xwly!(< zJ~!H+PA5CdWM>Qff+MBU=MfsDy#!eCTAB?x6x?TkJLFTl6X@D=PBN`YG(Qegpvgkt zt=A-0`9!_<&Jew-_M!29MsEYfNt5`iKQB*7Q#mZ@VhK{7r&(=MQ)+i zp4&<{`l^}nBy;Az;8TSZztH%nC88I8$$k6tuFnRSP#YQ+H~jAzZ@C`cVLAY(XJTJG zUqXt!r4uO|1T?Qysu%y94B+eA?KUkqq)E@~?8xi?-n~tpDR;YkU-%I79}wwVncw8B z-+vRl+UViczJ1Q3=>rdCKqyTIu5-~lZSj%O>1N_wZwYeyFdu}g`<9~u-_|*(71yHf zw|RK^+BnGrk{HH!E$;;?i(ylVtpu5=de*CfeJ7$gYUJzd^#%De#i(rn`$EForzXXCq)0E4emVrk z>aHin8YKp-lgJBt@Nv?TS_92}B4h?Zl!`k(q=H&G%ZOmQz156;Ccd0~3t`@K-brF#Vp!o!Fl97xgkPB74j;O>RBaQ9MkIOhM zW!?@S>BUI@^B5e^y*56VyxZFVlHy}1)Fib5jF`g-yocA4f0Xkdp0O7{;Late)& zyy|T=bx)~yGNQazFu|%>E808hu5=oW`5i^_uzNkbjt}?zw!ky8byfp@LHA$L_4vzc zRC}g!N=@A~bm@2AkCv_?)?24YcGSJ~?_n&#om^-pA)Cl$lIWJc$ULS@N1BlHAW9iK zW!Ymr`=`6-Z~rd5_$Cswi&nHmcm#X4f2G}yG6~$7=^JdP2md-(pZyV5YHHk)wtBR= zL)yr;`VXyC5}y?JN8dbOvrkoTs1v3dX!JpFkbA0&?pW~Fw_G9z2lZ>gTMp=we$}}U zT5&iiFPn~;FD^B(bvfL%DxK*=+o6=SWI182XmKg4Ef-ahLmcQ9SDbN(?>;?W+}z0y z1l+5TjWC}_=dai~gKb=l_omwdQoBprEC-GEa8^{}kd4$mi)G1MI3clh=EEtIw{?Gu zeFdr~D8MsAqsR>EBQe5!G_cT5lqWcJM$?39uHX5w4h;SpsfQ5==$r0uQGcgz$w=mxHSHYNy_2fJuL!70$mNbUg>o+vB&AUytFIdpO{d zOz+MfH<+{tFBMJD(xomg1MhLi&18#|ddA(LB$P#)I>!inp|M5u0wugNzr0i(Vo6Ol zKVx(?Kh09v9gN#eK^=U>-6bZ?KyBPAef>U<(gb%j*_m{km27R#a5rvVOUH z8^l)4qw#vZ16I}yY;rDaZEH4~PCSXCY|w0SS>-IS7|#bY^Ka3vF<}3_h_yTqz+b4t zZ>HcG^{Xq)6hRd??Do`K3iT{IR>&_%XFsW6|Y0&l>=gd`XgNPI<6xH#V-DU$?yT z>^+%EN!|ZNm_*HeKxsk9u{wUtuu4iyD`T0m4C>NUSM1Z2PrQ3EC_nblD@#jKB>8Yo zs?94?{KKkg^_+2n{x)4CD;k~Sj%2WxVX8%nBo0>vRzSTvL zxRtfit2Mq?*Z(hhAi+T$utYcjbT#AQ72-aO4ZN$-R=hy%O6nT1+GM+Arl(v!(y9n+ zI!Y<5V6k(VQlf(H9K&Vjh%;I%kfvS<7A5nNg8k!@X!J?;Tm+SpZf1jvR z|LF!b-#6{?ctzlRDvA<1kTauX6lvWEQ>K~th27X`WtAiQ9=pH*P1+~Dmu3F0wB0ftWuG8fQLsC!T3mWeo>sONrDuuOJ4iGVX3Hr~(eBDl~Y7)xpI)zAm`~rov zR|ojz7Q`cL+Lg<`jLDbB6@INjHP1z*xwBpSi{fw(cD|E2VdJw!bmT<*{D_0iYA* z$R}E@P=UGxc03jW=l+lB(gRzXHxwWGp&{8|+wwTlNzYG@O)|~eBrLJd2D}=Du_@H) zM($-`20O3ashk=Q`Q-5l?ZDCcRb^d=1x2@pJFn(`Bjh(RQLjsInO>?fZ+2vUo6Oe( zWAtn9p!u^4UUVZr$$;XB zbT=2I@oew4DXk`)-^;YC>|uOj+ez*Lu}T(O_#qiUP%tb;7P+NEWrX8Hy*69X?Atm! zOF7e!bj%Ci+QguW-!0`#B_i!@s!;eGq$s4n5Bj9rm$p8oMaKr zaJ6ysB>`sqJ*z2b?jrTD2{~%01nZ2G=%?NV|MwH8FdPi1(PHXk5^h=RpR4qSCBDcq ztbiTkRyk#=^R#O!_}cYVDpd1>eFnaXx2X`3i)bYe|CKN=DoE@-tvzCzt^LwjamsQ7 z*+Z)QV#7ZMTzmH7TE^cubgn?A$@h^sV2Z!P&5p7s*9xj&ID z0gkk->-y))t#9T0epw>B7v?qXP3KS<-`}|{$`@5;cD_1cd*3bpj-7{|`a?OyOtMHU z-onbu$eltt>#xXHcZev|Cq<*dm9%6IjH-m6;}9;m&)Kmh^i} z=@i-tTKOu;@P@i$+O_8M;FFTFbQN>s%R+@|dDA=x9m@T6J{Xx`>_B%r;`QeBXubYT zz5B|Xn5n+SF$JX1&POw4UYis*8oZ4wlX|!6P=v03G-uvG!J)p{y!!Y-I&~iFGoyt^yn|=x2$ohm9BYiztVw-DjTQF6ws%Oe|en7k0qC0OA*} zYQq!tp+{0wi~l~gBcWEZO!i1H+R3Xj)+55s+E#}m(SxO`?q_eweC!SW29%{YT3q2q zdj84&0NaSL9ld3Q{<`>d%qX#aY5VvY!6I=0A!Rj+byZpnYnG8iAIIz0xo83Wj;eETXsWSmr$2zczq!)=|CCQZ9ga|nQVg#6x^XLI{*?hZo9-XRJwpKvIzO@0P@455zXx zw$LhH9KwIN6kEiiq{~P53h<4Oqb?%)ULPATcv5>aAhd9N;48zRH63~CI>wdym+O`d z#=UqP2b{l770QW?0|v(`bfP~zd#1;+>pQo{Ycy9A__#kIU*s$kMA$J|=9M~0zZ0)g z6e0(PT6N(7NKBAXu;cZa`%W38PR@#U<2#sUGJelWA0P-kc!e8`F2d)G_eK6vo}F}^ z+WSv-etrt;{WTsDB~x{@%d!lMbI!J>&I5OOpI#NEe`qO&J7$dUe4Jj4|wbk)<Grer}#$mCHQG#{-xk}P?@gcE{5!2I-4NUr`p=7SD zr8l*lp5Kf*(bJ8XO_b@|(73+57vkvlS~ZW&6^h>ygP{wmN^c(Dox!VC^4hz{Y{HmO zEHvqGMNay}FvkQB7;jaYNm^DEc%&jKO% z4uEtWAQ$rV^P8U=W85dO!P!Xfm4sxKNLglTO>pX*B+KBHH@o@2z`GQ1v9!IrtG`@~^i2R* z@CtFCc+k83+g`-CtC$XwYnuB#vS7&lE@YaKxEE_9uHmFNkkLStwShCdEfps)c#7X% zFKQQy1RKM8dJDk1+?M;WJ5jo;RaN4k>~(rV`uc1OPC?y3qIa6M6aEiSejDq9(E(V zp2e_|(2DI}OZbQ>$K>f6^av$0#AY_s`5JZ^`4FL3scx*yx_mk0A#38`JhD^ybo%%F zm(GQ2?e)-=w&BV18!ERa7i_f1w9(8E%S1dN};{|)z*J|-C1_#}n zXv5nbR9-gOi(3K zpcZ4#KW@6eK5lxVKqIEd4xrg|edmrpvRhohc6-&}hJn3W;s=(7A5XZhk|^2GlSiXi z<_?l4@hZEYoeuTtkJ(9auktDfiV?yNzLSwP=TQDrL)m9hmD=OtEmD0D{|+U~{NPPX z&5KQ1?{$Bs?HTT(`zOEhG6xcS<<^;oH$soORh3}qRjs7$Bk#&lVdc44-_+Y;zWsDN z7JP7BAypb4pONSr3Dv?8I|)=LBK3*D z`O5HzDENXzPv*pzi~5Hoe>(mK8B)wPnI_#jBOB8Lp7Zx^xU=t4 zsSTW3by~-^eB>lb-t3|`Wx7!BKuSaqP?>fB(L}BBn%WWJBa->AW8Dl^#LRPoFFygy z*rK0^p$kUn+|9+tArZy6py@xTb}j4T8VyPFH($f}X~qGQx!e4EEv}K_kC*2|qf-|m zt(hQ>b`xM~69=ni7Xrvc+6^7Ls->+eR|@Fh>4(dP7k95la%7` z?L>}(8Eo+b26}>3^GeLR_R2`vj$;uue6+(H^qfNO+3gZCJ;wm0@dVCy5zn}UunI}} zMg*48MNo@xS#ic2GL&AqfKo)YAz09e^KUrWA?IC27R2BE!Bl~0`|N^mjzjU)B9jB& zNbx^Xy8g@=${BB*1ZjG;Q6U<~N}QGE{EHwB^OLZ#O7t7!wR>xr6$%N?3bAU#EK@nL z_Z3yHq&qFd59&m|A}?lK=tlT9TF17=EVtdPP`!@kr>jVE+`BzN#*bJ0gBfXZ@ddAv zRPbF6k?T91vIJt%_}8xQluh@k`lkSunMx=wU~mt_JyZ3#JPpl&C;2AEm1nGANV|7~ zqW}}LNL8e*?y-dSB42 zp>effEH;c$>iiW?E*k#YiW$OwH3g-qtiu07!fFz$lqCeF;Y8MCV^i{0HkiX?hCT-s znjAq-Zy!3MBV;6fN?lJ4vh%i@0x#E*_7UDji|rGAZ>6nCcl_q-)j7mN;`Ci@!=oAW z=4NP2SUM?(2{3PjZv=^M{9vU(lg$LPrKb{PN>e$ub$c07mzvwcA;zAy*5vaS7u$9H zcML>2e*MCnyrcHP-#(Q*mg%|%9U4|b#Th$4{ik(tIt9SA zLF~L%u4oVYPlB~zX{&8(KIvvI{N?aSN&=5^1JBha9VpqDty2h+PzAT)*$!h-a8KWd z1tF5fS+c#h!cLSO1>ot0WgR%GFjVu>RWLW^n(Ub7> z?42?w)pyT|tYHl&dE!r!g&R~zcK!__DHD109{ZPl`U72=do_e>TwK;vxYy7Pc(q40 ztBZ-cXFW!h8{}XHnm!PE90nN}549BqZ}u#48ooPT=CucD2#_$SA%)0goL(&5T+5W> zFKL16h9=_Xeh(ua;u>qL041`k?$vFz3;D7|MJyXPVW<&^iMwbFXn0M|9Q68=wdWsp zbWNC0%)MA$_|AF6zM`Z)?F`q-QA8U{hwWR{5eEVAVyIZnFgtI9&>!Jka3b$%MBWW{ zZ@6bXl*)&TGpAA>a3rNaBmQPy^!hf)^|#n@G}vuje$3buk0$7%8n0C=d(<2kLpAX7 zcQXa5w3V31Bw!F~OD(hU+H%nt*W@YQWXO({9rP7U_|Mk4b0W&6yzB`vD&y*?v~qeC z9@p@MTQbGYkDR;+t7j9o%KI6Et7F>p6#UIy{dx#)NzsCPe^whG++c0pPvK)-&G=&O zhB-7&PmULPiTPH!s;x{&mD;>kECXUWK`P7PS(g{Y(=9zZ4EyoF6v0m!S3ne z8?)%A+*$ttJ~dQvQUt%j)x_~+gvjI9>(GFsrwtquc3nF{YJISllQq{@r$6)gBZoV7 zVp=F556K%3Qf$htoL}=lM|Rz16H+`=ekMHjL|@+bixw@QI0s7uDtp}2sUl1El4FHbb*LFPz1Wp zl8var2a_H`D2Dqo<}3fpophEz!e1E=Yf73_&xnbjX`q}~&69{QDNielIrADvxZ$_O ze5%O*A%7+^;9XWWt^T*Y7(lq-`3ceYGnL$X3dbuh`X_$X+Y0f|9jkglQ$)-c3y|if z22q>~nN}mNc3v9e$DN=sMl(!aYm@|fUVFQ__|U<*@v$Wl_Xv%*_sq8aL_l!qDDnR& z8&?5vy9Z!CeZX6qe&JYu%ncuJr8wDdZV`U^7J2^ky%PVy z_UJFa#nXdDlHdE{?C&kadO8+}8-sMo>@B_RVe}e`-+BRj7>&FT5Ffi? z$$1xknK%5CsBXIOYt9^HYM{}?rt)!Op!5I*Q+r<6T6LBwEw|+7!})MOnzT^@=ES+4 zX=^D$(+B&$j;zZpq^y`p_cIB~??}U%j;C~&Pzh-aC7NYA?%ntJ!U$;dTagy>j!9ch zatz2MC6S}T(Os;_JFoe_t*h1cK5hP)5*FDJmmC#{^o9F(_ zEMtJB;02DF^Y86;kY!IzVuaC~kgKP-*x`$;3TP}+_VjzI4sfUMc%vVHm38|srr>$z z+V9^#k}Yi%-}rvI70-)#r{t$GL_HjMSKclGNj|`eRnrM23s{$!PxK4Um|vZfXa7RW z`r7mFgro!|*OcS|YD9k0>CMPzq^i|H?<-YFy{wZWA50>#a=YY!mR=SKNY;!emZ?;} zyGdcf{pla2yqYAla>$MZZo9OUS5B*t9_{dvsb@h?)$uRf(YVWTF!WT6!`33F139AMH^#QHNNu}6 z=``n1@tf^F=5jlQgEfi+Bh$69M_i@(`b3tNYsk{7X@aWf)LghU_Mx>s`C?j>>^YcW z=@d%(sT{ngga_kidW@cL-m$%3XD~v#0E}r~Nd`*sKW5~f|Afi#c(sL3$3Ol+bND{L z;Pa0jTA1RSe3YEPLuPYjRM=ImiCfr(q3eRyN}BBSbm_q62*B+8%bFjt>Yb{y?29Mf z`mmjWYHHx)ns;0#F2)(&3>tZ``yK2|sHEI*qwy{lKz}(`9w$w)>CIhaungko1QF{8 zHM*&3i{edA8PD@c4!CvtEm7)uTfSVLHrJbjW*8>m*+*%Mdpeuc&Ib3|=q44}-6<37 znjLDNE-IbB7`!eu+|BdWD&TaUXja<4q>8$ZbE zIH;;E-tKOMKOSwfKX@{c>lWmNK-)aV`$A@5go&qe>>KHcb%ys>safu0!-zp5v?!@_OoD81s)T7od7l&QEzI{~)sn#4UoOp2 zS^liNqS`N)Q(kWP`SYjxEs%Xn?;&BzZPrdW?|c7!v7VG#Zz$c7OIUBf$_^i*1{ z{Xuk0ZRE`%roV5(jBH$t)*1&^LMiQEjXzw;>QCc$fepC?F_ME~vGnT03@V;ys*J@Y zXg`#LdAFL+2G8q|6-^kO7o?dX{F$CKVrOl;=W^f_`}VBOz&8c@@T#67r=4WJS<^p5 zy-fKo#%}j>YKn@mIiC^FM=e5DJ{U0JueB=s6BW+%6WPWbW28=V?O1&$DAdiEhW@bG z8FB-4;6pF0io(Qz=C5$+k|Kra&Hc$af^6uA?+kkx8*1(bROW~ZzJKFcp}z2S=`|h% z7R`nj7cn4QO2WEYjJoT-3`CPX8VHUNiC?hYF$f_yO(YeahPax=U*DmJ!1Z-2{j&Lr zL1JBFPn1U?LC;sbhs)#eX3I2Vp`l#f9+TH&oXX?_+32RPflSzu_Wgfj4*aPj%_i#ji6>?W7{3d*<< zy{kpm&Xwg@KNsacm}+4J0ML*h>EQAFKa=h=1!IYcIdzMIiyClL3+5qoxyBb7qd#Zd z(#fDr%~s|vD}SODruj}6jc*&<76s7I+WH}3F|QvnX&@gjd>a;fF`|idh(I_KMUh_(4>q6vh;z_|^GWP={8vSt^I z`QHXXOKkB6*j58=auMsC$41bg!L|!DgD1hoT29Qa#q~ta=HS~` z5R7lO@t)_qIt`FBnJeI7=aE;EZswUbHkhV8R62gj8WhE5==_7BU_Rrmz^|zXMm zYJ@l&ykQWQbdbU1WKM8OPW&m&e1|k$LQ1}rDOk(VZoTjWHO#X}7{O$50#aq;HrB&q^#K$x7p7iOs?tK7H*N zVb106G+;qbCP({H)``h+2grkYLD-@4DaL8{rm-d8SPTCf4Vz08Uz< z6`A_$qq;=$%3b5gea!dR>|*koBz=M39?Ozgg|Y{$H4NNYF}jxQmF|>{KCKEyu9{$T z^yGj2Tos>aO;@SGAWSmgxe*WA!!MjBuiFN0ftG)jVaNnhOG9Z_G;5Cmn^(ugU#bYq z^1j7aMb3T>bDPtHoo$$#(wf!Ta20b++Nksw-w@>;=@Nx3L1`bZeTEh=Jt=|oW2h6# zL^(ASUN0*%^MnX*tUNq1ptT+F9(X~%N{mgfmsLmi-IF~YN7@rjYM6Z$X;a>4KB}DT z2iQi_m&l~{M4Vzbin#zI|GTDAn|+yI&{$Qdxi?ySDQZdgl4+x9f(W$g9!k4Q@Z_dh z?=Kz3N{Hr6#E_(8iWY1qD%H*vsTZakJkHc0pG}ORrHRc5v-!&d?jvy|pCMDu6&XwY zmi%eK11PhJG*!ww(i0m3#BOKN1WdR;`QDpWX}9!g3}5_b##`v$^VtnNp9juOP1Ci+ zT~(GM+vu$q-Cf)~Wu8u?h@^@AtUXp|-JaeqQY(t=S*CLx-f`V~+e+03x_HY181-z4kM7_HH?1 z5ZjY>KCof02Ti3GFxUR%s~v;~(|;{gx2Iz$1*5(&tgowcOMVlSFSAB$M|Tq4*F@X0 zWHqD)bv&zaOP*R~#!y+=4sR$M#vN8k;H>k-+`s4eV2Oi>wirVMOz(mj%YeYeSj!F3 z49eMlFIN-Rfl$#W;z%`Q^PUdX`=M7!4PGB;%WFeU>LZEqOto#X_j^9cP?G9B0k)zJ zf+BHSw*F(vIUICjqOY?J%S#Dief{^Tu7yi9*McZN7RRUSK`W~QK=Uf8!cjJ4Rv>H_ zwck2(LD62-ZFhRDBd44NE&*3?IxV-LXG0L>*hjl}|A-MBo?w=i5${}a#9B4{+}9tb zKFN^w#Pz~M{H3_dgz@A{-nX!}5{={8GJ%8MIoLh&h3*3z@y-}LRjH{kj&H$?a(_f~ zT|`w{=b9e>X;p}g!bH5Djff z=1wjIeg9Gt>o&q*iY~`kw9M~Q$c`iajutmn8Mlt}nqCuFJ)_+sVGNk30fIJD$)C2O zfsw`GNm0CRs%FCqykd26HdEe=idO+>pk+qYu!y-SE8`*^3p3Y?@8ZztO7n}QK z{?eee8(+`{?&8gm~1D_HprRtH(I?nv()Vl>7crK2mMb5x|{@o#F7&KU6F!Yz=t z(6o(XDe|db6x}rjW8_Oki~H1;qGqjAGd4-_u*S60^>Dts zjEUfc7RI})WUx;g=O*P7KTQ|sDYdz>$oP7%k@>J>L{Iqr&qql2rxh}EXtjk~doxb+ zm+5mdiw(LK1vYHJCds#bQlW!2sdD}8Z^-qnvx-i*md`_(WLs|W*1pWTd7TH$9hcx} zPK(~msBRF+rC)Hf25zc6uz5Z``7B{0Qvh|9X^ORX$nXG)EO`G<*A<)ft=N;Jmh)u# zW}^6MX0M8!{ueXp7Cw#D2L)^!l+7NoNhN@JHZlnR)MEJK?&lU^eO@(iW?!8C(@GzY z>hiXgAC%wUmNTe%u6tPgN$1qBm?YCjxKaMi|Nfkonqq}X-m?rECe6eK+!Ak4Y}(1Q z;QehVmBE2>5O`X@o&X-%L^5=jd9zgW@)rl%uwvjQv}D55)_s|Hg4w1S|0b zAw6KNv$s;s?9Vgn@2k2$Y1VhWXXzJ<4l6g}3+0M_Rw@M*)0dUeKB zx4m7JEh|g<{XUoVA^x{8PCfaWW%2y^ScYQLgNVwH^6QV8cuWTDm_Fn^rK1wm-@6PW zi@M9&VDx~z8dT0vH^DZvM_;Q5=<5V=q^XNRR0Bqp z&=?7%of5-E52lrHu-qwLfdq7Irj1GGAnA&u1k+)j$aYQ#2-WepQZu z)8{is?t|=%Q93NE{UdJZ$=?=&cX}G_h+7vdvwneI;ftZsc%PK97^ryTPYd%GxxC-q zUhR(7raR7NKY;D5sg9AZ1&}<>!R88H2{u|)`h9qEy1H*5M_!F7T;elCM-b{EUooa{ z?patz5sC0;3dWnP8#)CP4dM@;jU?q!>cN~UNvj&z_5$~2dY`XilId|ft@aG!7G8tt z8DwHyk>M8gz5YSir0OU{-cPUamzy+Z_0b?Vdl&Ee&Qil z%0vpwEZ|?gmE`>F!WM zkWmqk?ve(9p$9>_K|o>vX@iz-VdyRihwdD5=yUr#=l#|>-#UNP<-m`b#m(OP${Od- zV-@t}l<`1&aIm8cAgTTSV-!!H#c!{&NnN>{V69!I85*MAs=a&}S@H1(`!o({lr?TE zW0N9dzK+5 zefjZnzNDUZCjKx4&dH6U3^YXh?|V&<&|IBhu#{}du0kBB-w!yTu@40v3!gE{iT{4D zml{mBeU;ggNj_Ik#>~iZE83jXa8_&N)42kIQE=H34{WHi_N`3kiq7XB*ce)o9* zESAt;TWrvz;nWK3A;`bXJ{$Q@W%Jz7yo$5g5M=9}mAKPdze|!{B zv}3X8zc74zShla9gIC$WidI&goYqMLX7@eP36H8&X7b{nsIb`BZQAIc!aCfCFP`7$ zl>Nt%gwmDr;)a2fV@n@Ip(_ESFShJ9T+%ck6KIW23v2x;_ndBb;^Wm)<5lgIhh%@- zYS7_*yx;kKAgjuVxBZdd;B>jMf#r$pD3tZ&7~2AQ#q(sohnt0@Y^CvEuy3|}(A}&{ z>*dCKJ!{dl|73(EhDDcdruVR!v2-Y~bz>~@0iN;W<-Rg%xE%~3c0%>c4(|>595VWF zr2VS;D(&3n_J#x~3_BZoeCR#xk{>ZV3p|8*cfw2z&yAcEM|2t9j+j3s714Dl?`7p$ z>vIr`56L~e{LOmjTKlA5k$hu~TSm{9W52uq+Bc>`rR3uJ8*-tZ_5}H$lY!;!B&(Ce zhC2SA1)?7$Q~V+{-{QZ?`zXaCG&+~od5+^)*pgy%>vwtrdQRQSh`UHKUoD=lmcfT? z75R$;Rqd`h3Op6cjT9P_^6hBzKcwe88COgOHu8=4JDU{akyMC6F&%hnG z925?5%*z?yZYf5D-)$h~Ug(`%ISKL|1ybX_*8vje#AO}Ih+b<$=kcr!Jl7Kb3 zvZZiz8otdk@r5sDPjkeDL!NVP;;-tFeE7-VkQ2_P9h-tp=0}(_F`6?b`>{Z;G>|8L z8Y>;O^_f*ND3d;a!_o7sMA8t5)Q?3W;WWBu=ci(*$VTz;WJkf0llnXP|99aPg?=6S zr6^#G29}clhJ3&O-)in7ITe3{s=mAYgS+%z8IH4by?j*nf1*!R3UdC#_NpnA0+MPb zf!6v7j9H|yw$rU&QB}Zo(OfEVDPz-zcmJai1B#z#E)QOxt)?<(_Mh7V9nWt5smy>m z+WegZYW{52y7;(BSi50m_MbsInsTT5mbS+Ym zpAi7x<~soJd%{LzEU{z4VDD8aAi=vSDo z7vW<~_-?)wZfNpWs7o+}rWkviXS&H4=o0jMkw>uiL6S!}I7ZGY#s%z0@nXyh;bgQs z`79f5XW|W`8WEyP5SweZKWgct1Z#;LQ=;hqxn*6Tlx{kAtph*_(b&tm599eU7p+=$ zQLb!4aa1=Py4aSq{e8{y=REulo6s-wsoA#;(VnCiiUj`$_i=~qi z^DO!fsC5Gy_c!f=jIVRbQ7pmr^gYem=tb#IhJ)yrY|bNT7LlVdOa0WVT9;J4T3UGw zz|=M|2Vq%>u;<&*hm|^Qzco6U?)*iRm2U!{9DY`nETnB>7}Ks`RO}Je#qm5tjY!CO zl%RZiBSPc#w`4s23~?7E|3B+QnlUvnwHE^}hB%yt`e_p?A({v`Lac&tR9UE;J~cKoJ+T)eQQpR&Zry21t*8p=UKubBJ_5&fQj<4fF#HC-O1O0m>D znK1}-f2#gW@$JolcUx2UOw@|1-hG{8uP} zD(dnAezKg1`M&P|2Aa+-MF6sKy$mtzh&Y7Vi8xiGxNh+AjQ*%Ek!1y(dz?gZTt?0 zztoldtIkpUs{dP7R-y`Ya9CwIU=yrt++x|?2=O;h7G4Z80m`qn)NhBD?Y)q)AC9c} zUHBAbnosawjkzhlk|vKR_cS8=x*ELm3M#%D;wS!N=kI)B)6O*mKGJMb4i-z0lFaOy zFT_dYC(A(Du24{XVJ!n)i3DG%h0y=S5?=UjM(5eGe6)Y@*S70lk|mAuMsgR)wcnl*9Mhi2 zbjnJ*K3iSMxjQZXQl^IYyriyM#_)Qmb$D3y(|wHNV*A6Uag|IXrkV zjj}^LfpMx$l+Rs00j|>qye^)4VZVrHER7$~)Xblj-|XTs5@?Dn{(IGVRimNoIE+^r zU`&>I2w)Fs{`1Q^U1x#$sF8DXe858875_!pc6b|rvaU>xbf%2{1^SU^QLB`@l9QaA!ptWP2PP>#zu!kYODOgz%Np(`M=k@~j zQQbFp2&x`4Gx=P!&lhaN) zRDb3)Z@XvMXKLlN=^gl$*IyckdS;wU$-EVRz2%{JcHrrLC7VY+^(`?6&0CblIq54M z(-Omd{V@s)creUOgV4WOA2wMqi}(PEJf>esfIWeMk83j0ViWVERrN{>YkUeVh=v|h zN^cRS^I@ZZeMUaLSoQN8(^by#u(t4fwBw;&q**D4Co*l%RC5&t1klY)2J$^!grL|o z)~_G${+i~aynZPoX+mK zvANdoIrXpPl=a>m-hdmQaBl9;j>*`z{ZHiCi|<(sec$<8TB~IL23Q0A&;No=3uXU` zemSZ-*IZ7D(_HTKFLF=<;==hBF9TZ}He=2=4knI)j!U3C3w)$6mcz$1gIxG*@4~}0 zaGQVpRMr&C8txgh_dfj#T-*^+a=`u%j<*%N*h`eJy&e#b=h;hfY4*WOY>^rl54y|H zoJqX|x<{^85jZ(CJeq421DR#~K*eRi0OGMS#J924J~9#hcGwNDbgB3P)g4G3X7K+r z_O$o@-Q|5Zz9{9h8gi6+S0+BH6lk%`%fD}~RFm20?)3=(zMCc>?Anlo@p^Pq+wy-q ztd-|e4<%|mXZil?vi7q(yqYdFEghjI{pPa&vd|!nC8?j96wq%6RP)XFX$CmkH_FY6 zKmNSW2&@5dtJRddhSyr9BQ$LTF2mnkcICs50GoBto5zODfBXVgkW^*GK;mino=N?& zSKYn7@a5kYez>&EOxyhtP^l?i!-vdYMi-g_Wh8H%`$$Uv8-&)KqxUcQwH)#DE3!*f8268 zGrbGKIq+GPk)0W5$DuT5lOpJPDOh$>@5O2TEfEMGH$(6nG3sN`Efb`_W)kR3rt)48 z=7)p|J$_&U$B!?}e#f}#D{^0)j9DlmoW$%#FEe0P`gnUAQ0M$Hlc`r@@mWi30M?Zn zZ4!VxS=vp>ze?t@C9vkL=fAjcx3&epIcC;AZKx&J9{dLJv%tF8Pg!zbZ`3;`aBi+Z zaY~g*G|#;89DE~%UET}O87npsoSzDhpDo0=rRWte5QRzXK+3ZF+Fu}acEW{zJcu$g z3p*|w^yDaseI2@i3Ll*#%ArhY9)De=_fzqOs960mAlcGF9$A3X9+TF@E?uf$a*ALX zb>8;*2_P`wk1pc07%o;nat?%2_AC;dN|O#fT_9YIVYQ6VOUO0~coAs~aK2~X-6mtU z>RAzFWPtd_2KwA+H9T8t=ocbRgzmY1433oj+v4k;6w?#*^OnpWet5t((8+OM@I8!J z$r%u(d8m2ltWfTE5Mf4qNB+lz{UQQ#D2yTyNou7-MGE-7cl!_T{fk3R{l%HyH2*Ka zn62&9dogk>s&^^PaUl{En!NHQvu-u;=mungo9xV7?seGrv}2cYv{4osu(P$5jz%!L z5Y6@7zcwch#IwgojIt%DnhPg?pIz#YSA|8^!TqBxJsE3O z(SeZ+iNfEnAgrUQx{&Jp)0Bl!EqgL;2}pV7HJ1W)p0(|E++xgFhn|;tqkMl1^y=x5 zwz4%Zj*(z?V1#;0FOgP9{2Y3Fu;B27Ci-t#l-MIcn6|6x&ryz?Ke&G3?^}$wJ$gWs zq$?a&tYvA!rLf2LU_JVXvBoWkEzSpP)8Nbr&a|ImP>e2{U=?4ZvLA62OX^u zE3xJ8CT3chuWhKMyA5AcHWozq)*pp;Zhwd?LYybdBK5dc5*8o02!yJ{u)U?f3)*YJ z^M9*zC3kmy-|szx^fSJmqbB6AqIi{NY)t)9DEXBzWyM#Ej_1#!9*q}RJ*3jFeDa7( zIFgESC5rlU>KAno&zrXyRNFu9H+?p_`b~=P}xUh5f#hX?Us@7I^UEu<>xllO>@w$I`=gvAiE! zU9jjdTx<7?K+VKs3|?D!R}SzM8lQi7a%iOTmbM3R8d9iS;L8&kb6yh60b)0~C=9uS zhG|34>McPIrOUh~>5?8f6M^yO=^SCl>CB&Osh@dmAr&`T?%4-Fr_JzN3Cjwdv5HKj zul?8xO|ZsiIG?IvC%3YYVd9DmwCaad8i^L zKSsSi1|{nBqo=@Svy@**a|dmm(IB{g)`2%9+iz@4g!e;5e%DN&(UZAA_O!{x9I7+e zLLAcSz@36^$qpY!lCK?Pz4RQUluSM(*`Y}s4d3b~%d$*5Nj8IK%4At;$6&j#CSpdh zXF6}DBU4gR1lo)Wz#v7*^v6H(#MzvX81^lA?D9VEg4y%FT|LH&DwTS?Dg-+V_v|0+ z`w~8t2+!^I(328q%er=Zuf>nd`PgA*FwSE(XCkVVP)nO}_9~fVD37up%+g3E#^OCj zGVOC8*)XNK_MG*mZBjb43B$fGte$`MNvL-72X>Mnkfa3e=&GIeVQwMoPrk+R#3`~= z84bO|4?$5C-$|dRB+cl0IW+H+`O~!JRh-m$C&AS^$%Wzov06Ho%7+Lhwesg&$4kiN z=XDR8Wr@!}#WNz^R|u31v?P2I>efz|ktkal+cdZ|Z`0{b0>8i8Yv;9Nb02HHAzyEE z)xH#il&zHKtat&|Slj!NUEuwFf|-_JxS~tFVXxkF;U7kyf?h@+vXMi=_2&l&@3~d| zCNpP!4S&8m;APBuMD&^umdhRHxHp@w}@v< zFa5{Yio<53N$Vp`a@;qV7Mj;>!;{dH=rVm(qgg566sW}erX_Td6HU$sr|`>SF&-my zT8tO9t!)kbb|%KFGP+Co%{BTn{b~B!ce4fRO_DD&(fQ&cC_UsBs>kIFdqoo7*)JpG zkgQKf3cab6mJROrlf^;d$=vma%Ld!gLKJHYVTzE+%FEEaRp_MwXSp1nZJ*%QxaWzLWCWLhfx zV&sL<{c@$mFlVPK8N#uIJ?PzbS9mDSotv#v(g2YlN(WgQk+>$mZvF;RQVFIxrmRWG z$qgS)7hEOmJM!h2uX9-x^4xj*>=zjFbv5#H6+2c01`}IxFs41htA%t-J1Q@I&pn*fTe=JC#&c5Of{HjxBku(xW-v{*b`< zrNexth+x9JyTybo{7@f@0=kZ613#<8A-9FqFpkwH&v1%D=4vb&>8dbu#dqrkw?#fC z4!Qfst0aqr=8`ASmdK_UG&~rPlj9KRDk@ zPC|GnWK|vr7zRgS_Nk0(HW4=N$tc3NgTD0(J6jby4q{dTC7%`&#o}ltr%yG^jW6AD z#hwKk-rK(1r)Fd9?0=;&_r%#^936s-)0f!+5--=^D9Bcl>Q@oSg|N|ZGEG`CfY-73 zu#D{Nb9_&?I@~!;wqb$P)YR7nvj2WtWdOTVu=QL*4jG;#F{SzJpz0sGrIkkV72ThL zBy0!?HU0^N0;8q0!W_AsJtNsPHn(8^tagRtx8v>i4rHn4&+DFkD<|h*(|$eXl3Tu2d#t75|4~du!ZAdL!C)nsTkiHC5>i6B!h>xtKj+M#u&=#B ziB!DuRM_FE;g-{1(Ke>cc@!!0qsY06NV3PMG0=SwXFr3pO7n4u{`oq>l|lkiirWu< zPkD;w`Gj7=o__^C4Y>6o?l~-o8936iX$9mfF#{mskq|9uK4m824h%A7J3HYvWd?d> zy9HWhyHNXrjQE;VG5_fw`Yt6uW}nVtcU-9G=;}_t@LQtN@Sh8cfM}%g-C|q{ZKy^x z{xbY{iIj$_qPDOK=yb5ch_)R`K{Ezqo#QMOate$}TY z?V``X+x9tU#5y`Urc2CkWOSF{4~JcEVY~Q^MiG^=D;B^EuP(h;e%moa(F!BY*=E-l(Aeyg5}y zjAh|Zn*M9K4(a>7`o)}7G5~?7CW;$PEHgE#98-!67|AK{@0~7KC3-dUOL61NxQYH7pI4rcP1?%rxx^ikOeFG+)&r@ZA3N+kqv3rgfOUCAHFpXh zg;Jw-{^HEY?5Q9E>WenL5A^UcNRF2Oy5KouSUJ&Lgi3@s*w0|pI?!@vcN>yT5YA*Z zP1lPV{+%OSrb{m7mXm}JY-V#Y*v;hO;AdVD_TG^!5{`s6M^xG2iwtUSfIE3S0nu7F ze@Vd)%1a6`}@2IPtH&_Ey*tIL&WY2F*Br@_#Uy?hQ+@1+nz!&Zt@Y$JJL8 zd-#x8NU;w#uJ+3peV_0kJMN4b$+}D@s{Pg2!ku-gvh-!J>6G2n@g76@-EUjtYj@~j zHK1SAo(xy0)D-L76aoofVAh8xwYaS!4&PGDeEAok@v<53W1l_d4A-zmfI*T&5HJ@;hcC%=F$1vwWoeU zYs44$S1(veeL3$R_;8Z0W_QhN_v-nA;W$bS)=nQ=kDGJLd8N}$0|^fnBS!wd%91U! zudFNRJK96d5M6vWAs^&v_#m*N;sQB!6czG2Hr?8eVku9jxlMeSB&Npci(nW(URMs0 zv?P7#7K2?ypr)M!r|2pszmG@$(!AQ0(Y?$U8v4Hm|NpE4er#3v@7bcA3CbZXkdNre z+~53s<-qpP&?5I#qS@RGm3ZpBW-q-7O$y9d5WS%Cm8alWbF$4&o3c5;(Z~6mW<`x) zu&OO@p3@d6t^|_}oKn3tNqbFp?-wTTm%e13Wm>fvU48FCl*=9>NnT-SaiZrplQ3b>VBQf+7&_F4 zT=)a3@92mnafW`tAmYJUDs{ch#Zw~14dXMauMkRHJyUH3imHT~GX_*Atl`Gr?X>GvA(g8uQaxgqQmmVVMZ+`QI zM2(UG=DPaF^MM3gC|JQIrJ6T!jXlim5#!1_!6>rJ&K1~+y7TEeMLq;#XJoz?0b-^^ z%{xP9rpt_*l&sBL63%vKM)ng0N($UQk?AMY4q*hm7a0spghM@kb{x~x&F>POSX;%zo^z6OV=TC&Fj{{KMq9*Wal+0P1L_`mct3@ z7>#3=zRT=wY5WXGzDGKw(}@F`izS_yTu4wfz5G~)(JKMhW54@g5X)u5<=Pg0t5Pw2;|qA^VIHhPG?Dw)ehrKBvA z+5Dgg#WpJ57XTYzw`XATPU?cxiTo0 zvR_K)4oXE^MM6^1Z{s5&j=ztF9pfc!s=B}${@;LE-(%PqxFeV*7C7xmkH6r8V)L3c=mu>O@>ki84gfRi9;yd=aGYSVa7CxWoI|W5vVu!A=mS@+W4% zbqL*;N2Bn7o;f#9g5XNT%ql}i!#!Ql5;5>t!^^NpEBl4=Y>?r~#KAA}h%kH7ED!!I z10WJTTa5*Hw-f)!a(Lsfc_BcuL4Yn39DME{N<`p#8ysE^ecdV;Oye5fu0yKi>itFFqH@W2Y|%Wxtq=^c)I? z?&c)#G@S8{cFNAoz-UR^MN%gsRCa*8>mymMO62zo@|DoXU|w2YQXYrjFuFyoLEAKx zY^Nsc;?3oW1|^S?ca{I;vBX`b&%39W1R1N|`##ThBvv-19C0%)AMZYem9FAf2iPv! zP8+?-QU8{3W~^}KUr@-dsF>L}KD&H>^SM?_I!`{n;s!S;S>eww+~3~q0e?3$ zeTUBR&Glz+1~GJD(MQ+?&<~+DP30HZ^(LQ*1pEvUKv@_jbA-PG0spEEfFH+rR09c?YE?C zQot>{?f(MzM6W!2tC{nCzkHIH8dC9{n!~rd7k8CUU!Q3oL#EXA?v~|NN3hlm05hz# zv5wG8>C*jn!*}uH=gkk5l1|1F2Hc*mK2ebIVwZb!4`MMwi0MsBW9YG9Dj6v^RxnHJ z{0iV($tw$a9BXW4VT|_$GHQRVgE^*dVmkX%&|8V(y4QInd466y95?DTWo6%fujAC@ znb3&GY;s(IUVdm@u^X7kUh-hg?9Q;57!@a9-79^^wze{c}c*J*OWoe zRgycQ6AwRCw)s5B7q_N*TYH4Pv0;V%?N}J=vy*Hvls#}$D_(w@d|8VghdNvMrm{x{ z2jvX^*w6B%e>b_9?OYSLMUI*)0&=UuAEf;=WIBV_sBxQ^qMm_v*kQE9b-0iv=u`<3 zj`o4xSCbXD8O{3+mlCUk9Oz}2GjxUHoTjCGsR%5Fq;;8JbpAOb9g@J`_RTH!13rxj z;P?uhWsQVTwWc}b8$O*Lu=#?tbEC+~9oi6MGkJT88~u<9Bm!g03u7eUYNT7GajrN$ z_$zH4(quaV7ss>-xhAk~9?e&cKZnuPV~}Dld=O#rfgz#8v1NDo@`SS3_v8i*?(0II z_s>+soaSn*fW9l4jyS~2E0I^qFr`0axd}8Py_*CfO0Z6kqFHK9dAl_5BRj#E5G{5k za(s{9MlryxudVi4%N5JcyZuJT=SN#{5F~IB6?A+L^|rjh9l9t0bF|haWP_Y>JpgWB zzl)5-T=@;C-ffTLF~|ahWmol)t|ONT-y9<&ENOu(zmiM5r>2gEfyaF{27Kfdwh<;4 z%LrG<@*T;Rt~2o=$#?wQ=(!L4#;;%ID`r?R7L8=zN3e|R6IqiLjbWc;7I*hYeyz`O z=ipAL5}dDfGMqJ1ZF*H60l~hnYdn8Zrz4UwgA1*f%W|SVt$c5(t;J?TuVPS{RW;nZ zU8t#CRQT9M9~7$#9hV^%bRXM@z~Gw)Z#Ct0?*caxd3>0tNzT`?t+b@zYlT!^eIe>Y zwl#1HV@stAk?ZS+M!5B(Qw*ymHG&8){AfWE5n{nuL6YDK!CFo-n*6MtT=_I2ndC*c zTG4u!Il6YbDWyy=908{XNWB;*vWFNSQ5MY0xNQTOpg=t$2b8g;E0!7~=IB-uxXvTl z7(W>X^;2rQ=sHM(Kcal7iKbhe-|PanKlfK+5OjHp0v;S*lszkXPSP&VoK-7-PoK!g zhXf`>W*D`eF~E%k-16BJIpeVnAYpkc9}k9Q^BA*@@L@MvkxgO?SdUO_#iWixFDXct zBauuY-yGgP?AAhNeB{FryBK`ELXQ5YcheCvW9@79IVt*jtF}vknNUev1N{g~ZD3td z&i|7V!tYv6zT=^+fd8tVrW0#rk0Wmt9@CL)O@!+d^Obp(TQ)EWi;ql8`mR%$)|{Q5 zDViLA;LyJ0-gW49vZ)?n4I^V54J?cqAhY!-!C_k!Do}svA;Ta#9$n64hw+zYn^jl8 za=r>k8l~>7-aKL)=~+b?$n$nn;*gv1MqX_OrY3?tt>J|f=6#gQe zI=t^f4&VQVrs)wNaHMFh-^pmOX|7tNy0EK&glMsVf}neS{y~4D5#xP~PNvOKe8V~H zA|8<$Ln8;-(WzQOXxVPvr1wJdxk8AKiog$ffUzt4Zp=oOS{rPwJ49_9{ufkrhm{`U z3`)h)zj%!*cZ1`;bb+mmF)jsj;arbTP_6^kjzH2wcEnt}B`kp(WV{($2euQOR53Do zMiBb)uk97cQ8_mJ!B&lfq|6#OvpOc(N9+%CVxaQu@kOw5{E+@;@~*5I(b1VNp&4Rp zv`Q?-J57|fOLf`^v?-B|vTio+vQ?NihTQ;I^DsET5D7HtnebQ~x_&m0%m9Te?@0Dc^>Ar!VB1?gBkfMx{ zr!@VQN8DlmA*zlb)Yw7bTecvV%GUcCv(chRaaGufV40}k9n*DvZwyQlYID5S7w@sJ zZT&pE&o(DOjQp@2D`wOREQ5<-^dt~}hA&>Ro`y6hB7f2vcIYBAT=CR4i$2JxI(D_O zZX16=5zXAgpj4+AMzp5Xmn7S1wN&xx{)d2-EkF3UUM zOPpz$rcH&)G&wf9#83AvnR)vmK*`i#m4)CdXTX!NvA#dV>U*4rTyos!*WMI4MFnIz zjf)~H?RP&-q)HBl3d3cRh0iNi7`ONBZ(iRI!(BB6Z1+(4{)OPMX6|C5lhiCNj?vNP zULVE9F2bS$vYLK=J3+S^c!>(re}xSI0$_aN!*ky&9G}cyJfHyU)fb!pn+5pq!thx(xl5@e z*Z`)%E(i3Lp1ytd4+yX?hs2)PGB5XK2A+y~4@=joUvCk-JS>sfZX`K@a1%VrH}0N= z*P>2BnI>zG-^9y%eJU218`UPGEr-wtZ=KNx_Xk0pbNT~tV6I*Is zul8F%*Fy~dLv#O4)6sa_tJS~4u`|W*ar% zt;5=Osu02Yw1f@c6S&Izg%?b6Y?wE<$>bYR#?f(X>M>T8R^^ZkG}juqKym`^Q_)7A zlOO^>`;#24j;Z#?lx9Tp<4zSI_eLW<>jliLj+dW$C=n1u{ZCub;sK00_lb|0wD{5C zEDFgwF_n_-L%bzmUrd?5@r))|Aa;3bT3Y$Gz}u@F3Q5y8tG*=eWIQ6ecC=e^EN%cF zCKVfkALbZ?l@Vj6_6k2!8#Yz+nXXfzm@E%J^vhk9n-<$1$8-B7c*5s%s<^}5#i{%J zdp)t=dBkG`1~JCDpZ2gvj}&{gzWGP6GnH9~Fp;g&$|S#ZS0FM2F$kWdsLVdX>%zx1 z(89#)8laQ|o4{RPTH-jv#-YKCc1i_UjcoubVJYVLr^3KmrzHt6k)3xpjb9T%l3G5w zsiJWwMJ1W($jZrJj>AGNX9y|rA1Fx%!E{O4(xOLtH!ysAXQvl5G zx{*uzO}8i+>y|rIBv7Uu;~LD_@P*(hnCyu%X{~lxZe)cd2Bq2MKq$?~hf$^BXZnff z1ar`Uk7Bqdumm9tU!eS^wZ%k(zQi0V*w*H1~B~H(#Lv50m}%< z&T)8&mkFS*cjo#&WW}yhMKq0lD@ojQVT>!b(^e20oLY-xFh^r&>4-(=;)dUZpAtcO z%`8~|+UJQAK@Hu6A|r4E(M@3Ru;8o4G0oaeebZ@jiugtHanTQJkr``JYBuw0BqSm& zfg9soScIeI-}PSAReT$P4z>Nyb?>R-&q4OH=0uspXK-DlGan@yTS4wML@Igku?T}N z)~>MZt4#I1P1}$U40Tno`-BY~uN;jM-hCjl8*|!&FJJGv+zFv*sBl^9VGW7_D2y?Q zjFV`;KX5h^9ynWWHzjtBSez(g6b4cVUOZvFZ0& zCp8KT{dqL71UO*(kkYa4U{U9y$TL5Abc3)1aQPN7%rV!Y7PR5^9OzEICz6SOrRCgk zh4M(n%?(w4EL80{TlK|mcWW8kO~|y0<+NcwI_P0fD8Xvp7JnT^L{PtBiO$l$#uzWV zR>%|sj`Rd>d{x=h#v!R;_rhR5C8!$S=H^>zlU0A>xv7T=9*z&4Fw44E8O!L4YfeN$ zi7_a0(rQ672u}VQCavJRjX2gow0RD*h>~Kf-mj;-VM6HUSx*$NPPy% z!tA%7lsCT#^`7OvBrxcOj4B0w6gy*@d+z>BqAt|a7(5w$qqD(agA6)$ZV6|`9$bPfdfCM zYOXTu3SYmGp@j%*b>h_Qja2ZxUozM!#yylI5Z>`~e-&I-&h-5|Aowx)*|W<_31wv; z1YYMoq4Vj!>wTWCU+4Vy!{-!Fj$|-|?>WmUP7JUxm7JP1f+W*HOIeu#;Y<&4E8-YB z8Q45r7G^93`lM5Rvb|vrBqU6Rl-uf?tn-@L;Zy6zLP>oPU(?~)bIkB>K51**0~99| z=JbA*KLq*Rp861^H_-M!+AU>5e{w+N1e8Jl{%)C{DKnN<<@U)Yn1hkNy61xAHEj2^ zWbn0f0z5rcu$6m5AEZ_Opy8M@A%FsA{YPCv#52)a-q?7uz#?}pfZ}hP)b+b(&#!cd z@{=nWlm4hqcQL%IA49^`y7FkhvJbsxnTzxC^Lu|+1yFXfsPnfA?~f}_&qa8f_6o=) z6SY-s!taH6%lGyY>Tb%PU%Hr54f3~rs6X6)5>>@Ht1@xY0m)ERYR zDhm`&SiQ%<;(w#e?=zzzQYjQqb@%&ksAn1>tXnlDQ_Mo3N|spS9O7wz{1t<^g9<~~kTRTP*S0EbzJ|#P3z_=wrp8y}e^Hi0g3-oMFH;r8 zy*#3z)7NP;#R@llnn5@A{#A$bBS>hejOF#KrPOdEQVi|$4cZg}6>6YkYU-`Hf(A7(b5BQc6JBJ!)T7!sX zeJE-N+KF>JdYM7uX$@l?Lp?#ujZfh0=|^QB9VnD>mym2`y}+|AWb@>iP%FF-01Sg} zR-*aUCi`vtF`P%=YQQ=JW|>sq5v?5gII~Tt^#X%BGuFMJlI}N|njb@df01NIEDNUj zMtByL<`O)b=~t8MKl;5b);;%Lj7ldJ~O`5`RpIeaOy&PvECWi_&LwzuzZ@}UT4fY6awoeM; zX6>-zHXwJs{O$Rq^cPvbb3&-zjCxqa#3HDOaN?1*C9@f_cY~MMx_&#dV&GMrC+!SE zjltDvP$@IkbE~ERtW?KMG8tBXr+i;0mf~HjCqq0ntDAS5RQteuc5<^ct1B^6R= z;g(yT`}YNmYhi;{kcX{r)FDzAiEu>?qqogUk=;XmaGke4)p6r2A+wWt? zohR4au(QvW_q(r=u_)o11nOW+qfBMNTviic(UUtnZ31{l9XeXx z=Tko}I#M9%E2itPVn3jRBFC#dRzXD5^yfT=?52Ay#!XNh<=GY4!C_q&_~zm}pd8Qo z$+DmL!?@{uek@;gLZc%a%{)x0UO{unhTk-Yp)ef;l8nF<*p&zEhS%Ug`A!5wwdb&O z7OjTx=6+3|ILzT}kau`xjL!7s{C3fpZ(n>Sw|g((gjrKVFk1Ao-Ftj^0yM$0)M|1e z=pct~Wml;%QmDh6Gv}RP-oLl_e0u$?*77dZEc*KsoVh+T+~?IkM23uKjtEnS8c$Tv70hxI+g+UyfT1V-b?F z&+>!ug_{#%dsviKA%bd@SAI|aoff~jKfTL>rQ{|9HtEAl#&*xwUotuOj{%Qc=4)u1 zRN6kE!TBO&{eYBjJIb4qUuZP!Rq#df9ZSXu0lTCUVIO&pFp>qMdN|tkK_5BF)8`6r z5JL|(=`tx?y7&#^I^|@i@6GO-UF&@K;OZJ*gE6>*Ng~8Q<&MQ*+C0~q7}xde45mM$ zgGxN31y%u{1xkJhx|uAKJoT4R&58Bn+1n^VBF17BZ&)Gi=v)8o{~HITu<*lw=Q zsFW(Z7{jf+H<#`{f3dR*ph{8yGph7cZSWf?7Ya} zbeB=3H_uvSLtPD$h?Y2hEPGoSGhaRo6ro|Y&pc3D*IVHP`9%*2vNFC?St5PY+;`yuPQCjuJE)AJ#;{hBK*?cYZTmei|+og z4?^kJYVYMZGYi`c%Km%vK&NtpIr<*it9t&OPf2izqk7q+NRC5`$*{7;)Avn^C#3yH zafR&fYL9oUI&E()@B2@GI>-Dx86VSYywdxh!Cw}K=CaCSO8FEQg`Tt@#5g@qVUv4F zwleV#x995Elw9=dp&px`c*L^of*| z^;nIC>1=y~xDc$X*ur$}OK#oic0%1=pP6$#_&}cgIMu7$&oeBLtkJSk++S~0Z%%HD zxQ=k+^RKQ8_h^6Xr%Dan_s{BmMj7pC2Kh(u0VE%Z{!Yh=aCqmnefb=T+Oz{?cqw(o z9rr}6;wweHV_ac^*<1UiheP=!=2w6m&#nMWV9g~bm|gq88s2Di_K7=J&9+O;JW{LLWRi zse15a-iqcew#;1=Aj8{gQ2_fNl5g=LcD2oa=;^ZErGQ^uYTB?N7bzo%x!hSxZ;6w0 zrk$=|tgyM2Hosk=NspD#&H7t!mWsOSs;R#l_URF8vh91_XOh$9K{K8VuSsuJ^53}| zxPJ)*EYmeElI1+|uSjv`L9eSCcWP56F5FeV2D z{Nr{tJ+a~pvVZ4Wh};T4;M8N_JY%gGO?PBzZke5@m43z!7oAArFEN>S75B z7Z68uZ{e6Dbbvwcta4oNRxlK6>nGwlv{O`EkoYym63>7LZ@waC?4Z=LAFp^e`9sO) z{lhi(6EDO8o7O&sb7T!*@m+k@9Hs0JKKw8_sB}jR>!1X%(lU2C{_j* z2Cho%ks@@`Dwt&4RWKN*jJ3{U^kINLw^vSj#kg`sdVAmalVh^!h2dw%h>)Yam};rm zlRp4LL4Sy~u=i}P@1a0@)zI;iFenHD7b_;s*BpQ6S=S=B+z0{AzoTc)2hy+MIWZV~ zOUH6BD7__<&f$9*Hzui{7<|FkVecX<*mVvFm=HSt`v7oomywk>23io!wCOAQYpURS`zb)H@mDrTb{&mwEm?J~uK zBDf`tJ>>l_++J!p)CCT;r~3tofPm)L|8mGJXP_)){sYFp4?#Z@Tzo!hwEA-gVKfS; zQefZ9FnipIc9^^sCwfy6jbR^1B2dh1CUc;qs%|uiXQ)-Me|t;|XnGz`VDYH6b_i+3hK=y2VU^vLoBJUnphf9ADe?mX=foR8Kk=`HUHQn zji&Zf6$z&%n2b=nEW0Xqh!0}q{gO%lfA4S&KakUOFbK6rtmX$w|HY~x(*bfMw2lj_ zh^E8H9`Oxv?Eronqw1XIYxTJ=<&t@{i$YN*D^A!;c~Xc8{L{bCpmVIjAi??`(Gz2Y zFKBf@vTkqyw81kmL}#;m#sstcOQ~NBD!u+;+axT{ndO<&{ynoYhr~fbe$!680J+;( z{%XJDU7yv1T8xr=Ks-k$^yx9@I0>lg05d@$$^FqZP?CMYhjhv5-J7jmw7pyTYqSP# zPCLCA9bZ(AE_Q0=ulZ323fqdPnDju9Cjel5;x5$>!tqV4GAR(Clc!x;zS z1z}I!8I+ZT{O`jOciSD&AXamBDaEE~Gmv&Us;umcwtdn8w*Lj{f>pm^bp_p8_~*$% z0u=~@Z`6&8t1Nrs?px3292~!YI>kN$ak7tq!mNV*!el}|EJOLae-nwEB=6cX?Yhc5 zfuj?LnKA_fMpT%|l5p4@o{suDi8%#m9gIk-PM?jwW-W}PY}Tp{N}g6GyC*eAk#)&3 z$rh^^i*nJYlBZ%Jur3BAnBCT{45sH@+Kfw*scXsuEmz+bFtAQ)*@11A(Pg;j(#wcR98=<#3(lqz&WGn28;Qw zqn|1j*}TpIgQDKpr_{#3RJED#6fzFvaJw-Y;EP z|EI+-;*R`>lb_yio}L!~a-UPH{|83iZ<5ya(e5L+*vr>WOvq+Pqt+W3{*L#Ok z{m1|R$0j?<9w&;*CM%na#HmywBV;8z9D5ymQ?`SQ(~wOz*?WfUacmifV;uAM^!|RY z?{8e6-#=WJ>&k`Bc|FGccE3OF{y3jjP1*V(gFO5^Zcg8NiCl=8nQrB%l@+Bq0{Nq_ zkO~EyIhN;AZ)fMm3W0i?fG9y?vM&Y2g%{x zr`Ow)eJINqIEoXFv6_Ga^ls#qdv@$o7-d)S+Fo2QYlOMdQHM&}Jdj8T)gue2*lAYj zz_e>IJmPPy=@%v?395vcvY&Ra%X)m=m?%R*v-##U&*7=D&;L2Oo58zb>i6^56a zcbXxP(F&@xaPgV2d3x|Vni1b5zmc(@wv&!Q@x9x^G4c$FKGIRw9xP>|;t#eTH2sI) z*T>tA`WBw~A(}wI3IDD3h3YIbH4H)-R<&@On@GXaav_)z=84Q-SRE5p> zMOJB+(c_mdMI4?-36ab;SK&)(j1{ znEORwKaU8~=EsHiSh2sIQc-4LR*`9PB0gv2G|F^1r&lO~8EfWmE8`YII2!)VHOiC8 zj3QMj_-8XAW|0Jp`1IRpheSf{k{^__T+*5jXUsp9J)F19Xp&{zKCt*v5FQ%sNl^69I%;G28yZPu6{V*%-?mUPZy`y3A&n!jWS1xRYmD+XbRB_J#XqB}Rq8~~< zD6mL?4k?Cv+VaRX;PFdsrf91F77U{5>;N^V&LiXZiDG&ju zF%J#WV#Oi)lMscKw|=Zjc%*mn9V!Um+qV=Jki8u=0CV@VrY4+v)P0qj8qF-F!(MbWx4C8PPk8l&V)znOj4{SEg#+=yBQdNc+uUbYL?dv~^*1!u zRG45%Oub@+#)DvLrwRiB+@mE=gd6^;y?*t4EC^2v@#(@BFeT0ypHr19rh^=(u*0R~ z(|jsJs_sk8e=ds^*pzN=3|}M7{We>|VM8Z1OxeRAe_Go^{v`3M(i7~92 zW9Nk!5R&`3clku@i?_e&6!j}85t5C&Ffe`s6?QV{#gs@V-?jC=v({%cZrvZ}!uIh` z+ou|huP)5%nF*&>(@E0bse|whLX_5}yWK2VlP^0TN>x#1F2FxI*4v#PZn->`^Ip$O zf?IWpb_U8d>2y+K4heUkieiR?gf?$?=pW6WP$_UI#8M}_xU{ZwgmzFudhU%=uIEK= z(RBRbJ1SsMdL1Z7kcpnYeS1f8d?=SEzsTsm<~aMqea&A#M}G?&OKeVec{=wW>i%>? z6?`r}-j|gg9bpz=c;l%Ze0oQHE zz7ciiZRLY=fg`2FS>r!9NW( zs`r}U5*iidYzC)noQ&$?NNhCSMQizIu~+MT<(GM(jmk?8%?1`Asu*EOdcq;b47gq;#@Zu1wDa%L*kXvM@|vD5~Mh@jmMY zi}F-HfWqZBeo5gGLRF(UJ#$LjC{s&(ZBmfnP<u9p*@Nx4u`8Nr!8wGY}^ znOquU;U`Vgx@k4Ol5&Th+a8H0u$Le*NUNOGaiav1%JO~st8EkIh+SCJb0`Bu41fMx z*tGgm@R!(3q&m%;NoQw3!Lcj(C?)eWgdMSGkuQ8-o%$-AwS_w$(%7+jtws+3r?mBEH zW&R}mEcS#(&nC%dd?cT~Sv=u5XZJ9B_Dgpo1F&zd%nOSrYZvFI98~JWW)!aX;4dH5q^K=fU>k>*mOP3TBSS^+fOf5jl9>+E@DXEZTUjEgpd%eJZu$ zYX$o5itXQ)Ztp-*=>a$4>*L^-!gYw1*8%(V(fkN6s?KBbET~MB(DER8>l6)#Lxw3$ z)agnwc|M(3hjO7KqknN^n`EVF&3iyv(0vcwFC%P(&8ILWeVcQQW6mWUYL;;Ldgf~ZNVKkDD=LVbVGL|La9piC ziC32cF22g`{UF>Axeam^ma=6GifEJw_v&ve4A2b|3pFTQ!wX;cA4qeB92v|uW(RTN zZE-7APZHuUe8MqpN;F$f;jKie?upKba~AmafNns-nl1})BPQ0=kTNR5Vy%Qq$a0O8 z&kl!QIl(bf@96h~9>3m!tSLvTS^)edKc4iyX9ILu|Edw*TAo45tRzEp6u!DmY*dx7 z@5G_-#S?OdXZW0WK}fe=52|7H4cT$$ES~1*EN*$o=)c)^}osqLL+E0F;D8`zzl1dOLlrQ@eNcC?QGyXKb^7M zTtFVfA%9`~(DmQnfTJm%Qj?Zo4ta2LTo+TQ}kz)=1C)dUf=Cm$RCQ5;A}&4 zy#+9&z4|~6k{~~tz+xt-$@|;XU?cAB{SHgFiE-t$8p>j}>!ozfca2!_##064I=p%x zrC3#14SjL?TyUzg(w}j9dry_l5`jf*emqDv)54@vEfKWS$u~)gG&u3zSR5!fxe#It zGVuR+!-=Tdxq`d>9(|_$0Xwotle1t-*1Z##(us5R|~$1rifV&GuG+auZYe*sw=^3|8c9SWm{eH z^GR4S9INy<_B!6k_@V?{C~(~-ZZ5uqHBG5!@>+RhiN9G!tN0_ngo7JadgLxEg5^uJ ztDXIIkHq3nCsS3tiM@rgd|NcUzA)U1cWPhh#bplJqR!k~wYp}JMzUYN9vtVW?>c&T zGOuL7PaJj-q8g;Pgsq-xcjdL=mMMdmf>{J2ikMT?F_Q`3E|F4Hm-m5w?{)9+5fc2P z<^wd;ST8A7aGGg6BkSSfM8>1)+d+>S9Hva|xf}n!LFz2sw|TZiIrrj|?xBQ-=e3nY z3;N|pg=EXBg?xvfjl^Xxw<45g_Zn}ycVz0MUyd>To|=`mRgZAw0W-%fMlus6iXQiI zFxanmVp)d`=rW&<)30j`&;HMF{5RW$MHU8CU)&to9vzuv;~7W1qk4DOdSNGQhT$wF zH)E3{)saR+hI?PE-}obfM-ZTJKUdhMa?P=bU?6hWR34n^urTyWb6vr3O#TzTx23*5 zTS(VjKe$`wy*!ExfTJmV`F@0f4Ln%Rb7);d{{o)5ni+Hv*8L1K245MtSMV=ZkFl{s zhtanQ9V7eiZs^7RGS0CFEgW0XtMxMeYdT1Ue<{5Rb(slgSYUv!@K~Iy+UJ>)) zJ#(`2OVRl1$uZJ2On+U;=Ye_UE?i#aps+LoRdVO$^>Lf94z&FjgAva6Noi#Y1k4e+ zQ|Zg?Glk-o*?lV?_N>1QT1!}9!iQh2Rkrv~(vSPDyAAE+Pu;6nUlU1&*`YqN1Qkc5 zljWw%Q6y8oMdaBkF#*!Cmt%#lS?qnbe+1*4(n#?TJcj^&9V>dZ=y)Rn=OCw405f*a zP$&v0?jtmBe`&Lmv@()pn$6_nr3u$4SBt8;RSlF{Q#d>D2fM8|St2e9h>`1a>Y7dg ziIv2uMj5&FzgG={D@Y@TD4XvFS15=#tcrX$^Wf}_az>7Mks#+z-$d~@f?Lt{yHsLG zuN!c-dE$%L2UV|vfG(UV{Qc$n?=!Qsnb>wVz(YM1w1Pm1UH|hTCl6$r!@lkI`T~{}|?~KNQ zX)c?!rp|V;0ds;V)f%pjtoNfwKh8?|PWP`xUBCDD>YgKitMfe7bRz@&Ep}~a;KN*l zcP5hxPtTV}5pv|jf!uYW9gv3mvs3Uu1(|neM2vd`+YuzZ?F>RjzIaT5*;)>LTMh%U zL)m>$2Kcr}v@4i`#q&9F&c~GF#}r5JS(6r!Oi7B)>1(N{cp^Ily?6|ywE%|i#XXhN zAIOyVt$W-(#|@P6Gm3SV<{c^$bxAf#+b~$|geoU<|kdV*YnLUMT(Ngq-Y1$oMqH@?6Z}+b@s1J)n7cd4lK}k40I- z_P+UJyt*UA~|r0cD=P0}VQ*`8}XWId$Ri1rN%i96+w3nc#Lr1Kd}ua(;oV*K=f!OB*=UZSkZWh=tfWn0T5hRsvR^kK+}Z zS8Yfw+K(A#86L3Iv{x`pYkosBM-Sv;4+woUH^j^T*ftd$EFxnwXc8+J5EH@UuYX;= zF9rdfqx&^?ny1v`U}GniS}Fba!xE~94$d`DvCm!JG!+ai%5?}B7(0!c_i7fIPIX;S zj*HkUO9^qSM*B*+EyG_QEqrej+m~p9e}aC@uxNZk_nL<+a!99rxghQRmPDRiscp6z z=bxUDT>%k+j#{P|1-Oq?latAYg&6Zz5!k~Mp0Bbl5m5i4gTdhT=sfb_8@N5*=5{)o zLOqgdSnQZ4!(ul9^0h?}4FM^R-d%Z7ka}IyIs`AljewX!GSxXvF_4%I`6OJ?s8f

        KZ%5J*XJmo@EiZQL#Mew;MWa_~ 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 z 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

        k{yROtU~Omx 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ேWI}@LxLm{a4pnxx66W#HcwPW0o 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

        |`8 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 Date: Wed, 1 Sep 2021 19:55:22 -0400 Subject: [PATCH 24/33] Updated README. --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 89f8a5d6..f45c6b59 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

        - +

        **Quiqbox** is a quantum chemistry and quantum computing software package that starts off around Gaussian basis set optimization of molecular electronic-structure problems. Quiqbox is written in pure [Julia](https://julialang.org/). @@ -51,14 +51,14 @@ julia> using Quiqbox # Use cases -## Apply existed basis sets +## Apply existed basis set ```julia coords = [[-0.7,0,0], [0.7,0,0]] -bsH2O = genBasisFunc.(coords, "STO-3G") |> flatten +bsH₂ = genBasisFunc.(coords, "STO-3G") |> flatten ``` -## Build your own basis sets +## Build your own basis set ```julia bs = genBasisFunc.(coords, fill(GaussFunc(1, 0.75), 2)) ``` @@ -70,7 +70,7 @@ nuc = ["H", "H"] runHF(bs, nuc, coords) ``` -## Optimize the basis set +## Optimize a basis set ``` pars = uniqueParams!(bs, filterMapping=true) @@ -80,8 +80,8 @@ optimizeParams!(bs, pars[1:4], nuc, coords) For more basic usage of the programming language behind Quiqbox, Julia, please refer to [the official documentation](https://docs.julialang.org/) or [one official tutorial](https://juliaacademy.com/p/intro-to-julia). -[Doc-stable]: https://github.com/frankwswang/Quiqbox.jl/stable -[Doc-latest]: https://github.com/frankwswang/Quiqbox.jl/latest +[Doc-stable]: https://frankwswang.github.io/Quiqbox.jl/stable +[Doc-latest]: https://frankwswang.github.io/Quiqbox.jl/dev [Doc-s-img]: https://img.shields.io/badge/docs-stable-blue.svg [Doc-l-img]: https://img.shields.io/badge/docs-latest-blue.svg [GA-CI-img]: https://github.com/frankwswang/Quiqbox.jl/actions/workflows/CI.yml/badge.svg?branch=main From c0764a5ba3446db1b54e27a866263a759bcd93f9 Mon Sep 17 00:00:00 2001 From: frankwswang Date: Wed, 1 Sep 2021 19:56:12 -0400 Subject: [PATCH 25/33] Updated CI workflows. --- .github/workflows/CI.yml | 4 ++-- .github/workflows/Documentation.yml | 4 ++-- .github/workflows/TagBot.yml | 2 ++ 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 6ee5cfd0..760760ac 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -2,10 +2,10 @@ name: CI on: pull_request: branches: - - master + - main push: branches: - - master + - main workflow_dispatch: jobs: test: diff --git a/.github/workflows/Documentation.yml b/.github/workflows/Documentation.yml index 3cc8195a..d1acaae2 100644 --- a/.github/workflows/Documentation.yml +++ b/.github/workflows/Documentation.yml @@ -4,10 +4,10 @@ name: Documentation on: pull_request: branches: - - master + - main push: branches: - - master + - main workflow_dispatch: jobs: diff --git a/.github/workflows/TagBot.yml b/.github/workflows/TagBot.yml index 623860f7..e32c9067 100644 --- a/.github/workflows/TagBot.yml +++ b/.github/workflows/TagBot.yml @@ -4,6 +4,8 @@ on: types: - created workflow_dispatch: + schedule: + - cron: 0 0 * * * jobs: TagBot: if: github.event_name == 'workflow_dispatch' || github.actor == 'JuliaTagBot' From 4506fa604e1ee426db14583f27524c0a5431fe19 Mon Sep 17 00:00:00 2001 From: frankwswang Date: Wed, 1 Sep 2021 19:56:37 -0400 Subject: [PATCH 26/33] Configured Documenter.jl. --- docs/make.jl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/make.jl b/docs/make.jl index b30c7a16..41657857 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -24,4 +24,6 @@ makedocs( ] ) -deploydocs(repo="github.com/frankwswang/Quiqbox.jl.git") \ No newline at end of file +deploydocs(repo="github.com/frankwswang/Quiqbox.jl.git", + branch = "gh-pages", + devbranch = "main") \ No newline at end of file From 03b27253cfbc2844093342dd35b7ab1d72048482 Mon Sep 17 00:00:00 2001 From: frankwswang Date: Wed, 1 Sep 2021 19:57:17 -0400 Subject: [PATCH 27/33] Added C matrix column sign control. --- src/HartreeFock.jl | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/HartreeFock.jl b/src/HartreeFock.jl index 46d4245f..871a5aa5 100644 --- a/src/HartreeFock.jl +++ b/src/HartreeFock.jl @@ -16,10 +16,14 @@ getX(S::Matrix{T}; method::Int=1) where {TelLB<:T<:TelUB} = getXmethods[method]( function getC(X::Matrix{T1}, F::Matrix{T2}; - outputCx::Bool=false, outputEmo::Bool=false) where + outputCx::Bool=false, outputEmo::Bool=false, stabilizeSign::Bool=true) where {TelLB<:T1<:TelUB, TelLB<:T2<:TelUB} ϵ, Cₓ = eigen(X'*F*X |> Hermitian, sortby=x->x) outC = outputCx ? Cₓ : X*Cₓ + # Stabilize the sign factor of each column. + stabilizeSign && for j = 1:size(outC, 2) + outC[:, j] *= (outC[1,j] < 0 ? -1 : 1) + end outputEmo ? (outC, ϵ) : outC end From fcaca80c4ca013db97e52c73ba20614072d1ceeb Mon Sep 17 00:00:00 2001 From: frankwswang Date: Wed, 1 Sep 2021 19:57:58 -0400 Subject: [PATCH 28/33] Adjust testing error threshold. --- test/Project.toml | 10 +-- test/unit-tests/HartreeFock-test.jl | 119 ++++++++++++++------------- test/unit-tests/Optimization-test.jl | 35 ++++---- 3 files changed, 83 insertions(+), 81 deletions(-) diff --git a/test/Project.toml b/test/Project.toml index 396982a5..b400505c 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -1,5 +1,5 @@ -[deps] -Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" -Quiqbox = "7cb8c394-fae1-4ab9-92f2-30189d7746cd" -Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7" -Suppressor = "fd094767-a336-5f1f-9728-57cf17d0bbfb" \ No newline at end of file +[deps] +Quiqbox = "7cb8c394-fae1-4ab9-92f2-30189d7746cd" +Suppressor = "fd094767-a336-5f1f-9728-57cf17d0bbfb" +Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7" +Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" \ No newline at end of file diff --git a/test/unit-tests/HartreeFock-test.jl b/test/unit-tests/HartreeFock-test.jl index 8530952f..3b794172 100644 --- a/test/unit-tests/HartreeFock-test.jl +++ b/test/unit-tests/HartreeFock-test.jl @@ -4,7 +4,8 @@ using Suppressor: @suppress_out @testset "HartreeFock.jl" begin - errorThreshold = 1e-9 + errorThreshold1 = 1e-8 + errorThreshold2 = 1e-6 nucCoords = [[-0.7,0.0,0.0], [0.7,0.0,0.0], [0.0, 0.0, 0.0]] mol = ["H", "H", "O"] @@ -25,87 +26,87 @@ using Suppressor: @suppress_out 4=>[:solver=>:LCM]))) end - @test isapprox(res1.E0HF, -93.7878386326277, atol=errorThreshold) + @test isapprox(res1.E0HF, -93.7878386326277, atol=errorThreshold1) @test isapprox(res1.C, - [0.0108959475 0.088981718 0.1216105801 0.0 0.0 -1.9145451703 3.6157332281; - 0.0108959475 0.088981718 -0.1216105801 0.0 0.0 -1.9145451703 -3.6157332281; - -0.9942298564 -0.263439202 0.0 0.0 0.0 -0.0496965897 -0.0; - -0.0415931194 0.8722480485 0.0 0.0 0.0 3.3966577232 -0.0; - 0.0 -0.0 1.0940225371 0.0 0.0 0.0 2.7786717301; - 0.0 0.0 0.0 1.0 0.0 0.0 0.0; - 0.0 0.0 0.0 0.0 1.0 0.0 0.0], - atol=errorThreshold) + [ 0.010895948 0.088981718 0.121610580 0.0 0.0 1.914545170 3.615733228; + 0.010895948 0.088981718 -0.121610580 0.0 0.0 1.914545170 -3.615733228; + -0.994229856 -0.263439202 0.0 0.0 0.0 0.049696590 -0.0; + -0.041593119 0.872248048 0.0 0.0 0.0 -3.396657723 -0.0; + 0.0 -0.0 1.094022537 0.0 0.0 0.0 2.778671730; + 0.0 0.0 0.0 1.0 0.0 0.0 0.0; + 0.0 0.0 0.0 0.0 1.0 0.0 0.0], + atol=errorThreshold2) @test isapprox(res1.F, - [-2.2553557425 -1.9609802133 -4.4843676997 -2.5116870044 0.4836027134 0.0 0.0; - -1.9609802133 -2.2553557425 -4.4843676997 -2.5116870044 -0.4836027134 0.0 0.0; - -4.4843676997 -4.4843676997 -20.9203733167 -5.3634551066 0.0 0.0 0.0; - -2.5116870044 -2.5116870044 -5.3634551066 -2.8963742039 -0.0 0.0 0.0; - 0.4836027134 -0.4836027134 0.0 -0.0 -1.2809250587 0.0 0.0; - 0.0 0.0 0.0 0.0 0.0 -0.6613038925 0.0; - 0.0 0.0 0.0 0.0 0.0 0.0 -0.6613038925], - atol=errorThreshold) + [-2.255355742 -1.960980213 -4.484367700 -2.511687004 0.483602713 0.0 0.0; + -1.960980213 -2.255355742 -4.484367700 -2.511687004 -0.483602713 0.0 0.0; + -4.484367700 -4.484367700 -20.920373317 -5.363455107 0.0 0.0 0.0; + -2.511687004 -2.511687004 -5.363455107 -2.896374204 -0.0 0.0 0.0; + 0.483602713 -0.483602713 0.0 -0.0 -1.280925059 0.0 0.0; + 0.0 0.0 0.0 0.0 0.0 -0.661303892 0.0; + 0.0 0.0 0.0 0.0 0.0 0.0 -0.661303892], + atol=errorThreshold2) @test isapprox(res1.Emo, - [-20.9303746442, -1.6166724499, -1.2844643644, -0.6613038925, - -0.6613038925, 1.0608170463, 1.8478051263], - atol=errorThreshold) + [-20.930374644, -1.616672450, -1.284464364, -0.661303892, + -0.661303892, 1.060817046, 1.847805126], + atol=errorThreshold1) @test res1.occu == [2, 2, 2, 2, 2, 0, 0] D1 = res1.D - @test isapprox(D1*S*D1, D1, atol=errorThreshold) + @test isapprox(D1*S*D1, D1, atol=errorThreshold1) - @test isapprox(res2.E0HF, -93.7878386328625, atol=errorThreshold) + @test isapprox(res2.E0HF, -93.7878386328625, atol=errorThreshold1) @test isapprox.(res2.C, - ([-0.0108959194 -0.088981086 0.1216079134 0.0 0.0 -1.9145451998 3.6157333178; - -0.0108959194 -0.088981086 -0.1216079135 0.0 0.0 -1.9145451998 -3.6157333178; - 0.9942298673 0.2634391803 0.0 0.0 0.0 -0.0496964865 0.0; - 0.04159303 -0.8722491705 0.0 0.0 0.0 3.3966574362 -0.0; - 0.0 -0.0 1.0940204878 0.0 0.0 -0.0 2.7786725369; - 0.0 0.0 0.0 1.0 0.0 0.0 0.0; - 0.0 0.0 0.0 0.0 1.0 0.0 0.0], - [-0.0108959194 0.0889811163 0.1216078542 0.0 0.0 -1.9145451984 -3.6157333198; - -0.0108959194 0.0889811163 -0.1216078542 0.0 0.0 -1.9145451984 3.6157333198; - 0.9942298674 -0.2634391795 -0.0 0.0 0.0 -0.0496964906 0.0; - 0.0415930299 0.8722491168 -0.0 0.0 0.0 3.3966574499 -0.0; - -0.0 -0.0 1.0940204422 0.0 0.0 0.0 -2.7786725549; - 0.0 0.0 0.0 1.0 0.0 0.0 0.0; - 0.0 0.0 0.0 0.0 1.0 0.0 0.0]), - atol=errorThreshold) |> prod + ([ 0.01089592 0.08898109 0.12160791 0.0 0.0 1.91454520 3.61573332; + 0.01089592 0.08898109 -0.12160791 0.0 0.0 1.91454520 -3.61573332; + -0.99422987 -0.26343918 0.0 0.0 0.0 0.04969649 0.0; + -0.04159303 0.87224917 0.0 0.0 0.0 -3.39665744 -0.0; + 0.0 0.0 1.09402049 0.0 0.0 0.0 2.77867254; + 0.0 0.0 0.0 1.0 0.0 0.0 0.0; + 0.0 0.0 0.0 0.0 1.0 0.0 0.0], + [ 0.01089592 0.08898112 0.12160785 0.0 0.0 1.91454520 3.61573332; + 0.01089592 0.08898112 -0.12160785 0.0 0.0 1.91454520 -3.61573332; + -0.99422987 -0.26343918 -0.0 0.0 0.0 0.04969649 0.0; + -0.04159303 0.87224912 -0.0 0.0 0.0 -3.39665745 0.0; + 0.0 -0.0 1.09402044 0.0 0.0 0.0 2.77867255; + 0.0 0.0 0.0 1.0 0.0 0.0 0.0; + 0.0 0.0 0.0 0.0 1.0 0.0 0.0]), + atol=errorThreshold2) |> prod @test isapprox.(res2.F, - ([-2.2553586896 -1.9609820313 -4.4843692187 -2.5116897961 0.4836038059 0.0 0.0; - -1.9609820313 -2.2553586896 -4.4843692187 -2.5116897961 -0.4836038059 0.0 0.0; - -4.4843692187 -4.4843692187 -20.9203832094 -5.363456848 0.0 0.0 0.0; - -2.5116897961 -2.5116897961 -5.363456848 -2.8963776226 -0.0 0.0 0.0; - 0.4836038059 -0.4836038059 0.0 -0.0 -1.2809270581 0.0 0.0; - 0.0 0.0 0.0 0.0 0.0 -0.6613076106 0.0; - 0.0 0.0 0.0 0.0 0.0 0.0 -0.6613076106], - [-2.2553586979 -1.9609820317 -4.4843692157 -2.5116897904 0.4836038095 0.0 0.0; - -1.9609820317 -2.2553586979 -4.4843692157 -2.5116897904 -0.4836038095 0.0 0.0; - -4.4843692157 -4.4843692157 -20.920383202 -5.3634568448 -0.0 0.0 0.0; - -2.5116897904 -2.5116897904 -5.3634568448 -2.896377604 0.0 0.0 0.0; - 0.4836038095 -0.4836038095 -0.0 0.0 -1.2809270492 0.0 0.0; - 0.0 0.0 0.0 0.0 0.0 -0.6613075996 0.0; - 0.0 0.0 0.0 0.0 0.0 0.0 -0.6613075996]), - atol=errorThreshold) |> prod + ([-2.25535869 -1.96098203 -4.48436922 -2.51168980 0.48360380 0.0 0.0; + -1.96098203 -2.25535869 -4.48436922 -2.51168980 -0.48360380 0.0 0.0; + -4.48436922 -4.48436922 -20.92038321 -5.36345685 0.0 0.0 0.0; + -2.51168980 -2.51168980 -5.36345685 -2.89637762 -0.0 0.0 0.0; + 0.48360380 -0.48360380 0.0 -0.0 -1.28092706 0.0 0.0; + 0.0 0.0 0.0 0.0 0.0 -0.66130761 0.0; + 0.0 0.0 0.0 0.0 0.0 0.0 -0.66130761], + [-2.25535870 -1.96098203 -4.48436922 -2.51168979 0.48360381 0.0 0.0; + -1.96098203 -2.25535870 -4.48436922 -2.51168979 -0.48360381 0.0 0.0; + -4.48436922 -4.48436922 -20.92038320 -5.36345684 -0.0 0.0 0.0; + -2.51168979 -2.51168979 -5.36345684 -2.89637760 0.0 0.0 0.0; + 0.48360381 -0.48360381 -0.0 0.0 -1.28092705 0.0 0.0; + 0.0 0.0 0.0 0.0 0.0 -0.66130760 0.0; + 0.0 0.0 0.0 0.0 0.0 0.0 -0.66130760]), + atol=errorThreshold2) |> prod @test isapprox.(res2.Emo, - ([-20.9303845033, -1.6166757369, -1.2844662094, -0.6613076106, - -0.6613076106, 1.0608152747, 1.8478040688], - [-20.9303844958, -1.6166757223, -1.2844661972, -0.6613075996, - -0.6613075996, 1.0608152755, 1.8478040763]), - atol=errorThreshold) |> prod + ([-20.930384503, -1.616675737, -1.284466209, -0.661307611, + -0.661307611, 1.060815275, 1.847804069], + [-20.930384496, -1.616675722, -1.284466197, -0.661307600, + -0.661307600, 1.060815276, 1.847804076]), + atol=errorThreshold1) |> prod @test ( res2.occu .== ([1, 1, 1, 1, 1, 0, 0], [1, 1, 1, 1, 1, 0, 0]) ) |> prod D2s = res2.D for D in D2s - @test isapprox(D*S*D, D, atol=errorThreshold) + @test isapprox(D*S*D, D, atol=errorThreshold1) end end \ No newline at end of file diff --git a/test/unit-tests/Optimization-test.jl b/test/unit-tests/Optimization-test.jl index fa84a132..7b2074b4 100644 --- a/test/unit-tests/Optimization-test.jl +++ b/test/unit-tests/Optimization-test.jl @@ -4,7 +4,8 @@ using Suppressor: @suppress_out @testset "Optimization.jl" begin -errorThreshold = 1e-12 +errorThreshold1 = 1e-10 +errorThreshold2 = 1e-6 # Floating basis set nucCoords = [[-0.7,0.0,0.0], [0.7,0.0,0.0]] @@ -20,17 +21,17 @@ local Es1L, pars1L, grads1L Es1L, pars1L, grads1L = optimizeParams!(bs1, pars1, mol, nucCoords, maxSteps = 200) end -E_t1 = -1.7756825544202863 -par_t1 = [1.3316366727266504, 0.3118586356968696, 0.45479844661739155, - 0.6626439317888224, -0.6866294552929423, 0.6866294671212336, - 0.0, 0.0, 0.0, 0.0] -grad_t1 = [-0.12518827510873726, 0.017527948869488608, -0.10779722877906275, - 0.07398545409754818, -0.056469017809637645, 0.05648285438029821, +E_t1 = -1.775682554420 +par_t1 = [ 1.331636672727, 0.311858635697, 0.454798446617, + 0.662643931789, -0.686629455293, 0.686629467121, + 0.0, 0.0, 0.0, 0.0] +grad_t1 = [-0.125188275109, 0.017527948869, -0.107797228779, + 0.073985454098, -0.056469017810, 0.056482854380, 0.0, 0.0, 0.0, 0.0] -@test isapprox(Es1L[end], E_t1, atol=errorThreshold) -@test isapprox(pars1L[end, :], par_t1, atol=errorThreshold) -@test isapprox(grads1L[end, :], grad_t1, atol=errorThreshold) +@test isapprox(Es1L[end], E_t1, atol=errorThreshold1) +@test isapprox(pars1L[end, :], par_t1, atol=errorThreshold1) +@test isapprox(grads1L[end, :], grad_t1, atol=errorThreshold1) # Grid-based basis set @@ -42,15 +43,15 @@ pars2 = uniqueParams!(bs2, filterMapping=true)[[1,3]] local Es2L, pars2L, grads2L @suppress_out begin - Es2L, pars2L, grads2L = optimizeParams!(bs2, pars2, mol, nucCoords, maxSteps = 200) + Es2L, pars2L, grads2L = optimizeParams!(bs2, pars2, mol, nucCoords, maxSteps = 100) end -E_t2 = -1.6227282934931644 -par_t2 = [0.49801096561597613, 1.408314680969665] -grad_t2 = [0.4557364086913408, 0.32317362845855635] +E_t2 = -1.60187771 +par_t2 = [0.56510208, 1.44471987] +grad_t2 = [0.92745609, 0.42017915] -@test isapprox(Es2L[end], E_t2, atol=errorThreshold) -@test isapprox(pars2L[end, :], par_t2, atol=errorThreshold) -@test isapprox(grads2L[end, :], grad_t2, atol=errorThreshold) +@test isapprox(Es2L[end], E_t2, atol=errorThreshold2) +@test isapprox(pars2L[end, :], par_t2, atol=errorThreshold2) +@test isapprox(grads2L[end, :], grad_t2, atol=errorThreshold2) end \ No newline at end of file From aa856e0aa70c56f28786de207075492bda9f9bb9 Mon Sep 17 00:00:00 2001 From: CompatHelper Julia Date: Thu, 2 Sep 2021 00:09:18 +0000 Subject: [PATCH 29/33] CompatHelper: add new compat entry for Combinatorics at version 1, (keep existing compat) --- Project.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/Project.toml b/Project.toml index 10a2e577..8b80a518 100644 --- a/Project.toml +++ b/Project.toml @@ -13,6 +13,7 @@ Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7" libcint_jll = "574b78ca-bebd-517c-801d-4735c93a9686" [compat] +Combinatorics = "1" PiecewiseQuadratics = "0.1" SeparableOptimization = "0.1" SymbolicUtils = "0.13" From b79cc5b5aeef24db805152ec843ca8ac0588a07b Mon Sep 17 00:00:00 2001 From: frankwswang Date: Wed, 1 Sep 2021 20:33:22 -0400 Subject: [PATCH 30/33] Change Vararg syntax for future compatibility. --- src/Basis.jl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Basis.jl b/src/Basis.jl index dca7751a..824d9857 100644 --- a/src/Basis.jl +++ b/src/Basis.jl @@ -521,8 +521,8 @@ end adjustFunction::F=sciNotReplace, excludeFirstNlines=0, excludeLastNlines=0, center::Union{AbstractArray, - Tuple{Vararg{<:ParamBox}}, - Missing}=missing) where {F<:Function} -> + Tuple{N, ParamBox}, + Missing}=missing) where {N, F<:Function} -> Array{<:FloatingGTBasisFunc, 1} Generate the basis set from a `String` of basis set in Gaussian format or the String output @@ -541,8 +541,8 @@ function genBFuncsFromText(content::String; adjustFunction::F=sciNotReplace, excludeFirstNlines=0, excludeLastNlines=0, center::Union{AbstractArray, - Tuple{Vararg{<:ParamBox}}, - Missing}=missing) where {F<:Function} + NTuple{N, ParamBox}, + Missing}=missing) where {N, F<:Function} adjustContent && (content = adjustFunction(content)) lines = split.(content |> IOBuffer |> readlines) lines = lines[1+excludeFirstNlines : end-excludeLastNlines] From 6b0ca5c08c3f7925e410369f39abaeeaed039b96 Mon Sep 17 00:00:00 2001 From: frankwswang Date: Wed, 1 Sep 2021 22:56:14 -0400 Subject: [PATCH 31/33] Adjust test funcs to account for numerical error. --- test/unit-tests/HartreeFock-test.jl | 29 +++++++++++++++++++++------- test/unit-tests/Optimization-test.jl | 10 +++++----- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/test/unit-tests/HartreeFock-test.jl b/test/unit-tests/HartreeFock-test.jl index 3b794172..522c64e2 100644 --- a/test/unit-tests/HartreeFock-test.jl +++ b/test/unit-tests/HartreeFock-test.jl @@ -5,7 +5,7 @@ using Suppressor: @suppress_out @testset "HartreeFock.jl" begin errorThreshold1 = 1e-8 - errorThreshold2 = 1e-6 + errorThreshold2 = 1e-5 nucCoords = [[-0.7,0.0,0.0], [0.7,0.0,0.0], [0.0, 0.0, 0.0]] mol = ["H", "H", "O"] @@ -28,16 +28,23 @@ using Suppressor: @suppress_out @test isapprox(res1.E0HF, -93.7878386326277, atol=errorThreshold1) - @test isapprox(res1.C, + # Note: the molecular energies of 4th and 5th columns are so close that based on the + # numerical error of each machine the position of them might switch. + + @test isapprox(res1.C[1:5, [1,2,3,6,7]], [ 0.010895948 0.088981718 0.121610580 0.0 0.0 1.914545170 3.615733228; 0.010895948 0.088981718 -0.121610580 0.0 0.0 1.914545170 -3.615733228; -0.994229856 -0.263439202 0.0 0.0 0.0 0.049696590 -0.0; -0.041593119 0.872248048 0.0 0.0 0.0 -3.396657723 -0.0; 0.0 -0.0 1.094022537 0.0 0.0 0.0 2.778671730; 0.0 0.0 0.0 1.0 0.0 0.0 0.0; - 0.0 0.0 0.0 0.0 1.0 0.0 0.0], + 0.0 0.0 0.0 0.0 1.0 0.0 0.0][1:5, [1,2,3,6,7]], atol=errorThreshold2) + @test isapprox(vcat(res1.C[6:7,:][:], res1.C[1:5, 4:5][:]) |> sort, + vcat(fill(0,22), fill(1,2)), atol=errorThreshold1) + @test isapprox(res1.C[6:7, 4:5][:] |> sort, [0,0,1,1], atol=errorThreshold1) + @test isapprox(res1.F, [-2.255355742 -1.960980213 -4.484367700 -2.511687004 0.483602713 0.0 0.0; -1.960980213 -2.255355742 -4.484367700 -2.511687004 -0.483602713 0.0 0.0; @@ -61,22 +68,30 @@ using Suppressor: @suppress_out @test isapprox(res2.E0HF, -93.7878386328625, atol=errorThreshold1) - @test isapprox.(res2.C, + @test isapprox.((res2.C[1][1:5, [1,2,3,6,7]], res2.C[2][1:5, [1,2,3,6,7]]), ([ 0.01089592 0.08898109 0.12160791 0.0 0.0 1.91454520 3.61573332; 0.01089592 0.08898109 -0.12160791 0.0 0.0 1.91454520 -3.61573332; -0.99422987 -0.26343918 0.0 0.0 0.0 0.04969649 0.0; -0.04159303 0.87224917 0.0 0.0 0.0 -3.39665744 -0.0; 0.0 0.0 1.09402049 0.0 0.0 0.0 2.77867254; 0.0 0.0 0.0 1.0 0.0 0.0 0.0; - 0.0 0.0 0.0 0.0 1.0 0.0 0.0], + 0.0 0.0 0.0 0.0 1.0 0.0 0.0][1:5, [1,2,3,6,7]], [ 0.01089592 0.08898112 0.12160785 0.0 0.0 1.91454520 3.61573332; 0.01089592 0.08898112 -0.12160785 0.0 0.0 1.91454520 -3.61573332; -0.99422987 -0.26343918 -0.0 0.0 0.0 0.04969649 0.0; -0.04159303 0.87224912 -0.0 0.0 0.0 -3.39665745 0.0; 0.0 -0.0 1.09402044 0.0 0.0 0.0 2.77867255; 0.0 0.0 0.0 1.0 0.0 0.0 0.0; - 0.0 0.0 0.0 0.0 1.0 0.0 0.0]), + 0.0 0.0 0.0 0.0 1.0 0.0 0.0][1:5, [1,2,3,6,7]]), atol=errorThreshold2) |> prod + + @test isapprox(vcat(res2.C[1][6:7,:][:], res2.C[1][1:5, 4:5][:]) |> sort, + vcat(fill(0,22), fill(1,2)), atol=errorThreshold1) + @test isapprox(res2.C[1][6:7, 4:5][:] |> sort, [0,0,1,1], atol=errorThreshold1) + + @test isapprox(vcat(res2.C[2][6:7,:][:], res2.C[2][1:5, 4:5][:]) |> sort, + vcat(fill(0,22), fill(1,2)), atol=errorThreshold1) + @test isapprox(res2.C[2][6:7, 4:5][:] |> sort, [0,0,1,1], atol=errorThreshold1) @test isapprox.(res2.F, ([-2.25535869 -1.96098203 -4.48436922 -2.51168980 0.48360380 0.0 0.0; @@ -100,7 +115,7 @@ using Suppressor: @suppress_out -0.661307611, 1.060815275, 1.847804069], [-20.930384496, -1.616675722, -1.284466197, -0.661307600, -0.661307600, 1.060815276, 1.847804076]), - atol=errorThreshold1) |> prod + atol=errorThreshold2) |> prod @test ( res2.occu .== ([1, 1, 1, 1, 1, 0, 0], [1, 1, 1, 1, 1, 0, 0]) ) |> prod diff --git a/test/unit-tests/Optimization-test.jl b/test/unit-tests/Optimization-test.jl index 7b2074b4..d645118d 100644 --- a/test/unit-tests/Optimization-test.jl +++ b/test/unit-tests/Optimization-test.jl @@ -5,7 +5,7 @@ using Suppressor: @suppress_out @testset "Optimization.jl" begin errorThreshold1 = 1e-10 -errorThreshold2 = 1e-6 +errorThreshold2 = 1e-3 # Floating basis set nucCoords = [[-0.7,0.0,0.0], [0.7,0.0,0.0]] @@ -43,12 +43,12 @@ pars2 = uniqueParams!(bs2, filterMapping=true)[[1,3]] local Es2L, pars2L, grads2L @suppress_out begin - Es2L, pars2L, grads2L = optimizeParams!(bs2, pars2, mol, nucCoords, maxSteps = 100) + Es2L, pars2L, grads2L = optimizeParams!(bs2, pars2, mol, nucCoords, maxSteps = 50) end -E_t2 = -1.60187771 -par_t2 = [0.56510208, 1.44471987] -grad_t2 = [0.92745609, 0.42017915] +E_t2 = -1.57792401 +par_t2 = [0.62080541, 1.46823536] +grad_t2 = [1.30731332, 0.53205019] @test isapprox(Es2L[end], E_t2, atol=errorThreshold2) @test isapprox(pars2L[end, :], par_t2, atol=errorThreshold2) From 241e3853c366bc7cb3dafd9304801dad2ebdab17 Mon Sep 17 00:00:00 2001 From: frankwswang Date: Wed, 1 Sep 2021 22:56:37 -0400 Subject: [PATCH 32/33] Code formatting. --- src/Integration/DataStructure.jl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Integration/DataStructure.jl b/src/Integration/DataStructure.jl index 365aaee9..9a42e6ba 100644 --- a/src/Integration/DataStructure.jl +++ b/src/Integration/DataStructure.jl @@ -18,7 +18,8 @@ function addToDataChain!(env::Vector{Float64}, atm::Vector{Int32}, bas::Vector{I append!(env, xpns) norm = bf.normalizeGTO ? normOfGTOin(bf) : 1.0 append!(env, cons.*norm) - append!(bas, Int32[gAtmIndex, SubshellNumberList[bf.subshell], nGauss, 1, 0, envEndIndex, envEndIndex+nGauss, 0]) + append!(bas, Int32[gAtmIndex, SubshellNumberList[bf.subshell], nGauss, 1, 0, + envEndIndex, envEndIndex+nGauss, 0]) envEndIndex += nGauss*2 (env, atm, bas) end From 5aa91e0cbff6b8b6e5652a355d4ad32ab7bad061 Mon Sep 17 00:00:00 2001 From: frankwswang Date: Wed, 1 Sep 2021 23:24:06 -0400 Subject: [PATCH 33/33] Loosen error constraint. --- test/unit-tests/HartreeFock-test.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unit-tests/HartreeFock-test.jl b/test/unit-tests/HartreeFock-test.jl index 522c64e2..f325cdb8 100644 --- a/test/unit-tests/HartreeFock-test.jl +++ b/test/unit-tests/HartreeFock-test.jl @@ -5,7 +5,7 @@ using Suppressor: @suppress_out @testset "HartreeFock.jl" begin errorThreshold1 = 1e-8 - errorThreshold2 = 1e-5 + errorThreshold2 = 1e-4 nucCoords = [[-0.7,0.0,0.0], [0.7,0.0,0.0], [0.0, 0.0, 0.0]] mol = ["H", "H", "O"]