### A Pluto.jl notebook ### # v0.15.1 using Markdown using InteractiveUtils # ╔═╡ 7ddc0e30-f887-11ea-12ed-7d1f3253311b md"# Notebook 4 -- Math 2121, Fall 2021 ##### Running *this* notebook (optional) You can run this notebook on your own by entering [this link](http://www.math.ust.hk/~emarberg/teaching/2021/Math2121/julia/04_Math2121_Fall2021.jl) in the *Open from file* menu in Pluto. ##### Multiplying matrices and vectors Suppose $A$ is an $m\times n$ matrix and $v \in \mathbb{R}^n$ is a vector. In today's lecture we introduced a way of multiplying $A$ and $v$ to get a vector $Av \in \mathbb{R}^m$. If $m=n=2$ then this operation is $\left[\begin{array}{cc} A_{11} & A_{12} \\ A_{21} & A_{22} \end{array}\right]\left[\begin{array}{cc} v_1 \\ v_2 \end{array}\right] = \left[\begin{array}{c} A_{11}v_1 + A_{12}v_2 \\ A_{21} v_2 + A_{22}v_2\end{array}\right]$. For example: " # ╔═╡ 134e7518-f88b-11ea-0879-f538452667dc matrix = [1 10; 100 1000] # ╔═╡ 5f4cb9ce-f891-11ea-07d1-5d0a145df6a7 vector = [-1; 1] # ╔═╡ 660d9a44-f891-11ea-2a4b-1b1473cad7d5 matrix * vector # ╔═╡ 82013e66-f891-11ea-1a36-adc877cb87d1 md"##### Multiplying matrices There is a simple way to extend this method of multiplying a matrix and a vector to a method of multiplying two matrices together. We will discuss this matrix multiplication operation in more depth in a few lectures, but here is a first look." # ╔═╡ 9ed4562c-f889-11ea-3d64-3d53fe1d2d1a md"Assume $A$ and $B$ are matrices such that **the number of columns of $A$ is equal to the number of rows of $B$**. Suppose this number is $n$. Then every column of $B$ is a vector $v \in \mathbb{R}^n$ that we can multiply with $A$. If $u,v,w,\dots,z$ are the columns of $B$ so that $$B =\left[\begin{array}{cccc} u & v & w & \cdots & z\end{array}\right]$$ then the *matrix product* of $A$ and $B$ is the matrix $$AB = \left[\begin{array}{cccc} A u & Av & Aw & \cdots & Az \end{array}\right].$$ " # ╔═╡ 0efd250c-f88b-11ea-152c-9dc953b8b71b md" If $n=2$ then $\left[\begin{array}{cc} A_{11} & A_{12} \\ A_{21} & A_{22} \end{array}\right]\left[\begin{array}{cc} B_{11} & B_{12} \\ B_{21} & B_{22} \end{array}\right] = \left[\begin{array}{c} A_{11}B_{11} + A_{12}B_{21} & A_{11}B_{12} + A_{12}B_{22} \\ A_{21} B_{11} + A_{22}B_{21} & A_{21} B_{12} + A_{22} B_{22}\end{array}\right].$ The first column is $Au$ for $u = \left[\begin{array}{cc} B_{11} \\ B_{21} \end{array}\right]$ and the second column is $Av$ for $v = \left[\begin{array}{cc} B_{12} \\ B_{22} \end{array}\right]$. " # ╔═╡ 59a61fd4-f88b-11ea-1ce7-ad48f03dec44 md"A concrete example is $\left[\begin{array}{cc} 10 & 1 \\ 1000 & 100 \end{array}\right]\left[\begin{array}{cc} 2 & 4 \\ 6 & 8 \end{array}\right] = \left[\begin{array}{c} 26 & 48 \\ 2600 & 4800 \end{array}\right].$ We can double check this computation:" # ╔═╡ 805b369e-f888-11ea-2a26-6f8b5cf3d777 A = [10 1; 1000 100] # ╔═╡ af9cf63c-f88a-11ea-0ba6-2f0bd779228d B = [2 4; 6 8] # ╔═╡ b325ac1a-f88a-11ea-3f15-6b5e304378c9 A * B # ╔═╡ 6be6158c-f88b-11ea-2a97-b18f658aa2ae md"This definition of $AB$ makes sense whenever $A$ is an $m\times n$ matrix and $B$ is an $n\times p$ matrix. In particular, we can multiply $A$ and $B$ whenever both are square $n\times n$ matrices of the same size. We focus on this case below." # ╔═╡ ab9f196c-f88b-11ea-09cd-e33e6de80df6 md"##### Efficiency The question we want to explore: how fast can we multiply two $n\times n $ matrices $A$ and $B$? In other words, what is the most efficient algorithm for matrix multiplication? " # ╔═╡ 8fc1838a-f88e-11ea-29a1-c9272a71c795 md"To multiply matrices, we just need to be able to perform addition and multiplication of individual scalars (i.e., numbers). Multiplication operations are much more time consuming than addition. So our efficiency question can be reduced to: what is the fewest number of scalar multiplications needed to multiply two $n\times n$ matrices? " # ╔═╡ 0bfae788-f890-11ea-1e86-2d3f693e04e2 md"The formula above for the $n=2$ case shows 8 multiplications: $A_{11}B_{11},\quad A_{11}B_{12},\quad A_{21}B_{11},\quad A_{21}B_{12}, \quad A_{12}B_{21},\quad A_{12}B_{22},\quad A_{22}B_{21},\quad A_{22}B_{22}.$ In general, entry $(i,j)$ in $AB$ is $A_{i1}B_{1j} + A_{i2}B_{2j} + A_{i3}B_{3j} + \dots + A_{in}B_{nj}$. This formula involves $n$ multiplications and there are $n^2$ entries $(i,j)$. So you might expect that we need $n^3$ multiplications (giving $8=2^3$ for $n=2$) to compute $AB$. Let's write some code to verify this. " # ╔═╡ c683a2da-f835-11ea-227f-252431521e42 function scalar_multiply(a, b, count) # custom function to multiply scalars and return incremented multiplication count # if a == 0 or b == 0 then this returns 0 with same count. # otherewise returns a * b with count incremented by one. return (a == 0 || b == 0) ? (0, count) : (a * b, count + 1) end # ╔═╡ 97d094dc-f84b-11ea-3fba-0bd0bf7a681c function scalar_type(A) # helper function that returns type (e.g., Int, Float64, ...) of matrix entries return minimum(size(A)) > 0 ? typeof(A[1,1]) : Int end # ╔═╡ baa0bf74-f836-11ea-27a8-5738d886e116 function matrix_multiply(A, B, count=0) # multiplies matrices A and B using the naive algorithm. # returns both the product AB and number of scalar multiplications used. # check that matrix sizes match, so that AB is defined (rows, p), (q, cols) = size(A), size(B) @assert p == q C = zeros(scalar_type(A), rows, cols) for i=1:rows for j=1:cols for t=1:p value, count = scalar_multiply(A[i,t], B[t,j], count) C[i,j] += value end end end return C, count end # ╔═╡ dff61d0a-f890-11ea-27cf-7dd5c366390d md"Now let's actually check how many scalar multiplications are used in the naive algorithm when computing the product of two $n\times n$ matrices, say for $n=1,2,\dots,200$." # ╔═╡ c1797ad6-f890-11ea-2291-39daa04bcb65 begin sizes = 1:200 total_multiplications = [] for n=sizes A = rand(Int, n, n) B = rand(Int, n, n) C, multiplication_count = matrix_multiply(A, B) append!(total_multiplications, multiplication_count) # check that our multiplication algorithm gives correct answer! @assert C == A * B end end # ╔═╡ 99aeba2c-f837-11ea-0140-3317ada43500 begin using Plots plot( sizes, total_multiplications, xlabel="n", ylabel="Multiplications needed", title="Multiplying n-by-n matrices with naive algorithm", legend=false, size=(600,500) ) end # ╔═╡ f995419a-f837-11ea-2835-b7f7e71a1451 total_multiplications # ╔═╡ f0e9b84c-f838-11ea-3ff8-332593b8a3c1 # the numbers look like they're exactly n^3, and they are: total_multiplications == [n^3 for n in 1:length(total_multiplications)] # ╔═╡ 02d4aa16-f892-11ea-03df-eb60009bf0ac md"##### Faster algorithms Now let's discuss a different matrix multiplication algorithm. The following is called the *Strassen algorithm*, discovered by Volker Strassen in the 1960s. The significance of this algorithm is just to demonstrate that there is a faster way to multiply matrices than the naive method. The idea of the algorithm is, to compute $AB$ where $A$ and $B$ are $n\times n$ matrices, proceed as follows: * First, we split both $A$ and $B$ into four $n/2\times n/2$ submatrices. * Then we express $AB$ as a sum of terms derived from multiplying these submatrices together. * The clever part is to somehow write this using only 7 multiplications instead of the usual 8. * If $n=2$ then the multiplications involve $1\times 1$ submatrices, that is, scalars. * If $n>2$ then we *recursively* apply the algorithm the multiply the submatrices together. " # ╔═╡ 4d291c54-f893-11ea-0b49-f702b31dad61 md"We can improve this algorithm by modifying the final step of the recursion. When $n$ is small, below some threshhold value, then it's faster to use the naive multiplication algorithm. We can choose this threshhold below. Setting this threshhold to 1 means we would keep subdividing the matrices until they are $1\times 1$. This isn't the most efficient choice." # ╔═╡ d985c9c4-924e-458d-bc2f-ffd8c72e60b8 md"""*Fast multiply threshold:*""" # ╔═╡ ae1d5aa1-c504-49e5-bc91-e66faf858c4d THRESHHOLD = 3 # ╔═╡ dd477960-f835-11ea-2ee4-8d58e3b0b398 begin function pad(A, n) # extends matrix A to an n-by-n matrix by adding zeros in vacant positions. # # returns n-by-n matrix [A 0] # [0 0] (p, q), stype = size(A), scalar_type(A) return vcat(hcat(A, zeros(stype, p, n - q)), zeros(stype, n - p, n)) end function fast_multiply(A, B, count=0; thrshld=THRESHHOLD) # multiplies matrices A and B using the Strassen algorithm (1969). # returns both the product AB and the number of scalar multiplications used. (rows, p), (q, cols) = size(A), size(B) @assert p == q # pads A and B with zeros if not same size. # can ignore this code for square matrices. if size(A) != size(B) n = maximum([rows, p, q, cols]) A, B = pad(A, n), pad(B, n) else n = rows end # if size of input matrices is below THRESHHOLD value, then we switch # to the naive multiplication algorithm. this can gain some efficiency. if n <= thrshld return matrix_multiply(A, B, count) else # pads inputs with one extra row/column to have even-by-even size if n % 2 != 0 n += 1 A, B = pad(A, n), pad(B, n) end p = n ÷ 2 # shorthand for n/2 q = p + 1 # shorthand for n/2 + 1 # divide A into 4 submatrices of size n/2-by-n/2 A11 = A[1:p,1:p] A12 = A[1:p,q:n] A21 = A[q:n,1:p] A22 = A[q:n,q:n] # divide B into 4 submatrices of size n/2-by-n/2 B11 = B[1:p,1:p] B12 = B[1:p,q:n] B21 = B[q:n,1:p] B22 = B[q:n,q:n] # uses only 7 multiplications. # we ignore +/- operations as these are faster than multiplications. M1, count = fast_multiply(A11 + A22, B11 + B22, count, thrshld=thrshld) M2, count = fast_multiply(A21 + A22, B11, count, thrshld=thrshld) M3, count = fast_multiply(A11, B12 - B22, count, thrshld=thrshld) M4, count = fast_multiply(A22, B21 - B11, count, thrshld=thrshld) M5, count = fast_multiply(A11 + A12, B22, count, thrshld=thrshld) M6, count = fast_multiply(A21 - A11, B11 + B12, count, thrshld=thrshld) M7, count = fast_multiply(A12 - A22, B21 + B22, count, thrshld=thrshld) C = zeros(scalar_type(A), n, n) # only +/- operations below, no multiplications! C[1:p,1:p] = M1 + M4 - M5 + M7 C[1:p,q:n] = M3 + M5 C[q:n,1:p] = M2 + M4 C[q:n,q:n] = M1 - M2 + M3 + M6 return C[1:rows,1:cols], count end end end # ╔═╡ b7676ae4-f893-11ea-3770-45363031dd69 md"Let's compare both algorithms for $2\times 2$ matrices." # ╔═╡ c7a39bda-f893-11ea-31ec-4d57afe152b7 X = rand(-100:100, 2, 2) # ╔═╡ d01d7a9c-f893-11ea-3e1f-ddc1283ba20c Y = rand(-100:100, 2, 2) # ╔═╡ d43b9a0c-f893-11ea-1184-e175e50aec8b # note: 8 multiplications matrix_multiply(X, Y) # ╔═╡ d87a2ed8-f893-11ea-1473-2fc7a857eef5 # note: only 7 multiplications! fast_multiply(X, Y, thrshld=1) # ╔═╡ bca45ac4-f89a-11ea-0417-7f70f0aa5daa md"Now let's actually check how many scalar multiplications are used in the naive algorithm when computing the product of two $n\times n$ matrices for $n=1,2,\dots,$ $(minimum([40 * THRESHHOLD, 200]))." # ╔═╡ fb5819ce-f893-11ea-1915-657b1c6d3780 function get_multiplications(THRESHHOLD; a=40, b=200) nvals = 1:minimum([a * THRESHHOLD, b]) naive_multiplications = total_multiplications[1:length(nvals)] strassen_multiplications = [] for n = nvals A = rand(Int, n, n) B = rand(Int, n, n) C, multiplication_count = fast_multiply(A, B) append!(strassen_multiplications, multiplication_count) # check that our multiplication algorithm gives correct answer! @assert A * B == C end return (nvals, naive_multiplications, strassen_multiplications) end # ╔═╡ ab2de8ea-1b9b-4517-b153-e183a90d1df1 (_, naive_multiplications, strassen_multiplications) = get_multiplications(THRESHHOLD) # ╔═╡ b40b64b2-f894-11ea-3cdd-0b5749dc4c23 md"Let's compare the multiplication counts." # ╔═╡ 9d2b1c38-f894-11ea-3f1b-257f8a9870c9 strassen_multiplications # ╔═╡ c6403338-f894-11ea-184f-8f31a62e177f naive_multiplications # ╔═╡ e0af64ec-f84f-11ea-20bf-db2bdcb8929d function comparison_plot(THRESHHOLD) (nvals, naive_multiplications, strassen_multiplications) = get_multiplications(THRESHHOLD) plot( nvals, hcat(strassen_multiplications, naive_multiplications), xlabel="n", ylabel="Multiplications needed", title="Multiplying n-by-n matrices [@threshhold = $(THRESHHOLD)]", label=["Strassen algorithm" "Naive algorithm"], legend=:bottomright, size=(600,500) ) end # ╔═╡ c3edac73-575e-4a79-acbb-f024a5f1f5f8 comparison_plot(THRESHHOLD) # ╔═╡ 9b52c335-315b-4345-b033-d924a48e0f43 comparison_plot(2*THRESHHOLD) # ╔═╡ 147d6a80-f894-11ea-2346-1bdf75ab318c md"Consider arbitrary $n\times n$ matrices $A$ and $B$. Let $M_{\mathrm{naive}}(n)$ be the number of multiplications used by the naive algorithm compute $AB$. Let $M_{\mathrm{strassen}}(n)$ be the number of multiplications used by the Strassen algorithm. The plot below graphs the quotient $\frac{M_{\mathrm{naive}}(n)}{M_{\mathrm{strassen}}(n)}$. If the Strassen algorithm is faster, then this quotient should be greater than 1. " # ╔═╡ bb05c9e6-f83e-11ea-1a36-e55c40035940 function ratio_plot(THRESHHOLD) (nvals, naive_multiplications, strassen_multiplications) = get_multiplications(THRESHHOLD) plot( nvals, naive_multiplications ./ strassen_multiplications, xlabel="n", ylabel="Quotient of multiplication counts", title="(naive alg count) ÷ (fast alg count) [threshhold = $(THRESHHOLD)]", legend=false, ylim=(0.0, 2.5), xticks=[1 + THRESHHOLD * i for i in [1,2,4,8,16,32]], size=(600,500) ) end # ╔═╡ 89f1e7bc-5f82-4562-9d8e-baab8f651ee0 ratio_plot(THRESHHOLD) # ╔═╡ 03a903fb-d2fe-48ee-83f2-db804884a344 ratio_plot(2*THRESHHOLD) # ╔═╡ 3a663cda-f895-11ea-1c9c-d32474ff019d md"When $n$ is very large, the number of multiplications needed by the Strasssen algorithm will approach a constant times $n^{\log_2(7)} = n^{2.807...}$. The naive algorithm uses $n^{\log_2(8)} = n^3$ multiplications. When properly implemented, the Strassen algorithm is practical, and computes $AB$ faster than the naive algorithm. This is not the best possible algorithm! (Caution: the code in this notebook is not efficiently implemented for practical use. There is no need for us to write our own matrix multiplication functions, as we can and should just use the built-in methods.) " # ╔═╡ 43c879fc-f898-11ea-31e2-dfe1796221e5 md"##### Remarks As of now, the fastest known matrix multiplication algorithm uses a constant times $n^{2.3728639}$ multiplications. This is not a practical algorithm: you only get a speedup for very large $n$. When multiplying two matrices, you have to process all $2n^2$ entries, so if a matrix multiplication algorithm uses a constant times $n^\omega$ multiplications then we must have $\omega\geq 2$. The best possible value of the exponent $\omega$ is still unknown. Currently, we just know that the best value is somewhere in the range $2 \leq \omega \leq 2.3728639$. See [wikipedia](https://en.wikipedia.org/wiki/Matrix_multiplication_algorithm#Sub-cubic_algorithms) for more info. " # ╔═╡ 00000000-0000-0000-0000-000000000001 PLUTO_PROJECT_TOML_CONTENTS = """ [deps] Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" [compat] Plots = "~1.21.3" """ # ╔═╡ 00000000-0000-0000-0000-000000000002 PLUTO_MANIFEST_TOML_CONTENTS = """ # This file is machine-generated - editing it directly is not advised [[Adapt]] deps = ["LinearAlgebra"] git-tree-sha1 = "84918055d15b3114ede17ac6a7182f68870c16f7" uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" version = "3.3.1" [[ArgTools]] uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" [[Artifacts]] uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" [[Base64]] uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" [[Bzip2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "19a35467a82e236ff51bc17a3a44b69ef35185a2" uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" version = "1.0.8+0" [[Cairo_jll]] deps = ["Artifacts", "Bzip2_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] git-tree-sha1 = "f2202b55d816427cd385a9a4f3ffb226bee80f99" uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" version = "1.16.1+0" [[ColorSchemes]] deps = ["ColorTypes", "Colors", "FixedPointNumbers", "Random"] git-tree-sha1 = "9995eb3977fbf67b86d0a0a0508e83017ded03f2" uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" version = "3.14.0" [[ColorTypes]] deps = ["FixedPointNumbers", "Random"] git-tree-sha1 = "024fe24d83e4a5bf5fc80501a314ce0d1aa35597" uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" version = "0.11.0" [[Colors]] deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] git-tree-sha1 = "417b0ed7b8b838aa6ca0a87aadf1bb9eb111ce40" uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" version = "0.12.8" [[Compat]] deps = ["Base64", "Dates", "DelimitedFiles", "Distributed", "InteractiveUtils", "LibGit2", "Libdl", "LinearAlgebra", "Markdown", "Mmap", "Pkg", "Printf", "REPL", "Random", "SHA", "Serialization", "SharedArrays", "Sockets", "SparseArrays", "Statistics", "Test", "UUIDs", "Unicode"] git-tree-sha1 = "727e463cfebd0c7b999bbf3e9e7e16f254b94193" uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" version = "3.34.0" [[CompilerSupportLibraries_jll]] deps = ["Artifacts", "Libdl"] uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" [[Contour]] deps = ["StaticArrays"] git-tree-sha1 = "9f02045d934dc030edad45944ea80dbd1f0ebea7" uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" version = "0.5.7" [[DataAPI]] git-tree-sha1 = "bec2532f8adb82005476c141ec23e921fc20971b" uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" version = "1.8.0" [[DataStructures]] deps = ["Compat", "InteractiveUtils", "OrderedCollections"] git-tree-sha1 = "7d9d316f04214f7efdbb6398d545446e246eff02" uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" version = "0.18.10" [[DataValueInterfaces]] git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" version = "1.0.0" [[Dates]] deps = ["Printf"] uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" [[DelimitedFiles]] deps = ["Mmap"] uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" [[Distributed]] deps = ["Random", "Serialization", "Sockets"] uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" [[Downloads]] deps = ["ArgTools", "LibCURL", "NetworkOptions"] uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" [[EarCut_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "3f3a2501fa7236e9b911e0f7a588c657e822bb6d" uuid = "5ae413db-bbd1-5e63-b57d-d24a61df00f5" version = "2.2.3+0" [[Expat_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "b3bfd02e98aedfa5cf885665493c5598c350cd2f" uuid = "2e619515-83b5-522b-bb60-26c02a35a201" version = "2.2.10+0" [[FFMPEG]] deps = ["FFMPEG_jll"] git-tree-sha1 = "b57e3acbe22f8484b4b5ff66a7499717fe1a9cc8" uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" version = "0.4.1" [[FFMPEG_jll]] deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "Pkg", "Zlib_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"] git-tree-sha1 = "d8a578692e3077ac998b50c0217dfd67f21d1e5f" uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" version = "4.4.0+0" [[FixedPointNumbers]] deps = ["Statistics"] git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc" uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" version = "0.8.4" [[Fontconfig_jll]] deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Pkg", "Zlib_jll"] git-tree-sha1 = "21efd19106a55620a188615da6d3d06cd7f6ee03" uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" version = "2.13.93+0" [[Formatting]] deps = ["Printf"] git-tree-sha1 = "8339d61043228fdd3eb658d86c926cb282ae72a8" uuid = "59287772-0a20-5a39-b81b-1366585eb4c0" version = "0.4.2" [[FreeType2_jll]] deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] git-tree-sha1 = "87eb71354d8ec1a96d4a7636bd57a7347dde3ef9" uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" version = "2.10.4+0" [[FriBidi_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "aa31987c2ba8704e23c6c8ba8a4f769d5d7e4f91" uuid = "559328eb-81f9-559d-9380-de523a88c83c" version = "1.0.10+0" [[GLFW_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Pkg", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll"] git-tree-sha1 = "dba1e8614e98949abfa60480b13653813d8f0157" uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89" version = "3.3.5+0" [[GR]] deps = ["Base64", "DelimitedFiles", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Pkg", "Printf", "Random", "Serialization", "Sockets", "Test", "UUIDs"] git-tree-sha1 = "182da592436e287758ded5be6e32c406de3a2e47" uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" version = "0.58.1" [[GR_jll]] deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Pkg", "Qt5Base_jll", "Zlib_jll", "libpng_jll"] git-tree-sha1 = "ef49a187604f865f4708c90e3f431890724e9012" uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" version = "0.59.0+0" [[GeometryBasics]] deps = ["EarCut_jll", "IterTools", "LinearAlgebra", "StaticArrays", "StructArrays", "Tables"] git-tree-sha1 = "58bcdf5ebc057b085e58d95c138725628dd7453c" uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326" version = "0.4.1" [[Gettext_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"] git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046" uuid = "78b55507-aeef-58d4-861c-77aaff3498b1" version = "0.21.0+0" [[Glib_jll]] deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE_jll", "Pkg", "Zlib_jll"] git-tree-sha1 = "7bf67e9a481712b3dbe9cb3dac852dc4b1162e02" uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" version = "2.68.3+0" [[Graphite2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011" uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" version = "1.3.14+0" [[Grisu]] git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2" uuid = "42e2da0e-8278-4e71-bc24-59509adca0fe" version = "1.0.2" [[HTTP]] deps = ["Base64", "Dates", "IniFile", "Logging", "MbedTLS", "NetworkOptions", "Sockets", "URIs"] git-tree-sha1 = "60ed5f1643927479f845b0135bb369b031b541fa" uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" version = "0.9.14" [[HarfBuzz_jll]] deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg"] git-tree-sha1 = "8a954fed8ac097d5be04921d595f741115c1b2ad" uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" version = "2.8.1+0" [[IniFile]] deps = ["Test"] git-tree-sha1 = "098e4d2c533924c921f9f9847274f2ad89e018b8" uuid = "83e8ac13-25f8-5344-8a64-a9f2b223428f" version = "0.5.0" [[InteractiveUtils]] deps = ["Markdown"] uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" [[IterTools]] git-tree-sha1 = "05110a2ab1fc5f932622ffea2a003221f4782c18" uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" version = "1.3.0" [[IteratorInterfaceExtensions]] git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" uuid = "82899510-4779-5014-852e-03e436cf321d" version = "1.0.0" [[JLLWrappers]] deps = ["Preferences"] git-tree-sha1 = "642a199af8b68253517b80bd3bfd17eb4e84df6e" uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" version = "1.3.0" [[JSON]] deps = ["Dates", "Mmap", "Parsers", "Unicode"] git-tree-sha1 = "8076680b162ada2a031f707ac7b4953e30667a37" uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" version = "0.21.2" [[JpegTurbo_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "d735490ac75c5cb9f1b00d8b5509c11984dc6943" uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" version = "2.1.0+0" [[LAME_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "f6250b16881adf048549549fba48b1161acdac8c" uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" version = "3.100.1+0" [[LZO_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "e5b909bcf985c5e2605737d2ce278ed791b89be6" uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" version = "2.10.1+0" [[LaTeXStrings]] git-tree-sha1 = "c7f1c695e06c01b95a67f0cd1d34994f3e7db104" uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" version = "1.2.1" [[Latexify]] deps = ["Formatting", "InteractiveUtils", "LaTeXStrings", "MacroTools", "Markdown", "Printf", "Requires"] git-tree-sha1 = "a4b12a1bd2ebade87891ab7e36fdbce582301a92" uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" version = "0.15.6" [[LibCURL]] deps = ["LibCURL_jll", "MozillaCACerts_jll"] uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" [[LibCURL_jll]] deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" [[LibGit2]] deps = ["Base64", "NetworkOptions", "Printf", "SHA"] uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" [[LibSSH2_jll]] deps = ["Artifacts", "Libdl", "MbedTLS_jll"] uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" [[Libdl]] uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" [[Libffi_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "761a393aeccd6aa92ec3515e428c26bf99575b3b" uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" version = "3.2.2+0" [[Libgcrypt_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll", "Pkg"] git-tree-sha1 = "64613c82a59c120435c067c2b809fc61cf5166ae" uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4" version = "1.8.7+0" [[Libglvnd_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll", "Xorg_libXext_jll"] git-tree-sha1 = "7739f837d6447403596a75d19ed01fd08d6f56bf" uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29" version = "1.3.0+3" [[Libgpg_error_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "c333716e46366857753e273ce6a69ee0945a6db9" uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8" version = "1.42.0+0" [[Libiconv_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "42b62845d70a619f063a7da093d995ec8e15e778" uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" version = "1.16.1+1" [[Libmount_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "9c30530bf0effd46e15e0fdcf2b8636e78cbbd73" uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" version = "2.35.0+0" [[Libtiff_jll]] deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Pkg", "Zlib_jll", "Zstd_jll"] git-tree-sha1 = "340e257aada13f95f98ee352d316c3bed37c8ab9" uuid = "89763e89-9b03-5906-acba-b20f662cd828" version = "4.3.0+0" [[Libuuid_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "7f3efec06033682db852f8b3bc3c1d2b0a0ab066" uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" version = "2.36.0+0" [[LinearAlgebra]] deps = ["Libdl"] uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" [[Logging]] uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" [[MacroTools]] deps = ["Markdown", "Random"] git-tree-sha1 = "0fb723cd8c45858c22169b2e42269e53271a6df7" uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" version = "0.5.7" [[Markdown]] deps = ["Base64"] uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" [[MbedTLS]] deps = ["Dates", "MbedTLS_jll", "Random", "Sockets"] git-tree-sha1 = "1c38e51c3d08ef2278062ebceade0e46cefc96fe" uuid = "739be429-bea8-5141-9913-cc70e7f3736d" version = "1.0.3" [[MbedTLS_jll]] deps = ["Artifacts", "Libdl"] uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" [[Measures]] git-tree-sha1 = "e498ddeee6f9fdb4551ce855a46f54dbd900245f" uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e" version = "0.3.1" [[Missings]] deps = ["DataAPI"] git-tree-sha1 = "2ca267b08821e86c5ef4376cffed98a46c2cb205" uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" version = "1.0.1" [[Mmap]] uuid = "a63ad114-7e13-5084-954f-fe012c677804" [[MozillaCACerts_jll]] uuid = "14a3606d-f60d-562e-9121-12d972cd8159" [[NaNMath]] git-tree-sha1 = "bfe47e760d60b82b66b61d2d44128b62e3a369fb" uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" version = "0.3.5" [[NetworkOptions]] uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" [[Ogg_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "7937eda4681660b4d6aeeecc2f7e1c81c8ee4e2f" uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" version = "1.3.5+0" [[OpenSSL_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "15003dcb7d8db3c6c857fda14891a539a8f2705a" uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" version = "1.1.10+0" [[Opus_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "51a08fb14ec28da2ec7a927c4337e4332c2a4720" uuid = "91d4177d-7536-5919-b921-800302f37372" version = "1.3.2+0" [[OrderedCollections]] git-tree-sha1 = "85f8e6578bf1f9ee0d11e7bb1b1456435479d47c" uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" version = "1.4.1" [[PCRE_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "b2a7af664e098055a7529ad1a900ded962bca488" uuid = "2f80f16e-611a-54ab-bc61-aa92de5b98fc" version = "8.44.0+0" [[Parsers]] deps = ["Dates"] git-tree-sha1 = "438d35d2d95ae2c5e8780b330592b6de8494e779" uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" version = "2.0.3" [[Pixman_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "b4f5d02549a10e20780a24fce72bea96b6329e29" uuid = "30392449-352a-5448-841d-b1acce4e97dc" version = "0.40.1+0" [[Pkg]] deps = ["Artifacts", "Dates", "Downloads", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" [[PlotThemes]] deps = ["PlotUtils", "Requires", "Statistics"] git-tree-sha1 = "a3a964ce9dc7898193536002a6dd892b1b5a6f1d" uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a" version = "2.0.1" [[PlotUtils]] deps = ["ColorSchemes", "Colors", "Dates", "Printf", "Random", "Reexport", "Statistics"] git-tree-sha1 = "9ff1c70190c1c30aebca35dc489f7411b256cd23" uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" version = "1.0.13" [[Plots]] deps = ["Base64", "Contour", "Dates", "Downloads", "FFMPEG", "FixedPointNumbers", "GR", "GeometryBasics", "JSON", "Latexify", "LinearAlgebra", "Measures", "NaNMath", "PlotThemes", "PlotUtils", "Printf", "REPL", "Random", "RecipesBase", "RecipesPipeline", "Reexport", "Requires", "Scratch", "Showoff", "SparseArrays", "Statistics", "StatsBase", "UUIDs"] git-tree-sha1 = "2dbafeadadcf7dadff20cd60046bba416b4912be" uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" version = "1.21.3" [[Preferences]] deps = ["TOML"] git-tree-sha1 = "00cfd92944ca9c760982747e9a1d0d5d86ab1e5a" uuid = "21216c6a-2e73-6563-6e65-726566657250" version = "1.2.2" [[Printf]] deps = ["Unicode"] uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" [[Qt5Base_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Fontconfig_jll", "Glib_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "OpenSSL_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libxcb_jll", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_keysyms_jll", "Xorg_xcb_util_renderutil_jll", "Xorg_xcb_util_wm_jll", "Zlib_jll", "xkbcommon_jll"] git-tree-sha1 = "ad368663a5e20dbb8d6dc2fddeefe4dae0781ae8" uuid = "ea2cea3b-5b76-57ae-a6ef-0a8af62496e1" version = "5.15.3+0" [[REPL]] deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" [[Random]] deps = ["Serialization"] uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" [[RecipesBase]] git-tree-sha1 = "44a75aa7a527910ee3d1751d1f0e4148698add9e" uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" version = "1.1.2" [[RecipesPipeline]] deps = ["Dates", "NaNMath", "PlotUtils", "RecipesBase"] git-tree-sha1 = "d4491becdc53580c6dadb0f6249f90caae888554" uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c" version = "0.4.0" [[Reexport]] git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" uuid = "189a3867-3050-52da-a836-e630ba90ab69" version = "1.2.2" [[Requires]] deps = ["UUIDs"] git-tree-sha1 = "4036a3bd08ac7e968e27c203d45f5fff15020621" uuid = "ae029012-a4dd-5104-9daa-d747884805df" version = "1.1.3" [[SHA]] uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" [[Scratch]] deps = ["Dates"] git-tree-sha1 = "0b4b7f1393cff97c33891da2a0bf69c6ed241fda" uuid = "6c6a2e73-6563-6170-7368-637461726353" version = "1.1.0" [[Serialization]] uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" [[SharedArrays]] deps = ["Distributed", "Mmap", "Random", "Serialization"] uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" [[Showoff]] deps = ["Dates", "Grisu"] git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de" uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" version = "1.0.3" [[Sockets]] uuid = "6462fe0b-24de-5631-8697-dd941f90decc" [[SortingAlgorithms]] deps = ["DataStructures"] git-tree-sha1 = "b3363d7460f7d098ca0912c69b082f75625d7508" uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" version = "1.0.1" [[SparseArrays]] deps = ["LinearAlgebra", "Random"] uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" [[StaticArrays]] deps = ["LinearAlgebra", "Random", "Statistics"] git-tree-sha1 = "3240808c6d463ac46f1c1cd7638375cd22abbccb" uuid = "90137ffa-7385-5640-81b9-e52037218182" version = "1.2.12" [[Statistics]] deps = ["LinearAlgebra", "SparseArrays"] uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" [[StatsAPI]] git-tree-sha1 = "1958272568dc176a1d881acb797beb909c785510" uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" version = "1.0.0" [[StatsBase]] deps = ["DataAPI", "DataStructures", "LinearAlgebra", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] git-tree-sha1 = "8cbbc098554648c84f79a463c9ff0fd277144b6c" uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" version = "0.33.10" [[StructArrays]] deps = ["Adapt", "DataAPI", "StaticArrays", "Tables"] git-tree-sha1 = "1700b86ad59348c0f9f68ddc95117071f947072d" uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" version = "0.6.1" [[TOML]] deps = ["Dates"] uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" [[TableTraits]] deps = ["IteratorInterfaceExtensions"] git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39" uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" version = "1.0.1" [[Tables]] deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "TableTraits", "Test"] git-tree-sha1 = "d0c690d37c73aeb5ca063056283fde5585a41710" uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" version = "1.5.0" [[Tar]] deps = ["ArgTools", "SHA"] uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" [[Test]] deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [[URIs]] git-tree-sha1 = "97bbe755a53fe859669cd907f2d96aee8d2c1355" uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" version = "1.3.0" [[UUIDs]] deps = ["Random", "SHA"] uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" [[Unicode]] uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" [[Wayland_jll]] deps = ["Artifacts", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg", "XML2_jll"] git-tree-sha1 = "3e61f0b86f90dacb0bc0e73a0c5a83f6a8636e23" uuid = "a2964d1f-97da-50d4-b82a-358c7fce9d89" version = "1.19.0+0" [[Wayland_protocols_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Wayland_jll"] git-tree-sha1 = "2839f1c1296940218e35df0bbb220f2a79686670" uuid = "2381bf8a-dfd0-557d-9999-79630e7b1b91" version = "1.18.0+4" [[XML2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "Zlib_jll"] git-tree-sha1 = "1acf5bdf07aa0907e0a37d3718bb88d4b687b74a" uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" version = "2.9.12+0" [[XSLT_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "Pkg", "XML2_jll", "Zlib_jll"] git-tree-sha1 = "91844873c4085240b95e795f692c4cec4d805f8a" uuid = "aed1982a-8fda-507f-9586-7b0439959a61" version = "1.1.34+0" [[Xorg_libX11_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] git-tree-sha1 = "5be649d550f3f4b95308bf0183b82e2582876527" uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" version = "1.6.9+4" [[Xorg_libXau_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "4e490d5c960c314f33885790ed410ff3a94ce67e" uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" version = "1.0.9+4" [[Xorg_libXcursor_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXfixes_jll", "Xorg_libXrender_jll"] git-tree-sha1 = "12e0eb3bc634fa2080c1c37fccf56f7c22989afd" uuid = "935fb764-8cf2-53bf-bb30-45bb1f8bf724" version = "1.2.0+4" [[Xorg_libXdmcp_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "4fe47bd2247248125c428978740e18a681372dd4" uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" version = "1.1.3+4" [[Xorg_libXext_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] git-tree-sha1 = "b7c0aa8c376b31e4852b360222848637f481f8c3" uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" version = "1.3.4+4" [[Xorg_libXfixes_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] git-tree-sha1 = "0e0dc7431e7a0587559f9294aeec269471c991a4" uuid = "d091e8ba-531a-589c-9de9-94069b037ed8" version = "5.0.3+4" [[Xorg_libXi_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXfixes_jll"] git-tree-sha1 = "89b52bc2160aadc84d707093930ef0bffa641246" uuid = "a51aa0fd-4e3c-5386-b890-e753decda492" version = "1.7.10+4" [[Xorg_libXinerama_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll"] git-tree-sha1 = "26be8b1c342929259317d8b9f7b53bf2bb73b123" uuid = "d1454406-59df-5ea1-beac-c340f2130bc3" version = "1.1.4+4" [[Xorg_libXrandr_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll"] git-tree-sha1 = "34cea83cb726fb58f325887bf0612c6b3fb17631" uuid = "ec84b674-ba8e-5d96-8ba1-2a689ba10484" version = "1.5.2+4" [[Xorg_libXrender_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] git-tree-sha1 = "19560f30fd49f4d4efbe7002a1037f8c43d43b96" uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" version = "0.9.10+4" [[Xorg_libpthread_stubs_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "6783737e45d3c59a4a4c4091f5f88cdcf0908cbb" uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" version = "0.1.0+3" [[Xorg_libxcb_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"] git-tree-sha1 = "daf17f441228e7a3833846cd048892861cff16d6" uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" version = "1.13.0+3" [[Xorg_libxkbfile_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] git-tree-sha1 = "926af861744212db0eb001d9e40b5d16292080b2" uuid = "cc61e674-0454-545c-8b26-ed2c68acab7a" version = "1.1.0+4" [[Xorg_xcb_util_image_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] git-tree-sha1 = "0fab0a40349ba1cba2c1da699243396ff8e94b97" uuid = "12413925-8142-5f55-bb0e-6d7ca50bb09b" version = "0.4.0+1" [[Xorg_xcb_util_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll"] git-tree-sha1 = "e7fd7b2881fa2eaa72717420894d3938177862d1" uuid = "2def613f-5ad1-5310-b15b-b15d46f528f5" version = "0.4.0+1" [[Xorg_xcb_util_keysyms_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] git-tree-sha1 = "d1151e2c45a544f32441a567d1690e701ec89b00" uuid = "975044d2-76e6-5fbe-bf08-97ce7c6574c7" version = "0.4.0+1" [[Xorg_xcb_util_renderutil_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] git-tree-sha1 = "dfd7a8f38d4613b6a575253b3174dd991ca6183e" uuid = "0d47668e-0667-5a69-a72c-f761630bfb7e" version = "0.3.9+1" [[Xorg_xcb_util_wm_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] git-tree-sha1 = "e78d10aab01a4a154142c5006ed44fd9e8e31b67" uuid = "c22f9ab0-d5fe-5066-847c-f4bb1cd4e361" version = "0.4.1+1" [[Xorg_xkbcomp_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxkbfile_jll"] git-tree-sha1 = "4bcbf660f6c2e714f87e960a171b119d06ee163b" uuid = "35661453-b289-5fab-8a00-3d9160c6a3a4" version = "1.4.2+4" [[Xorg_xkeyboard_config_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xkbcomp_jll"] git-tree-sha1 = "5c8424f8a67c3f2209646d4425f3d415fee5931d" uuid = "33bec58e-1273-512f-9401-5d533626f822" version = "2.27.0+4" [[Xorg_xtrans_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "79c31e7844f6ecf779705fbc12146eb190b7d845" uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" version = "1.4.0+3" [[Zlib_jll]] deps = ["Libdl"] uuid = "83775a58-1f1d-513f-b197-d71354ab007a" [[Zstd_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "cc4bf3fdde8b7e3e9fa0351bdeedba1cf3b7f6e6" uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" version = "1.5.0+0" [[libass_jll]] deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] git-tree-sha1 = "5982a94fcba20f02f42ace44b9894ee2b140fe47" uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" version = "0.15.1+0" [[libfdk_aac_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "daacc84a041563f965be61859a36e17c4e4fcd55" uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" version = "2.0.2+0" [[libpng_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] git-tree-sha1 = "94d180a6d2b5e55e447e2d27a29ed04fe79eb30c" uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" version = "1.6.38+0" [[libvorbis_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"] git-tree-sha1 = "c45f4e40e7aafe9d086379e5578947ec8b95a8fb" uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" version = "1.3.7+0" [[nghttp2_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" [[p7zip_jll]] deps = ["Artifacts", "Libdl"] uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" [[x264_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "4fea590b89e6ec504593146bf8b988b2c00922b2" uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" version = "2021.5.5+0" [[x265_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "ee567a171cce03570d77ad3a43e90218e38937a9" uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" version = "3.5.0+0" [[xkbcommon_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Wayland_jll", "Wayland_protocols_jll", "Xorg_libxcb_jll", "Xorg_xkeyboard_config_jll"] git-tree-sha1 = "ece2350174195bb31de1a63bea3a41ae1aa593b6" uuid = "d8fb68d0-12a3-5cfd-a85a-d49703b185fd" version = "0.9.1+5" """ # ╔═╡ Cell order: # ╟─7ddc0e30-f887-11ea-12ed-7d1f3253311b # ╠═134e7518-f88b-11ea-0879-f538452667dc # ╠═5f4cb9ce-f891-11ea-07d1-5d0a145df6a7 # ╠═660d9a44-f891-11ea-2a4b-1b1473cad7d5 # ╟─82013e66-f891-11ea-1a36-adc877cb87d1 # ╟─9ed4562c-f889-11ea-3d64-3d53fe1d2d1a # ╟─0efd250c-f88b-11ea-152c-9dc953b8b71b # ╟─59a61fd4-f88b-11ea-1ce7-ad48f03dec44 # ╠═805b369e-f888-11ea-2a26-6f8b5cf3d777 # ╠═af9cf63c-f88a-11ea-0ba6-2f0bd779228d # ╠═b325ac1a-f88a-11ea-3f15-6b5e304378c9 # ╟─6be6158c-f88b-11ea-2a97-b18f658aa2ae # ╟─ab9f196c-f88b-11ea-09cd-e33e6de80df6 # ╟─8fc1838a-f88e-11ea-29a1-c9272a71c795 # ╟─0bfae788-f890-11ea-1e86-2d3f693e04e2 # ╠═c683a2da-f835-11ea-227f-252431521e42 # ╠═97d094dc-f84b-11ea-3fba-0bd0bf7a681c # ╠═baa0bf74-f836-11ea-27a8-5738d886e116 # ╟─dff61d0a-f890-11ea-27cf-7dd5c366390d # ╠═c1797ad6-f890-11ea-2291-39daa04bcb65 # ╟─99aeba2c-f837-11ea-0140-3317ada43500 # ╠═f995419a-f837-11ea-2835-b7f7e71a1451 # ╠═f0e9b84c-f838-11ea-3ff8-332593b8a3c1 # ╟─02d4aa16-f892-11ea-03df-eb60009bf0ac # ╟─4d291c54-f893-11ea-0b49-f702b31dad61 # ╟─d985c9c4-924e-458d-bc2f-ffd8c72e60b8 # ╠═ae1d5aa1-c504-49e5-bc91-e66faf858c4d # ╠═dd477960-f835-11ea-2ee4-8d58e3b0b398 # ╟─b7676ae4-f893-11ea-3770-45363031dd69 # ╠═c7a39bda-f893-11ea-31ec-4d57afe152b7 # ╠═d01d7a9c-f893-11ea-3e1f-ddc1283ba20c # ╠═d43b9a0c-f893-11ea-1184-e175e50aec8b # ╠═d87a2ed8-f893-11ea-1473-2fc7a857eef5 # ╟─bca45ac4-f89a-11ea-0417-7f70f0aa5daa # ╠═fb5819ce-f893-11ea-1915-657b1c6d3780 # ╠═ab2de8ea-1b9b-4517-b153-e183a90d1df1 # ╟─b40b64b2-f894-11ea-3cdd-0b5749dc4c23 # ╠═9d2b1c38-f894-11ea-3f1b-257f8a9870c9 # ╠═c6403338-f894-11ea-184f-8f31a62e177f # ╟─e0af64ec-f84f-11ea-20bf-db2bdcb8929d # ╠═c3edac73-575e-4a79-acbb-f024a5f1f5f8 # ╠═9b52c335-315b-4345-b033-d924a48e0f43 # ╟─147d6a80-f894-11ea-2346-1bdf75ab318c # ╟─bb05c9e6-f83e-11ea-1a36-e55c40035940 # ╠═89f1e7bc-5f82-4562-9d8e-baab8f651ee0 # ╠═03a903fb-d2fe-48ee-83f2-db804884a344 # ╟─3a663cda-f895-11ea-1c9c-d32474ff019d # ╟─43c879fc-f898-11ea-31e2-dfe1796221e5 # ╟─00000000-0000-0000-0000-000000000001 # ╟─00000000-0000-0000-0000-000000000002