From 60d067288842b38a2a485e42e874f1551cba248c Mon Sep 17 00:00:00 2001 From: Denisa Roberts Date: Fri, 17 Jul 2020 13:01:42 -0400 Subject: [PATCH 01/46] Add qr backward for wide matrices with m < n (#18197) --- src/operator/numpy/linalg/np_qr-inl.h | 185 ++++++++++++++++++++----- tests/python/unittest/test_numpy_op.py | 147 ++++++++++++++------ 2 files changed, 261 insertions(+), 71 deletions(-) diff --git a/src/operator/numpy/linalg/np_qr-inl.h b/src/operator/numpy/linalg/np_qr-inl.h index 0f332e4a661a..c2045205038f 100644 --- a/src/operator/numpy/linalg/np_qr-inl.h +++ b/src/operator/numpy/linalg/np_qr-inl.h @@ -483,19 +483,53 @@ struct assign_helper { } }; +// backprop helper to get y, v +struct QrBackHelper_G1 { + template + MSHADOW_XINLINE static void Map(const int k, const int m, const int n, const DType *in_data, + const int ldin, DType *out_data, const int ldout) { + const int offin(k * m * ldin); + const int offout(k * m * ldout); + for (index_t i = 0; i < m; ++i) { + for (index_t j = 0; j < n - m; ++j) { + out_data[offout + i * ldout + j] = in_data[offin + m + i * ldin + j]; + } + } + } +}; + +// backprop helper to get da from dx, dy +struct QrBackHelper_G2 { + template + MSHADOW_XINLINE static void Map(const int k, const int m, const int n, const DType *in_data_x, + const int ldinx, const DType *in_data_y, const int ldiny, + DType *out_data, const int ldout) { + const int offiny(k * m * ldiny); + const int offinx(k * m * ldinx); + const int offout(k * m * ldout); + for (index_t i = 0; i < m; ++i) { + for (index_t j = 0; j < n - m; ++j) { + out_data[offout + m + i * ldout + j] = in_data_y[offiny + i * ldiny + j]; + } + for (index_t j = 0; j < m; ++j) { + out_data[offout + i * ldout + j] = in_data_x[offinx + i * ldinx + j]; + } + } + } +}; + +// Reference https://journals.aps.org/prx/pdf/10.1103/PhysRevX.9.031041 struct qr_backward { template static void op(const Tensor& dA, const Tensor& dQ, const Tensor& dR, - const Tensor& A, const Tensor& Q, const Tensor& R, const Tensor& M, const OpContext& ctx, const nnvm::NodeAttrs& attrs) { - // Implements case m >= n; da = [dq + q@copyltu(M))]@r**(-T) + // Implements da = [dq + q@copyltu(M))]@r**(-T) // Where M = r@(dr**T) - (dq**T)@q - // Reference: https://arxiv.org/abs/1710.08717 Stream *s = ctx.get_stream(); if (dQ.dptr_ != dA.dptr_) Copy(dA, dQ, s); // M = R@dR_T @@ -514,15 +548,30 @@ struct qr_backward { template size_t QrBackwardWorkspaceSize(const TBlob& a, + const TBlob& q, const TBlob& r, const TBlob& grad_a) { + const mxnet::TShape& a_shape = a.shape_; + const int a_ndim = a_shape.ndim(); + const int n = a.size(a_ndim - 1); + const int m = a.size(a_ndim - 2); + if (0U == a.Size()) { return 0U; } MSHADOW_SGL_DBL_TYPE_SWITCH(grad_a.type_flag_, DType, { size_t work_space_size = 0; - // for grad a and M work_space_size += a.Size(); - work_space_size += r.Size(); + if (m >= n) { + work_space_size += r.Size(); + } else { + const mxnet::TShape& q_shape = q.shape_; + mxnet::TShape v_shape(q_shape); + v_shape[a_ndim - 1] = n - m; + // allocate space for: m, u, dq_prime, du, dx (shaped like Q) + work_space_size += 5 * q.Size(); + // allocate space for: y, dv (shaped like V, the partition of R) + work_space_size += 2 * v_shape.Size(); + } return work_space_size * sizeof(DType); }); LOG(FATAL) << "InternalError: cannot reach here"; @@ -542,8 +591,10 @@ void QrBackwardImpl(const TBlob& grad_a, const nnvm::NodeAttrs& attrs) { Stream *s = ctx.get_stream(); const mxnet::TShape& a_shape = a.shape_; + const mxnet::TShape& q_shape = q.shape_; const mxnet::TShape& r_shape = r.shape_; const int a_ndim = a_shape.ndim(); + const int m = a.size(a_ndim - 2); const int n = a.size(a_ndim - 1); if (kNullOp == req[0]) { return; } @@ -551,27 +602,105 @@ void QrBackwardImpl(const TBlob& grad_a, if (0U == a_shape.Size()) { return; } MSHADOW_SGL_DBL_TYPE_SWITCH(grad_a.type_flag_, DType, { - // case m >= n; Q of same shape with A and R is (n, n) - DType *m_ptr = reinterpret_cast(workspace.dptr_); - DType *grad_a_ptr = m_ptr + r_shape.Size(); - TBlob temp_m(m_ptr, r_shape, xpu::kDevMask); + // common for all shapes (m, n) + DType *grad_a_ptr = reinterpret_cast(workspace.dptr_); TBlob grad_a_data(grad_a_ptr, a_shape, xpu::kDevMask); - // dR_T - mxnet_op::Kernel::Launch( - s, r_shape.Size(), grad_r.dptr(), m_ptr, n, n, n * n); - - qr_backward::op(grad_a_data.FlatToKD(s), - grad_q.FlatToKD(s), - grad_r.FlatToKD(s), - a.FlatToKD(s), - q.FlatToKD(s), - r.FlatToKD(s), - temp_m.FlatToKD(s), - ctx, attrs); - + if (m >= n) { + // Q of same shape with A (m, n) and R is (n, n) + DType *m_ptr = grad_a_ptr + a_shape.Size(); + TBlob temp_m(m_ptr, r_shape, xpu::kDevMask); + // dR_T + mxnet_op::Kernel::Launch( + s, r_shape.Size(), grad_r.dptr(), m_ptr, n, n, n * n); + qr_backward::op(grad_a_data.FlatToKD(s), + grad_q.FlatToKD(s), + grad_r.FlatToKD(s), + q.FlatToKD(s), + r.FlatToKD(s), + temp_m.FlatToKD(s), + ctx, attrs); + } else { + // R is same shape with A (m, n) and Q is (m, m) + // Partition A = (X | Y); R = (U | V) + // X and U are (m, m); Y and V are (m, n - m) + mxnet::TShape v_shape(q_shape); + v_shape[a_ndim - 1] = n - m; + + DType *m_ptr = grad_a_ptr + a_shape.Size(); + DType *u_ptr = m_ptr + q_shape.Size(); + DType *dq_prime_ptr = u_ptr + q_shape.Size(); + DType *dv_ptr = dq_prime_ptr + q_shape.Size(); + DType *y_ptr = dv_ptr + v_shape.Size(); + DType *du_ptr = y_ptr + v_shape.Size(); + DType *dx_ptr = du_ptr + q_shape.Size(); + + TBlob temp_m(m_ptr, q_shape, xpu::kDevMask); + TBlob u_data(u_ptr, q_shape, xpu::kDevMask); + TBlob dq_prime_data(dq_prime_ptr, q_shape, xpu::kDevMask); + TBlob dv_data(dv_ptr, v_shape, xpu::kDevMask); + TBlob y_data(y_ptr, v_shape, xpu::kDevMask); + TBlob du_data(du_ptr, q_shape, xpu::kDevMask); + TBlob dx_data(dx_ptr, q_shape, xpu::kDevMask); + + Tensor R = r.FlatToKD(s); + Tensor dR = grad_r.FlatToKD(s); + Tensor Q = q.FlatToKD(s); + Tensor dQ = grad_q.FlatToKD(s); + Tensor dQ_prime = dq_prime_data.FlatToKD(s); + Tensor A = a.FlatToKD(s); + Tensor dA = grad_a_data.FlatToKD(s); + Tensor U = u_data.FlatToKD(s); + Tensor dU = du_data.FlatToKD(s); + Tensor dV = dv_data.FlatToKD(s); + Tensor Y = y_data.FlatToKD(s); + Tensor dX = dx_data.FlatToKD(s); + Tensor M = temp_m.FlatToKD(s); + + // U + for (index_t i = 0; i < R.size(0); ++i) { + const Tensor& Ri = R[i]; + const Tensor& Ui = U[i]; + Tensor Um(Ri.dptr_, Shape2(m, m), Ri.stride_, s); + Copy(Ui, Um, s); + } + // dU + for (index_t i = 0; i < dR.size(0); ++i) { + const Tensor& dRi = dR[i]; + const Tensor& dUi = dU[i]; + Tensor dUm(dRi.dptr_, Shape2(m, m), dRi.stride_, s); + Copy(dUi, dUm, s); + } + // Y + mxnet_op::Kernel::Launch( + s, A.size(0), m, n, A.dptr_, A.stride_, Y.dptr_, Y.stride_); + // dV + mxnet_op::Kernel::Launch( + s, dR.size(0), m, n, dR.dptr_, dR.stride_, dV.dptr_, dV.stride_); + // store dU_T in M + mxnet_op::Kernel::Launch( + s, q_shape.Size(), dU.dptr_, m_ptr, m, m, m * m); + // dq_prime = dQ + Copy(dQ_prime, dQ, s); + // dq_prime = dQ+Y@dV.T + gemm::op(Y, dV, dQ_prime, DType(1.0), DType(1.0), false, true, s); + // dX = op call + qr_backward::op(dX, + dQ_prime, + dU, + Q, + U, + M, + ctx, attrs); + // dY = Q@dV; reuse Y memory for dY + gemm::op(Q, dV, Y, DType(1.0), DType(0.0), false, false, s); + // copy dX and dY to dA + mxnet_op::Kernel::Launch( + s, dA.size(0), m, n, dX.dptr_, dX.stride_, Y.dptr_, Y.stride_, dA.dptr_, dA.stride_); + } + // common for all shapes MXNET_ASSIGN_REQ_SWITCH(req[0], req_type, { - mxnet_op::Kernel, xpu>::Launch( - s, a_shape.Size(), grad_a_data.dptr(), grad_a.dptr()); + mxnet_op::Kernel, xpu>::Launch( + s, a_shape.Size(), grad_a_data.dptr(), grad_a.dptr()); }); }); } @@ -594,14 +723,8 @@ void NumpyLaQrBackward(const nnvm::NodeAttrs& attrs, const TBlob& q = inputs[3]; const TBlob& r = inputs[4]; const TBlob& grad_a = outputs[0]; - const int a_ndim = a.shape_.ndim(); - const int n = a.size(a_ndim - 1); - const int m = a.size(a_ndim - 2); - - CHECK_LE(n, m) - << "QrBackward not implemented when ncols > nrows"; - size_t workspace_size = QrBackwardWorkspaceSize(a, r, grad_a); + size_t workspace_size = QrBackwardWorkspaceSize(a, q, r, grad_a); Tensor workspace = ctx.requested[0] .get_space_typed(Shape1(workspace_size), ctx.get_stream()); QrBackwardImpl(grad_a, grad_q, grad_r, a, q, r, req, workspace, ctx, attrs); diff --git a/tests/python/unittest/test_numpy_op.py b/tests/python/unittest/test_numpy_op.py index 88ad77fc978d..7197949faf31 100644 --- a/tests/python/unittest/test_numpy_op.py +++ b/tests/python/unittest/test_numpy_op.py @@ -5761,42 +5761,102 @@ def __init__(self): def hybrid_forward(self, F, data): return F.np.linalg.qr(data) - def get_expected_grad(a, q, r): + def get_expected_grad(a, q, r, dq, dr): + # all shapes (..., m, n) + # allow feeding different dq and dr values if 0 in r.shape: return r - def copyltu(M): - # shape of M is [batch, m, m] - eye = _np.array([_np.eye(M.shape[-1]) for i in range(M.shape[0])]) - lower = _np.tril(M) - eye * M - lower_mask = _np.tril(_np.ones_like(M)) - ret = lower_mask * M + lower.swapaxes(-1, -2) - return ret - shape_r = r.shape - shape_q = q.shape - shape_a = a.shape - r = r.reshape(-1, shape_r[-2], shape_r[-1]) - q = q.reshape(-1, shape_q[-2], shape_q[-1]) - dq = _np.ones_like(q) - dr = _np.ones_like(r) - dq_t = dq.swapaxes(-1, -2) - dr_t = dr.swapaxes(-1, -2) - r_inv = _np.linalg.inv(r) - r_inv_t = r_inv.swapaxes(-1, -2) - r_t = r.swapaxes(-1, -2) - # Get M - M = _np.matmul(r, dr_t) - _np.matmul(dq_t, q) - da = _np.matmul(dq + _np.matmul(q, copyltu(M)), r_inv_t) - return da.reshape(a.shape) + def _copyltu(M): + eye = _np.array([_np.eye(M.shape[-1]) for i in range(M.shape[0])]) + lower = _np.tril(M) - eye * M + lower_mask = _np.tril(_np.ones_like(M)) + ret = lower_mask * M + lower.swapaxes(-1, -2) + return ret + def _case_m_ge_n(a, q, r, dq, dr): + dq_t = dq.swapaxes(-1, -2) + dr_t = dr.swapaxes(-1, -2) + r_inv = _np.linalg.inv(r) + r_inv_t = r_inv.swapaxes(-1, -2) + r_t = r.swapaxes(-1, -2) + # Get M + M = _np.matmul(r, dr_t) - _np.matmul(dq_t, q) + da = _np.matmul(dq + _np.matmul(q, _copyltu(M)), r_inv_t) + return da + m, n = a.shape[-2], a.shape[-1] + x = a[..., :, :m] + x_shape = x.shape + y = a[..., :, m:] + y_shape = y.shape + u = r[..., :, :m] + v = r[..., :, m:] + dv = dr[..., :, m:] + du = dr[..., :, :m] + q = q.reshape(-1, q.shape[-2], q.shape[-1]) + u = u.reshape(-1, u.shape[-2], u.shape[-1]) + dq = dq.reshape(-1, q.shape[-2], q.shape[-1]) + du = du.reshape(-1, du.shape[-2], du.shape[-1]) + if m >= n: + dx = _case_m_ge_n(x, q, u, dq, du).reshape(x_shape) + return dx + else: + dv = dv.reshape(-1, dv.shape[-2], dv.shape[-1]) + y = y.reshape(-1, y.shape[-2], y.shape[-1]) + dy = _np.matmul(q, dv).reshape(y_shape) + dq_prime = dq + _np.matmul(y, dv.swapaxes(-1, -2)) + dx = _case_m_ge_n(x, q, u, dq_prime, du).reshape(x_shape) + da = _np.concatenate([dx, dy], axis=-1) + return da + + def _analytical_jacobian(x, dy, Q, R, Q_, R_, k): + x_size = _np.prod(x.shape) + dy_size = _np.prod(dy.shape) + # jacobian has data_np size number of rows and dQ or dR size number of columns + jacobian = _np.zeros((x_size, dy_size)) + # dQ and dR have all elements equal to zero to begin with + dy_data = _np.zeros(dy.shape) + dy_data_flat = dy_data.ravel() + for col in range(dy_size): + # we only feed dQ or dR with 1 element changed to 1 at a time + dy_data_flat[col] = 1 + ret_ = dy_data_flat.reshape(dy.shape) + if k == 0: + # k is 0 when dy is dQ + jacobian[:, col] = get_expected_grad(x, dy, R, ret_, R_).ravel() + else: + # k is 1 when dy is dR + jacobian[:, col] = get_expected_grad(x, Q, dy, Q_, ret_).ravel() + dy_data_flat[col] = 0 + return jacobian + + def _numerical_jacobian(x, y, delta, k, dtype): + # compute central differences + x_size = _np.prod(x.shape) + y_size = _np.prod(y.shape) + scale = _np.asarray(2 * delta)[()] + # jacobian has data_np size number of rows and Q or R size number of columns + jacobian_num = _np.zeros((x_size, y_size)) + for row in range(x_size): + x_pos = x.copy() + x_neg = x.copy() + # add delta to one element of data_np at a time + x_pos.ravel().view(dtype)[row] += delta # one element in x is added delta + # get qr decomposition of new input with one changed element + ret_pos = np.linalg.qr(np.array(x_pos))[k] + # subtract delta from input data_np one element at a time + x_neg.ravel().view(dtype)[row] -= delta + # get qr decomposition of new input with one changed element + ret_neg = np.linalg.qr(np.array(x_neg))[k] + # get central differences + diff = (ret_pos - ret_neg) / scale + jacobian_num[row, :] = diff.asnumpy().ravel().view(dtype) + return jacobian_num def well_conditioned_rectang_matrix_2D(shape, max_cond=4): m, n = shape[-2], shape[-1] while 1: - M1 = _np.random.uniform(-10, 10, (m, n)) - Q1, R1 = _np.linalg.qr(M1) - s = _np.ones(n) - D = _np.diag(s) - M2 =_np.random.uniform(-10, 10, (n, n)) - Q2, R2 = _np.linalg.qr(M2) + Q1, R1 = _np.linalg.qr(_np.random.uniform(-10, 10, (m, m))) + D = _np.eye(m, n) + Q2, R2 = _np.linalg.qr(_np.random.uniform(-10, 10, (n, n))) a = _np.matmul(_np.matmul(Q1, D), _np.swapaxes(Q2, -1, -2)) if (_np.linalg.cond(a, 2) < max_cond): return a @@ -5836,7 +5896,6 @@ def check_qr(q, r, a_np): (3, 3), (5, 5), (8, 8), - (4, 5), (4, 6), (5, 4), (6, 5), @@ -5850,19 +5909,16 @@ def check_qr(q, r, a_np): (4, 2, 2, 1), (2, 3, 4, 3) ] - dtypes = ['float32', 'float64'] + dtypes = ['float64', 'float32'] for hybridize, shape, dtype in itertools.product([False, True], shapes, dtypes): rtol = atol = 0.01 test_qr = TestQR() if hybridize: test_qr.hybridize() - if 0 in shape: data_np = _np.ones(shape) - elif shape[-2] >= shape[-1]: - data_np = well_conditioned_rectang_matrix_nD(shape, max_cond=4) else: - data_np = _np.random.uniform(-10.0, 10.0, shape) + data_np = well_conditioned_rectang_matrix_nD(shape, max_cond=4) data_np = _np.array(data_np, dtype=dtype) data = np.array(data_np, dtype=dtype) @@ -5872,13 +5928,24 @@ def check_qr(q, r, a_np): Q, R = ret[0], ret[1] check_qr(Q, R, data_np) - # Only shapes m >= n have gradient - if 0 not in R.shape and shape[-2] >= shape[-1]: + if 0 not in R.shape: assert data.grad.shape == data_np.shape - backward_expected = get_expected_grad(data_np, Q.asnumpy(), R.asnumpy()) + backward_expected = get_expected_grad(data_np, Q.asnumpy(), R.asnumpy(), + _np.ones(Q.shape), _np.ones(R.shape)) mx.autograd.backward(ret) assert_almost_equal(data.grad.asnumpy(), backward_expected, rtol=rtol, atol=atol) - + # for a few cases, check that the analytical jacobian is equal to + # numerical jacobian computed via central differences + # restrict this check to float64 for numerical precision + if dtype == 'float64' and len(shape) == 2: + epsilon = _np.finfo(dtype).eps + delta = 0.1 * epsilon**(1.0 / 3.0) # Optimal delta for central differences + for k, b in enumerate(ret): + qr_num = _numerical_jacobian(data_np, b.asnumpy(), delta, k, dtype) + qr_a = _analytical_jacobian(x=data_np, dy=b.asnumpy(), Q=Q.asnumpy(), + R=R.asnumpy(), Q_=_np.zeros(Q.shape), + R_=_np.zeros(R.shape), k=k) + assert_almost_equal(qr_num, qr_a, rtol=rtol, atol=atol) # check imperative once more; mode='reduced' is default # behavior and optional parameter in original numpy ret = np.linalg.qr(data, mode='reduced') From 3e0df1b98faa0e83f06118b6d2f5957a28d9f2c4 Mon Sep 17 00:00:00 2001 From: Haibin Lin Date: Fri, 17 Jul 2020 10:27:43 -0700 Subject: [PATCH 02/46] Disable sparse op test (#18741) Disabling this test for now to unblock other PRs, while I'm looking into it. #18740 --- tests/python/unittest/test_sparse_operator.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/python/unittest/test_sparse_operator.py b/tests/python/unittest/test_sparse_operator.py index 26f6829e61a7..dc072013ea50 100644 --- a/tests/python/unittest/test_sparse_operator.py +++ b/tests/python/unittest/test_sparse_operator.py @@ -155,6 +155,7 @@ def all_zero(var): return 0 @with_seed() +@pytest.mark.skip(reason="https://github.com/apache/incubator-mxnet/issues/18740") def test_elemwise_binary_ops(): # skip testing on GPU because only CPU ops are implemented if default_context().device_type is 'gpu': From cec86add654fccda2f2112d4487738854e7663ca Mon Sep 17 00:00:00 2001 From: Leonard Lausen Date: Fri, 17 Jul 2020 17:28:34 +0000 Subject: [PATCH 03/46] Move gluon.metric api docs (#18733) --- docs/python_docs/python/api/gluon/index.rst | 8 ++++++- docs/python_docs/python/api/index.rst | 6 ----- docs/python_docs/python/api/metric/index.rst | 23 -------------------- 3 files changed, 7 insertions(+), 30 deletions(-) delete mode 100644 docs/python_docs/python/api/metric/index.rst diff --git a/docs/python_docs/python/api/gluon/index.rst b/docs/python_docs/python/api/gluon/index.rst index abb9072bfbd9..c74500efe61e 100644 --- a/docs/python_docs/python/api/gluon/index.rst +++ b/docs/python_docs/python/api/gluon/index.rst @@ -96,6 +96,12 @@ Training Loss functions for training neural networks. + .. card:: + :title: mxnet.metric + :link: metric/index.html + + Metrics to evaluate the performance of a learned model. + .. card:: :title: gluon.Parameter :link: parameter.html @@ -155,4 +161,4 @@ Utilities parameter parameter_dict trainer - */index \ No newline at end of file + */index diff --git a/docs/python_docs/python/api/index.rst b/docs/python_docs/python/api/index.rst index 47363cf07c5c..7340eab84a78 100644 --- a/docs/python_docs/python/api/index.rst +++ b/docs/python_docs/python/api/index.rst @@ -73,12 +73,6 @@ Gluon related modules Scheduling the learning rate. - .. card:: - :title: mxnet.metric - :link: metric/index.html - - Metrics to evaluate the performance of a learned model. - .. card:: :title: mxnet.kvstore :link: kvstore/index.html diff --git a/docs/python_docs/python/api/metric/index.rst b/docs/python_docs/python/api/metric/index.rst deleted file mode 100644 index 4b24d1e703db..000000000000 --- a/docs/python_docs/python/api/metric/index.rst +++ /dev/null @@ -1,23 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. - -mxnet.metric -============ - -.. automodule:: mxnet.metric - :members: - :autosummary: From 444a7ee92045333166f40dfcdff11e06566fcd78 Mon Sep 17 00:00:00 2001 From: Leonard Lausen Date: Sat, 18 Jul 2020 02:34:40 +0000 Subject: [PATCH 04/46] Revert "Add qr backward for wide matrices with m < n (#18197)" (#18750) This reverts commit 60d067288842b38a2a485e42e874f1551cba248c. --- src/operator/numpy/linalg/np_qr-inl.h | 185 +++++-------------------- tests/python/unittest/test_numpy_op.py | 147 ++++++-------------- 2 files changed, 71 insertions(+), 261 deletions(-) diff --git a/src/operator/numpy/linalg/np_qr-inl.h b/src/operator/numpy/linalg/np_qr-inl.h index c2045205038f..0f332e4a661a 100644 --- a/src/operator/numpy/linalg/np_qr-inl.h +++ b/src/operator/numpy/linalg/np_qr-inl.h @@ -483,53 +483,19 @@ struct assign_helper { } }; -// backprop helper to get y, v -struct QrBackHelper_G1 { - template - MSHADOW_XINLINE static void Map(const int k, const int m, const int n, const DType *in_data, - const int ldin, DType *out_data, const int ldout) { - const int offin(k * m * ldin); - const int offout(k * m * ldout); - for (index_t i = 0; i < m; ++i) { - for (index_t j = 0; j < n - m; ++j) { - out_data[offout + i * ldout + j] = in_data[offin + m + i * ldin + j]; - } - } - } -}; - -// backprop helper to get da from dx, dy -struct QrBackHelper_G2 { - template - MSHADOW_XINLINE static void Map(const int k, const int m, const int n, const DType *in_data_x, - const int ldinx, const DType *in_data_y, const int ldiny, - DType *out_data, const int ldout) { - const int offiny(k * m * ldiny); - const int offinx(k * m * ldinx); - const int offout(k * m * ldout); - for (index_t i = 0; i < m; ++i) { - for (index_t j = 0; j < n - m; ++j) { - out_data[offout + m + i * ldout + j] = in_data_y[offiny + i * ldiny + j]; - } - for (index_t j = 0; j < m; ++j) { - out_data[offout + i * ldout + j] = in_data_x[offinx + i * ldinx + j]; - } - } - } -}; - -// Reference https://journals.aps.org/prx/pdf/10.1103/PhysRevX.9.031041 struct qr_backward { template static void op(const Tensor& dA, const Tensor& dQ, const Tensor& dR, + const Tensor& A, const Tensor& Q, const Tensor& R, const Tensor& M, const OpContext& ctx, const nnvm::NodeAttrs& attrs) { - // Implements da = [dq + q@copyltu(M))]@r**(-T) + // Implements case m >= n; da = [dq + q@copyltu(M))]@r**(-T) // Where M = r@(dr**T) - (dq**T)@q + // Reference: https://arxiv.org/abs/1710.08717 Stream *s = ctx.get_stream(); if (dQ.dptr_ != dA.dptr_) Copy(dA, dQ, s); // M = R@dR_T @@ -548,30 +514,15 @@ struct qr_backward { template size_t QrBackwardWorkspaceSize(const TBlob& a, - const TBlob& q, const TBlob& r, const TBlob& grad_a) { - const mxnet::TShape& a_shape = a.shape_; - const int a_ndim = a_shape.ndim(); - const int n = a.size(a_ndim - 1); - const int m = a.size(a_ndim - 2); - if (0U == a.Size()) { return 0U; } MSHADOW_SGL_DBL_TYPE_SWITCH(grad_a.type_flag_, DType, { size_t work_space_size = 0; + // for grad a and M work_space_size += a.Size(); - if (m >= n) { - work_space_size += r.Size(); - } else { - const mxnet::TShape& q_shape = q.shape_; - mxnet::TShape v_shape(q_shape); - v_shape[a_ndim - 1] = n - m; - // allocate space for: m, u, dq_prime, du, dx (shaped like Q) - work_space_size += 5 * q.Size(); - // allocate space for: y, dv (shaped like V, the partition of R) - work_space_size += 2 * v_shape.Size(); - } + work_space_size += r.Size(); return work_space_size * sizeof(DType); }); LOG(FATAL) << "InternalError: cannot reach here"; @@ -591,10 +542,8 @@ void QrBackwardImpl(const TBlob& grad_a, const nnvm::NodeAttrs& attrs) { Stream *s = ctx.get_stream(); const mxnet::TShape& a_shape = a.shape_; - const mxnet::TShape& q_shape = q.shape_; const mxnet::TShape& r_shape = r.shape_; const int a_ndim = a_shape.ndim(); - const int m = a.size(a_ndim - 2); const int n = a.size(a_ndim - 1); if (kNullOp == req[0]) { return; } @@ -602,105 +551,27 @@ void QrBackwardImpl(const TBlob& grad_a, if (0U == a_shape.Size()) { return; } MSHADOW_SGL_DBL_TYPE_SWITCH(grad_a.type_flag_, DType, { - // common for all shapes (m, n) - DType *grad_a_ptr = reinterpret_cast(workspace.dptr_); + // case m >= n; Q of same shape with A and R is (n, n) + DType *m_ptr = reinterpret_cast(workspace.dptr_); + DType *grad_a_ptr = m_ptr + r_shape.Size(); + TBlob temp_m(m_ptr, r_shape, xpu::kDevMask); TBlob grad_a_data(grad_a_ptr, a_shape, xpu::kDevMask); - if (m >= n) { - // Q of same shape with A (m, n) and R is (n, n) - DType *m_ptr = grad_a_ptr + a_shape.Size(); - TBlob temp_m(m_ptr, r_shape, xpu::kDevMask); - // dR_T - mxnet_op::Kernel::Launch( - s, r_shape.Size(), grad_r.dptr(), m_ptr, n, n, n * n); - qr_backward::op(grad_a_data.FlatToKD(s), - grad_q.FlatToKD(s), - grad_r.FlatToKD(s), - q.FlatToKD(s), - r.FlatToKD(s), - temp_m.FlatToKD(s), - ctx, attrs); - } else { - // R is same shape with A (m, n) and Q is (m, m) - // Partition A = (X | Y); R = (U | V) - // X and U are (m, m); Y and V are (m, n - m) - mxnet::TShape v_shape(q_shape); - v_shape[a_ndim - 1] = n - m; - - DType *m_ptr = grad_a_ptr + a_shape.Size(); - DType *u_ptr = m_ptr + q_shape.Size(); - DType *dq_prime_ptr = u_ptr + q_shape.Size(); - DType *dv_ptr = dq_prime_ptr + q_shape.Size(); - DType *y_ptr = dv_ptr + v_shape.Size(); - DType *du_ptr = y_ptr + v_shape.Size(); - DType *dx_ptr = du_ptr + q_shape.Size(); - - TBlob temp_m(m_ptr, q_shape, xpu::kDevMask); - TBlob u_data(u_ptr, q_shape, xpu::kDevMask); - TBlob dq_prime_data(dq_prime_ptr, q_shape, xpu::kDevMask); - TBlob dv_data(dv_ptr, v_shape, xpu::kDevMask); - TBlob y_data(y_ptr, v_shape, xpu::kDevMask); - TBlob du_data(du_ptr, q_shape, xpu::kDevMask); - TBlob dx_data(dx_ptr, q_shape, xpu::kDevMask); - - Tensor R = r.FlatToKD(s); - Tensor dR = grad_r.FlatToKD(s); - Tensor Q = q.FlatToKD(s); - Tensor dQ = grad_q.FlatToKD(s); - Tensor dQ_prime = dq_prime_data.FlatToKD(s); - Tensor A = a.FlatToKD(s); - Tensor dA = grad_a_data.FlatToKD(s); - Tensor U = u_data.FlatToKD(s); - Tensor dU = du_data.FlatToKD(s); - Tensor dV = dv_data.FlatToKD(s); - Tensor Y = y_data.FlatToKD(s); - Tensor dX = dx_data.FlatToKD(s); - Tensor M = temp_m.FlatToKD(s); - - // U - for (index_t i = 0; i < R.size(0); ++i) { - const Tensor& Ri = R[i]; - const Tensor& Ui = U[i]; - Tensor Um(Ri.dptr_, Shape2(m, m), Ri.stride_, s); - Copy(Ui, Um, s); - } - // dU - for (index_t i = 0; i < dR.size(0); ++i) { - const Tensor& dRi = dR[i]; - const Tensor& dUi = dU[i]; - Tensor dUm(dRi.dptr_, Shape2(m, m), dRi.stride_, s); - Copy(dUi, dUm, s); - } - // Y - mxnet_op::Kernel::Launch( - s, A.size(0), m, n, A.dptr_, A.stride_, Y.dptr_, Y.stride_); - // dV - mxnet_op::Kernel::Launch( - s, dR.size(0), m, n, dR.dptr_, dR.stride_, dV.dptr_, dV.stride_); - // store dU_T in M - mxnet_op::Kernel::Launch( - s, q_shape.Size(), dU.dptr_, m_ptr, m, m, m * m); - // dq_prime = dQ - Copy(dQ_prime, dQ, s); - // dq_prime = dQ+Y@dV.T - gemm::op(Y, dV, dQ_prime, DType(1.0), DType(1.0), false, true, s); - // dX = op call - qr_backward::op(dX, - dQ_prime, - dU, - Q, - U, - M, - ctx, attrs); - // dY = Q@dV; reuse Y memory for dY - gemm::op(Q, dV, Y, DType(1.0), DType(0.0), false, false, s); - // copy dX and dY to dA - mxnet_op::Kernel::Launch( - s, dA.size(0), m, n, dX.dptr_, dX.stride_, Y.dptr_, Y.stride_, dA.dptr_, dA.stride_); - } - // common for all shapes + // dR_T + mxnet_op::Kernel::Launch( + s, r_shape.Size(), grad_r.dptr(), m_ptr, n, n, n * n); + + qr_backward::op(grad_a_data.FlatToKD(s), + grad_q.FlatToKD(s), + grad_r.FlatToKD(s), + a.FlatToKD(s), + q.FlatToKD(s), + r.FlatToKD(s), + temp_m.FlatToKD(s), + ctx, attrs); + MXNET_ASSIGN_REQ_SWITCH(req[0], req_type, { - mxnet_op::Kernel, xpu>::Launch( - s, a_shape.Size(), grad_a_data.dptr(), grad_a.dptr()); + mxnet_op::Kernel, xpu>::Launch( + s, a_shape.Size(), grad_a_data.dptr(), grad_a.dptr()); }); }); } @@ -723,8 +594,14 @@ void NumpyLaQrBackward(const nnvm::NodeAttrs& attrs, const TBlob& q = inputs[3]; const TBlob& r = inputs[4]; const TBlob& grad_a = outputs[0]; + const int a_ndim = a.shape_.ndim(); + const int n = a.size(a_ndim - 1); + const int m = a.size(a_ndim - 2); + + CHECK_LE(n, m) + << "QrBackward not implemented when ncols > nrows"; - size_t workspace_size = QrBackwardWorkspaceSize(a, q, r, grad_a); + size_t workspace_size = QrBackwardWorkspaceSize(a, r, grad_a); Tensor workspace = ctx.requested[0] .get_space_typed(Shape1(workspace_size), ctx.get_stream()); QrBackwardImpl(grad_a, grad_q, grad_r, a, q, r, req, workspace, ctx, attrs); diff --git a/tests/python/unittest/test_numpy_op.py b/tests/python/unittest/test_numpy_op.py index 7197949faf31..88ad77fc978d 100644 --- a/tests/python/unittest/test_numpy_op.py +++ b/tests/python/unittest/test_numpy_op.py @@ -5761,102 +5761,42 @@ def __init__(self): def hybrid_forward(self, F, data): return F.np.linalg.qr(data) - def get_expected_grad(a, q, r, dq, dr): - # all shapes (..., m, n) - # allow feeding different dq and dr values + def get_expected_grad(a, q, r): if 0 in r.shape: return r - def _copyltu(M): - eye = _np.array([_np.eye(M.shape[-1]) for i in range(M.shape[0])]) - lower = _np.tril(M) - eye * M - lower_mask = _np.tril(_np.ones_like(M)) - ret = lower_mask * M + lower.swapaxes(-1, -2) - return ret - def _case_m_ge_n(a, q, r, dq, dr): - dq_t = dq.swapaxes(-1, -2) - dr_t = dr.swapaxes(-1, -2) - r_inv = _np.linalg.inv(r) - r_inv_t = r_inv.swapaxes(-1, -2) - r_t = r.swapaxes(-1, -2) - # Get M - M = _np.matmul(r, dr_t) - _np.matmul(dq_t, q) - da = _np.matmul(dq + _np.matmul(q, _copyltu(M)), r_inv_t) - return da - m, n = a.shape[-2], a.shape[-1] - x = a[..., :, :m] - x_shape = x.shape - y = a[..., :, m:] - y_shape = y.shape - u = r[..., :, :m] - v = r[..., :, m:] - dv = dr[..., :, m:] - du = dr[..., :, :m] - q = q.reshape(-1, q.shape[-2], q.shape[-1]) - u = u.reshape(-1, u.shape[-2], u.shape[-1]) - dq = dq.reshape(-1, q.shape[-2], q.shape[-1]) - du = du.reshape(-1, du.shape[-2], du.shape[-1]) - if m >= n: - dx = _case_m_ge_n(x, q, u, dq, du).reshape(x_shape) - return dx - else: - dv = dv.reshape(-1, dv.shape[-2], dv.shape[-1]) - y = y.reshape(-1, y.shape[-2], y.shape[-1]) - dy = _np.matmul(q, dv).reshape(y_shape) - dq_prime = dq + _np.matmul(y, dv.swapaxes(-1, -2)) - dx = _case_m_ge_n(x, q, u, dq_prime, du).reshape(x_shape) - da = _np.concatenate([dx, dy], axis=-1) - return da - - def _analytical_jacobian(x, dy, Q, R, Q_, R_, k): - x_size = _np.prod(x.shape) - dy_size = _np.prod(dy.shape) - # jacobian has data_np size number of rows and dQ or dR size number of columns - jacobian = _np.zeros((x_size, dy_size)) - # dQ and dR have all elements equal to zero to begin with - dy_data = _np.zeros(dy.shape) - dy_data_flat = dy_data.ravel() - for col in range(dy_size): - # we only feed dQ or dR with 1 element changed to 1 at a time - dy_data_flat[col] = 1 - ret_ = dy_data_flat.reshape(dy.shape) - if k == 0: - # k is 0 when dy is dQ - jacobian[:, col] = get_expected_grad(x, dy, R, ret_, R_).ravel() - else: - # k is 1 when dy is dR - jacobian[:, col] = get_expected_grad(x, Q, dy, Q_, ret_).ravel() - dy_data_flat[col] = 0 - return jacobian - - def _numerical_jacobian(x, y, delta, k, dtype): - # compute central differences - x_size = _np.prod(x.shape) - y_size = _np.prod(y.shape) - scale = _np.asarray(2 * delta)[()] - # jacobian has data_np size number of rows and Q or R size number of columns - jacobian_num = _np.zeros((x_size, y_size)) - for row in range(x_size): - x_pos = x.copy() - x_neg = x.copy() - # add delta to one element of data_np at a time - x_pos.ravel().view(dtype)[row] += delta # one element in x is added delta - # get qr decomposition of new input with one changed element - ret_pos = np.linalg.qr(np.array(x_pos))[k] - # subtract delta from input data_np one element at a time - x_neg.ravel().view(dtype)[row] -= delta - # get qr decomposition of new input with one changed element - ret_neg = np.linalg.qr(np.array(x_neg))[k] - # get central differences - diff = (ret_pos - ret_neg) / scale - jacobian_num[row, :] = diff.asnumpy().ravel().view(dtype) - return jacobian_num + def copyltu(M): + # shape of M is [batch, m, m] + eye = _np.array([_np.eye(M.shape[-1]) for i in range(M.shape[0])]) + lower = _np.tril(M) - eye * M + lower_mask = _np.tril(_np.ones_like(M)) + ret = lower_mask * M + lower.swapaxes(-1, -2) + return ret + shape_r = r.shape + shape_q = q.shape + shape_a = a.shape + r = r.reshape(-1, shape_r[-2], shape_r[-1]) + q = q.reshape(-1, shape_q[-2], shape_q[-1]) + dq = _np.ones_like(q) + dr = _np.ones_like(r) + dq_t = dq.swapaxes(-1, -2) + dr_t = dr.swapaxes(-1, -2) + r_inv = _np.linalg.inv(r) + r_inv_t = r_inv.swapaxes(-1, -2) + r_t = r.swapaxes(-1, -2) + # Get M + M = _np.matmul(r, dr_t) - _np.matmul(dq_t, q) + da = _np.matmul(dq + _np.matmul(q, copyltu(M)), r_inv_t) + return da.reshape(a.shape) def well_conditioned_rectang_matrix_2D(shape, max_cond=4): m, n = shape[-2], shape[-1] while 1: - Q1, R1 = _np.linalg.qr(_np.random.uniform(-10, 10, (m, m))) - D = _np.eye(m, n) - Q2, R2 = _np.linalg.qr(_np.random.uniform(-10, 10, (n, n))) + M1 = _np.random.uniform(-10, 10, (m, n)) + Q1, R1 = _np.linalg.qr(M1) + s = _np.ones(n) + D = _np.diag(s) + M2 =_np.random.uniform(-10, 10, (n, n)) + Q2, R2 = _np.linalg.qr(M2) a = _np.matmul(_np.matmul(Q1, D), _np.swapaxes(Q2, -1, -2)) if (_np.linalg.cond(a, 2) < max_cond): return a @@ -5896,6 +5836,7 @@ def check_qr(q, r, a_np): (3, 3), (5, 5), (8, 8), + (4, 5), (4, 6), (5, 4), (6, 5), @@ -5909,16 +5850,19 @@ def check_qr(q, r, a_np): (4, 2, 2, 1), (2, 3, 4, 3) ] - dtypes = ['float64', 'float32'] + dtypes = ['float32', 'float64'] for hybridize, shape, dtype in itertools.product([False, True], shapes, dtypes): rtol = atol = 0.01 test_qr = TestQR() if hybridize: test_qr.hybridize() + if 0 in shape: data_np = _np.ones(shape) - else: + elif shape[-2] >= shape[-1]: data_np = well_conditioned_rectang_matrix_nD(shape, max_cond=4) + else: + data_np = _np.random.uniform(-10.0, 10.0, shape) data_np = _np.array(data_np, dtype=dtype) data = np.array(data_np, dtype=dtype) @@ -5928,24 +5872,13 @@ def check_qr(q, r, a_np): Q, R = ret[0], ret[1] check_qr(Q, R, data_np) - if 0 not in R.shape: + # Only shapes m >= n have gradient + if 0 not in R.shape and shape[-2] >= shape[-1]: assert data.grad.shape == data_np.shape - backward_expected = get_expected_grad(data_np, Q.asnumpy(), R.asnumpy(), - _np.ones(Q.shape), _np.ones(R.shape)) + backward_expected = get_expected_grad(data_np, Q.asnumpy(), R.asnumpy()) mx.autograd.backward(ret) assert_almost_equal(data.grad.asnumpy(), backward_expected, rtol=rtol, atol=atol) - # for a few cases, check that the analytical jacobian is equal to - # numerical jacobian computed via central differences - # restrict this check to float64 for numerical precision - if dtype == 'float64' and len(shape) == 2: - epsilon = _np.finfo(dtype).eps - delta = 0.1 * epsilon**(1.0 / 3.0) # Optimal delta for central differences - for k, b in enumerate(ret): - qr_num = _numerical_jacobian(data_np, b.asnumpy(), delta, k, dtype) - qr_a = _analytical_jacobian(x=data_np, dy=b.asnumpy(), Q=Q.asnumpy(), - R=R.asnumpy(), Q_=_np.zeros(Q.shape), - R_=_np.zeros(R.shape), k=k) - assert_almost_equal(qr_num, qr_a, rtol=rtol, atol=atol) + # check imperative once more; mode='reduced' is default # behavior and optional parameter in original numpy ret = np.linalg.qr(data, mode='reduced') From 146b49ead32b941f74db694f2d453cb25650d252 Mon Sep 17 00:00:00 2001 From: Dick Carter Date: Sun, 19 Jul 2020 14:12:50 -0700 Subject: [PATCH 05/46] Unittest tolerance handling improvements (#18694) * Add sm arch 80 to Makefile * Add TF32 to cuBLAS GEMMs Signed-off-by: Serge Panev * Add CUDA version guards Signed-off-by: Serge Panev * Remove useless TF32 for double and old CUDA version Signed-off-by: Serge Panev * Factorize VERSION_ADJUSTED_TF32_MATH Signed-off-by: Serge Panev * Add TF32 considerations to test_util.py:check_consistency() * Bypass test_gluon_gpu.py:test_large_models if gmem >32GB * Default tols in assert_almost_equal() now a function of dtype and ctx * Expand types listed by default_tols() * Fix pylint * All with_seed() tests to waitall in teardown * Elevate MXNET_TEST_SEED logging to WARNING * Revert test_gluon_gpu.py:test_rnn_layer to default tols * Fix test_gluon_model_zoo_gpu.py::test_inference and test_operator_gpy.py::test_np_linalg_{solve,tensorinv} * test_numpy_interoperability.py to not fix seed for rest of CI * Further fix to test_np_linalg_tensorinv * Fix test_gluon_data.py:test_dataloader_context when run on 1-GPU system. * Fix test_operator_gpu.py::test_embedding_with_type * Fix test_operator_gpu.py::{test_*convolution_large_c,test_np_linalg_tensorsolve} * Remove unneeded print() from test_numpy_interoperability.py * Unify tol handling of check_consistency() and assert_almost_equal(). Test tweeks. * Add tol handling of assert_almost_equal() with number args * Add tol handling of bool comparisons * Fix test_numpy_op.py::test_np_random_rayleigh * Fix test_operator_gpu.py::test_batchnorm_with_type * Fix test_gluon.py::test_sync_batchnorm in cpu selftest * Improve unittest failure reporting * Add to robustness of test_operator_gpu.py::test_embedding_with_type * Check_consistency() to use equal backward gradients for increased test robustness * Fix test_operator_gpu.py::test_{fully_connected,gemm}. Add default_numeric_eps(). * test_utils.py fix for numeric gradient calc * Reinstate rtol=1e-2 for test_operator.py::test_order * Remove auto-cast of check_consistency() input data to least precise dtype (not needed) * Fix test_operator.py::test_{reciprocol,cbrt,rcbrt}_op * Expand default float64 numeric_eps for test_operator_gpu.py::test_sofmin * Fix segfault-on-error of @retry decorator. Add test isolation. * assert_almost_equal() to handle a,b scalars * Fix test_operator_gpu.py::test_gluon_{mvn,mvn_v1} race * Fix test_operator_gpu.py::test_flatten_slice_after_conv via scale * Remove test_utils.py:almost_equal_ignore_nan() * Fix sample vs. pop variance issue with test_numpy_op.py::test_npx_batch_norm * Expose test_utils.py:effective_dtype() and use to fix test_operator_gpu.py::test_np_linalg_svd * Fix true_divide int_array / int_scalar -> float_array to honor np_default_dtype * Try test_elemwise_binary_ops serial to avoid pytest worker crash * Fix (log_)softmax backward on empty ndarray * Temporarily log all CI seeds to troubleshoot seed non-determinism * Revert "Temporarily log all CI seeds to troubleshoot seed non-determinism" This reverts commit f60eff20785b812ac4fcd70d51359ee0cbfb3e47. * Temp log all CI seeds to troubleshoot unwanted seed determinism * Revert "Add sm arch 80 to Makefile" This reverts commit f9306cecc53b0633ef5f5b7b000802fbf0d73fe9. * Same fix of sample vs. pop variance issue, now with test_operator_gpu.py::test_batchnorm * Revert "Temp log all CI seeds to troubleshoot unwanted seed determinism" This reverts commit ff328efb0be3445690669d5437a6af575ff12b49. * Marking test_sparse_dot_grad with garbage_expected after teardown error * Fix flakiness of test_gluon_probability{_v1,_v2}.py::test_gluon_kl{_v1,} * Temp skip of test_aggregate_duplication on gpu * Add seeding to test_{numpy,}_contrib_gluon_data_vision.py. Make created files unique. * Add ndarray module isolation to help debug test_bbox_augmenters worker crash * Marking test_sparse_square_sum serial after pytest worker crash * Fix flakiness of test_gluon_probability{_v1,_v2}.py::test_half_cauchy{_v1,} Co-authored-by: Serge Panev Co-authored-by: Bart Gawrych --- python/mxnet/test_utils.py | 377 +++++++++++------- src/operator/linalg.h | 8 + src/operator/linalg_impl.h | 34 +- src/operator/nn/log_softmax.cc | 1 + src/operator/nn/softmax.cc | 1 + src/operator/numpy/np_true_divide-inl.h | 14 +- tests/python/gpu/test_gluon_gpu.py | 16 +- tests/python/gpu/test_gluon_model_zoo_gpu.py | 2 +- tests/python/gpu/test_operator_gpu.py | 95 ++--- tests/python/gpu/test_profiler_gpu.py | 2 + tests/python/unittest/common.py | 22 +- tests/python/unittest/test_autograd.py | 1 + .../test_contrib_gluon_data_vision.py | 5 +- tests/python/unittest/test_gluon.py | 4 +- .../unittest/test_gluon_probability_v1.py | 20 +- .../unittest/test_gluon_probability_v2.py | 21 +- tests/python/unittest/test_ndarray.py | 2 +- .../test_numpy_contrib_gluon_data_vision.py | 9 +- .../unittest/test_numpy_interoperability.py | 7 +- tests/python/unittest/test_numpy_op.py | 46 +-- tests/python/unittest/test_operator.py | 126 +++--- tests/python/unittest/test_sparse_operator.py | 1 + 22 files changed, 487 insertions(+), 327 deletions(-) diff --git a/python/mxnet/test_utils.py b/python/mxnet/test_utils.py index dd0278379f11..9ec0c6cd1219 100644 --- a/python/mxnet/test_utils.py +++ b/python/mxnet/test_utils.py @@ -70,19 +70,110 @@ def default_dtype(): # _TODO: get default dtype from environment variable return np.float32 +def default_rtols(): + """Get default relative tolerances for data comparisons involving each data type.""" + return {np.dtype(np.float16): 1e-2, + np.dtype(np.float32): 1e-4, + np.dtype(np.float64): 1e-5, + np.dtype(np.bool): 0, + np.dtype(np.int8): 0, + np.dtype(np.uint8): 0, + np.dtype(np.int32): 0, + np.dtype(np.uint32): 0, + np.dtype(np.int64): 0, + np.dtype(np.uint64): 0} + +def default_atols(): + """Get default absolute tolerances for data comparisons involving each data type.""" + return {np.dtype(np.float16): 1e-1, + np.dtype(np.float32): 1e-3, + np.dtype(np.float64): 1e-20, + np.dtype(np.bool): 0, + np.dtype(np.int8): 0, + np.dtype(np.uint8): 0, + np.dtype(np.int32): 0, + np.dtype(np.uint32): 0, + np.dtype(np.int64): 0, + np.dtype(np.uint64): 0} + +def default_numeric_eps(): + """Get default epsilon for finite difference gradient calculations with data type.""" + # prefer a power-of-two eps, since no bits are dropped when serving as an input delta + return {np.dtype(np.float16): 1.0 / 2**6, + np.dtype(np.float32): 1.0 / 2**9, + np.dtype(np.float64): 1.0 / 2**14} + + +def effective_dtype(dat): + """ Return the most appropriate dtype for determining the tolerance used in dat comparisons + Parameters + ---------- + dat : np.ndarray or mx.nd.array or mx.np.ndarray + """ + # On arch 80 gpus, a float32-io gemm or conv op will trim the mantissa of data + # inputs to be of comparable precision to a float16, so float16 becomes the + # 'effective dtype' for tolerance tests involving such op outputs. + + # Is TF32 enabled in the ctx (the default on arch 80 GPUs) + def is_TF32_enabled(ctx): + try: + return (ctx.device_type == 'gpu' and + get_cuda_compute_capability(ctx) == 80 and + os.environ.get('NVIDIA_TF32_OVERRIDE') != '0') + except: # pylint: disable=bare-except + return False + + ctx = dat.ctx if hasattr(dat, 'ctx') else None + dtype = np.dtype(dat.dtype) + if dtype == np.dtype(np.float32) and is_TF32_enabled(ctx): + return np.dtype(np.float16) + else: + return dtype -def get_atol(atol=None): - """Get default numerical threshold for regression test.""" - # _TODO: get from env variable, different threshold might - # be needed for different device and dtype - return 1e-20 if atol is None else atol + +def get_tolerance(dat, tol, default_tol): + """ Return the tolerance to be used for dat comparisons based on the given tol, datatype and context. + Parameters + ---------- + dat : np.ndarray or mx.nd.array or mx.np.ndarray + tol : float, or a dict of dtype->float + default_tol : default dict of dtype->float for all types + """ + + if isinstance(tol, numbers.Number): + return tol + + # If the caller has supplied a tol dict, use that if it has an entry for dtype, + # else use the supplied default tol dict. + dtype = effective_dtype(dat) + tol = {} if tol is None else tol + return tol.get(dtype, default_tol[dtype]) -def get_rtol(rtol=None): +def get_tols(x, y, rtol, atol): + """For comparing two datasets 'x' and 'y', what relative and absolute tolerances should be used.""" + # Tolerance analysis needs 'dtype' of 'x' and 'y', so convert numbers to numpy scalars as needed + if isinstance(x, numbers.Number): + x = np.array(x) + if isinstance(y, numbers.Number): + y = np.array(y) + + # If tols are not specified, use the largest default tol for 'x' and 'y' based on their ctx and dtype. + rtol = max(get_tolerance(x, rtol, default_rtols()), + get_tolerance(y, rtol, default_rtols())) + atol = max(get_tolerance(x, atol, default_atols()), + get_tolerance(y, atol, default_atols())) + + return rtol, atol + + +def get_atol(atol=None, dtype=np.dtype(np.float64)): """Get default numerical threshold for regression test.""" - # _TODO: get from env variable, different threshold might - # be needed for different device and dtype - return 1e-5 if rtol is None else rtol + return default_atols()[dtype] if atol is None else atol + +def get_rtol(rtol=None, dtype=np.dtype(np.float64)): + """Get default numerical threshold for regression test.""" + return default_rtols()[dtype] if rtol is None else rtol def get_etol(etol=None): """Get default numerical threshold for regression test.""" @@ -499,10 +590,8 @@ def np_reduce(dat, axis, keepdims, numpy_reduce_func): return ret -def find_max_violation(a, b, rtol=None, atol=None): +def _find_max_violation(a, b, rtol, atol): """Finds and returns the location of maximum violation.""" - rtol = get_rtol(rtol) - atol = get_atol(atol) # 'smart' absdiff that considers inf's as equals (to match np.allclose) absdiff = np.where(np.equal(a, b), 0, np.abs(a-b)) tol = atol + rtol*np.abs(b) @@ -565,9 +654,9 @@ def assert_almost_equal(a, b, rtol=None, atol=None, names=('a', 'b'), equal_nan= ---------- a : np.ndarray or mx.nd.array b : np.ndarray or mx.nd.array - rtol : None or float + rtol : None or float or dict of dtype -> float The relative threshold. Default threshold will be used if set to ``None``. - atol : None or float + atol : None or float or dict of dtype -> float The absolute threshold. Default threshold will be used if set to ``None``. names : tuple of names, optional The names used in error message when an exception occurs @@ -579,8 +668,12 @@ def assert_almost_equal(a, b, rtol=None, atol=None, names=('a', 'b'), equal_nan= if not use_broadcast: checkShapes(a, b) - rtol = get_rtol(rtol) - atol = get_atol(atol) + rtol, atol = get_tols(a, b, rtol, atol) + + if isinstance(a, mx.numpy.ndarray): + a = a.asnumpy() + if isinstance(b, mx.numpy.ndarray): + b = b.asnumpy() use_np_allclose = isinstance(a, np.ndarray) and isinstance(b, np.ndarray) if not use_np_allclose: if not (hasattr(a, 'ctx') and hasattr(b, 'ctx') and a.ctx == b.ctx and a.dtype == b.dtype): @@ -604,32 +697,37 @@ def assert_almost_equal(a, b, rtol=None, atol=None, names=('a', 'b'), equal_nan= a = a.asnumpy() b = b.asnumpy() - index, rel = find_max_violation(a, b, rtol, atol) - indexErr = index - relErr = rel - - print('\n*** Maximum errors for vector of size {}: rtol={}, atol={}\n'.format(a.size, rtol, atol)) - aTmp = a.copy() - bTmp = b.copy() - i = 1 - while i <= a.size: - if i <= mismatches[0]: - print("%3d: Error %f %s" %(i, rel, locationError(a, b, index, names))) + index, rel = _find_max_violation(a, b, rtol, atol) + if index != (): + # a, b are the numpy arrays + indexErr = index + relErr = rel + + print('\n*** Maximum errors for vector of size {}: rtol={}, atol={}\n'.format(a.size, rtol, atol)) + aTmp = a.copy() + bTmp = b.copy() + i = 1 + while i <= a.size: + if i <= mismatches[0]: + print("%3d: Error %f %s" %(i, rel, locationError(a, b, index, names))) + + aTmp[index] = bTmp[index] = 0 + if almost_equal(aTmp, bTmp, rtol, atol, equal_nan=equal_nan): + break - aTmp[index] = bTmp[index] = 0 - if almost_equal(aTmp, bTmp, rtol, atol, equal_nan=equal_nan): - break + i += 1 + if i <= mismatches[1] or mismatches[1] <= 0: + index, rel = _find_max_violation(aTmp, bTmp, rtol, atol) + else: + break - i += 1 - if i <= mismatches[1] or mismatches[1] <= 0: - index, rel = find_max_violation(aTmp, bTmp, rtol, atol) - else: - break + mismatchDegree = "at least " if mismatches[1] > 0 and i > mismatches[1] else "" + errMsg = "Error %f exceeds tolerance rtol=%e, atol=%e (mismatch %s%f%%).\n%s" % \ + (relErr, rtol, atol, mismatchDegree, 100*i/a.size, \ + locationError(a, b, indexErr, names, maxError=True)) + else: + errMsg = "Error %f exceeds tolerance rtol=%e, atol=%e.\n" % (rel, rtol, atol) - mismatchDegree = "at least " if mismatches[1] > 0 and i > mismatches[1] else "" - errMsg = "Error %f exceeds tolerance rtol=%e, atol=%e (mismatch %s%f%%).\n%s" % \ - (relErr, rtol, atol, mismatchDegree, 100*i/a.size, \ - locationError(a, b, indexErr, names, maxError=True)) np.set_printoptions(threshold=4, suppress=True) msg = npt.build_err_msg([a, b], err_msg=errMsg) @@ -648,16 +746,25 @@ def assert_almost_equal_with_err(a, b, rtol=None, atol=None, etol=None, ---------- a : np.ndarray b : np.ndarray + rtol : None or float or dict of dtype -> float + The relative threshold. Default threshold will be used if set to ``None``. + atol : None or float or dict of dtype -> float + The absolute threshold. Default threshold will be used if set to ``None``. threshold : None or float The checking threshold. Default threshold will be used if set to ``None``. etol : None or float The error rate threshold. If etol is float, return true if error_rate < etol even if any error is found. + names : tuple of names, optional + The names used in error message when an exception occurs + equal_nan : boolean, optional + The flag determining how to treat NAN values in comparison + mismatches : tuple of mismatches + Maximum number of mismatches to be printed (mismatches[0]) and determine (mismatches[1]) """ etol = get_etol(etol) if etol > 0: - rtol = get_rtol(rtol) - atol = get_atol(atol) + rtol, atol = get_tols(a, b, rtol, atol) if isinstance(a, mx.nd.NDArray): a = a.asnumpy() if isinstance(b, mx.nd.NDArray): @@ -665,7 +772,7 @@ def assert_almost_equal_with_err(a, b, rtol=None, atol=None, etol=None, equals = np.isclose(a, b, rtol=rtol, atol=atol) err = 1 - np.count_nonzero(equals) / equals.size if err > etol: - index, rel = find_max_violation(a, b, rtol, atol) + index, rel = _find_max_violation(a, b, rtol, atol) indexErr = index relErr = rel @@ -683,7 +790,7 @@ def assert_almost_equal_with_err(a, b, rtol=None, atol=None, etol=None, i += 1 if i <= mismatches[1] or mismatches[1] <= 0: - index, rel = find_max_violation(aTmp, bTmp, rtol, atol) + index, rel = _find_max_violation(aTmp, bTmp, rtol, atol) else: break @@ -698,31 +805,6 @@ def assert_almost_equal_with_err(a, b, rtol=None, atol=None, etol=None, assert_almost_equal(a, b, rtol=rtol, atol=atol, equal_nan=equal_nan) -def almost_equal_ignore_nan(a, b, rtol=None, atol=None): - """Test that two NumPy arrays are almost equal (ignoring NaN in either array). - Combines a relative and absolute measure of approximate eqality. - If either the relative or absolute check passes, the arrays are considered equal. - Including an absolute check resolves issues with the relative check where all - array values are close to zero. - - Parameters - ---------- - a : np.ndarray - b : np.ndarray - rtol : None or float - The relative threshold. Default threshold will be used if set to ``None``. - atol : None or float - The absolute threshold. Default threshold will be used if set to ``None``. - """ - a = np.copy(a) - b = np.copy(b) - nan_mask = np.logical_or(np.isnan(a), np.isnan(b)) - a[nan_mask] = 0 - b[nan_mask] = 0 - - return almost_equal(a, b, rtol, atol) - - def assert_almost_equal_ignore_nan(a, b, rtol=None, atol=None, names=('a', 'b')): """Test that two NumPy arrays are almost equal (ignoring NaN in either array). Combines a relative and absolute measure of approximate eqality. @@ -954,7 +1036,7 @@ def as_stype(var, stype, dtype): return approx_grads -def check_numeric_gradient(sym, location, aux_states=None, numeric_eps=1e-3, rtol=1e-2, +def check_numeric_gradient(sym, location, aux_states=None, numeric_eps=None, rtol=None, atol=None, grad_nodes=None, use_forward_train=True, ctx=None, grad_stype_dict=None, dtype=default_dtype()): """Verify an operation by checking backward pass via finite difference method. @@ -979,8 +1061,10 @@ def check_numeric_gradient(sym, location, aux_states=None, numeric_eps=1e-3, rto The auxiliary states required when generating the executor for the symbol. numeric_eps : float, optional Delta for the finite difference method that approximates the gradient. - check_eps : float, optional - relative error eps used when comparing numeric grad to symbolic grad. + rtol : None or float + The relative threshold. Default threshold will be used if set to ``None``. + atol : None or float + The absolute threshold. Default threshold will be used if set to ``None``. grad_nodes : None or list or tuple or dict, optional Names of the nodes to check gradient on use_forward_train : bool @@ -997,9 +1081,6 @@ def check_numeric_gradient(sym, location, aux_states=None, numeric_eps=1e-3, rto [1] https://github.com/Theano/Theano/blob/master/theano/gradient.py """ assert dtype in (np.float16, np.float32, np.float64) - # cannot use finite differences with small eps without high precision - if dtype in (np.float32, np.float16): - assert numeric_eps >= 1e-5 if ctx is None: ctx = default_context() @@ -1074,18 +1155,18 @@ def random_projection(shape): executor.forward(is_train=True) assert len(executor.outputs) == 1 + + eps = get_tolerance(executor.outputs[0], numeric_eps, default_numeric_eps()) + # cannot use finite differences with small eps without high precision + if dtype in (np.float32, np.float16): + assert eps >= 1e-5 + executor.backward() - symbolic_grads = {} - for k in grad_nodes: - grad_k = executor.grad_dict[k] - if grad_k is not None: - symbolic_grads[k] = grad_k.asnumpy() - else: - symbolic_grads[k] = None + symbolic_grads = executor.grad_dict numeric_gradients = numeric_grad( executor, location_npy, aux_states_npy, - eps=numeric_eps, use_forward_train=use_forward_train, dtype=dtype) + eps=eps, use_forward_train=use_forward_train, dtype=dtype) for name in grad_nodes: fd_grad = numeric_gradients[name] @@ -1095,6 +1176,8 @@ def random_projection(shape): assert_almost_equal(fd_grad, sym_grad, rtol, atol, ("NUMERICAL_%s"%name, "BACKWARD_%s"%name)) elif grad_req[name] == 'add': + if isinstance(sym_grad, mx.nd.NDArray): + sym_grad = sym_grad.asnumpy() assert_almost_equal(fd_grad, sym_grad - orig_grad, rtol, atol, ("NUMERICAL_%s"%name, "BACKWARD_%s"%name)) elif grad_req[name] == 'null': @@ -1103,7 +1186,7 @@ def random_projection(shape): raise ValueError("Invalid grad_req %s for argument %s"%(grad_req[name], name)) -def check_symbolic_forward(sym, location, expected, rtol=1E-4, atol=None, +def check_symbolic_forward(sym, location, expected, rtol=None, atol=None, aux_states=None, ctx=None, equal_nan=False, dtype=default_dtype()): """Compares a symbol's forward results with the expected ones. @@ -1127,8 +1210,10 @@ def check_symbolic_forward(sym, location, expected, rtol=1E-4, atol=None, Contains arrays corresponding to exe.outputs. - if type is dict of str to np.ndarray Contains mapping between sym.list_output() and exe.outputs. - check_eps : float, optional - Relative error to check to. + rtol : None or float + The relative threshold. Default threshold will be used if set to ``None``. + atol : None or float + The absolute threshold. Default threshold will be used if set to ``None``. aux_states : list of np.ndarray of dict, optional - if type is list of np.ndarray Contains all the NumPy arrays corresponding to sym.list_auxiliary_states @@ -1177,14 +1262,14 @@ def check_symbolic_forward(sym, location, expected, rtol=1E-4, atol=None, executor.forward(is_train=False) - outputs = [x.asnumpy() for x in executor.outputs] + outputs = executor.outputs for output_name, expect, output in zip(sym.list_outputs(), expected, outputs): assert_almost_equal(expect, output, rtol, atol, ("EXPECTED_%s"%output_name, "FORWARD_%s"%output_name), equal_nan=equal_nan) return executor.outputs -def check_symbolic_backward(sym, location, out_grads, expected, rtol=1e-5, atol=None, +def check_symbolic_backward(sym, location, out_grads, expected, rtol=None, atol=None, aux_states=None, grad_req='write', ctx=None, grad_stypes=None, equal_nan=False, dtype=default_dtype()): """Compares a symbol's backward results with the expected ones. @@ -1215,8 +1300,10 @@ def check_symbolic_backward(sym, location, out_grads, expected, rtol=1e-5, atol= Contains arrays corresponding to exe.grad_arrays - if type is dict of str to np.ndarray Contains mapping between ``sym.list_arguments()`` and exe.outputs. - check_eps: float, optional - Relative error to check to. + rtol : None or float + The relative threshold. Default threshold will be used if set to ``None``. + atol : None or float + The absolute threshold. Default threshold will be used if set to ``None``. aux_states : list of np.ndarray or dict of str to np.ndarray grad_req : str or list of str or dict of str to str, optional Gradient requirements. 'write', 'add' or 'null'. @@ -1302,7 +1389,7 @@ def check_symbolic_backward(sym, location, out_grads, expected, rtol=1e-5, atol= assert out_grads is None executor.backward(out_grads) - grads = {k: v.asnumpy() for k, v in args_grad_data.items()} + grads = args_grad_data for name in expected: if grad_req[name] == 'write': @@ -1310,7 +1397,8 @@ def check_symbolic_backward(sym, location, out_grads, expected, rtol=1e-5, atol= ("EXPECTED_%s"%name, "BACKWARD_%s"%name), equal_nan=equal_nan) elif grad_req[name] == 'add': - assert_almost_equal(expected[name], grads[name] - args_grad_npy[name], + grad = grads[name].asnumpy() if isinstance(grads[name], mx.nd.NDArray) else grads[name] + assert_almost_equal(expected[name], grad - args_grad_npy[name], rtol, atol, ("EXPECTED_%s"%name, "BACKWARD_%s"%name), equal_nan=equal_nan) elif grad_req[name] == 'null': @@ -1395,16 +1483,8 @@ def check_speed(sym, location=None, ctx=None, N=20, grad_req=None, typ="whole", raise ValueError('typ can only be "whole" or "forward".') -def get_tolerance(rtol, ctx): - if 'atol' in ctx: - return ctx['atol'] - if 'atol_mult' in ctx: - return ctx['atol_mult'] * rtol - return rtol - - def check_consistency(sym, ctx_list, scale=1.0, grad_req='write', - arg_params=None, aux_params=None, tol=None, + arg_params=None, aux_params=None, rtol=None, atol=None, raise_on_err=True, ground_truth=None, equal_nan=False, use_uniform=False, rand_type=np.float64): """Check symbol gives the same output for different running context @@ -1419,6 +1499,20 @@ def check_consistency(sym, ctx_list, scale=1.0, grad_req='write', Standard deviation of the inner normal distribution. Used in initialization. grad_req : str or list of str or dict of str to str Gradient requirement. + arg_params : dict of input name -> input data + data to use for non-aux inputs + aux_params : dict of input name -> input data + data to use for aux inputs + rtol : float or dictionary dtype->float, optional + The relative error tolerance. + atol : float or dictionary dtype->float, optional + The absolute error tolerance. + raise_on_err : bool, optional, defaults to True + Should an error raise an exception (or just output exception message) + ground_truth : dict of output name -> data, optional + Provided ideal result to be compared against + equal_nan : bool, optional, defaults to False + Should nans be treated as equal in the comparison use_unifrom: bool Optional, When flag set to true, random input data generated follows uniform distribution, @@ -1454,20 +1548,6 @@ def check_consistency(sym, ctx_list, scale=1.0, grad_req='write', 'type_dict': {'concat_arg0': np.float32, 'concat_arg1': np.float32}}] >>> check_consistency(sym, ctx_list) """ - if tol is None: - tol = {np.dtype(np.float16): 1e-1, - np.dtype(np.float32): 1e-3, - np.dtype(np.float64): 1e-5, - np.dtype(np.uint8): 0, - np.dtype(np.int32): 0, - np.dtype(np.int64): 0} - elif isinstance(tol, numbers.Number): - tol = {np.dtype(np.float16): tol, - np.dtype(np.float32): tol, - np.dtype(np.float64): tol, - np.dtype(np.uint8): tol, - np.dtype(np.int32): tol, - np.dtype(np.int64): tol} assert len(ctx_list) > 1 if isinstance(sym, Symbol): @@ -1485,10 +1565,16 @@ def check_consistency(sym, ctx_list, scale=1.0, grad_req='write', arg_params = {} if arg_params is None else arg_params aux_params = {} if aux_params is None else aux_params - for n, arr in exe_list[0].arg_dict.items(): + + # returns the least precise of two dtypes + def smaller_dtype(dt1, dt2): + return dt1 if dt2 is None or np.dtype(dt1).itemsize < np.dtype(dt2).itemsize else dt2 + + # It's important to assign random inputs in a deterministic order, for reproducibility. + for n, arr in _sorted_items(exe_list[0].arg_dict): if n not in arg_params: if use_uniform: - arg_params[n] = np.random.uniform(low=-0.92, high=0.92, + arg_params[n] = np.random.uniform(low=-0.92 * scale, high=0.92 * scale, size=arr.shape).astype(rand_type) else: arg_params[n] = np.random.normal(size=arr.shape, @@ -1511,25 +1597,22 @@ def check_consistency(sym, ctx_list, scale=1.0, grad_req='write', exe.forward(is_train=False) dtypes = [np.dtype(exe.outputs[0].dtype) for exe in exe_list] - max_idx = np.argmax(dtypes) + # Select the ground truth as the first model having the highest precision output[0] + gt_idx = np.argmax(dtypes) gt = ground_truth if gt is None: - gt = exe_list[max_idx].output_dict.copy() + gt = exe_list[gt_idx].output_dict.copy() for i, exe in enumerate(exe_list): - if i == max_idx: + if i == gt_idx: continue - rtol = tol[dtypes[i]] - atol = get_tolerance(rtol, ctx_list[i]) for name, arr in zip(output_names, exe.outputs): - # Previously, the cast was to dtypes[i], but symbol may be mixed-precision, - # so casting the ground truth to the actual output type seems more correct. - gtarr = gt[name].astype(arr.dtype) + gtarr = gt[name] try: assert_almost_equal(arr, gtarr, rtol=rtol, atol=atol, equal_nan=equal_nan) except AssertionError as e: - print('Predict Err: ctx %d vs ctx %d at %s'%(i, max_idx, name)) + print('Predict Err: ctx %d vs ctx %d at %s'%(i, gt_idx, name)) traceback.print_exc() if raise_on_err: raise e @@ -1538,33 +1621,55 @@ def check_consistency(sym, ctx_list, scale=1.0, grad_req='write', # train if grad_req != 'null': + # Perform forward() for exe in exe_list: exe.forward(is_train=True) - exe.backward(exe.outputs) + # Use the first executor's output data, cast to the least precise dtype, + # as the gradient data to pass to all executor's backward() call. + least_precise_dtype = [out.dtype for out in exe_list[0].outputs] + for exe in exe_list: + least_precise_dtype = [smaller_dtype(out1.dtype, dt) \ + for (out1, dt) in zip(exe.outputs, least_precise_dtype)] + golden_data_np = [out.astype(dt).asnumpy() \ + for (out, dt) in zip(exe_list[0].outputs, least_precise_dtype)] + # Perform backward() + for exe in exe_list: + out_grads = [mx.nd.array(golden_np, ctx=exe._ctx, + dtype=out.dtype).tostype(out.stype) + for (golden_np, out) in zip(golden_data_np, exe.outputs)] + exe.backward(out_grads) + gt = ground_truth if gt is None: - gt = exe_list[max_idx].output_dict.copy() + gt = exe_list[gt_idx].output_dict.copy() if grad_req != 'null': - gt.update(exe_list[max_idx].grad_dict) + gt.update(exe_list[gt_idx].grad_dict) for i, exe in enumerate(exe_list): - if i == max_idx: + if i == gt_idx: continue - rtol = tol[dtypes[i]] - atol = get_tolerance(rtol, ctx_list[i]) curr = zip(output_names + arg_names, exe.outputs + exe.grad_arrays) for name, arr in curr: if gt[name] is None: assert arr is None, name continue - # Previous cast was to dtypes[i], but symbol may be mixed-precision, - # so casting the ground truth to the actual output type seems more correct. - gtarr = gt[name].astype(arr.dtype) + gtarr = gt[name] try: - assert_almost_equal(arr, gtarr, rtol=rtol, atol=atol, equal_nan=equal_nan) + rt, at = rtol, atol + # If the primary data i/o type is float16, then the tolerance used when + # comparing a float32 input gradient (e.g. batchnorm gamma) should be float16. + smaller_arr_dtype = smaller_dtype(arr.dtype, dtypes[i]) + smaller_gt_dtype = smaller_dtype(gtarr.dtype, dtypes[gt_idx]) + if smaller_arr_dtype != arr.dtype or \ + smaller_gt_dtype != gtarr.dtype: + rt, at = get_tols(arr.astype(smaller_arr_dtype), + gtarr.astype(smaller_gt_dtype), rtol, atol) + assert_almost_equal(arr, gtarr, rtol=rt, atol=at, equal_nan=equal_nan) except AssertionError as e: - print('Train Err: ctx %d vs ctx %d at %s'%(i, max_idx, name)) + print('Train Err: {} {} ctx {} vs {} {} ctx {} at {}'.format( + np.dtype(arr.dtype).name, arr.ctx, i, + np.dtype(gtarr.dtype).name, gtarr.ctx, gt_idx, name)) traceback.print_exc() if raise_on_err: raise e diff --git a/src/operator/linalg.h b/src/operator/linalg.h index 291e251f5cbc..3e82c6a2fad1 100644 --- a/src/operator/linalg.h +++ b/src/operator/linalg.h @@ -280,6 +280,14 @@ void linalg_batch_det_backward_helper(const Tensor& LU, const DType zero_det, const mxnet::OpContext& ctx); +#ifdef __CUDACC__ +#if CUDA_VERSION < 11000 +#define VERSION_ADJUSTED_TF32_MATH CUBLAS_DEFAULT_MATH +#else +#define VERSION_ADJUSTED_TF32_MATH CUBLAS_TF32_TENSOR_OP_MATH +#endif +#endif // __CUDACC__ + #include "linalg_impl.h" #endif // MXNET_OPERATOR_LINALG_H_ diff --git a/src/operator/linalg_impl.h b/src/operator/linalg_impl.h index 104acd585bdb..6d94f33bc700 100644 --- a/src/operator/linalg_impl.h +++ b/src/operator/linalg_impl.h @@ -212,12 +212,15 @@ inline void linalg_gemm(const Tensor& A, #else cublasDataType_t full_datatype = CUBLAS_DATA_FULL; #endif + auto handle = Stream::GetBlasHandle(s); + cublasMath_t saved_math_mode = SetCublasMathMode(handle, VERSION_ADJUSTED_TF32_MATH); CUBLAS_CALL(cublasSgemmEx( - Stream::GetBlasHandle(s), (tB ? CUBLAS_OP_T : CUBLAS_OP_N), + handle, (tB ? CUBLAS_OP_T : CUBLAS_OP_N), (tA ? CUBLAS_OP_T : CUBLAS_OP_N), C.size(1), C.size(0), (tB ? B.size(1) : B.size(0)), &alpha, B.dptr_, full_datatype, B.stride_, A.dptr_, full_datatype, A.stride_, &beta, C.dptr_, full_datatype, - C.stride_)) + C.stride_)); + CUBLAS_CALL(cublasSetMathMode(handle, saved_math_mode)); } #else @@ -235,13 +238,16 @@ void linalg_gemm_axis(const Tensor& A, const Tensor::GetBlasHandle(s), \ + auto handle = Stream::GetBlasHandle(s); \ + cublasMath_t saved_math_mode = SetCublasMathMode(handle, VERSION_ADJUSTED_TF32_MATH); \ + CUBLAS_CALL(cublas##fname(handle, \ (tB ? CUBLAS_OP_T : CUBLAS_OP_N), \ (tA ? CUBLAS_OP_T : CUBLAS_OP_N), \ C.size(2), C.size(0), (tB ? B.size(2) : B.size(0)), &alpha, \ B.dptr_, B.size(1)*B.stride_, B.stride_, \ A.dptr_, A.size(1)*A.stride_, A.stride_, &beta, \ C.dptr_, C.size(1)*C.stride_, C.stride_, A.size(1))) \ + CUBLAS_CALL(cublasSetMathMode(handle, saved_math_mode)); \ } LINALG_GPU_GEMM_AXIS(SgemmStridedBatched, float) LINALG_GPU_GEMM_AXIS(DgemmStridedBatched, double) @@ -349,13 +355,22 @@ void linalg_gemm(const Tensor::GetBlasHandle(s), \ + auto handle = Stream::GetBlasHandle(s); \ + cublasMath_t saved_math_mode = SetCublasMathMode(handle, VERSION_ADJUSTED_TF32_MATH); \ + CUBLAS_CALL(cublas##fname(handle, \ (tB ? CUBLAS_OP_T : CUBLAS_OP_N), \ (tA ? CUBLAS_OP_T : CUBLAS_OP_N), \ C.size(2), C.size(1), (tB ? B.size(2) : B.size(1)), \ - &alpha, B.dptr_, B.stride_, B.size(1) * B.stride_, \ - A.dptr_, A.stride_, A.size(1) * A.stride_, \ - &beta, C.dptr_, C.stride_, C.size(1) * C.stride_, A.size(0))) \ + &alpha, \ + B.dptr_, B.stride_, \ + static_cast(B.size(1) * B.stride_), \ + A.dptr_, A.stride_, \ + static_cast(A.size(1) * A.stride_), \ + &beta, \ + C.dptr_, C.stride_, \ + static_cast(C.size(1) * C.stride_), \ + A.size(0))) \ + CUBLAS_CALL(cublasSetMathMode(handle, saved_math_mode)); \ } LINALG_GPU_BATCH_GEMM(DgemmStridedBatched, double) @@ -380,7 +395,7 @@ void linalg_gemm(const Tensor(const Tensor::GetBlasHandle(s); \ + cublasMath_t saved_math_mode = SetCublasMathMode(handle, VERSION_ADJUSTED_TF32_MATH); \ for (index_t i = 0; i < A.size(2); ++i) { \ CUBLAS_CALL(cublas##fname(Stream::GetBlasHandle(s), \ (tB ? CUBLAS_OP_T : CUBLAS_OP_N), \ @@ -430,6 +447,7 @@ void linalg_gemm(const Tensor& inputs, const std::vector& req, const std::vector& outputs) { + if (inputs[0].shape().Size() == 0U) return; const SoftmaxParam& param = nnvm::get(attrs.parsed); if (SupportMKLDNNLogSoftmax(param, inputs[1], outputs[0])) { MKLDNN_OPCHECK_INIT(false, outputs.size(), inputs, outputs); diff --git a/src/operator/nn/softmax.cc b/src/operator/nn/softmax.cc index b95e159f9862..9b28b71560bd 100644 --- a/src/operator/nn/softmax.cc +++ b/src/operator/nn/softmax.cc @@ -59,6 +59,7 @@ static void SoftmaxGradComputeExCPU(const nnvm::NodeAttrs& attrs, const std::vector& inputs, const std::vector& req, const std::vector& outputs) { + if (inputs[0].shape().Size() == 0U) return; const SoftmaxParam& param = nnvm::get(attrs.parsed); if (SupportMKLDNNSoftmax(param, inputs[1], outputs[0])) { MKLDNN_OPCHECK_INIT(false, outputs.size(), inputs, outputs); diff --git a/src/operator/numpy/np_true_divide-inl.h b/src/operator/numpy/np_true_divide-inl.h index 6e975111c8c2..ea0057b1606c 100644 --- a/src/operator/numpy/np_true_divide-inl.h +++ b/src/operator/numpy/np_true_divide-inl.h @@ -59,15 +59,17 @@ void TrueDivideScalarCompute(const nnvm::NodeAttrs &attrs, }); }); } else { - CHECK_EQ(outputs[0].type_flag_, mxnet::common::GetDefaultDtype()) + CHECK(out.type_flag_ == mshadow::kFloat32 || out.type_flag_ == mshadow::kFloat64) << "true_divide only supports float32 and float64" " output when input's dtype is " << type_string(inputs[0].type_flag_); - MXNET_INT_TYPE_SWITCH(inputs[0].type_flag_, DType, { - MXNET_ASSIGN_REQ_SWITCH(req[0], Req, { - Kernel, xpu>::Launch( - s, data.Size(), out.dptr(), data.dptr(), - static_cast(alpha)); + MSHADOW_REAL_TYPE_SWITCH(out.type_flag_, ODType, { + MXNET_INT_TYPE_SWITCH(inputs[0].type_flag_, DType, { + MXNET_ASSIGN_REQ_SWITCH(req[0], Req, { + Kernel, xpu>::Launch( + s, data.Size(), out.dptr(), data.dptr(), + static_cast(alpha)); + }); }); }); } diff --git a/tests/python/gpu/test_gluon_gpu.py b/tests/python/gpu/test_gluon_gpu.py index ba7deaeab503..e259b74b9fad 100644 --- a/tests/python/gpu/test_gluon_gpu.py +++ b/tests/python/gpu/test_gluon_gpu.py @@ -50,10 +50,9 @@ def check_rnn_layer(layer): states = layer.begin_state(16) co, cs = layer(x, states) - # atol of 1e-6 required, as exposed by seed 2124685726 - assert_almost_equal(go, co, rtol=1e-2, atol=1e-6) + assert_almost_equal(go, co) for g, c in zip(gs, cs): - assert_almost_equal(g, c, rtol=1e-2, atol=1e-6) + assert_almost_equal(g, c) @with_seed() @@ -70,9 +69,9 @@ def check_rnn_layer_w_rand_inputs(layer): states = layer.begin_state(16) co, cs = layer(x, states) - assert_almost_equal(go, co, rtol=1e-2, atol=1e-6) + assert_almost_equal(go, co) for g, c in zip(gs, cs): - assert_almost_equal(g, c, rtol=1e-2, atol=1e-6) + assert_almost_equal(g, c) @with_seed() @@ -485,6 +484,13 @@ def tensor_size(big_tensor_bytes): # This in the past has given cudnnFind() trouble when it needed to allocate similar I/O's # from the area carved out by the MXNET_GPU_MEM_POOL_RESERVE setting (by default 5%). (free_mem_bytes, total_mem_bytes) = mx.context.gpu_memory_info(ctx.device_id) + # This test needs to be 'qualified' for use with each new larger memory size + largest_supported_total_mem_GB = 32 + if (total_mem_bytes > largest_supported_total_mem_GB * 1024 * 1024 * 1024): + sys.stderr.write( + ' bypassing test due to too-large global memory of size {} ... '.format(total_mem_bytes)) + return + start_size = tensor_size(0.20 * total_mem_bytes) num_trials = 10 sys.stderr.write( diff --git a/tests/python/gpu/test_gluon_model_zoo_gpu.py b/tests/python/gpu/test_gluon_model_zoo_gpu.py index 427297173bae..1d0d3f4b2313 100644 --- a/tests/python/gpu/test_gluon_model_zoo_gpu.py +++ b/tests/python/gpu/test_gluon_model_zoo_gpu.py @@ -89,7 +89,7 @@ def test_inference(model_name): max_val = np.max(np.abs(cpu_out.asnumpy())) gpu_max_val = np.max(np.abs(gpu_out.asnumpy())) eprint(model_name + ": CPU " + str(max_val) + ", GPU " + str(gpu_max_val)) - assert_almost_equal(cpu_out / max_val, gpu_out / gpu_max_val, rtol=1e-3, atol=1e-3) + assert_almost_equal(cpu_out / max_val, gpu_out / gpu_max_val) def get_nn_model(name): if "densenet" in name: diff --git a/tests/python/gpu/test_operator_gpu.py b/tests/python/gpu/test_operator_gpu.py index 9b969607666d..d088b44f85b7 100644 --- a/tests/python/gpu/test_operator_gpu.py +++ b/tests/python/gpu/test_operator_gpu.py @@ -23,6 +23,7 @@ import mxnet as mx import numpy as np import pytest +import itertools from mxnet.test_utils import check_consistency, set_default_context, assert_almost_equal, assert_allclose from mxnet.test_utils import check_symbolic_forward, check_symbolic_backward, discard_stderr from mxnet.test_utils import default_context, rand_shape_2d, rand_ndarray, same @@ -404,30 +405,20 @@ def test_batchnorm_with_type(): ] # V2, 2D - sym = mx.sym.BatchNorm(name='norm', fix_gamma=False, cudnn_off=True) - check_consistency(sym, ctx_list_v2_2D) - sym = mx.sym.BatchNorm(name='norm', fix_gamma=False, cudnn_off=True) - check_consistency(sym, ctx_list_v2_2D) - sym = mx.sym.BatchNorm(name='norm', fix_gamma=True, cudnn_off=True) - check_consistency(sym, ctx_list_v2_2D) - sym = mx.sym.BatchNorm(name='norm', fix_gamma=True, cudnn_off=True) - check_consistency(sym, ctx_list_v2_2D) + bools = [False, True] + for fix_gamma, cudnn_off in itertools.product(bools, bools): + sym = mx.sym.BatchNorm(name='norm', fix_gamma=fix_gamma, cudnn_off=cudnn_off) + check_consistency(sym, ctx_list_v2_2D) # V2, 1D - sym = mx.sym.BatchNorm(name='norm', fix_gamma=False, cudnn_off=True) - check_consistency(sym, ctx_list_v2_1D) - sym = mx.sym.BatchNorm(name='norm', fix_gamma=False, cudnn_off=True) - check_consistency(sym, ctx_list_v2_1D) - sym = mx.sym.BatchNorm(name='norm', fix_gamma=True, cudnn_off=True) - check_consistency(sym, ctx_list_v2_1D) - sym = mx.sym.BatchNorm(name='norm', fix_gamma=True, cudnn_off=True) - check_consistency(sym, ctx_list_v2_1D) - # - # # V2, 3D - sym = mx.sym.BatchNorm(name='norm', fix_gamma=False, cudnn_off=True) - check_consistency(sym, ctx_list_v2_3D) - sym = mx.sym.BatchNorm(name='norm', fix_gamma=True, cudnn_off=True) - check_consistency(sym, ctx_list_v2_3D) + for fix_gamma, cudnn_off in itertools.product(bools, bools): + sym = mx.sym.BatchNorm(name='norm', fix_gamma=fix_gamma, cudnn_off=cudnn_off) + check_consistency(sym, ctx_list_v2_1D) + + # V2, 3D + for fix_gamma, cudnn_off in itertools.product(bools, [True,]): + sym = mx.sym.BatchNorm(name='norm', fix_gamma=fix_gamma, cudnn_off=cudnn_off) + check_consistency(sym, ctx_list_v2_3D) @with_seed() @@ -529,9 +520,9 @@ def test_convolution_with_type(): np.dtype(np.float64): 1e-5, np.dtype(np.uint8): 0, np.dtype(np.int32): 0} - check_consistency(sym, ctx_list, tol=tol) + check_consistency(sym, ctx_list, rtol=tol, atol=tol) # test ability to turn off training on bias - check_consistency(sym, ctx_list, grad_req={'conv_data': 'write', 'conv_weight': 'write', 'conv_bias': 'null'}, tol=tol) + check_consistency(sym, ctx_list, grad_req={'conv_data': 'write', 'conv_weight': 'write', 'conv_bias': 'null'}, rtol=tol, atol=tol) # Apply N symbols against each of M contexts, checking that all NxM combinations match. @@ -616,7 +607,6 @@ def test_conv_deconv_guards(): # Test cases for convolution and deconvolution via strided fft. Ensure that the framework # guards against problematic CUDNN_CONVOLUTION_BWD_DATA_ALGO_FFT_TILING in cuDNN [7.3.1,7.5) # see https://docs.nvidia.com/deeplearning/sdk/cudnn-release-notes/rel_750.html#rel_750 - tol = 1e-1 for (op, opname) in [(mx.sym.Convolution, 'conv'), (mx.sym.Deconvolution, 'deconv')]: dataname = opname + '_data' ctx = {'ctx': mx.gpu(0), dataname: (32, 32, 64, 64), 'type_dict': {dataname: np.float32}} @@ -631,7 +621,7 @@ def test_conv_deconv_guards(): try: sym = op(**test_case_args) sym_no_cudnn = op(cudnn_off=True, **test_case_args) - check_consistency([sym, sym_no_cudnn], [ctx, ctx], tol=tol) + check_consistency([sym, sym_no_cudnn], [ctx, ctx], scale=0.1) except: print('Test failure of mx.sym.{} with args: {}'.format(op.__name__, test_case_args)) raise @@ -655,7 +645,7 @@ def _conv_with_num_streams(seed): cudnn_off=True, name='conv') try: # tol can be pretty high- we're looking for a large diff due to garbaged workspace - check_consistency([sym, sym_no_cudnn], [ctx, ctx], tol=1e-2) + check_consistency([sym, sym_no_cudnn], [ctx, ctx], rtol=1e-2, atol=1e-2) except: print('Failing conv size = {}'.format(size)) raise @@ -678,20 +668,19 @@ def test_convolution_multiple_streams(): @pytest.mark.serial def test_convolution_large_c(): problematic_c = 64 * 1024 - # The convolution accumulates many values, so set large tolerances. - tol = {np.dtype(np.float32): 1, - np.dtype(np.float64): 1} + # The convolution accumulates many values, so scale the input magnitude. + scale = 0.1 def test_1D_with_width(width, grad_req): ctx_list = [{'ctx': mx.gpu(0), 'conv_data': (1, problematic_c, width), 'type_dict': {'conv_data': np.float32}}, {'ctx': mx.gpu(0), 'conv_data': (1, problematic_c, width), 'type_dict': {'conv_data': np.float64}}] sym = mx.sym.Convolution(layout='NCW', num_filter=8, kernel=(2,), name='conv') - check_consistency([sym, sym], ctx_list, tol=tol, grad_req=grad_req) + check_consistency([sym, sym], ctx_list, grad_req=grad_req, scale=scale) def test_2D_with_width(width, grad_req): ctx_list = [{'ctx': mx.gpu(0), 'conv_data': (1, problematic_c, 2, width), 'type_dict': {'conv_data': np.float32}}, {'ctx': mx.gpu(0), 'conv_data': (1, problematic_c, 2, width), 'type_dict': {'conv_data': np.float64}}] sym = mx.sym.Convolution(layout='NCHW', num_filter=4, kernel=(2,2), name='conv') - check_consistency([sym, sym], ctx_list, tol=tol, grad_req=grad_req) + check_consistency([sym, sym], ctx_list, grad_req=grad_req, scale=scale) # Run with different data tensor shapes to run cudnnFind() multiple times. # First, populate algo and op caches with models that always use cudnnFind() (req == 'write'). @@ -709,20 +698,19 @@ def test_2D_with_width(width, grad_req): @pytest.mark.serial def test_deconvolution_large_c(): problematic_c = 64 * 1024 - # The deconvolution accumulates many values, so set large tolerances. - tol = {np.dtype(np.float32): 1, - np.dtype(np.float64): 1} + # The deconvolution accumulates many values, so scale the input magnitude. + scale = 0.1 def test_1D_with_width(width, grad_req): ctx_list = [{'ctx': mx.gpu(0), 'deconv_data': (1, 8, width), 'type_dict': {'deconv_data': np.float32}}, {'ctx': mx.gpu(0), 'deconv_data': (1, 8, width), 'type_dict': {'deconv_data': np.float64}}] sym = mx.sym.Deconvolution(layout='NCW', num_filter=problematic_c, kernel=(2,), name='deconv') - check_consistency([sym, sym], ctx_list, tol=tol, grad_req=grad_req) + check_consistency([sym, sym], ctx_list, grad_req=grad_req, scale=scale) def test_2D_with_width(width, grad_req): ctx_list = [{'ctx': mx.gpu(0), 'deconv_data': (1, 8, 2, width), 'type_dict': {'deconv_data': np.float32}}, {'ctx': mx.gpu(0), 'deconv_data': (1, 8, 2, width), 'type_dict': {'deconv_data': np.float64}}] sym = mx.sym.Deconvolution(layout='NCHW', num_filter=problematic_c, kernel=(2,2), name='deconv') - check_consistency([sym, sym], ctx_list, tol=tol, grad_req=grad_req) + check_consistency([sym, sym], ctx_list, grad_req=grad_req, scale=scale) # Run with different data tensor shapes to run cudnnFind() multiple times. # First, populate algo and op caches with models that always use cudnnFind() (req == 'write'). @@ -831,8 +819,8 @@ def test_deconvolution_with_type(): np.dtype(np.float64): 1e-5, np.dtype(np.uint8): 0, np.dtype(np.int32): 0} - check_consistency(sym, ctx_list, tol=tol) - check_consistency(sym, ctx_list, tol=tol, grad_req="add") + check_consistency(sym, ctx_list, rtol=tol, atol=tol) + check_consistency(sym, ctx_list, rtol=tol, atol=tol, grad_req="add") # 2D deconvolution sym = mx.sym.Deconvolution(num_filter=2, kernel=(3,3), name='deconv') @@ -847,8 +835,8 @@ def test_deconvolution_with_type(): np.dtype(np.float64): 1e-5, np.dtype(np.uint8): 0, np.dtype(np.int32): 0} - check_consistency(sym, ctx_list, tol=tol) - check_consistency(sym, ctx_list, tol=tol, grad_req="add") + check_consistency(sym, ctx_list, rtol=tol, atol=tol) + check_consistency(sym, ctx_list, rtol=tol, atol=tol, grad_req="add") @with_seed() @@ -931,10 +919,11 @@ def test_bilinear_sampler_with_type(): def test_grid_generator_with_type(): data = mx.sym.Variable('data') sym = mx.sym.GridGenerator(data=data, transform_type='affine', target_shape=(20, 20)) + scale = 1 ctx_list = [{'ctx': mx.gpu(0), 'data': (3, 6), 'type_dict': {'data': np.float32}}, {'ctx': mx.cpu(0), 'data': (3, 6), 'type_dict': {'data': np.float32}}] - check_consistency(sym, ctx_list) - check_consistency(sym, ctx_list, grad_req="add") + check_consistency(sym, ctx_list, scale=scale) + check_consistency(sym, ctx_list, scale=scale, grad_req="add") sym = mx.sym.GridGenerator(data=data, transform_type='warp', target_shape=(20, 20)) ctx_list = [{'ctx': mx.gpu(0), 'data': (3, 2, 20, 20), 'type_dict': {'data': np.float32}}, {'ctx': mx.cpu(0), 'data': (3, 2, 20, 20), 'type_dict': {'data': np.float32}}] @@ -1080,7 +1069,7 @@ def test_pooling_versions_helper(pool_op_list, data, kernel, pool_type, pad, str pool_op)) sym_list.append(sym) - check_consistency(sym_list, ctx_list, equal_nan=(not count_include_pad), tol=tol) + check_consistency(sym_list, ctx_list, equal_nan=(not count_include_pad), rtol=tol, atol=tol) def test_pooling_dim(dim, pool_type, dtype, pool_op_list, p_value=2, count_include_pad=True, tol=None): @@ -1239,7 +1228,7 @@ def test_flatten_slice_after_conv(): ctx_list = [{'ctx': mx.gpu(0), 'conv_data': (2, 16, 16, 16), 'type_dict': {'conv_data': np.float32}}, {'ctx': mx.cpu(0), 'conv_data': (2, 16, 16, 16), 'type_dict': {'conv_data': np.float32}}] - check_consistency(slice_sym, ctx_list) + check_consistency(slice_sym, ctx_list, scale=0.5) @with_seed() @@ -1545,7 +1534,7 @@ def test_embedding_helper(data_types, weight_types, low_pad, high_pad): 'type_dict': {'embedding_data': data_type, 'embedding_weight': weight_type}}) arg_params = {'embedding_data': np.random.randint(low=-low_pad, high=V+high_pad, size=(N,))} check_consistency(sym, ctx_list, grad_req={'embedding_data': 'null','embedding_weight': 'write'}, - arg_params=arg_params) + arg_params=arg_params, scale=0.1) data_types = [np.float16, np.float32, np.float64, np.int32] weight_types = [np.float16, np.float32, np.float64] @@ -1678,7 +1667,7 @@ def test_deformable_psroipooling_with_type(): 'deformable_psroipool_trans': np.float16}}, ] - check_consistency(sym, ctx_list, scale=0.1, tol=tol, + check_consistency(sym, ctx_list, scale=0.1, rtol=tol, atol=tol, grad_req={'deformable_psroipool_data': 'write', 'deformable_psroipool_rois': 'null', 'deformable_psroipool_trans': 'write'}, arg_params=arg_params) @@ -1710,9 +1699,9 @@ def test_deformable_convolution_with_type(): 'type_dict': {'deformable_conv_data': np.float32, 'deformable_conv_offset': np.float32}}, ] - check_consistency(sym, ctx_list, scale=0.1, tol=tol) + check_consistency(sym, ctx_list, scale=0.1, rtol=tol, atol=tol) # test ability to turn off training on bias - check_consistency(sym, ctx_list, scale=0.1, tol=tol, + check_consistency(sym, ctx_list, scale=0.1, rtol=tol, atol=tol, grad_req={'deformable_conv_data': 'write', 'deformable_conv_offset': 'write', 'deformable_conv_weight': 'write', @@ -1745,7 +1734,7 @@ def test_deformable_convolution_options(): 'type_dict': {'deformable_conv_data': np.float32, 'deformable_conv_offset': np.float32}}, ] sym = mx.sym.contrib.DeformableConvolution(num_filter=3, kernel=(3,3), pad=(1,1), name='deformable_conv') - check_consistency(sym, ctx_list, scale=0.1, tol=tol) + check_consistency(sym, ctx_list, scale=0.1, rtol=tol, atol=tol) # Stride > 1 ctx_list = [{'ctx': mx.gpu(0), @@ -1766,7 +1755,7 @@ def test_deformable_convolution_options(): 'type_dict': {'deformable_conv_data': np.float32, 'deformable_conv_offset': np.float32}}, ] sym = mx.sym.contrib.DeformableConvolution(num_filter=3, kernel=(3,3), stride=(2,2), name='deformable_conv') - check_consistency(sym, ctx_list, scale=0.1, tol=tol) + check_consistency(sym, ctx_list, scale=0.1, rtol=tol, atol=tol) # Dilate > 1 ctx_list = [{'ctx': mx.gpu(0), @@ -1787,7 +1776,7 @@ def test_deformable_convolution_options(): 'type_dict': {'deformable_conv_data': np.float32, 'deformable_conv_offset': np.float32}}, ] sym = mx.sym.contrib.DeformableConvolution(num_filter=3, kernel=(3,3), dilate=(2,2), name='deformable_conv') - check_consistency(sym, ctx_list, scale=0.1, tol=tol) + check_consistency(sym, ctx_list, scale=0.1, rtol=tol, atol=tol) # Deformable group > 1 ctx_list = [{'ctx': mx.gpu(0), @@ -1808,7 +1797,7 @@ def test_deformable_convolution_options(): 'type_dict': {'deformable_conv_data': np.float32, 'deformable_conv_offset': np.float32}}, ] sym = mx.sym.contrib.DeformableConvolution(num_filter=4, kernel=(3,3), num_deformable_group=2, name='deformable_conv') - check_consistency(sym, ctx_list, scale=0.1, tol=tol) + check_consistency(sym, ctx_list, scale=0.1, rtol=tol, atol=tol) def check_rnn_layer(layer): diff --git a/tests/python/gpu/test_profiler_gpu.py b/tests/python/gpu/test_profiler_gpu.py index 11a0b7d12c0e..89eb425c744f 100644 --- a/tests/python/gpu/test_profiler_gpu.py +++ b/tests/python/gpu/test_profiler_gpu.py @@ -27,6 +27,8 @@ # They will be detected by test framework, as long as the current file has a different filename from test_profiler import * +# Test seen to crash pytest worker during development of https://github.com/apache/incubator-mxnet/pull/18694 +del test_aggregate_duplication def test_gpu_memory_profiler_symbolic(): iter_num = 5 diff --git a/tests/python/unittest/common.py b/tests/python/unittest/common.py index 021961646f3c..331f32d789b7 100644 --- a/tests/python/unittest/common.py +++ b/tests/python/unittest/common.py @@ -222,11 +222,13 @@ def test_new(*args, **kwargs): try: orig_test(*args, **kwargs) except: - # With exceptions, repeat test_msg at INFO level to be sure it's seen. - if log_level < logging.INFO: - logger.info(test_msg) + # With exceptions, repeat test_msg at WARNING level to be sure it's seen. + if log_level < logging.WARNING: + logger.warning(test_msg) raise finally: + # Provide test-isolation for any test having this decorator + mx.nd.waitall() np.random.set_state(post_test_state) return test_new return test_helper @@ -285,7 +287,7 @@ def setup_module(): seed = np.random.randint(0, np.iinfo(np.int32).max) else: seed = int(module_seed_str) - logger.warn('*** module-level seed is set: all tests running deterministically ***') + logger.warning('*** module-level seed is set: all tests running deterministically ***') logger.info('Setting module np/mx/python random seeds, use MXNET_MODULE_SEED=%s to reproduce.', seed) np.random.seed(seed) mx.random.seed(seed) @@ -293,7 +295,7 @@ def setup_module(): # The MXNET_TEST_SEED environment variable will override MXNET_MODULE_SEED for tests with # the 'with_seed()' decoration. Inform the user of this once here at the module level. if os.getenv('MXNET_TEST_SEED') is not None: - logger.warn('*** test-level seed set: all "@with_seed()" tests run deterministically ***') + logger.warning('*** test-level seed set: all "@with_seed()" tests run deterministically ***') def teardown_module(): @@ -359,13 +361,13 @@ def test_helper(orig_test): @functools.wraps(orig_test) def test_new(*args, **kwargs): """Wrapper for tests function.""" - for _ in range(n): + for i in range(n): try: orig_test(*args, **kwargs) + return except AssertionError as e: - err = e - continue - return - raise err + if i == n-1: + raise e + mx.nd.waitall() return test_new return test_helper diff --git a/tests/python/unittest/test_autograd.py b/tests/python/unittest/test_autograd.py index cc1e87ae94e4..ad0601cdbb0f 100644 --- a/tests/python/unittest/test_autograd.py +++ b/tests/python/unittest/test_autograd.py @@ -440,6 +440,7 @@ def check_grad_with_stype(array_stype, grad_stype, expected_stype): check_grad_with_stype(stype, grad_stype, grad_stype) @with_seed() +@pytest.mark.garbage_expected def test_sparse_dot_grad(): def check_sparse_dot_grad(rhs): lhs = rand_ndarray((2, 8), 'csr') diff --git a/tests/python/unittest/test_contrib_gluon_data_vision.py b/tests/python/unittest/test_contrib_gluon_data_vision.py index d2e38d66cb20..166b07f843d7 100644 --- a/tests/python/unittest/test_contrib_gluon_data_vision.py +++ b/tests/python/unittest/test_contrib_gluon_data_vision.py @@ -19,7 +19,7 @@ import numpy as np import scipy.ndimage from mxnet.test_utils import * -from common import assertRaises, with_seed +from common import assertRaises, with_seed, setup_module, teardown_module import shutil import tempfile import unittest @@ -63,6 +63,7 @@ def tearDown(self): print("cleanup {}".format(self.IMAGES_DIR)) shutil.rmtree(self.IMAGES_DIR) + @with_seed() def test_imageiter(self): im_list = [[np.random.randint(0, 5), x] for x in self.IMAGES] os.makedirs('./data', exist_ok=True) @@ -95,6 +96,7 @@ def test_imageiter(self): for batch in it: pass + @with_seed() def test_image_bbox_iter(self): im_list = [_generate_objects() + [x] for x in self.IMAGES] det_iter = mx.gluon.contrib.data.vision.ImageBboxDataLoader(2, (3, 300, 300), imglist=im_list, path_root='') @@ -131,6 +133,7 @@ def test_image_bbox_iter(self): ] + @with_seed() def test_bbox_augmenters(self): # only test if all augmenters will work # TODO(Joshua Zhang): verify the augmenter outputs diff --git a/tests/python/unittest/test_gluon.py b/tests/python/unittest/test_gluon.py index 52bab2b04ca4..588f5c131525 100644 --- a/tests/python/unittest/test_gluon.py +++ b/tests/python/unittest/test_gluon.py @@ -22,7 +22,7 @@ from mxnet import gluon from mxnet.gluon import nn from mxnet.base import py_str, MXNetError -from mxnet.test_utils import assert_almost_equal +from mxnet.test_utils import assert_almost_equal, default_context from mxnet.util import is_np_array from mxnet.ndarray.ndarray import _STORAGE_TYPE_STR_TO_ID from mxnet.test_utils import use_np @@ -810,7 +810,7 @@ def _syncParameters(bn1, bn2, ctx): input2grad.asnumpy(), atol=atol, rtol=rtol) cfgs = [(1, False)] - num_gpus = mx.context.num_gpus() + num_gpus = 0 if default_context().device_type != 'gpu' else mx.context.num_gpus() batch_size = 24 for i in range(1, num_gpus + 1): if batch_size % i == 0: diff --git a/tests/python/unittest/test_gluon_probability_v1.py b/tests/python/unittest/test_gluon_probability_v1.py index 92721f610495..b5b164458225 100644 --- a/tests/python/unittest/test_gluon_probability_v1.py +++ b/tests/python/unittest/test_gluon_probability_v1.py @@ -417,7 +417,7 @@ def hybrid_forward(self, F, scale, *args): # Test icdf for shape, hybridize in itertools.product(shapes, [True, False]): scale = np.random.uniform(0.5, 1.5, shape) - samples = np.random.uniform(size=shape) + samples = np.random.uniform(size=shape, high=1.0-1e-4) net = TestHalfCauchy("icdf") if hybridize: net.hybridize() @@ -1727,15 +1727,15 @@ def _stable_inv(cov): net.hybridize() mx_out = net(loc, cov_param, samples) assert mx_out.shape == samples.shape[:-1] - # Select the first element in the batch, because scipy does not support batching. - loc_t = loc.reshape(-1, event_shape)[0].asnumpy() - sigma_t = sigma.reshape(-1, event_shape, - event_shape)[0].asnumpy() if mx_out.shape == (): mx_out_t = mx_out.asnumpy() else: mx_out_t = mx_out.flatten()[0].asnumpy() samples_t = samples.reshape(-1, event_shape).asnumpy()[0] + # Select the first element in the batch, because scipy does not support batching. + loc_t = loc.reshape(-1, event_shape)[0].asnumpy() + sigma_t = sigma.reshape(-1, event_shape, + event_shape)[0].asnumpy() scipy_mvn = ss.multivariate_normal(loc_t, sigma_t) ss_out = scipy_mvn.logpdf(samples_t) assert_almost_equal(mx_out_t, ss_out, atol=1e-4, @@ -1758,14 +1758,14 @@ def _stable_inv(cov): net.hybridize() mx_out = net(loc, cov_param) assert mx_out.shape == sigma.shape[:-2] - # Select the first element in the batch, because scipy does not support batching. - loc_t = loc.reshape(-1, event_shape)[0].asnumpy() - sigma_t = sigma.reshape(-1, event_shape, - event_shape)[0].asnumpy() if mx_out.shape == (): mx_out_t = mx_out.asnumpy() else: mx_out_t = mx_out.flatten()[0].asnumpy() + # Select the first element in the batch, because scipy does not support batching. + loc_t = loc.reshape(-1, event_shape)[0].asnumpy() + sigma_t = sigma.reshape(-1, event_shape, + event_shape)[0].asnumpy() scipy_mvn = ss.multivariate_normal(loc_t, sigma_t) ss_out = scipy_mvn.entropy() assert_almost_equal(mx_out_t, ss_out, atol=1e-4, @@ -2084,7 +2084,7 @@ def rate(): return np.random.uniform(0.5, 1.5, shape) # exponential, geometric for dist in [mgp.Exponential, mgp.Geometric]: for shape in shapes: - def s(): return np.random.uniform(size=shape) + def s(): return np.random.uniform(size=shape, low=1e-3) _test_zero_kl(_dist_factory(dist, s), shape) if monte_carlo_test: _test_monte_carlo(_dist_factory(dist, s), diff --git a/tests/python/unittest/test_gluon_probability_v2.py b/tests/python/unittest/test_gluon_probability_v2.py index 9a36b4fc7056..d75aa6962cda 100644 --- a/tests/python/unittest/test_gluon_probability_v2.py +++ b/tests/python/unittest/test_gluon_probability_v2.py @@ -417,7 +417,7 @@ def forward(self, scale, *args): # Test icdf for shape, hybridize in itertools.product(shapes, [True, False]): scale = np.random.uniform(0.5, 1.5, shape) - samples = np.random.uniform(size=shape) + samples = np.random.uniform(size=shape, high=1.0-1e-4) net = TestHalfCauchy("icdf") if hybridize: net.hybridize() @@ -1727,14 +1727,14 @@ def _stable_inv(cov): net.hybridize() mx_out = net(loc, cov_param, samples) assert mx_out.shape == samples.shape[:-1] - # Select the first element in the batch, because scipy does not support batching. - loc_t = loc.reshape(-1, event_shape)[0].asnumpy() - sigma_t = sigma.reshape(-1, event_shape, - event_shape)[0].asnumpy() if mx_out.shape == (): mx_out_t = mx_out.asnumpy() else: mx_out_t = mx_out.asnumpy().flatten()[0] + # Select the first element in the batch, because scipy does not support batching. + loc_t = loc.reshape(-1, event_shape)[0].asnumpy() + sigma_t = sigma.reshape(-1, event_shape, + event_shape)[0].asnumpy() samples_t = samples.reshape(-1, event_shape).asnumpy()[0] scipy_mvn = ss.multivariate_normal(loc_t, sigma_t) ss_out = scipy_mvn.logpdf(samples_t) @@ -1758,14 +1758,14 @@ def _stable_inv(cov): net.hybridize() mx_out = net(loc, cov_param) assert mx_out.shape == sigma.shape[:-2] - # Select the first element in the batch, because scipy does not support batching. - loc_t = loc.reshape(-1, event_shape)[0].asnumpy() - sigma_t = sigma.reshape(-1, event_shape, - event_shape)[0].asnumpy() if mx_out.shape == (): mx_out_t = mx_out.asnumpy() else: mx_out_t = mx_out.asnumpy().flatten()[0] + # Select the first element in the batch, because scipy does not support batching. + loc_t = loc.reshape(-1, event_shape)[0].asnumpy() + sigma_t = sigma.reshape(-1, event_shape, + event_shape)[0].asnumpy() scipy_mvn = ss.multivariate_normal(loc_t, sigma_t) ss_out = scipy_mvn.entropy() assert_almost_equal(mx_out_t, ss_out, atol=1e-4, @@ -2081,10 +2081,11 @@ def rate(): return np.random.uniform(0.5, 1.5, shape) _dist_factory(dist, rate), repeated_times) + # exponential, geometric for dist in [mgp.Exponential, mgp.Geometric]: for shape in shapes: - def s(): return np.random.uniform(size=shape) + def s(): return np.random.uniform(size=shape, low=1e-3) _test_zero_kl(_dist_factory(dist, s), shape) if monte_carlo_test: _test_monte_carlo(_dist_factory(dist, s), diff --git a/tests/python/unittest/test_ndarray.py b/tests/python/unittest/test_ndarray.py index 2aab5c096ab9..a01746ee5e6f 100644 --- a/tests/python/unittest/test_ndarray.py +++ b/tests/python/unittest/test_ndarray.py @@ -24,7 +24,7 @@ import random import functools import pytest -from common import with_seed, assertRaises, TemporaryDirectory +from common import with_seed, assertRaises, TemporaryDirectory, setup_module, teardown_module from mxnet.test_utils import almost_equal from mxnet.test_utils import assert_almost_equal, assert_exception from mxnet.test_utils import default_context diff --git a/tests/python/unittest/test_numpy_contrib_gluon_data_vision.py b/tests/python/unittest/test_numpy_contrib_gluon_data_vision.py index 9c9c7fd1ed56..8c3e76aac91c 100644 --- a/tests/python/unittest/test_numpy_contrib_gluon_data_vision.py +++ b/tests/python/unittest/test_numpy_contrib_gluon_data_vision.py @@ -19,7 +19,7 @@ import numpy as np import scipy.ndimage from mxnet.test_utils import * -from common import assertRaises, with_seed +from common import assertRaises, with_seed, setup_module, teardown_module import shutil import tempfile import unittest @@ -63,10 +63,11 @@ def tearDown(self): print("cleanup {}".format(self.IMAGES_DIR)) shutil.rmtree(self.IMAGES_DIR) + @with_seed() @use_np def test_imageiter(self): im_list = [[np.random.randint(0, 5), x] for x in self.IMAGES] - fname = './data/test_imageiter.lst' + fname = './data/test_numpy_imageiter.lst' file_list = ['\t'.join([str(k), str(np.random.randint(0, 5)), x]) for k, x in enumerate(self.IMAGES)] with open(fname, 'w') as f: @@ -95,6 +96,7 @@ def test_imageiter(self): for batch in it: pass + @with_seed() @use_np def test_image_bbox_iter(self): im_list = [_generate_objects() + [x] for x in self.IMAGES] @@ -110,7 +112,7 @@ def test_image_bbox_iter(self): pass # test file list with last batch handle - fname = './data/test_imagedetiter.lst' + fname = './data/test_numpy_imagedetiter.lst' im_list = [[k] + _generate_objects() + [x] for k, x in enumerate(self.IMAGES)] with open(fname, 'w') as f: for line in im_list: @@ -130,6 +132,7 @@ def test_image_bbox_iter(self): path_imglist=fname, path_root='', last_batch='keep') ] + @with_seed() @use_np def test_bbox_augmenters(self): # only test if all augmenters will work diff --git a/tests/python/unittest/test_numpy_interoperability.py b/tests/python/unittest/test_numpy_interoperability.py index 8b50fc46f036..3b9786408df9 100644 --- a/tests/python/unittest/test_numpy_interoperability.py +++ b/tests/python/unittest/test_numpy_interoperability.py @@ -29,7 +29,7 @@ from mxnet.test_utils import assert_almost_equal from mxnet.test_utils import use_np from mxnet.test_utils import is_op_runnable -from common import assertRaises, with_seed +from common import assertRaises, with_seed, random_seed from mxnet.numpy_dispatch_protocol import with_array_function_protocol, with_array_ufunc_protocol from mxnet.numpy_dispatch_protocol import _NUMPY_ARRAY_FUNCTION_LIST, _NUMPY_ARRAY_UFUNC_LIST @@ -517,8 +517,8 @@ def _add_workload_linalg_cholesky(): dtypes = (np.float32, np.float64) for shape, dtype in itertools.product(shapes, dtypes): - _np.random.seed(1) - a = _np.random.randn(*shape) + with random_seed(1): + a = _np.random.randn(*shape) t = list(range(len(shape))) t[-2:] = -1, -2 @@ -2898,7 +2898,6 @@ def _add_workload_unwrap(): phase[3:] += np.pi phase_s = np.vstack((phase,phase)) OpArgMngr.add_workload('unwrap', phase) - print(phase_s.shape) OpArgMngr.add_workload('unwrap', phase_s, axis=1) diff --git a/tests/python/unittest/test_numpy_op.py b/tests/python/unittest/test_numpy_op.py index 88ad77fc978d..edc41f9e771d 100644 --- a/tests/python/unittest/test_numpy_op.py +++ b/tests/python/unittest/test_numpy_op.py @@ -30,7 +30,7 @@ from mxnet.gluon import HybridBlock from mxnet.base import MXNetError from mxnet.test_utils import same, assert_almost_equal, rand_shape_nd, rand_ndarray -from mxnet.test_utils import check_numeric_gradient, use_np, collapse_sum_like +from mxnet.test_utils import check_numeric_gradient, use_np, collapse_sum_like, effective_dtype from mxnet.test_utils import new_matrix_with_real_eigvals_nd from mxnet.test_utils import new_sym_matrix_with_real_eigvals_nd from common import assertRaises, with_seed, retry, xfail_when_nonstandard_decimal_separator @@ -1849,15 +1849,18 @@ def _test_batchnorm_impl(axis, running_mean = running_mean * momentum + \ data_mean_flat * (1 - momentum) + + m = _np.prod(shape) / shape[axis] + # cudnn uses m-1 in the denominator of its sample variance calculation, not m + sample_var_adjust = 1.0 if cudnn_off or fix_gamma else m / (m-1) running_var = running_var * momentum + \ - data_var_flat * (1 - momentum) + data_var_flat * sample_var_adjust * (1 - momentum) W = bn_gamma.reshape(expand_shape) dnx = ograd * W xsm = data - data_mean nd = 1.0 / np.sqrt(data_var + epsilon) nx = xsm * nd - m = _np.prod(shape) / shape[axis] dvar = (dnx * xsm).sum(axis=reduce_axis, keepdims=True, ) * (-0.5) * np.power(nd, 3) dmean = -nd * dnx.sum(axis=reduce_axis, keepdims=True) - \ @@ -1966,6 +1969,7 @@ def np_log_softmax(x, axis=-1): assert_almost_equal(mx_out.asnumpy(), np_out, rtol=1e-3, atol=1e-5, equal_nan=True) mx_out.backward() + mx_a.grad.wait_to_read() assert_almost_equal(mx_a.grad.asnumpy(), _np.zeros(shape), rtol=1e-3, atol=1e-5) @@ -4608,7 +4612,7 @@ def hybrid_forward(self, F, loc, scale): scale = np.ones(scale) mx_out = getattr(np.random, op_name)(loc, scale) np_out = getattr(_np.random, op_name)(loc, scale) - assert_almost_equal(mx_out.asnumpy().shape, np_out.shape) + assert mx_out.asnumpy().shape == np_out.shape @with_seed() @@ -4654,7 +4658,7 @@ def hybrid_forward(self, F, mean, sigma): for ((shape1, shape2), out_shape) in zip(param_shape, output_shapes): mx_out = np.random.lognormal(np.zeros(shape1), np.ones(shape2), out_shape) np_out = _np.random.lognormal(np.zeros(shape1).asnumpy(), np.ones(shape2).asnumpy(), out_shape) - assert_almost_equal(mx_out.asnumpy().shape, np_out.shape) + assert mx_out.asnumpy().shape == np_out.shape def _test_lognormal_exception(sigma): output = np.random.lognormal(sigma=sigma).asnumpy() @@ -4913,7 +4917,7 @@ def hybrid_forward(self, F, scale): with mx.autograd.record(): mx_out = test_rayleigh(scale) np_out = _np.random.rayleigh(scale = scale.asnumpy(), size = shape) - assert_almost_equal(np_out.shape, mx_out.shape) + assert np_out.shape == mx_out.shape mx_out.backward() assert scale.grad.shape == shape assert_almost_equal(scale.grad.asnumpy().sum(), mx_out.asnumpy().sum(), rtol=1e-3, atol=1e-5) @@ -4921,7 +4925,7 @@ def hybrid_forward(self, F, scale): for shape in shapes: mx_out = np.random.rayleigh(np.array([1]), shape) np_out = _np.random.rayleigh(np.array([1]).asnumpy(), shape) - assert_almost_equal(mx_out.asnumpy().shape, np_out.shape) + assert mx_out.asnumpy().shape == np_out.shape def _test_rayleigh_exception(scale): output = np.random.rayleigh(scale=scale).asnumpy() @@ -4954,7 +4958,7 @@ def hybrid_forward(self, F, scale): with mx.autograd.record(): mx_out = test_exponential_grad(scale) np_out = _np.random.exponential(scale = scale.asnumpy(), size = out_shape) - assert_almost_equal(np_out.shape, mx_out.shape) + assert np_out.shape == mx_out.shape mx_out.backward() assert scale.grad.shape == out_shape assert_almost_equal(scale.grad.asnumpy().sum(), mx_out.asnumpy().sum(), rtol=1e-3, atol=1e-5) @@ -5724,6 +5728,8 @@ def check_svd(UT, L, V, data_np): data_np = _np.random.uniform(-10.0, 10.0, shape) data_np = _np.array(data_np, dtype=dtype) data = np.array(data_np, dtype=dtype) + if effective_dtype(data) == np.dtype(np.float16): + continue data.attach_grad() with mx.autograd.record(): ret = test_svd(data) @@ -6115,7 +6121,7 @@ def check_solve(x, a_np, b_np): print(e) else: assert x.shape == x_expected.shape - assert_almost_equal(x.asnumpy(), x_expected, rtol=rtol, atol=atol) + assert_almost_equal(x, x_expected) def newInvertibleMatrix_2D(shape, max_cond=4): while 1: @@ -6155,7 +6161,6 @@ def get_grad_b(A, X): nrhs = (-1, 0, 1, 2, 3) dtypes = ['float32', 'float64'] for hybridize, shape, dtype, nrh in itertools.product([False, True], shapes, dtypes, nrhs): - rtol, atol =1e-2, 1e-4 test_solve = TestSolve() if hybridize: test_solve.hybridize() @@ -6189,8 +6194,8 @@ def get_grad_b(A, X): mx.autograd.backward(mx_out) b_backward_expected = get_grad_b(a.asnumpy(), mx_out.asnumpy()) a_backward_expected = -_np.matmul(b_backward_expected, _np.swapaxes(mx_out, -1, -2).asnumpy()) - assert_almost_equal(a.grad.asnumpy(), a_backward_expected, rtol=rtol, atol=atol) - assert_almost_equal(b.grad.asnumpy(), b_backward_expected, rtol=rtol, atol=atol) + assert_almost_equal(a.grad, a_backward_expected) + assert_almost_equal(b.grad, b_backward_expected) # check imperative once again mx_out = np.linalg.solve(a, b) @@ -6215,7 +6220,7 @@ def check_tensorinv(inv_a, a_np, ind): print(e) else: assert inv_a.shape == inv_a_expected.shape - assert_almost_equal(inv_a.asnumpy(), inv_a_expected, rtol=rtol, atol=atol) + assert_almost_equal(inv_a, inv_a_expected) def newInvertibleMatrix_2D(shape, max_cond=4): while 1: @@ -6258,11 +6263,6 @@ def get_grad_A(A, ind): ] dtypes = ['float32', 'float64'] for hybridize, shape, dtype, in itertools.product([False, True], shapes, dtypes): - rtol = 1e-3 - atol = 1e-5 - if dtype == 'float32': - rtol = 1e-2 - atol = 1e-4 ind = shape[0] test_tensorinv = TestTensorinv(ind=ind) if hybridize: @@ -6290,7 +6290,7 @@ def get_grad_A(A, ind): if 0 not in mx_out.shape: mx.autograd.backward(mx_out) grad_A_expected = get_grad_A(a.asnumpy(), ind) - assert_almost_equal(a.grad.asnumpy(), grad_A_expected, rtol=rtol, atol=atol) + assert_almost_equal(a.grad, grad_A_expected) # check imperative once again mx_out = np.linalg.tensorinv(a, ind) @@ -6343,7 +6343,7 @@ def check_tensorsolve(x, a_np, b_np, axes): print(e) else: assert x.shape == x_expected.shape - assert_almost_equal(x.asnumpy(), x_expected, rtol=rtol, atol=atol) + assert_almost_equal(x, x_expected) def shapeInfer(a_shape, b_shape, axes=None): # b_shape - Right-hand tensor shape, which can be of any shape. @@ -6405,8 +6405,6 @@ def newInvertibleMatrix_2D(shape, max_cond=4): for hybridize in [True, False]: for dtype in dtypes: for a_shape, b_shape, axes in shapes: - rtol = 1e-2 if dtype == 'float32' else 1e-3 - atol = 1e-4 if dtype == 'float32' else 1e-5 test_tensorsolve = TestTensorsolve(axes) if hybridize: test_tensorsolve.hybridize() @@ -6443,8 +6441,8 @@ def newInvertibleMatrix_2D(shape, max_cond=4): mx.autograd.backward(mx_out) grad_a_expected, grad_b_expected = get_tensorsolve_backward( a.asnumpy(), b.asnumpy(), mx_out.asnumpy(), a_axes, a_origin_axes, a_trans_shape) - assert_almost_equal(a.grad.asnumpy(), grad_a_expected, rtol=rtol, atol=atol) - assert_almost_equal(b.grad.asnumpy(), grad_b_expected, rtol=rtol, atol=atol) + assert_almost_equal(a.grad, grad_a_expected) + assert_almost_equal(b.grad, grad_b_expected) # check imperative once again mx_out = test_tensorsolve(a, b) diff --git a/tests/python/unittest/test_operator.py b/tests/python/unittest/test_operator.py index 1578e1450326..344cb7279f98 100644 --- a/tests/python/unittest/test_operator.py +++ b/tests/python/unittest/test_operator.py @@ -458,21 +458,26 @@ def test_symbol_pow(): @with_seed() def test_fully_connected(): + # Create data of given shape as a uniform distribution centered on 0.0 + def random_data(shape, dtype=np.float32): + return mx.nd.random.uniform(low=-0.5, + high=0.5, shape=shape, dtype=dtype) data = mx.sym.var("data") fc_weight = mx.sym.var("weight") fc_bias = mx.sym.var("bias") fc = mx.sym.FullyConnected(data=data, weight=fc_weight, bias=fc_bias, num_hidden=10, no_bias=False, name='fc') - data = mx.nd.random.uniform(shape=(5, 5, 5, 13), dtype=np.float32) - fc_weight = mx.nd.random.uniform(shape=(10, 325), dtype=np.float32) - fc_bias = mx.nd.random.uniform(shape=(10), dtype=np.float32) - fc_bias2 = mx.nd.random.uniform(shape=(10, 1), dtype=np.float32) + + data = random_data(shape=(5, 5, 5, 13)) + fc_weight = random_data(shape=(10, 325)) + fc_bias = random_data(shape=(10)) + fc_bias2 = random_data(shape=(10, 1)) + data_np = data.asnumpy().reshape(5, 325) fc_weight_np = np.transpose(fc_weight.asnumpy()) fc_bias_np = fc_bias.asnumpy() res = np.dot(data_np, fc_weight_np) + fc_bias.asnumpy() check_symbolic_forward(fc, {'data': data_np, 'weight': fc_weight.asnumpy(), 'bias': fc_bias_np}, {'fc_output': res}) - check_numeric_gradient(fc, {'data': data_np, 'weight': fc_weight.asnumpy(), 'bias': fc_bias_np}, - numeric_eps=1e-2, rtol=1e-4, atol=1e-2) + check_numeric_gradient(fc, {'data': data_np, 'weight': fc_weight.asnumpy(), 'bias': fc_bias_np}) # TODO: Fix Bug #15032 when bias has ndim > 1 #check_symbolic_forward(fc, {'data': data_np, 'weight': fc_weight.asnumpy(), 'bias': fc_bias2.asnumpy()}, {'fc_output': res}) @@ -1544,15 +1549,18 @@ def _test_batchnorm_impl(axis, running_mean = running_mean * momentum + \ data_mean_flat * (1 - momentum) + + m = np.prod(shape) / shape[axis] + # cudnn uses m-1 in the denominator of its sample variance calculation, not m + sample_var_adjust = 1.0 if cudnn_off or fix_gamma else m / (m-1) running_var = running_var * momentum + \ - data_var_flat * (1 - momentum) + data_var_flat * sample_var_adjust * (1 - momentum) W = bn_gamma.reshape(expand_shape) dnx = ograd * W xsm = data - data_mean nd = 1.0 / mx.nd.sqrt(data_var + epsilon) nx = xsm * nd - m = np.prod(shape) / shape[axis] dvar = (dnx * xsm).sum(axis=axis, keepdims=True, exclude=True) * (-0.5) * mx.nd.power(nd, 3) dmean = -nd * dnx.sum(axis=axis, keepdims=True, exclude=True) - \ @@ -2478,13 +2486,13 @@ def test_reduce_inner(numpy_reduce_func, numpy_reduce_grad_func, mx_reduce_sym, args_grad={'a': grad_nd}) net.forward(is_train=True) - equal_forward = almost_equal_ignore_nan(net.outputs[0].asnumpy(), sum_groundtruth, 1E-4, 1E-4) - assert equal_forward + # check forward + assert_almost_equal_ignore_nan(net.outputs[0].asnumpy(), sum_groundtruth, rtol=1e-4, atol=1e-4) net.backward(out_grads=mx.nd.array(outgrad_npy)) bc_grad_groundtruth = np.broadcast_to(grad_groundtruth, grad_nd.shape) - equal_backward = almost_equal_ignore_nan(grad_nd.asnumpy(), bc_grad_groundtruth, 1E-4, 1E-4) - assert equal_backward + # check backward + assert_almost_equal_ignore_nan(grad_nd.asnumpy(), bc_grad_groundtruth, rtol=1e-4, atol=1e-4) test_none_axis = [True, False] for test_none in test_none_axis: @@ -4074,7 +4082,7 @@ def get_large_matrix(): out_npy = gt_topk(dat=a_npy, axis=axis, ret_typ="value", k=a_npy.size, is_ascend=is_ascend) else: out_npy = gt_topk(dat=a_npy, axis=axis, ret_typ="value", k=5, is_ascend=is_ascend) - check_numeric_gradient(b, location={'a': a_npy}, numeric_eps=1e-2, ctx=ctx) + check_numeric_gradient(b, location={'a': a_npy}, numeric_eps=1e-2, rtol=1e-2, ctx=ctx) check_symbolic_forward(b, location={'a': a_npy}, expected=[out_npy]) b = mx.sym.topk(a, axis=1, is_ascend=is_ascend, ret_typ="indices", k=5) @@ -4122,7 +4130,7 @@ def get_large_matrix(): for is_ascend in [True, False]: b = mx.sym.topk(a, axis=axis, is_ascend=is_ascend, ret_typ="value", k=k) out_npy = gt_topk(dat=a_npy, axis=axis, ret_typ="value", k=k, is_ascend=is_ascend) - check_numeric_gradient(b, location={'a': a_npy}, numeric_eps=1e-2, ctx=ctx) + check_numeric_gradient(b, location={'a': a_npy}, numeric_eps=1e-2, rtol=1e-2, ctx=ctx) check_symbolic_forward(b, location={'a': a_npy}, expected=[out_npy]) b = mx.sym.topk(a, axis=1, is_ascend=is_ascend, ret_typ="indices", k=5) @@ -4285,7 +4293,7 @@ def test_grid_generator(): # check forward exe.arg_dict['affine'][:] = np.array([[1.0,0,0,0,1.0,0]]) exe.forward(is_train=True) - output = exe.outputs[0].asnumpy() + output = exe.outputs[0] output[0,0,:,:] = (output[0,0,:,:] + 1) * (target_shape[1] - 1) / 2.0 output[0,1,:,:] = (output[0,1,:,:] + 1) * (target_shape[0] - 1) / 2.0 xv, yv = np.meshgrid(np.arange(target_shape[0]), np.arange(target_shape[1])) @@ -4300,7 +4308,7 @@ def test_grid_generator(): tmp[1] = -1.0 + (np.arange(target_shape[0]*target_shape[1]) // target_shape[1]) * (2.0 / (target_shape[0]-1)) tmp[2] = 1 grad_est = np.dot(out_grad[0].reshape(2,target_shape[0]*target_shape[1]),tmp.T).reshape(1,6) - assert_almost_equal(exe.grad_dict['affine'], grad_est, rtol=1e-3, atol=1e-5) + assert_almost_equal(exe.grad_dict['affine'], grad_est) # check addto exe = grid._simple_bind(ctx=default_context(), affine=(1,6), grad_req='add') grid_grad_npy = np.random.normal(size=exe.grad_dict['affine'].shape) @@ -4308,7 +4316,7 @@ def test_grid_generator(): exe.arg_dict['affine'][:] = np.array([[1.0, 0, 0, 0, 1.0, 0]]) exe.forward(is_train=True) exe.backward(mx.nd.array(out_grad)) - assert_almost_equal(exe.grad_dict['affine'], grad_est + grid_grad_npy, rtol=1e-2, atol=1e-5) + assert_almost_equal(exe.grad_dict['affine'], grad_est + grid_grad_npy) # transform_type = warp test_case = [(12,21),(4,3),(6,12)] @@ -5354,51 +5362,62 @@ def test_div_sqrt_dim(): check_symbolic_forward(test, [data_tmp], [data_tmp / np.sqrt(data_tmp.shape[-1])]) +# helper function to identify inputs likely to fail check_numeric_gradient tol test +# due to finite difference method inaccuracies or function discontuities at the origin +def bad_input_finder(f, f_grad, dtype): + eps = default_numeric_eps()[np.dtype(dtype)] + rtol = default_rtols()[np.dtype(dtype)] + def expected_relative_error(x): + fd_gradient = (f(x+eps/2) - f(x-eps/2)) / eps + return abs(fd_gradient/f_grad(x) - 1) + def is_fd_problem_input(x): + return abs(x) < eps/2 or expected_relative_error(x) > rtol + return np.vectorize(is_fd_problem_input) + @with_seed() def test_reciprocal_op(): - eps = 2**(-11) - data_tmp = np.random.rand(3, 4) * 10 - 5 - # Avoid possible division by 0 errors and finite difference method inaccuracies. - # Factor of 6 below set empirically, depends on eps. - # Issue exposed by seed 879579887. - # Replace problematic inputs with 1.0. - data_tmp[abs(data_tmp) < 6*eps] = 1.0 + data_tmp = np.random.rand(3, 4).astype(np.float32) * 10 - 5 + + # Avoid possible division by 0 errors and finite difference method + # inaccuracies by replacing problem inputs with 1.0. + is_bad_input = bad_input_finder(np.reciprocal, + lambda x: -np.reciprocal(x)**2, np.float32) + data_tmp[is_bad_input(data_tmp)] = 1.0 data = mx.symbol.Variable('data') test = mx.sym.reciprocal(data) - check_numeric_gradient(test, [data_tmp], numeric_eps = eps) + check_numeric_gradient(test, [data_tmp]) check_symbolic_forward(test, [data_tmp], [np.reciprocal(data_tmp)]) @with_seed() def test_cbrt_op(): - eps = 2**(-11) - data_tmp = np.random.rand(3, 4) * 10 - 5 - # Avoid finite difference method inaccuracies due to infinite gradient at the origin. - # Factor of 4 below set empirically, depends on eps. - # Issue exposed by seed 553872106. - # Replace problematic inputs with 1.0. - data_tmp[abs(data_tmp) < 4*eps] = 1.0 + data_tmp = np.random.rand(3, 4).astype(np.float32) * 10 - 5 + + # Avoid possible division by 0 errors and finite difference method + # inaccuracies by replacing problem inputs with 1.0. + is_bad_input = bad_input_finder(np.cbrt, + lambda x: 1./(3 * np.cbrt(x)**2), np.float32) + data_tmp[is_bad_input(data_tmp)] = 1.0 data = mx.symbol.Variable('data') test = mx.sym.cbrt(data) - - check_numeric_gradient(test, [data_tmp], numeric_eps=eps) + check_numeric_gradient(test, [data_tmp]) check_symbolic_forward(test, [data_tmp], [np.cbrt(data_tmp)]) @with_seed() def test_rcbrt_op(): - eps = 2**(-11) - data_tmp = np.random.rand(3, 4) * 10 - 5 - # Avoid possible division by 0 errors and finite difference method inaccuracies. - # Factor of 4 below set empirically, depends on eps. - # Issue exposed by seed 788174893. - # Replace problematic inputs with 1.0. - data_tmp[abs(data_tmp) < 4*eps] = 1.0 + data_tmp = np.random.rand(3, 4).astype(np.float32) * 10 - 5 + + # Avoid possible division by 0 errors and finite difference method + # inaccuracies by replacing problem inputs with 1.0. + is_bad_input = bad_input_finder(lambda x: 1./np.cbrt(x), + lambda x: -1./(3 * np.cbrt(x)**4), np.float32) + data_tmp[is_bad_input(data_tmp)] = 1.0 data = mx.symbol.Variable('data') test = mx.sym.rcbrt(data) - check_numeric_gradient(test, [data_tmp], numeric_eps = eps) + check_numeric_gradient(test, [data_tmp]) check_symbolic_forward(test, [data_tmp], [1/np.cbrt(data_tmp)]) @@ -5807,7 +5826,7 @@ def test_deformable_convolution(): # By now we only have gpu implementation if default_context().device_type == 'gpu': check_numeric_gradient(op, [im_data, offset_data, weight, bias], rtol=rtol, atol=atol, - grad_nodes=grad_nodes, ctx=mx.gpu(0)) + grad_nodes=grad_nodes, ctx=mx.gpu(0), numeric_eps=1.0/64) def _validate_sample_location(input_rois, input_offset, spatial_scale, pooled_w, pooled_h, sample_per_part, part_size, output_dim, num_classes, trans_std, feat_h, feat_w): @@ -5900,10 +5919,11 @@ def test_deformable_psroipooling(): grad_nodes=grad_nodes, ctx=mx.gpu(0)) -def _gemm_test_helper(dtype, grad_check, rtol_fw = 1e-7, atol_fw = 1e-9): - num_eps = 1e-6 - rtol_bw = 1e-5 - atol_bw = 1e-6 +def _gemm_test_helper(dtype, grad_check, rtol_fw = None, atol_fw = None, + rtol_bw = None, atol_bw = None, num_eps = None): + def np_random_data(shape, dtype=np.float32): + return np.random.uniform(low=-0.5, + high=0.5, size=shape).astype(dtype) data1 = mx.symbol.Variable('data1') data2 = mx.symbol.Variable('data2') @@ -5922,10 +5942,10 @@ def _gemm_test_helper(dtype, grad_check, rtol_fw = 1e-7, atol_fw = 1e-9): shape2 = (3, 2) shape3 = (3, 3) shape4 = (2, 2) - data_in1 = np.random.uniform(1, 10, shape1).astype(dtype) - data_in2 = np.random.uniform(1, 10, shape2).astype(dtype) - data_in3 = np.random.uniform(1, 10, shape3).astype(dtype) - data_in4 = np.random.uniform(1, 10, shape4).astype(dtype) + data_in1 = np_random_data(shape1, dtype) + data_in2 = np_random_data(shape2, dtype) + data_in3 = np_random_data(shape3, dtype) + data_in4 = np_random_data(shape4, dtype) # Check all transpositions of gemm operator. data_in1_t = np.transpose(data_in1) data_in2_t = np.transpose(data_in2) @@ -6032,10 +6052,10 @@ def _gemm_test_helper(dtype, grad_check, rtol_fw = 1e-7, atol_fw = 1e-9): def test_gemm(): _gemm_test_helper(np.float64, True) os.environ["MXNET_CUDA_TENSOR_OP_MATH_ALLOW_CONVERSION"] = "0" - _gemm_test_helper(np.float32, False, rtol_fw = 1e-5, atol_fw = 1e-7) + _gemm_test_helper(np.float32, True) if default_context().device_type == 'gpu': os.environ["MXNET_CUDA_TENSOR_OP_MATH_ALLOW_CONVERSION"] = "1" - _gemm_test_helper(np.float32, False, rtol_fw = 2e-5, atol_fw = 2e-7) + _gemm_test_helper(np.float32, True) os.environ["MXNET_CUDA_TENSOR_OP_MATH_ALLOW_CONVERSION"] = "0" # Helper functions for test_laop diff --git a/tests/python/unittest/test_sparse_operator.py b/tests/python/unittest/test_sparse_operator.py index dc072013ea50..8bc086e14e52 100644 --- a/tests/python/unittest/test_sparse_operator.py +++ b/tests/python/unittest/test_sparse_operator.py @@ -1598,6 +1598,7 @@ def test_fallback(func_name, axis=0, keepdims=True, exclude=True): @with_seed() +@pytest.mark.serial def test_sparse_square_sum(): dim0 = 30 dim1 = 30 From bf26bccd8694a6e9f8e3b066b1e2270a7efd94b9 Mon Sep 17 00:00:00 2001 From: Sheng Zha Date: Mon, 20 Jul 2020 11:43:36 -0700 Subject: [PATCH 06/46] [NumPy] enable large tensor in np (#18368) * enable default large tensor in np * revert cmake change * move test_np_large_array.py to nightly --- python/mxnet/numpy/multiarray.py | 104 ++++++++++++++++++++++----- tests/nightly/test_np_large_array.py | 78 ++++++++++++++++++++ 2 files changed, 165 insertions(+), 17 deletions(-) create mode 100644 tests/nightly/test_np_large_array.py diff --git a/python/mxnet/numpy/multiarray.py b/python/mxnet/numpy/multiarray.py index 093206e437af..ddecaea37aa3 100644 --- a/python/mxnet/numpy/multiarray.py +++ b/python/mxnet/numpy/multiarray.py @@ -40,8 +40,9 @@ get_oshape_of_gather_nd_op from ..ndarray._internal import _set_np_ndarray_class from . import _op as _mx_np_op -from ..base import check_call, _LIB, NDArrayHandle, c_array +from ..base import check_call, _LIB, NDArrayHandle, c_array, mx_int, mx_int64 from ..base import mx_real_t, c_array_buf, mx_uint, numeric_types, integer_types +from ..runtime import Features from ..context import Context from ..util import set_module, wrap_np_unary_func, wrap_np_binary_func,\ is_np_default_dtype @@ -92,6 +93,16 @@ _NDARRAY_NO_ZERO_DIM_BOOL_ARRAY = -1 _NDARRAY_ZERO_DIM_BOOL_ARRAY_FALSE = 0 _NDARRAY_ZERO_DIM_BOOL_ARRAY_TRUE = 1 +_SIGNED_INT32_UPPER_LIMIT = (2**31 - 1) + +# Caching whether MXNet was built with INT64 support or not +_INT64_TENSOR_SIZE_ENABLED = None + +def _int64_enabled(): + global _INT64_TENSOR_SIZE_ENABLED + if _INT64_TENSOR_SIZE_ENABLED is None: + _INT64_TENSOR_SIZE_ENABLED = Features().is_enabled('INT64_TENSOR_SIZE') + return _INT64_TENSOR_SIZE_ENABLED # This function is copied from ndarray.py since pylint # keeps giving false alarm error of undefined-all-variable @@ -106,14 +117,37 @@ def _new_alloc_handle(shape, ctx, delay_alloc, dtype=mx_real_t): # pylint: disa A new empty `ndarray` handle. """ hdl = NDArrayHandle() - check_call(_LIB.MXNDArrayCreateEx( - c_array_buf(mx_uint, native_array('I', shape)), - mx_uint(len(shape)), - ctypes.c_int(ctx.device_typeid), - ctypes.c_int(ctx.device_id), - ctypes.c_int(int(delay_alloc)), - ctypes.c_int(int(_DTYPE_NP_TO_MX[_np.dtype(dtype).type])), - ctypes.byref(hdl))) + if _int64_enabled(): + check_call(_LIB.MXNDArrayCreateEx64( + c_array_buf(mx_int64, native_array('q', shape)), + ctypes.c_int(len(shape)), + ctypes.c_int(ctx.device_typeid), + ctypes.c_int(ctx.device_id), + ctypes.c_int(int(delay_alloc)), + ctypes.c_int(int(_DTYPE_NP_TO_MX[_np.dtype(dtype).type])), + ctypes.byref(hdl))) + else: + # When shape is larger than uint32 then there is an overflow error at python end itself. + # It needs to be caught here since the call doesn't even reach backend. + array_size = 1 + for idx in shape: + array_size = array_size * idx + if array_size > _SIGNED_INT32_UPPER_LIMIT: + raise Exception("[_new_alloc_handle] Size of tensor you are trying to allocate is " + + "larger than 2^31 elements. Please build with flag " + + "USE_INT64_TENSOR_SIZE=1") + if _np.dtype(dtype) == _np.dtype([('bfloat16', _np.uint16)]): + dtype_type = _np.dtype(dtype) + else: + dtype_type = _np.dtype(dtype).type + check_call(_LIB.MXNDArrayCreateEx( + c_array_buf(mx_uint, native_array('I', shape)), + mx_uint(len(shape)), + ctypes.c_int(ctx.device_typeid), + ctypes.c_int(ctx.device_id), + ctypes.c_int(int(delay_alloc)), + ctypes.c_int(int(_DTYPE_NP_TO_MX[dtype_type])), + ctypes.byref(hdl))) return hdl @@ -399,14 +433,24 @@ def _get_np_basic_indexing(self, key): ) handle = NDArrayHandle() flat_self = self.reshape_view(-1) - check_call( - _LIB.MXNDArraySlice( - flat_self.handle, - mx_uint(flat_begin), - mx_uint(flat_end), - ctypes.byref(handle), + if _int64_enabled(): + check_call( + _LIB.MXNDArraySlice64( + flat_self.handle, + ctypes.c_int64(flat_begin), + ctypes.c_int64(flat_end), + ctypes.byref(handle), + ) + ) + else: + check_call( + _LIB.MXNDArraySlice( + flat_self.handle, + ctypes.c_uint32(flat_begin), + ctypes.c_uint32(flat_end), + ctypes.byref(handle), + ) ) - ) sliced_shape = self._basic_indexing_sliced_shape(slc_key, self.shape) sliced = self.__class__(handle=handle, writable=self.writable) if 0 in sliced_shape: @@ -2263,7 +2307,33 @@ def _scatter_set_nd(self, value_nd, indices): @property def shape(self): - return super(ndarray, self).shape + """Tuple of array dimensions. + + Examples + -------- + >>> x = mx.np.array([1, 2, 3, 4]) + >>> x.shape + (4L,) + >>> y = mx.np.zeros((2, 3, 4)) + >>> y.shape + (2L, 3L, 4L) + >>> z = mx.np.array(3) + >>> z.shape + () + """ + num_dim = mx_int() + if _int64_enabled(): + pdata = ctypes.POINTER(mx_int64)() + check_call(_LIB.MXNDArrayGetShapeEx64( + self.handle, ctypes.byref(num_dim), ctypes.byref(pdata))) + else: + pdata = ctypes.POINTER(mx_int)() + check_call(_LIB.MXNDArrayGetShapeEx( + self.handle, ctypes.byref(num_dim), ctypes.byref(pdata))) + if num_dim.value == -1: + return None + else: + return tuple(pdata[:num_dim.value]) # pylint: disable=invalid-slice-index @property def ndim(self): diff --git a/tests/nightly/test_np_large_array.py b/tests/nightly/test_np_large_array.py new file mode 100644 index 000000000000..072e80b3a34e --- /dev/null +++ b/tests/nightly/test_np_large_array.py @@ -0,0 +1,78 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +import os +import sys +import tempfile +import math +import numpy as _np +import mxnet as mx + +curr_path = os.path.dirname(os.path.abspath(os.path.expanduser(__file__))) +sys.path.append(os.path.join(curr_path, '../python/unittest/')) + +from mxnet.test_utils import rand_ndarray, assert_almost_equal, rand_coord_2d, default_context, check_symbolic_forward, create_2d_tensor, use_np +from mxnet import gluon, np, npx +from common import with_seed +import pytest + + +# dimension constants +MEDIUM_X = 10000 +LARGE_X = 100000000 +SMALL_X = 100 +SMALL_Y = 50 + + +@use_np +def test_gluon_embedding(): + m = gluon.nn.Embedding(SMALL_Y, MEDIUM_X) + m.initialize() + a = np.zeros((MEDIUM_X, SMALL_Y)) + b = m(a) + assert b.shape == (MEDIUM_X, SMALL_Y, MEDIUM_X) + assert b.asnumpy().size == MEDIUM_X * SMALL_Y * MEDIUM_X + +@use_np +def test_fully_connected(): + a = np.ones(shape=(LARGE_X, SMALL_Y)) + b = np.ones(shape=(SMALL_Y, SMALL_Y)) + c = np.ones(shape=(b.shape[0],)) + + # w/o bias + res = mx.npx.fully_connected(a, b, num_hidden=b.shape[0], no_bias=True) + assert np.sum(res[-1] == a.shape[1]) == b.shape[0] + + # w/ bias + res = mx.npx.fully_connected(a, b, c, num_hidden=b.shape[0], no_bias=False) + assert np.sum(res[-1] == a.shape[1] + 1) == b.shape[0] + +@use_np +def test_dense(): + data = np.ones(shape=(LARGE_X, SMALL_X)) + linear = gluon.nn.Dense(SMALL_Y) + linear.initialize() + res = linear(data) + assert res.shape == (LARGE_X, SMALL_Y) + +@use_np +def test_softmax(): + input_data = np.ones((SMALL_Y, LARGE_X)) + for axis in [0, 1]: + true_output = np.full((SMALL_Y, LARGE_X), (1 / input_data.shape[axis])) + output = npx.softmax(input_data, axis=axis) + assert_almost_equal(output.asnumpy(), true_output, rtol=1e-5, atol=1e-5) From 1aec4837f1cc701dc434075a4c51fce1c24481cc Mon Sep 17 00:00:00 2001 From: Denisa Roberts Date: Mon, 20 Jul 2020 17:31:50 -0400 Subject: [PATCH 07/46] Add qr backward for wide inputs ncols>nrows (#18757) --- src/operator/numpy/linalg/np_qr-inl.h | 185 ++++++++++++++++++++----- tests/python/unittest/test_numpy_op.py | 123 ++++++++-------- 2 files changed, 218 insertions(+), 90 deletions(-) diff --git a/src/operator/numpy/linalg/np_qr-inl.h b/src/operator/numpy/linalg/np_qr-inl.h index 0f332e4a661a..c57e2d6d2443 100644 --- a/src/operator/numpy/linalg/np_qr-inl.h +++ b/src/operator/numpy/linalg/np_qr-inl.h @@ -483,19 +483,53 @@ struct assign_helper { } }; +// backprop helper to get y, v +struct QrBackHelper_G1 { + template + MSHADOW_XINLINE static void Map(const int k, const int m, const int n, const DType *in_data, + const int ldin, DType *out_data, const int ldout) { + const int offin(k * m * ldin); + const int offout(k * m * ldout); + for (index_t i = 0; i < m; ++i) { + for (index_t j = 0; j < n - m; ++j) { + out_data[offout + i * ldout + j] = in_data[offin + m + i * ldin + j]; + } + } + } +}; + +// backprop helper to get da from dx, dy +struct QrBackHelper_G2 { + template + MSHADOW_XINLINE static void Map(const int k, const int m, const int n, const DType *in_data_x, + const int ldinx, const DType *in_data_y, const int ldiny, + DType *out_data, const int ldout) { + const int offiny(k * m * ldiny); + const int offinx(k * m * ldinx); + const int offout(k * m * ldout); + for (index_t i = 0; i < m; ++i) { + for (index_t j = 0; j < n - m; ++j) { + out_data[offout + m + i * ldout + j] = in_data_y[offiny + i * ldiny + j]; + } + for (index_t j = 0; j < m; ++j) { + out_data[offout + i * ldout + j] = in_data_x[offinx + i * ldinx + j]; + } + } + } +}; + + struct qr_backward { template static void op(const Tensor& dA, const Tensor& dQ, const Tensor& dR, - const Tensor& A, const Tensor& Q, const Tensor& R, const Tensor& M, const OpContext& ctx, const nnvm::NodeAttrs& attrs) { - // Implements case m >= n; da = [dq + q@copyltu(M))]@r**(-T) + // Implements da = [dq + q@copyltu(M))]@r**(-T) // Where M = r@(dr**T) - (dq**T)@q - // Reference: https://arxiv.org/abs/1710.08717 Stream *s = ctx.get_stream(); if (dQ.dptr_ != dA.dptr_) Copy(dA, dQ, s); // M = R@dR_T @@ -514,15 +548,30 @@ struct qr_backward { template size_t QrBackwardWorkspaceSize(const TBlob& a, + const TBlob& q, const TBlob& r, const TBlob& grad_a) { + const mxnet::TShape& a_shape = a.shape_; + const int a_ndim = a_shape.ndim(); + const int n = a.size(a_ndim - 1); + const int m = a.size(a_ndim - 2); + if (0U == a.Size()) { return 0U; } MSHADOW_SGL_DBL_TYPE_SWITCH(grad_a.type_flag_, DType, { size_t work_space_size = 0; - // for grad a and M work_space_size += a.Size(); - work_space_size += r.Size(); + if (m >= n) { + work_space_size += r.Size(); + } else { + const mxnet::TShape& q_shape = q.shape_; + mxnet::TShape v_shape(q_shape); + v_shape[a_ndim - 1] = n - m; + // allocate space for: m, u, dq_prime, du, dx (shaped like Q) + work_space_size += 5 * q.Size(); + // allocate space for: y, dv (shaped like V, the partition of R) + work_space_size += 2 * v_shape.Size(); + } return work_space_size * sizeof(DType); }); LOG(FATAL) << "InternalError: cannot reach here"; @@ -542,8 +591,10 @@ void QrBackwardImpl(const TBlob& grad_a, const nnvm::NodeAttrs& attrs) { Stream *s = ctx.get_stream(); const mxnet::TShape& a_shape = a.shape_; + const mxnet::TShape& q_shape = q.shape_; const mxnet::TShape& r_shape = r.shape_; const int a_ndim = a_shape.ndim(); + const int m = a.size(a_ndim - 2); const int n = a.size(a_ndim - 1); if (kNullOp == req[0]) { return; } @@ -551,27 +602,105 @@ void QrBackwardImpl(const TBlob& grad_a, if (0U == a_shape.Size()) { return; } MSHADOW_SGL_DBL_TYPE_SWITCH(grad_a.type_flag_, DType, { - // case m >= n; Q of same shape with A and R is (n, n) - DType *m_ptr = reinterpret_cast(workspace.dptr_); - DType *grad_a_ptr = m_ptr + r_shape.Size(); - TBlob temp_m(m_ptr, r_shape, xpu::kDevMask); + // common for all shapes (m, n) + DType *grad_a_ptr = reinterpret_cast(workspace.dptr_); TBlob grad_a_data(grad_a_ptr, a_shape, xpu::kDevMask); - // dR_T - mxnet_op::Kernel::Launch( - s, r_shape.Size(), grad_r.dptr(), m_ptr, n, n, n * n); - - qr_backward::op(grad_a_data.FlatToKD(s), - grad_q.FlatToKD(s), - grad_r.FlatToKD(s), - a.FlatToKD(s), - q.FlatToKD(s), - r.FlatToKD(s), - temp_m.FlatToKD(s), - ctx, attrs); - + if (m >= n) { + // Q of same shape with A (m, n) and R is (n, n) + DType *m_ptr = grad_a_ptr + a_shape.Size(); + TBlob temp_m(m_ptr, r_shape, xpu::kDevMask); + // dR_T + mxnet_op::Kernel::Launch( + s, r_shape.Size(), grad_r.dptr(), m_ptr, n, n, n * n); + qr_backward::op(grad_a_data.FlatToKD(s), + grad_q.FlatToKD(s), + grad_r.FlatToKD(s), + q.FlatToKD(s), + r.FlatToKD(s), + temp_m.FlatToKD(s), + ctx, attrs); + } else { + // R is same shape with A (m, n) and Q is (m, m) + // Partition A = (X | Y); R = (U | V) + // X and U are (m, m); Y and V are (m, n - m) + mxnet::TShape v_shape(q_shape); + v_shape[a_ndim - 1] = n - m; + + DType *m_ptr = grad_a_ptr + a_shape.Size(); + DType *u_ptr = m_ptr + q_shape.Size(); + DType *dq_prime_ptr = u_ptr + q_shape.Size(); + DType *dv_ptr = dq_prime_ptr + q_shape.Size(); + DType *y_ptr = dv_ptr + v_shape.Size(); + DType *du_ptr = y_ptr + v_shape.Size(); + DType *dx_ptr = du_ptr + q_shape.Size(); + + TBlob temp_m(m_ptr, q_shape, xpu::kDevMask); + TBlob u_data(u_ptr, q_shape, xpu::kDevMask); + TBlob dq_prime_data(dq_prime_ptr, q_shape, xpu::kDevMask); + TBlob dv_data(dv_ptr, v_shape, xpu::kDevMask); + TBlob y_data(y_ptr, v_shape, xpu::kDevMask); + TBlob du_data(du_ptr, q_shape, xpu::kDevMask); + TBlob dx_data(dx_ptr, q_shape, xpu::kDevMask); + + Tensor R = r.FlatToKD(s); + Tensor dR = grad_r.FlatToKD(s); + Tensor Q = q.FlatToKD(s); + Tensor dQ = grad_q.FlatToKD(s); + Tensor dQ_prime = dq_prime_data.FlatToKD(s); + Tensor A = a.FlatToKD(s); + Tensor dA = grad_a_data.FlatToKD(s); + Tensor U = u_data.FlatToKD(s); + Tensor dU = du_data.FlatToKD(s); + Tensor dV = dv_data.FlatToKD(s); + Tensor Y = y_data.FlatToKD(s); + Tensor dX = dx_data.FlatToKD(s); + Tensor M = temp_m.FlatToKD(s); + + // U + for (index_t i = 0; i < R.size(0); ++i) { + const Tensor& Ri = R[i]; + const Tensor& Ui = U[i]; + Tensor Um(Ri.dptr_, Shape2(m, m), Ri.stride_, s); + Copy(Ui, Um, s); + } + // dU + for (index_t i = 0; i < dR.size(0); ++i) { + const Tensor& dRi = dR[i]; + const Tensor& dUi = dU[i]; + Tensor dUm(dRi.dptr_, Shape2(m, m), dRi.stride_, s); + Copy(dUi, dUm, s); + } + // Y + mxnet_op::Kernel::Launch( + s, A.size(0), m, n, A.dptr_, A.stride_, Y.dptr_, Y.stride_); + // dV + mxnet_op::Kernel::Launch( + s, dR.size(0), m, n, dR.dptr_, dR.stride_, dV.dptr_, dV.stride_); + // store dU_T in M + mxnet_op::Kernel::Launch( + s, q_shape.Size(), dU.dptr_, m_ptr, m, m, m * m); + // dq_prime = dQ + Copy(dQ_prime, dQ, s); + // dq_prime = dQ+Y@dV.T + gemm::op(Y, dV, dQ_prime, DType(1.0), DType(1.0), false, true, s); + // dX = op call + qr_backward::op(dX, + dQ_prime, + dU, + Q, + U, + M, + ctx, attrs); + // dY = Q@dV; reuse Y memory for dY + gemm::op(Q, dV, Y, DType(1.0), DType(0.0), false, false, s); + // copy dX and dY to dA + mxnet_op::Kernel::Launch( + s, dA.size(0), m, n, dX.dptr_, dX.stride_, Y.dptr_, Y.stride_, dA.dptr_, dA.stride_); + } + // common for all shapes MXNET_ASSIGN_REQ_SWITCH(req[0], req_type, { - mxnet_op::Kernel, xpu>::Launch( - s, a_shape.Size(), grad_a_data.dptr(), grad_a.dptr()); + mxnet_op::Kernel, xpu>::Launch( + s, a_shape.Size(), grad_a_data.dptr(), grad_a.dptr()); }); }); } @@ -594,14 +723,8 @@ void NumpyLaQrBackward(const nnvm::NodeAttrs& attrs, const TBlob& q = inputs[3]; const TBlob& r = inputs[4]; const TBlob& grad_a = outputs[0]; - const int a_ndim = a.shape_.ndim(); - const int n = a.size(a_ndim - 1); - const int m = a.size(a_ndim - 2); - - CHECK_LE(n, m) - << "QrBackward not implemented when ncols > nrows"; - size_t workspace_size = QrBackwardWorkspaceSize(a, r, grad_a); + size_t workspace_size = QrBackwardWorkspaceSize(a, q, r, grad_a); Tensor workspace = ctx.requested[0] .get_space_typed(Shape1(workspace_size), ctx.get_stream()); QrBackwardImpl(grad_a, grad_q, grad_r, a, q, r, req, workspace, ctx, attrs); diff --git a/tests/python/unittest/test_numpy_op.py b/tests/python/unittest/test_numpy_op.py index edc41f9e771d..ed9886ea8f75 100644 --- a/tests/python/unittest/test_numpy_op.py +++ b/tests/python/unittest/test_numpy_op.py @@ -5767,49 +5767,64 @@ def __init__(self): def hybrid_forward(self, F, data): return F.np.linalg.qr(data) - def get_expected_grad(a, q, r): + def get_expected_grad(a, q, r, dq, dr): + # for all input shapes (..., m, n) if 0 in r.shape: return r - def copyltu(M): - # shape of M is [batch, m, m] - eye = _np.array([_np.eye(M.shape[-1]) for i in range(M.shape[0])]) - lower = _np.tril(M) - eye * M - lower_mask = _np.tril(_np.ones_like(M)) - ret = lower_mask * M + lower.swapaxes(-1, -2) - return ret - shape_r = r.shape - shape_q = q.shape - shape_a = a.shape - r = r.reshape(-1, shape_r[-2], shape_r[-1]) - q = q.reshape(-1, shape_q[-2], shape_q[-1]) - dq = _np.ones_like(q) - dr = _np.ones_like(r) - dq_t = dq.swapaxes(-1, -2) - dr_t = dr.swapaxes(-1, -2) - r_inv = _np.linalg.inv(r) - r_inv_t = r_inv.swapaxes(-1, -2) - r_t = r.swapaxes(-1, -2) - # Get M - M = _np.matmul(r, dr_t) - _np.matmul(dq_t, q) - da = _np.matmul(dq + _np.matmul(q, copyltu(M)), r_inv_t) - return da.reshape(a.shape) - - def well_conditioned_rectang_matrix_2D(shape, max_cond=4): + def _copyltu(M): + eye = _np.array([_np.eye(M.shape[-1]) for i in range(M.shape[0])]) + lower = _np.tril(M) - eye * M + lower_mask = _np.tril(_np.ones_like(M)) + ret = lower_mask * M + lower.swapaxes(-1, -2) + return ret + def _case_m_ge_n(a, q, r, dq, dr): + dq_t = dq.swapaxes(-1, -2) + dr_t = dr.swapaxes(-1, -2) + r_inv = _np.linalg.inv(r) + r_inv_t = r_inv.swapaxes(-1, -2) + r_t = r.swapaxes(-1, -2) + # Get M + M = _np.matmul(r, dr_t) - _np.matmul(dq_t, q) + da = _np.matmul(dq + _np.matmul(q, _copyltu(M)), r_inv_t) + return da + m, n = a.shape[-2], a.shape[-1] + x = a[..., :, :m] + x_shape = x.shape + y = a[..., :, m:] + y_shape = y.shape + u = r[..., :, :m] + v = r[..., :, m:] + dv = dr[..., :, m:] + du = dr[..., :, :m] + q = q.reshape(-1, q.shape[-2], q.shape[-1]) + u = u.reshape(-1, u.shape[-2], u.shape[-1]) + dq = dq.reshape(-1, q.shape[-2], q.shape[-1]) + du = du.reshape(-1, du.shape[-2], du.shape[-1]) + if m >= n: + dx = _case_m_ge_n(x, q, u, dq, du).reshape(x_shape) + return dx + else: + dv = dv.reshape(-1, dv.shape[-2], dv.shape[-1]) + y = y.reshape(-1, y.shape[-2], y.shape[-1]) + dy = _np.matmul(q, dv).reshape(y_shape) + dq_prime = dq + _np.matmul(y, dv.swapaxes(-1, -2)) + dx = _case_m_ge_n(x, q, u, dq_prime, du).reshape(x_shape) + da = _np.concatenate([dx, dy], axis=-1) + return da + + def well_conditioned_rectang_matrix_2D(shape, ran=(-1., 1.), max_cond=4): m, n = shape[-2], shape[-1] while 1: - M1 = _np.random.uniform(-10, 10, (m, n)) - Q1, R1 = _np.linalg.qr(M1) - s = _np.ones(n) - D = _np.diag(s) - M2 =_np.random.uniform(-10, 10, (n, n)) - Q2, R2 = _np.linalg.qr(M2) + Q1, R1 = _np.linalg.qr(_np.random.uniform(ran[0], ran[1], (m, m))) + D = _np.eye(m, n) + Q2, R2 = _np.linalg.qr(_np.random.uniform(ran[0], ran[1], (n, n))) a = _np.matmul(_np.matmul(Q1, D), _np.swapaxes(Q2, -1, -2)) if (_np.linalg.cond(a, 2) < max_cond): return a - def well_conditioned_rectang_matrix_nD(shape, max_cond=4): + def well_conditioned_rectang_matrix_nD(shape, ran=(-1., 1.), max_cond=4): p = int(_np.prod(shape[:-2])) if len(shape) > 2 else 1 - return _np.array([well_conditioned_rectang_matrix_2D(shape, max_cond) for i in range(p)]).reshape(shape) + return _np.array([well_conditioned_rectang_matrix_2D(shape, ran, max_cond) for i in range(p)]).reshape(shape) def check_qr(q, r, a_np): # check Q@R = A @@ -5834,41 +5849,31 @@ def check_qr(q, r, a_np): assert_almost_equal(q.asnumpy(), q_expected, rtol=rtol, atol=atol) assert_almost_equal(r.asnumpy(), r_expected, rtol=rtol, atol=atol) shapes = [ - (0, 0), - (0, 1), - (1, 1), - (5, 3), (3, 5), - (3, 3), - (5, 5), - (8, 8), - (4, 5), - (4, 6), - (5, 4), - (6, 5), + (5, 3), + (10, 10), + (0, 1), (6, 5, 6), (6, 6, 5), - (3, 0, 0), - (2, 3, 3, 4), - (0, 5, 3, 3), + (2, 3, 2, 3), + (2, 3, 3, 2), (5, 0, 3, 3), (3, 3, 0, 0), - (4, 2, 2, 1), - (2, 3, 4, 3) ] - dtypes = ['float32', 'float64'] + dtypes = ['float64', 'float32'] for hybridize, shape, dtype in itertools.product([False, True], shapes, dtypes): - rtol = atol = 0.01 + rtol = atol = 1e-2 + if dtype == 'float32': + rtol = atol = 3e-2 + test_qr = TestQR() if hybridize: test_qr.hybridize() - if 0 in shape: data_np = _np.ones(shape) - elif shape[-2] >= shape[-1]: - data_np = well_conditioned_rectang_matrix_nD(shape, max_cond=4) else: - data_np = _np.random.uniform(-10.0, 10.0, shape) + data_np = well_conditioned_rectang_matrix_nD(shape, max_cond=4) + data_np = _np.array(data_np, dtype=dtype) data = np.array(data_np, dtype=dtype) @@ -5878,10 +5883,10 @@ def check_qr(q, r, a_np): Q, R = ret[0], ret[1] check_qr(Q, R, data_np) - # Only shapes m >= n have gradient - if 0 not in R.shape and shape[-2] >= shape[-1]: + if 0 not in R.shape: assert data.grad.shape == data_np.shape - backward_expected = get_expected_grad(data_np, Q.asnumpy(), R.asnumpy()) + backward_expected = get_expected_grad(data_np, Q.asnumpy(), R.asnumpy(), + _np.ones(Q.shape), _np.ones(R.shape)) mx.autograd.backward(ret) assert_almost_equal(data.grad.asnumpy(), backward_expected, rtol=rtol, atol=atol) From a7c6606002eb265963ed4f35237994afcd1be7ac Mon Sep 17 00:00:00 2001 From: Leonard Lausen Date: Mon, 20 Jul 2020 23:06:06 +0000 Subject: [PATCH 08/46] Remove Makefile build support (#18721) Replaced by cmake buildsystem as per https://github.com/apache/incubator-mxnet/issues/16167 --- Makefile | 768 ------------------ ci/dev_menu.py | 2 +- ci/docker/Dockerfile.build.ubuntu_cpu_lite | 45 - ci/docker/runtime_functions.sh | 109 +-- ci/jenkins/Jenkins_steps.groovy | 83 +- ci/jenkins/Jenkinsfile_centos_cpu | 1 - ci/jenkins/Jenkinsfile_unix_cpu | 4 +- ci/jenkins/Jenkinsfile_unix_gpu | 2 - ci/jenkins/Jenkinsfile_website_c_docs | 48 -- ci/jenkins/Jenkinsfile_website_clojure_docs | 48 -- ci/jenkins/Jenkinsfile_website_java_docs | 47 -- ci/jenkins/Jenkinsfile_website_julia_docs | 48 -- docs/static_site/src/pages/api/cpp/index.md | 8 +- docs/static_site/src/pages/api/faq/cloud.md | 76 +- .../src/pages/api/faq/s3_integration.md | 5 +- make/config.mk | 248 ------ make/config/libmxnet.sym | 10 - make/config/libmxnet.ver | 14 - make/config_jetson.mk | 219 ----- make/osx.mk | 153 ---- make/readthedocs.mk | 92 --- make/staticbuild/darwin_cpu.mk | 167 ---- make/staticbuild/darwin_mkl.mk | 167 ---- make/staticbuild/linux_cpu.mk | 167 ---- make/staticbuild/linux_cu100.mk | 180 ---- make/staticbuild/linux_cu101.mk | 181 ----- make/staticbuild/linux_cu102.mk | 181 ----- make/staticbuild/linux_cu92.mk | 180 ---- make/staticbuild/linux_native.mk | 167 ---- mkldnn.mk | 65 -- setup-utils/install-mxnet-amz-linux.sh | 82 -- setup-utils/install-mxnet-fedora-python.sh | 55 -- setup-utils/install-mxnet-osx-python.sh | 554 ------------- setup-utils/install-mxnet-ubuntu-python.sh | 59 -- setup-utils/install-mxnet-ubuntu-r.sh | 67 -- setup-utils/install-mxnet-virtualenv.sh | 123 --- setup-utils/install-mxnet-windows-python.bat | 295 ------- tests/cpp/unittest.mk | 81 -- tools/dependencies/openblas.sh | 27 +- tools/dependencies/opencv.sh | 2 +- tools/setup_gpu_build_tools.sh | 204 ----- tools/staticbuild/README.md | 13 +- tools/staticbuild/build.sh | 17 +- tools/staticbuild/build_lib.sh | 31 +- tools/staticbuild/build_lib_cmake.sh | 62 -- 45 files changed, 52 insertions(+), 5105 deletions(-) delete mode 100644 Makefile delete mode 100644 ci/docker/Dockerfile.build.ubuntu_cpu_lite delete mode 100644 ci/jenkins/Jenkinsfile_website_c_docs delete mode 100644 ci/jenkins/Jenkinsfile_website_clojure_docs delete mode 100644 ci/jenkins/Jenkinsfile_website_java_docs delete mode 100644 ci/jenkins/Jenkinsfile_website_julia_docs delete mode 100644 make/config.mk delete mode 100644 make/config/libmxnet.sym delete mode 100644 make/config/libmxnet.ver delete mode 100644 make/config_jetson.mk delete mode 100644 make/osx.mk delete mode 100644 make/readthedocs.mk delete mode 100644 make/staticbuild/darwin_cpu.mk delete mode 100644 make/staticbuild/darwin_mkl.mk delete mode 100644 make/staticbuild/linux_cpu.mk delete mode 100644 make/staticbuild/linux_cu100.mk delete mode 100644 make/staticbuild/linux_cu101.mk delete mode 100644 make/staticbuild/linux_cu102.mk delete mode 100644 make/staticbuild/linux_cu92.mk delete mode 100644 make/staticbuild/linux_native.mk delete mode 100644 mkldnn.mk delete mode 100644 setup-utils/install-mxnet-amz-linux.sh delete mode 100644 setup-utils/install-mxnet-fedora-python.sh delete mode 100755 setup-utils/install-mxnet-osx-python.sh delete mode 100644 setup-utils/install-mxnet-ubuntu-python.sh delete mode 100644 setup-utils/install-mxnet-ubuntu-r.sh delete mode 100755 setup-utils/install-mxnet-virtualenv.sh delete mode 100644 setup-utils/install-mxnet-windows-python.bat delete mode 100644 tests/cpp/unittest.mk delete mode 100755 tools/setup_gpu_build_tools.sh delete mode 100755 tools/staticbuild/build_lib_cmake.sh diff --git a/Makefile b/Makefile deleted file mode 100644 index 0bf856f677bb..000000000000 --- a/Makefile +++ /dev/null @@ -1,768 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -ROOTDIR = $(CURDIR) -TPARTYDIR = $(ROOTDIR)/3rdparty - -ifeq ($(OS),Windows_NT) - UNAME_S := Windows -else - UNAME_S := $(shell uname -s) - UNAME_P := $(shell uname -p) -endif - -ifndef config -ifdef CXXNET_CONFIG - config = $(CXXNET_CONFIG) -else ifneq ("$(wildcard ./config.mk)","") - config = config.mk -else - config = make/config.mk -endif -endif - -ifndef DMLC_CORE - DMLC_CORE = $(TPARTYDIR)/dmlc-core -endif -CORE_INC = $(wildcard $(DMLC_CORE)/include/*/*.h) - -ifndef NNVM_PATH - NNVM_PATH = $(TPARTYDIR)/tvm/nnvm -endif - -ifndef DLPACK_PATH - DLPACK_PATH = $(ROOTDIR)/3rdparty/dlpack -endif - -ifndef TVM_PATH - TVM_PATH = $(TPARTYDIR)/tvm -endif - -ifndef LLVM_PATH - LLVM_PATH = $(TVM_PATH)/build/llvm -endif - -ifneq ($(USE_OPENMP), 1) - export NO_OPENMP = 1 -endif - -# use customized config file -include $(config) - -ifndef USE_MKLDNN -ifneq ($(UNAME_S), Darwin) -ifneq ($(UNAME_S), Windows) -ifeq ($(UNAME_P), x86_64) - USE_MKLDNN=1 -endif -endif -endif -endif - -ifeq ($(USE_MKL2017), 1) -$(warning "USE_MKL2017 is deprecated. We will switch to USE_MKLDNN.") - USE_MKLDNN=1 -endif - -ifeq ($(USE_MKLDNN), 1) - MKLDNNROOT = $(ROOTDIR)/3rdparty/mkldnn/build/install -endif - -include $(TPARTYDIR)/mshadow/make/mshadow.mk -include $(DMLC_CORE)/make/dmlc.mk - -# all tge possible warning tread -WARNFLAGS= -Wall -Wsign-compare -CFLAGS = -DMSHADOW_FORCE_STREAM $(WARNFLAGS) -# C++ standard -CFLAGS+= -DDMLC_USE_CXX11=1 -DDMLC_USE_CXX11=1 -DDMLC_USE_CXX14=1 -# use old thread local implementation in DMLC-CORE -CFLAGS += -DDMLC_MODERN_THREAD_LOCAL=0 -# disable stack trace in exception by default. -CFLAGS += -DDMLC_LOG_STACK_TRACE_SIZE=0 -CFLAGS += -DDMLC_LOG_FATAL_THROW=1 - -ifeq ($(DEV), 1) - # Excluded from Werror: - # 1) variables used in '#pragma omp parallel' are considered unused - CFLAGS += -g -Werror -Wno-error=unused-variable -Wno-error=maybe-uninitialized -Wno-error=unused-function - NVCCFLAGS += -Werror cross-execution-space-call -endif - -# CFLAGS for debug -ifeq ($(DEBUG), 1) - CFLAGS += -g -O0 -D_GLIBCXX_ASSERTIONS -else - CFLAGS += -O3 -DNDEBUG=1 -endif -CFLAGS += -I$(TPARTYDIR)/mshadow/ -I$(TPARTYDIR)/dmlc-core/include -fPIC -I$(NNVM_PATH)/include -I$(DLPACK_PATH)/include -I$(TPARTYDIR)/tvm/include -Iinclude $(MSHADOW_CFLAGS) -LDFLAGS = -pthread -ldl $(MSHADOW_LDFLAGS) $(DMLC_LDFLAGS) - -# please note that when you enable this, you might run into an linker not being able to work properly due to large code injection. -# you can find more information here https://github.com/apache/incubator-mxnet/issues/15971 -ifeq ($(ENABLE_TESTCOVERAGE), 1) - CFLAGS += --coverage - LDFLAGS += --coverage -endif - -ifeq ($(USE_NVTX), 1) - CFLAGS += -DMXNET_USE_NVTX=1 - LDFLAGS += -lnvToolsExt -endif - -ifeq ($(USE_TENSORRT), 1) - CFLAGS += -I$(ROOTDIR) -I$(TPARTYDIR) -DONNX_NAMESPACE=$(ONNX_NAMESPACE) -DMXNET_USE_TENSORRT=1 - LDFLAGS += -lprotobuf -pthread -lonnx -lonnx_proto -lnvonnxparser -lnvonnxparser_runtime -lnvinfer -lnvinfer_plugin -endif -# -L/usr/local/lib - -ifeq ($(DEBUG), 1) - NVCCFLAGS += -std=c++14 -Xcompiler -D_FORCE_INLINES -g -G -O0 -ccbin $(CXX) $(MSHADOW_NVCCFLAGS) -else - NVCCFLAGS += -std=c++14 -Xcompiler -D_FORCE_INLINES -O3 -ccbin $(CXX) $(MSHADOW_NVCCFLAGS) -endif - -# CFLAGS for segfault logger -ifeq ($(USE_SIGNAL_HANDLER), 1) - CFLAGS += -DMXNET_USE_SIGNAL_HANDLER=1 -endif - -# Caffe Plugin -ifdef CAFFE_PATH - CFLAGS += -DMXNET_USE_CAFFE=1 -endif - -ifndef LINT_LANG - LINT_LANG = "all" -endif - -ifeq ($(USE_MKLDNN), 1) - CFLAGS += -DMXNET_USE_MKLDNN=1 - CFLAGS += -I$(ROOTDIR)/src/operator/nn/mkldnn/ - CFLAGS += -I$(MKLDNNROOT)/include - LIB_DEP += $(MKLDNNROOT)/lib/libdnnl.a -endif - -# setup opencv -ifeq ($(USE_OPENCV), 1) - CFLAGS += -DMXNET_USE_OPENCV=1 - ifneq ($(filter-out NONE, $(USE_OPENCV_INC_PATH)),) - CFLAGS += -I$(USE_OPENCV_INC_PATH)/include - ifeq ($(filter-out NONE, $(USE_OPENCV_LIB_PATH)),) -$(error Please add the path of OpenCV shared library path into `USE_OPENCV_LIB_PATH`, when `USE_OPENCV_INC_PATH` is not NONE) - endif - LDFLAGS += -L$(USE_OPENCV_LIB_PATH) - ifneq ($(wildcard $(USE_OPENCV_LIB_PATH)/libopencv_imgcodecs.*),) - LDFLAGS += -lopencv_imgcodecs - endif - ifneq ($(wildcard $(USE_OPENCV_LIB_PATH)/libopencv_highgui.*),) - LDFLAGS += -lopencv_highgui - endif - else - ifeq ("$(shell pkg-config --exists opencv4; echo $$?)", "0") - OPENCV_LIB = opencv4 - else - OPENCV_LIB = opencv - endif - CFLAGS += $(shell pkg-config --cflags $(OPENCV_LIB)) - LDFLAGS += $(shell pkg-config --libs-only-L $(OPENCV_LIB)) - LDFLAGS += $(filter -lopencv_imgcodecs -lopencv_highgui, $(shell pkg-config --libs-only-l $(OPENCV_LIB))) - endif - LDFLAGS += -lopencv_imgproc -lopencv_core - BIN += bin/im2rec -else - CFLAGS += -DMXNET_USE_OPENCV=0 -endif - -ifeq ($(USE_OPENMP), 1) - CFLAGS += -fopenmp - CFLAGS += -DMXNET_USE_OPENMP=1 -endif - -ifeq ($(USE_NNPACK), 1) - CFLAGS += -DMXNET_USE_NNPACK=1 - LDFLAGS += -lnnpack -endif - -ifeq ($(USE_OPERATOR_TUNING), 1) - CFLAGS += -DMXNET_USE_OPERATOR_TUNING=1 -endif - -ifeq ($(USE_INT64_TENSOR_SIZE), 1) - CFLAGS += -DMSHADOW_INT64_TENSOR_SIZE=1 -else - CFLAGS += -DMSHADOW_INT64_TENSOR_SIZE=0 -endif -# verify existence of separate lapack library when using blas/openblas/atlas -# switch off lapack support in case it can't be found -# issue covered with this -# - for Ubuntu 14.04 or lower, lapack is not automatically installed with openblas -# - for Ubuntu, installing atlas will not automatically install the atlas provided lapack library -# - for rhel7.2, try installing the package `lapack-static` via yum will dismiss this warning. -# silently switching lapack off instead of letting the build fail because of backward compatibility -ifeq ($(USE_LAPACK), 1) -ifeq ($(USE_BLAS),$(filter $(USE_BLAS),blas openblas atlas mkl)) -ifeq (,$(wildcard $(USE_LAPACK_PATH)/liblapack.a)) -ifeq (,$(wildcard $(USE_LAPACK_PATH)/liblapack.so)) -ifeq (,$(wildcard $(USE_LAPACK_PATH)/liblapack.dylib)) -ifeq (,$(wildcard /lib/liblapack.a)) -ifeq (,$(wildcard /lib/liblapack.so)) -ifeq (,$(wildcard /usr/lib/liblapack.a)) -ifeq (,$(wildcard /usr/lib/liblapack.so)) -ifeq (,$(wildcard /usr/lib/x86_64-linux-gnu/liblapack.a)) -ifeq (,$(wildcard /usr/lib/x86_64-linux-gnu/liblapack.so)) -ifeq (,$(wildcard /usr/lib/liblapack.dylib)) -ifeq (,$(wildcard /usr/lib64/liblapack.a)) -ifeq (,$(wildcard /usr/lib64/liblapack.so)) - USE_LAPACK = 0 - $(warning "USE_LAPACK disabled because libraries were not found") -endif -endif -endif -endif -endif -endif -endif -endif -endif -endif -endif -endif -endif -endif - -# lapack settings. -ifeq ($(USE_LAPACK), 1) - ifneq ($(USE_LAPACK_PATH), ) - LDFLAGS += -L$(USE_LAPACK_PATH) - endif - ifeq ($(USE_BLAS),$(filter $(USE_BLAS),blas openblas atlas mkl)) - LDFLAGS += -llapack - endif - CFLAGS += -DMXNET_USE_LAPACK -endif - -ifeq ($(USE_CUDNN), 1) - CFLAGS += -DMSHADOW_USE_CUDNN=1 - LDFLAGS += -lcudnn -endif - -ifeq ($(USE_BLAS), openblas) - CFLAGS += -DMXNET_USE_BLAS_OPEN=1 -else ifeq ($(USE_BLAS), atlas) - CFLAGS += -DMXNET_USE_BLAS_ATLAS=1 -else ifeq ($(USE_BLAS), mkl) - CFLAGS += -DMXNET_USE_BLAS_MKL=1 -else ifeq ($(USE_BLAS), apple) - CFLAGS += -DMXNET_USE_BLAS_APPLE=1 -endif - -# whether to use F16C instruction set extension for fast fp16 compute on CPU -# if cross compiling you may want to explicitly turn it off if target system does not support it -ifndef USE_F16C - ifneq ($(OS),Windows_NT) - detected_OS := $(shell uname -s) - ifeq ($(detected_OS),Darwin) - F16C_SUPP = $(shell sysctl -a | grep machdep.cpu.features | grep F16C) - endif - ifeq ($(detected_OS),Linux) - F16C_SUPP = $(shell cat /proc/cpuinfo | grep flags | grep f16c) - endif - ifneq ($(strip $(F16C_SUPP)),) - USE_F16C=1 - else - USE_F16C=0 - endif - endif - # if OS is Windows, check if your processor and compiler support F16C architecture. - # One way to check if processor supports it is to download the tool - # https://docs.microsoft.com/en-us/sysinternals/downloads/coreinfo. - # If coreinfo -c shows F16C and compiler supports it, - # then you can set USE_F16C=1 explicitly to leverage that capability" -endif - -# gperftools malloc library (tcmalloc) -ifeq ($(USE_GPERFTOOLS), 1) -FIND_LIBFILEEXT=so -ifeq ($(USE_GPERFTOOLS_STATIC), 1) -FIND_LIBFILEEXT=a -endif -FIND_LIBFILE=$(wildcard $(USE_GPERFTOOLS_PATH)/libtcmalloc.$(FIND_LIBFILEEXT)) -ifeq (,$(FIND_LIBFILE)) -FIND_LIBFILE=$(wildcard /lib/libtcmalloc.$(FIND_LIBFILEEXT)) -ifeq (,$(FIND_LIBFILE)) -FIND_LIBFILE=$(wildcard /usr/lib/libtcmalloc.$(FIND_LIBFILEEXT)) -ifeq (,$(FIND_LIBFILE)) -FIND_LIBFILE=$(wildcard /usr/local/lib/libtcmalloc.$(FIND_LIBFILEEXT)) -ifeq (,$(FIND_LIBFILE)) -FIND_LIBFILE=$(wildcard /usr/lib64/libtcmalloc.$(FIND_LIBFILEEXT)) -ifeq (,$(FIND_LIBFILE)) - USE_GPERFTOOLS=0 -endif -endif -endif -endif -endif -ifeq ($(USE_GPERFTOOLS), 1) - CFLAGS += -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free - LDFLAGS += $(FIND_LIBFILE) -endif - -# jemalloc malloc library (if not using gperftools) -else -ifeq ($(USE_JEMALLOC), 1) -FIND_LIBFILEEXT=so -ifeq ($(USE_JEMALLOC_STATIC), 1) -FIND_LIBFILEEXT=a -endif -FIND_LIBFILE=$(wildcard $(USE_JEMALLOC_PATH)/libjemalloc.$(FIND_LIBFILEEXT)) -ifeq (,$(FIND_LIBFILE)) -FIND_LIBFILE=$(wildcard /lib/libjemalloc.$(FIND_LIBFILEEXT)) -ifeq (,$(FIND_LIBFILE)) -FIND_LIBFILE=$(wildcard /usr/lib/libjemalloc.$(FIND_LIBFILEEXT)) -ifeq (,$(FIND_LIBFILE)) -FIND_LIBFILE=$(wildcard /usr/local/lib/libjemalloc.$(FIND_LIBFILEEXT)) -ifeq (,$(FIND_LIBFILE)) -FIND_LIBFILE=$(wildcard /usr/lib/x86_64-linux-gnu/libjemalloc.$(FIND_LIBFILEEXT)) -ifeq (,$(FIND_LIBFILE)) -FIND_LIBFILE=$(wildcard /usr/lib64/libjemalloc.$(FIND_LIBFILEEXT)) -ifeq (,$(FIND_LIBFILE)) - USE_JEMALLOC=0 -endif -endif -endif -endif -endif -endif -ifeq ($(USE_JEMALLOC), 1) - CFLAGS += -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc \ - -fno-builtin-free -DUSE_JEMALLOC - LDFLAGS += $(FIND_LIBFILE) -endif -endif -endif - -# If not using tcmalloc or jemalloc, print a warning (user should consider installing) -ifneq ($(USE_GPERFTOOLS), 1) -ifneq ($(USE_JEMALLOC), 1) -$(warning WARNING: Significant performance increases can be achieved by installing and \ -enabling gperftools or jemalloc development packages) -endif -endif - -ifeq ($(USE_THREADED_ENGINE), 1) - CFLAGS += -DMXNET_USE_THREADED_ENGINE -endif - -ifneq ($(ADD_CFLAGS), NONE) - CFLAGS += $(ADD_CFLAGS) -endif - -ifneq ($(ADD_LDFLAGS), NONE) - LDFLAGS += $(ADD_LDFLAGS) -endif - -ifeq ($(NVCC), NONE) - # If NVCC has not been manually defined, use the CUDA_PATH bin dir. - ifneq ($(USE_CUDA_PATH), NONE) - NVCC=$(USE_CUDA_PATH)/bin/nvcc - endif -endif - -# Guard against displaying nvcc info messages to users not using CUDA. -ifeq ($(USE_CUDA), 1) - # Get AR version, compare with expected ar version and find bigger and smaller version of the two - AR_VERSION := $(shell ar --version | egrep -o "([0-9]{1,}\.)+[0-9]{1,}") - EXPECTED_AR_VERSION := $(shell echo "2.27") - LARGE_VERSION := $(shell printf '%s\n' "$(AR_VERSION)" "$(EXPECTED_AR_VERSION)" | sort -V | tail -n 1) - SMALL_VERSION := $(shell printf '%s\n' "$(AR_VERSION)" "$(EXPECTED_AR_VERSION)" | sort -V | head -n 1) - - # If NVCC is not at the location specified, use CUDA_PATH instead. - ifeq ("$(wildcard $(NVCC))","") - ifneq ($(USE_CUDA_PATH), NONE) - NVCC=$(USE_CUDA_PATH)/bin/nvcc - -# if larger version is the expected one and larger != smaller -# this means ar version is less than expected version and user needs to be warned -ifeq ($(LARGE_VERSION), $(EXPECTED_AR_VERSION)) -ifneq ($(LARGE_VERSION), $(SMALL_VERSION)) -define n - - -endef - -$(warning WARNING: Archive utility: ar version being used is less than 2.27.0. $n \ - Note that with USE_CUDA=1 flag and USE_CUDNN=1 this is known to cause problems. $n \ - For more info see: https://github.com/apache/incubator-mxnet/issues/15084) -$(shell sleep 5) -endif -endif -$(info INFO: nvcc was not found on your path) -$(info INFO: Using $(NVCC) as nvcc path) - else -$(warning WARNING: could not find nvcc compiler, the specified path was: $(NVCC)) - endif - endif -endif - -# Sets 'CUDA_ARCH', which determines the GPU architectures supported -# by the compiled kernels. Users can edit the KNOWN_CUDA_ARCHS list below -# to remove archs they don't wish to support to speed compilation, or they can -# pre-set the CUDA_ARCH args in config.mk to a non-null value for full control. -# -# For archs in this list, nvcc will create a fat-binary that will include -# the binaries (SASS) for all architectures supported by the installed version -# of the cuda toolkit, plus the assembly (PTX) for the most recent such architecture. -# If these kernels are then run on a newer-architecture GPU, the binary will -# be JIT-compiled by the updated driver from the included PTX. -ifeq ($(USE_CUDA), 1) -ifeq ($(CUDA_ARCH),) - KNOWN_CUDA_ARCHS := 30 35 50 52 60 61 70 75 - # Run nvcc on a zero-length file to check architecture-level support. - # Create args to include SASS in the fat binary for supported levels. - CUDA_ARCH := $(foreach arch,$(KNOWN_CUDA_ARCHS), \ - $(shell $(NVCC) -arch=sm_$(arch) -E --x cu /dev/null >/dev/null 2>&1 && \ - echo -gencode arch=compute_$(arch),code=sm_$(arch))) - # Convert a trailing "code=sm_NN" to "code=[sm_NN,compute_NN]" to also - # include the PTX of the most recent arch in the fat-binaries for - # forward compatibility with newer GPUs. - CUDA_ARCH := $(shell echo $(CUDA_ARCH) | sed 's/sm_\([0-9]*\)$$/[sm_\1,compute_\1]/') - # Add fat binary compression if supported by nvcc. - COMPRESS := --fatbin-options -compress-all - CUDA_ARCH += $(shell $(NVCC) -cuda $(COMPRESS) --x cu /dev/null -o /dev/null >/dev/null 2>&1 && \ - echo $(COMPRESS)) -endif -$(info Running CUDA_ARCH: $(CUDA_ARCH)) -endif - -# ps-lite -PS_PATH=$(ROOTDIR)/3rdparty/ps-lite -DEPS_PATH=$(shell pwd)/deps -include $(PS_PATH)/make/ps.mk -ifeq ($(USE_DIST_KVSTORE), 1) - CFLAGS += -DMXNET_USE_DIST_KVSTORE -I$(PS_PATH)/include -I$(DEPS_PATH)/include - LIB_DEP += $(PS_PATH)/build/libps.a - LDFLAGS += $(PS_LDFLAGS_A) -endif - -.PHONY: clean all extra-packages test lint clean_all roxygen\ - cython3 cython cyclean - -all: lib/libmxnet.a lib/libmxnet.so $(BIN) extra-packages extension_libs - -SRC = $(wildcard src/*/*/*/*/*.cc src/*/*/*/*.cc src/*/*/*.cc src/*/*.cc src/*.cc) -OBJ = $(patsubst %.cc, build/%.o, $(SRC)) -CUSRC = $(wildcard src/*/*/*/*.cu src/*/*/*/*.cu src/*/*/*.cu src/*/*.cu src/*.cu) -CUOBJ = $(patsubst %.cu, build/%_gpu.o, $(CUSRC)) - -ifeq ($(USE_TVM_OP), 1) -LIB_DEP += lib/libtvm_runtime.so lib/libtvmop.so -CFLAGS += -I$(TVM_PATH)/include -DMXNET_USE_TVM_OP=1 -LDFLAGS += -L$(ROOTDIR)/lib -ltvm_runtime -Wl,-rpath,'$${ORIGIN}' - -TVM_USE_CUDA := OFF -ifeq ($(USE_CUDA), 1) - TVM_USE_CUDA := ON - ifneq ($(USE_CUDA_PATH), NONE) - TVM_USE_CUDA := $(USE_CUDA_PATH) - endif -endif -endif - -# extra operators -ifneq ($(EXTRA_OPERATORS),) - EXTRA_SRC = $(wildcard $(patsubst %, %/*.cc, $(EXTRA_OPERATORS)) $(patsubst %, %/*/*.cc, $(EXTRA_OPERATORS))) - EXTRA_OBJ = $(patsubst %.cc, %.o, $(EXTRA_SRC)) - EXTRA_CUSRC = $(wildcard $(patsubst %, %/*.cu, $(EXTRA_OPERATORS)) $(patsubst %, %/*/*.cu, $(EXTRA_OPERATORS))) - EXTRA_CUOBJ = $(patsubst %.cu, %_gpu.o, $(EXTRA_CUSRC)) -else - EXTRA_SRC = - EXTRA_OBJ = - EXTRA_CUSRC = - EXTRA_CUOBJ = -endif - -# plugin -PLUGIN_OBJ = -PLUGIN_CUOBJ = -include $(MXNET_PLUGINS) - -ifneq ($(UNAME_S), Windows) - ifeq ($(UNAME_S), Darwin) - WHOLE_ARCH= -all_load - NO_WHOLE_ARCH= -noall_load - else - WHOLE_ARCH= --whole-archive - NO_WHOLE_ARCH= --no-whole-archive - endif -endif - -# all dep -LIB_DEP += $(DMLC_CORE)/libdmlc.a $(NNVM_PATH)/lib/libnnvm.a -ALL_DEP = $(OBJ) $(EXTRA_OBJ) $(PLUGIN_OBJ) $(LIB_DEP) - -ifeq ($(USE_CUDA), 1) - CFLAGS += -I$(ROOTDIR)/3rdparty/nvidia_cub - ALL_DEP += $(CUOBJ) $(EXTRA_CUOBJ) $(PLUGIN_CUOBJ) - LDFLAGS += -lcufft - ifeq ($(ENABLE_CUDA_RTC), 1) - LDFLAGS += -lcuda -lnvrtc - CFLAGS += -DMXNET_ENABLE_CUDA_RTC=1 - endif - # Make sure to add stubs as fallback in order to be able to build - # without full CUDA install (especially if run without nvidia-docker) - LDFLAGS += -L/usr/local/cuda/lib64/stubs - ifeq ($(USE_NVML), 1) - LDFLAGS += -lnvidia-ml - CFLAGS += -DMXNET_USE_NVML=1 - else - CFLAGS += -DMXNET_USE_NVML=0 - endif - ifeq ($(USE_NCCL), 1) - ifneq ($(USE_NCCL_PATH), NONE) - CFLAGS += -I$(USE_NCCL_PATH)/include - LDFLAGS += -L$(USE_NCCL_PATH)/lib - endif - ifdef USE_SYSTEM_CUDA - LDFLAGS += -lnccl_static - else - LDFLAGS += -lnccl - endif - CFLAGS += -DMXNET_USE_NCCL=1 - else - CFLAGS += -DMXNET_USE_NCCL=0 - endif -else - CFLAGS += -DMXNET_USE_NVML=0 - CFLAGS += -DMXNET_USE_NCCL=0 -endif - -ifeq ($(USE_LIBJPEG_TURBO), 1) - ifneq ($(USE_LIBJPEG_TURBO_PATH), NONE) - CFLAGS += -I$(USE_LIBJPEG_TURBO_PATH)/include - LDFLAGS += -L$(USE_LIBJPEG_TURBO_PATH)/lib - endif - LDFLAGS += -lturbojpeg - CFLAGS += -DMXNET_USE_LIBJPEG_TURBO=1 -else - CFLAGS += -DMXNET_USE_LIBJPEG_TURBO=0 -endif - -ifeq ($(CI), 1) - MAVEN_ARGS := -B -endif - -# For quick compile test, used smaller subset -ALLX_DEP= $(ALL_DEP) - -build/src/%.o: src/%.cc | mkldnn - @mkdir -p $(@D) - $(CXX) -std=c++17 -c $(CFLAGS) -MMD -c $< -o $@ - -build/src/%_gpu.o: src/%.cu | mkldnn - @mkdir -p $(@D) - $(NVCC) $(NVCCFLAGS) $(CUDA_ARCH) -Xcompiler "$(CFLAGS)" --generate-dependencies -MT build/src/$*_gpu.o $< >build/src/$*_gpu.d - $(NVCC) -c -o $@ $(NVCCFLAGS) $(CUDA_ARCH) -Xcompiler "$(CFLAGS)" $< - -# A nvcc bug cause it to generate "generic/xxx.h" dependencies from torch headers. -# Use CXX to generate dependency instead. -build/plugin/%_gpu.o: plugin/%.cu - @mkdir -p $(@D) - $(CXX) -std=c++17 $(CFLAGS) -MM -MT build/plugin/$*_gpu.o $< >build/plugin/$*_gpu.d - $(NVCC) -c -o $@ $(NVCCFLAGS) $(CUDA_ARCH) -Xcompiler "$(CFLAGS)" $< - -build/plugin/%.o: plugin/%.cc | mkldnn - @mkdir -p $(@D) - $(CXX) -std=c++17 -c $(CFLAGS) -MMD -c $< -o $@ - -%_gpu.o: %.cu - @mkdir -p $(@D) - $(NVCC) $(NVCCFLAGS) $(CUDA_ARCH) -Xcompiler "$(CFLAGS) -Isrc/operator" --generate-dependencies -MT $*_gpu.o $< >$*_gpu.d - $(NVCC) -c -o $@ $(NVCCFLAGS) $(CUDA_ARCH) -Xcompiler "$(CFLAGS) -Isrc/operator" $< - -%.o: %.cc $(CORE_INC) - @mkdir -p $(@D) - $(CXX) -std=c++17 -c $(CFLAGS) -MMD -Isrc/operator -c $< -o $@ - -# Set install path for libmxnet.so on Mac OS -ifeq ($(UNAME_S), Darwin) - LDFLAGS += -Wl,-install_name,@rpath/libmxnet.so -endif - -# NOTE: to statically link libmxnet.a we need the option -# --Wl,--whole-archive -lmxnet --Wl,--no-whole-archive -lib/libmxnet.a: $(ALLX_DEP) - @mkdir -p $(@D) - ar crv $@ $(filter %.o, $?) - -lib/libmxnet.so: $(ALLX_DEP) - @mkdir -p $(@D) - $(CXX) $(CFLAGS) -shared -o $@ $(filter-out %libnnvm.a, $(filter %.o %.a, $^)) $(LDFLAGS) \ - -Wl,${WHOLE_ARCH} $(filter %libnnvm.a, $^) -Wl,${NO_WHOLE_ARCH} - -$(PS_PATH)/build/libps.a: PSLITE - -PSLITE: - $(MAKE) CXX="$(CXX)" DEPS_PATH="$(DEPS_PATH)" -C $(PS_PATH) ps - -$(DMLC_CORE)/libdmlc.a: DMLCCORE - -DMLCCORE: - + cd $(DMLC_CORE); $(MAKE) libdmlc.a USE_SSE=$(USE_SSE) config=$(ROOTDIR)/$(config); cd $(ROOTDIR) - -lib/libtvm_runtime.so: - echo "Compile TVM" - @mkdir -p $(@D) - [ -e $(LLVM_PATH)/bin/llvm-config ] || sh $(ROOTDIR)/contrib/tvmop/prepare_tvm.sh; \ - cd $(TVM_PATH)/build; \ - cmake -DUSE_LLVM="$(LLVM_PATH)/bin/llvm-config" \ - -DUSE_SORT=OFF -DUSE_CUDA=$(TVM_USE_CUDA) -DUSE_CUDNN=OFF -DUSE_OPENMP=ON ..; \ - $(MAKE) VERBOSE=1; \ - mkdir -p $(ROOTDIR)/lib; \ - cp $(TVM_PATH)/build/libtvm_runtime.so $(ROOTDIR)/lib/libtvm_runtime.so; \ - ls $(ROOTDIR)/lib; \ - cd $(ROOTDIR) - -TVM_OP_COMPILE_OPTIONS = -o $(ROOTDIR)/lib --config $(ROOTDIR)/lib/tvmop.conf -ifneq ($(CUDA_ARCH),) - TVM_OP_COMPILE_OPTIONS += --cuda-arch "$(CUDA_ARCH)" -endif -lib/libtvmop.so: lib/libtvm_runtime.so $(wildcard contrib/tvmop/*/*.py contrib/tvmop/*.py) - echo "Compile TVM operators" - @mkdir -p $(@D) - PYTHONPATH=$(TVM_PATH)/python:$(TVM_PATH)/topi/python:$(ROOTDIR)/contrib \ - LD_LIBRARY_PATH=$(ROOTDIR)/lib \ - python3 $(ROOTDIR)/contrib/tvmop/compile.py $(TVM_OP_COMPILE_OPTIONS) - -NNVM_INC = $(wildcard $(NNVM_PATH)/include/*/*.h) -NNVM_SRC = $(wildcard $(NNVM_PATH)/src/*/*/*.cc $(NNVM_PATH)/src/*/*.cc $(NNVM_PATH)/src/*.cc) -$(NNVM_PATH)/lib/libnnvm.a: $(NNVM_INC) $(NNVM_SRC) - + cd $(NNVM_PATH); $(MAKE) lib/libnnvm.a DMLC_CORE_PATH=$(DMLC_CORE); cd $(ROOTDIR) - -bin/im2rec: tools/im2rec.cc $(ALLX_DEP) - -$(BIN) : - @mkdir -p $(@D) - $(CXX) $(CFLAGS) -std=c++17 -o $@ $(filter %.cpp %.o %.c %.a %.cc, $^) $(LDFLAGS) - -include mkldnn.mk -include tests/cpp/unittest.mk - -extra-packages: $(EXTRA_PACKAGES) - -test: $(TEST) - -lint: cpplint pylint - -cpplint: - 3rdparty/dmlc-core/scripts/lint.py mxnet cpp include src plugin tests \ - --exclude_path src/operator/contrib/ctc_include include/mkldnn - -pylint: - python3 -m pylint --rcfile=$(ROOTDIR)/ci/other/pylintrc --ignore-patterns=".*\.so$$,.*\.dll$$,.*\.dylib$$" python/mxnet - -# MXNet extension dynamically loading libraries -EXT_LIBS = build/libcustomop_lib.so build/libtransposecsr_lib.so build/libtransposerowsp_lib.so build/libsubgraph_lib.so build/libpass_lib.so -ifeq ($(USE_CUDA), 1) - EXT_LIBS += build/libcustomop_gpu_lib.so -endif -extension_libs: $(EXT_LIBS) - -build/libcustomop_lib.so: - @mkdir -p $(@D) - $(CXX) -shared -fPIC -std=c++11 example/extensions/lib_custom_op/gemm_lib.cc -o /dev/null -I include/mxnet - $(CXX) -shared -fPIC -std=c++17 example/extensions/lib_custom_op/gemm_lib.cc -o $@ -I include/mxnet -build/libtransposecsr_lib.so: - @mkdir -p $(@D) - $(CXX) -shared -fPIC -std=c++11 example/extensions/lib_custom_op/transposecsr_lib.cc -o /dev/null -I include/mxnet - $(CXX) -shared -fPIC -std=c++17 example/extensions/lib_custom_op/transposecsr_lib.cc -o $@ -I include/mxnet -build/libtransposerowsp_lib.so: - @mkdir -p $(@D) - $(CXX) -shared -fPIC -std=c++11 example/extensions/lib_custom_op/transposerowsp_lib.cc -o /dev/null -I include/mxnet - $(CXX) -shared -fPIC -std=c++17 example/extensions/lib_custom_op/transposerowsp_lib.cc -o $@ -I include/mxnet -build/libcustomop_gpu_lib.so: - @mkdir -p $(@D) - $(NVCC) -shared -std=c++11 -Xcompiler -fPIC example/extensions/lib_custom_op/relu_lib.cu -o /dev/null -I include/mxnet - $(NVCC) -shared -std=c++14 -Xcompiler -fPIC example/extensions/lib_custom_op/relu_lib.cu -o $@ -I include/mxnet -build/libsubgraph_lib.so: - @mkdir -p $(@D) - $(CXX) -shared -fPIC -std=c++11 example/extensions/lib_subgraph/subgraph_lib.cc -o /dev/null -I include/mxnet - $(CXX) -shared -fPIC -std=c++17 example/extensions/lib_subgraph/subgraph_lib.cc -o $@ -I include/mxnet -build/libpass_lib.so: - @mkdir -p $(@D) - $(CXX) -shared -fPIC -std=c++11 example/extensions/lib_pass/pass_lib.cc -o /dev/null -I include/mxnet - $(CXX) -shared -fPIC -std=c++17 example/extensions/lib_pass/pass_lib.cc -o $@ -I include/mxnet - -# Cython build -cython: - cd python; $(PYTHON) setup.py build_ext --inplace --with-cython - -cython3: - cd python; python3 setup.py build_ext --inplace --with-cython - -cyclean: - rm -rf python/mxnet/*/*.so python/mxnet/*/*.cpp - -build/rat/apache-rat-0.13/apache-rat-0.13.jar: - mkdir -p build/rat - cd build/rat; \ - wget http://mirror.metrocast.net/apache//creadur/apache-rat-0.13/apache-rat-0.13-bin.zip; \ - unzip apache-rat-0.13-bin.zip; - -ratcheck: build/rat/apache-rat-0.13/apache-rat-0.13.jar - exec 5>&1; \ - RAT_JAR=build/rat/apache-rat-0.13/apache-rat-0.13.jar; \ - OUTPUT=$(java -jar $(RAT_JAR) -E tests/nightly/apache_rat_license_check/rat-excludes -d .|tee >(cat - >&5)); \ - ERROR_MESSAGE="Printing headers for text files without a valid license header"; \ - echo "-------Process The Output-------"; \ - if [[ $OUTPUT =~ $ERROR_MESSAGE ]]; then \ - echo "ERROR: RAT Check detected files with unknown licenses. Please fix and run test again!"; \ - exit 1; \ - else \ - echo "SUCCESS: There are no files with an Unknown License."; \ - fi - - -ifneq ($(EXTRA_OPERATORS),) -clean: cyclean $(EXTRA_PACKAGES_CLEAN) - $(RM) -r build lib bin deps *~ */*~ */*/*~ */*/*/*~ - (cd scala-package && mvn clean) || true - cd $(DMLC_CORE); $(MAKE) clean; cd - - cd $(PS_PATH); $(MAKE) clean; cd - - cd $(NNVM_PATH); $(MAKE) clean; cd - - cd $(TVM_PATH); $(MAKE) clean; cd - - $(RM) -r $(patsubst %, %/*.d, $(EXTRA_OPERATORS)) $(patsubst %, %/*/*.d, $(EXTRA_OPERATORS)) - $(RM) -r $(patsubst %, %/*.o, $(EXTRA_OPERATORS)) $(patsubst %, %/*/*.o, $(EXTRA_OPERATORS)) -else -clean: mkldnn_clean cyclean testclean $(EXTRA_PACKAGES_CLEAN) - $(RM) -r build lib bin *~ */*~ */*/*~ */*/*/*~ - (cd scala-package && mvn clean) || true - cd $(DMLC_CORE); $(MAKE) clean; cd - - cd $(PS_PATH); $(MAKE) clean; cd - - cd $(NNVM_PATH); $(MAKE) clean; cd - - cd $(TVM_PATH); $(MAKE) clean; cd - -endif - -clean_all: clean - --include build/*.d --include build/*/*.d --include build/*/*/*.d --include build/*/*/*/*.d -ifneq ($(EXTRA_OPERATORS),) - -include $(patsubst %, %/*.d, $(EXTRA_OPERATORS)) $(patsubst %, %/*/*.d, $(EXTRA_OPERATORS)) -endif diff --git a/ci/dev_menu.py b/ci/dev_menu.py index c471302c76d7..cd2aa8d46e1e 100644 --- a/ci/dev_menu.py +++ b/ci/dev_menu.py @@ -122,7 +122,7 @@ def provision_virtualenv(venv_path=DEFAULT_PYENV): "pytest -v tests/python/unittest/" ), ('[Docker] Build the MXNet binary - outputs to "lib/"', - "ci/build.py --platform ubuntu_cpu_lite /work/runtime_functions.sh build_ubuntu_cpu_docs"), + "ci/build.py --platform ubuntu_cpu /work/runtime_functions.sh build_ubuntu_cpu_docs"), ('[Docker] Build the Jekyll website - outputs to "docs/static_site/build/html/"', "ci/build.py --platform ubuntu_cpu_jekyll /work/runtime_functions.sh build_jekyll_docs"), ('[Docker] Build the Python API docs - outputs to "docs/python_docs/python/build/_build/html/"', diff --git a/ci/docker/Dockerfile.build.ubuntu_cpu_lite b/ci/docker/Dockerfile.build.ubuntu_cpu_lite deleted file mode 100644 index ca5618ac1cd7..000000000000 --- a/ci/docker/Dockerfile.build.ubuntu_cpu_lite +++ /dev/null @@ -1,45 +0,0 @@ -# -*- mode: dockerfile -*- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# -# Dockerfile to build and run MXNet on Ubuntu 16.04 for CPU - -FROM ubuntu:16.04 - -WORKDIR /work/deps - -COPY install/ubuntu_core.sh /work/ -RUN /work/ubuntu_core.sh - -COPY install/deb_ubuntu_ccache.sh /work/ -RUN /work/deb_ubuntu_ccache.sh - -COPY install/ubuntu_clang.sh /work/ -RUN /work/ubuntu_clang.sh - -COPY install/ubuntu_gcc8.sh /work/ -RUN /work/ubuntu_gcc8.sh - -# Always last -ARG USER_ID=0 -ARG GROUP_ID=0 -COPY install/ubuntu_adduser.sh /work/ -RUN /work/ubuntu_adduser.sh - -COPY runtime_functions.sh /work/ - -WORKDIR /work/mxnet \ No newline at end of file diff --git a/ci/docker/runtime_functions.sh b/ci/docker/runtime_functions.sh index 70d995fef002..2f0bf777c464 100755 --- a/ci/docker/runtime_functions.sh +++ b/ci/docker/runtime_functions.sh @@ -321,21 +321,6 @@ build_centos7_cpu() { ninja } -build_centos7_cpu_make() { - set -ex - cd /work/mxnet - source /opt/rh/devtoolset-7/enable - make \ - DEV=1 \ - USE_LAPACK=1 \ - USE_LAPACK_PATH=/usr/lib64/liblapack.so \ - USE_BLAS=openblas \ - USE_MKLDNN=0 \ - USE_DIST_KVSTORE=1 \ - USE_SIGNAL_HANDLER=1 \ - -j$(nproc) -} - build_centos7_mkldnn() { set -ex cd /work/build @@ -384,24 +369,6 @@ build_ubuntu_cpu_openblas() { ninja } -build_ubuntu_cpu_openblas_make() { - set -ex - export CC=gcc-7 - export CXX=g++-7 - build_ccache_wrappers - make \ - DEV=1 \ - USE_TVM_OP=1 \ - USE_CPP_PACKAGE=1 \ - USE_BLAS=openblas \ - USE_MKLDNN=0 \ - USE_DIST_KVSTORE=1 \ - USE_LIBJPEG_TURBO=1 \ - USE_SIGNAL_HANDLER=1 \ - -j$(nproc) - make cython PYTHON=python3 -} - build_ubuntu_cpu_mkl() { set -ex cd /work/build @@ -589,22 +556,6 @@ build_ubuntu_cpu_clang100_mkldnn() { ninja } -build_ubuntu_cpu_mkldnn_make() { - set -ex - - export CC=gcc-7 - export CXX=g++-7 - build_ccache_wrappers - - make \ - DEV=1 \ - USE_CPP_PACKAGE=1 \ - USE_TVM_OP=1 \ - USE_BLAS=openblas \ - USE_SIGNAL_HANDLER=1 \ - -j$(nproc) -} - build_ubuntu_cpu_mkldnn() { set -ex cd /work/build @@ -754,45 +705,6 @@ build_ubuntu_gpu_cuda101_cudnn7_debug() { ninja } -build_ubuntu_gpu_cuda101_cudnn7_make() { - set -ex - export CC=gcc-7 - export CXX=g++-7 - build_ccache_wrappers - make \ - USE_BLAS=openblas \ - USE_MKLDNN=0 \ - USE_CUDA=1 \ - USE_CUDA_PATH=/usr/local/cuda \ - USE_CUDNN=1 \ - USE_CPP_PACKAGE=1 \ - USE_DIST_KVSTORE=1 \ - CUDA_ARCH="$CI_CUDA_COMPUTE_CAPABILITIES" \ - USE_SIGNAL_HANDLER=1 \ - -j$(nproc) - make cython PYTHON=python3 -} - -build_ubuntu_gpu_cuda101_cudnn7_mkldnn_cpp_test() { - set -ex - export CC=gcc-7 - export CXX=g++-7 - build_ccache_wrappers - make \ - USE_BLAS=openblas \ - USE_MKLDNN=1 \ - USE_CUDA=1 \ - USE_CUDA_PATH=/usr/local/cuda \ - USE_CUDNN=1 \ - USE_CPP_PACKAGE=1 \ - USE_DIST_KVSTORE=1 \ - CUDA_ARCH="$CI_CUDA_COMPUTE_CAPABILITIES" \ - USE_SIGNAL_HANDLER=1 \ - -j$(nproc) - make test USE_CPP_PACKAGE=1 -j$(nproc) - make cython PYTHON=python3 -} - build_ubuntu_gpu_cmake() { set -ex cd /work/build @@ -878,8 +790,8 @@ build_ubuntu_blc() { sanity_check() { set -ex tools/license_header.py check - make cpplint - make pylint + 3rdparty/dmlc-core/scripts/lint.py mxnet cpp include src plugin tests --exclude_path src/operator/contrib/ctc_include include/mkldnn + python3 -m pylint --rcfile=ci/other/pylintrc --ignore-patterns=".*\.so$$,.*\.dll$$,.*\.dylib$$" python/mxnet OMP_NUM_THREADS=$(expr $(nproc) / 4) pytest -n 4 tests/tutorials/test_sanity_tutorials.py } @@ -1257,19 +1169,7 @@ build_docs_setup() { } build_ubuntu_cpu_docs() { - set -ex - export CC="gcc-7" - export CXX="g++-7" - build_ccache_wrappers - make \ - DEV=1 \ - USE_CPP_PACKAGE=1 \ - USE_BLAS=openblas \ - USE_MKLDNN=0 \ - USE_DIST_KVSTORE=1 \ - USE_LIBJPEG_TURBO=1 \ - USE_SIGNAL_HANDLER=1 \ - -j$(nproc) + build_ubuntu_cpu_openblas } @@ -1399,8 +1299,6 @@ build_static_libmxnet() { pushd . source /opt/rh/devtoolset-7/enable source /opt/rh/rh-python36/enable - export USE_SYSTEM_CUDA=1 - export CMAKE_STATICBUILD=1 local mxnet_variant=${1:?"This function requires a python command as the first argument"} source tools/staticbuild/build.sh ${mxnet_variant} popd @@ -1474,7 +1372,6 @@ build_static_python_cu92() { set -ex pushd . export mxnet_variant=cu92 - export USE_SYSTEM_CUDA=1 source /opt/rh/devtoolset-7/enable source /opt/rh/rh-python36/enable ./ci/publish/python/build.sh diff --git a/ci/jenkins/Jenkins_steps.groovy b/ci/jenkins/Jenkins_steps.groovy index 4276035c1220..f247ccb54fd6 100644 --- a/ci/jenkins/Jenkins_steps.groovy +++ b/ci/jenkins/Jenkins_steps.groovy @@ -25,7 +25,6 @@ utils = load('ci/Jenkinsfile_utils.groovy') // mxnet libraries mx_lib = 'build/libmxnet.so, build/3rdparty/tvm/libtvm_runtime.so, build/libtvmop.so, build/tvmop.conf, build/libcustomop_lib.so, build/libcustomop_gpu_lib.so, build/libsubgraph_lib.so, build/3rdparty/openmp/runtime/src/libomp.so' mx_lib_cython = 'build/libmxnet.so, build/3rdparty/tvm/libtvm_runtime.so, build/libtvmop.so, build/tvmop.conf, build/libcustomop_lib.so, build/libcustomop_gpu_lib.so, build/libsubgraph_lib.so, python/mxnet/_cy3/*.so, build/3rdparty/openmp/runtime/src/libomp.so, python/mxnet/_ffi/_cy3/*.so' -mx_lib_make = 'lib/libmxnet.so, lib/libmxnet.a, lib/libtvm_runtime.so, lib/libtvmop.so, lib/tvmop.conf, build/libcustomop_lib.so, build/libcustomop_gpu_lib.so, build/libsubgraph_lib.so, 3rdparty/dmlc-core/libdmlc.a, 3rdparty/tvm/nnvm/lib/libnnvm.a' // mxnet cmake libraries, in cmake builds we do not produce a libnvvm static library by default. mx_cmake_lib = 'build/libmxnet.so, build/3rdparty/tvm/libtvm_runtime.so, build/libtvmop.so, build/tvmop.conf, build/tests/mxnet_unit_tests, build/3rdparty/openmp/runtime/src/libomp.so' @@ -34,11 +33,8 @@ mx_cmake_lib_cython = 'build/libmxnet.so, build/3rdparty/tvm/libtvm_runtime.so, // mxnet cmake libraries, in cmake builds we do not produce a libnvvm static library by default. mx_cmake_lib_debug = 'build/libmxnet.so, build/3rdparty/tvm/libtvm_runtime.so, build/libtvmop.so, build/tvmop.conf, build/libcustomop_lib.so, build/libcustomop_gpu_lib.so, build/libsubgraph_lib.so, build/tests/mxnet_unit_tests' mx_mkldnn_lib = 'build/libmxnet.so, build/3rdparty/tvm/libtvm_runtime.so, build/libtvmop.so, build/tvmop.conf, build/3rdparty/openmp/runtime/src/libomp.so, build/libcustomop_lib.so, build/libcustomop_gpu_lib.so, build/libsubgraph_lib.so' -mx_mkldnn_lib_make = 'lib/libmxnet.so, lib/libmxnet.a, lib/libtvm_runtime.so, lib/libtvmop.so, lib/tvmop.conf, build/libcustomop_lib.so, build/libcustomop_gpu_lib.so, build/libsubgraph_lib.so, 3rdparty/dmlc-core/libdmlc.a, 3rdparty/tvm/nnvm/lib/libnnvm.a' mx_tensorrt_lib = 'build/libmxnet.so, build/3rdparty/tvm/libtvm_runtime.so, build/libtvmop.so, build/tvmop.conf, build/3rdparty/openmp/runtime/src/libomp.so, lib/libnvonnxparser_runtime.so.0, lib/libnvonnxparser.so.0, lib/libonnx_proto.so, lib/libonnx.so' mx_lib_cpp_examples = 'build/libmxnet.so, build/3rdparty/tvm/libtvm_runtime.so, build/libtvmop.so, build/tvmop.conf, build/3rdparty/openmp/runtime/src/libomp.so, build/libcustomop_lib.so, build/libcustomop_gpu_lib.so, build/libsubgraph_lib.so, python/mxnet/_cy3/*.so, python/mxnet/_ffi/_cy3/*.so' -mx_lib_cpp_examples_make = 'lib/libmxnet.so, lib/libmxnet.a, lib/libtvm_runtime.so, lib/libtvmop.so, lib/tvmop.conf, build/libcustomop_lib.so, build/libcustomop_gpu_lib.so, build/libsubgraph_lib.so, 3rdparty/dmlc-core/libdmlc.a, 3rdparty/tvm/nnvm/lib/libnnvm.a, 3rdparty/ps-lite/build/libps.a, deps/lib/libprotobuf-lite.a, deps/lib/libzmq.a, python/mxnet/_cy3/*.so, python/mxnet/_ffi/_cy3/*.so' -mx_lib_cpp_capi_make = 'lib/libmxnet.so, lib/libmxnet.a, lib/libtvm_runtime.so, lib/libtvmop.so, lib/tvmop.conf, libsample_lib.so, lib/libmkldnn.so.1, lib/libmklml_intel.so, 3rdparty/dmlc-core/libdmlc.a, 3rdparty/tvm/nnvm/lib/libnnvm.a, 3rdparty/ps-lite/build/libps.a, deps/lib/libprotobuf-lite.a, deps/lib/libzmq.a, python/mxnet/_cy3/*.so, python/mxnet/_ffi/_cy3/*.so, build/tests/cpp/mxnet_unit_tests' mx_lib_cpp_examples_no_tvm_op = 'build/libmxnet.so, build/libcustomop_lib.so, build/libcustomop_gpu_lib.so, build/libsubgraph_lib.so, build/3rdparty/openmp/runtime/src/libomp.so, python/mxnet/_cy3/*.so, python/mxnet/_ffi/_cy3/*.so' mx_lib_cpp_examples_cpu = 'build/libmxnet.so, build/3rdparty/tvm/libtvm_runtime.so, build/libtvmop.so, build/tvmop.conf, build/3rdparty/openmp/runtime/src/libomp.so' mx_cd_lib = 'lib/libmxnet.so, licenses/*, lib/libgfortran.so.4, lib/libquadmath.so.0, lib/libopenblas.so.0, include/mkldnn/dnnl_version.h, include/mkldnn/dnnl_config.h' @@ -95,20 +91,6 @@ def compile_unix_cpu_openblas(lib_name) { }] } -def compile_unix_cpu_openblas_make(lib_name) { - return ['CPU: Openblas Makefile': { - node(NODE_LINUX_CPU) { - ws('workspace/build-cpu-openblas') { - timeout(time: max_time, unit: 'MINUTES') { - utils.init_git() - utils.docker_run('ubuntu_cpu', 'build_ubuntu_cpu_openblas_make', false) - utils.pack_lib(lib_name, mx_lib_make) - } - } - } - }] -} - def compile_unix_openblas_debug_cpu(lib_name) { return ['CPU: Openblas, cmake, debug': { node(NODE_LINUX_CPU) { @@ -192,20 +174,6 @@ def compile_unix_mkldnn_cpu(lib_name) { }] } -def compile_unix_mkldnn_cpu_make(lib_name) { - return ['CPU: MKLDNN Makefile': { - node(NODE_LINUX_CPU) { - ws('workspace/build-mkldnn-cpu') { - timeout(time: max_time, unit: 'MINUTES') { - utils.init_git() - utils.docker_run('ubuntu_cpu', 'build_ubuntu_cpu_mkldnn_make', false) - utils.pack_lib(lib_name, mx_mkldnn_lib_make) - } - } - } - }] -} - def compile_unix_mkldnn_mkl_cpu(lib_name) { return ['CPU: MKLDNN_MKL': { node(NODE_LINUX_CPU) { @@ -262,21 +230,6 @@ def compile_unix_full_gpu(lib_name) { }] } -def compile_unix_full_gpu_make(lib_name) { - return ['GPU: CUDA10.1+cuDNN7 Makefile': { - node(NODE_LINUX_CPU) { - ws('workspace/build-gpu') { - timeout(time: max_time, unit: 'MINUTES') { - utils.init_git() - utils.docker_run('ubuntu_build_cuda', 'build_ubuntu_gpu_cuda101_cudnn7_make', false) - utils.pack_lib(lib_name, mx_lib_cpp_examples_make) - } - } - } - }] -} - - def compile_unix_full_gpu_debug(lib_name) { return ['GPU: CUDA10.1+cuDNN7, debug': { node(NODE_LINUX_CPU) { @@ -291,20 +244,6 @@ def compile_unix_full_gpu_debug(lib_name) { }] } -def compile_unix_full_gpu_mkldnn_cpp_test(lib_name) { - return ['GPU: CUDA10.1+cuDNN7+MKLDNN+CPPTEST Makefile': { - node(NODE_LINUX_CPU) { - ws('workspace/build-gpu-mkldnn-cpp') { - timeout(time: max_time, unit: 'MINUTES') { - utils.init_git() - utils.docker_run('ubuntu_build_cuda', 'build_ubuntu_gpu_cuda101_cudnn7_mkldnn_cpp_test', false) - utils.pack_lib(lib_name, mx_lib_cpp_capi_make) - } - } - } - }] -} - def compile_unix_cmake_gpu(lib_name) { return ['GPU: CMake': { node(NODE_LINUX_CPU) { @@ -361,20 +300,6 @@ def compile_centos7_cpu(lib_name) { }] } -def compile_centos7_cpu_make(lib_name) { - return ['CPU: CentOS 7 Makefile': { - node(NODE_LINUX_CPU) { - ws('workspace/build-centos7-cpu') { - timeout(time: max_time, unit: 'MINUTES') { - utils.init_git() - utils.docker_run('centos7_cpu', 'build_centos7_cpu_make', false) - utils.pack_lib(lib_name, mx_lib_make) - } - } - } - }] -} - def compile_centos7_cpu_mkldnn() { return ['CPU: CentOS 7 MKLDNN': { node(NODE_LINUX_CPU) { @@ -897,7 +822,7 @@ def test_unix_onnx_cpu(lib_name) { node(NODE_LINUX_CPU) { ws('workspace/it-onnx-cpu') { timeout(time: max_time, unit: 'MINUTES') { - utils.unpack_and_init(lib_name, mx_lib_make) + utils.unpack_and_init(lib_name, mx_lib) utils.docker_run('ubuntu_cpu', 'integrationtest_ubuntu_cpu_onnx', false) utils.publish_test_coverage() } @@ -1126,8 +1051,8 @@ def compile_unix_lite(lib_name) { ws('workspace/docs') { timeout(time: max_time, unit: 'MINUTES') { utils.init_git() - utils.docker_run('ubuntu_cpu_lite', 'build_ubuntu_cpu_docs', false) - utils.pack_lib(lib_name, 'lib/libmxnet.so', false) + utils.docker_run('ubuntu_cpu', 'build_ubuntu_cpu_docs', false) + utils.pack_lib(lib_name, mx_lib, false) } } } @@ -1155,7 +1080,7 @@ def docs_python(lib_name) { node(NODE_LINUX_CPU) { ws('workspace/docs') { timeout(time: max_time, unit: 'MINUTES') { - utils.unpack_and_init(lib_name, 'lib/libmxnet.so', false) + utils.unpack_and_init(lib_name, mx_lib, false) utils.docker_run('ubuntu_cpu_python', 'build_python_docs', false) if (should_pack_website()) { utils.pack_lib('python-artifacts', 'docs/_build/python-artifacts.tgz', false) diff --git a/ci/jenkins/Jenkinsfile_centos_cpu b/ci/jenkins/Jenkinsfile_centos_cpu index f652478a6f32..cddb3c977a5d 100644 --- a/ci/jenkins/Jenkinsfile_centos_cpu +++ b/ci/jenkins/Jenkinsfile_centos_cpu @@ -35,7 +35,6 @@ utils.main_wrapper( core_logic: { utils.parallel_stage('Build', [ custom_steps.compile_centos7_cpu('centos7_cpu'), - custom_steps.compile_centos7_cpu_make('centos7_cpu_make'), custom_steps.compile_centos7_cpu_mkldnn(), custom_steps.compile_static_python_cpu(), custom_steps.compile_static_cd_cpu('centos7_cpu_cd') diff --git a/ci/jenkins/Jenkinsfile_unix_cpu b/ci/jenkins/Jenkinsfile_unix_cpu index 0909fc5139fe..67d5afc4cc76 100644 --- a/ci/jenkins/Jenkinsfile_unix_cpu +++ b/ci/jenkins/Jenkinsfile_unix_cpu @@ -35,11 +35,9 @@ utils.main_wrapper( core_logic: { utils.parallel_stage('Build', [ custom_steps.compile_unix_cpu_openblas('cpu'), - custom_steps.compile_unix_cpu_openblas_make('cpu_make'), custom_steps.compile_unix_openblas_debug_cpu('cpu_debug'), custom_steps.compile_unix_mkl_cpu('cpu_mkl'), custom_steps.compile_unix_mkldnn_cpu('mkldnn_cpu'), - custom_steps.compile_unix_mkldnn_cpu_make('mkldnn_cpu_make'), custom_steps.compile_unix_mkldnn_mkl_cpu('mkldnn_mkl_cpu'), custom_steps.compile_unix_int64_cpu('ubuntu_cpu'), custom_steps.compile_unix_openblas_cpu_no_tvm_op('cpu_openblas_no_tvm_op'), @@ -50,7 +48,7 @@ core_logic: { custom_steps.test_unix_python3_mkl_cpu('cpu_mkl'), custom_steps.test_unix_python3_mkldnn_cpu('mkldnn_cpu'), custom_steps.test_unix_python3_mkldnn_mkl_cpu('mkldnn_mkl_cpu'), - custom_steps.test_unix_onnx_cpu('cpu_make'), + custom_steps.test_unix_onnx_cpu('cpu'), /* Disabled due to master build failure: * http://jenkins.mxnet-ci.amazon-ml.com/blue/organizations/jenkins/incubator-mxnet/detail/master/1221/pipeline/ * https://github.com/apache/incubator-mxnet/issues/11801 diff --git a/ci/jenkins/Jenkinsfile_unix_gpu b/ci/jenkins/Jenkinsfile_unix_gpu index 1fe96bf690df..1fcdc96f46ac 100644 --- a/ci/jenkins/Jenkinsfile_unix_gpu +++ b/ci/jenkins/Jenkinsfile_unix_gpu @@ -37,13 +37,11 @@ core_logic: { custom_steps.compile_unix_mkldnn_gpu('mkldnn_gpu'), custom_steps.compile_unix_mkldnn_nocudnn_gpu('mkldnn_gpu_nocudnn'), custom_steps.compile_unix_full_gpu('gpu'), - custom_steps.compile_unix_full_gpu_make('gpu_make'), custom_steps.compile_unix_full_gpu_debug('gpu_debug'), custom_steps.compile_unix_cmake_gpu('cmake_gpu'), custom_steps.compile_unix_tensorrt_gpu('tensorrt'), custom_steps.compile_unix_int64_gpu('gpu_int64'), custom_steps.compile_unix_cmake_gpu_no_rtc('gpu_no_rtc'), - custom_steps.compile_unix_full_gpu_mkldnn_cpp_test('gpu_mkldnn_cpp_test_make') ]) utils.parallel_stage('Tests', [ diff --git a/ci/jenkins/Jenkinsfile_website_c_docs b/ci/jenkins/Jenkinsfile_website_c_docs deleted file mode 100644 index caddbae8c620..000000000000 --- a/ci/jenkins/Jenkinsfile_website_c_docs +++ /dev/null @@ -1,48 +0,0 @@ -// -*- mode: groovy -*- - -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -// -// Jenkins pipeline -// See documents at https://jenkins.io/doc/book/pipeline/jenkinsfile/ - -// timeout in minutes -max_time = 20 - -node('utility') { - // Loading the utilities requires a node context unfortunately - checkout scm - utils = load('ci/Jenkinsfile_utils.groovy') - custom_steps = load('ci/jenkins/Jenkins_steps.groovy') -} -utils.assign_node_labels(utility: 'utility', linux_cpu: 'mxnetlinux-cpu') - -utils.main_wrapper( -core_logic: { - utils.parallel_stage('Build', [ - custom_steps.compile_unix_lite('libmxnet') - ]) - -} -, -failure_handler: { - // Only send email if master or release branches failed - if (currentBuild.result == "FAILURE" && (env.BRANCH_NAME == "master" || env.BRANCH_NAME.startsWith("v"))) { - emailext body: 'Build for MXNet branch ${BRANCH_NAME} has broken. Please view the build at ${BUILD_URL}', replyTo: '${EMAIL}', subject: '[BUILD FAILED] Branch ${BRANCH_NAME} build ${BUILD_NUMBER}', to: '${EMAIL}' - } -} -) diff --git a/ci/jenkins/Jenkinsfile_website_clojure_docs b/ci/jenkins/Jenkinsfile_website_clojure_docs deleted file mode 100644 index caddbae8c620..000000000000 --- a/ci/jenkins/Jenkinsfile_website_clojure_docs +++ /dev/null @@ -1,48 +0,0 @@ -// -*- mode: groovy -*- - -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -// -// Jenkins pipeline -// See documents at https://jenkins.io/doc/book/pipeline/jenkinsfile/ - -// timeout in minutes -max_time = 20 - -node('utility') { - // Loading the utilities requires a node context unfortunately - checkout scm - utils = load('ci/Jenkinsfile_utils.groovy') - custom_steps = load('ci/jenkins/Jenkins_steps.groovy') -} -utils.assign_node_labels(utility: 'utility', linux_cpu: 'mxnetlinux-cpu') - -utils.main_wrapper( -core_logic: { - utils.parallel_stage('Build', [ - custom_steps.compile_unix_lite('libmxnet') - ]) - -} -, -failure_handler: { - // Only send email if master or release branches failed - if (currentBuild.result == "FAILURE" && (env.BRANCH_NAME == "master" || env.BRANCH_NAME.startsWith("v"))) { - emailext body: 'Build for MXNet branch ${BRANCH_NAME} has broken. Please view the build at ${BUILD_URL}', replyTo: '${EMAIL}', subject: '[BUILD FAILED] Branch ${BRANCH_NAME} build ${BUILD_NUMBER}', to: '${EMAIL}' - } -} -) diff --git a/ci/jenkins/Jenkinsfile_website_java_docs b/ci/jenkins/Jenkinsfile_website_java_docs deleted file mode 100644 index 03d160009740..000000000000 --- a/ci/jenkins/Jenkinsfile_website_java_docs +++ /dev/null @@ -1,47 +0,0 @@ -// -*- mode: groovy -*- - -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -// -// Jenkins pipeline -// See documents at https://jenkins.io/doc/book/pipeline/jenkinsfile/ - -// timeout in minutes -max_time = 20 - -node('utility') { - // Loading the utilities requires a node context unfortunately - checkout scm - utils = load('ci/Jenkinsfile_utils.groovy') - custom_steps = load('ci/jenkins/Jenkins_steps.groovy') -} -utils.assign_node_labels(utility: 'utility', linux_cpu: 'mxnetlinux-cpu') - -utils.main_wrapper( -core_logic: { - utils.parallel_stage('Build', [ - custom_steps.compile_unix_lite('libmxnet') - ]) -} -, -failure_handler: { - // Only send email if master or release branches failed - if (currentBuild.result == "FAILURE" && (env.BRANCH_NAME == "master" || env.BRANCH_NAME.startsWith("v"))) { - emailext body: 'Build for MXNet branch ${BRANCH_NAME} has broken. Please view the build at ${BUILD_URL}', replyTo: '${EMAIL}', subject: '[BUILD FAILED] Branch ${BRANCH_NAME} build ${BUILD_NUMBER}', to: '${EMAIL}' - } -} -) diff --git a/ci/jenkins/Jenkinsfile_website_julia_docs b/ci/jenkins/Jenkinsfile_website_julia_docs deleted file mode 100644 index 8a2528f89ce7..000000000000 --- a/ci/jenkins/Jenkinsfile_website_julia_docs +++ /dev/null @@ -1,48 +0,0 @@ -// -*- mode: groovy -*- - -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -// -// Jenkins pipeline -// See documents at https://jenkins.io/doc/book/pipeline/jenkinsfile/ - -// timeout in minutes -max_time = 60 - -node('utility') { - // Loading the utilities requires a node context unfortunately - checkout scm - utils = load('ci/Jenkinsfile_utils.groovy') - custom_steps = load('ci/jenkins/Jenkins_steps.groovy') -} -utils.assign_node_labels(utility: 'utility', linux_cpu: 'mxnetlinux-cpu') - -utils.main_wrapper( -core_logic: { - utils.parallel_stage('Build', [ - custom_steps.compile_unix_lite('libmxnet') - ]) - -} -, -failure_handler: { - // Only send email if master or release branches failed - if (currentBuild.result == "FAILURE" && (env.BRANCH_NAME == "master" || env.BRANCH_NAME.startsWith("v"))) { - emailext body: 'Build for MXNet branch ${BRANCH_NAME} has broken. Please view the build at ${BUILD_URL}', replyTo: '${EMAIL}', subject: '[BUILD FAILED] Branch ${BRANCH_NAME} build ${BUILD_NUMBER}', to: '${EMAIL}' - } -} -) diff --git a/docs/static_site/src/pages/api/cpp/index.md b/docs/static_site/src/pages/api/cpp/index.md index 3aff76b85337..2f834a763a12 100644 --- a/docs/static_site/src/pages/api/cpp/index.md +++ b/docs/static_site/src/pages/api/cpp/index.md @@ -41,12 +41,8 @@ The cpp-package directory contains the implementation of C++ API. As mentioned a ``` 3. Install the [prerequisites](), desired [BLAS libraries]() and optional [OpenCV, CUDA, and cuDNN]() for building MXNet from source. -4. There is a configuration file for make, [make/config.mk]() that contains all the compilation options. You can edit this file and set the appropriate options prior to running the **make** command. -5. Please refer to [platform specific build instructions]() and available [build configurations](https://mxnet.apache.org/get_started/build_from_source#build-configurations) for more details. -5. For enabling the build of C++ Package, set the **USE\_CPP\_PACKAGE = 1** in [make/config.mk](). Optionally, the compilation flag can also be specified on **make** command line as follows. - ``` - make -j USE_CPP_PACKAGE=1 - ``` +4. Please refer to [platform specific build instructions]() and available [build configurations](https://mxnet.apache.org/get_started/build_from_source#build-configurations) for more details. +5. For enabling the build of C++ Package, set the **USE\_CPP\_PACKAGE = 1** in the config file. ## Usage diff --git a/docs/static_site/src/pages/api/faq/cloud.md b/docs/static_site/src/pages/api/faq/cloud.md index 480773515c49..2a5837b017eb 100644 --- a/docs/static_site/src/pages/api/faq/cloud.md +++ b/docs/static_site/src/pages/api/faq/cloud.md @@ -66,15 +66,9 @@ unzip mnist.zip && s3cmd put t*-ubyte s3://dmlc/mnist/ ``` ### Use Pre-installed EC2 GPU Instance -The [Deep Learning AMI](https://aws.amazon.com/marketplace/pp/B01M0AXXQB?qid=1475211685369&sr=0-1&ref_=srh_res_product_title) is an Amazon Linux image -supported and maintained by Amazon Web Services for use on Amazon Elastic Compute Cloud (Amazon EC2). -It contains [MXNet-v0.9.3 tag](https://github.com/apache/incubator-mxnet) and the necessary components to get going with deep learning, -including Nvidia drivers, CUDA, cuDNN, Anaconda, Python2 and Python3. -The AMI IDs are the following: - -* us-east-1: ami-e7c96af1 -* us-west-2: ami-dfb13ebf -* eu-west-1: ami-6e5d6808 +The [Deep Learning AMIs](https://aws.amazon.com/marketplace/search/results?x=0&y=0&searchTerms=Deep+Learning+AMI) +are a series of images supported and maintained by Amazon Web Services for use +on Amazon Elastic Compute Cloud (Amazon EC2) and contain the latest MXNet release. Now you can launch _MXNet_ directly on an EC2 GPU instance. You can also use [Jupyter](https://jupyter.org) notebook on EC2 machine. @@ -83,69 +77,19 @@ on how to connect to a Jupyter notebook running on an EC2 instance. ### Set Up an EC2 GPU Instance from Scratch -_MXNet_ requires the following libraries: - -- C++ compiler with C++11 support, such as `gcc >= 4.8` -- `CUDA` (`CUDNN` in optional) for GPU linear algebra -- `BLAS` (cblas, open-blas, atblas, mkl, or others) for CPU linear algebra -- `opencv` for image augmentations -- `curl` and `openssl` for the ability to read/write to Amazon S3 - -Installing `CUDA` on EC2 instances requires some effort. Caffe has a good -[tutorial](https://github.com/BVLC/caffe/wiki/Install-Caffe-on-EC2-from-scratch-(Ubuntu,-CUDA-7,-cuDNN-3)) -on how to install CUDA 7.0 on Ubuntu 14.04. - -***Note:*** We tried CUDA 7.5 on Nov 7, 2015, but found it problematic. - -You can install the rest using the package manager. For example, on Ubuntu: - -``` -sudo apt-get update -sudo apt-get install -y build-essential git libcurl4-openssl-dev libatlas-base-dev libopencv-dev python-numpy -``` - -The Amazon Machine Image (AMI) [ami-12fd8178](https://console.aws.amazon.com/ec2/v2/home?region=us-east-1#LaunchInstanceWizard:ami=ami-12fd8178) has the packages listed above installed. - - -### Build and Run MXNet on a GPU Instance - -The following commands build _MXNet_ with CUDA/CUDNN, Amazon S3, and distributed -training. - -```bash -git clone --recursive https://github.com/dmlc/mxnet -cd mxnet; cp make/config.mk . -echo "USE_CUDA=1" >>config.mk -echo "USE_CUDA_PATH=/usr/local/cuda" >>config.mk -echo "USE_CUDNN=1" >>config.mk -echo "USE_BLAS=atlas" >> config.mk -echo "USE_DIST_KVSTORE = 1" >>config.mk -echo "USE_S3=1" >>config.mk -make -j$(nproc) -``` - -To test whether everything is installed properly, we can try training a convolutional neural network (CNN) on the MNIST dataset using a GPU: - -```bash -python example/image-classification/train_mnist.py -``` - -If you've placed the MNIST data on `s3://dmlc/mnist`, you can read the data stored on Amazon S3 directly with the following command: - -```bash -sed -i.bak "s!data_dir = 'data'!data_dir = 's3://dmlc/mnist'!" example/image-classification/train_mnist.py -``` - -***Note:*** You can use `sudo ln /dev/null /dev/raw1394` to fix the opencv error `libdc1394 error: Failed to initialize libdc1394`. +[Deep Learning Base AMIs](https://aws.amazon.com/marketplace/search/results?x=0&y=0&searchTerms=Deep+Learning+Base+AMI) +provide a foundational image with NVIDIA CUDA, cuDNN, GPU drivers, Intel +MKL-DNN, Docker and Nvidia-Docker, etc. for deploying your own custom deep +learning environment. You may follow the [MXNet Build From Source +instructions](> config.mk - ``` +2. Set `USE_S3=1` in the configuration file. ## Step 2: Configure S3 authentication tokens diff --git a/make/config.mk b/make/config.mk deleted file mode 100644 index 3d8e974a31c1..000000000000 --- a/make/config.mk +++ /dev/null @@ -1,248 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -#------------------------------------------------------------------------------- -# Template configuration for compiling mxnet -# -# If you want to change the configuration, please use the following steps. -# Assume you are on the root directory of mxnet. First copy this file so that -# any local changes will be ignored by git -# -# $ cp make/config.mk . -# -# Next modify the according entries, and then compile by -# -# $ make -# -# or build in parallel with 8 threads -# -# $ make -j8 -#------------------------------------------------------------------------------- - -#--------------------- -# choice of compiler -#-------------------- - -ifndef CC -export CC = gcc -endif -ifndef CXX -export CXX = g++ -endif -ifndef NVCC -export NVCC = nvcc -endif - -# whether compile with options for MXNet developer -DEV = 0 - -# whether compile with debug -DEBUG = 0 - -# whether to turn on segfault signal handler to log the stack trace -USE_SIGNAL_HANDLER = - -# the additional link flags you want to add -ADD_LDFLAGS = - -# the additional compile flags you want to add -ADD_CFLAGS = - -# whether to build operators written in TVM -USE_TVM_OP = 0 - -#--------------------------------------------- -# matrix computation libraries for CPU/GPU -#--------------------------------------------- - -# whether use CUDA during compile -USE_CUDA = 0 - -# add the path to CUDA library to link and compile flag -# if you have already add them to environment variable, leave it as NONE -# USE_CUDA_PATH = /usr/local/cuda -USE_CUDA_PATH = NONE - -# whether to enable CUDA runtime compilation -ENABLE_CUDA_RTC = 1 - -# whether use CuDNN R3 library -USE_CUDNN = 0 - -# whether to use NVTX when profiling -USE_NVTX = 0 - -#whether to use NCCL library -USE_NCCL = 0 -#add the path to NCCL library -USE_NCCL_PATH = NONE - -# whether use opencv during compilation -# you can disable it, however, you will not able to use -# imbin iterator -USE_OPENCV = 1 -# Add OpenCV include path, in which the directory `opencv2` exists -USE_OPENCV_INC_PATH = NONE -# Add OpenCV shared library path, in which the shared library exists -USE_OPENCV_LIB_PATH = NONE - -#whether use libjpeg-turbo for image decode without OpenCV wrapper -USE_LIBJPEG_TURBO = 0 -#add the path to libjpeg-turbo library -USE_LIBJPEG_TURBO_PATH = NONE - -# use openmp for parallelization -USE_OPENMP = 1 - -# whether use MKL-DNN library: 0 = disabled, 1 = enabled -# if USE_MKLDNN is not defined, MKL-DNN will be enabled by default on x86 Linux. -# you can disable it explicity with USE_MKLDNN = 0 -USE_MKLDNN = - -# whether use NNPACK library -USE_NNPACK = 0 - -# choose the version of blas you want to use -# can be: mkl, blas, atlas, openblas -# in default use atlas for linux while apple for osx -UNAME_S := $(shell uname -s) -ifeq ($(UNAME_S), Darwin) -USE_BLAS = apple -else -USE_BLAS = atlas -endif - -# whether use lapack during compilation -# only effective when compiled with blas versions openblas/apple/atlas/mkl -USE_LAPACK = 1 - -# path to lapack library in case of a non-standard installation -USE_LAPACK_PATH = - -# add path to intel library, you may need it for MKL, if you did not add the path -# to environment variable -USE_INTEL_PATH = NONE - -# If use MKL only for BLAS, choose static link automatically to allow python wrapper -ifeq ($(USE_BLAS), mkl) -USE_STATIC_MKL = 1 -else -USE_STATIC_MKL = NONE -endif - -#---------------------------- -# Settings for power and arm arch -#---------------------------- -ARCH := $(shell uname -a) -ifneq (,$(filter $(ARCH), armv6l armv7l powerpc64le ppc64le aarch64)) - USE_SSE=0 - USE_F16C=0 -else - USE_SSE=1 -endif - -#---------------------------- -# F16C instruction support for faster arithmetic of fp16 on CPU -#---------------------------- -# For distributed training with fp16, this helps even if training on GPUs -# If left empty, checks CPU support and turns it on. -# For cross compilation, please check support for F16C on target device and turn off if necessary. -USE_F16C = - -#---------------------------- -# distributed computing -#---------------------------- - -# whether or not to enable multi-machine supporting -USE_DIST_KVSTORE = 0 - -# whether or not allow to read and write HDFS directly. If yes, then hadoop is -# required -USE_HDFS = 0 - -# path to libjvm.so. required if USE_HDFS=1 -LIBJVM=$(JAVA_HOME)/jre/lib/amd64/server - -# whether or not allow to read and write AWS S3 directly. If yes, then -# libcurl4-openssl-dev is required, it can be installed on Ubuntu by -# sudo apt-get install -y libcurl4-openssl-dev -USE_S3 = 0 - -#---------------------------- -# performance settings -#---------------------------- -# Use operator tuning -USE_OPERATOR_TUNING = 1 - -# Use gperftools if found -# Disable because of #8968 -USE_GPERFTOOLS = 0 - -# path to gperftools (tcmalloc) library in case of a non-standard installation -USE_GPERFTOOLS_PATH = - -# Link gperftools statically -USE_GPERFTOOLS_STATIC = - -# Use JEMalloc if found, and not using gperftools -USE_JEMALLOC = 0 - -# path to jemalloc library in case of a non-standard installation -USE_JEMALLOC_PATH = - -# Link jemalloc statically -USE_JEMALLOC_STATIC = - -#---------------------------- -# additional operators -#---------------------------- - -# path to folders containing projects specific operators that you don't want to put in src/operators -EXTRA_OPERATORS = - -#---------------------------- -# other features -#---------------------------- - -# Create C++ interface package -USE_CPP_PACKAGE = 0 - -# Use int64_t type to represent the total number of elements in a tensor -# This will cause performance degradation reported in issue #14496 -# Set to 1 for large tensor with tensor size greater than INT32_MAX i.e. 2147483647 -# Note: the size of each dimension is still bounded by INT32_MAX -USE_INT64_TENSOR_SIZE = 0 - -# Python executable. Needed for cython target -PYTHON = python - -#---------------------------- -# plugins -#---------------------------- - -# whether to use caffe integration. This requires installing caffe. -# You also need to add CAFFE_PATH/build/lib to your LD_LIBRARY_PATH -# CAFFE_PATH = $(HOME)/caffe -# MXNET_PLUGINS += plugin/caffe/caffe.mk - -# WARPCTC_PATH = $(HOME)/warp-ctc -# MXNET_PLUGINS += plugin/warpctc/warpctc.mk - -# whether to use sframe integration. This requires build sframe -# git@github.com:dato-code/SFrame.git -# SFRAME_PATH = $(HOME)/SFrame -# MXNET_PLUGINS += plugin/sframe/plugin.mk diff --git a/make/config/libmxnet.sym b/make/config/libmxnet.sym deleted file mode 100644 index df81f6861666..000000000000 --- a/make/config/libmxnet.sym +++ /dev/null @@ -1,10 +0,0 @@ -*MX* -*NN* -*mx* -*nn* -Java_org_apache_mxnet* -*NDArray* -*Engine*Get* -*Storage*Get* -*on_enter_api* -*on_exit_api* diff --git a/make/config/libmxnet.ver b/make/config/libmxnet.ver deleted file mode 100644 index 0a9f8e67db69..000000000000 --- a/make/config/libmxnet.ver +++ /dev/null @@ -1,14 +0,0 @@ -{ - global: - *NN*; - *MX*; - *nn*; - *mx*; - Java_org_apache_mxnet*; - *NDArray*; - *Engine*Get*; - *Storage*Get*; - *on_enter_api*; - *on_exit_api*; - local: *; -}; diff --git a/make/config_jetson.mk b/make/config_jetson.mk deleted file mode 100644 index 7de6eff7b6b5..000000000000 --- a/make/config_jetson.mk +++ /dev/null @@ -1,219 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -#------------------------------------------------------------------------------- -# Template configuration for compiling mxnet -# -# If you want to change the configuration, please use the following -# steps. Assume you are on the root directory of mxnet. First copy the this -# file so that any local changes will be ignored by git -# -# $ cp make/config.mk . -# -# Next modify the according entries, and then compile by -# -# $ make -# -# or build in parallel with 8 threads -# -# $ make -j8 -#------------------------------------------------------------------------------- - -#--------------------- -# For cross compilation we only explictily set a compiler when one is not already present. -#-------------------- - -ifndef CC -export CC = gcc -endif -ifndef CXX -export CXX = g++ -endif -ifndef NVCC -export NVCC = nvcc -endif - -# whether compile with options for MXNet developer -DEV = 0 - -# whether compile with debug -DEBUG = 0 - -# whether to turn on segfault signal handler to log the stack trace -USE_SIGNAL_HANDLER = 1 - -# the additional link flags you want to add -ADD_LDFLAGS = -L${CROSS_ROOT}/lib -L/usr/lib/aarch64-linux-gnu/ - -# the additional compile flags you want to add -ADD_CFLAGS = -I${CROSS_ROOT}/include -I/usr/include/aarch64-linux-gnu/ - -#--------------------------------------------- -# matrix computation libraries for CPU/GPU -#--------------------------------------------- - -# whether use CUDA during compile -USE_CUDA = 1 - -# add the path to CUDA library to link and compile flag -# if you have already add them to environment variable, leave it as NONE -# USE_CUDA_PATH = /usr/local/cuda -USE_CUDA_PATH = /usr/local/cuda - -# CUDA_ARCH setting -CUDA_ARCH = -gencode arch=compute_53,code=sm_53 -gencode arch=compute_62,code=sm_62 -gencode arch=compute_72,code=sm_72 - -# whether to enable CUDA runtime compilation -ENABLE_CUDA_RTC = 0 - -# whether use CuDNN R3 library -USE_CUDNN = 1 - -#whether to use NCCL library -USE_NCCL = 0 -#add the path to NCCL library -USE_NCCL_PATH = NONE - -# whether use opencv during compilation -# you can disable it, however, you will not able to use -# imbin iterator -USE_OPENCV = 1 -# Add OpenCV include path, in which the directory `opencv2` exists -USE_OPENCV_INC_PATH = NONE -# Add OpenCV shared library path, in which the shared library exists -USE_OPENCV_LIB_PATH = NONE - -#whether use libjpeg-turbo for image decode without OpenCV wrapper -USE_LIBJPEG_TURBO = 0 -#add the path to libjpeg-turbo library -USE_LIBJPEG_TURBO_PATH = NONE - -# use openmp for parallelization -USE_OPENMP = 1 - -# whether use MKL-DNN library -USE_MKLDNN = 0 - -# whether use NNPACK library -USE_NNPACK = 0 - -# choose the version of blas you want to use -# can be: mkl, blas, atlas, openblas -# in default use atlas for linux while apple for osx -UNAME_S := $(shell uname -s) -USE_BLAS = openblas - -# whether use lapack during compilation -# only effective when compiled with blas versions openblas/apple/atlas/mkl -USE_LAPACK = 1 - -# path to lapack library in case of a non-standard installation -USE_LAPACK_PATH = - -# add path to intel library, you may need it for MKL, if you did not add the path -# to environment variable -USE_INTEL_PATH = NONE - -# If use MKL only for BLAS, choose static link automatically to allow python wrapper -ifeq ($(USE_BLAS), mkl) -USE_STATIC_MKL = 1 -else -USE_STATIC_MKL = NONE -endif - -#---------------------------- -# Settings for power and arm arch -#---------------------------- -USE_SSE=0 - -# Turn off F16C instruction set support -USE_F16C=0 - -#---------------------------- -# distributed computing -#---------------------------- - -# whether or not to enable multi-machine supporting -USE_DIST_KVSTORE = 0 - -# whether or not allow to read and write HDFS directly. If yes, then hadoop is -# required -USE_HDFS = 0 - -# path to libjvm.so. required if USE_HDFS=1 -LIBJVM=$(JAVA_HOME)/jre/lib/amd64/server - -# whether or not allow to read and write AWS S3 directly. If yes, then -# libcurl4-openssl-dev is required, it can be installed on Ubuntu by -# sudo apt-get install -y libcurl4-openssl-dev -USE_S3 = 0 - -#---------------------------- -# performance settings -#---------------------------- -# Use operator tuning -USE_OPERATOR_TUNING = 1 - -# Use gperftools if found -# Disable because of #8968 -USE_GPERFTOOLS = 0 - -# path to gperftools (tcmalloc) library in case of a non-standard installation -USE_GPERFTOOLS_PATH = - -# Use JEMalloc if found, and not using gperftools -USE_JEMALLOC = 1 - -# path to jemalloc library in case of a non-standard installation -USE_JEMALLOC_PATH = - -#---------------------------- -# additional operators -#---------------------------- - -# path to folders containing projects specific operators that you don't want to put in src/operators -EXTRA_OPERATORS = - -#---------------------------- -# other features -#---------------------------- - -# Create C++ interface package -USE_CPP_PACKAGE = 0 - -# Use int64_t type to represent the total number of elements in the tensor -# This will cause performance degradation reported in issue #14496 -# Set to 1 for large tensor with tensor size greater than INT32_MAX i.e. 2147483647 -# Note: the size of each dimension is still bounded by INT32_MAX -USE_INT64_TENSOR_SIZE = 0 - -#---------------------------- -# plugins -#---------------------------- - -# whether to use caffe integration. This requires installing caffe. -# You also need to add CAFFE_PATH/build/lib to your LD_LIBRARY_PATH -# CAFFE_PATH = $(HOME)/caffe -# MXNET_PLUGINS += plugin/caffe/caffe.mk - -# WARPCTC_PATH = $(HOME)/warp-ctc -# MXNET_PLUGINS += plugin/warpctc/warpctc.mk - -# whether to use sframe integration. This requires build sframe -# git@github.com:dato-code/SFrame.git -# SFRAME_PATH = $(HOME)/SFrame -# MXNET_PLUGINS += plugin/sframe/plugin.mk diff --git a/make/osx.mk b/make/osx.mk deleted file mode 100644 index 25f3ba6df55b..000000000000 --- a/make/osx.mk +++ /dev/null @@ -1,153 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -#------------------------------------------------------------------------------- -# Template configuration for compiling mxnet -# -# If you want to change the configuration, please use the following -# steps. Assume you are on the root directory of mxnet. First copy the this -# file so that any local changes will be ignored by git -# -# $ cp make/config.mk . -# -# Next modify the according entries, and then compile by -# -# $ make -# -# or build in parallel with 8 threads -# -# $ make -j8 -#------------------------------------------------------------------------------- - -#--------------------- -# choice of compiler -#-------------------- - -export CC = gcc -export CXX = g++ -export NVCC = nvcc - -# whether compile with options for MXNet developer -DEV = 0 - -# whether compile with debug -DEBUG = 0 - -# the additional link flags you want to add -ADD_LDFLAGS = - -# the additional compile flags you want to add -ADD_CFLAGS = - -# whether to build operators written in TVM -USE_TVM_OP = 0 - -#--------------------------------------------- -# matrix computation libraries for CPU/GPU -#--------------------------------------------- - -# whether use CUDA during compile -USE_CUDA = 0 - -# add the path to CUDA library to link and compile flag -# if you have already add them to environment variable, leave it as NONE -# USE_CUDA_PATH = /usr/local/cuda -USE_CUDA_PATH = NONE - -# whether to enable CUDA runtime compilation -ENABLE_CUDA_RTC = 1 - -# whether use CUDNN R3 library -USE_CUDNN = 0 - -# whether use opencv during compilation -# you can disable it, however, you will not able to use -# imbin iterator -USE_OPENCV = 1 -# Add OpenCV include path, in which the directory `opencv2` exists -USE_OPENCV_INC_PATH = NONE -# Add OpenCV shared library path, in which the shared library exists -USE_OPENCV_LIB_PATH = NONE - -# use openmp for parallelization -# apple-clang by default does not have openmp built-in -USE_OPENMP = 0 - -# choose the version of blas you want to use -# can be: mkl, blas, atlas, openblas, apple -USE_BLAS = apple - -# whether use lapack during compilation -# only effective when compiled with blas versions openblas/apple/atlas/mkl -USE_LAPACK = 1 - -# by default, disable lapack when using MKL -# switch on when there is a full installation of MKL available (not just MKL_ML) -ifeq ($(USE_BLAS), mkl) -USE_LAPACK = 0 -endif - -# add path to intel library, you may need it for MKL, if you did not add the path -# to environment variable -USE_INTEL_PATH = NONE - -#---------------------------- -# distributed computing -#---------------------------- - -# whether or not to enable multi-machine supporting -USE_DIST_KVSTORE = 0 - -# whether or not allow to read and write HDFS directly. If yes, then hadoop is -# required -USE_HDFS = 0 - -# path to libjvm.so. required if USE_HDFS=1 -LIBJVM=$(JAVA_HOME)/jre/lib/amd64/server - -# whether or not allow to read and write AWS S3 directly. If yes, then -# libcurl4-openssl-dev is required, it can be installed on Ubuntu by -# sudo apt-get install -y libcurl4-openssl-dev -USE_S3 = 0 - -#---------------------------- -# additional operators -#---------------------------- - -# path to folders containing projects specific operators that you don't want to put in src/operators -EXTRA_OPERATORS = - -#---------------------------- -# other features -#---------------------------- - -# Create C++ interface package -USE_CPP_PACKAGE = 0 - -# Use int64_t type to represent the total number of elements in a tensor -# This will cause performance degradation reported in issue #14496 -# Set to 1 for large tensor with tensor size greater than INT32_MAX i.e. 2147483647 -# Note: the size of each dimension is still bounded by INT32_MAX -USE_INT64_TENSOR_SIZE = 0 - -#---------------------------- -# plugins -#---------------------------- - -# whether to use torch integration. This requires installing torch. -# TORCH_PATH = $(HOME)/torch -# MXNET_PLUGINS += plugin/torch/torch.mk diff --git a/make/readthedocs.mk b/make/readthedocs.mk deleted file mode 100644 index b33dd3c5d21f..000000000000 --- a/make/readthedocs.mk +++ /dev/null @@ -1,92 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -#-------------------------------------------------------- -# Configuration for document generation with less deps -# The library may not run, but doc generation could work -#-------------------------------------------------------- - -# choice of compiler -export CC = gcc -export CXX = g++ -export NVCC = nvcc - -# whether use CUDA during compile -USE_CUDA = 0 - -# add the path to CUDA library to link and compile flag -# if you have already add them to environment variable, leave it as NONE -USE_CUDA_PATH = NONE - -# whether use opencv during compilation -# you can disable it, however, you will not able to use -# imbin iterator -USE_OPENCV = 0 -# Add OpenCV include path, in which the directory `opencv2` exists -USE_OPENCV_INC_PATH = NONE -# Add OpenCV shared library path, in which the shared library exists -USE_OPENCV_LIB_PATH = NONE - -# whether use CUDNN R3 library -USE_CUDNN = 0 - - -# use openmp for parallelization -USE_OPENMP = 0 - -# -# choose the version of blas you want to use -# can be: mkl, blas, atlas, openblas -USE_STATIC_MKL = NONE -USE_BLAS = NONE -USE_LAPACK = 0 - -# -# add path to intel library, you may need it -# for MKL, if you did not add the path to environment variable -# -USE_INTEL_PATH = NONE - - -# the additional link flags you want to add -ADD_LDFLAGS = -lgomp - -# the additional compile flags you want to add -ADD_CFLAGS = -DMSHADOW_STAND_ALONE=1 -DMSHADOW_USE_SSE=0 -# -# If use MKL, choose static link automatically to fix python wrapper -# -ifeq ($(USE_BLAS), mkl) - USE_STATIC_MKL = 1 -endif - -#------------------------ -# configuration for DMLC -#------------------------ -# whether use HDFS support during compile -# this will allow cxxnet to directly save/load model from hdfs -USE_HDFS = 0 - -# whether use AWS S3 support during compile -# this will allow cxxnet to directly save/load model from s3 -USE_S3 = 0 - -# path to libjvm.so -LIBJVM=$(JAVA_HOME)/jre/lib/amd64/server - -# uses O0 instead of O3 for better performance -DEBUG = 1 diff --git a/make/staticbuild/darwin_cpu.mk b/make/staticbuild/darwin_cpu.mk deleted file mode 100644 index 1859936f180e..000000000000 --- a/make/staticbuild/darwin_cpu.mk +++ /dev/null @@ -1,167 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# -#------------------------------------------------------------------------------- -# Template configuration for compiling mxnet for making python wheel -#------------------------------------------------------------------------------- - -#--------------------- -# choice of compiler -#-------------------- - -export CC = gcc -export CXX = g++ -export NVCC = nvcc - -# whether compile with options for MXNet developer -DEV = 0 - -# whether compile with debug -DEBUG = 0 - -# whether to turn on signal handler (e.g. segfault logger) -USE_SIGNAL_HANDLER = 1 - -# the additional link flags you want to add -ADD_LDFLAGS += -L$(DEPS_PATH)/lib -lpng -ltiff -lz -framework CoreFoundation -framework Security -Wl,-exported_symbols_list,$(CURDIR)/make/config/libmxnet.sym,-rpath,'$${ORIGIN}',-dead_strip - -# the additional compile flags you want to add -ADD_CFLAGS += -I$(DEPS_PATH)/include -ffunction-sections -fdata-sections - -#--------------------------------------------- -# matrix computation libraries for CPU/GPU -#--------------------------------------------- - -# choose the version of blas you want to use -# can be: mkl, blas, atlas, openblas -# in default use atlas for linux while apple for osx -USE_BLAS=apple - -# whether use opencv during compilation -# you can disable it, however, you will not able to use -# imbin iterator -USE_OPENCV = 1 -# Add OpenCV include path, in which the directory `opencv2` exists -USE_OPENCV_INC_PATH = NONE -# Add OpenCV shared library path, in which the shared library exists -USE_OPENCV_LIB_PATH = NONE - -# whether use CUDA during compile -USE_CUDA = 0 - -# add the path to CUDA library to link and compile flag -# if you have already add them to environment variable, leave it as NONE -# USE_CUDA_PATH = /usr/local/cuda -USE_CUDA_PATH = NONE - -# whether use CuDNN R3 library -USE_CUDNN = 0 - -# CUDA architecture setting: going with all of them. -# For CUDA < 6.0, comment the *_50 lines for compatibility. -# CUDA_ARCH := - -# whether use cuda runtime compiling for writing kernels in native language (i.e. Python) -ENABLE_CUDA_RTC = 0 - -# use openmp for parallelization -USE_OPENMP = 0 -USE_OPERATOR_TUNING = 1 -USE_LIBJPEG_TURBO = 1 - -# whether use MKL-DNN library -USE_MKLDNN = 1 - -# whether use NNPACK library -USE_NNPACK = 0 - -# whether use lapack during compilation -# only effective when compiled with blas versions openblas/apple/atlas/mkl -USE_LAPACK = 1 - -# path to lapack library in case of a non-standard installation -USE_LAPACK_PATH = $(DEPS_PATH)/lib - -# add path to intel library, you may need it for MKL, if you did not add the path -# to environment variable -USE_INTEL_PATH = NONE - -# If use MKL, choose static link automatically to allow python wrapper -ifeq ($(USE_BLAS), mkl) -USE_STATIC_MKL = 1 -else -USE_STATIC_MKL = NONE -endif - -#---------------------------- -# Settings for power and arm arch -#---------------------------- -ARCH := $(shell uname -a) -ifneq (,$(filter $(ARCH), armv6l armv7l powerpc64le ppc64le aarch64)) - USE_SSE=0 -else - USE_SSE=1 -endif - -#---------------------------- -# distributed computing -#---------------------------- - -# whether or not to enable multi-machine supporting -USE_DIST_KVSTORE = 1 - -# whether or not allow to read and write HDFS directly. If yes, then hadoop is -# required -USE_HDFS = 0 - -# path to libjvm.so. required if USE_HDFS=1 -LIBJVM=$(JAVA_HOME)/jre/lib/amd64/server - -# whether or not allow to read and write AWS S3 directly. If yes, then -# libcurl4-openssl-dev is required, it can be installed on Ubuntu by -# sudo apt-get install -y libcurl4-openssl-dev -USE_S3 = 1 - -#---------------------------- -# additional operators -#---------------------------- - -# path to folders containing projects specific operators that you don't want to put in src/operators -EXTRA_OPERATORS = - - -#---------------------------- -# plugins -#---------------------------- - -# whether to use caffe integration. This requires installing caffe. -# You also need to add CAFFE_PATH/build/lib to your LD_LIBRARY_PATH -# CAFFE_PATH = $(HOME)/caffe -# MXNET_PLUGINS += plugin/caffe/caffe.mk - -# whether to use torch integration. This requires installing torch. -# You also need to add TORCH_PATH/install/lib to your LD_LIBRARY_PATH -# TORCH_PATH = $(HOME)/torch -# MXNET_PLUGINS += plugin/torch/torch.mk - -# WARPCTC_PATH = $(HOME)/warp-ctc -# MXNET_PLUGINS += plugin/warpctc/warpctc.mk - -# whether to use sframe integration. This requires build sframe -# git@github.com:dato-code/SFrame.git -# SFRAME_PATH = $(HOME)/SFrame -# MXNET_PLUGINS += plugin/sframe/plugin.mk diff --git a/make/staticbuild/darwin_mkl.mk b/make/staticbuild/darwin_mkl.mk deleted file mode 100644 index 1859936f180e..000000000000 --- a/make/staticbuild/darwin_mkl.mk +++ /dev/null @@ -1,167 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# -#------------------------------------------------------------------------------- -# Template configuration for compiling mxnet for making python wheel -#------------------------------------------------------------------------------- - -#--------------------- -# choice of compiler -#-------------------- - -export CC = gcc -export CXX = g++ -export NVCC = nvcc - -# whether compile with options for MXNet developer -DEV = 0 - -# whether compile with debug -DEBUG = 0 - -# whether to turn on signal handler (e.g. segfault logger) -USE_SIGNAL_HANDLER = 1 - -# the additional link flags you want to add -ADD_LDFLAGS += -L$(DEPS_PATH)/lib -lpng -ltiff -lz -framework CoreFoundation -framework Security -Wl,-exported_symbols_list,$(CURDIR)/make/config/libmxnet.sym,-rpath,'$${ORIGIN}',-dead_strip - -# the additional compile flags you want to add -ADD_CFLAGS += -I$(DEPS_PATH)/include -ffunction-sections -fdata-sections - -#--------------------------------------------- -# matrix computation libraries for CPU/GPU -#--------------------------------------------- - -# choose the version of blas you want to use -# can be: mkl, blas, atlas, openblas -# in default use atlas for linux while apple for osx -USE_BLAS=apple - -# whether use opencv during compilation -# you can disable it, however, you will not able to use -# imbin iterator -USE_OPENCV = 1 -# Add OpenCV include path, in which the directory `opencv2` exists -USE_OPENCV_INC_PATH = NONE -# Add OpenCV shared library path, in which the shared library exists -USE_OPENCV_LIB_PATH = NONE - -# whether use CUDA during compile -USE_CUDA = 0 - -# add the path to CUDA library to link and compile flag -# if you have already add them to environment variable, leave it as NONE -# USE_CUDA_PATH = /usr/local/cuda -USE_CUDA_PATH = NONE - -# whether use CuDNN R3 library -USE_CUDNN = 0 - -# CUDA architecture setting: going with all of them. -# For CUDA < 6.0, comment the *_50 lines for compatibility. -# CUDA_ARCH := - -# whether use cuda runtime compiling for writing kernels in native language (i.e. Python) -ENABLE_CUDA_RTC = 0 - -# use openmp for parallelization -USE_OPENMP = 0 -USE_OPERATOR_TUNING = 1 -USE_LIBJPEG_TURBO = 1 - -# whether use MKL-DNN library -USE_MKLDNN = 1 - -# whether use NNPACK library -USE_NNPACK = 0 - -# whether use lapack during compilation -# only effective when compiled with blas versions openblas/apple/atlas/mkl -USE_LAPACK = 1 - -# path to lapack library in case of a non-standard installation -USE_LAPACK_PATH = $(DEPS_PATH)/lib - -# add path to intel library, you may need it for MKL, if you did not add the path -# to environment variable -USE_INTEL_PATH = NONE - -# If use MKL, choose static link automatically to allow python wrapper -ifeq ($(USE_BLAS), mkl) -USE_STATIC_MKL = 1 -else -USE_STATIC_MKL = NONE -endif - -#---------------------------- -# Settings for power and arm arch -#---------------------------- -ARCH := $(shell uname -a) -ifneq (,$(filter $(ARCH), armv6l armv7l powerpc64le ppc64le aarch64)) - USE_SSE=0 -else - USE_SSE=1 -endif - -#---------------------------- -# distributed computing -#---------------------------- - -# whether or not to enable multi-machine supporting -USE_DIST_KVSTORE = 1 - -# whether or not allow to read and write HDFS directly. If yes, then hadoop is -# required -USE_HDFS = 0 - -# path to libjvm.so. required if USE_HDFS=1 -LIBJVM=$(JAVA_HOME)/jre/lib/amd64/server - -# whether or not allow to read and write AWS S3 directly. If yes, then -# libcurl4-openssl-dev is required, it can be installed on Ubuntu by -# sudo apt-get install -y libcurl4-openssl-dev -USE_S3 = 1 - -#---------------------------- -# additional operators -#---------------------------- - -# path to folders containing projects specific operators that you don't want to put in src/operators -EXTRA_OPERATORS = - - -#---------------------------- -# plugins -#---------------------------- - -# whether to use caffe integration. This requires installing caffe. -# You also need to add CAFFE_PATH/build/lib to your LD_LIBRARY_PATH -# CAFFE_PATH = $(HOME)/caffe -# MXNET_PLUGINS += plugin/caffe/caffe.mk - -# whether to use torch integration. This requires installing torch. -# You also need to add TORCH_PATH/install/lib to your LD_LIBRARY_PATH -# TORCH_PATH = $(HOME)/torch -# MXNET_PLUGINS += plugin/torch/torch.mk - -# WARPCTC_PATH = $(HOME)/warp-ctc -# MXNET_PLUGINS += plugin/warpctc/warpctc.mk - -# whether to use sframe integration. This requires build sframe -# git@github.com:dato-code/SFrame.git -# SFRAME_PATH = $(HOME)/SFrame -# MXNET_PLUGINS += plugin/sframe/plugin.mk diff --git a/make/staticbuild/linux_cpu.mk b/make/staticbuild/linux_cpu.mk deleted file mode 100644 index 1cf389ae4a57..000000000000 --- a/make/staticbuild/linux_cpu.mk +++ /dev/null @@ -1,167 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# -#------------------------------------------------------------------------------- -# Template configuration for compiling mxnet for making python wheel -#------------------------------------------------------------------------------- - -#--------------------- -# choice of compiler -#-------------------- - -export CC = gcc -export CXX = g++ -export NVCC = nvcc - -# whether compile with options for MXNet developer -DEV = 0 - -# whether compile with debug -DEBUG = 0 - -# whether to turn on signal handler (e.g. segfault logger) -USE_SIGNAL_HANDLER = 1 - -# the additional link flags you want to add -ADD_LDFLAGS += -L$(DEPS_PATH)/lib -lpng -ltiff -ljpeg -lz -lgfortran -ldl -Wl,--version-script=$(CURDIR)/make/config/libmxnet.ver,-rpath,'$${ORIGIN}',--gc-sections - -# the additional compile flags you want to add -ADD_CFLAGS += -I$(DEPS_PATH)/include -ffunction-sections -fdata-sections - -#--------------------------------------------- -# matrix computation libraries for CPU/GPU -#--------------------------------------------- - -# choose the version of blas you want to use -# can be: mkl, blas, atlas, openblas -# in default use atlas for linux while apple for osx -USE_BLAS=openblas - -# whether use opencv during compilation -# you can disable it, however, you will not able to use -# imbin iterator -USE_OPENCV = 1 -# Add OpenCV include path, in which the directory `opencv2` exists -USE_OPENCV_INC_PATH = NONE -# Add OpenCV shared library path, in which the shared library exists -USE_OPENCV_LIB_PATH = NONE - -# whether use CUDA during compile -USE_CUDA = 0 - -# add the path to CUDA library to link and compile flag -# if you have already add them to environment variable, leave it as NONE -# USE_CUDA_PATH = /usr/local/cuda -USE_CUDA_PATH = NONE - -# whether use CuDNN R3 library -USE_CUDNN = 0 - -# CUDA architecture setting: going with all of them. -# For CUDA < 6.0, comment the *_50 lines for compatibility. -# CUDA_ARCH := - -# whether use cuda runtime compiling for writing kernels in native language (i.e. Python) -ENABLE_CUDA_RTC = 0 - -# use openmp for parallelization -USE_OPENMP = 1 -USE_OPERATOR_TUNING = 1 -USE_LIBJPEG_TURBO = 1 - -# whether use MKL-DNN library -USE_MKLDNN = 1 - -# whether use NNPACK library -USE_NNPACK = 0 - -# whether use lapack during compilation -# only effective when compiled with blas versions openblas/apple/atlas/mkl -USE_LAPACK = 1 - -# path to lapack library in case of a non-standard installation -USE_LAPACK_PATH = $(DEPS_PATH)/lib - -# add path to intel library, you may need it for MKL, if you did not add the path -# to environment variable -USE_INTEL_PATH = NONE - -# If use MKL, choose static link automatically to allow python wrapper -ifeq ($(USE_BLAS), mkl) -USE_STATIC_MKL = 1 -else -USE_STATIC_MKL = NONE -endif - -#---------------------------- -# Settings for power and arm arch -#---------------------------- -ARCH := $(shell uname -a) -ifneq (,$(filter $(ARCH), armv6l armv7l powerpc64le ppc64le aarch64)) - USE_SSE=0 -else - USE_SSE=1 -endif - -#---------------------------- -# distributed computing -#---------------------------- - -# whether or not to enable multi-machine supporting -USE_DIST_KVSTORE = 1 - -# whether or not allow to read and write HDFS directly. If yes, then hadoop is -# required -USE_HDFS = 0 - -# path to libjvm.so. required if USE_HDFS=1 -LIBJVM=$(JAVA_HOME)/jre/lib/amd64/server - -# whether or not allow to read and write AWS S3 directly. If yes, then -# libcurl4-openssl-dev is required, it can be installed on Ubuntu by -# sudo apt-get install -y libcurl4-openssl-dev -USE_S3 = 1 - -#---------------------------- -# additional operators -#---------------------------- - -# path to folders containing projects specific operators that you don't want to put in src/operators -EXTRA_OPERATORS = - - -#---------------------------- -# plugins -#---------------------------- - -# whether to use caffe integration. This requires installing caffe. -# You also need to add CAFFE_PATH/build/lib to your LD_LIBRARY_PATH -# CAFFE_PATH = $(HOME)/caffe -# MXNET_PLUGINS += plugin/caffe/caffe.mk - -# whether to use torch integration. This requires installing torch. -# You also need to add TORCH_PATH/install/lib to your LD_LIBRARY_PATH -# TORCH_PATH = $(HOME)/torch -# MXNET_PLUGINS += plugin/torch/torch.mk - -# WARPCTC_PATH = $(HOME)/warp-ctc -# MXNET_PLUGINS += plugin/warpctc/warpctc.mk - -# whether to use sframe integration. This requires build sframe -# git@github.com:dato-code/SFrame.git -# SFRAME_PATH = $(HOME)/SFrame -# MXNET_PLUGINS += plugin/sframe/plugin.mk diff --git a/make/staticbuild/linux_cu100.mk b/make/staticbuild/linux_cu100.mk deleted file mode 100644 index 855485c5b6df..000000000000 --- a/make/staticbuild/linux_cu100.mk +++ /dev/null @@ -1,180 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# -#------------------------------------------------------------------------------- -# Template configuration for compiling mxnet for making python wheel -#------------------------------------------------------------------------------- - -#--------------------- -# choice of compiler -#-------------------- - -export CC = gcc -export CXX = g++ -export NVCC = nvcc - -# whether compile with options for MXNet developer -DEV = 0 - -# whether compile with debug -DEBUG = 0 - -# whether to turn on signal handler (e.g. segfault logger) -USE_SIGNAL_HANDLER = 1 - -# the additional link flags you want to add -ifdef USE_SYSTEM_CUDA -ADD_LDFLAGS += -L$(DEPS_PATH)/lib -lpng -ltiff -ljpeg -lz -ldl -lgfortran -Wl,--version-script=$(CURDIR)/make/config/libmxnet.ver,-rpath,'$${ORIGIN}',--gc-sections -else -ADD_LDFLAGS += -L$(DEPS_PATH)/lib $(DEPS_PATH)/lib/libculibos.a -lpng -ltiff -ljpeg -lz -ldl -lgfortran -Wl,--version-script=$(CURDIR)/make/config/libmxnet.ver,-rpath,'$${ORIGIN}',--gc-sections -endif - -# the additional compile flags you want to add -ADD_CFLAGS += -I$(DEPS_PATH)/include -ffunction-sections -fdata-sections - -#--------------------------------------------- -# matrix computation libraries for CPU/GPU -#--------------------------------------------- - -# choose the version of blas you want to use -# can be: mkl, blas, atlas, openblas -# in default use atlas for linux while apple for osx -USE_BLAS=openblas - -# whether use opencv during compilation -# you can disable it, however, you will not able to use -# imbin iterator -USE_OPENCV = 1 -# Add OpenCV include path, in which the directory `opencv2` exists -USE_OPENCV_INC_PATH = NONE -# Add OpenCV shared library path, in which the shared library exists -USE_OPENCV_LIB_PATH = NONE - -# whether use CUDA during compile -USE_CUDA = 1 - -# add the path to CUDA library to link and compile flag -# if you have already add them to environment variable, leave it as NONE -# USE_CUDA_PATH = /usr/local/cuda -ifdef USE_SYSTEM_CUDA -USE_CUDA_PATH = /usr/local/cuda-10.0 -else -USE_CUDA_PATH = $(DEPS_PATH)/usr/local/cuda-10.0 -endif - -# whether to use CuDNN library -USE_CUDNN = 1 - -# whether to use NCCL library -USE_NCCL = 1 - -# CUDA architecture setting: going with all of them. -# For CUDA < 6.0, comment the *_50 lines for compatibility. -# CUDA_ARCH := - -# whether use cuda runtime compiling for writing kernels in native language (i.e. Python) -ENABLE_CUDA_RTC = 1 - -USE_NVTX=1 - -# use openmp for parallelization -USE_OPENMP = 1 -USE_OPERATOR_TUNING = 1 -USE_LIBJPEG_TURBO = 1 - -# whether use MKL-DNN library -USE_MKLDNN = 1 - -# whether use NNPACK library -USE_NNPACK = 0 - -# whether use lapack during compilation -# only effective when compiled with blas versions openblas/apple/atlas/mkl -USE_LAPACK = 1 - -# path to lapack library in case of a non-standard installation -USE_LAPACK_PATH = $(DEPS_PATH)/lib - -# add path to intel library, you may need it for MKL, if you did not add the path -# to environment variable -USE_INTEL_PATH = NONE - -# If use MKL, choose static link automatically to allow python wrapper -ifeq ($(USE_BLAS), mkl) -USE_STATIC_MKL = 1 -else -USE_STATIC_MKL = NONE -endif - -#---------------------------- -# Settings for power and arm arch -#---------------------------- -ARCH := $(shell uname -a) -ifneq (,$(filter $(ARCH), armv6l armv7l powerpc64le ppc64le aarch64)) - USE_SSE=0 -else - USE_SSE=1 -endif - -#---------------------------- -# distributed computing -#---------------------------- - -# whether or not to enable multi-machine supporting -USE_DIST_KVSTORE = 1 - -# whether or not allow to read and write HDFS directly. If yes, then hadoop is -# required -USE_HDFS = 0 - -# path to libjvm.so. required if USE_HDFS=1 -LIBJVM=$(JAVA_HOME)/jre/lib/amd64/server - -# whether or not allow to read and write AWS S3 directly. If yes, then -# libcurl4-openssl-dev is required, it can be installed on Ubuntu by -# sudo apt-get install -y libcurl4-openssl-dev -USE_S3 = 1 - -#---------------------------- -# additional operators -#---------------------------- - -# path to folders containing projects specific operators that you don't want to put in src/operators -EXTRA_OPERATORS = - - -#---------------------------- -# plugins -#---------------------------- - -# whether to use caffe integration. This requires installing caffe. -# You also need to add CAFFE_PATH/build/lib to your LD_LIBRARY_PATH -# CAFFE_PATH = $(HOME)/caffe -# MXNET_PLUGINS += plugin/caffe/caffe.mk - -# whether to use torch integration. This requires installing torch. -# You also need to add TORCH_PATH/install/lib to your LD_LIBRARY_PATH -# TORCH_PATH = $(HOME)/torch -# MXNET_PLUGINS += plugin/torch/torch.mk - -# WARPCTC_PATH = $(HOME)/warp-ctc -# MXNET_PLUGINS += plugin/warpctc/warpctc.mk - -# whether to use sframe integration. This requires build sframe -# git@github.com:dato-code/SFrame.git -# SFRAME_PATH = $(HOME)/SFrame -# MXNET_PLUGINS += plugin/sframe/plugin.mk diff --git a/make/staticbuild/linux_cu101.mk b/make/staticbuild/linux_cu101.mk deleted file mode 100644 index 7bbde85bee11..000000000000 --- a/make/staticbuild/linux_cu101.mk +++ /dev/null @@ -1,181 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# -#------------------------------------------------------------------------------- -# Template configuration for compiling mxnet for making python wheel -#------------------------------------------------------------------------------- - -#--------------------- -# choice of compiler -#-------------------- - -export CC = gcc -export CXX = g++ -export NVCC = nvcc - -# whether compile with options for MXNet developer -DEV = 0 - -# whether compile with debug -DEBUG = 0 - -# whether to turn on signal handler (e.g. segfault logger) -USE_SIGNAL_HANDLER = 1 - -# the additional link flags you want to add -ifdef USE_SYSTEM_CUDA -ADD_LDFLAGS += -L$(DEPS_PATH)/lib -lpng -ltiff -ljpeg -lz -ldl -lgfortran -Wl,--version-script=$(CURDIR)/make/config/libmxnet.ver,-rpath,'$${ORIGIN}',--gc-sections -else -ADD_LDFLAGS += -L$(DEPS_PATH)/lib $(DEPS_PATH)/lib/libculibos.a -lpng -ltiff -ljpeg -lz -ldl -lgfortran -Wl,--version-script=$(CURDIR)/make/config/libmxnet.ver,-rpath,'$${ORIGIN}',--gc-sections -endif - -# the additional compile flags you want to add -ADD_CFLAGS += -I$(DEPS_PATH)/include -ffunction-sections -fdata-sections - -#--------------------------------------------- -# matrix computation libraries for CPU/GPU -#--------------------------------------------- - -# choose the version of blas you want to use -# can be: mkl, blas, atlas, openblas -# in default use atlas for linux while apple for osx -USE_BLAS=openblas - -# whether use opencv during compilation -# you can disable it, however, you will not able to use -# imbin iterator -USE_OPENCV = 1 -# Add OpenCV include path, in which the directory `opencv2` exists -USE_OPENCV_INC_PATH = NONE -# Add OpenCV shared library path, in which the shared library exists -USE_OPENCV_LIB_PATH = NONE - -# whether use CUDA during compile -USE_CUDA = 1 - -# add the path to CUDA library to link and compile flag -# if you have already add them to environment variable, leave it as NONE -# USE_CUDA_PATH = /usr/local/cuda -ifdef USE_SYSTEM_CUDA -USE_CUDA_PATH = /usr/local/cuda-10.1 -else -USE_CUDA_PATH = $(DEPS_PATH)/usr/local/cuda-10.1 -endif - -# whether to use CuDNN library -USE_CUDNN = 1 - -# whether to use NCCL library -USE_NCCL = 1 - -# CUDA architecture setting: going with all of them. -# For CUDA < 6.0, comment the *_50 lines for compatibility. -# CUDA_ARCH := - -# whether use cuda runtime compiling for writing kernels in native language (i.e. Python) -ENABLE_CUDA_RTC = 1 - -USE_NVTX=1 - -# use openmp for parallelization -USE_OPENMP = 1 -USE_OPERATOR_TUNING = 1 -USE_LIBJPEG_TURBO = 1 - -# whether use MKL-DNN library -USE_MKLDNN = 1 - -# whether use NNPACK library -USE_NNPACK = 0 - -# whether use lapack during compilation -# only effective when compiled with blas versions openblas/apple/atlas/mkl -USE_LAPACK = 1 - -# path to lapack library in case of a non-standard installation -USE_LAPACK_PATH = $(DEPS_PATH)/lib - -# add path to intel library, you may need it for MKL, if you did not add the path -# to environment variable -USE_INTEL_PATH = NONE - -# If use MKL, choose static link automatically to allow python wrapper -ifeq ($(USE_BLAS), mkl) -USE_STATIC_MKL = 1 -else -USE_STATIC_MKL = NONE -endif - -#---------------------------- -# Settings for power and arm arch -#---------------------------- -ARCH := $(shell uname -a) -ifneq (,$(filter $(ARCH), armv6l armv7l powerpc64le ppc64le aarch64)) - USE_SSE=0 -else - USE_SSE=1 -endif - -#---------------------------- -# distributed computing -#---------------------------- - -# whether or not to enable multi-machine supporting -USE_DIST_KVSTORE = 1 - -# whether or not allow to read and write HDFS directly. If yes, then hadoop is -# required -USE_HDFS = 0 - -# path to libjvm.so. required if USE_HDFS=1 -LIBJVM=$(JAVA_HOME)/jre/lib/amd64/server - -# whether or not allow to read and write AWS S3 directly. If yes, then -# libcurl4-openssl-dev is required, it can be installed on Ubuntu by -# sudo apt-get install -y libcurl4-openssl-dev -USE_S3 = 1 - -#---------------------------- -# additional operators -#---------------------------- - -# path to folders containing projects specific operators that you don't want to put in src/operators -EXTRA_OPERATORS = - - -#---------------------------- -# plugins -#---------------------------- - -# whether to use caffe integration. This requires installing caffe. -# You also need to add CAFFE_PATH/build/lib to your LD_LIBRARY_PATH -# CAFFE_PATH = $(HOME)/caffe -# MXNET_PLUGINS += plugin/caffe/caffe.mk - -# whether to use torch integration. This requires installing torch. -# You also need to add TORCH_PATH/install/lib to your LD_LIBRARY_PATH -# TORCH_PATH = $(HOME)/torch -# MXNET_PLUGINS += plugin/torch/torch.mk - -# WARPCTC_PATH = $(HOME)/warp-ctc -# MXNET_PLUGINS += plugin/warpctc/warpctc.mk - -# whether to use sframe integration. This requires build sframe -# git@github.com:dato-code/SFrame.git -# SFRAME_PATH = $(HOME)/SFrame -# MXNET_PLUGINS += plugin/sframe/plugin.mk - diff --git a/make/staticbuild/linux_cu102.mk b/make/staticbuild/linux_cu102.mk deleted file mode 100644 index 963842a19cff..000000000000 --- a/make/staticbuild/linux_cu102.mk +++ /dev/null @@ -1,181 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# -#------------------------------------------------------------------------------- -# Template configuration for compiling mxnet for making python wheel -#------------------------------------------------------------------------------- - -#--------------------- -# choice of compiler -#-------------------- - -export CC = gcc -export CXX = g++ -export NVCC = nvcc - -# whether compile with options for MXNet developer -DEV = 0 - -# whether compile with debug -DEBUG = 0 - -# whether to turn on signal handler (e.g. segfault logger) -USE_SIGNAL_HANDLER = 1 - -# the additional link flags you want to add -ifdef USE_SYSTEM_CUDA -ADD_LDFLAGS += -L$(DEPS_PATH)/lib -lpng -ltiff -ljpeg -lz -ldl -lgfortran -Wl,--version-script=$(CURDIR)/make/config/libmxnet.ver,-rpath,'$${ORIGIN}',--gc-sections -else -ADD_LDFLAGS += -L$(DEPS_PATH)/lib $(DEPS_PATH)/lib/libculibos.a -lpng -ltiff -ljpeg -lz -ldl -lgfortran -Wl,--version-script=$(CURDIR)/make/config/libmxnet.ver,-rpath,'$${ORIGIN}',--gc-sections -endif - -# the additional compile flags you want to add -ADD_CFLAGS += -I$(DEPS_PATH)/include -ffunction-sections -fdata-sections - -#--------------------------------------------- -# matrix computation libraries for CPU/GPU -#--------------------------------------------- - -# choose the version of blas you want to use -# can be: mkl, blas, atlas, openblas -# in default use atlas for linux while apple for osx -USE_BLAS=openblas - -# whether use opencv during compilation -# you can disable it, however, you will not able to use -# imbin iterator -USE_OPENCV = 1 -# Add OpenCV include path, in which the directory `opencv2` exists -USE_OPENCV_INC_PATH = NONE -# Add OpenCV shared library path, in which the shared library exists -USE_OPENCV_LIB_PATH = NONE - -# whether use CUDA during compile -USE_CUDA = 1 - -# add the path to CUDA library to link and compile flag -# if you have already add them to environment variable, leave it as NONE -# USE_CUDA_PATH = /usr/local/cuda -ifdef USE_SYSTEM_CUDA -USE_CUDA_PATH = /usr/local/cuda-10.2 -else -USE_CUDA_PATH = $(DEPS_PATH)/usr/local/cuda-10.2 -endif - -# whether to use CuDNN library -USE_CUDNN = 1 - -# whether to use NCCL library -USE_NCCL = 1 - -# CUDA architecture setting: going with all of them. -# For CUDA < 6.0, comment the *_50 lines for compatibility. -# CUDA_ARCH := - -# whether use cuda runtime compiling for writing kernels in native language (i.e. Python) -ENABLE_CUDA_RTC = 1 - -USE_NVTX=1 - -# use openmp for parallelization -USE_OPENMP = 1 -USE_OPERATOR_TUNING = 1 -USE_LIBJPEG_TURBO = 1 - -# whether use MKL-DNN library -USE_MKLDNN = 1 - -# whether use NNPACK library -USE_NNPACK = 0 - -# whether use lapack during compilation -# only effective when compiled with blas versions openblas/apple/atlas/mkl -USE_LAPACK = 1 - -# path to lapack library in case of a non-standard installation -USE_LAPACK_PATH = $(DEPS_PATH)/lib - -# add path to intel library, you may need it for MKL, if you did not add the path -# to environment variable -USE_INTEL_PATH = NONE - -# If use MKL, choose static link automatically to allow python wrapper -ifeq ($(USE_BLAS), mkl) -USE_STATIC_MKL = 1 -else -USE_STATIC_MKL = NONE -endif - -#---------------------------- -# Settings for power and arm arch -#---------------------------- -ARCH := $(shell uname -a) -ifneq (,$(filter $(ARCH), armv6l armv7l powerpc64le ppc64le aarch64)) - USE_SSE=0 -else - USE_SSE=1 -endif - -#---------------------------- -# distributed computing -#---------------------------- - -# whether or not to enable multi-machine supporting -USE_DIST_KVSTORE = 1 - -# whether or not allow to read and write HDFS directly. If yes, then hadoop is -# required -USE_HDFS = 0 - -# path to libjvm.so. required if USE_HDFS=1 -LIBJVM=$(JAVA_HOME)/jre/lib/amd64/server - -# whether or not allow to read and write AWS S3 directly. If yes, then -# libcurl4-openssl-dev is required, it can be installed on Ubuntu by -# sudo apt-get install -y libcurl4-openssl-dev -USE_S3 = 1 - -#---------------------------- -# additional operators -#---------------------------- - -# path to folders containing projects specific operators that you don't want to put in src/operators -EXTRA_OPERATORS = - - -#---------------------------- -# plugins -#---------------------------- - -# whether to use caffe integration. This requires installing caffe. -# You also need to add CAFFE_PATH/build/lib to your LD_LIBRARY_PATH -# CAFFE_PATH = $(HOME)/caffe -# MXNET_PLUGINS += plugin/caffe/caffe.mk - -# whether to use torch integration. This requires installing torch. -# You also need to add TORCH_PATH/install/lib to your LD_LIBRARY_PATH -# TORCH_PATH = $(HOME)/torch -# MXNET_PLUGINS += plugin/torch/torch.mk - -# WARPCTC_PATH = $(HOME)/warp-ctc -# MXNET_PLUGINS += plugin/warpctc/warpctc.mk - -# whether to use sframe integration. This requires build sframe -# git@github.com:dato-code/SFrame.git -# SFRAME_PATH = $(HOME)/SFrame -# MXNET_PLUGINS += plugin/sframe/plugin.mk - diff --git a/make/staticbuild/linux_cu92.mk b/make/staticbuild/linux_cu92.mk deleted file mode 100644 index 2cbbdd25eeaf..000000000000 --- a/make/staticbuild/linux_cu92.mk +++ /dev/null @@ -1,180 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# -#------------------------------------------------------------------------------- -# Template configuration for compiling mxnet for making python wheel -#------------------------------------------------------------------------------- - -#--------------------- -# choice of compiler -#-------------------- - -export CC = gcc -export CXX = g++ -export NVCC = nvcc - -# whether compile with options for MXNet developer -DEV = 0 - -# whether compile with debug -DEBUG = 0 - -# whether to turn on signal handler (e.g. segfault logger) -USE_SIGNAL_HANDLER = 1 - -# the additional link flags you want to add -ifdef USE_SYSTEM_CUDA -ADD_LDFLAGS += -L$(DEPS_PATH)/lib -lpng -ltiff -ljpeg -lz -ldl -lgfortran -Wl,--version-script=$(CURDIR)/make/config/libmxnet.ver,-rpath,'$${ORIGIN}',--gc-sections -else -ADD_LDFLAGS += -L$(DEPS_PATH)/lib $(DEPS_PATH)/lib/libculibos.a -lpng -ltiff -ljpeg -lz -ldl -lgfortran -Wl,--version-script=$(CURDIR)/make/config/libmxnet.ver,-rpath,'$${ORIGIN}',--gc-sections -endif - -# the additional compile flags you want to add -ADD_CFLAGS += -I$(DEPS_PATH)/include -ffunction-sections -fdata-sections - -#--------------------------------------------- -# matrix computation libraries for CPU/GPU -#--------------------------------------------- - -# choose the version of blas you want to use -# can be: mkl, blas, atlas, openblas -# in default use atlas for linux while apple for osx -USE_BLAS=openblas - -# whether use opencv during compilation -# you can disable it, however, you will not able to use -# imbin iterator -USE_OPENCV = 1 -# Add OpenCV include path, in which the directory `opencv2` exists -USE_OPENCV_INC_PATH = NONE -# Add OpenCV shared library path, in which the shared library exists -USE_OPENCV_LIB_PATH = NONE - -# whether use CUDA during compile -USE_CUDA = 1 - -# add the path to CUDA library to link and compile flag -# if you have already add them to environment variable, leave it as NONE -# USE_CUDA_PATH = /usr/local/cuda -ifdef USE_SYSTEM_CUDA -USE_CUDA_PATH = /usr/local/cuda-9.2 -else -USE_CUDA_PATH = $(DEPS_PATH)/usr/local/cuda-9.2 -endif - -# whether to use CuDNN library -USE_CUDNN = 1 - -# whether to use NCCL library -USE_NCCL = 1 - -# CUDA architecture setting: going with all of them. -# For CUDA < 6.0, comment the *_50 lines for compatibility. -# CUDA_ARCH := - -# whether use cuda runtime compiling for writing kernels in native language (i.e. Python) -ENABLE_CUDA_RTC = 1 - -USE_NVTX=1 - -# use openmp for parallelization -USE_OPENMP = 1 -USE_OPERATOR_TUNING = 1 -USE_LIBJPEG_TURBO = 1 - -# whether use MKL-DNN library -USE_MKLDNN = 1 - -# whether use NNPACK library -USE_NNPACK = 0 - -# whether use lapack during compilation -# only effective when compiled with blas versions openblas/apple/atlas/mkl -USE_LAPACK = 1 - -# path to lapack library in case of a non-standard installation -USE_LAPACK_PATH = $(DEPS_PATH)/lib - -# add path to intel library, you may need it for MKL, if you did not add the path -# to environment variable -USE_INTEL_PATH = NONE - -# If use MKL, choose static link automatically to allow python wrapper -ifeq ($(USE_BLAS), mkl) -USE_STATIC_MKL = 1 -else -USE_STATIC_MKL = NONE -endif - -#---------------------------- -# Settings for power and arm arch -#---------------------------- -ARCH := $(shell uname -a) -ifneq (,$(filter $(ARCH), armv6l armv7l powerpc64le ppc64le aarch64)) - USE_SSE=0 -else - USE_SSE=1 -endif - -#---------------------------- -# distributed computing -#---------------------------- - -# whether or not to enable multi-machine supporting -USE_DIST_KVSTORE = 1 - -# whether or not allow to read and write HDFS directly. If yes, then hadoop is -# required -USE_HDFS = 0 - -# path to libjvm.so. required if USE_HDFS=1 -LIBJVM=$(JAVA_HOME)/jre/lib/amd64/server - -# whether or not allow to read and write AWS S3 directly. If yes, then -# libcurl4-openssl-dev is required, it can be installed on Ubuntu by -# sudo apt-get install -y libcurl4-openssl-dev -USE_S3 = 1 - -#---------------------------- -# additional operators -#---------------------------- - -# path to folders containing projects specific operators that you don't want to put in src/operators -EXTRA_OPERATORS = - - -#---------------------------- -# plugins -#---------------------------- - -# whether to use caffe integration. This requires installing caffe. -# You also need to add CAFFE_PATH/build/lib to your LD_LIBRARY_PATH -# CAFFE_PATH = $(HOME)/caffe -# MXNET_PLUGINS += plugin/caffe/caffe.mk - -# whether to use torch integration. This requires installing torch. -# You also need to add TORCH_PATH/install/lib to your LD_LIBRARY_PATH -# TORCH_PATH = $(HOME)/torch -# MXNET_PLUGINS += plugin/torch/torch.mk - -# WARPCTC_PATH = $(HOME)/warp-ctc -# MXNET_PLUGINS += plugin/warpctc/warpctc.mk - -# whether to use sframe integration. This requires build sframe -# git@github.com:dato-code/SFrame.git -# SFRAME_PATH = $(HOME)/SFrame -# MXNET_PLUGINS += plugin/sframe/plugin.mk diff --git a/make/staticbuild/linux_native.mk b/make/staticbuild/linux_native.mk deleted file mode 100644 index 348a659cd9e2..000000000000 --- a/make/staticbuild/linux_native.mk +++ /dev/null @@ -1,167 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# -#------------------------------------------------------------------------------- -# Template configuration for compiling mxnet for making python wheel -#------------------------------------------------------------------------------- - -#--------------------- -# choice of compiler -#-------------------- - -export CC = gcc -export CXX = g++ -export NVCC = nvcc - -# whether compile with options for MXNet developer -DEV = 0 - -# whether compile with debug -DEBUG = 0 - -# whether to turn on signal handler (e.g. segfault logger) -USE_SIGNAL_HANDLER = 1 - -# the additional link flags you want to add -ADD_LDFLAGS += -L$(DEPS_PATH)/lib -lpng -ltiff -ljpeg -lz -lgfortran -ldl -Wl,--version-script=$(CURDIR)/make/config/libmxnet.ver,-rpath,'$${ORIGIN}',--gc-sections - -# the additional compile flags you want to add -ADD_CFLAGS += -I$(DEPS_PATH)/include -ffunction-sections -fdata-sections - -#--------------------------------------------- -# matrix computation libraries for CPU/GPU -#--------------------------------------------- - -# choose the version of blas you want to use -# can be: mkl, blas, atlas, openblas -# in default use atlas for linux while apple for osx -USE_BLAS=openblas - -# whether use opencv during compilation -# you can disable it, however, you will not able to use -# imbin iterator -USE_OPENCV = 1 -# Add OpenCV include path, in which the directory `opencv2` exists -USE_OPENCV_INC_PATH = NONE -# Add OpenCV shared library path, in which the shared library exists -USE_OPENCV_LIB_PATH = NONE - -# whether use CUDA during compile -USE_CUDA = 0 - -# add the path to CUDA library to link and compile flag -# if you have already add them to environment variable, leave it as NONE -# USE_CUDA_PATH = /usr/local/cuda -USE_CUDA_PATH = NONE - -# whether use CuDNN R3 library -USE_CUDNN = 0 - -# CUDA architecture setting: going with all of them. -# For CUDA < 6.0, comment the *_50 lines for compatibility. -# CUDA_ARCH := - -# whether use cuda runtime compiling for writing kernels in native language (i.e. Python) -ENABLE_CUDA_RTC = 0 - -# use openmp for parallelization -USE_OPENMP = 1 -USE_OPERATOR_TUNING = 1 -USE_LIBJPEG_TURBO = 1 - -# whether use MKL-DNN library -USE_MKLDNN = 0 - -# whether use NNPACK library -USE_NNPACK = 0 - -# whether use lapack during compilation -# only effective when compiled with blas versions openblas/apple/atlas/mkl -USE_LAPACK = 1 - -# path to lapack library in case of a non-standard installation -USE_LAPACK_PATH = $(DEPS_PATH)/lib - -# add path to intel library, you may need it for MKL, if you did not add the path -# to environment variable -USE_INTEL_PATH = NONE - -# If use MKL, choose static link automatically to allow python wrapper -ifeq ($(USE_BLAS), mkl) -USE_STATIC_MKL = 1 -else -USE_STATIC_MKL = NONE -endif - -#---------------------------- -# Settings for power and arm arch -#---------------------------- -ARCH := $(shell uname -a) -ifneq (,$(filter $(ARCH), armv6l armv7l powerpc64le ppc64le aarch64)) - USE_SSE=0 -else - USE_SSE=1 -endif - -#---------------------------- -# distributed computing -#---------------------------- - -# whether or not to enable multi-machine supporting -USE_DIST_KVSTORE = 1 - -# whether or not allow to read and write HDFS directly. If yes, then hadoop is -# required -USE_HDFS = 0 - -# path to libjvm.so. required if USE_HDFS=1 -LIBJVM=$(JAVA_HOME)/jre/lib/amd64/server - -# whether or not allow to read and write AWS S3 directly. If yes, then -# libcurl4-openssl-dev is required, it can be installed on Ubuntu by -# sudo apt-get install -y libcurl4-openssl-dev -USE_S3 = 1 - -#---------------------------- -# additional operators -#---------------------------- - -# path to folders containing projects specific operators that you don't want to put in src/operators -EXTRA_OPERATORS = - - -#---------------------------- -# plugins -#---------------------------- - -# whether to use caffe integration. This requires installing caffe. -# You also need to add CAFFE_PATH/build/lib to your LD_LIBRARY_PATH -# CAFFE_PATH = $(HOME)/caffe -# MXNET_PLUGINS += plugin/caffe/caffe.mk - -# whether to use torch integration. This requires installing torch. -# You also need to add TORCH_PATH/install/lib to your LD_LIBRARY_PATH -# TORCH_PATH = $(HOME)/torch -# MXNET_PLUGINS += plugin/torch/torch.mk - -# WARPCTC_PATH = $(HOME)/warp-ctc -# MXNET_PLUGINS += plugin/warpctc/warpctc.mk - -# whether to use sframe integration. This requires build sframe -# git@github.com:dato-code/SFrame.git -# SFRAME_PATH = $(HOME)/SFrame -# MXNET_PLUGINS += plugin/sframe/plugin.mk diff --git a/mkldnn.mk b/mkldnn.mk deleted file mode 100644 index a22a64a018a8..000000000000 --- a/mkldnn.mk +++ /dev/null @@ -1,65 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -ifeq ($(USE_MKLDNN), 1) - MKLDNN_SUBMODDIR = $(ROOTDIR)/3rdparty/mkldnn - MKLDNN_BUILDDIR = $(MKLDNN_SUBMODDIR)/build - MXNET_LIBDIR = $(ROOTDIR)/lib - MXNET_INCLDIR = $(ROOTDIR)/include - MKLDNN_LIBFILE = $(MKLDNNROOT)/lib/libdnnl.a -endif - -mkldnn_FLAGS = -DCMAKE_INSTALL_PREFIX=$(MKLDNNROOT) -mkldnn_FLAGS += -DCMAKE_INSTALL_LIBDIR=lib -mkldnn_FLAGS += -B$(MKLDNN_BUILDDIR) -mkldnn_FLAGS += -DMKLDNN_ARCH_OPT_FLAGS="" -mkldnn_FLAGS += -DMKLDNN_BUILD_TESTS=OFF -mkldnn_FLAGS += -DMKLDNN_BUILD_EXAMPLES=OFF -mkldnn_FLAGS += -DMKLDNN_ENABLE_JIT_PROFILING=OFF -mkldnn_FLAGS += -DMKLDNN_LIBRARY_TYPE=STATIC -mkldnn_FLAGS += -DDNNL_ENABLE_CONCURRENT_EXEC=ON - -ifneq ($(USE_OPENMP), 1) - mkldnn_FLAGS += -DMKLDNN_CPU_RUNTIME=SEQ -endif - -ifeq ($(DEBUG), 1) - mkldnn_FLAGS += -DCMAKE_BUILD_TYPE=Debug -endif - -.PHONY: mkldnn mkldnn_clean - -mkldnn_build: $(MKLDNN_LIBFILE) - -$(MKLDNN_LIBFILE): - mkdir -p $(MKLDNNROOT)/lib - cmake $(MKLDNN_SUBMODDIR) $(mkldnn_FLAGS) - $(MAKE) -C $(MKLDNN_BUILDDIR) VERBOSE=1 - $(MAKE) -C $(MKLDNN_BUILDDIR) install - cp $(MKLDNN_BUILDDIR)/include/dnnl_version.h $(MXNET_INCLDIR)/mkldnn/. - cp $(MKLDNN_BUILDDIR)/include/dnnl_config.h $(MXNET_INCLDIR)/mkldnn/. - -mkldnn_clean: - $(RM) -r 3rdparty/mkldnn/build - $(RM) -r include/mkldnn/dnnl_version.h - $(RM) -r include/mkldnn/dnnl_config.h - -ifeq ($(USE_MKLDNN), 1) -mkldnn: mkldnn_build -else -mkldnn: -endif diff --git a/setup-utils/install-mxnet-amz-linux.sh b/setup-utils/install-mxnet-amz-linux.sh deleted file mode 100644 index 66788a984da6..000000000000 --- a/setup-utils/install-mxnet-amz-linux.sh +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -###################################################################### -# This script installs MXNet for Python along with all required dependencies on a Amazon Linux Machine. -###################################################################### -set -e -# CMake is required for installing dependencies. -sudo yum install -y cmake - -# Set appropriate library path env variables -echo 'export PATH=/usr/local/bin:$PATH' >> ~/.profile -echo 'export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH' >> ~/.profile -echo 'export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH' >> ~/.profile -echo '. ~/.profile' >> ~/.bashrc -source ~/.profile - -# Install gcc-4.8/make and other development tools on Amazon Linux -# Reference: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/compile-software.html -# Install Python, Numpy, Scipy and set up tools. -sudo yum groupinstall -y "Development Tools" -sudo yum install -y python27 python27-setuptools python27-tools python-pip graphviz -sudo yum install -y python27-numpy python27-scipy python27-nose python27-matplotlib - -# Install OpenBLAS at /usr/local/openblas -git clone https://github.com/xianyi/OpenBLAS -cd OpenBLAS -make FC=gfortran -j $(($(nproc) + 1)) -sudo make PREFIX=/usr/local install -cd .. - -# Install OpenCV at /usr/local/opencv -git clone https://github.com/opencv/opencv -cd opencv -mkdir -p build -cd build -cmake -D BUILD_opencv_gpu=OFF -D WITH_EIGEN=ON -D WITH_TBB=ON -D WITH_CUDA=OFF -D WITH_1394=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local .. -sudo make PREFIX=/usr/local install - -# Export env variables for pkg config -export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH - -# Install MXNet Core without CUDA -MXNET_HOME="$HOME/mxnet/" -cd "$MXNET_HOME" -cp make/config.mk . -echo "USE_CUDA=0" >>config.mk -echo "USE_CUDNN=0" >>config.mk -echo "USE_BLAS=openblas" >>config.mk -echo "ADD_CFLAGS += -I/usr/include/openblas" >>config.mk -echo "ADD_LDFLAGS += -lopencv_core -lopencv_imgproc -lopencv_imgcodecs" >>config.mk -sudo make -j$(nproc) - -# Install MXNet Python package -cd python -sudo python setup.py install - -# Add MXNet path to ~/.bashrc file -echo "export PYTHONPATH=$MXNET_HOME/python:$PYTHONPATH" >> ~/.bashrc -source ~/.bashrc - -# Install graphviz for visualizing network graph and jupyter notebook to run tutorials and examples -sudo pip install graphviz -sudo pip install jupyter - -echo "Done! MXNet for Python installation is complete. Go ahead and explore MXNet with Python :-)" diff --git a/setup-utils/install-mxnet-fedora-python.sh b/setup-utils/install-mxnet-fedora-python.sh deleted file mode 100644 index 86116665db88..000000000000 --- a/setup-utils/install-mxnet-fedora-python.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -###################################################################### -# This script installs MXNet for Python along with all required dependencies on a Fedora Machine. -# Tested on Fedora 21.0 + distro. -###################################################################### -set -e - -MXNET_HOME="$HOME/mxnet/" -echo "MXNet root folder: $MXNET_HOME" - -echo "Installing basic development tools, atlas, opencv, pip, graphviz ..." -sudo yum update -sudo yum groupinstall -y "Development Tools" "Development Libraries" -sudo yum install -y atlas atlas-devel opencv opencv-devel graphviz graphviz-devel - -echo "Building MXNet core. This can take few minutes..." -cd "$MXNET_HOME" -cp make/config.mk . -make -j$(nproc) - -echo "Installing Numpy..." -sudo yum install numpy - -echo "Installing Python setuptools..." -sudo yum install -y python-setuptools python-pip - -echo "Adding MXNet path to your ~/.bashrc file" -echo "export PYTHONPATH=$MXNET_HOME/python:$PYTHONPATH" >> ~/.bashrc -source ~/.bashrc - -echo "Install Graphviz for plotting MXNet network graph..." -sudo pip install graphviz - -echo "Installing Jupyter notebook..." -sudo pip install jupyter - -echo "Done! MXNet for Python installation is complete. Go ahead and explore MXNet with Python :-)" diff --git a/setup-utils/install-mxnet-osx-python.sh b/setup-utils/install-mxnet-osx-python.sh deleted file mode 100755 index 0dde8096b315..000000000000 --- a/setup-utils/install-mxnet-osx-python.sh +++ /dev/null @@ -1,554 +0,0 @@ -#!/bin/bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -# -# This scripts installs the dependencies and compiles -# MXNet source. -# -# The script also installs the MXNet package for Python. -# - -#set -ex - -export MXNET_GITPATH="https://github.com/apache/incubator-mxnet" - - -if [ -z ${MXNET_TAG} ]; -then - export MXNET_BRANCH_TAG="" -else - export MXNET_BRANCH_TAG="--branch $MXNET_TAG" -fi - -export TARIKH=`/bin/date +%Y-%m-%d-%H:%M:%S` -if [ -z ${MXNET_HOME} ]; -then - export MXNET_HOME="$HOME/mxnet" -fi -export MXNET_HOME_OLD="$HOME/mxnet_${TARIKH}" -export MXNET_LOG=${MXNET_HOME}/buildMXNet_mac.log - -# Insert the Homebrew directory at the top of your PATH environment variable -export PATH="$PATH:/usr/local/bin:/usr/local/sbin" # for brew -export PATH="$PATH:/usr/bin:/opt/local/bin" # for macports - -export MACPORTS_WEB="https://guide.macports.org/chunked/installing.macports.html" - -export BREW_PKGS="pkg-config python opencv graphviz homebrew/core/openblas" -export PORT_PKGS="pkgconfig python36 opencv graphviz openblas-devel" - -# graphviz, opencv-python skipped since already installed via brew/port -export PIP_PKGS_ALL="cython numpy" -export PIP_PKGS_USER="requests jupyter" - -export SLEEP_TIME=2 -LINE="########################################################################" - -print_intro_msg() { - # - # NOTE: Please test and ensure that the message does NOT scroll - # beyond the standard 80x25 format of a terminal shell. - # - echo $LINE - echo " " - echo "MXNet is a flexible, efficient and scalable library for Deep Learning." - echo " " - echo "This script installs MXNet on MacOS in \${MXNET_HOME}" - echo "If not set, the default value of \${MXNET_HOME} = ~/mxnet" - echo "The current value of \${MXNET_HOME} = ${MXNET_HOME}" - echo " " - echo "If this directory is already present, it is renamed to retain earlier contents." - echo "You may want to check and delete this directory if not required." - echo " " - echo "This script has been tested on: MacOS El Capitan (10.11) and Sierra (10.12)" - echo " " - echo "If you face any problems with this script, please let us know at:" - echo " https://discuss.mxnet.io/" - echo " " - echo "Typical run-time for this script is around 10 minutes." - echo "If your environment has never been setup for development (e.g. gcc), " - echo "it could take up to 30 minutes or longer." - echo " " - MACOS_VERSION=`/usr/bin/uname -r` - echo "Your macOS version is: $MACOS_VERSION" - echo " " - echo $LINE - read -p "Do you want to continue? (y/n): " response - echo " " - while true; do - case $response in - [Yy]* ) break;; - [Nn]* ) exit;; - * ) echo "Please answer yes or no.";; - esac - done - echo " " - echo " " - echo "MXNET GIT Path = ${MXNET_GITPATH}" - echo "MXNET Tag = ${MXNET_TAG}" - echo "You can set \$MXNET_TAG to the appropriate github repo tag" - echo "If not set, the default value used is the latest version on master" - read -p "Do you want to get a list of available tags? (y/n): " response - while true; do - case $response in - [Yy]* ) - echo "Available tags are:" - git ls-remote --tags ${MXNET_GITPATH} | sed 's/refs\/tags\///' | grep -v v | grep -v 201 \ - | grep -v "{}" | awk '{ print " ", $2 }'; - break;; - [Nn]* ) break;; - * ) echo "Please answer yes or no.";; - esac - done - read -p "Do you want to continue? (y/n): " response - echo " " - while true; do - case $response in - [Yy]* ) break;; - [Nn]* ) exit;; - * ) echo "Please answer yes or no.";; - esac - done -} # print_intro_msg() - -# wrapper routine to stop the script if the command invoked returns error -chkret() { - cmd=$* - echo "$cmd" - $cmd - ret=$? - if [[ ${ret} != 0 ]]; then - echo " " - echo "ERROR: Return value non-zero for: $cmd" - echo " " - exit 1 - fi -} # chkret() - -chk_mac_vers() { - export mac_vers=`sw_vers -productVersion | cut -d '.' -f 1,2` - if [[ $mac_vers != "10.11" && $mac_vers != "10.12" ]]; - then - echo " " - echo "ERROR: macOS version $mac_vers NOT supported." - echo " " - echo "Your macOS version is:" - sw_vers - echo " " - exit 1 - fi -} # chk_mac_vers() - -install_brew() { - echo " " - while true; do - echo "This script will install/update brew and " - echo "following dependent packages required for MXNet." - echo " Dependent brew packages: ${BREW_PKGS}" - echo " Dependent pip packages: ${PIP_PKGS_ALL} ${PIP_PKGS_USER}" - read -p "Do you want to continue? (y/n): " response - echo " " - case $response in - [Yy]* ) break;; - [Nn]* ) exit;; - * ) echo "Please answer yes or no.";; - esac - done - - echo " " - echo "BEGIN: Check/Install/Update Homebrew" - BREW_PATH=`which brew` - if [[ (-z ${BREW_PATH}) || (! -f ${BREW_PATH}) ]]; - then - yes '' | /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" - ret=$? - if [[ ${ret} != 0 ]]; then - echo " " - echo "ERROR: Return value non-zero for: homebrew installation using ruby" - echo " " - exit 1 - fi - else - chkret brew update - fi - echo "END: Check/Install/Update Homebrew" - echo $LINE - echo " " - - echo "BEGIN: Install dependent brew packages for MXNet: ${BREW_PKGS}" - - chkret brew tap homebrew/core - - # install each individually to see progress for each - for pkg in ${BREW_PKGS} - do - chkret brew_pkg_install ${pkg} - done - - echo "END: Install dependent brew packages for MXNet: ${BREW_PKGS}" - echo $LINE - echo " " -} # install_brew() - -brew_pkg_install () { - pkg=$1 - brew ls --versions $pkg > /dev/null - ret=$? - if [[ ${ret} != 0 ]]; then - echo "brew install $pkg" - brew install $pkg - else - echo "$pkg already installed" - fi -} # brew_pkg_install - -install_port () { - echo " " - while true; do - echo "This script will install/update port and " - echo "following dependent packages required for MXNet." - echo " Dependent port packages: ${PORT_PKGS}" - echo " Dependent pip packages: ${PIP_PKGS_ALL} ${PIP_PKGS_USER}" - read -p "Do you want to continue? (y/n): " response - echo " " - case $response in - [Yy]* ) break;; - [Nn]* ) exit;; - * ) echo "Please answer yes or no.";; - esac - done - - echo " " - echo "BEGIN: Check/Install/Update port" - MACPORTS_PATH=`which port` - if [[ (-z ${MACPORTS_PATH}) || (! -f ${MACPORTS_PATH}) ]]; - then - echo " " - echo "ERROR: Please install port for your macOS version from:" - echo " " - echo $MACPORTS_WEB - echo " " - exit 1 - else - echo "NOTE: Updating port if required" - export SLEEP_TIME=2 - sudo port upgrade outdated - echo " " - echo "port version is:" - port version - echo " " - fi - echo "END: Check/Install/Update port" - echo $LINE - echo " " - - echo "BEGIN: Install dependent port packages for MXNet: ${PORT_PKGS}" - echo " " - #sudo port install python36-readline - # install each individually to see progress for each - for pkg in ${PORT_PKGS} - do - chkret sudo port install ${pkg} - done - if [[ ! -f /opt/local/include/cblas.h ]]; - then - sudo ln -s /opt/local/include/cblas_openblas.h /opt/local/include/cblas.h - fi - #if [[ ! -f /usr/local/opt/openblas/lib/libopenblas.a ]]; - #then - # sudo mkdir -p /usr/local/opt/openblas/lib - # sudo ln -s /opt/local/lib/libopenblas.a /usr/local/opt/openblas/lib/libopenblas.a - #fi - - echo " " - echo "END: Install dependent port packages for MXNet: ${PORT_PKGS}" - echo $LINE - echo " " -} # install_port - -install_mac_pkg_manager() { - BREW_PATH=`which brew` - if [[ (-z ${BREW_PATH}) || (! -f ${BREW_PATH}) ]]; - then - echo "NOTE: brew NOT installed" - export MAC_BREW=0 - else - echo "NOTE: brew installed" - export MAC_BREW=1 - export PKG_MGR="brew" - fi - - MACPORTS_PATH=`which port` - if [[ (-z ${MACPORTS_PATH}) || (! -f ${MACPORTS_PATH}) ]]; - then - echo "NOTE: port NOT installed" - export MAC_PORT=0 - else - echo "NOTE: port installed" - export MAC_PORT=1 - export PKG_MGR="port" - fi - - if [[ $MAC_PORT -eq 1 && $MAC_BREW -eq 1 ]]; - then - echo "NOTE: Both port and brew installed" - export MAC_PKG_ASK=1 - export PKG_MGR="" - elif [[ $MAC_PORT -eq 0 && $MAC_BREW -eq 0 ]]; - then - echo "NOTE: Neither port and brew installed" - export MAC_PKG_ASK=1 - export PKG_MGR="" - else - export MAC_PKG_ASK=0 - - while true; do - echo "NOTE: Using the already installed package manager: $PKG_MGR" - read -p "Do you want to continue? (y/n): " response - echo " " - case $response in - [Yy]* ) break;; - [Nn]* ) exit;; - * ) echo "Please answer yes or no.";; - esac - done - fi - - if [[ $MAC_PKG_ASK -eq 1 ]]; - then - export MAC_BREW=0 - export MAC_PORT=0 - while true; do - echo " " - echo "NOTE: This script supports Homebrew OR Port package manager." - echo " " - read -p "Which package manager do you want to use? (b/p): " pkg_mgr - echo " " - case $pkg_mgr in - [Bb]* ) export MAC_BREW=1; break;; - [Pp]* ) export MAC_PORT=1; break;; - * ) echo "Please answer: b or p";; - esac - done - fi - - if [[ $MAC_PORT -eq 1 ]]; - then - install_port - else - install_brew - fi -} # install_mac_pkg_manager - -install_dep_pip_for_mxnet() { - echo " " - echo "BEGIN: Install dependent pip packages for MXNet: " - echo "${PIP_PKGS_ALL} ${PIP_PKGS_USER}" - echo " " - - # NOTE: sudo used here - chkret sudo easy_install pip - chkret sudo pip install --upgrade pip - for pkg in ${PIP_PKGS_ALL} - do - chkret sudo pip install ${pkg} - done - #chkret sudo pip install --upgrade numpy - - # NOTE: no sudo used here - for pkg in ${PIP_PKGS_USER} - do - chkret pip install --user ${pkg} - done - - echo "END: Install dependent pip packages for MXNet: ${PIP_PKGS_ALL} ${PIP_PKGS_USER}" - echo $LINE - echo " " -} # install_dep_pip_for_mxnet() - -# check if mxnet is already installed through other means -chk_mxnet_installed() { - mxnet_installed=`pip list --format=columns | grep mxnet` - if [ "$mxnet_installed" != "" ] - then - mxnet_version=`echo $mxnet_installed | awk '{print $2}'` - echo "MXNet ${mxnet_version} is already installed." - echo "This installation might interfere with current installation attempt." - read -p "Do you want to remove installed version? (y/n): " response - while true; do - case $response in - [Yy]* ) - sudo -H pip uninstall mxnet - chk_mxnet_installed - break - ;; - [Nn]* ) - while true; do - read -p "Do you want to continue? (y/n): " response1 - echo " " - case $response1 in - [Yy]* ) break 2;; # break out of nested loop - [Nn]* ) exit;; - * ) echo "Please answer yes or no.";; - esac - done - ;; - * ) echo "Please answer yes or no.";; - esac - done - fi -} # chk_mxnet - -download_mxnet() { - echo " " - echo "BEGIN: Download MXNet" - if [ -d ${MXNET_HOME} ]; then - mv ${MXNET_HOME} ${MXNET_HOME_OLD} - echo " " - echo "Renamed directory ${MXNET_HOME} to ${MXNET_HOME_OLD}" - echo "You may want to check and delete this directory if not required." - echo " " - sleep ${SLEEP_TIME} - fi - - - chkret git clone ${MXNET_BRANCH_TAG} ${MXNET_GITPATH}.git ${MXNET_HOME} --recursive - sleep ${SLEEP_TIME} - cd ${MXNET_HOME} - echo " " - sleep ${SLEEP_TIME} - echo "END: Download MXNet" - echo $LINE - echo " " -} # download_mxnet - -compile_mxnet() { - # Compile MXNet: It assumes MXNet source is in ${MXNET_HOME} - echo "BEGIN: Compile MXNet" - cd ${MXNET_HOME} - chkret cp make/osx.mk ./config.mk.tmp - - touch ./config.mk - # rm any old setting of USE_BLAS, if present in config file - egrep -v "^USE_BLAS" ./config.mk.tmp >> ./config.mk - # add the new setting of USE_BLAS to the config file - echo "USE_BLAS = openblas" >> ./config.mk - - if [[ $MAC_PORT -eq 1 ]]; - then - echo "ADD_CFLAGS += -I/opt/local/lib" >> ./config.mk - echo "ADD_LDFLAGS += -L/opt/local/lib" >> ./config.mk - echo "ADD_LDFLAGS += -L/opt/local/lib/graphviz/" >> ./config.mk - else - echo "ADD_CFLAGS += -I/usr/local/opt/openblas/include" >> ./config.mk - echo "ADD_LDFLAGS += -L/usr/local/opt/openblas/lib" >> ./config.mk - echo "ADD_LDFLAGS += -L/usr/local/lib/graphviz/" >> ./config.mk - fi - echo " " - - echo "NOTE: The following compile-time configurations will be used." - echo " If you want to change any of them, edit the following file" - echo " in another terminal window and then press enter to continue." - echo " " - echo " ${MXNET_HOME}/config.mk" - echo " " - echo $LINE - # remove commented and blank lines - egrep -v "^#" ${MXNET_HOME}/config.mk | egrep -v "^$" - echo $LINE - echo " " - read -p "Press enter to continue ..." - echo " " - echo "Running Make" - echo " " - chkret make -j$(sysctl -n hw.ncpu) - echo "END: Compile MXNet" - sleep ${SLEEP_TIME} - echo $LINE - echo " " -} # compile_mxnet - -install_mxnet_python() { - echo " " - echo "BEGIN: Install MXNet package for Python" - chkret cd ${MXNET_HOME}/python - chkret sudo python setup.py install - echo "END: Install MXNet package for Python" - sleep ${SLEEP_TIME} - echo $LINE - echo " " -} # install_mxnet_python - - -test_mxnet_python() { - echo "BEGIN: Test MXNet" - rm -f mxnet_test.log - python << END > mxnet_test.log -import mxnet as mx -a = mx.nd.ones((2, 3)); -print ((a*2).asnumpy()); -END - rm -f mxnet_test.expected - cat << END > mxnet_test.expected -[[2. 2. 2.] - [2. 2. 2.]] -END - diff mxnet_test.log mxnet_test.expected - if [[ $? = 0 ]]; then - echo " " - echo "SUCCESS: MXNet test passed" - echo "SUCCESS: MXNet is successfully installed and works fine!" - export MXNET_VERSION=`echo "import mxnet as mx; print(mx.__version__)" | python` - echo "SUCCESS: MXNet Version is: $MXNET_VERSION" - echo "END: Test MXNet" - echo ":-)" - echo " " - echo "FYI : You can fine-tune MXNet run-time behavior using environment variables described at:" - echo " https://mxnet.apache.org/api/faq/env_var" - echo " " - echo "NEXT: Try the tutorials at: https://mxnet.io/api" - echo " " - echo $LINE - echo " " - rm -f mxnet_test.log mxnet_test.expected - return 0 - else - echo " " - echo "ERROR: Following files differ: mxnet_test.log mxnet_test.expected" - echo "ERROR: MXNet test failed" - echo "END: Test MXNet" - echo " " - echo ":-(" - exit 1 - fi -} # test_mxnet_python() - -main() { - print_intro_msg - chk_mac_vers - install_mac_pkg_manager - install_dep_pip_for_mxnet - chk_mxnet_installed - download_mxnet - compile_mxnet - install_mxnet_python - test_mxnet_python -} # main - -main diff --git a/setup-utils/install-mxnet-ubuntu-python.sh b/setup-utils/install-mxnet-ubuntu-python.sh deleted file mode 100644 index 8aa0d0256a79..000000000000 --- a/setup-utils/install-mxnet-ubuntu-python.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -###################################################################### -# This script installs MXNet for Python along with all required dependencies on a Ubuntu Machine. -# Tested on Ubuntu 14.0 + distro. -###################################################################### -set -e - -MXNET_HOME="$HOME/mxnet/" -echo "MXNet root folder: $MXNET_HOME" - -echo "Installing build-essential, libatlas-base-dev, libopencv-dev, pip, graphviz ..." -sudo apt-get update -sudo apt-get install -y build-essential libatlas-base-dev libopencv-dev graphviz - -echo "Building MXNet core. This can take few minutes..." -cd "$MXNET_HOME" -make -j$(nproc) - -echo "Installing Numpy..." -sudo apt-get install python-numpy - -echo "Installing Python setuptools pip..." -sudo apt-get install -y python-setuptools python-pip - -echo "Updating pip..." -sudo pip install -U pip - -echo "Installing Python package for MXNet..." -cd python; sudo python setup.py install - -echo "Adding MXNet path to your ~/.bashrc file" -echo "export PYTHONPATH=$MXNET_HOME/python:$PYTHONPATH" >> ~/.bashrc -source ~/.bashrc - -echo "Install Graphviz for plotting MXNet network graph..." -sudo pip install graphviz - -echo "Installing Jupyter notebook..." -sudo pip install jupyter - -echo "Done! MXNet for Python installation is complete. Go ahead and explore MXNet with Python :-)" diff --git a/setup-utils/install-mxnet-ubuntu-r.sh b/setup-utils/install-mxnet-ubuntu-r.sh deleted file mode 100644 index a07d9d8ef10e..000000000000 --- a/setup-utils/install-mxnet-ubuntu-r.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/env bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -###################################################################### -# This script installs MXNet for R along with all required dependencies on a Ubuntu Machine. -# Tested on Ubuntu 14.04+ distro. -###################################################################### -set -e - -MXNET_HOME="$HOME/mxnet/" -echo "MXNet root folder: $MXNET_HOME" - -echo "Building MXNet core. This can take few minutes..." -cd "$MXNET_HOME" -make -j$(nproc) - -echo "Installing R dependencies. This can take few minutes..." - -# make sure we have essential tools installed -is_rscript_installed=$(which Rscript | wc -l) -if [ "$is_rscript_installed" = "0" ]; then - read -p "Seems like Rscript is not installed. Install Rscript? [Y/n]" - if [ x"$REPLY" = x"" -o x"$REPLY" = x"y" -o x"$REPLY" = x"Y" ]; then - sudo add-apt-repository -y "deb http://cran.rstudio.com/bin/linux/ubuntu `lsb_release -cs`/" - sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E084DAB9 - sudo apt-get -qq update - sudo apt-get install -y r-base-core - fi -fi - -# libcurl4-openssl-dev and libssl-dev are needed for devtools. -sudo apt-get -y install libcurl4-openssl-dev libssl-dev - -# Needed for R XML -sudo apt-get install libxml2-dev - -# Needed for R Cairo -sudo apt-get install libxt-dev - -sudo Rscript -e "install.packages('devtools', repo = 'https://cran.rstudio.com')" -cd R-package -sudo Rscript -e "library(devtools); library(methods); options(repos=c(CRAN='https://cran.rstudio.com')); install_deps(dependencies = TRUE)" -cd .. - -echo "Compiling R package. This can take few minutes..." -sudo make -f R-package/Makefile rpkg - -echo "Installing R package..." -sudo R CMD INSTALL mxnet_current_r.tar.gz - -echo "Done! MXNet for R installation is complete. Go ahead and explore MXNet with R :-)" diff --git a/setup-utils/install-mxnet-virtualenv.sh b/setup-utils/install-mxnet-virtualenv.sh deleted file mode 100755 index 5e00f79647ea..000000000000 --- a/setup-utils/install-mxnet-virtualenv.sh +++ /dev/null @@ -1,123 +0,0 @@ -#!/usr/bin/env bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -###################################################################### -# This script installs MXNet for Python in a virtualenv on OSX and ubuntu -###################################################################### -set -e -#set -x - -BUILDIR=build -VENV=mxnet_py3 - -setup_virtualenv() { - if [ ! -d $VENV ];then - virtualenv -p `which python3` $VENV - fi - source $VENV/bin/activate -} - -gpu_count() { - nvidia-smi -L | wc -l -} - -detect_platform() { - unameOut="$(uname -s)" - case "${unameOut}" in - Linux*) - distro=$(awk -F= '/^NAME/{gsub(/"/, "", $2); print $2}' /etc/os-release) - machine="Linux/$distro" - ;; - Darwin*) machine=Mac;; - CYGWIN*) machine=Cygwin;; - MINGW*) machine=MinGw;; - *) machine="UNKNOWN:${unameOut}" - esac - echo ${machine} -} - - -if [ $(gpu_count) -ge 1 ];then - USE_CUDA=ON -else - USE_CUDA=OFF -fi - -PLATFORM=$(detect_platform) -echo "Detected platform '$PLATFORM'" - -if [ $PLATFORM = "Mac" ];then - USE_OPENMP=OFF -else - USE_OPENMP=ON -fi - -if [ $PLATFORM = "Linux/Ubuntu" ];then - install_dependencies_ubuntu() { - sudo apt-get update - sudo apt-get install -y build-essential libatlas-base-dev libopencv-dev graphviz virtualenv cmake\ - ninja-build libopenblas-dev liblapack-dev python3 python3-dev - } - echo "Installing build dependencies in Ubuntu!" - install_dependencies_ubuntu -fi - -echo "Preparing a Python virtualenv in ${VENV}" -setup_virtualenv - -echo "Building MXNet core. This can take a few minutes..." -build_mxnet() { - pushd . - set -x - mkdir -p $BUILDIR && cd $BUILDIR - cmake -DUSE_CUDA=$USE_CUDA -DUSE_OPENCV=ON -DUSE_OPENMP=$USE_OPENMP -DUSE_SIGNAL_HANDLER=ON -DCMAKE_BUILD_TYPE=Release -GNinja .. - ninja - set +x - popd -} - - -build_mxnet - -echo "Installing mxnet under virtualenv ${VENV}" -install_mxnet() { - pushd . - cd python - pip3 install -e . - pip3 install opencv-python matplotlib graphviz jupyter ipython - popd -} - -install_mxnet - -echo " - -======================================================================================== -Done! MXNet for Python installation is complete. Go ahead and explore MXNet with Python. -======================================================================================== - -Use the following command to enter the virtualenv: -$ source ${VENV}/bin/activate -$ iptyhon - -You can then start using mxnet - -import mxnet as mx -x = mx.nd.ones((5,5)) -" diff --git a/setup-utils/install-mxnet-windows-python.bat b/setup-utils/install-mxnet-windows-python.bat deleted file mode 100644 index 021baaeff331..000000000000 --- a/setup-utils/install-mxnet-windows-python.bat +++ /dev/null @@ -1,295 +0,0 @@ -rem Licensed to the Apache Software Foundation (ASF) under one -rem or more contributor license agreements. See the NOTICE file -rem distributed with this work for additional information -rem regarding copyright ownership. The ASF licenses this file -rem to you under the Apache License, Version 2.0 (the -rem "License"); you may not use this file except in compliance -rem with the License. You may obtain a copy of the License at -rem -rem http://www.apache.org/licenses/LICENSE-2.0 -rem -rem Unless required by applicable law or agreed to in writing, -rem software distributed under the License is distributed on an -rem "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -rem KIND, either express or implied. See the License for the -rem specific language governing permissions and limitations -rem under the License. - -@echo off -setlocal -:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -:::: This script setup directories, dependencies for MXNET :::: -:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - - -:::: Customizable variables :::: - - -:: conda environment name for MXNET, default to MXNET-vcversion -REM set MXNET_CONDA_ENV=mxnet - -:: which to find MKL, default to openblas installed by conda -:: mkl: download from https://software.intel.com/intel-mkl, install and set following two variables -REM set INTEL_MKL_DIR=D:\\Intel\\SWTools\\compilers_and_libraries\\windows\\mkl\\ - -:: where to find cudnn library -REM set CUDNN_ROOT=D:\NVIDIA\CUDNN\v5.1\ - -:::: End of customization :::: - - -set ECHO_PREFIX=+++++++ - -set MXNET_SETUP_HAS_CUDA=0 -set MXNET_SETUP_HAS_CUDNN=0 -:::: validate msvc version :::: - -if "%VisualStudioVersion%" == "" ( - if not "%VS140COMNTOOLS%" == "" ( call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" x64 && goto :VS_SETUP) -REM Not Supported yet due to dependencies -REM if not "%VS120COMNTOOLS%" == "" ( call "%VS120COMNTOOLS%..\..\VC\vcvarsall.bat" x64 && goto :VS_SETUP) -REM if not "%VS110COMNTOOLS%" == "" ( call "%VS110COMNTOOLS%..\..\VC\vcvarsall.bat" x64 && goto :VS_SETUP) -REM if not "%VS100COMNTOOLS%" == "" ( call "%VS100COMNTOOLS%..\..\VC\vcvarsall.bat" x64 && goto :VS_SETUP) -REM if not "%VS90COMNTOOLS%" == "" ( call "%VS90COMNTOOLS%..\..\VC\vcvarsall.bat" x64 && goto :VS_SETUP) -) -:VS_SETUP - -if "%VisualStudioVersion%" == "" ( - echo %ECHO_PREFIX% Can not find environment variable VisualStudioVersion, msvc is not setup porperly - echo %ECHO_PREFIX% Please Install Visual Studio from: - echo %ECHO_PREFIX% https://go.microsoft.com/fwlink/?LinkId=691978&clcid=0x409 - goto :FAIL -) - -set MXNET_VS_VERSION=%VisualStudioVersion:.0=% - -if "%PreferredToolArchitecture%" == "x64" ( - if "%CommandPromptType%" == "Cross" ( - if "%Platform%" == "ARM" set MXNET_VS_PLATFORM=amd64_arm - if "%Platform%" == "X86" set MXNET_VS_PLATFORM=amd64_x86 - ) -) else ( - if "%CommandPromptType%" == "Cross" ( - if "%Platform%" == "ARM" set MXNET_VS_PLATFORM=x86_arm - if "%Platform%" == "x64" set MXNET_VS_PLATFORM=x86_amd64 - ) - if "%CommandPromptType%" == "Native" ( - if "%Platform%" == "X64" set MXNET_VS_PLATFORM=x64 - ) - if "%Platform%" == "" set MXNET_VS_PLATFORM=x86 -) - -if "%MXNET_VS_PLATFORM%" == "x86" set MXNET_VS_TARGET=x86 -if not "%MXNET_VS_PLATFORM%" == "%MXNET_VS_PLATFORM:_x86=%" set MXNET_VS_TARGET=x86 -if not "%MXNET_VS_PLATFORM%" == "%MXNET_VS_PLATFORM:_arm=%" set MXNET_VS_TARGET=arm -if "%MXNET_VS_TARGET%" == "" set MXNET_VS_TARGET=x64 - -:::: Setup directories :::: - -set MXNET_DISTRO=%~dp0. -set MXNET_DISTRO=%MXNET_DISTRO%\.. -if "%MXNET_INSTALL_DIR%" == "" set MXNET_INSTALL_DIR=%MXNET_DISTRO%\build - -echo %ECHO_PREFIX% MXNET will be installed under %MXNET_INSTALL_DIR%, vs%MXNET_VS_VERSION% %MXNET_VS_PLATFORM% - -:::: Setup dependencies :::: - -:: has blas/lapack? -if exist %INTEL_MKL_DIR% set MXNET_BLAS=MKL -if "%MXNET_BLAS%" == "" set MXNET_BLAS=Open - -:: has cuda? -for /f "delims=" %%i in ('where nvcc') do ( - set NVCC_CMD=%%i - goto :AFTER_NVCC -) -:AFTER_NVCC -if not "%NVCC_CMD%" == "" set MXNET_SETUP_HAS_CUDA=1 - -:: has cudnn -if exist %CUDNN_ROOT% set MXNET_SETUP_HAS_CUDNN=1 - -:: has conda? -for /f "delims=" %%i in ('where conda') do ( - set CONDA_CMD=%%i - goto :AFTER_CONDA -) -:AFTER_CONDA - -if "%CONDA_CMD%" == "" ( - echo %ECHO_PREFIX% Can not find conda, some dependencies can not be resolved - echo %ECHO_PREFIX% Please install Miniconda with Python 3.5 from here: - echo %ECHO_PREFIX% http://conda.pydata.org/miniconda.html - - goto :FAIL -) - -set MXNET_CONDA_INFO=%TEMP%\check_conda_info_for_MXNET.txt -conda info > %MXNET_CONDA_INFO% -if "%MXNET_VS_TARGET%" == "x64" set MXNET_CONDA_PLATFORM=win-64 -if "%MXNET_VS_TARGET%" == "arm" set MXNET_CONDA_PLATFORM=win-64 -if "%MXNET_VS_TARGET%" == "x86" set MXNET_CONDA_PLATFORM=win-32 - -findstr "%MXNET_CONDA_PLATFORM%" "%MXNET_CONDA_INFO%" >nul -if errorlevel 1 ( - echo %ECHO_PREFIX% %MXNET_VS_TARGET% MXNET requires %MXNET_CONDA_PLATFORM% conda, installation will continue without conda - goto :NO_CONDA -) - -if %MXNET_VS_VERSION% GEQ 14 ( set CONDA_VS_VERSION=14&& goto :CONDA_SETUP ) -if %MXNET_VS_VERSION% GEQ 10 ( set CONDA_VS_VERSION=10&& goto :CONDA_SETUP ) -set CONDA_VS_VERSION=9 - -:CONDA_SETUP - -if "%MXNET_CONDA_ENV%" == "" set MXNET_CONDA_ENV=mxnet-vc%CONDA_VS_VERSION% - -echo %ECHO_PREFIX% Createing conda environment '%MXNET_CONDA_ENV%' for MXNET dependencies -conda create -n %MXNET_CONDA_ENV% -c conda-forge vc=%CONDA_VS_VERSION% --yes - -set CONDA_DIR=%CONDA_CMD:\Scripts\conda.exe=% -set MXNET_CONDA_LIBRARY=%CONDA_DIR%\envs\%MXNET_CONDA_ENV%\Library -set MXNET_CONDA_LIBRARY=%MXNET_CONDA_LIBRARY:\=\\% -set PATH=%MXNET_CONDA_LIBRARY:\\=\%\bin;%PATH%; -set NEW_PATH=%CONDA_DIR%\Scripts;%MXNET_CONDA_LIBRARY%\bin;%NEW_PATH% - -set MXNET_CONDA_PKGS=%TEMP%\check_conda_packages_for_MXNET.txt -conda list -n %MXNET_CONDA_ENV% > %MXNET_CONDA_PKGS% - -:: has cmake? -for /f "delims=" %%i in ('where cmake') do ( - set CMAKE_CMD=%%i - goto :AFTER_CMAKE -) -if "%CMAKE_CMD%" == "" ( - echo %ECHO_PREFIX% Installing cmake by conda - conda install -n %MXNET_CONDA_ENV% -c conda-forge cmake --yes -) -:AFTER_CMAKE - -:: has patch? -for /f "delims=" %%i in ('where patch') do ( - set PATCH_CMD=%%i - goto :AFTER_PATCH -) -if "%PATCH_CMD%" == "" ( - echo %ECHO_PREFIX% Installing patch by conda - conda install -n %MXNET_CONDA_ENV% patch --yes -) -:AFTER_PATCH - -:: need openblas? -if "%MXNET_BLAS%" == "Open" goto :CONDA_INSTALL_OPENBLAS -goto :AFTER_OPENBLAS - -:CONDA_INSTALL_OPENBLAS -findstr "openblas" "%MXNET_CONDA_PKGS%" >nul -if errorlevel 1 ( - echo %ECHO_PREFIX% Installing openblas by conda - if "%MXNET_VS_TARGET%" == "x64" conda install -n %MXNET_CONDA_ENV% -c ukoethe openblas --yes || goto :Fail - CALL :PATCH_OPENBLAS -) - -if "%MXNET_VS_TARGET%" == "x64" ( - if "%OpenBLAS_INCLUDE_DIR%" == "" set OpenBLAS_INCLUDE_DIR=%MXNET_CONDA_LIBRARY%\\include\\ - if "%OpenBLAS_LIB%" == "" set OpenBLAS_LIB=%MXNET_CONDA_LIBRARY%\\lib\\libopenblas.lib -) -:AFTER_OPENBLAS - -if "%MXNET_BLAS%" == "MKL" goto:CONDA_INSTALL_MKL -goto :AFTER_MKL - -:CONDA_INSTALL_MKL -if "%MKL_INCLUDE_DIR%" == "" set MKL_INCLUDE_DIR=%INTEL_MKL_DIR%\\include\\ -if "%MKL_LIB%" == "" set MKL_LIB=%INTEL_MKL_DIR%\\lib\\ -:AFTER_MKL - -:: other dependencies -findstr "opencv" "%MXNET_CONDA_PKGS%" >nul -if errorlevel 1 set MXNET_DEPENDENCIES=%MXNET_DEPENDENCIES% opencv -findstr "numpy" "%MXNET_CONDA_PKGS%" >nul -if errorlevel 1 set MXNET_DEPENDENCIES=%MXNET_DEPENDENCIES% numpy -findstr "cython" "%MXNET_CONDA_PKGS%" >nul -if errorlevel 1 set MXNET_DEPENDENCIES=%MXNET_DEPENDENCIES% cython -findstr "numpy" "%MXNET_CONDA_PKGS%" >nul -if errorlevel 1 set MXNET_DEPENDENCIES=%MXNET_DEPENDENCIES% numpy - -if not "%MXNET_DEPENDENCIES%" == "" ( - echo %ECHO_PREFIX% Installing %MXNET_DEPENDENCIES% by conda for MXNET - conda install -n %MXNET_CONDA_ENV% -c conda-forge %MXNET_DEPENDENCIES% --yes -) - -:: make symbolic link to workaround opencv cmakefile bug -echo %ECHO_PREFIX% Install symblic link for opencv -mkdir %CONDA_DIR%\envs\x64\vc14\ -mklink /D %CONDA_DIR%\envs\x64\vc14\lib %MXNET_CONDA_LIBRARY:\\=\%\lib -mklink /D %CONDA_DIR%\envs\x64\vc14\bin %MXNET_CONDA_LIBRARY:\\=\%\bin - -:NO_CONDA -if exist "%MXNET_CONDA_INFO%" del /q %MXNET_CONDA_INFO% -if exist "%MXNET_CONDA_PKGS%" del /q %MXNET_CONDA_PKGS% - -:::: download graphviz :::: - -REM echo %ECHO_PREFIX% Downloading graphviz for graph package -REM cd %MXNET_DISTRO%\build -REM wget -nc https://github.com/mahkoCosmo/GraphViz_x64/raw/master/graphviz-2.38_x64.tar.gz --no-check-certificate -O graphviz-2.38_x64.tar.gz -REM 7z x graphviz-2.38_x64.tar.gz -y && 7z x graphviz-2.38_x64.tar -ographviz-2.38_x64 -y >NUL -REM if not exist %MXNET_INSTALL_BIN%\graphviz md %MXNET_INSTALL_BIN%\graphviz -REM copy /y %MXNET_DISTRO%\build\graphviz-2.38_x64\bin\ %MXNET_INSTALL_BIN%\graphviz\ - -REM set NEW_PATH=%NEW_PATH%;%MXNET_INSTALL_BIN%\graphviz - -echo %ECHO_PREFIX% Build libmxnet.dll -cd /D %MXNET_DISTRO% - -SET CMAKE_OPT=%CMAKE_OPT% -DUSE_CUDA=%MXNET_SETUP_HAS_CUDA% -SET CMAKE_OPT=%CMAKE_OPT% -DUSE_CUDNN=%MXNET_SETUP_HAS_CUDNN% -if %MXNET_SETUP_HAS_CUDNN%=="1" SET CMAKE_OPT=%CMAKE_OPT% -DCUDNN_ROOT="%CUDNN_ROOT%" -SET CMAKE_OPT=%CMAKE_OPT% -DBLAS="%MXNET_BLAS%" -if "%MXNET_BLAS%"=="Open" SET CMAKE_OPT=%CMAKE_OPT% -DOpenBLAS_HOME="%MXNET_CONDA_LIBRARY%" -DOpenBLAS_INCLUDE_DIR="%OpenBLAS_INCLUDE_DIR%" -DOpenBLAS_LIB="%OpenBLAS_LIB%" -if "%MXNET_BLAS%"=="MKL" SET CMAKE_OPT=%CMAKE_OPT% -DMKL_HOME="%INTEL_MKL_DIR%" -DMKL_INCLUDE_DIR="%MKL_INCLUDE_DIR%" -DMKL_LIB="%MKL_LIB%" - -SET CMAKE_OPT=%CMAKE_OPT% -DOpenCV_LIB_PATH="%MXNET_CONDA_LIBRARY%\\lib\\" -DOpenCV_INCLUDE_DIRS="%MXNET_CONDA_LIBRARY%\\include\\" -DOpenCV_CONFIG_PATH="%MXNET_CONDA_LIBRARY%" - -cmake -Wno-dev %CMAKE_OPT% -DCMAKE_PREFIX_PATH="%MXNET_CONDA_LIBRARY%" -G "Visual Studio 14 2015 Win64" -DUSE_PROFILER=1 -DCMAKE_BUILD_TYPE=Release -H. -Bbuild -if errorlevel 1 goto :FAIL -msbuild build\mxnet.sln /t:Build /p:Configuration=Release;Platform=x64 /m -if errorlevel 1 goto :FAIL - -echo %ECHO_PREFIX% Install libmxnet.dll -cd /D %MXNET_DISTRO%\python -python setup.py install -if errorlevel 1 goto :FAIL - -set NEW_PATH=%NEW_PATH:\\=\% -echo %ECHO_PREFIX% Setup succeed! -echo %ECHO_PREFIX% Add the following path to your system path or Run env.cmd per cmd window -echo %NEW_PATH% -echo @SET PATH=%%PATH%%;%NEW_PATH%>%MXNET_DISTRO%\env.cmd -goto :END - -:PATCH_OPENBLAS -echo %ECHO_PREFIX% Apply patch to fix openblas 2.15 - -echo --- openblas_config.h 2016-12-20 11:09:11.722445000 +0800>%TEMP%\openblas.diff -echo +++ openblas_config.h 2016-12-20 11:01:21.347244600 +0800>>%TEMP%\openblas.diff -echo @@ -109,7 +109,7 @@>>%TEMP%\openblas.diff -echo structure as fallback (see Clause 6.2.5.13 of the C99 standard). */>>%TEMP%\openblas.diff -echo #if (defined(__STDC_IEC_559_COMPLEX__) ^|^| __STDC_VERSION__ ^>= 199901L ^|^| \>>%TEMP%\openblas.diff -echo (__GNUC__ ^>= 3 ^&^& !defined(__cplusplus)) ^|^| \>>%TEMP%\openblas.diff -echo - _MSC_VER ^>= 1800) // Visual Studio 2013 supports complex>>%TEMP%\openblas.diff -echo + (_MSC_VER ^>= 1800 ^&^& !defined(__cplusplus))) // Visual Studio 2013 supports complex>>%TEMP%\openblas.diff -echo #define OPENBLAS_COMPLEX_C99>>%TEMP%\openblas.diff -echo #ifndef __cplusplus>>%TEMP%\openblas.diff -echo #include ^>>%TEMP%\openblas.diff -cd /D %MXNET_CONDA_LIBRARY:\\=\%\include -patch -p0 -i %TEMP%\openblas.diff -DEL %TEMP%\openblas.diff -GOTO :eof - -:FAIL -echo %ECHO_PREFIX% Setup fail! - -:END - diff --git a/tests/cpp/unittest.mk b/tests/cpp/unittest.mk deleted file mode 100644 index 704ee41fdc4c..000000000000 --- a/tests/cpp/unittest.mk +++ /dev/null @@ -1,81 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -TEST_SRC = $(shell find tests/cpp/ -name "*.cc") -TEST_OBJ = $(patsubst %.cc, build/%.o, $(TEST_SRC)) -TEST = build/tests/cpp/mxnet_unit_tests - -GTEST_DIR=3rdparty/googletest/googletest/ -GTEST_INC=3rdparty/googletest/googletest/include/ -GTEST_SRCS_ = $(GTEST_DIR)/src/*.cc $(GTEST_DIR)/src/*.h $(GTEST_HEADERS) -GTEST_HEADERS = $(GTEST_DIR)/include/gtest/*.h \ - $(GTEST_DIR)/include/gtest/internal/*.h - -TEST_CFLAGS = -Itests/cpp/include -Isrc $(CFLAGS) -TEST_LDFLAGS = $(LDFLAGS) -Llib -lmxnet - -ifeq ($(USE_BREAKPAD), 1) -TEST_CFLAGS += -I/usr/local/include/breakpad -TEST_LDFLAGS += -lbreakpad_client -lbreakpad -endif - -TEST_LIB_DEP = gtest.a -ifeq ($(USE_MKLDNN), 1) - TEST_LIB_DEP += $(MKLDNNROOT)/lib/libdnnl.a -endif - -.PHONY: runtest testclean - -gtest-all.o : $(GTEST_SRCS_) - $(CXX) -std=c++17 $(CPPFLAGS) -I$(GTEST_INC) -I$(GTEST_DIR) $(CXXFLAGS) -c $(GTEST_DIR)/src/gtest-all.cc - -gtest.a : gtest-all.o - $(AR) $(ARFLAGS) $@ $^ - -build/tests/cpp/%.o : tests/cpp/%.cc | mkldnn - @mkdir -p $(@D) - $(CXX) -std=c++17 $(TEST_CFLAGS) -I$(GTEST_INC) -MM -MT tests/cpp/$* $< > build/tests/cpp/$*.d - $(CXX) -c -std=c++17 $(TEST_CFLAGS) -I$(GTEST_INC) -o build/tests/cpp/$*.o $(filter %.cc %.a, $^) - -build/tests/cpp/operator/%.o : tests/cpp/operator/%.cc | mkldnn - @mkdir -p $(@D) - $(CXX) -std=c++17 $(TEST_CFLAGS) -I$(GTEST_INC) -MM -MT tests/cpp/operator/$* $< > build/tests/cpp/operator/$*.d - $(CXX) -c -std=c++17 $(TEST_CFLAGS) -I$(GTEST_INC) -o build/tests/cpp/operator/$*.o $(filter %.cc %.a, $^) - -build/tests/cpp/storage/%.o : tests/cpp/storage/%.cc | mkldnn - @mkdir -p $(@D) - $(CXX) -std=c++17 $(TEST_CFLAGS) -I$(GTEST_INC) -MM -MT tests/cpp/storage/$* $< > build/tests/cpp/storage/$*.d - $(CXX) -c -std=c++17 $(TEST_CFLAGS) -I$(GTEST_INC) -o build/tests/cpp/storage/$*.o $(filter %.cc %.a, $^) - -build/tests/cpp/engine/%.o : tests/cpp/engine/%.cc | mkldnn - @mkdir -p $(@D) - $(CXX) -std=c++17 $(TEST_CFLAGS) -I$(GTEST_INC) -MM -MT tests/cpp/engine/$* $< > build/tests/cpp/engine/$*.d - $(CXX) -c -std=c++17 $(TEST_CFLAGS) -I$(GTEST_INC) -o build/tests/cpp/engine/$*.o $(filter %.cc %.a, $^) - -$(TEST): $(TEST_OBJ) lib/libmxnet.so $(TEST_LIB_DEP) - $(CXX) -std=c++17 $(TEST_CFLAGS) -I$(GTEST_INC) -o $@ $^ $(TEST_LDFLAGS) - -runtest: $(TEST) - LD_LIBRARY_PATH=$(shell pwd)/lib:$(LD_LIBRARY_PATH) $(TEST) - -testclean: - rm -f $(TEST) $(TEST_OBJ) - --include build/tests/cpp/*.d --include build/tests/cpp/operator/*.d --include build/tests/cpp/storage/*.d --include build/tests/cpp/engine/*.d diff --git a/tools/dependencies/openblas.sh b/tools/dependencies/openblas.sh index dad566ff877d..12cad3ee2037 100755 --- a/tools/dependencies/openblas.sh +++ b/tools/dependencies/openblas.sh @@ -19,39 +19,22 @@ # This script builds the static library of openblas that can be used as dependency of mxnet. set -ex -OPENBLAS_VERSION=4a4c50a7cef9fa91f14e508722f502d956ad5192 -if [[ ((! -e $DEPS_PATH/lib/libopenblas.a) && -z "$CMAKE_STATICBUILD") || - ((! -e $DEPS_PATH/lib/libopenblas.so) && -v CMAKE_STATICBUILD) ]]; then - # download and build openblas +OPENBLAS_VERSION=0.3.10 +if [[ (! -e $DEPS_PATH/lib/libopenblas.a) ]]; then >&2 echo "Building openblas..." download \ - https://github.com/xianyi/OpenBLAS/archive/${OPENBLAS_VERSION}.zip \ + https://github.com/xianyi/OpenBLAS/archive/v${OPENBLAS_VERSION}.zip \ ${DEPS_PATH}/openblas.zip unzip -q $DEPS_PATH/openblas.zip -d $DEPS_PATH pushd . cd $DEPS_PATH/OpenBLAS-${OPENBLAS_VERSION} # Adding NO_DYNAMIC=1 flag causes make install to fail - CXX="g++ -fPIC" CC="gcc -fPIC" $MAKE DYNAMIC_ARCH=1 DYNAMIC_OLDER=1 USE_OPENMP=1 - - if [[ -v CMAKE_STATICBUILD ]]; then - # We link and redistribute libopenblas.so for cmake staticbuild - # cf https://gitlab.kitware.com/cmake/cmake/issues/16221#note_143330 - patchelf --set-rpath '$ORIGIN' --force-rpath libopenblas.so - fi + CFLAGS="-fPIC" CXXFLAGS="-fPIC" $MAKE DYNAMIC_ARCH=1 DYNAMIC_OLDER=1 USE_OPENMP=1 + patchelf --set-rpath '$ORIGIN' --force-rpath libopenblas.so $MAKE PREFIX=$DEPS_PATH install - - if [[ -z "$CMAKE_STATICBUILD" ]]; then - # Manually removing .so to avoid linking against it - rm $DEPS_PATH/lib/libopenblas*.so - fi - popd - if [[ -z "$CMAKE_STATICBUILD" ]]; then - ln -s libopenblas.a $DEPS_PATH/lib/libcblas.a - ln -s libopenblas.a $DEPS_PATH/lib/liblapack.a - fi fi diff --git a/tools/dependencies/opencv.sh b/tools/dependencies/opencv.sh index 139b68c5bef0..fce8c1547757 100755 --- a/tools/dependencies/opencv.sh +++ b/tools/dependencies/opencv.sh @@ -46,7 +46,7 @@ if [[ ! -f $DEPS_PATH/lib/libopencv_core.a ]] || [[ ! -f $DEPS_PATH/lib/libopenc mkdir -p $DEPS_PATH/opencv-$OPENCV_VERSION/build pushd . cd $DEPS_PATH/opencv-$OPENCV_VERSION/build - CXX="g++ -fPIC" CC="gcc -fPIC" cmake \ + CFLAGS="-fPIC" CXXFLAGS="-fPIC" cmake \ -D OPENCV_ENABLE_NONFREE=OFF \ -D WITH_1394=OFF \ -D WITH_ARAVIS=OFF \ diff --git a/tools/setup_gpu_build_tools.sh b/tools/setup_gpu_build_tools.sh deleted file mode 100755 index e10d1f1570fb..000000000000 --- a/tools/setup_gpu_build_tools.sh +++ /dev/null @@ -1,204 +0,0 @@ -#!/usr/bin/env bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -# This script installs the tools and libraries for CUDA GPU on Ubuntu. -# Usage: VARIANT=cu102mkl; DEPS_PATH=$HOME; setup_gpu_build_tools.sh $VARIANT $DEPS_PATH; -# It installs the tools into DEPS_PATH as specified by the second argument, and will set -# the following environment variables: -# PATH, CPLUS_INCLUDE_PATH, C_INCLUDE_PATH, LIBRARY_PATH, LD_LIBRARY_PATH, NVCC - -VARIANT=$1 -DEPS_PATH=$2 - ->&2 echo "Setting CUDA versions for $VARIANT" -if [[ $VARIANT == cu102* ]]; then - CUDA_VERSION='10.2.89-1' - CUDA_PATCH_VERSION='10.2.2.89-1' - LIBCUDA_VERSION='440.33.01-0ubuntu1' - LIBCUDNN_VERSION='7.6.5.32-1+cuda10.2' - LIBNCCL_VERSION='2.5.6-1+cuda10.2' -elif [[ $VARIANT == cu101* ]]; then - CUDA_VERSION='10.1.105-1' - CUDA_PATCH_VERSION='10.1.0.105-1' - LIBCUDA_VERSION='418.39-0ubuntu1' - LIBCUDNN_VERSION='7.6.5.32-1+cuda10.1' - LIBNCCL_VERSION='2.5.6-1+cuda10.1' -elif [[ $VARIANT == cu100* ]]; then - CUDA_VERSION='10.0.130-1' - CUDA_PATCH_VERSION='10.0.130-1' - LIBCUDA_VERSION='410.48-0ubuntu1' - LIBCUDNN_VERSION='7.6.5.32-1+cuda10.0' - LIBNCCL_VERSION='2.5.6-1+cuda10.0' -elif [[ $VARIANT == cu92* ]]; then - CUDA_VERSION='9.2.148-1' - CUDA_PATCH_VERSION='9.2.148.1-1' - LIBCUDA_VERSION='396.44-0ubuntu1' - LIBCUDNN_VERSION='7.6.5.32-1+cuda9.2' - LIBNCCL_VERSION='2.4.8-1+cuda9.2' -if [[ $VARIANT == cu* ]]; then - CUDA_MAJOR_VERSION=$(echo $CUDA_VERSION | tr '-' '.' | cut -d. -f1,2) - CUDA_MAJOR_DASH=$(echo $CUDA_VERSION | tr '-' '.' | cut -d. -f1,2 | tr '.' '-') - CUDA_PATCH_MAJOR_DASH=$(echo $CUDA_PATCH_VERSION | tr '-' '.' | cut -d. -f1,2 | tr '.' '-') - NVIDIA_MAJOR_VERSION=$(echo $LIBCUDA_VERSION | cut -d. -f1) - LIBCUDA_MAJOR=$(echo $LIBCUDA_VERSION | cut -d. -f1) - LIBCUDNN_MAJOR=$(echo $LIBCUDNN_VERSION | cut -d. -f1) - os_name=$(cat /etc/*release | grep '^ID=' | sed 's/^.*=//g') - os_version=$(cat /etc/*release | grep VERSION_ID | sed 's/^.*"\([0-9]*\)\.\([0-9]*\)"/\1\2/g') - os_id="${os_name}${os_version}" - if [[ $CUDA_MAJOR_DASH == 9-* ]] || [[ $CUDA_MAJOR_DASH == 10-* ]]; then - os_id="ubuntu1604" - fi - export PATH=/usr/lib/binutils-2.26/bin/:${PATH}:$DEPS_PATH/usr/local/cuda-$CUDA_MAJOR_VERSION/bin - export CPLUS_INCLUDE_PATH=${CPLUS_INCLUDE_PATH}:$DEPS_PATH/usr/local/cuda-$CUDA_MAJOR_VERSION/include:$DEPS_PATH/usr/include - export C_INCLUDE_PATH=${C_INCLUDE_PATH}:$DEPS_PATH/usr/local/cuda-$CUDA_MAJOR_VERSION/include:$DEPS_PATH/usr/include - export LIBRARY_PATH=${LIBRARY_PATH}:$DEPS_PATH/usr/local/cuda-$CUDA_MAJOR_VERSION/lib64:$DEPS_PATH/usr/lib/x86_64-linux-gnu:$DEPS_PATH/usr/lib/nvidia-$NVIDIA_MAJOR_VERSION - export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$DEPS_PATH/usr/local/cuda-$CUDA_MAJOR_VERSION/lib64:$DEPS_PATH/usr/lib/x86_64-linux-gnu:$DEPS_PATH/usr/lib/nvidia-$NVIDIA_MAJOR_VERSION - export NVCC=$DEPS_PATH/usr/local/cuda-$CUDA_MAJOR_VERSION/bin/nvcc -fi - -# list of debs to download from nvidia -if [[ $VARIANT == cu102* ]]; then - cuda_files=( \ - "cuda-core-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "libcublas10_${CUDA_PATCH_VERSION}_amd64.deb" \ - "libcublas-dev_${CUDA_PATCH_VERSION}_amd64.deb" \ - "cuda-cudart-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-cudart-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-curand-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-curand-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-cufft-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-cufft-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-nvrtc-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-nvrtc-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-cusolver-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-cusolver-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-misc-headers-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-nvcc-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-nvtx-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "libcuda1-${LIBCUDA_MAJOR}_${LIBCUDA_VERSION}_amd64.deb" \ - "nvidia-${LIBCUDA_MAJOR}_${LIBCUDA_VERSION}_amd64.deb" \ - ) - ml_files=( \ - "libcudnn${LIBCUDNN_MAJOR}-dev_${LIBCUDNN_VERSION}_amd64.deb" \ - "libnccl-dev_${LIBNCCL_VERSION}_amd64.deb" \ - ) -elif [[ $VARIANT == cu101* ]]; then - cuda_files=( \ - "cuda-core-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "libcublas10_${CUDA_PATCH_VERSION}_amd64.deb" \ - "libcublas-dev_${CUDA_PATCH_VERSION}_amd64.deb" \ - "cuda-cudart-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-cudart-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-curand-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-curand-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-cufft-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-cufft-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-nvrtc-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-nvrtc-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-cusolver-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-cusolver-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-misc-headers-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-nvcc-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-nvtx-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "libcuda1-${LIBCUDA_MAJOR}_${LIBCUDA_VERSION}_amd64.deb" \ - "nvidia-${LIBCUDA_MAJOR}_${LIBCUDA_VERSION}_amd64.deb" \ - ) - ml_files=( \ - "libcudnn${LIBCUDNN_MAJOR}-dev_${LIBCUDNN_VERSION}_amd64.deb" \ - "libnccl-dev_${LIBNCCL_VERSION}_amd64.deb" \ - ) -elif [[ $VARIANT == cu100* ]]; then - cuda_files=( \ - "cuda-core-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-cublas-${CUDA_MAJOR_DASH}_${CUDA_PATCH_VERSION}_amd64.deb" \ - "cuda-cublas-dev-${CUDA_MAJOR_DASH}_${CUDA_PATCH_VERSION}_amd64.deb" \ - "cuda-cudart-${CUDA_MAJOR_DASH}_${CUDA_PATCH_VERSION}_amd64.deb" \ - "cuda-cudart-dev-${CUDA_MAJOR_DASH}_${CUDA_PATCH_VERSION}_amd64.deb" \ - "cuda-curand-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-curand-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-cufft-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-cufft-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-nvrtc-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-nvrtc-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-cusolver-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-cusolver-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-misc-headers-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-nvcc-${CUDA_MAJOR_DASH}_${CUDA_PATCH_VERSION}_amd64.deb" \ - "cuda-nvtx-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "libcuda1-${LIBCUDA_MAJOR}_${LIBCUDA_VERSION}_amd64.deb" \ - "nvidia-${LIBCUDA_MAJOR}_${LIBCUDA_VERSION}_amd64.deb" \ - ) - ml_files=( \ - "libcudnn${LIBCUDNN_MAJOR}-dev_${LIBCUDNN_VERSION}_amd64.deb" \ - "libnccl-dev_${LIBNCCL_VERSION}_amd64.deb" \ - ) -elif [[ $VARIANT == cu92* ]]; then - cuda_files=( \ - "cuda-core-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-cublas-${CUDA_MAJOR_DASH}_${CUDA_PATCH_VERSION}_amd64.deb" \ - "cuda-cublas-dev-${CUDA_MAJOR_DASH}_${CUDA_PATCH_VERSION}_amd64.deb" \ - "cuda-cudart-${CUDA_MAJOR_DASH}_${CUDA_PATCH_VERSION}_amd64.deb" \ - "cuda-cudart-dev-${CUDA_MAJOR_DASH}_${CUDA_PATCH_VERSION}_amd64.deb" \ - "cuda-curand-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-curand-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-cufft-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-cufft-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-nvrtc-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-nvrtc-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-cusolver-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-cusolver-dev-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-misc-headers-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "cuda-nvcc-${CUDA_MAJOR_DASH}_${CUDA_PATCH_VERSION}_amd64.deb" \ - "cuda-nvtx-${CUDA_MAJOR_DASH}_${CUDA_VERSION}_amd64.deb" \ - "libcuda1-${LIBCUDA_MAJOR}_${LIBCUDA_VERSION}_amd64.deb" \ - "nvidia-${LIBCUDA_MAJOR}_${LIBCUDA_VERSION}_amd64.deb" \ - ) - ml_files=( \ - "libcudnn${LIBCUDNN_MAJOR}-dev_${LIBCUDNN_VERSION}_amd64.deb" \ - "libnccl-dev_${LIBNCCL_VERSION}_amd64.deb" \ - ) -fi - - -if [[ ! -d $DEPS_PATH/usr/local/cuda-${CUDA_MAJOR_VERSION} ]]; then - prefix=$DEPS_PATH - - for item in ${cuda_files[*]} - do - echo "Installing $item" - curl -sL "http://developer.download.nvidia.com/compute/cuda/repos/${os_id}/x86_64/${item}" -o package.deb - dpkg -X package.deb ${prefix} - rm package.deb - done - for item in ${ml_files[*]} - do - echo "Installing $item" - curl -sL "http://developer.download.nvidia.com/compute/machine-learning/repos/${os_id}/x86_64/${item}" -o package.deb - dpkg -X package.deb ${prefix} - rm package.deb - done - - mkdir -p ${prefix}/include - mkdir -p ${prefix}/lib - cp ${prefix}/usr/include/x86_64-linux-gnu/cudnn_v${LIBCUDNN_MAJOR}.h ${prefix}/include/cudnn.h - ln -s libcudnn_static_v${LIBCUDNN_MAJOR}.a ${prefix}/usr/lib/x86_64-linux-gnu/libcudnn.a - cp ${prefix}/usr/local/cuda-${CUDA_MAJOR_VERSION}/lib64/*.a ${prefix}/lib/ - cp ${prefix}/usr/include/nccl.h ${prefix}/include/nccl.h - ln -s libnccl_static.a ${prefix}/usr/lib/x86_64-linux-gnu/libnccl.a -fi diff --git a/tools/staticbuild/README.md b/tools/staticbuild/README.md index 077150e11762..780cb6d39776 100644 --- a/tools/staticbuild/README.md +++ b/tools/staticbuild/README.md @@ -24,6 +24,9 @@ This script is a wrapper around `build_lib.sh. It simplifies the build by automatically identifing the system version, number of cores, and all environment variable settings. Here are examples you can run with this script: +You need to install `patchelf` first, for example via `apt install patchelf` on +Ubuntu systems. + ``` tools/staticbuild/build.sh cu102 ``` @@ -35,16 +38,6 @@ tools/staticbuild/build.sh cpu This would build the mxnet package based on MKL-DNN. -To use CMake to build the `libmxnet.so` instead of the deprecated Makefile based -build logic, set the `CMAKE_STATICBUILD` environment variable. For example - -``` -CMAKE_STATICBUILD=1 tools/staticbuild/build.sh cpu -``` - -For the CMake build, you need to install `patchelf` first, for example via `apt -install patchelf` on Ubuntu systems. - As the result, users would have a complete static dependencies in `/staticdeps` in the root folder as well as a static-linked `libmxnet.so` file lives in `lib`. You can build your language binding by using the `libmxnet.so`. ## `build_lib.sh` diff --git a/tools/staticbuild/build.sh b/tools/staticbuild/build.sh index e5fd24368ed3..c0621fd90e9f 100755 --- a/tools/staticbuild/build.sh +++ b/tools/staticbuild/build.sh @@ -48,16 +48,14 @@ else fi export MAKE="make $ADD_MAKE_FLAG" -export CC="gcc -fPIC -mno-avx" -export CXX="g++ -fPIC -mno-avx" +export CC="gcc" +export CXX="g++" +export CFLAGS="-fPIC -mno-avx" +export CXXFLAGS="-fPIC -mno-avx" export FC="gfortran" export PKG_CONFIG_PATH=$DEPS_PATH/lib/pkgconfig:$DEPS_PATH/lib64/pkgconfig:$DEPS_PATH/lib/x86_64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH export CPATH=$DEPS_PATH/include:$CPATH -if [[ -z "$USE_SYSTEM_CUDA" && $PLATFORM == 'linux' && $VARIANT == cu* ]]; then - source tools/setup_gpu_build_tools.sh $VARIANT $DEPS_PATH -fi - mkdir -p $DEPS_PATH # Build Dependencies @@ -70,10 +68,5 @@ cp NOTICE licenses/ cp LICENSE licenses/ cp DISCLAIMER-WIP licenses/ - # Build mxnet -if [[ -z "$CMAKE_STATICBUILD" ]]; then - source tools/staticbuild/build_lib.sh -else - source tools/staticbuild/build_lib_cmake.sh -fi +source tools/staticbuild/build_lib.sh diff --git a/tools/staticbuild/build_lib.sh b/tools/staticbuild/build_lib.sh index 989070ac7078..5261b2a6942a 100755 --- a/tools/staticbuild/build_lib.sh +++ b/tools/staticbuild/build_lib.sh @@ -20,28 +20,29 @@ set -eo pipefail # This script builds the libraries of mxnet. -make_config=make/staticbuild/${PLATFORM}_${VARIANT}.mk -if [[ ! -f $make_config ]]; then - >&2 echo "Couldn't find make config $make_config for the current settings." +cmake_config=${CURDIR}/config/distribution/${PLATFORM}_${VARIANT}.cmake +if [[ ! -f $cmake_config ]]; then + >&2 echo "Couldn't find cmake config $make_config for the current settings." exit 1 fi ->&2 echo "Now building mxnet modules..." -cp $make_config config.mk - git submodule update --init --recursive || true -$MAKE DEPS_PATH=$DEPS_PATH DMLCCORE -$MAKE DEPS_PATH=$DEPS_PATH $PWD/3rdparty/tvm/nnvm/lib/libnnvm.a -$MAKE DEPS_PATH=$DEPS_PATH PSLITE -$MAKE DEPS_PATH=$DEPS_PATH mkldnn - ->&2 echo "Now building mxnet..." -$MAKE DEPS_PATH=$DEPS_PATH +# Build libmxnet.so +rm -rf build; mkdir build; cd build +cmake -GNinja -C $cmake_config -DCMAKE_PREFIX_PATH=${DEPS_PATH} -DCMAKE_FIND_ROOT_PATH=${DEPS_PATH} .. +ninja +cd - +# Move to lib +rm -rf lib; mkdir lib; if [[ $PLATFORM == 'linux' ]]; then + cp -L build/libmxnet.so lib/libmxnet.so + cp -L staticdeps/lib/libopenblas.so lib/libopenblas.so.0 cp -L $(ldd lib/libmxnet.so | grep libgfortran | awk '{print $3}') lib/ cp -L $(ldd lib/libmxnet.so | grep libquadmath | awk '{print $3}') lib/ +elif [[ $PLATFORM == 'darwin' ]]; then + cp -L build/libmxnet.dylib lib/libmxnet.dylib fi # Print the linked objects on libmxnet.so @@ -50,8 +51,8 @@ if [[ ! -z $(command -v readelf) ]]; then readelf -d lib/libmxnet.so strip --strip-unneeded lib/libmxnet.so elif [[ ! -z $(command -v otool) ]]; then - otool -L lib/libmxnet.so - strip -u -r -x lib/libmxnet.so + otool -L lib/libmxnet.dylib + strip -u -r -x lib/libmxnet.dylib else >&2 echo "Not available" fi diff --git a/tools/staticbuild/build_lib_cmake.sh b/tools/staticbuild/build_lib_cmake.sh deleted file mode 100755 index 5261b2a6942a..000000000000 --- a/tools/staticbuild/build_lib_cmake.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -set -eo pipefail - -# This script builds the libraries of mxnet. -cmake_config=${CURDIR}/config/distribution/${PLATFORM}_${VARIANT}.cmake -if [[ ! -f $cmake_config ]]; then - >&2 echo "Couldn't find cmake config $make_config for the current settings." - exit 1 -fi - -git submodule update --init --recursive || true - -# Build libmxnet.so -rm -rf build; mkdir build; cd build -cmake -GNinja -C $cmake_config -DCMAKE_PREFIX_PATH=${DEPS_PATH} -DCMAKE_FIND_ROOT_PATH=${DEPS_PATH} .. -ninja -cd - - -# Move to lib -rm -rf lib; mkdir lib; -if [[ $PLATFORM == 'linux' ]]; then - cp -L build/libmxnet.so lib/libmxnet.so - cp -L staticdeps/lib/libopenblas.so lib/libopenblas.so.0 - cp -L $(ldd lib/libmxnet.so | grep libgfortran | awk '{print $3}') lib/ - cp -L $(ldd lib/libmxnet.so | grep libquadmath | awk '{print $3}') lib/ -elif [[ $PLATFORM == 'darwin' ]]; then - cp -L build/libmxnet.dylib lib/libmxnet.dylib -fi - -# Print the linked objects on libmxnet.so ->&2 echo "Checking linked objects on libmxnet.so..." -if [[ ! -z $(command -v readelf) ]]; then - readelf -d lib/libmxnet.so - strip --strip-unneeded lib/libmxnet.so -elif [[ ! -z $(command -v otool) ]]; then - otool -L lib/libmxnet.dylib - strip -u -r -x lib/libmxnet.dylib -else - >&2 echo "Not available" -fi - -if [[ ! -L deps ]]; then - ln -s staticdeps deps -fi From 6bb3d724189e1d5727fc7b2b41cab3863294ff99 Mon Sep 17 00:00:00 2001 From: Dick Carter Date: Mon, 20 Jul 2020 16:33:38 -0700 Subject: [PATCH 09/46] Improve test seeding in test_numpy_interoperablity.py (#18762) --- .../unittest/test_numpy_interoperability.py | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/tests/python/unittest/test_numpy_interoperability.py b/tests/python/unittest/test_numpy_interoperability.py index 3b9786408df9..d6b5595036ad 100644 --- a/tests/python/unittest/test_numpy_interoperability.py +++ b/tests/python/unittest/test_numpy_interoperability.py @@ -29,7 +29,7 @@ from mxnet.test_utils import assert_almost_equal from mxnet.test_utils import use_np from mxnet.test_utils import is_op_runnable -from common import assertRaises, with_seed, random_seed +from common import assertRaises, with_seed, random_seed, setup_module, teardown_module from mxnet.numpy_dispatch_protocol import with_array_function_protocol, with_array_ufunc_protocol from mxnet.numpy_dispatch_protocol import _NUMPY_ARRAY_FUNCTION_LIST, _NUMPY_ARRAY_UFUNC_LIST @@ -62,8 +62,15 @@ def add_workload(name, *args, **kwargs): @staticmethod def get_workloads(name): + if OpArgMngr._args == {}: + _prepare_workloads() return OpArgMngr._args.get(name, None) + @staticmethod + def randomize_workloads(): + # Force a new _prepare_workloads(), which will be based on new random numbers + OpArgMngr._args = {} + def _add_workload_all(): # check bad element in all positions @@ -516,8 +523,8 @@ def _add_workload_linalg_cholesky(): shapes = [(1, 1), (2, 2), (3, 3), (50, 50), (3, 10, 10)] dtypes = (np.float32, np.float64) - for shape, dtype in itertools.product(shapes, dtypes): - with random_seed(1): + with random_seed(1): + for shape, dtype in itertools.product(shapes, dtypes): a = _np.random.randn(*shape) t = list(range(len(shape))) @@ -3183,9 +3190,6 @@ def _prepare_workloads(): _add_workload_vander() -_prepare_workloads() - - def _get_numpy_op_output(onp_op, *args, **kwargs): onp_args = [arg.asnumpy() if isinstance(arg, np.ndarray) else arg for arg in args] onp_kwargs = {k: v.asnumpy() if isinstance(v, np.ndarray) else v for k, v in kwargs.items()} @@ -3197,7 +3201,7 @@ def _get_numpy_op_output(onp_op, *args, **kwargs): return onp_op(*onp_args, **onp_kwargs) -def _check_interoperability_helper(op_name, *args, **kwargs): +def _check_interoperability_helper(op_name, rel_tol, abs_tol, *args, **kwargs): strs = op_name.split('.') if len(strs) == 1: onp_op = getattr(_np, op_name) @@ -3213,11 +3217,11 @@ def _check_interoperability_helper(op_name, *args, **kwargs): assert type(out) == type(expected_out) for arr, expected_arr in zip(out, expected_out): if isinstance(arr, np.ndarray): - assert_almost_equal(arr.asnumpy(), expected_arr, rtol=1e-3, atol=1e-4, use_broadcast=False, equal_nan=True) + assert_almost_equal(arr.asnumpy(), expected_arr, rtol=rel_tol, atol=abs_tol, use_broadcast=False, equal_nan=True) else: _np.testing.assert_equal(arr, expected_arr) elif isinstance(out, np.ndarray): - assert_almost_equal(out.asnumpy(), expected_out, rtol=1e-3, atol=1e-4, use_broadcast=False, equal_nan=True) + assert_almost_equal(out.asnumpy(), expected_out, rtol=rel_tol, atol=abs_tol, use_broadcast=False, equal_nan=True) elif isinstance(out, _np.dtype): _np.testing.assert_equal(out, expected_out) else: @@ -3229,6 +3233,7 @@ def _check_interoperability_helper(op_name, *args, **kwargs): def check_interoperability(op_list): + OpArgMngr.randomize_workloads() for name in op_list: if name in _TVM_OPS and not is_op_runnable(): continue @@ -3240,13 +3245,17 @@ def check_interoperability(op_list): if name in ['full_like', 'zeros_like', 'ones_like'] and \ StrictVersion(platform.python_version()) < StrictVersion('3.0.0'): continue + default_tols = (1e-3, 1e-4) + tols = {'linalg.tensorinv': (1e-2, 5e-3), + 'linalg.solve': (1e-3, 5e-2)} + (rel_tol, abs_tol) = tols.get(name, default_tols) print('Dispatch test:', name) workloads = OpArgMngr.get_workloads(name) assert workloads is not None, 'Workloads for operator `{}` has not been ' \ 'added for checking interoperability with ' \ 'the official NumPy.'.format(name) for workload in workloads: - _check_interoperability_helper(name, *workload['args'], **workload['kwargs']) + _check_interoperability_helper(name, rel_tol, abs_tol, *workload['args'], **workload['kwargs']) @with_seed() From 9548b0c64005320c44f54a726929bc0b179452da Mon Sep 17 00:00:00 2001 From: Leonard Lausen Date: Tue, 21 Jul 2020 21:42:01 +0000 Subject: [PATCH 10/46] Remove duplicate settings in .codecov.yml (#18763) New PRs started showing the codecov/project badge again due apparent change in codecov's backend resolving these duplicate options specified in .codecov.yml --- .codecov.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.codecov.yml b/.codecov.yml index 70037e6483ff..5253ec7b40f4 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -11,11 +11,6 @@ coverage: round: down range: "70...100" - status: - project: yes - patch: yes - changes: no - parsers: gcov: branch_detection: From a330a022d4c32b9096c4b6d7066a936d6eef59a1 Mon Sep 17 00:00:00 2001 From: Leonard Lausen Date: Wed, 22 Jul 2020 06:31:47 +0000 Subject: [PATCH 11/46] Fix mx.symbol.numpy._Symbol.__deepcopy__ logic error (#18686) * Fix mx.symbol.numpy._Symbol.__deepcopy__ logic error Performed shallow copy instead of deep copy * Test * Fix test --- tests/python/unittest/test_symbol.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/python/unittest/test_symbol.py b/tests/python/unittest/test_symbol.py index 1c84af0c668e..910b6ca15499 100644 --- a/tests/python/unittest/test_symbol.py +++ b/tests/python/unittest/test_symbol.py @@ -479,3 +479,13 @@ def test_infershape_happens_for_all_ops_in_graph(): assert False +def test_symbol_copy(): + a = mx.sym.Variable('a') + b = copy.copy(a) + b._set_attr(name='b') + assert a.name == 'a' and b.name == 'b' + + a = mx.sym.Variable('a').as_np_ndarray() + b = copy.copy(a) + b._set_attr(name='b') + assert a.name == 'a' and b.name == 'b' From 1928117cee718bcdcd3bc1408940c8747f4c840e Mon Sep 17 00:00:00 2001 From: Przemyslaw Tredak Date: Tue, 21 Jul 2020 23:35:15 -0700 Subject: [PATCH 12/46] Fix crash when accessing already destructed static variables (#18768) --- src/c_api/c_api.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/c_api/c_api.cc b/src/c_api/c_api.cc index ea39d9ac6e5b..53ff1e41c7f6 100644 --- a/src/c_api/c_api.cc +++ b/src/c_api/c_api.cc @@ -1316,6 +1316,7 @@ int MXNotifyShutdown() { API_BEGIN(); mxnet::op::custom::CustomOperator::Get()->Stop(); Engine::Get()->NotifyShutdown(); + Engine::Get()->WaitForAll(); API_END(); } From 18af71eebcd391c4d2a52b5bcdcc633df3e76603 Mon Sep 17 00:00:00 2001 From: Leonard Lausen Date: Thu, 23 Jul 2020 18:09:10 +0000 Subject: [PATCH 13/46] CI: Migrate remaining Dockerfiles to docker-compose.yml and remove unused code (#18771) * Migrate remaining Dockerfiles to docker-compose.yml - Delete unused Dockerfiles - Delete unused install/*.sh scripts - Consolidate ubuntu_gpu_tensorrt and ubuntu_gpu - Remove deprecated logic in ci/build.py (no longer needed with docker-compose) - Remove ci/docker_cache.py (no longer needed with docker-compose) * Fix * Fix * Fix ubuntu_cpu_jekyll --- ci/Jenkinsfile_docker_cache | 1 - ci/build.py | 189 ++---------- ci/dev_menu.py | 1 - ci/docker/Dockerfile.build.ubuntu | 51 ++-- ci/docker/Dockerfile.build.ubuntu_cpu_c | 35 --- ci/docker/Dockerfile.build.ubuntu_cpu_jekyll | 43 +-- ci/docker/Dockerfile.build.ubuntu_cpu_julia | 66 ----- ci/docker/Dockerfile.build.ubuntu_cpu_r | 46 --- ci/docker/Dockerfile.build.ubuntu_cpu_scala | 53 ---- .../Dockerfile.build.ubuntu_gpu_tensorrt | 47 --- ci/docker/Dockerfile.build.ubuntu_rat | 36 --- .../Dockerfile.publish.test.ubuntu1604_cpu | 39 --- .../Dockerfile.publish.test.ubuntu1604_gpu | 39 --- .../Dockerfile.publish.test.ubuntu1804_cpu | 41 --- .../Dockerfile.publish.test.ubuntu1804_gpu | 41 --- ci/docker/Dockerfile.publish.ubuntu1604_cpu | 44 --- ci/docker/Dockerfile.publish.ubuntu1604_gpu | 44 --- ci/docker/docker-compose.yml | 31 ++ ci/docker/install/export_gpg_keys.sh | 23 -- ci/docker/install/r.gpg | Bin 1519 -> 0 bytes ci/docker/install/sbt.gpg | Bin 2210 -> 0 bytes ci/docker/install/tensorrt.sh | 49 ---- ci/docker/install/ubuntu_base.sh | 40 --- ci/docker/install/ubuntu_clang.sh | 42 --- ci/docker/install/ubuntu_clojure.sh | 30 -- ci/docker/install/ubuntu_cudnn.sh | 62 ---- ci/docker/install/ubuntu_emscripten.sh | 41 --- ci/docker/install/ubuntu_gcc8.sh | 23 -- ci/docker/install/ubuntu_julia.sh | 43 --- ci/docker/install/ubuntu_nightly_tests.sh | 35 --- ci/docker/install/ubuntu_r.sh | 50 ---- ci/docker/install/ubuntu_rat.sh | 34 --- ci/docker/install/ubuntu_scala.sh | 31 -- ci/docker/runtime_functions.sh | 18 +- ci/docker_cache.py | 203 ------------- ci/docker_cache_requirements | 24 -- ci/jenkins/Jenkins_steps.groovy | 5 +- ci/test_docker_cache.py | 272 ------------------ ci/windows/test_jl07_cpu.ps1 | 56 ---- ci/windows/test_jl10_cpu.ps1 | 56 ---- .../apache_rat_license_check/README.md | 2 +- 41 files changed, 105 insertions(+), 1881 deletions(-) delete mode 100644 ci/docker/Dockerfile.build.ubuntu_cpu_c delete mode 100644 ci/docker/Dockerfile.build.ubuntu_cpu_julia delete mode 100644 ci/docker/Dockerfile.build.ubuntu_cpu_r delete mode 100644 ci/docker/Dockerfile.build.ubuntu_cpu_scala delete mode 100644 ci/docker/Dockerfile.build.ubuntu_gpu_tensorrt delete mode 100644 ci/docker/Dockerfile.build.ubuntu_rat delete mode 100644 ci/docker/Dockerfile.publish.test.ubuntu1604_cpu delete mode 100644 ci/docker/Dockerfile.publish.test.ubuntu1604_gpu delete mode 100644 ci/docker/Dockerfile.publish.test.ubuntu1804_cpu delete mode 100644 ci/docker/Dockerfile.publish.test.ubuntu1804_gpu delete mode 100644 ci/docker/Dockerfile.publish.ubuntu1604_cpu delete mode 100644 ci/docker/Dockerfile.publish.ubuntu1604_gpu delete mode 100755 ci/docker/install/export_gpg_keys.sh delete mode 100644 ci/docker/install/r.gpg delete mode 100644 ci/docker/install/sbt.gpg delete mode 100755 ci/docker/install/tensorrt.sh delete mode 100755 ci/docker/install/ubuntu_base.sh delete mode 100755 ci/docker/install/ubuntu_clang.sh delete mode 100755 ci/docker/install/ubuntu_clojure.sh delete mode 100755 ci/docker/install/ubuntu_cudnn.sh delete mode 100755 ci/docker/install/ubuntu_emscripten.sh delete mode 100755 ci/docker/install/ubuntu_gcc8.sh delete mode 100755 ci/docker/install/ubuntu_julia.sh delete mode 100755 ci/docker/install/ubuntu_nightly_tests.sh delete mode 100755 ci/docker/install/ubuntu_r.sh delete mode 100755 ci/docker/install/ubuntu_rat.sh delete mode 100755 ci/docker/install/ubuntu_scala.sh delete mode 100644 ci/docker_cache.py delete mode 100644 ci/docker_cache_requirements delete mode 100644 ci/test_docker_cache.py delete mode 100644 ci/windows/test_jl07_cpu.ps1 delete mode 100644 ci/windows/test_jl10_cpu.ps1 diff --git a/ci/Jenkinsfile_docker_cache b/ci/Jenkinsfile_docker_cache index 96cf2c7bef86..5f378b5d69eb 100644 --- a/ci/Jenkinsfile_docker_cache +++ b/ci/Jenkinsfile_docker_cache @@ -37,7 +37,6 @@ core_logic: { ws('workspace/docker_cache') { timeout(time: total_timeout, unit: 'MINUTES') { utils.init_git() - sh "python3 ./ci/docker_cache.py --docker-registry ${env.DOCKER_CACHE_REGISTRY}" sh "cd ci && python3 ./docker_login.py --secret-name ${env.DOCKERHUB_SECRET_NAME} && docker-compose -f docker/docker-compose.yml pull && docker-compose -f docker/docker-compose.yml build --parallel && COMPOSE_HTTP_TIMEOUT=600 docker-compose -f docker/docker-compose.yml push && docker logout" } } diff --git a/ci/build.py b/ci/build.py index 70ea8dcee37b..f42be1861b19 100755 --- a/ci/build.py +++ b/ci/build.py @@ -18,23 +18,18 @@ # specific language governing permissions and limitations # under the License. -"""Multi arch dockerized build tool. +"""Multi arch dockerized build tool.""" -""" - -__author__ = 'Marco de Abreu, Kellen Sunderland, Anton Chernov, Pedro Larroy' -__version__ = '0.3' +__author__ = 'Marco de Abreu, Kellen Sunderland, Anton Chernov, Pedro Larroy, Leonard Lausen' +__version__ = '0.4' import argparse -import glob import pprint -import re import os -import shutil import signal import subprocess from itertools import chain -from subprocess import check_call, check_output +from subprocess import check_call from typing import * import yaml @@ -42,49 +37,18 @@ from safe_docker_run import SafeDockerClient from util import * -# NOTE: Temporary whitelist used until all Dockerfiles are refactored for docker compose -DOCKER_COMPOSE_WHITELIST = ('centos7_cpu', 'centos7_gpu_cu92', 'centos7_gpu_cu100', - 'centos7_gpu_cu101', 'centos7_gpu_cu102', 'ubuntu_cpu', - 'ubuntu_build_cuda', 'ubuntu_gpu_cu101', 'publish.test.centos7_cpu', - 'publish.test.centos7_gpu', 'android_armv7', 'android_armv8', - 'armv6', 'armv7', 'armv8', 'test.armv7', 'test.armv8') -# Files for docker compose -DOCKER_COMPOSE_FILES = set(('docker/build.centos7', 'docker/build.ubuntu', 'docker/build.android', - 'docker/build.arm', 'docker/test.arm', 'docker/publish.test.centos7')) - - -def get_dockerfiles_path(): - return "docker" - - -def get_platforms(path: str = get_dockerfiles_path(), legacy_only=False) -> List[str]: - """Get a list of architectures given our dockerfiles""" - dockerfiles = glob.glob(os.path.join(path, "Dockerfile.*")) - dockerfiles = set(filter(lambda x: x[-1] != '~', dockerfiles)) - files = set(map(lambda x: re.sub(r"Dockerfile.(.*)", r"\1", x), dockerfiles)) - if legacy_only: - files = files - DOCKER_COMPOSE_FILES - platforms = list(map(lambda x: os.path.split(x)[1], sorted(files))) - return platforms +def get_platforms() -> List[str]: + """Get a list of architectures declared in docker-compose.yml""" + with open("docker/docker-compose.yml", "r") as f: + compose_config = yaml.load(f.read(), yaml.SafeLoader) + return list(compose_config["services"].keys()) def get_docker_tag(platform: str, registry: str) -> str: """:return: docker tag to be used for the container""" - if platform in DOCKER_COMPOSE_WHITELIST: - with open("docker/docker-compose.yml", "r") as f: - compose_config = yaml.load(f.read(), yaml.SafeLoader) - return compose_config["services"][platform]["image"].replace('${DOCKER_CACHE_REGISTRY}', registry) - - platform = platform if any(x in platform for x in ['build.', 'publish.']) else 'build.{}'.format(platform) - if not registry: - registry = "mxnet_local" - return "{0}/{1}".format(registry, platform) - - -def get_dockerfile(platform: str, path=get_dockerfiles_path()) -> str: - platform = platform if any(x in platform for x in ['build.', 'publish.']) else 'build.{}'.format(platform) - return os.path.join(path, "Dockerfile.{0}".format(platform)) - + with open("docker/docker-compose.yml", "r") as f: + compose_config = yaml.load(f.read(), yaml.SafeLoader) + return compose_config["services"][platform]["image"].replace('${DOCKER_CACHE_REGISTRY}', registry) def build_docker(platform: str, registry: str, num_retries: int, no_cache: bool, cache_intermediate: bool = False) -> str: @@ -96,50 +60,18 @@ def build_docker(platform: str, registry: str, num_retries: int, no_cache: bool, :param no_cache: pass no-cache to docker to rebuild the images :return: Id of the top level image """ - tag = get_docker_tag(platform=platform, registry=registry) + logging.info('Building docker container \'%s\' based on ci/docker/docker-compose.yml', platform) + # We add a user with the same group as the executing non-root user so files created in the + # container match permissions of the local user. Same for the group. + cmd = ['docker-compose', '-f', 'docker/docker-compose.yml', 'build', + "--build-arg", "USER_ID={}".format(os.getuid()), + "--build-arg", "GROUP_ID={}".format(os.getgid())] + if cache_intermediate: + cmd.append('--no-rm') + cmd.append(platform) env = os.environ.copy() - - # Case 1: docker-compose - if platform in DOCKER_COMPOSE_WHITELIST: - logging.info('Building docker container tagged \'%s\' based on ci/docker/docker-compose.yml', tag) - # We add a user with the same group as the executing non-root user so files created in the - # container match permissions of the local user. Same for the group. - cmd = ['docker-compose', '-f', 'docker/docker-compose.yml', 'build', - "--build-arg", "USER_ID={}".format(os.getuid()), - "--build-arg", "GROUP_ID={}".format(os.getgid())] - if cache_intermediate: - cmd.append('--no-rm') - cmd.append(platform) - env["DOCKER_CACHE_REGISTRY"] = registry - else: # Case 2: Deprecated way, will be removed - # We add a user with the same group as the executing non-root user so files created in the - # container match permissions of the local user. Same for the group. - # - # These variables are used in the docker files to create user and group with these ids. - # see: docker/install/ubuntu_adduser.sh - # - # cache-from is needed so we use the cached images tagged from the remote via - # docker pull see: docker_cache.load_docker_cache - # - # This also prevents using local layers for caching: https://github.com/moby/moby/issues/33002 - # So to use local caching, we should omit the cache-from by using --no-dockerhub-cache argument to this - # script. - # - # This doesn't work with multi head docker files. - logging.info("Building docker container tagged '%s'", tag) - cmd = ["docker", "build", - "-f", get_dockerfile(platform), - "--build-arg", "USER_ID={}".format(os.getuid()), - "--build-arg", "GROUP_ID={}".format(os.getgid())] - if no_cache: - cmd.append("--no-cache") - if cache_intermediate: - cmd.append("--rm=false") - elif registry: - cmd.extend(["--cache-from", tag]) - cmd.extend(["-t", tag, get_dockerfiles_path()]) - + env["DOCKER_CACHE_REGISTRY"] = registry @retry(subprocess.CalledProcessError, tries=num_retries) def run_cmd(env=None): @@ -148,27 +80,6 @@ def run_cmd(env=None): run_cmd(env=env) - # Get image id by reading the tag. It's guaranteed (except race condition) that the tag exists. Otherwise, the - # check_call would have failed - image_id = _get_local_image_id(docker_tag=tag) - if not image_id: - raise FileNotFoundError('Unable to find docker image id matching with {}'.format(tag)) - return image_id - - -def _get_local_image_id(docker_tag): - """ - Get the image id of the local docker layer with the passed tag - :param docker_tag: docker tag - :return: Image id as string or None if tag does not exist - """ - cmd = ["docker", "images", "-q", docker_tag] - image_id_b = check_output(cmd) - image_id = image_id_b.decode('utf-8').strip() - if not image_id: - raise RuntimeError('Unable to find docker image id matching with tag {}'.format(docker_tag)) - return image_id - def buildir() -> str: return os.path.join(get_mxnet_root(), "build") @@ -291,21 +202,11 @@ def list_platforms() -> str: def load_docker_cache(platform, tag, docker_registry) -> None: """Imports tagged container from the given docker registry""" if docker_registry: - if platform in DOCKER_COMPOSE_WHITELIST: - env = os.environ.copy() - env["DOCKER_CACHE_REGISTRY"] = docker_registry - cmd = ['docker-compose', '-f', 'docker/docker-compose.yml', 'pull', platform] - logging.info("Running command: 'DOCKER_CACHE_REGISTRY=%s %s'", docker_registry, ' '.join(cmd)) - check_call(cmd, env=env) - return - - # noinspection PyBroadException - try: - import docker_cache - logging.info('Docker cache download is enabled from registry %s', docker_registry) - docker_cache.load_docker_cache(registry=docker_registry, docker_tag=tag) - except Exception: - logging.exception('Unable to retrieve Docker cache. Continue without...') + env = os.environ.copy() + env["DOCKER_CACHE_REGISTRY"] = docker_registry + cmd = ['docker-compose', '-f', 'docker/docker-compose.yml', 'pull', platform] + logging.info("Running command: 'DOCKER_CACHE_REGISTRY=%s %s'", docker_registry, ' '.join(cmd)) + check_call(cmd, env=env) else: logging.info('Distributed docker cache disabled') @@ -327,9 +228,9 @@ def main() -> int: parser = argparse.ArgumentParser(description="""Utility for building and testing MXNet on docker containers""", epilog="") - parser.add_argument("-p", "--platform", - help="platform", - type=str) + parser.add_argument("-p", "--platform", type=str, help= \ + "Platform. See ci/docker/docker-compose.yml for list of supported " \ + "platforms (services).") parser.add_argument("-b", "--build-only", help="Only build the container, don't build the project", @@ -339,10 +240,6 @@ def main() -> int: help="Only run the container, don't rebuild the container", action='store_true') - parser.add_argument("-a", "--all", - help="build for all platforms", - action='store_true') - parser.add_argument("-n", "--nvidiadocker", help="Use nvidia docker", action='store_true') @@ -443,32 +340,6 @@ def main() -> int: logging.critical("Execution of %s failed with status: %d", command, ret) return ret - elif args.all: - platforms = get_platforms() - platforms = [platform for platform in platforms if 'build.' in platform] - logging.info("Building for all architectures: %s", platforms) - logging.info("Artifacts will be produced in the build/ directory.") - for platform in platforms: - tag = get_docker_tag(platform=platform, registry=args.docker_registry) - load_docker_cache(platform=platform, tag=tag, docker_registry=args.docker_registry) - build_docker(platform, registry=args.docker_registry, num_retries=args.docker_build_retries, - no_cache=args.no_cache) - if args.build_only: - continue - shutil.rmtree(buildir(), ignore_errors=True) - build_platform = "build_{}".format(platform) - plat_buildir = os.path.abspath(os.path.join(get_mxnet_root(), '..', - "mxnet_{}".format(build_platform))) - if os.path.exists(plat_buildir): - logging.warning("%s already exists, skipping", plat_buildir) - continue - command = ["/work/mxnet/ci/docker/runtime_functions.sh", build_platform] - container_run( - docker_client=docker_client, platform=platform, nvidia_runtime=args.nvidiadocker, - shared_memory_size=args.shared_memory_size, command=command, docker_registry=args.docker_registry, - local_ccache_dir=args.ccache_dir, environment=environment) - shutil.move(buildir(), plat_buildir) - logging.info("Built files left in: %s", plat_buildir) else: parser.print_help() diff --git a/ci/dev_menu.py b/ci/dev_menu.py index cd2aa8d46e1e..dcc01723d83d 100644 --- a/ci/dev_menu.py +++ b/ci/dev_menu.py @@ -130,7 +130,6 @@ def provision_virtualenv(venv_path=DEFAULT_PYENV): ('[Docker] sanity_check. Check for linting and code formatting and licenses.', [ "ci/build.py --platform ubuntu_cpu /work/runtime_functions.sh sanity_check", - "ci/build.py --platform ubuntu_rat /work/runtime_functions.sh nightly_test_rat_check", ]), ('[Docker] Python3 CPU unittests', [ diff --git a/ci/docker/Dockerfile.build.ubuntu b/ci/docker/Dockerfile.build.ubuntu index 415e6ae881ae..c9ec3f5a04fc 100644 --- a/ci/docker/Dockerfile.build.ubuntu +++ b/ci/docker/Dockerfile.build.ubuntu @@ -68,9 +68,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \ libzmq3-dev \ liblapack-dev \ libopencv-dev \ - # Caffe - caffe-cpu \ - libcaffe-cpu-dev \ + libxml2-dev \ # BytePS numactl \ libnuma-dev \ @@ -80,23 +78,11 @@ RUN export DEBIAN_FRONTEND=noninteractive && \ python3-pip \ python3-nose \ python3-nose-timer \ - # Scala - openjdk-8-jdk \ - openjdk-8-jre \ - maven \ - scala \ - # Clojure - clojure \ - leiningen \ - # R - r-base-core \ - r-cran-devtools \ - libcairo2-dev \ - libxml2-dev \ ## Documentation doxygen \ pandoc \ ## Build-dependencies for ccache 3.7.9 + autoconf \ gperf \ libb2-dev \ libzstd-dev && \ @@ -114,22 +100,16 @@ RUN cd /usr/local/src && \ cd /usr/local/src && \ rm -rf ccache +# RAT License Checker tool +RUN cd /usr/local/src && \ + wget https://archive.apache.org/dist/creadur/apache-rat-0.13/apache-rat-0.13-bin.tar.gz && \ + tar xf apache-rat-0.13-bin.tar.gz + # Python & cmake COPY install/requirements /work/ RUN python3 -m pip install cmake==3.16.6 && \ python3 -m pip install -r /work/requirements -# Only OpenJDK 8 supported at this time.. -RUN update-java-alternatives -s java-1.8.0-openjdk-amd64 - -# julia not available on 18.04 -COPY install/ubuntu_julia.sh /work/ -RUN /work/ubuntu_julia.sh - -# MXNetJS nightly needs emscripten for wasm -COPY install/ubuntu_emscripten.sh /work/ -RUN /work/ubuntu_emscripten.sh - ARG USER_ID=0 COPY install/docker_filepermissions.sh /work/ RUN /work/docker_filepermissions.sh @@ -152,6 +132,23 @@ RUN cd /usr/local && \ cd thrust && \ git checkout 1.9.8 +# Install TensorRT +# We need to redeclare ARG due to +# https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact +ARG BASE_IMAGE +RUN export SHORT_CUDA_VERSION=${CUDA_VERSION%.*} && \ + apt-get update && \ + if [ ${SHORT_CUDA_VERSION} = 10.0 ]; then \ + apt-get install -y "libnvinfer-dev=5.1.5-1+cuda10.0"; \ + elif [ ${SHORT_CUDA_VERSION} = 10.1 ]; then \ + apt-get install -y "libnvinfer-dev=5.1.5-1+cuda10.1"; \ + elif [ ${SHORT_CUDA_VERSION} = 10.2 ]; then \ + apt-get install -y "libnvinfer-dev=6.0.1-1+cuda10.2"; \ + else \ + echo "ERROR: Cuda ${SHORT_CUDA_VERSION} not yet supported in Dockerfile.build.ubuntu"; \ + exit 1; \ + fi && \ + rm -rf /var/lib/apt/lists/* FROM gpu as gpuwithcudaruntimelibs # Special case because the CPP-Package requires the CUDA runtime libs diff --git a/ci/docker/Dockerfile.build.ubuntu_cpu_c b/ci/docker/Dockerfile.build.ubuntu_cpu_c deleted file mode 100644 index c7969da1bb1d..000000000000 --- a/ci/docker/Dockerfile.build.ubuntu_cpu_c +++ /dev/null @@ -1,35 +0,0 @@ -# -*- mode: dockerfile -*- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# -# Dockerfile to build and run MXNet on Ubuntu 16.04 for CPU - -FROM ubuntu:16.04 - -WORKDIR /work/deps - -COPY install/ubuntu_core.sh /work/ -RUN /work/ubuntu_core.sh - -COPY install/deb_ubuntu_ccache.sh /work/ -RUN /work/deb_ubuntu_ccache.sh - -RUN apt-get update && apt-get install -y doxygen graphviz - -COPY runtime_functions.sh /work/ - -WORKDIR /work/mxnet \ No newline at end of file diff --git a/ci/docker/Dockerfile.build.ubuntu_cpu_jekyll b/ci/docker/Dockerfile.build.ubuntu_cpu_jekyll index 52ed2e083c69..6586a4e907d3 100644 --- a/ci/docker/Dockerfile.build.ubuntu_cpu_jekyll +++ b/ci/docker/Dockerfile.build.ubuntu_cpu_jekyll @@ -18,53 +18,28 @@ # # Dockerfile to build and run MXNet on Ubuntu 16.04 for CPU -FROM ubuntu:16.04 +FROM ruby:2.6.5-buster WORKDIR /work/deps -SHELL ["/bin/bash", "-l", "-c" ] - -RUN apt-get update && apt-get install -y \ - build-essential \ - git \ - zlib1g-dev \ - gnupg2 \ - curl \ - wget \ - unzip - -# Always last, except here to prevent conflicts with rvm -ARG USER_ID=0 -ARG GROUP_ID=0 -COPY install/ubuntu_adduser.sh /work/ -RUN /work/ubuntu_adduser.sh - -RUN curl -sSL https://rvm.io/mpapis.asc | gpg2 --import - && \ - curl -sSL https://rvm.io/pkuczynski.asc | gpg2 --import - && \ - curl -sSL https://get.rvm.io | bash -s stable - -RUN source /etc/profile.d/rvm.sh && \ - rvm requirements && \ - rvm install 2.6.5 && \ - rvm use 2.6.5 --default - ENV BUNDLE_HOME=/work/deps/bundle ENV BUNDLE_APP_CONFIG=/work/deps/bundle ENV BUNDLE_BIN=/work/deps/bundle/bin ENV GEM_BIN=/work/deps/gem/bin ENV GEM_HOME=/work/deps/gem -RUN echo "gem: --no-ri --no-rdoc" > ~/.gemrc -RUN yes | gem update --system -RUN yes | gem install --force bundler -RUN gem install jekyll +RUN echo "gem: --no-ri --no-rdoc" > ~/.gemrc && \ + yes | gem update --system && \ + yes | gem install --force bundler && \ + gem install jekyll ENV PATH=$BUNDLE_BIN:$GEM_BIN:$PATH COPY runtime_functions.sh /work/ -RUN chown -R jenkins_slave /work/ && \ - chown -R jenkins_slave /usr/local/bin && \ - chown -R jenkins_slave /usr/local/rvm +ARG USER_ID=0 +ARG GROUP_ID=0 +COPY install/ubuntu_adduser.sh /work/ +RUN /work/ubuntu_adduser.sh WORKDIR /work/mxnet diff --git a/ci/docker/Dockerfile.build.ubuntu_cpu_julia b/ci/docker/Dockerfile.build.ubuntu_cpu_julia deleted file mode 100644 index e100d4df09a8..000000000000 --- a/ci/docker/Dockerfile.build.ubuntu_cpu_julia +++ /dev/null @@ -1,66 +0,0 @@ -# -*- mode: dockerfile -*- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# -# Dockerfile to build and run MXNet on Ubuntu 16.04 for CPU - -FROM ubuntu:16.04 - -WORKDIR /work/deps - -COPY install/ubuntu_core.sh /work/ -RUN /work/ubuntu_core.sh - -COPY install/deb_ubuntu_ccache.sh /work/ -RUN /work/deb_ubuntu_ccache.sh - -COPY install/ubuntu_python.sh /work/ -COPY install/requirements /work/ -RUN /work/ubuntu_python.sh - -COPY install/ubuntu_scala.sh /work/ -COPY install/sbt.gpg /work/ -RUN /work/ubuntu_scala.sh - -COPY install/ubuntu_clojure.sh /work/ -RUN /work/ubuntu_clojure.sh - -COPY install/ubuntu_julia.sh /work/ -RUN /work/ubuntu_julia.sh - -COPY install/ubuntu_clang.sh /work/ -RUN /work/ubuntu_clang.sh - -COPY install/ubuntu_gcc8.sh /work/ -RUN /work/ubuntu_gcc8.sh - -COPY install/ubuntu_r.sh /work/ -COPY install/r.gpg /work/ -RUN /work/ubuntu_r.sh - -COPY install/ubuntu_docs.sh /work/ -RUN /work/ubuntu_docs.sh - -# Always last -ARG USER_ID=0 -ARG GROUP_ID=0 -COPY install/ubuntu_adduser.sh /work/ -RUN /work/ubuntu_adduser.sh - -COPY runtime_functions.sh /work/ - -WORKDIR /work/mxnet diff --git a/ci/docker/Dockerfile.build.ubuntu_cpu_r b/ci/docker/Dockerfile.build.ubuntu_cpu_r deleted file mode 100644 index 2354cb3b66d6..000000000000 --- a/ci/docker/Dockerfile.build.ubuntu_cpu_r +++ /dev/null @@ -1,46 +0,0 @@ -# -*- mode: dockerfile -*- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# -# Dockerfile to build and run MXNet on Ubuntu 16.04 for CPU - -FROM ubuntu:16.04 - -WORKDIR /work/deps - -COPY install/ubuntu_core.sh /work/ -RUN /work/ubuntu_core.sh - -COPY install/deb_ubuntu_ccache.sh /work/ -RUN /work/deb_ubuntu_ccache.sh - -COPY install/ubuntu_gcc8.sh /work/ -RUN /work/ubuntu_gcc8.sh - -COPY install/ubuntu_r.sh /work/ -COPY install/r.gpg /work/ -RUN /work/ubuntu_r.sh - -# Always last -ARG USER_ID=0 -ARG GROUP_ID=0 -COPY install/ubuntu_adduser.sh /work/ -RUN /work/ubuntu_adduser.sh - -COPY runtime_functions.sh /work/ - -WORKDIR /work/mxnet diff --git a/ci/docker/Dockerfile.build.ubuntu_cpu_scala b/ci/docker/Dockerfile.build.ubuntu_cpu_scala deleted file mode 100644 index a36e4426c39c..000000000000 --- a/ci/docker/Dockerfile.build.ubuntu_cpu_scala +++ /dev/null @@ -1,53 +0,0 @@ -# -*- mode: dockerfile -*- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# -# Dockerfile to build and run MXNet on Ubuntu 16.04 for CPU - -FROM ubuntu:16.04 - -WORKDIR /work/deps - -COPY install/ubuntu_core.sh /work/ -RUN /work/ubuntu_core.sh - -COPY install/deb_ubuntu_ccache.sh /work/ -RUN /work/deb_ubuntu_ccache.sh - -COPY install/ubuntu_gcc8.sh /work/ -RUN /work/ubuntu_gcc8.sh - -COPY install/ubuntu_python.sh /work/ -COPY install/requirements /work/ -RUN /work/ubuntu_python.sh - -COPY install/ubuntu_scala.sh /work/ -COPY install/sbt.gpg /work/ -RUN /work/ubuntu_scala.sh - -COPY install/ubuntu_clojure.sh /work/ -RUN /work/ubuntu_clojure.sh - -# Always last -ARG USER_ID=0 -ARG GROUP_ID=0 -COPY install/ubuntu_adduser.sh /work/ -RUN /work/ubuntu_adduser.sh - -COPY runtime_functions.sh /work/ - -WORKDIR /work/mxnet diff --git a/ci/docker/Dockerfile.build.ubuntu_gpu_tensorrt b/ci/docker/Dockerfile.build.ubuntu_gpu_tensorrt deleted file mode 100644 index 90bd772ecb17..000000000000 --- a/ci/docker/Dockerfile.build.ubuntu_gpu_tensorrt +++ /dev/null @@ -1,47 +0,0 @@ -# -*- mode: dockerfile -*- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# -# Dockerfile to run MXNet on Ubuntu 16.04 for CPU - -FROM nvidia/cuda:10.0-devel - -WORKDIR /work/deps - -COPY install/ubuntu_core.sh /work/ -RUN /work/ubuntu_core.sh -COPY install/deb_ubuntu_ccache.sh /work/ -RUN /work/deb_ubuntu_ccache.sh -COPY install/ubuntu_python.sh /work/ -COPY install/requirements /work/ -RUN /work/ubuntu_python.sh -COPY install/tensorrt.sh /work -RUN /work/tensorrt.sh - -ARG USER_ID=0 -COPY install/ubuntu_adduser.sh /work/ -RUN /work/ubuntu_adduser.sh - -ENV CUDNN_VERSION=7.5.0.56 -COPY install/ubuntu_cudnn.sh /work/ -RUN /work/ubuntu_cudnn.sh - -COPY runtime_functions.sh /work/ - -WORKDIR /work/mxnet -ENV LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib -ENV CPLUS_INCLUDE_PATH=${CPLUS_INCLUDE_PATH}:/usr/local/cuda-10.0/targets/x86_64-linux/include/ diff --git a/ci/docker/Dockerfile.build.ubuntu_rat b/ci/docker/Dockerfile.build.ubuntu_rat deleted file mode 100644 index 234d2e42e946..000000000000 --- a/ci/docker/Dockerfile.build.ubuntu_rat +++ /dev/null @@ -1,36 +0,0 @@ -# -*- mode: dockerfile -*- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# -# Dockerfile to run the Apache RAT license check - -FROM ubuntu:16.04 - -WORKDIR /work/deps - -COPY install/ubuntu_rat.sh /work/ -RUN /work/ubuntu_rat.sh - -ARG USER_ID=0 -ARG GROUP_ID=0 -COPY install/ubuntu_adduser.sh /work/ -RUN /work/ubuntu_adduser.sh - -COPY runtime_functions.sh /work/ - -WORKDIR /work/mxnet -ENV LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib diff --git a/ci/docker/Dockerfile.publish.test.ubuntu1604_cpu b/ci/docker/Dockerfile.publish.test.ubuntu1604_cpu deleted file mode 100644 index bbb7b6a0d7bd..000000000000 --- a/ci/docker/Dockerfile.publish.test.ubuntu1604_cpu +++ /dev/null @@ -1,39 +0,0 @@ -# -*- mode: dockerfile -*- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# -# Dockerfile to build and run MXNet on Ubuntu 16.04 for CPU - -FROM ubuntu:16.04 - -WORKDIR /work/deps - -COPY install/ubuntu_base.sh /work/ -RUN /work/ubuntu_base.sh - -COPY install/ubuntu_scala.sh /work/ -RUN /work/ubuntu_scala.sh - -ARG USER_ID=0 -ARG GROUP_ID=0 -COPY install/ubuntu_adduser.sh /work/ -RUN /work/ubuntu_adduser.sh - -COPY runtime_functions.sh /work/ - -WORKDIR /work/mxnet -ENV LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib diff --git a/ci/docker/Dockerfile.publish.test.ubuntu1604_gpu b/ci/docker/Dockerfile.publish.test.ubuntu1604_gpu deleted file mode 100644 index 660461dc0cfa..000000000000 --- a/ci/docker/Dockerfile.publish.test.ubuntu1604_gpu +++ /dev/null @@ -1,39 +0,0 @@ -# -*- mode: dockerfile -*- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# -# Dockerfile to run MXNet on Ubuntu 16.04 for GPU - -FROM nvidia/cuda:9.2-cudnn7-devel-ubuntu16.04 - -WORKDIR /work/deps - -COPY install/ubuntu_base.sh /work/ -RUN /work/ubuntu_base.sh - -COPY install/ubuntu_scala.sh /work/ -RUN /work/ubuntu_scala.sh - -ARG USER_ID=0 -ARG GROUP_ID=0 -COPY install/ubuntu_adduser.sh /work/ -RUN /work/ubuntu_adduser.sh - -COPY runtime_functions.sh /work/ - -WORKDIR /work/mxnet -ENV LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib diff --git a/ci/docker/Dockerfile.publish.test.ubuntu1804_cpu b/ci/docker/Dockerfile.publish.test.ubuntu1804_cpu deleted file mode 100644 index e3a8c193f234..000000000000 --- a/ci/docker/Dockerfile.publish.test.ubuntu1804_cpu +++ /dev/null @@ -1,41 +0,0 @@ -# -*- mode: dockerfile -*- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# -# Dockerfile to build and run MXNet on Ubuntu 18.04 for CPU - -FROM ubuntu:18.04 - -WORKDIR /work/deps - -ENV DEBIAN_FRONTEND noninteractive - -COPY install/ubuntu_base.sh /work/ -RUN /work/ubuntu_base.sh - -COPY install/ubuntu_scala.sh /work/ -RUN /work/ubuntu_scala.sh - -ARG USER_ID=0 -ARG GROUP_ID=0 -COPY install/ubuntu_adduser.sh /work/ -RUN /work/ubuntu_adduser.sh - -COPY runtime_functions.sh /work/ - -WORKDIR /work/mxnet -ENV LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib diff --git a/ci/docker/Dockerfile.publish.test.ubuntu1804_gpu b/ci/docker/Dockerfile.publish.test.ubuntu1804_gpu deleted file mode 100644 index 99f7e0d3eff9..000000000000 --- a/ci/docker/Dockerfile.publish.test.ubuntu1804_gpu +++ /dev/null @@ -1,41 +0,0 @@ -# -*- mode: dockerfile -*- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# -# Dockerfile to run MXNet on Ubuntu 18.04 for GPU - -FROM nvidia/cuda:9.2-cudnn7-devel-ubuntu18.04 - -WORKDIR /work/deps - -ENV DEBIAN_FRONTEND noninteractive - -COPY install/ubuntu_base.sh /work/ -RUN /work/ubuntu_base.sh - -COPY install/ubuntu_scala.sh /work/ -RUN /work/ubuntu_scala.sh - -ARG USER_ID=0 -ARG GROUP_ID=0 -COPY install/ubuntu_adduser.sh /work/ -RUN /work/ubuntu_adduser.sh - -COPY runtime_functions.sh /work/ - -WORKDIR /work/mxnet -ENV LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib diff --git a/ci/docker/Dockerfile.publish.ubuntu1604_cpu b/ci/docker/Dockerfile.publish.ubuntu1604_cpu deleted file mode 100644 index e5898b66c161..000000000000 --- a/ci/docker/Dockerfile.publish.ubuntu1604_cpu +++ /dev/null @@ -1,44 +0,0 @@ -# -*- mode: dockerfile -*- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# -# Dockerfile to build and run MXNet on Ubuntu 16.04 for CPU - -FROM ubuntu:16.04 - -WORKDIR /work/deps - -COPY install/ubuntu_base.sh /work/ -RUN /work/ubuntu_base.sh - -COPY install/ubuntu_python.sh /work/ -COPY install/requirements /work/ -RUN /work/ubuntu_python.sh - -COPY install/ubuntu_scala.sh /work/ -COPY install/sbt.gpg /work/ -RUN /work/ubuntu_scala.sh - -ARG USER_ID=0 -ARG GROUP_ID=0 -COPY install/ubuntu_adduser.sh /work/ -RUN /work/ubuntu_adduser.sh - -COPY runtime_functions.sh /work/ - -WORKDIR /work/mxnet -ENV LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib diff --git a/ci/docker/Dockerfile.publish.ubuntu1604_gpu b/ci/docker/Dockerfile.publish.ubuntu1604_gpu deleted file mode 100644 index 0bd8b8259b90..000000000000 --- a/ci/docker/Dockerfile.publish.ubuntu1604_gpu +++ /dev/null @@ -1,44 +0,0 @@ -# -*- mode: dockerfile -*- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# -# Dockerfile to run MXNet on Ubuntu 16.04 for GPU - -FROM nvidia/cuda:9.2-cudnn7-devel-ubuntu16.04 - -WORKDIR /work/deps - -COPY install/ubuntu_base.sh /work/ -RUN /work/ubuntu_base.sh - -COPY install/ubuntu_python.sh /work/ -COPY install/requirements /work/ -RUN /work/ubuntu_python.sh - -COPY install/ubuntu_scala.sh /work/ -COPY install/sbt.gpg /work/ -RUN /work/ubuntu_scala.sh - -ARG USER_ID=0 -ARG GROUP_ID=0 -COPY install/ubuntu_adduser.sh /work/ -RUN /work/ubuntu_adduser.sh - -COPY runtime_functions.sh /work/ - -WORKDIR /work/mxnet -ENV LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib diff --git a/ci/docker/docker-compose.yml b/ci/docker/docker-compose.yml index 73beb232b1ca..cced098d7f11 100644 --- a/ci/docker/docker-compose.yml +++ b/ci/docker/docker-compose.yml @@ -206,3 +206,34 @@ services: BASE_IMAGE: nvidia/cuda:9.2-cudnn7-devel-centos7 cache_from: - ${DOCKER_CACHE_REGISTRY}/publish.test.centos7_gpu:latest + ################################################################################################### + # Miscellaneous containers + ################################################################################################### + jetson: + image: ${DOCKER_CACHE_REGISTRY}/build.jetson:latest + build: + context: . + dockerfile: Dockerfile.build.jetson + cache_from: + - ${DOCKER_CACHE_REGISTRY}/build.jetson:latest + ubuntu_cpu_jekyll: + image: ${DOCKER_CACHE_REGISTRY}/build.ubuntu_cpu_jekyll:latest + build: + context: . + dockerfile: Dockerfile.build.ubuntu_cpu_jekyll + cache_from: + - ${DOCKER_CACHE_REGISTRY}/build.ubuntu_cpu_jekyll:latest + ubuntu_cpu_python: + image: ${DOCKER_CACHE_REGISTRY}/build.ubuntu_cpu_python:latest + build: + context: . + dockerfile: Dockerfile.build.ubuntu_cpu_python + cache_from: + - ${DOCKER_CACHE_REGISTRY}/build.ubuntu_cpu_python:latest + ubuntu_blc: + image: ${DOCKER_CACHE_REGISTRY}/build.ubuntu_blc:latest + build: + context: . + dockerfile: Dockerfile.build.ubuntu_blc + cache_from: + - ${DOCKER_CACHE_REGISTRY}/build.ubuntu_blc:latest diff --git a/ci/docker/install/export_gpg_keys.sh b/ci/docker/install/export_gpg_keys.sh deleted file mode 100755 index 604a27b98143..000000000000 --- a/ci/docker/install/export_gpg_keys.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -gpg --keyserver keyserver.ubuntu.com --recv 2EE0EA64E40A89B84B2DF73499E82A75642AC823 -gpg --output sbt.gpg --export scalasbt@gmail.com -gpg --keyserver keyserver.ubuntu.com --recv E084DAB9 -gpg --output r.gpg --export marutter@gmail.com diff --git a/ci/docker/install/r.gpg b/ci/docker/install/r.gpg deleted file mode 100644 index 77fd6341e9d44dc73c40172d3428ac99413db3df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1519 zcmZ|OZ9EeQ0LSq?m~EbIp4!es7D+J_5iymNMxH4e!;)+z&q|rhX+w$+VUk5n-7cm) ztVj#Tj%=!V8b^|nBj;hKFju{}>&?CUzy5vx-x8p*9KNN#0|*1Kk3l~sHtw8zttc}n z541squ4z{-YFKdXC0=71mqzE^=E@fGFbegp)L(4EG3Tn;Ea}{u_FTk){Oy6xfNYNf znV$##xpD9$Cvk5EQ%3N_JM02U=K#phb#3QUB(ur{0be-PI7L2eBDf^oh-+9a2eXXL zTeznhH*V=^^AnWZ%#N_TnhDobgv;aN)ol*##3l>*P`lo&?5utZFp5!pYSFA4Ux*<8 z^@&jvpHXuOw){bL-7Ir*=E;ef1H*eqTev;}}*TNju6H zy&dP=%zwkscT}+it8@|utBlw%%1{m54It|C!k4kYsG5{>ch{ zMq$35(%81XHfPKF)1t+s zbz=aHk$x5AEw}6$cBY*o-5r_7?{rE(t*#5?SvYZ-_w~wkLhZzkX$M9)-1S?m6?uT| zUK_7PX=(1n2b_%xe+w%Q`d9q_ufENSHYNW zAn<{q)?o14%sju6wGY09neS_}nnP^p1LoO+V<2-a`bq}{EjPgN>!Tq=MQX*6#fB-Y zaFa`Zi_W2iw3*LHv;uT&s#p}s2D}!h}b^Qdz!;R&b z`bfX8OoX`7lOTnqgs4rm0ZQBjOHdNqV1{&8z0{PLp{h#SiTe4cjmnC+x$?ql73J8| zQc21CN7)!J{L+;N1>DNpOZPh@@i8mZ*G5xY68z^;cWbEE>%X(51C8W#zKT=@p_RVD z8&LiZukFX*n1w=R);P)09K?k1@x3zcU+>OeCOxGSNzHV!XJDmkVL=5!sJc3KBULks z?S3uB^X1K80}j~g5Tu#Q(YJ&dg~A}J+HYoESUe-N#{RlrgUC#B!BTih{^5xW$DRsO zhkOwyKGe$cc?57)cgP-{Hr&auFPAK^_v@AdqYTHAd%Q){p4fxAia0JqeWE|(PVc;F zxgEY{{bHvw6p*K diff --git a/ci/docker/install/sbt.gpg b/ci/docker/install/sbt.gpg deleted file mode 100644 index 664f01b37d017674079d04787790c3bf62ef0c95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2210 zcmV;T2wnG?0u2OJX!7R)5CGFPNJP~V<0RgxtVW$#A+pUk;)WDKG}^0o z|AE~HWG$?FwOp^+W$^sr-_gqhBm50`5g>7?quS!+tvD4PQ-3~zT{&-tKaTQs$BYAz zA^sIS^d4HvrwYGO0TxYtZ%lu1Ed&=0$R~o%Iek|~dz3>q+vl;}X+MhT;grOVq6wF0 z(JkLecUz4b{cQCHizwwslA7~|m{nRSb?8L-z=v>(^WBTH#T1+U;swuvw{BsWfMG{+ z!bQhDEqt^7s#wShat`(Kx%8s2x}XoUfweObmItVfj#sh8Pctz7Z>@eO)_=EPu7ivg z)FR{*b1=#tRO>@r+YU@WV84~2&bRV^BGiI*{+tYl)-lHoo}bXSSg<~p^`wN6Z3CWZ zQz*fdR|I9WNG22@_~lim{s?fxC1yjqGP005hpPMD7P&qwrU|(ip+QtL6~~42PYo~q zB)|C6>fnnZ#JH(So+2S}wD$IZLtJv-!$H_TL6h`JLa?<0_ z0_~AX_N`0dGk*XP0RRECBXeSOAYyfCY-AvGZ*OcMJac1VY+-X^bU0I5^h36D$@QM+n(A2F?$$f zhGE1$L{aJiG{f)UhB=(9dvQ#iuQ2>^MGl~bm(vVAiO!LUzqJcFrv360s$C#j5_K(U z&tDh>L`P>((UziOoXa-7{E|L!0xsMj`ye2_p0%CFg8hIC=eXkew6QT(U-S7R0%VYb7$ZV< z#Kx}-YR3kx#Q;Xdax{nQ!%Q)Nr9kd|9NyC`)JqB}^kB&%i3DXOtk>HwB3tI~6Uq?k z+<(l)L1A0-;1*jmS(w1+sr@S_s3B%U*Ut>Z)=pQp+eEdHZJIkhZ;G}JIZ(m`OnMh{ zgOmnplSZ_v0xshMQ%Mto-Zf^${@J`oIf2aPnxJRYi7beL9rwz2Gb@4WGOTR; zHHUz>u(((QzcqGG2T7dpj6TrmDMhm{wX5=I z4mf8ig7_?%Pe#ButGog#f1R_Y{z;TxL(eFyUXb!e<5SyV(56;`$+RPN+hh9OhUrD7 z=PBPHcIuR^Qv?b}-4O{e`msI?OHyE|stgTWA#|iB)V(p-11a~!8Ob@+m0~C)>mV@` zWJ)4k?!&s^&J5Ox;=-){pfjQR6N9kVPYs?nB2t5z*PoB{v*ZIStNIH z?57kzx1?a{a4Rs8NCn#vM+&Y9&E)&9Pu3#a&-)cqxCkX7nCmr^R6MU6x zgp|lPE?FL^6bJM`>(W10r$YkVQa)oA4ijo;9f7j-TZM~kMmV4u?KrO`Y8FHUJ9#~8 z>-wB^}>_!q-^x<2g$&-Ny$44N_{r`bDI344rg zwRaWHil%XnoA$~g1t~If5fA@v4fQ@pjKl-O${8`pfN4v=Z1S6o;Y=QC>uBBeZUr1XrqmS4KgNf2* zMSWfq3_3-pOmDPaT1%egO}3+>6tdLatv776GrA++lA>)$mLi;EidfJsYq?4!~ptlVxsb5ZwG-~G 07; 1.0 -> 10 - local JLBINARY="julia-$1.tar.gz" - local JULIADIR="/work/julia$suffix" - local JULIA="${JULIADIR}/bin/julia" - - mkdir -p $JULIADIR - # The julia version in Ubuntu repo is too old - # We download the tarball from the official link: - # https://julialang.org/downloads/ - wget -qO $JLBINARY https://julialang-s3.julialang.org/bin/linux/x64/$1/julia-$2-linux-x86_64.tar.gz - tar xzf $JLBINARY -C $JULIADIR --strip 1 - rm $JLBINARY - - $JULIA -e 'using InteractiveUtils; versioninfo()' -} - -install_julia 0.7 0.7.0 -install_julia 1.0 1.0.4 diff --git a/ci/docker/install/ubuntu_nightly_tests.sh b/ci/docker/install/ubuntu_nightly_tests.sh deleted file mode 100755 index c80efed6c377..000000000000 --- a/ci/docker/install/ubuntu_nightly_tests.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -#Install steps for the nightly tests - -set -ex - -# Install for Compilation warning Nightly Test -# Adding ppas frequently fails due to busy gpg servers, retry 5 times with 5 minute delays. -for i in 1 2 3 4 5; do add-apt-repository -y ppa:ubuntu-toolchain-r/test && break || sleep 300; done - -apt-get update || true -apt-get -y install time - -# Install for RAT License Check Nightly Test -apt-get install -y subversion maven -y #>/dev/null - -# Packages needed for the Straight Dope Nightly tests. -pip3 install pandas scikit-image prompt_toolkit diff --git a/ci/docker/install/ubuntu_r.sh b/ci/docker/install/ubuntu_r.sh deleted file mode 100755 index 44ebf7c0799e..000000000000 --- a/ci/docker/install/ubuntu_r.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -# build and install are separated so changes to build don't invalidate -# the whole docker cache for the image - -# Important Maintenance Instructions: -# Align changes with installation instructions in /get_started/ubuntu_setup.md -# Align with R install script: /docs/install/install_mxnet_ubuntu_r.sh - -set -ex -cd "$(dirname "$0")" -# install libraries for mxnet's r package on ubuntu -echo "deb http://cran.rstudio.com/bin/linux/ubuntu trusty/" >> /etc/apt/sources.list - -apt-key add r.gpg - -# Installing the latest version (3.3+) that is compatible with MXNet -add-apt-repository 'deb [arch=amd64,i386] https://cran.rstudio.com/bin/linux/ubuntu xenial/' - -apt-get update || true -apt-get install -y --allow-unauthenticated \ - libcairo2-dev \ - libssl-dev \ - libxml2-dev \ - libxt-dev \ - r-base \ - r-base-dev \ - texinfo \ - texlive \ - texlive-fonts-extra - -# Delete cran repository as it requires --allow-unauthenticated -find /etc/apt -name "*.list" | xargs sed -i 's/.*cran\.rstudio.com.*//' diff --git a/ci/docker/install/ubuntu_rat.sh b/ci/docker/install/ubuntu_rat.sh deleted file mode 100755 index 2c905fc275c7..000000000000 --- a/ci/docker/install/ubuntu_rat.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -set -ex - -echo "Install dependencies" -apt-get update || true -apt-get install -y subversion maven openjdk-8-jdk openjdk-8-jre - -echo "download RAT" -#svn co http://svn.apache.org/repos/asf/creadur/rat/trunk/ -svn co http://svn.apache.org/repos/asf/creadur/rat/branches/0.12-release/ - -echo "cd into directory" -cd 0.12-release - -echo "mvn install" -mvn -Dmaven.test.skip=true install diff --git a/ci/docker/install/ubuntu_scala.sh b/ci/docker/install/ubuntu_scala.sh deleted file mode 100755 index 355e978e075c..000000000000 --- a/ci/docker/install/ubuntu_scala.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -# build and install are separated so changes to build don't invalidate -# the whole docker cache for the image - -set -ex - -apt-get update || true -apt-get install -y \ - openjdk-8-jdk \ - openjdk-8-jre \ - software-properties-common \ - scala \ - maven diff --git a/ci/docker/runtime_functions.sh b/ci/docker/runtime_functions.sh index 2f0bf777c464..3701597fe974 100755 --- a/ci/docker/runtime_functions.sh +++ b/ci/docker/runtime_functions.sh @@ -604,17 +604,16 @@ build_ubuntu_gpu_tensorrt() { rm -rf build mkdir -p build cd build - cmake \ - -DCMAKE_CXX_FLAGS=-I/usr/include/python${PYVER}\ - -DBUILD_SHARED_LIBS=ON ..\ - -G Ninja - ninja -j 1 -v onnx/onnx.proto - ninja -j 1 -v + cmake -DBUILD_SHARED_LIBS=ON -GNinja .. + ninja onnx/onnx.proto + ninja export LIBRARY_PATH=`pwd`:`pwd`/onnx/:$LIBRARY_PATH export CPLUS_INCLUDE_PATH=`pwd`:$CPLUS_INCLUDE_PATH popd # Build ONNX-TensorRT + export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib + export CPLUS_INCLUDE_PATH=${CPLUS_INCLUDE_PATH}:/usr/local/cuda-10.1/targets/x86_64-linux/include/ pushd . cd 3rdparty/onnx-tensorrt/ mkdir -p build @@ -1055,15 +1054,15 @@ unittest_ubuntu_python3_arm() { # Functions that run the nightly Tests: #Runs Apache RAT Check on MXNet Source for License Headers -nightly_test_rat_check() { +test_rat_check() { set -e pushd . - cd /work/deps/0.12-release/apache-rat/target + cd /usr/local/src/apache-rat-0.13 # Use shell number 5 to duplicate the log output. It get sprinted and stored in $OUTPUT at the same time https://stackoverflow.com/a/12451419 exec 5>&1 - OUTPUT=$(java -jar apache-rat-0.13-SNAPSHOT.jar -E /work/mxnet/tests/nightly/apache_rat_license_check/rat-excludes -d /work/mxnet|tee >(cat - >&5)) + OUTPUT=$(java -jar apache-rat-0.13.jar -E /work/mxnet/tests/nightly/apache_rat_license_check/rat-excludes -d /work/mxnet|tee >(cat - >&5)) ERROR_MESSAGE="Printing headers for text files without a valid license header" @@ -1175,7 +1174,6 @@ build_ubuntu_cpu_docs() { build_jekyll_docs() { set -ex - source /etc/profile.d/rvm.sh pushd . build_docs_setup diff --git a/ci/docker_cache.py b/ci/docker_cache.py deleted file mode 100644 index 7fb946b53ebc..000000000000 --- a/ci/docker_cache.py +++ /dev/null @@ -1,203 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -""" -Utility to handle distributed docker cache. This is done by keeping the entire image chain of a docker container -on an S3 bucket. This utility allows cache creation and download. After execution, the cache will be in an identical -state as if the container would have been built locally already. -""" - -import argparse -import logging -import os -import subprocess -import sys -from typing import * - -import build as build_util -from docker_login import login_dockerhub, logout_dockerhub -from util import retry - -DOCKER_CACHE_NUM_RETRIES = 3 -DOCKER_CACHE_TIMEOUT_MINS = 45 -PARALLEL_BUILDS = 10 -DOCKER_CACHE_RETRY_SECONDS = 5 - - -def build_save_containers(platforms, registry, load_cache, no_publish) -> int: - """ - Entry point to build and upload all built dockerimages in parallel - :param platforms: List of platforms - :param registry: Docker registry name - :param load_cache: Load cache before building - :return: 1 if error occurred, 0 otherwise - """ - from joblib import Parallel, delayed - if len(platforms) == 0: - return 0 - - platform_results = Parallel(n_jobs=PARALLEL_BUILDS, backend="multiprocessing")( - delayed(_build_save_container)(platform, registry, load_cache, no_publish) - for platform in platforms) - - is_error = False - for platform_result in platform_results: - if platform_result is not None: - logging.error('Failed to generate %s', platform_result) - is_error = True - - return 1 if is_error else 0 - - -def _build_save_container(platform, registry, load_cache, no_publish) -> Optional[str]: - """ - Build image for passed platform and upload the cache to the specified S3 bucket - :param platform: Platform - :param registry: Docker registry name - :param load_cache: Load cache before building - :return: Platform if failed, None otherwise - """ - docker_tag = build_util.get_docker_tag(platform=platform, registry=registry) - # Preload cache - if load_cache: - load_docker_cache(registry=registry, docker_tag=docker_tag) - - # Start building - logging.debug('Building %s as %s', platform, docker_tag) - try: - # Increase the number of retries for building the cache. - image_id = build_util.build_docker(platform=platform, registry=registry, num_retries=10, no_cache=False) - logging.info('Built %s as %s', docker_tag, image_id) - - # Push cache to registry - if not no_publish: - _upload_image(registry=registry, docker_tag=docker_tag, image_id=image_id) - return None - except Exception: - logging.exception('Unexpected exception during build of %s', docker_tag) - return platform - # Error handling is done by returning the errorous platform name. This is necessary due to - # Parallel being unable to handle exceptions - - -def _upload_image(registry, docker_tag, image_id) -> None: - """ - Upload the passed image by id, tag it with docker tag and upload to S3 bucket - :param registry: Docker registry name - :param docker_tag: Docker tag - :param image_id: Image id - :return: None - """ - # We don't have to retag the image since it is already in the right format - logging.info('Uploading %s (%s) to %s', docker_tag, image_id, registry) - push_cmd = ['docker', 'push', docker_tag] - subprocess.check_call(push_cmd) - - -@retry(target_exception=subprocess.TimeoutExpired, tries=DOCKER_CACHE_NUM_RETRIES, - delay_s=DOCKER_CACHE_RETRY_SECONDS) -def load_docker_cache(registry, docker_tag) -> None: - """ - Load the precompiled docker cache from the registry - :param registry: Docker registry name - :param docker_tag: Docker tag to load - :return: None - """ - # We don't have to retag the image since it's already in the right format - if not registry: - return - assert docker_tag - - logging.info('Loading Docker cache for %s from %s', docker_tag, registry) - pull_cmd = ['docker', 'pull', docker_tag] - - # Don't throw an error if the image does not exist - subprocess.run(pull_cmd, timeout=DOCKER_CACHE_TIMEOUT_MINS*60) - logging.info('Successfully pulled docker cache') - - -def delete_local_docker_cache(docker_tag): - """ - Delete the local docker cache for the entire docker image chain - :param docker_tag: Docker tag - :return: None - """ - history_cmd = ['docker', 'history', '-q', docker_tag] - - try: - image_ids_b = subprocess.check_output(history_cmd) - image_ids_str = image_ids_b.decode('utf-8').strip() - layer_ids = [id.strip() for id in image_ids_str.split('\n') if id != ''] - - delete_cmd = ['docker', 'image', 'rm', '--force'] - delete_cmd.extend(layer_ids) - subprocess.check_call(delete_cmd) - except subprocess.CalledProcessError as error: - # Could be caused by the image not being present - logging.debug('Error during local cache deletion %s', error) - - -def main() -> int: - """ - Utility to create and publish the Docker cache to Docker Hub - :return: - """ - # We need to be in the same directory than the script so the commands in the dockerfiles work as - # expected. But the script can be invoked from a different path - base = os.path.split(os.path.realpath(__file__))[0] - os.chdir(base) - - logging.getLogger().setLevel(logging.DEBUG) - logging.getLogger('botocore').setLevel(logging.INFO) - logging.getLogger('boto3').setLevel(logging.INFO) - logging.getLogger('urllib3').setLevel(logging.INFO) - logging.getLogger('s3transfer').setLevel(logging.INFO) - - def script_name() -> str: - return os.path.split(sys.argv[0])[1] - - logging.basicConfig(format='{}: %(asctime)-15s %(message)s'.format(script_name())) - - parser = argparse.ArgumentParser(description="Utility for preserving and loading Docker cache", epilog="") - parser.add_argument("--docker-registry", - help="Docker hub registry name", - type=str, - required=True) - parser.add_argument("--no-publish", help="Only build but don't publish. Used for testing.", - action='store_true') - - args = parser.parse_args() - - platforms = build_util.get_platforms(legacy_only=True) - - secret_name = os.environ['DOCKERHUB_SECRET_NAME'] - endpoint_url = os.environ['DOCKERHUB_SECRET_ENDPOINT_URL'] - region_name = os.environ['DOCKERHUB_SECRET_ENDPOINT_REGION'] - - try: - if not args.no_publish: - login_dockerhub(secret_name, endpoint_url, region_name) - return build_save_containers(platforms=platforms, registry=args.docker_registry, load_cache=True, no_publish=args.no_publish) - finally: - logout_dockerhub() - - -if __name__ == '__main__': - sys.exit(main()) diff --git a/ci/docker_cache_requirements b/ci/docker_cache_requirements deleted file mode 100644 index d1272cb348c7..000000000000 --- a/ci/docker_cache_requirements +++ /dev/null @@ -1,24 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -boto3==1.7.13 -botocore==1.10.13 -docutils==0.14 -jmespath==0.9.3 -joblib==0.11 -python-dateutil==2.7.2 -s3transfer==0.1.13 -six==1.11.0 diff --git a/ci/jenkins/Jenkins_steps.groovy b/ci/jenkins/Jenkins_steps.groovy index f247ccb54fd6..8079420dd794 100644 --- a/ci/jenkins/Jenkins_steps.groovy +++ b/ci/jenkins/Jenkins_steps.groovy @@ -278,7 +278,7 @@ def compile_unix_tensorrt_gpu(lib_name) { ws('workspace/build-tensorrt') { timeout(time: max_time, unit: 'MINUTES') { utils.init_git() - utils.docker_run('ubuntu_gpu_tensorrt', 'build_ubuntu_gpu_tensorrt', false) + utils.docker_run('ubuntu_gpu_cu101', 'build_ubuntu_gpu_tensorrt', false) utils.pack_lib(lib_name, mx_tensorrt_lib) } } @@ -1228,7 +1228,7 @@ def sanity_rat_license() { node(NODE_LINUX_CPU) { ws('workspace/sanity-rat') { utils.init_git() - utils.docker_run('ubuntu_rat', 'nightly_test_rat_check', false) + utils.docker_run('ubuntu_cpu', 'test_rat_check', false) } } }] @@ -1250,7 +1250,6 @@ def misc_test_docker_cache_build() { node(NODE_LINUX_CPU) { ws('workspace/docker_cache') { utils.init_git() - sh "python3 ./ci/docker_cache.py --docker-registry ${env.DOCKER_CACHE_REGISTRY} --no-publish" sh "cd ci && docker-compose -f docker/docker-compose.yml pull && docker-compose -f docker/docker-compose.yml build --parallel" } } diff --git a/ci/test_docker_cache.py b/ci/test_docker_cache.py deleted file mode 100644 index 81b315be4cff..000000000000 --- a/ci/test_docker_cache.py +++ /dev/null @@ -1,272 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -""" -Distributed Docker cache tests -""" - -import unittest.mock -import tempfile -import os -import logging -import subprocess -import sys -from unittest.mock import MagicMock - -sys.path.append(os.path.dirname(__file__)) -import docker_cache -import build as build_util - -DOCKERFILE_DIR = 'docker' -DOCKER_REGISTRY_NAME = 'test_registry' -DOCKER_REGISTRY_PORT = 5000 -DOCKER_REGISTRY_PATH = 'localhost:{}'.format(DOCKER_REGISTRY_PORT) - -class RedirectSubprocessOutput(object): - """ - Redirect the output of all subprocess.call calls to a readable buffer instead of writing it to stdout/stderr. - The output can then be retrieved with get_output. - """ - def __enter__(self): - self.buf_output = tempfile.TemporaryFile() - - def trampoline(*popenargs, **kwargs): - self.call(*popenargs, **kwargs) - - self.old_method = subprocess.call - subprocess.call = trampoline - return self - - def __exit__(self, *args): - logging.info('Releasing docker output buffer:\n%s', self.get_output()) - subprocess.call = self.old_method - self.buf_output.close() - - def call(self, *popenargs, **kwargs): - """ - Replace subprocess.call - :param popenargs: - :param timeout: - :param kwargs: - :return: - """ - kwargs['stderr'] = subprocess.STDOUT - kwargs['stdout'] = self.buf_output - return self.old_method(*popenargs, **kwargs) - - def get_output(self): - self.buf_output.seek(0) - return self.buf_output.read().decode('utf-8') - - -class TestDockerCache(unittest.TestCase): - """ - Test utility class - """ - def setUp(self): - logging.getLogger().setLevel(logging.DEBUG) - - # We need to be in the same directory than the script so the commands in the dockerfiles work as - # expected. But the script can be invoked from a different path - base = os.path.split(os.path.realpath(__file__))[0] - os.chdir(base) - - docker_cache.login_dockerhub = MagicMock() # Override login - - # Stop in case previous execution was dirty - try: - self._stop_local_docker_registry() - except Exception: - pass - - # Start up docker registry - self._start_local_docker_registry() - - def tearDown(self): - # Stop docker registry - self._stop_local_docker_registry() - - @classmethod - def _start_local_docker_registry(cls): - # https://docs.docker.com/registry/deploying/#run-a-local-registrys - start_cmd = [ - 'docker', 'run', '-d', '-p', '{}:{}'.format(DOCKER_REGISTRY_PORT, DOCKER_REGISTRY_PORT), - '--name', DOCKER_REGISTRY_NAME, 'registry:2' - ] - subprocess.check_call(start_cmd) - - @classmethod - def _stop_local_docker_registry(cls): - # https://docs.docker.com/registry/deploying/#run-a-local-registry - stop_cmd = ['docker', 'container', 'stop', DOCKER_REGISTRY_NAME] - subprocess.check_call(stop_cmd) - - clean_cmd = ['docker', 'container', 'rm', '-v', DOCKER_REGISTRY_NAME] - subprocess.check_call(clean_cmd) - - def test_full_cache(self): - """ - Test whether it's possible to restore cache entirely - :return: - """ - dockerfile_content = """ - FROM busybox - RUN touch ~/file1 - RUN touch ~/file2 - RUN touch ~/file3 - RUN touch ~/file4 - """ - platform = 'test_full_cache' - docker_tag = build_util.get_docker_tag(platform=platform, registry=DOCKER_REGISTRY_PATH) - dockerfile_path = os.path.join(DOCKERFILE_DIR, 'Dockerfile.build.' + platform) - try: - with open(dockerfile_path, 'w') as dockerfile_handle: - dockerfile_handle.write(dockerfile_content) - - # Warm up - docker_cache.delete_local_docker_cache(docker_tag=docker_tag) - - def warm_up_lambda_func(): - build_util.build_docker( - docker_binary='docker', - platform=platform, - registry=DOCKER_REGISTRY_PATH, - num_retries=3, - no_cache=False - ) - _assert_docker_build(lambda_func=warm_up_lambda_func, expected_cache_hit_count=0, - expected_cache_miss_count=4) - - # Assert local cache is properly primed - def primed_cache_lambda_func(): - build_util.build_docker( - docker_binary='docker', - platform=platform, - registry=DOCKER_REGISTRY_PATH, - num_retries=3, - no_cache=False - ) - _assert_docker_build(lambda_func=primed_cache_lambda_func, expected_cache_hit_count=4, - expected_cache_miss_count=0) - - # Upload and clean local cache - docker_cache.build_save_containers(platforms=[platform], registry=DOCKER_REGISTRY_PATH, load_cache=False) - docker_cache.delete_local_docker_cache(docker_tag=docker_tag) - - # Build with clean local cache and cache loading enabled - def clean_cache_lambda_func(): - docker_cache.build_save_containers( - platforms=[platform], registry=DOCKER_REGISTRY_PATH, load_cache=True) - _assert_docker_build(lambda_func=clean_cache_lambda_func, expected_cache_hit_count=4, - expected_cache_miss_count=0) - finally: - # Delete dockerfile - os.remove(dockerfile_path) - docker_cache.delete_local_docker_cache(docker_tag=docker_tag) - - def test_partial_cache(self): - """ - Test whether it's possible to restore cache and then pit it up partially by using a Dockerfile which shares - some parts - :return: - """ - # These two dockerfiles diverge at the fourth RUN statement. Their common parts (1-3) should be re-used - dockerfile_content_1 = """ - FROM busybox - RUN touch ~/file1 - RUN touch ~/file2 - RUN touch ~/file3 - RUN touch ~/file4 - """ - dockerfile_content_2 = """ - FROM busybox - RUN touch ~/file1 - RUN touch ~/file2 - RUN touch ~/file3 - RUN touch ~/file5 - RUN touch ~/file4 - RUN touch ~/file6 - """ - platform = 'test_partial_cache' - docker_tag = build_util.get_docker_tag(platform=platform, registry=DOCKER_REGISTRY_PATH) - dockerfile_path = os.path.join(DOCKERFILE_DIR, 'Dockerfile.build.' + platform) - try: - # Write initial Dockerfile - with open(dockerfile_path, 'w') as dockerfile_handle: - dockerfile_handle.write(dockerfile_content_1) - - # Warm up - docker_cache.delete_local_docker_cache(docker_tag=docker_tag) - - def warm_up_lambda_func(): - build_util.build_docker( - docker_binary='docker', - platform=platform, - registry=DOCKER_REGISTRY_PATH, - num_retries=3, - no_cache=False - ) - _assert_docker_build(lambda_func=warm_up_lambda_func, expected_cache_hit_count=0, - expected_cache_miss_count=4) - - # Assert local cache is properly primed - def primed_cache_lambda_func(): - build_util.build_docker( - docker_binary='docker', - platform=platform, - registry=DOCKER_REGISTRY_PATH, - num_retries=3, - no_cache=False - ) - _assert_docker_build(lambda_func=primed_cache_lambda_func, expected_cache_hit_count=4, - expected_cache_miss_count=0) - - # Upload and clean local cache - docker_cache.build_save_containers(platforms=[platform], registry=DOCKER_REGISTRY_PATH, load_cache=False) - docker_cache.delete_local_docker_cache(docker_tag=docker_tag) - - # Replace Dockerfile with the second one, resulting in a partial cache hit - with open(dockerfile_path, 'w') as dockerfile_handle: - dockerfile_handle.write(dockerfile_content_2) - - # Test if partial cache is properly hit. It will attempt to load the cache from the first Dockerfile, - # resulting in a partial hit - def partial_cache_lambda_func(): - docker_cache.build_save_containers( - platforms=[platform], registry=DOCKER_REGISTRY_PATH, load_cache=True) - _assert_docker_build(lambda_func=partial_cache_lambda_func, expected_cache_hit_count=3, - expected_cache_miss_count=3) - - finally: - # Delete dockerfile - os.remove(dockerfile_path) - docker_cache.delete_local_docker_cache(docker_tag=docker_tag) - - -def _assert_docker_build(lambda_func, expected_cache_hit_count: int, expected_cache_miss_count: int): - with RedirectSubprocessOutput() as redirected_output: - lambda_func() - output = redirected_output.get_output() - assert output.count('Running in') == expected_cache_miss_count, \ - 'Expected {} "Running in", got {}. Log:{}'.\ - format(expected_cache_miss_count, output.count('Running in'), output) - assert output.count('Using cache') == expected_cache_hit_count, \ - 'Expected {} "Using cache", got {}. Log:{}'.\ - format(expected_cache_hit_count, output.count('Using cache'), output) diff --git a/ci/windows/test_jl07_cpu.ps1 b/ci/windows/test_jl07_cpu.ps1 deleted file mode 100644 index 4924957ddb68..000000000000 --- a/ci/windows/test_jl07_cpu.ps1 +++ /dev/null @@ -1,56 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -7z x -y windows_package.7z - -# set default output encoding to utf8 -$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8' - -$env:MXNET_HOME = [System.IO.Path]::GetFullPath('.\windows_package') -$env:JULIA_URL = "https://julialang-s3.julialang.org/bin/winnt/x64/0.7/julia-0.7.0-win64.exe" -$env:JULIA_DEPOT_PATH = [System.IO.Path]::GetFullPath('.\julia-depot') - -$JULIA_DIR = [System.IO.Path]::GetFullPath('.\julia07') -$JULIA = "$JULIA_DIR\bin\julia" - -# Download most recent Julia Windows binary -[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12 -(New-Object System.Net.WebClient).DownloadFile($env:JULIA_URL, "julia-binary.exe") -if ($LastExitCode -ne 0) { Throw ("Error on downloading Julia Windows binary") } - -# Run installer silently, output to C:\julia07\julia -Start-Process -Wait "julia-binary.exe" -ArgumentList "/S /D=$JULIA_DIR" -if ($LastExitCode -ne 0) { Throw ("Error on installing Julia") } - -& $JULIA -e "using InteractiveUtils; versioninfo()" - -dir - -$src=' - using Pkg - Pkg.activate(".\\julia") - Pkg.build() - Pkg.test() -' - -$src > .\ci-build.jl - -# Redirect all stderr output to stdout, -# since Julia loggers output stuffs to stderr. -# Then, stderr triggers powershell NativeCommandError. -& $JULIA .\ci-build.jl 2>&1 | %{ "$_" } -if ($LastExitCode -eq 1) { Throw ("Error") } diff --git a/ci/windows/test_jl10_cpu.ps1 b/ci/windows/test_jl10_cpu.ps1 deleted file mode 100644 index b54b11a8a8ab..000000000000 --- a/ci/windows/test_jl10_cpu.ps1 +++ /dev/null @@ -1,56 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -7z x -y windows_package.7z - -# set default output encoding to utf8 -$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8' - -$env:MXNET_HOME = [System.IO.Path]::GetFullPath('.\windows_package') -$env:JULIA_URL = "https://julialang-s3.julialang.org/bin/winnt/x64/1.0/julia-1.0.3-win64.exe" -$env:JULIA_DEPOT_PATH = [System.IO.Path]::GetFullPath('.\julia-depot') - -$JULIA_DIR = [System.IO.Path]::GetFullPath('.\julia10') -$JULIA = "$JULIA_DIR\bin\julia" - -# Download most recent Julia Windows binary -[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12 -(New-Object System.Net.WebClient).DownloadFile($env:JULIA_URL, "julia-binary.exe") -if ($LastExitCode -ne 0) { Throw ("Error on downloading Julia Windows binary") } - -# Run installer silently, output to C:\julia10\julia -Start-Process -Wait "julia-binary.exe" -ArgumentList "/S /D=$JULIA_DIR" -if ($LastExitCode -ne 0) { Throw ("Error on installing Julia") } - -& $JULIA -e "using InteractiveUtils; versioninfo()" - -dir - -$src=' - using Pkg - Pkg.activate(".\\julia") - Pkg.build() - Pkg.test() -' - -$src > .\ci-build.jl - -# Redirect all stderr output to stdout, -# since Julia loggers output stuffs to stderr. -# Then, stderr triggers powershell NativeCommandError. -& $JULIA .\ci-build.jl 2>&1 | %{ "$_" } -if ($LastExitCode -eq 1) { Throw ("Error") } diff --git a/tests/nightly/apache_rat_license_check/README.md b/tests/nightly/apache_rat_license_check/README.md index 70ec665fa57f..388aaca3922d 100644 --- a/tests/nightly/apache_rat_license_check/README.md +++ b/tests/nightly/apache_rat_license_check/README.md @@ -31,7 +31,7 @@ The following commands can be used to run a Apache RAT check locally - Docker based 1-click-method: ``` -ci/build.py -p ubuntu_rat nightly_test_rat_check +ci/build.py -p ubuntu_cpu test_rat_check ``` Manual method: From 02ae456ef0e4eef86455b0a39d5ccabfd5b29668 Mon Sep 17 00:00:00 2001 From: Dick Carter Date: Thu, 23 Jul 2020 11:17:10 -0700 Subject: [PATCH 14/46] Improve environment variable handling in unittests (#18424) This PR makes it easy to create unittests that require specific settings of environment variables, while avoiding the pitfalls (discussed in comments section). This PR can be considered a recasting and expansion of the great vision of @larroy in creating the EnvManager class in #13140. In its base form, the facility is a drop-in replacement for EnvManager, and is called 'environment': with environment('MXNET_MY_NEW_FEATURE', '1'): with environment('MXNET_MY_NEW_FEATURE', '0'): Like EnvManager, this facility takes care of the save/restore of the previous environment variable state, including when exceptions are raised. In addition though, this PR introduces the features: A similarly-named unittest decorator: @with_environment(key, value) The ability to pass in multiple env vars as a dict (as is needed for some tests) in both forms, so for example: with environment({'MXNET_FEATURE_A': '1', 'MXNET_FEATURE_B': '1'}): Works on Windows! This PR includes a wrapping of the backend's setenv() and getenv() functions, and uses this direct access to the backend environment to keep it in sync with the python environment. This works around the problem that the C Runtime on Windows gets a snapshot of the Python environment at startup that is immutable from Python. with environment() has a simple implementation using the @contextmanager decorator Tests are included that validate the facility works with all combinations of before_val/set_val, namely unset/unset, unset/set, set/unset, set/set. There were 5 unittests previously using EnvManager, and this PR shifts those uses to with environment():, while converting over 20 other ad-hoc uses of os.environ[] within the unittests. This PR also enables those unittests that were bypassed on Windows (due to the inability to set environment variables) to run on all platforms. Further Comments Environment variables are a two-edged sword- they enable useful operating modes for testing, debugging or niche applications, but like all features they must be tested. The correct approach for testing with a particular env var setting is: def set_env_var(key, value): if value is None: os.environ.pop(key, None) else: os.environ[key] = value old_env_var_value = os.environ.get(env_var_name) try: set_env_var(env_var_name, test_env_var_value) finally: set_env_var(env_var_name, old_env_var_value ) The above code makes no assumption about whether the before-test and within-test state of the env var is set or unset, and restores the prior environment even if the test raises an exception. This represents a lot of boiler-plate code that could be potentially mishandled. The with environment() context makes it simple to handle all this properly. If an entire unittest wants a forced env var setting, then using the @with_environment() decorator avoids the code indent of the with environment() approach if used otherwise within the test. --- include/mxnet/c_api_test.h | 16 ++ python/mxnet/test_utils.py | 113 ++++++++---- python/mxnet/util.py | 35 +++- src/c_api/c_api_test.cc | 22 +++ tests/python/gpu/test_device.py | 16 +- tests/python/gpu/test_fusion.py | 39 ++-- tests/python/gpu/test_gluon_gpu.py | 18 +- tests/python/gpu/test_kvstore_gpu.py | 10 +- tests/python/gpu/test_operator_gpu.py | 42 ++--- tests/python/unittest/common.py | 35 ++-- tests/python/unittest/test_autograd.py | 7 +- tests/python/unittest/test_base.py | 103 ++++++++--- tests/python/unittest/test_engine.py | 4 +- tests/python/unittest/test_engine_import.py | 14 +- tests/python/unittest/test_executor.py | 66 +++---- tests/python/unittest/test_gluon.py | 23 +-- .../unittest/test_gluon_probability_v1.py | 2 +- .../unittest/test_gluon_probability_v2.py | 2 +- tests/python/unittest/test_memory_opt.py | 38 +--- tests/python/unittest/test_operator.py | 170 +++++++++--------- tests/python/unittest/test_subgraph_op.py | 28 ++- tests/python/unittest/test_symbol.py | 68 +++---- 22 files changed, 491 insertions(+), 380 deletions(-) diff --git a/include/mxnet/c_api_test.h b/include/mxnet/c_api_test.h index b7ba0cef04a3..df7079842657 100644 --- a/include/mxnet/c_api_test.h +++ b/include/mxnet/c_api_test.h @@ -75,6 +75,22 @@ MXNET_DLL int MXRemoveSubgraphPropertyOpNames(const char* prop_name); MXNET_DLL int MXRemoveSubgraphPropertyOpNamesV2(const char* prop_name); +/*! + * \brief Get the value of an environment variable as seen by the backend. + * \param name The name of the environment variable + * \param value The returned value of the environment variable + */ +MXNET_DLL int MXGetEnv(const char* name, + const char** value); + +/*! + * \brief Set the value of an environment variable from the backend. + * \param name The name of the environment variable + * \param value The desired value to set the environment variable `name` + */ +MXNET_DLL int MXSetEnv(const char* name, + const char* value); + #ifdef __cplusplus } #endif // __cplusplus diff --git a/python/mxnet/test_utils.py b/python/mxnet/test_utils.py index 9ec0c6cd1219..cb71c7dd46b9 100644 --- a/python/mxnet/test_utils.py +++ b/python/mxnet/test_utils.py @@ -24,6 +24,7 @@ import numbers import sys import os +import platform import errno import logging import bz2 @@ -48,7 +49,7 @@ from .ndarray.ndarray import _STORAGE_TYPE_STR_TO_ID from .symbol import Symbol from .symbol.numpy import _Symbol as np_symbol -from .util import use_np, use_np_default_dtype # pylint: disable=unused-import +from .util import use_np, use_np_default_dtype, getenv, setenv # pylint: disable=unused-import from .runtime import Features from .numpy_extension import get_cuda_compute_capability @@ -1920,27 +1921,6 @@ def get_bz2_data(data_dir, data_name, url, data_origin_name): bz_file.close() os.remove(data_origin_name) -def set_env_var(key, val, default_val=""): - """Set environment variable - - Parameters - ---------- - - key : str - Env var to set - val : str - New value assigned to the env var - default_val : str, optional - Default value returned if the env var doesn't exist - - Returns - ------- - str - The value of env var before it is set to the new value - """ - prev_val = os.environ.get(key, default_val) - os.environ[key] = val - return prev_val def same_array(array1, array2): """Check whether two NDArrays sharing the same memory block @@ -1965,9 +1945,11 @@ def same_array(array1, array2): array1[:] -= 1 return same(array1.asnumpy(), array2.asnumpy()) + @contextmanager def discard_stderr(): - """Discards error output of a routine if invoked as: + """ + Discards error output of a routine if invoked as: with discard_stderr(): ... @@ -2400,22 +2382,79 @@ def same_symbol_structure(sym1, sym2): return True -class EnvManager(object): - """Environment variable setter and unsetter via with idiom""" - def __init__(self, key, val): - self._key = key - self._next_val = val - self._prev_val = None +@contextmanager +def environment(*args): + """ + Environment variable setter and unsetter via `with` idiom. - def __enter__(self): - self._prev_val = os.environ.get(self._key) - os.environ[self._key] = self._next_val + Takes a specification of env var names and desired values and adds those + settings to the environment in advance of running the body of the `with` + statement. The original environment state is restored afterwards, even + if exceptions are raised in the `with` body. - def __exit__(self, ptype, value, trace): - if self._prev_val: - os.environ[self._key] = self._prev_val - else: - del os.environ[self._key] + Parameters + ---------- + args: + if 2 args are passed: + name, desired_value strings of the single env var to update, or + if 1 arg is passed: + a dict of name:desired_value for env var's to update + + """ + + # On Linux, env var changes made through python's os.environ are seen + # by the backend. On Windows though, the C runtime gets a snapshot + # of the environment that cannot be altered by os.environ. Here we + # check, using a wrapped version of the backend's getenv(), that + # the desired env var value is seen by the backend, and otherwise use + # a wrapped setenv() to establish that value in the backend. + + # Also on Windows, a set env var can never have the value '', since + # the command 'set FOO= ' is used to unset the variable. Perhaps + # as a result, the wrapped dmlc::GetEnv() routine returns the same + # value for unset variables and those set to ''. As a result, we + # ignore discrepancy. + def validate_backend_setting(name, value, can_use_setenv=True): + backend_value = getenv(name) + if value == backend_value or \ + value == '' and backend_value is None and platform.system() == 'Windows': + return + if not can_use_setenv: + raise RuntimeError('Could not set env var {}={} within C Runtime'.format(name, value)) + setenv(name, value) + validate_backend_setting(name, value, can_use_setenv=False) + + # Core routine to alter environment from a dict of env_var_name, env_var_value pairs + def set_environ(env_var_dict): + for env_var_name, env_var_value in env_var_dict.items(): + if env_var_value is None: + os.environ.pop(env_var_name, None) + else: + os.environ[env_var_name] = env_var_value + validate_backend_setting(env_var_name, env_var_value) + + # Create env_var name:value dict from the two calling methods of this routine + if len(args) == 1 and isinstance(args[0], dict): + env_vars = args[0] + else: + assert len(args) == 2, 'Expecting one dict arg or two args: env var name and value' + env_vars = {args[0]: args[1]} + + # Take a snapshot of the existing environment variable state + # for those variables to be changed. get() return None for unset keys. + snapshot = {x: os.environ.get(x) for x in env_vars.keys()} + + # Alter the environment per the env_vars dict + set_environ(env_vars) + + # Now run the wrapped code + try: + yield + finally: + # the backend engines may still be referencing the changed env var state + mx.nd.waitall() + # reinstate original env_var state per the snapshot taken earlier + set_environ(snapshot) def collapse_sum_like(a, shape): diff --git a/python/mxnet/util.py b/python/mxnet/util.py index b35d3f38aa75..05a2bdad3b77 100644 --- a/python/mxnet/util.py +++ b/python/mxnet/util.py @@ -21,7 +21,7 @@ import inspect import threading -from .base import _LIB, check_call +from .base import _LIB, check_call, c_str, py_str _np_ufunc_default_kwargs = { @@ -913,6 +913,7 @@ def get_cuda_compute_capability(ctx): .format(ret, error_str.value.decode())) return cc_major.value * 10 + cc_minor.value + def default_array(source_array, ctx=None, dtype=None): """Creates an array from any object exposing the default(nd or np) array interface. @@ -1144,3 +1145,35 @@ def set_np_default_dtype(is_np_default_dtype=True): # pylint: disable=redefined prev = ctypes.c_bool() check_call(_LIB.MXSetIsNumpyDefaultDtype(ctypes.c_bool(is_np_default_dtype), ctypes.byref(prev))) return prev.value + + +def getenv(name): + """Get the setting of an environment variable from the C Runtime. + + Parameters + ---------- + name : string type + The environment variable name + + Returns + ------- + value : string + The value of the environment variable, or None if not set + """ + ret = ctypes.c_char_p() + check_call(_LIB.MXGetEnv(c_str(name), ctypes.byref(ret))) + return None if ret.value is None else py_str(ret.value) + + +def setenv(name, value): + """Set an environment variable in the C Runtime. + + Parameters + ---------- + name : string type + The environment variable name + value : string type + The desired value to set the environment value to + """ + passed_value = None if value is None else c_str(value) + check_call(_LIB.MXSetEnv(c_str(name), passed_value)) diff --git a/src/c_api/c_api_test.cc b/src/c_api/c_api_test.cc index de4fb7dca18e..e84b0c0b1395 100644 --- a/src/c_api/c_api_test.cc +++ b/src/c_api/c_api_test.cc @@ -106,3 +106,25 @@ int MXRemoveSubgraphPropertyOpNamesV2(const char* prop_name) { } API_END(); } + +int MXGetEnv(const char* name, + const char** value) { + API_BEGIN(); + *value = getenv(name); + API_END(); +} + +int MXSetEnv(const char* name, + const char* value) { + API_BEGIN(); +#ifdef _WIN32 + auto value_arg = (value == nullptr) ? "" : value; + _putenv_s(name, value_arg); +#else + if (value == nullptr) + unsetenv(name); + else + setenv(name, value, 1); +#endif + API_END(); +} diff --git a/tests/python/gpu/test_device.py b/tests/python/gpu/test_device.py index 52e09c029b49..76a32def33f5 100644 --- a/tests/python/gpu/test_device.py +++ b/tests/python/gpu/test_device.py @@ -20,8 +20,7 @@ import pytest import os import logging - -from mxnet.test_utils import EnvManager +from mxnet.test_utils import environment shapes = [(10), (100), (1000), (10000), (100000), (2,2), (2,3,4,5,6,7,8)] keys = [1,2,3,4,5,6,7] @@ -51,16 +50,15 @@ def check_dense_pushpull(kv_type): for x in range(n_gpus): assert(np.sum(np.abs((res[x]-n_gpus).asnumpy()))==0) - kvstore_tree_array_bound = 'MXNET_KVSTORE_TREE_ARRAY_BOUND' - kvstore_usetree_values = ['','1'] - kvstore_usetree = 'MXNET_KVSTORE_USETREE' - for _ in range(2): + kvstore_tree_array_bound_values = [None, '1'] + kvstore_usetree_values = [None, '1'] + for y in kvstore_tree_array_bound_values: for x in kvstore_usetree_values: - with EnvManager(kvstore_usetree, x): + with environment({'MXNET_KVSTORE_USETREE': x, + 'MXNET_KVSTORE_TREE_ARRAY_BOUND': y}): check_dense_pushpull('local') check_dense_pushpull('device') - os.environ[kvstore_tree_array_bound] = '1' - del os.environ[kvstore_tree_array_bound] + if __name__ == '__main__': test_device_pushpull() diff --git a/tests/python/gpu/test_fusion.py b/tests/python/gpu/test_fusion.py index 8d3ce47c18e8..1f261adcebac 100644 --- a/tests/python/gpu/test_fusion.py +++ b/tests/python/gpu/test_fusion.py @@ -15,8 +15,10 @@ # specific language governing permissions and limitations # under the License. +import sys import os import random +import itertools import mxnet as mx import numpy as np from mxnet import autograd, gluon @@ -24,7 +26,7 @@ curr_path = os.path.dirname(os.path.abspath(os.path.expanduser(__file__))) sys.path.insert(0, os.path.join(curr_path, '../unittest')) -from common import with_seed +from common import setup_module, teardown_module, with_seed def check_fused_symbol(sym, **kwargs): inputs = sym.list_inputs() @@ -44,10 +46,10 @@ def check_fused_symbol(sym, **kwargs): data = {inp : kwargs[inp].astype(dtype) for inp in inputs} for grad_req in ['write', 'add']: type_dict = {inp : dtype for inp in inputs} - os.environ["MXNET_USE_FUSION"] = "0" - orig_exec = test_sym._simple_bind(ctx=ctx, grad_req=grad_req, type_dict=type_dict, **shapes) - os.environ["MXNET_USE_FUSION"] = "1" - fused_exec = test_sym._simple_bind(ctx=ctx, grad_req=grad_req, type_dict=type_dict, **shapes) + with environment('MXNET_USE_FUSION', '0'): + orig_exec = test_sym._simple_bind(ctx=ctx, grad_req=grad_req, type_dict=type_dict, **shapes) + with environment('MXNET_USE_FUSION', '1'): + fused_exec = test_sym._simple_bind(ctx=ctx, grad_req=grad_req, type_dict=type_dict, **shapes) fwd_orig = orig_exec.forward(is_train=True, **data) out_grads = [mx.nd.ones_like(arr) for arr in fwd_orig] orig_exec.backward(out_grads=out_grads) @@ -231,6 +233,7 @@ def check_other_ops(): arr2 = mx.random.uniform(shape=(2,2,2,3)) check_fused_symbol(mx.sym.broadcast_like(a, b, lhs_axes=[0], rhs_axes=[0]), a=arr1, b=arr2) + def check_leakyrelu_ops(): a = mx.sym.Variable('a') b = mx.sym.Variable('b') @@ -331,18 +334,18 @@ def hybrid_forward(self, F, x, y, z): arrays = {} for use_fusion in ('0', '1'): - os.environ['MXNET_USE_FUSION'] = use_fusion - arrays[use_fusion] = {} - n = Block() - n.hybridize(static_alloc=static_alloc) - args = [arg.copyto(mx.gpu()) for arg in arg_data] - for arg in args: - arg.attach_grad() - with autograd.record(): - r = n(*args) - arrays[use_fusion]['result'] = r - r.backward() - for i, arg in enumerate(args): - arrays[use_fusion][i] = arg.grad + with environment('MXNET_USE_FUSION', use_fusion): + arrays[use_fusion] = {} + n = Block() + n.hybridize(static_alloc=static_alloc) + args = [arg.copyto(mx.gpu()) for arg in arg_data] + for arg in args: + arg.attach_grad() + with autograd.record(): + r = n(*args) + arrays[use_fusion]['result'] = r + r.backward() + for i, arg in enumerate(args): + arrays[use_fusion][i] = arg.grad for key in ['result'] + list(range(len(arg_data))): assert_allclose(arrays['0'][key].asnumpy(), arrays['1'][key].asnumpy()) diff --git a/tests/python/gpu/test_gluon_gpu.py b/tests/python/gpu/test_gluon_gpu.py index e259b74b9fad..278ea02fce98 100644 --- a/tests/python/gpu/test_gluon_gpu.py +++ b/tests/python/gpu/test_gluon_gpu.py @@ -21,7 +21,7 @@ import time import mxnet as mx import multiprocessing as mp -from mxnet.test_utils import check_consistency, set_default_context, assert_almost_equal, rand_ndarray +from mxnet.test_utils import check_consistency, set_default_context, assert_almost_equal, rand_ndarray, environment import mxnet.ndarray as nd import numpy as np import math @@ -558,9 +558,9 @@ def _test_bulking(test_bulking_func): time_per_iteration = mp.Manager().Value('d', 0.0) if not run_in_spawned_process(test_bulking_func, - {'MXNET_EXEC_BULK_EXEC_MAX_NODE_TRAIN_FWD': seg_sizes[0], - 'MXNET_EXEC_BULK_EXEC_MAX_NODE_TRAIN_BWD': seg_sizes[1], - 'MXNET_EXEC_BULK_EXEC_TRAIN': seg_sizes[2]}, + {'MXNET_EXEC_BULK_EXEC_MAX_NODE_TRAIN_FWD': str(seg_sizes[0]), + 'MXNET_EXEC_BULK_EXEC_MAX_NODE_TRAIN_BWD': str(seg_sizes[1]), + 'MXNET_EXEC_BULK_EXEC_TRAIN': str(seg_sizes[2])}, time_per_iteration): # skip test since the python version can't run it properly. Warning msg was logged. return @@ -634,13 +634,15 @@ def test_gemms_true_fp16(): net.cast('float16') net.initialize(ctx=ctx) net.weight.set_data(weights) - ref_results = net(input) - os.environ["MXNET_FC_TRUE_FP16"] = "1" - results_trueFP16 = net(input) + with environment('MXNET_FC_TRUE_FP16', '0'): + ref_results = net(input) + + with environment('MXNET_FC_TRUE_FP16', '1'): + results_trueFP16 = net(input) + atol = 1e-2 rtol = 1e-2 assert_almost_equal(ref_results.asnumpy(), results_trueFP16.asnumpy(), atol=atol, rtol=rtol) - os.environ["MXNET_FC_TRUE_FP16"] = "0" diff --git a/tests/python/gpu/test_kvstore_gpu.py b/tests/python/gpu/test_kvstore_gpu.py index 5167970bb8f8..d836e970181d 100644 --- a/tests/python/gpu/test_kvstore_gpu.py +++ b/tests/python/gpu/test_kvstore_gpu.py @@ -21,7 +21,7 @@ import mxnet as mx import numpy as np import pytest -from mxnet.test_utils import assert_almost_equal, default_context, EnvManager +from mxnet.test_utils import assert_almost_equal, default_context, environment curr_path = os.path.dirname(os.path.abspath(os.path.expanduser(__file__))) sys.path.insert(0, os.path.join(curr_path, '../unittest')) from common import setup_module, with_seed, teardown_module @@ -99,11 +99,11 @@ def check_rsp_pull(kv, ctxs, sparse_pull, is_same_rowid=False, use_slice=False): check_rsp_pull(kv, [mx.gpu(i//2) for i in range(4)], sparse_pull, use_slice=True) check_rsp_pull(kv, [mx.cpu(i) for i in range(4)], sparse_pull, use_slice=True) - envs = ["","1"] - key = "MXNET_KVSTORE_USETREE" + envs = [None, '1'] + key = 'MXNET_KVSTORE_USETREE' for val in envs: - with EnvManager(key, val): - if val is "1": + with environment(key, val): + if val is '1': sparse_pull = False else: sparse_pull = True diff --git a/tests/python/gpu/test_operator_gpu.py b/tests/python/gpu/test_operator_gpu.py index d088b44f85b7..84cfe9cfa35d 100644 --- a/tests/python/gpu/test_operator_gpu.py +++ b/tests/python/gpu/test_operator_gpu.py @@ -26,7 +26,7 @@ import itertools from mxnet.test_utils import check_consistency, set_default_context, assert_almost_equal, assert_allclose from mxnet.test_utils import check_symbolic_forward, check_symbolic_backward, discard_stderr -from mxnet.test_utils import default_context, rand_shape_2d, rand_ndarray, same +from mxnet.test_utils import default_context, rand_shape_2d, rand_ndarray, same, environment from mxnet.base import MXNetError from mxnet import autograd @@ -654,12 +654,12 @@ def _conv_with_num_streams(seed): @pytest.mark.skip(reason="skipping for now due to severe flakiness") @with_seed() def test_convolution_multiple_streams(): - for num_streams in [1, 2]: + for num_streams in ['1', '2']: for engine in ['NaiveEngine', 'ThreadedEngine', 'ThreadedEnginePerDevice']: - print("Starting engine %s with %d streams." % (engine, num_streams), file=sys.stderr) + print('Starting engine {} with {} streams.'.format(engine, num_streams), file=sys.stderr) run_in_spawned_process(_conv_with_num_streams, {'MXNET_GPU_WORKER_NSTREAMS' : num_streams, 'MXNET_ENGINE_TYPE' : engine}) - print("Finished engine %s with %d streams." % (engine, num_streams), file=sys.stderr) + print('Finished engine {} with {} streams.'.format(engine, num_streams), file=sys.stderr) # This test is designed to expose an issue with cudnn v7.1.4 algo find() when invoked with large c. @@ -2009,22 +2009,22 @@ def check_proposal_consistency(op, batch_size, with_nms=False): # The following 2 functions launch 0-thread kernels, an error that should be caught and signaled. def kernel_error_check_imperative(): - os.environ['MXNET_ENGINE_TYPE'] = 'NaiveEngine' - with mx.np_shape(active=True): - a = mx.nd.array([1,2,3],ctx=mx.gpu(0)) - b = mx.nd.array([],ctx=mx.gpu(0)) - c = (a / b).asnumpy() + with environment('MXNET_ENGINE_TYPE', 'NaiveEngine'): + with mx.np_shape(active=True): + a = mx.nd.array([1,2,3],ctx=mx.gpu(0)) + b = mx.nd.array([],ctx=mx.gpu(0)) + c = (a / b).asnumpy() def kernel_error_check_symbolic(): - os.environ['MXNET_ENGINE_TYPE'] = 'NaiveEngine' - with mx.np_shape(active=True): - a = mx.sym.Variable('a') - b = mx.sym.Variable('b') - c = a / b - f = c._bind(mx.gpu(0), { 'a':mx.nd.array([1,2,3],ctx=mx.gpu(0)), - 'b':mx.nd.array([],ctx=mx.gpu(0))}) - f.forward() - g = f.outputs[0].asnumpy() + with environment('MXNET_ENGINE_TYPE', 'NaiveEngine'): + with mx.np_shape(active=True): + a = mx.sym.Variable('a') + b = mx.sym.Variable('b') + c = a / b + f = c.bind(mx.gpu(0), {'a':mx.nd.array([1,2,3],ctx=mx.gpu(0)), + 'b':mx.nd.array([],ctx=mx.gpu(0))}) + f.forward() + g = f.outputs[0].asnumpy() @pytest.mark.serial def test_kernel_error_checking(): @@ -2223,9 +2223,9 @@ def test_bulking(): # Create shared variable to return measured time from test process time_per_iteration = mp.Manager().Value('d', 0.0) if not run_in_spawned_process(_test_bulking_in_process, - {'MXNET_EXEC_BULK_EXEC_MAX_NODE_TRAIN_FWD' : seg_sizes[0], - 'MXNET_EXEC_BULK_EXEC_MAX_NODE_TRAIN_BWD' : seg_sizes[1], - 'MXNET_EXEC_BULK_EXEC_TRAIN' : seg_sizes[2]}, + {'MXNET_EXEC_BULK_EXEC_MAX_NODE_TRAIN_FWD' : str(seg_sizes[0]), + 'MXNET_EXEC_BULK_EXEC_MAX_NODE_TRAIN_BWD' : str(seg_sizes[1]), + 'MXNET_EXEC_BULK_EXEC_TRAIN' : str(seg_sizes[2])}, time_per_iteration): # skip test since the python version can't run it properly. Warning msg was logged. return diff --git a/tests/python/unittest/common.py b/tests/python/unittest/common.py index 331f32d789b7..2f30096c10b4 100644 --- a/tests/python/unittest/common.py +++ b/tests/python/unittest/common.py @@ -23,6 +23,7 @@ import random import shutil from mxnet.base import MXNetError +from mxnet.test_utils import environment curr_path = os.path.dirname(os.path.abspath(os.path.expanduser(__file__))) sys.path.append(os.path.join(curr_path, '../common/')) sys.path.insert(0, os.path.join(curr_path, '../../../python')) @@ -216,15 +217,17 @@ def test_new(*args, **kwargs): logger = default_logger() # 'pytest --logging-level=DEBUG' shows this msg even with an ensuing core dump. test_count_msg = '{} of {}: '.format(i+1,test_count) if test_count > 1 else '' - test_msg = ('{}Setting test np/mx/python random seeds, use MXNET_TEST_SEED={}' - ' to reproduce.').format(test_count_msg, this_test_seed) - logger.log(log_level, test_msg) + pre_test_msg = ('{}Setting test np/mx/python random seeds, use MXNET_TEST_SEED={}' + ' to reproduce.').format(test_count_msg, this_test_seed) + on_err_test_msg = ('{}Error seen with seeded test, use MXNET_TEST_SEED={}' + ' to reproduce.').format(test_count_msg, this_test_seed) + logger.log(log_level, pre_test_msg) try: orig_test(*args, **kwargs) except: # With exceptions, repeat test_msg at WARNING level to be sure it's seen. if log_level < logging.WARNING: - logger.warning(test_msg) + logger.warning(on_err_test_msg) raise finally: # Provide test-isolation for any test having this decorator @@ -307,6 +310,22 @@ def teardown_module(): mx.nd.waitall() +def with_environment(*args_): + """ + Helper function that takes a dictionary of environment variables and their + desired settings and changes the environment in advance of running the + decorated code. The original environment state is reinstated afterwards, + even if exceptions are raised. + """ + def test_helper(orig_test): + @functools.wraps(orig_test) + def test_new(*args, **kwargs): + with environment(*args_): + orig_test(*args, **kwargs) + return test_new + return test_helper + + def run_in_spawned_process(func, env, *args): """ Helper function to run a test in its own process. @@ -337,18 +356,12 @@ def run_in_spawned_process(func, env, *args): return False else: seed = np.random.randint(0,1024*1024*1024) - orig_environ = os.environ.copy() - try: - for (key, value) in env.items(): - os.environ[key] = str(value) + with environment(env): # Prepend seed as first arg p = mpctx.Process(target=func, args=(seed,)+args) p.start() p.join() assert p.exitcode == 0, "Non-zero exit code %d from %s()." % (p.exitcode, func.__name__) - finally: - os.environ.clear() - os.environ.update(orig_environ) return True diff --git a/tests/python/unittest/test_autograd.py b/tests/python/unittest/test_autograd.py index ad0601cdbb0f..6a75eed7d0bb 100644 --- a/tests/python/unittest/test_autograd.py +++ b/tests/python/unittest/test_autograd.py @@ -20,8 +20,9 @@ from mxnet.ndarray import zeros_like from mxnet.autograd import * from mxnet.test_utils import * + from common import setup_module, with_seed, teardown_module, xfail_when_nonstandard_decimal_separator -from mxnet.test_utils import EnvManager +from mxnet.test_utils import environment import pytest @@ -124,7 +125,7 @@ def check_unary_func(x): autograd_assert(x, func=f_square, grad_func=f_square_grad) uniform = nd.uniform(shape=(4, 5)) stypes = ['default', 'row_sparse', 'csr'] - with EnvManager('MXNET_STORAGE_FALLBACK_LOG_VERBOSE', '0'): + with environment('MXNET_STORAGE_FALLBACK_LOG_VERBOSE', '0'): for stype in stypes: check_unary_func(uniform.tostype(stype)) @@ -143,7 +144,7 @@ def check_binary_func(x, y): uniform_x = nd.uniform(shape=(4, 5)) uniform_y = nd.uniform(shape=(4, 5)) stypes = ['default', 'row_sparse', 'csr'] - with EnvManager('MXNET_STORAGE_FALLBACK_LOG_VERBOSE', '0'): + with environment('MXNET_STORAGE_FALLBACK_LOG_VERBOSE', '0'): for stype_x in stypes: for stype_y in stypes: x = uniform_x.tostype(stype_x) diff --git a/tests/python/unittest/test_base.py b/tests/python/unittest/test_base.py index 07d429589ba2..74d3f17a645e 100644 --- a/tests/python/unittest/test_base.py +++ b/tests/python/unittest/test_base.py @@ -16,33 +16,92 @@ # under the License. import mxnet as mx +from numpy.testing import assert_equal from mxnet.base import data_dir +from mxnet.test_utils import environment +from mxnet.util import getenv +from common import setup_module, teardown_module, with_environment import os -import unittest import logging import os.path as op import platform -class MXNetDataDirTest(unittest.TestCase): - def setUp(self): - self.mxnet_data_dir = os.environ.get('MXNET_HOME') - if 'MXNET_HOME' in os.environ: - del os.environ['MXNET_HOME'] +def test_environment(): + name1 = 'MXNET_TEST_ENV_VAR_1' + name2 = 'MXNET_TEST_ENV_VAR_2' - def tearDown(self): - if self.mxnet_data_dir: - os.environ['MXNET_HOME'] = self.mxnet_data_dir - else: - if 'MXNET_HOME' in os.environ: - del os.environ['MXNET_HOME'] - - def test_data_dir(self,): - prev_data_dir = data_dir() - system = platform.system() - if system != 'Windows': - self.assertEqual(data_dir(), op.join(op.expanduser('~'), '.mxnet')) - os.environ['MXNET_HOME'] = '/tmp/mxnet_data' - self.assertEqual(data_dir(), '/tmp/mxnet_data') - del os.environ['MXNET_HOME'] - self.assertEqual(data_dir(), prev_data_dir) + # Test that a variable can be set in the python and backend environment + with environment(name1, '42'): + assert_equal(os.environ.get(name1), '42') + assert_equal(getenv(name1), '42') + + # Test dict form of invocation + env_var_dict = {name1: '1', name2: '2'} + with environment(env_var_dict): + for key, value in env_var_dict.items(): + assert_equal(os.environ.get(key), value) + assert_equal(getenv(key), value) + + # Further testing in 'test_with_environment()' + +@with_environment({'MXNET_TEST_ENV_VAR_1': '10', 'MXNET_TEST_ENV_VAR_2': None}) +def test_with_environment(): + name1 = 'MXNET_TEST_ENV_VAR_1' + name2 = 'MXNET_TEST_ENV_VAR_2' + def check_background_values(): + assert_equal(os.environ.get(name1), '10') + assert_equal(getenv(name1), '10') + assert_equal(os.environ.get(name2), None) + assert_equal(getenv(name2), None) + + check_background_values() + + # This completes the testing of with_environment(), but since we have + # an environment with a couple of known settings, lets use it to test if + # 'with environment()' properly restores to these settings in all cases. + class OnPurposeError(Exception): + """A class for exceptions thrown by this test""" + pass + + # Enter an environment with one variable set and check it appears + # to both python and the backend. Then, outside the 'with' block, + # make sure the background environment is seen, regardless of whether + # the 'with' block raised an exception. + def test_one_var(name, value, raise_exception=False): + try: + with environment(name, value): + assert_equal(os.environ.get(name), value) + assert_equal(getenv(name), value) + if raise_exception: + raise OnPurposeError + except OnPurposeError: + pass + finally: + check_background_values() + + # Test various combinations of set and unset env vars. + # Test that the background setting is restored in the presense of exceptions. + for raise_exception in [False, True]: + # name1 is initially set in the environment + test_one_var(name1, '42', raise_exception) + test_one_var(name1, None, raise_exception) + # name2 is initially not set in the environment + test_one_var(name2, '42', raise_exception) + test_one_var(name2, None, raise_exception) + + +def test_data_dir(): + prev_data_dir = data_dir() + system = platform.system() + # Test that data_dir() returns the proper default value when MXNET_HOME is not set + with environment('MXNET_HOME', None): + if system == 'Windows': + assert_equal(data_dir(), op.join(os.environ.get('APPDATA'), 'mxnet')) + else: + assert_equal(data_dir(), op.join(op.expanduser('~'), '.mxnet')) + # Test that data_dir() responds to an explicit setting of MXNET_HOME + with environment('MXNET_HOME', '/tmp/mxnet_data'): + assert_equal(data_dir(), '/tmp/mxnet_data') + # Test that this test has not disturbed the MXNET_HOME value existing before the test + assert_equal(data_dir(), prev_data_dir) diff --git a/tests/python/unittest/test_engine.py b/tests/python/unittest/test_engine.py index 538e4b57ead8..642d9e1f169e 100644 --- a/tests/python/unittest/test_engine.py +++ b/tests/python/unittest/test_engine.py @@ -17,7 +17,7 @@ import mxnet as mx import os -from mxnet.test_utils import EnvManager +from mxnet.test_utils import environment import pytest def test_bulk(): @@ -41,7 +41,7 @@ def test_engine_openmp_after_fork(): With GOMP the child always has the same number when calling omp_get_max_threads, with LLVM OMP the child respects the number of max threads set in the parent. """ - with EnvManager('OMP_NUM_THREADS', '42'): + with environment('OMP_NUM_THREADS', '42'): r, w = os.pipe() pid = os.fork() if pid: diff --git a/tests/python/unittest/test_engine_import.py b/tests/python/unittest/test_engine_import.py index 7675cf836999..322528c11aed 100644 --- a/tests/python/unittest/test_engine_import.py +++ b/tests/python/unittest/test_engine_import.py @@ -16,6 +16,8 @@ # under the License. import os +from mxnet.test_utils import environment +import pytest try: reload # Python 2 @@ -23,15 +25,13 @@ from importlib import reload +@pytest.mark.skip(reason='test needs improving, current use of reload(mxnet) is ineffective') def test_engine_import(): import mxnet - - engine_types = ['', 'NaiveEngine', 'ThreadedEngine', 'ThreadedEnginePerDevice'] + # Temporarily add an illegal entry (that is not caught) to show how the test needs improving + engine_types = [None, 'NaiveEngine', 'ThreadedEngine', 'ThreadedEnginePerDevice', 'BogusEngine'] for type in engine_types: - if type: - os.environ['MXNET_ENGINE_TYPE'] = type - else: - os.environ.pop('MXNET_ENGINE_TYPE', None) - reload(mxnet) + with environment('MXNET_ENGINE_TYPE', type): + reload(mxnet) diff --git a/tests/python/unittest/test_executor.py b/tests/python/unittest/test_executor.py index 0e142bf5b05a..27a9e030c171 100644 --- a/tests/python/unittest/test_executor.py +++ b/tests/python/unittest/test_executor.py @@ -18,7 +18,7 @@ import numpy as np import mxnet as mx from common import setup_module, with_seed, teardown_module -from mxnet.test_utils import assert_almost_equal +from mxnet.test_utils import assert_almost_equal, environment def check_bind_with_uniform(uf, gf, dim, sf=None, lshape=None, rshape=None): @@ -74,42 +74,34 @@ def check_bind_with_uniform(uf, gf, dim, sf=None, lshape=None, rshape=None): @with_seed() def test_bind(): - def check_bind(disable_bulk_exec): - if disable_bulk_exec: - prev_bulk_inf_val = mx.test_utils.set_env_var("MXNET_EXEC_BULK_EXEC_INFERENCE", "0", "1") - prev_bulk_train_val = mx.test_utils.set_env_var("MXNET_EXEC_BULK_EXEC_TRAIN", "0", "1") - - nrepeat = 10 - maxdim = 4 - for repeat in range(nrepeat): - for dim in range(1, maxdim): - check_bind_with_uniform(lambda x, y: x + y, - lambda g, x, y: (g, g), - dim) - check_bind_with_uniform(lambda x, y: x - y, - lambda g, x, y: (g, -g), - dim) - check_bind_with_uniform(lambda x, y: x * y, - lambda g, x, y: (y * g, x * g), - dim) - check_bind_with_uniform(lambda x, y: x / y, - lambda g, x, y: (g / y, -x * g/ (y**2)), - dim) - - check_bind_with_uniform(lambda x, y: np.maximum(x, y), - lambda g, x, y: (g * (x>=y), g * (y>x)), - dim, - sf=mx.symbol.maximum) - check_bind_with_uniform(lambda x, y: np.minimum(x, y), - lambda g, x, y: (g * (x<=y), g * (y=y), g * (y>x)), + dim, + sf=mx.symbol.maximum) + check_bind_with_uniform(lambda x, y: np.minimum(x, y), + lambda g, x, y: (g * (x<=y), g * (y Date: Thu, 23 Jul 2020 11:33:31 -0700 Subject: [PATCH 15/46] set website default version to current stable (1.6) version (#18738) * set website default version - test redirect * enable first time redirect on all master website pages * update test code * remove unnecessary test code * fix typo * delete test code --- docs/static_site/src/.htaccess | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/static_site/src/.htaccess b/docs/static_site/src/.htaccess index 2cf7300946be..dabc51a41f2b 100644 --- a/docs/static_site/src/.htaccess +++ b/docs/static_site/src/.htaccess @@ -22,6 +22,12 @@ RewriteOptions AllowNoSlash +# Set default website version to current stable (v1.6) +RewriteCond %{REQUEST_URI} !^/versions/ +RewriteCond %{HTTP_REFERER} !mxnet.apache.org +RewriteCond %{HTTP_REFERER} !mxnet.incubator.apache.org +RewriteRule ^(.*)$ /versions/1.6/$1 [r=307,L] + # TODO temporary fix for issue #18604 Redirect 302 /api/r/docs/api/R-package/build/mxnet-r-reference-manual.pdf https://mxnet-public.s3.us-east-2.amazonaws.com/docs/v1.x/mxnet-r-reference-manual.pdf Redirect 302 /api/scala/docs/api/ /versions/1.6/api/scala/docs/api/ From 06b5d227bb5a8b35246f46b151cfda0d57e5cef8 Mon Sep 17 00:00:00 2001 From: Serge Panev Date: Fri, 24 Jul 2020 14:22:42 -0700 Subject: [PATCH 16/46] ONNX import: use Conv pad attribute for symmetrical padding (#18675) Signed-off-by: Serge Panev --- .../contrib/onnx/onnx2mx/_op_translations.py | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/python/mxnet/contrib/onnx/onnx2mx/_op_translations.py b/python/mxnet/contrib/onnx/onnx2mx/_op_translations.py index 60ca44df387f..1bf60a02160b 100644 --- a/python/mxnet/contrib/onnx/onnx2mx/_op_translations.py +++ b/python/mxnet/contrib/onnx/onnx2mx/_op_translations.py @@ -289,14 +289,25 @@ def conv(attrs, inputs, proto_obj): no_bias = new_attrs['no_bias'] if 'no_bias' in new_attrs else 0 bias = None if no_bias is True else inputs[2] - # Unlike ONNX, MXNet's convolution operator does not support asymmetric padding, so we first - # use 'Pad' operator, which supports asymmetric padding. Then use the convolution operator. - pad_width = (0, 0, 0, 0) + translation_utils._pad_sequence_fix(padding, kernel_dim=len(kernel)) - pad_op = symbol.pad(inputs[0], mode='constant', pad_width=pad_width) - - conv_op = symbol.Convolution(pad_op, inputs[1], bias, - kernel=kernel, stride=stride, dilate=dilations, - num_filter=num_filter, num_group=num_group, no_bias=no_bias) + mxnet_pad = translation_utils._pad_sequence_fix(padding, kernel_dim=len(kernel)) + + left_pads = mxnet_pad[0::2] + right_pads = mxnet_pad[1::2] + is_pad_sym = left_pads == right_pads + + if not is_pad_sym: + # Unlike ONNX, MXNet's convolution operator does not support asymmetric padding, so we first + # use 'Pad' operator, which supports asymmetric padding. Then use the convolution operator. + pad_width = (0, 0, 0, 0) + mxnet_pad + pad_op = symbol.pad(inputs[0], mode='constant', pad_width=pad_width) + conv_op = symbol.Convolution(pad_op, inputs[1], bias, + kernel=kernel, stride=stride, dilate=dilations, + num_filter=num_filter, num_group=num_group, no_bias=no_bias) + else: + pad_width = left_pads + conv_op = symbol.Convolution(inputs[0], inputs[1], bias, + kernel=kernel, stride=stride, dilate=dilations, pad=pad_width, + num_filter=num_filter, num_group=num_group, no_bias=no_bias) return conv_op, new_attrs, inputs From 2fbd1827ad83ef17f74c5412bcc09e30bdc146db Mon Sep 17 00:00:00 2001 From: Leonard Lausen Date: Sat, 25 Jul 2020 02:48:30 +0000 Subject: [PATCH 17/46] Split up CI sanity test functions to enable fine-grained trigger (#18786) Developers can now trigger fine grained checks: python ci/build.py -R --platform ubuntu_cpu /work/runtime_functions.sh sanity_python python ci/build.py -R --platform ubuntu_cpu /work/runtime_functions.sh sanity_license etc --- ci/docker/runtime_functions.sh | 67 ++++++++-------------------------- 1 file changed, 15 insertions(+), 52 deletions(-) diff --git a/ci/docker/runtime_functions.sh b/ci/docker/runtime_functions.sh index 3701597fe974..8752856177ea 100755 --- a/ci/docker/runtime_functions.sh +++ b/ci/docker/runtime_functions.sh @@ -58,58 +58,6 @@ EOF fi } -build_ccache_wrappers() { - set -ex - - if [ -z ${CC+x} ]; then - echo "No \$CC set, defaulting to gcc"; - export CC=gcc - fi - if [ -z ${CXX+x} ]; then - echo "No \$CXX set, defaulting to g++"; - export CXX=g++ - fi - - # Recommended by CCache: https://ccache.samba.org/manual.html#_run_modes - # Add to the beginning of path to ensure this redirection is picked up instead - # of the original ones. Especially CUDA/NVCC appends itself to the beginning of the - # path and thus this redirect is ignored. This change fixes this problem - # This hacky approach with symbolic links is required because underlying build - # systems of our submodules ignore our CMake settings. If they use Makefile, - # we can't influence them at all in general and NVCC also prefers to hardcode their - # compiler instead of respecting the settings. Thus, we take this brutal approach - # and just redirect everything of this installer has been called. - # In future, we could do these links during image build time of the container. - # But in the beginning, we'll make this opt-in. In future, loads of processes like - # the scala make step or numpy compilation and other pip package generations - # could be heavily sped up by using ccache as well. - mkdir -p /tmp/ccache-redirects - export PATH=/tmp/ccache-redirects:$PATH - CCACHE=`which ccache` - ln -sf $CCACHE /tmp/ccache-redirects/gcc - ln -sf $CCACHE /tmp/ccache-redirects/gcc-8 - ln -sf $CCACHE /tmp/ccache-redirects/g++ - ln -sf $CCACHE /tmp/ccache-redirects/g++-8 - ln -sf $CCACHE /tmp/ccache-redirects/clang++-3.9 - ln -sf $CCACHE /tmp/ccache-redirects/clang-3.9 - ln -sf $CCACHE /tmp/ccache-redirects/clang++-5.0 - ln -sf $CCACHE /tmp/ccache-redirects/clang-5.0 - ln -sf $CCACHE /tmp/ccache-redirects/clang++-6.0 - ln -sf $CCACHE /tmp/ccache-redirects/clang-6.0 - ln -sf $CCACHE /tmp/ccache-redirects/clang++-10 - ln -sf $CCACHE /tmp/ccache-redirects/clang-10 - #Doesn't work: https://github.com/ccache/ccache/issues/373 - # ln -sf $CCACHE /tmp/ccache-redirects/nvcc - # ln -sf $CCACHE /tmp/ccache-redirects/nvcc - # export NVCC="/tmp/ccache-redirects/nvcc" - - # Uncomment if you would like to debug CCache hit rates. - # You can monitor using tail -f ccache-log - #export CCACHE_LOGFILE=/work/mxnet/ccache-log - #export CCACHE_LOGFILE=/tmp/ccache-log - #export CCACHE_DEBUG=1 -} - build_wheel() { set -ex @@ -787,9 +735,24 @@ build_ubuntu_blc() { # Testing sanity_check() { + set -ex + sanity_license + sanity_python + sanity_cpp +} + +sanity_license() { set -ex tools/license_header.py check +} + +sanity_python() { + set -ex 3rdparty/dmlc-core/scripts/lint.py mxnet cpp include src plugin tests --exclude_path src/operator/contrib/ctc_include include/mkldnn +} + +sanity_cpp() { + set -ex python3 -m pylint --rcfile=ci/other/pylintrc --ignore-patterns=".*\.so$$,.*\.dll$$,.*\.dylib$$" python/mxnet OMP_NUM_THREADS=$(expr $(nproc) / 4) pytest -n 4 tests/tutorials/test_sanity_tutorials.py } From c1db2d5636a98084392b90ad3f020a9f9d197852 Mon Sep 17 00:00:00 2001 From: Leonard Lausen Date: Sat, 25 Jul 2020 16:58:45 +0000 Subject: [PATCH 18/46] Remove caffe plugin (#18787) * Remove caffe plugin * Fix * Remove CXX14 feature flag * Update test --- CMakeLists.txt | 42 --- docs/static_site/src/pages/api/faq/caffe.md | 148 --------- include/mxnet/libinfo.h | 6 - plugin/caffe/README.md | 58 ---- plugin/caffe/caffe.mk | 32 -- plugin/caffe/caffe_blob.cc | 94 ------ plugin/caffe/caffe_blob.h | 117 ------- plugin/caffe/caffe_common.cc | 48 --- plugin/caffe/caffe_common.h | 97 ------ plugin/caffe/caffe_data_iter.cc | 273 --------------- plugin/caffe/caffe_fieldentry.h | 113 ------- plugin/caffe/caffe_loss-inl.h | 303 ----------------- plugin/caffe/caffe_loss.cc | 73 ---- plugin/caffe/caffe_loss.cu | 53 --- plugin/caffe/caffe_op-inl.h | 348 -------------------- plugin/caffe/caffe_op.cc | 74 ----- plugin/caffe/caffe_op.cu | 53 --- plugin/caffe/caffe_stream.cc | 37 --- plugin/caffe/caffe_stream.h | 38 --- python/mxnet/gluon/metric.py | 9 - python/mxnet/runtime.py | 3 +- src/libinfo.cc | 3 - tests/jenkins/run_test.sh | 56 ---- tests/jenkins/run_test_amzn_linux_gpu.sh | 65 ---- tests/jenkins/run_test_ubuntu.sh | 65 ---- tests/python/unittest/test_runtime.py | 2 +- 26 files changed, 2 insertions(+), 2208 deletions(-) delete mode 100644 docs/static_site/src/pages/api/faq/caffe.md delete mode 100644 plugin/caffe/README.md delete mode 100644 plugin/caffe/caffe.mk delete mode 100644 plugin/caffe/caffe_blob.cc delete mode 100644 plugin/caffe/caffe_blob.h delete mode 100644 plugin/caffe/caffe_common.cc delete mode 100644 plugin/caffe/caffe_common.h delete mode 100644 plugin/caffe/caffe_data_iter.cc delete mode 100644 plugin/caffe/caffe_fieldentry.h delete mode 100644 plugin/caffe/caffe_loss-inl.h delete mode 100644 plugin/caffe/caffe_loss.cc delete mode 100644 plugin/caffe/caffe_loss.cu delete mode 100644 plugin/caffe/caffe_op-inl.h delete mode 100644 plugin/caffe/caffe_op.cc delete mode 100644 plugin/caffe/caffe_op.cu delete mode 100644 plugin/caffe/caffe_stream.cc delete mode 100644 plugin/caffe/caffe_stream.h delete mode 100755 tests/jenkins/run_test.sh delete mode 100755 tests/jenkins/run_test_amzn_linux_gpu.sh delete mode 100755 tests/jenkins/run_test_ubuntu.sh diff --git a/CMakeLists.txt b/CMakeLists.txt index 688dd42c54fe..d3e6c7440e16 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -74,7 +74,6 @@ option(USE_JEMALLOC "Build with Jemalloc support" OFF) option(USE_LIBJPEG_TURBO "Use libjpeg-turbo" OFF) option(USE_DIST_KVSTORE "Build with DIST_KVSTORE support" OFF) option(USE_PLUGINS_WARPCTC "Use WARPCTC Plugins" OFF) -option(USE_PLUGIN_CAFFE "Use Caffe Plugin" OFF) option(USE_CPP_PACKAGE "Build C++ Package" OFF) option(USE_MXNET_LIB_NAMING "Use MXNet library naming conventions." ON) option(USE_GPROF "Compile with gprof (profiling) flag" OFF) @@ -521,39 +520,6 @@ if(USE_OPERATOR_TUNING AND USE_OPENMP) add_definitions(-DMXNET_USE_OPERATOR_TUNING=1) endif() -if(USE_PLUGIN_CAFFE) - if(NOT USE_CUDA) - set(CPU_ONLY ON) - add_definitions(-DCPU_ONLY=1) - endif() - if(NOT DEFINED CAFFE_PATH) - if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/caffe) - set(CAFFE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/caffe) - else() - set(CAFFE_PATH $ENV{CAFFE_PATH}) - endif() - endif() - list(APPEND CMAKE_MODULE_PATH ${CAFFE_PATH}/cmake) - include_directories(${CAFFE_PATH}/include) - include_directories(${CAFFE_PATH}/build/src) - include_directories(${CMAKE_BINARY_DIR}/caffe/include) - link_directories(${CAFFE_PATH}/build/lib) - if(NOT DEFINED CAFFE_PATH) - message(FATAL_ERROR "Please set CAFFE_PATH to point to the caffe source installation") - endif() - FILE(GLOB_RECURSE PLUGINS_SOURCE "plugin/caffe/*.cc" "plugin/caffe/*.h") - FILE(GLOB_RECURSE PLUGINS_CUSRC "plugin/caffe/*.cu") - list(APPEND SOURCE ${PLUGINS_SOURCE}) - list(APPEND CUDA ${PLUGINS_CUSRC}) - include_directories(${CMAKE_BINARY_DIR}/include) - add_definitions(-DMXNET_USE_CAFFE=1) - list(APPEND mxnet_LINKER_LIBS - protobuf boost_system boost_thread boost_filesystem - gflags glog caffe - ${Caffe_LINKER_LIBS} -) -endif() - if (NOT (EXTRA_OPERATORS STREQUAL "")) mxnet_source_group("Extra" GLOB_RECURSE "${EXTRA_OPERATORS}/*.cc") mxnet_source_group("Extra\\Cuda" GLOB_RECURSE "${EXTRA_OPERATORS}/*.cu") @@ -640,14 +606,6 @@ if(USE_CUDA) link_directories(${CUDAToolkit_LIBRARY_DIR}) endif() -# unsupported: if caffe is a subdirectory of mxnet, load its CMakeLists.txt as well -if(USE_PLUGIN_CAFFE) - if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/caffe) - add_subdirectory(caffe) - endif() -endif() - - if(MSVC) set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /EHsc") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /EHsc /Gy") diff --git a/docs/static_site/src/pages/api/faq/caffe.md b/docs/static_site/src/pages/api/faq/caffe.md deleted file mode 100644 index ba84b8b590be..000000000000 --- a/docs/static_site/src/pages/api/faq/caffe.md +++ /dev/null @@ -1,148 +0,0 @@ ---- -layout: page_category -title: Convert from Caffe to MXNet -category: faq -faq_c: Deployment Environments -question: How to convert a Caffe model to MXNet? -permalink: /api/faq/caffe ---- - - - - - - - - - - - - - - - - -# How to | Convert from Caffe to MXNet - -Key topics covered include the following: - -- [Calling Caffe operators in MXNet](#calling-caffe-operators-in-mxnet) - -## Calling Caffe operators in MXNet - -MXNet supports calling most Caffe operators, -including network layer, data layer, and loss function, directly. It is -particularly useful if there are customized operators implemented in Caffe, then -we do not need to re-implement them in MXNet. - -### How to install - -This feature requires Caffe. In particular, we need to re-compile Caffe before -[PR #4527](https://github.com/BVLC/caffe/pull/4527) is merged into Caffe. There -are the steps of how to rebuild Caffe: - -1. Download [Caffe](https://github.com/BVLC/caffe). E.g. `git clone - https://github.com/BVLC/caffe` -2. Download the - [patch for the MXNet interface](https://github.com/BVLC/caffe/pull/4527.patch) - and apply to Caffe. E.g. - ```bash - cd caffe && wget https://github.com/BVLC/caffe/pull/4527.patch && git apply 4527.patch - ``` -3. Build and install Caffe by following the - [official guide](https://caffe.berkeleyvision.org/installation.html). - -Next we need to compile MXNet with Caffe supports - -1. Copy `make/config.mk` (for Linux) or `make/osx.mk` - (for Mac) into the MXNet root folder as `config.mk` if you have not done it yet -2. Open the copied `config.mk` and uncomment these two lines - ```bash - CAFFE_PATH = $(HOME)/caffe - MXNET_PLUGINS += plugin/caffe/caffe.mk - ``` - Modify `CAFFE_PATH` to your Caffe installation, if necessary. -3. Then build with 8 threads `make clean && make -j8`. - -### How to use - -This Caffe plugin adds three components into MXNet: - -- `sym.CaffeOp` : Caffe neural network layer -- `sym.CaffeLoss` : Caffe loss functions -- `io.CaffeDataIter` : Caffe data layer - -#### Use `sym.CaffeOp` -The following example shows the definition of a 10 classes multi-layer perceptron: - -```Python -data = mx.sym.Variable('data') -fc1 = mx.sym.CaffeOp(data_0=data, num_weight=2, name='fc1', prototxt="layer{type:\"InnerProduct\" inner_product_param{num_output: 128} }") -act1 = mx.sym.CaffeOp(data_0=fc1, prototxt="layer{type:\"TanH\"}") -fc2 = mx.sym.CaffeOp(data_0=act1, num_weight=2, name='fc2', prototxt="layer{type:\"InnerProduct\" inner_product_param{num_output: 64} }") -act2 = mx.sym.CaffeOp(data_0=fc2, prototxt="layer{type:\"TanH\"}") -fc3 = mx.sym.CaffeOp(data_0=act2, num_weight=2, name='fc3', prototxt="layer{type:\"InnerProduct\" inner_product_param{num_output: 10}}") -``` - -Let's break it down. First, `data = mx.sym.Variable('data')` defines a variable -as a placeholder for input. Then, it's fed through Caffe operators with `fc1 = -mx.sym.CaffeOp(...)`. `CaffeOp` accepts several arguments: - -- The inputs to Caffe operators are named as `data_i` for *i=0, ..., num_data-1* -- `num_data` is the number of inputs. In default it is 1, and therefore -skipped in the above example. -- `num_out` is the number of outputs. In default it is 1 and also skipped. -- `num_weight` is the number of weights (`blobs_`). Its default value is 0. We -need to explicitly specify it for a non-zero value. -- `prototxt` is the protobuf configuration string. - -#### Use `sym.CaffeLoss` - -Using Caffe loss is similar. -We can replace the MXNet loss with Caffe loss. -We can replace - -Replacing the last line of the above example with the following two lines we can -call Caffe loss instead of MXNet loss. - -```Python -label = mx.sym.Variable('softmax_label') -mlp = mx.sym.CaffeLoss(data=fc3, label=label, grad_scale=1, name='softmax', prototxt="layer{type:\"SoftmaxWithLoss\"}") -``` - -Similar to `CaffeOp`, `CaffeLoss` has arguments `num_data` (2 in default) and -`num_out` (1 in default). But there are two differences - -1. Inputs are `data` and `label`. And we need to explicitly create a variable - placeholder for label, which is implicitly done in MXNet loss. -2. `grad_scale` is the weight of this loss. - -#### Use `io.CaffeDataIter` - -We can also wrap a Caffe data layer into MXNet's data iterator. Below is an -example for creating a data iterator for MNIST - -```python -train = mx.io.CaffeDataIter( - prototxt = - 'layer { \ - name: "mnist" \ - type: "Data" \ - top: "data" \ - top: "label" \ - include { \ - phase: TEST \ - } \ - transform_param { \ - scale: 0.00390625 \ - } \ - data_param { \ - source: "caffe/examples/mnist/mnist_test_lmdb" \ - batch_size: 100 \ - backend: LMDB \ - } \ - }', - flat = flat, - num_examples = 60000, -) -``` diff --git a/include/mxnet/libinfo.h b/include/mxnet/libinfo.h index ade1c731afcf..dd7790059de1 100644 --- a/include/mxnet/libinfo.h +++ b/include/mxnet/libinfo.h @@ -115,10 +115,6 @@ #define MXNET_USE_F16C MSHADOW_USE_F16C #endif -#ifndef MXNET_USE_CAFFE -#define MXNET_USE_CAFFE 0 -#endif - #ifndef MXNET_USE_DIST_KVSTORE #define MXNET_USE_DIST_KVSTORE 0 #endif @@ -183,9 +179,7 @@ enum : unsigned { OPENCV, // Misc - CAFFE, DIST_KVSTORE, - CXX14, INT64_TENSOR_SIZE, // Signal handler to print stack traces on exceptions diff --git a/plugin/caffe/README.md b/plugin/caffe/README.md deleted file mode 100644 index 7e60f2e83564..000000000000 --- a/plugin/caffe/README.md +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - -# How to use Caffe operator in MXNet - -[Caffe](http://caffe.berkeleyvision.org/) has been a well-known and widely-used deep learning framework. Now MXNet has supported calling most caffe operators(layers) and loss functions directly in its symbolic graph! Using one's own customized caffe layer is also effortless. - -Besides Caffe, MXNet has already embedded Torch modules and its tensor mathematical functions. ([link](https://github.com/dmlc/mxnet/blob/master/docs/faq/torch.md)) - -This blog demonstrates two steps to use Caffe op in MXNet: - -* How to install MXNet with Caffe support. - -* How to embed Caffe op into MXNet's symbolic graph. - -## Install Caffe With MXNet interface -* Download offical Caffe repository [BVLC/Caffe](https://github.com/BVLC/caffe). -* Download [caffe patch for mxnet interface] (https://github.com/BVLC/caffe/pull/4527.patch). Move patch file under your caffe root folder and apply the patch by `git apply patch_file_name`. -* Install caffe following [official guide](http://caffe.berkeleyvision.org/installation.html). - -## Compile with Caffe -* In mxnet folder, open `config.mk` (if you haven't already, copy `make/config.mk` (Linux) or `make/osx.mk` (Mac) into MXNet root folder as `config.mk`) and uncomment the lines `CAFFE_PATH = $(HOME)/caffe` and `MXNET_PLUGINS += plugin/caffe/caffe.mk`. Modify `CAFFE_PATH` to your caffe installation if necessary. -* Run `make clean && make` to build with caffe support. - -## Caffe Operator (Layer) -Caffe's neural network operator and loss functions are supported by MXNet through `mxnet.symbol.CaffeOp` and `mxnet.symbol.CaffeLoss` respectively. -For example, the following code shows multi-layer perception network for classifying MNIST digits ([full code](https://github.com/dmlc/mxnet/blob/master/example/caffe/caffe_net.py)): - -### Python -```Python -data = mx.symbol.Variable('data') -label = mx.symbol.Variable('softmax_label') -fc1 = mx.symbol.CaffeOp(data_0=data, num_weight=2, name='fc1', prototxt="layer{type:\"InnerProduct\" inner_product_param{num_output: 128} }") -act1 = mx.symbol.CaffeOp(data_0=fc1, prototxt="layer{type:\"TanH\"}") -fc2 = mx.symbol.CaffeOp(data_0=act1, num_weight=2, name='fc2', prototxt="layer{type:\"InnerProduct\" inner_product_param{num_output: 64} }") -act2 = mx.symbol.CaffeOp(data_0=fc2, prototxt="layer{type:\"TanH\"}") -fc3 = mx.symbol.CaffeOp(data_0=act2, num_weight=2, name='fc3', prototxt="layer{type:\"InnerProduct\" inner_product_param{num_output: 10}}") -mlp = mx.symbol.CaffeLoss(data=fc3, label=label, grad_scale=1, name='softmax', prototxt="layer{type:\"SoftmaxWithLoss\"}") -``` - -Let's break it down. First `data = mx.symbol.Variable('data')` defines a variable as placeholder for input. -Then it's fed through Caffe operators with `fc1 = mx.symbol.CaffeOp(data_0=data, num_weight=2, name='fc1', prototxt="layer{type:\"InnerProduct\" inner_product_param{num_output: 128} }")`. - -The inputs to caffe op are named as data_i for i=0 ... num_data-1 as `num_data` is the number of inputs. You may skip the argument, as the example does, if its value is 1. While `num_weight` is number of `blobs_`(weights). Its default value is 0, as many ops maintain no weight. `prototxt` is the configuration string. diff --git a/plugin/caffe/caffe.mk b/plugin/caffe/caffe.mk deleted file mode 100644 index c115e473be9d..000000000000 --- a/plugin/caffe/caffe.mk +++ /dev/null @@ -1,32 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -CFLAGS += -I$(CAFFE_PATH)/include -I$(CAFFE_PATH)/build/src -I$(CAFFE_PATH)/build/include -LDFLAGS += -lprotobuf -lboost_system -lboost_thread -lboost_filesystem -lgflags -lglog -L$(CAFFE_PATH)/build/lib -lcaffe - -ifeq ($(USE_CUDNN), 1) - CFLAGS += -DUSE_CUDNN=1 -endif - -ifeq ($(USE_CUDA), 0) - CFLAGS += -DCPU_ONLY=1 -endif - -CAFFE_SRC = $(wildcard plugin/caffe/*.cc) -PLUGIN_OBJ += $(patsubst %.cc, build/%.o, $(CAFFE_SRC)) -CAFFE_CUSRC = $(wildcard plugin/caffe/*.cu) -PLUGIN_CUOBJ += $(patsubst %.cu, build/%_gpu.o, $(CAFFE_CUSRC)) diff --git a/plugin/caffe/caffe_blob.cc b/plugin/caffe/caffe_blob.cc deleted file mode 100644 index 6a75439f3e4e..000000000000 --- a/plugin/caffe/caffe_blob.cc +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/*! - * Copyright (c) 2016 by Contributors - * \file caffe_blob.cc - * \brief Implementations of SetDataGradToBlob given various device/dimension - * \author Haoran Wang -*/ -#include "caffe_blob.h" -namespace mxnet { -namespace op { -namespace caffe { - -template<> -void SetDataGradToBlob(caffeMemoryTypes memType, - std::vector<::caffe::Blob*>::iterator blob, - std::vector::const_iterator itr) { - float *data_ptr = reinterpret_cast((*itr).dptr_); - if (memType == Data) - (*blob)->set_cpu_data(data_ptr); - else - MXCAFFEBLOB(*blob, float)->set_cpu_diff(data_ptr); -} - -template<> -void SetDataGradToBlob(caffeMemoryTypes memType, - std::vector<::caffe::Blob*>::iterator blob, - std::vector::const_iterator itr) { - double *data_ptr = reinterpret_cast((*itr).dptr_); - if (memType == Data) - (*blob)->set_cpu_data(data_ptr); - else - MXCAFFEBLOB(*blob, double)->set_cpu_diff(data_ptr); -} - -template<> -void SetDataGradToBlob(caffeMemoryTypes memType, - std::vector<::caffe::Blob*>::iterator blob, - std::vector::const_iterator itr) { - float *data_ptr = reinterpret_cast((*itr).dptr_); - if (memType == Data) - (*blob)->set_gpu_data(data_ptr); - else - MXCAFFEBLOB(*blob, float)->set_gpu_diff(data_ptr); -} - -template<> -void SetDataGradToBlob(caffeMemoryTypes memType, - std::vector<::caffe::Blob*>::iterator blob, - std::vector::const_iterator itr) { - double *data_ptr = reinterpret_cast((*itr).dptr_); - if (memType == Data) - (*blob)->set_gpu_data(data_ptr); - else - MXCAFFEBLOB(*blob, double)->set_gpu_diff(data_ptr); -} - -mxnet::TShape Vector2TShape(const std::vector &vec_int) { - std::vector vec; - for (uint32_t i = 0; i < vec_int.size(); ++i) - vec.push_back(vec_int[i]); - // 0-dim represents scalar in caffe - if (vec_int.size() == 0) - vec.push_back(1); - return {vec.begin(), vec.end()}; -} - -std::vector TShape2Vector(const mxnet::TShape &tshape) { - std::vector s; - for (uint32_t i =0 ; i < tshape.ndim(); ++i) - s.push_back(tshape[i]); - return s; -} - -} // namespace caffe -} // namespace op -} // namespace mxnet diff --git a/plugin/caffe/caffe_blob.h b/plugin/caffe/caffe_blob.h deleted file mode 100644 index 6243b5dc8c88..000000000000 --- a/plugin/caffe/caffe_blob.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/*! - * Copyright (c) 2016 by Contributors - * \file caffe_blob.h - * \brief conversion between tensor and caffeBlob - * \author Haoran Wang -*/ -#ifndef PLUGIN_CAFFE_CAFFE_BLOB_H_ -#define PLUGIN_CAFFE_CAFFE_BLOB_H_ - -#include -#include -#include -#include - -namespace mxnet { -namespace op { - -namespace caffe { - -// Declare Memory Type for Caffe blob -enum caffeMemoryTypes {Data, Grad, Non}; - -mxnet::TShape Vector2TShape(const std::vector &vec_int); -std::vector TShape2Vector(const mxnet::TShape &tshape); - -// implementation of tensor to blob, called by TensorToBlob -template -void SetDataGradToBlob(caffeMemoryTypes memType, - typename std::vector< ::caffe::Blob*>::iterator blob, - typename std::vector::const_iterator itr); - -/** - * \brief The interface to convert mxnet's tensor to caffe's blob - * \brief called in caffe_operator_inl.h - */ -template -void TBlob2CaffeBlob(caffeMemoryTypes memType, - typename std::vector< ::caffe::Blob*>::iterator blob, - typename std::vector::const_iterator tblob, - int n = 1) { - for (int i = 0; i < n; ++i, ++blob, ++tblob) { - (*blob)->Reshape(TShape2Vector((*tblob).shape_)); - SetDataGradToBlob(memType, blob, tblob); - } -} - -template -void SetOpBlobs(::caffe::Layer *caffeOp, - const std::vector< ::caffe::Blob*>& weights) { - CHECK_EQ(caffeOp->blobs().size(), weights.size()); - for (int i = 0; i < weights.size(); ++i) - caffeOp->blobs()[i].reset(weights[i]); -} - -/**! - * \brief Workaround for missing functions in ::caffe::Blob - * \warning Do not add or override any virtual functions in this class - * @tparam Dtype - */ -template -class CaffeBlobFriend : public ::caffe::Blob { - public: - inline void set_cpu_diff(Dtype* diff) { - CHECK(diff); - this->diff_->set_cpu_data(diff); - } - - inline void set_gpu_diff(Dtype* diff) { - CHECK(diff); - this->diff_->set_gpu_data(diff); - } -}; - -#define MXCAFFEBLOB(__object$, __type$) \ - (static_cast *>(__object$)) - -/**! - * \brief Workaround for missing functions in ::caffe::Layer - * \warning Do not add or override any virtual functions in this class - * @tparam Dtype - */ -template -class CaffeLayerFriend : public ::caffe::Layer { - explicit CaffeLayerFriend(const ::caffe::LayerParameter& param) = delete; - public: - inline void SetPhase(::caffe::Phase p) { - this->phase_ = p; - } -}; - -#define MXCAFFELAYER(__object$, __type$) \ - (static_cast *>(__object$)) - -} // namespace caffe -} // namespace op -} // namespace mxnet - -#endif // PLUGIN_CAFFE_CAFFE_BLOB_H_ diff --git a/plugin/caffe/caffe_common.cc b/plugin/caffe/caffe_common.cc deleted file mode 100644 index dd445efbd659..000000000000 --- a/plugin/caffe/caffe_common.cc +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/*! - * Copyright (c) 2016 by Contributors - * \file caffe_common.h - * \brief Common functions for caffeOp and caffeLoss symbols - * \author Haoran Wang -*/ -#include -#include -#include"caffe_common.h" - -namespace mxnet { -namespace op { -namespace caffe { - -// Cpu implementation of set_mode -template<> -void CaffeMode::SetMode() { - ::caffe::Caffe::set_mode(::caffe::Caffe::CPU); -} - -// Gpu implementation of set_mode -template<> -void CaffeMode::SetMode() { - ::caffe::Caffe::set_mode(::caffe::Caffe::GPU); -} - -} // namespace caffe -} // namespace op -} // namespace mxnet diff --git a/plugin/caffe/caffe_common.h b/plugin/caffe/caffe_common.h deleted file mode 100644 index 211d8c44d518..000000000000 --- a/plugin/caffe/caffe_common.h +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/*! - * Copyright (c) 2016 by Contributors - * \file caffe_common.h - * \brief Common functions for caffeOp and caffeLoss symbols - * \author Haoran Wang -*/ - -#ifndef PLUGIN_CAFFE_CAFFE_COMMON_H_ -#define PLUGIN_CAFFE_CAFFE_COMMON_H_ - -#include -#include - -#include - -#include -#include -#include - -#include -#include -#include - -namespace mxnet { -namespace op { -namespace caffe { - -/** - * \brief The class sets caffe's mode before doing forward/backward - * \tparam xpu The device that the op will be executed on. - */ -class CaffeMode { - public: - template static void SetMode(); -}; - -// Initialization funciton called by caffeOp & caffeLoss -template -void InitCaffeBlobs(std::vector< ::caffe::Blob*>* v, int n_num) { - for (index_t i=0; i < n_num; ++i) - v->push_back(new ::caffe::Blob()); -} - -template -void DelCaffeBlobs(std::vector< ::caffe::Blob*>* v, int n_num) { - for (index_t i=0; i < n_num; ++i) - delete v->at(i); -} - - -struct NULLDeleter {template void operator()(T*){}}; - -template -void Deleter(::caffe::Layer *ptr) { -} - -template -class LayerRegistry { - public: - static ::caffe::Layer * CreateLayer(const ::caffe::LayerParameter& param) { - ::caffe::shared_ptr< ::caffe::Layer > ptr = - ::caffe::LayerRegistry::CreateLayer(param); - // avoid caffe::layer destructor, which deletes the weights layer owns - new ::caffe::shared_ptr< ::caffe::Layer >(ptr); - return ptr.get(); - } -}; - -} // namespace caffe -} // namespace op -} // namespace mxnet - -/*! \brief override type_name for caffe::LayerParameter */ -namespace dmlc { - DMLC_DECLARE_TYPE_NAME(::caffe::LayerParameter, "caffe-layer-parameter"); -} - -#endif // PLUGIN_CAFFE_CAFFE_COMMON_H_ diff --git a/plugin/caffe/caffe_data_iter.cc b/plugin/caffe/caffe_data_iter.cc deleted file mode 100644 index 552b9dce9f3d..000000000000 --- a/plugin/caffe/caffe_data_iter.cc +++ /dev/null @@ -1,273 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/*! - * Copyright (c) 2015 by Contributors - * \file caffe_data_iter.cc - * \brief register mnist iterator -*/ -#include -#include -#include -#include - -#include "caffe_common.h" -#include "caffe_stream.h" -#include "caffe_fieldentry.h" -#include "caffe_blob.h" -#include "../../src/io/inst_vector.h" -#include "../../src/io/iter_prefetcher.h" - -#define CHECK_NEXT_TIMING - -#ifdef CHECK_NEXT_TIMING -#define IF_CHECK_TIMING(__t$) __t$ -#else -#define IF_CHECK_TIMING(__t$) -#endif - -namespace mxnet { -namespace io { - -struct CaffeDataParam : public dmlc::Parameter { - /*! \brief protobuf text */ - ::caffe::LayerParameter prototxt; - /*! \brief number of iterations per epoch */ - int num_examples; - /*! \brief data mode */ - bool flat; - - DMLC_DECLARE_PARAMETER(CaffeDataParam) { - DMLC_DECLARE_FIELD(prototxt).set_default("layer{}") - .describe("Caffe's layer parameter"); - DMLC_DECLARE_FIELD(flat).set_default(false) - .describe("Augmentation Param: Whether to flat the data into 1D."); - DMLC_DECLARE_FIELD(num_examples).set_lower_bound(1).set_default(10000) - .describe("Number of examples in the epoch."); - } -}; - -template -class CaffeDataIter : public IIterator { - public: - explicit CaffeDataIter(int type_flag) : batch_size_(0), channels_(1), width_(1), height_(1) - , type_flag_(type_flag), loc_(0) - {} - virtual ~CaffeDataIter(void) {} - - // intialize iterator loads data in - virtual void Init(const std::vector >& kwargs) { - std::map kmap(kwargs.begin(), kwargs.end()); - param_.InitAllowUnknown(kmap); - - // Caffe seems to understand phase inside an "include {}" block - if (!param_.prototxt.has_phase()) { - if (param_.prototxt.include().size()) { - if (param_.prototxt.include(0).has_phase()) { - param_.prototxt.set_phase(param_.prototxt.include(0).phase()); - } - } - } - - std::string type = param_.prototxt.type(); - caffe_data_layer_ = caffe::LayerRegistry::CreateLayer(param_.prototxt); - CHECK(caffe_data_layer_ != nullptr) << "Failed creating caffe data layer"; - const size_t top_size = param_.prototxt.top_size(); - if (top_size > 0) { - if (top_size > NR_SUPPORTED_TOP_ITEMS) { - LOG(WARNING) - << "Too may \"top\" items, only two (one data, one label) are currently supported"; - } - top_.reserve(top_size); - for (size_t x = 0; x < top_size; ++x) { - ::caffe::Blob *blob = new ::caffe::Blob(); - cleanup_blobs_.push_back(std::unique_ptr<::caffe::Blob>(blob)); - top_.push_back(blob); - } - caffe_data_layer_->SetUp(bottom_, top_); - const std::vector &shape = top_[DATA]->shape(); - const size_t shapeDimCount = shape.size(); - if (shapeDimCount > 0) { - batch_size_ = shape[0]; - if (shapeDimCount > 1) { - channels_ = shape[1]; - if (shapeDimCount > 2) { - width_ = shape[2]; - if (shapeDimCount > 3) { - height_ = shape[3]; - } - } - } - } - - if (top_size > DATA) { - if (param_.flat) { - batch_data_ = TBlob(nullptr, mshadow::Shape2(batch_size_, - channels_ * width_ * height_), - cpu::kDevCPU, type_flag_); - } else { - batch_data_ = TBlob(nullptr, mxnet::TShape(top_[DATA]->shape().begin(), - top_[DATA]->shape().end()), - cpu::kDevCPU, type_flag_); - } - } - out_.data.clear(); - if (top_size > LABEL) { - batch_label_ = TBlob(nullptr, mxnet::TShape(top_[LABEL]->shape().begin(), - top_[LABEL]->shape().end()), - cpu::kDevCPU, type_flag_); - } - out_.batch_size = batch_size_; - } - } - - virtual void BeforeFirst(void) { - loc_ = 0; - } - - virtual bool Next(void) { - // MxNet iterator is expected to return CPU-accessible memory - if (::caffe::Caffe::mode() != ::caffe::Caffe::CPU) { - ::caffe::Caffe::set_mode(::caffe::Caffe::CPU); - CHECK_EQ(::caffe::Caffe::mode(), ::caffe::Caffe::CPU); - } - caffe_data_layer_->Forward(bottom_, top_); - CHECK_GT(batch_size_, 0) << "batch size must be greater than zero"; - CHECK_EQ(out_.batch_size, batch_size_) << "Internal Error: batch size mismatch"; - - if (loc_ + batch_size_ <= param_.num_examples) { - batch_data_.dptr_ = top_[DATA]->mutable_cpu_data(); - batch_label_.dptr_ = top_[LABEL]->mutable_cpu_data(); - - out_.data.clear(); - out_.data.push_back(batch_data_); - out_.data.push_back(batch_label_); - loc_ += batch_size_; - return true; - } - - return false; - } - - virtual const TBlobBatch &Value(void) const { - return out_; - } - - private: - /*! \brief indexes into top_ */ - enum { DATA = 0, LABEL, NR_SUPPORTED_TOP_ITEMS }; - - /*! \brief MNISTCass iter params */ - CaffeDataParam param_; - /*! \brief Shape scalar values */ - index_t batch_size_, channels_, width_, height_; - /*! \brief Caffe data layer */ - boost::shared_ptr > caffe_data_layer_; - /*! \brief batch data blob */ - mxnet::TBlob batch_data_; - /*! \brief batch label blob */ - mxnet::TBlob batch_label_; - /*! \brief Output blob data for this iteration */ - TBlobBatch out_; - /*! \brief Bottom and top connection-point blob data */ - std::vector<::caffe::Blob*> bottom_, top_; - /*! \brief Cleanup these blobs on exit */ - std::list>> cleanup_blobs_; - /*! \brief type flag of the tensor blob */ - const int type_flag_; - /*! \brief Blobs done so far */ - std::atomic loc_; -}; // class CaffeDataIter - -class CaffeDataIterWrapper : public PrefetcherIter { - public: - CaffeDataIterWrapper() : PrefetcherIter(NULL), next_time_(0) {} - virtual ~CaffeDataIterWrapper() { - IF_CHECK_TIMING( - if (next_time_.load() > 0) { - LOG(WARNING) << "Caffe data loader was blocked for " - << next_time_.load() - << " ms waiting for incoming data"; - } - ) - } - virtual void Init(const std::vector >& kwargs) { - // We need to init prefetcher args in order to get dtype - this->param_.InitAllowUnknown(kwargs); - if (!this->param_.dtype) this->param_.dtype = mshadow::kFloat32; - switch (this->param_.dtype.value()) { - case mshadow::kFloat32: - this->loader_.reset(new CaffeDataIter(this->param_.dtype.value())); - break; - case mshadow::kFloat64: - this->loader_.reset(new CaffeDataIter(this->param_.dtype.value())); - break; - case mshadow::kFloat16: - LOG(FATAL) << "float16 layer is not supported by caffe"; - return; - case mshadow::kBfloat16: - LOG(FATAL) << "bfloat16 layer is not supported by caffe"; - return; - default: - LOG(FATAL) << "Unsupported type " << this->param_.dtype.value(); - return; - } - PrefetcherIter::Init(kwargs); - this->param_.prefetch_buffer = 1; - } - virtual void BeforeFirst(void) { - return PrefetcherIter::BeforeFirst(); - } - virtual bool Next(void) { - IF_CHECK_TIMING( - const uint64_t start_time = GetTickCountMS(); - ) - const bool rc = PrefetcherIter::Next(); - IF_CHECK_TIMING( - const uint64_t diff_time = GetTickCountMS() - start_time; - next_time_.fetch_add(diff_time); - ) - return rc; - } - - protected: - IF_CHECK_TIMING( - static uint64_t GetTickCountMS() { - struct timeval tv; - gettimeofday(&tv, 0); - return uint64_t( tv.tv_sec ) * 1000 + tv.tv_usec / 1000; - } - ) - - /*! \brief milliseconds spent in Next() */ - std::atomic next_time_; -}; // class CaffeDataIterWrapper - -DMLC_REGISTER_PARAMETER(CaffeDataParam); - -MXNET_REGISTER_IO_ITER(CaffeDataIter) -.describe("Create MxNet iterator for a Caffe data layer.") -.add_arguments(CaffeDataParam::__FIELDS__()) -.add_arguments(PrefetcherParam::__FIELDS__()) -.set_body([]() { - return new CaffeDataIterWrapper(); -}); - -} // namespace io -} // namespace mxnet diff --git a/plugin/caffe/caffe_fieldentry.h b/plugin/caffe/caffe_fieldentry.h deleted file mode 100644 index f97b76519e0e..000000000000 --- a/plugin/caffe/caffe_fieldentry.h +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/*! - * Copyright (c) 2016 by Contributors - * \file caffe_fieldentry.h - * \brief Implement FieldEntry - * \author Haoran Wang - */ -#ifndef PLUGIN_CAFFE_CAFFE_FIELDENTRY_H_ -#define PLUGIN_CAFFE_CAFFE_FIELDENTRY_H_ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -namespace dmlc { -namespace parameter { - -// specialize define for Layer Parameter -template<> -class FieldEntry - : public FieldEntryBase, caffe::LayerParameter> { - public: - // parent class - typedef FieldEntryBase, caffe::LayerParameter> Parent; - - - bool ReadProtoFromTextContent(const std::string& text, - ::google::protobuf::Message* proto) const { - bool success = google::protobuf::TextFormat::ParseFromString(text, proto); - return success; - } - - /** - * /brief Customize set method for LayerParameter - * /tparam value string of caffe's layer configuration - * */ - virtual void Set(void *head, const std::string &value) const { - caffe::NetParameter net_param; - if (!ReadProtoFromTextContent(value, &net_param)) - CHECK(false)<< "Caffe Net Prototxt: " << value << "Initialized Failed"; - - CHECK_EQ(net_param.layer_size(), 1) << "Prototxt" << value <<" more than a layer"; - caffe::LayerParameter *layer_param = new caffe::LayerParameter(net_param.layer(0)); - this->Get(head) = (*layer_param); - } - - virtual void PrintValue(std::ostream &os, caffe::LayerParameter value) const { // NOLINT(*) - } - - virtual void PrintDefaultValueString(std::ostream &os) const { // NOLINT(*) - std::string s; - caffe::NetParameter np; - // Avoid wasting time making a copy -- just push in out default object's pointer - np.mutable_layer()->AddAllocated(const_cast<::caffe::LayerParameter *>(&default_value_)); - google::protobuf::TextFormat::PrintToString(np, &s); - np.mutable_layer()->ReleaseLast(); - os << '\'' << s << '\''; - } - - // override set_default - inline FieldEntry &set_default(const std::string &value) { - caffe::NetParameter net_param; - if (!ReadProtoFromTextContent(value, &net_param)) - CHECK(false)<< "Caffe Net Prototxt: " << value << "Initialized Failed"; - - CHECK_EQ(net_param.layer_size(), 1) << "Protoxt " << value <<" is more than one layer"; - default_value_ = caffe::LayerParameter(net_param.layer(0)); - has_default_ = true; - // return self to allow chaining - return this->self(); - } -}; - -} // namespace parameter -} // namespace dmlc - -#endif // PLUGIN_CAFFE_CAFFE_FIELDENTRY_H_ diff --git a/plugin/caffe/caffe_loss-inl.h b/plugin/caffe/caffe_loss-inl.h deleted file mode 100644 index 98c714612dca..000000000000 --- a/plugin/caffe/caffe_loss-inl.h +++ /dev/null @@ -1,303 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/*! - * Copyright (c) 2016 by Contributors - * \file caffe_loss-inl.h - * \brief Caffe Operator - * \author Haoran Wang -*/ -#ifndef PLUGIN_CAFFE_CAFFE_LOSS_INL_H_ -#define PLUGIN_CAFFE_CAFFE_LOSS_INL_H_ - -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "../../src/operator/operator_common.h" -#include "caffe_common.h" -#include "caffe_stream.h" -#include "caffe_fieldentry.h" -#include "caffe_blob.h" - -namespace mxnet { -namespace op { - -struct CaffeLossParam : public dmlc::Parameter { - ::caffe::LayerParameter prototxt; - int num_data, num_out; - float grad_scale; - - DMLC_DECLARE_PARAMETER(CaffeLossParam) { - DMLC_DECLARE_FIELD(prototxt).set_default("layer{}") - .describe("Caffe's layer parameter"); - DMLC_DECLARE_FIELD(num_data).set_range(0, 100).set_default(2) - .describe("Operator input number"); - DMLC_DECLARE_FIELD(num_out).set_range(0, 100).set_default(1) - .describe("Operator output number"); - DMLC_DECLARE_FIELD(grad_scale) - .set_default(1.0f) - .describe("Scale the gradient by a float factor (a.k.a weight of this loss)."); - } -}; - -/** - * \brief this is the implementation of caffe operator in caffe. - * \tparam xpu the device that the op will be executed on. - */ -template -class CaffeLoss : public Operator { - public: - explicit CaffeLoss(CaffeLossParam p):param_(p), - setup_(false) { - std::string type = param_.prototxt.type(); - caffeOp_ = caffe::LayerRegistry::CreateLayer(param_.prototxt); - grad_scale_ = (Dtype)param_.grad_scale; - - caffe::InitCaffeBlobs(&bot_, param_.num_data); - caffe::InitCaffeBlobs(&top_, param_.num_out); - flags_.resize(param_.num_data); - } - - ~CaffeLoss() { - caffe::DelCaffeBlobs(&bot_, param_.num_data); - caffe::DelCaffeBlobs(&top_, param_.num_out); - } - - virtual void Forward(const OpContext &ctx, - const std::vector &in_data, - const std::vector &req, - const std::vector &out_data, - const std::vector &aux_args) { - // Set mode before forward - caffe::CaffeMode::SetMode(); - using ::caffe::Blob; - using std::vector; - using namespace mshadow; - using namespace mshadow::expr; - for (uint32_t i = 0; i < req.size(); ++i) - CHECK_EQ(req[i], kWriteTo); - - CHECK_EQ(in_data.size(), param_.num_data); - CHECK_EQ(out_data.size(), param_.num_out); - -#if defined(__CUDACC__) - Stream *s = ctx.get_stream(); - // TODO(Haoran): when need cublas handle in stream? - CHECK_EQ(s->blas_handle_ownership_, Stream::OwnHandle) - << "Must init CuBLAS handle in stream"; -#endif // __CUDACC__ - - caffe::TBlob2CaffeBlob(caffe::Data, - bot_.begin(), - in_data.begin(), - param_.num_data); - caffe::TBlob2CaffeBlob(caffe::Data, - top_.begin(), - out_data.begin(), - param_.num_out); - CaffeOpSetup(); - if (ctx.is_train) - MXCAFFELAYER(caffeOp_, Dtype)->SetPhase(::caffe::TRAIN); - else - MXCAFFELAYER(caffeOp_, Dtype)->SetPhase(::caffe::TEST); - caffeOp_->Forward(bot_, top_); - -#if defined(__CUDACC__) - // Sync cpu data to gpu data - for (uint32_t i = 0; i < top_.size(); ++i) - top_[i]->gpu_data(); - - CHECK_EQ(cudaStreamSynchronize(NULL), cudaSuccess); -#endif // __CUDACC__ - } - - // Set up caffe op with real data - void CaffeOpSetup() { - if (!setup_) { - setup_ = true; - caffeOp_->SetUp(bot_, top_); - } - } - - virtual void Backward(const OpContext &ctx, - const std::vector &out_grad, - const std::vector &in_data, - const std::vector &out_data, - const std::vector &req, - const std::vector &in_grad, - const std::vector &aux_args) { - // Set mode before backward - caffe::CaffeMode::SetMode(); - using namespace mshadow; - using namespace mshadow::expr; - CHECK_EQ(out_grad.size(), param_.num_out); - for (int i = 0; i < param_.num_data; ++i) - CHECK(req[i] != kAddTo) << "caffe doesn't accm diff on bottom data"; - CHECK(in_data.size() == param_.num_data); - -#if defined(__CUDACC__) - Stream *s = ctx.get_stream(); - // TODO(Haoran): when need cublas handle in stream? - CHECK_EQ(s->blas_handle_ownership_, Stream::OwnHandle) - << "Must init CuBLAS handle in stream"; -#endif // __CUDACC__ - - caffe::TBlob2CaffeBlob(caffe::Grad, - bot_.begin(), - in_grad.begin(), - param_.num_data); - // Pass grad scale to caffe blob - MXCAFFEBLOB(top_[0], Dtype)->set_cpu_diff(&grad_scale_); - - // Set BP flag - for (int i = 0; i < param_.num_data; ++i) - flags_[i] = req[i] != kNullOp; - - caffeOp_->Backward(top_, flags_, bot_); - -#if defined(__CUDACC__) - // Sync cpu diff to gpu diff - for (uint32_t i = 0; i < bot_.size(); ++i) - bot_[i]->gpu_diff(); - - CHECK_EQ(cudaStreamSynchronize(NULL), cudaSuccess); -#endif // __CUDACC__ - } - - private: - CaffeLossParam param_; - ::caffe::Layer *caffeOp_; - Dtype grad_scale_; - std::vector< ::caffe::Blob *> bot_, top_; - std::vector flags_; - bool setup_; -}; // class CaffeLoss - -// Decalre Factory function, used for dispatch specialization -template -Operator* CreateOp(CaffeLossParam param, int); - -#if DMLC_USE_CXX11 -class CaffeLossProp : public OperatorProperty { - public: - std::vector ListArguments() const override { - return {"data", "label"}; - } - - void Init(const std::vector >& kwargs) override { - param_.Init(kwargs); - CHECK_EQ(param_.num_out, 1); - CHECK_EQ(param_.num_data, 2); - - // Fetch grad_scale from prototxt - if ((param_.prototxt.loss_weight_size() > 0)) - param_.grad_scale = param_.prototxt.loss_weight(0); - } - - std::map GetParams() const override { - return param_.__DICT__(); - } - - /*brief Set up caffeop to infer output shape*/ - bool InferShape(mxnet::ShapeVector *in_shape, - mxnet::ShapeVector *out_shape, - mxnet::ShapeVector *aux_shape) const override { - using namespace mshadow; - using ::caffe::Blob; - using std::vector; - if (caffeOp_ == NULL) - caffeOp_ = caffe::LayerRegistry::CreateLayer(param_.prototxt); - - CHECK_GE(in_shape->size(), param_.num_data); - // Initialize empty bottom & top blobs for caffeOp setup - vector *> bot_blobs, top_blobs; - - for (int i = 0; i < param_.num_data; ++i) { - mxnet::TShape tshape = (*in_shape)[i]; - if (tshape.ndim() == 0) return false; - auto blob_ptr = new Blob(); - blob_ptr->Reshape(caffe::TShape2Vector(tshape)); - bot_blobs.push_back(blob_ptr); - } - - for (int i = 0; i < param_.num_out; ++i) - top_blobs.push_back(new Blob()); - - caffeOp_->SetUp(bot_blobs, top_blobs); - CHECK_EQ(in_shape->size(), caffeOp_->blobs().size() + param_.num_data); - // Initialize out shapes - out_shape->clear(); - for (auto blob : top_blobs) { - mxnet::TShape tshape = caffe::Vector2TShape(blob->shape()); - out_shape->push_back(tshape); - } - - for (auto blob_ptr : bot_blobs) - delete blob_ptr; - for (auto blob_ptr : top_blobs) - delete blob_ptr; - - return true; - } - - OperatorProperty* Copy() const override { - auto copy_prop = new CaffeLossProp(); - copy_prop->param_ = this->param_; - return copy_prop; - } - - std::string TypeString() const override { - return "CaffeLoss"; - } - - std::vector DeclareBackwardDependency( - const std::vector &out_grad, - const std::vector &in_data, - const std::vector &out_data) const override { - std::vector dep; - dep.insert(dep.end(), in_data.begin(), in_data.end()); - dep.insert(dep.end(), out_data.begin(), out_data.end()); - return dep; - } - - Operator* CreateOperator(Context ctx) const override { - LOG(FATAL) << "Not Implemented."; - return NULL; - } - - Operator* CreateOperatorEx(Context ctx, mxnet::ShapeVector *in_shape, - std::vector *in_type) const override; - - - private: - mutable CaffeLossParam param_; - mutable ::caffe::Layer *caffeOp_; -}; // class CaffeLossSymbol -#endif - -} // namespace op -} // namespace mxnet -#endif // PLUGIN_CAFFE_CAFFE_LOSS_INL_H_ diff --git a/plugin/caffe/caffe_loss.cc b/plugin/caffe/caffe_loss.cc deleted file mode 100644 index c2d1c1b9bab9..000000000000 --- a/plugin/caffe/caffe_loss.cc +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/*! - * Copyright (c) 2016 by Contributors - * \file caffe_loss.cc - * \brief caffe loss - * \author Haoran Wang -*/ -#include "./caffe_loss-inl.h" - -namespace mxnet { -namespace op { -template<> -Operator *CreateOp(CaffeLossParam param, int dtype) { - Operator *op = NULL; - switch (dtype) { - case mshadow::kFloat32: - op = new CaffeLoss(param); - break; - case mshadow::kFloat64: - op = new CaffeLoss(param); - break; - case mshadow::kFloat16: - LOG(FATAL) << "float16 layer is not supported by caffe"; - break; - case mshadow::kBfloat16: - LOG(FATAL) << "bfloat16 layer is not supported by caffe"; - return; - default: - LOG(FATAL) << "Unsupported type " << dtype; - } - return op; -} - -// DO_BIND_DISPATCH comes from static_operator_common.h -Operator *CaffeLossProp::CreateOperatorEx(Context ctx, mxnet::ShapeVector *in_shape, - std::vector *in_type) const { - std::vector out_type, aux_type; - mxnet::ShapeVector out_shape, aux_shape; - out_type.resize(this->ListOutputs().size()); - out_shape.resize(this->ListOutputs().size()); - aux_type.resize(this->ListAuxiliaryStates().size()); - aux_shape.resize(this->ListAuxiliaryStates().size()); - CHECK(InferType(in_type, &out_type, &aux_type)); - CHECK(InferShape(in_shape, &out_shape, &aux_shape)); - DO_BIND_DISPATCH(CreateOp, param_, (*in_type)[0]); -} - -DMLC_REGISTER_PARAMETER(CaffeLossParam); - -MXNET_REGISTER_OP_PROPERTY(CaffeLoss, CaffeLossProp) -.describe("Caffe loss layer") -.add_arguments(CaffeLossParam::__FIELDS__()); - -} // namespace op -} // namespace mxnet diff --git a/plugin/caffe/caffe_loss.cu b/plugin/caffe/caffe_loss.cu deleted file mode 100644 index ff81e1c1ffa6..000000000000 --- a/plugin/caffe/caffe_loss.cu +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/*! - * Copyright (c) 2016 by Contributors - * \file caffe_loss_gpu.cc - * \brief caffe loss - * \author Haoran Wang -*/ -#include "./caffe_loss-inl.h" - -namespace mxnet { -namespace op { -template<> -Operator* CreateOp(CaffeLossParam param, int dtype) { - Operator *op = NULL; - switch (dtype) { - case mshadow::kFloat32: - op = new CaffeLoss(param); - break; - case mshadow::kFloat64: - op = new CaffeLoss(param); - break; - case mshadow::kFloat16: - LOG(FATAL) << "float16 layer is not supported by caffe"; - break; - case mshadow::kBfloat16: - LOG(FATAL) << "bfloat16 layer is not supported by caffe"; - break; - default: - LOG(FATAL) << "Unsupported type " << dtype; - } - return op; -} - -} // namespace op -} // namespace mxnet diff --git a/plugin/caffe/caffe_op-inl.h b/plugin/caffe/caffe_op-inl.h deleted file mode 100644 index b4ab0926199c..000000000000 --- a/plugin/caffe/caffe_op-inl.h +++ /dev/null @@ -1,348 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/*! - * Copyright (c) 2016 by Contributors - * \file caffe_op-inl.h - * \brief Caffe Operator - * \author Haoran Wang -*/ -#ifndef PLUGIN_CAFFE_CAFFE_OP_INL_H_ -#define PLUGIN_CAFFE_CAFFE_OP_INL_H_ - -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "../../src/operator/operator_common.h" -#include "caffe_common.h" -#include "caffe_stream.h" -#include "caffe_fieldentry.h" -#include "caffe_blob.h" - -namespace mxnet { -namespace op { - -struct CaffeOpParam : public dmlc::Parameter { - ::caffe::LayerParameter prototxt; - int num_data, num_weight, num_out; - - DMLC_DECLARE_PARAMETER(CaffeOpParam) { DMLC_DECLARE_FIELD(prototxt).set_default("layer{}") - .describe("Caffe's layer parameter"); - DMLC_DECLARE_FIELD(num_data).set_default(1) - .describe("Operator input number"); - DMLC_DECLARE_FIELD(num_weight).set_default(0) - .describe("Weight number"); - DMLC_DECLARE_FIELD(num_out).set_default(1) - .describe("Operator output number"); - } -}; - - -/** - * \brief this is the implementation of caffe operator in caffe. - * \tparam xpu the device that the op will be executed on. - */ -template -class CaffeOp : public Operator { - public: - explicit CaffeOp(CaffeOpParam p):param_(p), - init_w_(false), - init_wd_(false), - setup_(false) { - std::string type = param_.prototxt.type(); - caffeOp_ = caffe::LayerRegistry::CreateLayer(param_.prototxt); - - caffe::InitCaffeBlobs(&bot_, param_.num_data); - caffe::InitCaffeBlobs(&top_, param_.num_out); - caffe::InitCaffeBlobs(&wei_, param_.num_weight); - flags_.resize(param_.num_data); - } - - ~CaffeOp() { - caffe::DelCaffeBlobs(&bot_, param_.num_data); - caffe::DelCaffeBlobs(&top_, param_.num_out); - caffe::DelCaffeBlobs(&wei_, param_.num_weight); - } - - virtual void Forward(const OpContext &ctx, - const std::vector &in_data, - const std::vector &req, - const std::vector &out_data, - const std::vector &aux_args) { - // Set mode before forward - caffe::CaffeMode::SetMode(); - using ::caffe::Blob; - using std::vector; - using namespace mshadow; - using namespace mshadow::expr; - for (uint32_t i = 0; i < req.size(); ++i) - CHECK_EQ(req[i], kWriteTo); - int expected_num_data = param_.num_weight + param_.num_data; - CHECK_EQ(in_data.size(), expected_num_data); - CHECK_EQ(out_data.size(), param_.num_out); - -#if defined(__CUDACC__) - Stream *s = ctx.get_stream(); - // TODO(Haoran): when need cublas handle in stream? - CHECK_EQ(s->blas_handle_ownership_, Stream::OwnHandle) - << "Must init CuBLAS handle in stream"; -#endif // __CUDACC__ - - caffe::TBlob2CaffeBlob(caffe::Data, - bot_.begin(), - in_data.begin(), - param_.num_data); - caffe::TBlob2CaffeBlob(caffe::Data, - top_.begin(), - out_data.begin(), - param_.num_out); - CaffeOpSetup(); - // Init caffe's weight pointer - if (!init_w_) { - init_w_ = true; - caffe::TBlob2CaffeBlob(caffe::Data, - wei_.begin(), - in_data.begin() + param_.num_data, - param_.num_weight); - caffe::SetOpBlobs(caffeOp_, wei_); - } - if (ctx.is_train) - MXCAFFELAYER(caffeOp_, Dtype)->SetPhase(::caffe::TRAIN); - else - MXCAFFELAYER(caffeOp_, Dtype)->SetPhase(::caffe::TEST); - caffeOp_->Forward(bot_, top_); - -#if defined(__CUDACC__) - // Sync cpu data to gpu data - for (uint32_t i = 0; i < top_.size(); ++i) - top_[i]->gpu_data(); - - CHECK_EQ(cudaStreamSynchronize(NULL), cudaSuccess); -#endif // __CUDACC__ - } - - // Set up caffe op with real data - void CaffeOpSetup() { - if (!setup_) { - setup_ = true; - caffeOp_->SetUp(bot_, top_); - } - } - - virtual void Backward(const OpContext &ctx, - const std::vector &out_grad, - const std::vector &in_data, - const std::vector &out_data, - const std::vector &req, - const std::vector &in_grad, - const std::vector &aux_args) { - // Set mode before backward - caffe::CaffeMode::SetMode(); - using namespace mshadow; - using namespace mshadow::expr; - CHECK_EQ(out_grad.size(), param_.num_out); - for (int i = 0; i < param_.num_data; ++i) - CHECK(req[i] != kAddTo) << "caffe doesn't accm diff on bottom data"; - - int expected_num_data = param_.num_weight + param_.num_data; - CHECK(in_data.size() == expected_num_data && in_grad.size() == expected_num_data); - CHECK_EQ(req.size(), expected_num_data); - - Stream *s = ctx.get_stream(); -#if defined(__CUDACC__) - // TODO(Haoran): when need cublas handle in stream? - CHECK_EQ(s->blas_handle_ownership_, Stream::OwnHandle) - << "Must init CuBLAS handle in stream"; -#endif // __CUDACC__ - - caffe::TBlob2CaffeBlob(caffe::Grad, - bot_.begin(), - in_grad.begin(), - param_.num_data); - caffe::TBlob2CaffeBlob(caffe::Grad, - top_.begin(), - out_grad.begin(), - param_.num_out); - - // Init caffe's gradient pointer - if (!init_wd_) { - init_wd_ = true; - caffe::TBlob2CaffeBlob(caffe::Grad, - wei_.begin(), - in_grad.begin() + param_.num_data, - param_.num_weight); - } - - // Handle OpReqType of weights - for (int i = param_.num_data; i < expected_num_data; ++i) - HandleOpReq(s, req[i], in_grad[i]); - - // Set BP flag - for (int i = 0; i < param_.num_data; ++i) - flags_[i] = req[i] != kNullOp; - - caffeOp_->Backward(top_, flags_, bot_); - -#if defined(__CUDACC__) - // Sync cpu diff to gpu diff - for (uint32_t i = 0; i < bot_.size(); ++i) - bot_[i]->gpu_diff(); - - CHECK_EQ(cudaStreamSynchronize(NULL), cudaSuccess); -#endif // __CUDACC__ - } - - void HandleOpReq(mshadow::Stream*s, OpReqType req, const TBlob& in_g) { - if ((req == kWriteInplace) || (req == kWriteTo)) { - mshadow::Tensor grad = in_g.FlatTo2D(s); - grad = 0; - } - } - - private: - CaffeOpParam param_; - ::caffe::Layer *caffeOp_; - std::vector< ::caffe::Blob *> bot_, top_, wei_; - std::vector flags_; - bool init_w_, init_wd_, setup_; -}; // class CaffeOp - -// Decalre Factory function, used for dispatch specialization -template -Operator* CreateOp(CaffeOpParam param, int); - -#if DMLC_USE_CXX11 -class CaffeOpProp : public OperatorProperty { - public: - std::vector ListArguments() const override { - std::vector res; - for (int i = 0; i < param_.num_data; ++i) - res.push_back(std::string("data_") + std::to_string(i)); - - for (int i = 0; i < param_.num_weight; ++i) { - if (i == 0) - res.push_back(std::to_string(i) + "_weight"); - else - res.push_back(std::to_string(i) + "_bias"); - } - return res; - } - - std::vector ListOutputs() const override { - if (param_.num_out > 1) { - std::vector ret; - for (int i = 0; i < param_.num_out; ++i) - ret.push_back("output" + std::to_string(i)); - return ret; - } else { - return {"output"}; - } - } - - void Init(const std::vector >& kwargs) override { - param_.Init(kwargs); - } - - std::map GetParams() const override { - return param_.__DICT__(); - } - - /* - * \brief Set up caffeOp_ to infer weights & output shape - * \brief Initialize param_'s in & out dims - */ - bool InferShape(mxnet::ShapeVector *in_shape, - mxnet::ShapeVector *out_shape, - mxnet::ShapeVector *aux_shape) const override { - if (caffeOp_ == NULL) - caffeOp_ = caffe::LayerRegistry::CreateLayer(param_.prototxt); - using namespace mshadow; - using ::caffe::Blob; - using std::vector; - CHECK_GE(in_shape->size(), param_.num_data); - // Initialize emtryp bottom & top blobs for caffeop - vector *> bot_blobs, top_blobs; - - for (int i = 0; i < param_.num_data; ++i) { - mxnet::TShape tshape = (*in_shape)[i]; - if (tshape.ndim() == 0) return false; - auto blob_ptr = new Blob(); - blob_ptr->Reshape(caffe::TShape2Vector(tshape)); - bot_blobs.push_back(blob_ptr); - } - - for (int i = 0; i < param_.num_out; ++i) - top_blobs.push_back(new Blob()); - - caffeOp_->SetUp(bot_blobs, top_blobs); - CHECK_EQ(in_shape->size(), caffeOp_->blobs().size() + param_.num_data); - // Set weight shape - CHECK_EQ(param_.num_weight, caffeOp_->blobs().size()); - for (int i = 0; i < param_.num_weight ; ++i) { - mxnet::TShape tshape = caffe::Vector2mxnet::TShape(caffeOp_->blobs()[i]->shape()); - SHAPE_ASSIGN_CHECK(*in_shape, i + param_.num_data, tshape); - } - // Initialize out shapes - out_shape->clear(); - for (auto blob : top_blobs) { - mxnet::TShape tshape = caffe::Vector2mxnet::TShape(blob->shape()); - out_shape->push_back(tshape); - } - - for (auto blob_ptr : bot_blobs) - delete blob_ptr; - for (auto blob_ptr : top_blobs) - delete blob_ptr; - return true; - } - - OperatorProperty* Copy() const override { - auto copy_prop = new CaffeOpProp(); - copy_prop->param_ = this->param_; - return copy_prop; - } - - std::string TypeString() const override { - return "CaffeOp"; - } - - Operator* CreateOperator(Context ctx) const override { - LOG(FATAL) << "Not Implemented."; - return NULL; - } - - Operator* CreateOperatorEx(Context ctx, mxnet::ShapeVector *in_shape, - std::vector *in_type) const override; - - private: - mutable CaffeOpParam param_; - mutable ::caffe::Layer *caffeOp_; -}; // class CaffeOpSymbol -#endif - -} // namespace op -} // namespace mxnet -#endif // PLUGIN_CAFFE_CAFFE_OP_INL_H_ diff --git a/plugin/caffe/caffe_op.cc b/plugin/caffe/caffe_op.cc deleted file mode 100644 index db80f4a90f74..000000000000 --- a/plugin/caffe/caffe_op.cc +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/*! - * Copyright (c) 2016 by Contributors - * \file caffe_op.cc - * \brief caffe operator - * \author Haoran Wang -*/ -#include "./caffe_op-inl.h" -namespace mxnet { -namespace op { - -template<> -Operator* CreateOp(CaffeOpParam param, int dtype) { - Operator *op = NULL; - switch (dtype) { - case mshadow::kFloat32: - op = new CaffeOp(param); - break; - case mshadow::kFloat64: - op = new CaffeOp(param); - break; - case mshadow::kFloat16: - LOG(FATAL) << "float16 layer is not supported by caffe"; - break; - case mshadow::kBfloat16: - LOG(FATAL) << "bfloat16 layer is not supported by caffe"; - break; - default: - LOG(FATAL) << "Unsupported type " << dtype; - } - return op; -} - -// DO_BIND_DISPATCH comes from static_operator_common.h -Operator *CaffeOpProp::CreateOperatorEx(Context ctx, mxnet::ShapeVector *in_shape, - std::vector *in_type) const { - std::vector out_type, aux_type; - mxnet::ShapeVector out_shape, aux_shape; - out_type.resize(this->ListOutputs().size()); - out_shape.resize(this->ListOutputs().size()); - aux_type.resize(this->ListAuxiliaryStates().size()); - aux_shape.resize(this->ListAuxiliaryStates().size()); - CHECK(InferType(in_type, &out_type, &aux_type)); - CHECK(InferShape(in_shape, &out_shape, &aux_shape)); - DO_BIND_DISPATCH(CreateOp, param_, (*in_type)[0]); -} - -DMLC_REGISTER_PARAMETER(CaffeOpParam); - -MXNET_REGISTER_OP_PROPERTY(CaffeOp, CaffeOpProp) -.describe("Apply caffe operator") -.add_argument("data", "Symbol[]", "List of tensors") -.add_arguments(CaffeOpParam::__FIELDS__()); - -} // namespace op -} // namespace mxnet diff --git a/plugin/caffe/caffe_op.cu b/plugin/caffe/caffe_op.cu deleted file mode 100644 index 7d4017b33ad5..000000000000 --- a/plugin/caffe/caffe_op.cu +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/*! - * Copyright (c) 2016 by Contributors - * \file caffe_operator_gpu.cc - * \brief caffe operator - * \author Haoran Wang -*/ -#include "./caffe_op-inl.h" -namespace mxnet { -namespace op { - -template<> -Operator *CreateOp(CaffeOpParam param, int dtype) { - Operator *op = NULL; - switch (dtype) { - case mshadow::kFloat32: - op = new CaffeOp(param); - break; - case mshadow::kFloat64: - op = new CaffeOp(param); - break; - case mshadow::kFloat16: - LOG(FATAL) << "float16 layer is not supported by caffe"; - break; - case mshadow::kBfloat16: - LOG(FATAL) << "bfloat16 layer is not supported by caffe"; - break; - default: - LOG(FATAL) << "Unsupported type " << dtype; - } - return op; -} - -} // namespace op -} // namespace mxnet diff --git a/plugin/caffe/caffe_stream.cc b/plugin/caffe/caffe_stream.cc deleted file mode 100644 index 823948a8aa2f..000000000000 --- a/plugin/caffe/caffe_stream.cc +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/*! - * Copyright (c) 2016 by Contributors - * \file caffe_stream.cc - * \brief define stream opertors >> and << - * \author Haoran Wang -*/ -#include"caffe_stream.h" - -namespace dmlc { -namespace parameter { - std::istringstream &operator>>(std::istringstream &is, ::caffe::LayerParameter ¶_) { - return is; - } - std::ostream &operator<<(std::ostream &os, ::caffe::LayerParameter ¶_) { - return os; - } -} -} diff --git a/plugin/caffe/caffe_stream.h b/plugin/caffe/caffe_stream.h deleted file mode 100644 index 228e3727daed..000000000000 --- a/plugin/caffe/caffe_stream.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/*! - * Copyright (c) 2016 by Contributors - * \file caffe_stream.h - * \brief define stream opertors >> and << - * \author Haoran Wang -*/ -#ifndef PLUGIN_CAFFE_CAFFE_STREAM_H_ -#define PLUGIN_CAFFE_CAFFE_STREAM_H_ - -#include -#include -namespace dmlc { -namespace parameter { - std::istringstream &operator>>(std::istringstream &is, ::caffe::LayerParameter ¶_); - std::ostream &operator<<(std::ostream &os, ::caffe::LayerParameter ¶_); -} -} - -#endif // PLUGIN_CAFFE_CAFFE_STREAM_H_ diff --git a/python/mxnet/gluon/metric.py b/python/mxnet/gluon/metric.py index 5b081ceac4d8..08ee1411824c 100644 --- a/python/mxnet/gluon/metric.py +++ b/python/mxnet/gluon/metric.py @@ -1804,15 +1804,6 @@ def __init__(self, name='torch', name, output_names=output_names, label_names=label_names) -@register -class Caffe(Loss): - """Dummy metric for caffe criterions.""" - def __init__(self, name='caffe', - output_names=None, label_names=None): - super(Caffe, self).__init__( - name, output_names=output_names, label_names=label_names) - - @register @use_np class CustomMetric(EvalMetric): diff --git a/python/mxnet/runtime.py b/python/mxnet/runtime.py index 27500e7eb772..28525ae65edf 100644 --- a/python/mxnet/runtime.py +++ b/python/mxnet/runtime.py @@ -40,8 +40,7 @@ [✖ CUDA, ✖ CUDNN, ✖ NCCL, ✖ CUDA_RTC, ✖ TENSORRT, ✔ CPU_SSE, ✔ CPU_SSE2, ✔ CPU_SSE3, ✔ CPU_SSE4_1, ✔ CPU_SSE4_2, ✖ CPU_SSE4A, ✔ CPU_AVX, ✖ CPU_AVX2, ✔ OPENMP, ✖ SSE, ✔ F16C, ✔ JEMALLOC, ✔ BLAS_OPEN, ✖ BLAS_ATLAS, ✖ BLAS_MKL, ✖ BLAS_APPLE, ✔ LAPACK, - ✖ MKLDNN, ✔ OPENCV, ✖ CAFFE, ✖ DIST_KVSTORE, ✖ CXX14, ✖ INT64_TENSOR_SIZE, - ✔ SIGNAL_HANDLER, ✔ DEBUG, ✖ TVM_OP] + ✖ MKLDNN, ✔ OPENCV, ✖ DIST_KVSTORE, ✖ INT64_TENSOR_SIZE, ✔ SIGNAL_HANDLER, ✔ DEBUG, ✖ TVM_OP] """ diff --git a/src/libinfo.cc b/src/libinfo.cc index 211444e857d2..d14aaf5769b2 100644 --- a/src/libinfo.cc +++ b/src/libinfo.cc @@ -84,7 +84,6 @@ class FeatureSet { feature_bits.set(OPENCV, MXNET_USE_OPENCV); // Misc - feature_bits.set(CAFFE, MXNET_USE_CAFFE); feature_bits.set(DIST_KVSTORE, MXNET_USE_DIST_KVSTORE); feature_bits.set(INT64_TENSOR_SIZE, MXNET_USE_INT64_TENSOR_SIZE); feature_bits.set(SIGNAL_HANDLER, MXNET_USE_SIGNAL_HANDLER); @@ -155,9 +154,7 @@ const std::vector EnumNames::names = { "LAPACK", "MKLDNN", "OPENCV", - "CAFFE", "DIST_KVSTORE", - "CXX14", "INT64_TENSOR_SIZE", "SIGNAL_HANDLER", "DEBUG", diff --git a/tests/jenkins/run_test.sh b/tests/jenkins/run_test.sh deleted file mode 100755 index 59516d46bcd0..000000000000 --- a/tests/jenkins/run_test.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - - -# Exit script with error if any errors occur - -echo "BUILD make" -cp make/config.mk . -echo "USE_CUDA=1" >> config.mk -echo "USE_CUDA_PATH=/usr/local/cuda" >> config.mk -echo "USE_CUDNN=1" >> config.mk -echo "DEV=1" >> config.mk -echo "EXTRA_OPERATORS=example/ssd/operator" >> config.mk -echo "USE_CPP_PACKAGE=1" >> config.mk - -set -e - -make -j$(nproc) || exit -1 - -echo "BUILD cpp_test" -make -j$(nproc) test || exit -1 -export MXNET_ENGINE_INFO=true -./build/tests/cpp/mxnet_test - -export MXNET_ENGINE_INFO=false -export PYTHONPATH=$(pwd)/python - -echo "BUILD python_test" -pytest --verbose tests/python/unittest || exit -1 -pytest --verbose tests/python/gpu/test_operator_gpu.py || exit -1 -pytest --verbose tests/python/train || exit -1 - -echo "BUILD scala_test" -export PATH=$PATH:/opt/apache-maven/bin -cd scala-package -mvn install || exit -1 - -# echo "BUILD julia_test" -# export MXNET_HOME="${PWD}" -# /home/ubuntu/julia/bin/julia -e 'try Pkg.clone("MXNet"); catch end; Pkg.checkout("MXNet"); Pkg.build("MXNet"); Pkg.test("MXNet")' || exit -1 diff --git a/tests/jenkins/run_test_amzn_linux_gpu.sh b/tests/jenkins/run_test_amzn_linux_gpu.sh deleted file mode 100755 index a257b9684ba0..000000000000 --- a/tests/jenkins/run_test_amzn_linux_gpu.sh +++ /dev/null @@ -1,65 +0,0 @@ -#!/bin/bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - - -# Exit script with error if any errors occur - -echo "BUILD make" -cp make/config.mk . -echo "USE_CUDA=0" >> config.mk -echo "USE_CUDNN=0" >> config.mk -echo "USE_BLAS=openblas" >> config.mk -echo "USE_CPP_PACKAGE=1" >> config.mk -echo "ADD_CFLAGS += -I/usr/include/openblas" >>config.mk -echo "GTEST_PATH=/usr/local/gtest" >> config.mk -echo 'export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH' >> ~/.profile -echo 'export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH' >> ~/.profile -JAVA_HOME=`/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.*.amzn1.x86_64[-1]` -echo 'export JAVA_HOME=${JAVA_HOME}' >> ~/.profile -echo 'export JRE_HOME=${JAVA_HOME}/jre' >> ~/.profile -echo 'export PATH=$PATH:/apache-maven-3.3.9/bin/:/usr/bin:${JAVA_HOME}/bin' >> ~/.profile -source ~/.profile -user=`id -u -n` - -set -e - -make -j 4 - -echo "BUILD cpp_test" -make -j 4 test -export MXNET_ENGINE_INFO=true -./build/tests/cpp/mxnet_test - -echo "BUILD valgrind_test" -valgrind ./build/tests/cpp/mxnet_test - -export MXNET_ENGINE_INFO=false -export PYTHONPATH=${PWD}/python - -echo "BUILD python_test" -pytest --verbose tests/python/unittest -pytest --verbose tests/python/train - -#echo "BUILD julia_test" -#export MXNET_HOME="${PWD}" -#julia -e 'try Pkg.clone("MXNet"); catch end; Pkg.checkout("MXNet"); Pkg.build("MXNet"); Pkg.test("MXNet")' || exit -1 - -echo "BUILD scala_test" -cd scala-package -mvn integration-test diff --git a/tests/jenkins/run_test_ubuntu.sh b/tests/jenkins/run_test_ubuntu.sh deleted file mode 100755 index 835bce9aeef7..000000000000 --- a/tests/jenkins/run_test_ubuntu.sh +++ /dev/null @@ -1,65 +0,0 @@ -#!/bin/bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - - -set -e - -echo "BUILD make" - -WITH_CAFFE_PLUGIN=0 - -if [ "$WITH_CAFFE_PLUGIN" == "1" ]; then -# Check out caffe - git clone https://github.com/BVLC/caffe - mkdir -p caffe/build - cd caffe/build - cmake .. - make -j$(nproc) - cd ../.. -fi - -cp make/config.mk . -echo "USE_CUDA=1" >> config.mk -echo "USE_CUDA_PATH=/usr/local/cuda" >> config.mk -echo "USE_CUDNN=1" >> config.mk -echo "DEV=1" >> config.mk -echo "EXTRA_OPERATORS=example/ssd/operator" >> config.mk -echo "USE_CPP_PACKAGE=1" >> config.mk - -if [ "$WITH_CAFFE_PLUGIN" == "1" ]; then - echo "CAFFE_PATH = $(pwd)/caffe" >> config.mk - echo "MXNET_PLUGINS += plugin/caffe/caffe.mk" >> config.mk -fi - -user=`id -u -n` - -make -j$(nproc) - -export PYTHONPATH=${PWD}/python - -echo "BUILD python_test" -pytest --verbose tests/python/unittest || exit 1 -pytest --verbose tests/python/gpu/test_operator_gpu.py || exit 1 -pytest --verbose tests/python/train || exit 1 - -echo "BUILD scala_test" -export PATH=$PATH:/opt/apache-maven/bin -cd scala-package -mvn integration-test || exit 1 - diff --git a/tests/python/unittest/test_runtime.py b/tests/python/unittest/test_runtime.py index d7017cfbfbb2..f1811554ba2d 100644 --- a/tests/python/unittest/test_runtime.py +++ b/tests/python/unittest/test_runtime.py @@ -26,7 +26,7 @@ def test_features(): features = Features() print(features) assert 'CUDA' in features - assert len(features) >= 30 + assert len(features) >= 20 def test_is_singleton(): From 98b3f73bd0f30034e3f6848eb75d38c30c8b60b4 Mon Sep 17 00:00:00 2001 From: Sheng Zha Date: Sat, 25 Jul 2020 16:19:36 -0700 Subject: [PATCH 19/46] add support for np.ndarray in autograd.function (#18790) --- python/mxnet/autograd.py | 14 ++++-- tests/python/unittest/test_autograd.py | 61 ++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 4 deletions(-) diff --git a/python/mxnet/autograd.py b/python/mxnet/autograd.py index f968275a1390..aac7cbc21a17 100644 --- a/python/mxnet/autograd.py +++ b/python/mxnet/autograd.py @@ -28,6 +28,7 @@ from .ndarray import NDArray, _ndarray_cls from .ndarray import _GRAD_REQ_MAP from .symbol import Symbol +from .util import is_np_array def set_recording(is_recording): #pylint: disable=redefined-outer-name @@ -448,25 +449,30 @@ def __call__(self, *inputs): outputs = (outputs,) key = Function._registry.inc() + if is_np_array(): + from .numpy import ndarray + array_cls = ndarray + else: + array_cls = NDArray def backward_entry(num_ograds, num_igrads, ptrs, reqs, is_train, _): """entry point for backward.""" # pylint: disable=W0613 try: - output_grads = [NDArray(ctypes.cast(i, NDArrayHandle), writable=False) \ + output_grads = [array_cls(ctypes.cast(i, NDArrayHandle), writable=False) \ for i in ptrs[:num_ograds]] - input_grads = [NDArray(ctypes.cast(i, NDArrayHandle), writable=True) \ + input_grads = [array_cls(ctypes.cast(i, NDArrayHandle), writable=True) \ for i in ptrs[num_ograds:num_ograds+num_igrads]] reqs = [reqs[i] for i in range(num_igrads)] rets = self.backward(*output_grads) - if isinstance(rets, NDArray): + if isinstance(rets, array_cls): rets = (rets,) assert len(rets) == len(input_grads), \ "%s.backward must return exactly the same number " \ "of NDArrays as the number of NDArrays arguments to forward." \ "Expecting %d got %d"%(self.__class__.name, len(input_grads), len(rets)) for igrad, ret, req in zip(input_grads, rets, reqs): - assert isinstance(ret, NDArray), \ + assert isinstance(ret, array_cls), \ "autograd.Function.backward must return NDArrays, not %s"%type(ret) if req == 0: # null return True diff --git a/tests/python/unittest/test_autograd.py b/tests/python/unittest/test_autograd.py index 6a75eed7d0bb..f9a7eccfa0a5 100644 --- a/tests/python/unittest/test_autograd.py +++ b/tests/python/unittest/test_autograd.py @@ -405,6 +405,67 @@ def backward(self, dY): X.wait_to_read() +@with_seed() +@pytest.mark.garbage_expected +@use_np +def test_np_function(): + class func(Function): + def forward(self, x, y): + m = x / y + n = x * y + self.save_for_backward(x, y) + return m, n + + def backward(self, dm, dn): + x, y = self.saved_tensors + dx = dm/y + dn*y + dy = dn*x - dm * x / y / y + return dx, dy + + f = func() + x = mx.np.random.uniform(size=(10,)) + x.attach_grad() + y = mx.np.random.uniform(size=(10,)) + y.attach_grad() + with record(): + m, n = f(x, y) + backward([m, n]) + + dx1 = x.grad.asnumpy() + dy1 = y.grad.asnumpy() + + with record(): + backward([x/y, x*y]) + + # Non-zero atol required, as exposed by seed 630179191 + atol = 1e-6 + assert_almost_equal(x.grad.asnumpy(), dx1, atol=atol) + assert_almost_equal(y.grad.asnumpy(), dy1, atol=atol) + + +@with_seed() +@pytest.mark.garbage_expected +@use_np +def test_np_function1(): + class Foo(mx.autograd.Function): + def __init__(self): + super(Foo, self).__init__() + + def forward(self, X): + return X + 1; + + def backward(self, dY): + return dY + + with mx.autograd.record(): + X = mx.np.zeros((3, 4)) + #X.attach_grad() # uncommenting this line works + for i in range(5): + f = Foo() + X = f(X) + X.wait_to_read() + + @with_seed() @pytest.mark.garbage_expected def test_get_symbol(): From 9e77e8134efd80f5ca701a3f1d03c036af7749f2 Mon Sep 17 00:00:00 2001 From: Przemyslaw Tredak Date: Mon, 27 Jul 2020 14:27:52 -0700 Subject: [PATCH 20/46] Update CUB and include it only for CUDA < 11 (#18799) --- 3rdparty/nvidia_cub | 2 +- CMakeLists.txt | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/3rdparty/nvidia_cub b/3rdparty/nvidia_cub index c3cceac115c0..0158fa19f286 160000 --- a/3rdparty/nvidia_cub +++ b/3rdparty/nvidia_cub @@ -1 +1 @@ -Subproject commit c3cceac115c072fb63df1836ff46d8c60d9eb304 +Subproject commit 0158fa19f28619886232defd412433974af89611 diff --git a/CMakeLists.txt b/CMakeLists.txt index d3e6c7440e16..162eeeade385 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -298,7 +298,6 @@ foreach(var ${C_CXX_INCLUDE_DIRECTORIES}) endforeach() include_directories("include") -include_directories("3rdparty/nvidia_cub") include_directories("3rdparty/tvm/nnvm/include") include_directories("3rdparty/tvm/include") include_directories("3rdparty/dmlc-core/include") @@ -606,6 +605,10 @@ if(USE_CUDA) link_directories(${CUDAToolkit_LIBRARY_DIR}) endif() +if(CUDAToolkit_VERSION_MAJOR LESS "11") + include_directories("3rdparty/nvidia_cub") +endif() + if(MSVC) set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /EHsc") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /EHsc /Gy") From 74430a92f5232808a169c9e238a419789a5c2fda Mon Sep 17 00:00:00 2001 From: phile Date: Tue, 28 Jul 2020 06:44:54 +0800 Subject: [PATCH 21/46] remove NLL in metric (#18794) --- python/mxnet/gluon/metric.py | 91 ++++------------------------ tests/python/unittest/test_metric.py | 20 +++--- 2 files changed, 26 insertions(+), 85 deletions(-) diff --git a/python/mxnet/gluon/metric.py b/python/mxnet/gluon/metric.py index 08ee1411824c..766a95a4d6db 100644 --- a/python/mxnet/gluon/metric.py +++ b/python/mxnet/gluon/metric.py @@ -1352,9 +1352,12 @@ class :math:`k`. Index of invalid label to ignore when counting. By default, sets to -1. If set to `None`, it will include all entries. - axis : int (default -1) + axis : int, default -1 The axis from prediction that was used to compute softmax. By default use the last axis. + from_logits : boolean, default False + Whether `pred` is expected to be a logits tensor. + By default, we assume that `pred` encodes a probability distribution. name : str Name of this metric instance for display. output_names : list of str, or None @@ -1373,12 +1376,13 @@ class :math:`k`. >>> print ce.get() ('cross-entropy', 0.57159948348999023) """ - def __init__(self, eps=1e-12, ignore_label=None, axis=-1, name='cross-entropy', - output_names=None, label_names=None): + def __init__(self, eps=1e-12, ignore_label=None, axis=-1, from_logits=False, + name='cross-entropy', output_names=None, label_names=None): super(CrossEntropy, self).__init__( name, output_names=output_names, label_names=label_names) self.ignore_label = ignore_label self.axis = axis + self.from_logits = from_logits self.eps = eps def update(self, labels, preds): @@ -1400,6 +1404,8 @@ def update(self, labels, preds): assert label.size == pred.size/pred.shape[-1], \ "shape mismatch: %s vs. %s"%(label.shape, pred.shape) label = label.reshape((label.size,)) + if self.from_logits: + pred = ndarray.softmax(pred, axis=self.axis) pred = ndarray.pick(pred.as_in_context(label.ctx), label.astype(dtype='int32'), axis=self.axis) label = label.as_np_ndarray() pred = pred.as_np_ndarray() @@ -1469,11 +1475,11 @@ class Perplexity(CrossEntropy): >>> print perp.get() ('Perplexity', 1.7710976285155853) """ - def __init__(self, eps=1e-12, ignore_label=None, axis=-1, name='perplexity', - output_names=None, label_names=None): + def __init__(self, eps=1e-12, ignore_label=None, axis=-1, from_logits=False, + name='perplexity', output_names=None, label_names=None): super(Perplexity, self).__init__( - name=name, eps=eps, ignore_label=ignore_label, axis=axis, - output_names=output_names, label_names=label_names) + eps=eps, ignore_label=ignore_label, axis=axis, from_logits=from_logits, + name=name, output_names=output_names, label_names=label_names) def get(self): if self.num_inst == 0: @@ -1482,77 +1488,6 @@ def get(self): return (self.name, math.exp(self.sum_metric/self.num_inst)) -@register -@alias('nll_loss') -@use_np -class NegativeLogLikelihood(EvalMetric): - """Computes the negative log-likelihood loss. - - The negative log-likelihoodd loss over a batch of sample size :math:`N` is given by - - .. math:: - -\\sum_{n=1}^{N}\\sum_{k=1}^{K}t_{nk}\\log (y_{nk}), - - where :math:`K` is the number of classes, :math:`y_{nk}` is the prediceted probability for - :math:`k`-th class for :math:`n`-th sample. :math:`t_{nk}=1` if and only if sample - :math:`n` belongs to class :math:`k`. - - Parameters - ---------- - eps : float - Negative log-likelihood loss is undefined for predicted value is 0, - so predicted values are added with the small constant. - name : str - Name of this metric instance for display. - output_names : list of str, or None - Name of predictions that should be used when updating with update_dict. - By default include all predictions. - label_names : list of str, or None - Name of labels that should be used when updating with update_dict. - By default include all labels. - - Examples - -------- - >>> predicts = [mx.nd.array([[0.3, 0.7], [0, 1.], [0.4, 0.6]])] - >>> labels = [mx.nd.array([0, 1, 1])] - >>> nll_loss = mx.gluon.metric.NegativeLogLikelihood() - >>> nll_loss.update(labels, predicts) - >>> print nll_loss.get() - ('nll-loss', 0.57159948348999023) - """ - def __init__(self, eps=1e-12, name='nll-loss', - output_names=None, label_names=None): - super(NegativeLogLikelihood, self).__init__( - name, eps=eps, - output_names=output_names, label_names=label_names) - self.eps = eps - - def update(self, labels, preds): - """Updates the internal evaluation result. - - Parameters - ---------- - labels : list of `NDArray` - The labels of the data. - - preds : list of `NDArray` - Predicted values. - """ - labels, preds = check_label_shapes(labels, preds, True) - - for label, pred in zip(labels, preds): - label = label.as_np_ndarray() - pred = pred.as_np_ndarray().as_in_ctx(label.ctx) - - label = label.reshape(-1) - num_examples = pred.shape[0] - assert label.shape[0] == num_examples, (label.shape[0], num_examples) - prob = pred[numpy.arange(num_examples, dtype=numpy.int64), numpy.int64(label)] - nll = (-numpy.log(prob + self.eps)).sum() - self.sum_metric += nll - self.num_inst += num_examples - - @register @alias('pearsonr') @use_np diff --git a/tests/python/unittest/test_metric.py b/tests/python/unittest/test_metric.py index 88b9d9cedce2..d66f4e97d708 100644 --- a/tests/python/unittest/test_metric.py +++ b/tests/python/unittest/test_metric.py @@ -39,19 +39,25 @@ def test_metrics(): check_metric('perplexity', axis=-1) check_metric('pearsonr') check_metric('pcc') - check_metric('nll_loss') + check_metric('ce') check_metric('loss') composite = mx.gluon.metric.create(['acc', 'f1']) check_metric(composite) -def test_nll_loss(): - metric = mx.gluon.metric.create('nll_loss') +def test_ce(): + metric = mx.gluon.metric.create('ce') pred = mx.nd.array([[0.2, 0.3, 0.5], [0.6, 0.1, 0.3]]) label = mx.nd.array([2, 1]) metric.update([label], [pred]) _, loss = metric.get() expected_loss = -(np.log(pred[0][2].asscalar()) + np.log(pred[1][1].asscalar())) / 2 assert loss == expected_loss + metric = mx.gluon.metric.create('ce', from_logits=True) + pred = mx.nd.log(pred) + metric.update([label], [pred]) + _, loss = metric.get() + np.testing.assert_almost_equal(loss, expected_loss) + def test_acc(): pred = mx.nd.array([[0.3, 0.7], [0, 1.], [0.4, 0.6]]) @@ -159,7 +165,7 @@ def test_multiclass_f1(): macroF1.update([label11, label12], [pred11, pred12]) assert microF1.num_inst == 6 assert macroF1.num_inst == 6 - + # from sklearn.metrics import f1_score # overall_pred = [0, 1, 2, 0, 1, 2] # overall_label = [0, 2, 1, 0, 0, 1] @@ -167,7 +173,7 @@ def test_multiclass_f1(): fmicro = 0.3333333333333333 #f1_score(overall_label, overall_pred, average="micro") np.testing.assert_almost_equal(microF1.get()[1], fmicro) np.testing.assert_almost_equal(macroF1.get()[1], fmacro) - + @xfail_when_nonstandard_decimal_separator def test_multilabel_f1(): microF1 = mx.gluon.metric.create("f1", class_type="multilabel", average="micro") @@ -183,7 +189,7 @@ def test_multilabel_f1(): macroF1.update([label], [pred]) microF1.update([label], [pred]) assert macroF1.get()[1] == 0.5 # one class is 1.0, the other is 0. (divided by 0) - np.testing.assert_almost_equal(microF1.get()[1], 2.0 / 3) + np.testing.assert_almost_equal(microF1.get()[1], 2.0 / 3) macroF1.reset() microF1.reset() @@ -209,7 +215,7 @@ def test_mcc(): microMCC = mx.gluon.metric.create("mcc") assert np.isnan(microMCC.get()[1]) - + # check divide by zero pred = mx.nd.array([[0.9, 0.1], [0.8, 0.2]]) From a807f6de32213cfec9462c8df2ca1fad4f9bcbad Mon Sep 17 00:00:00 2001 From: Sheng Zha Date: Mon, 27 Jul 2020 22:06:50 -0700 Subject: [PATCH 22/46] [NumPy] loss for np array (#17196) * loss for np/nd array * fix flaky --- python/mxnet/gluon/loss.py | 251 +++++++++++------- src/operator/nn/ctc_loss.cc | 1 + src/operator/nn/ctc_loss.cu | 1 + .../tensor/broadcast_reduce_norm_value.cc | 1 + tests/python/gpu/test_gluon_gpu.py | 1 + tests/python/unittest/test_loss.py | 28 +- tests/python/unittest/test_numpy_loss.py | 235 ++++++++++++++++ tests/python/unittest/test_numpy_op.py | 136 +++++----- 8 files changed, 470 insertions(+), 184 deletions(-) create mode 100644 tests/python/unittest/test_numpy_loss.py diff --git a/python/mxnet/gluon/loss.py b/python/mxnet/gluon/loss.py index 852a9a791d53..bc447b0f1c55 100644 --- a/python/mxnet/gluon/loss.py +++ b/python/mxnet/gluon/loss.py @@ -74,6 +74,26 @@ def _reshape_like(F, x, y): return F.reshape_like(x, y) +def _batch_mean(F, loss, batch_axis): + """Return mean on the specified batch axis, not keeping the axis""" + if is_np_array(): + axes = list(range(loss.ndim)) + del axes[batch_axis] + return F.np.mean(loss, axis=axes) + else: + return F.mean(loss, axis=batch_axis, exclude=True) + +def _batch_sum(F, loss, batch_axis): + """Return sum on the specified batch axis, not keeping the axis""" + if is_np_array(): + axes = list(range(loss.ndim)) + del axes[batch_axis] + return F.np.sum(loss, axis=axes) + else: + return F.sum(loss, axis=batch_axis, exclude=True) + + + class Loss(HybridBlock): """Base class for loss. @@ -142,16 +162,11 @@ def __init__(self, weight=1., batch_axis=0, **kwargs): super(L2Loss, self).__init__(weight, batch_axis, **kwargs) def hybrid_forward(self, F, pred, label, sample_weight=None): + square_fn = F.np.square if is_np_array() else F.square label = _reshape_like(F, label, pred) - loss = F.np.square(label - pred) if is_np_array() else F.square(label - pred) + loss = square_fn(label - pred) loss = _apply_weighting(F, loss, self._weight / 2, sample_weight) - if is_np_array(): - if F is ndarray: - return F.np.mean(loss, axis=tuple(range(1, loss.ndim))) - else: - return F.npx.batch_flatten(loss).mean(axis=1) - else: - return F.mean(loss, axis=self._batch_axis, exclude=True) + return _batch_mean(F, loss, self._batch_axis) class L1Loss(Loss): @@ -187,16 +202,11 @@ def __init__(self, weight=None, batch_axis=0, **kwargs): super(L1Loss, self).__init__(weight, batch_axis, **kwargs) def hybrid_forward(self, F, pred, label, sample_weight=None): + abs_fn = F.np.abs if is_np_array() else F.abs label = _reshape_like(F, label, pred) - loss = F.np.abs(label - pred) if is_np_array() else F.abs(label - pred) + loss = abs_fn(label - pred) loss = _apply_weighting(F, loss, self._weight, sample_weight) - if is_np_array(): - if F is ndarray: - return F.np.mean(loss, axis=tuple(range(1, loss.ndim))) - else: - return F.npx.batch_flatten(loss).mean(axis=1) - else: - return F.mean(loss, axis=self._batch_axis, exclude=True) + return _batch_mean(F, loss, self._batch_axis) class SigmoidBinaryCrossEntropyLoss(Loss): @@ -262,7 +272,6 @@ def __init__(self, from_sigmoid=False, weight=None, batch_axis=0, **kwargs): self._from_sigmoid = from_sigmoid def hybrid_forward(self, F, pred, label, sample_weight=None, pos_weight=None): - label = _reshape_like(F, label, pred) if is_np_array(): relu_fn = F.npx.relu act_fn = F.npx.activation @@ -275,6 +284,7 @@ def hybrid_forward(self, F, pred, label, sample_weight=None, pos_weight=None): abs_fn = F.abs mul_fn = F.broadcast_mul log_fn = F.log + label = _reshape_like(F, label, pred) if not self._from_sigmoid: if pos_weight is None: # We use the stable formula: max(x, 0) - x * z + log(1 + exp(-abs(x))) @@ -295,13 +305,7 @@ def hybrid_forward(self, F, pred, label, sample_weight=None, pos_weight=None): loss = -(mul_fn(log_fn(pred + eps) * label, pos_weight) + log_fn(1. - pred + eps) * (1. - label)) loss = _apply_weighting(F, loss, self._weight, sample_weight) - if is_np_array(): - if F is ndarray: - return F.np.mean(loss, axis=tuple(range(1, loss.ndim))) - else: - return F.npx.batch_flatten(loss).mean(axis=1) - else: - return F.mean(loss, axis=self._batch_axis, exclude=True) + return _batch_mean(F, loss, self._batch_axis) SigmoidBCELoss = SigmoidBinaryCrossEntropyLoss @@ -379,26 +383,20 @@ def __init__(self, axis=-1, sparse_label=True, from_logits=False, weight=None, def hybrid_forward(self, F, pred, label, sample_weight=None): if is_np_array(): - log_softmax = F.npx.log_softmax - pick = F.npx.pick + log_softmax_fn = F.npx.log_softmax + pick_fn = F.npx.pick else: - log_softmax = F.log_softmax - pick = F.pick + log_softmax_fn = F.log_softmax + pick_fn = F.pick if not self._from_logits: - pred = log_softmax(pred, self._axis) + pred = log_softmax_fn(pred, self._axis) if self._sparse_label: - loss = -pick(pred, label, axis=self._axis, keepdims=True) + loss = -pick_fn(pred, label, axis=self._axis, keepdims=True) else: label = _reshape_like(F, label, pred) loss = -(pred * label).sum(axis=self._axis, keepdims=True) loss = _apply_weighting(F, loss, self._weight, sample_weight) - if is_np_array(): - if F is ndarray: - return loss.mean(axis=tuple(range(1, loss.ndim))) - else: - return F.npx.batch_flatten(loss).mean(axis=1) - else: - return loss.mean(axis=self._batch_axis, exclude=True) + return _batch_mean(F, loss, self._batch_axis) SoftmaxCELoss = SoftmaxCrossEntropyLoss @@ -472,11 +470,17 @@ def __init__(self, from_logits=True, axis=-1, weight=None, batch_axis=0, self._axis = axis def hybrid_forward(self, F, pred, label, sample_weight=None): + if is_np_array(): + log_softmax_fn = F.npx.log_softmax + log_fn = F.np.log + else: + log_softmax_fn = F.log_softmax + log_fn = F.log if not self._from_logits: - pred = F.log_softmax(pred, self._axis) - loss = label * (F.log(label + 1e-12) - pred) + pred = log_softmax_fn(pred, self._axis) + loss = label * (log_fn(label + 1e-12) - pred) loss = _apply_weighting(F, loss, self._weight, sample_weight) - return F.sum(loss, axis=self._batch_axis, exclude=True) + return _batch_mean(F, loss, self._batch_axis) class CTCLoss(Loss): @@ -549,14 +553,20 @@ def __init__(self, layout='NTC', label_layout='NT', weight=None, **kwargs): def hybrid_forward(self, F, pred, label, pred_lengths=None, label_lengths=None, sample_weight=None): + if is_np_array(): + swapaxes_fn = F.np.swapaxes + ctc_fn = F.npx.ctc_loss + else: + swapaxes_fn = F.swapaxes + ctc_fn = F.ctc_loss if self._layout == 'NTC': - pred = F.swapaxes(pred, 0, 1) + pred = swapaxes_fn(pred, 0, 1) if self._batch_axis == 1: - label = F.swapaxes(label, 0, 1) - loss = F.CTCLoss(pred, label, pred_lengths, label_lengths, - use_data_lengths=pred_lengths is not None, - use_label_lengths=label_lengths is not None, - blank_label='last') + label = swapaxes_fn(label, 0, 1) + loss = ctc_fn(pred, label, pred_lengths, label_lengths, + use_data_lengths=pred_lengths is not None, + use_label_lengths=label_lengths is not None, + blank_label='last') return _apply_weighting(F, loss, self._weight, sample_weight) @@ -602,12 +612,20 @@ def __init__(self, rho=1, weight=None, batch_axis=0, **kwargs): self._rho = rho def hybrid_forward(self, F, pred, label, sample_weight=None): + if is_np_array(): + abs_fn = F.np.abs + where_fn = F.np.where + square_fn = F.np.square + else: + abs_fn = F.abs + where_fn = F.where + square_fn = F.square label = _reshape_like(F, label, pred) - loss = F.abs(label - pred) - loss = F.where(loss > self._rho, loss - 0.5 * self._rho, - (0.5 / self._rho) * F.square(loss)) + loss = abs_fn(label - pred) + loss = where_fn(loss > self._rho, loss - 0.5 * self._rho, + (0.5 / self._rho) * square_fn(loss)) loss = _apply_weighting(F, loss, self._weight, sample_weight) - return F.mean(loss, axis=self._batch_axis, exclude=True) + return _batch_mean(F, loss, self._batch_axis) class HingeLoss(Loss): @@ -649,10 +667,11 @@ def __init__(self, margin=1, weight=None, batch_axis=0, **kwargs): self._margin = margin def hybrid_forward(self, F, pred, label, sample_weight=None): + relu_fn = F.npx.relu if is_np_array() else F.relu label = _reshape_like(F, label, pred) - loss = F.relu(self._margin - pred * label) + loss = relu_fn(self._margin - pred * label) loss = _apply_weighting(F, loss, self._weight, sample_weight) - return F.mean(loss, axis=self._batch_axis, exclude=True) + return _batch_mean(F, loss, self._batch_axis) class SquaredHingeLoss(Loss): @@ -694,10 +713,16 @@ def __init__(self, margin=1, weight=None, batch_axis=0, **kwargs): self._margin = margin def hybrid_forward(self, F, pred, label, sample_weight=None): + if is_np_array(): + relu_fn = F.npx.relu + square_fn = F.np.square + else: + relu_fn = F.relu + square_fn = F.square label = _reshape_like(F, label, pred) - loss = F.square(F.relu(self._margin - pred * label)) + loss = square_fn(relu_fn(self._margin - pred * label)) loss = _apply_weighting(F, loss, self._weight, sample_weight) - return F.mean(loss, axis=self._batch_axis, exclude=True) + return _batch_mean(F, loss, self._batch_axis) class LogisticLoss(Loss): @@ -743,14 +768,22 @@ def __init__(self, weight=None, batch_axis=0, label_format='signed', **kwargs): % label_format) def hybrid_forward(self, F, pred, label, sample_weight=None): + if is_np_array(): + relu_fn = F.npx.relu + act_fn = F.npx.activation + abs_fn = F.np.abs + else: + relu_fn = F.relu + act_fn = F.Activation + abs_fn = F.abs label = _reshape_like(F, label, pred) if self._label_format == 'signed': label = (label + 1.0) / 2.0 # Transform label to be either 0 or 1 # Use a stable formula in computation - loss = F.relu(pred) - pred * label + \ - F.Activation(-F.abs(pred), act_type='softrelu') + loss = relu_fn(pred) - pred * label + \ + act_fn(-abs_fn(pred), act_type='softrelu') loss = _apply_weighting(F, loss, self._weight, sample_weight) - return F.mean(loss, axis=self._batch_axis, exclude=True) + return _batch_mean(F, loss, self._batch_axis) class TripletLoss(Loss): @@ -790,13 +823,18 @@ def __init__(self, margin=1, weight=None, batch_axis=0, **kwargs): super(TripletLoss, self).__init__(weight, batch_axis, **kwargs) self._margin = margin - def hybrid_forward(self, F, pred, positive, negative): + def hybrid_forward(self, F, pred, positive, negative, sample_weight=None): + if is_np_array(): + relu_fn = F.npx.relu + square_fn = F.np.square + else: + relu_fn = F.relu + square_fn = F.square positive = _reshape_like(F, positive, pred) negative = _reshape_like(F, negative, pred) - loss = F.sum(F.square(positive - pred) - F.square(negative - pred), - axis=self._batch_axis, exclude=True) - loss = F.relu(loss + self._margin) - return _apply_weighting(F, loss, self._weight, None) + loss = _batch_sum(F, square_fn(positive - pred) - square_fn(negative - pred), self._batch_axis) + loss = relu_fn(loss + self._margin) + return _apply_weighting(F, loss, self._weight, sample_weight) class PoissonNLLLoss(Loss): @@ -845,20 +883,26 @@ def __init__(self, weight=None, from_logits=True, batch_axis=0, compute_full=Fal self._compute_full = compute_full def hybrid_forward(self, F, pred, target, sample_weight=None, epsilon=1e-08): + if is_np_array(): + exp_fn = F.np.exp + log_fn = F.np.log + else: + exp_fn = F.exp + log_fn = F.log target = _reshape_like(F, target, pred) if self._from_logits: - loss = F.exp(pred) - target * pred + loss = exp_fn(pred) - target * pred else: - loss = pred - target * F.log(pred + epsilon) + loss = pred - target * log_fn(pred + epsilon) if self._compute_full: # Using numpy's pi value stirling_factor = target * \ - F.log(target) - target + 0.5 * F.log(2 * target * np.pi) + log_fn(target) - target + 0.5 * log_fn(2 * target * np.pi) target_gt_1 = target > 1 stirling_factor *= target_gt_1 loss += stirling_factor loss = _apply_weighting(F, loss, self._weight, sample_weight) - return F.mean(loss) + return _batch_mean(F, loss, self._batch_axis) class CosineEmbeddingLoss(Loss): @@ -902,33 +946,42 @@ def __init__(self, weight=None, batch_axis=0, margin=0, **kwargs): self._margin = margin def hybrid_forward(self, F, input1, input2, label, sample_weight=None): + if is_np_array(): + where_fn = F.np.where + clip_fn = F.np.clip + else: + where_fn = F.where + clip_fn = F.clip + input1 = _reshape_like(F, input1, input2) - label = label.reshape((-1, 1)) cos_sim = self._cosine_similarity(F, input1, input2) - y_1 = label == 1 - y_minus_1 = label == -1 - cos_sim_a = (1 - cos_sim) * y_1 + label = _reshape_like(F, label, cos_sim) + loss = where_fn(label == 1, + 1 - cos_sim, + clip_fn(cos_sim - self._margin, 0, 1 - self._margin)) - if F is ndarray: - z_array = F.array([0]) - else: - z_array = F.zeros((1, 1)) - cos_sim_b = F.broadcast_maximum( - z_array, y_minus_1 * (cos_sim - self._margin), axis=1) - loss = cos_sim_a + cos_sim_b loss = _apply_weighting(F, loss, self._weight, sample_weight) - return loss + return _batch_mean(F, loss, self._batch_axis) def _cosine_similarity(self, F, x, y, axis=-1): - # Calculates the cosine similarity between 2 vectors - x_norm = F.norm(x, axis=axis).reshape((-1, 1)) - y_norm = F.norm(y, axis=axis).reshape((-1, 1)) - x_dot_y = F.sum(x * y, axis=axis).reshape((-1, 1)) - if F is ndarray: - eps_arr = F.array([1e-12]) + if is_np_array(): + reshape_fn = F.npx.reshape + norm_fn = F.npx.norm + sum_fn = F.np.sum + full_fn = F.np.full + max_fn = F.np.maximum else: - eps_arr = F.full((1, 1), 1e-12) - return (x_dot_y / F.broadcast_maximum(x_norm * y_norm, eps_arr)) + reshape_fn = F.reshape + norm_fn = F.norm + sum_fn = F.sum + full_fn = F.full + max_fn = F.broadcast_maximum + # Calculates the cosine similarity between 2 vectors + x_norm = reshape_fn(norm_fn(x, axis=axis), (-1, 1)) + y_norm = reshape_fn(norm_fn(y, axis=axis), (-1, 1)) + x_dot_y = reshape_fn(sum_fn(x * y, axis=axis), (-1, 1)) + eps_arr = full_fn((1, 1), 1e-12) + return (x_dot_y / max_fn(x_norm * y_norm, eps_arr)) class SDMLLoss(Loss): @@ -972,18 +1025,24 @@ def __init__(self, smoothing_parameter=0.3, weight=1., batch_axis=0, **kwargs): self.kl_loss = KLDivLoss(from_logits=True) self.smoothing_parameter = smoothing_parameter # Smoothing probability mass - def _compute_distances(self, x1, x2): + def _compute_distances(self, F, x1, x2): """ This function computes the euclidean distance between every vector in the two batches in input. """ + if is_np_array(): + expand_dims_fn = F.np.expand_dims + broadcast_to_fn = F.np.broadcast_to + else: + expand_dims_fn = F.expand_dims + broadcast_to_fn = F.broadcast_to # extracting sizes expecting [batch_size, dim] assert x1.shape == x2.shape batch_size, dim = x1.shape # expanding both tensor form [batch_size, dim] to [batch_size, batch_size, dim] - x1_ = x1.expand_dims(1).broadcast_to([batch_size, batch_size, dim]) - x2_ = x2.expand_dims(0).broadcast_to([batch_size, batch_size, dim]) + x1_ = broadcast_to_fn(expand_dims_fn(x1, 1), [batch_size, batch_size, dim]) + x2_ = broadcast_to_fn(expand_dims_fn(x2, 0), [batch_size, batch_size, dim]) # pointwise squared differences squared_diffs = (x1_ - x2_)**2 # sum of squared differences distance @@ -1015,7 +1074,7 @@ def _compute_labels(self, F, batch_size): return labels - def _loss(self, F, x1, x2): + def hybrid_forward(self, F, x1, x2): """ the function computes the kl divergence between the negative distances (internally it compute a softmax casting into probabilities) and the @@ -1033,15 +1092,15 @@ def _loss(self, F, x1, x2): learn to predict french president comparing it with all the other vectors in batch 2 """ + if is_np_array(): + log_softmax_fn = F.npx.log_softmax + else: + log_softmax_fn = F.log_softmax batch_size = x1.shape[0] labels = self._compute_labels(F, batch_size) - distances = self._compute_distances(x1, x2) - log_probabilities = F.log_softmax(-distances, axis=1) + distances = self._compute_distances(F, x1, x2) + log_probabilities = log_softmax_fn(-distances, axis=1) # multiply for the number of labels to obtain the correct loss (gluon kl_loss averages instead of sum) # PR#18423:multiply for the number of labels should multiply x1.shape[1] rather than x1.shape[0]) # After PR#18423, it is no need to multiply it anymore. return self.kl_loss(log_probabilities, labels.as_in_context(distances.context)) - - - def hybrid_forward(self, F, x1, x2): - return self._loss(F, x1, x2) diff --git a/src/operator/nn/ctc_loss.cc b/src/operator/nn/ctc_loss.cc index 096ef8c0d7b4..59f89f0576f3 100644 --- a/src/operator/nn/ctc_loss.cc +++ b/src/operator/nn/ctc_loss.cc @@ -50,6 +50,7 @@ DMLC_REGISTER_PARAMETER(CTCLossOpParam); NNVM_REGISTER_OP(CTCLoss) .add_alias("ctc_loss") +.add_alias("_npx_ctc_loss") .add_alias("_contrib_CTCLoss") .add_alias("_contrib_ctc_loss") .describe(R"code(Connectionist Temporal Classification Loss. diff --git a/src/operator/nn/ctc_loss.cu b/src/operator/nn/ctc_loss.cu index a4491bf6986e..c6952d33c86a 100644 --- a/src/operator/nn/ctc_loss.cu +++ b/src/operator/nn/ctc_loss.cu @@ -51,6 +51,7 @@ namespace op { NNVM_REGISTER_OP(CTCLoss) .add_alias("ctc_loss") +.add_alias("_npx_ctc_loss") .add_alias("_contrib_ctc_loss") .add_alias("_contrib_CTCLoss") .set_attr("FCompute", CTCLossOpForward); diff --git a/src/operator/tensor/broadcast_reduce_norm_value.cc b/src/operator/tensor/broadcast_reduce_norm_value.cc index 557c4d9e7746..43a22b2a8314 100644 --- a/src/operator/tensor/broadcast_reduce_norm_value.cc +++ b/src/operator/tensor/broadcast_reduce_norm_value.cc @@ -87,6 +87,7 @@ Examples:: norm(csr) = [5.47722578] )code" ADD_FILELINE) +.add_alias("_npx_norm") .set_num_inputs(1) .set_num_outputs(1) .set_attr_parser(ParamParser) diff --git a/tests/python/gpu/test_gluon_gpu.py b/tests/python/gpu/test_gluon_gpu.py index 278ea02fce98..27325dbcf3c1 100644 --- a/tests/python/gpu/test_gluon_gpu.py +++ b/tests/python/gpu/test_gluon_gpu.py @@ -33,6 +33,7 @@ from common import setup_module, with_seed, teardown_module, assert_raises_cudnn_not_satisfied, run_in_spawned_process from test_gluon import * from test_loss import * +from test_numpy_loss import * from test_gluon_rnn import * set_default_context(mx.gpu(0)) diff --git a/tests/python/unittest/test_loss.py b/tests/python/unittest/test_loss.py index 9c1d496d715e..80d8cde5050f 100644 --- a/tests/python/unittest/test_loss.py +++ b/tests/python/unittest/test_loss.py @@ -56,16 +56,6 @@ def test_loss_ndarray(): assert_almost_equal(L, np.array([ 1.06346405, 0.04858733]), rtol=1e-3, atol=1e-4) -def get_net(num_hidden, flatten=True): - data = mx.symbol.Variable('data') - fc1 = mx.symbol.FullyConnected(data, name='fc1', num_hidden=128, flatten=flatten) - act1 = mx.symbol.Activation(fc1, name='relu1', act_type="relu") - fc2 = mx.symbol.FullyConnected(act1, name = 'fc2', num_hidden = 64, flatten=flatten) - act2 = mx.symbol.Activation(fc2, name='relu2', act_type="relu") - fc3 = mx.symbol.FullyConnected(act2, name='fc3', num_hidden=num_hidden, flatten=flatten) - return fc3 - - @with_seed() def test_bce_equal_ce2(): N = 100 @@ -163,7 +153,7 @@ def test_cosine_loss(): denominator = mx.nd.sqrt(mx.nd.sum(input1**2, axis=1, keepdims=True)) \ * mx.nd.sqrt(mx.nd.sum(input2**2, axis=1, keepdims=True)) numpy_loss = mx.nd.where(label == 1, 1-numerator/denominator, \ - mx.nd.broadcast_maximum(mx.nd.array([0]), numerator/denominator, axis=1)) + mx.nd.broadcast_maximum(mx.nd.array([0]), numerator/denominator, axis=1)).reshape((-1,)) assert_almost_equal(loss.asnumpy(), numpy_loss.asnumpy(), rtol=1e-3, atol=1e-5) @xfail_when_nonstandard_decimal_separator @@ -186,25 +176,23 @@ def test_poisson_nllloss(): #Calculating by brute formula for default value of from_logits = True # 1) Testing for flag logits = True - brute_loss = np.mean(np.exp(pred.asnumpy()) - target.asnumpy() * pred.asnumpy()) + brute_loss = np.mean(np.exp(pred.asnumpy()) - target.asnumpy() * pred.asnumpy(), axis=1) loss_withlogits = Loss(pred, target) - assert_almost_equal(brute_loss, loss_withlogits.asscalar()) + assert_almost_equal(brute_loss, loss_withlogits) #2) Testing for flag logits = False loss_no_logits = Loss_no_logits(pred, target) - np_loss_no_logits = np.mean(pred.asnumpy() - target.asnumpy() * np.log(pred.asnumpy() + 1e-08)) - if np.isnan(loss_no_logits.asscalar()): - assert_almost_equal(np.isnan(np_loss_no_logits), np.isnan(loss_no_logits.asscalar())) - else: - assert_almost_equal(np_loss_no_logits, loss_no_logits.asscalar()) + np_loss_no_logits = np.mean(pred.asnumpy() - target.asnumpy() * np.log(pred.asnumpy() + 1e-08), + axis=1) + assert_almost_equal(np_loss_no_logits, loss_no_logits.asnumpy()) #3) Testing for Sterling approximation shape=(2, 3) np_pred = np.random.uniform(1, 5, shape) np_target = np.random.uniform(1, 5, shape) np_compute_full = np.mean((np_pred - np_target * np.log(np_pred + 1e-08)) + ((np_target * np.log(np_target)-\ - np_target + 0.5 * np.log(2 * np_target * np.pi))*(np_target > 1))) + np_target + 0.5 * np.log(2 * np_target * np.pi))*(np_target > 1)), axis=1) Loss_compute_full = gluon.loss.PoissonNLLLoss(from_logits=False, compute_full=True) loss_compute_full = Loss_compute_full(mx.nd.array(np_pred), mx.nd.array(np_target)) - assert_almost_equal(np_compute_full, loss_compute_full.asscalar()) + assert_almost_equal(np_compute_full, loss_compute_full) diff --git a/tests/python/unittest/test_numpy_loss.py b/tests/python/unittest/test_numpy_loss.py new file mode 100644 index 000000000000..6c63546f85b1 --- /dev/null +++ b/tests/python/unittest/test_numpy_loss.py @@ -0,0 +1,235 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +import mxnet as mx +import numpy as np +from mxnet import gluon, autograd +from mxnet.test_utils import assert_almost_equal, default_context, use_np +from common import setup_module, with_seed, teardown_module, xfail_when_nonstandard_decimal_separator +import unittest + + +@xfail_when_nonstandard_decimal_separator +@with_seed() +@use_np +def test_loss_np_ndarray(): + output = mx.np.array([1, 2, 3, 4]) + label = mx.np.array([1, 3, 5, 7]) + weighting = mx.np.array([0.5, 1, 0.5, 1]) + + loss = gluon.loss.L1Loss() + assert mx.np.sum(loss(output, label)) == 6. + loss = gluon.loss.L1Loss(weight=0.5) + assert mx.np.sum(loss(output, label)) == 3. + loss = gluon.loss.L1Loss() + assert mx.np.sum(loss(output, label, weighting)) == 5. + + loss = gluon.loss.L2Loss() + assert mx.np.sum(loss(output, label)) == 7. + loss = gluon.loss.L2Loss(weight=0.25) + assert mx.np.sum(loss(output, label)) == 1.75 + loss = gluon.loss.L2Loss() + assert mx.np.sum(loss(output, label, weighting)) == 6 + + loss = gluon.loss.HuberLoss() + assert mx.np.sum(loss(output, label)) == 4.5 + loss = gluon.loss.HuberLoss(weight=0.25) + assert mx.np.sum(loss(output, label)) == 1.125 + loss = gluon.loss.HuberLoss() + assert mx.np.sum(loss(output, label, weighting)) == 3.75 + + loss = gluon.loss.HingeLoss(margin=10) + assert mx.np.sum(loss(output, label)) == 13. + loss = gluon.loss.HingeLoss(margin=8, weight=0.25) + assert mx.np.sum(loss(output, label)) == 2.25 + loss = gluon.loss.HingeLoss(margin=7) + assert mx.np.sum(loss(output, label, weighting)) == 4. + + loss = gluon.loss.SquaredHingeLoss(margin=10) + assert mx.np.sum(loss(output, label)) == 97. + loss = gluon.loss.SquaredHingeLoss(margin=8, weight=0.25) + assert mx.np.sum(loss(output, label)) == 13.25 + loss = gluon.loss.SquaredHingeLoss(margin=7) + assert mx.np.sum(loss(output, label, weighting)) == 19. + + loss = gluon.loss.TripletLoss(margin=10) + assert mx.np.sum(loss(output, label, -label)) == 6. + loss = gluon.loss.TripletLoss(margin=8, weight=0.25) + assert mx.np.sum(loss(output, label, -label)) == 1. + loss = gluon.loss.TripletLoss(margin=7) + assert mx.np.sum(loss(output, label, -label, weighting)) == 1.5 + + output = mx.np.array([[0, 2], [1, 4]]) + label = mx.np.array([0, 1]) + weighting = mx.np.array([[0.5], [1.0]]) + + loss = gluon.loss.SoftmaxCrossEntropyLoss() + L = loss(output, label).asnumpy() + assert_almost_equal(L, np.array([ 2.12692809, 0.04858733]), rtol=1e-3, atol=1e-4) + + L = loss(output, label, weighting).asnumpy() + assert_almost_equal(L, np.array([ 1.06346405, 0.04858733]), rtol=1e-3, atol=1e-4) + + +@with_seed() +@use_np +def test_bce_equal_ce2(): + N = 100 + loss1 = gluon.loss.SigmoidBCELoss(from_sigmoid=True) + loss2 = gluon.loss.SoftmaxCELoss(from_logits=True) + out1 = mx.np.random.uniform(0.1, 0.9, size=(N, 1)) + out2 = mx.np.log(mx.np.concatenate((1-out1, out1), axis=1) + 1e-8) + label = mx.np.round(mx.np.random.uniform(0, 1, size=(N, 1))) + assert_almost_equal(loss1(out1, label).asnumpy(), loss2(out2, label).asnumpy()) + +@use_np +def test_logistic_loss_equal_bce(): + N = 100 + loss_binary = gluon.loss.LogisticLoss(label_format='binary') + loss_signed = gluon.loss.LogisticLoss(label_format='signed') + loss_bce = gluon.loss.SigmoidBCELoss(from_sigmoid=False) + data = mx.np.random.uniform(-10, 10, size=(N, 1)) + label = mx.np.round(mx.np.random.uniform(0, 1, size=(N, 1))) + assert_almost_equal(loss_binary(data, label), loss_bce(data, label), atol=1e-6) + assert_almost_equal(loss_signed(data, 2 * label - 1), loss_bce(data, label), atol=1e-6) + + +@with_seed() +@use_np +def test_ctc_loss(): + loss = gluon.loss.CTCLoss() + l = loss(mx.np.ones((2,20,4)), mx.np.array([[1,0,-1,-1],[2,1,1,-1]])) + assert_almost_equal(l, np.array([18.82820702, 16.50581741])) + + loss = gluon.loss.CTCLoss(layout='TNC') + l = loss(mx.np.ones((20,2,4)), mx.np.array([[1,0,-1,-1],[2,1,1,-1]])) + assert_almost_equal(l, np.array([18.82820702, 16.50581741])) + + loss = gluon.loss.CTCLoss(layout='TNC', label_layout='TN') + l = loss(mx.np.ones((20,2,4)), mx.np.array([[1,0,-1,-1],[2,1,1,-1]]).T) + assert_almost_equal(l, np.array([18.82820702, 16.50581741])) + + loss = gluon.loss.CTCLoss() + l = loss(mx.np.ones((2,20,4)), mx.np.array([[2,1,2,2],[3,2,2,2]]), None, mx.np.array([2,3])) + assert_almost_equal(l, np.array([18.82820702, 16.50581741])) + + loss = gluon.loss.CTCLoss() + l = loss(mx.np.ones((2,25,4)), mx.np.array([[2,1,-1,-1],[3,2,2,-1]]), mx.np.array([20,20])) + assert_almost_equal(l, np.array([18.82820702, 16.50581741])) + + loss = gluon.loss.CTCLoss() + l = loss(mx.np.ones((2,25,4)), mx.np.array([[2,1,3,3],[3,2,2,3]]), mx.np.array([20,20]), mx.np.array([2,3])) + assert_almost_equal(l, np.array([18.82820702, 16.50581741])) + + +@xfail_when_nonstandard_decimal_separator +@with_seed() +@use_np +def test_sdml_loss(): + + N = 5 # number of samples + DIM = 10 # Dimensionality + EPOCHS = 20 + + # Generate randomized data and 'positive' samples + data = mx.np.random.uniform(-1, 1, size=(N, DIM)) + pos = data + mx.np.random.uniform(-0.1, 0.1, size=(N, DIM)) # correlated paired data + data_iter = mx.io.NDArrayIter({'data' : data, 'pos' : pos}, batch_size=N) + + # Init model and trainer + sdml_loss = gluon.loss.SDMLLoss() + model = gluon.nn.Dense(DIM, activation='tanh') # Simple NN encoder + model.initialize(mx.init.Xavier(), ctx=mx.current_context()) + trainer = gluon.Trainer(model.collect_params(), 'adam', {'learning_rate' : 0.1}) + + for i in range(EPOCHS): # Training loop + data_iter.reset() + for iter_batch in data_iter: + batch = [datum.as_in_ctx(mx.current_context()).as_np_ndarray() for datum in iter_batch.data] + with autograd.record(): + data, pos = batch + z_data, z_pos = model(data), model(pos) + loss = sdml_loss(z_data, z_pos) + loss.backward() + trainer.step(1) + + # After training euclidean distance between aligned pairs should be lower than all non-aligned pairs + avg_loss = loss.sum()/len(loss) + assert(avg_loss < 0.05) + +@with_seed() +@use_np +def test_cosine_loss(): + #Generating samples + input1 = mx.np.random.randn(3, 2) + input2 = mx.np.random.randn(3, 2) + label = mx.np.sign(mx.np.random.randn(input1.shape[0])) + #Calculating loss from cosine embedding loss function in Gluon + Loss = gluon.loss.CosineEmbeddingLoss() + loss = Loss(input1, input2, label) + + # Calculating the loss Numpy way + numerator = mx.np.sum(input1 * input2, keepdims=True, axis=1) + denominator = mx.np.sqrt(mx.np.sum(input1**2, axis=1, keepdims=True)) \ + * mx.np.sqrt(mx.np.sum(input2**2, axis=1, keepdims=True)) + x = numerator/denominator + label = mx.npx.reshape(label, (-1, 1)) + numpy_loss = mx.npx.reshape( + mx.np.where(label == 1, 1-x, mx.npx.relu(x)), (-1,)) + assert_almost_equal(loss.asnumpy(), numpy_loss.asnumpy(), rtol=1e-3, atol=1e-5) + +@xfail_when_nonstandard_decimal_separator +@use_np +def test_poisson_nllloss(): + shape=(3, 4) + not_axis0 = tuple(range(1, len(shape))) + pred = mx.np.random.normal(size=shape) + min_pred = mx.np.min(pred) + #This is necessary to ensure only positive random values are generated for prediction, + # to avoid ivalid log calculation + pred[:] = pred + mx.np.abs(min_pred) + target = mx.np.random.normal(size=shape) + min_target = mx.np.min(target) + #This is necessary to ensure only positive random values are generated for prediction, + # to avoid ivalid log calculation + target[:] += mx.np.abs(min_target) + + Loss = gluon.loss.PoissonNLLLoss(from_logits=True) + Loss_no_logits = gluon.loss.PoissonNLLLoss(from_logits=False) + #Calculating by brute formula for default value of from_logits = True + + # 1) Testing for flag logits = True + brute_loss = mx.np.mean(mx.np.exp(pred) - target * pred, axis=1) + loss_withlogits = Loss(pred, target) + assert_almost_equal(brute_loss, loss_withlogits) + + #2) Testing for flag logits = False + loss_no_logits = Loss_no_logits(pred, target) + np_loss_no_logits = mx.np.mean(pred - target * mx.np.log(pred + 1e-08), + axis=1) + assert_almost_equal(np_loss_no_logits, loss_no_logits) + + #3) Testing for Sterling approximation + shape=(2, 3) + np_pred = mx.np.random.uniform(1, 5, shape) + np_target = mx.np.random.uniform(1, 5, shape) + np_compute_full = mx.np.mean((np_pred - np_target * mx.np.log(np_pred + 1e-08)) + ((np_target * np.log(np_target)-\ + np_target + 0.5 * np.log(2 * np_target * np.pi))*(np_target > 1)), axis=1) + Loss_compute_full = gluon.loss.PoissonNLLLoss(from_logits=False, compute_full=True) + loss_compute_full = Loss_compute_full(np_pred, np_target) + assert_almost_equal(np_compute_full, loss_compute_full) + diff --git a/tests/python/unittest/test_numpy_op.py b/tests/python/unittest/test_numpy_op.py index ed9886ea8f75..76181e148950 100644 --- a/tests/python/unittest/test_numpy_op.py +++ b/tests/python/unittest/test_numpy_op.py @@ -852,7 +852,23 @@ def _test_np_exception(func, shape, dim): @with_seed() @use_np -def test_np_average(): +@pytest.mark.parametrize('a_shape,w_shape,axes', [ + ((3, 5), (3, 5), None), + ((4, 5, 6), (4, 5, 6), (0, 2)), + ((3,), (3,), 0), + ((2, 3), (3,), 1), + ((2, 3, 4), (2,), 0), + ((2, 3, 4), (3,), 1), + ((2, 3, 4), (4,), -1), + ((2, 3, 4, 5), (5,), 3) +]) +@pytest.mark.parametrize('dtype', ['float32', 'float64']) +@pytest.mark.parametrize('hybridize', [True, False]) +@pytest.mark.parametrize('is_weighted', [True, False]) +@pytest.mark.parametrize('returned', [True, False]) +@pytest.mark.parametrize('req_a', ['null', 'add', 'write']) +def test_np_average(a_shape, w_shape, axes, is_weighted, req_a, + hybridize, returned, dtype): class TestAverage(HybridBlock): def __init__(self, axis=None, returned=False): super(TestAverage, self).__init__() @@ -894,73 +910,57 @@ def avg_backward(a, w, avg, axes, init_a_grad=None, init_w_grad=None): w_grad += init_w_grad.asnumpy() return [a_grad, w_grad] - tensor_shapes = [ - ((3, 5), (3, 5), None), # (a_shape, w_shape, axes) - ((4, 5, 6), (4, 5, 6), (0, 2)), - ((3,), (3,), 0), - ((2, 3), (3,), 1), - ((2, 3, 4), (2,), 0), - ((2, 3, 4), (3,), 1), - ((2, 3, 4), (4,), -1), - ((2, 3, 4, 5), (5,), 3) - ] - - flags = [True, False] - dtypes = ['float32', 'float64'] - reqs = ['null', 'add', 'write'] - for hybridize, returned, (a_shape, w_shape, axes), dtype, is_weighted, req_a in \ - itertools.product(flags, flags, tensor_shapes, dtypes, flags, reqs): - if req_a == 'null' and not is_weighted: - continue - rtol, atol = 1e-3, 1e-4 - test_average = TestAverage(axes, returned) - if hybridize: - test_average.hybridize() - a = np.random.uniform(-1.0, 1.0, size=a_shape, dtype=dtype) - a.attach_grad(req_a) - init_a_grad = np.random.uniform(-1.0, 1.0, size=a_shape, dtype=dtype) if req_a == 'add' else None - init_w_grad = None - req_w = req_a - w, np_w = None, None - if is_weighted: - w = np.random.uniform(-1.0, 1.0, size=w_shape, dtype=dtype) - if req_a == 'null': - req_w = random.choice(['add', 'write']) - w.attach_grad(req_w) - if req_w == 'add': - init_w_grad = np.random.uniform(-1.0, 1.0, size=w_shape, dtype=dtype) - np_w = w.asnumpy() - np_out = _np.average(a.asnumpy(), axis=axes, weights=np_w, returned=returned) - with mx.autograd.record(): - mx_out = test_average(a, w) - if returned: - np_out, np_sum_of_weights = np_out - mx_out, mx_sum_of_weights = mx_out - assert_almost_equal(mx_sum_of_weights.asnumpy(), np_sum_of_weights, rtol=rtol, atol=atol) - assert mx_out.shape == np_out.shape - assert_almost_equal(mx_out.asnumpy(), np_out.astype(dtype), rtol=rtol, atol=atol) - if req_a == 'add': - a.grad[:] = init_a_grad - if is_weighted and req_w == 'add': - w.grad[:] = init_w_grad - mx_out.backward() - # Code to get reference backward value - a_grad, w_grad = avg_backward(a.asnumpy(), np_w, np_out, axes, init_a_grad, init_w_grad) - if is_weighted: - assert_almost_equal(w.grad.asnumpy(), w_grad, rtol=rtol*10, atol=atol*10) + if req_a == 'null' and not is_weighted: + return + rtol, atol = 1e-3, 1e-4 + test_average = TestAverage(axes, returned) + if hybridize: + test_average.hybridize() + a = np.random.uniform(-1.0, 1.0, size=a_shape, dtype=dtype) + a.attach_grad(req_a) + init_a_grad = np.random.uniform(-1.0, 1.0, size=a_shape, dtype=dtype) if req_a == 'add' else None + init_w_grad = None + req_w = req_a + w, np_w = None, None + if is_weighted: + w = np.random.uniform(-1.0, 1.0, size=w_shape, dtype=dtype) if req_a == 'null': - assert a.grad is None - else: - assert_almost_equal(a.grad.asnumpy(), a_grad, rtol=rtol, atol=atol) + req_w = random.choice(['add', 'write']) + w.attach_grad(req_w) + if req_w == 'add': + init_w_grad = np.random.uniform(-1.0, 1.0, size=w_shape, dtype=dtype) + np_w = w.asnumpy() + np_out = _np.average(a.asnumpy(), axis=axes, weights=np_w, returned=returned) + with mx.autograd.record(): + mx_out = test_average(a, w) + if returned: + np_out, np_sum_of_weights = np_out + mx_out, mx_sum_of_weights = mx_out + assert_almost_equal(mx_sum_of_weights.asnumpy(), np_sum_of_weights, rtol=rtol, atol=atol) + assert mx_out.shape == np_out.shape + assert_almost_equal(mx_out.asnumpy(), np_out, rtol=rtol, atol=atol) + if req_a == 'add': + a.grad[:] = init_a_grad + if is_weighted and req_w == 'add': + w.grad[:] = init_w_grad + mx_out.backward() + # Code to get reference backward value + a_grad, w_grad = avg_backward(a.asnumpy(), np_w, np_out, axes, init_a_grad, init_w_grad) + if is_weighted: + assert_almost_equal(w.grad.asnumpy(), w_grad, rtol=rtol*10, atol=atol*10) + if req_a == 'null': + assert a.grad is None + else: + assert_almost_equal(a.grad.asnumpy(), a_grad, rtol=rtol, atol=atol) - # Test imperative once again - np_out = _np.average(a.asnumpy(), weights=np_w, axis=axes, returned=returned) - mx_out = np.average(a, weights=w, axis=axes, returned=returned) - if returned: - np_out, np_sum_of_weights = np_out - mx_out, mx_sum_of_weights = mx_out - assert_almost_equal(mx_sum_of_weights.asnumpy(), np_sum_of_weights, rtol=rtol, atol=atol) - assert_almost_equal(mx_out.asnumpy(), np_out.astype(dtype), rtol=rtol, atol=atol) + # Test imperative once again + np_out = _np.average(a.asnumpy(), weights=np_w, axis=axes, returned=returned) + mx_out = np.average(a, weights=w, axis=axes, returned=returned) + if returned: + np_out, np_sum_of_weights = np_out + mx_out, mx_sum_of_weights = mx_out + assert_almost_equal(mx_sum_of_weights.asnumpy(), np_sum_of_weights, rtol=rtol, atol=atol) + assert_almost_equal(mx_out.asnumpy(), np_out, rtol=rtol, atol=atol) @with_seed() @@ -1352,7 +1352,7 @@ def index_add_forward(a, ind, val, ind_ndim, ind_num): else: a[t_ind] += val return a - + def index_add_bwd(out_grad, a_grad, ind, val_grad, ind_ndim, ind_num, grad_req_a, grad_req_val): if grad_req_a == 'add': init_a_grad = _np.array(a_grad) @@ -9523,7 +9523,7 @@ def hybrid_forward(self, F, cond, x, y): same(ret.asnumpy(), _np.where(cond.asnumpy(), x.asnumpy(), 1)) ret_rscalar.backward() same(x.grad.asnumpy(), collapse_sum_like(_np.broadcast_to(cond.asnumpy(), ret.shape), shape_pair[1])) - + # check both scalar case x = _np.random.randint(0, 100) y = _np.random.randint(0, 100) From 7908d7eb56fc9d20c12afffd8ea592b959b80bfc Mon Sep 17 00:00:00 2001 From: Yiyan66 <57363390+Yiyan66@users.noreply.github.com> Date: Tue, 28 Jul 2020 15:11:19 +0800 Subject: [PATCH 23/46] [numpy] fix flaky mixed precision binary error (#18660) * temp * change test * fix bad func call * test * rectify * doc * change test --- .../numpy/np_elemwise_broadcast_logic_op.cc | 42 +++++++++++++++++-- tests/python/unittest/test_numpy_op.py | 22 +++++++++- 2 files changed, 60 insertions(+), 4 deletions(-) diff --git a/src/operator/numpy/np_elemwise_broadcast_logic_op.cc b/src/operator/numpy/np_elemwise_broadcast_logic_op.cc index b191553f16da..9aacbc02b061 100644 --- a/src/operator/numpy/np_elemwise_broadcast_logic_op.cc +++ b/src/operator/numpy/np_elemwise_broadcast_logic_op.cc @@ -79,7 +79,9 @@ TBlob PrependAxes(const TBlob& src, const int dst_ndim) { return src.reshape(dst_shape); } -struct TVMBinaryBroadcastCompute { + +template +struct GetBinaryBroadcastCompute { const char* func; void operator()(const nnvm::NodeAttrs& attrs, const mxnet::OpContext& ctx, @@ -96,6 +98,38 @@ struct TVMBinaryBroadcastCompute { std::vector type_codes; std::vector values; + const TBlob& a = inputs[0]; + const TBlob& b = inputs[1]; + if (a.type_flag_ != b.type_flag_) { + if (outputs[0].shape_.Size() == 0U) return; + mxnet::TShape new_lshape, new_rshape, new_oshape; + const TBlob& lhs = inputs[0]; + const TBlob& rhs = inputs[1]; + const TBlob& out = outputs[0]; + int ndim = BinaryBroadcastShapeCompact(lhs.shape_, rhs.shape_, out.shape_, + &new_lshape, &new_rshape, &new_oshape); + if (!ndim) { + ElemwiseBinaryOp::ComputeLogic(attrs, ctx, inputs, req, outputs); + } else { + if (req[0] == kNullOp) return; + mshadow::Stream *s = ctx.get_stream(); + MSHADOW_TYPE_SWITCH_WITH_BOOL(lhs.type_flag_, DType, { + MSHADOW_TYPE_SWITCH_WITH_BOOL(rhs.type_flag_, EType, { + BROADCAST_NDIM_SWITCH(ndim, NDim, { + mshadow::Shape oshape = new_oshape.get(); + mshadow::Shape lstride = mxnet_op::calc_stride(new_lshape.get()); + mshadow::Shape rstride = mxnet_op::calc_stride(new_rshape.get()); + mxnet_op::Kernel, xpu>:: + template LaunchEx(s, new_oshape.Size(), req[0], lstride, rstride, oshape, + lhs.dptr(), rhs.dptr(), + out.dptr()); + }); + }); + }); + } + return; + } + const int ondim = outputs[0].shape_.ndim(); const size_t num_args = inputs.size() + outputs.size(); type_codes.resize(num_args); @@ -146,13 +180,15 @@ MXNET_OPERATOR_REGISTER_NP_BINARY_LOGIC(logical_xor); #define MXNET_OPERATOR_REGISTER_NP_BINARY_LOGIC_CPU(name) \ NNVM_REGISTER_OP(_npi_##name) \ - .set_attr("FCompute", TVMBinaryBroadcastCompute{func_##name##_cpu}) + .set_attr("FCompute", GetBinaryBroadcastCompute{func_##name##_cpu}) #if MXNET_USE_CUDA #define MXNET_OPERATOR_REGISTER_NP_BINARY_LOGIC_GPU(name) \ NNVM_REGISTER_OP(_npi_##name) \ - .set_attr("FCompute", TVMBinaryBroadcastCompute{func_##name##_gpu}) + .set_attr("FCompute", GetBinaryBroadcastCompute{func_##name##_gpu}) MXNET_OPERATOR_REGISTER_NP_BINARY_LOGIC_GPU(equal); MXNET_OPERATOR_REGISTER_NP_BINARY_LOGIC_GPU(not_equal); diff --git a/tests/python/unittest/test_numpy_op.py b/tests/python/unittest/test_numpy_op.py index 76181e148950..e4564e92510e 100644 --- a/tests/python/unittest/test_numpy_op.py +++ b/tests/python/unittest/test_numpy_op.py @@ -3071,7 +3071,6 @@ def hybrid_forward(self, F, a, b, *args, **kwargs): @with_seed() @use_np -@pytest.mark.skip(reason='https://github.com/apache/incubator-mxnet/issues/16848') def test_np_mixed_precision_binary_funcs(): itypes = [np.bool, np.int8, np.int32, np.int64] ftypes = [np.float16, np.float32, np.float64] @@ -3084,6 +3083,27 @@ def __init__(self, func): def hybrid_forward(self, F, a, b, *args, **kwargs): return getattr(F.np, self._func)(a, b) + if (func in ['multiply', 'mod', 'equal', 'not_equal', 'greater', + 'greater_equal', 'less', 'less_equal']) and \ + (lshape == () or rshape == ()) : + # the behaviors of infer type in dealing with the input shape of '()' are different between np and onp + # for example, + # mx_test_x1 = np.random.uniform(-2, 2, (2,3)).astype(np.float32) + # mx_test_x2 = np.random.uniform(-2, 2, ()).astype(np.float16) + # np_out = _np.mod(mx_test_x1.asnumpy(), mx_test_x2.asnumpy()) # float16 + # mx_out = np.mod(mx_test_x1, mx_test_x2) # float32 + + # logcial ops: when two numbers are only different in precision, NumPy also has a weird behavior + # for example, + # a = np.array([[1.441]], dtype = np.float16) + # b = np.array(1.4413278, dtype = np.float32) + # c = np.array([1.4413278], dtype = np.float32) + # np.greater(a,b), np.greater(a,c) # True True + # _np.greater(a.asnumpy(),b.asnumpy()), _np.greater(a.asnumpy(),c.asnumpy()) # False True + + # thus, skip the tests + return + np_func = getattr(_np, func) mx_func = TestMixedBinary(func) np_test_x1 = _np.random.uniform(low, high, lshape).astype(ltype) From f83dbac14e21273c8b1bf88a7dbf5c2a3a39b363 Mon Sep 17 00:00:00 2001 From: Haibin Lin Date: Tue, 28 Jul 2020 11:48:05 -0700 Subject: [PATCH 24/46] remove executor manager from API doc (#18802) Co-authored-by: Lin --- docs/python_docs/python/api/index.rst | 7 ------ .../api/mxnet/executor_manager/index.rst | 23 ------------------- docs/python_docs/python/api/mxnet/index.rst | 1 - 3 files changed, 31 deletions(-) delete mode 100644 docs/python_docs/python/api/mxnet/executor_manager/index.rst diff --git a/docs/python_docs/python/api/index.rst b/docs/python_docs/python/api/index.rst index 7340eab84a78..0fd831d431c3 100644 --- a/docs/python_docs/python/api/index.rst +++ b/docs/python_docs/python/api/index.rst @@ -182,13 +182,6 @@ Advanced modules Engine properties management. - .. card:: - :title: mxnet.executor_manager - :link: mxnet/executor_manager/index.html - - Executor manager - - .. card:: :title: mxnet.rtc :link: mxnet/rtc/index.html diff --git a/docs/python_docs/python/api/mxnet/executor_manager/index.rst b/docs/python_docs/python/api/mxnet/executor_manager/index.rst deleted file mode 100644 index 2be59bdce8a5..000000000000 --- a/docs/python_docs/python/api/mxnet/executor_manager/index.rst +++ /dev/null @@ -1,23 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. - -mxnet.executor_manager -====================== - -.. automodule:: mxnet.executor_manager - :members: - :autosummary: diff --git a/docs/python_docs/python/api/mxnet/index.rst b/docs/python_docs/python/api/mxnet/index.rst index 96f20e683818..def5e276c110 100644 --- a/docs/python_docs/python/api/mxnet/index.rst +++ b/docs/python_docs/python/api/mxnet/index.rst @@ -32,7 +32,6 @@ mxnet mxnet.contrib mxnet.engine mxnet.executor - mxnet.executor_manager mxnet.gluon mxnet.image mxnet.initializer From 126636cc4497d5db21a2430d4bb83d4c5a36e0d1 Mon Sep 17 00:00:00 2001 From: Leonard Lausen Date: Tue, 28 Jul 2020 22:11:20 +0000 Subject: [PATCH 25/46] Fix naming in runtime_functions.sh (#18795) --- ci/docker/runtime_functions.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/docker/runtime_functions.sh b/ci/docker/runtime_functions.sh index 8752856177ea..e175d33e11f8 100755 --- a/ci/docker/runtime_functions.sh +++ b/ci/docker/runtime_functions.sh @@ -746,12 +746,12 @@ sanity_license() { tools/license_header.py check } -sanity_python() { +sanity_cpp() { set -ex 3rdparty/dmlc-core/scripts/lint.py mxnet cpp include src plugin tests --exclude_path src/operator/contrib/ctc_include include/mkldnn } -sanity_cpp() { +sanity_python() { set -ex python3 -m pylint --rcfile=ci/other/pylintrc --ignore-patterns=".*\.so$$,.*\.dll$$,.*\.dylib$$" python/mxnet OMP_NUM_THREADS=$(expr $(nproc) / 4) pytest -n 4 tests/tutorials/test_sanity_tutorials.py From e9829e71a7f536d0fc78a0faf96f31336987770e Mon Sep 17 00:00:00 2001 From: Joe Evans Date: Tue, 28 Jul 2020 18:53:29 -0700 Subject: [PATCH 26/46] Cherry-pick large tensor support from #18752. (#18804) Co-authored-by: Joe Evans --- CONTRIBUTORS.md | 1 + src/operator/tensor/la_op-inl.h | 11 ++++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index f63b2412077b..4146d45b5c9d 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -254,6 +254,7 @@ List of Contributors * [Connor Goggins](https://github.com/connorgoggins) * [Wei Chu](https://github.com/waytrue17) * [Yang Shi](https://github.com/ys2843) +* [Joe Evans](https://github.com/josephevans) Label Bot --------- diff --git a/src/operator/tensor/la_op-inl.h b/src/operator/tensor/la_op-inl.h index d580cced4ec5..7a5a602425fe 100644 --- a/src/operator/tensor/la_op-inl.h +++ b/src/operator/tensor/la_op-inl.h @@ -36,9 +36,10 @@ using namespace mshadow; // Copies lower/upper triangular part to upper/lower, i.e. to the opposite side. struct CopyTriangularToOppositeSide { template - MSHADOW_XINLINE static void Map(int i, int matrix_size, int stride, DType* data, bool to_lower) { + MSHADOW_XINLINE static void Map(index_t i, size_t matrix_size, index_t stride, + DType* data, bool to_lower) { // Below computation works even when we are dealing with a batch of matrices. - const int row((i % matrix_size) / stride), col(i % stride); + const index_t row((i % matrix_size) / stride), col(i % stride); if (row > col) { if (to_lower) { data[i] = data[i + (col - row) * (stride - 1)]; @@ -52,9 +53,9 @@ struct CopyTriangularToOppositeSide { // Zero's lower/upper triangular part of a matrix. struct ZeroTriangular { template - MSHADOW_XINLINE static void Map(int i, int matrix_size, int stride, DType* data, - bool zero_lower) { - const int row((i % matrix_size) / stride), col(i % stride); + MSHADOW_XINLINE static void Map(index_t i, size_t matrix_size, index_t stride, + DType* data, bool zero_lower) { + const index_t row((i % matrix_size) / stride), col(i % stride); if ((!zero_lower && (row < col)) || (zero_lower && (row > col))) data[i] = 0; } }; From 915f6b43de409ec7fbf0373d270e9d4a05621fe2 Mon Sep 17 00:00:00 2001 From: Yang Shi Date: Wed, 29 Jul 2020 11:28:37 -0700 Subject: [PATCH 27/46] Remove deepnumpy reference and move Numpy tutorials to top level (#18798) * move np tutorials to top level * replace deepnumpy reference to np * add info in card * remove useless entry * replace NDArray API card with np.ndarray * python site refactor * remove duplicated drawer and refactor layout * extend document width to 100% for xl devices --- docs/python_docs/_static/mxnet.css | 4 ---- .../getting-started/crash-course/1-ndarray.md | 2 +- .../getting-started/crash-course/6-use_gpus.md | 2 +- .../python/tutorials/getting-started/index.rst | 4 ++-- .../getting-started/{deepnumpy => np}/cheat-sheet.md | 0 .../getting-started/{deepnumpy => np}/index.rst | 2 +- .../deepnumpy-vs-numpy.md => np/np-vs-numpy.md} | 0 docs/python_docs/python/tutorials/index.rst | 7 +++---- docs/python_docs/python/tutorials/packages/index.rst | 6 ++++++ .../python/tutorials/packages/ndarray/index.rst | 5 ----- .../{ndarray/deepnumpy => np}/arrays.indexing.rst | 0 .../{ndarray/deepnumpy => np}/arrays.ndarray.rst | 0 .../packages/{ndarray/deepnumpy => np}/arrays.rst | 0 .../packages/{ndarray/deepnumpy => np}/index.rst | 0 .../packages/{ndarray/deepnumpy => np}/npx.rst | 0 .../{ndarray/deepnumpy => np}/random/index.rst | 0 .../deepnumpy => np}/routines.array-creation.rst | 0 .../deepnumpy => np}/routines.array-manipulation.rst | 0 .../packages/{ndarray/deepnumpy => np}/routines.io.rst | 0 .../{ndarray/deepnumpy => np}/routines.linalg.rst | 0 .../{ndarray/deepnumpy => np}/routines.math.rst | 0 .../packages/{ndarray/deepnumpy => np}/routines.rst | 0 .../{ndarray/deepnumpy => np}/routines.sort.rst | 0 .../{ndarray/deepnumpy => np}/routines.statistics.rst | 0 docs/python_docs/themes/mx-theme/mxtheme/layout.html | 10 ++++++---- .../mxtheme/static/sphinx_materialdesign_theme.css | 2 +- .../mxtheme/static/sphinx_materialdesign_theme.css.map | 2 +- .../mxtheme/static/sphinx_materialdesign_theme.js | 6 ++++-- .../mxtheme/static/sphinx_materialdesign_theme.js.map | 2 +- .../{_static => themes/mx-theme/src/js}/feedback.js | 0 .../mx-theme/src/js/sphinx_materialdesign_theme.js | 2 +- docs/python_docs/themes/mx-theme/src/scss/_root.scss | 8 ++++++++ .../themes/mx-theme/src/scss/grid/_simplegrid.scss | 9 --------- .../themes/mx-theme/src/scss/layout/_layout.scss | 3 ++- 34 files changed, 38 insertions(+), 38 deletions(-) rename docs/python_docs/python/tutorials/getting-started/{deepnumpy => np}/cheat-sheet.md (100%) rename docs/python_docs/python/tutorials/getting-started/{deepnumpy => np}/index.rst (98%) rename docs/python_docs/python/tutorials/getting-started/{deepnumpy/deepnumpy-vs-numpy.md => np/np-vs-numpy.md} (100%) rename docs/python_docs/python/tutorials/packages/{ndarray/deepnumpy => np}/arrays.indexing.rst (100%) rename docs/python_docs/python/tutorials/packages/{ndarray/deepnumpy => np}/arrays.ndarray.rst (100%) rename docs/python_docs/python/tutorials/packages/{ndarray/deepnumpy => np}/arrays.rst (100%) rename docs/python_docs/python/tutorials/packages/{ndarray/deepnumpy => np}/index.rst (100%) rename docs/python_docs/python/tutorials/packages/{ndarray/deepnumpy => np}/npx.rst (100%) rename docs/python_docs/python/tutorials/packages/{ndarray/deepnumpy => np}/random/index.rst (100%) rename docs/python_docs/python/tutorials/packages/{ndarray/deepnumpy => np}/routines.array-creation.rst (100%) rename docs/python_docs/python/tutorials/packages/{ndarray/deepnumpy => np}/routines.array-manipulation.rst (100%) rename docs/python_docs/python/tutorials/packages/{ndarray/deepnumpy => np}/routines.io.rst (100%) rename docs/python_docs/python/tutorials/packages/{ndarray/deepnumpy => np}/routines.linalg.rst (100%) rename docs/python_docs/python/tutorials/packages/{ndarray/deepnumpy => np}/routines.math.rst (100%) rename docs/python_docs/python/tutorials/packages/{ndarray/deepnumpy => np}/routines.rst (100%) rename docs/python_docs/python/tutorials/packages/{ndarray/deepnumpy => np}/routines.sort.rst (100%) rename docs/python_docs/python/tutorials/packages/{ndarray/deepnumpy => np}/routines.statistics.rst (100%) rename docs/python_docs/{_static => themes/mx-theme/src/js}/feedback.js (100%) diff --git a/docs/python_docs/_static/mxnet.css b/docs/python_docs/_static/mxnet.css index 7d4f7f115424..5c04804578c1 100644 --- a/docs/python_docs/_static/mxnet.css +++ b/docs/python_docs/_static/mxnet.css @@ -19,10 +19,6 @@ visibility: hidden; } -.document .page-content { - padding: 0 10% !important; -} - .mdl-layout__header--waterfall.is-casting-shadow { box-shadow: none !important; } diff --git a/docs/python_docs/python/tutorials/getting-started/crash-course/1-ndarray.md b/docs/python_docs/python/tutorials/getting-started/crash-course/1-ndarray.md index 453cc35264c1..52835b4451f3 100644 --- a/docs/python_docs/python/tutorials/getting-started/crash-course/1-ndarray.md +++ b/docs/python_docs/python/tutorials/getting-started/crash-course/1-ndarray.md @@ -17,7 +17,7 @@ # Step 1: Manipulate data with NP on MXNet -This getting started exercise introduces the `np` package, which is similar to Numpy. For more information, please see [Differences between NP on MXNet and NumPy](/api/python/docs/tutorials/getting-started/deepnumpy/deepnumpy-vs-numpy.html). +This getting started exercise introduces the `np` package, which is similar to Numpy. For more information, please see [Differences between NP on MXNet and NumPy](/api/python/docs/tutorials/getting-started/np/np-vs-numpy.html). ## Import packages and create an array diff --git a/docs/python_docs/python/tutorials/getting-started/crash-course/6-use_gpus.md b/docs/python_docs/python/tutorials/getting-started/crash-course/6-use_gpus.md index 1e60d5f929b9..6f9cc5d3c1d9 100644 --- a/docs/python_docs/python/tutorials/getting-started/crash-course/6-use_gpus.md +++ b/docs/python_docs/python/tutorials/getting-started/crash-course/6-use_gpus.md @@ -148,4 +148,4 @@ for epoch in range(10): ## Next steps Now you have completed training and predicting with a neural network by using NP on MXNet and -Gluon. You can check the guides to these two front ends: [What is NP on MXNet](../deepnumpy/index.html) and [gluon](../gluon_from_experiment_to_deployment.md). +Gluon. You can check the guides to these two front ends: [What is NP on MXNet](../np/index.html) and [gluon](../gluon_from_experiment_to_deployment.md). diff --git a/docs/python_docs/python/tutorials/getting-started/index.rst b/docs/python_docs/python/tutorials/getting-started/index.rst index 709ee0314b9d..dce53ee01319 100644 --- a/docs/python_docs/python/tutorials/getting-started/index.rst +++ b/docs/python_docs/python/tutorials/getting-started/index.rst @@ -30,7 +30,7 @@ The following tutorials teach how to use MXNet. .. card:: :title: What is NP on MXNet - :link: deepnumpy/index.html + :link: np/index.html What is NP on MXNet @@ -63,7 +63,7 @@ The following tutorials teach how to use MXNet. :maxdepth: 2 crash-course/index - deepnumpy/index + np/index to-mxnet/index gluon_from_experiment_to_deployment logistic_regression_explained.md diff --git a/docs/python_docs/python/tutorials/getting-started/deepnumpy/cheat-sheet.md b/docs/python_docs/python/tutorials/getting-started/np/cheat-sheet.md similarity index 100% rename from docs/python_docs/python/tutorials/getting-started/deepnumpy/cheat-sheet.md rename to docs/python_docs/python/tutorials/getting-started/np/cheat-sheet.md diff --git a/docs/python_docs/python/tutorials/getting-started/deepnumpy/index.rst b/docs/python_docs/python/tutorials/getting-started/np/index.rst similarity index 98% rename from docs/python_docs/python/tutorials/getting-started/deepnumpy/index.rst rename to docs/python_docs/python/tutorials/getting-started/np/index.rst index cd56ac46c869..3f1da88072a7 100644 --- a/docs/python_docs/python/tutorials/getting-started/deepnumpy/index.rst +++ b/docs/python_docs/python/tutorials/getting-started/np/index.rst @@ -29,4 +29,4 @@ If this is your first time using NP on MXNet, we recommend that you review the f :maxdepth: 1 cheat-sheet - deepnumpy-vs-numpy \ No newline at end of file + np-vs-numpy \ No newline at end of file diff --git a/docs/python_docs/python/tutorials/getting-started/deepnumpy/deepnumpy-vs-numpy.md b/docs/python_docs/python/tutorials/getting-started/np/np-vs-numpy.md similarity index 100% rename from docs/python_docs/python/tutorials/getting-started/deepnumpy/deepnumpy-vs-numpy.md rename to docs/python_docs/python/tutorials/getting-started/np/np-vs-numpy.md diff --git a/docs/python_docs/python/tutorials/index.rst b/docs/python_docs/python/tutorials/index.rst index 70f60c3c61a5..dcc5ea6dbfd6 100644 --- a/docs/python_docs/python/tutorials/index.rst +++ b/docs/python_docs/python/tutorials/index.rst @@ -48,11 +48,10 @@ Packages & Modules MXNet's imperative interface for Python. If you're new to MXNet, start here! .. card:: - :title: NDArray API - :link: packages/ndarray/index.html + :title: np.ndarray API + :link: packages/np/index.html - How to use the NDArray API to manipulate data. - A useful set of tutorials for beginners. + This section contains the `mxnet.np` API reference documentation. .. card:: :title: Symbol API diff --git a/docs/python_docs/python/tutorials/packages/index.rst b/docs/python_docs/python/tutorials/packages/index.rst index 370028a919d1..b14b884809a0 100644 --- a/docs/python_docs/python/tutorials/packages/index.rst +++ b/docs/python_docs/python/tutorials/packages/index.rst @@ -91,6 +91,12 @@ Shared APIs How to use the optimizers. + .. card:: + :title: NP on MXNet reference + :link: np/index.html + + This section contains the mxnet.np API reference documentation. + .. toctree:: :hidden: :glob: diff --git a/docs/python_docs/python/tutorials/packages/ndarray/index.rst b/docs/python_docs/python/tutorials/packages/ndarray/index.rst index 74562357dc58..5fb5e5d1d94f 100644 --- a/docs/python_docs/python/tutorials/packages/ndarray/index.rst +++ b/docs/python_docs/python/tutorials/packages/ndarray/index.rst @@ -45,10 +45,6 @@ NDArray For Sparse NDArray tutorials - .. card:: - :title: NP on MXNet reference - :link: deepnumpy/index.html - This section contains the mxnet.np API reference documentation .. toctree:: @@ -57,4 +53,3 @@ NDArray * sparse/index - deepnumpy/index \ No newline at end of file diff --git a/docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/arrays.indexing.rst b/docs/python_docs/python/tutorials/packages/np/arrays.indexing.rst similarity index 100% rename from docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/arrays.indexing.rst rename to docs/python_docs/python/tutorials/packages/np/arrays.indexing.rst diff --git a/docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/arrays.ndarray.rst b/docs/python_docs/python/tutorials/packages/np/arrays.ndarray.rst similarity index 100% rename from docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/arrays.ndarray.rst rename to docs/python_docs/python/tutorials/packages/np/arrays.ndarray.rst diff --git a/docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/arrays.rst b/docs/python_docs/python/tutorials/packages/np/arrays.rst similarity index 100% rename from docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/arrays.rst rename to docs/python_docs/python/tutorials/packages/np/arrays.rst diff --git a/docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/index.rst b/docs/python_docs/python/tutorials/packages/np/index.rst similarity index 100% rename from docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/index.rst rename to docs/python_docs/python/tutorials/packages/np/index.rst diff --git a/docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/npx.rst b/docs/python_docs/python/tutorials/packages/np/npx.rst similarity index 100% rename from docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/npx.rst rename to docs/python_docs/python/tutorials/packages/np/npx.rst diff --git a/docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/random/index.rst b/docs/python_docs/python/tutorials/packages/np/random/index.rst similarity index 100% rename from docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/random/index.rst rename to docs/python_docs/python/tutorials/packages/np/random/index.rst diff --git a/docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.array-creation.rst b/docs/python_docs/python/tutorials/packages/np/routines.array-creation.rst similarity index 100% rename from docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.array-creation.rst rename to docs/python_docs/python/tutorials/packages/np/routines.array-creation.rst diff --git a/docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.array-manipulation.rst b/docs/python_docs/python/tutorials/packages/np/routines.array-manipulation.rst similarity index 100% rename from docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.array-manipulation.rst rename to docs/python_docs/python/tutorials/packages/np/routines.array-manipulation.rst diff --git a/docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.io.rst b/docs/python_docs/python/tutorials/packages/np/routines.io.rst similarity index 100% rename from docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.io.rst rename to docs/python_docs/python/tutorials/packages/np/routines.io.rst diff --git a/docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.linalg.rst b/docs/python_docs/python/tutorials/packages/np/routines.linalg.rst similarity index 100% rename from docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.linalg.rst rename to docs/python_docs/python/tutorials/packages/np/routines.linalg.rst diff --git a/docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.math.rst b/docs/python_docs/python/tutorials/packages/np/routines.math.rst similarity index 100% rename from docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.math.rst rename to docs/python_docs/python/tutorials/packages/np/routines.math.rst diff --git a/docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.rst b/docs/python_docs/python/tutorials/packages/np/routines.rst similarity index 100% rename from docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.rst rename to docs/python_docs/python/tutorials/packages/np/routines.rst diff --git a/docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.sort.rst b/docs/python_docs/python/tutorials/packages/np/routines.sort.rst similarity index 100% rename from docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.sort.rst rename to docs/python_docs/python/tutorials/packages/np/routines.sort.rst diff --git a/docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.statistics.rst b/docs/python_docs/python/tutorials/packages/np/routines.statistics.rst similarity index 100% rename from docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.statistics.rst rename to docs/python_docs/python/tutorials/packages/np/routines.statistics.rst diff --git a/docs/python_docs/themes/mx-theme/mxtheme/layout.html b/docs/python_docs/themes/mx-theme/mxtheme/layout.html index 994da38fa29e..1e94b28f8fd5 100644 --- a/docs/python_docs/themes/mx-theme/mxtheme/layout.html +++ b/docs/python_docs/themes/mx-theme/mxtheme/layout.html @@ -67,10 +67,12 @@ '_static/feedback.css', ] %} - {%- block header %} - - - {% endblock %} +{% set script_files = script_files + [ + '_static/sphinx_materialdesign_theme.js' + ] +%} + +{%- block header %}{% endblock %} {%- block relbar1 %}{% endblock %} {%- block relbar2 %}{% include "relations.html" %}{% endblock %} {%- block sidebar2 %}{% endblock %} diff --git a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css index c729ff125e33..04b7450a6204 100644 --- a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css +++ b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css @@ -1,2 +1,2 @@ -.admonition,.mdl-shadow--2dp,.page-content pre:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list){box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-shadow--3dp{box-shadow:0 3px 4px 0 rgba(0,0,0,.14),0 3px 3px -2px rgba(0,0,0,.2),0 1px 8px 0 rgba(0,0,0,.12)}.mdl-shadow--4dp{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2)}.mdl-shadow--6dp{box-shadow:0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.2)}.mdl-shadow--8dp{box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.2)}.mdl-shadow--16dp{box-shadow:0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.2)}.mdl-shadow--24dp{box-shadow:0 9px 46px 8px rgba(0,0,0,.14),0 11px 15px -7px rgba(0,0,0,.12),0 24px 38px 3px rgba(0,0,0,.2)}.mdl-data-table,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list){position:relative;border:1px solid rgba(0,0,0,.12);border-collapse:collapse;white-space:nowrap;font-size:13px;background-color:#fff}.mdl-data-table thead,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) thead{padding-bottom:3px}.mdl-data-table thead .mdl-data-table__select,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) thead .mdl-data-table__select{margin-top:0}.mdl-data-table tbody tr,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) tbody tr{position:relative;height:48px;transition-duration:.28s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-property:background-color}.mdl-data-table tbody tr.is-selected,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) tbody tr.is-selected{background-color:#e0e0e0}.mdl-data-table tbody tr:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) tbody tr:hover{background-color:#eee}.mdl-data-table td,.mdl-data-table th,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{padding:0 18px 12px;text-align:right}.mdl-data-table td:first-of-type,.mdl-data-table th:first-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td:first-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th:first-of-type{padding-left:24px}.mdl-data-table td:last-of-type,.mdl-data-table th:last-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td:last-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th:last-of-type{padding-right:24px}.mdl-data-table td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td{position:relative;vertical-align:middle;height:48px;border-top:1px solid rgba(0,0,0,.12);border-bottom:1px solid rgba(0,0,0,.12);padding-top:12px;box-sizing:border-box}.mdl-data-table td .mdl-data-table__select,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td .mdl-data-table__select{vertical-align:middle}.mdl-data-table th,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{position:relative;vertical-align:bottom;text-overflow:ellipsis;font-size:14px;font-weight:700;line-height:24px;letter-spacing:0;height:48px;font-size:12px;color:rgba(0,0,0,.54);padding-bottom:8px;box-sizing:border-box}.mdl-data-table th.mdl-data-table__header--sorted-ascending,.mdl-data-table th.mdl-data-table__header--sorted-descending,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending{color:rgba(0,0,0,.87)}.mdl-data-table th.mdl-data-table__header--sorted-ascending:before,.mdl-data-table th.mdl-data-table__header--sorted-descending:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:before{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;word-wrap:normal;font-feature-settings:"liga";-webkit-font-feature-settings:"liga";-webkit-font-smoothing:antialiased;font-size:16px;content:"\e5d8";margin-right:5px;vertical-align:sub}.mdl-data-table th.mdl-data-table__header--sorted-ascending:hover,.mdl-data-table th.mdl-data-table__header--sorted-descending:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:hover{cursor:pointer}.mdl-data-table th.mdl-data-table__header--sorted-ascending:hover:before,.mdl-data-table th.mdl-data-table__header--sorted-descending:hover:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending:hover:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:hover:before{color:rgba(0,0,0,.26)}.mdl-data-table th.mdl-data-table__header--sorted-descending:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:before{content:"\e5db"}.mdl-data-table__select{width:16px}.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{text-align:left}.mdl-mini-footer{display:flex;flex-flow:row wrap;justify-content:space-between;padding:32px 16px;color:#9e9e9e;background-color:#424242}.mdl-mini-footer:after{content:"";display:block}.mdl-mini-footer .mdl-logo{line-height:36px}.mdl-mini-footer--link-list,.mdl-mini-footer__link-list,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul{display:flex;flex-flow:row nowrap;list-style:none;margin:0;padding:0}.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul li{margin-bottom:0;margin-right:16px}@media screen and (min-width:760px){.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul li{line-height:36px}}.mdl-mini-footer--link-list a,.mdl-mini-footer__link-list a,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul a{color:inherit;text-decoration:none;white-space:nowrap}.mdl-mini-footer--left-section,.mdl-mini-footer__left-section{display:inline-block;order:0}.mdl-mini-footer--right-section,.mdl-mini-footer__right-section{display:inline-block;order:1}.mdl-mini-footer--social-btn,.mdl-mini-footer__social-btn{width:36px;height:36px;padding:0;margin:0;background-color:#9e9e9e;border:none}.mdl-card{display:flex;flex-direction:column;font-size:16px;font-weight:400;min-height:200px;overflow:hidden;width:330px;z-index:1;position:relative;background:#fff;border-radius:2px;box-sizing:border-box}.mdl-card__media{background-color:#ff6e40;background-repeat:repeat;background-position:50% 50%;background-size:cover;background-origin:padding-box;background-attachment:scroll;box-sizing:border-box}.mdl-card__title{align-items:center;color:#000;display:block;display:flex;justify-content:stretch;line-height:normal;padding:16px;perspective-origin:165px 56px;transform-origin:165px 56px;box-sizing:border-box}.mdl-card__title.mdl-card--border{border-bottom:1px solid rgba(0,0,0,.1)}.mdl-card__title-text{align-self:flex-end;color:inherit;display:block;display:flex;font-size:24px;font-weight:300;line-height:normal;overflow:hidden;transform-origin:149px 48px;margin:0}.mdl-card__subtitle-text{font-size:14px;color:rgba(0,0,0,.54);margin:0}.mdl-card__supporting-text{color:rgba(0,0,0,.54);font-size:1rem;line-height:18px;overflow:hidden;padding:16px;width:90%}.mdl-card__supporting-text.mdl-card--border{border-bottom:1px solid rgba(0,0,0,.1)}.mdl-card__actions{font-size:16px;line-height:normal;width:100%;background-color:transparent;padding:8px;box-sizing:border-box}.mdl-card__actions.mdl-card--border{border-top:1px solid rgba(0,0,0,.1)}.mdl-card--expand{flex-grow:1}.mdl-card__menu{position:absolute;right:16px;top:16px}.mdl-button{background:transparent;border:none;border-radius:2px;color:#000;position:relative;height:36px;margin:0;min-width:64px;padding:0 16px;display:inline-block;font-family:Roboto,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;text-transform:uppercase;line-height:1;letter-spacing:0;overflow:hidden;will-change:box-shadow;transition:box-shadow .2s cubic-bezier(.4,0,1,1),background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1);outline:none;cursor:pointer;text-decoration:none;text-align:center;line-height:36px;vertical-align:middle}.mdl-button::-moz-focus-inner{border:0}.mdl-button:hover{background-color:hsla(0,0%,62%,.2)}.mdl-button:focus:not(:active){background-color:rgba(0,0,0,.12)}.mdl-button:active{background-color:hsla(0,0%,62%,.4)}.mdl-button.mdl-button--colored{color:#2196f3}.mdl-button.mdl-button--colored:focus:not(:active){background-color:rgba(0,0,0,.12)}input.mdl-button[type=submit]{-webkit-appearance:none}.mdl-button--raised{background:hsla(0,0%,62%,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-button--raised:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:hsla(0,0%,62%,.4)}.mdl-button--raised:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:hsla(0,0%,62%,.4)}.mdl-button--raised.mdl-button--colored{background:#2196f3;color:#fff}.mdl-button--raised.mdl-button--colored:active,.mdl-button--raised.mdl-button--colored:focus:not(:active),.mdl-button--raised.mdl-button--colored:hover{background-color:#2196f3}.mdl-button--raised.mdl-button--colored .mdl-ripple{background:#fff}.mdl-button--fab{border-radius:50%;font-size:24px;height:56px;margin:auto;min-width:56px;width:56px;padding:0;overflow:hidden;background:hsla(0,0%,62%,.2);box-shadow:0 1px 1.5px 0 rgba(0,0,0,.12),0 1px 1px 0 rgba(0,0,0,.24);position:relative;line-height:normal}.admonition.attention .mdl-button--fab .admonition-title:before,.admonition.caution .mdl-button--fab .admonition-title:before,.admonition.danger .mdl-button--fab .admonition-title:before,.admonition.error .mdl-button--fab .admonition-title:before,.admonition.hint .mdl-button--fab .admonition-title:before,.admonition.important .mdl-button--fab .admonition-title:before,.admonition.note .mdl-button--fab .admonition-title:before,.admonition.seealso .mdl-button--fab .admonition-title:before,.admonition.tip .mdl-button--fab .admonition-title:before,.admonition.warning .mdl-button--fab .admonition-title:before,.mdl-button--fab .admonition.attention .admonition-title:before,.mdl-button--fab .admonition.caution .admonition-title:before,.mdl-button--fab .admonition.danger .admonition-title:before,.mdl-button--fab .admonition.error .admonition-title:before,.mdl-button--fab .admonition.hint .admonition-title:before,.mdl-button--fab .admonition.important .admonition-title:before,.mdl-button--fab .admonition.note .admonition-title:before,.mdl-button--fab .admonition.seealso .admonition-title:before,.mdl-button--fab .admonition.tip .admonition-title:before,.mdl-button--fab .admonition.warning .admonition-title:before,.mdl-button--fab .material-icons,.mdl-button--fab a.download:before{position:absolute;top:50%;left:50%;transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--fab.mdl-button--mini-fab{height:40px;min-width:40px;width:40px}.mdl-button--fab .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button--fab:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:hsla(0,0%,62%,.4)}.mdl-button--fab:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:hsla(0,0%,62%,.4)}.mdl-button--fab.mdl-button--colored{background:#ff6e40;color:#fff}.mdl-button--fab.mdl-button--colored:active,.mdl-button--fab.mdl-button--colored:focus:not(:active),.mdl-button--fab.mdl-button--colored:hover{background-color:#ff6e40}.mdl-button--fab.mdl-button--colored .mdl-ripple{background:#fff}.mdl-button--icon{border-radius:50%;font-size:24px;height:32px;margin-left:0;margin-right:0;min-width:32px;width:32px;padding:0;overflow:hidden;color:inherit;line-height:normal}.admonition.attention .mdl-button--icon .admonition-title:before,.admonition.caution .mdl-button--icon .admonition-title:before,.admonition.danger .mdl-button--icon .admonition-title:before,.admonition.error .mdl-button--icon .admonition-title:before,.admonition.hint .mdl-button--icon .admonition-title:before,.admonition.important .mdl-button--icon .admonition-title:before,.admonition.note .mdl-button--icon .admonition-title:before,.admonition.seealso .mdl-button--icon .admonition-title:before,.admonition.tip .mdl-button--icon .admonition-title:before,.admonition.warning .mdl-button--icon .admonition-title:before,.mdl-button--icon .admonition.attention .admonition-title:before,.mdl-button--icon .admonition.caution .admonition-title:before,.mdl-button--icon .admonition.danger .admonition-title:before,.mdl-button--icon .admonition.error .admonition-title:before,.mdl-button--icon .admonition.hint .admonition-title:before,.mdl-button--icon .admonition.important .admonition-title:before,.mdl-button--icon .admonition.note .admonition-title:before,.mdl-button--icon .admonition.seealso .admonition-title:before,.mdl-button--icon .admonition.tip .admonition-title:before,.mdl-button--icon .admonition.warning .admonition-title:before,.mdl-button--icon .material-icons,.mdl-button--icon a.download:before{position:absolute;top:50%;left:50%;transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--icon.mdl-button--mini-icon{height:24px;min-width:24px;width:24px}.admonition.attention .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.caution .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.danger .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.error .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.hint .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.important .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.note .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.seealso .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.tip .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.warning .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.attention .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.caution .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.danger .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.error .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.hint .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.important .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.note .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.seealso .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.tip .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.warning .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .material-icons,.mdl-button--icon.mdl-button--mini-icon a.download:before{top:0;left:0}.mdl-button--icon .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button__ripple-container{display:block;height:100%;left:0;position:absolute;top:0;width:100%;z-index:0;overflow:hidden}.mdl-button.mdl-button--disabled .mdl-button__ripple-container .mdl-ripple,.mdl-button[disabled] .mdl-button__ripple-container .mdl-ripple{background-color:transparent}.mdl-button--primary.mdl-button--primary{color:#2196f3}.mdl-button--primary.mdl-button--primary .mdl-ripple{background:#fff}.mdl-button--primary.mdl-button--primary.mdl-button--fab,.mdl-button--primary.mdl-button--primary.mdl-button--raised{color:#fff;background-color:#2196f3}.mdl-button--accent.mdl-button--accent{color:#ff6e40}.mdl-button--accent.mdl-button--accent .mdl-ripple{background:#fff}.mdl-button--accent.mdl-button--accent.mdl-button--fab,.mdl-button--accent.mdl-button--accent.mdl-button--raised{color:#fff;background-color:#ff6e40}.mdl-button.mdl-button--disabled.mdl-button--disabled,.mdl-button[disabled][disabled]{color:rgba(0,0,0,.26);cursor:default;background-color:transparent}.mdl-button--fab.mdl-button--disabled.mdl-button--disabled,.mdl-button--fab[disabled][disabled]{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26)}.mdl-button--raised.mdl-button--disabled.mdl-button--disabled,.mdl-button--raised[disabled][disabled]{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26);box-shadow:none}.mdl-button--colored.mdl-button--disabled.mdl-button--disabled,.mdl-button--colored[disabled][disabled]{color:rgba(0,0,0,.26)}.admonition.attention .mdl-button .admonition-title:before,.admonition.caution .mdl-button .admonition-title:before,.admonition.danger .mdl-button .admonition-title:before,.admonition.error .mdl-button .admonition-title:before,.admonition.hint .mdl-button .admonition-title:before,.admonition.important .mdl-button .admonition-title:before,.admonition.note .mdl-button .admonition-title:before,.admonition.seealso .mdl-button .admonition-title:before,.admonition.tip .mdl-button .admonition-title:before,.admonition.warning .mdl-button .admonition-title:before,.mdl-button .admonition.attention .admonition-title:before,.mdl-button .admonition.caution .admonition-title:before,.mdl-button .admonition.danger .admonition-title:before,.mdl-button .admonition.error .admonition-title:before,.mdl-button .admonition.hint .admonition-title:before,.mdl-button .admonition.important .admonition-title:before,.mdl-button .admonition.note .admonition-title:before,.mdl-button .admonition.seealso .admonition-title:before,.mdl-button .admonition.tip .admonition-title:before,.mdl-button .admonition.warning .admonition-title:before,.mdl-button .material-icons,.mdl-button a.download:before{vertical-align:middle}.font-light{font-weight:300}.font-regular{font-weight:400}.font-heavy{font-weight:700}.left{text-align:left}.right{text-align:right}.center{text-align:center;margin-left:auto;margin-right:auto}.justify{text-align:justify}.hidden-sm{display:none}.container{width:100%;margin-left:auto;margin-right:auto}@media only screen and (min-width:33.75em){.container{width:80%}}@media only screen and (min-width:60em){.container{width:75%;max-width:60rem}}.row{position:relative;width:100%}.row [class^=col]{float:left;margin:.5rem 1%;min-height:.125rem}.row:after{content:"";display:table;clear:both}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12{width:98%}.col-1-sm{width:6.33333%}.col-2-sm{width:14.66667%}.col-3-sm{width:23%}.col-4-sm{width:31.33333%}.col-5-sm{width:39.66667%}.col-6-sm{width:48%}.col-7-sm{width:56.33333%}.col-8-sm{width:64.66667%}.col-9-sm{width:73%}.col-10-sm{width:81.33333%}.col-11-sm{width:89.66667%}.col-12-sm{width:98%}@media only screen and (min-width:45em){.col-1{width:6.33333%}.col-2{width:14.66667%}.col-3{width:23%}.col-4{width:31.33333%}.col-5{width:39.66667%}.col-6{width:48%}.col-7{width:56.33333%}.col-8{width:64.66667%}.col-9{width:73%}.col-10{width:81.33333%}.col-11{width:89.66667%}.col-12{width:98%}.hidden-sm{display:block}}.row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;flex-wrap:wrap}.row>[class*=col-]{display:flex;flex-direction:column}.admonition.attention .admonition-title:before,.admonition.caution .admonition-title:before,.admonition.danger .admonition-title:before,.admonition.error .admonition-title:before,.admonition.hint .admonition-title:before,.admonition.important .admonition-title:before,.admonition.note .admonition-title:before,.admonition.seealso .admonition-title:before,.admonition.tip .admonition-title:before,.admonition.warning .admonition-title:before,.material-icons,a.download:before{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:"liga"}html{font-size:16px}body{display:block!important;background-color:#fafafa;font-size:1rem;line-height:1.5rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}.mdl-layout__content:focus{outline:none}a.download>code.download,blockquote,h1,h2,h3,h4,h5,h6,span.mdl-layout-title{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}.contents,.contents a,.globaltoc a.current,.toc-backref,.toctree-wrapper,.toctree-wrapper a,h1,h2,h3,h4,h5,h6{color:#048ccc!important}a{text-decoration:none}.page-content,.page-content dd,.page-content dl,.page-content dt,.page-content ol,.page-content p,.page-content table,.page-content td,.page-content th,.page-content ul{font-size:1rem}.brand{color:inherit;text-decoration:none}.section{overflow-x:auto}img{max-width:100%;display:block;margin-left:auto;margin-right:auto}div.figure p.caption{text-align:center;margin-top:.75rem}div.figure p.caption span.caption-number{font-style:normal}div.figure p.caption .caption-number:after{content:"\00a0"}.svg-icon{width:16px;height:16px;display:inline-block;fill:#f5f5f5;padding-right:5px;padding-top:4px;vertical-align:text-top}.admonition.attention a.download>i.admonition-title:before,.admonition.caution a.download>i.admonition-title:before,.admonition.danger a.download>i.admonition-title:before,.admonition.error a.download>i.admonition-title:before,.admonition.hint a.download>i.admonition-title:before,.admonition.important a.download>i.admonition-title:before,.admonition.note a.download>i.admonition-title:before,.admonition.seealso a.download>i.admonition-title:before,.admonition.tip a.download>i.admonition-title:before,.admonition.warning a.download>i.admonition-title:before,a.download>i.material-icons{position:relative;top:5px}a.download{text-decoration:none}.wrapper:after{content:"";display:table;clear:both}.wrapper{max-width:1090px;margin-right:auto;margin-left:auto;padding-right:45px;padding-left:30px}@media screen and (max-width:1024px){.wrapper{max-width:1120px;padding-right:15px;padding-left:15px}}.mdl-layout{margin-top:76px}.document{width:100%;margin:0 auto;display:flex}@media (min-width:1795px){.document{width:1400px}}.document .page-content{width:100%;margin:0 auto;padding:0 12px}@media (min-width:992px){.document .page-content{width:90%;padding:0 5%}}@media (min-width:1200px){.document .page-content{width:calc(90% - 230px);padding:0 5%}}.document .side-doc-outline{width:230px}@media (max-width:1199px){.document .side-doc-outline{display:none}}.document .side-doc-outline--content{position:fixed;overflow-x:auto;overflow-y:auto;width:inherit}.document .side-doc-outline--content::-webkit-scrollbar{width:6px}.document .side-doc-outline--content::-webkit-scrollbar-track{border-radius:6px}.document .side-doc-outline--content::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3);border-radius:6px;box-shadow:0 0 0 1px hsla(0,0%,100%,.3)}@keyframes float-in{0%{transform:translateY(.5rem);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes float-out{0%{transform:translateY(0);opacity:1}to{transform:translateY(.5rem);opacity:0}}.page-content .headerlink{display:inline-block;text-decoration:none;margin-left:.8rem;color:inherit;opacity:0}.page-content .headerlink:hover{animation:float-in .2s cubic-bezier(.4,0,.2,1) 0s forwards}.page-content h1 .toc-backref,.page-content h2 .toc-backref,.page-content h3 .toc-backref,.page-content h4 .toc-backref,.page-content h5 .toc-backref,.page-content h6 .toc-backref{text-decoration:none}.page-content h1:hover .headerlink,.page-content h2:hover .headerlink,.page-content h3:hover .headerlink,.page-content h4:hover .headerlink,.page-content h5:hover .headerlink,.page-content h6:hover .headerlink{animation:float-in .2s cubic-bezier(.4,0,.2,1) 0s forwards}.page-content h1{font-size:2rem;line-height:2.25rem}.page-content h2{font-size:1.75rem;line-height:2rem;padding-top:1.5rem;margin-top:0;margin-bottom:1rem}.page-content h3{font-size:1.5rem;line-height:1.75rem;padding-top:1rem;margin-top:0;margin-bottom:.75rem}.page-content h4{font-size:1.25rem;line-height:1.5rem;padding-top:.75rem;margin-top:0;margin-bottom:.5rem}.page-content div.page-content h5{font-size:1.1rem;line-height:1.5rem;padding-top:2rem;margin-top:0;margin-bottom:1rem}.page-content div.page-content h6{font-size:1rem;line-height:1.5rem;padding-top:2rem;margin-top:0;margin-bottom:1rem}.admonition{padding:12px 20px;margin-top:10px;margin-bottom:10px}.admonition p.last{margin:16px}.admonition .admonition-title{font-size:16px;font-weight:700;color:#555;text-transform:uppercase;margin-top:7px}.admonition.note{border-left:4px solid #00bcd4;background-color:rgba(0,188,212,.1)}.admonition.note .admonition-title{font-size:16px;font-weight:700;color:#00bcd4;margin-top:4px;margin-bottom:8px}.admonition.note .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"info_outline";font-size:18px}.admonition.seealso{border-left:4px solid #00bcd4;background-color:rgba(0,188,212,.1)}.admonition.seealso .admonition-title{font-size:16px;font-weight:700;color:#00bcd4;margin-top:4px;margin-bottom:8px}.admonition.seealso .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"search";font-size:18px}.admonition.hint{border-left:4px solid #00bcd4;background-color:rgba(0,188,212,.1)}.admonition.hint .admonition-title{font-size:16px;font-weight:700;color:#00bcd4;margin-top:4px;margin-bottom:8px}.admonition.hint .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"help_outline";font-size:18px}.admonition.warning{border-left:4px solid #ffc107;background-color:rgba(255,193,7,.1)}.admonition.warning .admonition-title{font-size:16px;font-weight:700;color:#ffc107;margin-top:4px;margin-bottom:8px}.admonition.warning .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"warning";font-size:18px}.admonition.attention{border-left:4px solid #ffc107;background-color:rgba(255,193,7,.1)}.admonition.attention .admonition-title{font-size:16px;font-weight:700;color:#ffc107;margin-top:4px;margin-bottom:8px}.admonition.attention .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"warning";font-size:18px}.admonition.tip{border-left:4px solid #8bc34a;background-color:rgba(139,195,74,.1)}.admonition.tip .admonition-title{font-size:16px;font-weight:700;color:#8bc34a;margin-top:4px;margin-bottom:8px}.admonition.tip .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"lightbulb_outline";font-size:18px}.admonition.important{border-left:4px solid #8bc34a;background-color:rgba(139,195,74,.1)}.admonition.important .admonition-title{font-size:16px;font-weight:700;color:#8bc34a;margin-top:4px;margin-bottom:8px}.admonition.important .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"check_circle";font-size:18px}.admonition.error{border-left:4px solid #f44336;background-color:rgba(244,67,54,.1)}.admonition.error .admonition-title{font-size:16px;font-weight:700;color:#f44336;margin-top:4px;margin-bottom:8px}.admonition.error .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"error_outline";font-size:18px}.admonition.caution{border-left:4px solid #f44336;background-color:rgba(244,67,54,.1)}.admonition.caution .admonition-title{font-size:16px;font-weight:700;color:#f44336;margin-top:4px;margin-bottom:8px}.admonition.caution .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"error_outline";font-size:18px}.admonition.danger{border-left:4px solid #f44336;background-color:rgba(244,67,54,.1)}.admonition.danger .admonition-title{font-size:16px;font-weight:700;color:#f44336;margin-top:4px;margin-bottom:8px}.admonition.danger .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"error_outline";font-size:18px}.page-content .highlight{margin:1px 0}.page-content .highlight pre{background:rgba(0,0,0,.05);color:rgba(0,0,0,.87);font-family:Menlo,DejaVu Sans Mono,Liberation Mono,Consolas,Ubuntu Mono,Courier New,andale mono,lucida console,monospace;padding:.75rem;overflow:auto;overflow-y:hidden}.page-content .highlight pre .nd,.page-content .highlight pre .o{color:rgba(0,0,0,.87)}.page-content div.highlight-console div.highlight{background:none}.page-content .output .highlight pre{color:rgba(0,0,0,.87);background:#fafafa;border:1px solid #999;padding:.75rem}.page-content .code,.page-content code:not(.download){margin:0;border-radius:2px}.page-content .code,.page-content .code span.pre,.page-content code:not(.download),.page-content code:not(.download) span.pre{font-family:Menlo,DejaVu Sans Mono,Liberation Mono,Consolas,Ubuntu Mono,Courier New,andale mono,lucida console,monospace}.page-content .viewcode-link{padding-left:2em;font-size:80%}.page-content .class>dt,.page-content .function>dt,.page-content .method>dt,.page-content .rubric{display:table;margin:10px 0;font-size:100%;line-height:normal;background:#e7f2fa;color:#2b98f0;border-top:3px solid #55adf3;padding:10px;position:relative}.page-content .class>dt .descclassname,.page-content .class>dt .descname,.page-content .function>dt .descclassname,.page-content .function>dt .descname,.page-content .method>dt .descclassname,.page-content .method>dt .descname,.page-content .rubric .descclassname,.page-content .rubric .descname{color:rgba(0,0,0,.87);background:#e7f2fa;padding:3px}.page-content .class>dt em,.page-content .function>dt em,.page-content .method>dt em,.page-content .rubric em{padding:0 2px}.page-content .rubric{margin:30px 0 10px}.page-content .field-body{padding-left:40px}.page-content .field-body ul{padding:0 0 0 16px;margin:0}.page-content .seealso .docutils>dt{float:left;clear:left;padding:0 6px}.page-content .seealso .docutils>dd{padding-left:6em}.page-content .nblast{padding-bottom:1em}.page-content pre{font-size:90%;background:#eee;color:#455a64;padding:16px 32px;width:auto;border-radius:4px;word-wrap:break-word}.page-content pre:hover:before{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;padding:0 .5rem;content:attr(click-to-copy);color:rgba(0,0,0,.5);border-radius:4px;position:relative;float:right;top:-.5rem;right:-.5rem;background:#c8c8c8;font-size:.8rem;cursor:pointer}.page-content blockquote{font-size:1rem;padding:0 1rem;border-left:3px solid rgba(0,0,0,.05)}.page-content blockquote:after{content:""!important;margin-left:0}.page-content blockquote:before{content:""!important}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list){margin:1.5rem 0;table-layout:fixed;max-width:100%;min-width:70%}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{white-space:normal;overflow-wrap:break-word}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) caption{font-size:16px;margin:1rem 0 .8rem;white-space:normal}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) caption .caption-number{font-style:normal}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) caption .caption-number:after{content:"\00a0"}.globaltoc .caption,.globaltoc .toc{display:none}.globaltoc ul{list-style-type:none;padding:0;margin:0}.globaltoc ul li{min-height:18px}.globaltoc ul li .link-wrapper{display:flex;justify-content:space-between}.globaltoc ul li .link-wrapper>a{padding:4px 0;display:block;width:100%;font-size:1rem;text-decoration:none;color:#757575}.globaltoc ul li .link-wrapper>a.current{font-weight:700}.globaltoc .nav-toggle{padding:0;float:right;display:flex;align-items:center;justify-content:center;height:36px}.globaltoc .nav-toggle>a{padding:0;margin-left:0;margin-right:4px;cursor:pointer}.globaltoc .nav-toggle>a>i{font-size:18px}.globaltoc .nav-toggle.show{transform:rotate(180deg)}.globaltoc .nav-toggle.show>a{margin-right:0;margin-left:4px}.globaltoc nav>ul>li>span.link-wrapper{padding-left:8px}.globaltoc nav>ul>li>ul>li>span.link-wrapper{padding-left:16px}.globaltoc nav>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:24px}.globaltoc nav>ul>li>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:32px}.globaltoc nav>ul>li>ul>li>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:40px}.globaltoc nav>ul>li>ul>li>ul>li>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:48px}.localtoc{font-size:.75rem;padding-top:1rem}.localtoc .caption{padding-left:12px}.localtoc .caption-text{font-size:.9rem;font-weight:700}.localtoc>ul>li>a{display:none}.localtoc ul{padding:0;list-style-type:none}.localtoc li{padding-left:6px}.localtoc a{display:block;text-decoration:none;color:inherit;margin-top:8px;padding-left:8px;line-height:1.1rem}.localtoc a.current{padding-left:5px;border-left:3px solid;font-weight:700}.contents.topic,.toctree-wrapper{border-left:5px solid}.contents.topic>p.topic-title,.toctree-wrapper>p.caption{color:#757575;font-size:1rem;padding-left:14px}.contents.topic ul,.toctree-wrapper ul{padding-left:14px;list-style:none;line-height:30px}.contents.topic a,.toctree-wrapper a{font-size:1.2rem;text-decoration:none}.contents.topic a .pre,.toctree-wrapper a .pre{font-size:1rem}.contents.topic>ul>li>a,.toctree-wrapper>ul>li>a{font-size:1.3rem}.contents.topic>ul>li>a .pre,.toctree-wrapper>ul>li>a .pre{font-size:1.1rem}.page-content ul li{margin:.3rem 0}.page-content ul li p{margin:0}.page-content .option-list .option{font-family:Menlo,DejaVu Sans Mono,Liberation Mono,Consolas,Ubuntu Mono,Courier New,andale mono,lucida console,monospace}.page-content .option-list td{padding:.5rem;border:none}.mdl-layout__drawer{background-color:#fff}.mdl-layout__drawer::-webkit-scrollbar{width:6px}.mdl-layout__drawer::-webkit-scrollbar-track{border-radius:6px}.mdl-layout__drawer::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3);border-radius:6px;box-shadow:0 0 0 1px hsla(0,0%,100%,.3)}.mdl-layout__drawer>.mdl-layout-title{font-weight:700;text-align:right;margin:0;padding:0;line-height:32px;border-bottom:1px solid rgba(0,0,0,.1);min-height:64px}.mdl-layout__drawer>.mdl-layout-title .title{color:inherit;display:block;height:100%;width:100%;text-decoration:none}.mdl-layout__drawer>.mdl-layout-title .title>img.logo{width:100%;margin:0;padding:0}.mdl-layout__drawer>.mdl-layout-title .title-text{font-weight:700;text-align:right;padding:0 10px;margin:16px 0 8px;line-height:32px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;color:inherit;display:block}nav.breadcrumb>a.mdl-navigation__link{padding:0 8px;font-size:18px}@media (max-width:1199px){nav.breadcrumb{width:calc(100% - 64px)}nav.breadcrumb a.mdl-navigation__link.is-active{overflow-x:hidden;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.admonition.attention nav.breadcrumb i.admonition-title:before,.admonition.caution nav.breadcrumb i.admonition-title:before,.admonition.danger nav.breadcrumb i.admonition-title:before,.admonition.error nav.breadcrumb i.admonition-title:before,.admonition.hint nav.breadcrumb i.admonition-title:before,.admonition.important nav.breadcrumb i.admonition-title:before,.admonition.note nav.breadcrumb i.admonition-title:before,.admonition.seealso nav.breadcrumb i.admonition-title:before,.admonition.tip nav.breadcrumb i.admonition-title:before,.admonition.warning nav.breadcrumb i.admonition-title:before,nav.breadcrumb .admonition.attention i.admonition-title:before,nav.breadcrumb .admonition.caution i.admonition-title:before,nav.breadcrumb .admonition.danger i.admonition-title:before,nav.breadcrumb .admonition.error i.admonition-title:before,nav.breadcrumb .admonition.hint i.admonition-title:before,nav.breadcrumb .admonition.important i.admonition-title:before,nav.breadcrumb .admonition.note i.admonition-title:before,nav.breadcrumb .admonition.seealso i.admonition-title:before,nav.breadcrumb .admonition.tip i.admonition-title:before,nav.breadcrumb .admonition.warning i.admonition-title:before,nav.breadcrumb a.mdl-navigation__link:not(.is-active),nav.breadcrumb i.material-icons{display:none}}div.mdl-layout__header{margin-top:77px}.mdl-layout__drawer-button{top:13px!important}div.mdl-layout__header-row.header-links{background:hsla(0,0%,100%,.2);width:100%;overflow-x:auto;overflow-y:hidden}div.mdl-layout__header-row.header-links a.mdl-navigation__link{font-size:1rem}div.mdl-layout__header-row.header-links a.mdl-navigation__link i{font-size:1.2rem;margin:0 8px;position:relative;bottom:-.1rem}div.mdl-layout__header-row.header-links a.mdl-navigation__link:hover{background-color:#2196f3;color:#eee}div.mdl-layout__header-row.header-links a.mdl-navigation__link[href="#"]{background-color:#2196f3;opacity:1;color:#fff}.site-title{font-weight:300!important;line-height:57px;letter-spacing:-1px;margin-bottom:0;float:left;color:#fff}.site-title,.site-title:visited{color:#424242}.site-header{position:fixed;top:0;width:100%;min-height:55px;padding-top:10px;padding-bottom:10px;background-color:#048ccc;z-index:10;font-weight:300;font-size:17px;border-bottom:1px solid #fff}.site-header-logo{width:120px;display:initial}.site-nav{float:right;line-height:57px}.site-nav .menu-icon,.site-nav .nav-trigger{display:none}.site-nav .page-link{color:#fff;line-height:1.5;font-weight:300}.site-nav .page-link:not(:last-child){margin-right:40px}.site-nav .page-link:hover{color:#fff;text-shadow:-.06ex 0 #fff,.06ex 0 #fff}.site-nav .page-link.page-current{color:#fff;text-decoration:underline}@media screen and (max-width:1024px){.site-nav{position:absolute;top:9px;right:15px;background-color:#178dc9;border-radius:2px;text-align:right}.site-nav label[for=nav-trigger]{display:block;float:right;width:36px;height:36px;z-index:2;cursor:pointer}.site-nav .menu-icon{display:block;float:right;width:36px;height:26px;line-height:0;padding-top:20px;text-align:center}.site-nav .menu-icon>svg{fill:#fff}.site-nav input~.trigger{clear:both;display:none}.site-nav input:checked~.trigger{display:block;padding-bottom:5px}.site-nav .page-link{padding:5px 10px;display:block;margin-left:20px}.site-nav .page-link:not(:last-child){margin-right:0}}footer.mdl-mini-footer{background-color:#212121}footer.mdl-mini-footer>div.mdl-mini-footer__left-section{margin-bottom:20px;display:flex;flex-direction:column}footer.mdl-mini-footer>div.mdl-mini-footer__left-section .mdl-logo{font-size:1.1rem}footer.mdl-mini-footer>div.mdl-mini-footer__right-section{font-size:.9rem;display:flex;flex-direction:column;justify-content:flex-end}footer.mdl-mini-footer>div.mdl-mini-footer__right-section a{color:inherit;font-weight:700;text-decoration:none}footer.mdl-mini-footer p.caption{display:none}.pagenation{width:100%;margin-top:80px;height:92px;background-color:#424242;display:flex}.pagenation #button-next,.pagenation #button-prev,.pagenation .button-common{text-transform:none;padding:0;height:92px;display:flex;justify-content:center;align-items:center;color:#fff}.pagenation #button-prev{margin-right:auto}.pagenation #button-prev .pagenation-text{text-align:left}.pagenation #button-next{margin-left:auto;flex-direction:row-reverse}.pagenation #button-next .pagenation-text{text-align:right}.pagenation-arrow-L{margin-right:20px}.pagenation-arrow-R{margin-left:20px}.pagenation-text{line-height:30px;font-size:20px}.pagenation-direction{opacity:.7;font-size:18px}@media screen and (max-width:1024px){.pagenation #button-prev{width:20%}.pagenation #button-next{width:80%}.pagenation #button-prev .pagenation-text{display:none}}@media screen and (min-width:1025px){.pagenation #button-next,.pagenation #button-prev{width:50%}.pagenation #button-prev .pagenation-text{display:block}}.site-footer{border-top:1px solid #f5f5f5;padding:30px 0;background-color:#424242;position:relative;z-index:10}.site-footer .footer-category-title{color:#048ccc}.site-footer a,.site-footer a:visited{color:#f5f5f5!important}.site-footer2{background-color:#424242;padding-top:40px;padding-bottom:10px;position:relative;z-index:10}.footer-heading{margin-bottom:15px}.contact-list,.social-media-list{list-style:none;margin-left:0}.footer-bottom-warning{font-size:80%;color:#fff;float:left}.footer-logo{width:200px;margin-bottom:30px;margin-top:30px}.footer-col{float:left;margin-bottom:15px;padding-left:15px}.footer-text{color:#f5f5f5}#waterfall-exp::-webkit-input-placeholder{color:#ccc}#waterfall-exp:-ms-input-placeholder{color:#ccc}#waterfall-exp::-moz-placeholder{color:#ccc}ul.search span.highlighted{font-weight:700}ul.search>li{margin-bottom:24px}#search-results ul{list-style:none;padding:0}#search-results ul li>a{text-decoration:none;font-size:1.2rem}a.download:before{content:"file_download";position:relative;top:5px;margin-right:5px}button.download{position:sticky;margin-left:1em}.mdl-card{margin:1em 1.5em 1em 0;display:inline-block;width:250px;min-height:140px;padding:18px}.mdl-card:hover{box-shadow:0 10px 20px rgba(0,0,0,.25),0 6px 6px rgba(0,0,0,.22);color:#000;cursor:pointer}.mdl-card__title{padding:0 0 1em;font-size:18px;color:#444}.mdl-card__supporting-text{line-height:1.5rem;padding:0;width:100%}.head-card.mdl-card{width:auto;display:block;max-width:800px;padding:24px}.head-card>.mdl-card__title{padding-bottom:0;height:60px;font-weight:700;text-transform:uppercase}.head-card>.mdl-card__menu{color:#fff}.head-card>.mdl-card__actions{padding:0}.cards{display:flex;flex-direction:row;flex-wrap:wrap} +.admonition,.mdl-shadow--2dp,.page-content pre:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list){box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-shadow--3dp{box-shadow:0 3px 4px 0 rgba(0,0,0,.14),0 3px 3px -2px rgba(0,0,0,.2),0 1px 8px 0 rgba(0,0,0,.12)}.mdl-shadow--4dp{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2)}.mdl-shadow--6dp{box-shadow:0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.2)}.mdl-shadow--8dp{box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.2)}.mdl-shadow--16dp{box-shadow:0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.2)}.mdl-shadow--24dp{box-shadow:0 9px 46px 8px rgba(0,0,0,.14),0 11px 15px -7px rgba(0,0,0,.12),0 24px 38px 3px rgba(0,0,0,.2)}.mdl-data-table,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list){position:relative;border:1px solid rgba(0,0,0,.12);border-collapse:collapse;white-space:nowrap;font-size:13px;background-color:#fff}.mdl-data-table thead,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) thead{padding-bottom:3px}.mdl-data-table thead .mdl-data-table__select,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) thead .mdl-data-table__select{margin-top:0}.mdl-data-table tbody tr,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) tbody tr{position:relative;height:48px;transition-duration:.28s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-property:background-color}.mdl-data-table tbody tr.is-selected,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) tbody tr.is-selected{background-color:#e0e0e0}.mdl-data-table tbody tr:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) tbody tr:hover{background-color:#eee}.mdl-data-table td,.mdl-data-table th,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{padding:0 18px 12px;text-align:right}.mdl-data-table td:first-of-type,.mdl-data-table th:first-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td:first-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th:first-of-type{padding-left:24px}.mdl-data-table td:last-of-type,.mdl-data-table th:last-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td:last-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th:last-of-type{padding-right:24px}.mdl-data-table td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td{position:relative;vertical-align:middle;height:48px;border-top:1px solid rgba(0,0,0,.12);border-bottom:1px solid rgba(0,0,0,.12);padding-top:12px;box-sizing:border-box}.mdl-data-table td .mdl-data-table__select,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td .mdl-data-table__select{vertical-align:middle}.mdl-data-table th,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{position:relative;vertical-align:bottom;text-overflow:ellipsis;font-size:14px;font-weight:700;line-height:24px;letter-spacing:0;height:48px;font-size:12px;color:rgba(0,0,0,.54);padding-bottom:8px;box-sizing:border-box}.mdl-data-table th.mdl-data-table__header--sorted-ascending,.mdl-data-table th.mdl-data-table__header--sorted-descending,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending{color:rgba(0,0,0,.87)}.mdl-data-table th.mdl-data-table__header--sorted-ascending:before,.mdl-data-table th.mdl-data-table__header--sorted-descending:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:before{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;word-wrap:normal;font-feature-settings:"liga";-webkit-font-feature-settings:"liga";-webkit-font-smoothing:antialiased;font-size:16px;content:"\e5d8";margin-right:5px;vertical-align:sub}.mdl-data-table th.mdl-data-table__header--sorted-ascending:hover,.mdl-data-table th.mdl-data-table__header--sorted-descending:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:hover{cursor:pointer}.mdl-data-table th.mdl-data-table__header--sorted-ascending:hover:before,.mdl-data-table th.mdl-data-table__header--sorted-descending:hover:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending:hover:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:hover:before{color:rgba(0,0,0,.26)}.mdl-data-table th.mdl-data-table__header--sorted-descending:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:before{content:"\e5db"}.mdl-data-table__select{width:16px}.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{text-align:left}.mdl-mini-footer{display:flex;flex-flow:row wrap;justify-content:space-between;padding:32px 16px;color:#9e9e9e;background-color:#424242}.mdl-mini-footer:after{content:"";display:block}.mdl-mini-footer .mdl-logo{line-height:36px}.mdl-mini-footer--link-list,.mdl-mini-footer__link-list,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul{display:flex;flex-flow:row nowrap;list-style:none;margin:0;padding:0}.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul li{margin-bottom:0;margin-right:16px}@media screen and (min-width:760px){.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul li{line-height:36px}}.mdl-mini-footer--link-list a,.mdl-mini-footer__link-list a,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul a{color:inherit;text-decoration:none;white-space:nowrap}.mdl-mini-footer--left-section,.mdl-mini-footer__left-section{display:inline-block;order:0}.mdl-mini-footer--right-section,.mdl-mini-footer__right-section{display:inline-block;order:1}.mdl-mini-footer--social-btn,.mdl-mini-footer__social-btn{width:36px;height:36px;padding:0;margin:0;background-color:#9e9e9e;border:none}.mdl-card{display:flex;flex-direction:column;font-size:16px;font-weight:400;min-height:200px;overflow:hidden;width:330px;z-index:1;position:relative;background:#fff;border-radius:2px;box-sizing:border-box}.mdl-card__media{background-color:#ff6e40;background-repeat:repeat;background-position:50% 50%;background-size:cover;background-origin:padding-box;background-attachment:scroll;box-sizing:border-box}.mdl-card__title{align-items:center;color:#000;display:block;display:flex;justify-content:stretch;line-height:normal;padding:16px;perspective-origin:165px 56px;transform-origin:165px 56px;box-sizing:border-box}.mdl-card__title.mdl-card--border{border-bottom:1px solid rgba(0,0,0,.1)}.mdl-card__title-text{align-self:flex-end;color:inherit;display:block;display:flex;font-size:24px;font-weight:300;line-height:normal;overflow:hidden;transform-origin:149px 48px;margin:0}.mdl-card__subtitle-text{font-size:14px;color:rgba(0,0,0,.54);margin:0}.mdl-card__supporting-text{color:rgba(0,0,0,.54);font-size:1rem;line-height:18px;overflow:hidden;padding:16px;width:90%}.mdl-card__supporting-text.mdl-card--border{border-bottom:1px solid rgba(0,0,0,.1)}.mdl-card__actions{font-size:16px;line-height:normal;width:100%;background-color:transparent;padding:8px;box-sizing:border-box}.mdl-card__actions.mdl-card--border{border-top:1px solid rgba(0,0,0,.1)}.mdl-card--expand{flex-grow:1}.mdl-card__menu{position:absolute;right:16px;top:16px}.mdl-button{background:transparent;border:none;border-radius:2px;color:#000;position:relative;height:36px;margin:0;min-width:64px;padding:0 16px;display:inline-block;font-family:Roboto,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;text-transform:uppercase;line-height:1;letter-spacing:0;overflow:hidden;will-change:box-shadow;transition:box-shadow .2s cubic-bezier(.4,0,1,1),background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1);outline:none;cursor:pointer;text-decoration:none;text-align:center;line-height:36px;vertical-align:middle}.mdl-button::-moz-focus-inner{border:0}.mdl-button:hover{background-color:hsla(0,0%,62%,.2)}.mdl-button:focus:not(:active){background-color:rgba(0,0,0,.12)}.mdl-button:active{background-color:hsla(0,0%,62%,.4)}.mdl-button.mdl-button--colored{color:#2196f3}.mdl-button.mdl-button--colored:focus:not(:active){background-color:rgba(0,0,0,.12)}input.mdl-button[type=submit]{-webkit-appearance:none}.mdl-button--raised{background:hsla(0,0%,62%,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-button--raised:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:hsla(0,0%,62%,.4)}.mdl-button--raised:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:hsla(0,0%,62%,.4)}.mdl-button--raised.mdl-button--colored{background:#2196f3;color:#fff}.mdl-button--raised.mdl-button--colored:active,.mdl-button--raised.mdl-button--colored:focus:not(:active),.mdl-button--raised.mdl-button--colored:hover{background-color:#2196f3}.mdl-button--raised.mdl-button--colored .mdl-ripple{background:#fff}.mdl-button--fab{border-radius:50%;font-size:24px;height:56px;margin:auto;min-width:56px;width:56px;padding:0;overflow:hidden;background:hsla(0,0%,62%,.2);box-shadow:0 1px 1.5px 0 rgba(0,0,0,.12),0 1px 1px 0 rgba(0,0,0,.24);position:relative;line-height:normal}.admonition.attention .mdl-button--fab .admonition-title:before,.admonition.caution .mdl-button--fab .admonition-title:before,.admonition.danger .mdl-button--fab .admonition-title:before,.admonition.error .mdl-button--fab .admonition-title:before,.admonition.hint .mdl-button--fab .admonition-title:before,.admonition.important .mdl-button--fab .admonition-title:before,.admonition.note .mdl-button--fab .admonition-title:before,.admonition.seealso .mdl-button--fab .admonition-title:before,.admonition.tip .mdl-button--fab .admonition-title:before,.admonition.warning .mdl-button--fab .admonition-title:before,.mdl-button--fab .admonition.attention .admonition-title:before,.mdl-button--fab .admonition.caution .admonition-title:before,.mdl-button--fab .admonition.danger .admonition-title:before,.mdl-button--fab .admonition.error .admonition-title:before,.mdl-button--fab .admonition.hint .admonition-title:before,.mdl-button--fab .admonition.important .admonition-title:before,.mdl-button--fab .admonition.note .admonition-title:before,.mdl-button--fab .admonition.seealso .admonition-title:before,.mdl-button--fab .admonition.tip .admonition-title:before,.mdl-button--fab .admonition.warning .admonition-title:before,.mdl-button--fab .material-icons,.mdl-button--fab a.download:before{position:absolute;top:50%;left:50%;transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--fab.mdl-button--mini-fab{height:40px;min-width:40px;width:40px}.mdl-button--fab .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button--fab:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:hsla(0,0%,62%,.4)}.mdl-button--fab:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:hsla(0,0%,62%,.4)}.mdl-button--fab.mdl-button--colored{background:#ff6e40;color:#fff}.mdl-button--fab.mdl-button--colored:active,.mdl-button--fab.mdl-button--colored:focus:not(:active),.mdl-button--fab.mdl-button--colored:hover{background-color:#ff6e40}.mdl-button--fab.mdl-button--colored .mdl-ripple{background:#fff}.mdl-button--icon{border-radius:50%;font-size:24px;height:32px;margin-left:0;margin-right:0;min-width:32px;width:32px;padding:0;overflow:hidden;color:inherit;line-height:normal}.admonition.attention .mdl-button--icon .admonition-title:before,.admonition.caution .mdl-button--icon .admonition-title:before,.admonition.danger .mdl-button--icon .admonition-title:before,.admonition.error .mdl-button--icon .admonition-title:before,.admonition.hint .mdl-button--icon .admonition-title:before,.admonition.important .mdl-button--icon .admonition-title:before,.admonition.note .mdl-button--icon .admonition-title:before,.admonition.seealso .mdl-button--icon .admonition-title:before,.admonition.tip .mdl-button--icon .admonition-title:before,.admonition.warning .mdl-button--icon .admonition-title:before,.mdl-button--icon .admonition.attention .admonition-title:before,.mdl-button--icon .admonition.caution .admonition-title:before,.mdl-button--icon .admonition.danger .admonition-title:before,.mdl-button--icon .admonition.error .admonition-title:before,.mdl-button--icon .admonition.hint .admonition-title:before,.mdl-button--icon .admonition.important .admonition-title:before,.mdl-button--icon .admonition.note .admonition-title:before,.mdl-button--icon .admonition.seealso .admonition-title:before,.mdl-button--icon .admonition.tip .admonition-title:before,.mdl-button--icon .admonition.warning .admonition-title:before,.mdl-button--icon .material-icons,.mdl-button--icon a.download:before{position:absolute;top:50%;left:50%;transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--icon.mdl-button--mini-icon{height:24px;min-width:24px;width:24px}.admonition.attention .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.caution .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.danger .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.error .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.hint .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.important .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.note .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.seealso .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.tip .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.warning .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.attention .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.caution .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.danger .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.error .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.hint .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.important .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.note .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.seealso .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.tip .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.warning .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .material-icons,.mdl-button--icon.mdl-button--mini-icon a.download:before{top:0;left:0}.mdl-button--icon .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button__ripple-container{display:block;height:100%;left:0;position:absolute;top:0;width:100%;z-index:0;overflow:hidden}.mdl-button.mdl-button--disabled .mdl-button__ripple-container .mdl-ripple,.mdl-button[disabled] .mdl-button__ripple-container .mdl-ripple{background-color:transparent}.mdl-button--primary.mdl-button--primary{color:#2196f3}.mdl-button--primary.mdl-button--primary .mdl-ripple{background:#fff}.mdl-button--primary.mdl-button--primary.mdl-button--fab,.mdl-button--primary.mdl-button--primary.mdl-button--raised{color:#fff;background-color:#2196f3}.mdl-button--accent.mdl-button--accent{color:#ff6e40}.mdl-button--accent.mdl-button--accent .mdl-ripple{background:#fff}.mdl-button--accent.mdl-button--accent.mdl-button--fab,.mdl-button--accent.mdl-button--accent.mdl-button--raised{color:#fff;background-color:#ff6e40}.mdl-button.mdl-button--disabled.mdl-button--disabled,.mdl-button[disabled][disabled]{color:rgba(0,0,0,.26);cursor:default;background-color:transparent}.mdl-button--fab.mdl-button--disabled.mdl-button--disabled,.mdl-button--fab[disabled][disabled]{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26)}.mdl-button--raised.mdl-button--disabled.mdl-button--disabled,.mdl-button--raised[disabled][disabled]{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26);box-shadow:none}.mdl-button--colored.mdl-button--disabled.mdl-button--disabled,.mdl-button--colored[disabled][disabled]{color:rgba(0,0,0,.26)}.admonition.attention .mdl-button .admonition-title:before,.admonition.caution .mdl-button .admonition-title:before,.admonition.danger .mdl-button .admonition-title:before,.admonition.error .mdl-button .admonition-title:before,.admonition.hint .mdl-button .admonition-title:before,.admonition.important .mdl-button .admonition-title:before,.admonition.note .mdl-button .admonition-title:before,.admonition.seealso .mdl-button .admonition-title:before,.admonition.tip .mdl-button .admonition-title:before,.admonition.warning .mdl-button .admonition-title:before,.mdl-button .admonition.attention .admonition-title:before,.mdl-button .admonition.caution .admonition-title:before,.mdl-button .admonition.danger .admonition-title:before,.mdl-button .admonition.error .admonition-title:before,.mdl-button .admonition.hint .admonition-title:before,.mdl-button .admonition.important .admonition-title:before,.mdl-button .admonition.note .admonition-title:before,.mdl-button .admonition.seealso .admonition-title:before,.mdl-button .admonition.tip .admonition-title:before,.mdl-button .admonition.warning .admonition-title:before,.mdl-button .material-icons,.mdl-button a.download:before{vertical-align:middle}.font-light{font-weight:300}.font-regular{font-weight:400}.font-heavy{font-weight:700}.left{text-align:left}.right{text-align:right}.center{text-align:center;margin-left:auto;margin-right:auto}.justify{text-align:justify}.hidden-sm{display:none}.container{width:100%;margin-left:auto;margin-right:auto}.row{position:relative;width:100%}.row [class^=col]{float:left;margin:.5rem 1%;min-height:.125rem}.row:after{content:"";display:table;clear:both}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12{width:98%}.col-1-sm{width:6.33333%}.col-2-sm{width:14.66667%}.col-3-sm{width:23%}.col-4-sm{width:31.33333%}.col-5-sm{width:39.66667%}.col-6-sm{width:48%}.col-7-sm{width:56.33333%}.col-8-sm{width:64.66667%}.col-9-sm{width:73%}.col-10-sm{width:81.33333%}.col-11-sm{width:89.66667%}.col-12-sm{width:98%}@media only screen and (min-width:45em){.col-1{width:6.33333%}.col-2{width:14.66667%}.col-3{width:23%}.col-4{width:31.33333%}.col-5{width:39.66667%}.col-6{width:48%}.col-7{width:56.33333%}.col-8{width:64.66667%}.col-9{width:73%}.col-10{width:81.33333%}.col-11{width:89.66667%}.col-12{width:98%}.hidden-sm{display:block}}.row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;flex-wrap:wrap}.row>[class*=col-]{display:flex;flex-direction:column}.admonition.attention .admonition-title:before,.admonition.caution .admonition-title:before,.admonition.danger .admonition-title:before,.admonition.error .admonition-title:before,.admonition.hint .admonition-title:before,.admonition.important .admonition-title:before,.admonition.note .admonition-title:before,.admonition.seealso .admonition-title:before,.admonition.tip .admonition-title:before,.admonition.warning .admonition-title:before,.material-icons,a.download:before{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:"liga"}html{font-size:16px}body{display:block!important;background-color:#fafafa;font-size:1rem;line-height:1.5rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}.mdl-layout__content:focus{outline:none}.mdl-layout__content header.mdl-layout__drawer{display:none}.mdl-layout--fixed-drawer>.mdl-layout__content{margin-left:300px}a.download>code.download,blockquote,h1,h2,h3,h4,h5,h6,span.mdl-layout-title{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}.contents,.contents a,.globaltoc a.current,.toc-backref,.toctree-wrapper,.toctree-wrapper a,h1,h2,h3,h4,h5,h6{color:#048ccc!important}a{text-decoration:none}.page-content,.page-content dd,.page-content dl,.page-content dt,.page-content ol,.page-content p,.page-content table,.page-content td,.page-content th,.page-content ul{font-size:1rem}.brand{color:inherit;text-decoration:none}.section{overflow-x:auto}img{max-width:100%;display:block;margin-left:auto;margin-right:auto}div.figure p.caption{text-align:center;margin-top:.75rem}div.figure p.caption span.caption-number{font-style:normal}div.figure p.caption .caption-number:after{content:"\00a0"}.svg-icon{width:16px;height:16px;display:inline-block;fill:#f5f5f5;padding-right:5px;padding-top:4px;vertical-align:text-top}.admonition.attention a.download>i.admonition-title:before,.admonition.caution a.download>i.admonition-title:before,.admonition.danger a.download>i.admonition-title:before,.admonition.error a.download>i.admonition-title:before,.admonition.hint a.download>i.admonition-title:before,.admonition.important a.download>i.admonition-title:before,.admonition.note a.download>i.admonition-title:before,.admonition.seealso a.download>i.admonition-title:before,.admonition.tip a.download>i.admonition-title:before,.admonition.warning a.download>i.admonition-title:before,a.download>i.material-icons{position:relative;top:5px}a.download{text-decoration:none}.wrapper:after{content:"";display:table;clear:both}.wrapper{max-width:1090px;margin-right:auto;margin-left:auto;padding-right:45px;padding-left:30px}@media screen and (max-width:1024px){.wrapper{max-width:1120px;padding-right:15px;padding-left:15px}}.mdl-layout{margin-top:76px}.document{width:100%;margin:0 auto;display:flex}@media (min-width:1795px){.document{width:100%}}.document .page-content{width:100%;margin:0 auto;padding:0 12px}@media (min-width:992px){.document .page-content{width:90%;padding:0 5%}}@media (min-width:1200px){.document .page-content{width:calc(90% - 230px);padding:0 5%}}.document .side-doc-outline{width:230px}@media (max-width:1199px){.document .side-doc-outline{display:none}}.document .side-doc-outline--content{position:fixed;overflow-x:auto;overflow-y:auto;width:inherit;right:0}.document .side-doc-outline--content::-webkit-scrollbar{width:6px}.document .side-doc-outline--content::-webkit-scrollbar-track{border-radius:6px}.document .side-doc-outline--content::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3);border-radius:6px;box-shadow:0 0 0 1px hsla(0,0%,100%,.3)}@keyframes float-in{0%{transform:translateY(.5rem);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes float-out{0%{transform:translateY(0);opacity:1}to{transform:translateY(.5rem);opacity:0}}.page-content .headerlink{display:inline-block;text-decoration:none;margin-left:.8rem;color:inherit;opacity:0}.page-content .headerlink:hover{animation:float-in .2s cubic-bezier(.4,0,.2,1) 0s forwards}.page-content h1 .toc-backref,.page-content h2 .toc-backref,.page-content h3 .toc-backref,.page-content h4 .toc-backref,.page-content h5 .toc-backref,.page-content h6 .toc-backref{text-decoration:none}.page-content h1:hover .headerlink,.page-content h2:hover .headerlink,.page-content h3:hover .headerlink,.page-content h4:hover .headerlink,.page-content h5:hover .headerlink,.page-content h6:hover .headerlink{animation:float-in .2s cubic-bezier(.4,0,.2,1) 0s forwards}.page-content h1{font-size:2rem;line-height:2.25rem}.page-content h2{font-size:1.75rem;line-height:2rem;padding-top:1.5rem;margin-top:0;margin-bottom:1rem}.page-content h3{font-size:1.5rem;line-height:1.75rem;padding-top:1rem;margin-top:0;margin-bottom:.75rem}.page-content h4{font-size:1.25rem;line-height:1.5rem;padding-top:.75rem;margin-top:0;margin-bottom:.5rem}.page-content div.page-content h5{font-size:1.1rem;line-height:1.5rem;padding-top:2rem;margin-top:0;margin-bottom:1rem}.page-content div.page-content h6{font-size:1rem;line-height:1.5rem;padding-top:2rem;margin-top:0;margin-bottom:1rem}.admonition{padding:12px 20px;margin-top:10px;margin-bottom:10px}.admonition p.last{margin:16px}.admonition .admonition-title{font-size:16px;font-weight:700;color:#555;text-transform:uppercase;margin-top:7px}.admonition.note{border-left:4px solid #00bcd4;background-color:rgba(0,188,212,.1)}.admonition.note .admonition-title{font-size:16px;font-weight:700;color:#00bcd4;margin-top:4px;margin-bottom:8px}.admonition.note .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"info_outline";font-size:18px}.admonition.seealso{border-left:4px solid #00bcd4;background-color:rgba(0,188,212,.1)}.admonition.seealso .admonition-title{font-size:16px;font-weight:700;color:#00bcd4;margin-top:4px;margin-bottom:8px}.admonition.seealso .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"search";font-size:18px}.admonition.hint{border-left:4px solid #00bcd4;background-color:rgba(0,188,212,.1)}.admonition.hint .admonition-title{font-size:16px;font-weight:700;color:#00bcd4;margin-top:4px;margin-bottom:8px}.admonition.hint .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"help_outline";font-size:18px}.admonition.warning{border-left:4px solid #ffc107;background-color:rgba(255,193,7,.1)}.admonition.warning .admonition-title{font-size:16px;font-weight:700;color:#ffc107;margin-top:4px;margin-bottom:8px}.admonition.warning .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"warning";font-size:18px}.admonition.attention{border-left:4px solid #ffc107;background-color:rgba(255,193,7,.1)}.admonition.attention .admonition-title{font-size:16px;font-weight:700;color:#ffc107;margin-top:4px;margin-bottom:8px}.admonition.attention .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"warning";font-size:18px}.admonition.tip{border-left:4px solid #8bc34a;background-color:rgba(139,195,74,.1)}.admonition.tip .admonition-title{font-size:16px;font-weight:700;color:#8bc34a;margin-top:4px;margin-bottom:8px}.admonition.tip .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"lightbulb_outline";font-size:18px}.admonition.important{border-left:4px solid #8bc34a;background-color:rgba(139,195,74,.1)}.admonition.important .admonition-title{font-size:16px;font-weight:700;color:#8bc34a;margin-top:4px;margin-bottom:8px}.admonition.important .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"check_circle";font-size:18px}.admonition.error{border-left:4px solid #f44336;background-color:rgba(244,67,54,.1)}.admonition.error .admonition-title{font-size:16px;font-weight:700;color:#f44336;margin-top:4px;margin-bottom:8px}.admonition.error .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"error_outline";font-size:18px}.admonition.caution{border-left:4px solid #f44336;background-color:rgba(244,67,54,.1)}.admonition.caution .admonition-title{font-size:16px;font-weight:700;color:#f44336;margin-top:4px;margin-bottom:8px}.admonition.caution .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"error_outline";font-size:18px}.admonition.danger{border-left:4px solid #f44336;background-color:rgba(244,67,54,.1)}.admonition.danger .admonition-title{font-size:16px;font-weight:700;color:#f44336;margin-top:4px;margin-bottom:8px}.admonition.danger .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"error_outline";font-size:18px}.page-content .highlight{margin:1px 0}.page-content .highlight pre{background:rgba(0,0,0,.05);color:rgba(0,0,0,.87);font-family:Menlo,DejaVu Sans Mono,Liberation Mono,Consolas,Ubuntu Mono,Courier New,andale mono,lucida console,monospace;padding:.75rem;overflow:auto;overflow-y:hidden}.page-content .highlight pre .nd,.page-content .highlight pre .o{color:rgba(0,0,0,.87)}.page-content div.highlight-console div.highlight{background:none}.page-content .output .highlight pre{color:rgba(0,0,0,.87);background:#fafafa;border:1px solid #999;padding:.75rem}.page-content .code,.page-content code:not(.download){margin:0;border-radius:2px}.page-content .code,.page-content .code span.pre,.page-content code:not(.download),.page-content code:not(.download) span.pre{font-family:Menlo,DejaVu Sans Mono,Liberation Mono,Consolas,Ubuntu Mono,Courier New,andale mono,lucida console,monospace}.page-content .viewcode-link{padding-left:2em;font-size:80%}.page-content .class>dt,.page-content .function>dt,.page-content .method>dt,.page-content .rubric{display:table;margin:10px 0;font-size:100%;line-height:normal;background:#e7f2fa;color:#2b98f0;border-top:3px solid #55adf3;padding:10px;position:relative}.page-content .class>dt .descclassname,.page-content .class>dt .descname,.page-content .function>dt .descclassname,.page-content .function>dt .descname,.page-content .method>dt .descclassname,.page-content .method>dt .descname,.page-content .rubric .descclassname,.page-content .rubric .descname{color:rgba(0,0,0,.87);background:#e7f2fa;padding:3px}.page-content .class>dt em,.page-content .function>dt em,.page-content .method>dt em,.page-content .rubric em{padding:0 2px}.page-content .rubric{margin:30px 0 10px}.page-content .field-body{padding-left:40px}.page-content .field-body ul{padding:0 0 0 16px;margin:0}.page-content .seealso .docutils>dt{float:left;clear:left;padding:0 6px}.page-content .seealso .docutils>dd{padding-left:6em}.page-content .nblast{padding-bottom:1em}.page-content pre{font-size:90%;background:#eee;color:#455a64;padding:16px 32px;width:auto;border-radius:4px;word-wrap:break-word}.page-content pre:hover:before{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;padding:0 .5rem;content:attr(click-to-copy);color:rgba(0,0,0,.5);border-radius:4px;position:relative;float:right;top:-.5rem;right:-.5rem;background:#c8c8c8;font-size:.8rem;cursor:pointer}.page-content blockquote{font-size:1rem;padding:0 1rem;border-left:3px solid rgba(0,0,0,.05)}.page-content blockquote:after{content:""!important;margin-left:0}.page-content blockquote:before{content:""!important}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list){margin:1.5rem 0;table-layout:fixed;max-width:100%;min-width:70%}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{white-space:normal;overflow-wrap:break-word}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) caption{font-size:16px;margin:1rem 0 .8rem;white-space:normal}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) caption .caption-number{font-style:normal}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) caption .caption-number:after{content:"\00a0"}.globaltoc .caption,.globaltoc .toc{display:none}.globaltoc ul{list-style-type:none;padding:0;margin:0}.globaltoc ul li{min-height:18px}.globaltoc ul li .link-wrapper{display:flex;justify-content:space-between}.globaltoc ul li .link-wrapper>a{padding:4px 0;display:block;width:100%;font-size:1rem;text-decoration:none;color:#757575}.globaltoc ul li .link-wrapper>a.current{font-weight:700}.globaltoc .nav-toggle{padding:0;float:right;display:flex;align-items:center;justify-content:center;height:36px}.globaltoc .nav-toggle>a{padding:0;margin-left:0;margin-right:4px;cursor:pointer}.globaltoc .nav-toggle>a>i{font-size:18px}.globaltoc .nav-toggle.show{transform:rotate(180deg)}.globaltoc .nav-toggle.show>a{margin-right:0;margin-left:4px}.globaltoc nav>ul>li>span.link-wrapper{padding-left:8px}.globaltoc nav>ul>li>ul>li>span.link-wrapper{padding-left:16px}.globaltoc nav>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:24px}.globaltoc nav>ul>li>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:32px}.globaltoc nav>ul>li>ul>li>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:40px}.globaltoc nav>ul>li>ul>li>ul>li>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:48px}.localtoc{font-size:.75rem;padding-top:1rem}.localtoc .caption{padding-left:12px}.localtoc .caption-text{font-size:.9rem;font-weight:700}.localtoc>ul>li>a{display:none}.localtoc ul{padding:0;list-style-type:none}.localtoc li{padding-left:6px}.localtoc a{display:block;text-decoration:none;color:inherit;margin-top:8px;padding-left:8px;line-height:1.1rem}.localtoc a.current{padding-left:5px;border-left:3px solid;font-weight:700}.contents.topic,.toctree-wrapper{border-left:5px solid}.contents.topic>p.topic-title,.toctree-wrapper>p.caption{color:#757575;font-size:1rem;padding-left:14px}.contents.topic ul,.toctree-wrapper ul{padding-left:14px;list-style:none;line-height:30px}.contents.topic a,.toctree-wrapper a{font-size:1.2rem;text-decoration:none}.contents.topic a .pre,.toctree-wrapper a .pre{font-size:1rem}.contents.topic>ul>li>a,.toctree-wrapper>ul>li>a{font-size:1.3rem}.contents.topic>ul>li>a .pre,.toctree-wrapper>ul>li>a .pre{font-size:1.1rem}.page-content ul li{margin:.3rem 0}.page-content ul li p{margin:0}.page-content .option-list .option{font-family:Menlo,DejaVu Sans Mono,Liberation Mono,Consolas,Ubuntu Mono,Courier New,andale mono,lucida console,monospace}.page-content .option-list td{padding:.5rem;border:none}.mdl-layout__drawer{background-color:#fff}.mdl-layout__drawer::-webkit-scrollbar{width:6px}.mdl-layout__drawer::-webkit-scrollbar-track{border-radius:6px}.mdl-layout__drawer::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3);border-radius:6px;box-shadow:0 0 0 1px hsla(0,0%,100%,.3)}.mdl-layout__drawer>.mdl-layout-title{font-weight:700;text-align:right;margin:0;padding:0;line-height:32px;border-bottom:1px solid rgba(0,0,0,.1);min-height:64px}.mdl-layout__drawer>.mdl-layout-title .title{color:inherit;display:block;height:100%;width:100%;text-decoration:none}.mdl-layout__drawer>.mdl-layout-title .title>img.logo{width:100%;margin:0;padding:0}.mdl-layout__drawer>.mdl-layout-title .title-text{font-weight:700;text-align:right;padding:0 10px;margin:16px 0 8px;line-height:32px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;color:inherit;display:block}nav.breadcrumb>a.mdl-navigation__link{padding:0 8px;font-size:18px}@media (max-width:1199px){nav.breadcrumb{width:calc(100% - 64px)}nav.breadcrumb a.mdl-navigation__link.is-active{overflow-x:hidden;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.admonition.attention nav.breadcrumb i.admonition-title:before,.admonition.caution nav.breadcrumb i.admonition-title:before,.admonition.danger nav.breadcrumb i.admonition-title:before,.admonition.error nav.breadcrumb i.admonition-title:before,.admonition.hint nav.breadcrumb i.admonition-title:before,.admonition.important nav.breadcrumb i.admonition-title:before,.admonition.note nav.breadcrumb i.admonition-title:before,.admonition.seealso nav.breadcrumb i.admonition-title:before,.admonition.tip nav.breadcrumb i.admonition-title:before,.admonition.warning nav.breadcrumb i.admonition-title:before,nav.breadcrumb .admonition.attention i.admonition-title:before,nav.breadcrumb .admonition.caution i.admonition-title:before,nav.breadcrumb .admonition.danger i.admonition-title:before,nav.breadcrumb .admonition.error i.admonition-title:before,nav.breadcrumb .admonition.hint i.admonition-title:before,nav.breadcrumb .admonition.important i.admonition-title:before,nav.breadcrumb .admonition.note i.admonition-title:before,nav.breadcrumb .admonition.seealso i.admonition-title:before,nav.breadcrumb .admonition.tip i.admonition-title:before,nav.breadcrumb .admonition.warning i.admonition-title:before,nav.breadcrumb a.mdl-navigation__link:not(.is-active),nav.breadcrumb i.material-icons{display:none}}div.mdl-layout__header{margin-top:77px}.mdl-layout__drawer-button{top:13px!important}div.mdl-layout__header-row.header-links{background:hsla(0,0%,100%,.2);width:100%;overflow-x:auto;overflow-y:hidden}div.mdl-layout__header-row.header-links a.mdl-navigation__link{font-size:1rem}div.mdl-layout__header-row.header-links a.mdl-navigation__link i{font-size:1.2rem;margin:0 8px;position:relative;bottom:-.1rem}div.mdl-layout__header-row.header-links a.mdl-navigation__link:hover{background-color:#2196f3;color:#eee}div.mdl-layout__header-row.header-links a.mdl-navigation__link[href="#"]{background-color:#2196f3;opacity:1;color:#fff}.site-title{font-weight:300!important;line-height:57px;letter-spacing:-1px;margin-bottom:0;float:left;color:#fff}.site-title,.site-title:visited{color:#424242}.site-header{position:fixed;top:0;width:100%;min-height:55px;padding-top:10px;padding-bottom:10px;background-color:#048ccc;z-index:10;font-weight:300;font-size:17px;border-bottom:1px solid #fff}.site-header-logo{width:120px;display:initial}.site-nav{float:right;line-height:57px}.site-nav .menu-icon,.site-nav .nav-trigger{display:none}.site-nav .page-link{color:#fff;line-height:1.5;font-weight:300}.site-nav .page-link:not(:last-child){margin-right:40px}.site-nav .page-link:hover{color:#fff;text-shadow:-.06ex 0 #fff,.06ex 0 #fff}.site-nav .page-link.page-current{color:#fff;text-decoration:underline}@media screen and (max-width:1024px){.site-nav{position:absolute;top:9px;right:15px;background-color:#178dc9;border-radius:2px;text-align:right}.site-nav label[for=nav-trigger]{display:block;float:right;width:36px;height:36px;z-index:2;cursor:pointer}.site-nav .menu-icon{display:block;float:right;width:36px;height:26px;line-height:0;padding-top:20px;text-align:center}.site-nav .menu-icon>svg{fill:#fff}.site-nav input~.trigger{clear:both;display:none}.site-nav input:checked~.trigger{display:block;padding-bottom:5px}.site-nav .page-link{padding:5px 10px;display:block;margin-left:20px}.site-nav .page-link:not(:last-child){margin-right:0}}footer.mdl-mini-footer{background-color:#212121}footer.mdl-mini-footer>div.mdl-mini-footer__left-section{margin-bottom:20px;display:flex;flex-direction:column}footer.mdl-mini-footer>div.mdl-mini-footer__left-section .mdl-logo{font-size:1.1rem}footer.mdl-mini-footer>div.mdl-mini-footer__right-section{font-size:.9rem;display:flex;flex-direction:column;justify-content:flex-end}footer.mdl-mini-footer>div.mdl-mini-footer__right-section a{color:inherit;font-weight:700;text-decoration:none}footer.mdl-mini-footer p.caption{display:none}.pagenation{width:100%;margin-top:80px;height:92px;background-color:#424242;display:flex}.pagenation #button-next,.pagenation #button-prev,.pagenation .button-common{text-transform:none;padding:0;height:92px;display:flex;justify-content:center;align-items:center;color:#fff}.pagenation #button-prev{margin-right:auto}.pagenation #button-prev .pagenation-text{text-align:left}.pagenation #button-next{margin-left:auto;flex-direction:row-reverse}.pagenation #button-next .pagenation-text{text-align:right}.pagenation-arrow-L{margin-right:20px}.pagenation-arrow-R{margin-left:20px}.pagenation-text{line-height:30px;font-size:20px}.pagenation-direction{opacity:.7;font-size:18px}@media screen and (max-width:1024px){.pagenation #button-prev{width:20%}.pagenation #button-next{width:80%}.pagenation #button-prev .pagenation-text{display:none}}@media screen and (min-width:1025px){.pagenation #button-next,.pagenation #button-prev{width:50%}.pagenation #button-prev .pagenation-text{display:block}}.site-footer{border-top:1px solid #f5f5f5;padding:30px 0;background-color:#424242;position:relative;z-index:10}.site-footer .footer-category-title{color:#048ccc}.site-footer a,.site-footer a:visited{color:#f5f5f5!important}.site-footer2{background-color:#424242;padding-top:40px;padding-bottom:10px;position:relative;z-index:10}.footer-heading{margin-bottom:15px}.contact-list,.social-media-list{list-style:none;margin-left:0}.footer-bottom-warning{font-size:80%;color:#fff;float:left}.footer-logo{width:200px;margin-bottom:30px;margin-top:30px}.footer-col{float:left;margin-bottom:15px;padding-left:15px}.footer-text{color:#f5f5f5}#waterfall-exp::-webkit-input-placeholder{color:#ccc}#waterfall-exp:-ms-input-placeholder{color:#ccc}#waterfall-exp::-moz-placeholder{color:#ccc}ul.search span.highlighted{font-weight:700}ul.search>li{margin-bottom:24px}#search-results ul{list-style:none;padding:0}#search-results ul li>a{text-decoration:none;font-size:1.2rem}a.download:before{content:"file_download";position:relative;top:5px;margin-right:5px}button.download{position:sticky;margin-left:1em}.mdl-card{margin:1em 1.5em 1em 0;display:inline-block;width:250px;min-height:140px;padding:18px}.mdl-card:hover{box-shadow:0 10px 20px rgba(0,0,0,.25),0 6px 6px rgba(0,0,0,.22);color:#000;cursor:pointer}.mdl-card__title{padding:0 0 1em;font-size:18px;color:#444}.mdl-card__supporting-text{line-height:1.5rem;padding:0;width:100%}.head-card.mdl-card{width:auto;display:block;max-width:800px;padding:24px}.head-card>.mdl-card__title{padding-bottom:0;height:60px;font-weight:700;text-transform:uppercase}.head-card>.mdl-card__menu{color:#fff}.head-card>.mdl-card__actions{padding:0}.cards{display:flex;flex-direction:row;flex-wrap:wrap} /*# sourceMappingURL=/sphinx_materialdesign_theme.css.map */ \ No newline at end of file diff --git a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css.map b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css.map index 74e6faf96c63..6c584d6c93c9 100644 --- a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css.map +++ b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css.map @@ -1 +1 @@ -{"version":3,"sources":["../../node_modules/material-design-lite/src/shadow/_shadow.scss","../../node_modules/material-design-lite/src/_mixins.scss","../../node_modules/material-design-lite/src/data-table/_data-table.scss","../../node_modules/material-design-lite/src/_variables.scss","../../node_modules/material-design-lite/src/footer/_mini_footer.scss","../../node_modules/material-design-lite/src/card/_card.scss","../../node_modules/material-design-lite/src/button/_button.scss","../scss/grid/_simplegrid.scss","../scss/fonts/_material-icons.scss","../scss/_root.scss","../scss/_variables.scss","../scss/layout/_layout.scss","../scss/headerings/_headerings.scss","../scss/admonitions/_admonitions.scss","../scss/code/_code.scss","../scss/blockquote/_blockquote.scss","../scss/tables/_tables.scss","../scss/toc/_globaltoc.scss","../scss/toc/_localtoc.scss","../scss/toc/_toctree.scss","../scss/lists/_lists.scss","../scss/drawer/_drawer.scss","../scss/header/_header.scss","../scss/footer/_footer.scss","../scss/search/_search.scss","../scss/downloadlink/_downloadlink.scss","../scss/card/_card.scss"],"names":[],"mappings":"AAmBA,wJCoNE,gGAEqE,CDlNvE,iBCqNE,gGAEqE,CDnNvE,iBCsNE,iGAEmE,CDpNrE,iBCuNE,kGAEmE,CDrNrE,iBCwNE,sGAEmE,CDtNrE,kBC0NE,wGAEqE,CDxNvE,kBC4NE,yGAEqE,CCtPvE,mHACE,iBAAkB,CAClB,gCCohBkC,CDnhBlC,wBAAyB,CACzB,kBAAmB,CACnB,cC0gByB,CDzgBzB,qBAAiD,CANnD,+HASI,kBAAmB,CATvB,+KAYM,YAAa,CAZnB,qIAkBM,iBAAkB,CAClB,WC0gBsB,CFlR1B,wBCvP6C,CDwP7C,kDEkN6D,CDzczD,oCAAqC,CArB3C,6JAwBQ,wBCigB4B,CDzhBpC,iJA4BQ,qBC4fwB,CDxhBhC,kPAkCI,mBCggBsD,CD/ftD,gBAAiB,CAnCrB,0SAsCM,iBAAkB,CAtCxB,sSA0CM,kBAAmB,CA1CzB,yHA+CI,iBAAkB,CAClB,qBAAsB,CACtB,WC4ewB,CD3exB,oCCoegC,CDnehC,uCCmegC,CDlehC,gBCof8C,CDnf9C,qBAAsB,CArD1B,yKAwDM,qBAAsB,CAxD5B,yHA6DI,iBAAkB,CAClB,qBAAsB,CACtB,sBAAuB,CDsCzB,cAAe,CAIb,eAAiB,CAEnB,gBAAiB,CACjB,gBAAiB,CC3Cf,WC4dwB,CD3dxB,cC8c8B,CD7c9B,qBCgd+B,CD/c/B,kBAAmB,CACnB,qBAAsB,CArE1B,wZAyEM,qBC2coC,CDphB1C,obD8LE,0BAA6B,CAC7B,eAAmB,CACnB,iBAAkB,CAClB,cAAe,CACf,aAAc,CACd,qBAAsB,CACtB,mBAAoB,CACpB,oBAAqB,CACrB,gBAAiB,CACjB,4BAA6B,CAC7B,oCAAqC,CACrC,kCAAmC,CC7H7B,cCqc+B,CDpc/B,eAAgB,CAChB,gBAAiB,CACjB,kBAAmB,CA/E3B,gbAkFQ,cAAe,CAlFvB,4cAoFU,qBCic2C,CDrhBrD,2NAyFM,eAAgB,CAKtB,wBACE,UAAW,CAGb,iRACE,eAAgB,CEpGlB,iBACE,YAAa,CACb,kBAAmB,CACnB,6BAA8B,CAE9B,iBDoZY,CClZZ,aDwRiD,CCvRjD,wBDsRoD,CC9RtD,uBAWI,UAAW,CACX,aAAc,CAZlB,2BAgBI,gBDsYkB,CClYtB,oHAEE,YAAa,CACb,oBAAqB,CAErB,eAAgB,CAEhB,QAAS,CACT,SAAU,CARZ,6HAWI,eAAgB,CAChB,iBDyXU,CCvXV,oCAdJ,6HAeM,gBDmXgB,CCjXnB,CAjBH,0HAoBI,aAAc,CACd,oBAAqB,CACrB,kBAAmB,CAIvB,8DAEE,oBAAqB,CACrB,OAAQ,CAGV,gEAEE,oBAAqB,CACrB,OAAQ,CAGV,0DAEE,UD0VoB,CCzVpB,WDyVoB,CCvVpB,SAAU,CACV,QAAS,CAET,wBD6NiD,CC3NjD,WAAY,CCpEd,UACE,YAAa,CACb,qBAAsB,CACtB,cF2amB,CE1anB,eAAgB,CAChB,gBFwaiB,CEvajB,eAAgB,CAChB,WFqagB,CEpahB,SF2bc,CE1bd,iBAAkB,CAClB,eFiOqD,CEhOrD,iBAAkB,CAClB,qBAAsB,CAGxB,iBACE,wBF6N6D,CE5N7D,wBAAyB,CACzB,2BAA4B,CAC5B,qBAAsB,CACtB,6BAA8B,CAC9B,4BAA6B,CAC7B,qBAAsB,CAGxB,iBACE,kBAAmB,CACnB,UFiN+C,CEhN/C,aAAc,CACd,YAAa,CACb,uBAAwB,CACxB,kBAAmB,CACnB,YFiZ4B,CEhZ5B,6BFoZoC,CEnZpC,2BFsZkC,CErZlC,qBAAsB,CAVxB,kCAaI,sCFyM+B,CErMnC,sBACE,mBAAoB,CACpB,aAAc,CACd,aAAc,CACd,YAAa,CACb,cFgYyB,CE/XzB,eFkZ+B,CEjZ/B,kBAAmB,CACnB,eAAgB,CAChB,2BFwYuC,CEvYvC,QAAS,CAGX,yBACE,cFwX4B,CEvX5B,qBFuL0D,CEtL1D,QAAS,CAGX,2BACE,qBFgLsE,CE/KtE,cF8XmC,CE7XnC,gBF8XqC,CE7XrC,eAAgB,CAChB,YF+W4B,CE9W5B,SAAU,CANZ,4CASI,sCFyK+B,CErKnC,mBACE,cFqX2B,CEpX3B,kBAAmB,CACnB,UAAW,CACX,4BAA+B,CAC/B,WAAY,CACZ,qBAAsB,CANxB,oCASI,mCF4J+B,CExJnC,kBACE,WAAY,CAId,gBACE,iBAAkB,CAClB,UAAW,CACX,QAAS,CC7FX,YACE,sBAAuB,CACvB,WAAY,CACZ,iBH+cwB,CG9cxB,UHgHsD,CG/GtD,iBAAkB,CAClB,WHyckB,CGxclB,QAAS,CACT,cHscqB,CGrcrB,cHucmB,CGtcnB,oBAAqB,CLVnB,6CE8CuD,CFmIzD,cAAe,CACf,eAAgB,CAChB,wBAAyB,CACzB,aAAc,CACd,gBAAiB,CKzKjB,eAAgB,CAChB,sBAAuB,CACvB,+HH+c6D,CG5c7D,YAAa,CACb,cAAe,CACf,oBAAqB,CACrB,iBAAkB,CAClB,gBH0bkB,CGzblB,qBAAsB,CAtBxB,8BAyBI,QAAS,CAzBb,kBA6BI,kCHsF8D,CGnHlE,+BAiCI,gCHsFuD,CGvH3D,mBAqCI,kCHiF6D,CGtHjE,gCAyCI,aHiFwD,CG1H5D,mDA4CM,gCH2EqD,CGtE3D,8BACE,uBAAuB,CAIvB,oBACE,4BH4D8D,CFgGhE,gGAEqE,CK/JrE,2BLuKA,iGAEmE,CKnK/D,kCH0D2D,CGhE/D,uCLyJA,6DAA8D,CK9I1D,kCHqD2D,CGhE/D,wCAeI,kBHqDsD,CGpDtD,UHqDiE,CGrErE,wJA2BM,wBH4CmD,CGvEzD,oDA+BM,eH4C4D,CGrClE,iBACE,iBAAkB,CAClB,cHwXuB,CGvXvB,WHqXkB,CGpXlB,WAAY,CACZ,cHmXkB,CGlXlB,UHkXkB,CGjXlB,SAAU,CACV,eAAgB,CAChB,4BHc8D,CGb9D,oEAAwE,CACxE,iBAAkB,CAClB,kBAAmB,CAZrB,0wCAeI,iBAAkB,CAClB,OAAQ,CACR,QAAS,CACT,gCAA8E,CAC9E,gBHuWqB,CGtWrB,UHsWqB,CG1XzB,sCAwBI,WHiWqB,CGhWrB,cHgWqB,CG/VrB,UH+VqB,CGzXzB,+CA8BI,iBAAkB,CAElB,4DAAiE,CAhCrE,wBLiIA,iGAEmE,CK9F/D,kCHX2D,CG1B/D,oCLmHA,6DAA8D,CKzE1D,kCHhB2D,CG1B/D,qCA8CI,kBHFiD,CGGjD,UHA+D,CG/CnE,+IA0DM,wBHZsD,CG9C5D,iDA8DM,eHd+D,CGqBrE,kBACE,iBAAkB,CAClB,cHmTuB,CGlTvB,WHoTmB,CGnTnB,aAAc,CACd,cAAe,CACf,cHiTmB,CGhTnB,UHgTmB,CG/SnB,SAAU,CACV,eAAgB,CAChB,aAAc,CACd,kBAAmB,CAXrB,gyCAcI,iBAAkB,CAClB,OAAQ,CACR,QAAS,CACT,gCAA8E,CAC9E,gBHmSqB,CGlSrB,UHkSqB,CGrTzB,wCAuBI,WHiSsB,CGhStB,cHgSsB,CG/RtB,UH+RsB,CGxT1B,owDA4BM,KAAyD,CACzD,MAA0D,CA7BhE,gDAkCI,iBAAkB,CAElB,4DAAiE,CAMrE,8BACE,aAAc,CACd,WAAY,CACZ,MAAS,CACT,iBAAkB,CAClB,KAAQ,CACR,UAAW,CACX,SAAU,CACV,eAAgB,CAEhB,2IAEE,4BAA6B,CAMnC,yCACE,aHpG0D,CGmG5D,qDAGI,eHrGmE,CGkGvE,qHAMI,UHxGmE,CGyGnE,wBH1GwD,CG8G5D,uCACE,aHjGqD,CGgGvD,mDAGI,eHhGiE,CG6FrE,iHAMI,UHnGiE,CGoGjE,wBHvGmD,CG6GvD,sFAII,qBHpHoE,CGqHpE,cAAe,CACf,4BAA6B,CAG9B,gGAIG,gCH9HgE,CG+HhE,qBH9HkE,CGkIrE,sGAIG,gCHvIgE,CGwIhE,qBHvIkE,CGwIlE,eAAgB,CAGnB,wGAIG,qBH/IkE,CGqJxE,4pCACE,qBAAsB,CClSxB,YACE,eAVqB,CAavB,cACE,eAbuB,CAgBzB,YACE,eAhBqB,CAqBvB,MACE,eAAgB,CAGlB,OACE,gBAAiB,CAGnB,QACE,iBAAkB,CAClB,gBAAiB,CACjB,iBAAkB,CAGpB,SACE,kBAAmB,CAGrB,WACE,YAAa,CAWf,WACE,UAAW,CACX,gBAAiB,CACjB,iBAAkB,CAElB,2CALF,WAMI,SAAU,CAOb,CAJC,wCATF,WAUI,SAAU,CACV,eAAgB,CAEnB,CAED,KACE,iBAAkB,CAClB,UAAW,CAGb,kBACE,UAAW,CACX,eAAiB,CACjB,kBAAoB,CAGtB,WACE,UAAW,CACX,aAAc,CACd,UAAW,CAGb,uFAYE,SAlDS,CAqDX,UACE,cAA0C,CAG5C,UACE,eAAyC,CAG3C,UACE,SAAwC,CAG1C,UACE,eAAwC,CAG1C,UACE,eAA+C,CAGjD,UACE,SAAwC,CAG1C,UACE,eAA+C,CAGjD,UACE,eAA+C,CAGjD,UACE,SAA+C,CAGjD,WACE,eAAgD,CAGlD,WACE,eAAgD,CAGlD,WACE,SAlGS,CAqGX,wCACE,OACE,cAA0C,CAE5C,OACE,eAAyC,CAE3C,OACE,SAAwC,CAE1C,OACE,eAAwC,CAE1C,OACE,eAA+C,CAEjD,OACE,SAAwC,CAE1C,OACE,eAA+C,CAEjD,OACE,eAA+C,CAEjD,OACE,SAA+C,CAEjD,QACE,eAAgD,CAElD,QACE,eAAgD,CAElD,QACE,SAxIO,CANX,WAkJI,aAAc,CACf,CAxHH,KA4HE,mBAAoB,CACpB,oBAAqB,CACrB,mBAAoB,CACpB,YAAa,CACb,cAAe,CAGjB,mBACE,YAAa,CACb,qBAAsB,CCxMxB,2dACI,0BAA6B,CAC7B,eAAmB,CACnB,iBAAkB,CAClB,cAAe,CACf,oBAAqB,CACrB,aAAc,CACd,mBAAoB,CACpB,qBAAsB,CACtB,gBAAiB,CACjB,kBAAmB,CACnB,aAAc,CAGd,kCAAmC,CAEnC,iCAAkC,CAGlC,iCAAkC,CAGlC,4BAA6B,CC3BjC,KACI,cCEY,CDChB,KACI,uBAAyB,CACzB,wBCDsB,CDEtB,cAAe,CACf,kBAAmB,CACnB,6ICA0J,CDG9J,2BACI,YAAa,CAGjB,4EAEI,6ICT0J,CDY9J,8GACI,uBAA8B,CAGlC,EACI,oBAAqB,CAGzB,yKAGQ,cAAe,CAIvB,OACI,aAAc,CACd,oBAAqB,CAGzB,SACI,eAAgB,CAOnB,IACG,cAAe,CACf,aAAc,CACd,gBAAiB,CACjB,iBAAkB,CAGtB,qBAEQ,iBAAkB,CAClB,iBAAkB,CAH1B,yCAMY,iBAAkB,CAN9B,2CASY,eAAgB,CAK5B,UACE,UAAW,CACX,WAAY,CACZ,oBAAqB,CACrB,YC3C0C,CD4C1C,iBAAkB,CAClB,eAAgB,CAChB,uBAAwB,CAM1B,6kBACI,iBAAkB,CAClB,OAAQ,CAGZ,WACI,oBAAqB,CAGzB,eACE,UAAW,CACX,aAAc,CACd,UAAW,CAGb,SAEE,gBAA2D,CAC3D,iBAAkB,CAClB,gBAAiB,CACjB,kBAA0C,CAC1C,iBC9EqB,CDiFrB,qCATF,SAWI,gBAAuD,CACvD,kBAAgC,CAChC,iBAA+B,CAElC,CEtFD,YACI,eAAgB,CAIpB,UACI,UAAW,CACX,aAAc,CACd,YAAa,CAEb,0BALJ,UAMQ,YAhCiB,CA6ExB,CAnDD,wBASQ,UAAW,CACX,aAAc,CACd,cAAe,CAEf,yBAbR,wBAcY,SA7BU,CA8BV,YA7Ba,CAoCpB,CAJG,0BAlBR,wBAmBY,uBA9B0B,CA+B1B,YA9Ba,CAgCpB,CAtBL,4BAyBQ,WA5CY,CA8CZ,0BA3BR,4BA4BY,YAAa,CAqBpB,CAjDL,qCA+BY,cAAe,CACf,eAAgB,CAChB,eAAgB,CAChB,aAAc,CAlC1B,wDAoCgB,SAAU,CApC1B,8DAwCgB,iBAAkB,CAxClC,8DA4CgB,+BAAmC,CACnC,iBAAkB,CAClB,uCAA4C,CC9E5D,oBACI,GACI,2BAA6B,CAC7B,SAAU,CAEjB,GACC,uBAAwB,CACxB,SAAU,CAAA,CAIZ,qBACI,GACI,uBAAwB,CACxB,SAAU,CAEjB,GACC,2BAA6B,CAC7B,SAAU,CAAA,CAIZ,0BAEQ,oBAAqB,CACrB,oBAAqB,CACrB,iBAAmB,CACnB,aAAc,CACd,SAAU,CANlB,gCAQY,0DAAsE,CARlF,oLAcY,oBAAqB,CAdjC,kNAkBgB,0DAAsE,CAlBtF,iBAwBQ,cAAe,CACf,mBAAoB,CAzB5B,iBA6BQ,iBAAkB,CAClB,gBAAiB,CACjB,kBAAmB,CACnB,YAAa,CACb,kBAAmB,CAjC3B,iBAqCQ,gBAAiB,CACjB,mBAAoB,CACpB,gBAAiB,CACjB,YAAe,CACf,oBAAqB,CAzC7B,iBA6CQ,iBAAkB,CAClB,kBAAmB,CACnB,kBAAmB,CACnB,YAAe,CACf,mBAAoB,CAjD5B,kCAqDQ,gBAAiB,CACjB,kBAAmB,CACnB,gBAAiB,CACjB,YAAe,CACf,kBAAmB,CAzD3B,kCA6DQ,cAAe,CACf,kBAAmB,CACnB,gBAAiB,CACjB,YAAe,CACf,kBAAmB,CCT3B,YAGI,iBAAkB,CAClB,eAAgB,CAChB,kBAAmB,CALvB,mBAOQ,WAAY,CAPpB,8BAUQ,cAAe,CACf,eAAiB,CACjB,UAAW,CACX,wBAAyB,CACzB,cAAe,CAdvB,iBApBI,6BA/CgC,CAgDhC,mCA/C4C,CAgD5C,mCACI,cAAe,CACf,eAAiB,CACjB,aApD4B,CAsD5B,cAAe,CACf,iBAAkB,CAClB,0CAEI,iBAAkB,CAClB,gBAAiB,CACjB,OAAQ,CACR,sBA3DwB,CA4DxB,cAAe,CAK3B,oBApBI,6BA1CgC,CA2ChC,mCA1C4C,CA2C5C,sCACI,cAAe,CACf,eAAiB,CACjB,aA/C4B,CAiD5B,cAAe,CACf,iBAAkB,CAClB,6CAEI,iBAAkB,CAClB,gBAAiB,CACjB,OAAQ,CACR,gBAtDkB,CAuDlB,cAAe,CAK3B,iBApBI,6BApDgC,CAqDhC,mCApD4C,CAqD5C,mCACI,cAAe,CACf,eAAiB,CACjB,aAzD4B,CA2D5B,cAAe,CACf,iBAAkB,CAClB,0CAEI,iBAAkB,CAClB,gBAAiB,CACjB,OAAQ,CACR,sBAhEwB,CAiExB,cAAe,CAK3B,oBApBI,6BArCgC,CAsChC,mCArC4C,CAsC5C,sCACI,cAAe,CACf,eAAiB,CACjB,aA1C4B,CA4C5B,cAAe,CACf,iBAAkB,CAClB,6CAEI,iBAAkB,CAClB,gBAAiB,CACjB,OAAQ,CACR,iBAjDmB,CAkDnB,cAAe,CAK3B,sBApBI,6BAhCgC,CAiChC,mCAhC4C,CAiC5C,wCACI,cAAe,CACf,eAAiB,CACjB,aArC4B,CAuC5B,cAAe,CACf,iBAAkB,CAClB,+CAEI,iBAAkB,CAClB,gBAAiB,CACjB,OAAQ,CACR,iBA5CmB,CA6CnB,cAAe,CAK3B,gBApBI,6BA3BiC,CA4BjC,oCA3B6C,CA4B7C,kCACI,cAAe,CACf,eAAiB,CACjB,aAhC6B,CAkC7B,cAAe,CACf,iBAAkB,CAClB,yCAEI,iBAAkB,CAClB,gBAAiB,CACjB,OAAQ,CACR,2BAvC6B,CAwC7B,cAAe,CAK3B,sBApBI,6BAtBiC,CAuBjC,oCAtB6C,CAuB7C,wCACI,cAAe,CACf,eAAiB,CACjB,aA3B6B,CA6B7B,cAAe,CACf,iBAAkB,CAClB,+CAEI,iBAAkB,CAClB,gBAAiB,CACjB,OAAQ,CACR,sBAlCyB,CAmCzB,cAAe,CAK3B,kBApBI,6BAjBgC,CAkBhC,mCAjB4C,CAkB5C,oCACI,cAAe,CACf,eAAiB,CACjB,aAtB4B,CAwB5B,cAAe,CACf,iBAAkB,CAClB,2CAEI,iBAAkB,CAClB,gBAAiB,CACjB,OAAQ,CACR,uBA7ByB,CA8BzB,cAAe,CAK3B,oBApBI,6BAZgC,CAahC,mCAZ4C,CAa5C,sCACI,cAAe,CACf,eAAiB,CACjB,aAjB4B,CAmB5B,cAAe,CACf,iBAAkB,CAClB,6CAEI,iBAAkB,CAClB,gBAAiB,CACjB,OAAQ,CACR,uBAxByB,CAyBzB,cAAe,CAK3B,mBApBI,6BAPgC,CAQhC,mCAP4C,CAQ5C,qCACI,cAAe,CACf,eAAiB,CACjB,aAZ4B,CAc5B,cAAe,CACf,iBAAkB,CAClB,4CAEI,iBAAkB,CAClB,gBAAiB,CACjB,OAAQ,CACR,uBAnByB,CAoBzB,cAAe,CCzE3B,yBAEQ,YAAa,CAFrB,6BAIY,0BJEqB,CIDrB,qBAAsB,CACtB,wHJE2I,CID3I,cAAgB,CAChB,aAAc,CACd,iBAAkB,CAT9B,iEAWgB,qBAAsB,CAXtC,kDAiBQ,eAAgB,CAjBxB,qCAwBgB,qBAAsB,CACtB,kBJpBU,CIuBV,qBAAmB,CACnB,cAAgB,CA7BhC,sDAmCQ,QAAW,CAEX,iBAAkB,CArC1B,8HAoCQ,wHJ5B+I,CIRvJ,6BA4CQ,gBAAiB,CACjB,aAAc,CA7CtB,kGAiDQ,aAAc,CACd,aAAc,CACd,cAAe,CACf,kBAAmB,CACnB,kBAAmB,CACnB,aAAc,CACd,4BAA6B,CAC7B,YAAa,CACb,iBAAkB,CAzD1B,wSA2DY,qBAAsB,CACtB,kBAAmB,CACnB,WAAY,CA7DxB,8GAgEY,aAAc,CAhE1B,sBAsEQ,kBAAqB,CAtE7B,0BA2EQ,iBAAkB,CA3E1B,6BA6EY,kBAAmB,CACnB,QAAS,CA9ErB,oCA6FO,UAAW,CACX,UAAW,CACX,aAAc,CA/FrB,oCAmGO,gBAAiB,CAnGxB,sBAsGQ,kBAAmB,CAtG3B,kBA0GQ,aAAc,CACd,eAAgB,CAChB,aAAc,CACd,iBAAkB,CAClB,UAAW,CACX,iBAAkB,CAClB,oBAAqB,CAhH7B,+BAsHgB,6IJ7G8I,CI8G9I,eAAiB,CACjB,2BAA4B,CAC5B,oBAAyB,CACzB,iBAAkB,CAClB,iBAAkB,CAClB,WAAY,CACZ,UAAY,CACZ,YAAc,CACd,kBAA8B,CAC9B,eAAiB,CACjB,cAAe,CC9H9B,yBAEO,cAAe,CACf,cAAe,CACf,qCLDyB,CKHhC,+BAOW,oBAAsB,CACtB,aAAc,CARzB,gCAWW,oBAAsB,CCdlC,mGAKQ,eAAgB,CAChB,kBAAmB,CACnB,cAAe,CACf,aAAc,CARtB,4MAYY,kBAAmB,CACnB,wBAAyB,CAbrC,2GAiBY,cNdI,CMeJ,mBAAuB,CACvB,kBAAmB,CAnB/B,2HAqBgB,iBAAkB,CArBlC,iIAwBgB,eAAgB,CCxBhC,oCAGQ,YAAa,CAHrB,cAQQ,oBAAqB,CACrB,SAAU,CACV,QAAS,CAVjB,iBAaY,eAAgB,CAb5B,+BAegB,YAAa,CACb,6BAA8B,CAhB9C,iCAkBoB,aAAc,CACd,aAAc,CACd,UAAW,CACX,cAAe,CACf,oBAAqB,CACrB,adyKoB,CchMxC,yCAyBwB,eAAiB,CAzBzC,uBAiCQ,SAAU,CACV,WAAY,CACZ,YAAa,CACb,kBAAmB,CACnB,sBAAuB,CACvB,WAAY,CAtCpB,yBAwCY,SAAU,CACV,aAAc,CACd,gBAAiB,CACjB,cAAe,CA3C3B,2BA6CgB,cAAe,CA7C/B,4BAiDY,wBAA0B,CAjDtC,8BAmDgB,cAAe,CACf,eAAgB,CApDhC,uCA2DY,gBAAiB,CA3D7B,6CA8DY,iBAAkB,CA9D9B,mDAiEY,iBAAkB,CAjE9B,yDAoEY,iBAAkB,CApE9B,+DAuEY,iBAAkB,CAvE9B,qEA0EY,iBAAkB,CC1E9B,UACI,gBAAkB,CAClB,gBAAiB,CAFrB,mBAKQ,iBAAkB,CAL1B,wBAOY,eAAiB,CACjB,eAAgB,CAR5B,kBAaQ,YAAa,CAbrB,aAiBQ,SAAU,CACV,oBAAqB,CAlB7B,aAsBQ,gBAAiB,CAtBzB,YA0BQ,aAAc,CACd,oBAAqB,CACrB,aAAc,CACd,cAAe,CACf,gBAAiB,CACjB,kBAAmB,CA/B3B,oBAkCY,gBAAiB,CACjB,qBAAsB,CACtB,eAAiB,CCjC5B,iCAEI,qBAAsB,CAG1B,yDAEI,aAAyB,CACzB,cAAe,CACf,iBAAkB,CAGtB,uCAEI,iBAAkB,CAClB,eAAgB,CAChB,gBAAiB,CAGrB,qCAEI,gBAAiB,CACjB,oBAAqB,CAHzB,+CAKQ,cAAe,CAIvB,iDAEI,gBAAiB,CAFrB,2DAIQ,gBAAiB,CCnC1B,oBAGY,cAAe,CAH3B,sBAKgB,QAAS,CALzB,mCAWY,wHVH2I,CURvJ,8BAcY,aAAe,CACf,WAAY,CCXpB,oBACI,qBAAsB,CADzB,uCAIO,SAAU,CAJjB,6CAQO,iBAAkB,CARzB,6CAYO,+BAAmC,CACnC,iBAAkB,CAClB,uCAA4C,CAdnD,sCAkBO,eAAiB,CACjB,gBAAiB,CACjB,QAAS,CACT,SAAU,CACV,gBAAiB,CACjB,sCAAuC,CACvC,eAAgB,CAxBvB,6CA0BW,aAAc,CACd,aAAc,CACd,WAAY,CACZ,UAAW,CACX,oBAAqB,CA9BhC,sDAgCe,UAAW,CACX,QAAS,CACT,SAAU,CAlCzB,kDAsCe,eAAiB,CACjB,gBAAiB,CACjB,cAAe,CACf,iBAAoB,CACpB,gBAAiB,CACjB,6IXtC0I,CWuC1I,aAAc,CACd,aAAc,CC7ClC,sCAEQ,aAAc,CACd,cAAe,CAEnB,0BALJ,eAMQ,uBAA0B,CANlC,gDAQY,iBAAkB,CAClB,UAAW,CACX,eAAgB,CAChB,kBAAmB,CACnB,sBAAuB,CAZnC,wwCAgBY,YAAa,CAChB,CAIT,uBACI,eAAgB,CAGpB,2BACI,kBAAoB,CAGxB,wCACI,6BAAiC,CACjC,UAAW,CACX,eAAgB,CAChB,iBAAkB,CAJtB,+DAOQ,cAAe,CAPvB,iEASY,gBAAiB,CACjB,YAAa,CACb,iBAAkB,CAClB,aAAe,CAZ3B,qEAiBQ,wBAAmD,CACnD,UAAc,CAlBtB,yEAqBQ,wBAAmD,CACnD,SAAU,CACV,UAAc,CAOtB,YACE,yBAA2B,CAC3B,gBAAiB,CACjB,mBAAoB,CACpB,eAAgB,CAChB,UAAW,CACX,UAAY,CANd,gCAUI,aZzCuC,CY8C3C,aACE,cAAe,CACf,KAAM,CACN,UAAW,CACX,eAAgB,CAChB,gBAAiB,CACjB,mBAAoB,CACpB,wBZzD0B,CY0D1B,UAAW,CACX,eAAgB,CAChB,cAAe,CACf,4BAA8B,CAGhC,kBACE,WAAY,CACZ,eAAgB,CAGlB,UACE,WAAY,CACZ,gBAAiB,CAFnB,4CASI,YAAa,CATjB,qBAaI,UAAY,CACZ,eAAgB,CAChB,eAAgB,CAfpB,sCAkBM,iBAAkB,CAlBxB,2BAsBM,UAAY,CACZ,sCAA4C,CAvBlD,kCA4BI,UAAY,CACZ,yBAA0B,CAG5B,qCAhCF,UAiCI,iBAAkB,CAClB,OAAQ,CACR,UAAW,CACX,wBAAiC,CACjC,iBAAkB,CAClB,gBAAiB,CAtCrB,iCAyCM,aAAc,CACd,WAAY,CACZ,UAAW,CACX,WAAY,CACZ,SAAU,CACV,cAAe,CA9CrB,qBAkDM,aAAc,CACd,WAAY,CACZ,UAAW,CACX,WAAY,CACZ,aAAc,CACd,gBAAiB,CACjB,iBAAkB,CAxDxB,yBA2DQ,SAAW,CA3DnB,yBAgEM,UAAW,CACX,YAAa,CAjEnB,iCAqEM,aAAc,CACd,kBAAmB,CAtEzB,qBA0EM,gBAAiB,CACjB,aAAc,CAMd,gBAAiB,CAjFvB,sCA8EQ,cAAe,CAChB,CC7KP,uBACI,wBAAyB,CAD7B,yDAGQ,kBAAmB,CACnB,YAAa,CACb,qBAAsB,CAL9B,mEAOY,gBAAiB,CAP7B,0DAcQ,eAAiB,CACjB,YAAa,CACb,qBAAsB,CACtB,wBAAyB,CAjBjC,4DAoBY,aAAc,CACd,eAAiB,CACjB,oBAAqB,CAtBjC,iCA0BQ,YAAa,CAOpB,YACG,UAAW,CACX,eAAgB,CAChB,WAAY,CACZ,wBAAyB,CACzB,YAAa,CALhB,6EAQO,mBAAoB,CACpB,SAAU,CACV,WAAY,CACZ,YAAa,CACb,sBAAuB,CACvB,kBAAmB,CACnB,UAAc,CAdrB,yBAkBO,iBAAkB,CAlBzB,0CAoBW,eAAgB,CApB3B,yBA0BO,gBAAiB,CACjB,0BAA2B,CA3BlC,0CA6BW,gBAAiB,CAKrB,oBACI,iBAAkB,CAEtB,oBACI,gBAAiB,CAIzB,iBACI,gBAAiB,CACjB,cAAe,CAGnB,sBACI,UAAY,CACZ,cAAe,CAEnB,qCAnDH,yBAqDW,SAAU,CArDrB,yBAyDW,SAAU,CAzDrB,0CA6DW,YAAa,CAChB,CAEL,qCAhEH,kDAmEW,SAAU,CAnErB,0CAuEW,aAAc,CACjB,CAST,aACE,4BbvF0C,CawF1C,cAAwB,CACxB,wBAAyB,CACzB,iBAAkB,CAClB,UAAW,CALb,oCAOI,abhGwB,CayF5B,sCAaM,uBAAmC,CAMzC,cACE,wBAAyB,CACzB,gBAAiB,CACjB,mBAAoB,CACpB,iBAAkB,CAClB,UAAW,CAGb,gBACE,kBAAgC,CAGlC,iCAEE,eAAgB,CAChB,aAAc,CAIhB,uBACE,aAAc,CACd,UAAY,CACZ,UAAW,CAGb,aACE,WAAY,CACZ,kBAAmB,CACnB,eAAgB,CAGlB,YACE,UAAW,CACX,kBAAgC,CAChC,iBAA+B,CAGjC,aACE,ab/I0C,Cc5B5C,0CACI,UAAW,CAEf,qCACI,UAAW,CAEf,iCACI,UAAW,CAGf,2BACI,eAAiB,CAGrB,aACI,kBAAmB,CAGvB,mBAEQ,eAAgB,CAChB,SAAU,CAHlB,wBAMgB,oBAAqB,CACrB,gBAAiB,CC5BjC,kBAGQ,uBAAwB,CACxB,iBAAkB,CAClB,OAAQ,CACR,gBAAiB,CAIzB,gBACI,eAAgB,CAChB,eAAgB,CpBMpB,UqBjBI,sBAAuB,CACvB,oBAAqB,CACrB,WAAY,CACZ,gBAAiB,CACjB,YAAa,CAEjB,gBACI,gEAAoE,CACpE,UAAW,CACX,cAAe,CrBiCnB,iBqB9BI,eAAkB,CAClB,cAAe,CACf,UAAW,CrBgEf,2BqB5DI,kBAAmB,CACnB,SAAY,CACZ,UAAW,CAGf,oBACI,UAAW,CACX,aAAc,CACd,eAAgB,CAChB,YAAa,CAGjB,4BACI,gBAAmB,CACnB,WAAY,CACZ,eAAgB,CAChB,wBAAyB,CAE7B,2BACI,UAAW,CAEf,8BACI,SAAU,CAEd,OACI,YAAa,CACb,kBAAmB,CACnB,cAAe","file":"sphinx_materialdesign_theme.css","sourceRoot":"../../src/js","sourcesContent":["/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n@import \"../mixins\";\n\n.mdl-shadow--2dp {\n @include shadow-2dp();\n}\n\n.mdl-shadow--3dp {\n @include shadow-3dp();\n}\n\n.mdl-shadow--4dp {\n @include shadow-4dp();\n}\n\n.mdl-shadow--6dp {\n @include shadow-6dp();\n}\n\n.mdl-shadow--8dp {\n @include shadow-8dp();\n}\n\n.mdl-shadow--16dp {\n @include shadow-16dp();\n}\n\n.mdl-shadow--24dp {\n @include shadow-24dp();\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* Typography */\n\n@mixin typo-preferred-font($usePreferred: true) {\n @if $usePreferred {\n font-family: $preferred_font;\n }\n}\n\n@mixin typo-display-4($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 112px;\n font-weight: 300;\n line-height: 1;\n letter-spacing: -0.04em;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-display-3($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 56px;\n font-weight: 400;\n line-height: 1.35;\n letter-spacing: -0.02em;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-display-2($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 45px;\n font-weight: 400;\n line-height: 48px;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-display-1($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 34px;\n font-weight: 400;\n line-height: 40px;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-headline($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 24px;\n font-weight: 400;\n line-height: 32px;\n -moz-osx-font-smoothing: grayscale;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-title($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 20px;\n font-weight: 500;\n line-height: 1;\n letter-spacing: 0.02em;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-subhead($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 16px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0.04em;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-subhead-2($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 16px;\n font-weight: 400;\n line-height: 28px;\n letter-spacing: 0.04em;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-body-2($colorContrast: false, $usePreferred: false) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n @if $usePreferred {\n font-weight: 500;\n } @else {\n font-weight: bold;\n }\n line-height: 24px;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-body-1($colorContrast: false, $usePreferred: false) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-caption($colorContrast: false, $usePreferred: false) {\n @include typo-preferred-font($usePreferred);\n font-size: 12px;\n font-weight: 400;\n line-height: 1;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-blockquote($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n position: relative;\n font-size: 24px;\n font-weight: 300;\n font-style: italic;\n line-height: 1.35;\n letter-spacing: 0.08em;\n\n &:before {\n position: absolute;\n left: -0.5em;\n content: '“';\n }\n\n &:after {\n content: '”';\n margin-left: -0.05em;\n }\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-menu($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n font-weight: 500;\n line-height: 1;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-button($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n font-weight: 500;\n text-transform: uppercase;\n line-height: 1;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-icon() {\n font-family: 'Material Icons';\n font-weight: normal;\n font-style: normal;\n font-size: 24px;\n line-height: 1;\n letter-spacing: normal;\n text-transform: none;\n display: inline-block;\n word-wrap: normal;\n font-feature-settings: 'liga';\n -webkit-font-feature-settings: 'liga';\n -webkit-font-smoothing: antialiased;\n}\n\n/* Shadows */\n\n// Focus shadow mixin.\n@mixin focus-shadow() {\n box-shadow: 0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);\n}\n\n@mixin shadow-2dp() {\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 3px 1px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),\n 0 1px 5px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);\n}\n@mixin shadow-3dp() {\n box-shadow: 0 3px 4px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 3px 3px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),\n 0 1px 8px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);\n}\n@mixin shadow-4dp() {\n box-shadow: 0 4px 5px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 1px 10px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 2px 4px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n@mixin shadow-6dp() {\n box-shadow: 0 6px 10px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 1px 18px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 3px 5px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n@mixin shadow-8dp() {\n box-shadow: 0 8px 10px 1px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 3px 14px 2px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 5px 5px -3px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n@mixin shadow-16dp() {\n box-shadow: 0 16px 24px 2px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 6px 30px 5px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 8px 10px -5px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n@mixin shadow-24dp() {\n box-shadow: 0 9px 46px 8px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 11px 15px -7px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 24px 38px 3px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n/* Animations */\n\n@mixin material-animation-fast-out-slow-in($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-fast-out-slow-in;\n}\n\n@mixin material-animation-linear-out-slow-in($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-linear-out-slow-in;\n}\n\n@mixin material-animation-fast-out-linear-in($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-fast-out-linear-in;\n}\n\n@mixin material-animation-default($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-default;\n}\n\n/* Dialog */\n\n@mixin dialog-width($units:5) {\n @if(type_of($units) != 'number') {\n @error \"The unit given to dialog-width should be a number.\";\n }\n // 56dp is the base unit width for Dialogs.\n // With 5 units being the number of units for a mobile device.\n // https://goo.gl/sK2O5o\n width: $units * 56px;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n@import \"../mixins\";\n\n.mdl-data-table {\n position: relative;\n border: $data-table-dividers;\n border-collapse: collapse;\n white-space: nowrap;\n font-size: $data-table-font-size;\n background-color: unquote(\"rgb(#{$color-white})\");\n\n thead {\n padding-bottom: 3px;\n\n .mdl-data-table__select {\n margin-top: 0;\n }\n }\n\n tbody {\n tr {\n position: relative;\n height: $data-table-row-height;\n @include material-animation-default(0.28s);\n transition-property: background-color;\n\n &.is-selected {\n background-color: $data-table-selection-color;\n }\n\n &:hover {\n background-color: $data-table-hover-color;\n }\n }\n }\n\n td, th {\n padding: 0 $data-table-column-padding 12px $data-table-column-padding;\n text-align: right;\n\n &:first-of-type {\n padding-left: 24px;\n }\n\n &:last-of-type {\n padding-right: 24px;\n }\n }\n\n td {\n position: relative;\n vertical-align: middle;\n height: $data-table-row-height;\n border-top: $data-table-dividers;\n border-bottom: $data-table-dividers;\n padding-top: $data-table-cell-top;\n box-sizing: border-box;\n\n .mdl-data-table__select {\n vertical-align: middle;\n }\n }\n\n th {\n position: relative;\n vertical-align: bottom;\n text-overflow: ellipsis;\n @include typo-body-2();\n height: $data-table-row-height;\n font-size: $data-table-header-font-size;\n color: $data-table-header-color;\n padding-bottom: 8px;\n box-sizing: border-box;\n\n &.mdl-data-table__header--sorted-ascending,\n &.mdl-data-table__header--sorted-descending {\n color: $data-table-header-sorted-color;\n &:before {\n @include typo-icon;\n font-size: $data-table-header-sort-icon-size;\n content: \"\\e5d8\";\n margin-right: 5px;\n vertical-align: sub;\n }\n &:hover {\n cursor: pointer;\n &:before {\n color: $data-table-header-sorted-icon-hover-color;\n }\n }\n }\n &.mdl-data-table__header--sorted-descending:before {\n content: \"\\e5db\";\n }\n }\n}\n\n.mdl-data-table__select {\n width: 16px;\n}\n\n.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric {\n text-align: left;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n * -----Dialog\n * -----Snackbar\n * -----Tooltip\n * -----Chip\n *\n * Even though all variables have the `!default` directive, most of them\n * should not be changed as they are dependent one another. This can cause\n * visual distortions (like alignment issues) that are hard to track down\n * and fix.\n */\n\n\n/* ========== TYPOGRAPHY ========== */\n\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n$preferred_font: 'Roboto', 'Helvetica', 'Arial', sans-serif !default;\n$performance_font: 'Helvetica', 'Arial', sans-serif !default;\n\n/* ========== COLORS ========== */\n\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n\n@import \"color-definitions\";\n@import \"functions\";\n\n/* ========== IMAGES ========== */\n$image_path: '/images' !default;\n\n/* ========== Color & Themes ========== */\n\n// Define whether individual color palette items should have classes created.\n// Setting this to true will remove individual color classes for each color in the palettes.\n// To improve overall performance (assuming they aren't used) by:\n// * Saving server bandwidth sending the extra classes\n// * Save client computation against the classes\n// it is RECOMMENDED you set this to true.\n$trim-color-classes: false !default;\n\n// Use color primarily for emphasis. Choose colors that fit with\n// your brand and provide good contrast between visual components.\n$color-primary: $palette-indigo-500 !default;\n$color-primary-dark: $palette-indigo-700 !default;\n$color-accent: $palette-pink-A200 !default;\n\n// Our primary is dark, so use $color-dark-contrast for overlaid text.\n$color-primary-contrast: $color-dark-contrast !default;\n// Our accent is dark, so use $color-dark-contrast for overlaid text.\n$color-accent-contrast: $color-dark-contrast !default;\n\n// Replace all colors with placeholders if we're generating a template.\n@if $styleguide-generate-template == true {\n $color-primary: '$color-primary';\n $color-primary-dark: '$color-primary-dark';\n $color-accent: '$color-accent';\n $color-primary-contrast: '$color-primary-contrast';\n $color-accent-contrast: '$color-accent-contrast';\n}\n\n/* ========== Typography ========== */\n\n// We use the following default color styles: text-color-primary and\n// text-color-secondary. For light themes, use text-color-primary-inverse\n// and text-color-secondary-inverse.\n\n$text-color-primary: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$text-link-color: unquote(\"rgb(#{$color-accent})\") !default;\n\n// Define whether to target elements directly for typographic enhancements.\n// Turning this off means you need to use mdl-* classes more often.\n// Other components may also fail to adhere to MD without these rules.\n// It is strongly recommended you leave this as true.\n\n$target-elements-directly: true !default;\n\n/* ========== Components ========== */\n\n/* ========== Standard Buttons ========== */\n\n// Default button colors.\n$button-primary-color: unquote(\"rgba(#{$palette-grey-500}, 0.20)\") !default;\n$button-secondary-color: unquote(\"rgb(#{$color-black})\") !default;\n$button-hover-color: $button-primary-color !default;\n$button-active-color: unquote(\"rgba(#{$palette-grey-500}, 0.40)\") !default;\n$button-focus-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n// Colored button colors.\n$button-primary-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-secondary-color-alt: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n$button-hover-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-active-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-focus-color-alt: $button-focus-color !default;\n\n// Ripple color for colored raised buttons.\n$button-ripple-color-alt: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n\n// Disabled button colors.\n$button-primary-color-disabled: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n$button-secondary-color-disabled: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n// FAB colors and sizes.\n$button-fab-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-hover-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-active-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-text-color-alt: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n$button-fab-ripple-color-alt: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n\n// Icon button colors and sizes.\n$button-icon-color: unquote(\"rgb(#{$palette-grey-700})\") !default;\n$button-icon-focus-color: $button-focus-color !default;\n\n/* ========== Icon Toggles ========== */\n\n$icon-toggle-color: unquote(\"rgb(#{$palette-grey-700})\") !default;\n$icon-toggle-focus-color: $button-focus-color !default;\n$icon-toggle-checked-color: unquote(\"rgb(#{$color-primary})\") !default;\n$icon-toggle-checked-focus-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$icon-toggle-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n/* ========== Radio Buttons ========== */\n\n$radio-color: unquote(\"rgb(#{$color-primary})\") !default;\n$radio-off-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$radio-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n/* ========== Ripple effect ========== */\n\n$ripple-bg-color: unquote(\"rgb(#{$color-light-contrast})\") !default;\n\n/* ========== Layout ========== */\n\n$layout-nav-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n\n// Drawer\n$layout-drawer-bg-color: unquote(\"rgb(#{$palette-grey-50})\") !default;\n$layout-drawer-border-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$layout-text-color: unquote(\"rgb(#{$palette-grey-800})\") !default;\n$layout-drawer-navigation-color: #757575 !default;\n$layout-drawer-navigation-link-active-background: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$layout-drawer-navigation-link-active-color: unquote(\"rgb(#{$color-light-contrast})\") !default;\n\n// Header\n$layout-header-bg-color: unquote(\"rgb(#{$color-primary})\") !default;\n$layout-header-text-color: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n$layout-header-nav-hover-color: unquote(\"rgba(#{$palette-grey-700}, 0.6)\") !default;\n$layout-header-tab-text-color: unquote(\"rgba(#{$color-primary-contrast}, 0.6)\") !default;\n\n// Tabs\n$layout-header-tab-highlight: unquote(\"rgb(#{$color-accent})\") !default;\n\n/* ========== Content Tabs ========== */\n\n$tab-highlight-color: unquote(\"rgb(#{$color-primary})\") !default;\n$tab-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$tab-active-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$tab-border-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n\n/* ========== Checkboxes ========== */\n\n$checkbox-color: unquote(\"rgb(#{$color-primary})\") !default;\n$checkbox-off-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$checkbox-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$checkbox-focus-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$checkbox-image-path: $image_path;\n\n/* ========== Switches ========== */\n\n$switch-color: unquote(\"rgb(#{$color-primary})\") !default;\n$switch-faded-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$switch-thumb-color: $switch-color !default;\n$switch-track-color: unquote(\"rgba(#{$color-primary}, 0.5)\") !default;\n\n$switch-off-thumb-color: unquote(\"rgb(#{$palette-grey-50})\") !default;\n$switch-off-track-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$switch-disabled-thumb-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n$switch-disabled-track-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n/* ========== Spinner ========== */\n\n$spinner-color-1: unquote(\"rgb(#{$palette-blue-400})\") !default;\n$spinner-color-2: unquote(\"rgb(#{$palette-red-500})\") !default;\n$spinner-color-3: unquote(\"rgb(#{$palette-yellow-600})\") !default;\n$spinner-color-4: unquote(\"rgb(#{$palette-green-500})\") !default;\n\n$spinner-single-color: unquote(\"rgb(#{$color-primary})\") !default;\n\n/* ========== Text fields ========== */\n\n$input-text-background-color: transparent !default;\n$input-text-label-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$input-text-bottom-border-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n$input-text-highlight-color: unquote(\"rgb(#{$color-primary})\") !default;\n$input-text-disabled-color: $input-text-bottom-border-color !default;\n$input-text-disabled-text-color: $input-text-label-color !default;\n$input-text-error-color: unquote(\"rgb(#{$palette-red-A700})\") !default;\n\n/* ========== Card ========== */\n\n$card-background-color: unquote(\"rgb(#{$color-white})\") !default;\n$card-text-color: unquote(\"rgb(#{$color-black})\") !default;\n$card-image-placeholder-color: unquote(\"rgb(#{$color-accent})\") !default;\n$card-supporting-text-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$card-border-color: rgba(0,0,0,0.1) !default;\n$card-subtitle-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n\n/* ========== Sliders ========== */\n\n$range-bg-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$range-color: unquote(\"rgb(#{$color-primary})\") !default;\n$range-faded-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$range-bg-focus-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n/* ========== Progress ========== */\n$progress-main-color: unquote(\"rgb(#{$color-primary})\") !default;\n$progress-secondary-color: unquote(\"rgba(#{$color-primary-contrast}, 0.7)\") !default;\n$progress-fallback-buffer-color: unquote(\"rgba(#{$color-primary-contrast}, 0.9)\") !default;\n$progress-image-path: $image_path;\n\n/* ========== List ========== */\n\n$list-main-text-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$list-supporting-text-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$list-icon-color: unquote(\"rgb(#{$palette-grey-600})\") !default;\n$list-avatar-color: white !default;\n\n/* ========== Item ========== */\n\n// Default Item Colors\n$default-item-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$default-item-outline-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n$default-item-hover-bg-color: unquote(\"rgb(#{$palette-grey-200})\") !default;\n$default-item-focus-bg-color: unquote(\"rgb(#{$palette-grey-200})\") !default;\n$default-item-active-bg-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$default-item-divider-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n// Disabled Button Colors\n$disabled-item-text-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n\n/* ========== Dropdown menu ========== */\n\n$default-dropdown-bg-color: unquote(\"rgb(#{$color-white})\") !default;\n\n/* ========== Tooltips ========== */\n\n$tooltip-text-color: unquote(\"rgb(#{$color-white})\") !default;\n$tooltip-background-color: unquote(\"rgba(#{$palette-grey-700}, 0.9)\") !default;\n\n/* ========== Footer ========== */\n\n$footer-bg-color: unquote(\"rgb(#{$palette-grey-800})\") !default;\n$footer-color: unquote(\"rgb(#{$palette-grey-500})\") !default;\n$footer-heading-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$footer-button-fill-color: $footer-color !default;\n$footer-underline-color: $footer-color !default;\n\n\n/* TEXTFIELD */\n\n$input-text-font-size: 16px !default;\n$input-text-width: 100% !default;\n$input-text-padding: 4px !default;\n$input-text-vertical-spacing: 20px !default;\n\n$input-text-button-size: 32px !default;\n$input-text-floating-label-fontsize: 12px !default;\n$input-text-expandable-icon-top: 16px !default;\n\n\n/* SWITCH */\n\n$switch-label-font-size: 16px !default;\n$switch-label-height: 24px !default;\n$switch-track-height: 14px !default;\n$switch-track-length: 36px !default;\n$switch-thumb-size: 20px !default;\n$switch-track-top: ($switch-label-height - $switch-track-height) / 2 !default;\n$switch-thumb-top: ($switch-label-height - $switch-thumb-size) / 2 !default;\n$switch-ripple-size: $switch-label-height * 2 !default;\n$switch-helper-size: 8px !default;\n\n/* SPINNER */\n\n$spinner-size: 28px !default;\n$spinner-stroke-width: 3px !default;\n\n// Amount of circle the arc takes up.\n$spinner-arc-size: 270deg !default;\n// Time it takes to expand and contract arc.\n$spinner-arc-time: 1333ms !default;\n// How much the start location of the arc should rotate each time.\n$spinner-arc-start-rot: 216deg !default;\n\n$spinner-duration: 360 * $spinner-arc-time / (\n strip-units($spinner-arc-start-rot + (360deg - $spinner-arc-size)));\n\n\n/* RADIO */\n\n$radio-label-font-size: 16px !default;\n$radio-label-height: 24px !default;\n$radio-button-size: 16px !default;\n$radio-inner-margin: $radio-button-size / 4;\n$radio-padding: 8px !default;\n$radio-top-offset: ($radio-label-height - $radio-button-size) / 2;\n$radio-ripple-size: 42px !default;\n\n\n/* MENU */\n\n$menu-expand-duration: 0.3s !default;\n$menu-fade-duration: 0.2s !default;\n\n/* LIST */\n\n$list-border: 8px !default;\n$list-min-height: 48px !default;\n$list-min-padding: 16px !default;\n$list-bottom-padding: 20px !default;\n$list-avatar-text-left-distance: 72px !default;\n$list-icon-text-left-distance: 72px !default;\n\n$list-avatar-size: 40px !default;\n$list-icon-size: 24px !default;\n\n$list-two-line-height: 72px !default;\n$list-three-line-height: 88px !default;\n\n/* LAYOUT */\n\n$layout-drawer-narrow: 240px !default;\n$layout-drawer-wide: 456px !default;\n$layout-drawer-width: $layout-drawer-narrow !default;\n\n$layout-header-icon-size: 32px !default;\n$layout-screen-size-threshold: 1024px !default;\n$layout-header-icon-margin: 24px !default;\n$layout-drawer-button-mobile-size: 32px !default;\n$layout-drawer-button-desktop-size: 48px !default;\n\n$layout-header-mobile-row-height: 56px !default;\n$layout-mobile-header-height: $layout-header-mobile-row-height;\n$layout-header-desktop-row-height: 64px !default;\n$layout-desktop-header-height: $layout-header-desktop-row-height;\n\n$layout-header-desktop-baseline: 80px !default;\n$layout-header-mobile-baseline: 72px !default;\n$layout-header-mobile-indent: 16px !default;\n$layout-header-desktop-indent: 40px !default;\n\n$layout-tab-font-size: 14px !default;\n$layout-tab-bar-height: 48px !default;\n$layout-tab-mobile-padding: 12px !default;\n$layout-tab-desktop-padding: 24px !default;\n$layout-tab-highlight-thickness: 2px !default;\n\n\n/* ICON TOGGLE */\n\n$icon-toggle-size: 32px !default;\n$icon-toggle-font-size: 24px !default;\n$icon-toggle-ripple-size: 36px !default;\n\n/* FOOTER */\n\n/*mega-footer*/\n$footer-min-padding: 16px !default;\n$footer-padding-sides: 40px !default;\n$footer-heading-font-size: 14px !default;\n$footer-heading-line-height: (1.7 * $footer-heading-font-size) !default;\n$footer-btn-size: 36px !default;\n\n/*mini-footer*/\n$padding: 16px !default;\n$footer-heading-font-size: 24px !default;\n$footer-heading-line-height: (1.5 * $footer-heading-font-size) !default;\n$footer-btn-size: 36px !default;\n\n/* CHECKBOX */\n\n$checkbox-label-font-size: 16px !default;\n$checkbox-label-height: 24px !default;\n$checkbox-button-size: 16px !default;\n$checkbox-inner-margin: 2px !default;\n$checkbox-padding: 8px !default;\n$checkbox-top-offset:\n($checkbox-label-height - $checkbox-button-size - $checkbox-inner-margin) / 2;\n$checkbox-ripple-size: $checkbox-label-height * 1.5;\n\n/* CARD */\n\n/* Card dimensions */\n$card-width: 330px !default;\n$card-height: 200px !default;\n$card-font-size: 16px !default;\n$card-title-font-size: 24px !default;\n$card-subtitle-font-size: 14px !default;\n$card-horizontal-padding: 16px !default;\n$card-vertical-padding: 16px !default;\n\n$card-title-perspective-origin-x: 165px !default;\n$card-title-perspective-origin-y: 56px !default;\n\n$card-title-transform-origin-x: 165px !default;\n$card-title-transform-origin-y: 56px !default;\n\n$card-title-text-transform-origin-x: 149px !default;\n$card-title-text-transform-origin-y: 48px !default;\n\n$card-supporting-text-font-size: 1rem !default;\n$card-supporting-text-line-height: 18px !default;\n\n$card-actions-font-size: 16px !default;\n\n$card-title-text-font-weight: 300 !default;\n$card-z-index: 1 !default;\n\n/* Cover image */\n$card-cover-image-height: 186px !default;\n$card-background-image-url: '' !default;\n\n\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n$button-min-width: 64px !default;\n$button-height: 36px !default;\n$button-padding: 16px !default;\n$button-margin: 4px !default;\n$button-border-radius: 2px !default;\n\n$button-fab-size: 56px !default;\n$button-fab-size-mini: 40px !default;\n$button-fab-font-size: 24px !default;\n\n$button-icon-size: 32px !default;\n$button-icon-size-mini: 24px !default;\n\n\n/* ANIMATION */\n$animation-curve-fast-out-slow-in: cubic-bezier(0.4, 0, 0.2, 1) !default;\n$animation-curve-linear-out-slow-in: cubic-bezier(0, 0, 0.2, 1) !default;\n$animation-curve-fast-out-linear-in: cubic-bezier(0.4, 0, 1, 1) !default;\n\n$animation-curve-default: $animation-curve-fast-out-slow-in !default;\n\n\n/* PROGRESS */\n$bar-height: 4px !default;\n\n/* BADGE */\n$badge-font-size: 12px !default;\n$badge-color: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n$badge-color-inverse: unquote(\"rgb(#{$color-accent})\") !default;\n$badge-background: unquote(\"rgb(#{$color-accent})\") !default;\n$badge-background-inverse: unquote(\"rgba(#{$color-accent-contrast},0.2)\") !default;\n$badge-size : 22px !default;\n$badge-padding: 2px !default;\n$badge-overlap: 12px !default;\n\n/* SHADOWS */\n\n$shadow-key-umbra-opacity: 0.2 !default;\n$shadow-key-penumbra-opacity: 0.14 !default;\n$shadow-ambient-shadow-opacity: 0.12 !default;\n\n/* GRID */\n\n$grid-desktop-columns: 12 !default;\n$grid-desktop-gutter: 16px !default;\n$grid-desktop-margin: 16px !default;\n\n$grid-desktop-breakpoint: 840px !default;\n\n$grid-tablet-columns: 8 !default;\n$grid-tablet-gutter: $grid-desktop-gutter !default;\n$grid-tablet-margin: $grid-desktop-margin !default;\n\n$grid-tablet-breakpoint: 480px !default;\n\n$grid-phone-columns: 4 !default;\n$grid-phone-gutter: $grid-desktop-gutter !default;\n$grid-phone-margin: $grid-desktop-margin !default;\n\n$grid-cell-default-columns: $grid-phone-columns !default;\n$grid-max-columns: $grid-desktop-columns !default;\n\n/* DATA TABLE */\n\n$data-table-font-size: 13px !default;\n$data-table-header-font-size: 12px !default;\n$data-table-header-sort-icon-size: 16px !default;\n\n$data-table-header-color: rgba(#000, 0.54) !default;\n$data-table-header-sorted-color: rgba(#000, 0.87) !default;\n$data-table-header-sorted-icon-hover-color: rgba(#000, 0.26) !default;\n$data-table-divider-color: rgba(#000, 0.12) !default;\n\n$data-table-hover-color: #eeeeee !default;\n$data-table-selection-color: #e0e0e0 !default;\n\n$data-table-dividers: 1px solid $data-table-divider-color !default;\n\n$data-table-row-height: 48px !default;\n$data-table-last-row-height: 56px !default;\n$data-table-header-height: 56px !default;\n\n$data-table-column-spacing: 36px !default;\n$data-table-column-padding: $data-table-column-spacing / 2;\n\n$data-table-card-header-height: 64px !default;\n$data-table-card-title-top: 20px !default;\n$data-table-card-padding: 24px !default;\n$data-table-button-padding-right: 16px !default;\n$data-table-cell-top: $data-table-card-padding / 2;\n\n/* DIALOG */\n$dialog-content-color: $card-supporting-text-text-color;\n\n/* SNACKBAR */\n\n// Hard coded since the color is not present in any palette.\n$snackbar-background-color: #323232 !default;\n$snackbar-tablet-breakpoint: $grid-tablet-breakpoint;\n$snackbar-action-color: unquote(\"rgb(#{$color-accent})\") !default;\n\n/* TOOLTIP */\n$tooltip-font-size: 10px !default;\n$tooltip-font-size-large: 14px !default;\n\n/* CHIP */\n$chip-bg-color: rgb(222, 222, 222) !default;\n$chip-bg-active-color: rgb(214, 214, 214) !default;\n$chip-height: 32px !default;\n$chip-font-size: 13px !default; \n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n\n.mdl-mini-footer {\n display: flex;\n flex-flow: row wrap;\n justify-content: space-between;\n\n padding: ($padding * 2) $padding;\n\n color: $footer-color;\n background-color: $footer-bg-color;\n\n &:after {\n content: '';\n display: block;\n }\n\n & .mdl-logo {\n line-height: $footer-btn-size;\n }\n}\n\n.mdl-mini-footer--link-list,\n.mdl-mini-footer__link-list {\n display: flex;\n flex-flow: row nowrap;\n\n list-style: none;\n\n margin: 0;\n padding: 0;\n\n & li {\n margin-bottom: 0;\n margin-right: $padding;\n\n @media screen and (min-width: 760px) {\n line-height: $footer-btn-size;\n }\n }\n\n & a {\n color: inherit;\n text-decoration: none;\n white-space: nowrap;\n }\n}\n\n.mdl-mini-footer--left-section,\n.mdl-mini-footer__left-section {\n display: inline-block;\n order: 0;\n}\n\n.mdl-mini-footer--right-section,\n.mdl-mini-footer__right-section {\n display: inline-block;\n order: 1;\n}\n\n.mdl-mini-footer--social-btn,\n.mdl-mini-footer__social-btn {\n width: $footer-btn-size;\n height: $footer-btn-size;\n\n padding: 0;\n margin: 0;\n\n background-color: $footer-button-fill-color;\n\n border: none;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n\n.mdl-card {\n display: flex;\n flex-direction: column;\n font-size: $card-font-size;\n font-weight: 400;\n min-height: $card-height;\n overflow: hidden;\n width: $card-width;\n z-index: $card-z-index;\n position: relative;\n background: $card-background-color;\n border-radius: 2px;\n box-sizing: border-box;\n}\n\n.mdl-card__media {\n background-color: $card-image-placeholder-color;\n background-repeat: repeat;\n background-position: 50% 50%;\n background-size: cover;\n background-origin: padding-box;\n background-attachment: scroll;\n box-sizing: border-box;\n}\n\n.mdl-card__title {\n align-items: center;\n color: $card-text-color;\n display: block;\n display: flex;\n justify-content: stretch;\n line-height: normal;\n padding: $card-vertical-padding $card-horizontal-padding;\n perspective-origin: $card-title-perspective-origin-x $card-title-perspective-origin-y;\n transform-origin: $card-title-transform-origin-x $card-title-transform-origin-y;\n box-sizing: border-box;\n\n &.mdl-card--border {\n border-bottom: 1px solid $card-border-color;\n }\n}\n\n.mdl-card__title-text {\n align-self: flex-end;\n color: inherit;\n display: block;\n display: flex;\n font-size: $card-title-font-size;\n font-weight: $card-title-text-font-weight;\n line-height: normal;\n overflow: hidden;\n transform-origin: $card-title-text-transform-origin-x $card-title-text-transform-origin-y;\n margin: 0;\n}\n\n.mdl-card__subtitle-text {\n font-size: $card-subtitle-font-size;\n color: $card-subtitle-color;\n margin: 0;\n}\n\n.mdl-card__supporting-text {\n color: $card-supporting-text-text-color;\n font-size: $card-supporting-text-font-size;\n line-height: $card-supporting-text-line-height;\n overflow: hidden;\n padding: $card-vertical-padding $card-horizontal-padding;\n width: 90%;\n\n &.mdl-card--border {\n border-bottom: 1px solid $card-border-color;\n }\n}\n\n.mdl-card__actions {\n font-size: $card-actions-font-size;\n line-height: normal;\n width: 100%;\n background-color: rgba(0,0,0,0);\n padding: 8px;\n box-sizing: border-box;\n\n &.mdl-card--border {\n border-top: 1px solid $card-border-color;\n }\n}\n\n.mdl-card--expand {\n flex-grow: 1;\n}\n\n\n.mdl-card__menu {\n position: absolute;\n right: 16px;\n top: 16px;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n@import \"../mixins\";\n\n// The button component. Defaults to a flat button.\n.mdl-button {\n background: transparent;\n border: none;\n border-radius: $button-border-radius;\n color: $button-secondary-color;\n position: relative;\n height: $button-height;\n margin: 0;\n min-width: $button-min-width;\n padding: 0 $button-padding;\n display: inline-block;\n @include typo-button();\n overflow: hidden;\n will-change: box-shadow;\n transition: box-shadow 0.2s $animation-curve-fast-out-linear-in,\n background-color 0.2s $animation-curve-default,\n color 0.2s $animation-curve-default;\n outline: none;\n cursor: pointer;\n text-decoration: none;\n text-align: center;\n line-height: $button-height;\n vertical-align: middle;\n\n &::-moz-focus-inner {\n border: 0;\n }\n\n &:hover {\n background-color: $button-hover-color;\n }\n\n &:focus:not(:active) {\n background-color: $button-focus-color;\n }\n\n &:active {\n background-color: $button-active-color;\n }\n\n &.mdl-button--colored {\n color: $button-primary-color-alt;\n\n &:focus:not(:active) {\n background-color: $button-focus-color-alt;\n }\n }\n}\n\ninput.mdl-button[type=\"submit\"] {\n -webkit-appearance:none;\n}\n\n // Raised buttons\n .mdl-button--raised {\n background: $button-primary-color;\n @include shadow-2dp();\n\n &:active {\n @include shadow-4dp();\n background-color: $button-active-color;\n }\n\n &:focus:not(:active) {\n @include focus-shadow();\n background-color: $button-active-color;\n }\n\n &.mdl-button--colored {\n background: $button-primary-color-alt;\n color: $button-secondary-color-alt;\n\n &:hover {\n background-color: $button-hover-color-alt;\n }\n\n &:active {\n background-color: $button-active-color-alt;\n }\n\n &:focus:not(:active) {\n background-color: $button-active-color-alt;\n }\n\n & .mdl-ripple {\n background: $button-ripple-color-alt;\n }\n }\n }\n\n\n // FABs\n .mdl-button--fab {\n border-radius: 50%;\n font-size: $button-fab-font-size;\n height: $button-fab-size;\n margin: auto;\n min-width: $button-fab-size;\n width: $button-fab-size;\n padding: 0;\n overflow: hidden;\n background: $button-primary-color;\n box-shadow: 0 1px 1.5px 0 rgba(0,0,0,0.12), 0 1px 1px 0 rgba(0,0,0,0.24);\n position: relative;\n line-height: normal;\n\n & .material-icons {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(- $button-fab-font-size / 2, - $button-fab-font-size / 2);\n line-height: $button-fab-font-size;\n width: $button-fab-font-size;\n }\n\n &.mdl-button--mini-fab {\n height: $button-fab-size-mini;\n min-width: $button-fab-size-mini;\n width: $button-fab-size-mini;\n }\n\n & .mdl-button__ripple-container {\n border-radius: 50%;\n // Fixes clipping bug in Safari.\n -webkit-mask-image: -webkit-radial-gradient(circle, white, black);\n }\n\n &:active {\n @include shadow-4dp();\n background-color: $button-active-color;\n }\n\n &:focus:not(:active) {\n @include focus-shadow();\n background-color: $button-active-color;\n }\n\n &.mdl-button--colored {\n background: $button-fab-color-alt;\n color: $button-fab-text-color-alt;\n\n &:hover {\n background-color: $button-fab-hover-color-alt;\n }\n\n &:focus:not(:active) {\n background-color: $button-fab-active-color-alt;\n }\n\n &:active {\n background-color: $button-fab-active-color-alt;\n }\n\n & .mdl-ripple {\n background: $button-fab-ripple-color-alt;\n }\n }\n }\n\n\n // Icon buttons\n .mdl-button--icon {\n border-radius: 50%;\n font-size: $button-fab-font-size;\n height: $button-icon-size;\n margin-left: 0;\n margin-right: 0;\n min-width: $button-icon-size;\n width: $button-icon-size;\n padding: 0;\n overflow: hidden;\n color: inherit;\n line-height: normal;\n\n & .material-icons {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(- $button-fab-font-size / 2, - $button-fab-font-size / 2);\n line-height: $button-fab-font-size;\n width: $button-fab-font-size;\n }\n\n &.mdl-button--mini-icon {\n height: $button-icon-size-mini;\n min-width: $button-icon-size-mini;\n width: $button-icon-size-mini;\n\n & .material-icons {\n top: ($button-icon-size-mini - $button-fab-font-size) / 2;\n left: ($button-icon-size-mini - $button-fab-font-size) / 2;\n }\n }\n\n & .mdl-button__ripple-container {\n border-radius: 50%;\n // Fixes clipping bug in Safari.\n -webkit-mask-image: -webkit-radial-gradient(circle, white, black);\n }\n }\n\n\n // Ripples\n .mdl-button__ripple-container {\n display: block;\n height: 100%;\n left: 0px;\n position: absolute;\n top: 0px;\n width: 100%;\n z-index: 0;\n overflow: hidden;\n\n .mdl-button[disabled] & .mdl-ripple,\n .mdl-button.mdl-button--disabled & .mdl-ripple {\n background-color: transparent;\n }\n }\n\n// Colorized buttons\n\n.mdl-button--primary.mdl-button--primary {\n color: $button-primary-color-alt;\n & .mdl-ripple {\n background: $button-secondary-color-alt;\n }\n &.mdl-button--raised, &.mdl-button--fab {\n color: $button-secondary-color-alt;\n background-color: $button-primary-color-alt;\n }\n}\n\n.mdl-button--accent.mdl-button--accent {\n color: $button-fab-color-alt;\n & .mdl-ripple {\n background: $button-fab-text-color-alt;\n }\n &.mdl-button--raised, &.mdl-button--fab {\n color: $button-fab-text-color-alt;\n background-color: $button-fab-color-alt;\n }\n}\n\n// Disabled buttons\n\n.mdl-button {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n color: $button-secondary-color-disabled;\n cursor: default;\n background-color: transparent;\n }\n\n &--fab {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n background-color: $button-primary-color-disabled;\n color: $button-secondary-color-disabled;\n }\n }\n\n &--raised {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n background-color: $button-primary-color-disabled;\n color: $button-secondary-color-disabled;\n box-shadow: none;\n }\n }\n &--colored {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n color: $button-secondary-color-disabled;\n }\n }\n}\n\n// Align icons inside buttons with text\n.mdl-button .material-icons {\n vertical-align: middle;\n}\n","// SIMPLE GRID - SASS/SCSS\n\n\n// fonts\n$font-weight-light: 300;\n$font-weight-regular: 400;\n$font-weight-heavy: 700;\n\n// colors\n$dark-grey: #333447;\n$dark-gray: #333447; // for the Americans\n\n\n.font-light {\n font-weight: $font-weight-light;\n}\n\n.font-regular {\n font-weight: $font-weight-regular;\n}\n\n.font-heavy {\n font-weight: $font-weight-heavy;\n}\n\n// utility\n\n.left {\n text-align: left;\n}\n\n.right {\n text-align: right;\n}\n\n.center {\n text-align: center;\n margin-left: auto;\n margin-right: auto;\n}\n\n.justify {\n text-align: justify;\n}\n\n.hidden-sm {\n display: none;\n}\n\n// grid\n\n$width: 98%;\n$gutter: 2%;\n$breakpoint-small: 33.75em; // 540px\n$breakpoint-med: 45em; // 720px\n$breakpoint-large: 60em; // 960px\n\n.container {\n width: 100%;\n margin-left: auto;\n margin-right: auto;\n\n @media only screen and (min-width: $breakpoint-small) {\n width: 80%;\n }\n\n @media only screen and (min-width: $breakpoint-large) {\n width: 75%;\n max-width: 60rem;\n }\n}\n\n.row {\n position: relative;\n width: 100%;\n}\n\n.row [class^=\"col\"] {\n float: left;\n margin: 0.5rem 1%;\n min-height: 0.125rem;\n}\n\n.row::after {\n content: \"\";\n display: table;\n clear: both;\n}\n\n.col-1,\n.col-2,\n.col-3,\n.col-4,\n.col-5,\n.col-6,\n.col-7,\n.col-8,\n.col-9,\n.col-10,\n.col-11,\n.col-12 {\n width: $width;\n}\n\n.col-1-sm {\n width: ($width / 12) - ($gutter * 11 / 12);\n}\n\n.col-2-sm {\n width: ($width / 6) - ($gutter * 10 / 12);\n}\n\n.col-3-sm {\n width: ($width / 4) - ($gutter * 9 / 12);\n}\n\n.col-4-sm {\n width: ($width / 3) - ($gutter * 8 / 12);\n}\n\n.col-5-sm {\n width: ($width / (12 / 5)) - ($gutter * 7 / 12);\n}\n\n.col-6-sm {\n width: ($width / 2) - ($gutter * 6 / 12);\n}\n\n.col-7-sm {\n width: ($width / (12 / 7)) - ($gutter * 5 / 12);\n}\n\n.col-8-sm {\n width: ($width / (12 / 8)) - ($gutter * 4 / 12);\n}\n\n.col-9-sm {\n width: ($width / (12 / 9)) - ($gutter * 3 / 12);\n}\n\n.col-10-sm {\n width: ($width / (12 / 10)) - ($gutter * 2 / 12);\n}\n\n.col-11-sm {\n width: ($width / (12 / 11)) - ($gutter * 1 / 12);\n}\n\n.col-12-sm {\n width: $width;\n}\n\n@media only screen and (min-width: $breakpoint-med) {\n .col-1 {\n width: ($width / 12) - ($gutter * 11 / 12);\n }\n .col-2 {\n width: ($width / 6) - ($gutter * 10 / 12);\n }\n .col-3 {\n width: ($width / 4) - ($gutter * 9 / 12);\n }\n .col-4 {\n width: ($width / 3) - ($gutter * 8 / 12);\n }\n .col-5 {\n width: ($width / (12 / 5)) - ($gutter * 7 / 12);\n }\n .col-6 {\n width: ($width / 2) - ($gutter * 6 / 12);\n }\n .col-7 {\n width: ($width / (12 / 7)) - ($gutter * 5 / 12);\n }\n .col-8 {\n width: ($width / (12 / 8)) - ($gutter * 4 / 12);\n }\n .col-9 {\n width: ($width / (12 / 9)) - ($gutter * 3 / 12);\n }\n .col-10 {\n width: ($width / (12 / 10)) - ($gutter * 2 / 12);\n }\n .col-11 {\n width: ($width / (12 / 11)) - ($gutter * 1 / 12);\n }\n .col-12 {\n width: $width;\n }\n\n .hidden-sm {\n display: block;\n }\n}\n\n.row {\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n flex-wrap: wrap;\n}\n\n.row > [class*='col-'] {\n display: flex;\n flex-direction: column;\n}\n","\n/*\nMaterial Icons\n*/\n\n.material-icons {\n font-family: 'Material Icons';\n font-weight: normal;\n font-style: normal;\n font-size: 24px; /* Preferred icon size */\n display: inline-block;\n line-height: 1;\n text-transform: none;\n letter-spacing: normal;\n word-wrap: normal;\n white-space: nowrap;\n direction: ltr;\n \n /* Support for all WebKit browsers. */\n -webkit-font-smoothing: antialiased;\n /* Support for Safari and Chrome. */\n text-rendering: optimizeLegibility;\n \n /* Support for Firefox. */\n -moz-osx-font-smoothing: grayscale;\n \n /* Support for IE. */\n font-feature-settings: 'liga';\n }","html {\n font-size: $font_size;\n}\n\nbody {\n display: block !important;\n background-color: $background_color;\n font-size: 1rem;\n line-height: 1.5rem;\n font-family: $body_font_family;\n}\n\n.mdl-layout__content:focus {\n outline: none;\n }\n\nh1, h2, h3, h4, h5, h6, blockquote, span.mdl-layout-title,\na.download > code.download {\n font-family: $body_font_family;\n}\n\nh1, h2, h3, h4, h5, h6, .toc-backref, .contents, .toctree-wrapper, .contents a, .toctree-wrapper a, .globaltoc a.current {\n color: $color-mxnet !important;\n}\n\na {\n text-decoration: none;\n}\n\n.page-content {\n font-size: 1rem;\n p, ul, ol, dl, dd, dt, table, th, td {\n font-size: 1rem;\n }\n}\n\n.brand {\n color: inherit;\n text-decoration: none;\n}\n\n.section {\n overflow-x: auto;\n}\n\n\n/*\n * Figure Directive Styles\n */\n img {\n max-width: 100%;\n display: block;\n margin-left: auto;\n margin-right: auto;\n }\n\ndiv.figure {\n p.caption {\n text-align: center;\n margin-top: .75rem;\n\n span.caption-number {\n font-style: normal;\n }\n .caption-number::after {\n content: \"\\00a0\";\n }\n }\n}\n\n.svg-icon {\n width: 16px;\n height: 16px;\n display: inline-block;\n fill: $grey-color-light;\n padding-right: 5px;\n padding-top: 4px;\n vertical-align: text-top;\n}\n\n/*\n * Download Link Styles\n */\na.download > i.material-icons {\n position: relative;\n top: 5px;\n}\n\na.download {\n text-decoration: none;\n}\n\n%clearfix:after {\n content: \"\";\n display: table;\n clear: both;\n}\n\n.wrapper {\n max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit} * 2));\n max-width: calc(#{$content-width} - (#{$spacing-unit} * 2));\n margin-right: auto;\n margin-left: auto;\n padding-right: calc(#{$spacing-unit}+15px);\n padding-left: $spacing-unit;\n @extend %clearfix;\n\n @media screen and (max-width: $on-laptop) {\n max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit}));\n max-width: calc(#{$content-width} - (#{$spacing-unit}));\n padding-right: $spacing-unit / 2;\n padding-left: $spacing-unit / 2;\n }\n}\n\n","/*\nVariables\n*/\n$font_size: 16px;\n\n$background_color: #fafafa;\n$code_background: rgba(0,0,0,.05);\n\n$code_font_family: \"Menlo\", \"DejaVu Sans Mono\", \"Liberation Mono\", \"Consolas\", \"Ubuntu Mono\", \"Courier New\", \"andale mono\", \"lucida console\", monospace !default;\n$body_font_family: -apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\" !default;\n$base-font-size: 17px !default;\n\n$xl-breakpoint: 1795px;\n$lg-breakpoint: 1200px;\n$md-breakpoint: 992px;\n$sm-breakpoint: 768px;\n$xs-breakpoint: 576px;\n\n$color-primary: $palette-blue-500;\n$color-primary-dark: $palette-blue-700 !default;\n$color-accent: $palette-deep-orange-A200 !default;\n$color-primary-contrast: $color-white !default;\n$color-accent-contrast: $color-white !default;\n\n\n$base-line-height: 1.5 !default;\n$spacing-unit: 30px !default;\n\n$color-mxnet: rgb(4,140,204);\n$color-mxnet-dark: rgb(4,60,110);\n$grey-color: #828282 !default;\n$grey-color-light: lighten($grey-color, 45%) !default;\n$grey-color-dark: darken($grey-color, 25%) !default;\n\n$table-text-align: left !default;\n\n// Width of the content area\n$content-width: 1150px !default;\n\n$on-palm: 600px !default;\n$on-palm: 900px !default;\n$on-laptop: 1024px !default;","/**\n * Layout Styles\n */\n $layout: (\n document: (\n xl: (\n width: 1400px,\n )\n ),\n drawer-container: (\n width: $layout-drawer-width,\n ),\n side-doc-outline: (\n width: 230px,\n ),\n page-content: (\n md: (\n width: 90%,\n padding: 0 5%\n ),\n lg: (\n width: calc( 90% - 230px ),\n padding: 0 5%\n )\n )\n);\n\n.mdl-layout {\n margin-top: 76px;\n}\n\n\n.document {\n width: 100%;\n margin: 0 auto;\n display: flex;\n\n @media (min-width: $xl-breakpoint) {\n width: map-get(map-get(map-get($layout, document), xl), width);\n }\n .page-content {\n width: 100%;\n margin: 0 auto;\n padding: 0 12px;\n\n @media (min-width: $md-breakpoint) {\n width: map-get(map-get(map-get($layout, page-content), md), width);\n padding: map-get(map-get(map-get($layout, page-content), md), padding);\n }\n\n @media (min-width: $lg-breakpoint) {\n width: map-get(map-get(map-get($layout, page-content), lg), width);\n padding: map-get(map-get(map-get($layout, page-content), lg), padding);\n }\n }\n\n .side-doc-outline {\n width: map-get(map-get($layout, side-doc-outline), width);\n\n @media (max-width: $lg-breakpoint - 1) {\n display: none;\n } \n &--content {\n position: fixed;\n overflow-x: auto;\n overflow-y: auto;\n width: inherit;\n &::-webkit-scrollbar {\n width: 6px;\n }\n \n &::-webkit-scrollbar-track {\n border-radius: 6px;\n }\n \n &::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, .3);\n border-radius: 6px;\n box-shadow:0 0 0 1px rgba(255, 255, 255, .3);\n }\n }\n }\n\n}","@keyframes float-in {\n 0% {\n transform: translateY(0.5rem);\n opacity: 0;\n }\n\t100% {\n\t\ttransform: translateY(0);\n\t\topacity: 1;\n\t}\n}\n\n@keyframes float-out {\n 0% {\n transform: translateY(0);\n opacity: 1;\n }\n\t100% {\n\t\ttransform: translateY(0.5rem);\n\t\topacity: 0;\n\t}\n}\n\n.page-content {\n .headerlink {\n display: inline-block;\n text-decoration: none;\n margin-left: 0.8rem;\n color: inherit;\n opacity: 0;\n &:hover {\n animation: float-in 0.2s $animation-curve-fast-out-slow-in 0s forwards;\n }\n }\n\n h1, h2, h3, h4, h5, h6 {\n .toc-backref {\n text-decoration: none;\n }\n &:hover {\n .headerlink {\n animation: float-in 0.2s $animation-curve-fast-out-slow-in 0s forwards;\n }\n }\n }\n\n h1 {\n font-size: 2rem;\n line-height: 2.25rem;\n }\n\n h2 {\n font-size: 1.75rem;\n line-height: 2rem;\n padding-top: 1.5rem;\n margin-top: 0;\n margin-bottom: 1rem;\n }\n\n h3 {\n font-size: 1.5rem;\n line-height: 1.75rem;\n padding-top: 1rem;\n margin-top: 0px;\n margin-bottom: .75rem;\n }\n\n h4 {\n font-size: 1.25rem;\n line-height: 1.5rem;\n padding-top: .75rem;\n margin-top: 0px;\n margin-bottom: .5rem;\n }\n\n div.page-content h5 {\n font-size: 1.1rem;\n line-height: 1.5rem;\n padding-top: 2rem;\n margin-top: 0px;\n margin-bottom: 1rem;\n }\n\n div.page-content h6 {\n font-size: 1rem;\n line-height: 1.5rem;\n padding-top: 2rem;\n margin-top: 0px;\n margin-bottom: 1rem;\n }\n\n\n}\n","\n/*\n * Admonition Styles\n */\n $admonitions: (\n hint: (\n font-color: rgb(0, 188, 212),\n background-color: rgba(0, 188, 212, 0.1),\n icon-content: \"help_outline\"\n ),\n note: (\n font-color: rgb(0, 188, 212),\n background-color: rgba(0, 188, 212, 0.1),\n icon-content: \"info_outline\"\n ),\n seealso: (\n font-color: rgb(0, 188, 212),\n background-color: rgba(0, 188, 212, 0.1),\n icon-content: \"search\"\n ),\n warning: (\n font-color: rgb(255, 193, 7),\n background-color: rgba(255, 193, 7, 0.1),\n icon-content: \"warning\"\n ),\n attention: (\n font-color: rgb(255, 193, 7),\n background-color: rgba(255, 193, 7, 0.1),\n icon-content: \"warning\"\n ),\n tip: (\n font-color: rgb(139, 195, 74),\n background-color: rgba(139, 195, 74, 0.1),\n icon-content: \"lightbulb_outline\"\n ),\n important: (\n font-color: rgb(139, 195, 74),\n background-color: rgba(139, 195, 74, 0.1),\n icon-content: \"check_circle\"\n ),\n error: (\n font-color: rgb(244, 67, 54),\n background-color: rgba(244, 67, 54, 0.1),\n icon-content: \"error_outline\"\n ),\n caution: (\n font-color: rgb(244, 67, 54),\n background-color: rgba(244, 67, 54, 0.1),\n icon-content: \"error_outline\"\n ),\n danger: (\n font-color: rgb(244, 67, 54),\n background-color: rgba(244, 67, 54, 0.1),\n icon-content: \"error_outline\"\n )\n);\n\n @mixin admonition-style($type) {\n border-left: solid 4px map-get(map-get($admonitions, $type), font-color);\n background-color: map-get(map-get($admonitions, $type), background-color);\n .admonition-title {\n font-size: 16px;\n font-weight: bold;\n color: map-get(map-get($admonitions, $type), font-color);\n\n margin-top: 4px;\n margin-bottom: 8px;\n &::before {\n @extend .material-icons;\n position: relative;\n margin-right: 5px;\n top: 3px;\n content: map-get(map-get($admonitions, $type), icon-content);\n font-size: 18px;\n }\n }\n}\n\n.admonition {\n @extend .mdl-shadow--2dp;\n\n padding: 12px 20px;\n margin-top: 10px;\n margin-bottom: 10px;\n p.last {\n margin: 16px;\n }\n .admonition-title {\n font-size: 16px;\n font-weight: bold;\n color: #555;\n text-transform: uppercase;\n margin-top: 7px;\n }\n\n @each $type in (note, seealso, hint, warning, attention, tip, important, error, caution, danger) {\n &.#{$type} {\n @include admonition-style($type);\n }\n }\n}\n",".page-content {\n .highlight {\n margin: 1px 0;\n pre {\n background: $code_background;\n color: rgba(0,0,0,.87);\n font-family: $code_font_family;\n padding: 0.75rem;\n overflow: auto;\n overflow-y: hidden;\n .o, .nd {\n color: rgba(0,0,0,.87);\n }\n }\n }\n\n div.highlight-console div.highlight {\n background: none;\n }\n\n // for jupyter notebook output cell\n .output {\n .highlight {\n pre {\n color: rgba(0,0,0,.87);\n background: $background_color;\n border-width: 1px;\n border-color: #999;\n border-style: solid;\n padding: 0.75rem;\n }\n }\n }\n\n .code, code:not(.download) {\n margin: 0 0;\n font-family: $code_font_family;\n border-radius: 2px;\n span.pre {\n font-family: $code_font_family;\n }\n }\n\n .viewcode-link {\n padding-left: 2em;\n font-size: 80%;\n }\n\n .rubric, .method > dt, .function > dt, .class > dt {\n display: table;\n margin: 10px 0;\n font-size: 100%;\n line-height: normal;\n background: #e7f2fa;\n color: #2B98F0;\n border-top: solid 3px #55ADF3;\n padding: 10px;\n position: relative;\n .descname, .descclassname {\n color: rgba(0,0,0,.87);\n background: #e7f2fa;\n padding: 3px;\n }\n em {\n padding: 0 2px;\n }\n }\n\n\n .rubric {\n margin: 30px 0 10px 0;\n }\n\n\n .field-body {\n padding-left: 40px;\n ul {\n padding: 0 0 0 16px;\n margin: 0;\n }\n }\n\n // .docutils > dt {\n // padding: 6px;\n // display: table;\n // margin-bottom: 6px;\n // border: none;\n // border-left: solid 3px #ccc;\n // background: #f0f0f0;\n // color: #555;\n // }\n\n .seealso .docutils > dt {\n float: left;\n clear: left;\n padding: 0 6px;\n }\n\n .seealso .docutils > dd {\n padding-left: 6em;\n }\n .nblast {\n padding-bottom: 1em;\n }\n\n pre {\n font-size: 90%;\n background: #eee;\n color: #455A64;\n padding: 16px 32px;\n width: auto;\n border-radius: 4px;\n word-wrap: break-word;\n\n &:hover {\n @extend .mdl-shadow--2dp;\n\n &:before {\n font-family: $body_font_family;\n padding: 0 0.5rem;\n content: attr(click-to-copy);\n color: rgba(0, 0, 0, 0.5);\n border-radius: 4px;\n position: relative;\n float: right;\n top: -0.5rem;\n right: -0.5rem;\n background: rgb(200, 200, 200);\n font-size: 0.8rem;\n cursor: pointer;\n }\n }\n }\n}\n","/*\n * Quotation Block Styles\n */\n .page-content {\n blockquote {\n font-size: 1rem;\n padding: 0 1rem;\n border-left: 3px solid $code_background;\n\n &:after {\n content: \"\" !important;\n margin-left: 0;\n }\n &:before {\n content: \"\" !important;\n }\n }\n }\n",".page-content {\n table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) {\n @extend .mdl-data-table;\n @extend .mdl-shadow--2dp;\n\n margin: 1.5rem 0;\n table-layout: fixed;\n max-width: 100%;\n min-width: 70%;\n\n th, td {\n @extend .mdl-data-table__cell--non-numeric;\n white-space: normal;\n overflow-wrap: break-word;\n }\n\n caption {\n font-size: $font_size;\n margin: 1rem 0 0.8rem 0;\n white-space: normal;\n .caption-number {\n font-style: normal;\n }\n .caption-number::after {\n content: \"\\00a0\";\n }\n }\n\n }\n}\n",".globaltoc {\n \n .caption, .toc {\n display: none;\n }\n\n ul {\n\n list-style-type: none;\n padding: 0;\n margin: 0;\n\n li {\n min-height: 18px;\n .link-wrapper {\n display: flex;\n justify-content: space-between;\n > a {\n padding: 4px 0;\n display: block;\n width: 100%;\n font-size: 1rem;\n text-decoration: none;\n color: $layout-drawer-navigation-color;\n &.current {\n font-weight: bold;\n }\n }\n }\n }\n }\n\n .nav-toggle {\n padding: 0;\n float: right;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 36px;\n > a {\n padding: 0;\n margin-left: 0;\n margin-right: 4px;\n cursor: pointer;\n > i {\n font-size: 18px;\n }\n }\n &.show {\n transform: rotateZ(180deg);\n > a {\n margin-right: 0;\n margin-left: 4px;\n }\n }\n }\n\n nav {\n > ul > li > span.link-wrapper {\n padding-left: 8px;\n }\n > ul > li > ul > li > span.link-wrapper {\n padding-left: 16px;\n }\n > ul > li > ul > li > ul > li > span.link-wrapper {\n padding-left: 24px;\n }\n > ul > li > ul > li > ul > li > ul> li > span.link-wrapper {\n padding-left: 32px;\n }\n > ul > li > ul > li > ul > li > ul > li > ul> li > span.link-wrapper {\n padding-left: 40px;\n }\n > ul > li > ul > li > ul > li > ul > li > ul > li > ul> li > span.link-wrapper {\n padding-left: 48px;\n }\n }\n}\n",".localtoc {\n font-size: 0.75rem;\n padding-top: 1rem;\n\n .caption {\n padding-left: 12px;\n &-text {\n font-size: 0.9rem;\n font-weight: 700;\n }\n }\n\n > ul > li > a {\n display: none;\n }\n\n ul {\n padding: 0;\n list-style-type: none;\n }\n\n li {\n padding-left: 6px;\n }\n\n a {\n display: block;\n text-decoration: none;\n color: inherit;\n margin-top: 8px;\n padding-left: 8px;\n line-height: 1.1rem;\n \n &.current {\n padding-left: 5px;\n border-left: 3px solid;\n font-weight: bold;\n }\n }\n}","/*\r\n * Toctree and Contents Directive Styles\r\n */\r\n .toctree-wrapper,\r\n .contents.topic {\r\n border-left: 5px solid;\r\n }\r\n\r\n .toctree-wrapper > p.caption,\r\n .contents.topic > p.topic-title {\r\n color: rgb(117, 117, 117);\r\n font-size: 1rem;\r\n padding-left: 14px;\r\n }\r\n\r\n .toctree-wrapper ul,\r\n .contents.topic ul{\r\n padding-left: 14px;\r\n list-style: none;\r\n line-height: 30px;\r\n }\r\n\r\n .toctree-wrapper a,\r\n .contents.topic a {\r\n font-size: 1.2rem;\r\n text-decoration: none;\r\n .pre {\r\n font-size: 1rem;\r\n }\r\n }\r\n\r\n .toctree-wrapper > ul > li > a,\r\n .contents.topic > ul > li > a {\r\n font-size: 1.3rem;\r\n .pre {\r\n font-size: 1.1rem;\r\n }\r\n }\r\n",".page-content {\n ul {\n li {\n margin: .3rem 0;\n p {\n margin: 0;\n }\n }\n }\n .option-list {\n .option {\n font-family: $code_font_family;\n }\n td {\n padding: 0.5rem;\n border: none;\n }\n }\n}\n","/*\r\n * Drawer Styles\r\n */\r\n.mdl-layout {\r\n &__drawer {\r\n background-color: #fff;\r\n\r\n &::-webkit-scrollbar {\r\n width: 6px;\r\n }\r\n\r\n &::-webkit-scrollbar-track {\r\n border-radius: 6px;\r\n }\r\n\r\n &::-webkit-scrollbar-thumb {\r\n background-color: rgba(0, 0, 0, .3);\r\n border-radius: 6px;\r\n box-shadow:0 0 0 1px rgba(255, 255, 255, .3);\r\n }\r\n\r\n > .mdl-layout-title {\r\n font-weight: bold;\r\n text-align: right;\r\n margin: 0;\r\n padding: 0;\r\n line-height: 32px;\r\n border-bottom: 1px solid rgba(0,0,0,.1);\r\n min-height: 64px;\r\n .title {\r\n color: inherit;\r\n display: block;\r\n height: 100%;\r\n width: 100%;\r\n text-decoration: none;\r\n > img.logo {\r\n width: 100%;\r\n margin: 0;\r\n padding: 0;\r\n }\r\n\r\n &-text {\r\n font-weight: bold;\r\n text-align: right;\r\n padding: 0 10px;\r\n margin: 16px 0 8px 0;\r\n line-height: 32px;\r\n font-family: $body_font_family;\r\n color: inherit;\r\n display: block;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","/*\r\n * Header Styles\r\n */\r\n\r\nnav.breadcrumb {\r\n > a.mdl-navigation__link {\r\n padding: 0 8px;\r\n font-size: 18px;\r\n }\r\n @media (max-width: $lg-breakpoint - 1) {\r\n width: calc( 100% - 64px );\r\n a.mdl-navigation__link.is-active {\r\n overflow-x: hidden;\r\n width: 100%;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n }\r\n a.mdl-navigation__link:not(.is-active),\r\n i.material-icons {\r\n display: none;\r\n }\r\n }\r\n}\r\n\r\ndiv.mdl-layout__header {\r\n margin-top: 77px;\r\n}\r\n\r\n.mdl-layout__drawer-button {\r\n top: 13px !important;\r\n}\r\n\r\ndiv.mdl-layout__header-row.header-links {\r\n background: rgba(255,255,255,0.2);\r\n width: 100%;\r\n overflow-x: auto;\r\n overflow-y: hidden;\r\n\r\n a.mdl-navigation__link {\r\n font-size: 1rem;\r\n i {\r\n font-size: 1.2rem;\r\n margin: 0 8px;\r\n position: relative;\r\n bottom: -0.1rem;\r\n }\r\n };\r\n\r\n a.mdl-navigation__link:hover {\r\n background-color: unquote(\"rgb(#{$color-primary})\");\r\n color: #eeeeee;\r\n };\r\n a.mdl-navigation__link[href=\"#\"] {\r\n background-color: unquote(\"rgb(#{$color-primary})\");\r\n opacity: 1;\r\n color: #ffffff;\r\n };\r\n}\r\n\r\n/* mxnet-header */\r\n\r\n\r\n.site-title {\r\n font-weight: 300 !important;\r\n line-height: 57px;\r\n letter-spacing: -1px;\r\n margin-bottom: 0;\r\n float: left;\r\n color: white;\r\n\r\n &,\r\n &:visited {\r\n color: $grey-color-dark;\r\n }\r\n}\r\n\r\n\r\n.site-header {\r\n position: fixed;\r\n top: 0;\r\n width: 100%;\r\n min-height: 55px;\r\n padding-top: 10px;\r\n padding-bottom: 10px;\r\n background-color: $color-mxnet;\r\n z-index: 10;\r\n font-weight: 300;\r\n font-size: 17px;\r\n border-bottom: 1px solid white;\r\n}\r\n\r\n.site-header-logo {\r\n width: 120px;\r\n display: initial;\r\n}\r\n\r\n.site-nav {\r\n float: right;\r\n line-height: 57px;\r\n\r\n .nav-trigger {\r\n display: none;\r\n }\r\n\r\n .menu-icon {\r\n display: none;\r\n }\r\n\r\n .page-link {\r\n color: white;\r\n line-height: 1.5;\r\n font-weight: 300;\r\n // Gaps between nav items, but not on the last one\r\n &:not(:last-child) {\r\n margin-right: 40px;\r\n }\r\n\r\n &:hover {\r\n color: white;\r\n text-shadow: -0.06ex 0 white, 0.06ex 0 white;\r\n }\r\n }\r\n\r\n .page-link.page-current {\r\n color: white;\r\n text-decoration: underline;\r\n }\r\n\r\n @media screen and (max-width: $on-laptop) {\r\n position: absolute;\r\n top: 9px;\r\n right: 15px;\r\n background-color: rgb(23,141,201);\r\n border-radius: 2px;\r\n text-align: right;\r\n\r\n label[for=\"nav-trigger\"] {\r\n display: block;\r\n float: right;\r\n width: 36px;\r\n height: 36px;\r\n z-index: 2;\r\n cursor: pointer;\r\n }\r\n\r\n .menu-icon {\r\n display: block;\r\n float: right;\r\n width: 36px;\r\n height: 26px;\r\n line-height: 0;\r\n padding-top: 20px;\r\n text-align: center;\r\n\r\n > svg {\r\n fill: white;\r\n }\r\n }\r\n\r\n input ~ .trigger {\r\n clear: both;\r\n display: none;\r\n }\r\n\r\n input:checked ~ .trigger {\r\n display: block;\r\n padding-bottom: 5px;\r\n }\r\n\r\n .page-link {\r\n padding: 5px 10px;\r\n display: block;\r\n\r\n &:not(:last-child) {\r\n margin-right: 0;\r\n }\r\n\r\n margin-left: 20px;\r\n }\r\n }\r\n}","/*\r\n * Footer Styles\r\n */\r\nfooter.mdl-mini-footer {\r\n background-color: #212121;\r\n > div.mdl-mini-footer__left-section {\r\n margin-bottom: 20px;\r\n display: flex;\r\n flex-direction: column;\r\n .mdl-logo {\r\n font-size: 1.1rem;\r\n }\r\n ul {\r\n @extend .mdl-mini-footer__link-list;\r\n }\r\n }\r\n > div.mdl-mini-footer__right-section {\r\n font-size: 0.9rem;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: flex-end;\r\n\r\n a {\r\n color: inherit;\r\n font-weight: bold;\r\n text-decoration: none;\r\n }\r\n }\r\n p.caption {\r\n display: none;\r\n }\r\n}\r\n\r\n/*\r\n * Pagenation Block Styles\r\n */\r\n .pagenation {\r\n width: 100%;\r\n margin-top: 80px;\r\n height: 92px;\r\n background-color: #424242;\r\n display: flex;\r\n\r\n .button-common {\r\n text-transform: none;\r\n padding: 0;\r\n height: 92px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n color: #ffffff;\r\n }\r\n #button-prev {\r\n @extend .button-common;\r\n margin-right: auto;\r\n .pagenation-text {\r\n text-align: left;\r\n }\r\n \r\n }\r\n #button-next {\r\n @extend .button-common;\r\n margin-left: auto;\r\n flex-direction: row-reverse;\r\n .pagenation-text {\r\n text-align: right;\r\n }\r\n }\r\n\r\n &-arrow {\r\n &-L {\r\n margin-right: 20px;\r\n }\r\n &-R {\r\n margin-left: 20px;\r\n }\r\n }\r\n\r\n &-text {\r\n line-height: 30px;\r\n font-size: 20px;\r\n }\r\n\r\n &-direction {\r\n opacity: 0.7;\r\n font-size: 18px;\r\n }\r\n @media screen and (max-width: 1024px) {\r\n #button-prev {\r\n width: 20%;\r\n }\r\n \r\n #button-next {\r\n width: 80%;\r\n }\r\n \r\n #button-prev .pagenation-text {\r\n display: none;\r\n }\r\n }\r\n @media screen and (min-width: 1025px) {\r\n #button-prev,\r\n #button-next {\r\n width: 50%;\r\n }\r\n \r\n #button-prev .pagenation-text {\r\n display: block;\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n/**\r\n * Site footer\r\n */\r\n.site-footer {\r\n border-top: 1px solid $grey-color-light;\r\n padding: $spacing-unit 0;\r\n background-color: #424242;\r\n position: relative;\r\n z-index: 10;\r\n .footer-category-title {\r\n color: $color-mxnet;\r\n }\r\n a {\r\n color: $grey-color-light !important;\r\n\r\n &:visited {\r\n color: $grey-color-light !important;\r\n }\r\n }\r\n\r\n}\r\n\r\n.site-footer2 {\r\n background-color: #424242;\r\n padding-top: 40px;\r\n padding-bottom: 10px;\r\n position: relative;\r\n z-index: 10;\r\n}\r\n\r\n.footer-heading {\r\n margin-bottom: $spacing-unit / 2;\r\n}\r\n\r\n.contact-list,\r\n.social-media-list {\r\n list-style: none;\r\n margin-left: 0;\r\n}\r\n\r\n\r\n.footer-bottom-warning {\r\n font-size: 80%;\r\n color: white;\r\n float: left;\r\n}\r\n\r\n.footer-logo {\r\n width: 200px;\r\n margin-bottom: 30px;\r\n margin-top: 30px;\r\n}\r\n\r\n.footer-col {\r\n float: left;\r\n margin-bottom: $spacing-unit / 2;\r\n padding-left: $spacing-unit / 2;\r\n}\r\n\r\n.footer-text {\r\n color: $grey-color-light;\r\n}\r\n\r\n"," /*\r\n * Search Styles\r\n */\r\n#waterfall-exp::-webkit-input-placeholder {\r\n color: #ccc;\r\n}\r\n#waterfall-exp:-ms-input-placeholder {\r\n color: #ccc;\r\n}\r\n#waterfall-exp::-moz-placeholder {\r\n color: #ccc;\r\n}\r\n\r\nul.search span.highlighted {\r\n font-weight: bold;\r\n}\r\n\r\nul.search > li {\r\n margin-bottom: 24px;\r\n}\r\n\r\n#search-results {\r\n ul {\r\n list-style: none;\r\n padding: 0;\r\n li {\r\n > a {\r\n text-decoration: none;\r\n font-size: 1.2rem;\r\n }\r\n }\r\n }\r\n}\r\n","a.download {\n &:before {\n @extend .material-icons;\n content: \"file_download\";\n position: relative;\n top: 5px;\n margin-right: 5px;\n }\n}\n\nbutton.download {\n position: sticky;\n margin-left: 1em;\n}\n",".mdl-card {\n margin: 1em 1.5em 1em 0;\n display: inline-block;\n width: 250px;\n min-height: 140px;\n padding: 18px;\n}\n.mdl-card:hover {\n box-shadow: 0 10px 20px rgba(0,0,0,0.25), 0 6px 6px rgba(0,0,0,0.22);\n color: #000;\n cursor: pointer;\n}\n.mdl-card__title {\n padding: 0 0 1em 0;\n font-size: 18px;\n color: #444;\n}\n\n.mdl-card__supporting-text {\n line-height: 1.5rem;\n padding: 0px;\n width: 100%;\n}\n\n.head-card.mdl-card {\n width: auto;\n display: block;\n max-width: 800px;\n padding: 24px;\n}\n\n.head-card > .mdl-card__title {\n padding-bottom: 0px;\n height: 60px;\n font-weight: 700;\n text-transform: uppercase;\n}\n.head-card > .mdl-card__menu {\n color: #fff;\n}\n.head-card > .mdl-card__actions {\n padding: 0;\n}\n.cards {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n}\n"]} \ No newline at end of file +{"version":3,"sources":["../../node_modules/material-design-lite/src/shadow/_shadow.scss","../../node_modules/material-design-lite/src/_mixins.scss","../../node_modules/material-design-lite/src/data-table/_data-table.scss","../../node_modules/material-design-lite/src/_variables.scss","../../node_modules/material-design-lite/src/footer/_mini_footer.scss","../../node_modules/material-design-lite/src/card/_card.scss","../../node_modules/material-design-lite/src/button/_button.scss","../scss/grid/_simplegrid.scss","../scss/fonts/_material-icons.scss","../scss/_root.scss","../scss/_variables.scss","../scss/layout/_layout.scss","../scss/headerings/_headerings.scss","../scss/admonitions/_admonitions.scss","../scss/code/_code.scss","../scss/blockquote/_blockquote.scss","../scss/tables/_tables.scss","../scss/toc/_globaltoc.scss","../scss/toc/_localtoc.scss","../scss/toc/_toctree.scss","../scss/lists/_lists.scss","../scss/drawer/_drawer.scss","../scss/header/_header.scss","../scss/footer/_footer.scss","../scss/search/_search.scss","../scss/downloadlink/_downloadlink.scss","../scss/card/_card.scss"],"names":[],"mappings":"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","file":"sphinx_materialdesign_theme.css","sourceRoot":"../../src/js","sourcesContent":["/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n@import \"../mixins\";\n\n.mdl-shadow--2dp {\n @include shadow-2dp();\n}\n\n.mdl-shadow--3dp {\n @include shadow-3dp();\n}\n\n.mdl-shadow--4dp {\n @include shadow-4dp();\n}\n\n.mdl-shadow--6dp {\n @include shadow-6dp();\n}\n\n.mdl-shadow--8dp {\n @include shadow-8dp();\n}\n\n.mdl-shadow--16dp {\n @include shadow-16dp();\n}\n\n.mdl-shadow--24dp {\n @include shadow-24dp();\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* Typography */\n\n@mixin typo-preferred-font($usePreferred: true) {\n @if $usePreferred {\n font-family: $preferred_font;\n }\n}\n\n@mixin typo-display-4($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 112px;\n font-weight: 300;\n line-height: 1;\n letter-spacing: -0.04em;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-display-3($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 56px;\n font-weight: 400;\n line-height: 1.35;\n letter-spacing: -0.02em;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-display-2($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 45px;\n font-weight: 400;\n line-height: 48px;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-display-1($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 34px;\n font-weight: 400;\n line-height: 40px;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-headline($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 24px;\n font-weight: 400;\n line-height: 32px;\n -moz-osx-font-smoothing: grayscale;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-title($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 20px;\n font-weight: 500;\n line-height: 1;\n letter-spacing: 0.02em;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-subhead($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 16px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0.04em;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-subhead-2($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 16px;\n font-weight: 400;\n line-height: 28px;\n letter-spacing: 0.04em;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-body-2($colorContrast: false, $usePreferred: false) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n @if $usePreferred {\n font-weight: 500;\n } @else {\n font-weight: bold;\n }\n line-height: 24px;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-body-1($colorContrast: false, $usePreferred: false) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-caption($colorContrast: false, $usePreferred: false) {\n @include typo-preferred-font($usePreferred);\n font-size: 12px;\n font-weight: 400;\n line-height: 1;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-blockquote($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n position: relative;\n font-size: 24px;\n font-weight: 300;\n font-style: italic;\n line-height: 1.35;\n letter-spacing: 0.08em;\n\n &:before {\n position: absolute;\n left: -0.5em;\n content: '“';\n }\n\n &:after {\n content: '”';\n margin-left: -0.05em;\n }\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-menu($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n font-weight: 500;\n line-height: 1;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-button($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n font-weight: 500;\n text-transform: uppercase;\n line-height: 1;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-icon() {\n font-family: 'Material Icons';\n font-weight: normal;\n font-style: normal;\n font-size: 24px;\n line-height: 1;\n letter-spacing: normal;\n text-transform: none;\n display: inline-block;\n word-wrap: normal;\n font-feature-settings: 'liga';\n -webkit-font-feature-settings: 'liga';\n -webkit-font-smoothing: antialiased;\n}\n\n/* Shadows */\n\n// Focus shadow mixin.\n@mixin focus-shadow() {\n box-shadow: 0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);\n}\n\n@mixin shadow-2dp() {\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 3px 1px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),\n 0 1px 5px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);\n}\n@mixin shadow-3dp() {\n box-shadow: 0 3px 4px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 3px 3px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),\n 0 1px 8px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);\n}\n@mixin shadow-4dp() {\n box-shadow: 0 4px 5px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 1px 10px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 2px 4px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n@mixin shadow-6dp() {\n box-shadow: 0 6px 10px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 1px 18px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 3px 5px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n@mixin shadow-8dp() {\n box-shadow: 0 8px 10px 1px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 3px 14px 2px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 5px 5px -3px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n@mixin shadow-16dp() {\n box-shadow: 0 16px 24px 2px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 6px 30px 5px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 8px 10px -5px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n@mixin shadow-24dp() {\n box-shadow: 0 9px 46px 8px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 11px 15px -7px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 24px 38px 3px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n/* Animations */\n\n@mixin material-animation-fast-out-slow-in($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-fast-out-slow-in;\n}\n\n@mixin material-animation-linear-out-slow-in($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-linear-out-slow-in;\n}\n\n@mixin material-animation-fast-out-linear-in($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-fast-out-linear-in;\n}\n\n@mixin material-animation-default($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-default;\n}\n\n/* Dialog */\n\n@mixin dialog-width($units:5) {\n @if(type_of($units) != 'number') {\n @error \"The unit given to dialog-width should be a number.\";\n }\n // 56dp is the base unit width for Dialogs.\n // With 5 units being the number of units for a mobile device.\n // https://goo.gl/sK2O5o\n width: $units * 56px;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n@import \"../mixins\";\n\n.mdl-data-table {\n position: relative;\n border: $data-table-dividers;\n border-collapse: collapse;\n white-space: nowrap;\n font-size: $data-table-font-size;\n background-color: unquote(\"rgb(#{$color-white})\");\n\n thead {\n padding-bottom: 3px;\n\n .mdl-data-table__select {\n margin-top: 0;\n }\n }\n\n tbody {\n tr {\n position: relative;\n height: $data-table-row-height;\n @include material-animation-default(0.28s);\n transition-property: background-color;\n\n &.is-selected {\n background-color: $data-table-selection-color;\n }\n\n &:hover {\n background-color: $data-table-hover-color;\n }\n }\n }\n\n td, th {\n padding: 0 $data-table-column-padding 12px $data-table-column-padding;\n text-align: right;\n\n &:first-of-type {\n padding-left: 24px;\n }\n\n &:last-of-type {\n padding-right: 24px;\n }\n }\n\n td {\n position: relative;\n vertical-align: middle;\n height: $data-table-row-height;\n border-top: $data-table-dividers;\n border-bottom: $data-table-dividers;\n padding-top: $data-table-cell-top;\n box-sizing: border-box;\n\n .mdl-data-table__select {\n vertical-align: middle;\n }\n }\n\n th {\n position: relative;\n vertical-align: bottom;\n text-overflow: ellipsis;\n @include typo-body-2();\n height: $data-table-row-height;\n font-size: $data-table-header-font-size;\n color: $data-table-header-color;\n padding-bottom: 8px;\n box-sizing: border-box;\n\n &.mdl-data-table__header--sorted-ascending,\n &.mdl-data-table__header--sorted-descending {\n color: $data-table-header-sorted-color;\n &:before {\n @include typo-icon;\n font-size: $data-table-header-sort-icon-size;\n content: \"\\e5d8\";\n margin-right: 5px;\n vertical-align: sub;\n }\n &:hover {\n cursor: pointer;\n &:before {\n color: $data-table-header-sorted-icon-hover-color;\n }\n }\n }\n &.mdl-data-table__header--sorted-descending:before {\n content: \"\\e5db\";\n }\n }\n}\n\n.mdl-data-table__select {\n width: 16px;\n}\n\n.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric {\n text-align: left;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n * -----Dialog\n * -----Snackbar\n * -----Tooltip\n * -----Chip\n *\n * Even though all variables have the `!default` directive, most of them\n * should not be changed as they are dependent one another. This can cause\n * visual distortions (like alignment issues) that are hard to track down\n * and fix.\n */\n\n\n/* ========== TYPOGRAPHY ========== */\n\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n$preferred_font: 'Roboto', 'Helvetica', 'Arial', sans-serif !default;\n$performance_font: 'Helvetica', 'Arial', sans-serif !default;\n\n/* ========== COLORS ========== */\n\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n\n@import \"color-definitions\";\n@import \"functions\";\n\n/* ========== IMAGES ========== */\n$image_path: '/images' !default;\n\n/* ========== Color & Themes ========== */\n\n// Define whether individual color palette items should have classes created.\n// Setting this to true will remove individual color classes for each color in the palettes.\n// To improve overall performance (assuming they aren't used) by:\n// * Saving server bandwidth sending the extra classes\n// * Save client computation against the classes\n// it is RECOMMENDED you set this to true.\n$trim-color-classes: false !default;\n\n// Use color primarily for emphasis. Choose colors that fit with\n// your brand and provide good contrast between visual components.\n$color-primary: $palette-indigo-500 !default;\n$color-primary-dark: $palette-indigo-700 !default;\n$color-accent: $palette-pink-A200 !default;\n\n// Our primary is dark, so use $color-dark-contrast for overlaid text.\n$color-primary-contrast: $color-dark-contrast !default;\n// Our accent is dark, so use $color-dark-contrast for overlaid text.\n$color-accent-contrast: $color-dark-contrast !default;\n\n// Replace all colors with placeholders if we're generating a template.\n@if $styleguide-generate-template == true {\n $color-primary: '$color-primary';\n $color-primary-dark: '$color-primary-dark';\n $color-accent: '$color-accent';\n $color-primary-contrast: '$color-primary-contrast';\n $color-accent-contrast: '$color-accent-contrast';\n}\n\n/* ========== Typography ========== */\n\n// We use the following default color styles: text-color-primary and\n// text-color-secondary. For light themes, use text-color-primary-inverse\n// and text-color-secondary-inverse.\n\n$text-color-primary: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$text-link-color: unquote(\"rgb(#{$color-accent})\") !default;\n\n// Define whether to target elements directly for typographic enhancements.\n// Turning this off means you need to use mdl-* classes more often.\n// Other components may also fail to adhere to MD without these rules.\n// It is strongly recommended you leave this as true.\n\n$target-elements-directly: true !default;\n\n/* ========== Components ========== */\n\n/* ========== Standard Buttons ========== */\n\n// Default button colors.\n$button-primary-color: unquote(\"rgba(#{$palette-grey-500}, 0.20)\") !default;\n$button-secondary-color: unquote(\"rgb(#{$color-black})\") !default;\n$button-hover-color: $button-primary-color !default;\n$button-active-color: unquote(\"rgba(#{$palette-grey-500}, 0.40)\") !default;\n$button-focus-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n// Colored button colors.\n$button-primary-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-secondary-color-alt: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n$button-hover-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-active-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-focus-color-alt: $button-focus-color !default;\n\n// Ripple color for colored raised buttons.\n$button-ripple-color-alt: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n\n// Disabled button colors.\n$button-primary-color-disabled: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n$button-secondary-color-disabled: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n// FAB colors and sizes.\n$button-fab-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-hover-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-active-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-text-color-alt: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n$button-fab-ripple-color-alt: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n\n// Icon button colors and sizes.\n$button-icon-color: unquote(\"rgb(#{$palette-grey-700})\") !default;\n$button-icon-focus-color: $button-focus-color !default;\n\n/* ========== Icon Toggles ========== */\n\n$icon-toggle-color: unquote(\"rgb(#{$palette-grey-700})\") !default;\n$icon-toggle-focus-color: $button-focus-color !default;\n$icon-toggle-checked-color: unquote(\"rgb(#{$color-primary})\") !default;\n$icon-toggle-checked-focus-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$icon-toggle-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n/* ========== Radio Buttons ========== */\n\n$radio-color: unquote(\"rgb(#{$color-primary})\") !default;\n$radio-off-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$radio-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n/* ========== Ripple effect ========== */\n\n$ripple-bg-color: unquote(\"rgb(#{$color-light-contrast})\") !default;\n\n/* ========== Layout ========== */\n\n$layout-nav-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n\n// Drawer\n$layout-drawer-bg-color: unquote(\"rgb(#{$palette-grey-50})\") !default;\n$layout-drawer-border-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$layout-text-color: unquote(\"rgb(#{$palette-grey-800})\") !default;\n$layout-drawer-navigation-color: #757575 !default;\n$layout-drawer-navigation-link-active-background: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$layout-drawer-navigation-link-active-color: unquote(\"rgb(#{$color-light-contrast})\") !default;\n\n// Header\n$layout-header-bg-color: unquote(\"rgb(#{$color-primary})\") !default;\n$layout-header-text-color: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n$layout-header-nav-hover-color: unquote(\"rgba(#{$palette-grey-700}, 0.6)\") !default;\n$layout-header-tab-text-color: unquote(\"rgba(#{$color-primary-contrast}, 0.6)\") !default;\n\n// Tabs\n$layout-header-tab-highlight: unquote(\"rgb(#{$color-accent})\") !default;\n\n/* ========== Content Tabs ========== */\n\n$tab-highlight-color: unquote(\"rgb(#{$color-primary})\") !default;\n$tab-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$tab-active-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$tab-border-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n\n/* ========== Checkboxes ========== */\n\n$checkbox-color: unquote(\"rgb(#{$color-primary})\") !default;\n$checkbox-off-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$checkbox-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$checkbox-focus-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$checkbox-image-path: $image_path;\n\n/* ========== Switches ========== */\n\n$switch-color: unquote(\"rgb(#{$color-primary})\") !default;\n$switch-faded-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$switch-thumb-color: $switch-color !default;\n$switch-track-color: unquote(\"rgba(#{$color-primary}, 0.5)\") !default;\n\n$switch-off-thumb-color: unquote(\"rgb(#{$palette-grey-50})\") !default;\n$switch-off-track-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$switch-disabled-thumb-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n$switch-disabled-track-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n/* ========== Spinner ========== */\n\n$spinner-color-1: unquote(\"rgb(#{$palette-blue-400})\") !default;\n$spinner-color-2: unquote(\"rgb(#{$palette-red-500})\") !default;\n$spinner-color-3: unquote(\"rgb(#{$palette-yellow-600})\") !default;\n$spinner-color-4: unquote(\"rgb(#{$palette-green-500})\") !default;\n\n$spinner-single-color: unquote(\"rgb(#{$color-primary})\") !default;\n\n/* ========== Text fields ========== */\n\n$input-text-background-color: transparent !default;\n$input-text-label-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$input-text-bottom-border-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n$input-text-highlight-color: unquote(\"rgb(#{$color-primary})\") !default;\n$input-text-disabled-color: $input-text-bottom-border-color !default;\n$input-text-disabled-text-color: $input-text-label-color !default;\n$input-text-error-color: unquote(\"rgb(#{$palette-red-A700})\") !default;\n\n/* ========== Card ========== */\n\n$card-background-color: unquote(\"rgb(#{$color-white})\") !default;\n$card-text-color: unquote(\"rgb(#{$color-black})\") !default;\n$card-image-placeholder-color: unquote(\"rgb(#{$color-accent})\") !default;\n$card-supporting-text-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$card-border-color: rgba(0,0,0,0.1) !default;\n$card-subtitle-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n\n/* ========== Sliders ========== */\n\n$range-bg-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$range-color: unquote(\"rgb(#{$color-primary})\") !default;\n$range-faded-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$range-bg-focus-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n/* ========== Progress ========== */\n$progress-main-color: unquote(\"rgb(#{$color-primary})\") !default;\n$progress-secondary-color: unquote(\"rgba(#{$color-primary-contrast}, 0.7)\") !default;\n$progress-fallback-buffer-color: unquote(\"rgba(#{$color-primary-contrast}, 0.9)\") !default;\n$progress-image-path: $image_path;\n\n/* ========== List ========== */\n\n$list-main-text-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$list-supporting-text-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$list-icon-color: unquote(\"rgb(#{$palette-grey-600})\") !default;\n$list-avatar-color: white !default;\n\n/* ========== Item ========== */\n\n// Default Item Colors\n$default-item-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$default-item-outline-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n$default-item-hover-bg-color: unquote(\"rgb(#{$palette-grey-200})\") !default;\n$default-item-focus-bg-color: unquote(\"rgb(#{$palette-grey-200})\") !default;\n$default-item-active-bg-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$default-item-divider-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n// Disabled Button Colors\n$disabled-item-text-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n\n/* ========== Dropdown menu ========== */\n\n$default-dropdown-bg-color: unquote(\"rgb(#{$color-white})\") !default;\n\n/* ========== Tooltips ========== */\n\n$tooltip-text-color: unquote(\"rgb(#{$color-white})\") !default;\n$tooltip-background-color: unquote(\"rgba(#{$palette-grey-700}, 0.9)\") !default;\n\n/* ========== Footer ========== */\n\n$footer-bg-color: unquote(\"rgb(#{$palette-grey-800})\") !default;\n$footer-color: unquote(\"rgb(#{$palette-grey-500})\") !default;\n$footer-heading-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$footer-button-fill-color: $footer-color !default;\n$footer-underline-color: $footer-color !default;\n\n\n/* TEXTFIELD */\n\n$input-text-font-size: 16px !default;\n$input-text-width: 100% !default;\n$input-text-padding: 4px !default;\n$input-text-vertical-spacing: 20px !default;\n\n$input-text-button-size: 32px !default;\n$input-text-floating-label-fontsize: 12px !default;\n$input-text-expandable-icon-top: 16px !default;\n\n\n/* SWITCH */\n\n$switch-label-font-size: 16px !default;\n$switch-label-height: 24px !default;\n$switch-track-height: 14px !default;\n$switch-track-length: 36px !default;\n$switch-thumb-size: 20px !default;\n$switch-track-top: ($switch-label-height - $switch-track-height) / 2 !default;\n$switch-thumb-top: ($switch-label-height - $switch-thumb-size) / 2 !default;\n$switch-ripple-size: $switch-label-height * 2 !default;\n$switch-helper-size: 8px !default;\n\n/* SPINNER */\n\n$spinner-size: 28px !default;\n$spinner-stroke-width: 3px !default;\n\n// Amount of circle the arc takes up.\n$spinner-arc-size: 270deg !default;\n// Time it takes to expand and contract arc.\n$spinner-arc-time: 1333ms !default;\n// How much the start location of the arc should rotate each time.\n$spinner-arc-start-rot: 216deg !default;\n\n$spinner-duration: 360 * $spinner-arc-time / (\n strip-units($spinner-arc-start-rot + (360deg - $spinner-arc-size)));\n\n\n/* RADIO */\n\n$radio-label-font-size: 16px !default;\n$radio-label-height: 24px !default;\n$radio-button-size: 16px !default;\n$radio-inner-margin: $radio-button-size / 4;\n$radio-padding: 8px !default;\n$radio-top-offset: ($radio-label-height - $radio-button-size) / 2;\n$radio-ripple-size: 42px !default;\n\n\n/* MENU */\n\n$menu-expand-duration: 0.3s !default;\n$menu-fade-duration: 0.2s !default;\n\n/* LIST */\n\n$list-border: 8px !default;\n$list-min-height: 48px !default;\n$list-min-padding: 16px !default;\n$list-bottom-padding: 20px !default;\n$list-avatar-text-left-distance: 72px !default;\n$list-icon-text-left-distance: 72px !default;\n\n$list-avatar-size: 40px !default;\n$list-icon-size: 24px !default;\n\n$list-two-line-height: 72px !default;\n$list-three-line-height: 88px !default;\n\n/* LAYOUT */\n\n$layout-drawer-narrow: 240px !default;\n$layout-drawer-wide: 456px !default;\n$layout-drawer-width: $layout-drawer-narrow !default;\n\n$layout-header-icon-size: 32px !default;\n$layout-screen-size-threshold: 1024px !default;\n$layout-header-icon-margin: 24px !default;\n$layout-drawer-button-mobile-size: 32px !default;\n$layout-drawer-button-desktop-size: 48px !default;\n\n$layout-header-mobile-row-height: 56px !default;\n$layout-mobile-header-height: $layout-header-mobile-row-height;\n$layout-header-desktop-row-height: 64px !default;\n$layout-desktop-header-height: $layout-header-desktop-row-height;\n\n$layout-header-desktop-baseline: 80px !default;\n$layout-header-mobile-baseline: 72px !default;\n$layout-header-mobile-indent: 16px !default;\n$layout-header-desktop-indent: 40px !default;\n\n$layout-tab-font-size: 14px !default;\n$layout-tab-bar-height: 48px !default;\n$layout-tab-mobile-padding: 12px !default;\n$layout-tab-desktop-padding: 24px !default;\n$layout-tab-highlight-thickness: 2px !default;\n\n\n/* ICON TOGGLE */\n\n$icon-toggle-size: 32px !default;\n$icon-toggle-font-size: 24px !default;\n$icon-toggle-ripple-size: 36px !default;\n\n/* FOOTER */\n\n/*mega-footer*/\n$footer-min-padding: 16px !default;\n$footer-padding-sides: 40px !default;\n$footer-heading-font-size: 14px !default;\n$footer-heading-line-height: (1.7 * $footer-heading-font-size) !default;\n$footer-btn-size: 36px !default;\n\n/*mini-footer*/\n$padding: 16px !default;\n$footer-heading-font-size: 24px !default;\n$footer-heading-line-height: (1.5 * $footer-heading-font-size) !default;\n$footer-btn-size: 36px !default;\n\n/* CHECKBOX */\n\n$checkbox-label-font-size: 16px !default;\n$checkbox-label-height: 24px !default;\n$checkbox-button-size: 16px !default;\n$checkbox-inner-margin: 2px !default;\n$checkbox-padding: 8px !default;\n$checkbox-top-offset:\n($checkbox-label-height - $checkbox-button-size - $checkbox-inner-margin) / 2;\n$checkbox-ripple-size: $checkbox-label-height * 1.5;\n\n/* CARD */\n\n/* Card dimensions */\n$card-width: 330px !default;\n$card-height: 200px !default;\n$card-font-size: 16px !default;\n$card-title-font-size: 24px !default;\n$card-subtitle-font-size: 14px !default;\n$card-horizontal-padding: 16px !default;\n$card-vertical-padding: 16px !default;\n\n$card-title-perspective-origin-x: 165px !default;\n$card-title-perspective-origin-y: 56px !default;\n\n$card-title-transform-origin-x: 165px !default;\n$card-title-transform-origin-y: 56px !default;\n\n$card-title-text-transform-origin-x: 149px !default;\n$card-title-text-transform-origin-y: 48px !default;\n\n$card-supporting-text-font-size: 1rem !default;\n$card-supporting-text-line-height: 18px !default;\n\n$card-actions-font-size: 16px !default;\n\n$card-title-text-font-weight: 300 !default;\n$card-z-index: 1 !default;\n\n/* Cover image */\n$card-cover-image-height: 186px !default;\n$card-background-image-url: '' !default;\n\n\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n$button-min-width: 64px !default;\n$button-height: 36px !default;\n$button-padding: 16px !default;\n$button-margin: 4px !default;\n$button-border-radius: 2px !default;\n\n$button-fab-size: 56px !default;\n$button-fab-size-mini: 40px !default;\n$button-fab-font-size: 24px !default;\n\n$button-icon-size: 32px !default;\n$button-icon-size-mini: 24px !default;\n\n\n/* ANIMATION */\n$animation-curve-fast-out-slow-in: cubic-bezier(0.4, 0, 0.2, 1) !default;\n$animation-curve-linear-out-slow-in: cubic-bezier(0, 0, 0.2, 1) !default;\n$animation-curve-fast-out-linear-in: cubic-bezier(0.4, 0, 1, 1) !default;\n\n$animation-curve-default: $animation-curve-fast-out-slow-in !default;\n\n\n/* PROGRESS */\n$bar-height: 4px !default;\n\n/* BADGE */\n$badge-font-size: 12px !default;\n$badge-color: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n$badge-color-inverse: unquote(\"rgb(#{$color-accent})\") !default;\n$badge-background: unquote(\"rgb(#{$color-accent})\") !default;\n$badge-background-inverse: unquote(\"rgba(#{$color-accent-contrast},0.2)\") !default;\n$badge-size : 22px !default;\n$badge-padding: 2px !default;\n$badge-overlap: 12px !default;\n\n/* SHADOWS */\n\n$shadow-key-umbra-opacity: 0.2 !default;\n$shadow-key-penumbra-opacity: 0.14 !default;\n$shadow-ambient-shadow-opacity: 0.12 !default;\n\n/* GRID */\n\n$grid-desktop-columns: 12 !default;\n$grid-desktop-gutter: 16px !default;\n$grid-desktop-margin: 16px !default;\n\n$grid-desktop-breakpoint: 840px !default;\n\n$grid-tablet-columns: 8 !default;\n$grid-tablet-gutter: $grid-desktop-gutter !default;\n$grid-tablet-margin: $grid-desktop-margin !default;\n\n$grid-tablet-breakpoint: 480px !default;\n\n$grid-phone-columns: 4 !default;\n$grid-phone-gutter: $grid-desktop-gutter !default;\n$grid-phone-margin: $grid-desktop-margin !default;\n\n$grid-cell-default-columns: $grid-phone-columns !default;\n$grid-max-columns: $grid-desktop-columns !default;\n\n/* DATA TABLE */\n\n$data-table-font-size: 13px !default;\n$data-table-header-font-size: 12px !default;\n$data-table-header-sort-icon-size: 16px !default;\n\n$data-table-header-color: rgba(#000, 0.54) !default;\n$data-table-header-sorted-color: rgba(#000, 0.87) !default;\n$data-table-header-sorted-icon-hover-color: rgba(#000, 0.26) !default;\n$data-table-divider-color: rgba(#000, 0.12) !default;\n\n$data-table-hover-color: #eeeeee !default;\n$data-table-selection-color: #e0e0e0 !default;\n\n$data-table-dividers: 1px solid $data-table-divider-color !default;\n\n$data-table-row-height: 48px !default;\n$data-table-last-row-height: 56px !default;\n$data-table-header-height: 56px !default;\n\n$data-table-column-spacing: 36px !default;\n$data-table-column-padding: $data-table-column-spacing / 2;\n\n$data-table-card-header-height: 64px !default;\n$data-table-card-title-top: 20px !default;\n$data-table-card-padding: 24px !default;\n$data-table-button-padding-right: 16px !default;\n$data-table-cell-top: $data-table-card-padding / 2;\n\n/* DIALOG */\n$dialog-content-color: $card-supporting-text-text-color;\n\n/* SNACKBAR */\n\n// Hard coded since the color is not present in any palette.\n$snackbar-background-color: #323232 !default;\n$snackbar-tablet-breakpoint: $grid-tablet-breakpoint;\n$snackbar-action-color: unquote(\"rgb(#{$color-accent})\") !default;\n\n/* TOOLTIP */\n$tooltip-font-size: 10px !default;\n$tooltip-font-size-large: 14px !default;\n\n/* CHIP */\n$chip-bg-color: rgb(222, 222, 222) !default;\n$chip-bg-active-color: rgb(214, 214, 214) !default;\n$chip-height: 32px !default;\n$chip-font-size: 13px !default; \n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n\n.mdl-mini-footer {\n display: flex;\n flex-flow: row wrap;\n justify-content: space-between;\n\n padding: ($padding * 2) $padding;\n\n color: $footer-color;\n background-color: $footer-bg-color;\n\n &:after {\n content: '';\n display: block;\n }\n\n & .mdl-logo {\n line-height: $footer-btn-size;\n }\n}\n\n.mdl-mini-footer--link-list,\n.mdl-mini-footer__link-list {\n display: flex;\n flex-flow: row nowrap;\n\n list-style: none;\n\n margin: 0;\n padding: 0;\n\n & li {\n margin-bottom: 0;\n margin-right: $padding;\n\n @media screen and (min-width: 760px) {\n line-height: $footer-btn-size;\n }\n }\n\n & a {\n color: inherit;\n text-decoration: none;\n white-space: nowrap;\n }\n}\n\n.mdl-mini-footer--left-section,\n.mdl-mini-footer__left-section {\n display: inline-block;\n order: 0;\n}\n\n.mdl-mini-footer--right-section,\n.mdl-mini-footer__right-section {\n display: inline-block;\n order: 1;\n}\n\n.mdl-mini-footer--social-btn,\n.mdl-mini-footer__social-btn {\n width: $footer-btn-size;\n height: $footer-btn-size;\n\n padding: 0;\n margin: 0;\n\n background-color: $footer-button-fill-color;\n\n border: none;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n\n.mdl-card {\n display: flex;\n flex-direction: column;\n font-size: $card-font-size;\n font-weight: 400;\n min-height: $card-height;\n overflow: hidden;\n width: $card-width;\n z-index: $card-z-index;\n position: relative;\n background: $card-background-color;\n border-radius: 2px;\n box-sizing: border-box;\n}\n\n.mdl-card__media {\n background-color: $card-image-placeholder-color;\n background-repeat: repeat;\n background-position: 50% 50%;\n background-size: cover;\n background-origin: padding-box;\n background-attachment: scroll;\n box-sizing: border-box;\n}\n\n.mdl-card__title {\n align-items: center;\n color: $card-text-color;\n display: block;\n display: flex;\n justify-content: stretch;\n line-height: normal;\n padding: $card-vertical-padding $card-horizontal-padding;\n perspective-origin: $card-title-perspective-origin-x $card-title-perspective-origin-y;\n transform-origin: $card-title-transform-origin-x $card-title-transform-origin-y;\n box-sizing: border-box;\n\n &.mdl-card--border {\n border-bottom: 1px solid $card-border-color;\n }\n}\n\n.mdl-card__title-text {\n align-self: flex-end;\n color: inherit;\n display: block;\n display: flex;\n font-size: $card-title-font-size;\n font-weight: $card-title-text-font-weight;\n line-height: normal;\n overflow: hidden;\n transform-origin: $card-title-text-transform-origin-x $card-title-text-transform-origin-y;\n margin: 0;\n}\n\n.mdl-card__subtitle-text {\n font-size: $card-subtitle-font-size;\n color: $card-subtitle-color;\n margin: 0;\n}\n\n.mdl-card__supporting-text {\n color: $card-supporting-text-text-color;\n font-size: $card-supporting-text-font-size;\n line-height: $card-supporting-text-line-height;\n overflow: hidden;\n padding: $card-vertical-padding $card-horizontal-padding;\n width: 90%;\n\n &.mdl-card--border {\n border-bottom: 1px solid $card-border-color;\n }\n}\n\n.mdl-card__actions {\n font-size: $card-actions-font-size;\n line-height: normal;\n width: 100%;\n background-color: rgba(0,0,0,0);\n padding: 8px;\n box-sizing: border-box;\n\n &.mdl-card--border {\n border-top: 1px solid $card-border-color;\n }\n}\n\n.mdl-card--expand {\n flex-grow: 1;\n}\n\n\n.mdl-card__menu {\n position: absolute;\n right: 16px;\n top: 16px;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n@import \"../mixins\";\n\n// The button component. Defaults to a flat button.\n.mdl-button {\n background: transparent;\n border: none;\n border-radius: $button-border-radius;\n color: $button-secondary-color;\n position: relative;\n height: $button-height;\n margin: 0;\n min-width: $button-min-width;\n padding: 0 $button-padding;\n display: inline-block;\n @include typo-button();\n overflow: hidden;\n will-change: box-shadow;\n transition: box-shadow 0.2s $animation-curve-fast-out-linear-in,\n background-color 0.2s $animation-curve-default,\n color 0.2s $animation-curve-default;\n outline: none;\n cursor: pointer;\n text-decoration: none;\n text-align: center;\n line-height: $button-height;\n vertical-align: middle;\n\n &::-moz-focus-inner {\n border: 0;\n }\n\n &:hover {\n background-color: $button-hover-color;\n }\n\n &:focus:not(:active) {\n background-color: $button-focus-color;\n }\n\n &:active {\n background-color: $button-active-color;\n }\n\n &.mdl-button--colored {\n color: $button-primary-color-alt;\n\n &:focus:not(:active) {\n background-color: $button-focus-color-alt;\n }\n }\n}\n\ninput.mdl-button[type=\"submit\"] {\n -webkit-appearance:none;\n}\n\n // Raised buttons\n .mdl-button--raised {\n background: $button-primary-color;\n @include shadow-2dp();\n\n &:active {\n @include shadow-4dp();\n background-color: $button-active-color;\n }\n\n &:focus:not(:active) {\n @include focus-shadow();\n background-color: $button-active-color;\n }\n\n &.mdl-button--colored {\n background: $button-primary-color-alt;\n color: $button-secondary-color-alt;\n\n &:hover {\n background-color: $button-hover-color-alt;\n }\n\n &:active {\n background-color: $button-active-color-alt;\n }\n\n &:focus:not(:active) {\n background-color: $button-active-color-alt;\n }\n\n & .mdl-ripple {\n background: $button-ripple-color-alt;\n }\n }\n }\n\n\n // FABs\n .mdl-button--fab {\n border-radius: 50%;\n font-size: $button-fab-font-size;\n height: $button-fab-size;\n margin: auto;\n min-width: $button-fab-size;\n width: $button-fab-size;\n padding: 0;\n overflow: hidden;\n background: $button-primary-color;\n box-shadow: 0 1px 1.5px 0 rgba(0,0,0,0.12), 0 1px 1px 0 rgba(0,0,0,0.24);\n position: relative;\n line-height: normal;\n\n & .material-icons {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(- $button-fab-font-size / 2, - $button-fab-font-size / 2);\n line-height: $button-fab-font-size;\n width: $button-fab-font-size;\n }\n\n &.mdl-button--mini-fab {\n height: $button-fab-size-mini;\n min-width: $button-fab-size-mini;\n width: $button-fab-size-mini;\n }\n\n & .mdl-button__ripple-container {\n border-radius: 50%;\n // Fixes clipping bug in Safari.\n -webkit-mask-image: -webkit-radial-gradient(circle, white, black);\n }\n\n &:active {\n @include shadow-4dp();\n background-color: $button-active-color;\n }\n\n &:focus:not(:active) {\n @include focus-shadow();\n background-color: $button-active-color;\n }\n\n &.mdl-button--colored {\n background: $button-fab-color-alt;\n color: $button-fab-text-color-alt;\n\n &:hover {\n background-color: $button-fab-hover-color-alt;\n }\n\n &:focus:not(:active) {\n background-color: $button-fab-active-color-alt;\n }\n\n &:active {\n background-color: $button-fab-active-color-alt;\n }\n\n & .mdl-ripple {\n background: $button-fab-ripple-color-alt;\n }\n }\n }\n\n\n // Icon buttons\n .mdl-button--icon {\n border-radius: 50%;\n font-size: $button-fab-font-size;\n height: $button-icon-size;\n margin-left: 0;\n margin-right: 0;\n min-width: $button-icon-size;\n width: $button-icon-size;\n padding: 0;\n overflow: hidden;\n color: inherit;\n line-height: normal;\n\n & .material-icons {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(- $button-fab-font-size / 2, - $button-fab-font-size / 2);\n line-height: $button-fab-font-size;\n width: $button-fab-font-size;\n }\n\n &.mdl-button--mini-icon {\n height: $button-icon-size-mini;\n min-width: $button-icon-size-mini;\n width: $button-icon-size-mini;\n\n & .material-icons {\n top: ($button-icon-size-mini - $button-fab-font-size) / 2;\n left: ($button-icon-size-mini - $button-fab-font-size) / 2;\n }\n }\n\n & .mdl-button__ripple-container {\n border-radius: 50%;\n // Fixes clipping bug in Safari.\n -webkit-mask-image: -webkit-radial-gradient(circle, white, black);\n }\n }\n\n\n // Ripples\n .mdl-button__ripple-container {\n display: block;\n height: 100%;\n left: 0px;\n position: absolute;\n top: 0px;\n width: 100%;\n z-index: 0;\n overflow: hidden;\n\n .mdl-button[disabled] & .mdl-ripple,\n .mdl-button.mdl-button--disabled & .mdl-ripple {\n background-color: transparent;\n }\n }\n\n// Colorized buttons\n\n.mdl-button--primary.mdl-button--primary {\n color: $button-primary-color-alt;\n & .mdl-ripple {\n background: $button-secondary-color-alt;\n }\n &.mdl-button--raised, &.mdl-button--fab {\n color: $button-secondary-color-alt;\n background-color: $button-primary-color-alt;\n }\n}\n\n.mdl-button--accent.mdl-button--accent {\n color: $button-fab-color-alt;\n & .mdl-ripple {\n background: $button-fab-text-color-alt;\n }\n &.mdl-button--raised, &.mdl-button--fab {\n color: $button-fab-text-color-alt;\n background-color: $button-fab-color-alt;\n }\n}\n\n// Disabled buttons\n\n.mdl-button {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n color: $button-secondary-color-disabled;\n cursor: default;\n background-color: transparent;\n }\n\n &--fab {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n background-color: $button-primary-color-disabled;\n color: $button-secondary-color-disabled;\n }\n }\n\n &--raised {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n background-color: $button-primary-color-disabled;\n color: $button-secondary-color-disabled;\n box-shadow: none;\n }\n }\n &--colored {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n color: $button-secondary-color-disabled;\n }\n }\n}\n\n// Align icons inside buttons with text\n.mdl-button .material-icons {\n vertical-align: middle;\n}\n","// SIMPLE GRID - SASS/SCSS\n\n\n// fonts\n$font-weight-light: 300;\n$font-weight-regular: 400;\n$font-weight-heavy: 700;\n\n// colors\n$dark-grey: #333447;\n$dark-gray: #333447; // for the Americans\n\n\n.font-light {\n font-weight: $font-weight-light;\n}\n\n.font-regular {\n font-weight: $font-weight-regular;\n}\n\n.font-heavy {\n font-weight: $font-weight-heavy;\n}\n\n// utility\n\n.left {\n text-align: left;\n}\n\n.right {\n text-align: right;\n}\n\n.center {\n text-align: center;\n margin-left: auto;\n margin-right: auto;\n}\n\n.justify {\n text-align: justify;\n}\n\n.hidden-sm {\n display: none;\n}\n\n// grid\n\n$width: 98%;\n$gutter: 2%;\n$breakpoint-small: 33.75em; // 540px\n$breakpoint-med: 45em; // 720px\n$breakpoint-large: 60em; // 960px\n\n.container {\n width: 100%;\n margin-left: auto;\n margin-right: auto;\n}\n\n.row {\n position: relative;\n width: 100%;\n}\n\n.row [class^=\"col\"] {\n float: left;\n margin: 0.5rem 1%;\n min-height: 0.125rem;\n}\n\n.row::after {\n content: \"\";\n display: table;\n clear: both;\n}\n\n.col-1,\n.col-2,\n.col-3,\n.col-4,\n.col-5,\n.col-6,\n.col-7,\n.col-8,\n.col-9,\n.col-10,\n.col-11,\n.col-12 {\n width: $width;\n}\n\n.col-1-sm {\n width: ($width / 12) - ($gutter * 11 / 12);\n}\n\n.col-2-sm {\n width: ($width / 6) - ($gutter * 10 / 12);\n}\n\n.col-3-sm {\n width: ($width / 4) - ($gutter * 9 / 12);\n}\n\n.col-4-sm {\n width: ($width / 3) - ($gutter * 8 / 12);\n}\n\n.col-5-sm {\n width: ($width / (12 / 5)) - ($gutter * 7 / 12);\n}\n\n.col-6-sm {\n width: ($width / 2) - ($gutter * 6 / 12);\n}\n\n.col-7-sm {\n width: ($width / (12 / 7)) - ($gutter * 5 / 12);\n}\n\n.col-8-sm {\n width: ($width / (12 / 8)) - ($gutter * 4 / 12);\n}\n\n.col-9-sm {\n width: ($width / (12 / 9)) - ($gutter * 3 / 12);\n}\n\n.col-10-sm {\n width: ($width / (12 / 10)) - ($gutter * 2 / 12);\n}\n\n.col-11-sm {\n width: ($width / (12 / 11)) - ($gutter * 1 / 12);\n}\n\n.col-12-sm {\n width: $width;\n}\n\n@media only screen and (min-width: $breakpoint-med) {\n .col-1 {\n width: ($width / 12) - ($gutter * 11 / 12);\n }\n .col-2 {\n width: ($width / 6) - ($gutter * 10 / 12);\n }\n .col-3 {\n width: ($width / 4) - ($gutter * 9 / 12);\n }\n .col-4 {\n width: ($width / 3) - ($gutter * 8 / 12);\n }\n .col-5 {\n width: ($width / (12 / 5)) - ($gutter * 7 / 12);\n }\n .col-6 {\n width: ($width / 2) - ($gutter * 6 / 12);\n }\n .col-7 {\n width: ($width / (12 / 7)) - ($gutter * 5 / 12);\n }\n .col-8 {\n width: ($width / (12 / 8)) - ($gutter * 4 / 12);\n }\n .col-9 {\n width: ($width / (12 / 9)) - ($gutter * 3 / 12);\n }\n .col-10 {\n width: ($width / (12 / 10)) - ($gutter * 2 / 12);\n }\n .col-11 {\n width: ($width / (12 / 11)) - ($gutter * 1 / 12);\n }\n .col-12 {\n width: $width;\n }\n\n .hidden-sm {\n display: block;\n }\n}\n\n.row {\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n flex-wrap: wrap;\n}\n\n.row > [class*='col-'] {\n display: flex;\n flex-direction: column;\n}\n","\n/*\nMaterial Icons\n*/\n\n.material-icons {\n font-family: 'Material Icons';\n font-weight: normal;\n font-style: normal;\n font-size: 24px; /* Preferred icon size */\n display: inline-block;\n line-height: 1;\n text-transform: none;\n letter-spacing: normal;\n word-wrap: normal;\n white-space: nowrap;\n direction: ltr;\n \n /* Support for all WebKit browsers. */\n -webkit-font-smoothing: antialiased;\n /* Support for Safari and Chrome. */\n text-rendering: optimizeLegibility;\n \n /* Support for Firefox. */\n -moz-osx-font-smoothing: grayscale;\n \n /* Support for IE. */\n font-feature-settings: 'liga';\n }","html {\n font-size: $font_size;\n}\n\nbody {\n display: block !important;\n background-color: $background_color;\n font-size: 1rem;\n line-height: 1.5rem;\n font-family: $body_font_family;\n}\n\n.mdl-layout__content:focus {\n outline: none;\n }\n\n.mdl-layout__content header.mdl-layout__drawer {\n display: none;\n}\n\n.mdl-layout--fixed-drawer>.mdl-layout__content {\n margin-left: 300px; \n}\n\nh1, h2, h3, h4, h5, h6, blockquote, span.mdl-layout-title,\na.download > code.download {\n font-family: $body_font_family;\n}\n\nh1, h2, h3, h4, h5, h6, .toc-backref, .contents, .toctree-wrapper, .contents a, .toctree-wrapper a, .globaltoc a.current {\n color: $color-mxnet !important;\n}\n\na {\n text-decoration: none;\n}\n\n.page-content {\n font-size: 1rem;\n p, ul, ol, dl, dd, dt, table, th, td {\n font-size: 1rem;\n }\n}\n\n.brand {\n color: inherit;\n text-decoration: none;\n}\n\n.section {\n overflow-x: auto;\n}\n\n\n/*\n * Figure Directive Styles\n */\n img {\n max-width: 100%;\n display: block;\n margin-left: auto;\n margin-right: auto;\n }\n\ndiv.figure {\n p.caption {\n text-align: center;\n margin-top: .75rem;\n\n span.caption-number {\n font-style: normal;\n }\n .caption-number::after {\n content: \"\\00a0\";\n }\n }\n}\n\n.svg-icon {\n width: 16px;\n height: 16px;\n display: inline-block;\n fill: $grey-color-light;\n padding-right: 5px;\n padding-top: 4px;\n vertical-align: text-top;\n}\n\n/*\n * Download Link Styles\n */\na.download > i.material-icons {\n position: relative;\n top: 5px;\n}\n\na.download {\n text-decoration: none;\n}\n\n%clearfix:after {\n content: \"\";\n display: table;\n clear: both;\n}\n\n.wrapper {\n max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit} * 2));\n max-width: calc(#{$content-width} - (#{$spacing-unit} * 2));\n margin-right: auto;\n margin-left: auto;\n padding-right: calc(#{$spacing-unit}+15px);\n padding-left: $spacing-unit;\n @extend %clearfix;\n\n @media screen and (max-width: $on-laptop) {\n max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit}));\n max-width: calc(#{$content-width} - (#{$spacing-unit}));\n padding-right: $spacing-unit / 2;\n padding-left: $spacing-unit / 2;\n }\n}\n\n","/*\nVariables\n*/\n$font_size: 16px;\n\n$background_color: #fafafa;\n$code_background: rgba(0,0,0,.05);\n\n$code_font_family: \"Menlo\", \"DejaVu Sans Mono\", \"Liberation Mono\", \"Consolas\", \"Ubuntu Mono\", \"Courier New\", \"andale mono\", \"lucida console\", monospace !default;\n$body_font_family: -apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\" !default;\n$base-font-size: 17px !default;\n\n$xl-breakpoint: 1795px;\n$lg-breakpoint: 1200px;\n$md-breakpoint: 992px;\n$sm-breakpoint: 768px;\n$xs-breakpoint: 576px;\n\n$color-primary: $palette-blue-500;\n$color-primary-dark: $palette-blue-700 !default;\n$color-accent: $palette-deep-orange-A200 !default;\n$color-primary-contrast: $color-white !default;\n$color-accent-contrast: $color-white !default;\n\n\n$base-line-height: 1.5 !default;\n$spacing-unit: 30px !default;\n\n$color-mxnet: rgb(4,140,204);\n$color-mxnet-dark: rgb(4,60,110);\n$grey-color: #828282 !default;\n$grey-color-light: lighten($grey-color, 45%) !default;\n$grey-color-dark: darken($grey-color, 25%) !default;\n\n$table-text-align: left !default;\n\n// Width of the content area\n$content-width: 1150px !default;\n\n$on-palm: 600px !default;\n$on-palm: 900px !default;\n$on-laptop: 1024px !default;","/**\n * Layout Styles\n */\n $layout: (\n document: (\n xl: (\n width: 100%,\n )\n ),\n drawer-container: (\n width: $layout-drawer-width,\n ),\n side-doc-outline: (\n width: 230px,\n ),\n page-content: (\n md: (\n width: 90%,\n padding: 0 5%\n ),\n lg: (\n width: calc( 90% - 230px ),\n padding: 0 5%\n )\n )\n);\n\n.mdl-layout {\n margin-top: 76px;\n}\n\n\n.document {\n width: 100%;\n margin: 0 auto;\n display: flex;\n\n @media (min-width: $xl-breakpoint) {\n width: map-get(map-get(map-get($layout, document), xl), width);\n }\n .page-content {\n width: 100%;\n margin: 0 auto;\n padding: 0 12px;\n\n @media (min-width: $md-breakpoint) {\n width: map-get(map-get(map-get($layout, page-content), md), width);\n padding: map-get(map-get(map-get($layout, page-content), md), padding);\n }\n\n @media (min-width: $lg-breakpoint) {\n width: map-get(map-get(map-get($layout, page-content), lg), width);\n padding: map-get(map-get(map-get($layout, page-content), lg), padding);\n }\n }\n\n .side-doc-outline {\n width: map-get(map-get($layout, side-doc-outline), width);\n\n @media (max-width: $lg-breakpoint - 1) {\n display: none;\n } \n &--content {\n position: fixed;\n overflow-x: auto;\n overflow-y: auto;\n width: inherit;\n right: 0px;\n &::-webkit-scrollbar {\n width: 6px;\n }\n \n &::-webkit-scrollbar-track {\n border-radius: 6px;\n }\n \n &::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, .3);\n border-radius: 6px;\n box-shadow:0 0 0 1px rgba(255, 255, 255, .3);\n }\n }\n }\n\n}","@keyframes float-in {\n 0% {\n transform: translateY(0.5rem);\n opacity: 0;\n }\n\t100% {\n\t\ttransform: translateY(0);\n\t\topacity: 1;\n\t}\n}\n\n@keyframes float-out {\n 0% {\n transform: translateY(0);\n opacity: 1;\n }\n\t100% {\n\t\ttransform: translateY(0.5rem);\n\t\topacity: 0;\n\t}\n}\n\n.page-content {\n .headerlink {\n display: inline-block;\n text-decoration: none;\n margin-left: 0.8rem;\n color: inherit;\n opacity: 0;\n &:hover {\n animation: float-in 0.2s $animation-curve-fast-out-slow-in 0s forwards;\n }\n }\n\n h1, h2, h3, h4, h5, h6 {\n .toc-backref {\n text-decoration: none;\n }\n &:hover {\n .headerlink {\n animation: float-in 0.2s $animation-curve-fast-out-slow-in 0s forwards;\n }\n }\n }\n\n h1 {\n font-size: 2rem;\n line-height: 2.25rem;\n }\n\n h2 {\n font-size: 1.75rem;\n line-height: 2rem;\n padding-top: 1.5rem;\n margin-top: 0;\n margin-bottom: 1rem;\n }\n\n h3 {\n font-size: 1.5rem;\n line-height: 1.75rem;\n padding-top: 1rem;\n margin-top: 0px;\n margin-bottom: .75rem;\n }\n\n h4 {\n font-size: 1.25rem;\n line-height: 1.5rem;\n padding-top: .75rem;\n margin-top: 0px;\n margin-bottom: .5rem;\n }\n\n div.page-content h5 {\n font-size: 1.1rem;\n line-height: 1.5rem;\n padding-top: 2rem;\n margin-top: 0px;\n margin-bottom: 1rem;\n }\n\n div.page-content h6 {\n font-size: 1rem;\n line-height: 1.5rem;\n padding-top: 2rem;\n margin-top: 0px;\n margin-bottom: 1rem;\n }\n\n\n}\n","\n/*\n * Admonition Styles\n */\n $admonitions: (\n hint: (\n font-color: rgb(0, 188, 212),\n background-color: rgba(0, 188, 212, 0.1),\n icon-content: \"help_outline\"\n ),\n note: (\n font-color: rgb(0, 188, 212),\n background-color: rgba(0, 188, 212, 0.1),\n icon-content: \"info_outline\"\n ),\n seealso: (\n font-color: rgb(0, 188, 212),\n background-color: rgba(0, 188, 212, 0.1),\n icon-content: \"search\"\n ),\n warning: (\n font-color: rgb(255, 193, 7),\n background-color: rgba(255, 193, 7, 0.1),\n icon-content: \"warning\"\n ),\n attention: (\n font-color: rgb(255, 193, 7),\n background-color: rgba(255, 193, 7, 0.1),\n icon-content: \"warning\"\n ),\n tip: (\n font-color: rgb(139, 195, 74),\n background-color: rgba(139, 195, 74, 0.1),\n icon-content: \"lightbulb_outline\"\n ),\n important: (\n font-color: rgb(139, 195, 74),\n background-color: rgba(139, 195, 74, 0.1),\n icon-content: \"check_circle\"\n ),\n error: (\n font-color: rgb(244, 67, 54),\n background-color: rgba(244, 67, 54, 0.1),\n icon-content: \"error_outline\"\n ),\n caution: (\n font-color: rgb(244, 67, 54),\n background-color: rgba(244, 67, 54, 0.1),\n icon-content: \"error_outline\"\n ),\n danger: (\n font-color: rgb(244, 67, 54),\n background-color: rgba(244, 67, 54, 0.1),\n icon-content: \"error_outline\"\n )\n);\n\n @mixin admonition-style($type) {\n border-left: solid 4px map-get(map-get($admonitions, $type), font-color);\n background-color: map-get(map-get($admonitions, $type), background-color);\n .admonition-title {\n font-size: 16px;\n font-weight: bold;\n color: map-get(map-get($admonitions, $type), font-color);\n\n margin-top: 4px;\n margin-bottom: 8px;\n &::before {\n @extend .material-icons;\n position: relative;\n margin-right: 5px;\n top: 3px;\n content: map-get(map-get($admonitions, $type), icon-content);\n font-size: 18px;\n }\n }\n}\n\n.admonition {\n @extend .mdl-shadow--2dp;\n\n padding: 12px 20px;\n margin-top: 10px;\n margin-bottom: 10px;\n p.last {\n margin: 16px;\n }\n .admonition-title {\n font-size: 16px;\n font-weight: bold;\n color: #555;\n text-transform: uppercase;\n margin-top: 7px;\n }\n\n @each $type in (note, seealso, hint, warning, attention, tip, important, error, caution, danger) {\n &.#{$type} {\n @include admonition-style($type);\n }\n }\n}\n",".page-content {\n .highlight {\n margin: 1px 0;\n pre {\n background: $code_background;\n color: rgba(0,0,0,.87);\n font-family: $code_font_family;\n padding: 0.75rem;\n overflow: auto;\n overflow-y: hidden;\n .o, .nd {\n color: rgba(0,0,0,.87);\n }\n }\n }\n\n div.highlight-console div.highlight {\n background: none;\n }\n\n // for jupyter notebook output cell\n .output {\n .highlight {\n pre {\n color: rgba(0,0,0,.87);\n background: $background_color;\n border-width: 1px;\n border-color: #999;\n border-style: solid;\n padding: 0.75rem;\n }\n }\n }\n\n .code, code:not(.download) {\n margin: 0 0;\n font-family: $code_font_family;\n border-radius: 2px;\n span.pre {\n font-family: $code_font_family;\n }\n }\n\n .viewcode-link {\n padding-left: 2em;\n font-size: 80%;\n }\n\n .rubric, .method > dt, .function > dt, .class > dt {\n display: table;\n margin: 10px 0;\n font-size: 100%;\n line-height: normal;\n background: #e7f2fa;\n color: #2B98F0;\n border-top: solid 3px #55ADF3;\n padding: 10px;\n position: relative;\n .descname, .descclassname {\n color: rgba(0,0,0,.87);\n background: #e7f2fa;\n padding: 3px;\n }\n em {\n padding: 0 2px;\n }\n }\n\n\n .rubric {\n margin: 30px 0 10px 0;\n }\n\n\n .field-body {\n padding-left: 40px;\n ul {\n padding: 0 0 0 16px;\n margin: 0;\n }\n }\n\n // .docutils > dt {\n // padding: 6px;\n // display: table;\n // margin-bottom: 6px;\n // border: none;\n // border-left: solid 3px #ccc;\n // background: #f0f0f0;\n // color: #555;\n // }\n\n .seealso .docutils > dt {\n float: left;\n clear: left;\n padding: 0 6px;\n }\n\n .seealso .docutils > dd {\n padding-left: 6em;\n }\n .nblast {\n padding-bottom: 1em;\n }\n\n pre {\n font-size: 90%;\n background: #eee;\n color: #455A64;\n padding: 16px 32px;\n width: auto;\n border-radius: 4px;\n word-wrap: break-word;\n\n &:hover {\n @extend .mdl-shadow--2dp;\n\n &:before {\n font-family: $body_font_family;\n padding: 0 0.5rem;\n content: attr(click-to-copy);\n color: rgba(0, 0, 0, 0.5);\n border-radius: 4px;\n position: relative;\n float: right;\n top: -0.5rem;\n right: -0.5rem;\n background: rgb(200, 200, 200);\n font-size: 0.8rem;\n cursor: pointer;\n }\n }\n }\n}\n","/*\n * Quotation Block Styles\n */\n .page-content {\n blockquote {\n font-size: 1rem;\n padding: 0 1rem;\n border-left: 3px solid $code_background;\n\n &:after {\n content: \"\" !important;\n margin-left: 0;\n }\n &:before {\n content: \"\" !important;\n }\n }\n }\n",".page-content {\n table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) {\n @extend .mdl-data-table;\n @extend .mdl-shadow--2dp;\n\n margin: 1.5rem 0;\n table-layout: fixed;\n max-width: 100%;\n min-width: 70%;\n\n th, td {\n @extend .mdl-data-table__cell--non-numeric;\n white-space: normal;\n overflow-wrap: break-word;\n }\n\n caption {\n font-size: $font_size;\n margin: 1rem 0 0.8rem 0;\n white-space: normal;\n .caption-number {\n font-style: normal;\n }\n .caption-number::after {\n content: \"\\00a0\";\n }\n }\n\n }\n}\n",".globaltoc {\n \n .caption, .toc {\n display: none;\n }\n\n ul {\n\n list-style-type: none;\n padding: 0;\n margin: 0;\n\n li {\n min-height: 18px;\n .link-wrapper {\n display: flex;\n justify-content: space-between;\n > a {\n padding: 4px 0;\n display: block;\n width: 100%;\n font-size: 1rem;\n text-decoration: none;\n color: $layout-drawer-navigation-color;\n &.current {\n font-weight: bold;\n }\n }\n }\n }\n }\n\n .nav-toggle {\n padding: 0;\n float: right;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 36px;\n > a {\n padding: 0;\n margin-left: 0;\n margin-right: 4px;\n cursor: pointer;\n > i {\n font-size: 18px;\n }\n }\n &.show {\n transform: rotateZ(180deg);\n > a {\n margin-right: 0;\n margin-left: 4px;\n }\n }\n }\n\n nav {\n > ul > li > span.link-wrapper {\n padding-left: 8px;\n }\n > ul > li > ul > li > span.link-wrapper {\n padding-left: 16px;\n }\n > ul > li > ul > li > ul > li > span.link-wrapper {\n padding-left: 24px;\n }\n > ul > li > ul > li > ul > li > ul> li > span.link-wrapper {\n padding-left: 32px;\n }\n > ul > li > ul > li > ul > li > ul > li > ul> li > span.link-wrapper {\n padding-left: 40px;\n }\n > ul > li > ul > li > ul > li > ul > li > ul > li > ul> li > span.link-wrapper {\n padding-left: 48px;\n }\n }\n}\n",".localtoc {\n font-size: 0.75rem;\n padding-top: 1rem;\n\n .caption {\n padding-left: 12px;\n &-text {\n font-size: 0.9rem;\n font-weight: 700;\n }\n }\n\n > ul > li > a {\n display: none;\n }\n\n ul {\n padding: 0;\n list-style-type: none;\n }\n\n li {\n padding-left: 6px;\n }\n\n a {\n display: block;\n text-decoration: none;\n color: inherit;\n margin-top: 8px;\n padding-left: 8px;\n line-height: 1.1rem;\n \n &.current {\n padding-left: 5px;\n border-left: 3px solid;\n font-weight: bold;\n }\n }\n}","/*\r\n * Toctree and Contents Directive Styles\r\n */\r\n .toctree-wrapper,\r\n .contents.topic {\r\n border-left: 5px solid;\r\n }\r\n\r\n .toctree-wrapper > p.caption,\r\n .contents.topic > p.topic-title {\r\n color: rgb(117, 117, 117);\r\n font-size: 1rem;\r\n padding-left: 14px;\r\n }\r\n\r\n .toctree-wrapper ul,\r\n .contents.topic ul{\r\n padding-left: 14px;\r\n list-style: none;\r\n line-height: 30px;\r\n }\r\n\r\n .toctree-wrapper a,\r\n .contents.topic a {\r\n font-size: 1.2rem;\r\n text-decoration: none;\r\n .pre {\r\n font-size: 1rem;\r\n }\r\n }\r\n\r\n .toctree-wrapper > ul > li > a,\r\n .contents.topic > ul > li > a {\r\n font-size: 1.3rem;\r\n .pre {\r\n font-size: 1.1rem;\r\n }\r\n }\r\n",".page-content {\n ul {\n li {\n margin: .3rem 0;\n p {\n margin: 0;\n }\n }\n }\n .option-list {\n .option {\n font-family: $code_font_family;\n }\n td {\n padding: 0.5rem;\n border: none;\n }\n }\n}\n","/*\r\n * Drawer Styles\r\n */\r\n.mdl-layout {\r\n &__drawer {\r\n background-color: #fff;\r\n\r\n &::-webkit-scrollbar {\r\n width: 6px;\r\n }\r\n\r\n &::-webkit-scrollbar-track {\r\n border-radius: 6px;\r\n }\r\n\r\n &::-webkit-scrollbar-thumb {\r\n background-color: rgba(0, 0, 0, .3);\r\n border-radius: 6px;\r\n box-shadow:0 0 0 1px rgba(255, 255, 255, .3);\r\n }\r\n\r\n > .mdl-layout-title {\r\n font-weight: bold;\r\n text-align: right;\r\n margin: 0;\r\n padding: 0;\r\n line-height: 32px;\r\n border-bottom: 1px solid rgba(0,0,0,.1);\r\n min-height: 64px;\r\n .title {\r\n color: inherit;\r\n display: block;\r\n height: 100%;\r\n width: 100%;\r\n text-decoration: none;\r\n > img.logo {\r\n width: 100%;\r\n margin: 0;\r\n padding: 0;\r\n }\r\n\r\n &-text {\r\n font-weight: bold;\r\n text-align: right;\r\n padding: 0 10px;\r\n margin: 16px 0 8px 0;\r\n line-height: 32px;\r\n font-family: $body_font_family;\r\n color: inherit;\r\n display: block;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","/*\r\n * Header Styles\r\n */\r\n\r\nnav.breadcrumb {\r\n > a.mdl-navigation__link {\r\n padding: 0 8px;\r\n font-size: 18px;\r\n }\r\n @media (max-width: $lg-breakpoint - 1) {\r\n width: calc( 100% - 64px );\r\n a.mdl-navigation__link.is-active {\r\n overflow-x: hidden;\r\n width: 100%;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n }\r\n a.mdl-navigation__link:not(.is-active),\r\n i.material-icons {\r\n display: none;\r\n }\r\n }\r\n}\r\n\r\ndiv.mdl-layout__header {\r\n margin-top: 77px;\r\n}\r\n\r\n.mdl-layout__drawer-button {\r\n top: 13px !important;\r\n}\r\n\r\ndiv.mdl-layout__header-row.header-links {\r\n background: rgba(255,255,255,0.2);\r\n width: 100%;\r\n overflow-x: auto;\r\n overflow-y: hidden;\r\n\r\n a.mdl-navigation__link {\r\n font-size: 1rem;\r\n i {\r\n font-size: 1.2rem;\r\n margin: 0 8px;\r\n position: relative;\r\n bottom: -0.1rem;\r\n }\r\n };\r\n\r\n a.mdl-navigation__link:hover {\r\n background-color: unquote(\"rgb(#{$color-primary})\");\r\n color: #eeeeee;\r\n };\r\n a.mdl-navigation__link[href=\"#\"] {\r\n background-color: unquote(\"rgb(#{$color-primary})\");\r\n opacity: 1;\r\n color: #ffffff;\r\n };\r\n}\r\n\r\n/* mxnet-header */\r\n\r\n\r\n.site-title {\r\n font-weight: 300 !important;\r\n line-height: 57px;\r\n letter-spacing: -1px;\r\n margin-bottom: 0;\r\n float: left;\r\n color: white;\r\n\r\n &,\r\n &:visited {\r\n color: $grey-color-dark;\r\n }\r\n}\r\n\r\n\r\n.site-header {\r\n position: fixed;\r\n top: 0;\r\n width: 100%;\r\n min-height: 55px;\r\n padding-top: 10px;\r\n padding-bottom: 10px;\r\n background-color: $color-mxnet;\r\n z-index: 10;\r\n font-weight: 300;\r\n font-size: 17px;\r\n border-bottom: 1px solid white;\r\n}\r\n\r\n.site-header-logo {\r\n width: 120px;\r\n display: initial;\r\n}\r\n\r\n.site-nav {\r\n float: right;\r\n line-height: 57px;\r\n\r\n .nav-trigger {\r\n display: none;\r\n }\r\n\r\n .menu-icon {\r\n display: none;\r\n }\r\n\r\n .page-link {\r\n color: white;\r\n line-height: 1.5;\r\n font-weight: 300;\r\n // Gaps between nav items, but not on the last one\r\n &:not(:last-child) {\r\n margin-right: 40px;\r\n }\r\n\r\n &:hover {\r\n color: white;\r\n text-shadow: -0.06ex 0 white, 0.06ex 0 white;\r\n }\r\n }\r\n\r\n .page-link.page-current {\r\n color: white;\r\n text-decoration: underline;\r\n }\r\n\r\n @media screen and (max-width: $on-laptop) {\r\n position: absolute;\r\n top: 9px;\r\n right: 15px;\r\n background-color: rgb(23,141,201);\r\n border-radius: 2px;\r\n text-align: right;\r\n\r\n label[for=\"nav-trigger\"] {\r\n display: block;\r\n float: right;\r\n width: 36px;\r\n height: 36px;\r\n z-index: 2;\r\n cursor: pointer;\r\n }\r\n\r\n .menu-icon {\r\n display: block;\r\n float: right;\r\n width: 36px;\r\n height: 26px;\r\n line-height: 0;\r\n padding-top: 20px;\r\n text-align: center;\r\n\r\n > svg {\r\n fill: white;\r\n }\r\n }\r\n\r\n input ~ .trigger {\r\n clear: both;\r\n display: none;\r\n }\r\n\r\n input:checked ~ .trigger {\r\n display: block;\r\n padding-bottom: 5px;\r\n }\r\n\r\n .page-link {\r\n padding: 5px 10px;\r\n display: block;\r\n\r\n &:not(:last-child) {\r\n margin-right: 0;\r\n }\r\n\r\n margin-left: 20px;\r\n }\r\n }\r\n}","/*\r\n * Footer Styles\r\n */\r\nfooter.mdl-mini-footer {\r\n background-color: #212121;\r\n > div.mdl-mini-footer__left-section {\r\n margin-bottom: 20px;\r\n display: flex;\r\n flex-direction: column;\r\n .mdl-logo {\r\n font-size: 1.1rem;\r\n }\r\n ul {\r\n @extend .mdl-mini-footer__link-list;\r\n }\r\n }\r\n > div.mdl-mini-footer__right-section {\r\n font-size: 0.9rem;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: flex-end;\r\n\r\n a {\r\n color: inherit;\r\n font-weight: bold;\r\n text-decoration: none;\r\n }\r\n }\r\n p.caption {\r\n display: none;\r\n }\r\n}\r\n\r\n/*\r\n * Pagenation Block Styles\r\n */\r\n .pagenation {\r\n width: 100%;\r\n margin-top: 80px;\r\n height: 92px;\r\n background-color: #424242;\r\n display: flex;\r\n\r\n .button-common {\r\n text-transform: none;\r\n padding: 0;\r\n height: 92px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n color: #ffffff;\r\n }\r\n #button-prev {\r\n @extend .button-common;\r\n margin-right: auto;\r\n .pagenation-text {\r\n text-align: left;\r\n }\r\n \r\n }\r\n #button-next {\r\n @extend .button-common;\r\n margin-left: auto;\r\n flex-direction: row-reverse;\r\n .pagenation-text {\r\n text-align: right;\r\n }\r\n }\r\n\r\n &-arrow {\r\n &-L {\r\n margin-right: 20px;\r\n }\r\n &-R {\r\n margin-left: 20px;\r\n }\r\n }\r\n\r\n &-text {\r\n line-height: 30px;\r\n font-size: 20px;\r\n }\r\n\r\n &-direction {\r\n opacity: 0.7;\r\n font-size: 18px;\r\n }\r\n @media screen and (max-width: 1024px) {\r\n #button-prev {\r\n width: 20%;\r\n }\r\n \r\n #button-next {\r\n width: 80%;\r\n }\r\n \r\n #button-prev .pagenation-text {\r\n display: none;\r\n }\r\n }\r\n @media screen and (min-width: 1025px) {\r\n #button-prev,\r\n #button-next {\r\n width: 50%;\r\n }\r\n \r\n #button-prev .pagenation-text {\r\n display: block;\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n/**\r\n * Site footer\r\n */\r\n.site-footer {\r\n border-top: 1px solid $grey-color-light;\r\n padding: $spacing-unit 0;\r\n background-color: #424242;\r\n position: relative;\r\n z-index: 10;\r\n .footer-category-title {\r\n color: $color-mxnet;\r\n }\r\n a {\r\n color: $grey-color-light !important;\r\n\r\n &:visited {\r\n color: $grey-color-light !important;\r\n }\r\n }\r\n\r\n}\r\n\r\n.site-footer2 {\r\n background-color: #424242;\r\n padding-top: 40px;\r\n padding-bottom: 10px;\r\n position: relative;\r\n z-index: 10;\r\n}\r\n\r\n.footer-heading {\r\n margin-bottom: $spacing-unit / 2;\r\n}\r\n\r\n.contact-list,\r\n.social-media-list {\r\n list-style: none;\r\n margin-left: 0;\r\n}\r\n\r\n\r\n.footer-bottom-warning {\r\n font-size: 80%;\r\n color: white;\r\n float: left;\r\n}\r\n\r\n.footer-logo {\r\n width: 200px;\r\n margin-bottom: 30px;\r\n margin-top: 30px;\r\n}\r\n\r\n.footer-col {\r\n float: left;\r\n margin-bottom: $spacing-unit / 2;\r\n padding-left: $spacing-unit / 2;\r\n}\r\n\r\n.footer-text {\r\n color: $grey-color-light;\r\n}\r\n\r\n"," /*\r\n * Search Styles\r\n */\r\n#waterfall-exp::-webkit-input-placeholder {\r\n color: #ccc;\r\n}\r\n#waterfall-exp:-ms-input-placeholder {\r\n color: #ccc;\r\n}\r\n#waterfall-exp::-moz-placeholder {\r\n color: #ccc;\r\n}\r\n\r\nul.search span.highlighted {\r\n font-weight: bold;\r\n}\r\n\r\nul.search > li {\r\n margin-bottom: 24px;\r\n}\r\n\r\n#search-results {\r\n ul {\r\n list-style: none;\r\n padding: 0;\r\n li {\r\n > a {\r\n text-decoration: none;\r\n font-size: 1.2rem;\r\n }\r\n }\r\n }\r\n}\r\n","a.download {\n &:before {\n @extend .material-icons;\n content: \"file_download\";\n position: relative;\n top: 5px;\n margin-right: 5px;\n }\n}\n\nbutton.download {\n position: sticky;\n margin-left: 1em;\n}\n",".mdl-card {\n margin: 1em 1.5em 1em 0;\n display: inline-block;\n width: 250px;\n min-height: 140px;\n padding: 18px;\n}\n.mdl-card:hover {\n box-shadow: 0 10px 20px rgba(0,0,0,0.25), 0 6px 6px rgba(0,0,0,0.22);\n color: #000;\n cursor: pointer;\n}\n.mdl-card__title {\n padding: 0 0 1em 0;\n font-size: 18px;\n color: #444;\n}\n\n.mdl-card__supporting-text {\n line-height: 1.5rem;\n padding: 0px;\n width: 100%;\n}\n\n.head-card.mdl-card {\n width: auto;\n display: block;\n max-width: 800px;\n padding: 24px;\n}\n\n.head-card > .mdl-card__title {\n padding-bottom: 0px;\n height: 60px;\n font-weight: 700;\n text-transform: uppercase;\n}\n.head-card > .mdl-card__menu {\n color: #fff;\n}\n.head-card > .mdl-card__actions {\n padding: 0;\n}\n.cards {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n}\n"]} \ No newline at end of file diff --git a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.js b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.js index 1e1b2c5acf56..7ca6cd602aa3 100644 --- a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.js +++ b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.js @@ -1,5 +1,7 @@ parcelRequire=function(e,r,t,n){var i,o="function"==typeof parcelRequire&&parcelRequire,u="function"==typeof require&&require;function f(t,n){if(!r[t]){if(!e[t]){var i="function"==typeof parcelRequire&&parcelRequire;if(!n&&i)return i(t,!0);if(o)return o(t,!0);if(u&&"string"==typeof t)return u(t);var c=new Error("Cannot find module '"+t+"'");throw c.code="MODULE_NOT_FOUND",c}p.resolve=function(r){return e[t][1][r]||r},p.cache={};var l=r[t]=new f.Module(t);e[t][0].call(l.exports,p,l,l.exports,this)}return r[t].exports;function p(e){return f(p.resolve(e))}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.exports={}},f.modules=e,f.cache=r,f.parent=o,f.register=function(r,t){e[r]=[function(e,r){r.exports=t},{}]};for(var c=0;c0&&e(s.children))},upgradeAllRegistered:function(){for(var e=0;e0&&this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)&&(e.keyCode===this.Keycodes_.UP_ARROW?(e.preventDefault(),t[t.length-1].focus()):e.keyCode===this.Keycodes_.DOWN_ARROW&&(e.preventDefault(),t[0].focus()))}},h.prototype.handleItemKeyboardEvent_=function(e){if(this.element_&&this.container_){var t=this.element_.querySelectorAll("."+this.CssClasses_.ITEM+":not([disabled])");if(t&&t.length>0&&this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)){var s=Array.prototype.slice.call(t).indexOf(e.target);if(e.keyCode===this.Keycodes_.UP_ARROW)e.preventDefault(),s>0?t[s-1].focus():t[t.length-1].focus();else if(e.keyCode===this.Keycodes_.DOWN_ARROW)e.preventDefault(),t.length>s+1?t[s+1].focus():t[0].focus();else if(e.keyCode===this.Keycodes_.SPACE||e.keyCode===this.Keycodes_.ENTER){e.preventDefault();var i=new MouseEvent("mousedown");e.target.dispatchEvent(i),i=new MouseEvent("mouseup"),e.target.dispatchEvent(i),e.target.click()}else e.keyCode===this.Keycodes_.ESCAPE&&(e.preventDefault(),this.hide())}}},h.prototype.handleItemClick_=function(e){e.target.hasAttribute("disabled")?e.stopPropagation():(this.closing_=!0,window.setTimeout(function(e){this.hide(),this.closing_=!1}.bind(this),this.Constant_.CLOSE_TIMEOUT))},h.prototype.applyClip_=function(e,t){this.element_.classList.contains(this.CssClasses_.UNALIGNED)?this.element_.style.clip="":this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)?this.element_.style.clip="rect(0 "+t+"px 0 "+t+"px)":this.element_.classList.contains(this.CssClasses_.TOP_LEFT)?this.element_.style.clip="rect("+e+"px 0 "+e+"px 0)":this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)?this.element_.style.clip="rect("+e+"px "+t+"px "+e+"px "+t+"px)":this.element_.style.clip=""},h.prototype.removeAnimationEndListener_=function(e){e.target.classList.remove(h.prototype.CssClasses_.IS_ANIMATING)},h.prototype.addAnimationEndListener_=function(){this.element_.addEventListener("transitionend",this.removeAnimationEndListener_),this.element_.addEventListener("webkitTransitionEnd",this.removeAnimationEndListener_)},h.prototype.show=function(e){if(this.element_&&this.container_&&this.outline_){var t=this.element_.getBoundingClientRect().height,s=this.element_.getBoundingClientRect().width;this.container_.style.width=s+"px",this.container_.style.height=t+"px",this.outline_.style.width=s+"px",this.outline_.style.height=t+"px";for(var i=this.Constant_.TRANSITION_DURATION_SECONDS*this.Constant_.TRANSITION_DURATION_FRACTION,n=this.element_.querySelectorAll("."+this.CssClasses_.ITEM),a=0;a0&&this.showSnackbar(this.queuedNotifications_.shift())},u.prototype.cleanup_=function(){this.element_.classList.remove(this.cssClasses_.ACTIVE),setTimeout(function(){this.element_.setAttribute("aria-hidden","true"),this.textElement_.textContent="",Boolean(this.actionElement_.getAttribute("aria-hidden"))||(this.setActionHidden_(!0),this.actionElement_.textContent="",this.actionElement_.removeEventListener("click",this.actionHandler_)),this.actionHandler_=void 0,this.message_=void 0,this.actionText_=void 0,this.active=!1,this.checkQueue_()}.bind(this),this.Constant_.ANIMATION_LENGTH)},u.prototype.setActionHidden_=function(e){e?this.actionElement_.setAttribute("aria-hidden","true"):this.actionElement_.removeAttribute("aria-hidden")},i.register({constructor:u,classAsString:"MaterialSnackbar",cssClass:"mdl-js-snackbar",widget:!0});var E=function(e){this.element_=e,this.init()};window.MaterialSpinner=E,E.prototype.Constant_={MDL_SPINNER_LAYER_COUNT:4},E.prototype.CssClasses_={MDL_SPINNER_LAYER:"mdl-spinner__layer",MDL_SPINNER_CIRCLE_CLIPPER:"mdl-spinner__circle-clipper",MDL_SPINNER_CIRCLE:"mdl-spinner__circle",MDL_SPINNER_GAP_PATCH:"mdl-spinner__gap-patch",MDL_SPINNER_LEFT:"mdl-spinner__left",MDL_SPINNER_RIGHT:"mdl-spinner__right"},E.prototype.createLayer=function(e){var t=document.createElement("div");t.classList.add(this.CssClasses_.MDL_SPINNER_LAYER),t.classList.add(this.CssClasses_.MDL_SPINNER_LAYER+"-"+e);var s=document.createElement("div");s.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER),s.classList.add(this.CssClasses_.MDL_SPINNER_LEFT);var i=document.createElement("div");i.classList.add(this.CssClasses_.MDL_SPINNER_GAP_PATCH);var n=document.createElement("div");n.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER),n.classList.add(this.CssClasses_.MDL_SPINNER_RIGHT);for(var a=[s,i,n],l=0;l=this.maxRows&&e.preventDefault()},I.prototype.onFocus_=function(e){this.element_.classList.add(this.CssClasses_.IS_FOCUSED)},I.prototype.onBlur_=function(e){this.element_.classList.remove(this.CssClasses_.IS_FOCUSED)},I.prototype.onReset_=function(e){this.updateClasses_()},I.prototype.updateClasses_=function(){this.checkDisabled(),this.checkValidity(),this.checkDirty(),this.checkFocus()},I.prototype.checkDisabled=function(){this.input_.disabled?this.element_.classList.add(this.CssClasses_.IS_DISABLED):this.element_.classList.remove(this.CssClasses_.IS_DISABLED)},I.prototype.checkDisabled=I.prototype.checkDisabled,I.prototype.checkFocus=function(){Boolean(this.element_.querySelector(":focus"))?this.element_.classList.add(this.CssClasses_.IS_FOCUSED):this.element_.classList.remove(this.CssClasses_.IS_FOCUSED)},I.prototype.checkFocus=I.prototype.checkFocus,I.prototype.checkValidity=function(){this.input_.validity&&(this.input_.validity.valid?this.element_.classList.remove(this.CssClasses_.IS_INVALID):this.element_.classList.add(this.CssClasses_.IS_INVALID))},I.prototype.checkValidity=I.prototype.checkValidity,I.prototype.checkDirty=function(){this.input_.value&&this.input_.value.length>0?this.element_.classList.add(this.CssClasses_.IS_DIRTY):this.element_.classList.remove(this.CssClasses_.IS_DIRTY)},I.prototype.checkDirty=I.prototype.checkDirty,I.prototype.disable=function(){this.input_.disabled=!0,this.updateClasses_()},I.prototype.disable=I.prototype.disable,I.prototype.enable=function(){this.input_.disabled=!1,this.updateClasses_()},I.prototype.enable=I.prototype.enable,I.prototype.change=function(e){this.input_.value=e||"",this.updateClasses_()},I.prototype.change=I.prototype.change,I.prototype.init=function(){if(this.element_&&(this.label_=this.element_.querySelector("."+this.CssClasses_.LABEL),this.input_=this.element_.querySelector("."+this.CssClasses_.INPUT),this.input_)){this.input_.hasAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE)&&(this.maxRows=parseInt(this.input_.getAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE),10),isNaN(this.maxRows)&&(this.maxRows=this.Constant_.NO_MAX_ROWS)),this.input_.hasAttribute("placeholder")&&this.element_.classList.add(this.CssClasses_.HAS_PLACEHOLDER),this.boundUpdateClassesHandler=this.updateClasses_.bind(this),this.boundFocusHandler=this.onFocus_.bind(this),this.boundBlurHandler=this.onBlur_.bind(this),this.boundResetHandler=this.onReset_.bind(this),this.input_.addEventListener("input",this.boundUpdateClassesHandler),this.input_.addEventListener("focus",this.boundFocusHandler),this.input_.addEventListener("blur",this.boundBlurHandler),this.input_.addEventListener("reset",this.boundResetHandler),this.maxRows!==this.Constant_.NO_MAX_ROWS&&(this.boundKeyDownHandler=this.onKeyDown_.bind(this),this.input_.addEventListener("keydown",this.boundKeyDownHandler));var e=this.element_.classList.contains(this.CssClasses_.IS_INVALID);this.updateClasses_(),this.element_.classList.add(this.CssClasses_.IS_UPGRADED),e&&this.element_.classList.add(this.CssClasses_.IS_INVALID),this.input_.hasAttribute("autofocus")&&(this.element_.focus(),this.checkFocus())}},i.register({constructor:I,classAsString:"MaterialTextfield",cssClass:"mdl-js-textfield",widget:!0});var f=function(e){this.element_=e,this.init()};window.MaterialTooltip=f,f.prototype.Constant_={},f.prototype.CssClasses_={IS_ACTIVE:"is-active",BOTTOM:"mdl-tooltip--bottom",LEFT:"mdl-tooltip--left",RIGHT:"mdl-tooltip--right",TOP:"mdl-tooltip--top"},f.prototype.handleMouseEnter_=function(e){var t=e.target.getBoundingClientRect(),s=t.left+t.width/2,i=t.top+t.height/2,n=this.element_.offsetWidth/2*-1,a=this.element_.offsetHeight/2*-1;this.element_.classList.contains(this.CssClasses_.LEFT)||this.element_.classList.contains(this.CssClasses_.RIGHT)?(s=t.width/2,i+a<0?(this.element_.style.top="0",this.element_.style.marginTop="0"):(this.element_.style.top=i+"px",this.element_.style.marginTop=a+"px")):s+n<0?(this.element_.style.left="0",this.element_.style.marginLeft="0"):(this.element_.style.left=s+"px",this.element_.style.marginLeft=n+"px"),this.element_.classList.contains(this.CssClasses_.TOP)?this.element_.style.top=t.top-this.element_.offsetHeight-10+"px":this.element_.classList.contains(this.CssClasses_.RIGHT)?this.element_.style.left=t.left+t.width+10+"px":this.element_.classList.contains(this.CssClasses_.LEFT)?this.element_.style.left=t.left-this.element_.offsetWidth-10+"px":this.element_.style.top=t.top+t.height+10+"px",this.element_.classList.add(this.CssClasses_.IS_ACTIVE)},f.prototype.hideTooltip_=function(){this.element_.classList.remove(this.CssClasses_.IS_ACTIVE)},f.prototype.init=function(){if(this.element_){var e=this.element_.getAttribute("for")||this.element_.getAttribute("data-mdl-for");e&&(this.forElement_=document.getElementById(e)),this.forElement_&&(this.forElement_.hasAttribute("tabindex")||this.forElement_.setAttribute("tabindex","0"),this.boundMouseEnterHandler=this.handleMouseEnter_.bind(this),this.boundMouseLeaveAndScrollHandler=this.hideTooltip_.bind(this),this.forElement_.addEventListener("mouseenter",this.boundMouseEnterHandler,!1),this.forElement_.addEventListener("touchend",this.boundMouseEnterHandler,!1),this.forElement_.addEventListener("mouseleave",this.boundMouseLeaveAndScrollHandler,!1),window.addEventListener("scroll",this.boundMouseLeaveAndScrollHandler,!0),window.addEventListener("touchstart",this.boundMouseLeaveAndScrollHandler))}},i.register({constructor:f,classAsString:"MaterialTooltip",cssClass:"mdl-tooltip"});var b=function(e){this.element_=e,this.init()};window.MaterialLayout=b,b.prototype.Constant_={MAX_WIDTH:"(max-width: 1024px)",TAB_SCROLL_PIXELS:100,RESIZE_TIMEOUT:100,MENU_ICON:"",CHEVRON_LEFT:"chevron_left",CHEVRON_RIGHT:"chevron_right"},b.prototype.Keycodes_={ENTER:13,ESCAPE:27,SPACE:32},b.prototype.Mode_={STANDARD:0,SEAMED:1,WATERFALL:2,SCROLL:3},b.prototype.CssClasses_={CONTAINER:"mdl-layout__container",HEADER:"mdl-layout__header",DRAWER:"mdl-layout__drawer",CONTENT:"mdl-layout__content",DRAWER_BTN:"mdl-layout__drawer-button",ICON:"material-icons",JS_RIPPLE_EFFECT:"mdl-js-ripple-effect",RIPPLE_CONTAINER:"mdl-layout__tab-ripple-container",RIPPLE:"mdl-ripple",RIPPLE_IGNORE_EVENTS:"mdl-js-ripple-effect--ignore-events",HEADER_SEAMED:"mdl-layout__header--seamed",HEADER_WATERFALL:"mdl-layout__header--waterfall",HEADER_SCROLL:"mdl-layout__header--scroll",FIXED_HEADER:"mdl-layout--fixed-header",OBFUSCATOR:"mdl-layout__obfuscator",TAB_BAR:"mdl-layout__tab-bar",TAB_CONTAINER:"mdl-layout__tab-bar-container",TAB:"mdl-layout__tab",TAB_BAR_BUTTON:"mdl-layout__tab-bar-button",TAB_BAR_LEFT_BUTTON:"mdl-layout__tab-bar-left-button",TAB_BAR_RIGHT_BUTTON:"mdl-layout__tab-bar-right-button",TAB_MANUAL_SWITCH:"mdl-layout__tab-manual-switch",PANEL:"mdl-layout__tab-panel",HAS_DRAWER:"has-drawer",HAS_TABS:"has-tabs",HAS_SCROLLING_HEADER:"has-scrolling-header",CASTING_SHADOW:"is-casting-shadow",IS_COMPACT:"is-compact",IS_SMALL_SCREEN:"is-small-screen",IS_DRAWER_OPEN:"is-visible",IS_ACTIVE:"is-active",IS_UPGRADED:"is-upgraded",IS_ANIMATING:"is-animating",ON_LARGE_SCREEN:"mdl-layout--large-screen-only",ON_SMALL_SCREEN:"mdl-layout--small-screen-only"},b.prototype.contentScrollHandler_=function(){if(!this.header_.classList.contains(this.CssClasses_.IS_ANIMATING)){var e=!this.element_.classList.contains(this.CssClasses_.IS_SMALL_SCREEN)||this.element_.classList.contains(this.CssClasses_.FIXED_HEADER);this.content_.scrollTop>0&&!this.header_.classList.contains(this.CssClasses_.IS_COMPACT)?(this.header_.classList.add(this.CssClasses_.CASTING_SHADOW),this.header_.classList.add(this.CssClasses_.IS_COMPACT),e&&this.header_.classList.add(this.CssClasses_.IS_ANIMATING)):this.content_.scrollTop<=0&&this.header_.classList.contains(this.CssClasses_.IS_COMPACT)&&(this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW),this.header_.classList.remove(this.CssClasses_.IS_COMPACT),e&&this.header_.classList.add(this.CssClasses_.IS_ANIMATING))}},b.prototype.keyboardEventHandler_=function(e){e.keyCode===this.Keycodes_.ESCAPE&&this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)&&this.toggleDrawer()},b.prototype.screenSizeHandler_=function(){this.screenSizeMediaQuery_.matches?this.element_.classList.add(this.CssClasses_.IS_SMALL_SCREEN):(this.element_.classList.remove(this.CssClasses_.IS_SMALL_SCREEN),this.drawer_&&(this.drawer_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN),this.obfuscator_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN)))},b.prototype.drawerToggleHandler_=function(e){if(e&&"keydown"===e.type){if(e.keyCode!==this.Keycodes_.SPACE&&e.keyCode!==this.Keycodes_.ENTER)return;e.preventDefault()}this.toggleDrawer()},b.prototype.headerTransitionEndHandler_=function(){this.header_.classList.remove(this.CssClasses_.IS_ANIMATING)},b.prototype.headerClickHandler_=function(){this.header_.classList.contains(this.CssClasses_.IS_COMPACT)&&(this.header_.classList.remove(this.CssClasses_.IS_COMPACT),this.header_.classList.add(this.CssClasses_.IS_ANIMATING))},b.prototype.resetTabState_=function(e){for(var t=0;t0?c.classList.add(this.CssClasses_.IS_ACTIVE):c.classList.remove(this.CssClasses_.IS_ACTIVE),this.tabBar_.scrollLeft0)return;this.setFrameCount(1);var s,i,n=e.currentTarget.getBoundingClientRect();if(0===e.clientX&&0===e.clientY)s=Math.round(n.width/2),i=Math.round(n.height/2);else{var a=void 0!==e.clientX?e.clientX:e.touches[0].clientX,l=void 0!==e.clientY?e.clientY:e.touches[0].clientY;s=Math.round(a-n.left),i=Math.round(l-n.top)}this.setRippleXY(s,i),this.setRippleStyles(!0),window.requestAnimationFrame(this.animFrameHandler.bind(this))}},y.prototype.upHandler_=function(e){e&&2!==e.detail&&window.setTimeout(function(){this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE)}.bind(this),0)},y.prototype.init=function(){if(this.element_){var e=this.element_.classList.contains(this.CssClasses_.RIPPLE_CENTER);this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT_IGNORE_EVENTS)||(this.rippleElement_=this.element_.querySelector("."+this.CssClasses_.RIPPLE),this.frameCount_=0,this.rippleSize_=0,this.x_=0,this.y_=0,this.ignoringMouseDown_=!1,this.boundDownHandler=this.downHandler_.bind(this),this.element_.addEventListener("mousedown",this.boundDownHandler),this.element_.addEventListener("touchstart",this.boundDownHandler),this.boundUpHandler=this.upHandler_.bind(this),this.element_.addEventListener("mouseup",this.boundUpHandler),this.element_.addEventListener("mouseleave",this.boundUpHandler),this.element_.addEventListener("touchend",this.boundUpHandler),this.element_.addEventListener("blur",this.boundUpHandler),this.getFrameCount=function(){return this.frameCount_},this.setFrameCount=function(e){this.frameCount_=e},this.getRippleElement=function(){return this.rippleElement_},this.setRippleXY=function(e,t){this.x_=e,this.y_=t},this.setRippleStyles=function(t){if(null!==this.rippleElement_){var s,i,n="translate("+this.x_+"px, "+this.y_+"px)";t?(i=this.Constant_.INITIAL_SCALE,this.Constant_.INITIAL_SIZE):(i=this.Constant_.FINAL_SCALE,this.rippleSize_+"px",e&&(n="translate("+this.boundWidth/2+"px, "+this.boundHeight/2+"px)")),s="translate(-50%, -50%) "+n+i,this.rippleElement_.style.webkitTransform=s,this.rippleElement_.style.msTransform=s,this.rippleElement_.style.transform=s,t?this.rippleElement_.classList.remove(this.CssClasses_.IS_ANIMATING):this.rippleElement_.classList.add(this.CssClasses_.IS_ANIMATING)}},this.animFrameHandler=function(){this.frameCount_-- >0?window.requestAnimationFrame(this.animFrameHandler.bind(this)):this.setRippleStyles(!1)})}},i.register({constructor:y,classAsString:"MaterialRipple",cssClass:"mdl-js-ripple-effect",widget:!1})}(); },{}],"QiIT":[function(require,module,exports) { @@ -698,6 +700,6 @@ var e=arguments[3];if(require("core-js/shim"),require("regenerator-runtime/runti },{"core-js/shim":"y1LN","regenerator-runtime/runtime":"VuXv","core-js/fn/regexp/escape":"Rlym"}],"sKvN":[function(require,module,exports) { "use strict";function t(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function e(t,e){for(var n=0;ne+s+30}},{key:"toggleNavClass",value:function(t){if(window.onclickToc)window.onclickToc=!1;else{for(var e=0,n=$(),s=0,i=t.length;s'),l=e.children("a");e.append(n.append(l));var o=e.hasClass("current")&&!l.hasClass("current"),d=e.children("ul");if(d.length){var i="globalnav-".concat(a);d.attr("id",i),d.addClass("collapse");var s=$('');o?(d.addClass("show"),s.addClass("show")):d.hide(),e.append(n.append(s.append($('keyboard_arrow_down'))))).append(d)}}),$(".mdl-layout__drawer nav .nav-toggle a").click(function(){var a=$(this),t=a.attr("data-toggle");$("ul".concat(t)).toggleClass("show").animate({height:"toggle",opacity:"toggle"}),a.parent().toggleClass("show")}),e=$(".breadcrumb"),$("#waterfall-exp").focus(function(){$(window).width()<=1024&&e.hide()}).blur(function(){$(window).width()<=1024&&e.show()});new a.default({contentSelector:".page-content .section",navSelector:".localtoc a",scrollSelector:"main",className:"current",offsetTop:64});$(".mdl-layout__content").focus(),$(".mx-card").each(function(){$(this).addClass("mdl-card mdl-shadow--2dp")}),$(".mx-card .mx-card-title").each(function(){$(this).addClass("mdl-card__title")}),$(".mx-card .mx-card-text").each(function(){$(this).addClass("mdl-card__supporting-text")}),$(".mx-card-link").each(function(){$(this).hide()}),$(".mdl-card").each(function(){$(this).click(function(){var a=$(this).find(".mx-card-link").text();return a&&(window.location=a),!0})}),$("a.download").each(function(){var a=document.createElement("button");a.className="download mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect";var t=document.createElement("i");t.className="material-icons";var e=document.createTextNode("file_download");t.appendChild(e),a.appendChild(t);var n=$(this).attr("href");a.onclick=function(){window.location=n};var l=n.split("/").slice(-1).pop();a.id=l?l.replace(".","-"):"download-button-"+$(this).index();var o=document.createElement("div");o.className="mdl-tooltip",o.setAttribute("data-mdl-for",a.id);var d=$(this).find("span.pre").map(function(){return $(this).text()}).get().join(" ");o.innerHTML=d,componentHandler.upgradeElement(a),$(this).remove();var i=$(".section h1").first();i.append(a),i.append(o)}),$(".mdl-layout").css("visibility","visible")}); -},{"../scss/sphinx_materialdesign_theme.scss":"BS4D","material-design-lite":"vKy7","babel-polyfill":"zUFY","./scrollspy":"sKvN"}]},{},["brfV"], null) +"use strict";require("../scss/sphinx_materialdesign_theme.scss"),require("./feedback"),require("material-design-lite"),require("babel-polyfill");var a=t(require("./scrollspy"));function t(a){return a&&a.__esModule?a:{default:a}}$(function(){var t,e;t=$(".mdl-layout__drawer nav").find("li"),$.each(t,function(a,t){var e=$(t),n=$(''),l=e.children("a");e.append(n.append(l));var o=e.hasClass("current")&&!l.hasClass("current"),d=e.children("ul");if(d.length){var i="globalnav-".concat(a);d.attr("id",i),d.addClass("collapse");var s=$('');o?(d.addClass("show"),s.addClass("show")):d.hide(),e.append(n.append(s.append($('keyboard_arrow_down'))))).append(d)}}),$(".mdl-layout__drawer nav .nav-toggle a").click(function(){var a=$(this),t=a.attr("data-toggle");$("ul".concat(t)).toggleClass("show").animate({height:"toggle",opacity:"toggle"}),a.parent().toggleClass("show")}),e=$(".breadcrumb"),$("#waterfall-exp").focus(function(){$(window).width()<=1024&&e.hide()}).blur(function(){$(window).width()<=1024&&e.show()});new a.default({contentSelector:".page-content .section",navSelector:".localtoc a",scrollSelector:"main",className:"current",offsetTop:64});$(".mdl-layout__content").focus(),$(".mx-card").each(function(){$(this).addClass("mdl-card mdl-shadow--2dp")}),$(".mx-card .mx-card-title").each(function(){$(this).addClass("mdl-card__title")}),$(".mx-card .mx-card-text").each(function(){$(this).addClass("mdl-card__supporting-text")}),$(".mx-card-link").each(function(){$(this).hide()}),$(".mdl-card").each(function(){$(this).click(function(){var a=$(this).find(".mx-card-link").text();return a&&(window.location=a),!0})}),$("a.download").each(function(){var a=document.createElement("button");a.className="download mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect";var t=document.createElement("i");t.className="material-icons";var e=document.createTextNode("file_download");t.appendChild(e),a.appendChild(t);var n=$(this).attr("href");a.onclick=function(){window.location=n};var l=n.split("/").slice(-1).pop();a.id=l?l.replace(".","-"):"download-button-"+$(this).index();var o=document.createElement("div");o.className="mdl-tooltip",o.setAttribute("data-mdl-for",a.id);var d=$(this).find("span.pre").map(function(){return $(this).text()}).get().join(" ");o.innerHTML=d,componentHandler.upgradeElement(a),$(this).remove();var i=$(".section h1").first();i.append(a),i.append(o)}),$(".mdl-layout").css("visibility","visible")}); +},{"../scss/sphinx_materialdesign_theme.scss":"BS4D","./feedback":"dMzA","material-design-lite":"vKy7","babel-polyfill":"zUFY","./scrollspy":"sKvN"}]},{},["brfV"], null) //# sourceMappingURL=/sphinx_materialdesign_theme.js.map \ No newline at end of file diff --git a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.js.map b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.js.map index 2fbcdbb2aa74..87e68e4d0f27 100644 --- a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.js.map +++ b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.js.map @@ -1 +1 @@ -{"version":3,"sources":["ripple.js","tabs.js","layout.js","mdlComponentHandler.js","rAF.js","button.js","checkbox.js","icon-toggle.js","menu.js","progress.js","radio.js","slider.js","snackbar.js","spinner.js","switch.js","textfield.js","tooltip.js","data-table.js","../../node_modules/core-js/modules/_global.js","../../node_modules/core-js/modules/_has.js","../../node_modules/core-js/modules/_fails.js","../../node_modules/core-js/modules/_descriptors.js","../../node_modules/core-js/modules/_core.js","../../node_modules/core-js/modules/_is-object.js","../../node_modules/core-js/modules/_an-object.js","../../node_modules/core-js/modules/_dom-create.js","../../node_modules/core-js/modules/_ie8-dom-define.js","../../node_modules/core-js/modules/_to-primitive.js","../../node_modules/core-js/modules/_object-dp.js","../../node_modules/core-js/modules/_property-desc.js","../../node_modules/core-js/modules/_hide.js","../../node_modules/core-js/modules/_uid.js","../../node_modules/core-js/modules/_library.js","../../node_modules/core-js/modules/_shared.js","../../node_modules/core-js/modules/_function-to-string.js","../../node_modules/core-js/modules/_redefine.js","../../node_modules/core-js/modules/_a-function.js","../../node_modules/core-js/modules/_ctx.js","../../node_modules/core-js/modules/_export.js","../../node_modules/core-js/modules/_meta.js","../../node_modules/core-js/modules/_wks.js","../../node_modules/core-js/modules/_set-to-string-tag.js","../../node_modules/core-js/modules/_wks-ext.js","../../node_modules/core-js/modules/_wks-define.js","../../node_modules/core-js/modules/_cof.js","../../node_modules/core-js/modules/_iobject.js","../../node_modules/core-js/modules/_defined.js","../../node_modules/core-js/modules/_to-iobject.js","../../node_modules/core-js/modules/_to-integer.js","../../node_modules/core-js/modules/_to-length.js","../../node_modules/core-js/modules/_to-absolute-index.js","../../node_modules/core-js/modules/_array-includes.js","../../node_modules/core-js/modules/_shared-key.js","../../node_modules/core-js/modules/_object-keys-internal.js","../../node_modules/core-js/modules/_enum-bug-keys.js","../../node_modules/core-js/modules/_object-keys.js","../../node_modules/core-js/modules/_object-gops.js","../../node_modules/core-js/modules/_object-pie.js","../../node_modules/core-js/modules/_enum-keys.js","../../node_modules/core-js/modules/_is-array.js","../../node_modules/core-js/modules/_to-object.js","../../node_modules/core-js/modules/_object-dps.js","../../node_modules/core-js/modules/_html.js","../../node_modules/core-js/modules/_object-create.js","../../node_modules/core-js/modules/_object-gopn.js","../../node_modules/core-js/modules/_object-gopn-ext.js","../../node_modules/core-js/modules/_object-gopd.js","../../node_modules/core-js/modules/es6.symbol.js","../../node_modules/core-js/modules/es6.object.create.js","../../node_modules/core-js/modules/es6.object.define-property.js","../../node_modules/core-js/modules/es6.object.define-properties.js","../../node_modules/core-js/modules/_object-sap.js","../../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","../../node_modules/core-js/modules/_object-gpo.js","../../node_modules/core-js/modules/es6.object.get-prototype-of.js","../../node_modules/core-js/modules/es6.object.keys.js","../../node_modules/core-js/modules/es6.object.get-own-property-names.js","../../node_modules/core-js/modules/es6.object.freeze.js","../../node_modules/core-js/modules/es6.object.seal.js","../../node_modules/core-js/modules/es6.object.prevent-extensions.js","../../node_modules/core-js/modules/es6.object.is-frozen.js","../../node_modules/core-js/modules/es6.object.is-sealed.js","../../node_modules/core-js/modules/es6.object.is-extensible.js","../../node_modules/core-js/modules/_object-assign.js","../../node_modules/core-js/modules/es6.object.assign.js","../../node_modules/core-js/modules/_same-value.js","../../node_modules/core-js/modules/es6.object.is.js","../../node_modules/core-js/modules/_set-proto.js","../../node_modules/core-js/modules/es6.object.set-prototype-of.js","../../node_modules/core-js/modules/_classof.js","../../node_modules/core-js/modules/es6.object.to-string.js","../../node_modules/core-js/modules/_invoke.js","../../node_modules/core-js/modules/_bind.js","../../node_modules/core-js/modules/es6.function.bind.js","../../node_modules/core-js/modules/es6.function.name.js","../../node_modules/core-js/modules/es6.function.has-instance.js","../../node_modules/core-js/modules/_string-ws.js","../../node_modules/core-js/modules/_string-trim.js","../../node_modules/core-js/modules/_parse-int.js","../../node_modules/core-js/modules/es6.parse-int.js","../../node_modules/core-js/modules/_parse-float.js","../../node_modules/core-js/modules/es6.parse-float.js","../../node_modules/core-js/modules/_inherit-if-required.js","../../node_modules/core-js/modules/es6.number.constructor.js","../../node_modules/core-js/modules/_a-number-value.js","../../node_modules/core-js/modules/_string-repeat.js","../../node_modules/core-js/modules/es6.number.to-fixed.js","../../node_modules/core-js/modules/es6.number.to-precision.js","../../node_modules/core-js/modules/es6.number.epsilon.js","../../node_modules/core-js/modules/es6.number.is-finite.js","../../node_modules/core-js/modules/_is-integer.js","../../node_modules/core-js/modules/es6.number.is-integer.js","../../node_modules/core-js/modules/es6.number.is-nan.js","../../node_modules/core-js/modules/es6.number.is-safe-integer.js","../../node_modules/core-js/modules/es6.number.max-safe-integer.js","../../node_modules/core-js/modules/es6.number.min-safe-integer.js","../../node_modules/core-js/modules/es6.number.parse-float.js","../../node_modules/core-js/modules/es6.number.parse-int.js","../../node_modules/core-js/modules/_math-log1p.js","../../node_modules/core-js/modules/es6.math.acosh.js","../../node_modules/core-js/modules/es6.math.asinh.js","../../node_modules/core-js/modules/es6.math.atanh.js","../../node_modules/core-js/modules/_math-sign.js","../../node_modules/core-js/modules/es6.math.cbrt.js","../../node_modules/core-js/modules/es6.math.clz32.js","../../node_modules/core-js/modules/es6.math.cosh.js","../../node_modules/core-js/modules/_math-expm1.js","../../node_modules/core-js/modules/es6.math.expm1.js","../../node_modules/core-js/modules/_math-fround.js","../../node_modules/core-js/modules/es6.math.fround.js","../../node_modules/core-js/modules/es6.math.hypot.js","../../node_modules/core-js/modules/es6.math.imul.js","../../node_modules/core-js/modules/es6.math.log10.js","../../node_modules/core-js/modules/es6.math.log1p.js","../../node_modules/core-js/modules/es6.math.log2.js","../../node_modules/core-js/modules/es6.math.sign.js","../../node_modules/core-js/modules/es6.math.sinh.js","../../node_modules/core-js/modules/es6.math.tanh.js","../../node_modules/core-js/modules/es6.math.trunc.js","../../node_modules/core-js/modules/es6.string.from-code-point.js","../../node_modules/core-js/modules/es6.string.raw.js","../../node_modules/core-js/modules/es6.string.trim.js","../../node_modules/core-js/modules/_string-at.js","../../node_modules/core-js/modules/_iterators.js","../../node_modules/core-js/modules/_iter-create.js","../../node_modules/core-js/modules/_iter-define.js","../../node_modules/core-js/modules/es6.string.iterator.js","../../node_modules/core-js/modules/es6.string.code-point-at.js","../../node_modules/core-js/modules/_is-regexp.js","../../node_modules/core-js/modules/_string-context.js","../../node_modules/core-js/modules/_fails-is-regexp.js","../../node_modules/core-js/modules/es6.string.ends-with.js","../../node_modules/core-js/modules/es6.string.includes.js","../../node_modules/core-js/modules/es6.string.repeat.js","../../node_modules/core-js/modules/es6.string.starts-with.js","../../node_modules/core-js/modules/_string-html.js","../../node_modules/core-js/modules/es6.string.anchor.js","../../node_modules/core-js/modules/es6.string.big.js","../../node_modules/core-js/modules/es6.string.blink.js","../../node_modules/core-js/modules/es6.string.bold.js","../../node_modules/core-js/modules/es6.string.fixed.js","../../node_modules/core-js/modules/es6.string.fontcolor.js","../../node_modules/core-js/modules/es6.string.fontsize.js","../../node_modules/core-js/modules/es6.string.italics.js","../../node_modules/core-js/modules/es6.string.link.js","../../node_modules/core-js/modules/es6.string.small.js","../../node_modules/core-js/modules/es6.string.strike.js","../../node_modules/core-js/modules/es6.string.sub.js","../../node_modules/core-js/modules/es6.string.sup.js","../../node_modules/core-js/modules/es6.date.now.js","../../node_modules/core-js/modules/es6.date.to-json.js","../../node_modules/core-js/modules/_date-to-iso-string.js","../../node_modules/core-js/modules/es6.date.to-iso-string.js","../../node_modules/core-js/modules/es6.date.to-string.js","../../node_modules/core-js/modules/_date-to-primitive.js","../../node_modules/core-js/modules/es6.date.to-primitive.js","../../node_modules/core-js/modules/es6.array.is-array.js","../../node_modules/core-js/modules/_iter-call.js","../../node_modules/core-js/modules/_is-array-iter.js","../../node_modules/core-js/modules/_create-property.js","../../node_modules/core-js/modules/core.get-iterator-method.js","../../node_modules/core-js/modules/_iter-detect.js","../../node_modules/core-js/modules/es6.array.from.js","../../node_modules/core-js/modules/es6.array.of.js","../../node_modules/core-js/modules/_strict-method.js","../../node_modules/core-js/modules/es6.array.join.js","../../node_modules/core-js/modules/es6.array.slice.js","../../node_modules/core-js/modules/es6.array.sort.js","../../node_modules/core-js/modules/_array-species-constructor.js","../../node_modules/core-js/modules/_array-species-create.js","../../node_modules/core-js/modules/_array-methods.js","../../node_modules/core-js/modules/es6.array.for-each.js","../../node_modules/core-js/modules/es6.array.map.js","../../node_modules/core-js/modules/es6.array.filter.js","../../node_modules/core-js/modules/es6.array.some.js","../../node_modules/core-js/modules/es6.array.every.js","../../node_modules/core-js/modules/_array-reduce.js","../../node_modules/core-js/modules/es6.array.reduce.js","../../node_modules/core-js/modules/es6.array.reduce-right.js","../../node_modules/core-js/modules/es6.array.index-of.js","../../node_modules/core-js/modules/es6.array.last-index-of.js","../../node_modules/core-js/modules/_array-copy-within.js","../../node_modules/core-js/modules/_add-to-unscopables.js","../../node_modules/core-js/modules/es6.array.copy-within.js","../../node_modules/core-js/modules/_array-fill.js","../../node_modules/core-js/modules/es6.array.fill.js","../../node_modules/core-js/modules/es6.array.find.js","../../node_modules/core-js/modules/es6.array.find-index.js","../../node_modules/core-js/modules/_set-species.js","../../node_modules/core-js/modules/es6.array.species.js","../../node_modules/core-js/modules/_iter-step.js","../../node_modules/core-js/modules/es6.array.iterator.js","../../node_modules/core-js/modules/_flags.js","../../node_modules/core-js/modules/es6.regexp.constructor.js","../../node_modules/core-js/modules/_regexp-exec.js","../../node_modules/core-js/modules/es6.regexp.exec.js","../../node_modules/core-js/modules/es6.regexp.flags.js","../../node_modules/core-js/modules/es6.regexp.to-string.js","../../node_modules/core-js/modules/_advance-string-index.js","../../node_modules/core-js/modules/_regexp-exec-abstract.js","../../node_modules/core-js/modules/_fix-re-wks.js","../../node_modules/core-js/modules/es6.regexp.match.js","../../node_modules/core-js/modules/es6.regexp.replace.js","../../node_modules/core-js/modules/es6.regexp.search.js","../../node_modules/core-js/modules/_species-constructor.js","../../node_modules/core-js/modules/es6.regexp.split.js","../../node_modules/core-js/modules/_an-instance.js","../../node_modules/core-js/modules/_for-of.js","../../node_modules/core-js/modules/_task.js","../../node_modules/core-js/modules/_microtask.js","../../node_modules/core-js/modules/_new-promise-capability.js","../../node_modules/core-js/modules/_perform.js","../../node_modules/core-js/modules/_user-agent.js","../../node_modules/core-js/modules/_promise-resolve.js","../../node_modules/core-js/modules/_redefine-all.js","../../node_modules/core-js/modules/es6.promise.js","../../node_modules/core-js/modules/_validate-collection.js","../../node_modules/core-js/modules/_collection-strong.js","../../node_modules/core-js/modules/_collection.js","../../node_modules/core-js/modules/es6.map.js","../../node_modules/core-js/modules/es6.set.js","../../node_modules/core-js/modules/_collection-weak.js","../../node_modules/core-js/modules/es6.weak-map.js","../../node_modules/core-js/modules/es6.weak-set.js","../../node_modules/core-js/modules/_typed.js","../../node_modules/core-js/modules/_to-index.js","../../node_modules/core-js/modules/_typed-buffer.js","../../node_modules/core-js/modules/es6.typed.array-buffer.js","../../node_modules/core-js/modules/es6.typed.data-view.js","../../node_modules/core-js/modules/_typed-array.js","../../node_modules/core-js/modules/es6.typed.int8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","../../node_modules/core-js/modules/es6.typed.int16-array.js","../../node_modules/core-js/modules/es6.typed.uint16-array.js","../../node_modules/core-js/modules/es6.typed.int32-array.js","../../node_modules/core-js/modules/es6.typed.uint32-array.js","../../node_modules/core-js/modules/es6.typed.float32-array.js","../../node_modules/core-js/modules/es6.typed.float64-array.js","../../node_modules/core-js/modules/es6.reflect.apply.js","../../node_modules/core-js/modules/es6.reflect.construct.js","../../node_modules/core-js/modules/es6.reflect.define-property.js","../../node_modules/core-js/modules/es6.reflect.delete-property.js","../../node_modules/core-js/modules/es6.reflect.enumerate.js","../../node_modules/core-js/modules/es6.reflect.get.js","../../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.reflect.get-prototype-of.js","../../node_modules/core-js/modules/es6.reflect.has.js","../../node_modules/core-js/modules/es6.reflect.is-extensible.js","../../node_modules/core-js/modules/_own-keys.js","../../node_modules/core-js/modules/es6.reflect.own-keys.js","../../node_modules/core-js/modules/es6.reflect.prevent-extensions.js","../../node_modules/core-js/modules/es6.reflect.set.js","../../node_modules/core-js/modules/es6.reflect.set-prototype-of.js","../../node_modules/core-js/modules/es7.array.includes.js","../../node_modules/core-js/modules/_flatten-into-array.js","../../node_modules/core-js/modules/es7.array.flat-map.js","../../node_modules/core-js/modules/es7.array.flatten.js","../../node_modules/core-js/modules/es7.string.at.js","../../node_modules/core-js/modules/_string-pad.js","../../node_modules/core-js/modules/es7.string.pad-start.js","../../node_modules/core-js/modules/es7.string.pad-end.js","../../node_modules/core-js/modules/es7.string.trim-left.js","../../node_modules/core-js/modules/es7.string.trim-right.js","../../node_modules/core-js/modules/es7.string.match-all.js","../../node_modules/core-js/modules/es7.symbol.async-iterator.js","../../node_modules/core-js/modules/es7.symbol.observable.js","../../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","../../node_modules/core-js/modules/_object-to-array.js","../../node_modules/core-js/modules/es7.object.values.js","../../node_modules/core-js/modules/es7.object.entries.js","../../node_modules/core-js/modules/_object-forced-pam.js","../../node_modules/core-js/modules/es7.object.define-getter.js","../../node_modules/core-js/modules/es7.object.define-setter.js","../../node_modules/core-js/modules/es7.object.lookup-getter.js","../../node_modules/core-js/modules/es7.object.lookup-setter.js","../../node_modules/core-js/modules/_array-from-iterable.js","../../node_modules/core-js/modules/_collection-to-json.js","../../node_modules/core-js/modules/es7.map.to-json.js","../../node_modules/core-js/modules/es7.set.to-json.js","../../node_modules/core-js/modules/_set-collection-of.js","../../node_modules/core-js/modules/es7.map.of.js","../../node_modules/core-js/modules/es7.set.of.js","../../node_modules/core-js/modules/es7.weak-map.of.js","../../node_modules/core-js/modules/es7.weak-set.of.js","../../node_modules/core-js/modules/_set-collection-from.js","../../node_modules/core-js/modules/es7.map.from.js","../../node_modules/core-js/modules/es7.set.from.js","../../node_modules/core-js/modules/es7.weak-map.from.js","../../node_modules/core-js/modules/es7.weak-set.from.js","../../node_modules/core-js/modules/es7.global.js","../../node_modules/core-js/modules/es7.system.global.js","../../node_modules/core-js/modules/es7.error.is-error.js","../../node_modules/core-js/modules/es7.math.clamp.js","../../node_modules/core-js/modules/es7.math.deg-per-rad.js","../../node_modules/core-js/modules/es7.math.degrees.js","../../node_modules/core-js/modules/_math-scale.js","../../node_modules/core-js/modules/es7.math.fscale.js","../../node_modules/core-js/modules/es7.math.iaddh.js","../../node_modules/core-js/modules/es7.math.isubh.js","../../node_modules/core-js/modules/es7.math.imulh.js","../../node_modules/core-js/modules/es7.math.rad-per-deg.js","../../node_modules/core-js/modules/es7.math.radians.js","../../node_modules/core-js/modules/es7.math.scale.js","../../node_modules/core-js/modules/es7.math.umulh.js","../../node_modules/core-js/modules/es7.math.signbit.js","../../node_modules/core-js/modules/es7.promise.finally.js","../../node_modules/core-js/modules/es7.promise.try.js","../../node_modules/core-js/modules/_metadata.js","../../node_modules/core-js/modules/es7.reflect.define-metadata.js","../../node_modules/core-js/modules/es7.reflect.delete-metadata.js","../../node_modules/core-js/modules/es7.reflect.get-metadata.js","../../node_modules/core-js/modules/es7.reflect.get-metadata-keys.js","../../node_modules/core-js/modules/es7.reflect.get-own-metadata.js","../../node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js","../../node_modules/core-js/modules/es7.reflect.has-metadata.js","../../node_modules/core-js/modules/es7.reflect.has-own-metadata.js","../../node_modules/core-js/modules/es7.reflect.metadata.js","../../node_modules/core-js/modules/es7.asap.js","../../node_modules/core-js/modules/es7.observable.js","../../node_modules/core-js/modules/web.timers.js","../../node_modules/core-js/modules/web.immediate.js","../../node_modules/core-js/modules/web.dom.iterable.js","../../node_modules/core-js/shim.js","../../node_modules/regenerator-runtime/runtime.js","../../node_modules/core-js/modules/_replacer.js","../../node_modules/core-js/modules/core.regexp.escape.js","../../node_modules/core-js/fn/regexp/escape.js","../../node_modules/babel-polyfill/lib/index.js","scrollspy.js","sphinx_materialdesign_theme.js"],"names":["MaterialTab","tab","ctx","element_","classList","contains","CssClasses_","MDL_JS_RIPPLE_EFFECT","rippleContainer","document","createElement","add","MDL_RIPPLE_CONTAINER","ripple","MDL_RIPPLE","appendChild","addEventListener","e","getAttribute","charAt","preventDefault","href","split","panel","querySelector","resetTabState_","resetPanelState_","ACTIVE_CLASS","MaterialLayoutTab","tabs","panels","layout","selectTab","content_","IS_ACTIVE","tabBar_","JS_RIPPLE_EFFECT","RIPPLE_CONTAINER","RIPPLE","TAB_MANUAL_SWITCH","show","componentHandler","upgradeDom","optJsClass","optCssClass","upgradeElement","element","upgradeElements","elements","upgradeAllRegistered","registerUpgradedCallback","jsClass","callback","register","config","downgradeElements","nodes","findRegisteredClass_","name","optReplace","i","registeredComponents_","length","className","getUpgradedListOfElement_","dataUpgraded","isElementUpgraded_","upgradedList","indexOf","createEvent_","eventType","bubbles","cancelable","window","CustomEvent","ev","createEvent","initEvent","upgradeDomInternal","cssClass","registeredClass","querySelectorAll","n","upgradeElementInternal","Element","Error","upgradingEv","dispatchEvent","defaultPrevented","classesToUpgrade","push","forEach","component","setAttribute","join","instance","classConstructor","componentConfigProperty_","createdComponents_","j","m","callbacks","widget","upgradedEv","deconstructComponentInternal","componentIndex","splice","upgrades","componentPlace","classAsString","upgradeElementsInternal","Array","isArray","prototype","slice","call","HTMLElement","children","upgradeAllRegisteredInternal","registerUpgradedCallbackInternal","regClass","registerInternal","widgetMissing","newConfig","constructor","item","hasOwnProperty","downgradeNodesInternal","downgradeNode","node","filter","NodeList","Node","ComponentConfigPublic","ComponentConfig","Component","documentElement","Date","now","getTime","vendors","requestAnimationFrame","vp","cancelAnimationFrame","test","navigator","userAgent","lastTime","nextTime","Math","max","setTimeout","clearTimeout","MaterialButton","this","init","Constant_","RIPPLE_EFFECT","blurHandler_","event","blur","disable","disabled","enable","rippleElement_","boundRippleBlurHandler","bind","boundButtonBlurHandler","MaterialCheckbox","TINY_TIMEOUT","INPUT","BOX_OUTLINE","FOCUS_HELPER","TICK_OUTLINE","RIPPLE_IGNORE_EVENTS","RIPPLE_CENTER","IS_FOCUSED","IS_DISABLED","IS_CHECKED","IS_UPGRADED","onChange_","updateClasses_","onFocus_","onBlur_","remove","onMouseUp_","blur_","checkDisabled","checkToggleState","inputElement_","checked","check","uncheck","boxOutline","tickContainer","tickOutline","rippleContainerElement_","boundRippleMouseUp","boundInputOnChange","boundInputOnFocus","boundInputOnBlur","boundElementMouseUp","MaterialIconToggle","boundElementOnMouseUp","MaterialMenu","TRANSITION_DURATION_SECONDS","TRANSITION_DURATION_FRACTION","CLOSE_TIMEOUT","Keycodes_","ENTER","ESCAPE","SPACE","UP_ARROW","DOWN_ARROW","CONTAINER","OUTLINE","ITEM","ITEM_RIPPLE_CONTAINER","IS_VISIBLE","IS_ANIMATING","BOTTOM_LEFT","BOTTOM_RIGHT","TOP_LEFT","TOP_RIGHT","UNALIGNED","container","parentElement","insertBefore","removeChild","container_","outline","outline_","forElId","forEl","getElementById","forElement_","handleForClick_","handleForKeyboardEvent_","items","boundItemKeydown_","handleItemKeyboardEvent_","boundItemClick_","handleItemClick_","tabIndex","evt","rect","getBoundingClientRect","forRect","style","right","top","offsetTop","offsetHeight","left","offsetLeft","bottom","toggle","keyCode","focus","currentIndex","target","MouseEvent","click","hide","hasAttribute","stopPropagation","closing_","applyClip_","height","width","clip","removeAnimationEndListener_","addAnimationEndListener_","transitionDuration","itemDelay","transitionDelay","parentNode","removeEventListener","removeProperty","MaterialProgress","INDETERMINATE_CLASS","setProgress","p","progressbar_","setBuffer","bufferbar_","auxbar_","el","MaterialRadio","JS_RADIO","RADIO_BTN","RADIO_OUTER_CIRCLE","RADIO_INNER_CIRCLE","radios","getElementsByClassName","btnElement_","onMouseup_","boundChangeHandler_","boundFocusHandler_","boundBlurHandler_","boundMouseUpHandler_","outerCircle","innerCircle","MaterialSlider","isIE_","msPointerEnabled","IE_CONTAINER","SLIDER_CONTAINER","BACKGROUND_FLEX","BACKGROUND_LOWER","BACKGROUND_UPPER","IS_LOWEST_VALUE","onInput_","updateValueStyles_","onContainerMouseDown_","newEvent","buttons","clientX","clientY","y","fraction","value","min","backgroundLower_","flex","webkitFlex","backgroundUpper_","change","containerIE","backgroundFlex","boundInputHandler","boundChangeHandler","boundMouseUpHandler","boundContainerMouseDownHandler","MaterialSnackbar","textElement_","cssClasses_","MESSAGE","actionElement_","ACTION","active","actionHandler_","undefined","message_","actionText_","queuedNotifications_","setActionHidden_","ANIMATION_LENGTH","SNACKBAR","ACTIVE","displaySnackbar_","textContent","cleanup_","timeout_","showSnackbar","data","checkQueue_","shift","Boolean","removeAttribute","MaterialSpinner","MDL_SPINNER_LAYER_COUNT","MDL_SPINNER_LAYER","MDL_SPINNER_CIRCLE_CLIPPER","MDL_SPINNER_CIRCLE","MDL_SPINNER_GAP_PATCH","MDL_SPINNER_LEFT","MDL_SPINNER_RIGHT","createLayer","index","layer","leftClipper","gapPatch","rightClipper","circleOwners","circle","stop","start","MaterialSwitch","TRACK","THUMB","on","off","track","thumb","focusHelper","boundFocusHandler","boundBlurHandler","MaterialTabs","TAB_CLASS","PANEL_CLASS","UPGRADED_CLASS","MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS","initTabs_","tabs_","panels_","k","MaterialTextfield","maxRows","NO_MAX_ROWS","MAX_ROWS_ATTRIBUTE","LABEL","IS_DIRTY","IS_INVALID","HAS_PLACEHOLDER","onKeyDown_","currentRowCount","onReset_","checkValidity","checkDirty","checkFocus","input_","validity","valid","label_","parseInt","isNaN","boundUpdateClassesHandler","boundResetHandler","boundKeyDownHandler","invalid","MaterialTooltip","BOTTOM","LEFT","RIGHT","TOP","handleMouseEnter_","props","marginLeft","offsetWidth","marginTop","hideTooltip_","boundMouseEnterHandler","boundMouseLeaveAndScrollHandler","MaterialLayout","MAX_WIDTH","TAB_SCROLL_PIXELS","RESIZE_TIMEOUT","MENU_ICON","CHEVRON_LEFT","CHEVRON_RIGHT","Mode_","STANDARD","SEAMED","WATERFALL","SCROLL","HEADER","DRAWER","CONTENT","DRAWER_BTN","ICON","HEADER_SEAMED","HEADER_WATERFALL","HEADER_SCROLL","FIXED_HEADER","OBFUSCATOR","TAB_BAR","TAB_CONTAINER","TAB","TAB_BAR_BUTTON","TAB_BAR_LEFT_BUTTON","TAB_BAR_RIGHT_BUTTON","PANEL","HAS_DRAWER","HAS_TABS","HAS_SCROLLING_HEADER","CASTING_SHADOW","IS_COMPACT","IS_SMALL_SCREEN","IS_DRAWER_OPEN","ON_LARGE_SCREEN","ON_SMALL_SCREEN","contentScrollHandler_","header_","headerVisible","scrollTop","keyboardEventHandler_","drawer_","toggleDrawer","screenSizeHandler_","screenSizeMediaQuery_","matches","obfuscator_","drawerToggleHandler_","type","headerTransitionEndHandler_","headerClickHandler_","tabBar","drawerButton","focusedElement","directChildren","childNodes","numChildren","c","child","persisted","overflowY","mode","drawerButtonIcon","innerHTML","firstChild","obfuscator","matchMedia","addListener","tabContainer","leftButton","leftButtonIcon","scrollLeft","rightButton","rightButtonIcon","tabUpdateHandler","scrollWidth","windowResizeHandler","resizeTimeoutId_","MaterialDataTable","DATA_TABLE","SELECTABLE","SELECT_ELEMENT","IS_SELECTED","selectRow_","checkbox","row","opt_rows","createCheckbox_","label","labelClasses","firstHeader","bodyRows","footRows","rows","concat","th","headerCheckbox","firstCell","td","nodeName","toUpperCase","rowCheckbox","MaterialRipple","INITIAL_SCALE","INITIAL_SIZE","INITIAL_OPACITY","FINAL_OPACITY","FINAL_SCALE","RIPPLE_EFFECT_IGNORE_EVENTS","downHandler_","boundHeight","boundWidth","rippleSize_","sqrt","ignoringMouseDown_","frameCount","getFrameCount","setFrameCount","x","bound","currentTarget","round","touches","setRippleXY","setRippleStyles","animFrameHandler","upHandler_","detail","recentering","frameCount_","x_","y_","boundDownHandler","boundUpHandler","fC","getRippleElement","newX","newY","transformString","scale","offset","webkitTransform","msTransform","transform","ScrollSpy","args","doc","nav","navSelector","win","winHeight","innerHeight","scrollElement","scrollSelector","contents","getContents","contentSelector","attachEvent","scrollTimer","resizeTimer","spy","tagName","onclickToc","navElement","targets","getViewState","toggleNavClass","elementListInView","current","isView","subHeaderRect","headerHeight","scrollBottom","elementTop","elementBottom","maxDepth","maxDepthElement","$","tempDepth","getTagDepth","id","find","get","reconstructionDrawerGlobalToc","$lists","$breadcrumb","each","li","$li","$linkWrapper","$link","append","isCurrent","hasClass","$ul","ulId","attr","addClass","$toggleWrapper","$toggle","toggleClass","animate","opacity","parent","url","text","location","button","icon","createTextNode","link","onclick","fileName","pop","replace","hint","hintText","map","header","first","css"],"mappings":"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","file":"sphinx_materialdesign_theme.js","sourceRoot":"../../src/js","sourcesContent":["/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Ripple MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialRipple = function MaterialRipple(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialRipple'] = MaterialRipple;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialRipple.prototype.Constant_ = {\n INITIAL_SCALE: 'scale(0.0001, 0.0001)',\n INITIAL_SIZE: '1px',\n INITIAL_OPACITY: '0.4',\n FINAL_OPACITY: '0',\n FINAL_SCALE: ''\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialRipple.prototype.CssClasses_ = {\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE_EFFECT_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE: 'mdl-ripple',\n IS_ANIMATING: 'is-animating',\n IS_VISIBLE: 'is-visible'\n};\n/**\n * Handle mouse / finger down on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRipple.prototype.downHandler_ = function (event) {\n if (!this.rippleElement_.style.width && !this.rippleElement_.style.height) {\n var rect = this.element_.getBoundingClientRect();\n this.boundHeight = rect.height;\n this.boundWidth = rect.width;\n this.rippleSize_ = Math.sqrt(rect.width * rect.width + rect.height * rect.height) * 2 + 2;\n this.rippleElement_.style.width = this.rippleSize_ + 'px';\n this.rippleElement_.style.height = this.rippleSize_ + 'px';\n }\n this.rippleElement_.classList.add(this.CssClasses_.IS_VISIBLE);\n if (event.type === 'mousedown' && this.ignoringMouseDown_) {\n this.ignoringMouseDown_ = false;\n } else {\n if (event.type === 'touchstart') {\n this.ignoringMouseDown_ = true;\n }\n var frameCount = this.getFrameCount();\n if (frameCount > 0) {\n return;\n }\n this.setFrameCount(1);\n var bound = event.currentTarget.getBoundingClientRect();\n var x;\n var y;\n // Check if we are handling a keyboard click.\n if (event.clientX === 0 && event.clientY === 0) {\n x = Math.round(bound.width / 2);\n y = Math.round(bound.height / 2);\n } else {\n var clientX = event.clientX !== undefined ? event.clientX : event.touches[0].clientX;\n var clientY = event.clientY !== undefined ? event.clientY : event.touches[0].clientY;\n x = Math.round(clientX - bound.left);\n y = Math.round(clientY - bound.top);\n }\n this.setRippleXY(x, y);\n this.setRippleStyles(true);\n window.requestAnimationFrame(this.animFrameHandler.bind(this));\n }\n};\n/**\n * Handle mouse / finger up on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRipple.prototype.upHandler_ = function (event) {\n // Don't fire for the artificial \"mouseup\" generated by a double-click.\n if (event && event.detail !== 2) {\n // Allow a repaint to occur before removing this class, so the animation\n // shows for tap events, which seem to trigger a mouseup too soon after\n // mousedown.\n window.setTimeout(function () {\n this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE);\n }.bind(this), 0);\n }\n};\n/**\n * Initialize element.\n */\nMaterialRipple.prototype.init = function () {\n if (this.element_) {\n var recentering = this.element_.classList.contains(this.CssClasses_.RIPPLE_CENTER);\n if (!this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT_IGNORE_EVENTS)) {\n this.rippleElement_ = this.element_.querySelector('.' + this.CssClasses_.RIPPLE);\n this.frameCount_ = 0;\n this.rippleSize_ = 0;\n this.x_ = 0;\n this.y_ = 0;\n // Touch start produces a compat mouse down event, which would cause a\n // second ripples. To avoid that, we use this property to ignore the first\n // mouse down after a touch start.\n this.ignoringMouseDown_ = false;\n this.boundDownHandler = this.downHandler_.bind(this);\n this.element_.addEventListener('mousedown', this.boundDownHandler);\n this.element_.addEventListener('touchstart', this.boundDownHandler);\n this.boundUpHandler = this.upHandler_.bind(this);\n this.element_.addEventListener('mouseup', this.boundUpHandler);\n this.element_.addEventListener('mouseleave', this.boundUpHandler);\n this.element_.addEventListener('touchend', this.boundUpHandler);\n this.element_.addEventListener('blur', this.boundUpHandler);\n /**\n * Getter for frameCount_.\n * @return {number} the frame count.\n */\n this.getFrameCount = function () {\n return this.frameCount_;\n };\n /**\n * Setter for frameCount_.\n * @param {number} fC the frame count.\n */\n this.setFrameCount = function (fC) {\n this.frameCount_ = fC;\n };\n /**\n * Getter for rippleElement_.\n * @return {Element} the ripple element.\n */\n this.getRippleElement = function () {\n return this.rippleElement_;\n };\n /**\n * Sets the ripple X and Y coordinates.\n * @param {number} newX the new X coordinate\n * @param {number} newY the new Y coordinate\n */\n this.setRippleXY = function (newX, newY) {\n this.x_ = newX;\n this.y_ = newY;\n };\n /**\n * Sets the ripple styles.\n * @param {boolean} start whether or not this is the start frame.\n */\n this.setRippleStyles = function (start) {\n if (this.rippleElement_ !== null) {\n var transformString;\n var scale;\n var size;\n var offset = 'translate(' + this.x_ + 'px, ' + this.y_ + 'px)';\n if (start) {\n scale = this.Constant_.INITIAL_SCALE;\n size = this.Constant_.INITIAL_SIZE;\n } else {\n scale = this.Constant_.FINAL_SCALE;\n size = this.rippleSize_ + 'px';\n if (recentering) {\n offset = 'translate(' + this.boundWidth / 2 + 'px, ' + this.boundHeight / 2 + 'px)';\n }\n }\n transformString = 'translate(-50%, -50%) ' + offset + scale;\n this.rippleElement_.style.webkitTransform = transformString;\n this.rippleElement_.style.msTransform = transformString;\n this.rippleElement_.style.transform = transformString;\n if (start) {\n this.rippleElement_.classList.remove(this.CssClasses_.IS_ANIMATING);\n } else {\n this.rippleElement_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n }\n };\n /**\n * Handles an animation frame.\n */\n this.animFrameHandler = function () {\n if (this.frameCount_-- > 0) {\n window.requestAnimationFrame(this.animFrameHandler.bind(this));\n } else {\n this.setRippleStyles(false);\n }\n };\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialRipple,\n classAsString: 'MaterialRipple',\n cssClass: 'mdl-js-ripple-effect',\n widget: false\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Tabs MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {Element} element The element that will be upgraded.\n */\nvar MaterialTabs = function MaterialTabs(element) {\n // Stores the HTML element.\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialTabs'] = MaterialTabs;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string}\n * @private\n */\nMaterialTabs.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialTabs.prototype.CssClasses_ = {\n TAB_CLASS: 'mdl-tabs__tab',\n PANEL_CLASS: 'mdl-tabs__panel',\n ACTIVE_CLASS: 'is-active',\n UPGRADED_CLASS: 'is-upgraded',\n MDL_JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n MDL_RIPPLE_CONTAINER: 'mdl-tabs__ripple-container',\n MDL_RIPPLE: 'mdl-ripple',\n MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events'\n};\n/**\n * Handle clicks to a tabs component\n *\n * @private\n */\nMaterialTabs.prototype.initTabs_ = function () {\n if (this.element_.classList.contains(this.CssClasses_.MDL_JS_RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS);\n }\n // Select element tabs, document panels\n this.tabs_ = this.element_.querySelectorAll('.' + this.CssClasses_.TAB_CLASS);\n this.panels_ = this.element_.querySelectorAll('.' + this.CssClasses_.PANEL_CLASS);\n // Create new tabs for each tab element\n for (var i = 0; i < this.tabs_.length; i++) {\n new MaterialTab(this.tabs_[i], this);\n }\n this.element_.classList.add(this.CssClasses_.UPGRADED_CLASS);\n};\n/**\n * Reset tab state, dropping active classes\n *\n * @private\n */\nMaterialTabs.prototype.resetTabState_ = function () {\n for (var k = 0; k < this.tabs_.length; k++) {\n this.tabs_[k].classList.remove(this.CssClasses_.ACTIVE_CLASS);\n }\n};\n/**\n * Reset panel state, droping active classes\n *\n * @private\n */\nMaterialTabs.prototype.resetPanelState_ = function () {\n for (var j = 0; j < this.panels_.length; j++) {\n this.panels_[j].classList.remove(this.CssClasses_.ACTIVE_CLASS);\n }\n};\n/**\n * Initialize element.\n */\nMaterialTabs.prototype.init = function () {\n if (this.element_) {\n this.initTabs_();\n }\n};\n/**\n * Constructor for an individual tab.\n *\n * @constructor\n * @param {Element} tab The HTML element for the tab.\n * @param {MaterialTabs} ctx The MaterialTabs object that owns the tab.\n */\nfunction MaterialTab(tab, ctx) {\n if (tab) {\n if (ctx.element_.classList.contains(ctx.CssClasses_.MDL_JS_RIPPLE_EFFECT)) {\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(ctx.CssClasses_.MDL_RIPPLE_CONTAINER);\n rippleContainer.classList.add(ctx.CssClasses_.MDL_JS_RIPPLE_EFFECT);\n var ripple = document.createElement('span');\n ripple.classList.add(ctx.CssClasses_.MDL_RIPPLE);\n rippleContainer.appendChild(ripple);\n tab.appendChild(rippleContainer);\n }\n tab.addEventListener('click', function (e) {\n if (tab.getAttribute('href').charAt(0) === '#') {\n e.preventDefault();\n var href = tab.href.split('#')[1];\n var panel = ctx.element_.querySelector('#' + href);\n ctx.resetTabState_();\n ctx.resetPanelState_();\n tab.classList.add(ctx.CssClasses_.ACTIVE_CLASS);\n panel.classList.add(ctx.CssClasses_.ACTIVE_CLASS);\n }\n });\n }\n}\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTabs,\n classAsString: 'MaterialTabs',\n cssClass: 'mdl-js-tabs'\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Layout MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialLayout = function MaterialLayout(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialLayout'] = MaterialLayout;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialLayout.prototype.Constant_ = {\n MAX_WIDTH: '(max-width: 1024px)',\n TAB_SCROLL_PIXELS: 100,\n RESIZE_TIMEOUT: 100,\n MENU_ICON: '',\n CHEVRON_LEFT: 'chevron_left',\n CHEVRON_RIGHT: 'chevron_right'\n};\n/**\n * Keycodes, for code readability.\n *\n * @enum {number}\n * @private\n */\nMaterialLayout.prototype.Keycodes_ = {\n ENTER: 13,\n ESCAPE: 27,\n SPACE: 32\n};\n/**\n * Modes.\n *\n * @enum {number}\n * @private\n */\nMaterialLayout.prototype.Mode_ = {\n STANDARD: 0,\n SEAMED: 1,\n WATERFALL: 2,\n SCROLL: 3\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialLayout.prototype.CssClasses_ = {\n CONTAINER: 'mdl-layout__container',\n HEADER: 'mdl-layout__header',\n DRAWER: 'mdl-layout__drawer',\n CONTENT: 'mdl-layout__content',\n DRAWER_BTN: 'mdl-layout__drawer-button',\n ICON: 'material-icons',\n JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_CONTAINER: 'mdl-layout__tab-ripple-container',\n RIPPLE: 'mdl-ripple',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n HEADER_SEAMED: 'mdl-layout__header--seamed',\n HEADER_WATERFALL: 'mdl-layout__header--waterfall',\n HEADER_SCROLL: 'mdl-layout__header--scroll',\n FIXED_HEADER: 'mdl-layout--fixed-header',\n OBFUSCATOR: 'mdl-layout__obfuscator',\n TAB_BAR: 'mdl-layout__tab-bar',\n TAB_CONTAINER: 'mdl-layout__tab-bar-container',\n TAB: 'mdl-layout__tab',\n TAB_BAR_BUTTON: 'mdl-layout__tab-bar-button',\n TAB_BAR_LEFT_BUTTON: 'mdl-layout__tab-bar-left-button',\n TAB_BAR_RIGHT_BUTTON: 'mdl-layout__tab-bar-right-button',\n TAB_MANUAL_SWITCH: 'mdl-layout__tab-manual-switch',\n PANEL: 'mdl-layout__tab-panel',\n HAS_DRAWER: 'has-drawer',\n HAS_TABS: 'has-tabs',\n HAS_SCROLLING_HEADER: 'has-scrolling-header',\n CASTING_SHADOW: 'is-casting-shadow',\n IS_COMPACT: 'is-compact',\n IS_SMALL_SCREEN: 'is-small-screen',\n IS_DRAWER_OPEN: 'is-visible',\n IS_ACTIVE: 'is-active',\n IS_UPGRADED: 'is-upgraded',\n IS_ANIMATING: 'is-animating',\n ON_LARGE_SCREEN: 'mdl-layout--large-screen-only',\n ON_SMALL_SCREEN: 'mdl-layout--small-screen-only'\n};\n/**\n * Handles scrolling on the content.\n *\n * @private\n */\nMaterialLayout.prototype.contentScrollHandler_ = function () {\n if (this.header_.classList.contains(this.CssClasses_.IS_ANIMATING)) {\n return;\n }\n var headerVisible = !this.element_.classList.contains(this.CssClasses_.IS_SMALL_SCREEN) || this.element_.classList.contains(this.CssClasses_.FIXED_HEADER);\n if (this.content_.scrollTop > 0 && !this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n this.header_.classList.add(this.CssClasses_.CASTING_SHADOW);\n this.header_.classList.add(this.CssClasses_.IS_COMPACT);\n if (headerVisible) {\n this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n } else if (this.content_.scrollTop <= 0 && this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n this.header_.classList.remove(this.CssClasses_.IS_COMPACT);\n if (headerVisible) {\n this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n }\n};\n/**\n * Handles a keyboard event on the drawer.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialLayout.prototype.keyboardEventHandler_ = function (evt) {\n // Only react when the drawer is open.\n if (evt.keyCode === this.Keycodes_.ESCAPE && this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)) {\n this.toggleDrawer();\n }\n};\n/**\n * Handles changes in screen size.\n *\n * @private\n */\nMaterialLayout.prototype.screenSizeHandler_ = function () {\n if (this.screenSizeMediaQuery_.matches) {\n this.element_.classList.add(this.CssClasses_.IS_SMALL_SCREEN);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_SMALL_SCREEN);\n // Collapse drawer (if any) when moving to a large screen size.\n if (this.drawer_) {\n this.drawer_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN);\n this.obfuscator_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN);\n }\n }\n};\n/**\n * Handles events of drawer button.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialLayout.prototype.drawerToggleHandler_ = function (evt) {\n if (evt && evt.type === 'keydown') {\n if (evt.keyCode === this.Keycodes_.SPACE || evt.keyCode === this.Keycodes_.ENTER) {\n // prevent scrolling in drawer nav\n evt.preventDefault();\n } else {\n // prevent other keys\n return;\n }\n }\n this.toggleDrawer();\n};\n/**\n * Handles (un)setting the `is-animating` class\n *\n * @private\n */\nMaterialLayout.prototype.headerTransitionEndHandler_ = function () {\n this.header_.classList.remove(this.CssClasses_.IS_ANIMATING);\n};\n/**\n * Handles expanding the header on click\n *\n * @private\n */\nMaterialLayout.prototype.headerClickHandler_ = function () {\n if (this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n this.header_.classList.remove(this.CssClasses_.IS_COMPACT);\n this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n};\n/**\n * Reset tab state, dropping active classes\n *\n * @private\n */\nMaterialLayout.prototype.resetTabState_ = function (tabBar) {\n for (var k = 0; k < tabBar.length; k++) {\n tabBar[k].classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n};\n/**\n * Reset panel state, droping active classes\n *\n * @private\n */\nMaterialLayout.prototype.resetPanelState_ = function (panels) {\n for (var j = 0; j < panels.length; j++) {\n panels[j].classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n};\n/**\n * Toggle drawer state\n *\n * @public\n */\nMaterialLayout.prototype.toggleDrawer = function () {\n var drawerButton = this.element_.querySelector('.' + this.CssClasses_.DRAWER_BTN);\n this.drawer_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);\n this.obfuscator_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);\n // Set accessibility properties.\n if (this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)) {\n this.drawer_.setAttribute('aria-hidden', 'false');\n drawerButton.setAttribute('aria-expanded', 'true');\n } else {\n this.drawer_.setAttribute('aria-hidden', 'true');\n drawerButton.setAttribute('aria-expanded', 'false');\n }\n};\nMaterialLayout.prototype['toggleDrawer'] = MaterialLayout.prototype.toggleDrawer;\n/**\n * Initialize element.\n */\nMaterialLayout.prototype.init = function () {\n if (this.element_) {\n var container = document.createElement('div');\n container.classList.add(this.CssClasses_.CONTAINER);\n var focusedElement = this.element_.querySelector(':focus');\n this.element_.parentElement.insertBefore(container, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n container.appendChild(this.element_);\n if (focusedElement) {\n focusedElement.focus();\n }\n var directChildren = this.element_.childNodes;\n var numChildren = directChildren.length;\n for (var c = 0; c < numChildren; c++) {\n var child = directChildren[c];\n if (child.classList && child.classList.contains(this.CssClasses_.HEADER)) {\n this.header_ = child;\n }\n if (child.classList && child.classList.contains(this.CssClasses_.DRAWER)) {\n this.drawer_ = child;\n }\n if (child.classList && child.classList.contains(this.CssClasses_.CONTENT)) {\n this.content_ = child;\n }\n }\n window.addEventListener('pageshow', function (e) {\n if (e.persisted) {\n // when page is loaded from back/forward cache\n // trigger repaint to let layout scroll in safari\n this.element_.style.overflowY = 'hidden';\n requestAnimationFrame(function () {\n this.element_.style.overflowY = '';\n }.bind(this));\n }\n }.bind(this), false);\n if (this.header_) {\n this.tabBar_ = this.header_.querySelector('.' + this.CssClasses_.TAB_BAR);\n }\n var mode = this.Mode_.STANDARD;\n if (this.header_) {\n if (this.header_.classList.contains(this.CssClasses_.HEADER_SEAMED)) {\n mode = this.Mode_.SEAMED;\n } else if (this.header_.classList.contains(this.CssClasses_.HEADER_WATERFALL)) {\n mode = this.Mode_.WATERFALL;\n this.header_.addEventListener('transitionend', this.headerTransitionEndHandler_.bind(this));\n this.header_.addEventListener('click', this.headerClickHandler_.bind(this));\n } else if (this.header_.classList.contains(this.CssClasses_.HEADER_SCROLL)) {\n mode = this.Mode_.SCROLL;\n container.classList.add(this.CssClasses_.HAS_SCROLLING_HEADER);\n }\n if (mode === this.Mode_.STANDARD) {\n this.header_.classList.add(this.CssClasses_.CASTING_SHADOW);\n if (this.tabBar_) {\n this.tabBar_.classList.add(this.CssClasses_.CASTING_SHADOW);\n }\n } else if (mode === this.Mode_.SEAMED || mode === this.Mode_.SCROLL) {\n this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n if (this.tabBar_) {\n this.tabBar_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n }\n } else if (mode === this.Mode_.WATERFALL) {\n // Add and remove shadows depending on scroll position.\n // Also add/remove auxiliary class for styling of the compact version of\n // the header.\n this.content_.addEventListener('scroll', this.contentScrollHandler_.bind(this));\n this.contentScrollHandler_();\n }\n }\n // Add drawer toggling button to our layout, if we have an openable drawer.\n if (this.drawer_) {\n var drawerButton = this.element_.querySelector('.' + this.CssClasses_.DRAWER_BTN);\n if (!drawerButton) {\n drawerButton = document.createElement('div');\n drawerButton.setAttribute('aria-expanded', 'false');\n drawerButton.setAttribute('role', 'button');\n drawerButton.setAttribute('tabindex', '0');\n drawerButton.classList.add(this.CssClasses_.DRAWER_BTN);\n var drawerButtonIcon = document.createElement('i');\n drawerButtonIcon.classList.add(this.CssClasses_.ICON);\n drawerButtonIcon.innerHTML = this.Constant_.MENU_ICON;\n drawerButton.appendChild(drawerButtonIcon);\n }\n if (this.drawer_.classList.contains(this.CssClasses_.ON_LARGE_SCREEN)) {\n //If drawer has ON_LARGE_SCREEN class then add it to the drawer toggle button as well.\n drawerButton.classList.add(this.CssClasses_.ON_LARGE_SCREEN);\n } else if (this.drawer_.classList.contains(this.CssClasses_.ON_SMALL_SCREEN)) {\n //If drawer has ON_SMALL_SCREEN class then add it to the drawer toggle button as well.\n drawerButton.classList.add(this.CssClasses_.ON_SMALL_SCREEN);\n }\n drawerButton.addEventListener('click', this.drawerToggleHandler_.bind(this));\n drawerButton.addEventListener('keydown', this.drawerToggleHandler_.bind(this));\n // Add a class if the layout has a drawer, for altering the left padding.\n // Adds the HAS_DRAWER to the elements since this.header_ may or may\n // not be present.\n this.element_.classList.add(this.CssClasses_.HAS_DRAWER);\n // If we have a fixed header, add the button to the header rather than\n // the layout.\n if (this.element_.classList.contains(this.CssClasses_.FIXED_HEADER)) {\n this.header_.insertBefore(drawerButton, this.header_.firstChild);\n } else {\n this.element_.insertBefore(drawerButton, this.content_);\n }\n var obfuscator = document.createElement('div');\n obfuscator.classList.add(this.CssClasses_.OBFUSCATOR);\n this.element_.appendChild(obfuscator);\n obfuscator.addEventListener('click', this.drawerToggleHandler_.bind(this));\n this.obfuscator_ = obfuscator;\n this.drawer_.addEventListener('keydown', this.keyboardEventHandler_.bind(this));\n this.drawer_.setAttribute('aria-hidden', 'true');\n }\n // Keep an eye on screen size, and add/remove auxiliary class for styling\n // of small screens.\n this.screenSizeMediaQuery_ = window.matchMedia(this.Constant_.MAX_WIDTH);\n this.screenSizeMediaQuery_.addListener(this.screenSizeHandler_.bind(this));\n this.screenSizeHandler_();\n // Initialize tabs, if any.\n if (this.header_ && this.tabBar_) {\n this.element_.classList.add(this.CssClasses_.HAS_TABS);\n var tabContainer = document.createElement('div');\n tabContainer.classList.add(this.CssClasses_.TAB_CONTAINER);\n this.header_.insertBefore(tabContainer, this.tabBar_);\n this.header_.removeChild(this.tabBar_);\n var leftButton = document.createElement('div');\n leftButton.classList.add(this.CssClasses_.TAB_BAR_BUTTON);\n leftButton.classList.add(this.CssClasses_.TAB_BAR_LEFT_BUTTON);\n var leftButtonIcon = document.createElement('i');\n leftButtonIcon.classList.add(this.CssClasses_.ICON);\n leftButtonIcon.textContent = this.Constant_.CHEVRON_LEFT;\n leftButton.appendChild(leftButtonIcon);\n leftButton.addEventListener('click', function () {\n this.tabBar_.scrollLeft -= this.Constant_.TAB_SCROLL_PIXELS;\n }.bind(this));\n var rightButton = document.createElement('div');\n rightButton.classList.add(this.CssClasses_.TAB_BAR_BUTTON);\n rightButton.classList.add(this.CssClasses_.TAB_BAR_RIGHT_BUTTON);\n var rightButtonIcon = document.createElement('i');\n rightButtonIcon.classList.add(this.CssClasses_.ICON);\n rightButtonIcon.textContent = this.Constant_.CHEVRON_RIGHT;\n rightButton.appendChild(rightButtonIcon);\n rightButton.addEventListener('click', function () {\n this.tabBar_.scrollLeft += this.Constant_.TAB_SCROLL_PIXELS;\n }.bind(this));\n tabContainer.appendChild(leftButton);\n tabContainer.appendChild(this.tabBar_);\n tabContainer.appendChild(rightButton);\n // Add and remove tab buttons depending on scroll position and total\n // window size.\n var tabUpdateHandler = function () {\n if (this.tabBar_.scrollLeft > 0) {\n leftButton.classList.add(this.CssClasses_.IS_ACTIVE);\n } else {\n leftButton.classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n if (this.tabBar_.scrollLeft < this.tabBar_.scrollWidth - this.tabBar_.offsetWidth) {\n rightButton.classList.add(this.CssClasses_.IS_ACTIVE);\n } else {\n rightButton.classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n }.bind(this);\n this.tabBar_.addEventListener('scroll', tabUpdateHandler);\n tabUpdateHandler();\n // Update tabs when the window resizes.\n var windowResizeHandler = function () {\n // Use timeouts to make sure it doesn't happen too often.\n if (this.resizeTimeoutId_) {\n clearTimeout(this.resizeTimeoutId_);\n }\n this.resizeTimeoutId_ = setTimeout(function () {\n tabUpdateHandler();\n this.resizeTimeoutId_ = null;\n }.bind(this), this.Constant_.RESIZE_TIMEOUT);\n }.bind(this);\n window.addEventListener('resize', windowResizeHandler);\n if (this.tabBar_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)) {\n this.tabBar_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n }\n // Select element tabs, document panels\n var tabs = this.tabBar_.querySelectorAll('.' + this.CssClasses_.TAB);\n var panels = this.content_.querySelectorAll('.' + this.CssClasses_.PANEL);\n // Create new tabs for each tab element\n for (var i = 0; i < tabs.length; i++) {\n new MaterialLayoutTab(tabs[i], tabs, panels, this);\n }\n }\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n/**\n * Constructor for an individual tab.\n *\n * @constructor\n * @param {HTMLElement} tab The HTML element for the tab.\n * @param {!Array} tabs Array with HTML elements for all tabs.\n * @param {!Array} panels Array with HTML elements for all panels.\n * @param {MaterialLayout} layout The MaterialLayout object that owns the tab.\n */\nfunction MaterialLayoutTab(tab, tabs, panels, layout) {\n /**\n * Auxiliary method to programmatically select a tab in the UI.\n */\n function selectTab() {\n var href = tab.href.split('#')[1];\n var panel = layout.content_.querySelector('#' + href);\n layout.resetTabState_(tabs);\n layout.resetPanelState_(panels);\n tab.classList.add(layout.CssClasses_.IS_ACTIVE);\n panel.classList.add(layout.CssClasses_.IS_ACTIVE);\n }\n if (layout.tabBar_.classList.contains(layout.CssClasses_.JS_RIPPLE_EFFECT)) {\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(layout.CssClasses_.RIPPLE_CONTAINER);\n rippleContainer.classList.add(layout.CssClasses_.JS_RIPPLE_EFFECT);\n var ripple = document.createElement('span');\n ripple.classList.add(layout.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n tab.appendChild(rippleContainer);\n }\n if (!layout.tabBar_.classList.contains(layout.CssClasses_.TAB_MANUAL_SWITCH)) {\n tab.addEventListener('click', function (e) {\n if (tab.getAttribute('href').charAt(0) === '#') {\n e.preventDefault();\n selectTab();\n }\n });\n }\n tab.show = selectTab;\n}\nwindow['MaterialLayoutTab'] = MaterialLayoutTab;\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialLayout,\n classAsString: 'MaterialLayout',\n cssClass: 'mdl-js-layout'\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * A component handler interface using the revealing module design pattern.\n * More details on this design pattern here:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @author Jason Mayes.\n */\n/* exported componentHandler */\n\n// Pre-defining the componentHandler interface, for closure documentation and\n// static verification.\nvar componentHandler = {\n /**\n * Searches existing DOM for elements of our component type and upgrades them\n * if they have not already been upgraded.\n *\n * @param {string=} optJsClass the programatic name of the element class we\n * need to create a new instance of.\n * @param {string=} optCssClass the name of the CSS class elements of this\n * type will have.\n */\n upgradeDom: function(optJsClass, optCssClass) {},\n /**\n * Upgrades a specific element rather than all in the DOM.\n *\n * @param {!Element} element The element we wish to upgrade.\n * @param {string=} optJsClass Optional name of the class we want to upgrade\n * the element to.\n */\n upgradeElement: function(element, optJsClass) {},\n /**\n * Upgrades a specific list of elements rather than all in the DOM.\n *\n * @param {!Element|!Array|!NodeList|!HTMLCollection} elements\n * The elements we wish to upgrade.\n */\n upgradeElements: function(elements) {},\n /**\n * Upgrades all registered components found in the current DOM. This is\n * automatically called on window load.\n */\n upgradeAllRegistered: function() {},\n /**\n * Allows user to be alerted to any upgrades that are performed for a given\n * component type\n *\n * @param {string} jsClass The class name of the MDL component we wish\n * to hook into for any upgrades performed.\n * @param {function(!HTMLElement)} callback The function to call upon an\n * upgrade. This function should expect 1 parameter - the HTMLElement which\n * got upgraded.\n */\n registerUpgradedCallback: function(jsClass, callback) {},\n /**\n * Registers a class for future use and attempts to upgrade existing DOM.\n *\n * @param {componentHandler.ComponentConfigPublic} config the registration configuration\n */\n register: function(config) {},\n /**\n * Downgrade either a given node, an array of nodes, or a NodeList.\n *\n * @param {!Node|!Array|!NodeList} nodes\n */\n downgradeElements: function(nodes) {}\n};\n\ncomponentHandler = (function() {\n 'use strict';\n\n /** @type {!Array} */\n var registeredComponents_ = [];\n\n /** @type {!Array} */\n var createdComponents_ = [];\n\n var componentConfigProperty_ = 'mdlComponentConfigInternal_';\n\n /**\n * Searches registered components for a class we are interested in using.\n * Optionally replaces a match with passed object if specified.\n *\n * @param {string} name The name of a class we want to use.\n * @param {componentHandler.ComponentConfig=} optReplace Optional object to replace match with.\n * @return {!Object|boolean}\n * @private\n */\n function findRegisteredClass_(name, optReplace) {\n for (var i = 0; i < registeredComponents_.length; i++) {\n if (registeredComponents_[i].className === name) {\n if (typeof optReplace !== 'undefined') {\n registeredComponents_[i] = optReplace;\n }\n return registeredComponents_[i];\n }\n }\n return false;\n }\n\n /**\n * Returns an array of the classNames of the upgraded classes on the element.\n *\n * @param {!Element} element The element to fetch data from.\n * @return {!Array}\n * @private\n */\n function getUpgradedListOfElement_(element) {\n var dataUpgraded = element.getAttribute('data-upgraded');\n // Use `['']` as default value to conform the `,name,name...` style.\n return dataUpgraded === null ? [''] : dataUpgraded.split(',');\n }\n\n /**\n * Returns true if the given element has already been upgraded for the given\n * class.\n *\n * @param {!Element} element The element we want to check.\n * @param {string} jsClass The class to check for.\n * @returns {boolean}\n * @private\n */\n function isElementUpgraded_(element, jsClass) {\n var upgradedList = getUpgradedListOfElement_(element);\n return upgradedList.indexOf(jsClass) !== -1;\n }\n\n /**\n * Create an event object.\n *\n * @param {string} eventType The type name of the event.\n * @param {boolean} bubbles Whether the event should bubble up the DOM.\n * @param {boolean} cancelable Whether the event can be canceled.\n * @returns {!Event}\n */\n function createEvent_(eventType, bubbles, cancelable) {\n if ('CustomEvent' in window && typeof window.CustomEvent === 'function') {\n return new CustomEvent(eventType, {\n bubbles: bubbles,\n cancelable: cancelable\n });\n } else {\n var ev = document.createEvent('Events');\n ev.initEvent(eventType, bubbles, cancelable);\n return ev;\n }\n }\n\n /**\n * Searches existing DOM for elements of our component type and upgrades them\n * if they have not already been upgraded.\n *\n * @param {string=} optJsClass the programatic name of the element class we\n * need to create a new instance of.\n * @param {string=} optCssClass the name of the CSS class elements of this\n * type will have.\n */\n function upgradeDomInternal(optJsClass, optCssClass) {\n if (typeof optJsClass === 'undefined' &&\n typeof optCssClass === 'undefined') {\n for (var i = 0; i < registeredComponents_.length; i++) {\n upgradeDomInternal(registeredComponents_[i].className,\n registeredComponents_[i].cssClass);\n }\n } else {\n var jsClass = /** @type {string} */ (optJsClass);\n if (typeof optCssClass === 'undefined') {\n var registeredClass = findRegisteredClass_(jsClass);\n if (registeredClass) {\n optCssClass = registeredClass.cssClass;\n }\n }\n\n var elements = document.querySelectorAll('.' + optCssClass);\n for (var n = 0; n < elements.length; n++) {\n upgradeElementInternal(elements[n], jsClass);\n }\n }\n }\n\n /**\n * Upgrades a specific element rather than all in the DOM.\n *\n * @param {!Element} element The element we wish to upgrade.\n * @param {string=} optJsClass Optional name of the class we want to upgrade\n * the element to.\n */\n function upgradeElementInternal(element, optJsClass) {\n // Verify argument type.\n if (!(typeof element === 'object' && element instanceof Element)) {\n throw new Error('Invalid argument provided to upgrade MDL element.');\n }\n // Allow upgrade to be canceled by canceling emitted event.\n var upgradingEv = createEvent_('mdl-componentupgrading', true, true);\n element.dispatchEvent(upgradingEv);\n if (upgradingEv.defaultPrevented) {\n return;\n }\n\n var upgradedList = getUpgradedListOfElement_(element);\n var classesToUpgrade = [];\n // If jsClass is not provided scan the registered components to find the\n // ones matching the element's CSS classList.\n if (!optJsClass) {\n var classList = element.classList;\n registeredComponents_.forEach(function(component) {\n // Match CSS & Not to be upgraded & Not upgraded.\n if (classList.contains(component.cssClass) &&\n classesToUpgrade.indexOf(component) === -1 &&\n !isElementUpgraded_(element, component.className)) {\n classesToUpgrade.push(component);\n }\n });\n } else if (!isElementUpgraded_(element, optJsClass)) {\n classesToUpgrade.push(findRegisteredClass_(optJsClass));\n }\n\n // Upgrade the element for each classes.\n for (var i = 0, n = classesToUpgrade.length, registeredClass; i < n; i++) {\n registeredClass = classesToUpgrade[i];\n if (registeredClass) {\n // Mark element as upgraded.\n upgradedList.push(registeredClass.className);\n element.setAttribute('data-upgraded', upgradedList.join(','));\n var instance = new registeredClass.classConstructor(element);\n instance[componentConfigProperty_] = registeredClass;\n createdComponents_.push(instance);\n // Call any callbacks the user has registered with this component type.\n for (var j = 0, m = registeredClass.callbacks.length; j < m; j++) {\n registeredClass.callbacks[j](element);\n }\n\n if (registeredClass.widget) {\n // Assign per element instance for control over API\n element[registeredClass.className] = instance;\n }\n } else {\n throw new Error(\n 'Unable to find a registered component for the given class.');\n }\n\n var upgradedEv = createEvent_('mdl-componentupgraded', true, false);\n element.dispatchEvent(upgradedEv);\n }\n }\n\n /**\n * Upgrades a specific list of elements rather than all in the DOM.\n *\n * @param {!Element|!Array|!NodeList|!HTMLCollection} elements\n * The elements we wish to upgrade.\n */\n function upgradeElementsInternal(elements) {\n if (!Array.isArray(elements)) {\n if (elements instanceof Element) {\n elements = [elements];\n } else {\n elements = Array.prototype.slice.call(elements);\n }\n }\n for (var i = 0, n = elements.length, element; i < n; i++) {\n element = elements[i];\n if (element instanceof HTMLElement) {\n upgradeElementInternal(element);\n if (element.children.length > 0) {\n upgradeElementsInternal(element.children);\n }\n }\n }\n }\n\n /**\n * Registers a class for future use and attempts to upgrade existing DOM.\n *\n * @param {componentHandler.ComponentConfigPublic} config\n */\n function registerInternal(config) {\n // In order to support both Closure-compiled and uncompiled code accessing\n // this method, we need to allow for both the dot and array syntax for\n // property access. You'll therefore see the `foo.bar || foo['bar']`\n // pattern repeated across this method.\n var widgetMissing = (typeof config.widget === 'undefined' &&\n typeof config['widget'] === 'undefined');\n var widget = true;\n\n if (!widgetMissing) {\n widget = config.widget || config['widget'];\n }\n\n var newConfig = /** @type {componentHandler.ComponentConfig} */ ({\n classConstructor: config.constructor || config['constructor'],\n className: config.classAsString || config['classAsString'],\n cssClass: config.cssClass || config['cssClass'],\n widget: widget,\n callbacks: []\n });\n\n registeredComponents_.forEach(function(item) {\n if (item.cssClass === newConfig.cssClass) {\n throw new Error('The provided cssClass has already been registered: ' + item.cssClass);\n }\n if (item.className === newConfig.className) {\n throw new Error('The provided className has already been registered');\n }\n });\n\n if (config.constructor.prototype\n .hasOwnProperty(componentConfigProperty_)) {\n throw new Error(\n 'MDL component classes must not have ' + componentConfigProperty_ +\n ' defined as a property.');\n }\n\n var found = findRegisteredClass_(config.classAsString, newConfig);\n\n if (!found) {\n registeredComponents_.push(newConfig);\n }\n }\n\n /**\n * Allows user to be alerted to any upgrades that are performed for a given\n * component type\n *\n * @param {string} jsClass The class name of the MDL component we wish\n * to hook into for any upgrades performed.\n * @param {function(!HTMLElement)} callback The function to call upon an\n * upgrade. This function should expect 1 parameter - the HTMLElement which\n * got upgraded.\n */\n function registerUpgradedCallbackInternal(jsClass, callback) {\n var regClass = findRegisteredClass_(jsClass);\n if (regClass) {\n regClass.callbacks.push(callback);\n }\n }\n\n /**\n * Upgrades all registered components found in the current DOM. This is\n * automatically called on window load.\n */\n function upgradeAllRegisteredInternal() {\n for (var n = 0; n < registeredComponents_.length; n++) {\n upgradeDomInternal(registeredComponents_[n].className);\n }\n }\n\n /**\n * Check the component for the downgrade method.\n * Execute if found.\n * Remove component from createdComponents list.\n *\n * @param {?componentHandler.Component} component\n */\n function deconstructComponentInternal(component) {\n if (component) {\n var componentIndex = createdComponents_.indexOf(component);\n createdComponents_.splice(componentIndex, 1);\n\n var upgrades = component.element_.getAttribute('data-upgraded').split(',');\n var componentPlace = upgrades.indexOf(component[componentConfigProperty_].classAsString);\n upgrades.splice(componentPlace, 1);\n component.element_.setAttribute('data-upgraded', upgrades.join(','));\n\n var ev = createEvent_('mdl-componentdowngraded', true, false);\n component.element_.dispatchEvent(ev);\n }\n }\n\n /**\n * Downgrade either a given node, an array of nodes, or a NodeList.\n *\n * @param {!Node|!Array|!NodeList} nodes\n */\n function downgradeNodesInternal(nodes) {\n /**\n * Auxiliary function to downgrade a single node.\n * @param {!Node} node the node to be downgraded\n */\n var downgradeNode = function(node) {\n createdComponents_.filter(function(item) {\n return item.element_ === node;\n }).forEach(deconstructComponentInternal);\n };\n if (nodes instanceof Array || nodes instanceof NodeList) {\n for (var n = 0; n < nodes.length; n++) {\n downgradeNode(nodes[n]);\n }\n } else if (nodes instanceof Node) {\n downgradeNode(nodes);\n } else {\n throw new Error('Invalid argument provided to downgrade MDL nodes.');\n }\n }\n\n // Now return the functions that should be made public with their publicly\n // facing names...\n return {\n upgradeDom: upgradeDomInternal,\n upgradeElement: upgradeElementInternal,\n upgradeElements: upgradeElementsInternal,\n upgradeAllRegistered: upgradeAllRegisteredInternal,\n registerUpgradedCallback: registerUpgradedCallbackInternal,\n register: registerInternal,\n downgradeElements: downgradeNodesInternal\n };\n})();\n\n/**\n * Describes the type of a registered component type managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n * constructor: Function,\n * classAsString: string,\n * cssClass: string,\n * widget: (string|boolean|undefined)\n * }}\n */\ncomponentHandler.ComponentConfigPublic; // jshint ignore:line\n\n/**\n * Describes the type of a registered component type managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n * constructor: !Function,\n * className: string,\n * cssClass: string,\n * widget: (string|boolean),\n * callbacks: !Array\n * }}\n */\ncomponentHandler.ComponentConfig; // jshint ignore:line\n\n/**\n * Created component (i.e., upgraded element) type as managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n * element_: !HTMLElement,\n * className: string,\n * classAsString: string,\n * cssClass: string,\n * widget: string\n * }}\n */\ncomponentHandler.Component; // jshint ignore:line\n\n// Export all symbols, for the benefit of Closure compiler.\n// No effect on uncompiled code.\ncomponentHandler['upgradeDom'] = componentHandler.upgradeDom;\ncomponentHandler['upgradeElement'] = componentHandler.upgradeElement;\ncomponentHandler['upgradeElements'] = componentHandler.upgradeElements;\ncomponentHandler['upgradeAllRegistered'] =\n componentHandler.upgradeAllRegistered;\ncomponentHandler['registerUpgradedCallback'] =\n componentHandler.registerUpgradedCallback;\ncomponentHandler['register'] = componentHandler.register;\ncomponentHandler['downgradeElements'] = componentHandler.downgradeElements;\nwindow.componentHandler = componentHandler;\nwindow['componentHandler'] = componentHandler;\n\nwindow.addEventListener('load', function() {\n 'use strict';\n\n /**\n * Performs a \"Cutting the mustard\" test. If the browser supports the features\n * tested, adds a mdl-js class to the element. It then upgrades all MDL\n * components requiring JavaScript.\n */\n if ('classList' in document.createElement('div') &&\n 'querySelector' in document &&\n 'addEventListener' in window && Array.prototype.forEach) {\n document.documentElement.classList.add('mdl-js');\n componentHandler.upgradeAllRegistered();\n } else {\n /**\n * Dummy function to avoid JS errors.\n */\n componentHandler.upgradeElement = function() {};\n /**\n * Dummy function to avoid JS errors.\n */\n componentHandler.register = function() {};\n }\n});\n","// Source: https://github.com/darius/requestAnimationFrame/blob/master/requestAnimationFrame.js\n// Adapted from https://gist.github.com/paulirish/1579671 which derived from\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n// requestAnimationFrame polyfill by Erik Möller.\n// Fixes from Paul Irish, Tino Zijdel, Andrew Mao, Klemen Slavič, Darius Bacon\n// MIT license\nif (!Date.now) {\n /**\n * Date.now polyfill.\n * @return {number} the current Date\n */\n Date.now = function () {\n return new Date().getTime();\n };\n Date['now'] = Date.now;\n}\nvar vendors = [\n 'webkit',\n 'moz'\n];\nfor (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) {\n var vp = vendors[i];\n window.requestAnimationFrame = window[vp + 'RequestAnimationFrame'];\n window.cancelAnimationFrame = window[vp + 'CancelAnimationFrame'] || window[vp + 'CancelRequestAnimationFrame'];\n window['requestAnimationFrame'] = window.requestAnimationFrame;\n window['cancelAnimationFrame'] = window.cancelAnimationFrame;\n}\nif (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) || !window.requestAnimationFrame || !window.cancelAnimationFrame) {\n var lastTime = 0;\n /**\n * requestAnimationFrame polyfill.\n * @param {!Function} callback the callback function.\n */\n window.requestAnimationFrame = function (callback) {\n var now = Date.now();\n var nextTime = Math.max(lastTime + 16, now);\n return setTimeout(function () {\n callback(lastTime = nextTime);\n }, nextTime - now);\n };\n window.cancelAnimationFrame = clearTimeout;\n window['requestAnimationFrame'] = window.requestAnimationFrame;\n window['cancelAnimationFrame'] = window.cancelAnimationFrame;\n}","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Button MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialButton = function MaterialButton(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialButton'] = MaterialButton;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialButton.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialButton.prototype.CssClasses_ = {\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_CONTAINER: 'mdl-button__ripple-container',\n RIPPLE: 'mdl-ripple'\n};\n/**\n * Handle blur of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialButton.prototype.blurHandler_ = function (event) {\n if (event) {\n this.element_.blur();\n }\n};\n// Public methods.\n/**\n * Disable button.\n *\n * @public\n */\nMaterialButton.prototype.disable = function () {\n this.element_.disabled = true;\n};\nMaterialButton.prototype['disable'] = MaterialButton.prototype.disable;\n/**\n * Enable button.\n *\n * @public\n */\nMaterialButton.prototype.enable = function () {\n this.element_.disabled = false;\n};\nMaterialButton.prototype['enable'] = MaterialButton.prototype.enable;\n/**\n * Initialize element.\n */\nMaterialButton.prototype.init = function () {\n if (this.element_) {\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleElement_ = document.createElement('span');\n this.rippleElement_.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(this.rippleElement_);\n this.boundRippleBlurHandler = this.blurHandler_.bind(this);\n this.rippleElement_.addEventListener('mouseup', this.boundRippleBlurHandler);\n this.element_.appendChild(rippleContainer);\n }\n this.boundButtonBlurHandler = this.blurHandler_.bind(this);\n this.element_.addEventListener('mouseup', this.boundButtonBlurHandler);\n this.element_.addEventListener('mouseleave', this.boundButtonBlurHandler);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialButton,\n classAsString: 'MaterialButton',\n cssClass: 'mdl-js-button',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Checkbox MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialCheckbox = function MaterialCheckbox(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialCheckbox'] = MaterialCheckbox;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialCheckbox.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialCheckbox.prototype.CssClasses_ = {\n INPUT: 'mdl-checkbox__input',\n BOX_OUTLINE: 'mdl-checkbox__box-outline',\n FOCUS_HELPER: 'mdl-checkbox__focus-helper',\n TICK_OUTLINE: 'mdl-checkbox__tick-outline',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-checkbox__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onChange_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onMouseUp_ = function (event) {\n this.blur_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialCheckbox.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialCheckbox.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the inputs toggle state and update display.\n *\n * @public\n */\nMaterialCheckbox.prototype.checkToggleState = function () {\n if (this.inputElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialCheckbox.prototype['checkToggleState'] = MaterialCheckbox.prototype.checkToggleState;\n/**\n * Check the inputs disabled state and update display.\n *\n * @public\n */\nMaterialCheckbox.prototype.checkDisabled = function () {\n if (this.inputElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialCheckbox.prototype['checkDisabled'] = MaterialCheckbox.prototype.checkDisabled;\n/**\n * Disable checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.disable = function () {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['disable'] = MaterialCheckbox.prototype.disable;\n/**\n * Enable checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.enable = function () {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['enable'] = MaterialCheckbox.prototype.enable;\n/**\n * Check checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.check = function () {\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['check'] = MaterialCheckbox.prototype.check;\n/**\n * Uncheck checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.uncheck = function () {\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['uncheck'] = MaterialCheckbox.prototype.uncheck;\n/**\n * Initialize element.\n */\nMaterialCheckbox.prototype.init = function () {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n var boxOutline = document.createElement('span');\n boxOutline.classList.add(this.CssClasses_.BOX_OUTLINE);\n var tickContainer = document.createElement('span');\n tickContainer.classList.add(this.CssClasses_.FOCUS_HELPER);\n var tickOutline = document.createElement('span');\n tickOutline.classList.add(this.CssClasses_.TICK_OUTLINE);\n boxOutline.appendChild(tickOutline);\n this.element_.appendChild(tickContainer);\n this.element_.appendChild(boxOutline);\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n this.boundRippleMouseUp = this.onMouseUp_.bind(this);\n this.rippleContainerElement_.addEventListener('mouseup', this.boundRippleMouseUp);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n this.boundInputOnChange = this.onChange_.bind(this);\n this.boundInputOnFocus = this.onFocus_.bind(this);\n this.boundInputOnBlur = this.onBlur_.bind(this);\n this.boundElementMouseUp = this.onMouseUp_.bind(this);\n this.inputElement_.addEventListener('change', this.boundInputOnChange);\n this.inputElement_.addEventListener('focus', this.boundInputOnFocus);\n this.inputElement_.addEventListener('blur', this.boundInputOnBlur);\n this.element_.addEventListener('mouseup', this.boundElementMouseUp);\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialCheckbox,\n classAsString: 'MaterialCheckbox',\n cssClass: 'mdl-js-checkbox',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for icon toggle MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialIconToggle = function MaterialIconToggle(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialIconToggle'] = MaterialIconToggle;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialIconToggle.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialIconToggle.prototype.CssClasses_ = {\n INPUT: 'mdl-icon-toggle__input',\n JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-icon-toggle__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onChange_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onMouseUp_ = function (event) {\n this.blur_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialIconToggle.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialIconToggle.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the inputs toggle state and update display.\n *\n * @public\n */\nMaterialIconToggle.prototype.checkToggleState = function () {\n if (this.inputElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialIconToggle.prototype['checkToggleState'] = MaterialIconToggle.prototype.checkToggleState;\n/**\n * Check the inputs disabled state and update display.\n *\n * @public\n */\nMaterialIconToggle.prototype.checkDisabled = function () {\n if (this.inputElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialIconToggle.prototype['checkDisabled'] = MaterialIconToggle.prototype.checkDisabled;\n/**\n * Disable icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.disable = function () {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['disable'] = MaterialIconToggle.prototype.disable;\n/**\n * Enable icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.enable = function () {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['enable'] = MaterialIconToggle.prototype.enable;\n/**\n * Check icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.check = function () {\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['check'] = MaterialIconToggle.prototype.check;\n/**\n * Uncheck icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.uncheck = function () {\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['uncheck'] = MaterialIconToggle.prototype.uncheck;\n/**\n * Initialize element.\n */\nMaterialIconToggle.prototype.init = function () {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n if (this.element_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleContainerElement_.classList.add(this.CssClasses_.JS_RIPPLE_EFFECT);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n this.boundRippleMouseUp = this.onMouseUp_.bind(this);\n this.rippleContainerElement_.addEventListener('mouseup', this.boundRippleMouseUp);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n this.boundInputOnChange = this.onChange_.bind(this);\n this.boundInputOnFocus = this.onFocus_.bind(this);\n this.boundInputOnBlur = this.onBlur_.bind(this);\n this.boundElementOnMouseUp = this.onMouseUp_.bind(this);\n this.inputElement_.addEventListener('change', this.boundInputOnChange);\n this.inputElement_.addEventListener('focus', this.boundInputOnFocus);\n this.inputElement_.addEventListener('blur', this.boundInputOnBlur);\n this.element_.addEventListener('mouseup', this.boundElementOnMouseUp);\n this.updateClasses_();\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialIconToggle,\n classAsString: 'MaterialIconToggle',\n cssClass: 'mdl-js-icon-toggle',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for dropdown MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialMenu = function MaterialMenu(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialMenu'] = MaterialMenu;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialMenu.prototype.Constant_ = {\n // Total duration of the menu animation.\n TRANSITION_DURATION_SECONDS: 0.3,\n // The fraction of the total duration we want to use for menu item animations.\n TRANSITION_DURATION_FRACTION: 0.8,\n // How long the menu stays open after choosing an option (so the user can see\n // the ripple).\n CLOSE_TIMEOUT: 150\n};\n/**\n * Keycodes, for code readability.\n *\n * @enum {number}\n * @private\n */\nMaterialMenu.prototype.Keycodes_ = {\n ENTER: 13,\n ESCAPE: 27,\n SPACE: 32,\n UP_ARROW: 38,\n DOWN_ARROW: 40\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialMenu.prototype.CssClasses_ = {\n CONTAINER: 'mdl-menu__container',\n OUTLINE: 'mdl-menu__outline',\n ITEM: 'mdl-menu__item',\n ITEM_RIPPLE_CONTAINER: 'mdl-menu__item-ripple-container',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE: 'mdl-ripple',\n // Statuses\n IS_UPGRADED: 'is-upgraded',\n IS_VISIBLE: 'is-visible',\n IS_ANIMATING: 'is-animating',\n // Alignment options\n BOTTOM_LEFT: 'mdl-menu--bottom-left',\n // This is the default.\n BOTTOM_RIGHT: 'mdl-menu--bottom-right',\n TOP_LEFT: 'mdl-menu--top-left',\n TOP_RIGHT: 'mdl-menu--top-right',\n UNALIGNED: 'mdl-menu--unaligned'\n};\n/**\n * Initialize element.\n */\nMaterialMenu.prototype.init = function () {\n if (this.element_) {\n // Create container for the menu.\n var container = document.createElement('div');\n container.classList.add(this.CssClasses_.CONTAINER);\n this.element_.parentElement.insertBefore(container, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n container.appendChild(this.element_);\n this.container_ = container;\n // Create outline for the menu (shadow and background).\n var outline = document.createElement('div');\n outline.classList.add(this.CssClasses_.OUTLINE);\n this.outline_ = outline;\n container.insertBefore(outline, this.element_);\n // Find the \"for\" element and bind events to it.\n var forElId = this.element_.getAttribute('for') || this.element_.getAttribute('data-mdl-for');\n var forEl = null;\n if (forElId) {\n forEl = document.getElementById(forElId);\n if (forEl) {\n this.forElement_ = forEl;\n forEl.addEventListener('click', this.handleForClick_.bind(this));\n forEl.addEventListener('keydown', this.handleForKeyboardEvent_.bind(this));\n }\n }\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n this.boundItemKeydown_ = this.handleItemKeyboardEvent_.bind(this);\n this.boundItemClick_ = this.handleItemClick_.bind(this);\n for (var i = 0; i < items.length; i++) {\n // Add a listener to each menu item.\n items[i].addEventListener('click', this.boundItemClick_);\n // Add a tab index to each menu item.\n items[i].tabIndex = '-1';\n // Add a keyboard listener to each menu item.\n items[i].addEventListener('keydown', this.boundItemKeydown_);\n }\n // Add ripple classes to each item, if the user has enabled ripples.\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n for (i = 0; i < items.length; i++) {\n var item = items[i];\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.ITEM_RIPPLE_CONTAINER);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n item.appendChild(rippleContainer);\n item.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n }\n }\n // Copy alignment classes to the container, so the outline can use them.\n if (this.element_.classList.contains(this.CssClasses_.BOTTOM_LEFT)) {\n this.outline_.classList.add(this.CssClasses_.BOTTOM_LEFT);\n }\n if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n this.outline_.classList.add(this.CssClasses_.BOTTOM_RIGHT);\n }\n if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n this.outline_.classList.add(this.CssClasses_.TOP_LEFT);\n }\n if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n this.outline_.classList.add(this.CssClasses_.TOP_RIGHT);\n }\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n this.outline_.classList.add(this.CssClasses_.UNALIGNED);\n }\n container.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n/**\n * Handles a click on the \"for\" element, by positioning the menu and then\n * toggling it.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleForClick_ = function (evt) {\n if (this.element_ && this.forElement_) {\n var rect = this.forElement_.getBoundingClientRect();\n var forRect = this.forElement_.parentElement.getBoundingClientRect();\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n } else if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n // Position below the \"for\" element, aligned to its right.\n this.container_.style.right = forRect.right - rect.right + 'px';\n this.container_.style.top = this.forElement_.offsetTop + this.forElement_.offsetHeight + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n // Position above the \"for\" element, aligned to its left.\n this.container_.style.left = this.forElement_.offsetLeft + 'px';\n this.container_.style.bottom = forRect.bottom - rect.top + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n // Position above the \"for\" element, aligned to its right.\n this.container_.style.right = forRect.right - rect.right + 'px';\n this.container_.style.bottom = forRect.bottom - rect.top + 'px';\n } else {\n // Default: position below the \"for\" element, aligned to its left.\n this.container_.style.left = this.forElement_.offsetLeft + 'px';\n this.container_.style.top = this.forElement_.offsetTop + this.forElement_.offsetHeight + 'px';\n }\n }\n this.toggle(evt);\n};\n/**\n * Handles a keyboard event on the \"for\" element.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleForKeyboardEvent_ = function (evt) {\n if (this.element_ && this.container_ && this.forElement_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM + ':not([disabled])');\n if (items && items.length > 0 && this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n if (evt.keyCode === this.Keycodes_.UP_ARROW) {\n evt.preventDefault();\n items[items.length - 1].focus();\n } else if (evt.keyCode === this.Keycodes_.DOWN_ARROW) {\n evt.preventDefault();\n items[0].focus();\n }\n }\n }\n};\n/**\n * Handles a keyboard event on an item.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleItemKeyboardEvent_ = function (evt) {\n if (this.element_ && this.container_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM + ':not([disabled])');\n if (items && items.length > 0 && this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n var currentIndex = Array.prototype.slice.call(items).indexOf(evt.target);\n if (evt.keyCode === this.Keycodes_.UP_ARROW) {\n evt.preventDefault();\n if (currentIndex > 0) {\n items[currentIndex - 1].focus();\n } else {\n items[items.length - 1].focus();\n }\n } else if (evt.keyCode === this.Keycodes_.DOWN_ARROW) {\n evt.preventDefault();\n if (items.length > currentIndex + 1) {\n items[currentIndex + 1].focus();\n } else {\n items[0].focus();\n }\n } else if (evt.keyCode === this.Keycodes_.SPACE || evt.keyCode === this.Keycodes_.ENTER) {\n evt.preventDefault();\n // Send mousedown and mouseup to trigger ripple.\n var e = new MouseEvent('mousedown');\n evt.target.dispatchEvent(e);\n e = new MouseEvent('mouseup');\n evt.target.dispatchEvent(e);\n // Send click.\n evt.target.click();\n } else if (evt.keyCode === this.Keycodes_.ESCAPE) {\n evt.preventDefault();\n this.hide();\n }\n }\n }\n};\n/**\n * Handles a click event on an item.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleItemClick_ = function (evt) {\n if (evt.target.hasAttribute('disabled')) {\n evt.stopPropagation();\n } else {\n // Wait some time before closing menu, so the user can see the ripple.\n this.closing_ = true;\n window.setTimeout(function (evt) {\n this.hide();\n this.closing_ = false;\n }.bind(this), this.Constant_.CLOSE_TIMEOUT);\n }\n};\n/**\n * Calculates the initial clip (for opening the menu) or final clip (for closing\n * it), and applies it. This allows us to animate from or to the correct point,\n * that is, the point it's aligned to in the \"for\" element.\n *\n * @param {number} height Height of the clip rectangle\n * @param {number} width Width of the clip rectangle\n * @private\n */\nMaterialMenu.prototype.applyClip_ = function (height, width) {\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n // Do not clip.\n this.element_.style.clip = '';\n } else if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n // Clip to the top right corner of the menu.\n this.element_.style.clip = 'rect(0 ' + width + 'px ' + '0 ' + width + 'px)';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n // Clip to the bottom left corner of the menu.\n this.element_.style.clip = 'rect(' + height + 'px 0 ' + height + 'px 0)';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n // Clip to the bottom right corner of the menu.\n this.element_.style.clip = 'rect(' + height + 'px ' + width + 'px ' + height + 'px ' + width + 'px)';\n } else {\n // Default: do not clip (same as clipping to the top left corner).\n this.element_.style.clip = '';\n }\n};\n/**\n * Cleanup function to remove animation listeners.\n *\n * @param {Event} evt\n * @private\n */\nMaterialMenu.prototype.removeAnimationEndListener_ = function (evt) {\n evt.target.classList.remove(MaterialMenu.prototype.CssClasses_.IS_ANIMATING);\n};\n/**\n * Adds an event listener to clean up after the animation ends.\n *\n * @private\n */\nMaterialMenu.prototype.addAnimationEndListener_ = function () {\n this.element_.addEventListener('transitionend', this.removeAnimationEndListener_);\n this.element_.addEventListener('webkitTransitionEnd', this.removeAnimationEndListener_);\n};\n/**\n * Displays the menu.\n *\n * @public\n */\nMaterialMenu.prototype.show = function (evt) {\n if (this.element_ && this.container_ && this.outline_) {\n // Measure the inner element.\n var height = this.element_.getBoundingClientRect().height;\n var width = this.element_.getBoundingClientRect().width;\n // Apply the inner element's size to the container and outline.\n this.container_.style.width = width + 'px';\n this.container_.style.height = height + 'px';\n this.outline_.style.width = width + 'px';\n this.outline_.style.height = height + 'px';\n var transitionDuration = this.Constant_.TRANSITION_DURATION_SECONDS * this.Constant_.TRANSITION_DURATION_FRACTION;\n // Calculate transition delays for individual menu items, so that they fade\n // in one at a time.\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n for (var i = 0; i < items.length; i++) {\n var itemDelay = null;\n if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT) || this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n itemDelay = (height - items[i].offsetTop - items[i].offsetHeight) / height * transitionDuration + 's';\n } else {\n itemDelay = items[i].offsetTop / height * transitionDuration + 's';\n }\n items[i].style.transitionDelay = itemDelay;\n }\n // Apply the initial clip to the text before we start animating.\n this.applyClip_(height, width);\n // Wait for the next frame, turn on animation, and apply the final clip.\n // Also make it visible. This triggers the transitions.\n window.requestAnimationFrame(function () {\n this.element_.classList.add(this.CssClasses_.IS_ANIMATING);\n this.element_.style.clip = 'rect(0 ' + width + 'px ' + height + 'px 0)';\n this.container_.classList.add(this.CssClasses_.IS_VISIBLE);\n }.bind(this));\n // Clean up after the animation is complete.\n this.addAnimationEndListener_();\n // Add a click listener to the document, to close the menu.\n var callback = function (e) {\n // Check to see if the document is processing the same event that\n // displayed the menu in the first place. If so, do nothing.\n // Also check to see if the menu is in the process of closing itself, and\n // do nothing in that case.\n // Also check if the clicked element is a menu item\n // if so, do nothing.\n if (e !== evt && !this.closing_ && e.target.parentNode !== this.element_) {\n document.removeEventListener('click', callback);\n this.hide();\n }\n }.bind(this);\n document.addEventListener('click', callback);\n }\n};\nMaterialMenu.prototype['show'] = MaterialMenu.prototype.show;\n/**\n * Hides the menu.\n *\n * @public\n */\nMaterialMenu.prototype.hide = function () {\n if (this.element_ && this.container_ && this.outline_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n // Remove all transition delays; menu items fade out concurrently.\n for (var i = 0; i < items.length; i++) {\n items[i].style.removeProperty('transition-delay');\n }\n // Measure the inner element.\n var rect = this.element_.getBoundingClientRect();\n var height = rect.height;\n var width = rect.width;\n // Turn on animation, and apply the final clip. Also make invisible.\n // This triggers the transitions.\n this.element_.classList.add(this.CssClasses_.IS_ANIMATING);\n this.applyClip_(height, width);\n this.container_.classList.remove(this.CssClasses_.IS_VISIBLE);\n // Clean up after the animation is complete.\n this.addAnimationEndListener_();\n }\n};\nMaterialMenu.prototype['hide'] = MaterialMenu.prototype.hide;\n/**\n * Displays or hides the menu, depending on current state.\n *\n * @public\n */\nMaterialMenu.prototype.toggle = function (evt) {\n if (this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n this.hide();\n } else {\n this.show(evt);\n }\n};\nMaterialMenu.prototype['toggle'] = MaterialMenu.prototype.toggle;\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialMenu,\n classAsString: 'MaterialMenu',\n cssClass: 'mdl-js-menu',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Progress MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialProgress = function MaterialProgress(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialProgress'] = MaterialProgress;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialProgress.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialProgress.prototype.CssClasses_ = { INDETERMINATE_CLASS: 'mdl-progress__indeterminate' };\n/**\n * Set the current progress of the progressbar.\n *\n * @param {number} p Percentage of the progress (0-100)\n * @public\n */\nMaterialProgress.prototype.setProgress = function (p) {\n if (this.element_.classList.contains(this.CssClasses_.INDETERMINATE_CLASS)) {\n return;\n }\n this.progressbar_.style.width = p + '%';\n};\nMaterialProgress.prototype['setProgress'] = MaterialProgress.prototype.setProgress;\n/**\n * Set the current progress of the buffer.\n *\n * @param {number} p Percentage of the buffer (0-100)\n * @public\n */\nMaterialProgress.prototype.setBuffer = function (p) {\n this.bufferbar_.style.width = p + '%';\n this.auxbar_.style.width = 100 - p + '%';\n};\nMaterialProgress.prototype['setBuffer'] = MaterialProgress.prototype.setBuffer;\n/**\n * Initialize element.\n */\nMaterialProgress.prototype.init = function () {\n if (this.element_) {\n var el = document.createElement('div');\n el.className = 'progressbar bar bar1';\n this.element_.appendChild(el);\n this.progressbar_ = el;\n el = document.createElement('div');\n el.className = 'bufferbar bar bar2';\n this.element_.appendChild(el);\n this.bufferbar_ = el;\n el = document.createElement('div');\n el.className = 'auxbar bar bar3';\n this.element_.appendChild(el);\n this.auxbar_ = el;\n this.progressbar_.style.width = '0%';\n this.bufferbar_.style.width = '100%';\n this.auxbar_.style.width = '0%';\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialProgress,\n classAsString: 'MaterialProgress',\n cssClass: 'mdl-js-progress',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Radio MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialRadio = function MaterialRadio(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialRadio'] = MaterialRadio;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialRadio.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialRadio.prototype.CssClasses_ = {\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked',\n IS_UPGRADED: 'is-upgraded',\n JS_RADIO: 'mdl-js-radio',\n RADIO_BTN: 'mdl-radio__button',\n RADIO_OUTER_CIRCLE: 'mdl-radio__outer-circle',\n RADIO_INNER_CIRCLE: 'mdl-radio__inner-circle',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-radio__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onChange_ = function (event) {\n // Since other radio buttons don't get change events, we need to look for\n // them to update their classes.\n var radios = document.getElementsByClassName(this.CssClasses_.JS_RADIO);\n for (var i = 0; i < radios.length; i++) {\n var button = radios[i].querySelector('.' + this.CssClasses_.RADIO_BTN);\n // Different name == different group, so no point updating those.\n if (button.getAttribute('name') === this.btnElement_.getAttribute('name')) {\n if (typeof radios[i]['MaterialRadio'] !== 'undefined') {\n radios[i]['MaterialRadio'].updateClasses_();\n }\n }\n }\n};\n/**\n * Handle focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onMouseup_ = function (event) {\n this.blur_();\n};\n/**\n * Update classes.\n *\n * @private\n */\nMaterialRadio.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialRadio.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.btnElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the components disabled state.\n *\n * @public\n */\nMaterialRadio.prototype.checkDisabled = function () {\n if (this.btnElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialRadio.prototype['checkDisabled'] = MaterialRadio.prototype.checkDisabled;\n/**\n * Check the components toggled state.\n *\n * @public\n */\nMaterialRadio.prototype.checkToggleState = function () {\n if (this.btnElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialRadio.prototype['checkToggleState'] = MaterialRadio.prototype.checkToggleState;\n/**\n * Disable radio.\n *\n * @public\n */\nMaterialRadio.prototype.disable = function () {\n this.btnElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialRadio.prototype['disable'] = MaterialRadio.prototype.disable;\n/**\n * Enable radio.\n *\n * @public\n */\nMaterialRadio.prototype.enable = function () {\n this.btnElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialRadio.prototype['enable'] = MaterialRadio.prototype.enable;\n/**\n * Check radio.\n *\n * @public\n */\nMaterialRadio.prototype.check = function () {\n this.btnElement_.checked = true;\n this.onChange_(null);\n};\nMaterialRadio.prototype['check'] = MaterialRadio.prototype.check;\n/**\n * Uncheck radio.\n *\n * @public\n */\nMaterialRadio.prototype.uncheck = function () {\n this.btnElement_.checked = false;\n this.onChange_(null);\n};\nMaterialRadio.prototype['uncheck'] = MaterialRadio.prototype.uncheck;\n/**\n * Initialize element.\n */\nMaterialRadio.prototype.init = function () {\n if (this.element_) {\n this.btnElement_ = this.element_.querySelector('.' + this.CssClasses_.RADIO_BTN);\n this.boundChangeHandler_ = this.onChange_.bind(this);\n this.boundFocusHandler_ = this.onChange_.bind(this);\n this.boundBlurHandler_ = this.onBlur_.bind(this);\n this.boundMouseUpHandler_ = this.onMouseup_.bind(this);\n var outerCircle = document.createElement('span');\n outerCircle.classList.add(this.CssClasses_.RADIO_OUTER_CIRCLE);\n var innerCircle = document.createElement('span');\n innerCircle.classList.add(this.CssClasses_.RADIO_INNER_CIRCLE);\n this.element_.appendChild(outerCircle);\n this.element_.appendChild(innerCircle);\n var rippleContainer;\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_CENTER);\n rippleContainer.addEventListener('mouseup', this.boundMouseUpHandler_);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n this.element_.appendChild(rippleContainer);\n }\n this.btnElement_.addEventListener('change', this.boundChangeHandler_);\n this.btnElement_.addEventListener('focus', this.boundFocusHandler_);\n this.btnElement_.addEventListener('blur', this.boundBlurHandler_);\n this.element_.addEventListener('mouseup', this.boundMouseUpHandler_);\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialRadio,\n classAsString: 'MaterialRadio',\n cssClass: 'mdl-js-radio',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Slider MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialSlider = function MaterialSlider(element) {\n this.element_ = element;\n // Browser feature detection.\n this.isIE_ = window.navigator.msPointerEnabled;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialSlider'] = MaterialSlider;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSlider.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSlider.prototype.CssClasses_ = {\n IE_CONTAINER: 'mdl-slider__ie-container',\n SLIDER_CONTAINER: 'mdl-slider__container',\n BACKGROUND_FLEX: 'mdl-slider__background-flex',\n BACKGROUND_LOWER: 'mdl-slider__background-lower',\n BACKGROUND_UPPER: 'mdl-slider__background-upper',\n IS_LOWEST_VALUE: 'is-lowest-value',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Handle input on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onInput_ = function (event) {\n this.updateValueStyles_();\n};\n/**\n * Handle change on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onChange_ = function (event) {\n this.updateValueStyles_();\n};\n/**\n * Handle mouseup on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onMouseUp_ = function (event) {\n event.target.blur();\n};\n/**\n * Handle mousedown on container element.\n * This handler is purpose is to not require the use to click\n * exactly on the 2px slider element, as FireFox seems to be very\n * strict about this.\n *\n * @param {Event} event The event that fired.\n * @private\n * @suppress {missingProperties}\n */\nMaterialSlider.prototype.onContainerMouseDown_ = function (event) {\n // If this click is not on the parent element (but rather some child)\n // ignore. It may still bubble up.\n if (event.target !== this.element_.parentElement) {\n return;\n }\n // Discard the original event and create a new event that\n // is on the slider element.\n event.preventDefault();\n var newEvent = new MouseEvent('mousedown', {\n target: event.target,\n buttons: event.buttons,\n clientX: event.clientX,\n clientY: this.element_.getBoundingClientRect().y\n });\n this.element_.dispatchEvent(newEvent);\n};\n/**\n * Handle updating of values.\n *\n * @private\n */\nMaterialSlider.prototype.updateValueStyles_ = function () {\n // Calculate and apply percentages to div structure behind slider.\n var fraction = (this.element_.value - this.element_.min) / (this.element_.max - this.element_.min);\n if (fraction === 0) {\n this.element_.classList.add(this.CssClasses_.IS_LOWEST_VALUE);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_LOWEST_VALUE);\n }\n if (!this.isIE_) {\n this.backgroundLower_.style.flex = fraction;\n this.backgroundLower_.style.webkitFlex = fraction;\n this.backgroundUpper_.style.flex = 1 - fraction;\n this.backgroundUpper_.style.webkitFlex = 1 - fraction;\n }\n};\n// Public methods.\n/**\n * Disable slider.\n *\n * @public\n */\nMaterialSlider.prototype.disable = function () {\n this.element_.disabled = true;\n};\nMaterialSlider.prototype['disable'] = MaterialSlider.prototype.disable;\n/**\n * Enable slider.\n *\n * @public\n */\nMaterialSlider.prototype.enable = function () {\n this.element_.disabled = false;\n};\nMaterialSlider.prototype['enable'] = MaterialSlider.prototype.enable;\n/**\n * Update slider value.\n *\n * @param {number} value The value to which to set the control (optional).\n * @public\n */\nMaterialSlider.prototype.change = function (value) {\n if (typeof value !== 'undefined') {\n this.element_.value = value;\n }\n this.updateValueStyles_();\n};\nMaterialSlider.prototype['change'] = MaterialSlider.prototype.change;\n/**\n * Initialize element.\n */\nMaterialSlider.prototype.init = function () {\n if (this.element_) {\n if (this.isIE_) {\n // Since we need to specify a very large height in IE due to\n // implementation limitations, we add a parent here that trims it down to\n // a reasonable size.\n var containerIE = document.createElement('div');\n containerIE.classList.add(this.CssClasses_.IE_CONTAINER);\n this.element_.parentElement.insertBefore(containerIE, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n containerIE.appendChild(this.element_);\n } else {\n // For non-IE browsers, we need a div structure that sits behind the\n // slider and allows us to style the left and right sides of it with\n // different colors.\n var container = document.createElement('div');\n container.classList.add(this.CssClasses_.SLIDER_CONTAINER);\n this.element_.parentElement.insertBefore(container, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n container.appendChild(this.element_);\n var backgroundFlex = document.createElement('div');\n backgroundFlex.classList.add(this.CssClasses_.BACKGROUND_FLEX);\n container.appendChild(backgroundFlex);\n this.backgroundLower_ = document.createElement('div');\n this.backgroundLower_.classList.add(this.CssClasses_.BACKGROUND_LOWER);\n backgroundFlex.appendChild(this.backgroundLower_);\n this.backgroundUpper_ = document.createElement('div');\n this.backgroundUpper_.classList.add(this.CssClasses_.BACKGROUND_UPPER);\n backgroundFlex.appendChild(this.backgroundUpper_);\n }\n this.boundInputHandler = this.onInput_.bind(this);\n this.boundChangeHandler = this.onChange_.bind(this);\n this.boundMouseUpHandler = this.onMouseUp_.bind(this);\n this.boundContainerMouseDownHandler = this.onContainerMouseDown_.bind(this);\n this.element_.addEventListener('input', this.boundInputHandler);\n this.element_.addEventListener('change', this.boundChangeHandler);\n this.element_.addEventListener('mouseup', this.boundMouseUpHandler);\n this.element_.parentElement.addEventListener('mousedown', this.boundContainerMouseDownHandler);\n this.updateValueStyles_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSlider,\n classAsString: 'MaterialSlider',\n cssClass: 'mdl-js-slider',\n widget: true\n});","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Snackbar MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialSnackbar = function MaterialSnackbar(element) {\n this.element_ = element;\n this.textElement_ = this.element_.querySelector('.' + this.cssClasses_.MESSAGE);\n this.actionElement_ = this.element_.querySelector('.' + this.cssClasses_.ACTION);\n if (!this.textElement_) {\n throw new Error('There must be a message element for a snackbar.');\n }\n if (!this.actionElement_) {\n throw new Error('There must be an action element for a snackbar.');\n }\n this.active = false;\n this.actionHandler_ = undefined;\n this.message_ = undefined;\n this.actionText_ = undefined;\n this.queuedNotifications_ = [];\n this.setActionHidden_(true);\n};\nwindow['MaterialSnackbar'] = MaterialSnackbar;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSnackbar.prototype.Constant_ = {\n // The duration of the snackbar show/hide animation, in ms.\n ANIMATION_LENGTH: 250\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSnackbar.prototype.cssClasses_ = {\n SNACKBAR: 'mdl-snackbar',\n MESSAGE: 'mdl-snackbar__text',\n ACTION: 'mdl-snackbar__action',\n ACTIVE: 'mdl-snackbar--active'\n};\n/**\n * Display the snackbar.\n *\n * @private\n */\nMaterialSnackbar.prototype.displaySnackbar_ = function () {\n this.element_.setAttribute('aria-hidden', 'true');\n if (this.actionHandler_) {\n this.actionElement_.textContent = this.actionText_;\n this.actionElement_.addEventListener('click', this.actionHandler_);\n this.setActionHidden_(false);\n }\n this.textElement_.textContent = this.message_;\n this.element_.classList.add(this.cssClasses_.ACTIVE);\n this.element_.setAttribute('aria-hidden', 'false');\n setTimeout(this.cleanup_.bind(this), this.timeout_);\n};\n/**\n * Show the snackbar.\n *\n * @param {Object} data The data for the notification.\n * @public\n */\nMaterialSnackbar.prototype.showSnackbar = function (data) {\n if (data === undefined) {\n throw new Error('Please provide a data object with at least a message to display.');\n }\n if (data['message'] === undefined) {\n throw new Error('Please provide a message to be displayed.');\n }\n if (data['actionHandler'] && !data['actionText']) {\n throw new Error('Please provide action text with the handler.');\n }\n if (this.active) {\n this.queuedNotifications_.push(data);\n } else {\n this.active = true;\n this.message_ = data['message'];\n if (data['timeout']) {\n this.timeout_ = data['timeout'];\n } else {\n this.timeout_ = 2750;\n }\n if (data['actionHandler']) {\n this.actionHandler_ = data['actionHandler'];\n }\n if (data['actionText']) {\n this.actionText_ = data['actionText'];\n }\n this.displaySnackbar_();\n }\n};\nMaterialSnackbar.prototype['showSnackbar'] = MaterialSnackbar.prototype.showSnackbar;\n/**\n * Check if the queue has items within it.\n * If it does, display the next entry.\n *\n * @private\n */\nMaterialSnackbar.prototype.checkQueue_ = function () {\n if (this.queuedNotifications_.length > 0) {\n this.showSnackbar(this.queuedNotifications_.shift());\n }\n};\n/**\n * Cleanup the snackbar event listeners and accessiblity attributes.\n *\n * @private\n */\nMaterialSnackbar.prototype.cleanup_ = function () {\n this.element_.classList.remove(this.cssClasses_.ACTIVE);\n setTimeout(function () {\n this.element_.setAttribute('aria-hidden', 'true');\n this.textElement_.textContent = '';\n if (!Boolean(this.actionElement_.getAttribute('aria-hidden'))) {\n this.setActionHidden_(true);\n this.actionElement_.textContent = '';\n this.actionElement_.removeEventListener('click', this.actionHandler_);\n }\n this.actionHandler_ = undefined;\n this.message_ = undefined;\n this.actionText_ = undefined;\n this.active = false;\n this.checkQueue_();\n }.bind(this), this.Constant_.ANIMATION_LENGTH);\n};\n/**\n * Set the action handler hidden state.\n *\n * @param {boolean} value\n * @private\n */\nMaterialSnackbar.prototype.setActionHidden_ = function (value) {\n if (value) {\n this.actionElement_.setAttribute('aria-hidden', 'true');\n } else {\n this.actionElement_.removeAttribute('aria-hidden');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSnackbar,\n classAsString: 'MaterialSnackbar',\n cssClass: 'mdl-js-snackbar',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Spinner MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n * @constructor\n */\nvar MaterialSpinner = function MaterialSpinner(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialSpinner'] = MaterialSpinner;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSpinner.prototype.Constant_ = { MDL_SPINNER_LAYER_COUNT: 4 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSpinner.prototype.CssClasses_ = {\n MDL_SPINNER_LAYER: 'mdl-spinner__layer',\n MDL_SPINNER_CIRCLE_CLIPPER: 'mdl-spinner__circle-clipper',\n MDL_SPINNER_CIRCLE: 'mdl-spinner__circle',\n MDL_SPINNER_GAP_PATCH: 'mdl-spinner__gap-patch',\n MDL_SPINNER_LEFT: 'mdl-spinner__left',\n MDL_SPINNER_RIGHT: 'mdl-spinner__right'\n};\n/**\n * Auxiliary method to create a spinner layer.\n *\n * @param {number} index Index of the layer to be created.\n * @public\n */\nMaterialSpinner.prototype.createLayer = function (index) {\n var layer = document.createElement('div');\n layer.classList.add(this.CssClasses_.MDL_SPINNER_LAYER);\n layer.classList.add(this.CssClasses_.MDL_SPINNER_LAYER + '-' + index);\n var leftClipper = document.createElement('div');\n leftClipper.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER);\n leftClipper.classList.add(this.CssClasses_.MDL_SPINNER_LEFT);\n var gapPatch = document.createElement('div');\n gapPatch.classList.add(this.CssClasses_.MDL_SPINNER_GAP_PATCH);\n var rightClipper = document.createElement('div');\n rightClipper.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER);\n rightClipper.classList.add(this.CssClasses_.MDL_SPINNER_RIGHT);\n var circleOwners = [\n leftClipper,\n gapPatch,\n rightClipper\n ];\n for (var i = 0; i < circleOwners.length; i++) {\n var circle = document.createElement('div');\n circle.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE);\n circleOwners[i].appendChild(circle);\n }\n layer.appendChild(leftClipper);\n layer.appendChild(gapPatch);\n layer.appendChild(rightClipper);\n this.element_.appendChild(layer);\n};\nMaterialSpinner.prototype['createLayer'] = MaterialSpinner.prototype.createLayer;\n/**\n * Stops the spinner animation.\n * Public method for users who need to stop the spinner for any reason.\n *\n * @public\n */\nMaterialSpinner.prototype.stop = function () {\n this.element_.classList.remove('is-active');\n};\nMaterialSpinner.prototype['stop'] = MaterialSpinner.prototype.stop;\n/**\n * Starts the spinner animation.\n * Public method for users who need to manually start the spinner for any reason\n * (instead of just adding the 'is-active' class to their markup).\n *\n * @public\n */\nMaterialSpinner.prototype.start = function () {\n this.element_.classList.add('is-active');\n};\nMaterialSpinner.prototype['start'] = MaterialSpinner.prototype.start;\n/**\n * Initialize element.\n */\nMaterialSpinner.prototype.init = function () {\n if (this.element_) {\n for (var i = 1; i <= this.Constant_.MDL_SPINNER_LAYER_COUNT; i++) {\n this.createLayer(i);\n }\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSpinner,\n classAsString: 'MaterialSpinner',\n cssClass: 'mdl-js-spinner',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Checkbox MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialSwitch = function MaterialSwitch(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialSwitch'] = MaterialSwitch;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSwitch.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSwitch.prototype.CssClasses_ = {\n INPUT: 'mdl-switch__input',\n TRACK: 'mdl-switch__track',\n THUMB: 'mdl-switch__thumb',\n FOCUS_HELPER: 'mdl-switch__focus-helper',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-switch__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onChange_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onMouseUp_ = function (event) {\n this.blur_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialSwitch.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialSwitch.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the components disabled state.\n *\n * @public\n */\nMaterialSwitch.prototype.checkDisabled = function () {\n if (this.inputElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialSwitch.prototype['checkDisabled'] = MaterialSwitch.prototype.checkDisabled;\n/**\n * Check the components toggled state.\n *\n * @public\n */\nMaterialSwitch.prototype.checkToggleState = function () {\n if (this.inputElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialSwitch.prototype['checkToggleState'] = MaterialSwitch.prototype.checkToggleState;\n/**\n * Disable switch.\n *\n * @public\n */\nMaterialSwitch.prototype.disable = function () {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['disable'] = MaterialSwitch.prototype.disable;\n/**\n * Enable switch.\n *\n * @public\n */\nMaterialSwitch.prototype.enable = function () {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['enable'] = MaterialSwitch.prototype.enable;\n/**\n * Activate switch.\n *\n * @public\n */\nMaterialSwitch.prototype.on = function () {\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['on'] = MaterialSwitch.prototype.on;\n/**\n * Deactivate switch.\n *\n * @public\n */\nMaterialSwitch.prototype.off = function () {\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['off'] = MaterialSwitch.prototype.off;\n/**\n * Initialize element.\n */\nMaterialSwitch.prototype.init = function () {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n var track = document.createElement('div');\n track.classList.add(this.CssClasses_.TRACK);\n var thumb = document.createElement('div');\n thumb.classList.add(this.CssClasses_.THUMB);\n var focusHelper = document.createElement('span');\n focusHelper.classList.add(this.CssClasses_.FOCUS_HELPER);\n thumb.appendChild(focusHelper);\n this.element_.appendChild(track);\n this.element_.appendChild(thumb);\n this.boundMouseUpHandler = this.onMouseUp_.bind(this);\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n this.rippleContainerElement_.addEventListener('mouseup', this.boundMouseUpHandler);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n this.boundChangeHandler = this.onChange_.bind(this);\n this.boundFocusHandler = this.onFocus_.bind(this);\n this.boundBlurHandler = this.onBlur_.bind(this);\n this.inputElement_.addEventListener('change', this.boundChangeHandler);\n this.inputElement_.addEventListener('focus', this.boundFocusHandler);\n this.inputElement_.addEventListener('blur', this.boundBlurHandler);\n this.element_.addEventListener('mouseup', this.boundMouseUpHandler);\n this.updateClasses_();\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSwitch,\n classAsString: 'MaterialSwitch',\n cssClass: 'mdl-js-switch',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Textfield MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialTextfield = function MaterialTextfield(element) {\n this.element_ = element;\n this.maxRows = this.Constant_.NO_MAX_ROWS;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialTextfield'] = MaterialTextfield;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialTextfield.prototype.Constant_ = {\n NO_MAX_ROWS: -1,\n MAX_ROWS_ATTRIBUTE: 'maxrows'\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialTextfield.prototype.CssClasses_ = {\n LABEL: 'mdl-textfield__label',\n INPUT: 'mdl-textfield__input',\n IS_DIRTY: 'is-dirty',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_INVALID: 'is-invalid',\n IS_UPGRADED: 'is-upgraded',\n HAS_PLACEHOLDER: 'has-placeholder'\n};\n/**\n * Handle input being entered.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onKeyDown_ = function (event) {\n var currentRowCount = event.target.value.split('\\n').length;\n if (event.keyCode === 13) {\n if (currentRowCount >= this.maxRows) {\n event.preventDefault();\n }\n }\n};\n/**\n * Handle focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle reset event from out side.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onReset_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialTextfield.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkValidity();\n this.checkDirty();\n this.checkFocus();\n};\n// Public methods.\n/**\n * Check the disabled state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkDisabled = function () {\n if (this.input_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialTextfield.prototype['checkDisabled'] = MaterialTextfield.prototype.checkDisabled;\n/**\n * Check the focus state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkFocus = function () {\n if (Boolean(this.element_.querySelector(':focus'))) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n }\n};\nMaterialTextfield.prototype['checkFocus'] = MaterialTextfield.prototype.checkFocus;\n/**\n * Check the validity state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkValidity = function () {\n if (this.input_.validity) {\n if (this.input_.validity.valid) {\n this.element_.classList.remove(this.CssClasses_.IS_INVALID);\n } else {\n this.element_.classList.add(this.CssClasses_.IS_INVALID);\n }\n }\n};\nMaterialTextfield.prototype['checkValidity'] = MaterialTextfield.prototype.checkValidity;\n/**\n * Check the dirty state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkDirty = function () {\n if (this.input_.value && this.input_.value.length > 0) {\n this.element_.classList.add(this.CssClasses_.IS_DIRTY);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DIRTY);\n }\n};\nMaterialTextfield.prototype['checkDirty'] = MaterialTextfield.prototype.checkDirty;\n/**\n * Disable text field.\n *\n * @public\n */\nMaterialTextfield.prototype.disable = function () {\n this.input_.disabled = true;\n this.updateClasses_();\n};\nMaterialTextfield.prototype['disable'] = MaterialTextfield.prototype.disable;\n/**\n * Enable text field.\n *\n * @public\n */\nMaterialTextfield.prototype.enable = function () {\n this.input_.disabled = false;\n this.updateClasses_();\n};\nMaterialTextfield.prototype['enable'] = MaterialTextfield.prototype.enable;\n/**\n * Update text field value.\n *\n * @param {string} value The value to which to set the control (optional).\n * @public\n */\nMaterialTextfield.prototype.change = function (value) {\n this.input_.value = value || '';\n this.updateClasses_();\n};\nMaterialTextfield.prototype['change'] = MaterialTextfield.prototype.change;\n/**\n * Initialize element.\n */\nMaterialTextfield.prototype.init = function () {\n if (this.element_) {\n this.label_ = this.element_.querySelector('.' + this.CssClasses_.LABEL);\n this.input_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n if (this.input_) {\n if (this.input_.hasAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE)) {\n this.maxRows = parseInt(this.input_.getAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE), 10);\n if (isNaN(this.maxRows)) {\n this.maxRows = this.Constant_.NO_MAX_ROWS;\n }\n }\n if (this.input_.hasAttribute('placeholder')) {\n this.element_.classList.add(this.CssClasses_.HAS_PLACEHOLDER);\n }\n this.boundUpdateClassesHandler = this.updateClasses_.bind(this);\n this.boundFocusHandler = this.onFocus_.bind(this);\n this.boundBlurHandler = this.onBlur_.bind(this);\n this.boundResetHandler = this.onReset_.bind(this);\n this.input_.addEventListener('input', this.boundUpdateClassesHandler);\n this.input_.addEventListener('focus', this.boundFocusHandler);\n this.input_.addEventListener('blur', this.boundBlurHandler);\n this.input_.addEventListener('reset', this.boundResetHandler);\n if (this.maxRows !== this.Constant_.NO_MAX_ROWS) {\n // TODO: This should handle pasting multi line text.\n // Currently doesn't.\n this.boundKeyDownHandler = this.onKeyDown_.bind(this);\n this.input_.addEventListener('keydown', this.boundKeyDownHandler);\n }\n var invalid = this.element_.classList.contains(this.CssClasses_.IS_INVALID);\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n if (invalid) {\n this.element_.classList.add(this.CssClasses_.IS_INVALID);\n }\n if (this.input_.hasAttribute('autofocus')) {\n this.element_.focus();\n this.checkFocus();\n }\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTextfield,\n classAsString: 'MaterialTextfield',\n cssClass: 'mdl-js-textfield',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Tooltip MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialTooltip = function MaterialTooltip(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialTooltip'] = MaterialTooltip;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialTooltip.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialTooltip.prototype.CssClasses_ = {\n IS_ACTIVE: 'is-active',\n BOTTOM: 'mdl-tooltip--bottom',\n LEFT: 'mdl-tooltip--left',\n RIGHT: 'mdl-tooltip--right',\n TOP: 'mdl-tooltip--top'\n};\n/**\n * Handle mouseenter for tooltip.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTooltip.prototype.handleMouseEnter_ = function (event) {\n var props = event.target.getBoundingClientRect();\n var left = props.left + props.width / 2;\n var top = props.top + props.height / 2;\n var marginLeft = -1 * (this.element_.offsetWidth / 2);\n var marginTop = -1 * (this.element_.offsetHeight / 2);\n if (this.element_.classList.contains(this.CssClasses_.LEFT) || this.element_.classList.contains(this.CssClasses_.RIGHT)) {\n left = props.width / 2;\n if (top + marginTop < 0) {\n this.element_.style.top = '0';\n this.element_.style.marginTop = '0';\n } else {\n this.element_.style.top = top + 'px';\n this.element_.style.marginTop = marginTop + 'px';\n }\n } else {\n if (left + marginLeft < 0) {\n this.element_.style.left = '0';\n this.element_.style.marginLeft = '0';\n } else {\n this.element_.style.left = left + 'px';\n this.element_.style.marginLeft = marginLeft + 'px';\n }\n }\n if (this.element_.classList.contains(this.CssClasses_.TOP)) {\n this.element_.style.top = props.top - this.element_.offsetHeight - 10 + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.RIGHT)) {\n this.element_.style.left = props.left + props.width + 10 + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.LEFT)) {\n this.element_.style.left = props.left - this.element_.offsetWidth - 10 + 'px';\n } else {\n this.element_.style.top = props.top + props.height + 10 + 'px';\n }\n this.element_.classList.add(this.CssClasses_.IS_ACTIVE);\n};\n/**\n * Hide tooltip on mouseleave or scroll\n *\n * @private\n */\nMaterialTooltip.prototype.hideTooltip_ = function () {\n this.element_.classList.remove(this.CssClasses_.IS_ACTIVE);\n};\n/**\n * Initialize element.\n */\nMaterialTooltip.prototype.init = function () {\n if (this.element_) {\n var forElId = this.element_.getAttribute('for') || this.element_.getAttribute('data-mdl-for');\n if (forElId) {\n this.forElement_ = document.getElementById(forElId);\n }\n if (this.forElement_) {\n // It's left here because it prevents accidental text selection on Android\n if (!this.forElement_.hasAttribute('tabindex')) {\n this.forElement_.setAttribute('tabindex', '0');\n }\n this.boundMouseEnterHandler = this.handleMouseEnter_.bind(this);\n this.boundMouseLeaveAndScrollHandler = this.hideTooltip_.bind(this);\n this.forElement_.addEventListener('mouseenter', this.boundMouseEnterHandler, false);\n this.forElement_.addEventListener('touchend', this.boundMouseEnterHandler, false);\n this.forElement_.addEventListener('mouseleave', this.boundMouseLeaveAndScrollHandler, false);\n window.addEventListener('scroll', this.boundMouseLeaveAndScrollHandler, true);\n window.addEventListener('touchstart', this.boundMouseLeaveAndScrollHandler);\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTooltip,\n classAsString: 'MaterialTooltip',\n cssClass: 'mdl-tooltip'\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Data Table Card MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {Element} element The element that will be upgraded.\n */\nvar MaterialDataTable = function MaterialDataTable(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialDataTable'] = MaterialDataTable;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialDataTable.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialDataTable.prototype.CssClasses_ = {\n DATA_TABLE: 'mdl-data-table',\n SELECTABLE: 'mdl-data-table--selectable',\n SELECT_ELEMENT: 'mdl-data-table__select',\n IS_SELECTED: 'is-selected',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Generates and returns a function that toggles the selection state of a\n * single row (or multiple rows).\n *\n * @param {Element} checkbox Checkbox that toggles the selection state.\n * @param {Element} row Row to toggle when checkbox changes.\n * @param {(Array|NodeList)=} opt_rows Rows to toggle when checkbox changes.\n * @private\n */\nMaterialDataTable.prototype.selectRow_ = function (checkbox, row, opt_rows) {\n if (row) {\n return function () {\n if (checkbox.checked) {\n row.classList.add(this.CssClasses_.IS_SELECTED);\n } else {\n row.classList.remove(this.CssClasses_.IS_SELECTED);\n }\n }.bind(this);\n }\n if (opt_rows) {\n return function () {\n var i;\n var el;\n if (checkbox.checked) {\n for (i = 0; i < opt_rows.length; i++) {\n el = opt_rows[i].querySelector('td').querySelector('.mdl-checkbox');\n el['MaterialCheckbox'].check();\n opt_rows[i].classList.add(this.CssClasses_.IS_SELECTED);\n }\n } else {\n for (i = 0; i < opt_rows.length; i++) {\n el = opt_rows[i].querySelector('td').querySelector('.mdl-checkbox');\n el['MaterialCheckbox'].uncheck();\n opt_rows[i].classList.remove(this.CssClasses_.IS_SELECTED);\n }\n }\n }.bind(this);\n }\n};\n/**\n * Creates a checkbox for a single or or multiple rows and hooks up the\n * event handling.\n *\n * @param {Element} row Row to toggle when checkbox changes.\n * @param {(Array|NodeList)=} opt_rows Rows to toggle when checkbox changes.\n * @private\n */\nMaterialDataTable.prototype.createCheckbox_ = function (row, opt_rows) {\n var label = document.createElement('label');\n var labelClasses = [\n 'mdl-checkbox',\n 'mdl-js-checkbox',\n 'mdl-js-ripple-effect',\n this.CssClasses_.SELECT_ELEMENT\n ];\n label.className = labelClasses.join(' ');\n var checkbox = document.createElement('input');\n checkbox.type = 'checkbox';\n checkbox.classList.add('mdl-checkbox__input');\n if (row) {\n checkbox.checked = row.classList.contains(this.CssClasses_.IS_SELECTED);\n checkbox.addEventListener('change', this.selectRow_(checkbox, row));\n } else if (opt_rows) {\n checkbox.addEventListener('change', this.selectRow_(checkbox, null, opt_rows));\n }\n label.appendChild(checkbox);\n componentHandler.upgradeElement(label, 'MaterialCheckbox');\n return label;\n};\n/**\n * Initialize element.\n */\nMaterialDataTable.prototype.init = function () {\n if (this.element_) {\n var firstHeader = this.element_.querySelector('th');\n var bodyRows = Array.prototype.slice.call(this.element_.querySelectorAll('tbody tr'));\n var footRows = Array.prototype.slice.call(this.element_.querySelectorAll('tfoot tr'));\n var rows = bodyRows.concat(footRows);\n if (this.element_.classList.contains(this.CssClasses_.SELECTABLE)) {\n var th = document.createElement('th');\n var headerCheckbox = this.createCheckbox_(null, rows);\n th.appendChild(headerCheckbox);\n firstHeader.parentElement.insertBefore(th, firstHeader);\n for (var i = 0; i < rows.length; i++) {\n var firstCell = rows[i].querySelector('td');\n if (firstCell) {\n var td = document.createElement('td');\n if (rows[i].parentNode.nodeName.toUpperCase() === 'TBODY') {\n var rowCheckbox = this.createCheckbox_(rows[i]);\n td.appendChild(rowCheckbox);\n }\n rows[i].insertBefore(td, firstCell);\n }\n }\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialDataTable,\n classAsString: 'MaterialDataTable',\n cssClass: 'mdl-js-data-table'\n});","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var core = module.exports = { version: '2.6.11' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","module.exports = false;\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","module.exports = require('./_shared')('native-function-to-string', Function.toString);\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar $toString = require('./_function-to-string');\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","exports.f = Object.getOwnPropertySymbols;\n","exports.f = {}.propertyIsEnumerable;\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","var $export = require('./_export');\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperties: require('./_object-dps') });\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./_classof');\nvar test = {};\ntest[require('./_wks')('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n require('./_redefine')(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = require('./_export');\n\n$export($export.P, 'Function', { bind: require('./_bind') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","'use strict';\nvar isObject = require('./_is-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar HAS_INSTANCE = require('./_wks')('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) require('./_object-dp').f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n} });\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n","var $parseInt = require('./_global').parseInt;\nvar $trim = require('./_string-trim').trim;\nvar ws = require('./_string-ws');\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n","var $parseFloat = require('./_global').parseFloat;\nvar $trim = require('./_string-trim').trim;\n\nmodule.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = require('./_descriptors') ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./_redefine')(global, NUMBER, $Number);\n}\n","var cof = require('./_cof');\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","'use strict';\nvar $export = require('./_export');\nvar toInteger = require('./_to-integer');\nvar aNumberValue = require('./_a-number-value');\nvar repeat = require('./_string-repeat');\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !require('./_fails')(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $fails = require('./_fails');\nvar aNumberValue = require('./_a-number-value');\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","'use strict';\n// 21.1.3.25 String.prototype.trim()\nrequire('./_string-trim')('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","module.exports = {};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","var $export = require('./_export');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n","'use strict';\n// B.2.3.2 String.prototype.anchor(name)\nrequire('./_string-html')('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});\n","'use strict';\n// B.2.3.3 String.prototype.big()\nrequire('./_string-html')('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});\n","'use strict';\n// B.2.3.4 String.prototype.blink()\nrequire('./_string-html')('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});\n","'use strict';\n// B.2.3.5 String.prototype.bold()\nrequire('./_string-html')('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});\n","'use strict';\n// B.2.3.6 String.prototype.fixed()\nrequire('./_string-html')('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n","'use strict';\n// B.2.3.7 String.prototype.fontcolor(color)\nrequire('./_string-html')('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});\n","'use strict';\n// B.2.3.8 String.prototype.fontsize(size)\nrequire('./_string-html')('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});\n","'use strict';\n// B.2.3.9 String.prototype.italics()\nrequire('./_string-html')('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});\n","'use strict';\n// B.2.3.10 String.prototype.link(url)\nrequire('./_string-html')('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n","'use strict';\n// B.2.3.11 String.prototype.small()\nrequire('./_string-html')('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});\n","'use strict';\n// B.2.3.12 String.prototype.strike()\nrequire('./_string-html')('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});\n","'use strict';\n// B.2.3.13 String.prototype.sub()\nrequire('./_string-html')('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});\n","'use strict';\n// B.2.3.14 String.prototype.sup()\nrequire('./_string-html')('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});\n","// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = require('./_export');\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\n\n$export($export.P + $export.F * require('./_fails')(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n","'use strict';\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = require('./_fails');\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n","// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = require('./_export');\nvar toISOString = require('./_date-to-iso-string');\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});\n","var DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n require('./_redefine')(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n","'use strict';\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};\n","var TO_PRIMITIVE = require('./_wks')('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) require('./_hide')(proto, TO_PRIMITIVE, require('./_date-to-primitive'));\n","// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = require('./_export');\n\n$export($export.S, 'Array', { isArray: require('./_is-array') });\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","'use strict';\nvar fails = require('./_fails');\n\nmodule.exports = function (method, arg) {\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call\n arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n });\n};\n","'use strict';\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (require('./_iobject') != Object || !require('./_strict-method')(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar html = require('./_html');\nvar cof = require('./_cof');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * require('./_fails')(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n for (; i < size; i++) cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar fails = require('./_fails');\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !require('./_strict-method')($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $forEach = require('./_array-methods')(0);\nvar STRICT = require('./_strict-method')([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $map = require('./_array-methods')(1);\n\n$export($export.P + $export.F * !require('./_strict-method')([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $filter = require('./_array-methods')(2);\n\n$export($export.P + $export.F * !require('./_strict-method')([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $some = require('./_array-methods')(3);\n\n$export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $every = require('./_array-methods')(4);\n\n$export($export.P + $export.F * !require('./_strict-method')([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments[1]);\n }\n});\n","var aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar toLength = require('./_to-length');\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $indexOf = require('./_array-includes')(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n return -1;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","require('./_set-species')('Array');\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","var global = require('./_global');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar dP = require('./_object-dp').f;\nvar gOPN = require('./_object-gopn').f;\nvar isRegExp = require('./_is-regexp');\nvar $flags = require('./_flags');\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () {\n re2[require('./_wks')('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');\n","'use strict';\n\nvar regexpFlags = require('./_flags');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar regexpExec = require('./_regexp-exec');\nrequire('./_export')({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nrequire('./es6.regexp.flags');\nvar anObject = require('./_an-object');\nvar $flags = require('./_flags');\nvar DESCRIPTORS = require('./_descriptors');\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n","'use strict';\nvar at = require('./_string-at')(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};\n","'use strict';\n\nvar classof = require('./_classof');\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n","'use strict';\nrequire('./es6.regexp.exec');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\nvar regexpExec = require('./_regexp-exec');\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar sameValue = require('./_same-value');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative($search, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\n\nvar isRegExp = require('./_is-regexp');\nvar anObject = require('./_an-object');\nvar speciesConstructor = require('./_species-constructor');\nvar advanceStringIndex = require('./_advance-string-index');\nvar toLength = require('./_to-length');\nvar callRegExpExec = require('./_regexp-exec-abstract');\nvar regexpExec = require('./_regexp-exec');\nvar fails = require('./_fails');\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar global = require('./_global');\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar validate = require('./_validate-collection');\nvar NATIVE_WEAK_MAP = require('./_validate-collection');\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < fin) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","var $export = require('./_export');\n$export($export.G + $export.W + $export.F * !require('./_typed').ABV, {\n DataView: require('./_typed-buffer').DataView\n});\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","'use strict';\n// 26.1.5 Reflect.enumerate(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar Enumerate = function (iterated) {\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = []; // keys\n var key;\n for (key in iterated) keys.push(key);\n};\nrequire('./_iter-create')(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n do {\n if (that._i >= keys.length) return { value: undefined, done: true };\n } while (!((key = keys[that._i++]) in that._t));\n return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar isArray = require('./_is-array');\nvar isObject = require('./_is-object');\nvar toLength = require('./_to-length');\nvar ctx = require('./_ctx');\nvar IS_CONCAT_SPREADABLE = require('./_wks')('isConcatSpreadable');\n\nfunction flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;\n var element, spreadable;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n spreadable = false;\n if (isObject(element)) {\n spreadable = element[IS_CONCAT_SPREADABLE];\n spreadable = spreadable !== undefined ? !!spreadable : isArray(element);\n }\n\n if (spreadable && depth > 0) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1fffffffffffff) throw TypeError();\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n}\n\nmodule.exports = flattenIntoArray;\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap\nvar $export = require('./_export');\nvar flattenIntoArray = require('./_flatten-into-array');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar aFunction = require('./_a-function');\nvar arraySpeciesCreate = require('./_array-species-create');\n\n$export($export.P, 'Array', {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen, A;\n aFunction(callbackfn);\n sourceLen = toLength(O.length);\n A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);\n return A;\n }\n});\n\nrequire('./_add-to-unscopables')('flatMap');\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatten\nvar $export = require('./_export');\nvar flattenIntoArray = require('./_flatten-into-array');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar arraySpeciesCreate = require('./_array-species-create');\n\n$export($export.P, 'Array', {\n flatten: function flatten(/* depthArg = 1 */) {\n var depthArg = arguments[0];\n var O = toObject(this);\n var sourceLen = toLength(O.length);\n var A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toInteger(depthArg));\n return A;\n }\n});\n\nrequire('./_add-to-unscopables')('flatten');\n","'use strict';\n// https://github.com/mathiasbynens/String.prototype.at\nvar $export = require('./_export');\nvar $at = require('./_string-at')(true);\n\n$export($export.P, 'String', {\n at: function at(pos) {\n return $at(this, pos);\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimLeft', function ($trim) {\n return function trimLeft() {\n return $trim(this, 1);\n };\n}, 'trimStart');\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimRight', function ($trim) {\n return function trimRight() {\n return $trim(this, 2);\n };\n}, 'trimEnd');\n","'use strict';\n// https://tc39.github.io/String.prototype.matchAll/\nvar $export = require('./_export');\nvar defined = require('./_defined');\nvar toLength = require('./_to-length');\nvar isRegExp = require('./_is-regexp');\nvar getFlags = require('./_flags');\nvar RegExpProto = RegExp.prototype;\n\nvar $RegExpStringIterator = function (regexp, string) {\n this._r = regexp;\n this._s = string;\n};\n\nrequire('./_iter-create')($RegExpStringIterator, 'RegExp String', function next() {\n var match = this._r.exec(this._s);\n return { value: match, done: match === null };\n});\n\n$export($export.P, 'String', {\n matchAll: function matchAll(regexp) {\n defined(this);\n if (!isRegExp(regexp)) throw TypeError(regexp + ' is not a regexp!');\n var S = String(this);\n var flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp);\n var rx = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags);\n rx.lastIndex = toLength(regexp.lastIndex);\n return new $RegExpStringIterator(rx, S);\n }\n});\n","require('./_wks-define')('asyncIterator');\n","require('./_wks-define')('observable');\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","var DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","'use strict';\n// Forced replacement prototype accessors methods\nmodule.exports = require('./_library') || !require('./_fails')(function () {\n var K = Math.random();\n // In FF throws only define methods\n // eslint-disable-next-line no-undef, no-useless-call\n __defineSetter__.call(null, K, function () { /* empty */ });\n delete require('./_global')[K];\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar aFunction = require('./_a-function');\nvar $defineProperty = require('./_object-dp');\n\n// B.2.2.2 Object.prototype.__defineGetter__(P, getter)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __defineGetter__: function __defineGetter__(P, getter) {\n $defineProperty.f(toObject(this), P, { get: aFunction(getter), enumerable: true, configurable: true });\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar aFunction = require('./_a-function');\nvar $defineProperty = require('./_object-dp');\n\n// B.2.2.3 Object.prototype.__defineSetter__(P, setter)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __defineSetter__: function __defineSetter__(P, setter) {\n $defineProperty.f(toObject(this), P, { set: aFunction(setter), enumerable: true, configurable: true });\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\nvar getPrototypeOf = require('./_object-gpo');\nvar getOwnPropertyDescriptor = require('./_object-gopd').f;\n\n// B.2.2.4 Object.prototype.__lookupGetter__(P)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __lookupGetter__: function __lookupGetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.get;\n } while (O = getPrototypeOf(O));\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\nvar getPrototypeOf = require('./_object-gpo');\nvar getOwnPropertyDescriptor = require('./_object-gopd').f;\n\n// B.2.2.5 Object.prototype.__lookupSetter__(P)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __lookupSetter__: function __lookupSetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.set;\n } while (O = getPrototypeOf(O));\n }\n});\n","var forOf = require('./_for-of');\n\nmodule.exports = function (iter, ITERATOR) {\n var result = [];\n forOf(iter, false, result.push, result, ITERATOR);\n return result;\n};\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar classof = require('./_classof');\nvar from = require('./_array-from-iterable');\nmodule.exports = function (NAME) {\n return function toJSON() {\n if (classof(this) != NAME) throw TypeError(NAME + \"#toJSON isn't generic\");\n return from(this);\n };\n};\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = require('./_export');\n\n$export($export.P + $export.R, 'Map', { toJSON: require('./_collection-to-json')('Map') });\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = require('./_export');\n\n$export($export.P + $export.R, 'Set', { toJSON: require('./_collection-to-json')('Set') });\n","'use strict';\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = require('./_export');\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { of: function of() {\n var length = arguments.length;\n var A = new Array(length);\n while (length--) A[length] = arguments[length];\n return new this(A);\n } });\n};\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-map.of\nrequire('./_set-collection-of')('Map');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of\nrequire('./_set-collection-of')('Set');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of\nrequire('./_set-collection-of')('WeakMap');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.of\nrequire('./_set-collection-of')('WeakSet');\n","'use strict';\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar ctx = require('./_ctx');\nvar forOf = require('./_for-of');\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {\n var mapFn = arguments[1];\n var mapping, A, n, cb;\n aFunction(this);\n mapping = mapFn !== undefined;\n if (mapping) aFunction(mapFn);\n if (source == undefined) return new this();\n A = [];\n if (mapping) {\n n = 0;\n cb = ctx(mapFn, arguments[2], 2);\n forOf(source, false, function (nextItem) {\n A.push(cb(nextItem, n++));\n });\n } else {\n forOf(source, false, A.push, A);\n }\n return new this(A);\n } });\n};\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-map.from\nrequire('./_set-collection-from')('Map');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from\nrequire('./_set-collection-from')('Set');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.from\nrequire('./_set-collection-from')('WeakMap');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.from\nrequire('./_set-collection-from')('WeakSet');\n","// https://github.com/tc39/proposal-global\nvar $export = require('./_export');\n\n$export($export.G, { global: require('./_global') });\n","// https://github.com/tc39/proposal-global\nvar $export = require('./_export');\n\n$export($export.S, 'System', { global: require('./_global') });\n","// https://github.com/ljharb/proposal-is-error\nvar $export = require('./_export');\nvar cof = require('./_cof');\n\n$export($export.S, 'Error', {\n isError: function isError(it) {\n return cof(it) === 'Error';\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clamp: function clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { DEG_PER_RAD: Math.PI / 180 });\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\nvar RAD_PER_DEG = 180 / Math.PI;\n\n$export($export.S, 'Math', {\n degrees: function degrees(radians) {\n return radians * RAD_PER_DEG;\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nmodule.exports = Math.scale || function scale(x, inLow, inHigh, outLow, outHigh) {\n if (\n arguments.length === 0\n // eslint-disable-next-line no-self-compare\n || x != x\n // eslint-disable-next-line no-self-compare\n || inLow != inLow\n // eslint-disable-next-line no-self-compare\n || inHigh != inHigh\n // eslint-disable-next-line no-self-compare\n || outLow != outLow\n // eslint-disable-next-line no-self-compare\n || outHigh != outHigh\n ) return NaN;\n if (x === Infinity || x === -Infinity) return x;\n return (x - inLow) * (outHigh - outLow) / (inHigh - inLow) + outLow;\n};\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\nvar scale = require('./_math-scale');\nvar fround = require('./_math-fround');\n\n$export($export.S, 'Math', {\n fscale: function fscale(x, inLow, inHigh, outLow, outHigh) {\n return fround(scale(x, inLow, inHigh, outLow, outHigh));\n }\n});\n","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n iaddh: function iaddh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;\n }\n});\n","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n isubh: function isubh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;\n }\n});\n","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n imulh: function imulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >> 16;\n var v1 = $v >> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16);\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { RAD_PER_DEG: 180 / Math.PI });\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\nvar DEG_PER_RAD = Math.PI / 180;\n\n$export($export.S, 'Math', {\n radians: function radians(degrees) {\n return degrees * DEG_PER_RAD;\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { scale: require('./_math-scale') });\n","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n umulh: function umulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >>> 16;\n var v1 = $v >>> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16);\n }\n});\n","// http://jfbastien.github.io/papers/Math.signbit.html\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { signbit: function signbit(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) != x ? x : x == 0 ? 1 / x == Infinity : x > 0;\n} });\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n","'use strict';\n// https://github.com/tc39/proposal-promise-try\nvar $export = require('./_export');\nvar newPromiseCapability = require('./_new-promise-capability');\nvar perform = require('./_perform');\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapability.f(this);\n var result = perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n","var Map = require('./es6.map');\nvar $export = require('./_export');\nvar shared = require('./_shared')('metadata');\nvar store = shared.store || (shared.store = new (require('./es6.weak-map'))());\n\nvar getOrCreateMetadataMap = function (target, targetKey, create) {\n var targetMetadata = store.get(target);\n if (!targetMetadata) {\n if (!create) return undefined;\n store.set(target, targetMetadata = new Map());\n }\n var keyMetadata = targetMetadata.get(targetKey);\n if (!keyMetadata) {\n if (!create) return undefined;\n targetMetadata.set(targetKey, keyMetadata = new Map());\n } return keyMetadata;\n};\nvar ordinaryHasOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? false : metadataMap.has(MetadataKey);\n};\nvar ordinaryGetOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);\n};\nvar ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) {\n getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);\n};\nvar ordinaryOwnMetadataKeys = function (target, targetKey) {\n var metadataMap = getOrCreateMetadataMap(target, targetKey, false);\n var keys = [];\n if (metadataMap) metadataMap.forEach(function (_, key) { keys.push(key); });\n return keys;\n};\nvar toMetaKey = function (it) {\n return it === undefined || typeof it == 'symbol' ? it : String(it);\n};\nvar exp = function (O) {\n $export($export.S, 'Reflect', O);\n};\n\nmodule.exports = {\n store: store,\n map: getOrCreateMetadataMap,\n has: ordinaryHasOwnMetadata,\n get: ordinaryGetOwnMetadata,\n set: ordinaryDefineOwnMetadata,\n keys: ordinaryOwnMetadataKeys,\n key: toMetaKey,\n exp: exp\n};\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar toMetaKey = metadata.key;\nvar ordinaryDefineOwnMetadata = metadata.set;\n\nmetadata.exp({ defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey) {\n ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar toMetaKey = metadata.key;\nvar getOrCreateMetadataMap = metadata.map;\nvar store = metadata.store;\n\nmetadata.exp({ deleteMetadata: function deleteMetadata(metadataKey, target /* , targetKey */) {\n var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2]);\n var metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);\n if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false;\n if (metadataMap.size) return true;\n var targetMetadata = store.get(target);\n targetMetadata['delete'](targetKey);\n return !!targetMetadata.size || store['delete'](target);\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nvar ordinaryGetMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return ordinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;\n};\n\nmetadata.exp({ getMetadata: function getMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var Set = require('./es6.set');\nvar from = require('./_array-from-iterable');\nvar metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nvar ordinaryMetadataKeys = function (O, P) {\n var oKeys = ordinaryOwnMetadataKeys(O, P);\n var parent = getPrototypeOf(O);\n if (parent === null) return oKeys;\n var pKeys = ordinaryMetadataKeys(parent, P);\n return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;\n};\n\nmetadata.exp({ getMetadataKeys: function getMetadataKeys(target /* , targetKey */) {\n return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadata: function getOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadataKeys: function getOwnMetadataKeys(target /* , targetKey */) {\n return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nvar ordinaryHasMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return true;\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;\n};\n\nmetadata.exp({ hasMetadata: function hasMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ hasOwnMetadata: function hasOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var $metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar toMetaKey = $metadata.key;\nvar ordinaryDefineOwnMetadata = $metadata.set;\n\n$metadata.exp({ metadata: function metadata(metadataKey, metadataValue) {\n return function decorator(target, targetKey) {\n ordinaryDefineOwnMetadata(\n metadataKey, metadataValue,\n (targetKey !== undefined ? anObject : aFunction)(target),\n toMetaKey(targetKey)\n );\n };\n} });\n","// https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask\nvar $export = require('./_export');\nvar microtask = require('./_microtask')();\nvar process = require('./_global').process;\nvar isNode = require('./_cof')(process) == 'process';\n\n$export($export.G, {\n asap: function asap(fn) {\n var domain = isNode && process.domain;\n microtask(domain ? domain.bind(fn) : fn);\n }\n});\n","'use strict';\n// https://github.com/zenparsing/es-observable\nvar $export = require('./_export');\nvar global = require('./_global');\nvar core = require('./_core');\nvar microtask = require('./_microtask')();\nvar OBSERVABLE = require('./_wks')('observable');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar anInstance = require('./_an-instance');\nvar redefineAll = require('./_redefine-all');\nvar hide = require('./_hide');\nvar forOf = require('./_for-of');\nvar RETURN = forOf.RETURN;\n\nvar getMethod = function (fn) {\n return fn == null ? undefined : aFunction(fn);\n};\n\nvar cleanupSubscription = function (subscription) {\n var cleanup = subscription._c;\n if (cleanup) {\n subscription._c = undefined;\n cleanup();\n }\n};\n\nvar subscriptionClosed = function (subscription) {\n return subscription._o === undefined;\n};\n\nvar closeSubscription = function (subscription) {\n if (!subscriptionClosed(subscription)) {\n subscription._o = undefined;\n cleanupSubscription(subscription);\n }\n};\n\nvar Subscription = function (observer, subscriber) {\n anObject(observer);\n this._c = undefined;\n this._o = observer;\n observer = new SubscriptionObserver(this);\n try {\n var cleanup = subscriber(observer);\n var subscription = cleanup;\n if (cleanup != null) {\n if (typeof cleanup.unsubscribe === 'function') cleanup = function () { subscription.unsubscribe(); };\n else aFunction(cleanup);\n this._c = cleanup;\n }\n } catch (e) {\n observer.error(e);\n return;\n } if (subscriptionClosed(this)) cleanupSubscription(this);\n};\n\nSubscription.prototype = redefineAll({}, {\n unsubscribe: function unsubscribe() { closeSubscription(this); }\n});\n\nvar SubscriptionObserver = function (subscription) {\n this._s = subscription;\n};\n\nSubscriptionObserver.prototype = redefineAll({}, {\n next: function next(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n try {\n var m = getMethod(observer.next);\n if (m) return m.call(observer, value);\n } catch (e) {\n try {\n closeSubscription(subscription);\n } finally {\n throw e;\n }\n }\n }\n },\n error: function error(value) {\n var subscription = this._s;\n if (subscriptionClosed(subscription)) throw value;\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.error);\n if (!m) throw value;\n value = m.call(observer, value);\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n },\n complete: function complete(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.complete);\n value = m ? m.call(observer, value) : undefined;\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n }\n }\n});\n\nvar $Observable = function Observable(subscriber) {\n anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber);\n};\n\nredefineAll($Observable.prototype, {\n subscribe: function subscribe(observer) {\n return new Subscription(observer, this._f);\n },\n forEach: function forEach(fn) {\n var that = this;\n return new (core.Promise || global.Promise)(function (resolve, reject) {\n aFunction(fn);\n var subscription = that.subscribe({\n next: function (value) {\n try {\n return fn(value);\n } catch (e) {\n reject(e);\n subscription.unsubscribe();\n }\n },\n error: reject,\n complete: resolve\n });\n });\n }\n});\n\nredefineAll($Observable, {\n from: function from(x) {\n var C = typeof this === 'function' ? this : $Observable;\n var method = getMethod(anObject(x)[OBSERVABLE]);\n if (method) {\n var observable = anObject(method.call(x));\n return observable.constructor === C ? observable : new C(function (observer) {\n return observable.subscribe(observer);\n });\n }\n return new C(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n try {\n if (forOf(x, false, function (it) {\n observer.next(it);\n if (done) return RETURN;\n }) === RETURN) return;\n } catch (e) {\n if (done) throw e;\n observer.error(e);\n return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n },\n of: function of() {\n for (var i = 0, l = arguments.length, items = new Array(l); i < l;) items[i] = arguments[i++];\n return new (typeof this === 'function' ? this : $Observable)(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n for (var j = 0; j < items.length; ++j) {\n observer.next(items[j]);\n if (done) return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n }\n});\n\nhide($Observable.prototype, OBSERVABLE, function () { return this; });\n\n$export($export.G, { Observable: $Observable });\n\nrequire('./_set-species')('Observable');\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","require('./modules/es6.symbol');\nrequire('./modules/es6.object.create');\nrequire('./modules/es6.object.define-property');\nrequire('./modules/es6.object.define-properties');\nrequire('./modules/es6.object.get-own-property-descriptor');\nrequire('./modules/es6.object.get-prototype-of');\nrequire('./modules/es6.object.keys');\nrequire('./modules/es6.object.get-own-property-names');\nrequire('./modules/es6.object.freeze');\nrequire('./modules/es6.object.seal');\nrequire('./modules/es6.object.prevent-extensions');\nrequire('./modules/es6.object.is-frozen');\nrequire('./modules/es6.object.is-sealed');\nrequire('./modules/es6.object.is-extensible');\nrequire('./modules/es6.object.assign');\nrequire('./modules/es6.object.is');\nrequire('./modules/es6.object.set-prototype-of');\nrequire('./modules/es6.object.to-string');\nrequire('./modules/es6.function.bind');\nrequire('./modules/es6.function.name');\nrequire('./modules/es6.function.has-instance');\nrequire('./modules/es6.parse-int');\nrequire('./modules/es6.parse-float');\nrequire('./modules/es6.number.constructor');\nrequire('./modules/es6.number.to-fixed');\nrequire('./modules/es6.number.to-precision');\nrequire('./modules/es6.number.epsilon');\nrequire('./modules/es6.number.is-finite');\nrequire('./modules/es6.number.is-integer');\nrequire('./modules/es6.number.is-nan');\nrequire('./modules/es6.number.is-safe-integer');\nrequire('./modules/es6.number.max-safe-integer');\nrequire('./modules/es6.number.min-safe-integer');\nrequire('./modules/es6.number.parse-float');\nrequire('./modules/es6.number.parse-int');\nrequire('./modules/es6.math.acosh');\nrequire('./modules/es6.math.asinh');\nrequire('./modules/es6.math.atanh');\nrequire('./modules/es6.math.cbrt');\nrequire('./modules/es6.math.clz32');\nrequire('./modules/es6.math.cosh');\nrequire('./modules/es6.math.expm1');\nrequire('./modules/es6.math.fround');\nrequire('./modules/es6.math.hypot');\nrequire('./modules/es6.math.imul');\nrequire('./modules/es6.math.log10');\nrequire('./modules/es6.math.log1p');\nrequire('./modules/es6.math.log2');\nrequire('./modules/es6.math.sign');\nrequire('./modules/es6.math.sinh');\nrequire('./modules/es6.math.tanh');\nrequire('./modules/es6.math.trunc');\nrequire('./modules/es6.string.from-code-point');\nrequire('./modules/es6.string.raw');\nrequire('./modules/es6.string.trim');\nrequire('./modules/es6.string.iterator');\nrequire('./modules/es6.string.code-point-at');\nrequire('./modules/es6.string.ends-with');\nrequire('./modules/es6.string.includes');\nrequire('./modules/es6.string.repeat');\nrequire('./modules/es6.string.starts-with');\nrequire('./modules/es6.string.anchor');\nrequire('./modules/es6.string.big');\nrequire('./modules/es6.string.blink');\nrequire('./modules/es6.string.bold');\nrequire('./modules/es6.string.fixed');\nrequire('./modules/es6.string.fontcolor');\nrequire('./modules/es6.string.fontsize');\nrequire('./modules/es6.string.italics');\nrequire('./modules/es6.string.link');\nrequire('./modules/es6.string.small');\nrequire('./modules/es6.string.strike');\nrequire('./modules/es6.string.sub');\nrequire('./modules/es6.string.sup');\nrequire('./modules/es6.date.now');\nrequire('./modules/es6.date.to-json');\nrequire('./modules/es6.date.to-iso-string');\nrequire('./modules/es6.date.to-string');\nrequire('./modules/es6.date.to-primitive');\nrequire('./modules/es6.array.is-array');\nrequire('./modules/es6.array.from');\nrequire('./modules/es6.array.of');\nrequire('./modules/es6.array.join');\nrequire('./modules/es6.array.slice');\nrequire('./modules/es6.array.sort');\nrequire('./modules/es6.array.for-each');\nrequire('./modules/es6.array.map');\nrequire('./modules/es6.array.filter');\nrequire('./modules/es6.array.some');\nrequire('./modules/es6.array.every');\nrequire('./modules/es6.array.reduce');\nrequire('./modules/es6.array.reduce-right');\nrequire('./modules/es6.array.index-of');\nrequire('./modules/es6.array.last-index-of');\nrequire('./modules/es6.array.copy-within');\nrequire('./modules/es6.array.fill');\nrequire('./modules/es6.array.find');\nrequire('./modules/es6.array.find-index');\nrequire('./modules/es6.array.species');\nrequire('./modules/es6.array.iterator');\nrequire('./modules/es6.regexp.constructor');\nrequire('./modules/es6.regexp.exec');\nrequire('./modules/es6.regexp.to-string');\nrequire('./modules/es6.regexp.flags');\nrequire('./modules/es6.regexp.match');\nrequire('./modules/es6.regexp.replace');\nrequire('./modules/es6.regexp.search');\nrequire('./modules/es6.regexp.split');\nrequire('./modules/es6.promise');\nrequire('./modules/es6.map');\nrequire('./modules/es6.set');\nrequire('./modules/es6.weak-map');\nrequire('./modules/es6.weak-set');\nrequire('./modules/es6.typed.array-buffer');\nrequire('./modules/es6.typed.data-view');\nrequire('./modules/es6.typed.int8-array');\nrequire('./modules/es6.typed.uint8-array');\nrequire('./modules/es6.typed.uint8-clamped-array');\nrequire('./modules/es6.typed.int16-array');\nrequire('./modules/es6.typed.uint16-array');\nrequire('./modules/es6.typed.int32-array');\nrequire('./modules/es6.typed.uint32-array');\nrequire('./modules/es6.typed.float32-array');\nrequire('./modules/es6.typed.float64-array');\nrequire('./modules/es6.reflect.apply');\nrequire('./modules/es6.reflect.construct');\nrequire('./modules/es6.reflect.define-property');\nrequire('./modules/es6.reflect.delete-property');\nrequire('./modules/es6.reflect.enumerate');\nrequire('./modules/es6.reflect.get');\nrequire('./modules/es6.reflect.get-own-property-descriptor');\nrequire('./modules/es6.reflect.get-prototype-of');\nrequire('./modules/es6.reflect.has');\nrequire('./modules/es6.reflect.is-extensible');\nrequire('./modules/es6.reflect.own-keys');\nrequire('./modules/es6.reflect.prevent-extensions');\nrequire('./modules/es6.reflect.set');\nrequire('./modules/es6.reflect.set-prototype-of');\nrequire('./modules/es7.array.includes');\nrequire('./modules/es7.array.flat-map');\nrequire('./modules/es7.array.flatten');\nrequire('./modules/es7.string.at');\nrequire('./modules/es7.string.pad-start');\nrequire('./modules/es7.string.pad-end');\nrequire('./modules/es7.string.trim-left');\nrequire('./modules/es7.string.trim-right');\nrequire('./modules/es7.string.match-all');\nrequire('./modules/es7.symbol.async-iterator');\nrequire('./modules/es7.symbol.observable');\nrequire('./modules/es7.object.get-own-property-descriptors');\nrequire('./modules/es7.object.values');\nrequire('./modules/es7.object.entries');\nrequire('./modules/es7.object.define-getter');\nrequire('./modules/es7.object.define-setter');\nrequire('./modules/es7.object.lookup-getter');\nrequire('./modules/es7.object.lookup-setter');\nrequire('./modules/es7.map.to-json');\nrequire('./modules/es7.set.to-json');\nrequire('./modules/es7.map.of');\nrequire('./modules/es7.set.of');\nrequire('./modules/es7.weak-map.of');\nrequire('./modules/es7.weak-set.of');\nrequire('./modules/es7.map.from');\nrequire('./modules/es7.set.from');\nrequire('./modules/es7.weak-map.from');\nrequire('./modules/es7.weak-set.from');\nrequire('./modules/es7.global');\nrequire('./modules/es7.system.global');\nrequire('./modules/es7.error.is-error');\nrequire('./modules/es7.math.clamp');\nrequire('./modules/es7.math.deg-per-rad');\nrequire('./modules/es7.math.degrees');\nrequire('./modules/es7.math.fscale');\nrequire('./modules/es7.math.iaddh');\nrequire('./modules/es7.math.isubh');\nrequire('./modules/es7.math.imulh');\nrequire('./modules/es7.math.rad-per-deg');\nrequire('./modules/es7.math.radians');\nrequire('./modules/es7.math.scale');\nrequire('./modules/es7.math.umulh');\nrequire('./modules/es7.math.signbit');\nrequire('./modules/es7.promise.finally');\nrequire('./modules/es7.promise.try');\nrequire('./modules/es7.reflect.define-metadata');\nrequire('./modules/es7.reflect.delete-metadata');\nrequire('./modules/es7.reflect.get-metadata');\nrequire('./modules/es7.reflect.get-metadata-keys');\nrequire('./modules/es7.reflect.get-own-metadata');\nrequire('./modules/es7.reflect.get-own-metadata-keys');\nrequire('./modules/es7.reflect.has-metadata');\nrequire('./modules/es7.reflect.has-own-metadata');\nrequire('./modules/es7.reflect.metadata');\nrequire('./modules/es7.asap');\nrequire('./modules/es7.observable');\nrequire('./modules/web.timers');\nrequire('./modules/web.immediate');\nrequire('./modules/web.dom.iterable');\nmodule.exports = require('./modules/_core');\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","module.exports = function (regExp, replace) {\n var replacer = replace === Object(replace) ? function (part) {\n return replace[part];\n } : replace;\n return function (it) {\n return String(it).replace(regExp, replacer);\n };\n};\n","// https://github.com/benjamingr/RexExp.escape\nvar $export = require('./_export');\nvar $re = require('./_replacer')(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n$export($export.S, 'RegExp', { escape: function escape(it) { return $re(it); } });\n","require('../../modules/core.regexp.escape');\nmodule.exports = require('../../modules/_core').RegExp.escape;\n","\"use strict\";\n\nrequire(\"core-js/shim\");\n\nrequire(\"regenerator-runtime/runtime\");\n\nrequire(\"core-js/fn/regexp/escape\");\n\nif (global._babelPolyfill) {\n throw new Error(\"only one instance of babel-polyfill is allowed\");\n}\nglobal._babelPolyfill = true;\n\nvar DEFINE_PROPERTY = \"defineProperty\";\nfunction define(O, key, value) {\n O[key] || Object[DEFINE_PROPERTY](O, key, {\n writable: true,\n configurable: true,\n value: value\n });\n}\n\ndefine(String.prototype, \"padLeft\", \"\".padStart);\ndefine(String.prototype, \"padRight\", \"\".padEnd);\n\n\"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill\".split(\",\").forEach(function (key) {\n [][key] && define(Array, key, Function.call.bind([][key]));\n});","export default class ScrollSpy {\n constructor(args) {\n\n this.doc = document;\n this.nav = this.doc.querySelectorAll(args.navSelector);\n\n if(!this.nav.length === 0) { return }\n\n this.win = window;\n this.winHeight = this.win.innerHeight;\n\n this.scrollElement = this.doc.querySelector(args.scrollSelector);\n this.className = args.className;\n this.offsetTop = args.offsetTop || 0;\n\n this.contents = [];\n this.contents = this.getContents(args.contentSelector);\n\n this.attachEvent();\n }\n\n attachEvent() {\n let scrollTimer;\n this.scrollElement.addEventListener('scroll', () => {\n if (scrollTimer) {\n clearTimeout(scrollTimer);\n }\n\n scrollTimer = setTimeout(() => {\n this.spy();\n }, 1);\n });\n\n let resizeTimer;\n this.scrollElement.addEventListener('resize', () => {\n if (resizeTimer) {\n clearTimeout(resizeTimer);\n }\n\n resizeTimer = setTimeout(() => {\n this.spy();\n }, 1);\n });\n\n this.scrollElement.addEventListener(\"click\", (e) => {\n const target = e.target;\n if (target.tagName !== \"A\") return;\n window.onclickToc = true;\n for (let i = 0, max = this.nav.length; i < max; i++) {\n const navElement = this.nav[i];\n if (navElement.href === target.href) {\n navElement.classList.add(this.className);\n navElement.classList.add('mdl-color-text--primary');\n } else {\n navElement.classList.remove(this.className);\n navElement.classList.remove('mdl-color-text--primary');\n }\n }\n });\n }\n\n getContents(contentSelector) {\n const targets = [];\n for (let i = 0, max = this.nav.length; i < max; i++) {\n const href = this.nav[i].href;\n targets.push(this.doc.getElementById(href.split('#')[1]));\n }\n return targets;\n }\n\n spy() {\n let elements = this.getViewState();\n this.toggleNavClass(elements);\n }\n\n getViewState() {\n const elementListInView = [];\n for (let i = 0, max = this.contents.length; i < max; i++) {\n const current = this.contents[i];\n if (current && this.isView(current)) {\n elementListInView.push(current);\n }\n }\n\n return elementListInView;\n }\n\n isView(element) {\n const scrollTop = this.scrollElement.scrollTop;\n const subHeaderRect = document.querySelector(\".mdl-layout__header-row\").getBoundingClientRect();\n const headerHeight = subHeaderRect.top + subHeaderRect.height;\n const scrollBottom = scrollTop + window.innerHeight - headerHeight;\n const rect = element.getBoundingClientRect();\n const elementTop = rect.top + scrollTop;\n const elementBottom = elementTop + element.offsetHeight;\n\n return elementTop < scrollBottom - 30 && elementBottom > scrollTop + headerHeight + 30;\n }\n\n toggleNavClass(elements) {\n if (window.onclickToc) {\n window.onclickToc = false;\n return;\n }\n let maxDepth = 0;\n let maxDepthElement = $();\n\n for (let i = 0, max = elements.length; i < max; i++) {\n const el = elements[i];\n const tempDepth = this.getTagDepth(el);\n if (maxDepth < tempDepth) {\n maxDepth = tempDepth;\n maxDepthElement = el;\n }\n }\n\n for (let i = 0, max = this.nav.length; i < max; i++) {\n const navElement = this.nav[i];\n if (navElement.href.split('#')[1] === maxDepthElement.id) {\n navElement.classList.add(this.className);\n navElement.classList.add('mdl-color-text--primary');\n } else {\n navElement.classList.remove(this.className);\n navElement.classList.remove('mdl-color-text--primary');\n }\n }\n }\n\n getTagDepth(element) {\n return parseInt($(element).find('h1,h2,h3,h4,h5,h6').get(0).tagName.split('H')[1]);\n }\n}\n","import \"../scss/sphinx_materialdesign_theme.scss\";\r\nimport \"material-design-lite\";\r\nimport \"babel-polyfill\";\r\nimport ScrollSpy from \"./scrollspy\";\r\n\r\n$(function() {\r\n\r\n function reconstructionDrawerGlobalToc() {\r\n const $globaltoc = $('.mdl-layout__drawer nav');\r\n const $lists = $globaltoc.find('li');\r\n $.each($lists, function(index, li) {\r\n const $li = $(li);\r\n const $linkWrapper = $('');\r\n const $link = $li.children('a');\r\n $li.append($linkWrapper.append($link));\r\n\r\n const isCurrent = $li.hasClass('current') && !$link.hasClass('current');\r\n const $ul = $li.children('ul');\r\n if ($ul.length) {\r\n const ulId = `globalnav-${index}`;\r\n $ul.attr('id', ulId);\r\n $ul.addClass('collapse');\r\n const $toggleWrapper = $('');\r\n if (isCurrent) {\r\n $ul.addClass('show');\r\n $toggleWrapper.addClass('show');\r\n } else {\r\n $ul.hide();\r\n }\r\n\r\n $li.append(\r\n $linkWrapper.append(\r\n $toggleWrapper.append(\r\n $(`keyboard_arrow_down`)\r\n )\r\n )\r\n ).append($ul);\r\n }\r\n });\r\n }\r\n\r\n function collapse() {\r\n $('.mdl-layout__drawer nav .nav-toggle a').click(function() {\r\n const $toggle = $(this);\r\n const id = $toggle.attr('data-toggle');\r\n $(`ul${id}`).toggleClass('show').animate({height: \"toggle\", opacity: \"toggle\"});\r\n $toggle.parent().toggleClass('show');\r\n });\r\n }\r\n\r\n function styleMdlCodeBlock() {\r\n $('pre').hover(function() {\r\n $(this).attr('click-to-copy', 'click to copy...');\r\n });\r\n $('pre').click(function(){\r\n var result = copyClipboard(this);\r\n if (result) {\r\n $(this).attr('click-to-copy', 'copied!');\r\n }\r\n });\r\n }\r\n\r\n function copyClipboard(selector) {\r\n var body = document.body;\r\n if(!body) return false;\r\n\r\n var $target = $(selector);\r\n if ($target.length === 0) { return false; }\r\n\r\n var text = $target.text();\r\n var textarea = document.createElement('textarea');\r\n textarea.value = text;\r\n document.body.appendChild(textarea);\r\n textarea.select();\r\n var result = document.execCommand('copy');\r\n document.body.removeChild(textarea);\r\n return result;\r\n }\r\n\r\n function quickSearchClickEvent() {\r\n const $breadcrumb = $('.breadcrumb');\r\n\r\n $('#waterfall-exp').focus(() => {\r\n if ($(window).width() <= 1024) {\r\n $breadcrumb.hide();\r\n }\r\n }).blur(() => {\r\n if ($(window).width() <= 1024) {\r\n $breadcrumb.show();\r\n }\r\n });\r\n }\r\n\r\n // styleMdlCodeBlock();\r\n\r\n reconstructionDrawerGlobalToc();\r\n collapse();\r\n quickSearchClickEvent();\r\n\r\n\r\n const spy = new ScrollSpy({\r\n contentSelector: '.page-content .section',\r\n navSelector: '.localtoc a',\r\n scrollSelector: 'main' ,\r\n className: 'current',\r\n offsetTop: 64});\r\n\r\n $('.mdl-layout__content').focus();\r\n\r\n $('.mx-card').each(function(){\r\n $(this).addClass('mdl-card mdl-shadow--2dp');\r\n });\r\n $('.mx-card .mx-card-title').each(function(){\r\n $(this).addClass('mdl-card__title');\r\n });\r\n $('.mx-card .mx-card-text').each(function(){\r\n $(this).addClass('mdl-card__supporting-text');\r\n });\r\n $('.mx-card-link').each(function(){\r\n $(this).hide();\r\n });\r\n $('.mdl-card').each(function(){\r\n $(this).click(function() {\r\n var url = $(this).find('.mx-card-link').text();\r\n if (url) {\r\n window.location = url;\r\n }\r\n return true;\r\n });\r\n });\r\n\r\n $('a.download').each(function() {\r\n // button\r\n var button = document.createElement('button');\r\n button.className = 'download mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect';\r\n\r\n // icon\r\n var icon = document.createElement('i');\r\n icon.className = 'material-icons';\r\n var text = document.createTextNode('file_download');\r\n icon.appendChild(text);\r\n button.appendChild(icon);\r\n\r\n // link\r\n var link = $(this).attr('href');\r\n button.onclick = function() {\r\n window.location = link;\r\n };\r\n var fileName = link.split(\"/\").slice(-1).pop();\r\n if (fileName) {\r\n button.id = fileName.replace('.', '-');\r\n } else {\r\n button.id = 'download-button-' + $(this).index();\r\n }\r\n\r\n // hint\r\n var hint = document.createElement('div');\r\n hint.className = 'mdl-tooltip';\r\n hint.setAttribute('data-mdl-for', button.id);\r\n var hintText = $(this).find('span.pre').map(function() {\r\n return $(this).text();\r\n }).get().join(' ');\r\n hint.innerHTML = hintText;\r\n\r\n componentHandler.upgradeElement(button);\r\n $(this).remove();\r\n var header = $('.section h1').first();\r\n header.append(button);\r\n header.append(hint);\r\n });\r\n\r\n $('.mdl-layout').css('visibility', 'visible');\r\n\r\n});\r\n"]} \ No newline at end of file +{"version":3,"sources":["feedback.js","ripple.js","tabs.js","layout.js","mdlComponentHandler.js","rAF.js","button.js","checkbox.js","icon-toggle.js","menu.js","progress.js","radio.js","slider.js","snackbar.js","spinner.js","switch.js","textfield.js","tooltip.js","data-table.js","../../node_modules/core-js/modules/_global.js","../../node_modules/core-js/modules/_has.js","../../node_modules/core-js/modules/_fails.js","../../node_modules/core-js/modules/_descriptors.js","../../node_modules/core-js/modules/_core.js","../../node_modules/core-js/modules/_is-object.js","../../node_modules/core-js/modules/_an-object.js","../../node_modules/core-js/modules/_dom-create.js","../../node_modules/core-js/modules/_ie8-dom-define.js","../../node_modules/core-js/modules/_to-primitive.js","../../node_modules/core-js/modules/_object-dp.js","../../node_modules/core-js/modules/_property-desc.js","../../node_modules/core-js/modules/_hide.js","../../node_modules/core-js/modules/_uid.js","../../node_modules/core-js/modules/_library.js","../../node_modules/core-js/modules/_shared.js","../../node_modules/core-js/modules/_function-to-string.js","../../node_modules/core-js/modules/_redefine.js","../../node_modules/core-js/modules/_a-function.js","../../node_modules/core-js/modules/_ctx.js","../../node_modules/core-js/modules/_export.js","../../node_modules/core-js/modules/_meta.js","../../node_modules/core-js/modules/_wks.js","../../node_modules/core-js/modules/_set-to-string-tag.js","../../node_modules/core-js/modules/_wks-ext.js","../../node_modules/core-js/modules/_wks-define.js","../../node_modules/core-js/modules/_cof.js","../../node_modules/core-js/modules/_iobject.js","../../node_modules/core-js/modules/_defined.js","../../node_modules/core-js/modules/_to-iobject.js","../../node_modules/core-js/modules/_to-integer.js","../../node_modules/core-js/modules/_to-length.js","../../node_modules/core-js/modules/_to-absolute-index.js","../../node_modules/core-js/modules/_array-includes.js","../../node_modules/core-js/modules/_shared-key.js","../../node_modules/core-js/modules/_object-keys-internal.js","../../node_modules/core-js/modules/_enum-bug-keys.js","../../node_modules/core-js/modules/_object-keys.js","../../node_modules/core-js/modules/_object-gops.js","../../node_modules/core-js/modules/_object-pie.js","../../node_modules/core-js/modules/_enum-keys.js","../../node_modules/core-js/modules/_is-array.js","../../node_modules/core-js/modules/_to-object.js","../../node_modules/core-js/modules/_object-dps.js","../../node_modules/core-js/modules/_html.js","../../node_modules/core-js/modules/_object-create.js","../../node_modules/core-js/modules/_object-gopn.js","../../node_modules/core-js/modules/_object-gopn-ext.js","../../node_modules/core-js/modules/_object-gopd.js","../../node_modules/core-js/modules/es6.symbol.js","../../node_modules/core-js/modules/es6.object.create.js","../../node_modules/core-js/modules/es6.object.define-property.js","../../node_modules/core-js/modules/es6.object.define-properties.js","../../node_modules/core-js/modules/_object-sap.js","../../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","../../node_modules/core-js/modules/_object-gpo.js","../../node_modules/core-js/modules/es6.object.get-prototype-of.js","../../node_modules/core-js/modules/es6.object.keys.js","../../node_modules/core-js/modules/es6.object.get-own-property-names.js","../../node_modules/core-js/modules/es6.object.freeze.js","../../node_modules/core-js/modules/es6.object.seal.js","../../node_modules/core-js/modules/es6.object.prevent-extensions.js","../../node_modules/core-js/modules/es6.object.is-frozen.js","../../node_modules/core-js/modules/es6.object.is-sealed.js","../../node_modules/core-js/modules/es6.object.is-extensible.js","../../node_modules/core-js/modules/_object-assign.js","../../node_modules/core-js/modules/es6.object.assign.js","../../node_modules/core-js/modules/_same-value.js","../../node_modules/core-js/modules/es6.object.is.js","../../node_modules/core-js/modules/_set-proto.js","../../node_modules/core-js/modules/es6.object.set-prototype-of.js","../../node_modules/core-js/modules/_classof.js","../../node_modules/core-js/modules/es6.object.to-string.js","../../node_modules/core-js/modules/_invoke.js","../../node_modules/core-js/modules/_bind.js","../../node_modules/core-js/modules/es6.function.bind.js","../../node_modules/core-js/modules/es6.function.name.js","../../node_modules/core-js/modules/es6.function.has-instance.js","../../node_modules/core-js/modules/_string-ws.js","../../node_modules/core-js/modules/_string-trim.js","../../node_modules/core-js/modules/_parse-int.js","../../node_modules/core-js/modules/es6.parse-int.js","../../node_modules/core-js/modules/_parse-float.js","../../node_modules/core-js/modules/es6.parse-float.js","../../node_modules/core-js/modules/_inherit-if-required.js","../../node_modules/core-js/modules/es6.number.constructor.js","../../node_modules/core-js/modules/_a-number-value.js","../../node_modules/core-js/modules/_string-repeat.js","../../node_modules/core-js/modules/es6.number.to-fixed.js","../../node_modules/core-js/modules/es6.number.to-precision.js","../../node_modules/core-js/modules/es6.number.epsilon.js","../../node_modules/core-js/modules/es6.number.is-finite.js","../../node_modules/core-js/modules/_is-integer.js","../../node_modules/core-js/modules/es6.number.is-integer.js","../../node_modules/core-js/modules/es6.number.is-nan.js","../../node_modules/core-js/modules/es6.number.is-safe-integer.js","../../node_modules/core-js/modules/es6.number.max-safe-integer.js","../../node_modules/core-js/modules/es6.number.min-safe-integer.js","../../node_modules/core-js/modules/es6.number.parse-float.js","../../node_modules/core-js/modules/es6.number.parse-int.js","../../node_modules/core-js/modules/_math-log1p.js","../../node_modules/core-js/modules/es6.math.acosh.js","../../node_modules/core-js/modules/es6.math.asinh.js","../../node_modules/core-js/modules/es6.math.atanh.js","../../node_modules/core-js/modules/_math-sign.js","../../node_modules/core-js/modules/es6.math.cbrt.js","../../node_modules/core-js/modules/es6.math.clz32.js","../../node_modules/core-js/modules/es6.math.cosh.js","../../node_modules/core-js/modules/_math-expm1.js","../../node_modules/core-js/modules/es6.math.expm1.js","../../node_modules/core-js/modules/_math-fround.js","../../node_modules/core-js/modules/es6.math.fround.js","../../node_modules/core-js/modules/es6.math.hypot.js","../../node_modules/core-js/modules/es6.math.imul.js","../../node_modules/core-js/modules/es6.math.log10.js","../../node_modules/core-js/modules/es6.math.log1p.js","../../node_modules/core-js/modules/es6.math.log2.js","../../node_modules/core-js/modules/es6.math.sign.js","../../node_modules/core-js/modules/es6.math.sinh.js","../../node_modules/core-js/modules/es6.math.tanh.js","../../node_modules/core-js/modules/es6.math.trunc.js","../../node_modules/core-js/modules/es6.string.from-code-point.js","../../node_modules/core-js/modules/es6.string.raw.js","../../node_modules/core-js/modules/es6.string.trim.js","../../node_modules/core-js/modules/_string-at.js","../../node_modules/core-js/modules/_iterators.js","../../node_modules/core-js/modules/_iter-create.js","../../node_modules/core-js/modules/_iter-define.js","../../node_modules/core-js/modules/es6.string.iterator.js","../../node_modules/core-js/modules/es6.string.code-point-at.js","../../node_modules/core-js/modules/_is-regexp.js","../../node_modules/core-js/modules/_string-context.js","../../node_modules/core-js/modules/_fails-is-regexp.js","../../node_modules/core-js/modules/es6.string.ends-with.js","../../node_modules/core-js/modules/es6.string.includes.js","../../node_modules/core-js/modules/es6.string.repeat.js","../../node_modules/core-js/modules/es6.string.starts-with.js","../../node_modules/core-js/modules/_string-html.js","../../node_modules/core-js/modules/es6.string.anchor.js","../../node_modules/core-js/modules/es6.string.big.js","../../node_modules/core-js/modules/es6.string.blink.js","../../node_modules/core-js/modules/es6.string.bold.js","../../node_modules/core-js/modules/es6.string.fixed.js","../../node_modules/core-js/modules/es6.string.fontcolor.js","../../node_modules/core-js/modules/es6.string.fontsize.js","../../node_modules/core-js/modules/es6.string.italics.js","../../node_modules/core-js/modules/es6.string.link.js","../../node_modules/core-js/modules/es6.string.small.js","../../node_modules/core-js/modules/es6.string.strike.js","../../node_modules/core-js/modules/es6.string.sub.js","../../node_modules/core-js/modules/es6.string.sup.js","../../node_modules/core-js/modules/es6.date.now.js","../../node_modules/core-js/modules/es6.date.to-json.js","../../node_modules/core-js/modules/_date-to-iso-string.js","../../node_modules/core-js/modules/es6.date.to-iso-string.js","../../node_modules/core-js/modules/es6.date.to-string.js","../../node_modules/core-js/modules/_date-to-primitive.js","../../node_modules/core-js/modules/es6.date.to-primitive.js","../../node_modules/core-js/modules/es6.array.is-array.js","../../node_modules/core-js/modules/_iter-call.js","../../node_modules/core-js/modules/_is-array-iter.js","../../node_modules/core-js/modules/_create-property.js","../../node_modules/core-js/modules/core.get-iterator-method.js","../../node_modules/core-js/modules/_iter-detect.js","../../node_modules/core-js/modules/es6.array.from.js","../../node_modules/core-js/modules/es6.array.of.js","../../node_modules/core-js/modules/_strict-method.js","../../node_modules/core-js/modules/es6.array.join.js","../../node_modules/core-js/modules/es6.array.slice.js","../../node_modules/core-js/modules/es6.array.sort.js","../../node_modules/core-js/modules/_array-species-constructor.js","../../node_modules/core-js/modules/_array-species-create.js","../../node_modules/core-js/modules/_array-methods.js","../../node_modules/core-js/modules/es6.array.for-each.js","../../node_modules/core-js/modules/es6.array.map.js","../../node_modules/core-js/modules/es6.array.filter.js","../../node_modules/core-js/modules/es6.array.some.js","../../node_modules/core-js/modules/es6.array.every.js","../../node_modules/core-js/modules/_array-reduce.js","../../node_modules/core-js/modules/es6.array.reduce.js","../../node_modules/core-js/modules/es6.array.reduce-right.js","../../node_modules/core-js/modules/es6.array.index-of.js","../../node_modules/core-js/modules/es6.array.last-index-of.js","../../node_modules/core-js/modules/_array-copy-within.js","../../node_modules/core-js/modules/_add-to-unscopables.js","../../node_modules/core-js/modules/es6.array.copy-within.js","../../node_modules/core-js/modules/_array-fill.js","../../node_modules/core-js/modules/es6.array.fill.js","../../node_modules/core-js/modules/es6.array.find.js","../../node_modules/core-js/modules/es6.array.find-index.js","../../node_modules/core-js/modules/_set-species.js","../../node_modules/core-js/modules/es6.array.species.js","../../node_modules/core-js/modules/_iter-step.js","../../node_modules/core-js/modules/es6.array.iterator.js","../../node_modules/core-js/modules/_flags.js","../../node_modules/core-js/modules/es6.regexp.constructor.js","../../node_modules/core-js/modules/_regexp-exec.js","../../node_modules/core-js/modules/es6.regexp.exec.js","../../node_modules/core-js/modules/es6.regexp.flags.js","../../node_modules/core-js/modules/es6.regexp.to-string.js","../../node_modules/core-js/modules/_advance-string-index.js","../../node_modules/core-js/modules/_regexp-exec-abstract.js","../../node_modules/core-js/modules/_fix-re-wks.js","../../node_modules/core-js/modules/es6.regexp.match.js","../../node_modules/core-js/modules/es6.regexp.replace.js","../../node_modules/core-js/modules/es6.regexp.search.js","../../node_modules/core-js/modules/_species-constructor.js","../../node_modules/core-js/modules/es6.regexp.split.js","../../node_modules/core-js/modules/_an-instance.js","../../node_modules/core-js/modules/_for-of.js","../../node_modules/core-js/modules/_task.js","../../node_modules/core-js/modules/_microtask.js","../../node_modules/core-js/modules/_new-promise-capability.js","../../node_modules/core-js/modules/_perform.js","../../node_modules/core-js/modules/_user-agent.js","../../node_modules/core-js/modules/_promise-resolve.js","../../node_modules/core-js/modules/_redefine-all.js","../../node_modules/core-js/modules/es6.promise.js","../../node_modules/core-js/modules/_validate-collection.js","../../node_modules/core-js/modules/_collection-strong.js","../../node_modules/core-js/modules/_collection.js","../../node_modules/core-js/modules/es6.map.js","../../node_modules/core-js/modules/es6.set.js","../../node_modules/core-js/modules/_collection-weak.js","../../node_modules/core-js/modules/es6.weak-map.js","../../node_modules/core-js/modules/es6.weak-set.js","../../node_modules/core-js/modules/_typed.js","../../node_modules/core-js/modules/_to-index.js","../../node_modules/core-js/modules/_typed-buffer.js","../../node_modules/core-js/modules/es6.typed.array-buffer.js","../../node_modules/core-js/modules/es6.typed.data-view.js","../../node_modules/core-js/modules/_typed-array.js","../../node_modules/core-js/modules/es6.typed.int8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","../../node_modules/core-js/modules/es6.typed.int16-array.js","../../node_modules/core-js/modules/es6.typed.uint16-array.js","../../node_modules/core-js/modules/es6.typed.int32-array.js","../../node_modules/core-js/modules/es6.typed.uint32-array.js","../../node_modules/core-js/modules/es6.typed.float32-array.js","../../node_modules/core-js/modules/es6.typed.float64-array.js","../../node_modules/core-js/modules/es6.reflect.apply.js","../../node_modules/core-js/modules/es6.reflect.construct.js","../../node_modules/core-js/modules/es6.reflect.define-property.js","../../node_modules/core-js/modules/es6.reflect.delete-property.js","../../node_modules/core-js/modules/es6.reflect.enumerate.js","../../node_modules/core-js/modules/es6.reflect.get.js","../../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.reflect.get-prototype-of.js","../../node_modules/core-js/modules/es6.reflect.has.js","../../node_modules/core-js/modules/es6.reflect.is-extensible.js","../../node_modules/core-js/modules/_own-keys.js","../../node_modules/core-js/modules/es6.reflect.own-keys.js","../../node_modules/core-js/modules/es6.reflect.prevent-extensions.js","../../node_modules/core-js/modules/es6.reflect.set.js","../../node_modules/core-js/modules/es6.reflect.set-prototype-of.js","../../node_modules/core-js/modules/es7.array.includes.js","../../node_modules/core-js/modules/_flatten-into-array.js","../../node_modules/core-js/modules/es7.array.flat-map.js","../../node_modules/core-js/modules/es7.array.flatten.js","../../node_modules/core-js/modules/es7.string.at.js","../../node_modules/core-js/modules/_string-pad.js","../../node_modules/core-js/modules/es7.string.pad-start.js","../../node_modules/core-js/modules/es7.string.pad-end.js","../../node_modules/core-js/modules/es7.string.trim-left.js","../../node_modules/core-js/modules/es7.string.trim-right.js","../../node_modules/core-js/modules/es7.string.match-all.js","../../node_modules/core-js/modules/es7.symbol.async-iterator.js","../../node_modules/core-js/modules/es7.symbol.observable.js","../../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","../../node_modules/core-js/modules/_object-to-array.js","../../node_modules/core-js/modules/es7.object.values.js","../../node_modules/core-js/modules/es7.object.entries.js","../../node_modules/core-js/modules/_object-forced-pam.js","../../node_modules/core-js/modules/es7.object.define-getter.js","../../node_modules/core-js/modules/es7.object.define-setter.js","../../node_modules/core-js/modules/es7.object.lookup-getter.js","../../node_modules/core-js/modules/es7.object.lookup-setter.js","../../node_modules/core-js/modules/_array-from-iterable.js","../../node_modules/core-js/modules/_collection-to-json.js","../../node_modules/core-js/modules/es7.map.to-json.js","../../node_modules/core-js/modules/es7.set.to-json.js","../../node_modules/core-js/modules/_set-collection-of.js","../../node_modules/core-js/modules/es7.map.of.js","../../node_modules/core-js/modules/es7.set.of.js","../../node_modules/core-js/modules/es7.weak-map.of.js","../../node_modules/core-js/modules/es7.weak-set.of.js","../../node_modules/core-js/modules/_set-collection-from.js","../../node_modules/core-js/modules/es7.map.from.js","../../node_modules/core-js/modules/es7.set.from.js","../../node_modules/core-js/modules/es7.weak-map.from.js","../../node_modules/core-js/modules/es7.weak-set.from.js","../../node_modules/core-js/modules/es7.global.js","../../node_modules/core-js/modules/es7.system.global.js","../../node_modules/core-js/modules/es7.error.is-error.js","../../node_modules/core-js/modules/es7.math.clamp.js","../../node_modules/core-js/modules/es7.math.deg-per-rad.js","../../node_modules/core-js/modules/es7.math.degrees.js","../../node_modules/core-js/modules/_math-scale.js","../../node_modules/core-js/modules/es7.math.fscale.js","../../node_modules/core-js/modules/es7.math.iaddh.js","../../node_modules/core-js/modules/es7.math.isubh.js","../../node_modules/core-js/modules/es7.math.imulh.js","../../node_modules/core-js/modules/es7.math.rad-per-deg.js","../../node_modules/core-js/modules/es7.math.radians.js","../../node_modules/core-js/modules/es7.math.scale.js","../../node_modules/core-js/modules/es7.math.umulh.js","../../node_modules/core-js/modules/es7.math.signbit.js","../../node_modules/core-js/modules/es7.promise.finally.js","../../node_modules/core-js/modules/es7.promise.try.js","../../node_modules/core-js/modules/_metadata.js","../../node_modules/core-js/modules/es7.reflect.define-metadata.js","../../node_modules/core-js/modules/es7.reflect.delete-metadata.js","../../node_modules/core-js/modules/es7.reflect.get-metadata.js","../../node_modules/core-js/modules/es7.reflect.get-metadata-keys.js","../../node_modules/core-js/modules/es7.reflect.get-own-metadata.js","../../node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js","../../node_modules/core-js/modules/es7.reflect.has-metadata.js","../../node_modules/core-js/modules/es7.reflect.has-own-metadata.js","../../node_modules/core-js/modules/es7.reflect.metadata.js","../../node_modules/core-js/modules/es7.asap.js","../../node_modules/core-js/modules/es7.observable.js","../../node_modules/core-js/modules/web.timers.js","../../node_modules/core-js/modules/web.immediate.js","../../node_modules/core-js/modules/web.dom.iterable.js","../../node_modules/core-js/shim.js","../../node_modules/regenerator-runtime/runtime.js","../../node_modules/core-js/modules/_replacer.js","../../node_modules/core-js/modules/core.regexp.escape.js","../../node_modules/core-js/fn/regexp/escape.js","../../node_modules/babel-polyfill/lib/index.js","scrollspy.js","sphinx_materialdesign_theme.js"],"names":["$","document","ready","on","remove","show","ga","hitType","eventCategory","eventAction","attr","eventLabel","window","location","pathname","eventValue","MaterialTab","tab","ctx","element_","classList","contains","CssClasses_","MDL_JS_RIPPLE_EFFECT","rippleContainer","createElement","add","MDL_RIPPLE_CONTAINER","ripple","MDL_RIPPLE","appendChild","addEventListener","e","getAttribute","charAt","preventDefault","href","split","panel","querySelector","resetTabState_","resetPanelState_","ACTIVE_CLASS","MaterialLayoutTab","tabs","panels","layout","selectTab","content_","IS_ACTIVE","tabBar_","JS_RIPPLE_EFFECT","RIPPLE_CONTAINER","RIPPLE","TAB_MANUAL_SWITCH","componentHandler","upgradeDom","optJsClass","optCssClass","upgradeElement","element","upgradeElements","elements","upgradeAllRegistered","registerUpgradedCallback","jsClass","callback","register","config","downgradeElements","nodes","findRegisteredClass_","name","optReplace","i","registeredComponents_","length","className","getUpgradedListOfElement_","dataUpgraded","isElementUpgraded_","upgradedList","indexOf","createEvent_","eventType","bubbles","cancelable","CustomEvent","ev","createEvent","initEvent","upgradeDomInternal","cssClass","registeredClass","querySelectorAll","n","upgradeElementInternal","Element","Error","upgradingEv","dispatchEvent","defaultPrevented","classesToUpgrade","push","forEach","component","setAttribute","join","instance","classConstructor","componentConfigProperty_","createdComponents_","j","m","callbacks","widget","upgradedEv","deconstructComponentInternal","componentIndex","splice","upgrades","componentPlace","classAsString","upgradeElementsInternal","Array","isArray","prototype","slice","call","HTMLElement","children","upgradeAllRegisteredInternal","registerUpgradedCallbackInternal","regClass","registerInternal","widgetMissing","newConfig","constructor","item","hasOwnProperty","downgradeNodesInternal","downgradeNode","node","filter","NodeList","Node","ComponentConfigPublic","ComponentConfig","Component","documentElement","Date","now","getTime","vendors","requestAnimationFrame","vp","cancelAnimationFrame","test","navigator","userAgent","lastTime","nextTime","Math","max","setTimeout","clearTimeout","MaterialButton","this","init","Constant_","RIPPLE_EFFECT","blurHandler_","event","blur","disable","disabled","enable","rippleElement_","boundRippleBlurHandler","bind","boundButtonBlurHandler","MaterialCheckbox","TINY_TIMEOUT","INPUT","BOX_OUTLINE","FOCUS_HELPER","TICK_OUTLINE","RIPPLE_IGNORE_EVENTS","RIPPLE_CENTER","IS_FOCUSED","IS_DISABLED","IS_CHECKED","IS_UPGRADED","onChange_","updateClasses_","onFocus_","onBlur_","onMouseUp_","blur_","checkDisabled","checkToggleState","inputElement_","checked","check","uncheck","boxOutline","tickContainer","tickOutline","rippleContainerElement_","boundRippleMouseUp","boundInputOnChange","boundInputOnFocus","boundInputOnBlur","boundElementMouseUp","MaterialIconToggle","boundElementOnMouseUp","MaterialMenu","TRANSITION_DURATION_SECONDS","TRANSITION_DURATION_FRACTION","CLOSE_TIMEOUT","Keycodes_","ENTER","ESCAPE","SPACE","UP_ARROW","DOWN_ARROW","CONTAINER","OUTLINE","ITEM","ITEM_RIPPLE_CONTAINER","IS_VISIBLE","IS_ANIMATING","BOTTOM_LEFT","BOTTOM_RIGHT","TOP_LEFT","TOP_RIGHT","UNALIGNED","container","parentElement","insertBefore","removeChild","container_","outline","outline_","forElId","forEl","getElementById","forElement_","handleForClick_","handleForKeyboardEvent_","items","boundItemKeydown_","handleItemKeyboardEvent_","boundItemClick_","handleItemClick_","tabIndex","evt","rect","getBoundingClientRect","forRect","style","right","top","offsetTop","offsetHeight","left","offsetLeft","bottom","toggle","keyCode","focus","currentIndex","target","MouseEvent","click","hide","hasAttribute","stopPropagation","closing_","applyClip_","height","width","clip","removeAnimationEndListener_","addAnimationEndListener_","transitionDuration","itemDelay","transitionDelay","parentNode","removeEventListener","removeProperty","MaterialProgress","INDETERMINATE_CLASS","setProgress","p","progressbar_","setBuffer","bufferbar_","auxbar_","el","MaterialRadio","JS_RADIO","RADIO_BTN","RADIO_OUTER_CIRCLE","RADIO_INNER_CIRCLE","radios","getElementsByClassName","btnElement_","onMouseup_","boundChangeHandler_","boundFocusHandler_","boundBlurHandler_","boundMouseUpHandler_","outerCircle","innerCircle","MaterialSlider","isIE_","msPointerEnabled","IE_CONTAINER","SLIDER_CONTAINER","BACKGROUND_FLEX","BACKGROUND_LOWER","BACKGROUND_UPPER","IS_LOWEST_VALUE","onInput_","updateValueStyles_","onContainerMouseDown_","newEvent","buttons","clientX","clientY","y","fraction","value","min","backgroundLower_","flex","webkitFlex","backgroundUpper_","change","containerIE","backgroundFlex","boundInputHandler","boundChangeHandler","boundMouseUpHandler","boundContainerMouseDownHandler","MaterialSnackbar","textElement_","cssClasses_","MESSAGE","actionElement_","ACTION","active","actionHandler_","undefined","message_","actionText_","queuedNotifications_","setActionHidden_","ANIMATION_LENGTH","SNACKBAR","ACTIVE","displaySnackbar_","textContent","cleanup_","timeout_","showSnackbar","data","checkQueue_","shift","Boolean","removeAttribute","MaterialSpinner","MDL_SPINNER_LAYER_COUNT","MDL_SPINNER_LAYER","MDL_SPINNER_CIRCLE_CLIPPER","MDL_SPINNER_CIRCLE","MDL_SPINNER_GAP_PATCH","MDL_SPINNER_LEFT","MDL_SPINNER_RIGHT","createLayer","index","layer","leftClipper","gapPatch","rightClipper","circleOwners","circle","stop","start","MaterialSwitch","TRACK","THUMB","off","track","thumb","focusHelper","boundFocusHandler","boundBlurHandler","MaterialTabs","TAB_CLASS","PANEL_CLASS","UPGRADED_CLASS","MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS","initTabs_","tabs_","panels_","k","MaterialTextfield","maxRows","NO_MAX_ROWS","MAX_ROWS_ATTRIBUTE","LABEL","IS_DIRTY","IS_INVALID","HAS_PLACEHOLDER","onKeyDown_","currentRowCount","onReset_","checkValidity","checkDirty","checkFocus","input_","validity","valid","label_","parseInt","isNaN","boundUpdateClassesHandler","boundResetHandler","boundKeyDownHandler","invalid","MaterialTooltip","BOTTOM","LEFT","RIGHT","TOP","handleMouseEnter_","props","marginLeft","offsetWidth","marginTop","hideTooltip_","boundMouseEnterHandler","boundMouseLeaveAndScrollHandler","MaterialLayout","MAX_WIDTH","TAB_SCROLL_PIXELS","RESIZE_TIMEOUT","MENU_ICON","CHEVRON_LEFT","CHEVRON_RIGHT","Mode_","STANDARD","SEAMED","WATERFALL","SCROLL","HEADER","DRAWER","CONTENT","DRAWER_BTN","ICON","HEADER_SEAMED","HEADER_WATERFALL","HEADER_SCROLL","FIXED_HEADER","OBFUSCATOR","TAB_BAR","TAB_CONTAINER","TAB","TAB_BAR_BUTTON","TAB_BAR_LEFT_BUTTON","TAB_BAR_RIGHT_BUTTON","PANEL","HAS_DRAWER","HAS_TABS","HAS_SCROLLING_HEADER","CASTING_SHADOW","IS_COMPACT","IS_SMALL_SCREEN","IS_DRAWER_OPEN","ON_LARGE_SCREEN","ON_SMALL_SCREEN","contentScrollHandler_","header_","headerVisible","scrollTop","keyboardEventHandler_","drawer_","toggleDrawer","screenSizeHandler_","screenSizeMediaQuery_","matches","obfuscator_","drawerToggleHandler_","type","headerTransitionEndHandler_","headerClickHandler_","tabBar","drawerButton","focusedElement","directChildren","childNodes","numChildren","c","child","persisted","overflowY","mode","drawerButtonIcon","innerHTML","firstChild","obfuscator","matchMedia","addListener","tabContainer","leftButton","leftButtonIcon","scrollLeft","rightButton","rightButtonIcon","tabUpdateHandler","scrollWidth","windowResizeHandler","resizeTimeoutId_","MaterialDataTable","DATA_TABLE","SELECTABLE","SELECT_ELEMENT","IS_SELECTED","selectRow_","checkbox","row","opt_rows","createCheckbox_","label","labelClasses","firstHeader","bodyRows","footRows","rows","concat","th","headerCheckbox","firstCell","td","nodeName","toUpperCase","rowCheckbox","MaterialRipple","INITIAL_SCALE","INITIAL_SIZE","INITIAL_OPACITY","FINAL_OPACITY","FINAL_SCALE","RIPPLE_EFFECT_IGNORE_EVENTS","downHandler_","boundHeight","boundWidth","rippleSize_","sqrt","ignoringMouseDown_","frameCount","getFrameCount","setFrameCount","x","bound","currentTarget","round","touches","setRippleXY","setRippleStyles","animFrameHandler","upHandler_","detail","recentering","frameCount_","x_","y_","boundDownHandler","boundUpHandler","fC","getRippleElement","newX","newY","transformString","scale","offset","webkitTransform","msTransform","transform","ScrollSpy","args","doc","nav","navSelector","win","winHeight","innerHeight","scrollElement","scrollSelector","contents","getContents","contentSelector","attachEvent","scrollTimer","resizeTimer","spy","tagName","onclickToc","navElement","targets","getViewState","toggleNavClass","elementListInView","current","isView","subHeaderRect","headerHeight","scrollBottom","elementTop","elementBottom","maxDepth","maxDepthElement","tempDepth","getTagDepth","id","find","get","reconstructionDrawerGlobalToc","$lists","$breadcrumb","each","li","$li","$linkWrapper","$link","append","isCurrent","hasClass","$ul","ulId","addClass","$toggleWrapper","$toggle","toggleClass","animate","opacity","parent","url","text","button","icon","createTextNode","link","onclick","fileName","pop","replace","hint","hintText","map","header","first","css"],"mappings":"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","file":"sphinx_materialdesign_theme.js","sourceRoot":"../../src/js","sourcesContent":["/*!\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\n$(document).ready(function() {\n $(\".feedback-answer\").on(\"click\", function () {\n $(\".feedback-question\").remove();\n $(\".feedback-answer-container\").remove();\n $(\".feedback-thank-you\").show();\n ga(\"send\", {\n hitType: \"event\",\n eventCategory: \"Did this page help you?\",\n eventAction: $(this).attr(\"data-response\"),\n eventLabel: window.location.pathname || \"unknown\",\n eventValue: $(this).attr(\"data-response\") === \"yes\" ? 1 : 0\n });\n });\n});\n","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Ripple MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialRipple = function MaterialRipple(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialRipple'] = MaterialRipple;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialRipple.prototype.Constant_ = {\n INITIAL_SCALE: 'scale(0.0001, 0.0001)',\n INITIAL_SIZE: '1px',\n INITIAL_OPACITY: '0.4',\n FINAL_OPACITY: '0',\n FINAL_SCALE: ''\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialRipple.prototype.CssClasses_ = {\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE_EFFECT_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE: 'mdl-ripple',\n IS_ANIMATING: 'is-animating',\n IS_VISIBLE: 'is-visible'\n};\n/**\n * Handle mouse / finger down on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRipple.prototype.downHandler_ = function (event) {\n if (!this.rippleElement_.style.width && !this.rippleElement_.style.height) {\n var rect = this.element_.getBoundingClientRect();\n this.boundHeight = rect.height;\n this.boundWidth = rect.width;\n this.rippleSize_ = Math.sqrt(rect.width * rect.width + rect.height * rect.height) * 2 + 2;\n this.rippleElement_.style.width = this.rippleSize_ + 'px';\n this.rippleElement_.style.height = this.rippleSize_ + 'px';\n }\n this.rippleElement_.classList.add(this.CssClasses_.IS_VISIBLE);\n if (event.type === 'mousedown' && this.ignoringMouseDown_) {\n this.ignoringMouseDown_ = false;\n } else {\n if (event.type === 'touchstart') {\n this.ignoringMouseDown_ = true;\n }\n var frameCount = this.getFrameCount();\n if (frameCount > 0) {\n return;\n }\n this.setFrameCount(1);\n var bound = event.currentTarget.getBoundingClientRect();\n var x;\n var y;\n // Check if we are handling a keyboard click.\n if (event.clientX === 0 && event.clientY === 0) {\n x = Math.round(bound.width / 2);\n y = Math.round(bound.height / 2);\n } else {\n var clientX = event.clientX !== undefined ? event.clientX : event.touches[0].clientX;\n var clientY = event.clientY !== undefined ? event.clientY : event.touches[0].clientY;\n x = Math.round(clientX - bound.left);\n y = Math.round(clientY - bound.top);\n }\n this.setRippleXY(x, y);\n this.setRippleStyles(true);\n window.requestAnimationFrame(this.animFrameHandler.bind(this));\n }\n};\n/**\n * Handle mouse / finger up on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRipple.prototype.upHandler_ = function (event) {\n // Don't fire for the artificial \"mouseup\" generated by a double-click.\n if (event && event.detail !== 2) {\n // Allow a repaint to occur before removing this class, so the animation\n // shows for tap events, which seem to trigger a mouseup too soon after\n // mousedown.\n window.setTimeout(function () {\n this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE);\n }.bind(this), 0);\n }\n};\n/**\n * Initialize element.\n */\nMaterialRipple.prototype.init = function () {\n if (this.element_) {\n var recentering = this.element_.classList.contains(this.CssClasses_.RIPPLE_CENTER);\n if (!this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT_IGNORE_EVENTS)) {\n this.rippleElement_ = this.element_.querySelector('.' + this.CssClasses_.RIPPLE);\n this.frameCount_ = 0;\n this.rippleSize_ = 0;\n this.x_ = 0;\n this.y_ = 0;\n // Touch start produces a compat mouse down event, which would cause a\n // second ripples. To avoid that, we use this property to ignore the first\n // mouse down after a touch start.\n this.ignoringMouseDown_ = false;\n this.boundDownHandler = this.downHandler_.bind(this);\n this.element_.addEventListener('mousedown', this.boundDownHandler);\n this.element_.addEventListener('touchstart', this.boundDownHandler);\n this.boundUpHandler = this.upHandler_.bind(this);\n this.element_.addEventListener('mouseup', this.boundUpHandler);\n this.element_.addEventListener('mouseleave', this.boundUpHandler);\n this.element_.addEventListener('touchend', this.boundUpHandler);\n this.element_.addEventListener('blur', this.boundUpHandler);\n /**\n * Getter for frameCount_.\n * @return {number} the frame count.\n */\n this.getFrameCount = function () {\n return this.frameCount_;\n };\n /**\n * Setter for frameCount_.\n * @param {number} fC the frame count.\n */\n this.setFrameCount = function (fC) {\n this.frameCount_ = fC;\n };\n /**\n * Getter for rippleElement_.\n * @return {Element} the ripple element.\n */\n this.getRippleElement = function () {\n return this.rippleElement_;\n };\n /**\n * Sets the ripple X and Y coordinates.\n * @param {number} newX the new X coordinate\n * @param {number} newY the new Y coordinate\n */\n this.setRippleXY = function (newX, newY) {\n this.x_ = newX;\n this.y_ = newY;\n };\n /**\n * Sets the ripple styles.\n * @param {boolean} start whether or not this is the start frame.\n */\n this.setRippleStyles = function (start) {\n if (this.rippleElement_ !== null) {\n var transformString;\n var scale;\n var size;\n var offset = 'translate(' + this.x_ + 'px, ' + this.y_ + 'px)';\n if (start) {\n scale = this.Constant_.INITIAL_SCALE;\n size = this.Constant_.INITIAL_SIZE;\n } else {\n scale = this.Constant_.FINAL_SCALE;\n size = this.rippleSize_ + 'px';\n if (recentering) {\n offset = 'translate(' + this.boundWidth / 2 + 'px, ' + this.boundHeight / 2 + 'px)';\n }\n }\n transformString = 'translate(-50%, -50%) ' + offset + scale;\n this.rippleElement_.style.webkitTransform = transformString;\n this.rippleElement_.style.msTransform = transformString;\n this.rippleElement_.style.transform = transformString;\n if (start) {\n this.rippleElement_.classList.remove(this.CssClasses_.IS_ANIMATING);\n } else {\n this.rippleElement_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n }\n };\n /**\n * Handles an animation frame.\n */\n this.animFrameHandler = function () {\n if (this.frameCount_-- > 0) {\n window.requestAnimationFrame(this.animFrameHandler.bind(this));\n } else {\n this.setRippleStyles(false);\n }\n };\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialRipple,\n classAsString: 'MaterialRipple',\n cssClass: 'mdl-js-ripple-effect',\n widget: false\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Tabs MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {Element} element The element that will be upgraded.\n */\nvar MaterialTabs = function MaterialTabs(element) {\n // Stores the HTML element.\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialTabs'] = MaterialTabs;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string}\n * @private\n */\nMaterialTabs.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialTabs.prototype.CssClasses_ = {\n TAB_CLASS: 'mdl-tabs__tab',\n PANEL_CLASS: 'mdl-tabs__panel',\n ACTIVE_CLASS: 'is-active',\n UPGRADED_CLASS: 'is-upgraded',\n MDL_JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n MDL_RIPPLE_CONTAINER: 'mdl-tabs__ripple-container',\n MDL_RIPPLE: 'mdl-ripple',\n MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events'\n};\n/**\n * Handle clicks to a tabs component\n *\n * @private\n */\nMaterialTabs.prototype.initTabs_ = function () {\n if (this.element_.classList.contains(this.CssClasses_.MDL_JS_RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS);\n }\n // Select element tabs, document panels\n this.tabs_ = this.element_.querySelectorAll('.' + this.CssClasses_.TAB_CLASS);\n this.panels_ = this.element_.querySelectorAll('.' + this.CssClasses_.PANEL_CLASS);\n // Create new tabs for each tab element\n for (var i = 0; i < this.tabs_.length; i++) {\n new MaterialTab(this.tabs_[i], this);\n }\n this.element_.classList.add(this.CssClasses_.UPGRADED_CLASS);\n};\n/**\n * Reset tab state, dropping active classes\n *\n * @private\n */\nMaterialTabs.prototype.resetTabState_ = function () {\n for (var k = 0; k < this.tabs_.length; k++) {\n this.tabs_[k].classList.remove(this.CssClasses_.ACTIVE_CLASS);\n }\n};\n/**\n * Reset panel state, droping active classes\n *\n * @private\n */\nMaterialTabs.prototype.resetPanelState_ = function () {\n for (var j = 0; j < this.panels_.length; j++) {\n this.panels_[j].classList.remove(this.CssClasses_.ACTIVE_CLASS);\n }\n};\n/**\n * Initialize element.\n */\nMaterialTabs.prototype.init = function () {\n if (this.element_) {\n this.initTabs_();\n }\n};\n/**\n * Constructor for an individual tab.\n *\n * @constructor\n * @param {Element} tab The HTML element for the tab.\n * @param {MaterialTabs} ctx The MaterialTabs object that owns the tab.\n */\nfunction MaterialTab(tab, ctx) {\n if (tab) {\n if (ctx.element_.classList.contains(ctx.CssClasses_.MDL_JS_RIPPLE_EFFECT)) {\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(ctx.CssClasses_.MDL_RIPPLE_CONTAINER);\n rippleContainer.classList.add(ctx.CssClasses_.MDL_JS_RIPPLE_EFFECT);\n var ripple = document.createElement('span');\n ripple.classList.add(ctx.CssClasses_.MDL_RIPPLE);\n rippleContainer.appendChild(ripple);\n tab.appendChild(rippleContainer);\n }\n tab.addEventListener('click', function (e) {\n if (tab.getAttribute('href').charAt(0) === '#') {\n e.preventDefault();\n var href = tab.href.split('#')[1];\n var panel = ctx.element_.querySelector('#' + href);\n ctx.resetTabState_();\n ctx.resetPanelState_();\n tab.classList.add(ctx.CssClasses_.ACTIVE_CLASS);\n panel.classList.add(ctx.CssClasses_.ACTIVE_CLASS);\n }\n });\n }\n}\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTabs,\n classAsString: 'MaterialTabs',\n cssClass: 'mdl-js-tabs'\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Layout MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialLayout = function MaterialLayout(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialLayout'] = MaterialLayout;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialLayout.prototype.Constant_ = {\n MAX_WIDTH: '(max-width: 1024px)',\n TAB_SCROLL_PIXELS: 100,\n RESIZE_TIMEOUT: 100,\n MENU_ICON: '',\n CHEVRON_LEFT: 'chevron_left',\n CHEVRON_RIGHT: 'chevron_right'\n};\n/**\n * Keycodes, for code readability.\n *\n * @enum {number}\n * @private\n */\nMaterialLayout.prototype.Keycodes_ = {\n ENTER: 13,\n ESCAPE: 27,\n SPACE: 32\n};\n/**\n * Modes.\n *\n * @enum {number}\n * @private\n */\nMaterialLayout.prototype.Mode_ = {\n STANDARD: 0,\n SEAMED: 1,\n WATERFALL: 2,\n SCROLL: 3\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialLayout.prototype.CssClasses_ = {\n CONTAINER: 'mdl-layout__container',\n HEADER: 'mdl-layout__header',\n DRAWER: 'mdl-layout__drawer',\n CONTENT: 'mdl-layout__content',\n DRAWER_BTN: 'mdl-layout__drawer-button',\n ICON: 'material-icons',\n JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_CONTAINER: 'mdl-layout__tab-ripple-container',\n RIPPLE: 'mdl-ripple',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n HEADER_SEAMED: 'mdl-layout__header--seamed',\n HEADER_WATERFALL: 'mdl-layout__header--waterfall',\n HEADER_SCROLL: 'mdl-layout__header--scroll',\n FIXED_HEADER: 'mdl-layout--fixed-header',\n OBFUSCATOR: 'mdl-layout__obfuscator',\n TAB_BAR: 'mdl-layout__tab-bar',\n TAB_CONTAINER: 'mdl-layout__tab-bar-container',\n TAB: 'mdl-layout__tab',\n TAB_BAR_BUTTON: 'mdl-layout__tab-bar-button',\n TAB_BAR_LEFT_BUTTON: 'mdl-layout__tab-bar-left-button',\n TAB_BAR_RIGHT_BUTTON: 'mdl-layout__tab-bar-right-button',\n TAB_MANUAL_SWITCH: 'mdl-layout__tab-manual-switch',\n PANEL: 'mdl-layout__tab-panel',\n HAS_DRAWER: 'has-drawer',\n HAS_TABS: 'has-tabs',\n HAS_SCROLLING_HEADER: 'has-scrolling-header',\n CASTING_SHADOW: 'is-casting-shadow',\n IS_COMPACT: 'is-compact',\n IS_SMALL_SCREEN: 'is-small-screen',\n IS_DRAWER_OPEN: 'is-visible',\n IS_ACTIVE: 'is-active',\n IS_UPGRADED: 'is-upgraded',\n IS_ANIMATING: 'is-animating',\n ON_LARGE_SCREEN: 'mdl-layout--large-screen-only',\n ON_SMALL_SCREEN: 'mdl-layout--small-screen-only'\n};\n/**\n * Handles scrolling on the content.\n *\n * @private\n */\nMaterialLayout.prototype.contentScrollHandler_ = function () {\n if (this.header_.classList.contains(this.CssClasses_.IS_ANIMATING)) {\n return;\n }\n var headerVisible = !this.element_.classList.contains(this.CssClasses_.IS_SMALL_SCREEN) || this.element_.classList.contains(this.CssClasses_.FIXED_HEADER);\n if (this.content_.scrollTop > 0 && !this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n this.header_.classList.add(this.CssClasses_.CASTING_SHADOW);\n this.header_.classList.add(this.CssClasses_.IS_COMPACT);\n if (headerVisible) {\n this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n } else if (this.content_.scrollTop <= 0 && this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n this.header_.classList.remove(this.CssClasses_.IS_COMPACT);\n if (headerVisible) {\n this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n }\n};\n/**\n * Handles a keyboard event on the drawer.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialLayout.prototype.keyboardEventHandler_ = function (evt) {\n // Only react when the drawer is open.\n if (evt.keyCode === this.Keycodes_.ESCAPE && this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)) {\n this.toggleDrawer();\n }\n};\n/**\n * Handles changes in screen size.\n *\n * @private\n */\nMaterialLayout.prototype.screenSizeHandler_ = function () {\n if (this.screenSizeMediaQuery_.matches) {\n this.element_.classList.add(this.CssClasses_.IS_SMALL_SCREEN);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_SMALL_SCREEN);\n // Collapse drawer (if any) when moving to a large screen size.\n if (this.drawer_) {\n this.drawer_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN);\n this.obfuscator_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN);\n }\n }\n};\n/**\n * Handles events of drawer button.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialLayout.prototype.drawerToggleHandler_ = function (evt) {\n if (evt && evt.type === 'keydown') {\n if (evt.keyCode === this.Keycodes_.SPACE || evt.keyCode === this.Keycodes_.ENTER) {\n // prevent scrolling in drawer nav\n evt.preventDefault();\n } else {\n // prevent other keys\n return;\n }\n }\n this.toggleDrawer();\n};\n/**\n * Handles (un)setting the `is-animating` class\n *\n * @private\n */\nMaterialLayout.prototype.headerTransitionEndHandler_ = function () {\n this.header_.classList.remove(this.CssClasses_.IS_ANIMATING);\n};\n/**\n * Handles expanding the header on click\n *\n * @private\n */\nMaterialLayout.prototype.headerClickHandler_ = function () {\n if (this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n this.header_.classList.remove(this.CssClasses_.IS_COMPACT);\n this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n};\n/**\n * Reset tab state, dropping active classes\n *\n * @private\n */\nMaterialLayout.prototype.resetTabState_ = function (tabBar) {\n for (var k = 0; k < tabBar.length; k++) {\n tabBar[k].classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n};\n/**\n * Reset panel state, droping active classes\n *\n * @private\n */\nMaterialLayout.prototype.resetPanelState_ = function (panels) {\n for (var j = 0; j < panels.length; j++) {\n panels[j].classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n};\n/**\n * Toggle drawer state\n *\n * @public\n */\nMaterialLayout.prototype.toggleDrawer = function () {\n var drawerButton = this.element_.querySelector('.' + this.CssClasses_.DRAWER_BTN);\n this.drawer_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);\n this.obfuscator_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);\n // Set accessibility properties.\n if (this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)) {\n this.drawer_.setAttribute('aria-hidden', 'false');\n drawerButton.setAttribute('aria-expanded', 'true');\n } else {\n this.drawer_.setAttribute('aria-hidden', 'true');\n drawerButton.setAttribute('aria-expanded', 'false');\n }\n};\nMaterialLayout.prototype['toggleDrawer'] = MaterialLayout.prototype.toggleDrawer;\n/**\n * Initialize element.\n */\nMaterialLayout.prototype.init = function () {\n if (this.element_) {\n var container = document.createElement('div');\n container.classList.add(this.CssClasses_.CONTAINER);\n var focusedElement = this.element_.querySelector(':focus');\n this.element_.parentElement.insertBefore(container, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n container.appendChild(this.element_);\n if (focusedElement) {\n focusedElement.focus();\n }\n var directChildren = this.element_.childNodes;\n var numChildren = directChildren.length;\n for (var c = 0; c < numChildren; c++) {\n var child = directChildren[c];\n if (child.classList && child.classList.contains(this.CssClasses_.HEADER)) {\n this.header_ = child;\n }\n if (child.classList && child.classList.contains(this.CssClasses_.DRAWER)) {\n this.drawer_ = child;\n }\n if (child.classList && child.classList.contains(this.CssClasses_.CONTENT)) {\n this.content_ = child;\n }\n }\n window.addEventListener('pageshow', function (e) {\n if (e.persisted) {\n // when page is loaded from back/forward cache\n // trigger repaint to let layout scroll in safari\n this.element_.style.overflowY = 'hidden';\n requestAnimationFrame(function () {\n this.element_.style.overflowY = '';\n }.bind(this));\n }\n }.bind(this), false);\n if (this.header_) {\n this.tabBar_ = this.header_.querySelector('.' + this.CssClasses_.TAB_BAR);\n }\n var mode = this.Mode_.STANDARD;\n if (this.header_) {\n if (this.header_.classList.contains(this.CssClasses_.HEADER_SEAMED)) {\n mode = this.Mode_.SEAMED;\n } else if (this.header_.classList.contains(this.CssClasses_.HEADER_WATERFALL)) {\n mode = this.Mode_.WATERFALL;\n this.header_.addEventListener('transitionend', this.headerTransitionEndHandler_.bind(this));\n this.header_.addEventListener('click', this.headerClickHandler_.bind(this));\n } else if (this.header_.classList.contains(this.CssClasses_.HEADER_SCROLL)) {\n mode = this.Mode_.SCROLL;\n container.classList.add(this.CssClasses_.HAS_SCROLLING_HEADER);\n }\n if (mode === this.Mode_.STANDARD) {\n this.header_.classList.add(this.CssClasses_.CASTING_SHADOW);\n if (this.tabBar_) {\n this.tabBar_.classList.add(this.CssClasses_.CASTING_SHADOW);\n }\n } else if (mode === this.Mode_.SEAMED || mode === this.Mode_.SCROLL) {\n this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n if (this.tabBar_) {\n this.tabBar_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n }\n } else if (mode === this.Mode_.WATERFALL) {\n // Add and remove shadows depending on scroll position.\n // Also add/remove auxiliary class for styling of the compact version of\n // the header.\n this.content_.addEventListener('scroll', this.contentScrollHandler_.bind(this));\n this.contentScrollHandler_();\n }\n }\n // Add drawer toggling button to our layout, if we have an openable drawer.\n if (this.drawer_) {\n var drawerButton = this.element_.querySelector('.' + this.CssClasses_.DRAWER_BTN);\n if (!drawerButton) {\n drawerButton = document.createElement('div');\n drawerButton.setAttribute('aria-expanded', 'false');\n drawerButton.setAttribute('role', 'button');\n drawerButton.setAttribute('tabindex', '0');\n drawerButton.classList.add(this.CssClasses_.DRAWER_BTN);\n var drawerButtonIcon = document.createElement('i');\n drawerButtonIcon.classList.add(this.CssClasses_.ICON);\n drawerButtonIcon.innerHTML = this.Constant_.MENU_ICON;\n drawerButton.appendChild(drawerButtonIcon);\n }\n if (this.drawer_.classList.contains(this.CssClasses_.ON_LARGE_SCREEN)) {\n //If drawer has ON_LARGE_SCREEN class then add it to the drawer toggle button as well.\n drawerButton.classList.add(this.CssClasses_.ON_LARGE_SCREEN);\n } else if (this.drawer_.classList.contains(this.CssClasses_.ON_SMALL_SCREEN)) {\n //If drawer has ON_SMALL_SCREEN class then add it to the drawer toggle button as well.\n drawerButton.classList.add(this.CssClasses_.ON_SMALL_SCREEN);\n }\n drawerButton.addEventListener('click', this.drawerToggleHandler_.bind(this));\n drawerButton.addEventListener('keydown', this.drawerToggleHandler_.bind(this));\n // Add a class if the layout has a drawer, for altering the left padding.\n // Adds the HAS_DRAWER to the elements since this.header_ may or may\n // not be present.\n this.element_.classList.add(this.CssClasses_.HAS_DRAWER);\n // If we have a fixed header, add the button to the header rather than\n // the layout.\n if (this.element_.classList.contains(this.CssClasses_.FIXED_HEADER)) {\n this.header_.insertBefore(drawerButton, this.header_.firstChild);\n } else {\n this.element_.insertBefore(drawerButton, this.content_);\n }\n var obfuscator = document.createElement('div');\n obfuscator.classList.add(this.CssClasses_.OBFUSCATOR);\n this.element_.appendChild(obfuscator);\n obfuscator.addEventListener('click', this.drawerToggleHandler_.bind(this));\n this.obfuscator_ = obfuscator;\n this.drawer_.addEventListener('keydown', this.keyboardEventHandler_.bind(this));\n this.drawer_.setAttribute('aria-hidden', 'true');\n }\n // Keep an eye on screen size, and add/remove auxiliary class for styling\n // of small screens.\n this.screenSizeMediaQuery_ = window.matchMedia(this.Constant_.MAX_WIDTH);\n this.screenSizeMediaQuery_.addListener(this.screenSizeHandler_.bind(this));\n this.screenSizeHandler_();\n // Initialize tabs, if any.\n if (this.header_ && this.tabBar_) {\n this.element_.classList.add(this.CssClasses_.HAS_TABS);\n var tabContainer = document.createElement('div');\n tabContainer.classList.add(this.CssClasses_.TAB_CONTAINER);\n this.header_.insertBefore(tabContainer, this.tabBar_);\n this.header_.removeChild(this.tabBar_);\n var leftButton = document.createElement('div');\n leftButton.classList.add(this.CssClasses_.TAB_BAR_BUTTON);\n leftButton.classList.add(this.CssClasses_.TAB_BAR_LEFT_BUTTON);\n var leftButtonIcon = document.createElement('i');\n leftButtonIcon.classList.add(this.CssClasses_.ICON);\n leftButtonIcon.textContent = this.Constant_.CHEVRON_LEFT;\n leftButton.appendChild(leftButtonIcon);\n leftButton.addEventListener('click', function () {\n this.tabBar_.scrollLeft -= this.Constant_.TAB_SCROLL_PIXELS;\n }.bind(this));\n var rightButton = document.createElement('div');\n rightButton.classList.add(this.CssClasses_.TAB_BAR_BUTTON);\n rightButton.classList.add(this.CssClasses_.TAB_BAR_RIGHT_BUTTON);\n var rightButtonIcon = document.createElement('i');\n rightButtonIcon.classList.add(this.CssClasses_.ICON);\n rightButtonIcon.textContent = this.Constant_.CHEVRON_RIGHT;\n rightButton.appendChild(rightButtonIcon);\n rightButton.addEventListener('click', function () {\n this.tabBar_.scrollLeft += this.Constant_.TAB_SCROLL_PIXELS;\n }.bind(this));\n tabContainer.appendChild(leftButton);\n tabContainer.appendChild(this.tabBar_);\n tabContainer.appendChild(rightButton);\n // Add and remove tab buttons depending on scroll position and total\n // window size.\n var tabUpdateHandler = function () {\n if (this.tabBar_.scrollLeft > 0) {\n leftButton.classList.add(this.CssClasses_.IS_ACTIVE);\n } else {\n leftButton.classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n if (this.tabBar_.scrollLeft < this.tabBar_.scrollWidth - this.tabBar_.offsetWidth) {\n rightButton.classList.add(this.CssClasses_.IS_ACTIVE);\n } else {\n rightButton.classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n }.bind(this);\n this.tabBar_.addEventListener('scroll', tabUpdateHandler);\n tabUpdateHandler();\n // Update tabs when the window resizes.\n var windowResizeHandler = function () {\n // Use timeouts to make sure it doesn't happen too often.\n if (this.resizeTimeoutId_) {\n clearTimeout(this.resizeTimeoutId_);\n }\n this.resizeTimeoutId_ = setTimeout(function () {\n tabUpdateHandler();\n this.resizeTimeoutId_ = null;\n }.bind(this), this.Constant_.RESIZE_TIMEOUT);\n }.bind(this);\n window.addEventListener('resize', windowResizeHandler);\n if (this.tabBar_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)) {\n this.tabBar_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n }\n // Select element tabs, document panels\n var tabs = this.tabBar_.querySelectorAll('.' + this.CssClasses_.TAB);\n var panels = this.content_.querySelectorAll('.' + this.CssClasses_.PANEL);\n // Create new tabs for each tab element\n for (var i = 0; i < tabs.length; i++) {\n new MaterialLayoutTab(tabs[i], tabs, panels, this);\n }\n }\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n/**\n * Constructor for an individual tab.\n *\n * @constructor\n * @param {HTMLElement} tab The HTML element for the tab.\n * @param {!Array} tabs Array with HTML elements for all tabs.\n * @param {!Array} panels Array with HTML elements for all panels.\n * @param {MaterialLayout} layout The MaterialLayout object that owns the tab.\n */\nfunction MaterialLayoutTab(tab, tabs, panels, layout) {\n /**\n * Auxiliary method to programmatically select a tab in the UI.\n */\n function selectTab() {\n var href = tab.href.split('#')[1];\n var panel = layout.content_.querySelector('#' + href);\n layout.resetTabState_(tabs);\n layout.resetPanelState_(panels);\n tab.classList.add(layout.CssClasses_.IS_ACTIVE);\n panel.classList.add(layout.CssClasses_.IS_ACTIVE);\n }\n if (layout.tabBar_.classList.contains(layout.CssClasses_.JS_RIPPLE_EFFECT)) {\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(layout.CssClasses_.RIPPLE_CONTAINER);\n rippleContainer.classList.add(layout.CssClasses_.JS_RIPPLE_EFFECT);\n var ripple = document.createElement('span');\n ripple.classList.add(layout.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n tab.appendChild(rippleContainer);\n }\n if (!layout.tabBar_.classList.contains(layout.CssClasses_.TAB_MANUAL_SWITCH)) {\n tab.addEventListener('click', function (e) {\n if (tab.getAttribute('href').charAt(0) === '#') {\n e.preventDefault();\n selectTab();\n }\n });\n }\n tab.show = selectTab;\n}\nwindow['MaterialLayoutTab'] = MaterialLayoutTab;\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialLayout,\n classAsString: 'MaterialLayout',\n cssClass: 'mdl-js-layout'\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * A component handler interface using the revealing module design pattern.\n * More details on this design pattern here:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @author Jason Mayes.\n */\n/* exported componentHandler */\n\n// Pre-defining the componentHandler interface, for closure documentation and\n// static verification.\nvar componentHandler = {\n /**\n * Searches existing DOM for elements of our component type and upgrades them\n * if they have not already been upgraded.\n *\n * @param {string=} optJsClass the programatic name of the element class we\n * need to create a new instance of.\n * @param {string=} optCssClass the name of the CSS class elements of this\n * type will have.\n */\n upgradeDom: function(optJsClass, optCssClass) {},\n /**\n * Upgrades a specific element rather than all in the DOM.\n *\n * @param {!Element} element The element we wish to upgrade.\n * @param {string=} optJsClass Optional name of the class we want to upgrade\n * the element to.\n */\n upgradeElement: function(element, optJsClass) {},\n /**\n * Upgrades a specific list of elements rather than all in the DOM.\n *\n * @param {!Element|!Array|!NodeList|!HTMLCollection} elements\n * The elements we wish to upgrade.\n */\n upgradeElements: function(elements) {},\n /**\n * Upgrades all registered components found in the current DOM. This is\n * automatically called on window load.\n */\n upgradeAllRegistered: function() {},\n /**\n * Allows user to be alerted to any upgrades that are performed for a given\n * component type\n *\n * @param {string} jsClass The class name of the MDL component we wish\n * to hook into for any upgrades performed.\n * @param {function(!HTMLElement)} callback The function to call upon an\n * upgrade. This function should expect 1 parameter - the HTMLElement which\n * got upgraded.\n */\n registerUpgradedCallback: function(jsClass, callback) {},\n /**\n * Registers a class for future use and attempts to upgrade existing DOM.\n *\n * @param {componentHandler.ComponentConfigPublic} config the registration configuration\n */\n register: function(config) {},\n /**\n * Downgrade either a given node, an array of nodes, or a NodeList.\n *\n * @param {!Node|!Array|!NodeList} nodes\n */\n downgradeElements: function(nodes) {}\n};\n\ncomponentHandler = (function() {\n 'use strict';\n\n /** @type {!Array} */\n var registeredComponents_ = [];\n\n /** @type {!Array} */\n var createdComponents_ = [];\n\n var componentConfigProperty_ = 'mdlComponentConfigInternal_';\n\n /**\n * Searches registered components for a class we are interested in using.\n * Optionally replaces a match with passed object if specified.\n *\n * @param {string} name The name of a class we want to use.\n * @param {componentHandler.ComponentConfig=} optReplace Optional object to replace match with.\n * @return {!Object|boolean}\n * @private\n */\n function findRegisteredClass_(name, optReplace) {\n for (var i = 0; i < registeredComponents_.length; i++) {\n if (registeredComponents_[i].className === name) {\n if (typeof optReplace !== 'undefined') {\n registeredComponents_[i] = optReplace;\n }\n return registeredComponents_[i];\n }\n }\n return false;\n }\n\n /**\n * Returns an array of the classNames of the upgraded classes on the element.\n *\n * @param {!Element} element The element to fetch data from.\n * @return {!Array}\n * @private\n */\n function getUpgradedListOfElement_(element) {\n var dataUpgraded = element.getAttribute('data-upgraded');\n // Use `['']` as default value to conform the `,name,name...` style.\n return dataUpgraded === null ? [''] : dataUpgraded.split(',');\n }\n\n /**\n * Returns true if the given element has already been upgraded for the given\n * class.\n *\n * @param {!Element} element The element we want to check.\n * @param {string} jsClass The class to check for.\n * @returns {boolean}\n * @private\n */\n function isElementUpgraded_(element, jsClass) {\n var upgradedList = getUpgradedListOfElement_(element);\n return upgradedList.indexOf(jsClass) !== -1;\n }\n\n /**\n * Create an event object.\n *\n * @param {string} eventType The type name of the event.\n * @param {boolean} bubbles Whether the event should bubble up the DOM.\n * @param {boolean} cancelable Whether the event can be canceled.\n * @returns {!Event}\n */\n function createEvent_(eventType, bubbles, cancelable) {\n if ('CustomEvent' in window && typeof window.CustomEvent === 'function') {\n return new CustomEvent(eventType, {\n bubbles: bubbles,\n cancelable: cancelable\n });\n } else {\n var ev = document.createEvent('Events');\n ev.initEvent(eventType, bubbles, cancelable);\n return ev;\n }\n }\n\n /**\n * Searches existing DOM for elements of our component type and upgrades them\n * if they have not already been upgraded.\n *\n * @param {string=} optJsClass the programatic name of the element class we\n * need to create a new instance of.\n * @param {string=} optCssClass the name of the CSS class elements of this\n * type will have.\n */\n function upgradeDomInternal(optJsClass, optCssClass) {\n if (typeof optJsClass === 'undefined' &&\n typeof optCssClass === 'undefined') {\n for (var i = 0; i < registeredComponents_.length; i++) {\n upgradeDomInternal(registeredComponents_[i].className,\n registeredComponents_[i].cssClass);\n }\n } else {\n var jsClass = /** @type {string} */ (optJsClass);\n if (typeof optCssClass === 'undefined') {\n var registeredClass = findRegisteredClass_(jsClass);\n if (registeredClass) {\n optCssClass = registeredClass.cssClass;\n }\n }\n\n var elements = document.querySelectorAll('.' + optCssClass);\n for (var n = 0; n < elements.length; n++) {\n upgradeElementInternal(elements[n], jsClass);\n }\n }\n }\n\n /**\n * Upgrades a specific element rather than all in the DOM.\n *\n * @param {!Element} element The element we wish to upgrade.\n * @param {string=} optJsClass Optional name of the class we want to upgrade\n * the element to.\n */\n function upgradeElementInternal(element, optJsClass) {\n // Verify argument type.\n if (!(typeof element === 'object' && element instanceof Element)) {\n throw new Error('Invalid argument provided to upgrade MDL element.');\n }\n // Allow upgrade to be canceled by canceling emitted event.\n var upgradingEv = createEvent_('mdl-componentupgrading', true, true);\n element.dispatchEvent(upgradingEv);\n if (upgradingEv.defaultPrevented) {\n return;\n }\n\n var upgradedList = getUpgradedListOfElement_(element);\n var classesToUpgrade = [];\n // If jsClass is not provided scan the registered components to find the\n // ones matching the element's CSS classList.\n if (!optJsClass) {\n var classList = element.classList;\n registeredComponents_.forEach(function(component) {\n // Match CSS & Not to be upgraded & Not upgraded.\n if (classList.contains(component.cssClass) &&\n classesToUpgrade.indexOf(component) === -1 &&\n !isElementUpgraded_(element, component.className)) {\n classesToUpgrade.push(component);\n }\n });\n } else if (!isElementUpgraded_(element, optJsClass)) {\n classesToUpgrade.push(findRegisteredClass_(optJsClass));\n }\n\n // Upgrade the element for each classes.\n for (var i = 0, n = classesToUpgrade.length, registeredClass; i < n; i++) {\n registeredClass = classesToUpgrade[i];\n if (registeredClass) {\n // Mark element as upgraded.\n upgradedList.push(registeredClass.className);\n element.setAttribute('data-upgraded', upgradedList.join(','));\n var instance = new registeredClass.classConstructor(element);\n instance[componentConfigProperty_] = registeredClass;\n createdComponents_.push(instance);\n // Call any callbacks the user has registered with this component type.\n for (var j = 0, m = registeredClass.callbacks.length; j < m; j++) {\n registeredClass.callbacks[j](element);\n }\n\n if (registeredClass.widget) {\n // Assign per element instance for control over API\n element[registeredClass.className] = instance;\n }\n } else {\n throw new Error(\n 'Unable to find a registered component for the given class.');\n }\n\n var upgradedEv = createEvent_('mdl-componentupgraded', true, false);\n element.dispatchEvent(upgradedEv);\n }\n }\n\n /**\n * Upgrades a specific list of elements rather than all in the DOM.\n *\n * @param {!Element|!Array|!NodeList|!HTMLCollection} elements\n * The elements we wish to upgrade.\n */\n function upgradeElementsInternal(elements) {\n if (!Array.isArray(elements)) {\n if (elements instanceof Element) {\n elements = [elements];\n } else {\n elements = Array.prototype.slice.call(elements);\n }\n }\n for (var i = 0, n = elements.length, element; i < n; i++) {\n element = elements[i];\n if (element instanceof HTMLElement) {\n upgradeElementInternal(element);\n if (element.children.length > 0) {\n upgradeElementsInternal(element.children);\n }\n }\n }\n }\n\n /**\n * Registers a class for future use and attempts to upgrade existing DOM.\n *\n * @param {componentHandler.ComponentConfigPublic} config\n */\n function registerInternal(config) {\n // In order to support both Closure-compiled and uncompiled code accessing\n // this method, we need to allow for both the dot and array syntax for\n // property access. You'll therefore see the `foo.bar || foo['bar']`\n // pattern repeated across this method.\n var widgetMissing = (typeof config.widget === 'undefined' &&\n typeof config['widget'] === 'undefined');\n var widget = true;\n\n if (!widgetMissing) {\n widget = config.widget || config['widget'];\n }\n\n var newConfig = /** @type {componentHandler.ComponentConfig} */ ({\n classConstructor: config.constructor || config['constructor'],\n className: config.classAsString || config['classAsString'],\n cssClass: config.cssClass || config['cssClass'],\n widget: widget,\n callbacks: []\n });\n\n registeredComponents_.forEach(function(item) {\n if (item.cssClass === newConfig.cssClass) {\n throw new Error('The provided cssClass has already been registered: ' + item.cssClass);\n }\n if (item.className === newConfig.className) {\n throw new Error('The provided className has already been registered');\n }\n });\n\n if (config.constructor.prototype\n .hasOwnProperty(componentConfigProperty_)) {\n throw new Error(\n 'MDL component classes must not have ' + componentConfigProperty_ +\n ' defined as a property.');\n }\n\n var found = findRegisteredClass_(config.classAsString, newConfig);\n\n if (!found) {\n registeredComponents_.push(newConfig);\n }\n }\n\n /**\n * Allows user to be alerted to any upgrades that are performed for a given\n * component type\n *\n * @param {string} jsClass The class name of the MDL component we wish\n * to hook into for any upgrades performed.\n * @param {function(!HTMLElement)} callback The function to call upon an\n * upgrade. This function should expect 1 parameter - the HTMLElement which\n * got upgraded.\n */\n function registerUpgradedCallbackInternal(jsClass, callback) {\n var regClass = findRegisteredClass_(jsClass);\n if (regClass) {\n regClass.callbacks.push(callback);\n }\n }\n\n /**\n * Upgrades all registered components found in the current DOM. This is\n * automatically called on window load.\n */\n function upgradeAllRegisteredInternal() {\n for (var n = 0; n < registeredComponents_.length; n++) {\n upgradeDomInternal(registeredComponents_[n].className);\n }\n }\n\n /**\n * Check the component for the downgrade method.\n * Execute if found.\n * Remove component from createdComponents list.\n *\n * @param {?componentHandler.Component} component\n */\n function deconstructComponentInternal(component) {\n if (component) {\n var componentIndex = createdComponents_.indexOf(component);\n createdComponents_.splice(componentIndex, 1);\n\n var upgrades = component.element_.getAttribute('data-upgraded').split(',');\n var componentPlace = upgrades.indexOf(component[componentConfigProperty_].classAsString);\n upgrades.splice(componentPlace, 1);\n component.element_.setAttribute('data-upgraded', upgrades.join(','));\n\n var ev = createEvent_('mdl-componentdowngraded', true, false);\n component.element_.dispatchEvent(ev);\n }\n }\n\n /**\n * Downgrade either a given node, an array of nodes, or a NodeList.\n *\n * @param {!Node|!Array|!NodeList} nodes\n */\n function downgradeNodesInternal(nodes) {\n /**\n * Auxiliary function to downgrade a single node.\n * @param {!Node} node the node to be downgraded\n */\n var downgradeNode = function(node) {\n createdComponents_.filter(function(item) {\n return item.element_ === node;\n }).forEach(deconstructComponentInternal);\n };\n if (nodes instanceof Array || nodes instanceof NodeList) {\n for (var n = 0; n < nodes.length; n++) {\n downgradeNode(nodes[n]);\n }\n } else if (nodes instanceof Node) {\n downgradeNode(nodes);\n } else {\n throw new Error('Invalid argument provided to downgrade MDL nodes.');\n }\n }\n\n // Now return the functions that should be made public with their publicly\n // facing names...\n return {\n upgradeDom: upgradeDomInternal,\n upgradeElement: upgradeElementInternal,\n upgradeElements: upgradeElementsInternal,\n upgradeAllRegistered: upgradeAllRegisteredInternal,\n registerUpgradedCallback: registerUpgradedCallbackInternal,\n register: registerInternal,\n downgradeElements: downgradeNodesInternal\n };\n})();\n\n/**\n * Describes the type of a registered component type managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n * constructor: Function,\n * classAsString: string,\n * cssClass: string,\n * widget: (string|boolean|undefined)\n * }}\n */\ncomponentHandler.ComponentConfigPublic; // jshint ignore:line\n\n/**\n * Describes the type of a registered component type managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n * constructor: !Function,\n * className: string,\n * cssClass: string,\n * widget: (string|boolean),\n * callbacks: !Array\n * }}\n */\ncomponentHandler.ComponentConfig; // jshint ignore:line\n\n/**\n * Created component (i.e., upgraded element) type as managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n * element_: !HTMLElement,\n * className: string,\n * classAsString: string,\n * cssClass: string,\n * widget: string\n * }}\n */\ncomponentHandler.Component; // jshint ignore:line\n\n// Export all symbols, for the benefit of Closure compiler.\n// No effect on uncompiled code.\ncomponentHandler['upgradeDom'] = componentHandler.upgradeDom;\ncomponentHandler['upgradeElement'] = componentHandler.upgradeElement;\ncomponentHandler['upgradeElements'] = componentHandler.upgradeElements;\ncomponentHandler['upgradeAllRegistered'] =\n componentHandler.upgradeAllRegistered;\ncomponentHandler['registerUpgradedCallback'] =\n componentHandler.registerUpgradedCallback;\ncomponentHandler['register'] = componentHandler.register;\ncomponentHandler['downgradeElements'] = componentHandler.downgradeElements;\nwindow.componentHandler = componentHandler;\nwindow['componentHandler'] = componentHandler;\n\nwindow.addEventListener('load', function() {\n 'use strict';\n\n /**\n * Performs a \"Cutting the mustard\" test. If the browser supports the features\n * tested, adds a mdl-js class to the element. It then upgrades all MDL\n * components requiring JavaScript.\n */\n if ('classList' in document.createElement('div') &&\n 'querySelector' in document &&\n 'addEventListener' in window && Array.prototype.forEach) {\n document.documentElement.classList.add('mdl-js');\n componentHandler.upgradeAllRegistered();\n } else {\n /**\n * Dummy function to avoid JS errors.\n */\n componentHandler.upgradeElement = function() {};\n /**\n * Dummy function to avoid JS errors.\n */\n componentHandler.register = function() {};\n }\n});\n","// Source: https://github.com/darius/requestAnimationFrame/blob/master/requestAnimationFrame.js\n// Adapted from https://gist.github.com/paulirish/1579671 which derived from\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n// requestAnimationFrame polyfill by Erik Möller.\n// Fixes from Paul Irish, Tino Zijdel, Andrew Mao, Klemen Slavič, Darius Bacon\n// MIT license\nif (!Date.now) {\n /**\n * Date.now polyfill.\n * @return {number} the current Date\n */\n Date.now = function () {\n return new Date().getTime();\n };\n Date['now'] = Date.now;\n}\nvar vendors = [\n 'webkit',\n 'moz'\n];\nfor (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) {\n var vp = vendors[i];\n window.requestAnimationFrame = window[vp + 'RequestAnimationFrame'];\n window.cancelAnimationFrame = window[vp + 'CancelAnimationFrame'] || window[vp + 'CancelRequestAnimationFrame'];\n window['requestAnimationFrame'] = window.requestAnimationFrame;\n window['cancelAnimationFrame'] = window.cancelAnimationFrame;\n}\nif (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) || !window.requestAnimationFrame || !window.cancelAnimationFrame) {\n var lastTime = 0;\n /**\n * requestAnimationFrame polyfill.\n * @param {!Function} callback the callback function.\n */\n window.requestAnimationFrame = function (callback) {\n var now = Date.now();\n var nextTime = Math.max(lastTime + 16, now);\n return setTimeout(function () {\n callback(lastTime = nextTime);\n }, nextTime - now);\n };\n window.cancelAnimationFrame = clearTimeout;\n window['requestAnimationFrame'] = window.requestAnimationFrame;\n window['cancelAnimationFrame'] = window.cancelAnimationFrame;\n}","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Button MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialButton = function MaterialButton(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialButton'] = MaterialButton;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialButton.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialButton.prototype.CssClasses_ = {\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_CONTAINER: 'mdl-button__ripple-container',\n RIPPLE: 'mdl-ripple'\n};\n/**\n * Handle blur of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialButton.prototype.blurHandler_ = function (event) {\n if (event) {\n this.element_.blur();\n }\n};\n// Public methods.\n/**\n * Disable button.\n *\n * @public\n */\nMaterialButton.prototype.disable = function () {\n this.element_.disabled = true;\n};\nMaterialButton.prototype['disable'] = MaterialButton.prototype.disable;\n/**\n * Enable button.\n *\n * @public\n */\nMaterialButton.prototype.enable = function () {\n this.element_.disabled = false;\n};\nMaterialButton.prototype['enable'] = MaterialButton.prototype.enable;\n/**\n * Initialize element.\n */\nMaterialButton.prototype.init = function () {\n if (this.element_) {\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleElement_ = document.createElement('span');\n this.rippleElement_.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(this.rippleElement_);\n this.boundRippleBlurHandler = this.blurHandler_.bind(this);\n this.rippleElement_.addEventListener('mouseup', this.boundRippleBlurHandler);\n this.element_.appendChild(rippleContainer);\n }\n this.boundButtonBlurHandler = this.blurHandler_.bind(this);\n this.element_.addEventListener('mouseup', this.boundButtonBlurHandler);\n this.element_.addEventListener('mouseleave', this.boundButtonBlurHandler);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialButton,\n classAsString: 'MaterialButton',\n cssClass: 'mdl-js-button',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Checkbox MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialCheckbox = function MaterialCheckbox(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialCheckbox'] = MaterialCheckbox;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialCheckbox.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialCheckbox.prototype.CssClasses_ = {\n INPUT: 'mdl-checkbox__input',\n BOX_OUTLINE: 'mdl-checkbox__box-outline',\n FOCUS_HELPER: 'mdl-checkbox__focus-helper',\n TICK_OUTLINE: 'mdl-checkbox__tick-outline',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-checkbox__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onChange_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onMouseUp_ = function (event) {\n this.blur_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialCheckbox.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialCheckbox.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the inputs toggle state and update display.\n *\n * @public\n */\nMaterialCheckbox.prototype.checkToggleState = function () {\n if (this.inputElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialCheckbox.prototype['checkToggleState'] = MaterialCheckbox.prototype.checkToggleState;\n/**\n * Check the inputs disabled state and update display.\n *\n * @public\n */\nMaterialCheckbox.prototype.checkDisabled = function () {\n if (this.inputElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialCheckbox.prototype['checkDisabled'] = MaterialCheckbox.prototype.checkDisabled;\n/**\n * Disable checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.disable = function () {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['disable'] = MaterialCheckbox.prototype.disable;\n/**\n * Enable checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.enable = function () {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['enable'] = MaterialCheckbox.prototype.enable;\n/**\n * Check checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.check = function () {\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['check'] = MaterialCheckbox.prototype.check;\n/**\n * Uncheck checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.uncheck = function () {\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['uncheck'] = MaterialCheckbox.prototype.uncheck;\n/**\n * Initialize element.\n */\nMaterialCheckbox.prototype.init = function () {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n var boxOutline = document.createElement('span');\n boxOutline.classList.add(this.CssClasses_.BOX_OUTLINE);\n var tickContainer = document.createElement('span');\n tickContainer.classList.add(this.CssClasses_.FOCUS_HELPER);\n var tickOutline = document.createElement('span');\n tickOutline.classList.add(this.CssClasses_.TICK_OUTLINE);\n boxOutline.appendChild(tickOutline);\n this.element_.appendChild(tickContainer);\n this.element_.appendChild(boxOutline);\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n this.boundRippleMouseUp = this.onMouseUp_.bind(this);\n this.rippleContainerElement_.addEventListener('mouseup', this.boundRippleMouseUp);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n this.boundInputOnChange = this.onChange_.bind(this);\n this.boundInputOnFocus = this.onFocus_.bind(this);\n this.boundInputOnBlur = this.onBlur_.bind(this);\n this.boundElementMouseUp = this.onMouseUp_.bind(this);\n this.inputElement_.addEventListener('change', this.boundInputOnChange);\n this.inputElement_.addEventListener('focus', this.boundInputOnFocus);\n this.inputElement_.addEventListener('blur', this.boundInputOnBlur);\n this.element_.addEventListener('mouseup', this.boundElementMouseUp);\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialCheckbox,\n classAsString: 'MaterialCheckbox',\n cssClass: 'mdl-js-checkbox',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for icon toggle MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialIconToggle = function MaterialIconToggle(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialIconToggle'] = MaterialIconToggle;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialIconToggle.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialIconToggle.prototype.CssClasses_ = {\n INPUT: 'mdl-icon-toggle__input',\n JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-icon-toggle__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onChange_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onMouseUp_ = function (event) {\n this.blur_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialIconToggle.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialIconToggle.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the inputs toggle state and update display.\n *\n * @public\n */\nMaterialIconToggle.prototype.checkToggleState = function () {\n if (this.inputElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialIconToggle.prototype['checkToggleState'] = MaterialIconToggle.prototype.checkToggleState;\n/**\n * Check the inputs disabled state and update display.\n *\n * @public\n */\nMaterialIconToggle.prototype.checkDisabled = function () {\n if (this.inputElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialIconToggle.prototype['checkDisabled'] = MaterialIconToggle.prototype.checkDisabled;\n/**\n * Disable icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.disable = function () {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['disable'] = MaterialIconToggle.prototype.disable;\n/**\n * Enable icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.enable = function () {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['enable'] = MaterialIconToggle.prototype.enable;\n/**\n * Check icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.check = function () {\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['check'] = MaterialIconToggle.prototype.check;\n/**\n * Uncheck icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.uncheck = function () {\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['uncheck'] = MaterialIconToggle.prototype.uncheck;\n/**\n * Initialize element.\n */\nMaterialIconToggle.prototype.init = function () {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n if (this.element_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleContainerElement_.classList.add(this.CssClasses_.JS_RIPPLE_EFFECT);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n this.boundRippleMouseUp = this.onMouseUp_.bind(this);\n this.rippleContainerElement_.addEventListener('mouseup', this.boundRippleMouseUp);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n this.boundInputOnChange = this.onChange_.bind(this);\n this.boundInputOnFocus = this.onFocus_.bind(this);\n this.boundInputOnBlur = this.onBlur_.bind(this);\n this.boundElementOnMouseUp = this.onMouseUp_.bind(this);\n this.inputElement_.addEventListener('change', this.boundInputOnChange);\n this.inputElement_.addEventListener('focus', this.boundInputOnFocus);\n this.inputElement_.addEventListener('blur', this.boundInputOnBlur);\n this.element_.addEventListener('mouseup', this.boundElementOnMouseUp);\n this.updateClasses_();\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialIconToggle,\n classAsString: 'MaterialIconToggle',\n cssClass: 'mdl-js-icon-toggle',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for dropdown MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialMenu = function MaterialMenu(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialMenu'] = MaterialMenu;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialMenu.prototype.Constant_ = {\n // Total duration of the menu animation.\n TRANSITION_DURATION_SECONDS: 0.3,\n // The fraction of the total duration we want to use for menu item animations.\n TRANSITION_DURATION_FRACTION: 0.8,\n // How long the menu stays open after choosing an option (so the user can see\n // the ripple).\n CLOSE_TIMEOUT: 150\n};\n/**\n * Keycodes, for code readability.\n *\n * @enum {number}\n * @private\n */\nMaterialMenu.prototype.Keycodes_ = {\n ENTER: 13,\n ESCAPE: 27,\n SPACE: 32,\n UP_ARROW: 38,\n DOWN_ARROW: 40\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialMenu.prototype.CssClasses_ = {\n CONTAINER: 'mdl-menu__container',\n OUTLINE: 'mdl-menu__outline',\n ITEM: 'mdl-menu__item',\n ITEM_RIPPLE_CONTAINER: 'mdl-menu__item-ripple-container',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE: 'mdl-ripple',\n // Statuses\n IS_UPGRADED: 'is-upgraded',\n IS_VISIBLE: 'is-visible',\n IS_ANIMATING: 'is-animating',\n // Alignment options\n BOTTOM_LEFT: 'mdl-menu--bottom-left',\n // This is the default.\n BOTTOM_RIGHT: 'mdl-menu--bottom-right',\n TOP_LEFT: 'mdl-menu--top-left',\n TOP_RIGHT: 'mdl-menu--top-right',\n UNALIGNED: 'mdl-menu--unaligned'\n};\n/**\n * Initialize element.\n */\nMaterialMenu.prototype.init = function () {\n if (this.element_) {\n // Create container for the menu.\n var container = document.createElement('div');\n container.classList.add(this.CssClasses_.CONTAINER);\n this.element_.parentElement.insertBefore(container, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n container.appendChild(this.element_);\n this.container_ = container;\n // Create outline for the menu (shadow and background).\n var outline = document.createElement('div');\n outline.classList.add(this.CssClasses_.OUTLINE);\n this.outline_ = outline;\n container.insertBefore(outline, this.element_);\n // Find the \"for\" element and bind events to it.\n var forElId = this.element_.getAttribute('for') || this.element_.getAttribute('data-mdl-for');\n var forEl = null;\n if (forElId) {\n forEl = document.getElementById(forElId);\n if (forEl) {\n this.forElement_ = forEl;\n forEl.addEventListener('click', this.handleForClick_.bind(this));\n forEl.addEventListener('keydown', this.handleForKeyboardEvent_.bind(this));\n }\n }\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n this.boundItemKeydown_ = this.handleItemKeyboardEvent_.bind(this);\n this.boundItemClick_ = this.handleItemClick_.bind(this);\n for (var i = 0; i < items.length; i++) {\n // Add a listener to each menu item.\n items[i].addEventListener('click', this.boundItemClick_);\n // Add a tab index to each menu item.\n items[i].tabIndex = '-1';\n // Add a keyboard listener to each menu item.\n items[i].addEventListener('keydown', this.boundItemKeydown_);\n }\n // Add ripple classes to each item, if the user has enabled ripples.\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n for (i = 0; i < items.length; i++) {\n var item = items[i];\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.ITEM_RIPPLE_CONTAINER);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n item.appendChild(rippleContainer);\n item.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n }\n }\n // Copy alignment classes to the container, so the outline can use them.\n if (this.element_.classList.contains(this.CssClasses_.BOTTOM_LEFT)) {\n this.outline_.classList.add(this.CssClasses_.BOTTOM_LEFT);\n }\n if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n this.outline_.classList.add(this.CssClasses_.BOTTOM_RIGHT);\n }\n if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n this.outline_.classList.add(this.CssClasses_.TOP_LEFT);\n }\n if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n this.outline_.classList.add(this.CssClasses_.TOP_RIGHT);\n }\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n this.outline_.classList.add(this.CssClasses_.UNALIGNED);\n }\n container.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n/**\n * Handles a click on the \"for\" element, by positioning the menu and then\n * toggling it.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleForClick_ = function (evt) {\n if (this.element_ && this.forElement_) {\n var rect = this.forElement_.getBoundingClientRect();\n var forRect = this.forElement_.parentElement.getBoundingClientRect();\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n } else if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n // Position below the \"for\" element, aligned to its right.\n this.container_.style.right = forRect.right - rect.right + 'px';\n this.container_.style.top = this.forElement_.offsetTop + this.forElement_.offsetHeight + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n // Position above the \"for\" element, aligned to its left.\n this.container_.style.left = this.forElement_.offsetLeft + 'px';\n this.container_.style.bottom = forRect.bottom - rect.top + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n // Position above the \"for\" element, aligned to its right.\n this.container_.style.right = forRect.right - rect.right + 'px';\n this.container_.style.bottom = forRect.bottom - rect.top + 'px';\n } else {\n // Default: position below the \"for\" element, aligned to its left.\n this.container_.style.left = this.forElement_.offsetLeft + 'px';\n this.container_.style.top = this.forElement_.offsetTop + this.forElement_.offsetHeight + 'px';\n }\n }\n this.toggle(evt);\n};\n/**\n * Handles a keyboard event on the \"for\" element.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleForKeyboardEvent_ = function (evt) {\n if (this.element_ && this.container_ && this.forElement_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM + ':not([disabled])');\n if (items && items.length > 0 && this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n if (evt.keyCode === this.Keycodes_.UP_ARROW) {\n evt.preventDefault();\n items[items.length - 1].focus();\n } else if (evt.keyCode === this.Keycodes_.DOWN_ARROW) {\n evt.preventDefault();\n items[0].focus();\n }\n }\n }\n};\n/**\n * Handles a keyboard event on an item.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleItemKeyboardEvent_ = function (evt) {\n if (this.element_ && this.container_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM + ':not([disabled])');\n if (items && items.length > 0 && this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n var currentIndex = Array.prototype.slice.call(items).indexOf(evt.target);\n if (evt.keyCode === this.Keycodes_.UP_ARROW) {\n evt.preventDefault();\n if (currentIndex > 0) {\n items[currentIndex - 1].focus();\n } else {\n items[items.length - 1].focus();\n }\n } else if (evt.keyCode === this.Keycodes_.DOWN_ARROW) {\n evt.preventDefault();\n if (items.length > currentIndex + 1) {\n items[currentIndex + 1].focus();\n } else {\n items[0].focus();\n }\n } else if (evt.keyCode === this.Keycodes_.SPACE || evt.keyCode === this.Keycodes_.ENTER) {\n evt.preventDefault();\n // Send mousedown and mouseup to trigger ripple.\n var e = new MouseEvent('mousedown');\n evt.target.dispatchEvent(e);\n e = new MouseEvent('mouseup');\n evt.target.dispatchEvent(e);\n // Send click.\n evt.target.click();\n } else if (evt.keyCode === this.Keycodes_.ESCAPE) {\n evt.preventDefault();\n this.hide();\n }\n }\n }\n};\n/**\n * Handles a click event on an item.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleItemClick_ = function (evt) {\n if (evt.target.hasAttribute('disabled')) {\n evt.stopPropagation();\n } else {\n // Wait some time before closing menu, so the user can see the ripple.\n this.closing_ = true;\n window.setTimeout(function (evt) {\n this.hide();\n this.closing_ = false;\n }.bind(this), this.Constant_.CLOSE_TIMEOUT);\n }\n};\n/**\n * Calculates the initial clip (for opening the menu) or final clip (for closing\n * it), and applies it. This allows us to animate from or to the correct point,\n * that is, the point it's aligned to in the \"for\" element.\n *\n * @param {number} height Height of the clip rectangle\n * @param {number} width Width of the clip rectangle\n * @private\n */\nMaterialMenu.prototype.applyClip_ = function (height, width) {\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n // Do not clip.\n this.element_.style.clip = '';\n } else if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n // Clip to the top right corner of the menu.\n this.element_.style.clip = 'rect(0 ' + width + 'px ' + '0 ' + width + 'px)';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n // Clip to the bottom left corner of the menu.\n this.element_.style.clip = 'rect(' + height + 'px 0 ' + height + 'px 0)';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n // Clip to the bottom right corner of the menu.\n this.element_.style.clip = 'rect(' + height + 'px ' + width + 'px ' + height + 'px ' + width + 'px)';\n } else {\n // Default: do not clip (same as clipping to the top left corner).\n this.element_.style.clip = '';\n }\n};\n/**\n * Cleanup function to remove animation listeners.\n *\n * @param {Event} evt\n * @private\n */\nMaterialMenu.prototype.removeAnimationEndListener_ = function (evt) {\n evt.target.classList.remove(MaterialMenu.prototype.CssClasses_.IS_ANIMATING);\n};\n/**\n * Adds an event listener to clean up after the animation ends.\n *\n * @private\n */\nMaterialMenu.prototype.addAnimationEndListener_ = function () {\n this.element_.addEventListener('transitionend', this.removeAnimationEndListener_);\n this.element_.addEventListener('webkitTransitionEnd', this.removeAnimationEndListener_);\n};\n/**\n * Displays the menu.\n *\n * @public\n */\nMaterialMenu.prototype.show = function (evt) {\n if (this.element_ && this.container_ && this.outline_) {\n // Measure the inner element.\n var height = this.element_.getBoundingClientRect().height;\n var width = this.element_.getBoundingClientRect().width;\n // Apply the inner element's size to the container and outline.\n this.container_.style.width = width + 'px';\n this.container_.style.height = height + 'px';\n this.outline_.style.width = width + 'px';\n this.outline_.style.height = height + 'px';\n var transitionDuration = this.Constant_.TRANSITION_DURATION_SECONDS * this.Constant_.TRANSITION_DURATION_FRACTION;\n // Calculate transition delays for individual menu items, so that they fade\n // in one at a time.\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n for (var i = 0; i < items.length; i++) {\n var itemDelay = null;\n if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT) || this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n itemDelay = (height - items[i].offsetTop - items[i].offsetHeight) / height * transitionDuration + 's';\n } else {\n itemDelay = items[i].offsetTop / height * transitionDuration + 's';\n }\n items[i].style.transitionDelay = itemDelay;\n }\n // Apply the initial clip to the text before we start animating.\n this.applyClip_(height, width);\n // Wait for the next frame, turn on animation, and apply the final clip.\n // Also make it visible. This triggers the transitions.\n window.requestAnimationFrame(function () {\n this.element_.classList.add(this.CssClasses_.IS_ANIMATING);\n this.element_.style.clip = 'rect(0 ' + width + 'px ' + height + 'px 0)';\n this.container_.classList.add(this.CssClasses_.IS_VISIBLE);\n }.bind(this));\n // Clean up after the animation is complete.\n this.addAnimationEndListener_();\n // Add a click listener to the document, to close the menu.\n var callback = function (e) {\n // Check to see if the document is processing the same event that\n // displayed the menu in the first place. If so, do nothing.\n // Also check to see if the menu is in the process of closing itself, and\n // do nothing in that case.\n // Also check if the clicked element is a menu item\n // if so, do nothing.\n if (e !== evt && !this.closing_ && e.target.parentNode !== this.element_) {\n document.removeEventListener('click', callback);\n this.hide();\n }\n }.bind(this);\n document.addEventListener('click', callback);\n }\n};\nMaterialMenu.prototype['show'] = MaterialMenu.prototype.show;\n/**\n * Hides the menu.\n *\n * @public\n */\nMaterialMenu.prototype.hide = function () {\n if (this.element_ && this.container_ && this.outline_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n // Remove all transition delays; menu items fade out concurrently.\n for (var i = 0; i < items.length; i++) {\n items[i].style.removeProperty('transition-delay');\n }\n // Measure the inner element.\n var rect = this.element_.getBoundingClientRect();\n var height = rect.height;\n var width = rect.width;\n // Turn on animation, and apply the final clip. Also make invisible.\n // This triggers the transitions.\n this.element_.classList.add(this.CssClasses_.IS_ANIMATING);\n this.applyClip_(height, width);\n this.container_.classList.remove(this.CssClasses_.IS_VISIBLE);\n // Clean up after the animation is complete.\n this.addAnimationEndListener_();\n }\n};\nMaterialMenu.prototype['hide'] = MaterialMenu.prototype.hide;\n/**\n * Displays or hides the menu, depending on current state.\n *\n * @public\n */\nMaterialMenu.prototype.toggle = function (evt) {\n if (this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n this.hide();\n } else {\n this.show(evt);\n }\n};\nMaterialMenu.prototype['toggle'] = MaterialMenu.prototype.toggle;\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialMenu,\n classAsString: 'MaterialMenu',\n cssClass: 'mdl-js-menu',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Progress MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialProgress = function MaterialProgress(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialProgress'] = MaterialProgress;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialProgress.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialProgress.prototype.CssClasses_ = { INDETERMINATE_CLASS: 'mdl-progress__indeterminate' };\n/**\n * Set the current progress of the progressbar.\n *\n * @param {number} p Percentage of the progress (0-100)\n * @public\n */\nMaterialProgress.prototype.setProgress = function (p) {\n if (this.element_.classList.contains(this.CssClasses_.INDETERMINATE_CLASS)) {\n return;\n }\n this.progressbar_.style.width = p + '%';\n};\nMaterialProgress.prototype['setProgress'] = MaterialProgress.prototype.setProgress;\n/**\n * Set the current progress of the buffer.\n *\n * @param {number} p Percentage of the buffer (0-100)\n * @public\n */\nMaterialProgress.prototype.setBuffer = function (p) {\n this.bufferbar_.style.width = p + '%';\n this.auxbar_.style.width = 100 - p + '%';\n};\nMaterialProgress.prototype['setBuffer'] = MaterialProgress.prototype.setBuffer;\n/**\n * Initialize element.\n */\nMaterialProgress.prototype.init = function () {\n if (this.element_) {\n var el = document.createElement('div');\n el.className = 'progressbar bar bar1';\n this.element_.appendChild(el);\n this.progressbar_ = el;\n el = document.createElement('div');\n el.className = 'bufferbar bar bar2';\n this.element_.appendChild(el);\n this.bufferbar_ = el;\n el = document.createElement('div');\n el.className = 'auxbar bar bar3';\n this.element_.appendChild(el);\n this.auxbar_ = el;\n this.progressbar_.style.width = '0%';\n this.bufferbar_.style.width = '100%';\n this.auxbar_.style.width = '0%';\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialProgress,\n classAsString: 'MaterialProgress',\n cssClass: 'mdl-js-progress',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Radio MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialRadio = function MaterialRadio(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialRadio'] = MaterialRadio;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialRadio.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialRadio.prototype.CssClasses_ = {\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked',\n IS_UPGRADED: 'is-upgraded',\n JS_RADIO: 'mdl-js-radio',\n RADIO_BTN: 'mdl-radio__button',\n RADIO_OUTER_CIRCLE: 'mdl-radio__outer-circle',\n RADIO_INNER_CIRCLE: 'mdl-radio__inner-circle',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-radio__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onChange_ = function (event) {\n // Since other radio buttons don't get change events, we need to look for\n // them to update their classes.\n var radios = document.getElementsByClassName(this.CssClasses_.JS_RADIO);\n for (var i = 0; i < radios.length; i++) {\n var button = radios[i].querySelector('.' + this.CssClasses_.RADIO_BTN);\n // Different name == different group, so no point updating those.\n if (button.getAttribute('name') === this.btnElement_.getAttribute('name')) {\n if (typeof radios[i]['MaterialRadio'] !== 'undefined') {\n radios[i]['MaterialRadio'].updateClasses_();\n }\n }\n }\n};\n/**\n * Handle focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onMouseup_ = function (event) {\n this.blur_();\n};\n/**\n * Update classes.\n *\n * @private\n */\nMaterialRadio.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialRadio.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.btnElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the components disabled state.\n *\n * @public\n */\nMaterialRadio.prototype.checkDisabled = function () {\n if (this.btnElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialRadio.prototype['checkDisabled'] = MaterialRadio.prototype.checkDisabled;\n/**\n * Check the components toggled state.\n *\n * @public\n */\nMaterialRadio.prototype.checkToggleState = function () {\n if (this.btnElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialRadio.prototype['checkToggleState'] = MaterialRadio.prototype.checkToggleState;\n/**\n * Disable radio.\n *\n * @public\n */\nMaterialRadio.prototype.disable = function () {\n this.btnElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialRadio.prototype['disable'] = MaterialRadio.prototype.disable;\n/**\n * Enable radio.\n *\n * @public\n */\nMaterialRadio.prototype.enable = function () {\n this.btnElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialRadio.prototype['enable'] = MaterialRadio.prototype.enable;\n/**\n * Check radio.\n *\n * @public\n */\nMaterialRadio.prototype.check = function () {\n this.btnElement_.checked = true;\n this.onChange_(null);\n};\nMaterialRadio.prototype['check'] = MaterialRadio.prototype.check;\n/**\n * Uncheck radio.\n *\n * @public\n */\nMaterialRadio.prototype.uncheck = function () {\n this.btnElement_.checked = false;\n this.onChange_(null);\n};\nMaterialRadio.prototype['uncheck'] = MaterialRadio.prototype.uncheck;\n/**\n * Initialize element.\n */\nMaterialRadio.prototype.init = function () {\n if (this.element_) {\n this.btnElement_ = this.element_.querySelector('.' + this.CssClasses_.RADIO_BTN);\n this.boundChangeHandler_ = this.onChange_.bind(this);\n this.boundFocusHandler_ = this.onChange_.bind(this);\n this.boundBlurHandler_ = this.onBlur_.bind(this);\n this.boundMouseUpHandler_ = this.onMouseup_.bind(this);\n var outerCircle = document.createElement('span');\n outerCircle.classList.add(this.CssClasses_.RADIO_OUTER_CIRCLE);\n var innerCircle = document.createElement('span');\n innerCircle.classList.add(this.CssClasses_.RADIO_INNER_CIRCLE);\n this.element_.appendChild(outerCircle);\n this.element_.appendChild(innerCircle);\n var rippleContainer;\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_CENTER);\n rippleContainer.addEventListener('mouseup', this.boundMouseUpHandler_);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n this.element_.appendChild(rippleContainer);\n }\n this.btnElement_.addEventListener('change', this.boundChangeHandler_);\n this.btnElement_.addEventListener('focus', this.boundFocusHandler_);\n this.btnElement_.addEventListener('blur', this.boundBlurHandler_);\n this.element_.addEventListener('mouseup', this.boundMouseUpHandler_);\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialRadio,\n classAsString: 'MaterialRadio',\n cssClass: 'mdl-js-radio',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Slider MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialSlider = function MaterialSlider(element) {\n this.element_ = element;\n // Browser feature detection.\n this.isIE_ = window.navigator.msPointerEnabled;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialSlider'] = MaterialSlider;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSlider.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSlider.prototype.CssClasses_ = {\n IE_CONTAINER: 'mdl-slider__ie-container',\n SLIDER_CONTAINER: 'mdl-slider__container',\n BACKGROUND_FLEX: 'mdl-slider__background-flex',\n BACKGROUND_LOWER: 'mdl-slider__background-lower',\n BACKGROUND_UPPER: 'mdl-slider__background-upper',\n IS_LOWEST_VALUE: 'is-lowest-value',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Handle input on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onInput_ = function (event) {\n this.updateValueStyles_();\n};\n/**\n * Handle change on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onChange_ = function (event) {\n this.updateValueStyles_();\n};\n/**\n * Handle mouseup on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onMouseUp_ = function (event) {\n event.target.blur();\n};\n/**\n * Handle mousedown on container element.\n * This handler is purpose is to not require the use to click\n * exactly on the 2px slider element, as FireFox seems to be very\n * strict about this.\n *\n * @param {Event} event The event that fired.\n * @private\n * @suppress {missingProperties}\n */\nMaterialSlider.prototype.onContainerMouseDown_ = function (event) {\n // If this click is not on the parent element (but rather some child)\n // ignore. It may still bubble up.\n if (event.target !== this.element_.parentElement) {\n return;\n }\n // Discard the original event and create a new event that\n // is on the slider element.\n event.preventDefault();\n var newEvent = new MouseEvent('mousedown', {\n target: event.target,\n buttons: event.buttons,\n clientX: event.clientX,\n clientY: this.element_.getBoundingClientRect().y\n });\n this.element_.dispatchEvent(newEvent);\n};\n/**\n * Handle updating of values.\n *\n * @private\n */\nMaterialSlider.prototype.updateValueStyles_ = function () {\n // Calculate and apply percentages to div structure behind slider.\n var fraction = (this.element_.value - this.element_.min) / (this.element_.max - this.element_.min);\n if (fraction === 0) {\n this.element_.classList.add(this.CssClasses_.IS_LOWEST_VALUE);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_LOWEST_VALUE);\n }\n if (!this.isIE_) {\n this.backgroundLower_.style.flex = fraction;\n this.backgroundLower_.style.webkitFlex = fraction;\n this.backgroundUpper_.style.flex = 1 - fraction;\n this.backgroundUpper_.style.webkitFlex = 1 - fraction;\n }\n};\n// Public methods.\n/**\n * Disable slider.\n *\n * @public\n */\nMaterialSlider.prototype.disable = function () {\n this.element_.disabled = true;\n};\nMaterialSlider.prototype['disable'] = MaterialSlider.prototype.disable;\n/**\n * Enable slider.\n *\n * @public\n */\nMaterialSlider.prototype.enable = function () {\n this.element_.disabled = false;\n};\nMaterialSlider.prototype['enable'] = MaterialSlider.prototype.enable;\n/**\n * Update slider value.\n *\n * @param {number} value The value to which to set the control (optional).\n * @public\n */\nMaterialSlider.prototype.change = function (value) {\n if (typeof value !== 'undefined') {\n this.element_.value = value;\n }\n this.updateValueStyles_();\n};\nMaterialSlider.prototype['change'] = MaterialSlider.prototype.change;\n/**\n * Initialize element.\n */\nMaterialSlider.prototype.init = function () {\n if (this.element_) {\n if (this.isIE_) {\n // Since we need to specify a very large height in IE due to\n // implementation limitations, we add a parent here that trims it down to\n // a reasonable size.\n var containerIE = document.createElement('div');\n containerIE.classList.add(this.CssClasses_.IE_CONTAINER);\n this.element_.parentElement.insertBefore(containerIE, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n containerIE.appendChild(this.element_);\n } else {\n // For non-IE browsers, we need a div structure that sits behind the\n // slider and allows us to style the left and right sides of it with\n // different colors.\n var container = document.createElement('div');\n container.classList.add(this.CssClasses_.SLIDER_CONTAINER);\n this.element_.parentElement.insertBefore(container, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n container.appendChild(this.element_);\n var backgroundFlex = document.createElement('div');\n backgroundFlex.classList.add(this.CssClasses_.BACKGROUND_FLEX);\n container.appendChild(backgroundFlex);\n this.backgroundLower_ = document.createElement('div');\n this.backgroundLower_.classList.add(this.CssClasses_.BACKGROUND_LOWER);\n backgroundFlex.appendChild(this.backgroundLower_);\n this.backgroundUpper_ = document.createElement('div');\n this.backgroundUpper_.classList.add(this.CssClasses_.BACKGROUND_UPPER);\n backgroundFlex.appendChild(this.backgroundUpper_);\n }\n this.boundInputHandler = this.onInput_.bind(this);\n this.boundChangeHandler = this.onChange_.bind(this);\n this.boundMouseUpHandler = this.onMouseUp_.bind(this);\n this.boundContainerMouseDownHandler = this.onContainerMouseDown_.bind(this);\n this.element_.addEventListener('input', this.boundInputHandler);\n this.element_.addEventListener('change', this.boundChangeHandler);\n this.element_.addEventListener('mouseup', this.boundMouseUpHandler);\n this.element_.parentElement.addEventListener('mousedown', this.boundContainerMouseDownHandler);\n this.updateValueStyles_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSlider,\n classAsString: 'MaterialSlider',\n cssClass: 'mdl-js-slider',\n widget: true\n});","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Snackbar MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialSnackbar = function MaterialSnackbar(element) {\n this.element_ = element;\n this.textElement_ = this.element_.querySelector('.' + this.cssClasses_.MESSAGE);\n this.actionElement_ = this.element_.querySelector('.' + this.cssClasses_.ACTION);\n if (!this.textElement_) {\n throw new Error('There must be a message element for a snackbar.');\n }\n if (!this.actionElement_) {\n throw new Error('There must be an action element for a snackbar.');\n }\n this.active = false;\n this.actionHandler_ = undefined;\n this.message_ = undefined;\n this.actionText_ = undefined;\n this.queuedNotifications_ = [];\n this.setActionHidden_(true);\n};\nwindow['MaterialSnackbar'] = MaterialSnackbar;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSnackbar.prototype.Constant_ = {\n // The duration of the snackbar show/hide animation, in ms.\n ANIMATION_LENGTH: 250\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSnackbar.prototype.cssClasses_ = {\n SNACKBAR: 'mdl-snackbar',\n MESSAGE: 'mdl-snackbar__text',\n ACTION: 'mdl-snackbar__action',\n ACTIVE: 'mdl-snackbar--active'\n};\n/**\n * Display the snackbar.\n *\n * @private\n */\nMaterialSnackbar.prototype.displaySnackbar_ = function () {\n this.element_.setAttribute('aria-hidden', 'true');\n if (this.actionHandler_) {\n this.actionElement_.textContent = this.actionText_;\n this.actionElement_.addEventListener('click', this.actionHandler_);\n this.setActionHidden_(false);\n }\n this.textElement_.textContent = this.message_;\n this.element_.classList.add(this.cssClasses_.ACTIVE);\n this.element_.setAttribute('aria-hidden', 'false');\n setTimeout(this.cleanup_.bind(this), this.timeout_);\n};\n/**\n * Show the snackbar.\n *\n * @param {Object} data The data for the notification.\n * @public\n */\nMaterialSnackbar.prototype.showSnackbar = function (data) {\n if (data === undefined) {\n throw new Error('Please provide a data object with at least a message to display.');\n }\n if (data['message'] === undefined) {\n throw new Error('Please provide a message to be displayed.');\n }\n if (data['actionHandler'] && !data['actionText']) {\n throw new Error('Please provide action text with the handler.');\n }\n if (this.active) {\n this.queuedNotifications_.push(data);\n } else {\n this.active = true;\n this.message_ = data['message'];\n if (data['timeout']) {\n this.timeout_ = data['timeout'];\n } else {\n this.timeout_ = 2750;\n }\n if (data['actionHandler']) {\n this.actionHandler_ = data['actionHandler'];\n }\n if (data['actionText']) {\n this.actionText_ = data['actionText'];\n }\n this.displaySnackbar_();\n }\n};\nMaterialSnackbar.prototype['showSnackbar'] = MaterialSnackbar.prototype.showSnackbar;\n/**\n * Check if the queue has items within it.\n * If it does, display the next entry.\n *\n * @private\n */\nMaterialSnackbar.prototype.checkQueue_ = function () {\n if (this.queuedNotifications_.length > 0) {\n this.showSnackbar(this.queuedNotifications_.shift());\n }\n};\n/**\n * Cleanup the snackbar event listeners and accessiblity attributes.\n *\n * @private\n */\nMaterialSnackbar.prototype.cleanup_ = function () {\n this.element_.classList.remove(this.cssClasses_.ACTIVE);\n setTimeout(function () {\n this.element_.setAttribute('aria-hidden', 'true');\n this.textElement_.textContent = '';\n if (!Boolean(this.actionElement_.getAttribute('aria-hidden'))) {\n this.setActionHidden_(true);\n this.actionElement_.textContent = '';\n this.actionElement_.removeEventListener('click', this.actionHandler_);\n }\n this.actionHandler_ = undefined;\n this.message_ = undefined;\n this.actionText_ = undefined;\n this.active = false;\n this.checkQueue_();\n }.bind(this), this.Constant_.ANIMATION_LENGTH);\n};\n/**\n * Set the action handler hidden state.\n *\n * @param {boolean} value\n * @private\n */\nMaterialSnackbar.prototype.setActionHidden_ = function (value) {\n if (value) {\n this.actionElement_.setAttribute('aria-hidden', 'true');\n } else {\n this.actionElement_.removeAttribute('aria-hidden');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSnackbar,\n classAsString: 'MaterialSnackbar',\n cssClass: 'mdl-js-snackbar',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Spinner MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n * @constructor\n */\nvar MaterialSpinner = function MaterialSpinner(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialSpinner'] = MaterialSpinner;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSpinner.prototype.Constant_ = { MDL_SPINNER_LAYER_COUNT: 4 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSpinner.prototype.CssClasses_ = {\n MDL_SPINNER_LAYER: 'mdl-spinner__layer',\n MDL_SPINNER_CIRCLE_CLIPPER: 'mdl-spinner__circle-clipper',\n MDL_SPINNER_CIRCLE: 'mdl-spinner__circle',\n MDL_SPINNER_GAP_PATCH: 'mdl-spinner__gap-patch',\n MDL_SPINNER_LEFT: 'mdl-spinner__left',\n MDL_SPINNER_RIGHT: 'mdl-spinner__right'\n};\n/**\n * Auxiliary method to create a spinner layer.\n *\n * @param {number} index Index of the layer to be created.\n * @public\n */\nMaterialSpinner.prototype.createLayer = function (index) {\n var layer = document.createElement('div');\n layer.classList.add(this.CssClasses_.MDL_SPINNER_LAYER);\n layer.classList.add(this.CssClasses_.MDL_SPINNER_LAYER + '-' + index);\n var leftClipper = document.createElement('div');\n leftClipper.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER);\n leftClipper.classList.add(this.CssClasses_.MDL_SPINNER_LEFT);\n var gapPatch = document.createElement('div');\n gapPatch.classList.add(this.CssClasses_.MDL_SPINNER_GAP_PATCH);\n var rightClipper = document.createElement('div');\n rightClipper.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER);\n rightClipper.classList.add(this.CssClasses_.MDL_SPINNER_RIGHT);\n var circleOwners = [\n leftClipper,\n gapPatch,\n rightClipper\n ];\n for (var i = 0; i < circleOwners.length; i++) {\n var circle = document.createElement('div');\n circle.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE);\n circleOwners[i].appendChild(circle);\n }\n layer.appendChild(leftClipper);\n layer.appendChild(gapPatch);\n layer.appendChild(rightClipper);\n this.element_.appendChild(layer);\n};\nMaterialSpinner.prototype['createLayer'] = MaterialSpinner.prototype.createLayer;\n/**\n * Stops the spinner animation.\n * Public method for users who need to stop the spinner for any reason.\n *\n * @public\n */\nMaterialSpinner.prototype.stop = function () {\n this.element_.classList.remove('is-active');\n};\nMaterialSpinner.prototype['stop'] = MaterialSpinner.prototype.stop;\n/**\n * Starts the spinner animation.\n * Public method for users who need to manually start the spinner for any reason\n * (instead of just adding the 'is-active' class to their markup).\n *\n * @public\n */\nMaterialSpinner.prototype.start = function () {\n this.element_.classList.add('is-active');\n};\nMaterialSpinner.prototype['start'] = MaterialSpinner.prototype.start;\n/**\n * Initialize element.\n */\nMaterialSpinner.prototype.init = function () {\n if (this.element_) {\n for (var i = 1; i <= this.Constant_.MDL_SPINNER_LAYER_COUNT; i++) {\n this.createLayer(i);\n }\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSpinner,\n classAsString: 'MaterialSpinner',\n cssClass: 'mdl-js-spinner',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Checkbox MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialSwitch = function MaterialSwitch(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialSwitch'] = MaterialSwitch;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSwitch.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSwitch.prototype.CssClasses_ = {\n INPUT: 'mdl-switch__input',\n TRACK: 'mdl-switch__track',\n THUMB: 'mdl-switch__thumb',\n FOCUS_HELPER: 'mdl-switch__focus-helper',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-switch__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onChange_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onMouseUp_ = function (event) {\n this.blur_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialSwitch.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialSwitch.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the components disabled state.\n *\n * @public\n */\nMaterialSwitch.prototype.checkDisabled = function () {\n if (this.inputElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialSwitch.prototype['checkDisabled'] = MaterialSwitch.prototype.checkDisabled;\n/**\n * Check the components toggled state.\n *\n * @public\n */\nMaterialSwitch.prototype.checkToggleState = function () {\n if (this.inputElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialSwitch.prototype['checkToggleState'] = MaterialSwitch.prototype.checkToggleState;\n/**\n * Disable switch.\n *\n * @public\n */\nMaterialSwitch.prototype.disable = function () {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['disable'] = MaterialSwitch.prototype.disable;\n/**\n * Enable switch.\n *\n * @public\n */\nMaterialSwitch.prototype.enable = function () {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['enable'] = MaterialSwitch.prototype.enable;\n/**\n * Activate switch.\n *\n * @public\n */\nMaterialSwitch.prototype.on = function () {\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['on'] = MaterialSwitch.prototype.on;\n/**\n * Deactivate switch.\n *\n * @public\n */\nMaterialSwitch.prototype.off = function () {\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['off'] = MaterialSwitch.prototype.off;\n/**\n * Initialize element.\n */\nMaterialSwitch.prototype.init = function () {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n var track = document.createElement('div');\n track.classList.add(this.CssClasses_.TRACK);\n var thumb = document.createElement('div');\n thumb.classList.add(this.CssClasses_.THUMB);\n var focusHelper = document.createElement('span');\n focusHelper.classList.add(this.CssClasses_.FOCUS_HELPER);\n thumb.appendChild(focusHelper);\n this.element_.appendChild(track);\n this.element_.appendChild(thumb);\n this.boundMouseUpHandler = this.onMouseUp_.bind(this);\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n this.rippleContainerElement_.addEventListener('mouseup', this.boundMouseUpHandler);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n this.boundChangeHandler = this.onChange_.bind(this);\n this.boundFocusHandler = this.onFocus_.bind(this);\n this.boundBlurHandler = this.onBlur_.bind(this);\n this.inputElement_.addEventListener('change', this.boundChangeHandler);\n this.inputElement_.addEventListener('focus', this.boundFocusHandler);\n this.inputElement_.addEventListener('blur', this.boundBlurHandler);\n this.element_.addEventListener('mouseup', this.boundMouseUpHandler);\n this.updateClasses_();\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSwitch,\n classAsString: 'MaterialSwitch',\n cssClass: 'mdl-js-switch',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Textfield MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialTextfield = function MaterialTextfield(element) {\n this.element_ = element;\n this.maxRows = this.Constant_.NO_MAX_ROWS;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialTextfield'] = MaterialTextfield;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialTextfield.prototype.Constant_ = {\n NO_MAX_ROWS: -1,\n MAX_ROWS_ATTRIBUTE: 'maxrows'\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialTextfield.prototype.CssClasses_ = {\n LABEL: 'mdl-textfield__label',\n INPUT: 'mdl-textfield__input',\n IS_DIRTY: 'is-dirty',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_INVALID: 'is-invalid',\n IS_UPGRADED: 'is-upgraded',\n HAS_PLACEHOLDER: 'has-placeholder'\n};\n/**\n * Handle input being entered.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onKeyDown_ = function (event) {\n var currentRowCount = event.target.value.split('\\n').length;\n if (event.keyCode === 13) {\n if (currentRowCount >= this.maxRows) {\n event.preventDefault();\n }\n }\n};\n/**\n * Handle focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle reset event from out side.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onReset_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialTextfield.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkValidity();\n this.checkDirty();\n this.checkFocus();\n};\n// Public methods.\n/**\n * Check the disabled state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkDisabled = function () {\n if (this.input_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialTextfield.prototype['checkDisabled'] = MaterialTextfield.prototype.checkDisabled;\n/**\n * Check the focus state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkFocus = function () {\n if (Boolean(this.element_.querySelector(':focus'))) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n }\n};\nMaterialTextfield.prototype['checkFocus'] = MaterialTextfield.prototype.checkFocus;\n/**\n * Check the validity state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkValidity = function () {\n if (this.input_.validity) {\n if (this.input_.validity.valid) {\n this.element_.classList.remove(this.CssClasses_.IS_INVALID);\n } else {\n this.element_.classList.add(this.CssClasses_.IS_INVALID);\n }\n }\n};\nMaterialTextfield.prototype['checkValidity'] = MaterialTextfield.prototype.checkValidity;\n/**\n * Check the dirty state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkDirty = function () {\n if (this.input_.value && this.input_.value.length > 0) {\n this.element_.classList.add(this.CssClasses_.IS_DIRTY);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DIRTY);\n }\n};\nMaterialTextfield.prototype['checkDirty'] = MaterialTextfield.prototype.checkDirty;\n/**\n * Disable text field.\n *\n * @public\n */\nMaterialTextfield.prototype.disable = function () {\n this.input_.disabled = true;\n this.updateClasses_();\n};\nMaterialTextfield.prototype['disable'] = MaterialTextfield.prototype.disable;\n/**\n * Enable text field.\n *\n * @public\n */\nMaterialTextfield.prototype.enable = function () {\n this.input_.disabled = false;\n this.updateClasses_();\n};\nMaterialTextfield.prototype['enable'] = MaterialTextfield.prototype.enable;\n/**\n * Update text field value.\n *\n * @param {string} value The value to which to set the control (optional).\n * @public\n */\nMaterialTextfield.prototype.change = function (value) {\n this.input_.value = value || '';\n this.updateClasses_();\n};\nMaterialTextfield.prototype['change'] = MaterialTextfield.prototype.change;\n/**\n * Initialize element.\n */\nMaterialTextfield.prototype.init = function () {\n if (this.element_) {\n this.label_ = this.element_.querySelector('.' + this.CssClasses_.LABEL);\n this.input_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n if (this.input_) {\n if (this.input_.hasAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE)) {\n this.maxRows = parseInt(this.input_.getAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE), 10);\n if (isNaN(this.maxRows)) {\n this.maxRows = this.Constant_.NO_MAX_ROWS;\n }\n }\n if (this.input_.hasAttribute('placeholder')) {\n this.element_.classList.add(this.CssClasses_.HAS_PLACEHOLDER);\n }\n this.boundUpdateClassesHandler = this.updateClasses_.bind(this);\n this.boundFocusHandler = this.onFocus_.bind(this);\n this.boundBlurHandler = this.onBlur_.bind(this);\n this.boundResetHandler = this.onReset_.bind(this);\n this.input_.addEventListener('input', this.boundUpdateClassesHandler);\n this.input_.addEventListener('focus', this.boundFocusHandler);\n this.input_.addEventListener('blur', this.boundBlurHandler);\n this.input_.addEventListener('reset', this.boundResetHandler);\n if (this.maxRows !== this.Constant_.NO_MAX_ROWS) {\n // TODO: This should handle pasting multi line text.\n // Currently doesn't.\n this.boundKeyDownHandler = this.onKeyDown_.bind(this);\n this.input_.addEventListener('keydown', this.boundKeyDownHandler);\n }\n var invalid = this.element_.classList.contains(this.CssClasses_.IS_INVALID);\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n if (invalid) {\n this.element_.classList.add(this.CssClasses_.IS_INVALID);\n }\n if (this.input_.hasAttribute('autofocus')) {\n this.element_.focus();\n this.checkFocus();\n }\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTextfield,\n classAsString: 'MaterialTextfield',\n cssClass: 'mdl-js-textfield',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Tooltip MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialTooltip = function MaterialTooltip(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialTooltip'] = MaterialTooltip;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialTooltip.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialTooltip.prototype.CssClasses_ = {\n IS_ACTIVE: 'is-active',\n BOTTOM: 'mdl-tooltip--bottom',\n LEFT: 'mdl-tooltip--left',\n RIGHT: 'mdl-tooltip--right',\n TOP: 'mdl-tooltip--top'\n};\n/**\n * Handle mouseenter for tooltip.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTooltip.prototype.handleMouseEnter_ = function (event) {\n var props = event.target.getBoundingClientRect();\n var left = props.left + props.width / 2;\n var top = props.top + props.height / 2;\n var marginLeft = -1 * (this.element_.offsetWidth / 2);\n var marginTop = -1 * (this.element_.offsetHeight / 2);\n if (this.element_.classList.contains(this.CssClasses_.LEFT) || this.element_.classList.contains(this.CssClasses_.RIGHT)) {\n left = props.width / 2;\n if (top + marginTop < 0) {\n this.element_.style.top = '0';\n this.element_.style.marginTop = '0';\n } else {\n this.element_.style.top = top + 'px';\n this.element_.style.marginTop = marginTop + 'px';\n }\n } else {\n if (left + marginLeft < 0) {\n this.element_.style.left = '0';\n this.element_.style.marginLeft = '0';\n } else {\n this.element_.style.left = left + 'px';\n this.element_.style.marginLeft = marginLeft + 'px';\n }\n }\n if (this.element_.classList.contains(this.CssClasses_.TOP)) {\n this.element_.style.top = props.top - this.element_.offsetHeight - 10 + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.RIGHT)) {\n this.element_.style.left = props.left + props.width + 10 + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.LEFT)) {\n this.element_.style.left = props.left - this.element_.offsetWidth - 10 + 'px';\n } else {\n this.element_.style.top = props.top + props.height + 10 + 'px';\n }\n this.element_.classList.add(this.CssClasses_.IS_ACTIVE);\n};\n/**\n * Hide tooltip on mouseleave or scroll\n *\n * @private\n */\nMaterialTooltip.prototype.hideTooltip_ = function () {\n this.element_.classList.remove(this.CssClasses_.IS_ACTIVE);\n};\n/**\n * Initialize element.\n */\nMaterialTooltip.prototype.init = function () {\n if (this.element_) {\n var forElId = this.element_.getAttribute('for') || this.element_.getAttribute('data-mdl-for');\n if (forElId) {\n this.forElement_ = document.getElementById(forElId);\n }\n if (this.forElement_) {\n // It's left here because it prevents accidental text selection on Android\n if (!this.forElement_.hasAttribute('tabindex')) {\n this.forElement_.setAttribute('tabindex', '0');\n }\n this.boundMouseEnterHandler = this.handleMouseEnter_.bind(this);\n this.boundMouseLeaveAndScrollHandler = this.hideTooltip_.bind(this);\n this.forElement_.addEventListener('mouseenter', this.boundMouseEnterHandler, false);\n this.forElement_.addEventListener('touchend', this.boundMouseEnterHandler, false);\n this.forElement_.addEventListener('mouseleave', this.boundMouseLeaveAndScrollHandler, false);\n window.addEventListener('scroll', this.boundMouseLeaveAndScrollHandler, true);\n window.addEventListener('touchstart', this.boundMouseLeaveAndScrollHandler);\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTooltip,\n classAsString: 'MaterialTooltip',\n cssClass: 'mdl-tooltip'\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Data Table Card MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {Element} element The element that will be upgraded.\n */\nvar MaterialDataTable = function MaterialDataTable(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialDataTable'] = MaterialDataTable;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialDataTable.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialDataTable.prototype.CssClasses_ = {\n DATA_TABLE: 'mdl-data-table',\n SELECTABLE: 'mdl-data-table--selectable',\n SELECT_ELEMENT: 'mdl-data-table__select',\n IS_SELECTED: 'is-selected',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Generates and returns a function that toggles the selection state of a\n * single row (or multiple rows).\n *\n * @param {Element} checkbox Checkbox that toggles the selection state.\n * @param {Element} row Row to toggle when checkbox changes.\n * @param {(Array|NodeList)=} opt_rows Rows to toggle when checkbox changes.\n * @private\n */\nMaterialDataTable.prototype.selectRow_ = function (checkbox, row, opt_rows) {\n if (row) {\n return function () {\n if (checkbox.checked) {\n row.classList.add(this.CssClasses_.IS_SELECTED);\n } else {\n row.classList.remove(this.CssClasses_.IS_SELECTED);\n }\n }.bind(this);\n }\n if (opt_rows) {\n return function () {\n var i;\n var el;\n if (checkbox.checked) {\n for (i = 0; i < opt_rows.length; i++) {\n el = opt_rows[i].querySelector('td').querySelector('.mdl-checkbox');\n el['MaterialCheckbox'].check();\n opt_rows[i].classList.add(this.CssClasses_.IS_SELECTED);\n }\n } else {\n for (i = 0; i < opt_rows.length; i++) {\n el = opt_rows[i].querySelector('td').querySelector('.mdl-checkbox');\n el['MaterialCheckbox'].uncheck();\n opt_rows[i].classList.remove(this.CssClasses_.IS_SELECTED);\n }\n }\n }.bind(this);\n }\n};\n/**\n * Creates a checkbox for a single or or multiple rows and hooks up the\n * event handling.\n *\n * @param {Element} row Row to toggle when checkbox changes.\n * @param {(Array|NodeList)=} opt_rows Rows to toggle when checkbox changes.\n * @private\n */\nMaterialDataTable.prototype.createCheckbox_ = function (row, opt_rows) {\n var label = document.createElement('label');\n var labelClasses = [\n 'mdl-checkbox',\n 'mdl-js-checkbox',\n 'mdl-js-ripple-effect',\n this.CssClasses_.SELECT_ELEMENT\n ];\n label.className = labelClasses.join(' ');\n var checkbox = document.createElement('input');\n checkbox.type = 'checkbox';\n checkbox.classList.add('mdl-checkbox__input');\n if (row) {\n checkbox.checked = row.classList.contains(this.CssClasses_.IS_SELECTED);\n checkbox.addEventListener('change', this.selectRow_(checkbox, row));\n } else if (opt_rows) {\n checkbox.addEventListener('change', this.selectRow_(checkbox, null, opt_rows));\n }\n label.appendChild(checkbox);\n componentHandler.upgradeElement(label, 'MaterialCheckbox');\n return label;\n};\n/**\n * Initialize element.\n */\nMaterialDataTable.prototype.init = function () {\n if (this.element_) {\n var firstHeader = this.element_.querySelector('th');\n var bodyRows = Array.prototype.slice.call(this.element_.querySelectorAll('tbody tr'));\n var footRows = Array.prototype.slice.call(this.element_.querySelectorAll('tfoot tr'));\n var rows = bodyRows.concat(footRows);\n if (this.element_.classList.contains(this.CssClasses_.SELECTABLE)) {\n var th = document.createElement('th');\n var headerCheckbox = this.createCheckbox_(null, rows);\n th.appendChild(headerCheckbox);\n firstHeader.parentElement.insertBefore(th, firstHeader);\n for (var i = 0; i < rows.length; i++) {\n var firstCell = rows[i].querySelector('td');\n if (firstCell) {\n var td = document.createElement('td');\n if (rows[i].parentNode.nodeName.toUpperCase() === 'TBODY') {\n var rowCheckbox = this.createCheckbox_(rows[i]);\n td.appendChild(rowCheckbox);\n }\n rows[i].insertBefore(td, firstCell);\n }\n }\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialDataTable,\n classAsString: 'MaterialDataTable',\n cssClass: 'mdl-js-data-table'\n});","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var core = module.exports = { version: '2.6.11' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","module.exports = false;\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","module.exports = require('./_shared')('native-function-to-string', Function.toString);\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar $toString = require('./_function-to-string');\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","exports.f = Object.getOwnPropertySymbols;\n","exports.f = {}.propertyIsEnumerable;\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","var $export = require('./_export');\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperties: require('./_object-dps') });\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./_classof');\nvar test = {};\ntest[require('./_wks')('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n require('./_redefine')(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = require('./_export');\n\n$export($export.P, 'Function', { bind: require('./_bind') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","'use strict';\nvar isObject = require('./_is-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar HAS_INSTANCE = require('./_wks')('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) require('./_object-dp').f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n} });\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n","var $parseInt = require('./_global').parseInt;\nvar $trim = require('./_string-trim').trim;\nvar ws = require('./_string-ws');\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n","var $parseFloat = require('./_global').parseFloat;\nvar $trim = require('./_string-trim').trim;\n\nmodule.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = require('./_descriptors') ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./_redefine')(global, NUMBER, $Number);\n}\n","var cof = require('./_cof');\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","'use strict';\nvar $export = require('./_export');\nvar toInteger = require('./_to-integer');\nvar aNumberValue = require('./_a-number-value');\nvar repeat = require('./_string-repeat');\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !require('./_fails')(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $fails = require('./_fails');\nvar aNumberValue = require('./_a-number-value');\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","'use strict';\n// 21.1.3.25 String.prototype.trim()\nrequire('./_string-trim')('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","module.exports = {};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","var $export = require('./_export');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n","'use strict';\n// B.2.3.2 String.prototype.anchor(name)\nrequire('./_string-html')('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});\n","'use strict';\n// B.2.3.3 String.prototype.big()\nrequire('./_string-html')('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});\n","'use strict';\n// B.2.3.4 String.prototype.blink()\nrequire('./_string-html')('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});\n","'use strict';\n// B.2.3.5 String.prototype.bold()\nrequire('./_string-html')('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});\n","'use strict';\n// B.2.3.6 String.prototype.fixed()\nrequire('./_string-html')('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n","'use strict';\n// B.2.3.7 String.prototype.fontcolor(color)\nrequire('./_string-html')('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});\n","'use strict';\n// B.2.3.8 String.prototype.fontsize(size)\nrequire('./_string-html')('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});\n","'use strict';\n// B.2.3.9 String.prototype.italics()\nrequire('./_string-html')('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});\n","'use strict';\n// B.2.3.10 String.prototype.link(url)\nrequire('./_string-html')('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n","'use strict';\n// B.2.3.11 String.prototype.small()\nrequire('./_string-html')('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});\n","'use strict';\n// B.2.3.12 String.prototype.strike()\nrequire('./_string-html')('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});\n","'use strict';\n// B.2.3.13 String.prototype.sub()\nrequire('./_string-html')('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});\n","'use strict';\n// B.2.3.14 String.prototype.sup()\nrequire('./_string-html')('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});\n","// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = require('./_export');\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\n\n$export($export.P + $export.F * require('./_fails')(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n","'use strict';\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = require('./_fails');\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n","// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = require('./_export');\nvar toISOString = require('./_date-to-iso-string');\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});\n","var DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n require('./_redefine')(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n","'use strict';\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};\n","var TO_PRIMITIVE = require('./_wks')('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) require('./_hide')(proto, TO_PRIMITIVE, require('./_date-to-primitive'));\n","// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = require('./_export');\n\n$export($export.S, 'Array', { isArray: require('./_is-array') });\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","'use strict';\nvar fails = require('./_fails');\n\nmodule.exports = function (method, arg) {\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call\n arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n });\n};\n","'use strict';\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (require('./_iobject') != Object || !require('./_strict-method')(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar html = require('./_html');\nvar cof = require('./_cof');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * require('./_fails')(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n for (; i < size; i++) cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar fails = require('./_fails');\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !require('./_strict-method')($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $forEach = require('./_array-methods')(0);\nvar STRICT = require('./_strict-method')([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $map = require('./_array-methods')(1);\n\n$export($export.P + $export.F * !require('./_strict-method')([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $filter = require('./_array-methods')(2);\n\n$export($export.P + $export.F * !require('./_strict-method')([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $some = require('./_array-methods')(3);\n\n$export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $every = require('./_array-methods')(4);\n\n$export($export.P + $export.F * !require('./_strict-method')([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments[1]);\n }\n});\n","var aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar toLength = require('./_to-length');\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $indexOf = require('./_array-includes')(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n return -1;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","require('./_set-species')('Array');\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","var global = require('./_global');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar dP = require('./_object-dp').f;\nvar gOPN = require('./_object-gopn').f;\nvar isRegExp = require('./_is-regexp');\nvar $flags = require('./_flags');\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () {\n re2[require('./_wks')('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');\n","'use strict';\n\nvar regexpFlags = require('./_flags');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar regexpExec = require('./_regexp-exec');\nrequire('./_export')({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nrequire('./es6.regexp.flags');\nvar anObject = require('./_an-object');\nvar $flags = require('./_flags');\nvar DESCRIPTORS = require('./_descriptors');\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n","'use strict';\nvar at = require('./_string-at')(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};\n","'use strict';\n\nvar classof = require('./_classof');\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n","'use strict';\nrequire('./es6.regexp.exec');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\nvar regexpExec = require('./_regexp-exec');\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar sameValue = require('./_same-value');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative($search, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\n\nvar isRegExp = require('./_is-regexp');\nvar anObject = require('./_an-object');\nvar speciesConstructor = require('./_species-constructor');\nvar advanceStringIndex = require('./_advance-string-index');\nvar toLength = require('./_to-length');\nvar callRegExpExec = require('./_regexp-exec-abstract');\nvar regexpExec = require('./_regexp-exec');\nvar fails = require('./_fails');\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar global = require('./_global');\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar validate = require('./_validate-collection');\nvar NATIVE_WEAK_MAP = require('./_validate-collection');\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < fin) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","var $export = require('./_export');\n$export($export.G + $export.W + $export.F * !require('./_typed').ABV, {\n DataView: require('./_typed-buffer').DataView\n});\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","'use strict';\n// 26.1.5 Reflect.enumerate(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar Enumerate = function (iterated) {\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = []; // keys\n var key;\n for (key in iterated) keys.push(key);\n};\nrequire('./_iter-create')(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n do {\n if (that._i >= keys.length) return { value: undefined, done: true };\n } while (!((key = keys[that._i++]) in that._t));\n return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar isArray = require('./_is-array');\nvar isObject = require('./_is-object');\nvar toLength = require('./_to-length');\nvar ctx = require('./_ctx');\nvar IS_CONCAT_SPREADABLE = require('./_wks')('isConcatSpreadable');\n\nfunction flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;\n var element, spreadable;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n spreadable = false;\n if (isObject(element)) {\n spreadable = element[IS_CONCAT_SPREADABLE];\n spreadable = spreadable !== undefined ? !!spreadable : isArray(element);\n }\n\n if (spreadable && depth > 0) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1fffffffffffff) throw TypeError();\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n}\n\nmodule.exports = flattenIntoArray;\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap\nvar $export = require('./_export');\nvar flattenIntoArray = require('./_flatten-into-array');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar aFunction = require('./_a-function');\nvar arraySpeciesCreate = require('./_array-species-create');\n\n$export($export.P, 'Array', {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen, A;\n aFunction(callbackfn);\n sourceLen = toLength(O.length);\n A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);\n return A;\n }\n});\n\nrequire('./_add-to-unscopables')('flatMap');\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatten\nvar $export = require('./_export');\nvar flattenIntoArray = require('./_flatten-into-array');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar arraySpeciesCreate = require('./_array-species-create');\n\n$export($export.P, 'Array', {\n flatten: function flatten(/* depthArg = 1 */) {\n var depthArg = arguments[0];\n var O = toObject(this);\n var sourceLen = toLength(O.length);\n var A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toInteger(depthArg));\n return A;\n }\n});\n\nrequire('./_add-to-unscopables')('flatten');\n","'use strict';\n// https://github.com/mathiasbynens/String.prototype.at\nvar $export = require('./_export');\nvar $at = require('./_string-at')(true);\n\n$export($export.P, 'String', {\n at: function at(pos) {\n return $at(this, pos);\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimLeft', function ($trim) {\n return function trimLeft() {\n return $trim(this, 1);\n };\n}, 'trimStart');\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimRight', function ($trim) {\n return function trimRight() {\n return $trim(this, 2);\n };\n}, 'trimEnd');\n","'use strict';\n// https://tc39.github.io/String.prototype.matchAll/\nvar $export = require('./_export');\nvar defined = require('./_defined');\nvar toLength = require('./_to-length');\nvar isRegExp = require('./_is-regexp');\nvar getFlags = require('./_flags');\nvar RegExpProto = RegExp.prototype;\n\nvar $RegExpStringIterator = function (regexp, string) {\n this._r = regexp;\n this._s = string;\n};\n\nrequire('./_iter-create')($RegExpStringIterator, 'RegExp String', function next() {\n var match = this._r.exec(this._s);\n return { value: match, done: match === null };\n});\n\n$export($export.P, 'String', {\n matchAll: function matchAll(regexp) {\n defined(this);\n if (!isRegExp(regexp)) throw TypeError(regexp + ' is not a regexp!');\n var S = String(this);\n var flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp);\n var rx = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags);\n rx.lastIndex = toLength(regexp.lastIndex);\n return new $RegExpStringIterator(rx, S);\n }\n});\n","require('./_wks-define')('asyncIterator');\n","require('./_wks-define')('observable');\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","var DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","'use strict';\n// Forced replacement prototype accessors methods\nmodule.exports = require('./_library') || !require('./_fails')(function () {\n var K = Math.random();\n // In FF throws only define methods\n // eslint-disable-next-line no-undef, no-useless-call\n __defineSetter__.call(null, K, function () { /* empty */ });\n delete require('./_global')[K];\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar aFunction = require('./_a-function');\nvar $defineProperty = require('./_object-dp');\n\n// B.2.2.2 Object.prototype.__defineGetter__(P, getter)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __defineGetter__: function __defineGetter__(P, getter) {\n $defineProperty.f(toObject(this), P, { get: aFunction(getter), enumerable: true, configurable: true });\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar aFunction = require('./_a-function');\nvar $defineProperty = require('./_object-dp');\n\n// B.2.2.3 Object.prototype.__defineSetter__(P, setter)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __defineSetter__: function __defineSetter__(P, setter) {\n $defineProperty.f(toObject(this), P, { set: aFunction(setter), enumerable: true, configurable: true });\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\nvar getPrototypeOf = require('./_object-gpo');\nvar getOwnPropertyDescriptor = require('./_object-gopd').f;\n\n// B.2.2.4 Object.prototype.__lookupGetter__(P)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __lookupGetter__: function __lookupGetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.get;\n } while (O = getPrototypeOf(O));\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\nvar getPrototypeOf = require('./_object-gpo');\nvar getOwnPropertyDescriptor = require('./_object-gopd').f;\n\n// B.2.2.5 Object.prototype.__lookupSetter__(P)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __lookupSetter__: function __lookupSetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.set;\n } while (O = getPrototypeOf(O));\n }\n});\n","var forOf = require('./_for-of');\n\nmodule.exports = function (iter, ITERATOR) {\n var result = [];\n forOf(iter, false, result.push, result, ITERATOR);\n return result;\n};\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar classof = require('./_classof');\nvar from = require('./_array-from-iterable');\nmodule.exports = function (NAME) {\n return function toJSON() {\n if (classof(this) != NAME) throw TypeError(NAME + \"#toJSON isn't generic\");\n return from(this);\n };\n};\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = require('./_export');\n\n$export($export.P + $export.R, 'Map', { toJSON: require('./_collection-to-json')('Map') });\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = require('./_export');\n\n$export($export.P + $export.R, 'Set', { toJSON: require('./_collection-to-json')('Set') });\n","'use strict';\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = require('./_export');\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { of: function of() {\n var length = arguments.length;\n var A = new Array(length);\n while (length--) A[length] = arguments[length];\n return new this(A);\n } });\n};\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-map.of\nrequire('./_set-collection-of')('Map');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of\nrequire('./_set-collection-of')('Set');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of\nrequire('./_set-collection-of')('WeakMap');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.of\nrequire('./_set-collection-of')('WeakSet');\n","'use strict';\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar ctx = require('./_ctx');\nvar forOf = require('./_for-of');\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {\n var mapFn = arguments[1];\n var mapping, A, n, cb;\n aFunction(this);\n mapping = mapFn !== undefined;\n if (mapping) aFunction(mapFn);\n if (source == undefined) return new this();\n A = [];\n if (mapping) {\n n = 0;\n cb = ctx(mapFn, arguments[2], 2);\n forOf(source, false, function (nextItem) {\n A.push(cb(nextItem, n++));\n });\n } else {\n forOf(source, false, A.push, A);\n }\n return new this(A);\n } });\n};\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-map.from\nrequire('./_set-collection-from')('Map');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from\nrequire('./_set-collection-from')('Set');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.from\nrequire('./_set-collection-from')('WeakMap');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.from\nrequire('./_set-collection-from')('WeakSet');\n","// https://github.com/tc39/proposal-global\nvar $export = require('./_export');\n\n$export($export.G, { global: require('./_global') });\n","// https://github.com/tc39/proposal-global\nvar $export = require('./_export');\n\n$export($export.S, 'System', { global: require('./_global') });\n","// https://github.com/ljharb/proposal-is-error\nvar $export = require('./_export');\nvar cof = require('./_cof');\n\n$export($export.S, 'Error', {\n isError: function isError(it) {\n return cof(it) === 'Error';\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clamp: function clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { DEG_PER_RAD: Math.PI / 180 });\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\nvar RAD_PER_DEG = 180 / Math.PI;\n\n$export($export.S, 'Math', {\n degrees: function degrees(radians) {\n return radians * RAD_PER_DEG;\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nmodule.exports = Math.scale || function scale(x, inLow, inHigh, outLow, outHigh) {\n if (\n arguments.length === 0\n // eslint-disable-next-line no-self-compare\n || x != x\n // eslint-disable-next-line no-self-compare\n || inLow != inLow\n // eslint-disable-next-line no-self-compare\n || inHigh != inHigh\n // eslint-disable-next-line no-self-compare\n || outLow != outLow\n // eslint-disable-next-line no-self-compare\n || outHigh != outHigh\n ) return NaN;\n if (x === Infinity || x === -Infinity) return x;\n return (x - inLow) * (outHigh - outLow) / (inHigh - inLow) + outLow;\n};\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\nvar scale = require('./_math-scale');\nvar fround = require('./_math-fround');\n\n$export($export.S, 'Math', {\n fscale: function fscale(x, inLow, inHigh, outLow, outHigh) {\n return fround(scale(x, inLow, inHigh, outLow, outHigh));\n }\n});\n","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n iaddh: function iaddh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;\n }\n});\n","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n isubh: function isubh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;\n }\n});\n","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n imulh: function imulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >> 16;\n var v1 = $v >> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16);\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { RAD_PER_DEG: 180 / Math.PI });\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\nvar DEG_PER_RAD = Math.PI / 180;\n\n$export($export.S, 'Math', {\n radians: function radians(degrees) {\n return degrees * DEG_PER_RAD;\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { scale: require('./_math-scale') });\n","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n umulh: function umulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >>> 16;\n var v1 = $v >>> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16);\n }\n});\n","// http://jfbastien.github.io/papers/Math.signbit.html\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { signbit: function signbit(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) != x ? x : x == 0 ? 1 / x == Infinity : x > 0;\n} });\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n","'use strict';\n// https://github.com/tc39/proposal-promise-try\nvar $export = require('./_export');\nvar newPromiseCapability = require('./_new-promise-capability');\nvar perform = require('./_perform');\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapability.f(this);\n var result = perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n","var Map = require('./es6.map');\nvar $export = require('./_export');\nvar shared = require('./_shared')('metadata');\nvar store = shared.store || (shared.store = new (require('./es6.weak-map'))());\n\nvar getOrCreateMetadataMap = function (target, targetKey, create) {\n var targetMetadata = store.get(target);\n if (!targetMetadata) {\n if (!create) return undefined;\n store.set(target, targetMetadata = new Map());\n }\n var keyMetadata = targetMetadata.get(targetKey);\n if (!keyMetadata) {\n if (!create) return undefined;\n targetMetadata.set(targetKey, keyMetadata = new Map());\n } return keyMetadata;\n};\nvar ordinaryHasOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? false : metadataMap.has(MetadataKey);\n};\nvar ordinaryGetOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);\n};\nvar ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) {\n getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);\n};\nvar ordinaryOwnMetadataKeys = function (target, targetKey) {\n var metadataMap = getOrCreateMetadataMap(target, targetKey, false);\n var keys = [];\n if (metadataMap) metadataMap.forEach(function (_, key) { keys.push(key); });\n return keys;\n};\nvar toMetaKey = function (it) {\n return it === undefined || typeof it == 'symbol' ? it : String(it);\n};\nvar exp = function (O) {\n $export($export.S, 'Reflect', O);\n};\n\nmodule.exports = {\n store: store,\n map: getOrCreateMetadataMap,\n has: ordinaryHasOwnMetadata,\n get: ordinaryGetOwnMetadata,\n set: ordinaryDefineOwnMetadata,\n keys: ordinaryOwnMetadataKeys,\n key: toMetaKey,\n exp: exp\n};\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar toMetaKey = metadata.key;\nvar ordinaryDefineOwnMetadata = metadata.set;\n\nmetadata.exp({ defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey) {\n ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar toMetaKey = metadata.key;\nvar getOrCreateMetadataMap = metadata.map;\nvar store = metadata.store;\n\nmetadata.exp({ deleteMetadata: function deleteMetadata(metadataKey, target /* , targetKey */) {\n var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2]);\n var metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);\n if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false;\n if (metadataMap.size) return true;\n var targetMetadata = store.get(target);\n targetMetadata['delete'](targetKey);\n return !!targetMetadata.size || store['delete'](target);\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nvar ordinaryGetMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return ordinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;\n};\n\nmetadata.exp({ getMetadata: function getMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var Set = require('./es6.set');\nvar from = require('./_array-from-iterable');\nvar metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nvar ordinaryMetadataKeys = function (O, P) {\n var oKeys = ordinaryOwnMetadataKeys(O, P);\n var parent = getPrototypeOf(O);\n if (parent === null) return oKeys;\n var pKeys = ordinaryMetadataKeys(parent, P);\n return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;\n};\n\nmetadata.exp({ getMetadataKeys: function getMetadataKeys(target /* , targetKey */) {\n return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadata: function getOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadataKeys: function getOwnMetadataKeys(target /* , targetKey */) {\n return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nvar ordinaryHasMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return true;\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;\n};\n\nmetadata.exp({ hasMetadata: function hasMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ hasOwnMetadata: function hasOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var $metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar toMetaKey = $metadata.key;\nvar ordinaryDefineOwnMetadata = $metadata.set;\n\n$metadata.exp({ metadata: function metadata(metadataKey, metadataValue) {\n return function decorator(target, targetKey) {\n ordinaryDefineOwnMetadata(\n metadataKey, metadataValue,\n (targetKey !== undefined ? anObject : aFunction)(target),\n toMetaKey(targetKey)\n );\n };\n} });\n","// https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask\nvar $export = require('./_export');\nvar microtask = require('./_microtask')();\nvar process = require('./_global').process;\nvar isNode = require('./_cof')(process) == 'process';\n\n$export($export.G, {\n asap: function asap(fn) {\n var domain = isNode && process.domain;\n microtask(domain ? domain.bind(fn) : fn);\n }\n});\n","'use strict';\n// https://github.com/zenparsing/es-observable\nvar $export = require('./_export');\nvar global = require('./_global');\nvar core = require('./_core');\nvar microtask = require('./_microtask')();\nvar OBSERVABLE = require('./_wks')('observable');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar anInstance = require('./_an-instance');\nvar redefineAll = require('./_redefine-all');\nvar hide = require('./_hide');\nvar forOf = require('./_for-of');\nvar RETURN = forOf.RETURN;\n\nvar getMethod = function (fn) {\n return fn == null ? undefined : aFunction(fn);\n};\n\nvar cleanupSubscription = function (subscription) {\n var cleanup = subscription._c;\n if (cleanup) {\n subscription._c = undefined;\n cleanup();\n }\n};\n\nvar subscriptionClosed = function (subscription) {\n return subscription._o === undefined;\n};\n\nvar closeSubscription = function (subscription) {\n if (!subscriptionClosed(subscription)) {\n subscription._o = undefined;\n cleanupSubscription(subscription);\n }\n};\n\nvar Subscription = function (observer, subscriber) {\n anObject(observer);\n this._c = undefined;\n this._o = observer;\n observer = new SubscriptionObserver(this);\n try {\n var cleanup = subscriber(observer);\n var subscription = cleanup;\n if (cleanup != null) {\n if (typeof cleanup.unsubscribe === 'function') cleanup = function () { subscription.unsubscribe(); };\n else aFunction(cleanup);\n this._c = cleanup;\n }\n } catch (e) {\n observer.error(e);\n return;\n } if (subscriptionClosed(this)) cleanupSubscription(this);\n};\n\nSubscription.prototype = redefineAll({}, {\n unsubscribe: function unsubscribe() { closeSubscription(this); }\n});\n\nvar SubscriptionObserver = function (subscription) {\n this._s = subscription;\n};\n\nSubscriptionObserver.prototype = redefineAll({}, {\n next: function next(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n try {\n var m = getMethod(observer.next);\n if (m) return m.call(observer, value);\n } catch (e) {\n try {\n closeSubscription(subscription);\n } finally {\n throw e;\n }\n }\n }\n },\n error: function error(value) {\n var subscription = this._s;\n if (subscriptionClosed(subscription)) throw value;\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.error);\n if (!m) throw value;\n value = m.call(observer, value);\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n },\n complete: function complete(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.complete);\n value = m ? m.call(observer, value) : undefined;\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n }\n }\n});\n\nvar $Observable = function Observable(subscriber) {\n anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber);\n};\n\nredefineAll($Observable.prototype, {\n subscribe: function subscribe(observer) {\n return new Subscription(observer, this._f);\n },\n forEach: function forEach(fn) {\n var that = this;\n return new (core.Promise || global.Promise)(function (resolve, reject) {\n aFunction(fn);\n var subscription = that.subscribe({\n next: function (value) {\n try {\n return fn(value);\n } catch (e) {\n reject(e);\n subscription.unsubscribe();\n }\n },\n error: reject,\n complete: resolve\n });\n });\n }\n});\n\nredefineAll($Observable, {\n from: function from(x) {\n var C = typeof this === 'function' ? this : $Observable;\n var method = getMethod(anObject(x)[OBSERVABLE]);\n if (method) {\n var observable = anObject(method.call(x));\n return observable.constructor === C ? observable : new C(function (observer) {\n return observable.subscribe(observer);\n });\n }\n return new C(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n try {\n if (forOf(x, false, function (it) {\n observer.next(it);\n if (done) return RETURN;\n }) === RETURN) return;\n } catch (e) {\n if (done) throw e;\n observer.error(e);\n return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n },\n of: function of() {\n for (var i = 0, l = arguments.length, items = new Array(l); i < l;) items[i] = arguments[i++];\n return new (typeof this === 'function' ? this : $Observable)(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n for (var j = 0; j < items.length; ++j) {\n observer.next(items[j]);\n if (done) return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n }\n});\n\nhide($Observable.prototype, OBSERVABLE, function () { return this; });\n\n$export($export.G, { Observable: $Observable });\n\nrequire('./_set-species')('Observable');\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","require('./modules/es6.symbol');\nrequire('./modules/es6.object.create');\nrequire('./modules/es6.object.define-property');\nrequire('./modules/es6.object.define-properties');\nrequire('./modules/es6.object.get-own-property-descriptor');\nrequire('./modules/es6.object.get-prototype-of');\nrequire('./modules/es6.object.keys');\nrequire('./modules/es6.object.get-own-property-names');\nrequire('./modules/es6.object.freeze');\nrequire('./modules/es6.object.seal');\nrequire('./modules/es6.object.prevent-extensions');\nrequire('./modules/es6.object.is-frozen');\nrequire('./modules/es6.object.is-sealed');\nrequire('./modules/es6.object.is-extensible');\nrequire('./modules/es6.object.assign');\nrequire('./modules/es6.object.is');\nrequire('./modules/es6.object.set-prototype-of');\nrequire('./modules/es6.object.to-string');\nrequire('./modules/es6.function.bind');\nrequire('./modules/es6.function.name');\nrequire('./modules/es6.function.has-instance');\nrequire('./modules/es6.parse-int');\nrequire('./modules/es6.parse-float');\nrequire('./modules/es6.number.constructor');\nrequire('./modules/es6.number.to-fixed');\nrequire('./modules/es6.number.to-precision');\nrequire('./modules/es6.number.epsilon');\nrequire('./modules/es6.number.is-finite');\nrequire('./modules/es6.number.is-integer');\nrequire('./modules/es6.number.is-nan');\nrequire('./modules/es6.number.is-safe-integer');\nrequire('./modules/es6.number.max-safe-integer');\nrequire('./modules/es6.number.min-safe-integer');\nrequire('./modules/es6.number.parse-float');\nrequire('./modules/es6.number.parse-int');\nrequire('./modules/es6.math.acosh');\nrequire('./modules/es6.math.asinh');\nrequire('./modules/es6.math.atanh');\nrequire('./modules/es6.math.cbrt');\nrequire('./modules/es6.math.clz32');\nrequire('./modules/es6.math.cosh');\nrequire('./modules/es6.math.expm1');\nrequire('./modules/es6.math.fround');\nrequire('./modules/es6.math.hypot');\nrequire('./modules/es6.math.imul');\nrequire('./modules/es6.math.log10');\nrequire('./modules/es6.math.log1p');\nrequire('./modules/es6.math.log2');\nrequire('./modules/es6.math.sign');\nrequire('./modules/es6.math.sinh');\nrequire('./modules/es6.math.tanh');\nrequire('./modules/es6.math.trunc');\nrequire('./modules/es6.string.from-code-point');\nrequire('./modules/es6.string.raw');\nrequire('./modules/es6.string.trim');\nrequire('./modules/es6.string.iterator');\nrequire('./modules/es6.string.code-point-at');\nrequire('./modules/es6.string.ends-with');\nrequire('./modules/es6.string.includes');\nrequire('./modules/es6.string.repeat');\nrequire('./modules/es6.string.starts-with');\nrequire('./modules/es6.string.anchor');\nrequire('./modules/es6.string.big');\nrequire('./modules/es6.string.blink');\nrequire('./modules/es6.string.bold');\nrequire('./modules/es6.string.fixed');\nrequire('./modules/es6.string.fontcolor');\nrequire('./modules/es6.string.fontsize');\nrequire('./modules/es6.string.italics');\nrequire('./modules/es6.string.link');\nrequire('./modules/es6.string.small');\nrequire('./modules/es6.string.strike');\nrequire('./modules/es6.string.sub');\nrequire('./modules/es6.string.sup');\nrequire('./modules/es6.date.now');\nrequire('./modules/es6.date.to-json');\nrequire('./modules/es6.date.to-iso-string');\nrequire('./modules/es6.date.to-string');\nrequire('./modules/es6.date.to-primitive');\nrequire('./modules/es6.array.is-array');\nrequire('./modules/es6.array.from');\nrequire('./modules/es6.array.of');\nrequire('./modules/es6.array.join');\nrequire('./modules/es6.array.slice');\nrequire('./modules/es6.array.sort');\nrequire('./modules/es6.array.for-each');\nrequire('./modules/es6.array.map');\nrequire('./modules/es6.array.filter');\nrequire('./modules/es6.array.some');\nrequire('./modules/es6.array.every');\nrequire('./modules/es6.array.reduce');\nrequire('./modules/es6.array.reduce-right');\nrequire('./modules/es6.array.index-of');\nrequire('./modules/es6.array.last-index-of');\nrequire('./modules/es6.array.copy-within');\nrequire('./modules/es6.array.fill');\nrequire('./modules/es6.array.find');\nrequire('./modules/es6.array.find-index');\nrequire('./modules/es6.array.species');\nrequire('./modules/es6.array.iterator');\nrequire('./modules/es6.regexp.constructor');\nrequire('./modules/es6.regexp.exec');\nrequire('./modules/es6.regexp.to-string');\nrequire('./modules/es6.regexp.flags');\nrequire('./modules/es6.regexp.match');\nrequire('./modules/es6.regexp.replace');\nrequire('./modules/es6.regexp.search');\nrequire('./modules/es6.regexp.split');\nrequire('./modules/es6.promise');\nrequire('./modules/es6.map');\nrequire('./modules/es6.set');\nrequire('./modules/es6.weak-map');\nrequire('./modules/es6.weak-set');\nrequire('./modules/es6.typed.array-buffer');\nrequire('./modules/es6.typed.data-view');\nrequire('./modules/es6.typed.int8-array');\nrequire('./modules/es6.typed.uint8-array');\nrequire('./modules/es6.typed.uint8-clamped-array');\nrequire('./modules/es6.typed.int16-array');\nrequire('./modules/es6.typed.uint16-array');\nrequire('./modules/es6.typed.int32-array');\nrequire('./modules/es6.typed.uint32-array');\nrequire('./modules/es6.typed.float32-array');\nrequire('./modules/es6.typed.float64-array');\nrequire('./modules/es6.reflect.apply');\nrequire('./modules/es6.reflect.construct');\nrequire('./modules/es6.reflect.define-property');\nrequire('./modules/es6.reflect.delete-property');\nrequire('./modules/es6.reflect.enumerate');\nrequire('./modules/es6.reflect.get');\nrequire('./modules/es6.reflect.get-own-property-descriptor');\nrequire('./modules/es6.reflect.get-prototype-of');\nrequire('./modules/es6.reflect.has');\nrequire('./modules/es6.reflect.is-extensible');\nrequire('./modules/es6.reflect.own-keys');\nrequire('./modules/es6.reflect.prevent-extensions');\nrequire('./modules/es6.reflect.set');\nrequire('./modules/es6.reflect.set-prototype-of');\nrequire('./modules/es7.array.includes');\nrequire('./modules/es7.array.flat-map');\nrequire('./modules/es7.array.flatten');\nrequire('./modules/es7.string.at');\nrequire('./modules/es7.string.pad-start');\nrequire('./modules/es7.string.pad-end');\nrequire('./modules/es7.string.trim-left');\nrequire('./modules/es7.string.trim-right');\nrequire('./modules/es7.string.match-all');\nrequire('./modules/es7.symbol.async-iterator');\nrequire('./modules/es7.symbol.observable');\nrequire('./modules/es7.object.get-own-property-descriptors');\nrequire('./modules/es7.object.values');\nrequire('./modules/es7.object.entries');\nrequire('./modules/es7.object.define-getter');\nrequire('./modules/es7.object.define-setter');\nrequire('./modules/es7.object.lookup-getter');\nrequire('./modules/es7.object.lookup-setter');\nrequire('./modules/es7.map.to-json');\nrequire('./modules/es7.set.to-json');\nrequire('./modules/es7.map.of');\nrequire('./modules/es7.set.of');\nrequire('./modules/es7.weak-map.of');\nrequire('./modules/es7.weak-set.of');\nrequire('./modules/es7.map.from');\nrequire('./modules/es7.set.from');\nrequire('./modules/es7.weak-map.from');\nrequire('./modules/es7.weak-set.from');\nrequire('./modules/es7.global');\nrequire('./modules/es7.system.global');\nrequire('./modules/es7.error.is-error');\nrequire('./modules/es7.math.clamp');\nrequire('./modules/es7.math.deg-per-rad');\nrequire('./modules/es7.math.degrees');\nrequire('./modules/es7.math.fscale');\nrequire('./modules/es7.math.iaddh');\nrequire('./modules/es7.math.isubh');\nrequire('./modules/es7.math.imulh');\nrequire('./modules/es7.math.rad-per-deg');\nrequire('./modules/es7.math.radians');\nrequire('./modules/es7.math.scale');\nrequire('./modules/es7.math.umulh');\nrequire('./modules/es7.math.signbit');\nrequire('./modules/es7.promise.finally');\nrequire('./modules/es7.promise.try');\nrequire('./modules/es7.reflect.define-metadata');\nrequire('./modules/es7.reflect.delete-metadata');\nrequire('./modules/es7.reflect.get-metadata');\nrequire('./modules/es7.reflect.get-metadata-keys');\nrequire('./modules/es7.reflect.get-own-metadata');\nrequire('./modules/es7.reflect.get-own-metadata-keys');\nrequire('./modules/es7.reflect.has-metadata');\nrequire('./modules/es7.reflect.has-own-metadata');\nrequire('./modules/es7.reflect.metadata');\nrequire('./modules/es7.asap');\nrequire('./modules/es7.observable');\nrequire('./modules/web.timers');\nrequire('./modules/web.immediate');\nrequire('./modules/web.dom.iterable');\nmodule.exports = require('./modules/_core');\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","module.exports = function (regExp, replace) {\n var replacer = replace === Object(replace) ? function (part) {\n return replace[part];\n } : replace;\n return function (it) {\n return String(it).replace(regExp, replacer);\n };\n};\n","// https://github.com/benjamingr/RexExp.escape\nvar $export = require('./_export');\nvar $re = require('./_replacer')(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n$export($export.S, 'RegExp', { escape: function escape(it) { return $re(it); } });\n","require('../../modules/core.regexp.escape');\nmodule.exports = require('../../modules/_core').RegExp.escape;\n","\"use strict\";\n\nrequire(\"core-js/shim\");\n\nrequire(\"regenerator-runtime/runtime\");\n\nrequire(\"core-js/fn/regexp/escape\");\n\nif (global._babelPolyfill) {\n throw new Error(\"only one instance of babel-polyfill is allowed\");\n}\nglobal._babelPolyfill = true;\n\nvar DEFINE_PROPERTY = \"defineProperty\";\nfunction define(O, key, value) {\n O[key] || Object[DEFINE_PROPERTY](O, key, {\n writable: true,\n configurable: true,\n value: value\n });\n}\n\ndefine(String.prototype, \"padLeft\", \"\".padStart);\ndefine(String.prototype, \"padRight\", \"\".padEnd);\n\n\"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill\".split(\",\").forEach(function (key) {\n [][key] && define(Array, key, Function.call.bind([][key]));\n});","export default class ScrollSpy {\n constructor(args) {\n\n this.doc = document;\n this.nav = this.doc.querySelectorAll(args.navSelector);\n\n if(!this.nav.length === 0) { return }\n\n this.win = window;\n this.winHeight = this.win.innerHeight;\n\n this.scrollElement = this.doc.querySelector(args.scrollSelector);\n this.className = args.className;\n this.offsetTop = args.offsetTop || 0;\n\n this.contents = [];\n this.contents = this.getContents(args.contentSelector);\n\n this.attachEvent();\n }\n\n attachEvent() {\n let scrollTimer;\n this.scrollElement.addEventListener('scroll', () => {\n if (scrollTimer) {\n clearTimeout(scrollTimer);\n }\n\n scrollTimer = setTimeout(() => {\n this.spy();\n }, 1);\n });\n\n let resizeTimer;\n this.scrollElement.addEventListener('resize', () => {\n if (resizeTimer) {\n clearTimeout(resizeTimer);\n }\n\n resizeTimer = setTimeout(() => {\n this.spy();\n }, 1);\n });\n\n this.scrollElement.addEventListener(\"click\", (e) => {\n const target = e.target;\n if (target.tagName !== \"A\") return;\n window.onclickToc = true;\n for (let i = 0, max = this.nav.length; i < max; i++) {\n const navElement = this.nav[i];\n if (navElement.href === target.href) {\n navElement.classList.add(this.className);\n navElement.classList.add('mdl-color-text--primary');\n } else {\n navElement.classList.remove(this.className);\n navElement.classList.remove('mdl-color-text--primary');\n }\n }\n });\n }\n\n getContents(contentSelector) {\n const targets = [];\n for (let i = 0, max = this.nav.length; i < max; i++) {\n const href = this.nav[i].href;\n targets.push(this.doc.getElementById(href.split('#')[1]));\n }\n return targets;\n }\n\n spy() {\n let elements = this.getViewState();\n this.toggleNavClass(elements);\n }\n\n getViewState() {\n const elementListInView = [];\n for (let i = 0, max = this.contents.length; i < max; i++) {\n const current = this.contents[i];\n if (current && this.isView(current)) {\n elementListInView.push(current);\n }\n }\n\n return elementListInView;\n }\n\n isView(element) {\n const scrollTop = this.scrollElement.scrollTop;\n const subHeaderRect = document.querySelector(\".mdl-layout__header-row\").getBoundingClientRect();\n const headerHeight = subHeaderRect.top + subHeaderRect.height;\n const scrollBottom = scrollTop + window.innerHeight - headerHeight;\n const rect = element.getBoundingClientRect();\n const elementTop = rect.top + scrollTop;\n const elementBottom = elementTop + element.offsetHeight;\n\n return elementTop < scrollBottom - 30 && elementBottom > scrollTop + headerHeight + 30;\n }\n\n toggleNavClass(elements) {\n if (window.onclickToc) {\n window.onclickToc = false;\n return;\n }\n let maxDepth = 0;\n let maxDepthElement = $();\n\n for (let i = 0, max = elements.length; i < max; i++) {\n const el = elements[i];\n const tempDepth = this.getTagDepth(el);\n if (maxDepth < tempDepth) {\n maxDepth = tempDepth;\n maxDepthElement = el;\n }\n }\n\n for (let i = 0, max = this.nav.length; i < max; i++) {\n const navElement = this.nav[i];\n if (navElement.href.split('#')[1] === maxDepthElement.id) {\n navElement.classList.add(this.className);\n navElement.classList.add('mdl-color-text--primary');\n } else {\n navElement.classList.remove(this.className);\n navElement.classList.remove('mdl-color-text--primary');\n }\n }\n }\n\n getTagDepth(element) {\n return parseInt($(element).find('h1,h2,h3,h4,h5,h6').get(0).tagName.split('H')[1]);\n }\n}\n","import \"../scss/sphinx_materialdesign_theme.scss\";\r\nimport \"./feedback\";\r\nimport \"material-design-lite\";\r\nimport \"babel-polyfill\";\r\nimport ScrollSpy from \"./scrollspy\";\r\n\r\n$(function() {\r\n\r\n function reconstructionDrawerGlobalToc() {\r\n const $globaltoc = $('.mdl-layout__drawer nav');\r\n const $lists = $globaltoc.find('li');\r\n $.each($lists, function(index, li) {\r\n const $li = $(li);\r\n const $linkWrapper = $('');\r\n const $link = $li.children('a');\r\n $li.append($linkWrapper.append($link));\r\n\r\n const isCurrent = $li.hasClass('current') && !$link.hasClass('current');\r\n const $ul = $li.children('ul');\r\n if ($ul.length) {\r\n const ulId = `globalnav-${index}`;\r\n $ul.attr('id', ulId);\r\n $ul.addClass('collapse');\r\n const $toggleWrapper = $('');\r\n if (isCurrent) {\r\n $ul.addClass('show');\r\n $toggleWrapper.addClass('show');\r\n } else {\r\n $ul.hide();\r\n }\r\n\r\n $li.append(\r\n $linkWrapper.append(\r\n $toggleWrapper.append(\r\n $(`keyboard_arrow_down`)\r\n )\r\n )\r\n ).append($ul);\r\n }\r\n });\r\n }\r\n\r\n function collapse() {\r\n $('.mdl-layout__drawer nav .nav-toggle a').click(function() {\r\n const $toggle = $(this);\r\n const id = $toggle.attr('data-toggle');\r\n $(`ul${id}`).toggleClass('show').animate({height: \"toggle\", opacity: \"toggle\"});\r\n $toggle.parent().toggleClass('show');\r\n });\r\n }\r\n\r\n function styleMdlCodeBlock() {\r\n $('pre').hover(function() {\r\n $(this).attr('click-to-copy', 'click to copy...');\r\n });\r\n $('pre').click(function(){\r\n var result = copyClipboard(this);\r\n if (result) {\r\n $(this).attr('click-to-copy', 'copied!');\r\n }\r\n });\r\n }\r\n\r\n function copyClipboard(selector) {\r\n var body = document.body;\r\n if(!body) return false;\r\n\r\n var $target = $(selector);\r\n if ($target.length === 0) { return false; }\r\n\r\n var text = $target.text();\r\n var textarea = document.createElement('textarea');\r\n textarea.value = text;\r\n document.body.appendChild(textarea);\r\n textarea.select();\r\n var result = document.execCommand('copy');\r\n document.body.removeChild(textarea);\r\n return result;\r\n }\r\n\r\n function quickSearchClickEvent() {\r\n const $breadcrumb = $('.breadcrumb');\r\n\r\n $('#waterfall-exp').focus(() => {\r\n if ($(window).width() <= 1024) {\r\n $breadcrumb.hide();\r\n }\r\n }).blur(() => {\r\n if ($(window).width() <= 1024) {\r\n $breadcrumb.show();\r\n }\r\n });\r\n }\r\n\r\n // styleMdlCodeBlock();\r\n\r\n reconstructionDrawerGlobalToc();\r\n collapse();\r\n quickSearchClickEvent();\r\n\r\n\r\n const spy = new ScrollSpy({\r\n contentSelector: '.page-content .section',\r\n navSelector: '.localtoc a',\r\n scrollSelector: 'main' ,\r\n className: 'current',\r\n offsetTop: 64});\r\n\r\n $('.mdl-layout__content').focus();\r\n\r\n $('.mx-card').each(function(){\r\n $(this).addClass('mdl-card mdl-shadow--2dp');\r\n });\r\n $('.mx-card .mx-card-title').each(function(){\r\n $(this).addClass('mdl-card__title');\r\n });\r\n $('.mx-card .mx-card-text').each(function(){\r\n $(this).addClass('mdl-card__supporting-text');\r\n });\r\n $('.mx-card-link').each(function(){\r\n $(this).hide();\r\n });\r\n $('.mdl-card').each(function(){\r\n $(this).click(function() {\r\n var url = $(this).find('.mx-card-link').text();\r\n if (url) {\r\n window.location = url;\r\n }\r\n return true;\r\n });\r\n });\r\n\r\n $('a.download').each(function() {\r\n // button\r\n var button = document.createElement('button');\r\n button.className = 'download mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect';\r\n\r\n // icon\r\n var icon = document.createElement('i');\r\n icon.className = 'material-icons';\r\n var text = document.createTextNode('file_download');\r\n icon.appendChild(text);\r\n button.appendChild(icon);\r\n\r\n // link\r\n var link = $(this).attr('href');\r\n button.onclick = function() {\r\n window.location = link;\r\n };\r\n var fileName = link.split(\"/\").slice(-1).pop();\r\n if (fileName) {\r\n button.id = fileName.replace('.', '-');\r\n } else {\r\n button.id = 'download-button-' + $(this).index();\r\n }\r\n\r\n // hint\r\n var hint = document.createElement('div');\r\n hint.className = 'mdl-tooltip';\r\n hint.setAttribute('data-mdl-for', button.id);\r\n var hintText = $(this).find('span.pre').map(function() {\r\n return $(this).text();\r\n }).get().join(' ');\r\n hint.innerHTML = hintText;\r\n\r\n componentHandler.upgradeElement(button);\r\n $(this).remove();\r\n var header = $('.section h1').first();\r\n header.append(button);\r\n header.append(hint);\r\n });\r\n\r\n $('.mdl-layout').css('visibility', 'visible');\r\n\r\n});\r\n"]} \ No newline at end of file diff --git a/docs/python_docs/_static/feedback.js b/docs/python_docs/themes/mx-theme/src/js/feedback.js similarity index 100% rename from docs/python_docs/_static/feedback.js rename to docs/python_docs/themes/mx-theme/src/js/feedback.js diff --git a/docs/python_docs/themes/mx-theme/src/js/sphinx_materialdesign_theme.js b/docs/python_docs/themes/mx-theme/src/js/sphinx_materialdesign_theme.js index 5f14255205f4..dad460755cde 100644 --- a/docs/python_docs/themes/mx-theme/src/js/sphinx_materialdesign_theme.js +++ b/docs/python_docs/themes/mx-theme/src/js/sphinx_materialdesign_theme.js @@ -1,8 +1,8 @@ import "../scss/sphinx_materialdesign_theme.scss"; +import "./feedback"; import "material-design-lite"; import "babel-polyfill"; import ScrollSpy from "./scrollspy"; -import AdjustHeight from "./adjust-height"; $(function() { diff --git a/docs/python_docs/themes/mx-theme/src/scss/_root.scss b/docs/python_docs/themes/mx-theme/src/scss/_root.scss index f805a8fb8f0e..5893d7d0adc3 100644 --- a/docs/python_docs/themes/mx-theme/src/scss/_root.scss +++ b/docs/python_docs/themes/mx-theme/src/scss/_root.scss @@ -14,6 +14,14 @@ body { outline: none; } +.mdl-layout__content header.mdl-layout__drawer { + display: none; +} + +.mdl-layout--fixed-drawer>.mdl-layout__content { + margin-left: 300px; +} + h1, h2, h3, h4, h5, h6, blockquote, span.mdl-layout-title, a.download > code.download { font-family: $body_font_family; diff --git a/docs/python_docs/themes/mx-theme/src/scss/grid/_simplegrid.scss b/docs/python_docs/themes/mx-theme/src/scss/grid/_simplegrid.scss index c4155950c031..c99c05639c6f 100644 --- a/docs/python_docs/themes/mx-theme/src/scss/grid/_simplegrid.scss +++ b/docs/python_docs/themes/mx-theme/src/scss/grid/_simplegrid.scss @@ -59,15 +59,6 @@ $breakpoint-large: 60em; // 960px width: 100%; margin-left: auto; margin-right: auto; - - @media only screen and (min-width: $breakpoint-small) { - width: 80%; - } - - @media only screen and (min-width: $breakpoint-large) { - width: 75%; - max-width: 60rem; - } } .row { diff --git a/docs/python_docs/themes/mx-theme/src/scss/layout/_layout.scss b/docs/python_docs/themes/mx-theme/src/scss/layout/_layout.scss index 2654a2c1e72c..2e862e1bc4b1 100644 --- a/docs/python_docs/themes/mx-theme/src/scss/layout/_layout.scss +++ b/docs/python_docs/themes/mx-theme/src/scss/layout/_layout.scss @@ -4,7 +4,7 @@ $layout: ( document: ( xl: ( - width: 1400px, + width: 100%, ) ), drawer-container: ( @@ -65,6 +65,7 @@ overflow-x: auto; overflow-y: auto; width: inherit; + right: 0px; &::-webkit-scrollbar { width: 6px; } From 9308acaa6b8ed92bf428059c9705e433faf4e53b Mon Sep 17 00:00:00 2001 From: Yang Shi Date: Wed, 29 Jul 2020 12:21:42 -0700 Subject: [PATCH 28/46] remove other language bindings section from website api page (#18783) * remove other language bindings section from api page * remove language binding docs redirect * add call for contribution banner * modify call for contribution wording Co-authored-by: Aaron Markham * more wording modification Co-authored-by: Aaron Markham * add hyperlink to 1.x version in banner * add reference to the C api deprecation github issue Co-authored-by: Aaron Markham --- docs/static_site/src/.htaccess | 9 --- docs/static_site/src/_sass/minima/_docs.scss | 10 +++ docs/static_site/src/pages/api/api.html | 72 ++------------------ 3 files changed, 14 insertions(+), 77 deletions(-) diff --git a/docs/static_site/src/.htaccess b/docs/static_site/src/.htaccess index dabc51a41f2b..d8467ab2142e 100644 --- a/docs/static_site/src/.htaccess +++ b/docs/static_site/src/.htaccess @@ -28,15 +28,6 @@ RewriteCond %{HTTP_REFERER} !mxnet.apache.org RewriteCond %{HTTP_REFERER} !mxnet.incubator.apache.org RewriteRule ^(.*)$ /versions/1.6/$1 [r=307,L] -# TODO temporary fix for issue #18604 -Redirect 302 /api/r/docs/api/R-package/build/mxnet-r-reference-manual.pdf https://mxnet-public.s3.us-east-2.amazonaws.com/docs/v1.x/mxnet-r-reference-manual.pdf -Redirect 302 /api/scala/docs/api/ /versions/1.6/api/scala/docs/api/ -Redirect 302 /api/java/docs/api/ /versions/1.6/api/java/docs/api/ -Redirect 302 /api/clojure/docs/api/ /versions/1.6/api/clojure/docs/api/ -Redirect 302 /api/cpp/docs/api/ /versions/1.6/api/cpp/docs/api/ -Redirect 302 /api/julia/docs/api/ /versions/1.6/api/julia/docs/api/ -Redirect 302 /api/julia/docs/api/#tutorials /versions/1.6/api/julia/docs/api/#tutorials - # Redirect Chinese visitors to Chinese CDN, temporary solution for slow site speed in China RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^CN$ RewriteCond %{HTTP_HOST} !cdn diff --git a/docs/static_site/src/_sass/minima/_docs.scss b/docs/static_site/src/_sass/minima/_docs.scss index f628740862ae..85e4c12c081e 100644 --- a/docs/static_site/src/_sass/minima/_docs.scss +++ b/docs/static_site/src/_sass/minima/_docs.scss @@ -85,3 +85,13 @@ padding-top: 20px; padding-bottom: 20px; } + +.language-binding-banner { + border: 1px solid transparent; + border-radius: .25rem; + color: #856404; + padding: .75rem 1.25rem; + margin-bottom: 1rem; + background-color: #fff3cd; + border-color: #ffeeba; +} diff --git a/docs/static_site/src/pages/api/api.html b/docs/static_site/src/pages/api/api.html index b055072c40c4..bd0d8bfaa510 100644 --- a/docs/static_site/src/pages/api/api.html +++ b/docs/static_site/src/pages/api/api.html @@ -21,55 +21,6 @@ tutorial_link: /api/python/docs/tutorials icon: /assets/img/python_logo.svg tag: python -- title: Scala - guide_link: /api/scala.html - api_link: /api/scala/docs/api - tutorial_link: /api/scala/docs/tutorials - description: - icon: /assets/img/scala_logo.svg - tag: scala -- title: Java - guide_link: /api/java.html - api_link: /api/java/docs/api - tutorial_link: /api/java/docs/tutorials - description: - icon: /assets/img/java_logo.svg - tag: java -- title: Clojure - guide_link: /api/clojure - api_link: /api/clojure/docs/api - tutorial_link: /api/clojure/docs/tutorials - description: - icon: /assets/img/clojure_logo.svg - tag: clojure -- title: C/C++ - guide_link: /api/cpp - api_link: /api/cpp/docs/api - tutorial_link: /api/cpp/docs/tutorials - description: - icon: /assets/img/cpp_logo.svg - tag: cpp -- title: Julia - guide_link: /api/julia - api_link: /api/julia/docs/api - tutorial_link: /api/julia/docs/api/#tutorials - description: - icon: /assets/img/julia_logo.svg - tag: julia -- title: R - guide_link: /api/r - api_link: /api/r/docs/api/R-package/build/mxnet-r-reference-manual.pdf - tutorial_link: /api/r/docs/tutorials - description: - icon: /assets/img/R_logo.svg - tag: r -- title: Perl - guide_link: /api/perl - api_link: https://metacpan.org/release/AI-MXNet - tutorial_link: /api/perl/docs/tutorials - description: - icon: /assets/img/perl_logo.svg - tag: perl --- @@ -123,26 +74,11 @@

Python-first API

{%- endfor -%}

Other Bindings

-{%- for doc in page.docs -%} - {%- if doc.tag != 'python' -%} -
- +
+

Call for Contribution

+ The Clojure, Java, Julia, R, and Scala language bindings of MXNet v1.x were removed in v2.x due to some C APIs being deprecated and the bindings rely on the deprecated APIs. You can still use these language bindings in v1.x. + MXNet's new C APIs in v2.x can be used to reestablish your preferred language binding. Your contribution is welcome!
- {%- endif -%} -{%- endfor -%}
From b685fada9caadb4ca5d41eadd2d7ba1bc8322472 Mon Sep 17 00:00:00 2001 From: Yang Shi Date: Wed, 29 Jul 2020 12:22:12 -0700 Subject: [PATCH 29/46] use regex that is supported by all browsers (#18811) --- docs/static_site/src/assets/js/copycode.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/static_site/src/assets/js/copycode.js b/docs/static_site/src/assets/js/copycode.js index 75c6483369e0..6bda2f293973 100644 --- a/docs/static_site/src/assets/js/copycode.js +++ b/docs/static_site/src/assets/js/copycode.js @@ -59,7 +59,7 @@ $(document).ready(function () { const cleanPrompt = function (line, prompts) { let res = line; for (let i = 0; i < prompts.length; i++) { - let reg = new RegExp("(?<=^\\s*)" + prompts[i]); + let reg = new RegExp("(?:^\\s*)" + prompts[i]); if (reg.test(res)) { res = res.replace(reg, ""); break; From 6bbd53107aa16fc41e8d462cf5dc46fb70d592df Mon Sep 17 00:00:00 2001 From: Leonard Lausen Date: Wed, 29 Jul 2020 20:31:19 +0000 Subject: [PATCH 30/46] Update clang-tidy integration (#18815) Run clang-tidy via cmake only on the code managed by mxnet (and not 3rdparty dependencies), update to clang-tidy-10 and run clang-tidy-10 -fix to fix all the warnings that are enforced on CI. Developers can run clang-tidy by specifying the -DCMAKE_CXX_CLANG_TIDY="clang-tidy-10" to cmake, or using the python ci/build.py -R --platform ubuntu_cpu /work/runtime_functions.sh build_ubuntu_cpu_clang_tidy script. --- .clang-tidy | 52 +++++++------------ CMakeLists.txt | 13 ++++- ci/docker/Dockerfile.build.ubuntu | 2 +- ci/docker/runtime_functions.sh | 7 +-- example/extensions/lib_custom_op/gemm_lib.cc | 11 ++-- .../lib_custom_op/transposecsr_lib.cc | 9 ++-- .../lib_custom_op/transposerowsp_lib.cc | 9 ++-- example/extensions/lib_pass/pass_lib.cc | 5 +- .../extensions/lib_subgraph/subgraph_lib.cc | 28 +++++----- src/api/operator/numpy/linalg/np_norm.cc | 2 +- .../numpy/np_broadcast_reduce_op_boolean.cc | 4 +- .../numpy/np_broadcast_reduce_op_index.cc | 4 +- .../numpy/np_broadcast_reduce_op_value.cc | 16 +++--- src/api/operator/numpy/np_cumsum.cc | 2 +- src/api/operator/numpy/np_delete_op.cc | 2 +- src/api/operator/numpy/np_ediff1d_op.cc | 2 +- src/api/operator/numpy/np_einsum_op.cc | 2 +- .../numpy/np_elemwise_unary_op_basic.cc | 2 +- src/api/operator/numpy/np_fill_diagonal_op.cc | 2 +- src/api/operator/numpy/np_histogram_op.cc | 2 +- src/api/operator/numpy/np_init_op.cc | 20 +++---- src/api/operator/numpy/np_insert_op.cc | 6 +-- src/api/operator/numpy/np_interp_op.cc | 4 +- src/api/operator/numpy/np_matrix_op.cc | 26 +++++----- src/api/operator/numpy/np_moments_op.cc | 6 +-- src/api/operator/numpy/np_nan_to_num_op.cc | 2 +- src/api/operator/numpy/np_pad_op.cc | 2 +- src/api/operator/numpy/np_percentile_op.cc | 4 +- src/api/operator/numpy/np_repeat_op.cc | 2 +- src/api/operator/numpy/np_tensordot_op.cc | 2 +- src/api/operator/numpy/np_unique_op.cc | 2 +- src/api/operator/numpy/np_window_op.cc | 2 +- src/api/operator/numpy/random/np_choice_op.cc | 2 +- .../numpy/random/np_exponential_op.cc | 2 +- .../operator/numpy/random/np_laplace_op.cc | 2 +- .../numpy/random/np_location_scale_op.cc | 4 +- src/api/operator/numpy/random/np_pareto_op.cc | 2 +- src/api/operator/numpy/random/np_power_op.cc | 2 +- .../operator/numpy/random/np_rayleigh_op.cc | 2 +- .../operator/numpy/random/np_weibull_op.cc | 2 +- src/api/operator/random/np_gamma_op.cc | 2 +- src/api/operator/random/np_normal_op.cc | 2 +- src/api/operator/random/np_uniform_op.cc | 2 +- src/api/operator/tensor/matrix_op.cc | 2 +- src/c_api/c_api.cc | 20 +++---- src/c_api/c_api_profile.cc | 2 +- src/c_api/c_api_symbolic.cc | 22 ++++---- src/engine/naive_engine.cc | 18 ++++--- src/engine/threaded_engine_perdevice.cc | 28 +++++----- src/engine/threaded_engine_pooled.cc | 13 ++--- src/imperative/attach_op_execs_pass.cc | 29 ++++++----- src/imperative/cached_op.cc | 6 +-- src/imperative/cached_op_threadsafe.cc | 2 +- src/imperative/eliminate_common_expr_pass.cc | 8 +-- src/imperative/imperative.cc | 8 +-- src/initialize.cc | 5 +- src/io/batchify.cc | 16 +++--- src/io/dataloader.cc | 16 +++--- src/io/dataset.cc | 46 ++++++++-------- src/io/image_aug_default.cc | 2 +- src/io/image_det_aug_default.cc | 2 +- src/io/iter_csv.cc | 30 +++++------ src/io/iter_image_det_recordio.cc | 19 +++---- src/io/iter_image_recordio.cc | 19 +++---- src/io/iter_image_recordio_2.cc | 46 ++++++++-------- src/io/iter_libsvm.cc | 16 +++--- src/io/iter_mnist.cc | 22 ++++---- src/io/iter_sampler.cc | 23 ++++---- src/kvstore/kvstore.cc | 3 +- src/nnvm/gradient.cc | 9 ++-- src/nnvm/graph_editor.cc | 4 +- src/nnvm/low_precision_pass.cc | 15 +++--- src/nnvm/tvm_bridge.cc | 3 +- src/operator/contrib/boolean_mask.cc | 4 +- src/operator/contrib/dgl_graph.cc | 49 ++++++++--------- src/operator/contrib/multi_proposal.cc | 8 +-- src/operator/contrib/proposal.cc | 8 +-- src/operator/contrib/rroi_align.cc | 2 +- src/operator/control_flow.cc | 12 +++-- src/operator/leaky_relu.cc | 2 +- src/operator/numpy/np_einsum_op.cc | 4 +- src/operator/numpy/np_indexing_op.cc | 4 +- src/operator/numpy/np_polynomial_op.cc | 2 +- src/operator/operator_tune.cc | 2 +- .../quantization/quantize_graph_pass.cc | 7 ++- .../quantization/quantized_elemwise_mul.cc | 4 +- .../quantization/quantized_fully_connected.cc | 2 +- .../subgraph/default_subgraph_property.cc | 16 +++--- .../subgraph/default_subgraph_property_v2.cc | 4 +- src/profiler/aggregate_stats.cc | 4 +- src/profiler/profiler.cc | 6 +-- src/resource.cc | 20 +++---- src/runtime/registry.cc | 2 +- src/storage/storage.cc | 2 +- tests/cpp/engine/thread_local_test.cc | 2 +- tests/cpp/engine/threaded_engine_test.cc | 8 +-- tests/cpp/operator/batchnorm_test.cc | 21 ++++---- .../operator/runner/core_op_runner_test.cc | 10 ++-- tests/cpp/storage/storage_test.cc | 2 +- tools/im2rec.cc | 2 +- 100 files changed, 479 insertions(+), 462 deletions(-) diff --git a/.clang-tidy b/.clang-tidy index 25fbff9f1a4d..b0f28e29b7c3 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -17,45 +17,33 @@ # The checks defined here will be run and will display by default as warnings. Checks: > - -*, cppcoreguidelines-c-copy-assignment-signature, - cppcoreguidelines-interfaces-global-init, cppcoreguidelines-no-malloc, - cppcoreguidelines-pro-bounds-constant-array-index, cppcoreguidelines-pro-type-const-cast, - cppcoreguidelines-pro-type-cstyle-cast, cppcoreguidelines-pro-type-member-init, - cppcoreguidelines-pro-type-static-cast-downcast, cppcoreguidelines-pro-type-union-access, - cppcoreguidelines-pro-type-vararg, cppcoreguidelines-slicing, - cppcoreguidelines-special-member-functions, clang-analyzer-security.FloatLoopCounter, - clang-analyzer-security.insecureAPI.*, clang-analyzer-core.CallAndMessage, - clang-analyzer-core.DivideZero, clang-analyzer-core.DynamicTypePropagation, - clang-analyzer-core.NonNullParamChecker, clang-analyzer-core.NullDereference, - clang-analyzer-core.StackAddressEscape, clang-analyzer-core.UndefinedBinaryOperatorResult, - clang-analyzer-core.VLASize, clang-analyzer-core.builtin.BuiltinFunctions, - clang-analyzer-core.builtin.NoReturnFunctions, clang-analyzer-core.uninitialized.ArraySubscript, - clang-analyzer-core.uninitialized.Assign, clang-analyzer-core.uninitialized.Branch, - clang-analyzer-core.uninitialized.CapturedBlockVariable, - clang-analyzer-core.uninitialized.UndefReturn, clang-analyzer-cplusplus.NewDelete, - clang-analyzer-cplusplus.NewDeleteLeaks, clang-analyzer-cplusplus.SelfAssignment, - clang-analyzer-deadcode.DeadStores, modernize-avoid-bind, modernize-deprecated-headers, - modernize-loop-convert, modernize-make-shared, modernize-pass-by-value, + -*, cppcoreguidelines-* clang-analyzer-*, modernize-*, + performance-faster-string-find, performance-for-range-copy, + performance-implicit-conversion-in-loop, performance-inefficient-algorithm, + performance-inefficient-string-concatenation, performance-trivially-destructible, + performance-inefficient-vector-operation, performance-move-const-arg, + performance-move-constructor-init, performance-noexcept-move-constructor, + performance-no-automatic-move, performance-unnecessary-copy-initialization, + performance-type-promotion-in-math-fn + +# performance checks not enabled due to segmentation fault in clang-tidy v8+: +# performance-unnecessary-value-param + +# In order to trigger an error, you must have a rule defined both in checks and in this section. +WarningsAsErrors: > + cppcoreguidelines-no-malloc, modernize-deprecated-headers, + modernize-loop-convert, modernize-make-shared, modernize-pass-by-value, modernize-make-unique, modernize-raw-string-literal, modernize-redundant-void-arg, modernize-replace-auto-ptr, modernize-replace-random-shuffle, modernize-return-braced-init-list, modernize-shrink-to-fit, modernize-unary-static-assert, modernize-use-bool-literals, modernize-use-default-member-init, modernize-use-emplace, modernize-use-equals-default, modernize-use-equals-delete, modernize-use-noexcept, modernize-use-nullptr, modernize-use-override, - modernize-use-transparent-functors, modernize-use-using, performance-* + modernize-use-transparent-functors, modernize-use-using, + performance-unnecessary-copy-initialization, performance-move-const-arg -# cppcoreguidelines checks not enabled: -# cppcoreguidelines-pro-bounds-pointer-arithmetic -# cppcoreguidelines-pro-bounds-array-to-pointer-decay -# cppcoreguidelines-pro-type-reinterpret-cast - -# modernize checks not enabled: +# modernize checks not enforced: # modernize-use-auto -# modernize-make-unique (C++14 and newer only) - -# In order to trigger an error, you must have a rule defined both in checks and in this section. -WarningsAsErrors: > - cppcoreguidelines-no-malloc, modernize-use-nullptr, performance-unnecessary-copy-initialization, - modernize-use-emplace, performance-move-const-arg +# modernize-avoid-bind # Todo: define a better regex match that includes most project headers, but excludes third party # code. diff --git a/CMakeLists.txt b/CMakeLists.txt index 162eeeade385..5f1a5106a95d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -275,6 +275,7 @@ if(USE_MKLDNN) include_directories(${PROJECT_BINARY_DIR}/3rdparty/mkldnn/include) add_definitions(-DMXNET_USE_MKLDNN=1) list(APPEND mxnet_LINKER_LIBS dnnl) + set_target_properties(dnnl PROPERTIES CXX_CLANG_TIDY "") # don't lint 3rdparty dependency endif() # Allow Cuda compiles outside of src tree to find things in 'src' and 'include' @@ -405,6 +406,7 @@ if(USE_OPENMP) AND NOT CMAKE_CROSSCOMPILING) load_omp() list(APPEND mxnet_LINKER_LIBS omp) + set_target_properties(omp PROPERTIES CXX_CLANG_TIDY "") # don't lint 3rdparty dependency if(UNIX) list(APPEND mxnet_LINKER_LIBS pthread) endif() @@ -462,6 +464,8 @@ set(GTEST_MAIN_LIBRARY gtest_main) set(GTEST_LIBRARY gtest) add_subdirectory(${GTEST_ROOT}) +set_target_properties(gtest PROPERTIES CXX_CLANG_TIDY "") # don't lint 3rdparty dependency +set_target_properties(gtest_main PROPERTIES CXX_CLANG_TIDY "") # don't lint 3rdparty dependency find_package(GTest REQUIRED) # cudnn detection @@ -478,6 +482,7 @@ endif() if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/dmlc-core/cmake) add_subdirectory("3rdparty/dmlc-core") + set_target_properties(dmlc PROPERTIES CXX_CLANG_TIDY "") # don't lint 3rdparty dependency endif() FILE(GLOB_RECURSE SOURCE "src/*.cc" "src/*.h" "include/*.h") @@ -492,7 +497,9 @@ FILE(GLOB_RECURSE NNVMSOURCE 3rdparty/tvm/nnvm/src/core/*.h 3rdparty/tvm/nnvm/src/pass/*.h 3rdparty/tvm/nnvm/include/*.h) -list(APPEND SOURCE ${NNVMSOURCE}) +add_library(nnvm OBJECT ${NNVMSOURCE}) +set_target_properties(nnvm PROPERTIES CXX_CLANG_TIDY "") # don't lint 3rdparty dependency +list(APPEND SOURCE $) # add source group FILE(GLOB_RECURSE GROUP_SOURCE "src/*.cc" "3rdparty/tvm/nnvm/*.cc" "plugin/*.cc") @@ -743,6 +750,7 @@ if(USE_DIST_KVSTORE) add_subdirectory("3rdparty/ps-lite") add_definitions(-DMXNET_USE_DIST_KVSTORE) list(APPEND mxnet_LINKER_LIBS pslite) + set_target_properties(pslite PROPERTIES CXX_CLANG_TIDY "") # don't lint 3rdparty dependency endif() if(USE_MKLDNN) @@ -757,6 +765,9 @@ function(BuildTVMOP) # scope the variables in BuildTVM.cmake to avoid conflict include(cmake/BuildTVM.cmake) add_subdirectory("3rdparty/tvm") + set_target_properties(tvm PROPERTIES CXX_CLANG_TIDY "") # don't lint 3rdparty dependency + set_target_properties(tvm_topi PROPERTIES CXX_CLANG_TIDY "") # don't lint 3rdparty dependency + set_target_properties(tvm_runtime PROPERTIES CXX_CLANG_TIDY "") # don't lint 3rdparty dependency endfunction() if(USE_TVM_OP) diff --git a/ci/docker/Dockerfile.build.ubuntu b/ci/docker/Dockerfile.build.ubuntu index c9ec3f5a04fc..8398dc9bee54 100644 --- a/ci/docker/Dockerfile.build.ubuntu +++ b/ci/docker/Dockerfile.build.ubuntu @@ -53,9 +53,9 @@ RUN export DEBIAN_FRONTEND=noninteractive && \ protobuf-compiler \ libprotobuf-dev \ clang-6.0 \ - clang-tidy-6.0 \ python-yaml \ clang-10 \ + clang-tidy-10 \ g++ \ g++-8 \ intel-mkl-2020.0-088 \ diff --git a/ci/docker/runtime_functions.sh b/ci/docker/runtime_functions.sh index e175d33e11f8..76b723c5d919 100755 --- a/ci/docker/runtime_functions.sh +++ b/ci/docker/runtime_functions.sh @@ -462,9 +462,8 @@ build_ubuntu_cpu_clang100() { build_ubuntu_cpu_clang_tidy() { set -ex cd /work/build - export CLANG_TIDY=/usr/lib/llvm-6.0/share/clang/run-clang-tidy.py # TODO(leezu) USE_OPENMP=OFF 3rdparty/dmlc-core/CMakeLists.txt:79 broken? - CXX=clang++-6.0 CC=clang-6.0 cmake \ + CXX=clang++-10 CC=clang-10 cmake \ -DUSE_MKL_IF_AVAILABLE=OFF \ -DUSE_MKLDNN=OFF \ -DUSE_CUDA=OFF \ @@ -472,11 +471,9 @@ build_ubuntu_cpu_clang_tidy() { -DCMAKE_BUILD_TYPE=Debug \ -DUSE_DIST_KVSTORE=ON \ -DUSE_CPP_PACKAGE=ON \ - -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ + -DCMAKE_CXX_CLANG_TIDY=clang-tidy-10 \ -G Ninja /work/mxnet ninja - cd /work/mxnet - $CLANG_TIDY -p /work/build -j $(nproc) -clang-tidy-binary clang-tidy-6.0 /work/mxnet/src } build_ubuntu_cpu_clang6_mkldnn() { diff --git a/example/extensions/lib_custom_op/gemm_lib.cc b/example/extensions/lib_custom_op/gemm_lib.cc index 4f8dabadc6a1..764ac49d9942 100644 --- a/example/extensions/lib_custom_op/gemm_lib.cc +++ b/example/extensions/lib_custom_op/gemm_lib.cc @@ -24,6 +24,7 @@ */ #include +#include #include "lib_api.h" // main matrix multiplication routine @@ -179,23 +180,23 @@ REGISTER_OP(my_gemm) class MyStatefulGemm : public CustomStatefulOp { public: explicit MyStatefulGemm(int count, - const std::unordered_map& attrs) - : count(count), attrs_(attrs) {} + std::unordered_map attrs) + : count(count), attrs_(std::move(attrs)) {} MXReturnValue Forward(std::vector* inputs, std::vector* outputs, - const OpResource& op_res) { + const OpResource& op_res) override { std::cout << "Info: keyword + number of forward: " << ++count << std::endl; return forward(attrs_, inputs, outputs, op_res); } MXReturnValue Backward(std::vector* inputs, std::vector* outputs, - const OpResource& op_res) { + const OpResource& op_res) override { return backward(attrs_, inputs, outputs, op_res); } - ~MyStatefulGemm() {} + ~MyStatefulGemm() = default; private: int count; diff --git a/example/extensions/lib_custom_op/transposecsr_lib.cc b/example/extensions/lib_custom_op/transposecsr_lib.cc index 224cd6aa81b6..fc80751e47be 100644 --- a/example/extensions/lib_custom_op/transposecsr_lib.cc +++ b/example/extensions/lib_custom_op/transposecsr_lib.cc @@ -24,6 +24,7 @@ */ #include +#include #include "lib_api.h" void transpose(MXTensor& src, MXTensor& dst, const OpResource& res) { @@ -151,19 +152,19 @@ REGISTER_OP(my_transposecsr) class MyStatefulTransposeCSR : public CustomStatefulOp { public: explicit MyStatefulTransposeCSR(int count, - const std::unordered_map& attrs) - : count(count), attrs_(attrs) {} + std::unordered_map attrs) + : count(count), attrs_(std::move(attrs)) {} MXReturnValue Forward(std::vector* inputs, std::vector* outputs, - const OpResource& op_res) { + const OpResource& op_res) override { std::cout << "Info: keyword + number of forward: " << ++count << std::endl; return forward(attrs_, inputs, outputs, op_res); } MXReturnValue Backward(std::vector* inputs, std::vector* outputs, - const OpResource& op_res) { + const OpResource& op_res) override { return backward(attrs_, inputs, outputs, op_res); } diff --git a/example/extensions/lib_custom_op/transposerowsp_lib.cc b/example/extensions/lib_custom_op/transposerowsp_lib.cc index 46d3c4d41a4c..5b6f0f394dc9 100644 --- a/example/extensions/lib_custom_op/transposerowsp_lib.cc +++ b/example/extensions/lib_custom_op/transposerowsp_lib.cc @@ -24,6 +24,7 @@ */ #include +#include #include "lib_api.h" void transpose(MXTensor& src, MXTensor& dst, const OpResource& res) { @@ -153,19 +154,19 @@ REGISTER_OP(my_transposerowsp) class MyStatefulTransposeRowSP : public CustomStatefulOp { public: explicit MyStatefulTransposeRowSP(int count, - const std::unordered_map& attrs) - : count(count), attrs_(attrs) {} + std::unordered_map attrs) + : count(count), attrs_(std::move(attrs)) {} MXReturnValue Forward(std::vector* inputs, std::vector* outputs, - const OpResource& op_res) { + const OpResource& op_res) override { std::cout << "Info: keyword + number of forward: " << ++count << std::endl; return forward(attrs_, inputs, outputs, op_res); } MXReturnValue Backward(std::vector* inputs, std::vector* outputs, - const OpResource& op_res) { + const OpResource& op_res) override { return backward(attrs_, inputs, outputs, op_res); } diff --git a/example/extensions/lib_pass/pass_lib.cc b/example/extensions/lib_pass/pass_lib.cc index bbdcd73a7a0b..ca77b59bfa06 100644 --- a/example/extensions/lib_pass/pass_lib.cc +++ b/example/extensions/lib_pass/pass_lib.cc @@ -23,7 +23,7 @@ * \brief subgraph operator implementation library file */ -#include +#include #include #include #include "lib_api.h" @@ -67,8 +67,7 @@ MXReturnValue jsonPass(const std::string& in_graph, const std::string** out_grap JsonVal nodes = json_val.map[JsonVal("nodes")]; // loop over nodes - for(int i=0; i +#include #include #include +#include #include "lib_api.h" /* function to execute log operator on floats */ @@ -69,8 +70,7 @@ MXReturnValue myExecutor(std::vector* inputs, std::vector to_free; // loop over nodes - for(int i=0; i* inputs, // get input tensor based on node ID inputs from data storage MXTensor &input = data[node_inputs.list[0].list[0].num]; // create temporary storage - MXTensor tmp(malloc(input.size()*4), input.shape, input.dtype, 0, MXContext::CPU(0), kDefaultStorage); + MXTensor tmp(malloc(input.size()*4), input.shape, input.dtype, 0, MXContext::CPU(0), kDefaultStorage); // NOLINT // save allocated ptr to free later to_free.push_back(tmp.data_ptr); // execute log operator @@ -95,7 +95,7 @@ MXReturnValue myExecutor(std::vector* inputs, // get input tensor based on node ID inputs from data storage MXTensor &input = data[node_inputs.list[0].list[0].num]; // create temporary storage - MXTensor tmp(malloc(input.size()*4), input.shape, input.dtype, 0, MXContext::CPU(0), kDefaultStorage); + MXTensor tmp(malloc(input.size()*4), input.shape, input.dtype, 0, MXContext::CPU(0), kDefaultStorage); // NOLINT // save allocated ptr to free later to_free.push_back(tmp.data_ptr); // execute exp operator @@ -106,7 +106,7 @@ MXReturnValue myExecutor(std::vector* inputs, std::cout << "Error! Unsupported op '" << op << "' found in myExecutor"; // free allocated temporary storage for (void* ptr : to_free) - free(ptr); + free(ptr); // NOLINT return MX_FAIL; } } @@ -129,7 +129,7 @@ MXReturnValue myExecutor(std::vector* inputs, // free allocated temporary storage for (void* ptr : to_free) { - free(ptr); + free(ptr); // NOLINT } return MX_SUCCESS; @@ -137,9 +137,9 @@ MXReturnValue myExecutor(std::vector* inputs, class MyStatefulOp : public CustomStatefulOp { public: - explicit MyStatefulOp(const std::string& sym, + explicit MyStatefulOp(std::string sym, const std::unordered_map& attrs) - : subgraph_sym(sym), attrs_(attrs) { + : subgraph_sym(std::move(sym)), attrs_(attrs) { for (auto kv : attrs) { std::cout << "subgraphOp attributes: " << kv.first << " ==> " << kv.second << std::endl; } @@ -147,7 +147,7 @@ class MyStatefulOp : public CustomStatefulOp { MXReturnValue Forward(std::vector* inputs, std::vector* outputs, - const OpResource& op_res) { + const OpResource& op_res) override { return myExecutor(inputs, outputs, subgraph_sym); } @@ -299,20 +299,20 @@ class MySelector : public CustomOpSelector { } return false; } - virtual bool Select(int nodeID) { + bool Select(int nodeID) override { return chooseNode(nodeID); } - virtual bool SelectInput(int nodeID, int input_nodeID) { + bool SelectInput(int nodeID, int input_nodeID) override { return chooseNode(input_nodeID); } - virtual bool SelectOutput(int nodeID, int output_nodeID) { + bool SelectOutput(int nodeID, int output_nodeID) override { return chooseNode(output_nodeID); } virtual void Filter(std::vector& candidates, std::vector& keep) { keep.insert(keep.end(), candidates.begin(), candidates.end()); } - virtual void Reset() {} + void Reset() override {} private: std::string graph_json; JsonVal nodes; diff --git a/src/api/operator/numpy/linalg/np_norm.cc b/src/api/operator/numpy/linalg/np_norm.cc index 708b08d9e6bd..1928321ad206 100644 --- a/src/api/operator/numpy/linalg/np_norm.cc +++ b/src/api/operator/numpy/linalg/np_norm.cc @@ -44,7 +44,7 @@ MXNET_REGISTER_API("_npi.norm") param.flag = args[4].operator int(); attrs.op = op; - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); // inputs diff --git a/src/api/operator/numpy/np_broadcast_reduce_op_boolean.cc b/src/api/operator/numpy/np_broadcast_reduce_op_boolean.cc index dea510a41608..c3e186195dca 100644 --- a/src/api/operator/numpy/np_broadcast_reduce_op_boolean.cc +++ b/src/api/operator/numpy/np_broadcast_reduce_op_boolean.cc @@ -48,7 +48,7 @@ MXNET_REGISTER_API("_npi.all") param.keepdims = args[2].operator bool(); NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; int num_inputs = 1; - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, outputs); @@ -79,7 +79,7 @@ MXNET_REGISTER_API("_npi.any") param.keepdims = args[2].operator bool(); NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; int num_inputs = 1; - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, outputs); diff --git a/src/api/operator/numpy/np_broadcast_reduce_op_index.cc b/src/api/operator/numpy/np_broadcast_reduce_op_index.cc index aa24246f693d..83e16999417b 100644 --- a/src/api/operator/numpy/np_broadcast_reduce_op_index.cc +++ b/src/api/operator/numpy/np_broadcast_reduce_op_index.cc @@ -44,7 +44,7 @@ MXNET_REGISTER_API("_npi.argmax") // param.keepdims param.keepdims = args[2].operator bool(); - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); // inputs @@ -77,7 +77,7 @@ MXNET_REGISTER_API("_npi.argmin") // param.keepdims param.keepdims = args[2].operator bool(); - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); // inputs diff --git a/src/api/operator/numpy/np_broadcast_reduce_op_value.cc b/src/api/operator/numpy/np_broadcast_reduce_op_value.cc index a3a45d2d3777..0fe7fc441209 100644 --- a/src/api/operator/numpy/np_broadcast_reduce_op_value.cc +++ b/src/api/operator/numpy/np_broadcast_reduce_op_value.cc @@ -40,7 +40,7 @@ MXNET_REGISTER_API("_npi.broadcast_to") } else { param.shape = TShape(args[1].operator ObjectRef()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); @@ -91,7 +91,7 @@ MXNET_REGISTER_API("_npi.sum") param.initial = args[4].operator double(); } - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); @@ -133,7 +133,7 @@ MXNET_REGISTER_API("_npi.mean") param.keepdims = args[3].operator bool(); } param.initial = dmlc::optional(); - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); int num_inputs = 1; @@ -177,7 +177,7 @@ MXNET_REGISTER_API("_npi.prod") } else { param.initial = args[4].operator double(); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); int num_inputs = 1; @@ -213,7 +213,7 @@ MXNET_REGISTER_API("_npi.max") param.keepdims = args[2].operator bool(); NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; int num_inputs = 1; - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, outputs); @@ -244,7 +244,7 @@ MXNET_REGISTER_API("_npi.min") param.keepdims = args[2].operator bool(); NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; int num_inputs = 1; - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, outputs); @@ -275,7 +275,7 @@ MXNET_REGISTER_API("_npi.amax") param.keepdims = args[2].operator bool(); NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; int num_inputs = 1; - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, outputs); @@ -306,7 +306,7 @@ MXNET_REGISTER_API("_npi.amin") param.keepdims = args[2].operator bool(); NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; int num_inputs = 1; - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, outputs); diff --git a/src/api/operator/numpy/np_cumsum.cc b/src/api/operator/numpy/np_cumsum.cc index d0b200c66fd4..a0f68cca1b6b 100644 --- a/src/api/operator/numpy/np_cumsum.cc +++ b/src/api/operator/numpy/np_cumsum.cc @@ -46,7 +46,7 @@ MXNET_REGISTER_API("_npi.cumsum") } else { param.dtype = String2MXNetTypeWithBool(args[2].operator std::string()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); // inputs diff --git a/src/api/operator/numpy/np_delete_op.cc b/src/api/operator/numpy/np_delete_op.cc index 925c8b568e28..f374b2318c9c 100644 --- a/src/api/operator/numpy/np_delete_op.cc +++ b/src/api/operator/numpy/np_delete_op.cc @@ -90,7 +90,7 @@ MXNET_REGISTER_API("_npi.delete") for (int i = 0; i < num_inputs; ++i) { inputs.push_back(args[i].operator mxnet::NDArray*()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); int num_outputs = 0; diff --git a/src/api/operator/numpy/np_ediff1d_op.cc b/src/api/operator/numpy/np_ediff1d_op.cc index df97fd8b68b9..64e15064889a 100644 --- a/src/api/operator/numpy/np_ediff1d_op.cc +++ b/src/api/operator/numpy/np_ediff1d_op.cc @@ -63,7 +63,7 @@ MXNET_REGISTER_API("_npi.ediff1d") num_inputs++; } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); diff --git a/src/api/operator/numpy/np_einsum_op.cc b/src/api/operator/numpy/np_einsum_op.cc index a5b8339a619e..900739ac10ab 100644 --- a/src/api/operator/numpy/np_einsum_op.cc +++ b/src/api/operator/numpy/np_einsum_op.cc @@ -43,7 +43,7 @@ MXNET_REGISTER_API("_npi.einsum") // param.optimize param.optimize = args[args_size - 1].operator int(); - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); diff --git a/src/api/operator/numpy/np_elemwise_unary_op_basic.cc b/src/api/operator/numpy/np_elemwise_unary_op_basic.cc index 720ab371fae4..9840fc4bd313 100644 --- a/src/api/operator/numpy/np_elemwise_unary_op_basic.cc +++ b/src/api/operator/numpy/np_elemwise_unary_op_basic.cc @@ -98,7 +98,7 @@ MXNET_REGISTER_API("_npi.around") nnvm::NodeAttrs attrs; op::AroundParam param; param.decimals = args[1].operator int64_t(); - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); int num_inputs = 1; diff --git a/src/api/operator/numpy/np_fill_diagonal_op.cc b/src/api/operator/numpy/np_fill_diagonal_op.cc index 6f8959e9ff61..f087e7d2e608 100644 --- a/src/api/operator/numpy/np_fill_diagonal_op.cc +++ b/src/api/operator/numpy/np_fill_diagonal_op.cc @@ -44,7 +44,7 @@ MXNET_REGISTER_API("_npi.fill_diagonal") } param.wrap = args[2].operator bool(); - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); diff --git a/src/api/operator/numpy/np_histogram_op.cc b/src/api/operator/numpy/np_histogram_op.cc index b517cce80803..fa911268e39b 100644 --- a/src/api/operator/numpy/np_histogram_op.cc +++ b/src/api/operator/numpy/np_histogram_op.cc @@ -49,7 +49,7 @@ MXNET_REGISTER_API("_npi.histogram") param.range = Obj2Tuple(args[3].operator ObjectRef()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); diff --git a/src/api/operator/numpy/np_init_op.cc b/src/api/operator/numpy/np_init_op.cc index 155035505d0f..b9ab8973d08e 100644 --- a/src/api/operator/numpy/np_init_op.cc +++ b/src/api/operator/numpy/np_init_op.cc @@ -47,7 +47,7 @@ MXNET_REGISTER_API("_npi.zeros") } else { param.dtype = String2MXNetTypeWithBool(args[1].operator std::string()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); if (args[2].type_code() != kNull) { @@ -70,7 +70,7 @@ MXNET_REGISTER_API("_npi.full_like") } else { param.dtype = String2MXNetTypeWithBool(args[2].operator std::string()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; if (args[3].type_code() != kNull) { attrs.dict["ctx"] = args[3].operator std::string(); @@ -107,7 +107,7 @@ MXNET_REGISTER_API("_npi.indices") } else { param.dtype = String2MXNetTypeWithBool(args[1].operator std::string()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); // param.ctx @@ -223,7 +223,7 @@ MXNET_REGISTER_API("_npi.arange") } else { param.dtype = String2MXNetTypeWithBool(args[3].operator std::string()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); if (args[4].type_code() != kNull) { @@ -252,7 +252,7 @@ MXNET_REGISTER_API("_npi.eye") } else { param.dtype = String2MXNetTypeWithBool(args[4].operator std::string()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); if (args[3].type_code() != kNull) { @@ -282,7 +282,7 @@ MXNET_REGISTER_API("_npi.linspace") } else { param.dtype = String2MXNetTypeWithBool(args[5].operator std::string()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); if (args[4].type_code() != kNull) { @@ -317,7 +317,7 @@ MXNET_REGISTER_API("_npi.logspace") } else { param.dtype = String2MXNetTypeWithBool(args[6].operator std::string()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); if (args[5].type_code() != kNull) { @@ -344,7 +344,7 @@ MXNET_REGISTER_API("_npi.ones") } else { param.dtype = String2MXNetTypeWithBool(args[1].operator std::string()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; if (args[2].type_code() != kNull) { attrs.dict["ctx"] = args[2].operator std::string(); @@ -372,7 +372,7 @@ MXNET_REGISTER_API("_npi.full") param.dtype = String2MXNetTypeWithBool(args[1].operator std::string()); } param.value = args[2].operator double(); - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; if (args[3].type_code() != kNull) { attrs.dict["ctx"] = args[3].operator std::string(); @@ -401,7 +401,7 @@ MXNET_REGISTER_API("_npi.identity") } else { param.dtype = String2MXNetTypeWithBool(args[1].operator std::string()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; if (args[2].type_code() != kNull) { attrs.dict["ctx"] = args[2].operator std::string(); diff --git a/src/api/operator/numpy/np_insert_op.cc b/src/api/operator/numpy/np_insert_op.cc index 0de645e91913..7b2aeaa234f0 100644 --- a/src/api/operator/numpy/np_insert_op.cc +++ b/src/api/operator/numpy/np_insert_op.cc @@ -57,7 +57,7 @@ MXNET_REGISTER_API("_npi.insert_scalar") } else { param.axis = args[3].operator int(); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); std::vector inputs; @@ -105,7 +105,7 @@ MXNET_REGISTER_API("_npi.insert_slice") } else { param.axis = args[5].operator int(); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); std::vector inputs; @@ -141,7 +141,7 @@ MXNET_REGISTER_API("_npi.insert_tensor") } else { param.axis = args[3].operator int(); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); std::vector inputs; diff --git a/src/api/operator/numpy/np_interp_op.cc b/src/api/operator/numpy/np_interp_op.cc index 7959383c9230..0b89373b1a88 100644 --- a/src/api/operator/numpy/np_interp_op.cc +++ b/src/api/operator/numpy/np_interp_op.cc @@ -53,7 +53,7 @@ MXNET_REGISTER_API("_npi.interp") param.x_scalar = args[2].operator double(); param.x_is_scalar = true; attrs.op = op; - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); NDArray* inputs[] = {args[0].operator mxnet::NDArray*(), args[1].operator mxnet::NDArray*()}; int num_inputs = 2; @@ -64,7 +64,7 @@ MXNET_REGISTER_API("_npi.interp") param.x_scalar = 0.0; param.x_is_scalar = false; attrs.op = op; - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); NDArray* inputs[] = {args[0].operator mxnet::NDArray*(), args[1].operator mxnet::NDArray*(), args[2].operator mxnet::NDArray*()}; diff --git a/src/api/operator/numpy/np_matrix_op.cc b/src/api/operator/numpy/np_matrix_op.cc index 45146ae0ab66..7b53c580683a 100644 --- a/src/api/operator/numpy/np_matrix_op.cc +++ b/src/api/operator/numpy/np_matrix_op.cc @@ -44,7 +44,7 @@ MXNET_REGISTER_API("_npi.transpose") } else { param.axes = TShape(args[1].operator ObjectRef()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; @@ -92,7 +92,7 @@ MXNET_REGISTER_API("_npi.stack") param.num_args = i; param.axis = args[i].operator int64_t(); - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); NDArray* out = args[i+1].operator mxnet::NDArray*(); @@ -126,7 +126,7 @@ MXNET_REGISTER_API("_npi.flip") } NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; int num_inputs = 1; - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, outputs); @@ -150,7 +150,7 @@ MXNET_REGISTER_API("_npi.concatenate") } else { param.axis = args[arg_size - 2].operator int(); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); int num_inputs = arg_size - 2; @@ -222,7 +222,7 @@ MXNET_REGISTER_API("_npi.split") } param.sections = 0; } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); @@ -256,7 +256,7 @@ MXNET_REGISTER_API("_npi.roll") } else { param.axis = TShape(args[2].operator ObjectRef()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; @@ -280,7 +280,7 @@ MXNET_REGISTER_API("_npi.rot90") } else { param.axes = TShape(args[2].operator ObjectRef()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; @@ -351,7 +351,7 @@ MXNET_REGISTER_API("_npi.array_split") } param.sections = 0; } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; @@ -393,7 +393,7 @@ MXNET_REGISTER_API("_npi.dsplit") } param.sections = 0; } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); int num_outputs = 0; @@ -431,7 +431,7 @@ MXNET_REGISTER_API("_npi.hsplit") } param.sections = 0; } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); int num_outputs = 0; @@ -471,7 +471,7 @@ MXNET_REGISTER_API("_npi.vsplit") } param.sections = 0; } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); int num_outputs = 0; @@ -560,7 +560,7 @@ MXNET_REGISTER_API("_npi.diagflat") param.k = args[1].operator int(); int num_inputs = 1; int num_outputs = 0; - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; @@ -583,7 +583,7 @@ MXNET_REGISTER_API("_npi.squeeze") } int num_inputs = 1; int num_outputs = 0; - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; diff --git a/src/api/operator/numpy/np_moments_op.cc b/src/api/operator/numpy/np_moments_op.cc index e4e9238bb6c1..45dd45e8f4c9 100644 --- a/src/api/operator/numpy/np_moments_op.cc +++ b/src/api/operator/numpy/np_moments_op.cc @@ -65,7 +65,7 @@ MXNET_REGISTER_API("_npi.std") param.keepdims = args[4].operator bool(); } - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); @@ -120,7 +120,7 @@ MXNET_REGISTER_API("_npi.var") param.keepdims = args[4].operator bool(); } - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); @@ -168,7 +168,7 @@ MXNET_REGISTER_API("_npi.average") << "weighted cannot be None"; param.weighted = args[4].operator bool(); - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); diff --git a/src/api/operator/numpy/np_nan_to_num_op.cc b/src/api/operator/numpy/np_nan_to_num_op.cc index fadc4fe55dc7..65fd26e5432e 100644 --- a/src/api/operator/numpy/np_nan_to_num_op.cc +++ b/src/api/operator/numpy/np_nan_to_num_op.cc @@ -53,7 +53,7 @@ MXNET_REGISTER_API("_npi.nan_to_num") param.neginf = args[4].operator double(); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); diff --git a/src/api/operator/numpy/np_pad_op.cc b/src/api/operator/numpy/np_pad_op.cc index 9c15ccc913b7..317076d23d48 100644 --- a/src/api/operator/numpy/np_pad_op.cc +++ b/src/api/operator/numpy/np_pad_op.cc @@ -73,7 +73,7 @@ MXNET_REGISTER_API("_npi.pad") param.reflect_type = args[4].operator std::string(); } attrs.op = op; - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); int num_inputs = 1; int num_outputs = 0; diff --git a/src/api/operator/numpy/np_percentile_op.cc b/src/api/operator/numpy/np_percentile_op.cc index 634ee092c64d..196cca9baaf9 100644 --- a/src/api/operator/numpy/np_percentile_op.cc +++ b/src/api/operator/numpy/np_percentile_op.cc @@ -70,7 +70,7 @@ MXNET_REGISTER_API("_npi.percentile") param.q_scalar = args[1].operator double(); NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; int num_inputs = 1; - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, outputs); @@ -83,7 +83,7 @@ MXNET_REGISTER_API("_npi.percentile") param.q_scalar = dmlc::nullopt; NDArray* inputs[] = {args[0].operator mxnet::NDArray*(), args[1].operator mxnet::NDArray*()}; int num_inputs = 2; - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, outputs); diff --git a/src/api/operator/numpy/np_repeat_op.cc b/src/api/operator/numpy/np_repeat_op.cc index c79fb8bbe03c..c98a1711050a 100644 --- a/src/api/operator/numpy/np_repeat_op.cc +++ b/src/api/operator/numpy/np_repeat_op.cc @@ -41,7 +41,7 @@ MXNET_REGISTER_API("_npi.repeats") } int num_inputs = 1; int num_outputs = 0; - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; diff --git a/src/api/operator/numpy/np_tensordot_op.cc b/src/api/operator/numpy/np_tensordot_op.cc index 55c131468b12..0cc74d9355e1 100644 --- a/src/api/operator/numpy/np_tensordot_op.cc +++ b/src/api/operator/numpy/np_tensordot_op.cc @@ -62,7 +62,7 @@ inline static void _npi_tensordot(runtime::MXNetArgs args, param.b_axes_summed = Tuple(adt[1]); } attrs.op = op; - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); int num_outputs = 0; int num_inputs = 2; diff --git a/src/api/operator/numpy/np_unique_op.cc b/src/api/operator/numpy/np_unique_op.cc index 288260f5dfb2..a669025e108f 100644 --- a/src/api/operator/numpy/np_unique_op.cc +++ b/src/api/operator/numpy/np_unique_op.cc @@ -44,7 +44,7 @@ MXNET_REGISTER_API("_npi.unique") } else { param.axis = args[4].operator int(); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); // inputs diff --git a/src/api/operator/numpy/np_window_op.cc b/src/api/operator/numpy/np_window_op.cc index 6b99c09cc75a..41c78cb16b6d 100644 --- a/src/api/operator/numpy/np_window_op.cc +++ b/src/api/operator/numpy/np_window_op.cc @@ -45,7 +45,7 @@ inline static void SetNumpyWindowsParam(runtime::MXNetArgs args, } else { param.dtype = String2MXNetTypeWithBool(args[1].operator std::string()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); if (args[2].type_code() != kNull) { diff --git a/src/api/operator/numpy/random/np_choice_op.cc b/src/api/operator/numpy/random/np_choice_op.cc index fe7b54d512c8..bc5ebbcffa58 100644 --- a/src/api/operator/numpy/random/np_choice_op.cc +++ b/src/api/operator/numpy/random/np_choice_op.cc @@ -70,7 +70,7 @@ MXNET_REGISTER_API("_npi.choice") num_inputs++; } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; if (args[4].type_code() != kNull) { attrs.dict["ctx"] = args[4].operator std::string(); diff --git a/src/api/operator/numpy/random/np_exponential_op.cc b/src/api/operator/numpy/random/np_exponential_op.cc index fbb1644c6c5a..0c5b69417aff 100644 --- a/src/api/operator/numpy/random/np_exponential_op.cc +++ b/src/api/operator/numpy/random/np_exponential_op.cc @@ -58,7 +58,7 @@ MXNET_REGISTER_API("_npi.exponential") inputs[0] = args[0].operator mxnet::NDArray*(); num_inputs = 1; } - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, outputs); diff --git a/src/api/operator/numpy/random/np_laplace_op.cc b/src/api/operator/numpy/random/np_laplace_op.cc index 57f770bfa376..a3ff63568828 100644 --- a/src/api/operator/numpy/random/np_laplace_op.cc +++ b/src/api/operator/numpy/random/np_laplace_op.cc @@ -73,7 +73,7 @@ MXNET_REGISTER_API("_npi.laplace") } else { param.dtype = String2MXNetTypeWithBool(args[3].operator std::string()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); if (args[4].type_code() != kNull) { diff --git a/src/api/operator/numpy/random/np_location_scale_op.cc b/src/api/operator/numpy/random/np_location_scale_op.cc index d163b0b5e014..ffcb41073400 100644 --- a/src/api/operator/numpy/random/np_location_scale_op.cc +++ b/src/api/operator/numpy/random/np_location_scale_op.cc @@ -82,7 +82,7 @@ MXNET_REGISTER_API("_npi.gumbel") } num_inputs = 1; } - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs.data(), &num_outputs, outputs); @@ -137,7 +137,7 @@ MXNET_REGISTER_API("_npi.logistic") } num_inputs = 1; } - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs.data(), &num_outputs, outputs); diff --git a/src/api/operator/numpy/random/np_pareto_op.cc b/src/api/operator/numpy/random/np_pareto_op.cc index 92e3645b75bd..f18cdfdc2ecd 100644 --- a/src/api/operator/numpy/random/np_pareto_op.cc +++ b/src/api/operator/numpy/random/np_pareto_op.cc @@ -58,7 +58,7 @@ MXNET_REGISTER_API("_npi.pareto") inputs[0] = args[0].operator mxnet::NDArray*(); num_inputs = 1; } - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, outputs); diff --git a/src/api/operator/numpy/random/np_power_op.cc b/src/api/operator/numpy/random/np_power_op.cc index 12a621726cd2..4f0cb55ef4bc 100644 --- a/src/api/operator/numpy/random/np_power_op.cc +++ b/src/api/operator/numpy/random/np_power_op.cc @@ -58,7 +58,7 @@ MXNET_REGISTER_API("_npi.powerd") inputs[0] = args[0].operator mxnet::NDArray*(); num_inputs = 1; } - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, outputs); diff --git a/src/api/operator/numpy/random/np_rayleigh_op.cc b/src/api/operator/numpy/random/np_rayleigh_op.cc index 428e433763ad..5f602af335fd 100644 --- a/src/api/operator/numpy/random/np_rayleigh_op.cc +++ b/src/api/operator/numpy/random/np_rayleigh_op.cc @@ -58,7 +58,7 @@ MXNET_REGISTER_API("_npi.rayleigh") inputs[0] = args[0].operator mxnet::NDArray*(); num_inputs = 1; } - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, outputs); diff --git a/src/api/operator/numpy/random/np_weibull_op.cc b/src/api/operator/numpy/random/np_weibull_op.cc index ef3b7e6ed7b6..18a2918634df 100644 --- a/src/api/operator/numpy/random/np_weibull_op.cc +++ b/src/api/operator/numpy/random/np_weibull_op.cc @@ -58,7 +58,7 @@ MXNET_REGISTER_API("_npi.weibull") inputs[0] = args[0].operator mxnet::NDArray*(); num_inputs = 1; } - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, outputs); diff --git a/src/api/operator/random/np_gamma_op.cc b/src/api/operator/random/np_gamma_op.cc index 44aeb44c44f8..8bf3717c5825 100644 --- a/src/api/operator/random/np_gamma_op.cc +++ b/src/api/operator/random/np_gamma_op.cc @@ -91,7 +91,7 @@ MXNET_REGISTER_API("_npi.gamma") NDArray* out = args[5].operator mxnet::NDArray*(); NDArray** outputs = out == nullptr ? nullptr : &out; int num_outputs = out != nullptr; - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; if (args[3].type_code() != kNull) { attrs.dict["ctx"] = args[3].operator std::string(); diff --git a/src/api/operator/random/np_normal_op.cc b/src/api/operator/random/np_normal_op.cc index bd39115f77c2..d78f50fdc564 100644 --- a/src/api/operator/random/np_normal_op.cc +++ b/src/api/operator/random/np_normal_op.cc @@ -77,7 +77,7 @@ MXNET_REGISTER_API("_npi.normal") } else { param.dtype = String2MXNetTypeWithBool(args[4].operator std::string()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; if (args[3].type_code() != kNull) { attrs.dict["ctx"] = args[3].operator std::string(); diff --git a/src/api/operator/random/np_uniform_op.cc b/src/api/operator/random/np_uniform_op.cc index 4cbc599cfe4c..41e830fefbed 100644 --- a/src/api/operator/random/np_uniform_op.cc +++ b/src/api/operator/random/np_uniform_op.cc @@ -76,7 +76,7 @@ MXNET_REGISTER_API("_npi.uniform") } else { param.dtype = String2MXNetTypeWithBool(args[4].operator std::string()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; if (args[3].type_code() != kNull) { attrs.dict["ctx"] = args[3].operator std::string(); diff --git a/src/api/operator/tensor/matrix_op.cc b/src/api/operator/tensor/matrix_op.cc index 61344286372e..5b275d5c38a9 100644 --- a/src/api/operator/tensor/matrix_op.cc +++ b/src/api/operator/tensor/matrix_op.cc @@ -79,7 +79,7 @@ MXNET_REGISTER_API("_npi.tile") } else { param.reps = Tuple(args[1].operator ObjectRef()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); int num_outputs = 0; diff --git a/src/c_api/c_api.cc b/src/c_api/c_api.cc index 53ff1e41c7f6..3d73ceb03267 100644 --- a/src/c_api/c_api.cc +++ b/src/c_api/c_api.cc @@ -236,13 +236,13 @@ void CustomFComputeDispatcher(const std::string op_name, return static_cast((*cpualloc)(size)); }; - typedef decltype(gpu_alloc) alloc_type_gpu; + using alloc_type_gpu = decltype(gpu_alloc); auto gpu_malloc = [](void* _gpu_alloc, int size) { alloc_type_gpu* gpualloc = static_cast(_gpu_alloc); return static_cast((*gpualloc)(size)); }; - typedef decltype(sparse_alloc) alloc_type_sparse; + using alloc_type_sparse = decltype(sparse_alloc); auto sparse_malloc = [](void* _sparse_alloc, int index, int indices_len, int idxptr_len, void** data, int64_t** indices, int64_t** indptr) { alloc_type_sparse* sparsealloc = static_cast(_sparse_alloc); @@ -1209,7 +1209,7 @@ void registerPasses(void *lib, int verbose) { // create no-capture lambda so that we can cast it to function pointer // lambda with captures cannot be cast to function pointer and pass to lib_api.h // this needs to be a lambda function so that we can do the decltype cast - typedef decltype(ndarray_alloc) alloc_type_ndarray; + using alloc_type_ndarray = decltype(ndarray_alloc); auto ndarray_malloc = [](const void* _ndarray_alloc, const int64_t* shapes, int num_shapes, const char* dev_str, int dev_id, int dtype, const char* name, int isArg, void** data) { @@ -2160,7 +2160,7 @@ int MXDataIterCreateIter(DataIterCreator creator, iter = e->body(); std::vector > kwargs; for (uint32_t i = 0; i < num_param; ++i) { - kwargs.push_back({std::string(keys[i]), std::string(vals[i])}); + kwargs.emplace_back(std::string(keys[i]), std::string(vals[i])); } iter->Init(kwargs); *out = iter; @@ -2287,7 +2287,7 @@ int MXDatasetCreateDataset(DatasetCreator handle, DatasetReg *e = static_cast(handle); std::vector > kwargs; for (uint32_t i = 0; i < num_param; ++i) { - kwargs.push_back({std::string(keys[i]), std::string(vals[i])}); + kwargs.emplace_back(std::string(keys[i]), std::string(vals[i])); } dataset = e->body(kwargs); *out = new std::shared_ptr(dataset); @@ -2304,7 +2304,7 @@ int MXDatasetGetDatasetInfo(DatasetCreator creator, DatasetReg *e = static_cast(creator); return MXAPIGetFunctionRegInfo(e, name, description, num_args, arg_names, arg_type_infos, arg_descriptions, - NULL); + nullptr); } int MXDatasetFree(DatasetHandle handle) { @@ -2375,7 +2375,7 @@ int MXBatchifyFunctionCreateFunction(BatchifyFunctionCreator handle, BatchifyFunctionReg *e = static_cast(handle); std::vector > kwargs; for (uint32_t i = 0; i < num_param; ++i) { - kwargs.push_back({std::string(keys[i]), std::string(vals[i])}); + kwargs.emplace_back(std::string(keys[i]), std::string(vals[i])); } bf = e->body(kwargs); *out = new BatchifyFunctionPtr(bf); @@ -2392,7 +2392,7 @@ int MXBatchifyFunctionGetFunctionInfo(BatchifyFunctionCreator creator, BatchifyFunctionReg *e = static_cast(creator); return MXAPIGetFunctionRegInfo(e, name, description, num_args, arg_names, arg_type_infos, arg_descriptions, - NULL); + nullptr); } int MXBatchifyFunctionInvoke(BatchifyFunctionHandle handle, int batch_size, @@ -3149,8 +3149,8 @@ int MXNDArrayCreateFromSharedMemEx(int shared_pid, int shared_id, const int *sha API_END(); } -typedef Engine::VarHandle VarHandle; -typedef Engine::CallbackOnComplete CallbackOnComplete; +using VarHandle = Engine::VarHandle; +using CallbackOnComplete = Engine::CallbackOnComplete; void AssertValidNumberVars(int num_const_vars, int num_mutable_vars) { CHECK_GE(num_const_vars, 0) << "Non-negative number of const vars expected."; diff --git a/src/c_api/c_api_profile.cc b/src/c_api/c_api_profile.cc index d0ad6a163a0a..79d11b92dff6 100644 --- a/src/c_api/c_api_profile.cc +++ b/src/c_api/c_api_profile.cc @@ -61,7 +61,7 @@ class ProfilingThreadData { /*! * \brief Constructor, nothrow */ - inline ProfilingThreadData() noexcept {} + inline ProfilingThreadData() = default; /*! * \brief Retreive ProfileTask object of the given name, or create if it doesn't exist diff --git a/src/c_api/c_api_symbolic.cc b/src/c_api/c_api_symbolic.cc index 3052256c825d..06f956bc20e9 100644 --- a/src/c_api/c_api_symbolic.cc +++ b/src/c_api/c_api_symbolic.cc @@ -1066,7 +1066,7 @@ int MXQuantizeSymbol(SymbolHandle sym_handle, g = ApplyPass(std::move(g), "QuantizeGraph"); const auto& calib_nodes = g.GetAttr>("calib_nodes"); MXAPIThreadLocalEntry<> *ret = MXAPIThreadLocalStore<>::Get(); - ret->ret_vec_str = std::move(calib_nodes); + ret->ret_vec_str = calib_nodes; *out_num_calib_names = ret->ret_vec_str.size(); ret->ret_vec_charp.clear(); ret->ret_vec_charp.reserve(ret->ret_vec_str.size()); @@ -1130,21 +1130,21 @@ static void _UpdateSymDTypeAttrs( // Update args to have the right dtype attrs if (model_params.size() > 0) { // if model params provided, set dtype only for model params - for (size_t i = 0; i < args.size(); ++i) { - const std::string& node_name = args[i]->attrs.name; + for (const auto & arg : args) { + const std::string& node_name = arg->attrs.name; auto it_model_params = model_params.find(node_name); auto it_with_dtype = node_name_dtype_map.find(node_name); auto it_without_dtype = node_without_dtype_map.find(node_name); if (it_model_params != model_params.end()) { // need to update __dtype__ attribute if already set, else set it if (it_with_dtype != node_name_dtype_map.end()) { - args[i]->attrs.dict[dtype_keyword] = + arg->attrs.dict[dtype_keyword] = std::to_string(it_with_dtype->second); } else { CHECK(it_without_dtype != node_without_dtype_map.end()) << "make sure all nodes without dtype have properly been added " "in node_without_dtype_map"; - args[i]->attrs.dict[dtype_keyword] = + arg->attrs.dict[dtype_keyword] = std::to_string(it_without_dtype->second); } } @@ -1152,12 +1152,12 @@ static void _UpdateSymDTypeAttrs( } else { // if model params not provided, update __dtype__ for all inputs, // which already had it set, don't touch the rest - for (size_t i = 0; i < args.size(); ++i) { - auto it = node_name_dtype_map.find(args[i]->attrs.name); + for (const auto & arg : args) { + auto it = node_name_dtype_map.find(arg->attrs.name); if (it != node_name_dtype_map.end()) { - if (args[i]->attrs.dict.find(dtype_keyword) != - args[i]->attrs.dict.end()) { - args[i]->attrs.dict[dtype_keyword] = std::to_string(it->second); + if (arg->attrs.dict.find(dtype_keyword) != + arg->attrs.dict.end()) { + arg->attrs.dict[dtype_keyword] = std::to_string(it->second); } } } @@ -1256,7 +1256,7 @@ int MXReducePrecisionSymbol(SymbolHandle sym_handle, const nnvm::DTypeVector &inferred_dtypes = g.GetAttr("dtype"); - g.attrs["inferred_dtypes"] = std::make_shared(std::move(inferred_dtypes)); + g.attrs["inferred_dtypes"] = std::make_shared(inferred_dtypes); g.attrs["target_dtype"] = std::make_shared(target_dt); if (cast_optional_params) { diff --git a/src/engine/naive_engine.cc b/src/engine/naive_engine.cc index 5e51199e3304..89f6b4d99089 100644 --- a/src/engine/naive_engine.cc +++ b/src/engine/naive_engine.cc @@ -22,6 +22,7 @@ * \file naive_engine.cc * \brief Implementation of NaiveEngine */ +#include #include #include #include @@ -67,8 +68,8 @@ class NaiveEngine final : public Engine { objpool_var_ref_ = common::ObjectPool::_GetSharedRef(); } // virtual destructor - virtual ~NaiveEngine() { #if MXNET_USE_CUDA + ~NaiveEngine() override { LOG(INFO) << "Engine shutdown"; for (size_t i = 0; i < streams_.size(); ++i) { if (streams_[i] != nullptr) { @@ -83,8 +84,10 @@ class NaiveEngine final : public Engine { aux_streams_[i] = nullptr; } } -#endif } +#else + ~NaiveEngine() override = default; +#endif void Stop() override { } @@ -125,10 +128,10 @@ class NaiveEngine final : public Engine { if (opr->profiling) { std::unique_ptr attrs; if (profiler->AggregateEnabled()) { - attrs.reset(new profiler::ProfileOperator::Attributes()); + attrs = std::make_unique(); } - opr->opr_profile.reset(new profiler::ProfileOperator(opr->opr_name.c_str(), - attrs.release())); + opr->opr_profile = std::make_unique(opr->opr_name.c_str(), + attrs.release()); opr->opr_profile->startForDevice(exec_ctx.dev_type, exec_ctx.dev_id); } opr->fn(ctx, on_complete); @@ -175,9 +178,10 @@ class NaiveEngine final : public Engine { opr->profiling = profiling; std::unique_ptr attrs; if (profiler->AggregateEnabled()) { - attrs.reset(new profiler::ProfileOperator::Attributes()); + attrs = std::make_unique(); } - opr->opr_profile.reset(new profiler::ProfileOperator(opr->opr_name.c_str(), attrs.release())); + opr->opr_profile = std::make_unique(opr->opr_name.c_str(), + attrs.release()); opr->opr_profile->startForDevice(exec_ctx.dev_type, exec_ctx.dev_id); } if (exec_ctx.dev_mask() == gpu::kDevMask) { diff --git a/src/engine/threaded_engine_perdevice.cc b/src/engine/threaded_engine_perdevice.cc index 2184d784a414..81494ec66096 100644 --- a/src/engine/threaded_engine_perdevice.cc +++ b/src/engine/threaded_engine_perdevice.cc @@ -28,6 +28,8 @@ #include #include #include + +#include #include "../initialize.h" #include "./threaded_engine.h" #include "./thread_pool.h" @@ -55,7 +57,7 @@ class ThreadedEnginePerDevice : public ThreadedEngine { ThreadedEnginePerDevice() noexcept(false) { this->Start(); } - ~ThreadedEnginePerDevice() noexcept(false) { + ~ThreadedEnginePerDevice() noexcept(false) override { this->StopNoWait(); } @@ -82,12 +84,12 @@ class ThreadedEnginePerDevice : public ThreadedEngine { gpu_copy_nthreads_ = dmlc::GetEnv("MXNET_GPU_COPY_NTHREADS", 2); // create CPU task int cpu_priority_nthreads = dmlc::GetEnv("MXNET_CPU_PRIORITY_NTHREADS", 4); - cpu_priority_worker_.reset(new ThreadWorkerBlock()); - cpu_priority_worker_->pool.reset(new ThreadPool( + cpu_priority_worker_ = std::make_unique>(); + cpu_priority_worker_->pool = std::make_unique( cpu_priority_nthreads, [this](std::shared_ptr ready_event) { this->CPUWorker(Context(), cpu_priority_worker_.get(), ready_event); - }, true)); + }, true); // GPU tasks will be created lazily } @@ -113,10 +115,10 @@ class ThreadedEnginePerDevice : public ThreadedEngine { auto ptr = cpu_normal_workers_.Get(dev_id, [this, ctx, nthread]() { auto blk = new ThreadWorkerBlock(); - blk->pool.reset(new ThreadPool(nthread, + blk->pool = std::make_unique(nthread, [this, ctx, blk](std::shared_ptr ready_event) { this->CPUWorker(ctx, blk, ready_event); - }, true)); + }, true); return blk; }); if (ptr) { @@ -139,12 +141,12 @@ class ThreadedEnginePerDevice : public ThreadedEngine { // Signify to kernel that GPU is being used, so reserve cores as necessary OpenMP::Get()->set_reserve_cores(GetReserveCoreCount(true)); auto blk = new ThreadWorkerBlock(); - blk->pool.reset(new ThreadPool( + blk->pool = std::make_unique( nthread, [this, ctx, is_copy, blk] (std::shared_ptr ready_event) { this->GPUWorker(ctx, is_copy, blk, ready_event); - }, true)); + }, true); return blk; }); if (ptr) { @@ -162,12 +164,12 @@ class ThreadedEnginePerDevice : public ThreadedEngine { // Signify to kernel that GPU is being used, so reserve cores as necessary OpenMP::Get()->set_reserve_cores(GetReserveCoreCount(true)); auto blk = new ThreadWorkerBlock(); - blk->pool.reset(new ThreadPool( + blk->pool = std::make_unique( nthread, [this, ctx, is_copy, blk] (std::shared_ptr ready_event) { this->GPUWorker(ctx, is_copy, blk, ready_event); - }, true)); + }, true); return blk; }); if (ptr) { @@ -179,12 +181,12 @@ class ThreadedEnginePerDevice : public ThreadedEngine { // Signify to kernel that GPU is being used, so reserve cores as necessary OpenMP::Get()->set_reserve_cores(GetReserveCoreCount(true)); auto blk = new ThreadWorkerBlock(); - blk->pool.reset(new ThreadPool( + blk->pool = std::make_unique( nthread, [this, ctx, is_copy, blk] (std::shared_ptr ready_event) { this->GPUWorker(ctx, is_copy, blk, ready_event); - }, true)); + }, true); return blk; }); if (ptr) { @@ -211,7 +213,7 @@ class ThreadedEnginePerDevice : public ThreadedEngine { // constructor ThreadWorkerBlock() = default; // destructor - ~ThreadWorkerBlock() noexcept(false) {} + ~ThreadWorkerBlock() = default; }; /*! \brief whether this is a worker thread. */ diff --git a/src/engine/threaded_engine_pooled.cc b/src/engine/threaded_engine_pooled.cc index c6eb99508e09..1304594e24a8 100644 --- a/src/engine/threaded_engine_pooled.cc +++ b/src/engine/threaded_engine_pooled.cc @@ -27,6 +27,7 @@ #include #include #include +#include #include #include "./threaded_engine.h" #include "./thread_pool.h" @@ -50,7 +51,7 @@ class ThreadedEnginePooled : public ThreadedEngine { this->Start(); } - ~ThreadedEnginePooled() noexcept(false) { + ~ThreadedEnginePooled() noexcept(false) override { StopNoWait(); } @@ -71,17 +72,17 @@ class ThreadedEnginePooled : public ThreadedEngine { } void Start() override { - streams_.reset(new StreamManager()); + streams_ = std::make_unique>(); task_queue_.reset(new dmlc::ConcurrentBlockingQueue()); io_task_queue_.reset(new dmlc::ConcurrentBlockingQueue()); - thread_pool_.reset(new ThreadPool(kNumWorkingThreads, + thread_pool_ = std::make_unique(kNumWorkingThreads, [this](std::shared_ptr ready_event) { ThreadWorker(task_queue_, ready_event); }, - true)); - io_thread_pool_.reset(new ThreadPool(1, + true); + io_thread_pool_ = std::make_unique(1, [this](std::shared_ptr ready_event) { ThreadWorker(io_task_queue_, ready_event); }, - true)); + true); } protected: diff --git a/src/imperative/attach_op_execs_pass.cc b/src/imperative/attach_op_execs_pass.cc index 8f47bc29db13..d065aff5ac92 100644 --- a/src/imperative/attach_op_execs_pass.cc +++ b/src/imperative/attach_op_execs_pass.cc @@ -27,6 +27,8 @@ #include #include #include + +#include #include "../common/utils.h" #include "../common/exec_utils.h" #include "./exec_pass.h" @@ -45,8 +47,8 @@ namespace exec { // FComputeExecutor and FStatefulComputeExecutor inherit from this class class StorageFallbackOpExecutor : public OpExecutor { public: - explicit StorageFallbackOpExecutor(const std::vector &mutate_idx) - : mutate_idx_(mutate_idx) {} + explicit StorageFallbackOpExecutor(std::vector mutate_idx) + : mutate_idx_(std::move(mutate_idx)) {} void Setup() override { init_ = false; @@ -136,12 +138,12 @@ class StatefulComputeExecutor : public StorageFallbackOpExecutor { return state_; } - explicit StatefulComputeExecutor(const OpStatePtr& state, - const FStatefulCompute& fcompute, + explicit StatefulComputeExecutor(OpStatePtr state, + FStatefulCompute fcompute, ExecType exec_type, const std::vector &mutate_idx) : StorageFallbackOpExecutor(mutate_idx), - state_(state), fcompute_(fcompute), exec_type_(exec_type) {} + state_(std::move(state)), fcompute_(std::move(fcompute)), exec_type_(exec_type) {} private: OpStatePtr state_; @@ -182,11 +184,12 @@ class StatefulComputeExExecutor : public OpExecutor { return state_; } - explicit StatefulComputeExExecutor(const NodeAttrs& attrs, - const OpStatePtr& state, - const FStatefulComputeEx& fcompute, + explicit StatefulComputeExExecutor(NodeAttrs attrs, + OpStatePtr state, + FStatefulComputeEx fcompute, ExecType exec_type) - : attrs_(attrs), state_(state), fcompute_(fcompute), exec_type_(exec_type) {} + : attrs_(std::move(attrs)), state_(std::move(state)), fcompute_(std::move(fcompute)), + exec_type_(exec_type) {} private: NodeAttrs attrs_; @@ -214,10 +217,10 @@ class FComputeExecutor : public StorageFallbackOpExecutor { return exec_type_; } - explicit FComputeExecutor(const NodeAttrs& attrs, FCompute fcompute, + explicit FComputeExecutor(NodeAttrs attrs, FCompute fcompute, ExecType exec_type, const std::vector &mutate_idx) : StorageFallbackOpExecutor(mutate_idx), - attrs_(attrs), fcompute_(fcompute), exec_type_(exec_type) { + attrs_(std::move(attrs)), fcompute_(std::move(fcompute)), exec_type_(exec_type) { } private: @@ -250,9 +253,9 @@ class FComputeExExecutor : public OpExecutor { return exec_type_; } - explicit FComputeExExecutor(const NodeAttrs& attrs, FComputeEx fcompute, + explicit FComputeExExecutor(NodeAttrs attrs, FComputeEx fcompute, ExecType exec_type) - : attrs_(attrs), fcompute_(fcompute), exec_type_(exec_type) { + : attrs_(std::move(attrs)), fcompute_(std::move(fcompute)), exec_type_(exec_type) { } private: diff --git a/src/imperative/cached_op.cc b/src/imperative/cached_op.cc index 7b3a5d32aac6..e0f832917203 100644 --- a/src/imperative/cached_op.cc +++ b/src/imperative/cached_op.cc @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ +#include #include #include #include "./imperative_utils.h" @@ -87,8 +88,7 @@ CachedOp::CachedOp( SetRefCounts(&fwd_graph_, full_graph_); } -CachedOp::~CachedOp() { -} +CachedOp::~CachedOp() = default; std::vector CachedOp::Gradient( const nnvm::ObjectPtr& node, @@ -1286,7 +1286,7 @@ void CachedOpParamParser(nnvm::NodeAttrs* attrs) { std::vector > flags; for (const auto& attr : attrs->dict) flags.emplace_back(attr.first, attr.second); - attrs->parsed = CachedOpPtr(new CachedOp(sym, flags)); + attrs->parsed = std::make_shared(sym, flags); } } diff --git a/src/imperative/cached_op_threadsafe.cc b/src/imperative/cached_op_threadsafe.cc index 744daf08564b..7d93eb84bd11 100644 --- a/src/imperative/cached_op_threadsafe.cc +++ b/src/imperative/cached_op_threadsafe.cc @@ -250,7 +250,7 @@ void CachedOpThreadSafeParamParser(nnvm::NodeAttrs* attrs) { throw dmlc::ParamError(os.str()); } } -CachedOpThreadSafe::~CachedOpThreadSafe() {} +CachedOpThreadSafe::~CachedOpThreadSafe() = default; NNVM_REGISTER_OP(_CachedOpThreadSafe) .set_num_inputs([](const NodeAttrs& attrs) { diff --git a/src/imperative/eliminate_common_expr_pass.cc b/src/imperative/eliminate_common_expr_pass.cc index 805b6acca590..a0156da94746 100644 --- a/src/imperative/eliminate_common_expr_pass.cc +++ b/src/imperative/eliminate_common_expr_pass.cc @@ -184,10 +184,10 @@ void EliminateCommonNodes(Graph* g, // insert Copy nodes as appropriate const Op* copy_op = Op::Get("_copy"); nnvm::NodeEntryMap unique_outputs; - for (size_t i = 0; i < g->outputs.size(); ++i) { - auto kv = unique_outputs.find(g->outputs[i]); + for (auto & output : g->outputs) { + auto kv = unique_outputs.find(output); if (kv == unique_outputs.end()) { - unique_outputs.emplace(g->outputs[i], 0); + unique_outputs.emplace(output, 0); } else { ObjectPtr copy_node = Node::Create(); std::ostringstream os; @@ -196,7 +196,7 @@ void EliminateCommonNodes(Graph* g, copy_node->attrs.op = copy_op; copy_node->attrs.name = os.str(); copy_node->inputs.emplace_back(kv->first); - g->outputs[i] = nnvm::NodeEntry{copy_node, 0, 0}; + output = nnvm::NodeEntry{copy_node, 0, 0}; } } } diff --git a/src/imperative/imperative.cc b/src/imperative/imperative.cc index 45fdf549b0ed..9e162d4b74ea 100644 --- a/src/imperative/imperative.cc +++ b/src/imperative/imperative.cc @@ -119,11 +119,11 @@ OpStatePtr Imperative::Invoke( SetWriteInplaceReq(inputs, outputs, &req); OpStatePtr ret = InvokeOp(ctx, attrs, inputs, outputs, req, dispatch_mode); // the followinng loop is used for finding out the correct shape when some shapes are dynamic - for (size_t i = 0; i < outputs.size(); i++) { - if (!shape_is_known(outputs[i]->shape())) { + for (auto output : outputs) { + if (!shape_is_known(output->shape())) { // the WaitToRead overhead here does not seem to be avoidable - outputs[i]->WaitToRead(); - outputs[i]->SetShapeFromChunk(); + output->WaitToRead(); + output->SetShapeFromChunk(); } } return ret; diff --git a/src/initialize.cc b/src/initialize.cc index a352c0a22024..784e54f9a9d7 100644 --- a/src/initialize.cc +++ b/src/initialize.cc @@ -23,7 +23,6 @@ * \brief initialize mxnet library */ #include "initialize.h" -#include #include #include #include "./engine/openmp.h" @@ -34,7 +33,6 @@ #include "common/utils.h" #include "engine/openmp.h" - #if defined(_WIN32) || defined(_WIN64) || defined(__WINDOWS__) #include /*! @@ -57,6 +55,9 @@ void win_err(char **err) { #include #endif +#include + + namespace mxnet { #if MXNET_USE_SIGNAL_HANDLER && DMLC_LOG_STACK_TRACE diff --git a/src/io/batchify.cc b/src/io/batchify.cc index 27ed850522ff..01d93f5cad8f 100644 --- a/src/io/batchify.cc +++ b/src/io/batchify.cc @@ -73,8 +73,8 @@ class GroupBatchify : public BatchifyFunction { } } - virtual bool Batchify(const std::vector >& inputs, - std::vector* outputs) { + bool Batchify(const std::vector >& inputs, + std::vector* outputs) override { auto bs = inputs.size(); CHECK_GT(bs, 0) << "BatchifyFunction should handle at lease 1 sample"; auto out_size = inputs[0].size(); @@ -84,8 +84,8 @@ class GroupBatchify : public BatchifyFunction { for (size_t i = 0; i < out_size; ++i) { std::vector > inp; inp.reserve(inputs.size()); - for (size_t j = 0; j < inputs.size(); ++j) { - std::vector curr({inputs[j][i]}); + for (const auto & input : inputs) { + std::vector curr({input[i]}); inp.emplace_back(curr); } std::vector tmp; @@ -128,8 +128,8 @@ class StackBatchify : public BatchifyFunction { param_.InitAllowUnknown(kwargs); } - virtual bool Batchify(const std::vector >& inputs, - std::vector* outputs) { + bool Batchify(const std::vector >& inputs, + std::vector* outputs) override { auto out_size = SanityCheck(inputs); auto bs = inputs.size(); outputs->resize(out_size); @@ -235,8 +235,8 @@ class PadBatchify : public BatchifyFunction { param_.InitAllowUnknown(kwargs); } - virtual bool Batchify(const std::vector >& inputs, - std::vector* outputs) { + bool Batchify(const std::vector >& inputs, + std::vector* outputs) override { auto bs = inputs.size(); CHECK_GT(bs, 0) << "BatchifyFunction should handle at lease 1 sample"; auto out_size = inputs[0].size(); diff --git a/src/io/dataloader.cc b/src/io/dataloader.cc index 947c26202b5c..47754470453c 100644 --- a/src/io/dataloader.cc +++ b/src/io/dataloader.cc @@ -63,13 +63,11 @@ DMLC_REGISTER_PARAMETER(ThreadedDataLoaderParam); template class ThreadedDataLoader : public IIterator { public: - ThreadedDataLoader() { - } + ThreadedDataLoader() = default; // destructor - virtual ~ThreadedDataLoader(void) { - } + ~ThreadedDataLoader() override = default; // constructor - void Init(const std::vector >& kwargs) { + void Init(const std::vector >& kwargs) override { param_.InitAllowUnknown(kwargs); int maxthread, threadget; #pragma omp parallel @@ -90,15 +88,15 @@ class ThreadedDataLoader : public IIterator { this->BeforeFirst(); } // before first - void BeforeFirst(void) { + void BeforeFirst() override { sampler_->BeforeFirst(); } - int64_t GetLenHint(void) const { + int64_t GetLenHint() const override { return sampler_->GetLenHint(); } - bool Next(void) { + bool Next() override { bool has_next = sampler_->Next(); if (!has_next) return false; auto samples = sampler_->Value(); @@ -152,7 +150,7 @@ class ThreadedDataLoader : public IIterator { return true; } - const TBlobBatch &Value(void) const { + const TBlobBatch &Value() const override { return out_; } diff --git a/src/io/dataset.cc b/src/io/dataset.cc index 4c47f440150f..ba548c968b19 100644 --- a/src/io/dataset.cc +++ b/src/io/dataset.cc @@ -29,6 +29,7 @@ #include #include +#include #include #include #include @@ -75,11 +76,11 @@ class RecordFileDataset final : public Dataset { delete idx_stream; } - uint64_t GetLen() const { + uint64_t GetLen() const override { return idx_.size(); } - bool GetItem(uint64_t idx, std::vector* ret) { + bool GetItem(uint64_t idx, std::vector* ret) override { ret->resize(1); auto& out = (*ret)[0]; static thread_local std::unique_ptr stream; @@ -193,11 +194,11 @@ class ImageRecordFileDataset : public Dataset { base_ = std::make_shared(kwargs); } - uint64_t GetLen() const { + uint64_t GetLen() const override { return base_->GetLen(); } - bool GetItem(uint64_t idx, std::vector* ret) { + bool GetItem(uint64_t idx, std::vector* ret) override { CHECK_LT(idx, GetLen()); std::vector raw; if (!base_->GetItem(idx, &raw)) return false; @@ -292,11 +293,11 @@ class ImageSequenceDataset final : public Dataset { img_list_ = dmlc::Split(param_.img_list, param_.path_sep); } - uint64_t GetLen() const { + uint64_t GetLen() const override { return img_list_.size(); } - bool GetItem(uint64_t idx, std::vector* ret) { + bool GetItem(uint64_t idx, std::vector* ret) override { #if MXNET_USE_OPENCV CHECK_LT(idx, img_list_.size()) << "GetItem index: " << idx << " out of bound: " << img_list_.size(); @@ -355,11 +356,11 @@ class NDArrayDataset final : public Dataset { size_ = data_.shape().begin()[0]; } - uint64_t GetLen() const { + uint64_t GetLen() const override { return size_; } - bool GetItem(uint64_t idx, std::vector* rets) { + bool GetItem(uint64_t idx, std::vector* rets) override { CHECK_LT(idx, size_) << "GetItem index: " << idx << " out of bound: " << size_; rets->resize(1); @@ -430,11 +431,11 @@ class GroupDataset final : public Dataset { } } - uint64_t GetLen() const { + uint64_t GetLen() const override { return size_; } - bool GetItem(uint64_t idx, std::vector* ret) { + bool GetItem(uint64_t idx, std::vector* ret) override { CHECK_LT(idx, size_) << "GetItem index: " << idx << " out of bound: " << size_; ret->clear(); @@ -485,11 +486,11 @@ class IndexedDataset final : public Dataset { base_data_ = *static_cast*>(reinterpret_cast(param_.base)); } - uint64_t GetLen() const { + uint64_t GetLen() const override { return param_.indices.ndim(); } - bool GetItem(uint64_t idx, std::vector* ret) { + bool GetItem(uint64_t idx, std::vector* ret) override { CHECK_GT(param_.indices.ndim(), idx) << "IndexError: " << idx << " from total: " << param_.indices.ndim(); auto new_idx = param_.indices[idx]; @@ -545,15 +546,15 @@ class LazyTransformDataset final : public Dataset { this->pass_through_indices_ = other.pass_through_indices_; this->use_input_indices_ = other.use_input_indices_; this->num_outputs_ = other.num_outputs_; - this->cached_op_ = NaiveCachedOpPtr(new NaiveCachedOp( - other.cached_op_->sym_, other.cached_op_->flags_)); + this->cached_op_ = std::make_shared( + other.cached_op_->sym_, other.cached_op_->flags_); this->base_data_ = other.base_data_; } explicit LazyTransformDataset(const std::vector >& kwargs) { param_.InitAllowUnknown(kwargs); auto op = *static_cast(reinterpret_cast(param_.cached_op)); - cached_op_ = NaiveCachedOpPtr(new NaiveCachedOp(op->sym_, op->flags_)); + cached_op_ = std::make_shared(op->sym_, op->flags_); base_data_ = *static_cast*>(reinterpret_cast(param_.dataset)); // use first item to calculate size info @@ -596,14 +597,13 @@ class LazyTransformDataset final : public Dataset { num_outputs_ = inputs.size() + cached_op_->num_outputs() - cached_op_->num_inputs(); } - virtual ~LazyTransformDataset(void) { - } + ~LazyTransformDataset() override = default; - uint64_t GetLen() const { + uint64_t GetLen() const override { return base_data_->GetLen(); } - bool GetItem(uint64_t idx, std::vector* outputs) { + bool GetItem(uint64_t idx, std::vector* outputs) override { std::vector inputs; if (!base_data_->GetItem(idx, &inputs)) return false; outputs->reserve(num_outputs_); @@ -616,8 +616,8 @@ class LazyTransformDataset final : public Dataset { std::vector ndinputs; std::vector ndoutputs; ndinputs.reserve(inputs.size()); - for (size_t i = 0; i < use_input_indices_.size(); ++i) { - ndinputs.emplace_back(&(inputs[use_input_indices_[i]])); + for (int use_input_indice : use_input_indices_) { + ndinputs.emplace_back(&(inputs[use_input_indice])); } ndoutputs.reserve(cached_op_->num_outputs()); CHECK_LE(cached_op_->num_outputs(), outputs->size()); @@ -625,8 +625,8 @@ class LazyTransformDataset final : public Dataset { ndoutputs.emplace_back(&(outputs->at(i))); } - for (size_t i = 0; i < inputs.size(); ++i) { - inputs[i].WaitToRead(); + for (auto & input : inputs) { + input.WaitToRead(); } CHECK(inputs.size() > 0) << "dataset getitem requires at least one input"; Context default_ctx = inputs[0].ctx(); diff --git a/src/io/image_aug_default.cc b/src/io/image_aug_default.cc index c26ebf857a41..c39777ba3054 100644 --- a/src/io/image_aug_default.cc +++ b/src/io/image_aug_default.cc @@ -205,7 +205,7 @@ std::vector ListDefaultAugParams() { class DefaultImageAugmenter : public ImageAugmenter { public: // contructor - DefaultImageAugmenter() {} + DefaultImageAugmenter() = default; void Init(const std::vector >& kwargs) override { std::vector > kwargs_left; kwargs_left = param_.InitAllowUnknown(kwargs); diff --git a/src/io/image_det_aug_default.cc b/src/io/image_det_aug_default.cc index f602a63954a3..6b3109fbce19 100644 --- a/src/io/image_det_aug_default.cc +++ b/src/io/image_det_aug_default.cc @@ -404,7 +404,7 @@ class ImageDetLabel { class DefaultImageDetAugmenter : public ImageAugmenter { public: // contructor - DefaultImageDetAugmenter() {} + DefaultImageDetAugmenter() = default; void Init(const std::vector >& kwargs) override { std::vector > kwargs_left; diff --git a/src/io/iter_csv.cc b/src/io/iter_csv.cc index 0c1b82355410..87f295df544f 100644 --- a/src/io/iter_csv.cc +++ b/src/io/iter_csv.cc @@ -62,16 +62,16 @@ class CSVIterBase: public IIterator { CSVIterBase() { out_.data.resize(2); } - virtual ~CSVIterBase() {} + ~CSVIterBase() override = default; // initialize iterator loads data in - virtual void Init(const std::vector >& kwargs) = 0; + void Init(const std::vector >& kwargs) override = 0; /*! \brief reset the iterator */ - virtual void BeforeFirst(void) = 0; + void BeforeFirst() override = 0; /*! \brief move to next item */ - virtual bool Next(void) = 0; + bool Next() override = 0; /*! \brief get current data */ - virtual const DataInst &Value(void) const { + const DataInst &Value() const override { return out_; } @@ -93,9 +93,9 @@ class CSVIterBase: public IIterator { template class CSVIterTyped: public CSVIterBase { public: - virtual ~CSVIterTyped() {} + ~CSVIterTyped() override = default; // intialize iterator loads data in - virtual void Init(const std::vector >& kwargs) { + void Init(const std::vector >& kwargs) override { param_.InitAllowUnknown(kwargs); data_parser_.reset(dmlc::Parser::Create(param_.data_csv.c_str(), 0, 1, "csv")); if (param_.label_csv != "NULL") { @@ -108,7 +108,7 @@ class CSVIterTyped: public CSVIterBase { } } - virtual void BeforeFirst() { + void BeforeFirst() override { data_parser_->BeforeFirst(); if (label_parser_.get() != nullptr) { label_parser_->BeforeFirst(); @@ -119,7 +119,7 @@ class CSVIterTyped: public CSVIterBase { end_ = false; } - virtual bool Next() { + bool Next() override { if (end_) return false; while (data_ptr_ >= data_size_) { if (!data_parser_->Next()) { @@ -163,11 +163,11 @@ class CSVIterTyped: public CSVIterBase { class CSVIter: public IIterator { public: - CSVIter() {} - virtual ~CSVIter() {} + CSVIter() = default; + ~CSVIter() override = default; // intialize iterator loads data in - virtual void Init(const std::vector >& kwargs) { + void Init(const std::vector >& kwargs) override { param_.InitAllowUnknown(kwargs); bool dtype_has_value = false; int target_dtype = -1; @@ -195,15 +195,15 @@ class CSVIter: public IIterator { iterator_->Init(kwargs); } - virtual void BeforeFirst() { + void BeforeFirst() override { iterator_->BeforeFirst(); } - virtual bool Next() { + bool Next() override { return iterator_->Next(); } - virtual const DataInst &Value(void) const { + const DataInst &Value() const override { return iterator_->Value(); } diff --git a/src/io/iter_image_det_recordio.cc b/src/io/iter_image_det_recordio.cc index 876c07520f52..3fe0ec7f3e17 100644 --- a/src/io/iter_image_det_recordio.cc +++ b/src/io/iter_image_det_recordio.cc @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -213,7 +214,7 @@ class ImageDetRecordIOParser { inline void Init(const std::vector >& kwargs); // set record to the head - inline void BeforeFirst(void) { + inline void BeforeFirst() { return source_->BeforeFirst(); } // parse next set of records, return an array of @@ -273,8 +274,8 @@ inline void ImageDetRecordIOParser::Init( prnds_.emplace_back(new common::RANDOM_ENGINE((i + 1) * kRandMagic)); } if (param_.path_imglist.length() != 0) { - label_map_.reset(new ImageDetLabelMap(param_.path_imglist.c_str(), - param_.label_width, !param_.verbose)); + label_map_ = std::make_unique(param_.path_imglist.c_str(), + param_.label_width, !param_.verbose); } CHECK(param_.path_imgrec.length() != 0) << "ImageDetRecordIOIterator: must specify image_rec"; @@ -510,12 +511,12 @@ class ImageDetRecordIter : public IIterator { public: ImageDetRecordIter() : data_(nullptr) { } // destructor - virtual ~ImageDetRecordIter(void) { + ~ImageDetRecordIter() override { iter_.Destroy(); delete data_; } // constructor - virtual void Init(const std::vector >& kwargs) { + void Init(const std::vector >& kwargs) override { param_.InitAllowUnknown(kwargs); // use the kwarg to init parser parser_.Init(kwargs); @@ -533,13 +534,13 @@ class ImageDetRecordIter : public IIterator { rnd_.seed(kRandMagic + param_.seed); } // before first - virtual void BeforeFirst(void) { + void BeforeFirst() override { iter_.BeforeFirst(); inst_order_.clear(); inst_ptr_ = 0; } - virtual bool Next(void) { + bool Next() override { while (true) { if (inst_ptr_ < inst_order_.size()) { std::pair p = inst_order_[inst_ptr_]; @@ -553,7 +554,7 @@ class ImageDetRecordIter : public IIterator { for (unsigned i = 0; i < data_->size(); ++i) { const InstVector& tmp = (*data_)[i]; for (unsigned j = 0; j < tmp.Size(); ++j) { - inst_order_.push_back(std::make_pair(i, j)); + inst_order_.emplace_back(i, j); } } // shuffle instance order if needed @@ -566,7 +567,7 @@ class ImageDetRecordIter : public IIterator { return false; } - virtual const DataInst &Value(void) const { + const DataInst &Value() const override { return out_; } diff --git a/src/io/iter_image_recordio.cc b/src/io/iter_image_recordio.cc index 066cad973774..23008050ec28 100644 --- a/src/io/iter_image_recordio.cc +++ b/src/io/iter_image_recordio.cc @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -53,7 +54,7 @@ class ImageRecordIOParser { inline void Init(const std::vector >& kwargs); // set record to the head - inline void BeforeFirst(void) { + inline void BeforeFirst() { return source_->BeforeFirst(); } // parse next set of records, return an array of @@ -111,8 +112,8 @@ inline void ImageRecordIOParser::Init( prnds_.emplace_back(new common::RANDOM_ENGINE((i + 1) * kRandMagic)); } if (param_.path_imglist.length() != 0) { - label_map_.reset(new ImageLabelMap(param_.path_imglist.c_str(), - param_.label_width, !param_.verbose)); + label_map_ = std::make_unique(param_.path_imglist.c_str(), + param_.label_width, !param_.verbose); } CHECK(param_.path_imgrec.length() != 0) << "ImageRecordIOIterator: must specify image_rec"; @@ -253,12 +254,12 @@ class ImageRecordIter : public IIterator { public: ImageRecordIter() : data_(nullptr) { } // destructor - virtual ~ImageRecordIter(void) { + ~ImageRecordIter() override { iter_.Destroy(); delete data_; } // constructor - virtual void Init(const std::vector >& kwargs) { + void Init(const std::vector >& kwargs) override { param_.InitAllowUnknown(kwargs); // use the kwarg to init parser parser_.Init(kwargs); @@ -276,13 +277,13 @@ class ImageRecordIter : public IIterator { rnd_.seed(kRandMagic + param_.seed); } // before first - virtual void BeforeFirst(void) { + void BeforeFirst() override { iter_.BeforeFirst(); inst_order_.clear(); inst_ptr_ = 0; } - virtual bool Next(void) { + bool Next() override { while (true) { if (inst_ptr_ < inst_order_.size()) { std::pair p = inst_order_[inst_ptr_]; @@ -296,7 +297,7 @@ class ImageRecordIter : public IIterator { for (unsigned i = 0; i < data_->size(); ++i) { const InstVector& tmp = (*data_)[i]; for (unsigned j = 0; j < tmp.Size(); ++j) { - inst_order_.push_back(std::make_pair(i, j)); + inst_order_.emplace_back(i, j); } } // shuffle instance order if needed @@ -309,7 +310,7 @@ class ImageRecordIter : public IIterator { return false; } - virtual const DataInst &Value(void) const { + const DataInst &Value() const override { return out_; } diff --git a/src/io/iter_image_recordio_2.cc b/src/io/iter_image_recordio_2.cc index ad6e2a19fbc2..f4f88b76d65c 100644 --- a/src/io/iter_image_recordio_2.cc +++ b/src/io/iter_image_recordio_2.cc @@ -33,6 +33,7 @@ #include #include #include +#include #include #if MXNET_USE_LIBJPEG_TURBO #include @@ -55,7 +56,7 @@ class ImageRecordIOParser2 { inline void Init(const std::vector >& kwargs); // set record to the head - inline void BeforeFirst(void) { + inline void BeforeFirst() { if (batch_param_.round_batch == 0 || !overflow) { n_parsed_ = 0; return source_->BeforeFirst(); @@ -79,7 +80,7 @@ class ImageRecordIOParser2 { #endif inline size_t ParseChunk(DType* data_dptr, real_t* label_dptr, const size_t current_size, dmlc::InputSplit::Blob * chunk); - inline void CreateMeanImg(void); + inline void CreateMeanImg(); // magic number to seed prng static const int kRandMagic = 111; @@ -169,8 +170,8 @@ inline void ImageRecordIOParser2::Init( prnds_.emplace_back(new common::RANDOM_ENGINE((i + 1) * kRandMagic)); } if (param_.path_imglist.length() != 0) { - label_map_.reset(new ImageLabelMap(param_.path_imglist.c_str(), - param_.label_width, !param_.verbose)); + label_map_ = std::make_unique(param_.path_imglist.c_str(), + param_.label_width, !param_.verbose); } CHECK(param_.path_imgrec.length() != 0) << "ImageRecordIter2: must specify image_rec"; @@ -665,7 +666,7 @@ inline size_t ImageRecordIOParser2::ParseChunk(DType* data_dptr, real_t* // create mean image. template -inline void ImageRecordIOParser2::CreateMeanImg(void) { +inline void ImageRecordIOParser2::CreateMeanImg() { if (param_.verbose) { LOG(INFO) << "Cannot find " << normalize_param_.mean_img << ": create mean image, this will take some time..."; @@ -677,8 +678,7 @@ inline void ImageRecordIOParser2::CreateMeanImg(void) { inst_order_.clear(); // Parse chunk w/o putting anything in out ParseChunk(nullptr, nullptr, batch_param_.batch_size, &chunk); - for (size_t i = 0; i < inst_order_.size(); ++i) { - std::pair place = inst_order_[i]; + for (auto place : inst_order_) { mshadow::Tensor outimg = temp_[place.first][place.second].data[0].template get(); if (imcnt == 0) { @@ -714,13 +714,13 @@ inline void ImageRecordIOParser2::CreateMeanImg(void) { template class ImageRecordIter2 : public IIterator { public: - ImageRecordIter2() : out_(nullptr) { } + ImageRecordIter2() = default; - virtual ~ImageRecordIter2(void) { + ~ImageRecordIter2() override { iter_.Destroy(); } - virtual void Init(const std::vector >& kwargs) { + void Init(const std::vector >& kwargs) override { prefetch_param_.InitAllowUnknown(kwargs); parser_.Init(kwargs); // maximum prefetch threaded iter internal size @@ -737,12 +737,12 @@ class ImageRecordIter2 : public IIterator { [this]() { parser_.BeforeFirst(); }); } - virtual void BeforeFirst(void) { + void BeforeFirst() override { iter_.BeforeFirst(); } // From iter_prefetcher.h - virtual bool Next(void) { + bool Next() override { if (out_ != nullptr) { recycle_queue_.push(out_); out_ = nullptr; } @@ -759,7 +759,7 @@ class ImageRecordIter2 : public IIterator { return iter_.Next(&out_); } - virtual const DataBatch &Value(void) const { + const DataBatch &Value() const override { return *out_; } @@ -769,7 +769,7 @@ class ImageRecordIter2 : public IIterator { /*! \brief Parameters */ PrefetcherParam prefetch_param_; /*! \brief output data */ - DataBatch *out_; + DataBatch *out_{nullptr}; /*! \brief queue to be recycled */ std::queue recycle_queue_; /* \brief parser */ @@ -784,19 +784,19 @@ class ImageRecordIter2CPU : public IIterator { var_ = Engine::Get()->NewVariable(); } - virtual ~ImageRecordIter2CPU(void) { + ~ImageRecordIter2CPU() override { Engine::Get()->DeleteVariable([](mxnet::RunContext ctx) {}, Context::CPU(), var_); delete out_; } - virtual void Init(const std::vector>& kwargs) { + void Init(const std::vector>& kwargs) override { parser_.Init(kwargs); } - virtual void BeforeFirst(void) { parser_.BeforeFirst(); } + void BeforeFirst() override { parser_.BeforeFirst(); } // From iter_prefetcher.h - virtual bool Next(void) { + bool Next() override { bool result = false; const auto engine = Engine::Get(); engine->PushSync( @@ -808,7 +808,7 @@ class ImageRecordIter2CPU : public IIterator { return result; } - virtual const DataBatch& Value(void) const { return *out_; } + const DataBatch& Value() const override { return *out_; } private: /*! \brief Backend thread */ @@ -824,7 +824,7 @@ class ImageRecordIter2CPU : public IIterator { class ImageRecordIter2Wrapper : public IIterator { public: - ~ImageRecordIter2Wrapper(void) override { + ~ImageRecordIter2Wrapper() override { if (record_iter_) delete record_iter_; } void Init(const std::vector>& kwargs) override { @@ -869,14 +869,14 @@ class ImageRecordIter2Wrapper : public IIterator { record_iter_->Init(kwargs); } - void BeforeFirst(void) override { + void BeforeFirst() override { record_iter_->BeforeFirst(); } // From iter_prefetcher.h - bool Next(void) override { return record_iter_->Next(); } + bool Next() override { return record_iter_->Next(); } - const DataBatch &Value(void) const override { + const DataBatch &Value() const override { return record_iter_->Value(); } diff --git a/src/io/iter_libsvm.cc b/src/io/iter_libsvm.cc index 3decc7b33e04..0965bfc5192e 100644 --- a/src/io/iter_libsvm.cc +++ b/src/io/iter_libsvm.cc @@ -66,11 +66,11 @@ struct LibSVMIterParam : public dmlc::Parameter { class LibSVMIter: public SparseIIterator { public: - LibSVMIter() {} - virtual ~LibSVMIter() {} + LibSVMIter() = default; + ~LibSVMIter() override = default; // intialize iterator loads data in - virtual void Init(const std::vector >& kwargs) { + void Init(const std::vector >& kwargs) override { param_.InitAllowUnknown(kwargs); CHECK_EQ(param_.data_shape.ndim(), 1) << "dimension of data_shape is expected to be 1"; CHECK_GT(param_.num_parts, 0) << "number of parts should be positive"; @@ -97,7 +97,7 @@ class LibSVMIter: public SparseIIterator { } } - virtual void BeforeFirst() { + void BeforeFirst() override { data_parser_->BeforeFirst(); if (label_parser_.get() != nullptr) { label_parser_->BeforeFirst(); @@ -108,7 +108,7 @@ class LibSVMIter: public SparseIIterator { end_ = false; } - virtual bool Next() { + bool Next() override { if (end_) return false; while (data_ptr_ >= data_size_) { if (!data_parser_->Next()) { @@ -144,16 +144,16 @@ class LibSVMIter: public SparseIIterator { return true; } - virtual const DataInst &Value(void) const { + const DataInst &Value() const override { return out_; } - virtual const NDArrayStorageType GetStorageType(bool is_data) const { + const NDArrayStorageType GetStorageType(bool is_data) const override { if (is_data) return kCSRStorage; return param_.label_shape.Size() > 1 ? kCSRStorage : kDefaultStorage; } - virtual const mxnet::TShape GetShape(bool is_data) const { + const mxnet::TShape GetShape(bool is_data) const override { if (is_data) return param_.data_shape; return param_.label_shape; } diff --git a/src/io/iter_mnist.cc b/src/io/iter_mnist.cc index b752ce48d417..0d5f96c0e193 100644 --- a/src/io/iter_mnist.cc +++ b/src/io/iter_mnist.cc @@ -79,15 +79,15 @@ struct MNISTParam : public dmlc::Parameter { class MNISTIter: public IIterator { public: - MNISTIter(void) : loc_(0), inst_offset_(0) { + MNISTIter() { img_.dptr_ = nullptr; out_.data.resize(2); } - virtual ~MNISTIter(void) { + ~MNISTIter() override { delete []img_.dptr_; } // intialize iterator loads data in - virtual void Init(const std::vector >& kwargs) { + void Init(const std::vector >& kwargs) override { std::map kmap(kwargs.begin(), kwargs.end()); param_.InitAllowUnknown(kmap); this->LoadImage(); @@ -115,10 +115,10 @@ class MNISTIter: public IIterator { } } } - virtual void BeforeFirst(void) { + void BeforeFirst() override { this->loc_ = 0; } - virtual bool Next(void) { + bool Next() override { if (loc_ + param_.batch_size <= img_.size(0)) { batch_data_.dptr_ = img_[loc_].dptr_; batch_label_.dptr_ = &labels_[loc_]; @@ -135,7 +135,7 @@ class MNISTIter: public IIterator { return false; } } - virtual const TBlobBatch &Value(void) const { + const TBlobBatch &Value() const override { return out_; } @@ -151,7 +151,7 @@ class MNISTIter: public IIterator { static_cast(count) / param_.num_parts * (param_.part_index+1)); } - inline void LoadImage(void) { + inline void LoadImage() { dmlc::SeekStream* stdimg = dmlc::SeekStream::CreateForRead(param_.image.c_str()); ReadInt(stdimg); @@ -184,7 +184,7 @@ class MNISTIter: public IIterator { img_ *= 1.0f / 256.0f; delete stdimg; } - inline void LoadLabel(void) { + inline void LoadLabel() { dmlc::SeekStream* stdlabel = dmlc::SeekStream::CreateForRead(param_.label.c_str()); ReadInt(stdlabel); @@ -206,7 +206,7 @@ class MNISTIter: public IIterator { } delete stdlabel; } - inline void Shuffle(void) { + inline void Shuffle() { std::shuffle(inst_.begin(), inst_.end(), common::RANDOM_ENGINE(kRandMagic + param_.seed)); std::vector tmplabel(labels_.size()); mshadow::TensorContainer tmpimg(img_.shape_); @@ -238,7 +238,7 @@ class MNISTIter: public IIterator { /*! \brief output */ TBlobBatch out_; /*! \brief current location */ - index_t loc_; + index_t loc_{0}; /*! \brief image content */ mshadow::Tensor img_; /*! \brief label content */ @@ -248,7 +248,7 @@ class MNISTIter: public IIterator { /*! \brief batch label tensor */ mshadow::Tensor batch_label_; /*! \brief instance index offset */ - unsigned inst_offset_; + unsigned inst_offset_{0}; /*! \brief instance index */ std::vector inst_; // magic number to setup randomness diff --git a/src/io/iter_sampler.cc b/src/io/iter_sampler.cc index 932bcc9fe38e..049347dfd9cf 100644 --- a/src/io/iter_sampler.cc +++ b/src/io/iter_sampler.cc @@ -27,6 +27,7 @@ #include #include #include +#include #include #include "../common/utils.h" #include "./iter_batchloader.h" @@ -52,22 +53,22 @@ DMLC_REGISTER_PARAMETER(SequentialSamplerParam); class SequentialSampler : public IIterator { public: - virtual void Init(const std::vector >& kwargs) { + void Init(const std::vector >& kwargs) override { param_.InitAllowUnknown(kwargs); indices_.resize(param_.length); std::iota(std::begin(indices_), std::end(indices_), 0); // fill like arange out_.data.resize(1); } - virtual void BeforeFirst(void) { + void BeforeFirst() override { pos_ = 0; } - virtual int64_t GetLenHint(void) const { + int64_t GetLenHint() const override { return static_cast(indices_.size()); } - virtual bool Next(void) { + bool Next() override { if (pos_ < indices_.size()) { int64_t *ptr = indices_.data() + pos_; out_.data[0] = TBlob(ptr, TShape({1, }), cpu::kDevMask, 0); @@ -77,7 +78,7 @@ class SequentialSampler : public IIterator { return false; } - virtual const DataInst &Value(void) const { + const DataInst &Value() const override { return out_; } @@ -117,27 +118,27 @@ DMLC_REGISTER_PARAMETER(RandomSamplerParam); class RandomSampler : public IIterator { public: - virtual void Init(const std::vector >& kwargs) { + void Init(const std::vector >& kwargs) override { param_.InitAllowUnknown(kwargs); indices_.resize(param_.length); std::iota(std::begin(indices_), std::end(indices_), 0); // fill like arange mshadow::Random *ctx_rng = ResourceManager::Get()->Request( Context::CPU(), ResourceRequest::kRandom).get_random(nullptr); - rng_.reset(new common::RANDOM_ENGINE(ctx_rng->GetSeed())); + rng_ = std::make_unique(ctx_rng->GetSeed()); out_.data.resize(1); BeforeFirst(); } - virtual void BeforeFirst(void) { + void BeforeFirst() override { std::shuffle(std::begin(indices_), std::end(indices_), *rng_); pos_ = 0; } - virtual int64_t GetLenHint(void) const { + int64_t GetLenHint() const override { return static_cast(indices_.size()); } - virtual bool Next(void) { + bool Next() override { if (pos_ < indices_.size()) { int64_t *ptr = indices_.data() + pos_; out_.data[0] = TBlob(ptr, TShape({1, }), cpu::kDevMask, 0); @@ -147,7 +148,7 @@ class RandomSampler : public IIterator { return false; } - virtual const DataInst &Value(void) const { + const DataInst &Value() const override { return out_; } private: diff --git a/src/kvstore/kvstore.cc b/src/kvstore/kvstore.cc index fa3f91097ba6..87daad60ccc2 100644 --- a/src/kvstore/kvstore.cc +++ b/src/kvstore/kvstore.cc @@ -23,7 +23,6 @@ * \brief implement kv_store */ #include -#include #include #include "./kvstore_local.h" @@ -36,6 +35,8 @@ std::atomic mxnet::kvstore::KVStoreDist::customer_id_{0}; #include "./kvstore_nccl.h" #endif // MXNET_USE_NCCL +#include + namespace mxnet { KVStore* KVStore::Create(const char *type_name) { diff --git a/src/nnvm/gradient.cc b/src/nnvm/gradient.cc index 09c02b2aa26f..447f658890d8 100644 --- a/src/nnvm/gradient.cc +++ b/src/nnvm/gradient.cc @@ -168,8 +168,8 @@ Graph Gradient(Graph src) { // information is needed in later stages to determine whether putting a node // on the mirror path can be beneficial or not. using mxnet::ShapeVector; - ShapeVector in_arg_shapes = std::move(src.GetAttr("in_arg_shapes")); - DTypeVector in_arg_dtypes = std::move(src.GetAttr("in_arg_dtypes")); + ShapeVector in_arg_shapes = src.GetAttr("in_arg_shapes"); + DTypeVector in_arg_dtypes = src.GetAttr("in_arg_dtypes"); src = mxnet::exec::InferShape(std::move(src), std::move(in_arg_shapes), "__shape__"); src = mxnet::exec::InferType(std::move(src), std::move(in_arg_dtypes), "__dtype__"); CHECK(src.GetAttr("shape_num_unknown_nodes") == 0U); @@ -583,8 +583,7 @@ Graph BuildGradientGraph( // gather all the output gradient entries and apply the aggregation function out_agg_grads.clear(); auto& out_grad_vec = output_grads.at(src_fwd_node.get()); - for (uint32_t i = 0; i < out_grad_vec.size(); ++i) { - GradEntry& e = out_grad_vec[i]; + for (auto & e : out_grad_vec) { e.sum = agg_fun(std::move(e.grads)); out_agg_grads.push_back(e.sum); } @@ -698,7 +697,7 @@ Graph BuildGradientGraph( // register pass NNVM_REGISTER_PASS(MXGradient) -.describe("Return a gradient graph of src.attrs[\"ys\"] wrt src.attrs[\"xs\"]") +.describe(R"(Return a gradient graph of src.attrs["ys"] wrt src.attrs["xs"])") .set_body(Gradient) .set_change_graph(true) .depend_graph_attr("grad_ys") diff --git a/src/nnvm/graph_editor.cc b/src/nnvm/graph_editor.cc index 2d2053c536d0..44a807eda174 100644 --- a/src/nnvm/graph_editor.cc +++ b/src/nnvm/graph_editor.cc @@ -27,6 +27,8 @@ #include #include +#include + namespace nnvm { ObjectPtr CreateVariableNode(const std::string& name); } @@ -67,7 +69,7 @@ bool CutGraphInputs(const std::vector &input_entries, bool skip_var, std::vector *orig_entries) { struct pred_entry { nnvm::NodeEntry e; - explicit pred_entry(const nnvm::NodeEntry &_e): e(_e) {} + explicit pred_entry(nnvm::NodeEntry _e): e(std::move(_e)) {} bool operator()(const nnvm::NodeEntry e1) { return e.node == e1.node && e.index == e1.index; } diff --git a/src/nnvm/low_precision_pass.cc b/src/nnvm/low_precision_pass.cc index 66ec59d44f19..a13344dfccf5 100644 --- a/src/nnvm/low_precision_pass.cc +++ b/src/nnvm/low_precision_pass.cc @@ -134,11 +134,10 @@ static bool CheckConditionalFP32( auto it_params = it->second; // For each param name, iterate through param values to check // if the provided param name is equal to any of the values - for (auto it_param = it_params.begin(); it_param != it_params.end(); - it_param++) { - auto param_key = node->attrs.dict.find(it_param->first); + for (auto & it_param : it_params) { + auto param_key = node->attrs.dict.find(it_param.first); if (param_key != node->attrs.dict.end()) { - auto it_param_vals = it_param->second; + auto it_param_vals = it_param.second; if (std::find(it_param_vals.begin(), it_param_vals.end(), param_key->second) != it_param_vals.end()) { return true; @@ -282,13 +281,13 @@ Graph ReducePrecision(Graph &&src) { << "can't handle the widest_dtype_ops with mutable inputs."; int out_dtype = target_dtype; bool have_unknown_dtype = false; - for (size_t i = 0; i < node->inputs.size(); ++i) { + for (auto & input : node->inputs) { // Try to infer output dtype based on input dtype - if (!mirror_target_dtype_map.count(node->inputs[i]) - && !mirror_fp32_map.count(node->inputs[i])) { + if (!mirror_target_dtype_map.count(input) + && !mirror_fp32_map.count(input)) { have_unknown_dtype = true; break; - } else if (mirror_fp32_map.count(node->inputs[i])) { + } else if (mirror_fp32_map.count(input)) { out_dtype = mshadow::kFloat32; } } diff --git a/src/nnvm/tvm_bridge.cc b/src/nnvm/tvm_bridge.cc index 17e05e3316cd..66e010a4e534 100644 --- a/src/nnvm/tvm_bridge.cc +++ b/src/nnvm/tvm_bridge.cc @@ -40,6 +40,7 @@ #include #include +#include namespace mxnet { @@ -55,7 +56,7 @@ class TVMFunctor { public: // constructor explicit TVMFunctor(PackedFunc func, PackedFunc fset_stream) - : func_(func), fset_stream_(fset_stream) {} + : func_(std::move(func)), fset_stream_(std::move(fset_stream)) {} void Init(const TVMArgs& args, const std::vector& const_loc, diff --git a/src/operator/contrib/boolean_mask.cc b/src/operator/contrib/boolean_mask.cc index a4e924eb3446..882984430d52 100644 --- a/src/operator/contrib/boolean_mask.cc +++ b/src/operator/contrib/boolean_mask.cc @@ -68,8 +68,8 @@ bool BooleanMaskBackStorageType(const nnvm::NodeAttrs& attrs, for (int &attr : *out_attrs) { attr = kDefaultStorage; } - for (size_t i = 0; i < out_attrs->size(); i++) - out_attrs->at(i) = kDefaultStorage; + for (int & out_attr : *out_attrs) + out_attr = kDefaultStorage; *dispatch_mode = DispatchMode::kFComputeEx; return true; } diff --git a/src/operator/contrib/dgl_graph.cc b/src/operator/contrib/dgl_graph.cc index 89bee8abf655..c8e27f38d1a6 100644 --- a/src/operator/contrib/dgl_graph.cc +++ b/src/operator/contrib/dgl_graph.cc @@ -26,6 +26,7 @@ #include #include #include +#include #include "../elemwise_op_common.h" #include "../../imperative/imperative_utils.h" @@ -63,7 +64,7 @@ class ArrayHeap { } } } - ~ArrayHeap() {} + ~ArrayHeap() = default; /* * Remove term from index (this costs O(log m) steps) @@ -417,8 +418,8 @@ static void RandomSample(size_t set_size, sampled_idxs.insert(distribution(generator)); } out->clear(); - for (auto it = sampled_idxs.begin(); it != sampled_idxs.end(); it++) { - out->push_back(*it); + for (size_t sampled_idx : sampled_idxs) { + out->push_back(sampled_idx); } } @@ -528,9 +529,9 @@ static void GetNonUniformSample(const float* probability, struct neigh_list { std::vector neighs; std::vector edges; - neigh_list(const std::vector &_neighs, - const std::vector &_edges) - : neighs(_neighs), edges(_edges) {} + neigh_list(std::vector _neighs, + std::vector _edges) + : neighs(std::move(_neighs)), edges(std::move(_edges)) {} }; /* @@ -620,25 +621,25 @@ static void SampleSubgraph(const NDArray &csr, // First we push the size of neighbor vector neighbor_list.push_back(tmp_sampled_edge_list.size()); // Then push the vertices - for (size_t i = 0; i < tmp_sampled_src_list.size(); ++i) { - neighbor_list.push_back(tmp_sampled_src_list[i]); + for (dgl_id_t & i : tmp_sampled_src_list) { + neighbor_list.push_back(i); } // Finally we push the edge list - for (size_t i = 0; i < tmp_sampled_edge_list.size(); ++i) { - neighbor_list.push_back(tmp_sampled_edge_list[i]); + for (dgl_id_t & i : tmp_sampled_edge_list) { + neighbor_list.push_back(i); } num_edges += tmp_sampled_src_list.size(); - for (size_t i = 0; i < tmp_sampled_src_list.size(); ++i) { + for (dgl_id_t & i : tmp_sampled_src_list) { // If we have sampled the max number of vertices, we have to stop. if (sub_ver_mp.size() >= max_num_vertices) break; // We need to add the neighbor in the hashtable here. This ensures that // the vertex in the queue is unique. If we see a vertex before, we don't // need to add it to the queue again. - auto ret = sub_ver_mp.insert(tmp_sampled_src_list[i]); + auto ret = sub_ver_mp.insert(i); // If the sampled neighbor is inserted to the map successfully. if (ret.second) - sub_vers.emplace_back(tmp_sampled_src_list[i], cur_node_level + 1); + sub_vers.emplace_back(i, cur_node_level + 1); } } // Let's check if there is a vertex that we haven't sampled its neighbors. @@ -960,8 +961,8 @@ static bool DGLSubgraphStorageType(const nnvm::NodeAttrs& attrs, bool success = true; *dispatch_mode = DispatchMode::kFComputeEx; - for (size_t i = 0; i < out_attrs->size(); i++) { - if (!type_assign(&(*out_attrs)[i], mxnet::kCSRStorage)) + for (int & out_attr : *out_attrs) { + if (!type_assign(&out_attr, mxnet::kCSRStorage)) success = false; } return success; @@ -999,8 +1000,8 @@ static bool DGLSubgraphType(const nnvm::NodeAttrs& attrs, for (size_t i = 0; i < num_g; i++) { CHECK_EQ(in_attrs->at(i + 1), mshadow::kInt64); } - for (size_t i = 0; i < out_attrs->size(); i++) { - out_attrs->at(i) = in_attrs->at(0); + for (int & out_attr : *out_attrs) { + out_attr = in_attrs->at(0); } return true; } @@ -1016,7 +1017,7 @@ class Bitmap { public: Bitmap(const dgl_id_t *vid_data, int64_t len): map(size) { for (int64_t i = 0; i < len; ++i) { - map[hash(vid_data[i])] = 1; + map[hash(vid_data[i])] = true; } } @@ -1531,8 +1532,8 @@ static bool SubgraphCompactStorageType(const nnvm::NodeAttrs& attrs, bool success = true; *dispatch_mode = DispatchMode::kFComputeEx; - for (size_t i = 0; i < out_attrs->size(); i++) { - if (!type_assign(&(*out_attrs)[i], mxnet::kCSRStorage)) + for (int & out_attr : *out_attrs) { + if (!type_assign(&out_attr, mxnet::kCSRStorage)) success = false; } return success; @@ -1570,11 +1571,11 @@ static bool SubgraphCompactShape(const nnvm::NodeAttrs& attrs, static bool SubgraphCompactType(const nnvm::NodeAttrs& attrs, std::vector *in_attrs, std::vector *out_attrs) { - for (size_t i = 0; i < in_attrs->size(); i++) { - CHECK_EQ(in_attrs->at(i), mshadow::kInt64); + for (int & in_attr : *in_attrs) { + CHECK_EQ(in_attr, mshadow::kInt64); } - for (size_t i = 0; i < out_attrs->size(); i++) { - out_attrs->at(i) = mshadow::kInt64; + for (int & out_attr : *out_attrs) { + out_attr = mshadow::kInt64; } return true; } diff --git a/src/operator/contrib/multi_proposal.cc b/src/operator/contrib/multi_proposal.cc index e77a0b5aeba1..bf8555ca1c09 100644 --- a/src/operator/contrib/multi_proposal.cc +++ b/src/operator/contrib/multi_proposal.cc @@ -289,11 +289,11 @@ class MultiProposalOp : public Operator{ this->param_ = param; } - virtual void Forward(const OpContext &ctx, + void Forward(const OpContext &ctx, const std::vector &in_data, const std::vector &req, const std::vector &out_data, - const std::vector &aux_states) { + const std::vector &aux_states) override { using namespace mshadow; using namespace mshadow::expr; CHECK_EQ(in_data.size(), 3); @@ -458,13 +458,13 @@ class MultiProposalOp : public Operator{ } } - virtual void Backward(const OpContext &ctx, + void Backward(const OpContext &ctx, const std::vector &out_grad, const std::vector &in_data, const std::vector &out_data, const std::vector &req, const std::vector &in_grad, - const std::vector &aux_states) { + const std::vector &aux_states) override { using namespace mshadow; using namespace mshadow::expr; CHECK_EQ(in_grad.size(), 3); diff --git a/src/operator/contrib/proposal.cc b/src/operator/contrib/proposal.cc index 935372d34dbe..1ca14537c2f6 100644 --- a/src/operator/contrib/proposal.cc +++ b/src/operator/contrib/proposal.cc @@ -278,11 +278,11 @@ class ProposalOp : public Operator{ this->param_ = param; } - virtual void Forward(const OpContext &ctx, + void Forward(const OpContext &ctx, const std::vector &in_data, const std::vector &req, const std::vector &out_data, - const std::vector &aux_states) { + const std::vector &aux_states) override { using namespace mshadow; using namespace mshadow::expr; CHECK_EQ(in_data.size(), 3); @@ -420,13 +420,13 @@ class ProposalOp : public Operator{ } } - virtual void Backward(const OpContext &ctx, + void Backward(const OpContext &ctx, const std::vector &out_grad, const std::vector &in_data, const std::vector &out_data, const std::vector &req, const std::vector &in_grad, - const std::vector &aux_states) { + const std::vector &aux_states) override { using namespace mshadow; using namespace mshadow::expr; CHECK_EQ(in_grad.size(), 3); diff --git a/src/operator/contrib/rroi_align.cc b/src/operator/contrib/rroi_align.cc index 14690d6270d2..415eecf8eedf 100644 --- a/src/operator/contrib/rroi_align.cc +++ b/src/operator/contrib/rroi_align.cc @@ -27,7 +27,7 @@ */ #include "./rroi_align-inl.h" #include -#include "math.h" +#include using std::max; using std::min; diff --git a/src/operator/control_flow.cc b/src/operator/control_flow.cc index e6cc90ac13dc..7926f26f3f24 100644 --- a/src/operator/control_flow.cc +++ b/src/operator/control_flow.cc @@ -24,6 +24,8 @@ #include #include #include + +#include #include "./operator_common.h" #include "./elemwise_op_common.h" #include "../imperative/imperative_utils.h" @@ -648,9 +650,9 @@ static void WhileLoopComputeExCPU(const OpStatePtr& state_ptr, const_cast(outputs[i]).SetShapeFromChunk(); } if (state.n_iterations == 0) { - for (size_t i = 0; i < outputs.size(); ++i) { - if (!shape_is_known(outputs[i].shape())) { - const_cast(outputs[i]).ReshapeAndAlloc({1}); + for (const auto & output : outputs) { + if (!shape_is_known(output.shape())) { + const_cast(output).ReshapeAndAlloc({1}); } } } @@ -865,11 +867,11 @@ class CondState { LoopState else_branch; int branch_selection; // 1 if then branch; 0 if else branch; -1 if undefined - CondState(const CondParam ¶ms, + CondState(CondParam params, const nnvm::Symbol &cond, const nnvm::Symbol &then_sym, const nnvm::Symbol &else_sym): - params(params), + params(std::move(params)), cond_op(LoopState::MakeSharedOp(cond)), then_branch(then_sym), else_branch(else_sym), diff --git a/src/operator/leaky_relu.cc b/src/operator/leaky_relu.cc index 681ca44b357f..8a1a07573f4e 100644 --- a/src/operator/leaky_relu.cc +++ b/src/operator/leaky_relu.cc @@ -202,7 +202,7 @@ The following modified ReLU Activation functions are supported: .set_attr("FSetInputVarAttrOnCompose", [](const nnvm::NodeAttrs& attrs, nnvm::ObjectPtr var, const int index) { if (index == 1 && var->attrs.dict.find("__init__") == var->attrs.dict.end()) { - var->attrs.dict["__init__"] = "[\"Constant\", {\"value\": 0.25}]"; + var->attrs.dict["__init__"] = R"(["Constant", {"value": 0.25}])"; } }); diff --git a/src/operator/numpy/np_einsum_op.cc b/src/operator/numpy/np_einsum_op.cc index 522780f5f3ad..a89f1ad40de4 100644 --- a/src/operator/numpy/np_einsum_op.cc +++ b/src/operator/numpy/np_einsum_op.cc @@ -56,8 +56,8 @@ */ #include "./np_einsum_op-inl.h" -#include -#include +#include +#include namespace mxnet { namespace op { diff --git a/src/operator/numpy/np_indexing_op.cc b/src/operator/numpy/np_indexing_op.cc index 3c2a041f955a..1f1fecc1c8f3 100644 --- a/src/operator/numpy/np_indexing_op.cc +++ b/src/operator/numpy/np_indexing_op.cc @@ -161,8 +161,8 @@ bool AdvancedIndexingOpBackStorageType(const nnvm::NodeAttrs& attrs, for (int &attr : *out_attrs) { attr = kDefaultStorage; } - for (size_t i = 0; i < out_attrs->size(); i++) - out_attrs->at(i) = kDefaultStorage; + for (int & out_attr : *out_attrs) + out_attr = kDefaultStorage; *dispatch_mode = DispatchMode::kFComputeEx; return true; } diff --git a/src/operator/numpy/np_polynomial_op.cc b/src/operator/numpy/np_polynomial_op.cc index 155c98fd1cc5..72df77cf2d25 100644 --- a/src/operator/numpy/np_polynomial_op.cc +++ b/src/operator/numpy/np_polynomial_op.cc @@ -22,7 +22,7 @@ * \file np_polynomial_op.cc */ -#include +#include #include "np_polynomial_op-inl.h" namespace mxnet { diff --git a/src/operator/operator_tune.cc b/src/operator/operator_tune.cc index b5e253a1872e..4c66f00b14d6 100644 --- a/src/operator/operator_tune.cc +++ b/src/operator/operator_tune.cc @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -#include +#include #include #include "./mxnet_op.h" #include "./mshadow_op.h" diff --git a/src/operator/quantization/quantize_graph_pass.cc b/src/operator/quantization/quantize_graph_pass.cc index 012134bcfa8d..ff75801af410 100644 --- a/src/operator/quantization/quantize_graph_pass.cc +++ b/src/operator/quantization/quantize_graph_pass.cc @@ -225,8 +225,8 @@ static void MarkQuantizedNodes(const Graph& src, while (!task_queue.empty()) { const auto& node = task_queue.front(); task_queue.pop(); - for (size_t i = 0; i < node->inputs.size(); ++i) { - const auto& input = node->inputs[i].node; + for (auto & i : node->inputs) { + const auto& input = i.node; auto it = support_quantize_nodes.find(input); if (it != support_quantize_nodes.end()) { it->second = it->second | kFromInput; @@ -243,8 +243,7 @@ static void MarkQuantizedNodes(const Graph& src, const auto& node = task_queue.front(); task_queue.pop(); const auto& outputs = node_output_map[node]; - for (size_t i = 0; i < outputs.size(); ++i) { - const auto& output = outputs[i]; + for (const auto & output : outputs) { auto it = support_quantize_nodes.find(output); if (it != support_quantize_nodes.end()) { it->second = it->second | kFromOutput; diff --git a/src/operator/quantization/quantized_elemwise_mul.cc b/src/operator/quantization/quantized_elemwise_mul.cc index 7d1798f14503..0988a8bcceaf 100644 --- a/src/operator/quantization/quantized_elemwise_mul.cc +++ b/src/operator/quantization/quantized_elemwise_mul.cc @@ -186,7 +186,7 @@ void QuantizedElemwiseMulOpForward(const nnvm::NodeAttrs &attrs, out_data[i] = static_cast(a * b * out_scale); } } else { - typedef int32_t out_type; + using out_type = int32_t; auto *out_data = outputs[quantized_elemwise_mul::kOut].dptr(); #if !defined(_MSC_VER) #pragma omp simd @@ -198,7 +198,7 @@ void QuantizedElemwiseMulOpForward(const nnvm::NodeAttrs &attrs, } } } else { - typedef float_t out_type; + using out_type = float_t; auto *out_data = outputs[quantized_elemwise_mul::kOut].dptr(); #if !defined(_MSC_VER) #pragma omp simd diff --git a/src/operator/quantization/quantized_fully_connected.cc b/src/operator/quantization/quantized_fully_connected.cc index d88aac86851a..e8caf79b05a9 100644 --- a/src/operator/quantization/quantized_fully_connected.cc +++ b/src/operator/quantization/quantized_fully_connected.cc @@ -154,7 +154,7 @@ struct QuantizedSumInitKernelWithBias { const float *max_out, const float *min_bias, const float *max_bias) { typedef int32_t T1; - typedef int8_t T2; + using T2 = int8_t; using mshadow::red::limits::MinValue; using mshadow::red::limits::MaxValue; float float_for_one_out_quant = diff --git a/src/operator/subgraph/default_subgraph_property.cc b/src/operator/subgraph/default_subgraph_property.cc index dd3bfd14ae28..ff51b6397c04 100644 --- a/src/operator/subgraph/default_subgraph_property.cc +++ b/src/operator/subgraph/default_subgraph_property.cc @@ -17,6 +17,8 @@ * under the License. */ +#include + #include "./common.h" #include "./subgraph_property.h" #include "../../imperative/cached_op.h" @@ -33,15 +35,15 @@ class ContainOpSelector: public SubgraphSelector { explicit ContainOpSelector(const std::unordered_set& op_names) : op_names_(op_names) {} - virtual bool Select(const nnvm::Node &seed_node) { + bool Select(const nnvm::Node &seed_node) override { return !seed_node.is_variable() && op_names_.count(seed_node.op()->name); } - virtual bool SelectInput(const nnvm::Node &cur_node, const nnvm::Node &input_node) { + bool SelectInput(const nnvm::Node &cur_node, const nnvm::Node &input_node) override { return !input_node.is_variable() && op_names_.count(input_node.op()->name); } - virtual bool SelectOutput(const nnvm::Node &cur_node, const nnvm::Node &output_node) { + bool SelectOutput(const nnvm::Node &cur_node, const nnvm::Node &output_node) override { return !output_node.is_variable() && op_names_.count(output_node.op()->name); } private: @@ -55,19 +57,19 @@ class ContainOpSelector: public SubgraphSelector { class DefaultSubgraphProperty: public SubgraphProperty { public: static SubgraphPropertyPtr Create() { return std::make_shared(); } - virtual nnvm::ObjectPtr CreateSubgraphNode(const nnvm::Symbol &sym, - const int subgraph_id = 0) const { + nnvm::ObjectPtr CreateSubgraphNode(const nnvm::Symbol &sym, + const int subgraph_id = 0) const override { nnvm::ObjectPtr n = nnvm::Node::Create(); n->attrs.op = Op::Get("_CachedOp"); n->attrs.name = "_CachedOp" + std::to_string(subgraph_id); n->attrs.subgraphs.push_back(std::make_shared(sym)); std::vector > flags{{"static_alloc", "true"}}; - n->attrs.parsed = CachedOpPtr(new CachedOp(sym, flags)); + n->attrs.parsed = std::make_shared(sym, flags); return n; } - virtual SubgraphSelectorPtr CreateSubgraphSelector() const { + SubgraphSelectorPtr CreateSubgraphSelector() const override { return std::make_shared( this->GetAttr>("op_names")); } diff --git a/src/operator/subgraph/default_subgraph_property_v2.cc b/src/operator/subgraph/default_subgraph_property_v2.cc index 65aaeb1f45ce..7c942300ad12 100644 --- a/src/operator/subgraph/default_subgraph_property_v2.cc +++ b/src/operator/subgraph/default_subgraph_property_v2.cc @@ -18,6 +18,8 @@ */ +#include + #include "./common.h" #include "./subgraph_property.h" #include "../../imperative/cached_op.h" @@ -68,7 +70,7 @@ class DefaultSubgraphProperty: public SubgraphProperty { n->attrs.subgraphs.push_back(std::make_shared(sym)); std::vector > flags{{"static_alloc", "true"}}; - n->attrs.parsed = CachedOpPtr(new CachedOp(sym, flags)); + n->attrs.parsed = std::make_shared(sym, flags); return n; } diff --git a/src/profiler/aggregate_stats.cc b/src/profiler/aggregate_stats.cc index 86791ebf3074..9d56dd35d6c2 100644 --- a/src/profiler/aggregate_stats.cc +++ b/src/profiler/aggregate_stats.cc @@ -235,8 +235,8 @@ void AggregateStats::DumpJson(std::ostream& os, int sort_by, int ascending) { << " }" << std::endl << "," << std::endl << " \"Unit\": {" << std::endl - << " \"Time\": \"ms\"," << std::endl - << " \"Memory\": \"kB\"" << std::endl + << R"( "Time": "ms",)" << std::endl + << R"( "Memory": "kB")" << std::endl << " }" << std::endl << "}" << std::endl << std::flush; diff --git a/src/profiler/profiler.cc b/src/profiler/profiler.cc index 13ab462ab69c..080d0454faff 100644 --- a/src/profiler/profiler.cc +++ b/src/profiler/profiler.cc @@ -154,9 +154,9 @@ void Profiler::SetConfig(int mode, */ void Profiler::EmitPid(std::ostream *os, const std::string& name, size_t pid) { (*os) << " {\n" - << " \"ph\": \"" << static_cast(ProfileStat::kMetadata) << "\",\n" + << R"( "ph": ")" << static_cast(ProfileStat::kMetadata) << "\",\n" << " \"args\": {\n" - << " \"name\": \"" << name << "\"\n" + << R"( "name": ")" << name << "\"\n" << " },\n" << " \"pid\": " << pid << ",\n" << " \"name\": \"process_name\"\n" @@ -246,7 +246,7 @@ void Profiler::DumpProfile(bool perform_cleanup) { if (last_pass) { file << "\n" << std::endl; file << " ]," << std::endl; - file << " \"displayTimeUnit\": \"ms\"" << std::endl; + file << R"( "displayTimeUnit": "ms")" << std::endl; file << "}" << std::endl; } enable_output_ = continuous_dump_ && !last_pass; // If we're appending, then continue. diff --git a/src/resource.cc b/src/resource.cc index 9f5ecaf89b27..28e24e5c6984 100644 --- a/src/resource.cc +++ b/src/resource.cc @@ -31,6 +31,7 @@ #include #include #include +#include #include "./common/lazy_alloc_array.h" #include "./common/utils.h" #include "./common/cuda_utils.h" @@ -91,8 +92,7 @@ struct SpaceAllocator { // Implements resource manager class ResourceManagerImpl : public ResourceManager { public: - ResourceManagerImpl() noexcept(false) - : global_seed_(0) { + ResourceManagerImpl() noexcept(false) { cpu_temp_space_copy_ = dmlc::GetEnv("MXNET_CPU_TEMP_COPY", 4); gpu_temp_space_copy_ = dmlc::GetEnv("MXNET_GPU_TEMP_COPY", 1); cpu_native_rand_copy_ = dmlc::GetEnv("MXNET_CPU_PARALLEL_RAND_COPY", 1); @@ -102,14 +102,14 @@ class ResourceManagerImpl : public ResourceManager { #endif // MXNET_USE_CUDNN == 1 engine_ref_ = Engine::_GetSharedRef(); storage_ref_ = Storage::_GetSharedRef(); - cpu_rand_.reset(new ResourceRandom( - Context::CPU(), global_seed_)); - cpu_space_.reset(new ResourceTempSpace( - Context::CPU(), cpu_temp_space_copy_)); - cpu_parallel_rand_.reset(new ResourceParallelRandom( - Context::CPU(), cpu_native_rand_copy_, global_seed_)); + cpu_rand_ = std::make_unique>( + Context::CPU(), global_seed_); + cpu_space_ = std::make_unique>( + Context::CPU(), cpu_temp_space_copy_); + cpu_parallel_rand_ = std::make_unique>( + Context::CPU(), cpu_native_rand_copy_, global_seed_); } - ~ResourceManagerImpl() { + ~ResourceManagerImpl() override { // need explicit delete, before engine get killed cpu_rand_.reset(nullptr); cpu_space_.reset(nullptr); @@ -390,7 +390,7 @@ class ResourceManagerImpl : public ResourceManager { /*! \brief Reference to the storage */ std::shared_ptr storage_ref_; /*! \brief internal seed to the random number generator */ - uint32_t global_seed_; + uint32_t global_seed_{0}; /*! \brief CPU random number resources */ std::unique_ptr > cpu_rand_; /*! \brief CPU temp space resources */ diff --git a/src/runtime/registry.cc b/src/runtime/registry.cc index 276c1ba73d18..d1511806aa27 100644 --- a/src/runtime/registry.cc +++ b/src/runtime/registry.cc @@ -44,7 +44,7 @@ struct Registry::Manager { std::mutex mutex; // vtable for extension type is not suported for now - Manager() {} + Manager() = default; static Manager* Global() { // We deliberately leak the Manager instance, to avoid leak sanitizers diff --git a/src/storage/storage.cc b/src/storage/storage.cc index 438a6b872021..f359b30f151e 100644 --- a/src/storage/storage.cc +++ b/src/storage/storage.cc @@ -44,7 +44,7 @@ class StorageImpl : public Storage { void SharedIncrementRefCount(Handle handle) override; StorageImpl() = default; - virtual ~StorageImpl() = default; + ~StorageImpl() override = default; private: std::shared_ptr storage_manager(const Context &ctx) { diff --git a/tests/cpp/engine/thread_local_test.cc b/tests/cpp/engine/thread_local_test.cc index f842b1d52018..6801b377ef83 100644 --- a/tests/cpp/engine/thread_local_test.cc +++ b/tests/cpp/engine/thread_local_test.cc @@ -23,7 +23,6 @@ * \brief Tests thread safety and lifetime of thread local store */ #include -#include #include #include #include @@ -31,6 +30,7 @@ #include #include #include +#include #include #include #include diff --git a/tests/cpp/engine/threaded_engine_test.cc b/tests/cpp/engine/threaded_engine_test.cc index e1e3a53e656c..11ca2c94c1c0 100644 --- a/tests/cpp/engine/threaded_engine_test.cc +++ b/tests/cpp/engine/threaded_engine_test.cc @@ -22,7 +22,6 @@ * \file threaded_engine_test.cc * \brief threaded engine tests */ -#include #include #include #include @@ -31,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -107,7 +107,7 @@ double EvaluateWorkloads(const std::vector& workloads, for (const auto& wl : workloads) { if (wl.reads.size() == 0) continue; - if (engine == NULL) { + if (engine == nullptr) { EvaluateWorkload(wl, data); } else { auto func = [wl, data](RunContext ctx, Engine::CallbackOnComplete cb) { @@ -152,13 +152,13 @@ TEST(Engine, RandSumExpr) { std::vector t(num_engine, 0.0); std::vector engine(num_engine); - engine[0] = NULL; + engine[0] = nullptr; engine[1] = mxnet::engine::CreateNaiveEngine(); engine[2] = mxnet::engine::CreateThreadedEnginePooled(); engine[3] = mxnet::engine::CreateThreadedEnginePerDevice(); for (int repeat = 0; repeat < num_repeat; ++repeat) { - srand(time(NULL) + repeat); + srand(time(nullptr) + repeat); int num_var = 100; GenerateWorkload(10000, num_var, 2, 20, 1, 10, &workloads); std::vector> data(num_engine); diff --git a/tests/cpp/operator/batchnorm_test.cc b/tests/cpp/operator/batchnorm_test.cc index 22bcb70387a8..dab8c98a7da8 100644 --- a/tests/cpp/operator/batchnorm_test.cc +++ b/tests/cpp/operator/batchnorm_test.cc @@ -277,7 +277,7 @@ class BatchNormValidator : public test::op::Validator { typedef test::op::Validator Super; /*! \brief Only static functions in this class */ - BatchNormValidator() = delete; + BatchNormValidator() = delete; // NOLINT /*! \brief Check batch norm output - 1D */ static void checkBatchNorm1D(const TBlob *blob) { @@ -566,10 +566,9 @@ static const test::op::kwargs_t nfs_ugs_kwargs_nocudnn = { #if !DISABLE_VALIDATION static bool isUGS(const test::op::kwargs_t& kwargs) { - for (test::op::kwargs_t::const_iterator i = kwargs.begin(), - e = kwargs.end(); i != e; ++i) { - if (!i->first.compare("use_global_stats")) { - return i->second.compare("True") == 0; + for (const auto & kwarg : kwargs) { + if (!kwarg.first.compare("use_global_stats")) { + return kwarg.second.compare("True") == 0; } } return false; @@ -725,8 +724,8 @@ static test::op::OpInfoPair test size_t thisCount = 0; - typedef typename OperatorExecutor::DataType DType; - typedef typename OperatorExecutor::AccRealType AccReal; + using DType = typename OperatorExecutor::DataType; + using AccReal = typename OperatorExecutor::AccRealType; do { const bool isLast = thisCount == cycleCount - 1; @@ -1288,8 +1287,8 @@ static void testSaveAndLoad(const std::vector& dims, TEST(BATCH_NORM, TestChannelAxisSaveAndLoad) { std::cout << std::endl << std::flush; - typedef float DType; - typedef float AccReal; + using DType = float; + using AccReal = float; const std::vector> myData = { { 1.0f, 1.0f, 1.0f, 1.0f }, @@ -1346,8 +1345,8 @@ static void runChannelAxisTest( const size_t numberOfPasses = 5 ) { - typedef float DType; - typedef float AccReal; + using DType = float; + using AccReal = float; size_t spatialSize = 1; for (size_t x = 1, n = shape.size(); x < n; ++x) { diff --git a/tests/cpp/operator/runner/core_op_runner_test.cc b/tests/cpp/operator/runner/core_op_runner_test.cc index 96458cd1c713..6e6cb91096fe 100644 --- a/tests/cpp/operator/runner/core_op_runner_test.cc +++ b/tests/cpp/operator/runner/core_op_runner_test.cc @@ -148,7 +148,7 @@ TEST(CORE_OP_RUNNER, ExecuteBidirectionalRunnerSimpleUnary) { } TEST(CORE_OP_RUNNER, ExecuteBidirectionalRunner) { - typedef float DType; + using DType = float; mxnet::TShape shape({5, 5}); for (const std::pair& i : test_binary_operators) { const char *op_name = i.first.c_str(); @@ -163,7 +163,7 @@ TEST(CORE_OP_RUNNER, ExecuteBidirectionalRunner) { * \brief Test RunBidirectional dot product, which has different shaped inputs and outputs */ TEST(CORE_OP_RUNNER, ExecuteBidirectionalRunnerDotProduct) { - typedef float DType; + using DType = float; const char *op_name = "dot"; const char *backward_op_name = "_backward_dot"; test::op::CoreOperatorRunner runner; @@ -179,7 +179,7 @@ TEST(CORE_OP_RUNNER, ExecuteBidirectionalRunnerDotProduct) { * \brief Timing tests for CPU */ TEST(CORE_OP_RUNNER, TimingCPUSimpleUnary) { - typedef float DType; + using DType = float; const char *op_name = "relu"; @@ -210,7 +210,7 @@ TEST(CORE_OP_RUNNER, TimingCPUSimpleUnary) { } TEST(CORE_OP_RUNNER, TimingCPUBinary) { - typedef float DType; + using DType = float; const char *op_name = "elemwise_add"; const char *backward_op_name = "_backward_add"; @@ -246,7 +246,7 @@ TEST(CORE_OP_RUNNER, TimingCPUBinary) { * \brief Performance run dot product, which has different shaped inputs and outputs */ TEST(CORE_OP_RUNNER, TimingCPUBinaryDotProduct) { - typedef float DType; + using DType = float; const char *op_name = "dot"; const char *backward_op_name = "_backward_dot"; diff --git a/tests/cpp/storage/storage_test.cc b/tests/cpp/storage/storage_test.cc index 3934c091faef..d9e7d8bc0294 100644 --- a/tests/cpp/storage/storage_test.cc +++ b/tests/cpp/storage/storage_test.cc @@ -21,11 +21,11 @@ * \file storage_test.cc * \brief cpu/gpu storage tests */ -#include #include #include #include #include +#include #include "test_util.h" TEST(Storage, Basic_CPU) { diff --git a/tools/im2rec.cc b/tools/im2rec.cc index 989b3147830d..ddb3f7f11c1e 100644 --- a/tools/im2rec.cc +++ b/tools/im2rec.cc @@ -247,7 +247,7 @@ int main(int argc, char *argv[]) { if (unchanged != 1) { cv::Mat img = cv::imdecode(decode_buf, color_mode); - CHECK(img.data != NULL) << "OpenCV decode fail:" << path; + CHECK(img.data != nullptr) << "OpenCV decode fail:" << path; cv::Mat res = img; if (new_size > 0) { if (center_crop) { From 608afef6fb69129730f4c18d0e42f5a8ac2078a7 Mon Sep 17 00:00:00 2001 From: Xi Wang Date: Fri, 31 Jul 2020 02:30:25 +0800 Subject: [PATCH 31/46] Fix dirichlet flaky tests (#18817) * make parameter smoother * minor changes --- tests/python/unittest/test_gluon_probability_v1.py | 12 ++++++------ tests/python/unittest/test_gluon_probability_v2.py | 10 +++++----- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/tests/python/unittest/test_gluon_probability_v1.py b/tests/python/unittest/test_gluon_probability_v1.py index c0dd5d54ab9f..0fece99bb6d7 100644 --- a/tests/python/unittest/test_gluon_probability_v1.py +++ b/tests/python/unittest/test_gluon_probability_v1.py @@ -341,7 +341,7 @@ def hybrid_forward(self, F, loc, scale, *args): for shape, hybridize in itertools.product(shapes, [True, False]): loc = np.random.uniform(-1, 1, shape) scale = np.random.uniform(0.5, 1.5, shape) - samples = np.random.uniform(size=shape, high=1.0-1e-4) + samples = np.random.uniform(size=shape, low=1e-4, high=1.0-1e-4) net = TestCauchy("icdf") if hybridize: net.hybridize() @@ -837,7 +837,7 @@ def hybrid_forward(self, F, alpha, *args): dirichlet = mgp.Dirichlet(alpha, F, validate_args=True) return _distribution_method_invoker(dirichlet, self._func, *args) - event_shapes = [2, 5, 10] + event_shapes = [2, 4, 6] batch_shapes = [None, (2, 3)] # Test sampling @@ -845,7 +845,7 @@ def hybrid_forward(self, F, alpha, *args): for hybridize in [True, False]: desired_shape = ( batch_shape if batch_shape is not None else ()) + (event_shape,) - alpha = np.random.uniform(size=desired_shape) + alpha = np.random.uniform(1.0, 5.0, size=desired_shape) net = TestDirichlet("sample") if hybridize: net.hybridize() @@ -862,9 +862,9 @@ def hybrid_forward(self, F, alpha, *args): for hybridize in [True, False]: desired_shape = ( batch_shape if batch_shape is not None else ()) + (event_shape,) - alpha = np.random.uniform(size=desired_shape) + alpha = np.random.uniform(1.0, 5.0, desired_shape) np_samples = _np.random.dirichlet( - [1 / event_shape] * event_shape, size=batch_shape) + [10.0 / event_shape] * event_shape, size=batch_shape) net = TestDirichlet("log_prob") if hybridize: net.hybridize() @@ -879,7 +879,7 @@ def hybrid_forward(self, F, alpha, *args): for func in ['mean', 'variance', 'entropy']: desired_shape = ( batch_shape if batch_shape is not None else ()) + (event_shape,) - alpha = np.random.uniform(size=desired_shape) + alpha = np.random.uniform(1.0, 5.0, desired_shape) net = TestDirichlet(func) if hybridize: net.hybridize() diff --git a/tests/python/unittest/test_gluon_probability_v2.py b/tests/python/unittest/test_gluon_probability_v2.py index ecce63c50e1d..dc8ac1476ea9 100644 --- a/tests/python/unittest/test_gluon_probability_v2.py +++ b/tests/python/unittest/test_gluon_probability_v2.py @@ -837,7 +837,7 @@ def forward(self, alpha, *args): dirichlet = mgp.Dirichlet(alpha, validate_args=True) return _distribution_method_invoker(dirichlet, self._func, *args) - event_shapes = [2, 5, 10] + event_shapes = [2, 4, 6] batch_shapes = [None, (2, 3)] # Test sampling @@ -845,7 +845,7 @@ def forward(self, alpha, *args): for hybridize in [True, False]: desired_shape = ( batch_shape if batch_shape is not None else ()) + (event_shape,) - alpha = np.random.uniform(size=desired_shape) + alpha = np.random.uniform(1.0, 5.0, size=desired_shape) net = TestDirichlet("sample") if hybridize: net.hybridize() @@ -862,9 +862,9 @@ def forward(self, alpha, *args): for hybridize in [True, False]: desired_shape = ( batch_shape if batch_shape is not None else ()) + (event_shape,) - alpha = np.random.uniform(size=desired_shape) + alpha = np.random.uniform(1.0, 5.0, size=desired_shape) np_samples = _np.random.dirichlet( - [1 / event_shape] * event_shape, size=batch_shape) + [10.0 / event_shape] * event_shape, size=batch_shape) net = TestDirichlet("log_prob") if hybridize: net.hybridize() @@ -879,7 +879,7 @@ def forward(self, alpha, *args): for func in ['mean', 'variance', 'entropy']: desired_shape = ( batch_shape if batch_shape is not None else ()) + (event_shape,) - alpha = np.random.uniform(size=desired_shape) + alpha = np.random.uniform(1.0, 5.0, desired_shape) net = TestDirichlet(func) if hybridize: net.hybridize() From 045efb27842e850f6ddf7c48e5c16e5678508443 Mon Sep 17 00:00:00 2001 From: Sheng Zha Date: Thu, 30 Jul 2020 19:19:33 -0700 Subject: [PATCH 32/46] [NumPy] DLPack refactor and npx.from_numpy (#18656) * refactor dlpack and add from_numpy to npx * remove reference of DeepNumPy * map platform-dependent types to fixed-size types * update DMLC_LOG_FATAL_THROW * fix flaky * fix flaky * test no error --- CMakeLists.txt | 4 +- python/mxnet/base.py | 1 - python/mxnet/dlpack.py | 185 ++++++++++++ python/mxnet/ndarray/ndarray.py | 271 ++++++------------ python/mxnet/ndarray/numpy/_op.py | 6 +- python/mxnet/ndarray/numpy/random.py | 2 +- python/mxnet/numpy/multiarray.py | 16 +- python/mxnet/numpy/random.py | 2 +- python/mxnet/numpy_extension/utils.py | 92 +++--- python/mxnet/symbol/numpy/random.py | 2 +- tests/python/unittest/test_base.py | 2 + .../unittest/test_gluon_probability_v1.py | 6 +- tests/python/unittest/test_numpy_ndarray.py | 32 +++ tests/python/unittest/test_operator.py | 4 +- 14 files changed, 373 insertions(+), 252 deletions(-) create mode 100644 python/mxnet/dlpack.py diff --git a/CMakeLists.txt b/CMakeLists.txt index 5f1a5106a95d..cb22c5976122 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -642,7 +642,6 @@ if(UNIX) endif() target_link_libraries(mxnet PUBLIC mshadow) target_link_libraries(mxnet PUBLIC ${CMAKE_DL_LIBS}) - target_compile_definitions(mxnet PUBLIC DMLC_LOG_FATAL_THROW=$) if(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") target_compile_options(mxnet PRIVATE "$<$:-Werror>") # Ignore erroneous compiler warnings: @@ -669,7 +668,6 @@ elseif(MSVC) foreach(arch ${arch_code_list}) add_library(mxnet_${arch} SHARED ${SOURCE}) target_link_libraries(mxnet_${arch} PUBLIC mshadow) - target_compile_definitions(mxnet_${arch} PUBLIC DMLC_LOG_FATAL_THROW=$) target_compile_options( mxnet_${arch} PRIVATE @@ -705,10 +703,10 @@ elseif(MSVC) endif(USE_SPLIT_ARCH_DLL) else() add_library(mxnet SHARED ${SOURCE}) - target_compile_definitions(mxnet PUBLIC DMLC_LOG_FATAL_THROW=$) target_link_libraries(mxnet PUBLIC mshadow) endif() endif() +target_compile_definitions(mxnet PUBLIC DMLC_LOG_FATAL_THROW=$) # extension libraries (custom operators, custom subgraphs) are built by default add_library(customop_lib SHARED ${CMAKE_CURRENT_SOURCE_DIR}/example/extensions/lib_custom_op/gemm_lib.cc) diff --git a/python/mxnet/base.py b/python/mxnet/base.py index 65687fff54a9..0b4bdf9a97c2 100644 --- a/python/mxnet/base.py +++ b/python/mxnet/base.py @@ -309,7 +309,6 @@ def _load_lib(): CudaModuleHandle = ctypes.c_void_p CudaKernelHandle = ctypes.c_void_p ProfileHandle = ctypes.c_void_p -DLPackHandle = ctypes.c_void_p #---------------------------- diff --git a/python/mxnet/dlpack.py b/python/mxnet/dlpack.py new file mode 100644 index 000000000000..b5e8ee83304e --- /dev/null +++ b/python/mxnet/dlpack.py @@ -0,0 +1,185 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +# coding: utf-8 +# pylint: disable=protected-access +# pylint: disable=import-error, no-name-in-module, undefined-variable + +"""DLPack API of MXNet.""" + +import ctypes +from .base import _LIB, c_str, check_call, NDArrayHandle + +DLPackHandle = ctypes.c_void_p + +PyCapsuleDestructor = ctypes.CFUNCTYPE(None, ctypes.c_void_p) +_c_str_dltensor = c_str('dltensor') +_c_str_used_dltensor = c_str('used_dltensor') + +def _dlpack_deleter(pycapsule): + pycapsule = ctypes.c_void_p(pycapsule) + if ctypes.pythonapi.PyCapsule_IsValid(pycapsule, _c_str_dltensor): + ptr = ctypes.c_void_p( + ctypes.pythonapi.PyCapsule_GetPointer(pycapsule, _c_str_dltensor)) + check_call(_LIB.MXNDArrayCallDLPackDeleter(ptr)) + +_c_dlpack_deleter = PyCapsuleDestructor(_dlpack_deleter) + +class DLContext(ctypes.Structure): + _fields_ = [("device_type", ctypes.c_int), + ("device_id", ctypes.c_int)] + +class DLDataType(ctypes.Structure): + _fields_ = [("type_code", ctypes.c_uint8), + ("bits", ctypes.c_uint8), + ("lanes", ctypes.c_uint16)] + TYPE_MAP = { + "int32": (0, 32, 1), + "int64": (0, 64, 1), + "bool": (1, 1, 1), + "uint8": (1, 8, 1), + "uint32": (1, 32, 1), + "uint64": (1, 64, 1), + 'float16': (2, 16, 1), + "float32": (2, 32, 1), + "float64": (2, 64, 1), + } + + +class DLTensor(ctypes.Structure): + _fields_ = [("data", ctypes.c_void_p), + ("ctx", DLContext), + ("ndim", ctypes.c_int), + ("dtype", DLDataType), + ("shape", ctypes.POINTER(ctypes.c_int64)), + ("strides", ctypes.POINTER(ctypes.c_int64)), + ("byte_offset", ctypes.c_uint64)] + +class DLManagedTensor(ctypes.Structure): + pass + + +DeleterFunc = ctypes.CFUNCTYPE(None, ctypes.POINTER(DLManagedTensor)) + + +DLManagedTensor._fields_ = [("dl_tensor", DLTensor), # pylint: disable=protected-access + ("manager_ctx", ctypes.c_void_p), + ("deleter", DeleterFunc)] + +@DeleterFunc +def dl_managed_tensor_deleter(dl_managed_tensor_handle): + void_p = dl_managed_tensor_handle.contents.manager_ctx + pyobj = ctypes.cast(void_p, ctypes.py_object) + ctypes.pythonapi.Py_DecRef(pyobj) + +def ndarray_from_dlpack(array_cls): + """Returns a function that returns specified array_cls from dlpack. + + Returns + ------- + fn : dlpack -> array_cls + """ + def from_dlpack(dlpack): + handle = NDArrayHandle() + dlpack = ctypes.py_object(dlpack) + assert ctypes.pythonapi.PyCapsule_IsValid(dlpack, _c_str_dltensor), ValueError( + 'Invalid DLPack Tensor. DLTensor capsules can be consumed only once.') + dlpack_handle = ctypes.c_void_p(ctypes.pythonapi.PyCapsule_GetPointer(dlpack, _c_str_dltensor)) + check_call(_LIB.MXNDArrayFromDLPackEx(dlpack_handle, False, ctypes.byref(handle))) + # Rename PyCapsule (DLPack) + ctypes.pythonapi.PyCapsule_SetName(dlpack, _c_str_used_dltensor) + # delete the deleter of the old dlpack + ctypes.pythonapi.PyCapsule_SetDestructor(dlpack, None) + return array_cls(handle=handle) + return from_dlpack + + +def ndarray_to_dlpack_for_read(): + """Returns a function that returns dlpack for reading from mxnet array. + + Returns + ------- + fn : tensor -> dlpack + """ + def to_dlpack_for_read(data): + data.wait_to_read() + dlpack = DLPackHandle() + check_call(_LIB.MXNDArrayToDLPack(data.handle, ctypes.byref(dlpack))) + return ctypes.pythonapi.PyCapsule_New(dlpack, _c_str_dltensor, _c_dlpack_deleter) + return to_dlpack_for_read + +def ndarray_to_dlpack_for_write(): + """Returns a function that returns dlpack for writing from mxnet array. + + Returns + ------- + fn : tensor -> dlpack + """ + def to_dlpack_for_write(data): + + check_call(_LIB.MXNDArrayWaitToWrite(data.handle)) + dlpack = DLPackHandle() + check_call(_LIB.MXNDArrayToDLPack(data.handle, ctypes.byref(dlpack))) + return ctypes.pythonapi.PyCapsule_New(dlpack, _c_str_dltensor, _c_dlpack_deleter) + return to_dlpack_for_write + +def ndarray_from_numpy(array_cls, array_create_fn): + """Returns a function that creates array_cls from numpy array. + + Returns + ------- + fn : tensor -> dlpack + """ + def from_numpy(ndarray, zero_copy=True): + def _make_manager_ctx(obj): + pyobj = ctypes.py_object(obj) + void_p = ctypes.c_void_p.from_buffer(pyobj) + ctypes.pythonapi.Py_IncRef(pyobj) + return void_p + + def _make_dl_tensor(array): + if str(array.dtype) not in DLDataType.TYPE_MAP: + raise ValueError(str(array.dtype) + " is not supported.") + dl_tensor = DLTensor() + dl_tensor.data = array.ctypes.data_as(ctypes.c_void_p) + dl_tensor.ctx = DLContext(1, 0) + dl_tensor.ndim = array.ndim + dl_tensor.dtype = DLDataType.TYPE_MAP[str(array.dtype)] + dl_tensor.shape = array.ctypes.shape_as(ctypes.c_int64) + dl_tensor.strides = None + dl_tensor.byte_offset = 0 + return dl_tensor + + def _make_dl_managed_tensor(array): + c_obj = DLManagedTensor() + c_obj.dl_tensor = _make_dl_tensor(array) + c_obj.manager_ctx = _make_manager_ctx(array) + c_obj.deleter = dl_managed_tensor_deleter + return c_obj + + if not zero_copy: + return array_create_fn(ndarray, dtype=ndarray.dtype) + + if not ndarray.flags['C_CONTIGUOUS']: + raise ValueError("Only c-contiguous arrays are supported for zero-copy") + + ndarray.flags['WRITEABLE'] = False + c_obj = _make_dl_managed_tensor(ndarray) + handle = NDArrayHandle() + check_call(_LIB.MXNDArrayFromDLPackEx(ctypes.byref(c_obj), True, ctypes.byref(handle))) + return array_cls(handle=handle) + return from_numpy diff --git a/python/mxnet/ndarray/ndarray.py b/python/mxnet/ndarray/ndarray.py index 9cc8b8942c1d..fa26dfff9628 100644 --- a/python/mxnet/ndarray/ndarray.py +++ b/python/mxnet/ndarray/ndarray.py @@ -34,9 +34,11 @@ from functools import reduce # pylint: disable=redefined-builtin import numpy as np from ..base import _LIB, numeric_types, integer_types -from ..base import c_str, c_array, c_array_buf, c_handle_array, mx_real_t -from ..base import mx_uint, NDArrayHandle, check_call, DLPackHandle, mx_int, mx_int64 +from ..base import c_array, c_array_buf, c_handle_array, mx_real_t +from ..base import mx_uint, NDArrayHandle, check_call, mx_int, mx_int64 from ..base import ctypes2buffer +from ..dlpack import ndarray_to_dlpack_for_read, ndarray_to_dlpack_for_write +from ..dlpack import ndarray_from_dlpack, ndarray_from_numpy from ..runtime import Features from ..context import Context, current_context from ..util import is_np_array @@ -70,9 +72,28 @@ np.int8: 5, np.int64: 6, np.bool_: 7, + np.int16: 8, + np.uint16 : 9, + np.uint32 : 10, + np.uint64 : 11, np.dtype([('bfloat16', np.uint16)]): 12, } +def _register_platform_dependent_mx_dtype(): + """Register platform dependent types to the fixed size counterparts.""" + kind_map = {'i': 'int', 'u': 'uint', 'f': 'float'} + for np_type in [ + np.byte, np.ubyte, np.short, np.ushort, np.intc, np.uintc, np.int_, + np.uint, np.longlong, np.ulonglong, np.half, np.float16, np.single, + np.double, np.longdouble]: + dtype = np.dtype(np_type) + kind, size = dtype.kind, dtype.itemsize + bits = size * 8 + fixed_dtype = getattr(np, kind_map[kind]+str(bits)) + if fixed_dtype in _DTYPE_NP_TO_MX: + _DTYPE_NP_TO_MX[np_type] = _DTYPE_NP_TO_MX[fixed_dtype] +_register_platform_dependent_mx_dtype() + _DTYPE_MX_TO_NP = { -1: None, 0: np.float32, @@ -83,6 +104,10 @@ 5: np.int8, 6: np.int64, 7: np.bool_, + 8: np.int16, + 9: np.uint16, + 10: np.uint32, + 11: np.uint64, 12: np.dtype([('bfloat16', np.uint16)]), } @@ -4914,32 +4939,18 @@ def split_v2(ary, indices_or_sections, axis=0, squeeze_axis=False): raise ValueError('indices_or_sections must either int or tuple of ints') return _internal._split_v2(ary, indices, axis, squeeze_axis) -PyCapsuleDestructor = ctypes.CFUNCTYPE(None, ctypes.c_void_p) -_c_str_dltensor = c_str('dltensor') -_c_str_used_dltensor = c_str('used_dltensor') - -def _dlpack_deleter(pycapsule): - pycapsule = ctypes.c_void_p(pycapsule) - if ctypes.pythonapi.PyCapsule_IsValid(pycapsule, _c_str_dltensor): - ptr = ctypes.c_void_p( - ctypes.pythonapi.PyCapsule_GetPointer(pycapsule, _c_str_dltensor)) - check_call(_LIB.MXNDArrayCallDLPackDeleter(ptr)) - -_c_dlpack_deleter = PyCapsuleDestructor(_dlpack_deleter) - -def to_dlpack_for_read(data): - """Returns a reference view of NDArray that represents as DLManagedTensor until - all previous write operations on the current array are finished. +from_dlpack = ndarray_from_dlpack(NDArray) +from_dlpack_doc = """Returns a NDArray backed by a dlpack tensor. Parameters ---------- - data: NDArray - input data. + dlpack: PyCapsule (the pointer of DLManagedTensor) + input data Returns ------- - PyCapsule (the pointer of DLManagedTensor) - a reference view of NDArray that represents as DLManagedTensor. + NDArray + a NDArray backed by a dlpack tensor Examples -------- @@ -4948,33 +4959,13 @@ def to_dlpack_for_read(data): >>> type(y) >>> z = mx.nd.from_dlpack(y) + >>> type(z) + >>> z - [[1. 1. 1.] - [1. 1. 1.]] + [[ 1. 1. 1.] + [ 1. 1. 1.]] - """ - data.wait_to_read() - dlpack = DLPackHandle() - check_call(_LIB.MXNDArrayToDLPack(data.handle, ctypes.byref(dlpack))) - return ctypes.pythonapi.PyCapsule_New(dlpack, _c_str_dltensor, _c_dlpack_deleter) - -def to_dlpack_for_write(data): - """Returns a reference view of NDArray that represents as DLManagedTensor until - all previous read/write operations on the current array are finished. - Parameters - ---------- - data: NDArray - input data. - - Returns - ------- - PyCapsule (the pointer of DLManagedTensor) - a reference view of NDArray that represents as DLManagedTensor. - - Examples - -------- - >>> x = mx.nd.ones((2,3)) >>> w = mx.nd.to_dlpack_for_write(x) >>> type(w) @@ -4985,23 +4976,45 @@ def to_dlpack_for_write(data): [2. 2. 2.]] """ - check_call(_LIB.MXNDArrayWaitToWrite(data.handle)) - dlpack = DLPackHandle() - check_call(_LIB.MXNDArrayToDLPack(data.handle, ctypes.byref(dlpack))) - return ctypes.pythonapi.PyCapsule_New(dlpack, _c_str_dltensor, _c_dlpack_deleter) +from_dlpack.__doc__ = from_dlpack_doc -def from_dlpack(dlpack): - """Returns a NDArray backed by a dlpack tensor. +from_numpy = ndarray_from_numpy(NDArray, array) +from_numpy_doc = """Returns an MXNet's NDArray backed by numpy's ndarray. + When `zero_copy` is set to be true, + this API consumes numpy's ndarray and produces MXNet's ndarray + without having to copy the content. In this case, we disallow + users to modify the given numpy ndarray, and it is suggested + not to read the numpy ndarray as well for internal correctness. Parameters ---------- - dlpack: PyCapsule (the pointer of DLManagedTensor) + ndarray: NDArray input data + zero_copy: bool + Whether we use DLPack's zero-copy conversion to convert to MXNet's NDArray. + This is only available for c-contiguous arrays, i.e. array.flags[C_CONTIGUOUS] == True. Returns ------- NDArray a NDArray backed by a dlpack tensor +""" +from_numpy.__doc__ = from_numpy_doc + + +to_dlpack_for_read = ndarray_to_dlpack_for_read() +to_dlpack_for_read_doc = """Returns a reference view of NDArray that represents as DLManagedTensor until + all previous write operations on the current array are finished. + + Parameters + ---------- + data: NDArray + input data. + + Returns + ------- + PyCapsule (the pointer of DLManagedTensor) + a reference view of NDArray that represents as DLManagedTensor. Examples -------- @@ -5010,13 +5023,30 @@ def from_dlpack(dlpack): >>> type(y) >>> z = mx.nd.from_dlpack(y) - >>> type(z) - >>> z - [[ 1. 1. 1.] - [ 1. 1. 1.]] + [[1. 1. 1.] + [1. 1. 1.]] +""" +to_dlpack_for_read.__doc__ = to_dlpack_for_read_doc + +to_dlpack_for_write = ndarray_to_dlpack_for_write() +to_dlpack_for_write_doc = """Returns a reference view of NDArray that represents as +DLManagedTensor until all previous read/write operations on the current array are finished. + + Parameters + ---------- + data: NDArray + input data. + + Returns + ------- + PyCapsule (the pointer of DLManagedTensor) + a reference view of NDArray that represents as DLManagedTensor. + Examples + -------- + >>> x = mx.nd.ones((2,3)) >>> w = mx.nd.to_dlpack_for_write(x) >>> type(w) @@ -5026,128 +5056,5 @@ def from_dlpack(dlpack): [[2. 2. 2.] [2. 2. 2.]] - """ - handle = NDArrayHandle() - dlpack = ctypes.py_object(dlpack) - assert ctypes.pythonapi.PyCapsule_IsValid(dlpack, _c_str_dltensor), ValueError( - 'Invalid DLPack Tensor. DLTensor capsules can be consumed only once.') - dlpack_handle = ctypes.c_void_p(ctypes.pythonapi.PyCapsule_GetPointer(dlpack, _c_str_dltensor)) - check_call(_LIB.MXNDArrayFromDLPackEx(dlpack_handle, False, ctypes.byref(handle))) - # Rename PyCapsule (DLPack) - ctypes.pythonapi.PyCapsule_SetName(dlpack, _c_str_used_dltensor) - # delete the deleter of the old dlpack - ctypes.pythonapi.PyCapsule_SetDestructor(dlpack, None) - return NDArray(handle=handle) - -class DLContext(ctypes.Structure): - _fields_ = [("device_type", ctypes.c_int), - ("device_id", ctypes.c_int)] - - -class DLDataType(ctypes.Structure): - _fields_ = [("type_code", ctypes.c_uint8), - ("bits", ctypes.c_uint8), - ("lanes", ctypes.c_uint16)] - TYPE_MAP = { - "int32": (0, 32, 1), - "int64": (0, 64, 1), - "bool": (1, 1, 1), - "uint8": (1, 8, 1), - "uint32": (1, 32, 1), - "uint64": (1, 64, 1), - 'float16': (2, 16, 1), - "float32": (2, 32, 1), - "float64": (2, 64, 1), - } - - -class DLTensor(ctypes.Structure): - _fields_ = [("data", ctypes.c_void_p), - ("ctx", DLContext), - ("ndim", ctypes.c_int), - ("dtype", DLDataType), - ("shape", ctypes.POINTER(ctypes.c_int64)), - ("strides", ctypes.POINTER(ctypes.c_int64)), - ("byte_offset", ctypes.c_uint64)] - -class DLManagedTensor(ctypes.Structure): - pass - - -DeleterFunc = ctypes.CFUNCTYPE(None, ctypes.POINTER(DLManagedTensor)) - - -DLManagedTensor._fields_ = [("dl_tensor", DLTensor), # pylint: disable=protected-access - ("manager_ctx", ctypes.c_void_p), - ("deleter", DeleterFunc)] - - -@DeleterFunc -def dl_managed_tensor_deleter(dl_managed_tensor_handle): - void_p = dl_managed_tensor_handle.contents.manager_ctx - pyobj = ctypes.cast(void_p, ctypes.py_object) - ctypes.pythonapi.Py_DecRef(pyobj) - - -def from_numpy(ndarray, zero_copy=True, array_cls=NDArray): - """Returns an MXNet's ndarray backed by numpy's ndarray. - When `zero_copy` is set to be true, - this API consumes numpy's ndarray and produces MXNet's ndarray - without having to copy the content. In this case, we disallow - users to modify the given numpy ndarray, and it is suggested - not to read the numpy ndarray as well for internal correctness. - - Parameters - ---------- - ndarray: numpy.ndarray - input data - zero_copy: bool - Whether we use DLPack's zero-copy conversion to convert to MXNet's NDArray. - This is only available for c-contiguous arrays, i.e. array.flags[C_CONTIGUOUS] == True. - array_cls: ndarray class type - The class type of the output array. - - Returns - ------- - NDArray - a NDArray backed by a dlpack tensor - - """ - - def _make_manager_ctx(obj): - pyobj = ctypes.py_object(obj) - void_p = ctypes.c_void_p.from_buffer(pyobj) - ctypes.pythonapi.Py_IncRef(pyobj) - return void_p - - def _make_dl_tensor(array): - if str(array.dtype) not in DLDataType.TYPE_MAP: - raise ValueError(str(array.dtype) + " is not supported.") - dl_tensor = DLTensor() - dl_tensor.data = array.ctypes.data_as(ctypes.c_void_p) - dl_tensor.ctx = DLContext(1, 0) - dl_tensor.ndim = array.ndim - dl_tensor.dtype = DLDataType.TYPE_MAP[str(array.dtype)] - dl_tensor.shape = array.ctypes.shape_as(ctypes.c_int64) - dl_tensor.strides = None - dl_tensor.byte_offset = 0 - return dl_tensor - - def _make_dl_managed_tensor(array): - c_obj = DLManagedTensor() - c_obj.dl_tensor = _make_dl_tensor(array) - c_obj.manager_ctx = _make_manager_ctx(array) - c_obj.deleter = dl_managed_tensor_deleter - return c_obj - - if not zero_copy: - return array(ndarray, dtype=ndarray.dtype) - - if not ndarray.flags['C_CONTIGUOUS']: - raise ValueError("Only c-contiguous arrays are supported for zero-copy") - - ndarray.flags['WRITEABLE'] = False - c_obj = _make_dl_managed_tensor(ndarray) - handle = NDArrayHandle() - check_call(_LIB.MXNDArrayFromDLPackEx(ctypes.byref(c_obj), True, ctypes.byref(handle))) - return array_cls(handle=handle) +""" +to_dlpack_for_write.__doc__ = to_dlpack_for_write_doc diff --git a/python/mxnet/ndarray/numpy/_op.py b/python/mxnet/ndarray/numpy/_op.py index 91fea5f4aeef..14dbf94a1417 100644 --- a/python/mxnet/ndarray/numpy/_op.py +++ b/python/mxnet/ndarray/numpy/_op.py @@ -854,7 +854,7 @@ def _ufunc_helper(lhs, rhs, fn_array, fn_scalar, lfn_scalar, rfn_scalar=None, ou result array or scalar """ from ...numpy import ndarray - from ..ndarray import from_numpy # pylint: disable=unused-import + from ...numpy_extension import from_numpy # pylint: disable=unused-import if isinstance(lhs, numeric_types): if isinstance(rhs, numeric_types): return fn_scalar(lhs, rhs, out=out) @@ -8049,7 +8049,7 @@ def shares_memory(a, b, max_work=None): the following way(s): - Does not support `max_work`, it is a dummy argument - - Actually it is same as `may_share_memory` in MXNet DeepNumPy + - Actually it is same as `may_share_memory` in MXNet np """ return _api_internal.share_memory(a, b).item() @@ -8090,7 +8090,7 @@ def may_share_memory(a, b, max_work=None): the following way(s): - Does not support `max_work`, it is a dummy argument - - Actually it is same as `shares_memory` in MXNet DeepNumPy + - Actually it is same as `shares_memory` in MXNet np """ return _api_internal.share_memory(a, b).item() diff --git a/python/mxnet/ndarray/numpy/random.py b/python/mxnet/ndarray/numpy/random.py index 41e573c76111..c2a2c0bf78ec 100644 --- a/python/mxnet/ndarray/numpy/random.py +++ b/python/mxnet/ndarray/numpy/random.py @@ -390,7 +390,7 @@ def multivariate_normal(mean, cov, size=None, check_valid=None, tol=None): This operator is a little different from the one in official NumPy. The official NumPy operator only accepts 1-D ndarray as mean and 2-D ndarray as cov, - whereas the operator in DeepNumPy supports batch operation and auto-broadcasting. + whereas the operator in MXNet np supports batch operation and auto-broadcasting. Both `mean` and `cov` may have any number of leading dimensions, which correspond to a batch shape. They are not necessarily assumed to have the same batch shape, diff --git a/python/mxnet/numpy/multiarray.py b/python/mxnet/numpy/multiarray.py index ddecaea37aa3..5274408e4403 100644 --- a/python/mxnet/numpy/multiarray.py +++ b/python/mxnet/numpy/multiarray.py @@ -49,7 +49,7 @@ from ..context import current_context from ..ndarray import numpy as _mx_nd_np from ..ndarray.numpy import _internal as _npi -from ..ndarray.ndarray import _storage_type, from_numpy +from ..ndarray.ndarray import _storage_type from .utils import _get_np_op from .fallback import * # pylint: disable=wildcard-import,unused-wildcard-import from . import fallback @@ -182,11 +182,11 @@ def _reshape_view(a, *shape): # pylint: disable=redefined-outer-name def _as_mx_np_array(object, ctx=None): """Convert object to mxnet.numpy.ndarray.""" - if isinstance(object, _np.ndarray): - if not object.flags['C_CONTIGUOUS']: - object = _np.ascontiguousarray(object, dtype=object.dtype) - ret = from_numpy(object, array_cls=ndarray) - return ret if ctx is None else ret.as_in_ctx(ctx=ctx) + if isinstance(object, ndarray): + return object + elif isinstance(object, _np.ndarray): + np_dtype = _np.dtype(object.dtype).type + return array(object, dtype=np_dtype, ctx=ctx) elif isinstance(object, (integer_types, numeric_types)): return object elif isinstance(object, (list, tuple)): @@ -10171,7 +10171,7 @@ def shares_memory(a, b, max_work=None): the following way(s): - Does not support `max_work`, it is a dummy argument - - Actually it is same as `may_share_memory` in MXNet DeepNumPy + - Actually it is same as `may_share_memory` in MXNet np """ return _mx_nd_np.shares_memory(a, b, max_work) @@ -10212,7 +10212,7 @@ def may_share_memory(a, b, max_work=None): the following way(s): - Does not support `max_work`, it is a dummy argument - - Actually it is same as `shares_memory` in MXNet DeepNumPy + - Actually it is same as `shares_memory` in MXNet np """ return _mx_nd_np.may_share_memory(a, b, max_work) diff --git a/python/mxnet/numpy/random.py b/python/mxnet/numpy/random.py index 127d7d7da1d7..e739036e2c71 100644 --- a/python/mxnet/numpy/random.py +++ b/python/mxnet/numpy/random.py @@ -430,7 +430,7 @@ def multivariate_normal(mean, cov, size=None, check_valid=None, tol=None): This operator is a little different from the one in official NumPy. The official NumPy operator only accepts 1-D ndarray as mean and 2-D ndarray as cov, - whereas the operator in DeepNumPy supports batch operation and auto-broadcasting. + whereas the operator in MXNet np supports batch operation and auto-broadcasting. Both `mean` and `cov` may have any number of leading dimensions, which correspond to a batch shape. They are not necessarily assumed to have the same batch shape, diff --git a/python/mxnet/numpy_extension/utils.py b/python/mxnet/numpy_extension/utils.py index f625439335d5..6d3f25b7f0a8 100644 --- a/python/mxnet/numpy_extension/utils.py +++ b/python/mxnet/numpy_extension/utils.py @@ -20,25 +20,15 @@ import ctypes -from .. util import is_np_array, is_np_shape -from .. base import _LIB, check_call, string_types, c_str_array, DLPackHandle -from .. base import c_handle_array, c_str, mx_uint, NDArrayHandle, py_str -from ..numpy import ndarray +from ..util import is_np_array, is_np_shape +from ..base import _LIB, check_call, string_types, c_str_array +from ..base import c_handle_array, c_str, mx_uint, NDArrayHandle, py_str +from ..dlpack import ndarray_to_dlpack_for_read, ndarray_to_dlpack_for_write +from ..dlpack import ndarray_from_dlpack, ndarray_from_numpy +from ..numpy import ndarray, array -__all__ = ['save', 'load', 'to_dlpack_for_read', 'to_dlpack_for_write', 'from_dlpack'] - -PyCapsuleDestructor = ctypes.CFUNCTYPE(None, ctypes.c_void_p) -_c_str_dltensor = c_str('dltensor') -_c_str_used_dltensor = c_str('used_dltensor') - -def _dlpack_deleter(pycapsule): - pycapsule = ctypes.c_void_p(pycapsule) - if ctypes.pythonapi.PyCapsule_IsValid(pycapsule, _c_str_dltensor): - ptr = ctypes.c_void_p( - ctypes.pythonapi.PyCapsule_GetPointer(pycapsule, _c_str_dltensor)) - check_call(_LIB.MXNDArrayCallDLPackDeleter(ptr)) - -_c_dlpack_deleter = PyCapsuleDestructor(_dlpack_deleter) +__all__ = ['save', 'load', 'to_dlpack_for_read', 'to_dlpack_for_write', + 'from_dlpack', 'from_numpy'] def save(file, arr): """Saves a list of `ndarray`s or a dict of `str`->`ndarray` to file. @@ -132,9 +122,8 @@ def load(file): (py_str(names[i]), ndarray(NDArrayHandle(handles[i]))) for i in range(out_size.value)) - -def from_dlpack(dlpack): - """Returns a np.ndarray backed by a dlpack tensor. +from_dlpack = ndarray_from_dlpack(ndarray) +from_dlpack_doc = """Returns a np.ndarray backed by a dlpack tensor. Parameters ---------- @@ -168,21 +157,36 @@ def from_dlpack(dlpack): array([[2., 2., 2.], [2., 2., 2.]]) """ - handle = NDArrayHandle() - dlpack = ctypes.py_object(dlpack) - assert ctypes.pythonapi.PyCapsule_IsValid(dlpack, _c_str_dltensor), ValueError( - 'Invalid DLPack Tensor. DLTensor capsules can be consumed only once.') - dlpack_handle = ctypes.c_void_p(ctypes.pythonapi.PyCapsule_GetPointer(dlpack, _c_str_dltensor)) - check_call(_LIB.MXNDArrayFromDLPackEx(dlpack_handle, False, ctypes.byref(handle))) - # Rename PyCapsule (DLPack) - ctypes.pythonapi.PyCapsule_SetName(dlpack, _c_str_used_dltensor) - # delete the deleter of the old dlpack - ctypes.pythonapi.PyCapsule_SetDestructor(dlpack, None) - return ndarray(handle=handle) - -def to_dlpack_for_read(data): - """Returns a reference view of np.ndarray that represents as DLManagedTensor until - all previous write operations on the current array are finished. +from_dlpack.__doc__ = from_dlpack_doc + + +from_numpy = ndarray_from_numpy(ndarray, array) +from_numpy_doc = """Returns an MXNet's np.ndarray backed by numpy's ndarray. + When `zero_copy` is set to be true, + this API consumes numpy's ndarray and produces MXNet's np.ndarray + without having to copy the content. In this case, we disallow + users to modify the given numpy ndarray, and it is suggested + not to read the numpy ndarray as well for internal correctness. + + Parameters + ---------- + ndarray: np.ndarray + input data + zero_copy: bool + Whether we use DLPack's zero-copy conversion to convert to MXNet's + np.ndarray. + This is only available for c-contiguous arrays, i.e. array.flags[C_CONTIGUOUS] == True. + + Returns + ------- + np.ndarray + a np.ndarray backed by a dlpack tensor + """ +from_numpy.__doc__ = from_numpy_doc + +to_dlpack_for_read = ndarray_to_dlpack_for_read() +to_dlpack_for_read_doc = """Returns a reference view of np.ndarray that represents +as DLManagedTensor until all previous write operations on the current array are finished. Parameters ---------- @@ -205,14 +209,11 @@ def to_dlpack_for_read(data): array([[1., 1., 1.], [1., 1., 1.]]) """ - data.wait_to_read() - dlpack = DLPackHandle() - check_call(_LIB.MXNDArrayToDLPack(data.handle, ctypes.byref(dlpack))) - return ctypes.pythonapi.PyCapsule_New(dlpack, _c_str_dltensor, _c_dlpack_deleter) +to_dlpack_for_read.__doc__ = to_dlpack_for_read_doc -def to_dlpack_for_write(data): - """Returns a reference view of ndarray that represents as DLManagedTensor until - all previous read/write operations on the current array are finished. +to_dlpack_for_write = ndarray_to_dlpack_for_write() +to_dlpack_for_write_doc = """Returns a reference view of ndarray that represents +as DLManagedTensor until all previous read/write operations on the current array are finished. Parameters ---------- @@ -236,7 +237,4 @@ def to_dlpack_for_write(data): array([[2., 2., 2.], [2., 2., 2.]]) """ - check_call(_LIB.MXNDArrayWaitToWrite(data.handle)) - dlpack = DLPackHandle() - check_call(_LIB.MXNDArrayToDLPack(data.handle, ctypes.byref(dlpack))) - return ctypes.pythonapi.PyCapsule_New(dlpack, _c_str_dltensor, _c_dlpack_deleter) +to_dlpack_for_write.__doc__ = to_dlpack_for_write_doc diff --git a/python/mxnet/symbol/numpy/random.py b/python/mxnet/symbol/numpy/random.py index 75780df173e9..af834bbeb5d5 100644 --- a/python/mxnet/symbol/numpy/random.py +++ b/python/mxnet/symbol/numpy/random.py @@ -926,7 +926,7 @@ def multivariate_normal(mean, cov, size=None, check_valid=None, tol=None): This operator is a little different from the one in official NumPy. The official NumPy operator only accepts 1-D ndarray as mean and 2-D ndarray as cov, - whereas the operator in DeepNumPy supports batch operation and auto-broadcasting. + whereas the operator in MXNet np supports batch operation and auto-broadcasting. Both `mean` and `cov` may have any number of leading dimensions, which correspond to a batch shape. They are not necessarily assumed to have the same batch shape, diff --git a/tests/python/unittest/test_base.py b/tests/python/unittest/test_base.py index 74d3f17a645e..2175d7b9a062 100644 --- a/tests/python/unittest/test_base.py +++ b/tests/python/unittest/test_base.py @@ -25,7 +25,9 @@ import logging import os.path as op import platform +import pytest +@pytest.mark.garbage_expected def test_environment(): name1 = 'MXNET_TEST_ENV_VAR_1' name2 = 'MXNET_TEST_ENV_VAR_2' diff --git a/tests/python/unittest/test_gluon_probability_v1.py b/tests/python/unittest/test_gluon_probability_v1.py index 0fece99bb6d7..82395ddf86f5 100644 --- a/tests/python/unittest/test_gluon_probability_v1.py +++ b/tests/python/unittest/test_gluon_probability_v1.py @@ -540,7 +540,7 @@ def hybrid_forward(self, F, n, params, *args): # Test log_prob for shape, hybridize, use_logit in itertools.product(shapes, [True, False], [True, False]): n = np.random.randint(1, 10, size=shape).astype('float32') - prob = np.random.uniform(low=0.1, size=shape) + prob = np.random.uniform(low=0.1, size=shape).astype('float32') sample = np.random.randint(0, 10, size=shape).astype('float32') param = prob if use_logit: @@ -559,7 +559,7 @@ def hybrid_forward(self, F, n, params, *args): for func in ['mean', 'variance']: for use_logit in [True, False]: n = np.random.randint(1, 10, size=shape).astype('float32') - prob = np.random.uniform(low=0.1, size=shape) + prob = np.random.uniform(low=0.1, size=shape).astype('float32') net = TestNegativeBinomial(func, use_logit) param = prob if use_logit: @@ -2015,7 +2015,7 @@ def hybrid_forward(self, F, logit, *args): def test_gluon_kl_v1(): def _test_zero_kl(p, shape): """Check if KL(p || p) = 0 - + Parameters ---------- p : Distribution diff --git a/tests/python/unittest/test_numpy_ndarray.py b/tests/python/unittest/test_numpy_ndarray.py index 966b26d7e2d2..f1cd9b38621b 100644 --- a/tests/python/unittest/test_numpy_ndarray.py +++ b/tests/python/unittest/test_numpy_ndarray.py @@ -1369,3 +1369,35 @@ def test_dlpack(dtype, size): same(a_np+1, b) same(a_np+2, c) same(a_np+2, a_copy) + +@use_np +@pytest.mark.parametrize('np_array', [ + # ordinary numpy array + _np.array([[1, 2], [3, 4], [5, 6]], dtype="float32"), + # 0-dim + _np.array((1, )).reshape(()), + # 0-size + _np.array(()).reshape((1, 0, 2)), +]) +@pytest.mark.parametrize('zero_copy', [False, True]) +def test_from_numpy(np_array, zero_copy): + # Test zero_copy + mx_array = mx.npx.from_numpy(np_array, zero_copy=zero_copy) + mx.test_utils.assert_almost_equal(np_array, mx_array.asnumpy()) + +def test_from_numpy_exception(): + np_array = _np.array([[1, 2], [3, 4], [5, 6]], dtype="float32") + mx_array = mx.npx.from_numpy(np_array) + with pytest.raises(ValueError): + np_array[2, 1] = 0 + + mx_array[2, 1] = 100 + mx.test_utils.assert_almost_equal(np_array, mx_array.asnumpy()) + np_array = _np.array([[1, 2], [3, 4], [5, 6]]).transpose() + assert not np_array.flags["C_CONTIGUOUS"] + with pytest.raises(ValueError): + mx_array = mx.nd.from_numpy(np_array) + + np_array = _np.array([[1, 2], [3, 4], [5, 6]], dtype="float32") + mx_array = mx.npx.from_numpy(np_array, zero_copy=False) + np_array[2, 1] = 0 # no error diff --git a/tests/python/unittest/test_operator.py b/tests/python/unittest/test_operator.py index 24970eaf9e5e..a44ba327b3a1 100644 --- a/tests/python/unittest/test_operator.py +++ b/tests/python/unittest/test_operator.py @@ -498,11 +498,11 @@ def test_relu(): def frelu(x): return np.maximum(x, 0.0) def frelu_grad(x): - return 1.0 * (x > 0.0) + return np.float32(1.0) * (x > np.float32(0.0)) shape = (3, 4) x = mx.symbol.Variable("x") y = mx.sym.relu(x) - xa = np.random.uniform(low=-1.0,high=1.0,size=shape) + xa = np.random.uniform(low=-1.0,high=1.0,size=shape).astype('float32') eps = 1e-4 # Avoid finite difference method inaccuracies due to discontinuous gradient at the origin. # Here we replace small problematic inputs with 1.0. Repro issue with seed 97264195. From aa53291855b74f9a5dbf4707555bd3965a3c2e18 Mon Sep 17 00:00:00 2001 From: Yang Shi Date: Thu, 30 Jul 2020 19:53:27 -0700 Subject: [PATCH 33/46] add adaptive left margin for python site document body (#18828) --- .../mx-theme/mxtheme/static/sphinx_materialdesign_theme.css | 2 +- .../mxtheme/static/sphinx_materialdesign_theme.css.map | 2 +- docs/python_docs/themes/mx-theme/src/scss/_root.scss | 6 ++++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css index 04b7450a6204..9b5a2312e6a6 100644 --- a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css +++ b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css @@ -1,2 +1,2 @@ -.admonition,.mdl-shadow--2dp,.page-content pre:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list){box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-shadow--3dp{box-shadow:0 3px 4px 0 rgba(0,0,0,.14),0 3px 3px -2px rgba(0,0,0,.2),0 1px 8px 0 rgba(0,0,0,.12)}.mdl-shadow--4dp{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2)}.mdl-shadow--6dp{box-shadow:0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.2)}.mdl-shadow--8dp{box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.2)}.mdl-shadow--16dp{box-shadow:0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.2)}.mdl-shadow--24dp{box-shadow:0 9px 46px 8px rgba(0,0,0,.14),0 11px 15px -7px rgba(0,0,0,.12),0 24px 38px 3px rgba(0,0,0,.2)}.mdl-data-table,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list){position:relative;border:1px solid rgba(0,0,0,.12);border-collapse:collapse;white-space:nowrap;font-size:13px;background-color:#fff}.mdl-data-table thead,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) thead{padding-bottom:3px}.mdl-data-table thead .mdl-data-table__select,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) thead .mdl-data-table__select{margin-top:0}.mdl-data-table tbody tr,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) tbody tr{position:relative;height:48px;transition-duration:.28s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-property:background-color}.mdl-data-table tbody tr.is-selected,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) tbody tr.is-selected{background-color:#e0e0e0}.mdl-data-table tbody tr:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) tbody tr:hover{background-color:#eee}.mdl-data-table td,.mdl-data-table th,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{padding:0 18px 12px;text-align:right}.mdl-data-table td:first-of-type,.mdl-data-table th:first-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td:first-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th:first-of-type{padding-left:24px}.mdl-data-table td:last-of-type,.mdl-data-table th:last-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td:last-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th:last-of-type{padding-right:24px}.mdl-data-table td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td{position:relative;vertical-align:middle;height:48px;border-top:1px solid rgba(0,0,0,.12);border-bottom:1px solid rgba(0,0,0,.12);padding-top:12px;box-sizing:border-box}.mdl-data-table td .mdl-data-table__select,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td .mdl-data-table__select{vertical-align:middle}.mdl-data-table th,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{position:relative;vertical-align:bottom;text-overflow:ellipsis;font-size:14px;font-weight:700;line-height:24px;letter-spacing:0;height:48px;font-size:12px;color:rgba(0,0,0,.54);padding-bottom:8px;box-sizing:border-box}.mdl-data-table th.mdl-data-table__header--sorted-ascending,.mdl-data-table th.mdl-data-table__header--sorted-descending,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending{color:rgba(0,0,0,.87)}.mdl-data-table th.mdl-data-table__header--sorted-ascending:before,.mdl-data-table th.mdl-data-table__header--sorted-descending:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:before{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;word-wrap:normal;font-feature-settings:"liga";-webkit-font-feature-settings:"liga";-webkit-font-smoothing:antialiased;font-size:16px;content:"\e5d8";margin-right:5px;vertical-align:sub}.mdl-data-table th.mdl-data-table__header--sorted-ascending:hover,.mdl-data-table th.mdl-data-table__header--sorted-descending:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:hover{cursor:pointer}.mdl-data-table th.mdl-data-table__header--sorted-ascending:hover:before,.mdl-data-table th.mdl-data-table__header--sorted-descending:hover:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending:hover:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:hover:before{color:rgba(0,0,0,.26)}.mdl-data-table th.mdl-data-table__header--sorted-descending:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:before{content:"\e5db"}.mdl-data-table__select{width:16px}.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{text-align:left}.mdl-mini-footer{display:flex;flex-flow:row wrap;justify-content:space-between;padding:32px 16px;color:#9e9e9e;background-color:#424242}.mdl-mini-footer:after{content:"";display:block}.mdl-mini-footer .mdl-logo{line-height:36px}.mdl-mini-footer--link-list,.mdl-mini-footer__link-list,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul{display:flex;flex-flow:row nowrap;list-style:none;margin:0;padding:0}.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul li{margin-bottom:0;margin-right:16px}@media screen and (min-width:760px){.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul li{line-height:36px}}.mdl-mini-footer--link-list a,.mdl-mini-footer__link-list a,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul a{color:inherit;text-decoration:none;white-space:nowrap}.mdl-mini-footer--left-section,.mdl-mini-footer__left-section{display:inline-block;order:0}.mdl-mini-footer--right-section,.mdl-mini-footer__right-section{display:inline-block;order:1}.mdl-mini-footer--social-btn,.mdl-mini-footer__social-btn{width:36px;height:36px;padding:0;margin:0;background-color:#9e9e9e;border:none}.mdl-card{display:flex;flex-direction:column;font-size:16px;font-weight:400;min-height:200px;overflow:hidden;width:330px;z-index:1;position:relative;background:#fff;border-radius:2px;box-sizing:border-box}.mdl-card__media{background-color:#ff6e40;background-repeat:repeat;background-position:50% 50%;background-size:cover;background-origin:padding-box;background-attachment:scroll;box-sizing:border-box}.mdl-card__title{align-items:center;color:#000;display:block;display:flex;justify-content:stretch;line-height:normal;padding:16px;perspective-origin:165px 56px;transform-origin:165px 56px;box-sizing:border-box}.mdl-card__title.mdl-card--border{border-bottom:1px solid rgba(0,0,0,.1)}.mdl-card__title-text{align-self:flex-end;color:inherit;display:block;display:flex;font-size:24px;font-weight:300;line-height:normal;overflow:hidden;transform-origin:149px 48px;margin:0}.mdl-card__subtitle-text{font-size:14px;color:rgba(0,0,0,.54);margin:0}.mdl-card__supporting-text{color:rgba(0,0,0,.54);font-size:1rem;line-height:18px;overflow:hidden;padding:16px;width:90%}.mdl-card__supporting-text.mdl-card--border{border-bottom:1px solid rgba(0,0,0,.1)}.mdl-card__actions{font-size:16px;line-height:normal;width:100%;background-color:transparent;padding:8px;box-sizing:border-box}.mdl-card__actions.mdl-card--border{border-top:1px solid rgba(0,0,0,.1)}.mdl-card--expand{flex-grow:1}.mdl-card__menu{position:absolute;right:16px;top:16px}.mdl-button{background:transparent;border:none;border-radius:2px;color:#000;position:relative;height:36px;margin:0;min-width:64px;padding:0 16px;display:inline-block;font-family:Roboto,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;text-transform:uppercase;line-height:1;letter-spacing:0;overflow:hidden;will-change:box-shadow;transition:box-shadow .2s cubic-bezier(.4,0,1,1),background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1);outline:none;cursor:pointer;text-decoration:none;text-align:center;line-height:36px;vertical-align:middle}.mdl-button::-moz-focus-inner{border:0}.mdl-button:hover{background-color:hsla(0,0%,62%,.2)}.mdl-button:focus:not(:active){background-color:rgba(0,0,0,.12)}.mdl-button:active{background-color:hsla(0,0%,62%,.4)}.mdl-button.mdl-button--colored{color:#2196f3}.mdl-button.mdl-button--colored:focus:not(:active){background-color:rgba(0,0,0,.12)}input.mdl-button[type=submit]{-webkit-appearance:none}.mdl-button--raised{background:hsla(0,0%,62%,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-button--raised:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:hsla(0,0%,62%,.4)}.mdl-button--raised:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:hsla(0,0%,62%,.4)}.mdl-button--raised.mdl-button--colored{background:#2196f3;color:#fff}.mdl-button--raised.mdl-button--colored:active,.mdl-button--raised.mdl-button--colored:focus:not(:active),.mdl-button--raised.mdl-button--colored:hover{background-color:#2196f3}.mdl-button--raised.mdl-button--colored .mdl-ripple{background:#fff}.mdl-button--fab{border-radius:50%;font-size:24px;height:56px;margin:auto;min-width:56px;width:56px;padding:0;overflow:hidden;background:hsla(0,0%,62%,.2);box-shadow:0 1px 1.5px 0 rgba(0,0,0,.12),0 1px 1px 0 rgba(0,0,0,.24);position:relative;line-height:normal}.admonition.attention .mdl-button--fab .admonition-title:before,.admonition.caution .mdl-button--fab .admonition-title:before,.admonition.danger .mdl-button--fab .admonition-title:before,.admonition.error .mdl-button--fab .admonition-title:before,.admonition.hint .mdl-button--fab .admonition-title:before,.admonition.important .mdl-button--fab .admonition-title:before,.admonition.note .mdl-button--fab .admonition-title:before,.admonition.seealso .mdl-button--fab .admonition-title:before,.admonition.tip .mdl-button--fab .admonition-title:before,.admonition.warning .mdl-button--fab .admonition-title:before,.mdl-button--fab .admonition.attention .admonition-title:before,.mdl-button--fab .admonition.caution .admonition-title:before,.mdl-button--fab .admonition.danger .admonition-title:before,.mdl-button--fab .admonition.error .admonition-title:before,.mdl-button--fab .admonition.hint .admonition-title:before,.mdl-button--fab .admonition.important .admonition-title:before,.mdl-button--fab .admonition.note .admonition-title:before,.mdl-button--fab .admonition.seealso .admonition-title:before,.mdl-button--fab .admonition.tip .admonition-title:before,.mdl-button--fab .admonition.warning .admonition-title:before,.mdl-button--fab .material-icons,.mdl-button--fab a.download:before{position:absolute;top:50%;left:50%;transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--fab.mdl-button--mini-fab{height:40px;min-width:40px;width:40px}.mdl-button--fab .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button--fab:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:hsla(0,0%,62%,.4)}.mdl-button--fab:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:hsla(0,0%,62%,.4)}.mdl-button--fab.mdl-button--colored{background:#ff6e40;color:#fff}.mdl-button--fab.mdl-button--colored:active,.mdl-button--fab.mdl-button--colored:focus:not(:active),.mdl-button--fab.mdl-button--colored:hover{background-color:#ff6e40}.mdl-button--fab.mdl-button--colored .mdl-ripple{background:#fff}.mdl-button--icon{border-radius:50%;font-size:24px;height:32px;margin-left:0;margin-right:0;min-width:32px;width:32px;padding:0;overflow:hidden;color:inherit;line-height:normal}.admonition.attention .mdl-button--icon .admonition-title:before,.admonition.caution .mdl-button--icon .admonition-title:before,.admonition.danger .mdl-button--icon .admonition-title:before,.admonition.error .mdl-button--icon .admonition-title:before,.admonition.hint .mdl-button--icon .admonition-title:before,.admonition.important .mdl-button--icon .admonition-title:before,.admonition.note .mdl-button--icon .admonition-title:before,.admonition.seealso .mdl-button--icon .admonition-title:before,.admonition.tip .mdl-button--icon .admonition-title:before,.admonition.warning .mdl-button--icon .admonition-title:before,.mdl-button--icon .admonition.attention .admonition-title:before,.mdl-button--icon .admonition.caution .admonition-title:before,.mdl-button--icon .admonition.danger .admonition-title:before,.mdl-button--icon .admonition.error .admonition-title:before,.mdl-button--icon .admonition.hint .admonition-title:before,.mdl-button--icon .admonition.important .admonition-title:before,.mdl-button--icon .admonition.note .admonition-title:before,.mdl-button--icon .admonition.seealso .admonition-title:before,.mdl-button--icon .admonition.tip .admonition-title:before,.mdl-button--icon .admonition.warning .admonition-title:before,.mdl-button--icon .material-icons,.mdl-button--icon a.download:before{position:absolute;top:50%;left:50%;transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--icon.mdl-button--mini-icon{height:24px;min-width:24px;width:24px}.admonition.attention .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.caution .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.danger .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.error .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.hint .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.important .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.note .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.seealso .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.tip .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.warning .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.attention .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.caution .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.danger .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.error .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.hint .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.important .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.note .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.seealso .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.tip .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.warning .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .material-icons,.mdl-button--icon.mdl-button--mini-icon a.download:before{top:0;left:0}.mdl-button--icon .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button__ripple-container{display:block;height:100%;left:0;position:absolute;top:0;width:100%;z-index:0;overflow:hidden}.mdl-button.mdl-button--disabled .mdl-button__ripple-container .mdl-ripple,.mdl-button[disabled] .mdl-button__ripple-container .mdl-ripple{background-color:transparent}.mdl-button--primary.mdl-button--primary{color:#2196f3}.mdl-button--primary.mdl-button--primary .mdl-ripple{background:#fff}.mdl-button--primary.mdl-button--primary.mdl-button--fab,.mdl-button--primary.mdl-button--primary.mdl-button--raised{color:#fff;background-color:#2196f3}.mdl-button--accent.mdl-button--accent{color:#ff6e40}.mdl-button--accent.mdl-button--accent .mdl-ripple{background:#fff}.mdl-button--accent.mdl-button--accent.mdl-button--fab,.mdl-button--accent.mdl-button--accent.mdl-button--raised{color:#fff;background-color:#ff6e40}.mdl-button.mdl-button--disabled.mdl-button--disabled,.mdl-button[disabled][disabled]{color:rgba(0,0,0,.26);cursor:default;background-color:transparent}.mdl-button--fab.mdl-button--disabled.mdl-button--disabled,.mdl-button--fab[disabled][disabled]{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26)}.mdl-button--raised.mdl-button--disabled.mdl-button--disabled,.mdl-button--raised[disabled][disabled]{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26);box-shadow:none}.mdl-button--colored.mdl-button--disabled.mdl-button--disabled,.mdl-button--colored[disabled][disabled]{color:rgba(0,0,0,.26)}.admonition.attention .mdl-button .admonition-title:before,.admonition.caution .mdl-button .admonition-title:before,.admonition.danger .mdl-button .admonition-title:before,.admonition.error .mdl-button .admonition-title:before,.admonition.hint .mdl-button .admonition-title:before,.admonition.important .mdl-button .admonition-title:before,.admonition.note .mdl-button .admonition-title:before,.admonition.seealso .mdl-button .admonition-title:before,.admonition.tip .mdl-button .admonition-title:before,.admonition.warning .mdl-button .admonition-title:before,.mdl-button .admonition.attention .admonition-title:before,.mdl-button .admonition.caution .admonition-title:before,.mdl-button .admonition.danger .admonition-title:before,.mdl-button .admonition.error .admonition-title:before,.mdl-button .admonition.hint .admonition-title:before,.mdl-button .admonition.important .admonition-title:before,.mdl-button .admonition.note .admonition-title:before,.mdl-button .admonition.seealso .admonition-title:before,.mdl-button .admonition.tip .admonition-title:before,.mdl-button .admonition.warning .admonition-title:before,.mdl-button .material-icons,.mdl-button a.download:before{vertical-align:middle}.font-light{font-weight:300}.font-regular{font-weight:400}.font-heavy{font-weight:700}.left{text-align:left}.right{text-align:right}.center{text-align:center;margin-left:auto;margin-right:auto}.justify{text-align:justify}.hidden-sm{display:none}.container{width:100%;margin-left:auto;margin-right:auto}.row{position:relative;width:100%}.row [class^=col]{float:left;margin:.5rem 1%;min-height:.125rem}.row:after{content:"";display:table;clear:both}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12{width:98%}.col-1-sm{width:6.33333%}.col-2-sm{width:14.66667%}.col-3-sm{width:23%}.col-4-sm{width:31.33333%}.col-5-sm{width:39.66667%}.col-6-sm{width:48%}.col-7-sm{width:56.33333%}.col-8-sm{width:64.66667%}.col-9-sm{width:73%}.col-10-sm{width:81.33333%}.col-11-sm{width:89.66667%}.col-12-sm{width:98%}@media only screen and (min-width:45em){.col-1{width:6.33333%}.col-2{width:14.66667%}.col-3{width:23%}.col-4{width:31.33333%}.col-5{width:39.66667%}.col-6{width:48%}.col-7{width:56.33333%}.col-8{width:64.66667%}.col-9{width:73%}.col-10{width:81.33333%}.col-11{width:89.66667%}.col-12{width:98%}.hidden-sm{display:block}}.row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;flex-wrap:wrap}.row>[class*=col-]{display:flex;flex-direction:column}.admonition.attention .admonition-title:before,.admonition.caution .admonition-title:before,.admonition.danger .admonition-title:before,.admonition.error .admonition-title:before,.admonition.hint .admonition-title:before,.admonition.important .admonition-title:before,.admonition.note .admonition-title:before,.admonition.seealso .admonition-title:before,.admonition.tip .admonition-title:before,.admonition.warning .admonition-title:before,.material-icons,a.download:before{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:"liga"}html{font-size:16px}body{display:block!important;background-color:#fafafa;font-size:1rem;line-height:1.5rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}.mdl-layout__content:focus{outline:none}.mdl-layout__content header.mdl-layout__drawer{display:none}.mdl-layout--fixed-drawer>.mdl-layout__content{margin-left:300px}a.download>code.download,blockquote,h1,h2,h3,h4,h5,h6,span.mdl-layout-title{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}.contents,.contents a,.globaltoc a.current,.toc-backref,.toctree-wrapper,.toctree-wrapper a,h1,h2,h3,h4,h5,h6{color:#048ccc!important}a{text-decoration:none}.page-content,.page-content dd,.page-content dl,.page-content dt,.page-content ol,.page-content p,.page-content table,.page-content td,.page-content th,.page-content ul{font-size:1rem}.brand{color:inherit;text-decoration:none}.section{overflow-x:auto}img{max-width:100%;display:block;margin-left:auto;margin-right:auto}div.figure p.caption{text-align:center;margin-top:.75rem}div.figure p.caption span.caption-number{font-style:normal}div.figure p.caption .caption-number:after{content:"\00a0"}.svg-icon{width:16px;height:16px;display:inline-block;fill:#f5f5f5;padding-right:5px;padding-top:4px;vertical-align:text-top}.admonition.attention a.download>i.admonition-title:before,.admonition.caution a.download>i.admonition-title:before,.admonition.danger a.download>i.admonition-title:before,.admonition.error a.download>i.admonition-title:before,.admonition.hint a.download>i.admonition-title:before,.admonition.important a.download>i.admonition-title:before,.admonition.note a.download>i.admonition-title:before,.admonition.seealso a.download>i.admonition-title:before,.admonition.tip a.download>i.admonition-title:before,.admonition.warning a.download>i.admonition-title:before,a.download>i.material-icons{position:relative;top:5px}a.download{text-decoration:none}.wrapper:after{content:"";display:table;clear:both}.wrapper{max-width:1090px;margin-right:auto;margin-left:auto;padding-right:45px;padding-left:30px}@media screen and (max-width:1024px){.wrapper{max-width:1120px;padding-right:15px;padding-left:15px}}.mdl-layout{margin-top:76px}.document{width:100%;margin:0 auto;display:flex}@media (min-width:1795px){.document{width:100%}}.document .page-content{width:100%;margin:0 auto;padding:0 12px}@media (min-width:992px){.document .page-content{width:90%;padding:0 5%}}@media (min-width:1200px){.document .page-content{width:calc(90% - 230px);padding:0 5%}}.document .side-doc-outline{width:230px}@media (max-width:1199px){.document .side-doc-outline{display:none}}.document .side-doc-outline--content{position:fixed;overflow-x:auto;overflow-y:auto;width:inherit;right:0}.document .side-doc-outline--content::-webkit-scrollbar{width:6px}.document .side-doc-outline--content::-webkit-scrollbar-track{border-radius:6px}.document .side-doc-outline--content::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3);border-radius:6px;box-shadow:0 0 0 1px hsla(0,0%,100%,.3)}@keyframes float-in{0%{transform:translateY(.5rem);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes float-out{0%{transform:translateY(0);opacity:1}to{transform:translateY(.5rem);opacity:0}}.page-content .headerlink{display:inline-block;text-decoration:none;margin-left:.8rem;color:inherit;opacity:0}.page-content .headerlink:hover{animation:float-in .2s cubic-bezier(.4,0,.2,1) 0s forwards}.page-content h1 .toc-backref,.page-content h2 .toc-backref,.page-content h3 .toc-backref,.page-content h4 .toc-backref,.page-content h5 .toc-backref,.page-content h6 .toc-backref{text-decoration:none}.page-content h1:hover .headerlink,.page-content h2:hover .headerlink,.page-content h3:hover .headerlink,.page-content h4:hover .headerlink,.page-content h5:hover .headerlink,.page-content h6:hover .headerlink{animation:float-in .2s cubic-bezier(.4,0,.2,1) 0s forwards}.page-content h1{font-size:2rem;line-height:2.25rem}.page-content h2{font-size:1.75rem;line-height:2rem;padding-top:1.5rem;margin-top:0;margin-bottom:1rem}.page-content h3{font-size:1.5rem;line-height:1.75rem;padding-top:1rem;margin-top:0;margin-bottom:.75rem}.page-content h4{font-size:1.25rem;line-height:1.5rem;padding-top:.75rem;margin-top:0;margin-bottom:.5rem}.page-content div.page-content h5{font-size:1.1rem;line-height:1.5rem;padding-top:2rem;margin-top:0;margin-bottom:1rem}.page-content div.page-content h6{font-size:1rem;line-height:1.5rem;padding-top:2rem;margin-top:0;margin-bottom:1rem}.admonition{padding:12px 20px;margin-top:10px;margin-bottom:10px}.admonition p.last{margin:16px}.admonition .admonition-title{font-size:16px;font-weight:700;color:#555;text-transform:uppercase;margin-top:7px}.admonition.note{border-left:4px solid #00bcd4;background-color:rgba(0,188,212,.1)}.admonition.note .admonition-title{font-size:16px;font-weight:700;color:#00bcd4;margin-top:4px;margin-bottom:8px}.admonition.note .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"info_outline";font-size:18px}.admonition.seealso{border-left:4px solid #00bcd4;background-color:rgba(0,188,212,.1)}.admonition.seealso .admonition-title{font-size:16px;font-weight:700;color:#00bcd4;margin-top:4px;margin-bottom:8px}.admonition.seealso .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"search";font-size:18px}.admonition.hint{border-left:4px solid #00bcd4;background-color:rgba(0,188,212,.1)}.admonition.hint .admonition-title{font-size:16px;font-weight:700;color:#00bcd4;margin-top:4px;margin-bottom:8px}.admonition.hint .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"help_outline";font-size:18px}.admonition.warning{border-left:4px solid #ffc107;background-color:rgba(255,193,7,.1)}.admonition.warning .admonition-title{font-size:16px;font-weight:700;color:#ffc107;margin-top:4px;margin-bottom:8px}.admonition.warning .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"warning";font-size:18px}.admonition.attention{border-left:4px solid #ffc107;background-color:rgba(255,193,7,.1)}.admonition.attention .admonition-title{font-size:16px;font-weight:700;color:#ffc107;margin-top:4px;margin-bottom:8px}.admonition.attention .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"warning";font-size:18px}.admonition.tip{border-left:4px solid #8bc34a;background-color:rgba(139,195,74,.1)}.admonition.tip .admonition-title{font-size:16px;font-weight:700;color:#8bc34a;margin-top:4px;margin-bottom:8px}.admonition.tip .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"lightbulb_outline";font-size:18px}.admonition.important{border-left:4px solid #8bc34a;background-color:rgba(139,195,74,.1)}.admonition.important .admonition-title{font-size:16px;font-weight:700;color:#8bc34a;margin-top:4px;margin-bottom:8px}.admonition.important .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"check_circle";font-size:18px}.admonition.error{border-left:4px solid #f44336;background-color:rgba(244,67,54,.1)}.admonition.error .admonition-title{font-size:16px;font-weight:700;color:#f44336;margin-top:4px;margin-bottom:8px}.admonition.error .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"error_outline";font-size:18px}.admonition.caution{border-left:4px solid #f44336;background-color:rgba(244,67,54,.1)}.admonition.caution .admonition-title{font-size:16px;font-weight:700;color:#f44336;margin-top:4px;margin-bottom:8px}.admonition.caution .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"error_outline";font-size:18px}.admonition.danger{border-left:4px solid #f44336;background-color:rgba(244,67,54,.1)}.admonition.danger .admonition-title{font-size:16px;font-weight:700;color:#f44336;margin-top:4px;margin-bottom:8px}.admonition.danger .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"error_outline";font-size:18px}.page-content .highlight{margin:1px 0}.page-content .highlight pre{background:rgba(0,0,0,.05);color:rgba(0,0,0,.87);font-family:Menlo,DejaVu Sans Mono,Liberation Mono,Consolas,Ubuntu Mono,Courier New,andale mono,lucida console,monospace;padding:.75rem;overflow:auto;overflow-y:hidden}.page-content .highlight pre .nd,.page-content .highlight pre .o{color:rgba(0,0,0,.87)}.page-content div.highlight-console div.highlight{background:none}.page-content .output .highlight pre{color:rgba(0,0,0,.87);background:#fafafa;border:1px solid #999;padding:.75rem}.page-content .code,.page-content code:not(.download){margin:0;border-radius:2px}.page-content .code,.page-content .code span.pre,.page-content code:not(.download),.page-content code:not(.download) span.pre{font-family:Menlo,DejaVu Sans Mono,Liberation Mono,Consolas,Ubuntu Mono,Courier New,andale mono,lucida console,monospace}.page-content .viewcode-link{padding-left:2em;font-size:80%}.page-content .class>dt,.page-content .function>dt,.page-content .method>dt,.page-content .rubric{display:table;margin:10px 0;font-size:100%;line-height:normal;background:#e7f2fa;color:#2b98f0;border-top:3px solid #55adf3;padding:10px;position:relative}.page-content .class>dt .descclassname,.page-content .class>dt .descname,.page-content .function>dt .descclassname,.page-content .function>dt .descname,.page-content .method>dt .descclassname,.page-content .method>dt .descname,.page-content .rubric .descclassname,.page-content .rubric .descname{color:rgba(0,0,0,.87);background:#e7f2fa;padding:3px}.page-content .class>dt em,.page-content .function>dt em,.page-content .method>dt em,.page-content .rubric em{padding:0 2px}.page-content .rubric{margin:30px 0 10px}.page-content .field-body{padding-left:40px}.page-content .field-body ul{padding:0 0 0 16px;margin:0}.page-content .seealso .docutils>dt{float:left;clear:left;padding:0 6px}.page-content .seealso .docutils>dd{padding-left:6em}.page-content .nblast{padding-bottom:1em}.page-content pre{font-size:90%;background:#eee;color:#455a64;padding:16px 32px;width:auto;border-radius:4px;word-wrap:break-word}.page-content pre:hover:before{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;padding:0 .5rem;content:attr(click-to-copy);color:rgba(0,0,0,.5);border-radius:4px;position:relative;float:right;top:-.5rem;right:-.5rem;background:#c8c8c8;font-size:.8rem;cursor:pointer}.page-content blockquote{font-size:1rem;padding:0 1rem;border-left:3px solid rgba(0,0,0,.05)}.page-content blockquote:after{content:""!important;margin-left:0}.page-content blockquote:before{content:""!important}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list){margin:1.5rem 0;table-layout:fixed;max-width:100%;min-width:70%}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{white-space:normal;overflow-wrap:break-word}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) caption{font-size:16px;margin:1rem 0 .8rem;white-space:normal}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) caption .caption-number{font-style:normal}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) caption .caption-number:after{content:"\00a0"}.globaltoc .caption,.globaltoc .toc{display:none}.globaltoc ul{list-style-type:none;padding:0;margin:0}.globaltoc ul li{min-height:18px}.globaltoc ul li .link-wrapper{display:flex;justify-content:space-between}.globaltoc ul li .link-wrapper>a{padding:4px 0;display:block;width:100%;font-size:1rem;text-decoration:none;color:#757575}.globaltoc ul li .link-wrapper>a.current{font-weight:700}.globaltoc .nav-toggle{padding:0;float:right;display:flex;align-items:center;justify-content:center;height:36px}.globaltoc .nav-toggle>a{padding:0;margin-left:0;margin-right:4px;cursor:pointer}.globaltoc .nav-toggle>a>i{font-size:18px}.globaltoc .nav-toggle.show{transform:rotate(180deg)}.globaltoc .nav-toggle.show>a{margin-right:0;margin-left:4px}.globaltoc nav>ul>li>span.link-wrapper{padding-left:8px}.globaltoc nav>ul>li>ul>li>span.link-wrapper{padding-left:16px}.globaltoc nav>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:24px}.globaltoc nav>ul>li>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:32px}.globaltoc nav>ul>li>ul>li>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:40px}.globaltoc nav>ul>li>ul>li>ul>li>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:48px}.localtoc{font-size:.75rem;padding-top:1rem}.localtoc .caption{padding-left:12px}.localtoc .caption-text{font-size:.9rem;font-weight:700}.localtoc>ul>li>a{display:none}.localtoc ul{padding:0;list-style-type:none}.localtoc li{padding-left:6px}.localtoc a{display:block;text-decoration:none;color:inherit;margin-top:8px;padding-left:8px;line-height:1.1rem}.localtoc a.current{padding-left:5px;border-left:3px solid;font-weight:700}.contents.topic,.toctree-wrapper{border-left:5px solid}.contents.topic>p.topic-title,.toctree-wrapper>p.caption{color:#757575;font-size:1rem;padding-left:14px}.contents.topic ul,.toctree-wrapper ul{padding-left:14px;list-style:none;line-height:30px}.contents.topic a,.toctree-wrapper a{font-size:1.2rem;text-decoration:none}.contents.topic a .pre,.toctree-wrapper a .pre{font-size:1rem}.contents.topic>ul>li>a,.toctree-wrapper>ul>li>a{font-size:1.3rem}.contents.topic>ul>li>a .pre,.toctree-wrapper>ul>li>a .pre{font-size:1.1rem}.page-content ul li{margin:.3rem 0}.page-content ul li p{margin:0}.page-content .option-list .option{font-family:Menlo,DejaVu Sans Mono,Liberation Mono,Consolas,Ubuntu Mono,Courier New,andale mono,lucida console,monospace}.page-content .option-list td{padding:.5rem;border:none}.mdl-layout__drawer{background-color:#fff}.mdl-layout__drawer::-webkit-scrollbar{width:6px}.mdl-layout__drawer::-webkit-scrollbar-track{border-radius:6px}.mdl-layout__drawer::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3);border-radius:6px;box-shadow:0 0 0 1px hsla(0,0%,100%,.3)}.mdl-layout__drawer>.mdl-layout-title{font-weight:700;text-align:right;margin:0;padding:0;line-height:32px;border-bottom:1px solid rgba(0,0,0,.1);min-height:64px}.mdl-layout__drawer>.mdl-layout-title .title{color:inherit;display:block;height:100%;width:100%;text-decoration:none}.mdl-layout__drawer>.mdl-layout-title .title>img.logo{width:100%;margin:0;padding:0}.mdl-layout__drawer>.mdl-layout-title .title-text{font-weight:700;text-align:right;padding:0 10px;margin:16px 0 8px;line-height:32px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;color:inherit;display:block}nav.breadcrumb>a.mdl-navigation__link{padding:0 8px;font-size:18px}@media (max-width:1199px){nav.breadcrumb{width:calc(100% - 64px)}nav.breadcrumb a.mdl-navigation__link.is-active{overflow-x:hidden;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.admonition.attention nav.breadcrumb i.admonition-title:before,.admonition.caution nav.breadcrumb i.admonition-title:before,.admonition.danger nav.breadcrumb i.admonition-title:before,.admonition.error nav.breadcrumb i.admonition-title:before,.admonition.hint nav.breadcrumb i.admonition-title:before,.admonition.important nav.breadcrumb i.admonition-title:before,.admonition.note nav.breadcrumb i.admonition-title:before,.admonition.seealso nav.breadcrumb i.admonition-title:before,.admonition.tip nav.breadcrumb i.admonition-title:before,.admonition.warning nav.breadcrumb i.admonition-title:before,nav.breadcrumb .admonition.attention i.admonition-title:before,nav.breadcrumb .admonition.caution i.admonition-title:before,nav.breadcrumb .admonition.danger i.admonition-title:before,nav.breadcrumb .admonition.error i.admonition-title:before,nav.breadcrumb .admonition.hint i.admonition-title:before,nav.breadcrumb .admonition.important i.admonition-title:before,nav.breadcrumb .admonition.note i.admonition-title:before,nav.breadcrumb .admonition.seealso i.admonition-title:before,nav.breadcrumb .admonition.tip i.admonition-title:before,nav.breadcrumb .admonition.warning i.admonition-title:before,nav.breadcrumb a.mdl-navigation__link:not(.is-active),nav.breadcrumb i.material-icons{display:none}}div.mdl-layout__header{margin-top:77px}.mdl-layout__drawer-button{top:13px!important}div.mdl-layout__header-row.header-links{background:hsla(0,0%,100%,.2);width:100%;overflow-x:auto;overflow-y:hidden}div.mdl-layout__header-row.header-links a.mdl-navigation__link{font-size:1rem}div.mdl-layout__header-row.header-links a.mdl-navigation__link i{font-size:1.2rem;margin:0 8px;position:relative;bottom:-.1rem}div.mdl-layout__header-row.header-links a.mdl-navigation__link:hover{background-color:#2196f3;color:#eee}div.mdl-layout__header-row.header-links a.mdl-navigation__link[href="#"]{background-color:#2196f3;opacity:1;color:#fff}.site-title{font-weight:300!important;line-height:57px;letter-spacing:-1px;margin-bottom:0;float:left;color:#fff}.site-title,.site-title:visited{color:#424242}.site-header{position:fixed;top:0;width:100%;min-height:55px;padding-top:10px;padding-bottom:10px;background-color:#048ccc;z-index:10;font-weight:300;font-size:17px;border-bottom:1px solid #fff}.site-header-logo{width:120px;display:initial}.site-nav{float:right;line-height:57px}.site-nav .menu-icon,.site-nav .nav-trigger{display:none}.site-nav .page-link{color:#fff;line-height:1.5;font-weight:300}.site-nav .page-link:not(:last-child){margin-right:40px}.site-nav .page-link:hover{color:#fff;text-shadow:-.06ex 0 #fff,.06ex 0 #fff}.site-nav .page-link.page-current{color:#fff;text-decoration:underline}@media screen and (max-width:1024px){.site-nav{position:absolute;top:9px;right:15px;background-color:#178dc9;border-radius:2px;text-align:right}.site-nav label[for=nav-trigger]{display:block;float:right;width:36px;height:36px;z-index:2;cursor:pointer}.site-nav .menu-icon{display:block;float:right;width:36px;height:26px;line-height:0;padding-top:20px;text-align:center}.site-nav .menu-icon>svg{fill:#fff}.site-nav input~.trigger{clear:both;display:none}.site-nav input:checked~.trigger{display:block;padding-bottom:5px}.site-nav .page-link{padding:5px 10px;display:block;margin-left:20px}.site-nav .page-link:not(:last-child){margin-right:0}}footer.mdl-mini-footer{background-color:#212121}footer.mdl-mini-footer>div.mdl-mini-footer__left-section{margin-bottom:20px;display:flex;flex-direction:column}footer.mdl-mini-footer>div.mdl-mini-footer__left-section .mdl-logo{font-size:1.1rem}footer.mdl-mini-footer>div.mdl-mini-footer__right-section{font-size:.9rem;display:flex;flex-direction:column;justify-content:flex-end}footer.mdl-mini-footer>div.mdl-mini-footer__right-section a{color:inherit;font-weight:700;text-decoration:none}footer.mdl-mini-footer p.caption{display:none}.pagenation{width:100%;margin-top:80px;height:92px;background-color:#424242;display:flex}.pagenation #button-next,.pagenation #button-prev,.pagenation .button-common{text-transform:none;padding:0;height:92px;display:flex;justify-content:center;align-items:center;color:#fff}.pagenation #button-prev{margin-right:auto}.pagenation #button-prev .pagenation-text{text-align:left}.pagenation #button-next{margin-left:auto;flex-direction:row-reverse}.pagenation #button-next .pagenation-text{text-align:right}.pagenation-arrow-L{margin-right:20px}.pagenation-arrow-R{margin-left:20px}.pagenation-text{line-height:30px;font-size:20px}.pagenation-direction{opacity:.7;font-size:18px}@media screen and (max-width:1024px){.pagenation #button-prev{width:20%}.pagenation #button-next{width:80%}.pagenation #button-prev .pagenation-text{display:none}}@media screen and (min-width:1025px){.pagenation #button-next,.pagenation #button-prev{width:50%}.pagenation #button-prev .pagenation-text{display:block}}.site-footer{border-top:1px solid #f5f5f5;padding:30px 0;background-color:#424242;position:relative;z-index:10}.site-footer .footer-category-title{color:#048ccc}.site-footer a,.site-footer a:visited{color:#f5f5f5!important}.site-footer2{background-color:#424242;padding-top:40px;padding-bottom:10px;position:relative;z-index:10}.footer-heading{margin-bottom:15px}.contact-list,.social-media-list{list-style:none;margin-left:0}.footer-bottom-warning{font-size:80%;color:#fff;float:left}.footer-logo{width:200px;margin-bottom:30px;margin-top:30px}.footer-col{float:left;margin-bottom:15px;padding-left:15px}.footer-text{color:#f5f5f5}#waterfall-exp::-webkit-input-placeholder{color:#ccc}#waterfall-exp:-ms-input-placeholder{color:#ccc}#waterfall-exp::-moz-placeholder{color:#ccc}ul.search span.highlighted{font-weight:700}ul.search>li{margin-bottom:24px}#search-results ul{list-style:none;padding:0}#search-results ul li>a{text-decoration:none;font-size:1.2rem}a.download:before{content:"file_download";position:relative;top:5px;margin-right:5px}button.download{position:sticky;margin-left:1em}.mdl-card{margin:1em 1.5em 1em 0;display:inline-block;width:250px;min-height:140px;padding:18px}.mdl-card:hover{box-shadow:0 10px 20px rgba(0,0,0,.25),0 6px 6px rgba(0,0,0,.22);color:#000;cursor:pointer}.mdl-card__title{padding:0 0 1em;font-size:18px;color:#444}.mdl-card__supporting-text{line-height:1.5rem;padding:0;width:100%}.head-card.mdl-card{width:auto;display:block;max-width:800px;padding:24px}.head-card>.mdl-card__title{padding-bottom:0;height:60px;font-weight:700;text-transform:uppercase}.head-card>.mdl-card__menu{color:#fff}.head-card>.mdl-card__actions{padding:0}.cards{display:flex;flex-direction:row;flex-wrap:wrap} +.admonition,.mdl-shadow--2dp,.page-content pre:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list){box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-shadow--3dp{box-shadow:0 3px 4px 0 rgba(0,0,0,.14),0 3px 3px -2px rgba(0,0,0,.2),0 1px 8px 0 rgba(0,0,0,.12)}.mdl-shadow--4dp{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2)}.mdl-shadow--6dp{box-shadow:0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.2)}.mdl-shadow--8dp{box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.2)}.mdl-shadow--16dp{box-shadow:0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.2)}.mdl-shadow--24dp{box-shadow:0 9px 46px 8px rgba(0,0,0,.14),0 11px 15px -7px rgba(0,0,0,.12),0 24px 38px 3px rgba(0,0,0,.2)}.mdl-data-table,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list){position:relative;border:1px solid rgba(0,0,0,.12);border-collapse:collapse;white-space:nowrap;font-size:13px;background-color:#fff}.mdl-data-table thead,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) thead{padding-bottom:3px}.mdl-data-table thead .mdl-data-table__select,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) thead .mdl-data-table__select{margin-top:0}.mdl-data-table tbody tr,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) tbody tr{position:relative;height:48px;transition-duration:.28s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-property:background-color}.mdl-data-table tbody tr.is-selected,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) tbody tr.is-selected{background-color:#e0e0e0}.mdl-data-table tbody tr:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) tbody tr:hover{background-color:#eee}.mdl-data-table td,.mdl-data-table th,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{padding:0 18px 12px;text-align:right}.mdl-data-table td:first-of-type,.mdl-data-table th:first-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td:first-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th:first-of-type{padding-left:24px}.mdl-data-table td:last-of-type,.mdl-data-table th:last-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td:last-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th:last-of-type{padding-right:24px}.mdl-data-table td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td{position:relative;vertical-align:middle;height:48px;border-top:1px solid rgba(0,0,0,.12);border-bottom:1px solid rgba(0,0,0,.12);padding-top:12px;box-sizing:border-box}.mdl-data-table td .mdl-data-table__select,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td .mdl-data-table__select{vertical-align:middle}.mdl-data-table th,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{position:relative;vertical-align:bottom;text-overflow:ellipsis;font-size:14px;font-weight:700;line-height:24px;letter-spacing:0;height:48px;font-size:12px;color:rgba(0,0,0,.54);padding-bottom:8px;box-sizing:border-box}.mdl-data-table th.mdl-data-table__header--sorted-ascending,.mdl-data-table th.mdl-data-table__header--sorted-descending,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending{color:rgba(0,0,0,.87)}.mdl-data-table th.mdl-data-table__header--sorted-ascending:before,.mdl-data-table th.mdl-data-table__header--sorted-descending:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:before{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;word-wrap:normal;font-feature-settings:"liga";-webkit-font-feature-settings:"liga";-webkit-font-smoothing:antialiased;font-size:16px;content:"\e5d8";margin-right:5px;vertical-align:sub}.mdl-data-table th.mdl-data-table__header--sorted-ascending:hover,.mdl-data-table th.mdl-data-table__header--sorted-descending:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:hover{cursor:pointer}.mdl-data-table th.mdl-data-table__header--sorted-ascending:hover:before,.mdl-data-table th.mdl-data-table__header--sorted-descending:hover:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending:hover:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:hover:before{color:rgba(0,0,0,.26)}.mdl-data-table th.mdl-data-table__header--sorted-descending:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:before{content:"\e5db"}.mdl-data-table__select{width:16px}.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{text-align:left}.mdl-mini-footer{display:flex;flex-flow:row wrap;justify-content:space-between;padding:32px 16px;color:#9e9e9e;background-color:#424242}.mdl-mini-footer:after{content:"";display:block}.mdl-mini-footer .mdl-logo{line-height:36px}.mdl-mini-footer--link-list,.mdl-mini-footer__link-list,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul{display:flex;flex-flow:row nowrap;list-style:none;margin:0;padding:0}.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul li{margin-bottom:0;margin-right:16px}@media screen and (min-width:760px){.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul li{line-height:36px}}.mdl-mini-footer--link-list a,.mdl-mini-footer__link-list a,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul a{color:inherit;text-decoration:none;white-space:nowrap}.mdl-mini-footer--left-section,.mdl-mini-footer__left-section{display:inline-block;order:0}.mdl-mini-footer--right-section,.mdl-mini-footer__right-section{display:inline-block;order:1}.mdl-mini-footer--social-btn,.mdl-mini-footer__social-btn{width:36px;height:36px;padding:0;margin:0;background-color:#9e9e9e;border:none}.mdl-card{display:flex;flex-direction:column;font-size:16px;font-weight:400;min-height:200px;overflow:hidden;width:330px;z-index:1;position:relative;background:#fff;border-radius:2px;box-sizing:border-box}.mdl-card__media{background-color:#ff6e40;background-repeat:repeat;background-position:50% 50%;background-size:cover;background-origin:padding-box;background-attachment:scroll;box-sizing:border-box}.mdl-card__title{align-items:center;color:#000;display:block;display:flex;justify-content:stretch;line-height:normal;padding:16px;perspective-origin:165px 56px;transform-origin:165px 56px;box-sizing:border-box}.mdl-card__title.mdl-card--border{border-bottom:1px solid rgba(0,0,0,.1)}.mdl-card__title-text{align-self:flex-end;color:inherit;display:block;display:flex;font-size:24px;font-weight:300;line-height:normal;overflow:hidden;transform-origin:149px 48px;margin:0}.mdl-card__subtitle-text{font-size:14px;color:rgba(0,0,0,.54);margin:0}.mdl-card__supporting-text{color:rgba(0,0,0,.54);font-size:1rem;line-height:18px;overflow:hidden;padding:16px;width:90%}.mdl-card__supporting-text.mdl-card--border{border-bottom:1px solid rgba(0,0,0,.1)}.mdl-card__actions{font-size:16px;line-height:normal;width:100%;background-color:transparent;padding:8px;box-sizing:border-box}.mdl-card__actions.mdl-card--border{border-top:1px solid rgba(0,0,0,.1)}.mdl-card--expand{flex-grow:1}.mdl-card__menu{position:absolute;right:16px;top:16px}.mdl-button{background:transparent;border:none;border-radius:2px;color:#000;position:relative;height:36px;margin:0;min-width:64px;padding:0 16px;display:inline-block;font-family:Roboto,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;text-transform:uppercase;line-height:1;letter-spacing:0;overflow:hidden;will-change:box-shadow;transition:box-shadow .2s cubic-bezier(.4,0,1,1),background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1);outline:none;cursor:pointer;text-decoration:none;text-align:center;line-height:36px;vertical-align:middle}.mdl-button::-moz-focus-inner{border:0}.mdl-button:hover{background-color:hsla(0,0%,62%,.2)}.mdl-button:focus:not(:active){background-color:rgba(0,0,0,.12)}.mdl-button:active{background-color:hsla(0,0%,62%,.4)}.mdl-button.mdl-button--colored{color:#2196f3}.mdl-button.mdl-button--colored:focus:not(:active){background-color:rgba(0,0,0,.12)}input.mdl-button[type=submit]{-webkit-appearance:none}.mdl-button--raised{background:hsla(0,0%,62%,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-button--raised:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:hsla(0,0%,62%,.4)}.mdl-button--raised:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:hsla(0,0%,62%,.4)}.mdl-button--raised.mdl-button--colored{background:#2196f3;color:#fff}.mdl-button--raised.mdl-button--colored:active,.mdl-button--raised.mdl-button--colored:focus:not(:active),.mdl-button--raised.mdl-button--colored:hover{background-color:#2196f3}.mdl-button--raised.mdl-button--colored .mdl-ripple{background:#fff}.mdl-button--fab{border-radius:50%;font-size:24px;height:56px;margin:auto;min-width:56px;width:56px;padding:0;overflow:hidden;background:hsla(0,0%,62%,.2);box-shadow:0 1px 1.5px 0 rgba(0,0,0,.12),0 1px 1px 0 rgba(0,0,0,.24);position:relative;line-height:normal}.admonition.attention .mdl-button--fab .admonition-title:before,.admonition.caution .mdl-button--fab .admonition-title:before,.admonition.danger .mdl-button--fab .admonition-title:before,.admonition.error .mdl-button--fab .admonition-title:before,.admonition.hint .mdl-button--fab .admonition-title:before,.admonition.important .mdl-button--fab .admonition-title:before,.admonition.note .mdl-button--fab .admonition-title:before,.admonition.seealso .mdl-button--fab .admonition-title:before,.admonition.tip .mdl-button--fab .admonition-title:before,.admonition.warning .mdl-button--fab .admonition-title:before,.mdl-button--fab .admonition.attention .admonition-title:before,.mdl-button--fab .admonition.caution .admonition-title:before,.mdl-button--fab .admonition.danger .admonition-title:before,.mdl-button--fab .admonition.error .admonition-title:before,.mdl-button--fab .admonition.hint .admonition-title:before,.mdl-button--fab .admonition.important .admonition-title:before,.mdl-button--fab .admonition.note .admonition-title:before,.mdl-button--fab .admonition.seealso .admonition-title:before,.mdl-button--fab .admonition.tip .admonition-title:before,.mdl-button--fab .admonition.warning .admonition-title:before,.mdl-button--fab .material-icons,.mdl-button--fab a.download:before{position:absolute;top:50%;left:50%;transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--fab.mdl-button--mini-fab{height:40px;min-width:40px;width:40px}.mdl-button--fab .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button--fab:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:hsla(0,0%,62%,.4)}.mdl-button--fab:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:hsla(0,0%,62%,.4)}.mdl-button--fab.mdl-button--colored{background:#ff6e40;color:#fff}.mdl-button--fab.mdl-button--colored:active,.mdl-button--fab.mdl-button--colored:focus:not(:active),.mdl-button--fab.mdl-button--colored:hover{background-color:#ff6e40}.mdl-button--fab.mdl-button--colored .mdl-ripple{background:#fff}.mdl-button--icon{border-radius:50%;font-size:24px;height:32px;margin-left:0;margin-right:0;min-width:32px;width:32px;padding:0;overflow:hidden;color:inherit;line-height:normal}.admonition.attention .mdl-button--icon .admonition-title:before,.admonition.caution .mdl-button--icon .admonition-title:before,.admonition.danger .mdl-button--icon .admonition-title:before,.admonition.error .mdl-button--icon .admonition-title:before,.admonition.hint .mdl-button--icon .admonition-title:before,.admonition.important .mdl-button--icon .admonition-title:before,.admonition.note .mdl-button--icon .admonition-title:before,.admonition.seealso .mdl-button--icon .admonition-title:before,.admonition.tip .mdl-button--icon .admonition-title:before,.admonition.warning .mdl-button--icon .admonition-title:before,.mdl-button--icon .admonition.attention .admonition-title:before,.mdl-button--icon .admonition.caution .admonition-title:before,.mdl-button--icon .admonition.danger .admonition-title:before,.mdl-button--icon .admonition.error .admonition-title:before,.mdl-button--icon .admonition.hint .admonition-title:before,.mdl-button--icon .admonition.important .admonition-title:before,.mdl-button--icon .admonition.note .admonition-title:before,.mdl-button--icon .admonition.seealso .admonition-title:before,.mdl-button--icon .admonition.tip .admonition-title:before,.mdl-button--icon .admonition.warning .admonition-title:before,.mdl-button--icon .material-icons,.mdl-button--icon a.download:before{position:absolute;top:50%;left:50%;transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--icon.mdl-button--mini-icon{height:24px;min-width:24px;width:24px}.admonition.attention .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.caution .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.danger .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.error .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.hint .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.important .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.note .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.seealso .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.tip .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.warning .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.attention .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.caution .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.danger .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.error .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.hint .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.important .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.note .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.seealso .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.tip .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.warning .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .material-icons,.mdl-button--icon.mdl-button--mini-icon a.download:before{top:0;left:0}.mdl-button--icon .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button__ripple-container{display:block;height:100%;left:0;position:absolute;top:0;width:100%;z-index:0;overflow:hidden}.mdl-button.mdl-button--disabled .mdl-button__ripple-container .mdl-ripple,.mdl-button[disabled] .mdl-button__ripple-container .mdl-ripple{background-color:transparent}.mdl-button--primary.mdl-button--primary{color:#2196f3}.mdl-button--primary.mdl-button--primary .mdl-ripple{background:#fff}.mdl-button--primary.mdl-button--primary.mdl-button--fab,.mdl-button--primary.mdl-button--primary.mdl-button--raised{color:#fff;background-color:#2196f3}.mdl-button--accent.mdl-button--accent{color:#ff6e40}.mdl-button--accent.mdl-button--accent .mdl-ripple{background:#fff}.mdl-button--accent.mdl-button--accent.mdl-button--fab,.mdl-button--accent.mdl-button--accent.mdl-button--raised{color:#fff;background-color:#ff6e40}.mdl-button.mdl-button--disabled.mdl-button--disabled,.mdl-button[disabled][disabled]{color:rgba(0,0,0,.26);cursor:default;background-color:transparent}.mdl-button--fab.mdl-button--disabled.mdl-button--disabled,.mdl-button--fab[disabled][disabled]{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26)}.mdl-button--raised.mdl-button--disabled.mdl-button--disabled,.mdl-button--raised[disabled][disabled]{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26);box-shadow:none}.mdl-button--colored.mdl-button--disabled.mdl-button--disabled,.mdl-button--colored[disabled][disabled]{color:rgba(0,0,0,.26)}.admonition.attention .mdl-button .admonition-title:before,.admonition.caution .mdl-button .admonition-title:before,.admonition.danger .mdl-button .admonition-title:before,.admonition.error .mdl-button .admonition-title:before,.admonition.hint .mdl-button .admonition-title:before,.admonition.important .mdl-button .admonition-title:before,.admonition.note .mdl-button .admonition-title:before,.admonition.seealso .mdl-button .admonition-title:before,.admonition.tip .mdl-button .admonition-title:before,.admonition.warning .mdl-button .admonition-title:before,.mdl-button .admonition.attention .admonition-title:before,.mdl-button .admonition.caution .admonition-title:before,.mdl-button .admonition.danger .admonition-title:before,.mdl-button .admonition.error .admonition-title:before,.mdl-button .admonition.hint .admonition-title:before,.mdl-button .admonition.important .admonition-title:before,.mdl-button .admonition.note .admonition-title:before,.mdl-button .admonition.seealso .admonition-title:before,.mdl-button .admonition.tip .admonition-title:before,.mdl-button .admonition.warning .admonition-title:before,.mdl-button .material-icons,.mdl-button a.download:before{vertical-align:middle}.font-light{font-weight:300}.font-regular{font-weight:400}.font-heavy{font-weight:700}.left{text-align:left}.right{text-align:right}.center{text-align:center;margin-left:auto;margin-right:auto}.justify{text-align:justify}.hidden-sm{display:none}.container{width:100%;margin-left:auto;margin-right:auto}.row{position:relative;width:100%}.row [class^=col]{float:left;margin:.5rem 1%;min-height:.125rem}.row:after{content:"";display:table;clear:both}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12{width:98%}.col-1-sm{width:6.33333%}.col-2-sm{width:14.66667%}.col-3-sm{width:23%}.col-4-sm{width:31.33333%}.col-5-sm{width:39.66667%}.col-6-sm{width:48%}.col-7-sm{width:56.33333%}.col-8-sm{width:64.66667%}.col-9-sm{width:73%}.col-10-sm{width:81.33333%}.col-11-sm{width:89.66667%}.col-12-sm{width:98%}@media only screen and (min-width:45em){.col-1{width:6.33333%}.col-2{width:14.66667%}.col-3{width:23%}.col-4{width:31.33333%}.col-5{width:39.66667%}.col-6{width:48%}.col-7{width:56.33333%}.col-8{width:64.66667%}.col-9{width:73%}.col-10{width:81.33333%}.col-11{width:89.66667%}.col-12{width:98%}.hidden-sm{display:block}}.row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;flex-wrap:wrap}.row>[class*=col-]{display:flex;flex-direction:column}.admonition.attention .admonition-title:before,.admonition.caution .admonition-title:before,.admonition.danger .admonition-title:before,.admonition.error .admonition-title:before,.admonition.hint .admonition-title:before,.admonition.important .admonition-title:before,.admonition.note .admonition-title:before,.admonition.seealso .admonition-title:before,.admonition.tip .admonition-title:before,.admonition.warning .admonition-title:before,.material-icons,a.download:before{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:"liga"}html{font-size:16px}body{display:block!important;background-color:#fafafa;font-size:1rem;line-height:1.5rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}.mdl-layout__content:focus{outline:none}.mdl-layout__content header.mdl-layout__drawer{display:none}.mdl-layout--fixed-drawer>.mdl-layout__content{margin-left:300px}@media screen and (max-width:1024px){.mdl-layout--fixed-drawer>.mdl-layout__content{margin-left:0}}a.download>code.download,blockquote,h1,h2,h3,h4,h5,h6,span.mdl-layout-title{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}.contents,.contents a,.globaltoc a.current,.toc-backref,.toctree-wrapper,.toctree-wrapper a,h1,h2,h3,h4,h5,h6{color:#048ccc!important}a{text-decoration:none}.page-content,.page-content dd,.page-content dl,.page-content dt,.page-content ol,.page-content p,.page-content table,.page-content td,.page-content th,.page-content ul{font-size:1rem}.brand{color:inherit;text-decoration:none}.section{overflow-x:auto}img{max-width:100%;display:block;margin-left:auto;margin-right:auto}div.figure p.caption{text-align:center;margin-top:.75rem}div.figure p.caption span.caption-number{font-style:normal}div.figure p.caption .caption-number:after{content:"\00a0"}.svg-icon{width:16px;height:16px;display:inline-block;fill:#f5f5f5;padding-right:5px;padding-top:4px;vertical-align:text-top}.admonition.attention a.download>i.admonition-title:before,.admonition.caution a.download>i.admonition-title:before,.admonition.danger a.download>i.admonition-title:before,.admonition.error a.download>i.admonition-title:before,.admonition.hint a.download>i.admonition-title:before,.admonition.important a.download>i.admonition-title:before,.admonition.note a.download>i.admonition-title:before,.admonition.seealso a.download>i.admonition-title:before,.admonition.tip a.download>i.admonition-title:before,.admonition.warning a.download>i.admonition-title:before,a.download>i.material-icons{position:relative;top:5px}a.download{text-decoration:none}.wrapper:after{content:"";display:table;clear:both}.wrapper{max-width:1090px;margin-right:auto;margin-left:auto;padding-right:45px;padding-left:30px}@media screen and (max-width:1024px){.wrapper{max-width:1120px;padding-right:15px;padding-left:15px}}.mdl-layout{margin-top:76px}.document{width:100%;margin:0 auto;display:flex}@media (min-width:1795px){.document{width:100%}}.document .page-content{width:100%;margin:0 auto;padding:0 12px}@media (min-width:992px){.document .page-content{width:90%;padding:0 5%}}@media (min-width:1200px){.document .page-content{width:calc(90% - 230px);padding:0 5%}}.document .side-doc-outline{width:230px}@media (max-width:1199px){.document .side-doc-outline{display:none}}.document .side-doc-outline--content{position:fixed;overflow-x:auto;overflow-y:auto;width:inherit;right:0}.document .side-doc-outline--content::-webkit-scrollbar{width:6px}.document .side-doc-outline--content::-webkit-scrollbar-track{border-radius:6px}.document .side-doc-outline--content::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3);border-radius:6px;box-shadow:0 0 0 1px hsla(0,0%,100%,.3)}@keyframes float-in{0%{transform:translateY(.5rem);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes float-out{0%{transform:translateY(0);opacity:1}to{transform:translateY(.5rem);opacity:0}}.page-content .headerlink{display:inline-block;text-decoration:none;margin-left:.8rem;color:inherit;opacity:0}.page-content .headerlink:hover{animation:float-in .2s cubic-bezier(.4,0,.2,1) 0s forwards}.page-content h1 .toc-backref,.page-content h2 .toc-backref,.page-content h3 .toc-backref,.page-content h4 .toc-backref,.page-content h5 .toc-backref,.page-content h6 .toc-backref{text-decoration:none}.page-content h1:hover .headerlink,.page-content h2:hover .headerlink,.page-content h3:hover .headerlink,.page-content h4:hover .headerlink,.page-content h5:hover .headerlink,.page-content h6:hover .headerlink{animation:float-in .2s cubic-bezier(.4,0,.2,1) 0s forwards}.page-content h1{font-size:2rem;line-height:2.25rem}.page-content h2{font-size:1.75rem;line-height:2rem;padding-top:1.5rem;margin-top:0;margin-bottom:1rem}.page-content h3{font-size:1.5rem;line-height:1.75rem;padding-top:1rem;margin-top:0;margin-bottom:.75rem}.page-content h4{font-size:1.25rem;line-height:1.5rem;padding-top:.75rem;margin-top:0;margin-bottom:.5rem}.page-content div.page-content h5{font-size:1.1rem;line-height:1.5rem;padding-top:2rem;margin-top:0;margin-bottom:1rem}.page-content div.page-content h6{font-size:1rem;line-height:1.5rem;padding-top:2rem;margin-top:0;margin-bottom:1rem}.admonition{padding:12px 20px;margin-top:10px;margin-bottom:10px}.admonition p.last{margin:16px}.admonition .admonition-title{font-size:16px;font-weight:700;color:#555;text-transform:uppercase;margin-top:7px}.admonition.note{border-left:4px solid #00bcd4;background-color:rgba(0,188,212,.1)}.admonition.note .admonition-title{font-size:16px;font-weight:700;color:#00bcd4;margin-top:4px;margin-bottom:8px}.admonition.note .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"info_outline";font-size:18px}.admonition.seealso{border-left:4px solid #00bcd4;background-color:rgba(0,188,212,.1)}.admonition.seealso .admonition-title{font-size:16px;font-weight:700;color:#00bcd4;margin-top:4px;margin-bottom:8px}.admonition.seealso .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"search";font-size:18px}.admonition.hint{border-left:4px solid #00bcd4;background-color:rgba(0,188,212,.1)}.admonition.hint .admonition-title{font-size:16px;font-weight:700;color:#00bcd4;margin-top:4px;margin-bottom:8px}.admonition.hint .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"help_outline";font-size:18px}.admonition.warning{border-left:4px solid #ffc107;background-color:rgba(255,193,7,.1)}.admonition.warning .admonition-title{font-size:16px;font-weight:700;color:#ffc107;margin-top:4px;margin-bottom:8px}.admonition.warning .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"warning";font-size:18px}.admonition.attention{border-left:4px solid #ffc107;background-color:rgba(255,193,7,.1)}.admonition.attention .admonition-title{font-size:16px;font-weight:700;color:#ffc107;margin-top:4px;margin-bottom:8px}.admonition.attention .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"warning";font-size:18px}.admonition.tip{border-left:4px solid #8bc34a;background-color:rgba(139,195,74,.1)}.admonition.tip .admonition-title{font-size:16px;font-weight:700;color:#8bc34a;margin-top:4px;margin-bottom:8px}.admonition.tip .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"lightbulb_outline";font-size:18px}.admonition.important{border-left:4px solid #8bc34a;background-color:rgba(139,195,74,.1)}.admonition.important .admonition-title{font-size:16px;font-weight:700;color:#8bc34a;margin-top:4px;margin-bottom:8px}.admonition.important .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"check_circle";font-size:18px}.admonition.error{border-left:4px solid #f44336;background-color:rgba(244,67,54,.1)}.admonition.error .admonition-title{font-size:16px;font-weight:700;color:#f44336;margin-top:4px;margin-bottom:8px}.admonition.error .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"error_outline";font-size:18px}.admonition.caution{border-left:4px solid #f44336;background-color:rgba(244,67,54,.1)}.admonition.caution .admonition-title{font-size:16px;font-weight:700;color:#f44336;margin-top:4px;margin-bottom:8px}.admonition.caution .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"error_outline";font-size:18px}.admonition.danger{border-left:4px solid #f44336;background-color:rgba(244,67,54,.1)}.admonition.danger .admonition-title{font-size:16px;font-weight:700;color:#f44336;margin-top:4px;margin-bottom:8px}.admonition.danger .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"error_outline";font-size:18px}.page-content .highlight{margin:1px 0}.page-content .highlight pre{background:rgba(0,0,0,.05);color:rgba(0,0,0,.87);font-family:Menlo,DejaVu Sans Mono,Liberation Mono,Consolas,Ubuntu Mono,Courier New,andale mono,lucida console,monospace;padding:.75rem;overflow:auto;overflow-y:hidden}.page-content .highlight pre .nd,.page-content .highlight pre .o{color:rgba(0,0,0,.87)}.page-content div.highlight-console div.highlight{background:none}.page-content .output .highlight pre{color:rgba(0,0,0,.87);background:#fafafa;border:1px solid #999;padding:.75rem}.page-content .code,.page-content code:not(.download){margin:0;border-radius:2px}.page-content .code,.page-content .code span.pre,.page-content code:not(.download),.page-content code:not(.download) span.pre{font-family:Menlo,DejaVu Sans Mono,Liberation Mono,Consolas,Ubuntu Mono,Courier New,andale mono,lucida console,monospace}.page-content .viewcode-link{padding-left:2em;font-size:80%}.page-content .class>dt,.page-content .function>dt,.page-content .method>dt,.page-content .rubric{display:table;margin:10px 0;font-size:100%;line-height:normal;background:#e7f2fa;color:#2b98f0;border-top:3px solid #55adf3;padding:10px;position:relative}.page-content .class>dt .descclassname,.page-content .class>dt .descname,.page-content .function>dt .descclassname,.page-content .function>dt .descname,.page-content .method>dt .descclassname,.page-content .method>dt .descname,.page-content .rubric .descclassname,.page-content .rubric .descname{color:rgba(0,0,0,.87);background:#e7f2fa;padding:3px}.page-content .class>dt em,.page-content .function>dt em,.page-content .method>dt em,.page-content .rubric em{padding:0 2px}.page-content .rubric{margin:30px 0 10px}.page-content .field-body{padding-left:40px}.page-content .field-body ul{padding:0 0 0 16px;margin:0}.page-content .seealso .docutils>dt{float:left;clear:left;padding:0 6px}.page-content .seealso .docutils>dd{padding-left:6em}.page-content .nblast{padding-bottom:1em}.page-content pre{font-size:90%;background:#eee;color:#455a64;padding:16px 32px;width:auto;border-radius:4px;word-wrap:break-word}.page-content pre:hover:before{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;padding:0 .5rem;content:attr(click-to-copy);color:rgba(0,0,0,.5);border-radius:4px;position:relative;float:right;top:-.5rem;right:-.5rem;background:#c8c8c8;font-size:.8rem;cursor:pointer}.page-content blockquote{font-size:1rem;padding:0 1rem;border-left:3px solid rgba(0,0,0,.05)}.page-content blockquote:after{content:""!important;margin-left:0}.page-content blockquote:before{content:""!important}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list){margin:1.5rem 0;table-layout:fixed;max-width:100%;min-width:70%}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{white-space:normal;overflow-wrap:break-word}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) caption{font-size:16px;margin:1rem 0 .8rem;white-space:normal}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) caption .caption-number{font-style:normal}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) caption .caption-number:after{content:"\00a0"}.globaltoc .caption,.globaltoc .toc{display:none}.globaltoc ul{list-style-type:none;padding:0;margin:0}.globaltoc ul li{min-height:18px}.globaltoc ul li .link-wrapper{display:flex;justify-content:space-between}.globaltoc ul li .link-wrapper>a{padding:4px 0;display:block;width:100%;font-size:1rem;text-decoration:none;color:#757575}.globaltoc ul li .link-wrapper>a.current{font-weight:700}.globaltoc .nav-toggle{padding:0;float:right;display:flex;align-items:center;justify-content:center;height:36px}.globaltoc .nav-toggle>a{padding:0;margin-left:0;margin-right:4px;cursor:pointer}.globaltoc .nav-toggle>a>i{font-size:18px}.globaltoc .nav-toggle.show{transform:rotate(180deg)}.globaltoc .nav-toggle.show>a{margin-right:0;margin-left:4px}.globaltoc nav>ul>li>span.link-wrapper{padding-left:8px}.globaltoc nav>ul>li>ul>li>span.link-wrapper{padding-left:16px}.globaltoc nav>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:24px}.globaltoc nav>ul>li>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:32px}.globaltoc nav>ul>li>ul>li>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:40px}.globaltoc nav>ul>li>ul>li>ul>li>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:48px}.localtoc{font-size:.75rem;padding-top:1rem}.localtoc .caption{padding-left:12px}.localtoc .caption-text{font-size:.9rem;font-weight:700}.localtoc>ul>li>a{display:none}.localtoc ul{padding:0;list-style-type:none}.localtoc li{padding-left:6px}.localtoc a{display:block;text-decoration:none;color:inherit;margin-top:8px;padding-left:8px;line-height:1.1rem}.localtoc a.current{padding-left:5px;border-left:3px solid;font-weight:700}.contents.topic,.toctree-wrapper{border-left:5px solid}.contents.topic>p.topic-title,.toctree-wrapper>p.caption{color:#757575;font-size:1rem;padding-left:14px}.contents.topic ul,.toctree-wrapper ul{padding-left:14px;list-style:none;line-height:30px}.contents.topic a,.toctree-wrapper a{font-size:1.2rem;text-decoration:none}.contents.topic a .pre,.toctree-wrapper a .pre{font-size:1rem}.contents.topic>ul>li>a,.toctree-wrapper>ul>li>a{font-size:1.3rem}.contents.topic>ul>li>a .pre,.toctree-wrapper>ul>li>a .pre{font-size:1.1rem}.page-content ul li{margin:.3rem 0}.page-content ul li p{margin:0}.page-content .option-list .option{font-family:Menlo,DejaVu Sans Mono,Liberation Mono,Consolas,Ubuntu Mono,Courier New,andale mono,lucida console,monospace}.page-content .option-list td{padding:.5rem;border:none}.mdl-layout__drawer{background-color:#fff}.mdl-layout__drawer::-webkit-scrollbar{width:6px}.mdl-layout__drawer::-webkit-scrollbar-track{border-radius:6px}.mdl-layout__drawer::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3);border-radius:6px;box-shadow:0 0 0 1px hsla(0,0%,100%,.3)}.mdl-layout__drawer>.mdl-layout-title{font-weight:700;text-align:right;margin:0;padding:0;line-height:32px;border-bottom:1px solid rgba(0,0,0,.1);min-height:64px}.mdl-layout__drawer>.mdl-layout-title .title{color:inherit;display:block;height:100%;width:100%;text-decoration:none}.mdl-layout__drawer>.mdl-layout-title .title>img.logo{width:100%;margin:0;padding:0}.mdl-layout__drawer>.mdl-layout-title .title-text{font-weight:700;text-align:right;padding:0 10px;margin:16px 0 8px;line-height:32px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;color:inherit;display:block}nav.breadcrumb>a.mdl-navigation__link{padding:0 8px;font-size:18px}@media (max-width:1199px){nav.breadcrumb{width:calc(100% - 64px)}nav.breadcrumb a.mdl-navigation__link.is-active{overflow-x:hidden;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.admonition.attention nav.breadcrumb i.admonition-title:before,.admonition.caution nav.breadcrumb i.admonition-title:before,.admonition.danger nav.breadcrumb i.admonition-title:before,.admonition.error nav.breadcrumb i.admonition-title:before,.admonition.hint nav.breadcrumb i.admonition-title:before,.admonition.important nav.breadcrumb i.admonition-title:before,.admonition.note nav.breadcrumb i.admonition-title:before,.admonition.seealso nav.breadcrumb i.admonition-title:before,.admonition.tip nav.breadcrumb i.admonition-title:before,.admonition.warning nav.breadcrumb i.admonition-title:before,nav.breadcrumb .admonition.attention i.admonition-title:before,nav.breadcrumb .admonition.caution i.admonition-title:before,nav.breadcrumb .admonition.danger i.admonition-title:before,nav.breadcrumb .admonition.error i.admonition-title:before,nav.breadcrumb .admonition.hint i.admonition-title:before,nav.breadcrumb .admonition.important i.admonition-title:before,nav.breadcrumb .admonition.note i.admonition-title:before,nav.breadcrumb .admonition.seealso i.admonition-title:before,nav.breadcrumb .admonition.tip i.admonition-title:before,nav.breadcrumb .admonition.warning i.admonition-title:before,nav.breadcrumb a.mdl-navigation__link:not(.is-active),nav.breadcrumb i.material-icons{display:none}}div.mdl-layout__header{margin-top:77px}.mdl-layout__drawer-button{top:13px!important}div.mdl-layout__header-row.header-links{background:hsla(0,0%,100%,.2);width:100%;overflow-x:auto;overflow-y:hidden}div.mdl-layout__header-row.header-links a.mdl-navigation__link{font-size:1rem}div.mdl-layout__header-row.header-links a.mdl-navigation__link i{font-size:1.2rem;margin:0 8px;position:relative;bottom:-.1rem}div.mdl-layout__header-row.header-links a.mdl-navigation__link:hover{background-color:#2196f3;color:#eee}div.mdl-layout__header-row.header-links a.mdl-navigation__link[href="#"]{background-color:#2196f3;opacity:1;color:#fff}.site-title{font-weight:300!important;line-height:57px;letter-spacing:-1px;margin-bottom:0;float:left;color:#fff}.site-title,.site-title:visited{color:#424242}.site-header{position:fixed;top:0;width:100%;min-height:55px;padding-top:10px;padding-bottom:10px;background-color:#048ccc;z-index:10;font-weight:300;font-size:17px;border-bottom:1px solid #fff}.site-header-logo{width:120px;display:initial}.site-nav{float:right;line-height:57px}.site-nav .menu-icon,.site-nav .nav-trigger{display:none}.site-nav .page-link{color:#fff;line-height:1.5;font-weight:300}.site-nav .page-link:not(:last-child){margin-right:40px}.site-nav .page-link:hover{color:#fff;text-shadow:-.06ex 0 #fff,.06ex 0 #fff}.site-nav .page-link.page-current{color:#fff;text-decoration:underline}@media screen and (max-width:1024px){.site-nav{position:absolute;top:9px;right:15px;background-color:#178dc9;border-radius:2px;text-align:right}.site-nav label[for=nav-trigger]{display:block;float:right;width:36px;height:36px;z-index:2;cursor:pointer}.site-nav .menu-icon{display:block;float:right;width:36px;height:26px;line-height:0;padding-top:20px;text-align:center}.site-nav .menu-icon>svg{fill:#fff}.site-nav input~.trigger{clear:both;display:none}.site-nav input:checked~.trigger{display:block;padding-bottom:5px}.site-nav .page-link{padding:5px 10px;display:block;margin-left:20px}.site-nav .page-link:not(:last-child){margin-right:0}}footer.mdl-mini-footer{background-color:#212121}footer.mdl-mini-footer>div.mdl-mini-footer__left-section{margin-bottom:20px;display:flex;flex-direction:column}footer.mdl-mini-footer>div.mdl-mini-footer__left-section .mdl-logo{font-size:1.1rem}footer.mdl-mini-footer>div.mdl-mini-footer__right-section{font-size:.9rem;display:flex;flex-direction:column;justify-content:flex-end}footer.mdl-mini-footer>div.mdl-mini-footer__right-section a{color:inherit;font-weight:700;text-decoration:none}footer.mdl-mini-footer p.caption{display:none}.pagenation{width:100%;margin-top:80px;height:92px;background-color:#424242;display:flex}.pagenation #button-next,.pagenation #button-prev,.pagenation .button-common{text-transform:none;padding:0;height:92px;display:flex;justify-content:center;align-items:center;color:#fff}.pagenation #button-prev{margin-right:auto}.pagenation #button-prev .pagenation-text{text-align:left}.pagenation #button-next{margin-left:auto;flex-direction:row-reverse}.pagenation #button-next .pagenation-text{text-align:right}.pagenation-arrow-L{margin-right:20px}.pagenation-arrow-R{margin-left:20px}.pagenation-text{line-height:30px;font-size:20px}.pagenation-direction{opacity:.7;font-size:18px}@media screen and (max-width:1024px){.pagenation #button-prev{width:20%}.pagenation #button-next{width:80%}.pagenation #button-prev .pagenation-text{display:none}}@media screen and (min-width:1025px){.pagenation #button-next,.pagenation #button-prev{width:50%}.pagenation #button-prev .pagenation-text{display:block}}.site-footer{border-top:1px solid #f5f5f5;padding:30px 0;background-color:#424242;position:relative;z-index:10}.site-footer .footer-category-title{color:#048ccc}.site-footer a,.site-footer a:visited{color:#f5f5f5!important}.site-footer2{background-color:#424242;padding-top:40px;padding-bottom:10px;position:relative;z-index:10}.footer-heading{margin-bottom:15px}.contact-list,.social-media-list{list-style:none;margin-left:0}.footer-bottom-warning{font-size:80%;color:#fff;float:left}.footer-logo{width:200px;margin-bottom:30px;margin-top:30px}.footer-col{float:left;margin-bottom:15px;padding-left:15px}.footer-text{color:#f5f5f5}#waterfall-exp::-webkit-input-placeholder{color:#ccc}#waterfall-exp:-ms-input-placeholder{color:#ccc}#waterfall-exp::-moz-placeholder{color:#ccc}ul.search span.highlighted{font-weight:700}ul.search>li{margin-bottom:24px}#search-results ul{list-style:none;padding:0}#search-results ul li>a{text-decoration:none;font-size:1.2rem}a.download:before{content:"file_download";position:relative;top:5px;margin-right:5px}button.download{position:sticky;margin-left:1em}.mdl-card{margin:1em 1.5em 1em 0;display:inline-block;width:250px;min-height:140px;padding:18px}.mdl-card:hover{box-shadow:0 10px 20px rgba(0,0,0,.25),0 6px 6px rgba(0,0,0,.22);color:#000;cursor:pointer}.mdl-card__title{padding:0 0 1em;font-size:18px;color:#444}.mdl-card__supporting-text{line-height:1.5rem;padding:0;width:100%}.head-card.mdl-card{width:auto;display:block;max-width:800px;padding:24px}.head-card>.mdl-card__title{padding-bottom:0;height:60px;font-weight:700;text-transform:uppercase}.head-card>.mdl-card__menu{color:#fff}.head-card>.mdl-card__actions{padding:0}.cards{display:flex;flex-direction:row;flex-wrap:wrap} /*# sourceMappingURL=/sphinx_materialdesign_theme.css.map */ \ No newline at end of file diff --git a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css.map b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css.map index 6c584d6c93c9..428795213db6 100644 --- a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css.map +++ b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css.map @@ -1 +1 @@ -{"version":3,"sources":["../../node_modules/material-design-lite/src/shadow/_shadow.scss","../../node_modules/material-design-lite/src/_mixins.scss","../../node_modules/material-design-lite/src/data-table/_data-table.scss","../../node_modules/material-design-lite/src/_variables.scss","../../node_modules/material-design-lite/src/footer/_mini_footer.scss","../../node_modules/material-design-lite/src/card/_card.scss","../../node_modules/material-design-lite/src/button/_button.scss","../scss/grid/_simplegrid.scss","../scss/fonts/_material-icons.scss","../scss/_root.scss","../scss/_variables.scss","../scss/layout/_layout.scss","../scss/headerings/_headerings.scss","../scss/admonitions/_admonitions.scss","../scss/code/_code.scss","../scss/blockquote/_blockquote.scss","../scss/tables/_tables.scss","../scss/toc/_globaltoc.scss","../scss/toc/_localtoc.scss","../scss/toc/_toctree.scss","../scss/lists/_lists.scss","../scss/drawer/_drawer.scss","../scss/header/_header.scss","../scss/footer/_footer.scss","../scss/search/_search.scss","../scss/downloadlink/_downloadlink.scss","../scss/card/_card.scss"],"names":[],"mappings":"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","file":"sphinx_materialdesign_theme.css","sourceRoot":"../../src/js","sourcesContent":["/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n@import \"../mixins\";\n\n.mdl-shadow--2dp {\n @include shadow-2dp();\n}\n\n.mdl-shadow--3dp {\n @include shadow-3dp();\n}\n\n.mdl-shadow--4dp {\n @include shadow-4dp();\n}\n\n.mdl-shadow--6dp {\n @include shadow-6dp();\n}\n\n.mdl-shadow--8dp {\n @include shadow-8dp();\n}\n\n.mdl-shadow--16dp {\n @include shadow-16dp();\n}\n\n.mdl-shadow--24dp {\n @include shadow-24dp();\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* Typography */\n\n@mixin typo-preferred-font($usePreferred: true) {\n @if $usePreferred {\n font-family: $preferred_font;\n }\n}\n\n@mixin typo-display-4($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 112px;\n font-weight: 300;\n line-height: 1;\n letter-spacing: -0.04em;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-display-3($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 56px;\n font-weight: 400;\n line-height: 1.35;\n letter-spacing: -0.02em;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-display-2($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 45px;\n font-weight: 400;\n line-height: 48px;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-display-1($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 34px;\n font-weight: 400;\n line-height: 40px;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-headline($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 24px;\n font-weight: 400;\n line-height: 32px;\n -moz-osx-font-smoothing: grayscale;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-title($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 20px;\n font-weight: 500;\n line-height: 1;\n letter-spacing: 0.02em;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-subhead($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 16px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0.04em;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-subhead-2($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 16px;\n font-weight: 400;\n line-height: 28px;\n letter-spacing: 0.04em;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-body-2($colorContrast: false, $usePreferred: false) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n @if $usePreferred {\n font-weight: 500;\n } @else {\n font-weight: bold;\n }\n line-height: 24px;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-body-1($colorContrast: false, $usePreferred: false) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-caption($colorContrast: false, $usePreferred: false) {\n @include typo-preferred-font($usePreferred);\n font-size: 12px;\n font-weight: 400;\n line-height: 1;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-blockquote($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n position: relative;\n font-size: 24px;\n font-weight: 300;\n font-style: italic;\n line-height: 1.35;\n letter-spacing: 0.08em;\n\n &:before {\n position: absolute;\n left: -0.5em;\n content: '“';\n }\n\n &:after {\n content: '”';\n margin-left: -0.05em;\n }\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-menu($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n font-weight: 500;\n line-height: 1;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-button($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n font-weight: 500;\n text-transform: uppercase;\n line-height: 1;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-icon() {\n font-family: 'Material Icons';\n font-weight: normal;\n font-style: normal;\n font-size: 24px;\n line-height: 1;\n letter-spacing: normal;\n text-transform: none;\n display: inline-block;\n word-wrap: normal;\n font-feature-settings: 'liga';\n -webkit-font-feature-settings: 'liga';\n -webkit-font-smoothing: antialiased;\n}\n\n/* Shadows */\n\n// Focus shadow mixin.\n@mixin focus-shadow() {\n box-shadow: 0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);\n}\n\n@mixin shadow-2dp() {\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 3px 1px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),\n 0 1px 5px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);\n}\n@mixin shadow-3dp() {\n box-shadow: 0 3px 4px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 3px 3px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),\n 0 1px 8px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);\n}\n@mixin shadow-4dp() {\n box-shadow: 0 4px 5px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 1px 10px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 2px 4px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n@mixin shadow-6dp() {\n box-shadow: 0 6px 10px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 1px 18px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 3px 5px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n@mixin shadow-8dp() {\n box-shadow: 0 8px 10px 1px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 3px 14px 2px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 5px 5px -3px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n@mixin shadow-16dp() {\n box-shadow: 0 16px 24px 2px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 6px 30px 5px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 8px 10px -5px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n@mixin shadow-24dp() {\n box-shadow: 0 9px 46px 8px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 11px 15px -7px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 24px 38px 3px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n/* Animations */\n\n@mixin material-animation-fast-out-slow-in($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-fast-out-slow-in;\n}\n\n@mixin material-animation-linear-out-slow-in($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-linear-out-slow-in;\n}\n\n@mixin material-animation-fast-out-linear-in($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-fast-out-linear-in;\n}\n\n@mixin material-animation-default($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-default;\n}\n\n/* Dialog */\n\n@mixin dialog-width($units:5) {\n @if(type_of($units) != 'number') {\n @error \"The unit given to dialog-width should be a number.\";\n }\n // 56dp is the base unit width for Dialogs.\n // With 5 units being the number of units for a mobile device.\n // https://goo.gl/sK2O5o\n width: $units * 56px;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n@import \"../mixins\";\n\n.mdl-data-table {\n position: relative;\n border: $data-table-dividers;\n border-collapse: collapse;\n white-space: nowrap;\n font-size: $data-table-font-size;\n background-color: unquote(\"rgb(#{$color-white})\");\n\n thead {\n padding-bottom: 3px;\n\n .mdl-data-table__select {\n margin-top: 0;\n }\n }\n\n tbody {\n tr {\n position: relative;\n height: $data-table-row-height;\n @include material-animation-default(0.28s);\n transition-property: background-color;\n\n &.is-selected {\n background-color: $data-table-selection-color;\n }\n\n &:hover {\n background-color: $data-table-hover-color;\n }\n }\n }\n\n td, th {\n padding: 0 $data-table-column-padding 12px $data-table-column-padding;\n text-align: right;\n\n &:first-of-type {\n padding-left: 24px;\n }\n\n &:last-of-type {\n padding-right: 24px;\n }\n }\n\n td {\n position: relative;\n vertical-align: middle;\n height: $data-table-row-height;\n border-top: $data-table-dividers;\n border-bottom: $data-table-dividers;\n padding-top: $data-table-cell-top;\n box-sizing: border-box;\n\n .mdl-data-table__select {\n vertical-align: middle;\n }\n }\n\n th {\n position: relative;\n vertical-align: bottom;\n text-overflow: ellipsis;\n @include typo-body-2();\n height: $data-table-row-height;\n font-size: $data-table-header-font-size;\n color: $data-table-header-color;\n padding-bottom: 8px;\n box-sizing: border-box;\n\n &.mdl-data-table__header--sorted-ascending,\n &.mdl-data-table__header--sorted-descending {\n color: $data-table-header-sorted-color;\n &:before {\n @include typo-icon;\n font-size: $data-table-header-sort-icon-size;\n content: \"\\e5d8\";\n margin-right: 5px;\n vertical-align: sub;\n }\n &:hover {\n cursor: pointer;\n &:before {\n color: $data-table-header-sorted-icon-hover-color;\n }\n }\n }\n &.mdl-data-table__header--sorted-descending:before {\n content: \"\\e5db\";\n }\n }\n}\n\n.mdl-data-table__select {\n width: 16px;\n}\n\n.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric {\n text-align: left;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n * -----Dialog\n * -----Snackbar\n * -----Tooltip\n * -----Chip\n *\n * Even though all variables have the `!default` directive, most of them\n * should not be changed as they are dependent one another. This can cause\n * visual distortions (like alignment issues) that are hard to track down\n * and fix.\n */\n\n\n/* ========== TYPOGRAPHY ========== */\n\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n$preferred_font: 'Roboto', 'Helvetica', 'Arial', sans-serif !default;\n$performance_font: 'Helvetica', 'Arial', sans-serif !default;\n\n/* ========== COLORS ========== */\n\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n\n@import \"color-definitions\";\n@import \"functions\";\n\n/* ========== IMAGES ========== */\n$image_path: '/images' !default;\n\n/* ========== Color & Themes ========== */\n\n// Define whether individual color palette items should have classes created.\n// Setting this to true will remove individual color classes for each color in the palettes.\n// To improve overall performance (assuming they aren't used) by:\n// * Saving server bandwidth sending the extra classes\n// * Save client computation against the classes\n// it is RECOMMENDED you set this to true.\n$trim-color-classes: false !default;\n\n// Use color primarily for emphasis. Choose colors that fit with\n// your brand and provide good contrast between visual components.\n$color-primary: $palette-indigo-500 !default;\n$color-primary-dark: $palette-indigo-700 !default;\n$color-accent: $palette-pink-A200 !default;\n\n// Our primary is dark, so use $color-dark-contrast for overlaid text.\n$color-primary-contrast: $color-dark-contrast !default;\n// Our accent is dark, so use $color-dark-contrast for overlaid text.\n$color-accent-contrast: $color-dark-contrast !default;\n\n// Replace all colors with placeholders if we're generating a template.\n@if $styleguide-generate-template == true {\n $color-primary: '$color-primary';\n $color-primary-dark: '$color-primary-dark';\n $color-accent: '$color-accent';\n $color-primary-contrast: '$color-primary-contrast';\n $color-accent-contrast: '$color-accent-contrast';\n}\n\n/* ========== Typography ========== */\n\n// We use the following default color styles: text-color-primary and\n// text-color-secondary. For light themes, use text-color-primary-inverse\n// and text-color-secondary-inverse.\n\n$text-color-primary: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$text-link-color: unquote(\"rgb(#{$color-accent})\") !default;\n\n// Define whether to target elements directly for typographic enhancements.\n// Turning this off means you need to use mdl-* classes more often.\n// Other components may also fail to adhere to MD without these rules.\n// It is strongly recommended you leave this as true.\n\n$target-elements-directly: true !default;\n\n/* ========== Components ========== */\n\n/* ========== Standard Buttons ========== */\n\n// Default button colors.\n$button-primary-color: unquote(\"rgba(#{$palette-grey-500}, 0.20)\") !default;\n$button-secondary-color: unquote(\"rgb(#{$color-black})\") !default;\n$button-hover-color: $button-primary-color !default;\n$button-active-color: unquote(\"rgba(#{$palette-grey-500}, 0.40)\") !default;\n$button-focus-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n// Colored button colors.\n$button-primary-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-secondary-color-alt: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n$button-hover-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-active-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-focus-color-alt: $button-focus-color !default;\n\n// Ripple color for colored raised buttons.\n$button-ripple-color-alt: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n\n// Disabled button colors.\n$button-primary-color-disabled: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n$button-secondary-color-disabled: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n// FAB colors and sizes.\n$button-fab-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-hover-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-active-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-text-color-alt: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n$button-fab-ripple-color-alt: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n\n// Icon button colors and sizes.\n$button-icon-color: unquote(\"rgb(#{$palette-grey-700})\") !default;\n$button-icon-focus-color: $button-focus-color !default;\n\n/* ========== Icon Toggles ========== */\n\n$icon-toggle-color: unquote(\"rgb(#{$palette-grey-700})\") !default;\n$icon-toggle-focus-color: $button-focus-color !default;\n$icon-toggle-checked-color: unquote(\"rgb(#{$color-primary})\") !default;\n$icon-toggle-checked-focus-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$icon-toggle-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n/* ========== Radio Buttons ========== */\n\n$radio-color: unquote(\"rgb(#{$color-primary})\") !default;\n$radio-off-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$radio-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n/* ========== Ripple effect ========== */\n\n$ripple-bg-color: unquote(\"rgb(#{$color-light-contrast})\") !default;\n\n/* ========== Layout ========== */\n\n$layout-nav-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n\n// Drawer\n$layout-drawer-bg-color: unquote(\"rgb(#{$palette-grey-50})\") !default;\n$layout-drawer-border-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$layout-text-color: unquote(\"rgb(#{$palette-grey-800})\") !default;\n$layout-drawer-navigation-color: #757575 !default;\n$layout-drawer-navigation-link-active-background: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$layout-drawer-navigation-link-active-color: unquote(\"rgb(#{$color-light-contrast})\") !default;\n\n// Header\n$layout-header-bg-color: unquote(\"rgb(#{$color-primary})\") !default;\n$layout-header-text-color: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n$layout-header-nav-hover-color: unquote(\"rgba(#{$palette-grey-700}, 0.6)\") !default;\n$layout-header-tab-text-color: unquote(\"rgba(#{$color-primary-contrast}, 0.6)\") !default;\n\n// Tabs\n$layout-header-tab-highlight: unquote(\"rgb(#{$color-accent})\") !default;\n\n/* ========== Content Tabs ========== */\n\n$tab-highlight-color: unquote(\"rgb(#{$color-primary})\") !default;\n$tab-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$tab-active-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$tab-border-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n\n/* ========== Checkboxes ========== */\n\n$checkbox-color: unquote(\"rgb(#{$color-primary})\") !default;\n$checkbox-off-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$checkbox-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$checkbox-focus-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$checkbox-image-path: $image_path;\n\n/* ========== Switches ========== */\n\n$switch-color: unquote(\"rgb(#{$color-primary})\") !default;\n$switch-faded-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$switch-thumb-color: $switch-color !default;\n$switch-track-color: unquote(\"rgba(#{$color-primary}, 0.5)\") !default;\n\n$switch-off-thumb-color: unquote(\"rgb(#{$palette-grey-50})\") !default;\n$switch-off-track-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$switch-disabled-thumb-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n$switch-disabled-track-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n/* ========== Spinner ========== */\n\n$spinner-color-1: unquote(\"rgb(#{$palette-blue-400})\") !default;\n$spinner-color-2: unquote(\"rgb(#{$palette-red-500})\") !default;\n$spinner-color-3: unquote(\"rgb(#{$palette-yellow-600})\") !default;\n$spinner-color-4: unquote(\"rgb(#{$palette-green-500})\") !default;\n\n$spinner-single-color: unquote(\"rgb(#{$color-primary})\") !default;\n\n/* ========== Text fields ========== */\n\n$input-text-background-color: transparent !default;\n$input-text-label-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$input-text-bottom-border-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n$input-text-highlight-color: unquote(\"rgb(#{$color-primary})\") !default;\n$input-text-disabled-color: $input-text-bottom-border-color !default;\n$input-text-disabled-text-color: $input-text-label-color !default;\n$input-text-error-color: unquote(\"rgb(#{$palette-red-A700})\") !default;\n\n/* ========== Card ========== */\n\n$card-background-color: unquote(\"rgb(#{$color-white})\") !default;\n$card-text-color: unquote(\"rgb(#{$color-black})\") !default;\n$card-image-placeholder-color: unquote(\"rgb(#{$color-accent})\") !default;\n$card-supporting-text-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$card-border-color: rgba(0,0,0,0.1) !default;\n$card-subtitle-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n\n/* ========== Sliders ========== */\n\n$range-bg-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$range-color: unquote(\"rgb(#{$color-primary})\") !default;\n$range-faded-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$range-bg-focus-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n/* ========== Progress ========== */\n$progress-main-color: unquote(\"rgb(#{$color-primary})\") !default;\n$progress-secondary-color: unquote(\"rgba(#{$color-primary-contrast}, 0.7)\") !default;\n$progress-fallback-buffer-color: unquote(\"rgba(#{$color-primary-contrast}, 0.9)\") !default;\n$progress-image-path: $image_path;\n\n/* ========== List ========== */\n\n$list-main-text-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$list-supporting-text-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$list-icon-color: unquote(\"rgb(#{$palette-grey-600})\") !default;\n$list-avatar-color: white !default;\n\n/* ========== Item ========== */\n\n// Default Item Colors\n$default-item-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$default-item-outline-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n$default-item-hover-bg-color: unquote(\"rgb(#{$palette-grey-200})\") !default;\n$default-item-focus-bg-color: unquote(\"rgb(#{$palette-grey-200})\") !default;\n$default-item-active-bg-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$default-item-divider-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n// Disabled Button Colors\n$disabled-item-text-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n\n/* ========== Dropdown menu ========== */\n\n$default-dropdown-bg-color: unquote(\"rgb(#{$color-white})\") !default;\n\n/* ========== Tooltips ========== */\n\n$tooltip-text-color: unquote(\"rgb(#{$color-white})\") !default;\n$tooltip-background-color: unquote(\"rgba(#{$palette-grey-700}, 0.9)\") !default;\n\n/* ========== Footer ========== */\n\n$footer-bg-color: unquote(\"rgb(#{$palette-grey-800})\") !default;\n$footer-color: unquote(\"rgb(#{$palette-grey-500})\") !default;\n$footer-heading-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$footer-button-fill-color: $footer-color !default;\n$footer-underline-color: $footer-color !default;\n\n\n/* TEXTFIELD */\n\n$input-text-font-size: 16px !default;\n$input-text-width: 100% !default;\n$input-text-padding: 4px !default;\n$input-text-vertical-spacing: 20px !default;\n\n$input-text-button-size: 32px !default;\n$input-text-floating-label-fontsize: 12px !default;\n$input-text-expandable-icon-top: 16px !default;\n\n\n/* SWITCH */\n\n$switch-label-font-size: 16px !default;\n$switch-label-height: 24px !default;\n$switch-track-height: 14px !default;\n$switch-track-length: 36px !default;\n$switch-thumb-size: 20px !default;\n$switch-track-top: ($switch-label-height - $switch-track-height) / 2 !default;\n$switch-thumb-top: ($switch-label-height - $switch-thumb-size) / 2 !default;\n$switch-ripple-size: $switch-label-height * 2 !default;\n$switch-helper-size: 8px !default;\n\n/* SPINNER */\n\n$spinner-size: 28px !default;\n$spinner-stroke-width: 3px !default;\n\n// Amount of circle the arc takes up.\n$spinner-arc-size: 270deg !default;\n// Time it takes to expand and contract arc.\n$spinner-arc-time: 1333ms !default;\n// How much the start location of the arc should rotate each time.\n$spinner-arc-start-rot: 216deg !default;\n\n$spinner-duration: 360 * $spinner-arc-time / (\n strip-units($spinner-arc-start-rot + (360deg - $spinner-arc-size)));\n\n\n/* RADIO */\n\n$radio-label-font-size: 16px !default;\n$radio-label-height: 24px !default;\n$radio-button-size: 16px !default;\n$radio-inner-margin: $radio-button-size / 4;\n$radio-padding: 8px !default;\n$radio-top-offset: ($radio-label-height - $radio-button-size) / 2;\n$radio-ripple-size: 42px !default;\n\n\n/* MENU */\n\n$menu-expand-duration: 0.3s !default;\n$menu-fade-duration: 0.2s !default;\n\n/* LIST */\n\n$list-border: 8px !default;\n$list-min-height: 48px !default;\n$list-min-padding: 16px !default;\n$list-bottom-padding: 20px !default;\n$list-avatar-text-left-distance: 72px !default;\n$list-icon-text-left-distance: 72px !default;\n\n$list-avatar-size: 40px !default;\n$list-icon-size: 24px !default;\n\n$list-two-line-height: 72px !default;\n$list-three-line-height: 88px !default;\n\n/* LAYOUT */\n\n$layout-drawer-narrow: 240px !default;\n$layout-drawer-wide: 456px !default;\n$layout-drawer-width: $layout-drawer-narrow !default;\n\n$layout-header-icon-size: 32px !default;\n$layout-screen-size-threshold: 1024px !default;\n$layout-header-icon-margin: 24px !default;\n$layout-drawer-button-mobile-size: 32px !default;\n$layout-drawer-button-desktop-size: 48px !default;\n\n$layout-header-mobile-row-height: 56px !default;\n$layout-mobile-header-height: $layout-header-mobile-row-height;\n$layout-header-desktop-row-height: 64px !default;\n$layout-desktop-header-height: $layout-header-desktop-row-height;\n\n$layout-header-desktop-baseline: 80px !default;\n$layout-header-mobile-baseline: 72px !default;\n$layout-header-mobile-indent: 16px !default;\n$layout-header-desktop-indent: 40px !default;\n\n$layout-tab-font-size: 14px !default;\n$layout-tab-bar-height: 48px !default;\n$layout-tab-mobile-padding: 12px !default;\n$layout-tab-desktop-padding: 24px !default;\n$layout-tab-highlight-thickness: 2px !default;\n\n\n/* ICON TOGGLE */\n\n$icon-toggle-size: 32px !default;\n$icon-toggle-font-size: 24px !default;\n$icon-toggle-ripple-size: 36px !default;\n\n/* FOOTER */\n\n/*mega-footer*/\n$footer-min-padding: 16px !default;\n$footer-padding-sides: 40px !default;\n$footer-heading-font-size: 14px !default;\n$footer-heading-line-height: (1.7 * $footer-heading-font-size) !default;\n$footer-btn-size: 36px !default;\n\n/*mini-footer*/\n$padding: 16px !default;\n$footer-heading-font-size: 24px !default;\n$footer-heading-line-height: (1.5 * $footer-heading-font-size) !default;\n$footer-btn-size: 36px !default;\n\n/* CHECKBOX */\n\n$checkbox-label-font-size: 16px !default;\n$checkbox-label-height: 24px !default;\n$checkbox-button-size: 16px !default;\n$checkbox-inner-margin: 2px !default;\n$checkbox-padding: 8px !default;\n$checkbox-top-offset:\n($checkbox-label-height - $checkbox-button-size - $checkbox-inner-margin) / 2;\n$checkbox-ripple-size: $checkbox-label-height * 1.5;\n\n/* CARD */\n\n/* Card dimensions */\n$card-width: 330px !default;\n$card-height: 200px !default;\n$card-font-size: 16px !default;\n$card-title-font-size: 24px !default;\n$card-subtitle-font-size: 14px !default;\n$card-horizontal-padding: 16px !default;\n$card-vertical-padding: 16px !default;\n\n$card-title-perspective-origin-x: 165px !default;\n$card-title-perspective-origin-y: 56px !default;\n\n$card-title-transform-origin-x: 165px !default;\n$card-title-transform-origin-y: 56px !default;\n\n$card-title-text-transform-origin-x: 149px !default;\n$card-title-text-transform-origin-y: 48px !default;\n\n$card-supporting-text-font-size: 1rem !default;\n$card-supporting-text-line-height: 18px !default;\n\n$card-actions-font-size: 16px !default;\n\n$card-title-text-font-weight: 300 !default;\n$card-z-index: 1 !default;\n\n/* Cover image */\n$card-cover-image-height: 186px !default;\n$card-background-image-url: '' !default;\n\n\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n$button-min-width: 64px !default;\n$button-height: 36px !default;\n$button-padding: 16px !default;\n$button-margin: 4px !default;\n$button-border-radius: 2px !default;\n\n$button-fab-size: 56px !default;\n$button-fab-size-mini: 40px !default;\n$button-fab-font-size: 24px !default;\n\n$button-icon-size: 32px !default;\n$button-icon-size-mini: 24px !default;\n\n\n/* ANIMATION */\n$animation-curve-fast-out-slow-in: cubic-bezier(0.4, 0, 0.2, 1) !default;\n$animation-curve-linear-out-slow-in: cubic-bezier(0, 0, 0.2, 1) !default;\n$animation-curve-fast-out-linear-in: cubic-bezier(0.4, 0, 1, 1) !default;\n\n$animation-curve-default: $animation-curve-fast-out-slow-in !default;\n\n\n/* PROGRESS */\n$bar-height: 4px !default;\n\n/* BADGE */\n$badge-font-size: 12px !default;\n$badge-color: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n$badge-color-inverse: unquote(\"rgb(#{$color-accent})\") !default;\n$badge-background: unquote(\"rgb(#{$color-accent})\") !default;\n$badge-background-inverse: unquote(\"rgba(#{$color-accent-contrast},0.2)\") !default;\n$badge-size : 22px !default;\n$badge-padding: 2px !default;\n$badge-overlap: 12px !default;\n\n/* SHADOWS */\n\n$shadow-key-umbra-opacity: 0.2 !default;\n$shadow-key-penumbra-opacity: 0.14 !default;\n$shadow-ambient-shadow-opacity: 0.12 !default;\n\n/* GRID */\n\n$grid-desktop-columns: 12 !default;\n$grid-desktop-gutter: 16px !default;\n$grid-desktop-margin: 16px !default;\n\n$grid-desktop-breakpoint: 840px !default;\n\n$grid-tablet-columns: 8 !default;\n$grid-tablet-gutter: $grid-desktop-gutter !default;\n$grid-tablet-margin: $grid-desktop-margin !default;\n\n$grid-tablet-breakpoint: 480px !default;\n\n$grid-phone-columns: 4 !default;\n$grid-phone-gutter: $grid-desktop-gutter !default;\n$grid-phone-margin: $grid-desktop-margin !default;\n\n$grid-cell-default-columns: $grid-phone-columns !default;\n$grid-max-columns: $grid-desktop-columns !default;\n\n/* DATA TABLE */\n\n$data-table-font-size: 13px !default;\n$data-table-header-font-size: 12px !default;\n$data-table-header-sort-icon-size: 16px !default;\n\n$data-table-header-color: rgba(#000, 0.54) !default;\n$data-table-header-sorted-color: rgba(#000, 0.87) !default;\n$data-table-header-sorted-icon-hover-color: rgba(#000, 0.26) !default;\n$data-table-divider-color: rgba(#000, 0.12) !default;\n\n$data-table-hover-color: #eeeeee !default;\n$data-table-selection-color: #e0e0e0 !default;\n\n$data-table-dividers: 1px solid $data-table-divider-color !default;\n\n$data-table-row-height: 48px !default;\n$data-table-last-row-height: 56px !default;\n$data-table-header-height: 56px !default;\n\n$data-table-column-spacing: 36px !default;\n$data-table-column-padding: $data-table-column-spacing / 2;\n\n$data-table-card-header-height: 64px !default;\n$data-table-card-title-top: 20px !default;\n$data-table-card-padding: 24px !default;\n$data-table-button-padding-right: 16px !default;\n$data-table-cell-top: $data-table-card-padding / 2;\n\n/* DIALOG */\n$dialog-content-color: $card-supporting-text-text-color;\n\n/* SNACKBAR */\n\n// Hard coded since the color is not present in any palette.\n$snackbar-background-color: #323232 !default;\n$snackbar-tablet-breakpoint: $grid-tablet-breakpoint;\n$snackbar-action-color: unquote(\"rgb(#{$color-accent})\") !default;\n\n/* TOOLTIP */\n$tooltip-font-size: 10px !default;\n$tooltip-font-size-large: 14px !default;\n\n/* CHIP */\n$chip-bg-color: rgb(222, 222, 222) !default;\n$chip-bg-active-color: rgb(214, 214, 214) !default;\n$chip-height: 32px !default;\n$chip-font-size: 13px !default; \n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n\n.mdl-mini-footer {\n display: flex;\n flex-flow: row wrap;\n justify-content: space-between;\n\n padding: ($padding * 2) $padding;\n\n color: $footer-color;\n background-color: $footer-bg-color;\n\n &:after {\n content: '';\n display: block;\n }\n\n & .mdl-logo {\n line-height: $footer-btn-size;\n }\n}\n\n.mdl-mini-footer--link-list,\n.mdl-mini-footer__link-list {\n display: flex;\n flex-flow: row nowrap;\n\n list-style: none;\n\n margin: 0;\n padding: 0;\n\n & li {\n margin-bottom: 0;\n margin-right: $padding;\n\n @media screen and (min-width: 760px) {\n line-height: $footer-btn-size;\n }\n }\n\n & a {\n color: inherit;\n text-decoration: none;\n white-space: nowrap;\n }\n}\n\n.mdl-mini-footer--left-section,\n.mdl-mini-footer__left-section {\n display: inline-block;\n order: 0;\n}\n\n.mdl-mini-footer--right-section,\n.mdl-mini-footer__right-section {\n display: inline-block;\n order: 1;\n}\n\n.mdl-mini-footer--social-btn,\n.mdl-mini-footer__social-btn {\n width: $footer-btn-size;\n height: $footer-btn-size;\n\n padding: 0;\n margin: 0;\n\n background-color: $footer-button-fill-color;\n\n border: none;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n\n.mdl-card {\n display: flex;\n flex-direction: column;\n font-size: $card-font-size;\n font-weight: 400;\n min-height: $card-height;\n overflow: hidden;\n width: $card-width;\n z-index: $card-z-index;\n position: relative;\n background: $card-background-color;\n border-radius: 2px;\n box-sizing: border-box;\n}\n\n.mdl-card__media {\n background-color: $card-image-placeholder-color;\n background-repeat: repeat;\n background-position: 50% 50%;\n background-size: cover;\n background-origin: padding-box;\n background-attachment: scroll;\n box-sizing: border-box;\n}\n\n.mdl-card__title {\n align-items: center;\n color: $card-text-color;\n display: block;\n display: flex;\n justify-content: stretch;\n line-height: normal;\n padding: $card-vertical-padding $card-horizontal-padding;\n perspective-origin: $card-title-perspective-origin-x $card-title-perspective-origin-y;\n transform-origin: $card-title-transform-origin-x $card-title-transform-origin-y;\n box-sizing: border-box;\n\n &.mdl-card--border {\n border-bottom: 1px solid $card-border-color;\n }\n}\n\n.mdl-card__title-text {\n align-self: flex-end;\n color: inherit;\n display: block;\n display: flex;\n font-size: $card-title-font-size;\n font-weight: $card-title-text-font-weight;\n line-height: normal;\n overflow: hidden;\n transform-origin: $card-title-text-transform-origin-x $card-title-text-transform-origin-y;\n margin: 0;\n}\n\n.mdl-card__subtitle-text {\n font-size: $card-subtitle-font-size;\n color: $card-subtitle-color;\n margin: 0;\n}\n\n.mdl-card__supporting-text {\n color: $card-supporting-text-text-color;\n font-size: $card-supporting-text-font-size;\n line-height: $card-supporting-text-line-height;\n overflow: hidden;\n padding: $card-vertical-padding $card-horizontal-padding;\n width: 90%;\n\n &.mdl-card--border {\n border-bottom: 1px solid $card-border-color;\n }\n}\n\n.mdl-card__actions {\n font-size: $card-actions-font-size;\n line-height: normal;\n width: 100%;\n background-color: rgba(0,0,0,0);\n padding: 8px;\n box-sizing: border-box;\n\n &.mdl-card--border {\n border-top: 1px solid $card-border-color;\n }\n}\n\n.mdl-card--expand {\n flex-grow: 1;\n}\n\n\n.mdl-card__menu {\n position: absolute;\n right: 16px;\n top: 16px;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n@import \"../mixins\";\n\n// The button component. Defaults to a flat button.\n.mdl-button {\n background: transparent;\n border: none;\n border-radius: $button-border-radius;\n color: $button-secondary-color;\n position: relative;\n height: $button-height;\n margin: 0;\n min-width: $button-min-width;\n padding: 0 $button-padding;\n display: inline-block;\n @include typo-button();\n overflow: hidden;\n will-change: box-shadow;\n transition: box-shadow 0.2s $animation-curve-fast-out-linear-in,\n background-color 0.2s $animation-curve-default,\n color 0.2s $animation-curve-default;\n outline: none;\n cursor: pointer;\n text-decoration: none;\n text-align: center;\n line-height: $button-height;\n vertical-align: middle;\n\n &::-moz-focus-inner {\n border: 0;\n }\n\n &:hover {\n background-color: $button-hover-color;\n }\n\n &:focus:not(:active) {\n background-color: $button-focus-color;\n }\n\n &:active {\n background-color: $button-active-color;\n }\n\n &.mdl-button--colored {\n color: $button-primary-color-alt;\n\n &:focus:not(:active) {\n background-color: $button-focus-color-alt;\n }\n }\n}\n\ninput.mdl-button[type=\"submit\"] {\n -webkit-appearance:none;\n}\n\n // Raised buttons\n .mdl-button--raised {\n background: $button-primary-color;\n @include shadow-2dp();\n\n &:active {\n @include shadow-4dp();\n background-color: $button-active-color;\n }\n\n &:focus:not(:active) {\n @include focus-shadow();\n background-color: $button-active-color;\n }\n\n &.mdl-button--colored {\n background: $button-primary-color-alt;\n color: $button-secondary-color-alt;\n\n &:hover {\n background-color: $button-hover-color-alt;\n }\n\n &:active {\n background-color: $button-active-color-alt;\n }\n\n &:focus:not(:active) {\n background-color: $button-active-color-alt;\n }\n\n & .mdl-ripple {\n background: $button-ripple-color-alt;\n }\n }\n }\n\n\n // FABs\n .mdl-button--fab {\n border-radius: 50%;\n font-size: $button-fab-font-size;\n height: $button-fab-size;\n margin: auto;\n min-width: $button-fab-size;\n width: $button-fab-size;\n padding: 0;\n overflow: hidden;\n background: $button-primary-color;\n box-shadow: 0 1px 1.5px 0 rgba(0,0,0,0.12), 0 1px 1px 0 rgba(0,0,0,0.24);\n position: relative;\n line-height: normal;\n\n & .material-icons {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(- $button-fab-font-size / 2, - $button-fab-font-size / 2);\n line-height: $button-fab-font-size;\n width: $button-fab-font-size;\n }\n\n &.mdl-button--mini-fab {\n height: $button-fab-size-mini;\n min-width: $button-fab-size-mini;\n width: $button-fab-size-mini;\n }\n\n & .mdl-button__ripple-container {\n border-radius: 50%;\n // Fixes clipping bug in Safari.\n -webkit-mask-image: -webkit-radial-gradient(circle, white, black);\n }\n\n &:active {\n @include shadow-4dp();\n background-color: $button-active-color;\n }\n\n &:focus:not(:active) {\n @include focus-shadow();\n background-color: $button-active-color;\n }\n\n &.mdl-button--colored {\n background: $button-fab-color-alt;\n color: $button-fab-text-color-alt;\n\n &:hover {\n background-color: $button-fab-hover-color-alt;\n }\n\n &:focus:not(:active) {\n background-color: $button-fab-active-color-alt;\n }\n\n &:active {\n background-color: $button-fab-active-color-alt;\n }\n\n & .mdl-ripple {\n background: $button-fab-ripple-color-alt;\n }\n }\n }\n\n\n // Icon buttons\n .mdl-button--icon {\n border-radius: 50%;\n font-size: $button-fab-font-size;\n height: $button-icon-size;\n margin-left: 0;\n margin-right: 0;\n min-width: $button-icon-size;\n width: $button-icon-size;\n padding: 0;\n overflow: hidden;\n color: inherit;\n line-height: normal;\n\n & .material-icons {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(- $button-fab-font-size / 2, - $button-fab-font-size / 2);\n line-height: $button-fab-font-size;\n width: $button-fab-font-size;\n }\n\n &.mdl-button--mini-icon {\n height: $button-icon-size-mini;\n min-width: $button-icon-size-mini;\n width: $button-icon-size-mini;\n\n & .material-icons {\n top: ($button-icon-size-mini - $button-fab-font-size) / 2;\n left: ($button-icon-size-mini - $button-fab-font-size) / 2;\n }\n }\n\n & .mdl-button__ripple-container {\n border-radius: 50%;\n // Fixes clipping bug in Safari.\n -webkit-mask-image: -webkit-radial-gradient(circle, white, black);\n }\n }\n\n\n // Ripples\n .mdl-button__ripple-container {\n display: block;\n height: 100%;\n left: 0px;\n position: absolute;\n top: 0px;\n width: 100%;\n z-index: 0;\n overflow: hidden;\n\n .mdl-button[disabled] & .mdl-ripple,\n .mdl-button.mdl-button--disabled & .mdl-ripple {\n background-color: transparent;\n }\n }\n\n// Colorized buttons\n\n.mdl-button--primary.mdl-button--primary {\n color: $button-primary-color-alt;\n & .mdl-ripple {\n background: $button-secondary-color-alt;\n }\n &.mdl-button--raised, &.mdl-button--fab {\n color: $button-secondary-color-alt;\n background-color: $button-primary-color-alt;\n }\n}\n\n.mdl-button--accent.mdl-button--accent {\n color: $button-fab-color-alt;\n & .mdl-ripple {\n background: $button-fab-text-color-alt;\n }\n &.mdl-button--raised, &.mdl-button--fab {\n color: $button-fab-text-color-alt;\n background-color: $button-fab-color-alt;\n }\n}\n\n// Disabled buttons\n\n.mdl-button {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n color: $button-secondary-color-disabled;\n cursor: default;\n background-color: transparent;\n }\n\n &--fab {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n background-color: $button-primary-color-disabled;\n color: $button-secondary-color-disabled;\n }\n }\n\n &--raised {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n background-color: $button-primary-color-disabled;\n color: $button-secondary-color-disabled;\n box-shadow: none;\n }\n }\n &--colored {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n color: $button-secondary-color-disabled;\n }\n }\n}\n\n// Align icons inside buttons with text\n.mdl-button .material-icons {\n vertical-align: middle;\n}\n","// SIMPLE GRID - SASS/SCSS\n\n\n// fonts\n$font-weight-light: 300;\n$font-weight-regular: 400;\n$font-weight-heavy: 700;\n\n// colors\n$dark-grey: #333447;\n$dark-gray: #333447; // for the Americans\n\n\n.font-light {\n font-weight: $font-weight-light;\n}\n\n.font-regular {\n font-weight: $font-weight-regular;\n}\n\n.font-heavy {\n font-weight: $font-weight-heavy;\n}\n\n// utility\n\n.left {\n text-align: left;\n}\n\n.right {\n text-align: right;\n}\n\n.center {\n text-align: center;\n margin-left: auto;\n margin-right: auto;\n}\n\n.justify {\n text-align: justify;\n}\n\n.hidden-sm {\n display: none;\n}\n\n// grid\n\n$width: 98%;\n$gutter: 2%;\n$breakpoint-small: 33.75em; // 540px\n$breakpoint-med: 45em; // 720px\n$breakpoint-large: 60em; // 960px\n\n.container {\n width: 100%;\n margin-left: auto;\n margin-right: auto;\n}\n\n.row {\n position: relative;\n width: 100%;\n}\n\n.row [class^=\"col\"] {\n float: left;\n margin: 0.5rem 1%;\n min-height: 0.125rem;\n}\n\n.row::after {\n content: \"\";\n display: table;\n clear: both;\n}\n\n.col-1,\n.col-2,\n.col-3,\n.col-4,\n.col-5,\n.col-6,\n.col-7,\n.col-8,\n.col-9,\n.col-10,\n.col-11,\n.col-12 {\n width: $width;\n}\n\n.col-1-sm {\n width: ($width / 12) - ($gutter * 11 / 12);\n}\n\n.col-2-sm {\n width: ($width / 6) - ($gutter * 10 / 12);\n}\n\n.col-3-sm {\n width: ($width / 4) - ($gutter * 9 / 12);\n}\n\n.col-4-sm {\n width: ($width / 3) - ($gutter * 8 / 12);\n}\n\n.col-5-sm {\n width: ($width / (12 / 5)) - ($gutter * 7 / 12);\n}\n\n.col-6-sm {\n width: ($width / 2) - ($gutter * 6 / 12);\n}\n\n.col-7-sm {\n width: ($width / (12 / 7)) - ($gutter * 5 / 12);\n}\n\n.col-8-sm {\n width: ($width / (12 / 8)) - ($gutter * 4 / 12);\n}\n\n.col-9-sm {\n width: ($width / (12 / 9)) - ($gutter * 3 / 12);\n}\n\n.col-10-sm {\n width: ($width / (12 / 10)) - ($gutter * 2 / 12);\n}\n\n.col-11-sm {\n width: ($width / (12 / 11)) - ($gutter * 1 / 12);\n}\n\n.col-12-sm {\n width: $width;\n}\n\n@media only screen and (min-width: $breakpoint-med) {\n .col-1 {\n width: ($width / 12) - ($gutter * 11 / 12);\n }\n .col-2 {\n width: ($width / 6) - ($gutter * 10 / 12);\n }\n .col-3 {\n width: ($width / 4) - ($gutter * 9 / 12);\n }\n .col-4 {\n width: ($width / 3) - ($gutter * 8 / 12);\n }\n .col-5 {\n width: ($width / (12 / 5)) - ($gutter * 7 / 12);\n }\n .col-6 {\n width: ($width / 2) - ($gutter * 6 / 12);\n }\n .col-7 {\n width: ($width / (12 / 7)) - ($gutter * 5 / 12);\n }\n .col-8 {\n width: ($width / (12 / 8)) - ($gutter * 4 / 12);\n }\n .col-9 {\n width: ($width / (12 / 9)) - ($gutter * 3 / 12);\n }\n .col-10 {\n width: ($width / (12 / 10)) - ($gutter * 2 / 12);\n }\n .col-11 {\n width: ($width / (12 / 11)) - ($gutter * 1 / 12);\n }\n .col-12 {\n width: $width;\n }\n\n .hidden-sm {\n display: block;\n }\n}\n\n.row {\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n flex-wrap: wrap;\n}\n\n.row > [class*='col-'] {\n display: flex;\n flex-direction: column;\n}\n","\n/*\nMaterial Icons\n*/\n\n.material-icons {\n font-family: 'Material Icons';\n font-weight: normal;\n font-style: normal;\n font-size: 24px; /* Preferred icon size */\n display: inline-block;\n line-height: 1;\n text-transform: none;\n letter-spacing: normal;\n word-wrap: normal;\n white-space: nowrap;\n direction: ltr;\n \n /* Support for all WebKit browsers. */\n -webkit-font-smoothing: antialiased;\n /* Support for Safari and Chrome. */\n text-rendering: optimizeLegibility;\n \n /* Support for Firefox. */\n -moz-osx-font-smoothing: grayscale;\n \n /* Support for IE. */\n font-feature-settings: 'liga';\n }","html {\n font-size: $font_size;\n}\n\nbody {\n display: block !important;\n background-color: $background_color;\n font-size: 1rem;\n line-height: 1.5rem;\n font-family: $body_font_family;\n}\n\n.mdl-layout__content:focus {\n outline: none;\n }\n\n.mdl-layout__content header.mdl-layout__drawer {\n display: none;\n}\n\n.mdl-layout--fixed-drawer>.mdl-layout__content {\n margin-left: 300px; \n}\n\nh1, h2, h3, h4, h5, h6, blockquote, span.mdl-layout-title,\na.download > code.download {\n font-family: $body_font_family;\n}\n\nh1, h2, h3, h4, h5, h6, .toc-backref, .contents, .toctree-wrapper, .contents a, .toctree-wrapper a, .globaltoc a.current {\n color: $color-mxnet !important;\n}\n\na {\n text-decoration: none;\n}\n\n.page-content {\n font-size: 1rem;\n p, ul, ol, dl, dd, dt, table, th, td {\n font-size: 1rem;\n }\n}\n\n.brand {\n color: inherit;\n text-decoration: none;\n}\n\n.section {\n overflow-x: auto;\n}\n\n\n/*\n * Figure Directive Styles\n */\n img {\n max-width: 100%;\n display: block;\n margin-left: auto;\n margin-right: auto;\n }\n\ndiv.figure {\n p.caption {\n text-align: center;\n margin-top: .75rem;\n\n span.caption-number {\n font-style: normal;\n }\n .caption-number::after {\n content: \"\\00a0\";\n }\n }\n}\n\n.svg-icon {\n width: 16px;\n height: 16px;\n display: inline-block;\n fill: $grey-color-light;\n padding-right: 5px;\n padding-top: 4px;\n vertical-align: text-top;\n}\n\n/*\n * Download Link Styles\n */\na.download > i.material-icons {\n position: relative;\n top: 5px;\n}\n\na.download {\n text-decoration: none;\n}\n\n%clearfix:after {\n content: \"\";\n display: table;\n clear: both;\n}\n\n.wrapper {\n max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit} * 2));\n max-width: calc(#{$content-width} - (#{$spacing-unit} * 2));\n margin-right: auto;\n margin-left: auto;\n padding-right: calc(#{$spacing-unit}+15px);\n padding-left: $spacing-unit;\n @extend %clearfix;\n\n @media screen and (max-width: $on-laptop) {\n max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit}));\n max-width: calc(#{$content-width} - (#{$spacing-unit}));\n padding-right: $spacing-unit / 2;\n padding-left: $spacing-unit / 2;\n }\n}\n\n","/*\nVariables\n*/\n$font_size: 16px;\n\n$background_color: #fafafa;\n$code_background: rgba(0,0,0,.05);\n\n$code_font_family: \"Menlo\", \"DejaVu Sans Mono\", \"Liberation Mono\", \"Consolas\", \"Ubuntu Mono\", \"Courier New\", \"andale mono\", \"lucida console\", monospace !default;\n$body_font_family: -apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\" !default;\n$base-font-size: 17px !default;\n\n$xl-breakpoint: 1795px;\n$lg-breakpoint: 1200px;\n$md-breakpoint: 992px;\n$sm-breakpoint: 768px;\n$xs-breakpoint: 576px;\n\n$color-primary: $palette-blue-500;\n$color-primary-dark: $palette-blue-700 !default;\n$color-accent: $palette-deep-orange-A200 !default;\n$color-primary-contrast: $color-white !default;\n$color-accent-contrast: $color-white !default;\n\n\n$base-line-height: 1.5 !default;\n$spacing-unit: 30px !default;\n\n$color-mxnet: rgb(4,140,204);\n$color-mxnet-dark: rgb(4,60,110);\n$grey-color: #828282 !default;\n$grey-color-light: lighten($grey-color, 45%) !default;\n$grey-color-dark: darken($grey-color, 25%) !default;\n\n$table-text-align: left !default;\n\n// Width of the content area\n$content-width: 1150px !default;\n\n$on-palm: 600px !default;\n$on-palm: 900px !default;\n$on-laptop: 1024px !default;","/**\n * Layout Styles\n */\n $layout: (\n document: (\n xl: (\n width: 100%,\n )\n ),\n drawer-container: (\n width: $layout-drawer-width,\n ),\n side-doc-outline: (\n width: 230px,\n ),\n page-content: (\n md: (\n width: 90%,\n padding: 0 5%\n ),\n lg: (\n width: calc( 90% - 230px ),\n padding: 0 5%\n )\n )\n);\n\n.mdl-layout {\n margin-top: 76px;\n}\n\n\n.document {\n width: 100%;\n margin: 0 auto;\n display: flex;\n\n @media (min-width: $xl-breakpoint) {\n width: map-get(map-get(map-get($layout, document), xl), width);\n }\n .page-content {\n width: 100%;\n margin: 0 auto;\n padding: 0 12px;\n\n @media (min-width: $md-breakpoint) {\n width: map-get(map-get(map-get($layout, page-content), md), width);\n padding: map-get(map-get(map-get($layout, page-content), md), padding);\n }\n\n @media (min-width: $lg-breakpoint) {\n width: map-get(map-get(map-get($layout, page-content), lg), width);\n padding: map-get(map-get(map-get($layout, page-content), lg), padding);\n }\n }\n\n .side-doc-outline {\n width: map-get(map-get($layout, side-doc-outline), width);\n\n @media (max-width: $lg-breakpoint - 1) {\n display: none;\n } \n &--content {\n position: fixed;\n overflow-x: auto;\n overflow-y: auto;\n width: inherit;\n right: 0px;\n &::-webkit-scrollbar {\n width: 6px;\n }\n \n &::-webkit-scrollbar-track {\n border-radius: 6px;\n }\n \n &::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, .3);\n border-radius: 6px;\n box-shadow:0 0 0 1px rgba(255, 255, 255, .3);\n }\n }\n }\n\n}","@keyframes float-in {\n 0% {\n transform: translateY(0.5rem);\n opacity: 0;\n }\n\t100% {\n\t\ttransform: translateY(0);\n\t\topacity: 1;\n\t}\n}\n\n@keyframes float-out {\n 0% {\n transform: translateY(0);\n opacity: 1;\n }\n\t100% {\n\t\ttransform: translateY(0.5rem);\n\t\topacity: 0;\n\t}\n}\n\n.page-content {\n .headerlink {\n display: inline-block;\n text-decoration: none;\n margin-left: 0.8rem;\n color: inherit;\n opacity: 0;\n &:hover {\n animation: float-in 0.2s $animation-curve-fast-out-slow-in 0s forwards;\n }\n }\n\n h1, h2, h3, h4, h5, h6 {\n .toc-backref {\n text-decoration: none;\n }\n &:hover {\n .headerlink {\n animation: float-in 0.2s $animation-curve-fast-out-slow-in 0s forwards;\n }\n }\n }\n\n h1 {\n font-size: 2rem;\n line-height: 2.25rem;\n }\n\n h2 {\n font-size: 1.75rem;\n line-height: 2rem;\n padding-top: 1.5rem;\n margin-top: 0;\n margin-bottom: 1rem;\n }\n\n h3 {\n font-size: 1.5rem;\n line-height: 1.75rem;\n padding-top: 1rem;\n margin-top: 0px;\n margin-bottom: .75rem;\n }\n\n h4 {\n font-size: 1.25rem;\n line-height: 1.5rem;\n padding-top: .75rem;\n margin-top: 0px;\n margin-bottom: .5rem;\n }\n\n div.page-content h5 {\n font-size: 1.1rem;\n line-height: 1.5rem;\n padding-top: 2rem;\n margin-top: 0px;\n margin-bottom: 1rem;\n }\n\n div.page-content h6 {\n font-size: 1rem;\n line-height: 1.5rem;\n padding-top: 2rem;\n margin-top: 0px;\n margin-bottom: 1rem;\n }\n\n\n}\n","\n/*\n * Admonition Styles\n */\n $admonitions: (\n hint: (\n font-color: rgb(0, 188, 212),\n background-color: rgba(0, 188, 212, 0.1),\n icon-content: \"help_outline\"\n ),\n note: (\n font-color: rgb(0, 188, 212),\n background-color: rgba(0, 188, 212, 0.1),\n icon-content: \"info_outline\"\n ),\n seealso: (\n font-color: rgb(0, 188, 212),\n background-color: rgba(0, 188, 212, 0.1),\n icon-content: \"search\"\n ),\n warning: (\n font-color: rgb(255, 193, 7),\n background-color: rgba(255, 193, 7, 0.1),\n icon-content: \"warning\"\n ),\n attention: (\n font-color: rgb(255, 193, 7),\n background-color: rgba(255, 193, 7, 0.1),\n icon-content: \"warning\"\n ),\n tip: (\n font-color: rgb(139, 195, 74),\n background-color: rgba(139, 195, 74, 0.1),\n icon-content: \"lightbulb_outline\"\n ),\n important: (\n font-color: rgb(139, 195, 74),\n background-color: rgba(139, 195, 74, 0.1),\n icon-content: \"check_circle\"\n ),\n error: (\n font-color: rgb(244, 67, 54),\n background-color: rgba(244, 67, 54, 0.1),\n icon-content: \"error_outline\"\n ),\n caution: (\n font-color: rgb(244, 67, 54),\n background-color: rgba(244, 67, 54, 0.1),\n icon-content: \"error_outline\"\n ),\n danger: (\n font-color: rgb(244, 67, 54),\n background-color: rgba(244, 67, 54, 0.1),\n icon-content: \"error_outline\"\n )\n);\n\n @mixin admonition-style($type) {\n border-left: solid 4px map-get(map-get($admonitions, $type), font-color);\n background-color: map-get(map-get($admonitions, $type), background-color);\n .admonition-title {\n font-size: 16px;\n font-weight: bold;\n color: map-get(map-get($admonitions, $type), font-color);\n\n margin-top: 4px;\n margin-bottom: 8px;\n &::before {\n @extend .material-icons;\n position: relative;\n margin-right: 5px;\n top: 3px;\n content: map-get(map-get($admonitions, $type), icon-content);\n font-size: 18px;\n }\n }\n}\n\n.admonition {\n @extend .mdl-shadow--2dp;\n\n padding: 12px 20px;\n margin-top: 10px;\n margin-bottom: 10px;\n p.last {\n margin: 16px;\n }\n .admonition-title {\n font-size: 16px;\n font-weight: bold;\n color: #555;\n text-transform: uppercase;\n margin-top: 7px;\n }\n\n @each $type in (note, seealso, hint, warning, attention, tip, important, error, caution, danger) {\n &.#{$type} {\n @include admonition-style($type);\n }\n }\n}\n",".page-content {\n .highlight {\n margin: 1px 0;\n pre {\n background: $code_background;\n color: rgba(0,0,0,.87);\n font-family: $code_font_family;\n padding: 0.75rem;\n overflow: auto;\n overflow-y: hidden;\n .o, .nd {\n color: rgba(0,0,0,.87);\n }\n }\n }\n\n div.highlight-console div.highlight {\n background: none;\n }\n\n // for jupyter notebook output cell\n .output {\n .highlight {\n pre {\n color: rgba(0,0,0,.87);\n background: $background_color;\n border-width: 1px;\n border-color: #999;\n border-style: solid;\n padding: 0.75rem;\n }\n }\n }\n\n .code, code:not(.download) {\n margin: 0 0;\n font-family: $code_font_family;\n border-radius: 2px;\n span.pre {\n font-family: $code_font_family;\n }\n }\n\n .viewcode-link {\n padding-left: 2em;\n font-size: 80%;\n }\n\n .rubric, .method > dt, .function > dt, .class > dt {\n display: table;\n margin: 10px 0;\n font-size: 100%;\n line-height: normal;\n background: #e7f2fa;\n color: #2B98F0;\n border-top: solid 3px #55ADF3;\n padding: 10px;\n position: relative;\n .descname, .descclassname {\n color: rgba(0,0,0,.87);\n background: #e7f2fa;\n padding: 3px;\n }\n em {\n padding: 0 2px;\n }\n }\n\n\n .rubric {\n margin: 30px 0 10px 0;\n }\n\n\n .field-body {\n padding-left: 40px;\n ul {\n padding: 0 0 0 16px;\n margin: 0;\n }\n }\n\n // .docutils > dt {\n // padding: 6px;\n // display: table;\n // margin-bottom: 6px;\n // border: none;\n // border-left: solid 3px #ccc;\n // background: #f0f0f0;\n // color: #555;\n // }\n\n .seealso .docutils > dt {\n float: left;\n clear: left;\n padding: 0 6px;\n }\n\n .seealso .docutils > dd {\n padding-left: 6em;\n }\n .nblast {\n padding-bottom: 1em;\n }\n\n pre {\n font-size: 90%;\n background: #eee;\n color: #455A64;\n padding: 16px 32px;\n width: auto;\n border-radius: 4px;\n word-wrap: break-word;\n\n &:hover {\n @extend .mdl-shadow--2dp;\n\n &:before {\n font-family: $body_font_family;\n padding: 0 0.5rem;\n content: attr(click-to-copy);\n color: rgba(0, 0, 0, 0.5);\n border-radius: 4px;\n position: relative;\n float: right;\n top: -0.5rem;\n right: -0.5rem;\n background: rgb(200, 200, 200);\n font-size: 0.8rem;\n cursor: pointer;\n }\n }\n }\n}\n","/*\n * Quotation Block Styles\n */\n .page-content {\n blockquote {\n font-size: 1rem;\n padding: 0 1rem;\n border-left: 3px solid $code_background;\n\n &:after {\n content: \"\" !important;\n margin-left: 0;\n }\n &:before {\n content: \"\" !important;\n }\n }\n }\n",".page-content {\n table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) {\n @extend .mdl-data-table;\n @extend .mdl-shadow--2dp;\n\n margin: 1.5rem 0;\n table-layout: fixed;\n max-width: 100%;\n min-width: 70%;\n\n th, td {\n @extend .mdl-data-table__cell--non-numeric;\n white-space: normal;\n overflow-wrap: break-word;\n }\n\n caption {\n font-size: $font_size;\n margin: 1rem 0 0.8rem 0;\n white-space: normal;\n .caption-number {\n font-style: normal;\n }\n .caption-number::after {\n content: \"\\00a0\";\n }\n }\n\n }\n}\n",".globaltoc {\n \n .caption, .toc {\n display: none;\n }\n\n ul {\n\n list-style-type: none;\n padding: 0;\n margin: 0;\n\n li {\n min-height: 18px;\n .link-wrapper {\n display: flex;\n justify-content: space-between;\n > a {\n padding: 4px 0;\n display: block;\n width: 100%;\n font-size: 1rem;\n text-decoration: none;\n color: $layout-drawer-navigation-color;\n &.current {\n font-weight: bold;\n }\n }\n }\n }\n }\n\n .nav-toggle {\n padding: 0;\n float: right;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 36px;\n > a {\n padding: 0;\n margin-left: 0;\n margin-right: 4px;\n cursor: pointer;\n > i {\n font-size: 18px;\n }\n }\n &.show {\n transform: rotateZ(180deg);\n > a {\n margin-right: 0;\n margin-left: 4px;\n }\n }\n }\n\n nav {\n > ul > li > span.link-wrapper {\n padding-left: 8px;\n }\n > ul > li > ul > li > span.link-wrapper {\n padding-left: 16px;\n }\n > ul > li > ul > li > ul > li > span.link-wrapper {\n padding-left: 24px;\n }\n > ul > li > ul > li > ul > li > ul> li > span.link-wrapper {\n padding-left: 32px;\n }\n > ul > li > ul > li > ul > li > ul > li > ul> li > span.link-wrapper {\n padding-left: 40px;\n }\n > ul > li > ul > li > ul > li > ul > li > ul > li > ul> li > span.link-wrapper {\n padding-left: 48px;\n }\n }\n}\n",".localtoc {\n font-size: 0.75rem;\n padding-top: 1rem;\n\n .caption {\n padding-left: 12px;\n &-text {\n font-size: 0.9rem;\n font-weight: 700;\n }\n }\n\n > ul > li > a {\n display: none;\n }\n\n ul {\n padding: 0;\n list-style-type: none;\n }\n\n li {\n padding-left: 6px;\n }\n\n a {\n display: block;\n text-decoration: none;\n color: inherit;\n margin-top: 8px;\n padding-left: 8px;\n line-height: 1.1rem;\n \n &.current {\n padding-left: 5px;\n border-left: 3px solid;\n font-weight: bold;\n }\n }\n}","/*\r\n * Toctree and Contents Directive Styles\r\n */\r\n .toctree-wrapper,\r\n .contents.topic {\r\n border-left: 5px solid;\r\n }\r\n\r\n .toctree-wrapper > p.caption,\r\n .contents.topic > p.topic-title {\r\n color: rgb(117, 117, 117);\r\n font-size: 1rem;\r\n padding-left: 14px;\r\n }\r\n\r\n .toctree-wrapper ul,\r\n .contents.topic ul{\r\n padding-left: 14px;\r\n list-style: none;\r\n line-height: 30px;\r\n }\r\n\r\n .toctree-wrapper a,\r\n .contents.topic a {\r\n font-size: 1.2rem;\r\n text-decoration: none;\r\n .pre {\r\n font-size: 1rem;\r\n }\r\n }\r\n\r\n .toctree-wrapper > ul > li > a,\r\n .contents.topic > ul > li > a {\r\n font-size: 1.3rem;\r\n .pre {\r\n font-size: 1.1rem;\r\n }\r\n }\r\n",".page-content {\n ul {\n li {\n margin: .3rem 0;\n p {\n margin: 0;\n }\n }\n }\n .option-list {\n .option {\n font-family: $code_font_family;\n }\n td {\n padding: 0.5rem;\n border: none;\n }\n }\n}\n","/*\r\n * Drawer Styles\r\n */\r\n.mdl-layout {\r\n &__drawer {\r\n background-color: #fff;\r\n\r\n &::-webkit-scrollbar {\r\n width: 6px;\r\n }\r\n\r\n &::-webkit-scrollbar-track {\r\n border-radius: 6px;\r\n }\r\n\r\n &::-webkit-scrollbar-thumb {\r\n background-color: rgba(0, 0, 0, .3);\r\n border-radius: 6px;\r\n box-shadow:0 0 0 1px rgba(255, 255, 255, .3);\r\n }\r\n\r\n > .mdl-layout-title {\r\n font-weight: bold;\r\n text-align: right;\r\n margin: 0;\r\n padding: 0;\r\n line-height: 32px;\r\n border-bottom: 1px solid rgba(0,0,0,.1);\r\n min-height: 64px;\r\n .title {\r\n color: inherit;\r\n display: block;\r\n height: 100%;\r\n width: 100%;\r\n text-decoration: none;\r\n > img.logo {\r\n width: 100%;\r\n margin: 0;\r\n padding: 0;\r\n }\r\n\r\n &-text {\r\n font-weight: bold;\r\n text-align: right;\r\n padding: 0 10px;\r\n margin: 16px 0 8px 0;\r\n line-height: 32px;\r\n font-family: $body_font_family;\r\n color: inherit;\r\n display: block;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","/*\r\n * Header Styles\r\n */\r\n\r\nnav.breadcrumb {\r\n > a.mdl-navigation__link {\r\n padding: 0 8px;\r\n font-size: 18px;\r\n }\r\n @media (max-width: $lg-breakpoint - 1) {\r\n width: calc( 100% - 64px );\r\n a.mdl-navigation__link.is-active {\r\n overflow-x: hidden;\r\n width: 100%;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n }\r\n a.mdl-navigation__link:not(.is-active),\r\n i.material-icons {\r\n display: none;\r\n }\r\n }\r\n}\r\n\r\ndiv.mdl-layout__header {\r\n margin-top: 77px;\r\n}\r\n\r\n.mdl-layout__drawer-button {\r\n top: 13px !important;\r\n}\r\n\r\ndiv.mdl-layout__header-row.header-links {\r\n background: rgba(255,255,255,0.2);\r\n width: 100%;\r\n overflow-x: auto;\r\n overflow-y: hidden;\r\n\r\n a.mdl-navigation__link {\r\n font-size: 1rem;\r\n i {\r\n font-size: 1.2rem;\r\n margin: 0 8px;\r\n position: relative;\r\n bottom: -0.1rem;\r\n }\r\n };\r\n\r\n a.mdl-navigation__link:hover {\r\n background-color: unquote(\"rgb(#{$color-primary})\");\r\n color: #eeeeee;\r\n };\r\n a.mdl-navigation__link[href=\"#\"] {\r\n background-color: unquote(\"rgb(#{$color-primary})\");\r\n opacity: 1;\r\n color: #ffffff;\r\n };\r\n}\r\n\r\n/* mxnet-header */\r\n\r\n\r\n.site-title {\r\n font-weight: 300 !important;\r\n line-height: 57px;\r\n letter-spacing: -1px;\r\n margin-bottom: 0;\r\n float: left;\r\n color: white;\r\n\r\n &,\r\n &:visited {\r\n color: $grey-color-dark;\r\n }\r\n}\r\n\r\n\r\n.site-header {\r\n position: fixed;\r\n top: 0;\r\n width: 100%;\r\n min-height: 55px;\r\n padding-top: 10px;\r\n padding-bottom: 10px;\r\n background-color: $color-mxnet;\r\n z-index: 10;\r\n font-weight: 300;\r\n font-size: 17px;\r\n border-bottom: 1px solid white;\r\n}\r\n\r\n.site-header-logo {\r\n width: 120px;\r\n display: initial;\r\n}\r\n\r\n.site-nav {\r\n float: right;\r\n line-height: 57px;\r\n\r\n .nav-trigger {\r\n display: none;\r\n }\r\n\r\n .menu-icon {\r\n display: none;\r\n }\r\n\r\n .page-link {\r\n color: white;\r\n line-height: 1.5;\r\n font-weight: 300;\r\n // Gaps between nav items, but not on the last one\r\n &:not(:last-child) {\r\n margin-right: 40px;\r\n }\r\n\r\n &:hover {\r\n color: white;\r\n text-shadow: -0.06ex 0 white, 0.06ex 0 white;\r\n }\r\n }\r\n\r\n .page-link.page-current {\r\n color: white;\r\n text-decoration: underline;\r\n }\r\n\r\n @media screen and (max-width: $on-laptop) {\r\n position: absolute;\r\n top: 9px;\r\n right: 15px;\r\n background-color: rgb(23,141,201);\r\n border-radius: 2px;\r\n text-align: right;\r\n\r\n label[for=\"nav-trigger\"] {\r\n display: block;\r\n float: right;\r\n width: 36px;\r\n height: 36px;\r\n z-index: 2;\r\n cursor: pointer;\r\n }\r\n\r\n .menu-icon {\r\n display: block;\r\n float: right;\r\n width: 36px;\r\n height: 26px;\r\n line-height: 0;\r\n padding-top: 20px;\r\n text-align: center;\r\n\r\n > svg {\r\n fill: white;\r\n }\r\n }\r\n\r\n input ~ .trigger {\r\n clear: both;\r\n display: none;\r\n }\r\n\r\n input:checked ~ .trigger {\r\n display: block;\r\n padding-bottom: 5px;\r\n }\r\n\r\n .page-link {\r\n padding: 5px 10px;\r\n display: block;\r\n\r\n &:not(:last-child) {\r\n margin-right: 0;\r\n }\r\n\r\n margin-left: 20px;\r\n }\r\n }\r\n}","/*\r\n * Footer Styles\r\n */\r\nfooter.mdl-mini-footer {\r\n background-color: #212121;\r\n > div.mdl-mini-footer__left-section {\r\n margin-bottom: 20px;\r\n display: flex;\r\n flex-direction: column;\r\n .mdl-logo {\r\n font-size: 1.1rem;\r\n }\r\n ul {\r\n @extend .mdl-mini-footer__link-list;\r\n }\r\n }\r\n > div.mdl-mini-footer__right-section {\r\n font-size: 0.9rem;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: flex-end;\r\n\r\n a {\r\n color: inherit;\r\n font-weight: bold;\r\n text-decoration: none;\r\n }\r\n }\r\n p.caption {\r\n display: none;\r\n }\r\n}\r\n\r\n/*\r\n * Pagenation Block Styles\r\n */\r\n .pagenation {\r\n width: 100%;\r\n margin-top: 80px;\r\n height: 92px;\r\n background-color: #424242;\r\n display: flex;\r\n\r\n .button-common {\r\n text-transform: none;\r\n padding: 0;\r\n height: 92px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n color: #ffffff;\r\n }\r\n #button-prev {\r\n @extend .button-common;\r\n margin-right: auto;\r\n .pagenation-text {\r\n text-align: left;\r\n }\r\n \r\n }\r\n #button-next {\r\n @extend .button-common;\r\n margin-left: auto;\r\n flex-direction: row-reverse;\r\n .pagenation-text {\r\n text-align: right;\r\n }\r\n }\r\n\r\n &-arrow {\r\n &-L {\r\n margin-right: 20px;\r\n }\r\n &-R {\r\n margin-left: 20px;\r\n }\r\n }\r\n\r\n &-text {\r\n line-height: 30px;\r\n font-size: 20px;\r\n }\r\n\r\n &-direction {\r\n opacity: 0.7;\r\n font-size: 18px;\r\n }\r\n @media screen and (max-width: 1024px) {\r\n #button-prev {\r\n width: 20%;\r\n }\r\n \r\n #button-next {\r\n width: 80%;\r\n }\r\n \r\n #button-prev .pagenation-text {\r\n display: none;\r\n }\r\n }\r\n @media screen and (min-width: 1025px) {\r\n #button-prev,\r\n #button-next {\r\n width: 50%;\r\n }\r\n \r\n #button-prev .pagenation-text {\r\n display: block;\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n/**\r\n * Site footer\r\n */\r\n.site-footer {\r\n border-top: 1px solid $grey-color-light;\r\n padding: $spacing-unit 0;\r\n background-color: #424242;\r\n position: relative;\r\n z-index: 10;\r\n .footer-category-title {\r\n color: $color-mxnet;\r\n }\r\n a {\r\n color: $grey-color-light !important;\r\n\r\n &:visited {\r\n color: $grey-color-light !important;\r\n }\r\n }\r\n\r\n}\r\n\r\n.site-footer2 {\r\n background-color: #424242;\r\n padding-top: 40px;\r\n padding-bottom: 10px;\r\n position: relative;\r\n z-index: 10;\r\n}\r\n\r\n.footer-heading {\r\n margin-bottom: $spacing-unit / 2;\r\n}\r\n\r\n.contact-list,\r\n.social-media-list {\r\n list-style: none;\r\n margin-left: 0;\r\n}\r\n\r\n\r\n.footer-bottom-warning {\r\n font-size: 80%;\r\n color: white;\r\n float: left;\r\n}\r\n\r\n.footer-logo {\r\n width: 200px;\r\n margin-bottom: 30px;\r\n margin-top: 30px;\r\n}\r\n\r\n.footer-col {\r\n float: left;\r\n margin-bottom: $spacing-unit / 2;\r\n padding-left: $spacing-unit / 2;\r\n}\r\n\r\n.footer-text {\r\n color: $grey-color-light;\r\n}\r\n\r\n"," /*\r\n * Search Styles\r\n */\r\n#waterfall-exp::-webkit-input-placeholder {\r\n color: #ccc;\r\n}\r\n#waterfall-exp:-ms-input-placeholder {\r\n color: #ccc;\r\n}\r\n#waterfall-exp::-moz-placeholder {\r\n color: #ccc;\r\n}\r\n\r\nul.search span.highlighted {\r\n font-weight: bold;\r\n}\r\n\r\nul.search > li {\r\n margin-bottom: 24px;\r\n}\r\n\r\n#search-results {\r\n ul {\r\n list-style: none;\r\n padding: 0;\r\n li {\r\n > a {\r\n text-decoration: none;\r\n font-size: 1.2rem;\r\n }\r\n }\r\n }\r\n}\r\n","a.download {\n &:before {\n @extend .material-icons;\n content: \"file_download\";\n position: relative;\n top: 5px;\n margin-right: 5px;\n }\n}\n\nbutton.download {\n position: sticky;\n margin-left: 1em;\n}\n",".mdl-card {\n margin: 1em 1.5em 1em 0;\n display: inline-block;\n width: 250px;\n min-height: 140px;\n padding: 18px;\n}\n.mdl-card:hover {\n box-shadow: 0 10px 20px rgba(0,0,0,0.25), 0 6px 6px rgba(0,0,0,0.22);\n color: #000;\n cursor: pointer;\n}\n.mdl-card__title {\n padding: 0 0 1em 0;\n font-size: 18px;\n color: #444;\n}\n\n.mdl-card__supporting-text {\n line-height: 1.5rem;\n padding: 0px;\n width: 100%;\n}\n\n.head-card.mdl-card {\n width: auto;\n display: block;\n max-width: 800px;\n padding: 24px;\n}\n\n.head-card > .mdl-card__title {\n padding-bottom: 0px;\n height: 60px;\n font-weight: 700;\n text-transform: uppercase;\n}\n.head-card > .mdl-card__menu {\n color: #fff;\n}\n.head-card > .mdl-card__actions {\n padding: 0;\n}\n.cards {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n}\n"]} \ No newline at end of file +{"version":3,"sources":["../../node_modules/material-design-lite/src/shadow/_shadow.scss","../../node_modules/material-design-lite/src/_mixins.scss","../../node_modules/material-design-lite/src/data-table/_data-table.scss","../../node_modules/material-design-lite/src/_variables.scss","../../node_modules/material-design-lite/src/footer/_mini_footer.scss","../../node_modules/material-design-lite/src/card/_card.scss","../../node_modules/material-design-lite/src/button/_button.scss","../scss/grid/_simplegrid.scss","../scss/fonts/_material-icons.scss","../scss/_root.scss","../scss/_variables.scss","../scss/layout/_layout.scss","../scss/headerings/_headerings.scss","../scss/admonitions/_admonitions.scss","../scss/code/_code.scss","../scss/blockquote/_blockquote.scss","../scss/tables/_tables.scss","../scss/toc/_globaltoc.scss","../scss/toc/_localtoc.scss","../scss/toc/_toctree.scss","../scss/lists/_lists.scss","../scss/drawer/_drawer.scss","../scss/header/_header.scss","../scss/footer/_footer.scss","../scss/search/_search.scss","../scss/downloadlink/_downloadlink.scss","../scss/card/_card.scss"],"names":[],"mappings":"AAmBA,wJCoNE,gGAEqE,CDlNvE,iBCqNE,gGAEqE,CDnNvE,iBCsNE,iGAEmE,CDpNrE,iBCuNE,kGAEmE,CDrNrE,iBCwNE,sGAEmE,CDtNrE,kBC0NE,wGAEqE,CDxNvE,kBC4NE,yGAEqE,CCtPvE,mHACE,iBAAkB,CAClB,gCCohBkC,CDnhBlC,wBAAyB,CACzB,kBAAmB,CACnB,cC0gByB,CDzgBzB,qBAAiD,CANnD,+HASI,kBAAmB,CATvB,+KAYM,YAAa,CAZnB,qIAkBM,iBAAkB,CAClB,WC0gBsB,CFlR1B,wBCvP6C,CDwP7C,kDEkN6D,CDzczD,oCAAqC,CArB3C,6JAwBQ,wBCigB4B,CDzhBpC,iJA4BQ,qBC4fwB,CDxhBhC,kPAkCI,mBCggBsD,CD/ftD,gBAAiB,CAnCrB,0SAsCM,iBAAkB,CAtCxB,sSA0CM,kBAAmB,CA1CzB,yHA+CI,iBAAkB,CAClB,qBAAsB,CACtB,WC4ewB,CD3exB,oCCoegC,CDnehC,uCCmegC,CDlehC,gBCof8C,CDnf9C,qBAAsB,CArD1B,yKAwDM,qBAAsB,CAxD5B,yHA6DI,iBAAkB,CAClB,qBAAsB,CACtB,sBAAuB,CDsCzB,cAAe,CAIb,eAAiB,CAEnB,gBAAiB,CACjB,gBAAiB,CC3Cf,WC4dwB,CD3dxB,cC8c8B,CD7c9B,qBCgd+B,CD/c/B,kBAAmB,CACnB,qBAAsB,CArE1B,wZAyEM,qBC2coC,CDphB1C,obD8LE,0BAA6B,CAC7B,eAAmB,CACnB,iBAAkB,CAClB,cAAe,CACf,aAAc,CACd,qBAAsB,CACtB,mBAAoB,CACpB,oBAAqB,CACrB,gBAAiB,CACjB,4BAA6B,CAC7B,oCAAqC,CACrC,kCAAmC,CC7H7B,cCqc+B,CDpc/B,eAAgB,CAChB,gBAAiB,CACjB,kBAAmB,CA/E3B,gbAkFQ,cAAe,CAlFvB,4cAoFU,qBCic2C,CDrhBrD,2NAyFM,eAAgB,CAKtB,wBACE,UAAW,CAGb,iRACE,eAAgB,CEpGlB,iBACE,YAAa,CACb,kBAAmB,CACnB,6BAA8B,CAE9B,iBDoZY,CClZZ,aDwRiD,CCvRjD,wBDsRoD,CC9RtD,uBAWI,UAAW,CACX,aAAc,CAZlB,2BAgBI,gBDsYkB,CClYtB,oHAEE,YAAa,CACb,oBAAqB,CAErB,eAAgB,CAEhB,QAAS,CACT,SAAU,CARZ,6HAWI,eAAgB,CAChB,iBDyXU,CCvXV,oCAdJ,6HAeM,gBDmXgB,CCjXnB,CAjBH,0HAoBI,aAAc,CACd,oBAAqB,CACrB,kBAAmB,CAIvB,8DAEE,oBAAqB,CACrB,OAAQ,CAGV,gEAEE,oBAAqB,CACrB,OAAQ,CAGV,0DAEE,UD0VoB,CCzVpB,WDyVoB,CCvVpB,SAAU,CACV,QAAS,CAET,wBD6NiD,CC3NjD,WAAY,CCpEd,UACE,YAAa,CACb,qBAAsB,CACtB,cF2amB,CE1anB,eAAgB,CAChB,gBFwaiB,CEvajB,eAAgB,CAChB,WFqagB,CEpahB,SF2bc,CE1bd,iBAAkB,CAClB,eFiOqD,CEhOrD,iBAAkB,CAClB,qBAAsB,CAGxB,iBACE,wBF6N6D,CE5N7D,wBAAyB,CACzB,2BAA4B,CAC5B,qBAAsB,CACtB,6BAA8B,CAC9B,4BAA6B,CAC7B,qBAAsB,CAGxB,iBACE,kBAAmB,CACnB,UFiN+C,CEhN/C,aAAc,CACd,YAAa,CACb,uBAAwB,CACxB,kBAAmB,CACnB,YFiZ4B,CEhZ5B,6BFoZoC,CEnZpC,2BFsZkC,CErZlC,qBAAsB,CAVxB,kCAaI,sCFyM+B,CErMnC,sBACE,mBAAoB,CACpB,aAAc,CACd,aAAc,CACd,YAAa,CACb,cFgYyB,CE/XzB,eFkZ+B,CEjZ/B,kBAAmB,CACnB,eAAgB,CAChB,2BFwYuC,CEvYvC,QAAS,CAGX,yBACE,cFwX4B,CEvX5B,qBFuL0D,CEtL1D,QAAS,CAGX,2BACE,qBFgLsE,CE/KtE,cF8XmC,CE7XnC,gBF8XqC,CE7XrC,eAAgB,CAChB,YF+W4B,CE9W5B,SAAU,CANZ,4CASI,sCFyK+B,CErKnC,mBACE,cFqX2B,CEpX3B,kBAAmB,CACnB,UAAW,CACX,4BAA+B,CAC/B,WAAY,CACZ,qBAAsB,CANxB,oCASI,mCF4J+B,CExJnC,kBACE,WAAY,CAId,gBACE,iBAAkB,CAClB,UAAW,CACX,QAAS,CC7FX,YACE,sBAAuB,CACvB,WAAY,CACZ,iBH+cwB,CG9cxB,UHgHsD,CG/GtD,iBAAkB,CAClB,WHyckB,CGxclB,QAAS,CACT,cHscqB,CGrcrB,cHucmB,CGtcnB,oBAAqB,CLVnB,6CE8CuD,CFmIzD,cAAe,CACf,eAAgB,CAChB,wBAAyB,CACzB,aAAc,CACd,gBAAiB,CKzKjB,eAAgB,CAChB,sBAAuB,CACvB,+HH+c6D,CG5c7D,YAAa,CACb,cAAe,CACf,oBAAqB,CACrB,iBAAkB,CAClB,gBH0bkB,CGzblB,qBAAsB,CAtBxB,8BAyBI,QAAS,CAzBb,kBA6BI,kCHsF8D,CGnHlE,+BAiCI,gCHsFuD,CGvH3D,mBAqCI,kCHiF6D,CGtHjE,gCAyCI,aHiFwD,CG1H5D,mDA4CM,gCH2EqD,CGtE3D,8BACE,uBAAuB,CAIvB,oBACE,4BH4D8D,CFgGhE,gGAEqE,CK/JrE,2BLuKA,iGAEmE,CKnK/D,kCH0D2D,CGhE/D,uCLyJA,6DAA8D,CK9I1D,kCHqD2D,CGhE/D,wCAeI,kBHqDsD,CGpDtD,UHqDiE,CGrErE,wJA2BM,wBH4CmD,CGvEzD,oDA+BM,eH4C4D,CGrClE,iBACE,iBAAkB,CAClB,cHwXuB,CGvXvB,WHqXkB,CGpXlB,WAAY,CACZ,cHmXkB,CGlXlB,UHkXkB,CGjXlB,SAAU,CACV,eAAgB,CAChB,4BHc8D,CGb9D,oEAAwE,CACxE,iBAAkB,CAClB,kBAAmB,CAZrB,0wCAeI,iBAAkB,CAClB,OAAQ,CACR,QAAS,CACT,gCAA8E,CAC9E,gBHuWqB,CGtWrB,UHsWqB,CG1XzB,sCAwBI,WHiWqB,CGhWrB,cHgWqB,CG/VrB,UH+VqB,CGzXzB,+CA8BI,iBAAkB,CAElB,4DAAiE,CAhCrE,wBLiIA,iGAEmE,CK9F/D,kCHX2D,CG1B/D,oCLmHA,6DAA8D,CKzE1D,kCHhB2D,CG1B/D,qCA8CI,kBHFiD,CGGjD,UHA+D,CG/CnE,+IA0DM,wBHZsD,CG9C5D,iDA8DM,eHd+D,CGqBrE,kBACE,iBAAkB,CAClB,cHmTuB,CGlTvB,WHoTmB,CGnTnB,aAAc,CACd,cAAe,CACf,cHiTmB,CGhTnB,UHgTmB,CG/SnB,SAAU,CACV,eAAgB,CAChB,aAAc,CACd,kBAAmB,CAXrB,gyCAcI,iBAAkB,CAClB,OAAQ,CACR,QAAS,CACT,gCAA8E,CAC9E,gBHmSqB,CGlSrB,UHkSqB,CGrTzB,wCAuBI,WHiSsB,CGhStB,cHgSsB,CG/RtB,UH+RsB,CGxT1B,owDA4BM,KAAyD,CACzD,MAA0D,CA7BhE,gDAkCI,iBAAkB,CAElB,4DAAiE,CAMrE,8BACE,aAAc,CACd,WAAY,CACZ,MAAS,CACT,iBAAkB,CAClB,KAAQ,CACR,UAAW,CACX,SAAU,CACV,eAAgB,CAEhB,2IAEE,4BAA6B,CAMnC,yCACE,aHpG0D,CGmG5D,qDAGI,eHrGmE,CGkGvE,qHAMI,UHxGmE,CGyGnE,wBH1GwD,CG8G5D,uCACE,aHjGqD,CGgGvD,mDAGI,eHhGiE,CG6FrE,iHAMI,UHnGiE,CGoGjE,wBHvGmD,CG6GvD,sFAII,qBHpHoE,CGqHpE,cAAe,CACf,4BAA6B,CAG9B,gGAIG,gCH9HgE,CG+HhE,qBH9HkE,CGkIrE,sGAIG,gCHvIgE,CGwIhE,qBHvIkE,CGwIlE,eAAgB,CAGnB,wGAIG,qBH/IkE,CGqJxE,4pCACE,qBAAsB,CClSxB,YACE,eAVqB,CAavB,cACE,eAbuB,CAgBzB,YACE,eAhBqB,CAqBvB,MACE,eAAgB,CAGlB,OACE,gBAAiB,CAGnB,QACE,iBAAkB,CAClB,gBAAiB,CACjB,iBAAkB,CAGpB,SACE,kBAAmB,CAGrB,WACE,YAAa,CAWf,WACE,UAAW,CACX,gBAAiB,CACjB,iBAAkB,CAGpB,KACE,iBAAkB,CAClB,UAAW,CAGb,kBACE,UAAW,CACX,eAAiB,CACjB,kBAAoB,CAGtB,WACE,UAAW,CACX,aAAc,CACd,UAAW,CAGb,uFAYE,SAzCS,CA4CX,UACE,cAA0C,CAG5C,UACE,eAAyC,CAG3C,UACE,SAAwC,CAG1C,UACE,eAAwC,CAG1C,UACE,eAA+C,CAGjD,UACE,SAAwC,CAG1C,UACE,eAA+C,CAGjD,UACE,eAA+C,CAGjD,UACE,SAA+C,CAGjD,WACE,eAAgD,CAGlD,WACE,eAAgD,CAGlD,WACE,SAzFS,CA4FX,wCACE,OACE,cAA0C,CAE5C,OACE,eAAyC,CAE3C,OACE,SAAwC,CAE1C,OACE,eAAwC,CAE1C,OACE,eAA+C,CAEjD,OACE,SAAwC,CAE1C,OACE,eAA+C,CAEjD,OACE,eAA+C,CAEjD,OACE,SAA+C,CAEjD,QACE,eAAgD,CAElD,QACE,eAAgD,CAElD,QACE,SA/HO,CANX,WAyII,aAAc,CACf,CAxHH,KA4HE,mBAAoB,CACpB,oBAAqB,CACrB,mBAAoB,CACpB,YAAa,CACb,cAAe,CAGjB,mBACE,YAAa,CACb,qBAAsB,CC/LxB,2dACI,0BAA6B,CAC7B,eAAmB,CACnB,iBAAkB,CAClB,cAAe,CACf,oBAAqB,CACrB,aAAc,CACd,mBAAoB,CACpB,qBAAsB,CACtB,gBAAiB,CACjB,kBAAmB,CACnB,aAAc,CAGd,kCAAmC,CAEnC,iCAAkC,CAGlC,iCAAkC,CAGlC,4BAA6B,CC3BjC,KACI,cCEY,CDChB,KACI,uBAAyB,CACzB,wBCDsB,CDEtB,cAAe,CACf,kBAAmB,CACnB,6ICA0J,CDG9J,2BACI,YAAa,CAGjB,+CACI,YAAa,CAGjB,+CACI,iBAAkB,CAGtB,qCAJA,+CAMQ,aACJ,CAAC,CAGL,4EAEI,6ICvB0J,CD0B9J,8GACI,uBAA8B,CAGlC,EACI,oBAAqB,CAGzB,yKAGQ,cAAe,CAIvB,OACI,aAAc,CACd,oBAAqB,CAGzB,SACI,eAAgB,CAOnB,IACG,cAAe,CACf,aAAc,CACd,gBAAiB,CACjB,iBAAkB,CAGtB,qBAEQ,iBAAkB,CAClB,iBAAkB,CAH1B,yCAMY,iBAAkB,CAN9B,2CASY,eAAgB,CAK5B,UACE,UAAW,CACX,WAAY,CACZ,oBAAqB,CACrB,YCzD0C,CD0D1C,iBAAkB,CAClB,eAAgB,CAChB,uBAAwB,CAM1B,6kBACI,iBAAkB,CAClB,OAAQ,CAGZ,WACI,oBAAqB,CAGzB,eACE,UAAW,CACX,aAAc,CACd,UAAW,CAGb,SAEE,gBAA2D,CAC3D,iBAAkB,CAClB,gBAAiB,CACjB,kBAA0C,CAC1C,iBC5FqB,CD+FrB,qCATF,SAWI,gBAAuD,CACvD,kBAAgC,CAChC,iBAA+B,CAElC,CEpGD,YACI,eAAgB,CAIpB,UACI,UAAW,CACX,aAAc,CACd,YAAa,CAEb,0BALJ,UAMQ,UAhCe,CA8EtB,CApDD,wBASQ,UAAW,CACX,aAAc,CACd,cAAe,CAEf,yBAbR,wBAcY,SA7BU,CA8BV,YA7Ba,CAoCpB,CAJG,0BAlBR,wBAmBY,uBA9B0B,CA+B1B,YA9Ba,CAgCpB,CAtBL,4BAyBQ,WA5CY,CA8CZ,0BA3BR,4BA4BY,YAAa,CAsBpB,CAlDL,qCA+BY,cAAe,CACf,eAAgB,CAChB,eAAgB,CAChB,aAAc,CACd,OAAU,CAnCtB,wDAqCgB,SAAU,CArC1B,8DAyCgB,iBAAkB,CAzClC,8DA6CgB,+BAAmC,CACnC,iBAAkB,CAClB,uCAA4C,CC/E5D,oBACI,GACI,2BAA6B,CAC7B,SAAU,CAEjB,GACC,uBAAwB,CACxB,SAAU,CAAA,CAIZ,qBACI,GACI,uBAAwB,CACxB,SAAU,CAEjB,GACC,2BAA6B,CAC7B,SAAU,CAAA,CAIZ,0BAEQ,oBAAqB,CACrB,oBAAqB,CACrB,iBAAmB,CACnB,aAAc,CACd,SAAU,CANlB,gCAQY,0DAAsE,CARlF,oLAcY,oBAAqB,CAdjC,kNAkBgB,0DAAsE,CAlBtF,iBAwBQ,cAAe,CACf,mBAAoB,CAzB5B,iBA6BQ,iBAAkB,CAClB,gBAAiB,CACjB,kBAAmB,CACnB,YAAa,CACb,kBAAmB,CAjC3B,iBAqCQ,gBAAiB,CACjB,mBAAoB,CACpB,gBAAiB,CACjB,YAAe,CACf,oBAAqB,CAzC7B,iBA6CQ,iBAAkB,CAClB,kBAAmB,CACnB,kBAAmB,CACnB,YAAe,CACf,mBAAoB,CAjD5B,kCAqDQ,gBAAiB,CACjB,kBAAmB,CACnB,gBAAiB,CACjB,YAAe,CACf,kBAAmB,CAzD3B,kCA6DQ,cAAe,CACf,kBAAmB,CACnB,gBAAiB,CACjB,YAAe,CACf,kBAAmB,CCT3B,YAGI,iBAAkB,CAClB,eAAgB,CAChB,kBAAmB,CALvB,mBAOQ,WAAY,CAPpB,8BAUQ,cAAe,CACf,eAAiB,CACjB,UAAW,CACX,wBAAyB,CACzB,cAAe,CAdvB,iBApBI,6BA/CgC,CAgDhC,mCA/C4C,CAgD5C,mCACI,cAAe,CACf,eAAiB,CACjB,aApD4B,CAsD5B,cAAe,CACf,iBAAkB,CAClB,0CAEI,iBAAkB,CAClB,gBAAiB,CACjB,OAAQ,CACR,sBA3DwB,CA4DxB,cAAe,CAK3B,oBApBI,6BA1CgC,CA2ChC,mCA1C4C,CA2C5C,sCACI,cAAe,CACf,eAAiB,CACjB,aA/C4B,CAiD5B,cAAe,CACf,iBAAkB,CAClB,6CAEI,iBAAkB,CAClB,gBAAiB,CACjB,OAAQ,CACR,gBAtDkB,CAuDlB,cAAe,CAK3B,iBApBI,6BApDgC,CAqDhC,mCApD4C,CAqD5C,mCACI,cAAe,CACf,eAAiB,CACjB,aAzD4B,CA2D5B,cAAe,CACf,iBAAkB,CAClB,0CAEI,iBAAkB,CAClB,gBAAiB,CACjB,OAAQ,CACR,sBAhEwB,CAiExB,cAAe,CAK3B,oBApBI,6BArCgC,CAsChC,mCArC4C,CAsC5C,sCACI,cAAe,CACf,eAAiB,CACjB,aA1C4B,CA4C5B,cAAe,CACf,iBAAkB,CAClB,6CAEI,iBAAkB,CAClB,gBAAiB,CACjB,OAAQ,CACR,iBAjDmB,CAkDnB,cAAe,CAK3B,sBApBI,6BAhCgC,CAiChC,mCAhC4C,CAiC5C,wCACI,cAAe,CACf,eAAiB,CACjB,aArC4B,CAuC5B,cAAe,CACf,iBAAkB,CAClB,+CAEI,iBAAkB,CAClB,gBAAiB,CACjB,OAAQ,CACR,iBA5CmB,CA6CnB,cAAe,CAK3B,gBApBI,6BA3BiC,CA4BjC,oCA3B6C,CA4B7C,kCACI,cAAe,CACf,eAAiB,CACjB,aAhC6B,CAkC7B,cAAe,CACf,iBAAkB,CAClB,yCAEI,iBAAkB,CAClB,gBAAiB,CACjB,OAAQ,CACR,2BAvC6B,CAwC7B,cAAe,CAK3B,sBApBI,6BAtBiC,CAuBjC,oCAtB6C,CAuB7C,wCACI,cAAe,CACf,eAAiB,CACjB,aA3B6B,CA6B7B,cAAe,CACf,iBAAkB,CAClB,+CAEI,iBAAkB,CAClB,gBAAiB,CACjB,OAAQ,CACR,sBAlCyB,CAmCzB,cAAe,CAK3B,kBApBI,6BAjBgC,CAkBhC,mCAjB4C,CAkB5C,oCACI,cAAe,CACf,eAAiB,CACjB,aAtB4B,CAwB5B,cAAe,CACf,iBAAkB,CAClB,2CAEI,iBAAkB,CAClB,gBAAiB,CACjB,OAAQ,CACR,uBA7ByB,CA8BzB,cAAe,CAK3B,oBApBI,6BAZgC,CAahC,mCAZ4C,CAa5C,sCACI,cAAe,CACf,eAAiB,CACjB,aAjB4B,CAmB5B,cAAe,CACf,iBAAkB,CAClB,6CAEI,iBAAkB,CAClB,gBAAiB,CACjB,OAAQ,CACR,uBAxByB,CAyBzB,cAAe,CAK3B,mBApBI,6BAPgC,CAQhC,mCAP4C,CAQ5C,qCACI,cAAe,CACf,eAAiB,CACjB,aAZ4B,CAc5B,cAAe,CACf,iBAAkB,CAClB,4CAEI,iBAAkB,CAClB,gBAAiB,CACjB,OAAQ,CACR,uBAnByB,CAoBzB,cAAe,CCzE3B,yBAEQ,YAAa,CAFrB,6BAIY,0BJEqB,CIDrB,qBAAsB,CACtB,wHJE2I,CID3I,cAAgB,CAChB,aAAc,CACd,iBAAkB,CAT9B,iEAWgB,qBAAsB,CAXtC,kDAiBQ,eAAgB,CAjBxB,qCAwBgB,qBAAsB,CACtB,kBJpBU,CIuBV,qBAAmB,CACnB,cAAgB,CA7BhC,sDAmCQ,QAAW,CAEX,iBAAkB,CArC1B,8HAoCQ,wHJ5B+I,CIRvJ,6BA4CQ,gBAAiB,CACjB,aAAc,CA7CtB,kGAiDQ,aAAc,CACd,aAAc,CACd,cAAe,CACf,kBAAmB,CACnB,kBAAmB,CACnB,aAAc,CACd,4BAA6B,CAC7B,YAAa,CACb,iBAAkB,CAzD1B,wSA2DY,qBAAsB,CACtB,kBAAmB,CACnB,WAAY,CA7DxB,8GAgEY,aAAc,CAhE1B,sBAsEQ,kBAAqB,CAtE7B,0BA2EQ,iBAAkB,CA3E1B,6BA6EY,kBAAmB,CACnB,QAAS,CA9ErB,oCA6FO,UAAW,CACX,UAAW,CACX,aAAc,CA/FrB,oCAmGO,gBAAiB,CAnGxB,sBAsGQ,kBAAmB,CAtG3B,kBA0GQ,aAAc,CACd,eAAgB,CAChB,aAAc,CACd,iBAAkB,CAClB,UAAW,CACX,iBAAkB,CAClB,oBAAqB,CAhH7B,+BAsHgB,6IJ7G8I,CI8G9I,eAAiB,CACjB,2BAA4B,CAC5B,oBAAyB,CACzB,iBAAkB,CAClB,iBAAkB,CAClB,WAAY,CACZ,UAAY,CACZ,YAAc,CACd,kBAA8B,CAC9B,eAAiB,CACjB,cAAe,CC9H9B,yBAEO,cAAe,CACf,cAAe,CACf,qCLDyB,CKHhC,+BAOW,oBAAsB,CACtB,aAAc,CARzB,gCAWW,oBAAsB,CCdlC,mGAKQ,eAAgB,CAChB,kBAAmB,CACnB,cAAe,CACf,aAAc,CARtB,4MAYY,kBAAmB,CACnB,wBAAyB,CAbrC,2GAiBY,cNdI,CMeJ,mBAAuB,CACvB,kBAAmB,CAnB/B,2HAqBgB,iBAAkB,CArBlC,iIAwBgB,eAAgB,CCxBhC,oCAGQ,YAAa,CAHrB,cAQQ,oBAAqB,CACrB,SAAU,CACV,QAAS,CAVjB,iBAaY,eAAgB,CAb5B,+BAegB,YAAa,CACb,6BAA8B,CAhB9C,iCAkBoB,aAAc,CACd,aAAc,CACd,UAAW,CACX,cAAe,CACf,oBAAqB,CACrB,adyKoB,CchMxC,yCAyBwB,eAAiB,CAzBzC,uBAiCQ,SAAU,CACV,WAAY,CACZ,YAAa,CACb,kBAAmB,CACnB,sBAAuB,CACvB,WAAY,CAtCpB,yBAwCY,SAAU,CACV,aAAc,CACd,gBAAiB,CACjB,cAAe,CA3C3B,2BA6CgB,cAAe,CA7C/B,4BAiDY,wBAA0B,CAjDtC,8BAmDgB,cAAe,CACf,eAAgB,CApDhC,uCA2DY,gBAAiB,CA3D7B,6CA8DY,iBAAkB,CA9D9B,mDAiEY,iBAAkB,CAjE9B,yDAoEY,iBAAkB,CApE9B,+DAuEY,iBAAkB,CAvE9B,qEA0EY,iBAAkB,CC1E9B,UACI,gBAAkB,CAClB,gBAAiB,CAFrB,mBAKQ,iBAAkB,CAL1B,wBAOY,eAAiB,CACjB,eAAgB,CAR5B,kBAaQ,YAAa,CAbrB,aAiBQ,SAAU,CACV,oBAAqB,CAlB7B,aAsBQ,gBAAiB,CAtBzB,YA0BQ,aAAc,CACd,oBAAqB,CACrB,aAAc,CACd,cAAe,CACf,gBAAiB,CACjB,kBAAmB,CA/B3B,oBAkCY,gBAAiB,CACjB,qBAAsB,CACtB,eAAiB,CCjC5B,iCAEI,qBAAsB,CAG1B,yDAEI,aAAyB,CACzB,cAAe,CACf,iBAAkB,CAGtB,uCAEI,iBAAkB,CAClB,eAAgB,CAChB,gBAAiB,CAGrB,qCAEI,gBAAiB,CACjB,oBAAqB,CAHzB,+CAKQ,cAAe,CAIvB,iDAEI,gBAAiB,CAFrB,2DAIQ,gBAAiB,CCnC1B,oBAGY,cAAe,CAH3B,sBAKgB,QAAS,CALzB,mCAWY,wHVH2I,CURvJ,8BAcY,aAAe,CACf,WAAY,CCXpB,oBACI,qBAAsB,CADzB,uCAIO,SAAU,CAJjB,6CAQO,iBAAkB,CARzB,6CAYO,+BAAmC,CACnC,iBAAkB,CAClB,uCAA4C,CAdnD,sCAkBO,eAAiB,CACjB,gBAAiB,CACjB,QAAS,CACT,SAAU,CACV,gBAAiB,CACjB,sCAAuC,CACvC,eAAgB,CAxBvB,6CA0BW,aAAc,CACd,aAAc,CACd,WAAY,CACZ,UAAW,CACX,oBAAqB,CA9BhC,sDAgCe,UAAW,CACX,QAAS,CACT,SAAU,CAlCzB,kDAsCe,eAAiB,CACjB,gBAAiB,CACjB,cAAe,CACf,iBAAoB,CACpB,gBAAiB,CACjB,6IXtC0I,CWuC1I,aAAc,CACd,aAAc,CC7ClC,sCAEQ,aAAc,CACd,cAAe,CAEnB,0BALJ,eAMQ,uBAA0B,CANlC,gDAQY,iBAAkB,CAClB,UAAW,CACX,eAAgB,CAChB,kBAAmB,CACnB,sBAAuB,CAZnC,wwCAgBY,YAAa,CAChB,CAIT,uBACI,eAAgB,CAGpB,2BACI,kBAAoB,CAGxB,wCACI,6BAAiC,CACjC,UAAW,CACX,eAAgB,CAChB,iBAAkB,CAJtB,+DAOQ,cAAe,CAPvB,iEASY,gBAAiB,CACjB,YAAa,CACb,iBAAkB,CAClB,aAAe,CAZ3B,qEAiBQ,wBAAmD,CACnD,UAAc,CAlBtB,yEAqBQ,wBAAmD,CACnD,SAAU,CACV,UAAc,CAOtB,YACE,yBAA2B,CAC3B,gBAAiB,CACjB,mBAAoB,CACpB,eAAgB,CAChB,UAAW,CACX,UAAY,CANd,gCAUI,aZzCuC,CY8C3C,aACE,cAAe,CACf,KAAM,CACN,UAAW,CACX,eAAgB,CAChB,gBAAiB,CACjB,mBAAoB,CACpB,wBZzD0B,CY0D1B,UAAW,CACX,eAAgB,CAChB,cAAe,CACf,4BAA8B,CAGhC,kBACE,WAAY,CACZ,eAAgB,CAGlB,UACE,WAAY,CACZ,gBAAiB,CAFnB,4CASI,YAAa,CATjB,qBAaI,UAAY,CACZ,eAAgB,CAChB,eAAgB,CAfpB,sCAkBM,iBAAkB,CAlBxB,2BAsBM,UAAY,CACZ,sCAA4C,CAvBlD,kCA4BI,UAAY,CACZ,yBAA0B,CAG5B,qCAhCF,UAiCI,iBAAkB,CAClB,OAAQ,CACR,UAAW,CACX,wBAAiC,CACjC,iBAAkB,CAClB,gBAAiB,CAtCrB,iCAyCM,aAAc,CACd,WAAY,CACZ,UAAW,CACX,WAAY,CACZ,SAAU,CACV,cAAe,CA9CrB,qBAkDM,aAAc,CACd,WAAY,CACZ,UAAW,CACX,WAAY,CACZ,aAAc,CACd,gBAAiB,CACjB,iBAAkB,CAxDxB,yBA2DQ,SAAW,CA3DnB,yBAgEM,UAAW,CACX,YAAa,CAjEnB,iCAqEM,aAAc,CACd,kBAAmB,CAtEzB,qBA0EM,gBAAiB,CACjB,aAAc,CAMd,gBAAiB,CAjFvB,sCA8EQ,cAAe,CAChB,CC7KP,uBACI,wBAAyB,CAD7B,yDAGQ,kBAAmB,CACnB,YAAa,CACb,qBAAsB,CAL9B,mEAOY,gBAAiB,CAP7B,0DAcQ,eAAiB,CACjB,YAAa,CACb,qBAAsB,CACtB,wBAAyB,CAjBjC,4DAoBY,aAAc,CACd,eAAiB,CACjB,oBAAqB,CAtBjC,iCA0BQ,YAAa,CAOpB,YACG,UAAW,CACX,eAAgB,CAChB,WAAY,CACZ,wBAAyB,CACzB,YAAa,CALhB,6EAQO,mBAAoB,CACpB,SAAU,CACV,WAAY,CACZ,YAAa,CACb,sBAAuB,CACvB,kBAAmB,CACnB,UAAc,CAdrB,yBAkBO,iBAAkB,CAlBzB,0CAoBW,eAAgB,CApB3B,yBA0BO,gBAAiB,CACjB,0BAA2B,CA3BlC,0CA6BW,gBAAiB,CAKrB,oBACI,iBAAkB,CAEtB,oBACI,gBAAiB,CAIzB,iBACI,gBAAiB,CACjB,cAAe,CAGnB,sBACI,UAAY,CACZ,cAAe,CAEnB,qCAnDH,yBAqDW,SAAU,CArDrB,yBAyDW,SAAU,CAzDrB,0CA6DW,YAAa,CAChB,CAEL,qCAhEH,kDAmEW,SAAU,CAnErB,0CAuEW,aAAc,CACjB,CAST,aACE,4BbvF0C,CawF1C,cAAwB,CACxB,wBAAyB,CACzB,iBAAkB,CAClB,UAAW,CALb,oCAOI,abhGwB,CayF5B,sCAaM,uBAAmC,CAMzC,cACE,wBAAyB,CACzB,gBAAiB,CACjB,mBAAoB,CACpB,iBAAkB,CAClB,UAAW,CAGb,gBACE,kBAAgC,CAGlC,iCAEE,eAAgB,CAChB,aAAc,CAIhB,uBACE,aAAc,CACd,UAAY,CACZ,UAAW,CAGb,aACE,WAAY,CACZ,kBAAmB,CACnB,eAAgB,CAGlB,YACE,UAAW,CACX,kBAAgC,CAChC,iBAA+B,CAGjC,aACE,ab/I0C,Cc5B5C,0CACI,UAAW,CAEf,qCACI,UAAW,CAEf,iCACI,UAAW,CAGf,2BACI,eAAiB,CAGrB,aACI,kBAAmB,CAGvB,mBAEQ,eAAgB,CAChB,SAAU,CAHlB,wBAMgB,oBAAqB,CACrB,gBAAiB,CC5BjC,kBAGQ,uBAAwB,CACxB,iBAAkB,CAClB,OAAQ,CACR,gBAAiB,CAIzB,gBACI,eAAgB,CAChB,eAAgB,CpBMpB,UqBjBI,sBAAuB,CACvB,oBAAqB,CACrB,WAAY,CACZ,gBAAiB,CACjB,YAAa,CAEjB,gBACI,gEAAoE,CACpE,UAAW,CACX,cAAe,CrBiCnB,iBqB9BI,eAAkB,CAClB,cAAe,CACf,UAAW,CrBgEf,2BqB5DI,kBAAmB,CACnB,SAAY,CACZ,UAAW,CAGf,oBACI,UAAW,CACX,aAAc,CACd,eAAgB,CAChB,YAAa,CAGjB,4BACI,gBAAmB,CACnB,WAAY,CACZ,eAAgB,CAChB,wBAAyB,CAE7B,2BACI,UAAW,CAEf,8BACI,SAAU,CAEd,OACI,YAAa,CACb,kBAAmB,CACnB,cAAe","file":"sphinx_materialdesign_theme.css","sourceRoot":"../../src/js","sourcesContent":["/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n@import \"../mixins\";\n\n.mdl-shadow--2dp {\n @include shadow-2dp();\n}\n\n.mdl-shadow--3dp {\n @include shadow-3dp();\n}\n\n.mdl-shadow--4dp {\n @include shadow-4dp();\n}\n\n.mdl-shadow--6dp {\n @include shadow-6dp();\n}\n\n.mdl-shadow--8dp {\n @include shadow-8dp();\n}\n\n.mdl-shadow--16dp {\n @include shadow-16dp();\n}\n\n.mdl-shadow--24dp {\n @include shadow-24dp();\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* Typography */\n\n@mixin typo-preferred-font($usePreferred: true) {\n @if $usePreferred {\n font-family: $preferred_font;\n }\n}\n\n@mixin typo-display-4($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 112px;\n font-weight: 300;\n line-height: 1;\n letter-spacing: -0.04em;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-display-3($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 56px;\n font-weight: 400;\n line-height: 1.35;\n letter-spacing: -0.02em;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-display-2($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 45px;\n font-weight: 400;\n line-height: 48px;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-display-1($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 34px;\n font-weight: 400;\n line-height: 40px;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-headline($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 24px;\n font-weight: 400;\n line-height: 32px;\n -moz-osx-font-smoothing: grayscale;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-title($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 20px;\n font-weight: 500;\n line-height: 1;\n letter-spacing: 0.02em;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-subhead($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 16px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0.04em;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-subhead-2($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 16px;\n font-weight: 400;\n line-height: 28px;\n letter-spacing: 0.04em;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-body-2($colorContrast: false, $usePreferred: false) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n @if $usePreferred {\n font-weight: 500;\n } @else {\n font-weight: bold;\n }\n line-height: 24px;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-body-1($colorContrast: false, $usePreferred: false) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-caption($colorContrast: false, $usePreferred: false) {\n @include typo-preferred-font($usePreferred);\n font-size: 12px;\n font-weight: 400;\n line-height: 1;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-blockquote($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n position: relative;\n font-size: 24px;\n font-weight: 300;\n font-style: italic;\n line-height: 1.35;\n letter-spacing: 0.08em;\n\n &:before {\n position: absolute;\n left: -0.5em;\n content: '“';\n }\n\n &:after {\n content: '”';\n margin-left: -0.05em;\n }\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-menu($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n font-weight: 500;\n line-height: 1;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-button($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n font-weight: 500;\n text-transform: uppercase;\n line-height: 1;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-icon() {\n font-family: 'Material Icons';\n font-weight: normal;\n font-style: normal;\n font-size: 24px;\n line-height: 1;\n letter-spacing: normal;\n text-transform: none;\n display: inline-block;\n word-wrap: normal;\n font-feature-settings: 'liga';\n -webkit-font-feature-settings: 'liga';\n -webkit-font-smoothing: antialiased;\n}\n\n/* Shadows */\n\n// Focus shadow mixin.\n@mixin focus-shadow() {\n box-shadow: 0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);\n}\n\n@mixin shadow-2dp() {\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 3px 1px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),\n 0 1px 5px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);\n}\n@mixin shadow-3dp() {\n box-shadow: 0 3px 4px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 3px 3px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),\n 0 1px 8px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);\n}\n@mixin shadow-4dp() {\n box-shadow: 0 4px 5px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 1px 10px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 2px 4px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n@mixin shadow-6dp() {\n box-shadow: 0 6px 10px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 1px 18px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 3px 5px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n@mixin shadow-8dp() {\n box-shadow: 0 8px 10px 1px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 3px 14px 2px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 5px 5px -3px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n@mixin shadow-16dp() {\n box-shadow: 0 16px 24px 2px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 6px 30px 5px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 8px 10px -5px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n@mixin shadow-24dp() {\n box-shadow: 0 9px 46px 8px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 11px 15px -7px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 24px 38px 3px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n/* Animations */\n\n@mixin material-animation-fast-out-slow-in($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-fast-out-slow-in;\n}\n\n@mixin material-animation-linear-out-slow-in($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-linear-out-slow-in;\n}\n\n@mixin material-animation-fast-out-linear-in($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-fast-out-linear-in;\n}\n\n@mixin material-animation-default($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-default;\n}\n\n/* Dialog */\n\n@mixin dialog-width($units:5) {\n @if(type_of($units) != 'number') {\n @error \"The unit given to dialog-width should be a number.\";\n }\n // 56dp is the base unit width for Dialogs.\n // With 5 units being the number of units for a mobile device.\n // https://goo.gl/sK2O5o\n width: $units * 56px;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n@import \"../mixins\";\n\n.mdl-data-table {\n position: relative;\n border: $data-table-dividers;\n border-collapse: collapse;\n white-space: nowrap;\n font-size: $data-table-font-size;\n background-color: unquote(\"rgb(#{$color-white})\");\n\n thead {\n padding-bottom: 3px;\n\n .mdl-data-table__select {\n margin-top: 0;\n }\n }\n\n tbody {\n tr {\n position: relative;\n height: $data-table-row-height;\n @include material-animation-default(0.28s);\n transition-property: background-color;\n\n &.is-selected {\n background-color: $data-table-selection-color;\n }\n\n &:hover {\n background-color: $data-table-hover-color;\n }\n }\n }\n\n td, th {\n padding: 0 $data-table-column-padding 12px $data-table-column-padding;\n text-align: right;\n\n &:first-of-type {\n padding-left: 24px;\n }\n\n &:last-of-type {\n padding-right: 24px;\n }\n }\n\n td {\n position: relative;\n vertical-align: middle;\n height: $data-table-row-height;\n border-top: $data-table-dividers;\n border-bottom: $data-table-dividers;\n padding-top: $data-table-cell-top;\n box-sizing: border-box;\n\n .mdl-data-table__select {\n vertical-align: middle;\n }\n }\n\n th {\n position: relative;\n vertical-align: bottom;\n text-overflow: ellipsis;\n @include typo-body-2();\n height: $data-table-row-height;\n font-size: $data-table-header-font-size;\n color: $data-table-header-color;\n padding-bottom: 8px;\n box-sizing: border-box;\n\n &.mdl-data-table__header--sorted-ascending,\n &.mdl-data-table__header--sorted-descending {\n color: $data-table-header-sorted-color;\n &:before {\n @include typo-icon;\n font-size: $data-table-header-sort-icon-size;\n content: \"\\e5d8\";\n margin-right: 5px;\n vertical-align: sub;\n }\n &:hover {\n cursor: pointer;\n &:before {\n color: $data-table-header-sorted-icon-hover-color;\n }\n }\n }\n &.mdl-data-table__header--sorted-descending:before {\n content: \"\\e5db\";\n }\n }\n}\n\n.mdl-data-table__select {\n width: 16px;\n}\n\n.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric {\n text-align: left;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n * -----Dialog\n * -----Snackbar\n * -----Tooltip\n * -----Chip\n *\n * Even though all variables have the `!default` directive, most of them\n * should not be changed as they are dependent one another. This can cause\n * visual distortions (like alignment issues) that are hard to track down\n * and fix.\n */\n\n\n/* ========== TYPOGRAPHY ========== */\n\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n$preferred_font: 'Roboto', 'Helvetica', 'Arial', sans-serif !default;\n$performance_font: 'Helvetica', 'Arial', sans-serif !default;\n\n/* ========== COLORS ========== */\n\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n\n@import \"color-definitions\";\n@import \"functions\";\n\n/* ========== IMAGES ========== */\n$image_path: '/images' !default;\n\n/* ========== Color & Themes ========== */\n\n// Define whether individual color palette items should have classes created.\n// Setting this to true will remove individual color classes for each color in the palettes.\n// To improve overall performance (assuming they aren't used) by:\n// * Saving server bandwidth sending the extra classes\n// * Save client computation against the classes\n// it is RECOMMENDED you set this to true.\n$trim-color-classes: false !default;\n\n// Use color primarily for emphasis. Choose colors that fit with\n// your brand and provide good contrast between visual components.\n$color-primary: $palette-indigo-500 !default;\n$color-primary-dark: $palette-indigo-700 !default;\n$color-accent: $palette-pink-A200 !default;\n\n// Our primary is dark, so use $color-dark-contrast for overlaid text.\n$color-primary-contrast: $color-dark-contrast !default;\n// Our accent is dark, so use $color-dark-contrast for overlaid text.\n$color-accent-contrast: $color-dark-contrast !default;\n\n// Replace all colors with placeholders if we're generating a template.\n@if $styleguide-generate-template == true {\n $color-primary: '$color-primary';\n $color-primary-dark: '$color-primary-dark';\n $color-accent: '$color-accent';\n $color-primary-contrast: '$color-primary-contrast';\n $color-accent-contrast: '$color-accent-contrast';\n}\n\n/* ========== Typography ========== */\n\n// We use the following default color styles: text-color-primary and\n// text-color-secondary. For light themes, use text-color-primary-inverse\n// and text-color-secondary-inverse.\n\n$text-color-primary: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$text-link-color: unquote(\"rgb(#{$color-accent})\") !default;\n\n// Define whether to target elements directly for typographic enhancements.\n// Turning this off means you need to use mdl-* classes more often.\n// Other components may also fail to adhere to MD without these rules.\n// It is strongly recommended you leave this as true.\n\n$target-elements-directly: true !default;\n\n/* ========== Components ========== */\n\n/* ========== Standard Buttons ========== */\n\n// Default button colors.\n$button-primary-color: unquote(\"rgba(#{$palette-grey-500}, 0.20)\") !default;\n$button-secondary-color: unquote(\"rgb(#{$color-black})\") !default;\n$button-hover-color: $button-primary-color !default;\n$button-active-color: unquote(\"rgba(#{$palette-grey-500}, 0.40)\") !default;\n$button-focus-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n// Colored button colors.\n$button-primary-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-secondary-color-alt: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n$button-hover-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-active-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-focus-color-alt: $button-focus-color !default;\n\n// Ripple color for colored raised buttons.\n$button-ripple-color-alt: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n\n// Disabled button colors.\n$button-primary-color-disabled: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n$button-secondary-color-disabled: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n// FAB colors and sizes.\n$button-fab-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-hover-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-active-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-text-color-alt: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n$button-fab-ripple-color-alt: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n\n// Icon button colors and sizes.\n$button-icon-color: unquote(\"rgb(#{$palette-grey-700})\") !default;\n$button-icon-focus-color: $button-focus-color !default;\n\n/* ========== Icon Toggles ========== */\n\n$icon-toggle-color: unquote(\"rgb(#{$palette-grey-700})\") !default;\n$icon-toggle-focus-color: $button-focus-color !default;\n$icon-toggle-checked-color: unquote(\"rgb(#{$color-primary})\") !default;\n$icon-toggle-checked-focus-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$icon-toggle-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n/* ========== Radio Buttons ========== */\n\n$radio-color: unquote(\"rgb(#{$color-primary})\") !default;\n$radio-off-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$radio-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n/* ========== Ripple effect ========== */\n\n$ripple-bg-color: unquote(\"rgb(#{$color-light-contrast})\") !default;\n\n/* ========== Layout ========== */\n\n$layout-nav-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n\n// Drawer\n$layout-drawer-bg-color: unquote(\"rgb(#{$palette-grey-50})\") !default;\n$layout-drawer-border-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$layout-text-color: unquote(\"rgb(#{$palette-grey-800})\") !default;\n$layout-drawer-navigation-color: #757575 !default;\n$layout-drawer-navigation-link-active-background: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$layout-drawer-navigation-link-active-color: unquote(\"rgb(#{$color-light-contrast})\") !default;\n\n// Header\n$layout-header-bg-color: unquote(\"rgb(#{$color-primary})\") !default;\n$layout-header-text-color: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n$layout-header-nav-hover-color: unquote(\"rgba(#{$palette-grey-700}, 0.6)\") !default;\n$layout-header-tab-text-color: unquote(\"rgba(#{$color-primary-contrast}, 0.6)\") !default;\n\n// Tabs\n$layout-header-tab-highlight: unquote(\"rgb(#{$color-accent})\") !default;\n\n/* ========== Content Tabs ========== */\n\n$tab-highlight-color: unquote(\"rgb(#{$color-primary})\") !default;\n$tab-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$tab-active-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$tab-border-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n\n/* ========== Checkboxes ========== */\n\n$checkbox-color: unquote(\"rgb(#{$color-primary})\") !default;\n$checkbox-off-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$checkbox-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$checkbox-focus-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$checkbox-image-path: $image_path;\n\n/* ========== Switches ========== */\n\n$switch-color: unquote(\"rgb(#{$color-primary})\") !default;\n$switch-faded-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$switch-thumb-color: $switch-color !default;\n$switch-track-color: unquote(\"rgba(#{$color-primary}, 0.5)\") !default;\n\n$switch-off-thumb-color: unquote(\"rgb(#{$palette-grey-50})\") !default;\n$switch-off-track-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$switch-disabled-thumb-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n$switch-disabled-track-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n/* ========== Spinner ========== */\n\n$spinner-color-1: unquote(\"rgb(#{$palette-blue-400})\") !default;\n$spinner-color-2: unquote(\"rgb(#{$palette-red-500})\") !default;\n$spinner-color-3: unquote(\"rgb(#{$palette-yellow-600})\") !default;\n$spinner-color-4: unquote(\"rgb(#{$palette-green-500})\") !default;\n\n$spinner-single-color: unquote(\"rgb(#{$color-primary})\") !default;\n\n/* ========== Text fields ========== */\n\n$input-text-background-color: transparent !default;\n$input-text-label-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$input-text-bottom-border-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n$input-text-highlight-color: unquote(\"rgb(#{$color-primary})\") !default;\n$input-text-disabled-color: $input-text-bottom-border-color !default;\n$input-text-disabled-text-color: $input-text-label-color !default;\n$input-text-error-color: unquote(\"rgb(#{$palette-red-A700})\") !default;\n\n/* ========== Card ========== */\n\n$card-background-color: unquote(\"rgb(#{$color-white})\") !default;\n$card-text-color: unquote(\"rgb(#{$color-black})\") !default;\n$card-image-placeholder-color: unquote(\"rgb(#{$color-accent})\") !default;\n$card-supporting-text-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$card-border-color: rgba(0,0,0,0.1) !default;\n$card-subtitle-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n\n/* ========== Sliders ========== */\n\n$range-bg-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$range-color: unquote(\"rgb(#{$color-primary})\") !default;\n$range-faded-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$range-bg-focus-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n/* ========== Progress ========== */\n$progress-main-color: unquote(\"rgb(#{$color-primary})\") !default;\n$progress-secondary-color: unquote(\"rgba(#{$color-primary-contrast}, 0.7)\") !default;\n$progress-fallback-buffer-color: unquote(\"rgba(#{$color-primary-contrast}, 0.9)\") !default;\n$progress-image-path: $image_path;\n\n/* ========== List ========== */\n\n$list-main-text-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$list-supporting-text-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$list-icon-color: unquote(\"rgb(#{$palette-grey-600})\") !default;\n$list-avatar-color: white !default;\n\n/* ========== Item ========== */\n\n// Default Item Colors\n$default-item-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$default-item-outline-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n$default-item-hover-bg-color: unquote(\"rgb(#{$palette-grey-200})\") !default;\n$default-item-focus-bg-color: unquote(\"rgb(#{$palette-grey-200})\") !default;\n$default-item-active-bg-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$default-item-divider-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n// Disabled Button Colors\n$disabled-item-text-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n\n/* ========== Dropdown menu ========== */\n\n$default-dropdown-bg-color: unquote(\"rgb(#{$color-white})\") !default;\n\n/* ========== Tooltips ========== */\n\n$tooltip-text-color: unquote(\"rgb(#{$color-white})\") !default;\n$tooltip-background-color: unquote(\"rgba(#{$palette-grey-700}, 0.9)\") !default;\n\n/* ========== Footer ========== */\n\n$footer-bg-color: unquote(\"rgb(#{$palette-grey-800})\") !default;\n$footer-color: unquote(\"rgb(#{$palette-grey-500})\") !default;\n$footer-heading-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$footer-button-fill-color: $footer-color !default;\n$footer-underline-color: $footer-color !default;\n\n\n/* TEXTFIELD */\n\n$input-text-font-size: 16px !default;\n$input-text-width: 100% !default;\n$input-text-padding: 4px !default;\n$input-text-vertical-spacing: 20px !default;\n\n$input-text-button-size: 32px !default;\n$input-text-floating-label-fontsize: 12px !default;\n$input-text-expandable-icon-top: 16px !default;\n\n\n/* SWITCH */\n\n$switch-label-font-size: 16px !default;\n$switch-label-height: 24px !default;\n$switch-track-height: 14px !default;\n$switch-track-length: 36px !default;\n$switch-thumb-size: 20px !default;\n$switch-track-top: ($switch-label-height - $switch-track-height) / 2 !default;\n$switch-thumb-top: ($switch-label-height - $switch-thumb-size) / 2 !default;\n$switch-ripple-size: $switch-label-height * 2 !default;\n$switch-helper-size: 8px !default;\n\n/* SPINNER */\n\n$spinner-size: 28px !default;\n$spinner-stroke-width: 3px !default;\n\n// Amount of circle the arc takes up.\n$spinner-arc-size: 270deg !default;\n// Time it takes to expand and contract arc.\n$spinner-arc-time: 1333ms !default;\n// How much the start location of the arc should rotate each time.\n$spinner-arc-start-rot: 216deg !default;\n\n$spinner-duration: 360 * $spinner-arc-time / (\n strip-units($spinner-arc-start-rot + (360deg - $spinner-arc-size)));\n\n\n/* RADIO */\n\n$radio-label-font-size: 16px !default;\n$radio-label-height: 24px !default;\n$radio-button-size: 16px !default;\n$radio-inner-margin: $radio-button-size / 4;\n$radio-padding: 8px !default;\n$radio-top-offset: ($radio-label-height - $radio-button-size) / 2;\n$radio-ripple-size: 42px !default;\n\n\n/* MENU */\n\n$menu-expand-duration: 0.3s !default;\n$menu-fade-duration: 0.2s !default;\n\n/* LIST */\n\n$list-border: 8px !default;\n$list-min-height: 48px !default;\n$list-min-padding: 16px !default;\n$list-bottom-padding: 20px !default;\n$list-avatar-text-left-distance: 72px !default;\n$list-icon-text-left-distance: 72px !default;\n\n$list-avatar-size: 40px !default;\n$list-icon-size: 24px !default;\n\n$list-two-line-height: 72px !default;\n$list-three-line-height: 88px !default;\n\n/* LAYOUT */\n\n$layout-drawer-narrow: 240px !default;\n$layout-drawer-wide: 456px !default;\n$layout-drawer-width: $layout-drawer-narrow !default;\n\n$layout-header-icon-size: 32px !default;\n$layout-screen-size-threshold: 1024px !default;\n$layout-header-icon-margin: 24px !default;\n$layout-drawer-button-mobile-size: 32px !default;\n$layout-drawer-button-desktop-size: 48px !default;\n\n$layout-header-mobile-row-height: 56px !default;\n$layout-mobile-header-height: $layout-header-mobile-row-height;\n$layout-header-desktop-row-height: 64px !default;\n$layout-desktop-header-height: $layout-header-desktop-row-height;\n\n$layout-header-desktop-baseline: 80px !default;\n$layout-header-mobile-baseline: 72px !default;\n$layout-header-mobile-indent: 16px !default;\n$layout-header-desktop-indent: 40px !default;\n\n$layout-tab-font-size: 14px !default;\n$layout-tab-bar-height: 48px !default;\n$layout-tab-mobile-padding: 12px !default;\n$layout-tab-desktop-padding: 24px !default;\n$layout-tab-highlight-thickness: 2px !default;\n\n\n/* ICON TOGGLE */\n\n$icon-toggle-size: 32px !default;\n$icon-toggle-font-size: 24px !default;\n$icon-toggle-ripple-size: 36px !default;\n\n/* FOOTER */\n\n/*mega-footer*/\n$footer-min-padding: 16px !default;\n$footer-padding-sides: 40px !default;\n$footer-heading-font-size: 14px !default;\n$footer-heading-line-height: (1.7 * $footer-heading-font-size) !default;\n$footer-btn-size: 36px !default;\n\n/*mini-footer*/\n$padding: 16px !default;\n$footer-heading-font-size: 24px !default;\n$footer-heading-line-height: (1.5 * $footer-heading-font-size) !default;\n$footer-btn-size: 36px !default;\n\n/* CHECKBOX */\n\n$checkbox-label-font-size: 16px !default;\n$checkbox-label-height: 24px !default;\n$checkbox-button-size: 16px !default;\n$checkbox-inner-margin: 2px !default;\n$checkbox-padding: 8px !default;\n$checkbox-top-offset:\n($checkbox-label-height - $checkbox-button-size - $checkbox-inner-margin) / 2;\n$checkbox-ripple-size: $checkbox-label-height * 1.5;\n\n/* CARD */\n\n/* Card dimensions */\n$card-width: 330px !default;\n$card-height: 200px !default;\n$card-font-size: 16px !default;\n$card-title-font-size: 24px !default;\n$card-subtitle-font-size: 14px !default;\n$card-horizontal-padding: 16px !default;\n$card-vertical-padding: 16px !default;\n\n$card-title-perspective-origin-x: 165px !default;\n$card-title-perspective-origin-y: 56px !default;\n\n$card-title-transform-origin-x: 165px !default;\n$card-title-transform-origin-y: 56px !default;\n\n$card-title-text-transform-origin-x: 149px !default;\n$card-title-text-transform-origin-y: 48px !default;\n\n$card-supporting-text-font-size: 1rem !default;\n$card-supporting-text-line-height: 18px !default;\n\n$card-actions-font-size: 16px !default;\n\n$card-title-text-font-weight: 300 !default;\n$card-z-index: 1 !default;\n\n/* Cover image */\n$card-cover-image-height: 186px !default;\n$card-background-image-url: '' !default;\n\n\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n$button-min-width: 64px !default;\n$button-height: 36px !default;\n$button-padding: 16px !default;\n$button-margin: 4px !default;\n$button-border-radius: 2px !default;\n\n$button-fab-size: 56px !default;\n$button-fab-size-mini: 40px !default;\n$button-fab-font-size: 24px !default;\n\n$button-icon-size: 32px !default;\n$button-icon-size-mini: 24px !default;\n\n\n/* ANIMATION */\n$animation-curve-fast-out-slow-in: cubic-bezier(0.4, 0, 0.2, 1) !default;\n$animation-curve-linear-out-slow-in: cubic-bezier(0, 0, 0.2, 1) !default;\n$animation-curve-fast-out-linear-in: cubic-bezier(0.4, 0, 1, 1) !default;\n\n$animation-curve-default: $animation-curve-fast-out-slow-in !default;\n\n\n/* PROGRESS */\n$bar-height: 4px !default;\n\n/* BADGE */\n$badge-font-size: 12px !default;\n$badge-color: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n$badge-color-inverse: unquote(\"rgb(#{$color-accent})\") !default;\n$badge-background: unquote(\"rgb(#{$color-accent})\") !default;\n$badge-background-inverse: unquote(\"rgba(#{$color-accent-contrast},0.2)\") !default;\n$badge-size : 22px !default;\n$badge-padding: 2px !default;\n$badge-overlap: 12px !default;\n\n/* SHADOWS */\n\n$shadow-key-umbra-opacity: 0.2 !default;\n$shadow-key-penumbra-opacity: 0.14 !default;\n$shadow-ambient-shadow-opacity: 0.12 !default;\n\n/* GRID */\n\n$grid-desktop-columns: 12 !default;\n$grid-desktop-gutter: 16px !default;\n$grid-desktop-margin: 16px !default;\n\n$grid-desktop-breakpoint: 840px !default;\n\n$grid-tablet-columns: 8 !default;\n$grid-tablet-gutter: $grid-desktop-gutter !default;\n$grid-tablet-margin: $grid-desktop-margin !default;\n\n$grid-tablet-breakpoint: 480px !default;\n\n$grid-phone-columns: 4 !default;\n$grid-phone-gutter: $grid-desktop-gutter !default;\n$grid-phone-margin: $grid-desktop-margin !default;\n\n$grid-cell-default-columns: $grid-phone-columns !default;\n$grid-max-columns: $grid-desktop-columns !default;\n\n/* DATA TABLE */\n\n$data-table-font-size: 13px !default;\n$data-table-header-font-size: 12px !default;\n$data-table-header-sort-icon-size: 16px !default;\n\n$data-table-header-color: rgba(#000, 0.54) !default;\n$data-table-header-sorted-color: rgba(#000, 0.87) !default;\n$data-table-header-sorted-icon-hover-color: rgba(#000, 0.26) !default;\n$data-table-divider-color: rgba(#000, 0.12) !default;\n\n$data-table-hover-color: #eeeeee !default;\n$data-table-selection-color: #e0e0e0 !default;\n\n$data-table-dividers: 1px solid $data-table-divider-color !default;\n\n$data-table-row-height: 48px !default;\n$data-table-last-row-height: 56px !default;\n$data-table-header-height: 56px !default;\n\n$data-table-column-spacing: 36px !default;\n$data-table-column-padding: $data-table-column-spacing / 2;\n\n$data-table-card-header-height: 64px !default;\n$data-table-card-title-top: 20px !default;\n$data-table-card-padding: 24px !default;\n$data-table-button-padding-right: 16px !default;\n$data-table-cell-top: $data-table-card-padding / 2;\n\n/* DIALOG */\n$dialog-content-color: $card-supporting-text-text-color;\n\n/* SNACKBAR */\n\n// Hard coded since the color is not present in any palette.\n$snackbar-background-color: #323232 !default;\n$snackbar-tablet-breakpoint: $grid-tablet-breakpoint;\n$snackbar-action-color: unquote(\"rgb(#{$color-accent})\") !default;\n\n/* TOOLTIP */\n$tooltip-font-size: 10px !default;\n$tooltip-font-size-large: 14px !default;\n\n/* CHIP */\n$chip-bg-color: rgb(222, 222, 222) !default;\n$chip-bg-active-color: rgb(214, 214, 214) !default;\n$chip-height: 32px !default;\n$chip-font-size: 13px !default; \n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n\n.mdl-mini-footer {\n display: flex;\n flex-flow: row wrap;\n justify-content: space-between;\n\n padding: ($padding * 2) $padding;\n\n color: $footer-color;\n background-color: $footer-bg-color;\n\n &:after {\n content: '';\n display: block;\n }\n\n & .mdl-logo {\n line-height: $footer-btn-size;\n }\n}\n\n.mdl-mini-footer--link-list,\n.mdl-mini-footer__link-list {\n display: flex;\n flex-flow: row nowrap;\n\n list-style: none;\n\n margin: 0;\n padding: 0;\n\n & li {\n margin-bottom: 0;\n margin-right: $padding;\n\n @media screen and (min-width: 760px) {\n line-height: $footer-btn-size;\n }\n }\n\n & a {\n color: inherit;\n text-decoration: none;\n white-space: nowrap;\n }\n}\n\n.mdl-mini-footer--left-section,\n.mdl-mini-footer__left-section {\n display: inline-block;\n order: 0;\n}\n\n.mdl-mini-footer--right-section,\n.mdl-mini-footer__right-section {\n display: inline-block;\n order: 1;\n}\n\n.mdl-mini-footer--social-btn,\n.mdl-mini-footer__social-btn {\n width: $footer-btn-size;\n height: $footer-btn-size;\n\n padding: 0;\n margin: 0;\n\n background-color: $footer-button-fill-color;\n\n border: none;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n\n.mdl-card {\n display: flex;\n flex-direction: column;\n font-size: $card-font-size;\n font-weight: 400;\n min-height: $card-height;\n overflow: hidden;\n width: $card-width;\n z-index: $card-z-index;\n position: relative;\n background: $card-background-color;\n border-radius: 2px;\n box-sizing: border-box;\n}\n\n.mdl-card__media {\n background-color: $card-image-placeholder-color;\n background-repeat: repeat;\n background-position: 50% 50%;\n background-size: cover;\n background-origin: padding-box;\n background-attachment: scroll;\n box-sizing: border-box;\n}\n\n.mdl-card__title {\n align-items: center;\n color: $card-text-color;\n display: block;\n display: flex;\n justify-content: stretch;\n line-height: normal;\n padding: $card-vertical-padding $card-horizontal-padding;\n perspective-origin: $card-title-perspective-origin-x $card-title-perspective-origin-y;\n transform-origin: $card-title-transform-origin-x $card-title-transform-origin-y;\n box-sizing: border-box;\n\n &.mdl-card--border {\n border-bottom: 1px solid $card-border-color;\n }\n}\n\n.mdl-card__title-text {\n align-self: flex-end;\n color: inherit;\n display: block;\n display: flex;\n font-size: $card-title-font-size;\n font-weight: $card-title-text-font-weight;\n line-height: normal;\n overflow: hidden;\n transform-origin: $card-title-text-transform-origin-x $card-title-text-transform-origin-y;\n margin: 0;\n}\n\n.mdl-card__subtitle-text {\n font-size: $card-subtitle-font-size;\n color: $card-subtitle-color;\n margin: 0;\n}\n\n.mdl-card__supporting-text {\n color: $card-supporting-text-text-color;\n font-size: $card-supporting-text-font-size;\n line-height: $card-supporting-text-line-height;\n overflow: hidden;\n padding: $card-vertical-padding $card-horizontal-padding;\n width: 90%;\n\n &.mdl-card--border {\n border-bottom: 1px solid $card-border-color;\n }\n}\n\n.mdl-card__actions {\n font-size: $card-actions-font-size;\n line-height: normal;\n width: 100%;\n background-color: rgba(0,0,0,0);\n padding: 8px;\n box-sizing: border-box;\n\n &.mdl-card--border {\n border-top: 1px solid $card-border-color;\n }\n}\n\n.mdl-card--expand {\n flex-grow: 1;\n}\n\n\n.mdl-card__menu {\n position: absolute;\n right: 16px;\n top: 16px;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n@import \"../mixins\";\n\n// The button component. Defaults to a flat button.\n.mdl-button {\n background: transparent;\n border: none;\n border-radius: $button-border-radius;\n color: $button-secondary-color;\n position: relative;\n height: $button-height;\n margin: 0;\n min-width: $button-min-width;\n padding: 0 $button-padding;\n display: inline-block;\n @include typo-button();\n overflow: hidden;\n will-change: box-shadow;\n transition: box-shadow 0.2s $animation-curve-fast-out-linear-in,\n background-color 0.2s $animation-curve-default,\n color 0.2s $animation-curve-default;\n outline: none;\n cursor: pointer;\n text-decoration: none;\n text-align: center;\n line-height: $button-height;\n vertical-align: middle;\n\n &::-moz-focus-inner {\n border: 0;\n }\n\n &:hover {\n background-color: $button-hover-color;\n }\n\n &:focus:not(:active) {\n background-color: $button-focus-color;\n }\n\n &:active {\n background-color: $button-active-color;\n }\n\n &.mdl-button--colored {\n color: $button-primary-color-alt;\n\n &:focus:not(:active) {\n background-color: $button-focus-color-alt;\n }\n }\n}\n\ninput.mdl-button[type=\"submit\"] {\n -webkit-appearance:none;\n}\n\n // Raised buttons\n .mdl-button--raised {\n background: $button-primary-color;\n @include shadow-2dp();\n\n &:active {\n @include shadow-4dp();\n background-color: $button-active-color;\n }\n\n &:focus:not(:active) {\n @include focus-shadow();\n background-color: $button-active-color;\n }\n\n &.mdl-button--colored {\n background: $button-primary-color-alt;\n color: $button-secondary-color-alt;\n\n &:hover {\n background-color: $button-hover-color-alt;\n }\n\n &:active {\n background-color: $button-active-color-alt;\n }\n\n &:focus:not(:active) {\n background-color: $button-active-color-alt;\n }\n\n & .mdl-ripple {\n background: $button-ripple-color-alt;\n }\n }\n }\n\n\n // FABs\n .mdl-button--fab {\n border-radius: 50%;\n font-size: $button-fab-font-size;\n height: $button-fab-size;\n margin: auto;\n min-width: $button-fab-size;\n width: $button-fab-size;\n padding: 0;\n overflow: hidden;\n background: $button-primary-color;\n box-shadow: 0 1px 1.5px 0 rgba(0,0,0,0.12), 0 1px 1px 0 rgba(0,0,0,0.24);\n position: relative;\n line-height: normal;\n\n & .material-icons {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(- $button-fab-font-size / 2, - $button-fab-font-size / 2);\n line-height: $button-fab-font-size;\n width: $button-fab-font-size;\n }\n\n &.mdl-button--mini-fab {\n height: $button-fab-size-mini;\n min-width: $button-fab-size-mini;\n width: $button-fab-size-mini;\n }\n\n & .mdl-button__ripple-container {\n border-radius: 50%;\n // Fixes clipping bug in Safari.\n -webkit-mask-image: -webkit-radial-gradient(circle, white, black);\n }\n\n &:active {\n @include shadow-4dp();\n background-color: $button-active-color;\n }\n\n &:focus:not(:active) {\n @include focus-shadow();\n background-color: $button-active-color;\n }\n\n &.mdl-button--colored {\n background: $button-fab-color-alt;\n color: $button-fab-text-color-alt;\n\n &:hover {\n background-color: $button-fab-hover-color-alt;\n }\n\n &:focus:not(:active) {\n background-color: $button-fab-active-color-alt;\n }\n\n &:active {\n background-color: $button-fab-active-color-alt;\n }\n\n & .mdl-ripple {\n background: $button-fab-ripple-color-alt;\n }\n }\n }\n\n\n // Icon buttons\n .mdl-button--icon {\n border-radius: 50%;\n font-size: $button-fab-font-size;\n height: $button-icon-size;\n margin-left: 0;\n margin-right: 0;\n min-width: $button-icon-size;\n width: $button-icon-size;\n padding: 0;\n overflow: hidden;\n color: inherit;\n line-height: normal;\n\n & .material-icons {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(- $button-fab-font-size / 2, - $button-fab-font-size / 2);\n line-height: $button-fab-font-size;\n width: $button-fab-font-size;\n }\n\n &.mdl-button--mini-icon {\n height: $button-icon-size-mini;\n min-width: $button-icon-size-mini;\n width: $button-icon-size-mini;\n\n & .material-icons {\n top: ($button-icon-size-mini - $button-fab-font-size) / 2;\n left: ($button-icon-size-mini - $button-fab-font-size) / 2;\n }\n }\n\n & .mdl-button__ripple-container {\n border-radius: 50%;\n // Fixes clipping bug in Safari.\n -webkit-mask-image: -webkit-radial-gradient(circle, white, black);\n }\n }\n\n\n // Ripples\n .mdl-button__ripple-container {\n display: block;\n height: 100%;\n left: 0px;\n position: absolute;\n top: 0px;\n width: 100%;\n z-index: 0;\n overflow: hidden;\n\n .mdl-button[disabled] & .mdl-ripple,\n .mdl-button.mdl-button--disabled & .mdl-ripple {\n background-color: transparent;\n }\n }\n\n// Colorized buttons\n\n.mdl-button--primary.mdl-button--primary {\n color: $button-primary-color-alt;\n & .mdl-ripple {\n background: $button-secondary-color-alt;\n }\n &.mdl-button--raised, &.mdl-button--fab {\n color: $button-secondary-color-alt;\n background-color: $button-primary-color-alt;\n }\n}\n\n.mdl-button--accent.mdl-button--accent {\n color: $button-fab-color-alt;\n & .mdl-ripple {\n background: $button-fab-text-color-alt;\n }\n &.mdl-button--raised, &.mdl-button--fab {\n color: $button-fab-text-color-alt;\n background-color: $button-fab-color-alt;\n }\n}\n\n// Disabled buttons\n\n.mdl-button {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n color: $button-secondary-color-disabled;\n cursor: default;\n background-color: transparent;\n }\n\n &--fab {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n background-color: $button-primary-color-disabled;\n color: $button-secondary-color-disabled;\n }\n }\n\n &--raised {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n background-color: $button-primary-color-disabled;\n color: $button-secondary-color-disabled;\n box-shadow: none;\n }\n }\n &--colored {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n color: $button-secondary-color-disabled;\n }\n }\n}\n\n// Align icons inside buttons with text\n.mdl-button .material-icons {\n vertical-align: middle;\n}\n","// SIMPLE GRID - SASS/SCSS\n\n\n// fonts\n$font-weight-light: 300;\n$font-weight-regular: 400;\n$font-weight-heavy: 700;\n\n// colors\n$dark-grey: #333447;\n$dark-gray: #333447; // for the Americans\n\n\n.font-light {\n font-weight: $font-weight-light;\n}\n\n.font-regular {\n font-weight: $font-weight-regular;\n}\n\n.font-heavy {\n font-weight: $font-weight-heavy;\n}\n\n// utility\n\n.left {\n text-align: left;\n}\n\n.right {\n text-align: right;\n}\n\n.center {\n text-align: center;\n margin-left: auto;\n margin-right: auto;\n}\n\n.justify {\n text-align: justify;\n}\n\n.hidden-sm {\n display: none;\n}\n\n// grid\n\n$width: 98%;\n$gutter: 2%;\n$breakpoint-small: 33.75em; // 540px\n$breakpoint-med: 45em; // 720px\n$breakpoint-large: 60em; // 960px\n\n.container {\n width: 100%;\n margin-left: auto;\n margin-right: auto;\n}\n\n.row {\n position: relative;\n width: 100%;\n}\n\n.row [class^=\"col\"] {\n float: left;\n margin: 0.5rem 1%;\n min-height: 0.125rem;\n}\n\n.row::after {\n content: \"\";\n display: table;\n clear: both;\n}\n\n.col-1,\n.col-2,\n.col-3,\n.col-4,\n.col-5,\n.col-6,\n.col-7,\n.col-8,\n.col-9,\n.col-10,\n.col-11,\n.col-12 {\n width: $width;\n}\n\n.col-1-sm {\n width: ($width / 12) - ($gutter * 11 / 12);\n}\n\n.col-2-sm {\n width: ($width / 6) - ($gutter * 10 / 12);\n}\n\n.col-3-sm {\n width: ($width / 4) - ($gutter * 9 / 12);\n}\n\n.col-4-sm {\n width: ($width / 3) - ($gutter * 8 / 12);\n}\n\n.col-5-sm {\n width: ($width / (12 / 5)) - ($gutter * 7 / 12);\n}\n\n.col-6-sm {\n width: ($width / 2) - ($gutter * 6 / 12);\n}\n\n.col-7-sm {\n width: ($width / (12 / 7)) - ($gutter * 5 / 12);\n}\n\n.col-8-sm {\n width: ($width / (12 / 8)) - ($gutter * 4 / 12);\n}\n\n.col-9-sm {\n width: ($width / (12 / 9)) - ($gutter * 3 / 12);\n}\n\n.col-10-sm {\n width: ($width / (12 / 10)) - ($gutter * 2 / 12);\n}\n\n.col-11-sm {\n width: ($width / (12 / 11)) - ($gutter * 1 / 12);\n}\n\n.col-12-sm {\n width: $width;\n}\n\n@media only screen and (min-width: $breakpoint-med) {\n .col-1 {\n width: ($width / 12) - ($gutter * 11 / 12);\n }\n .col-2 {\n width: ($width / 6) - ($gutter * 10 / 12);\n }\n .col-3 {\n width: ($width / 4) - ($gutter * 9 / 12);\n }\n .col-4 {\n width: ($width / 3) - ($gutter * 8 / 12);\n }\n .col-5 {\n width: ($width / (12 / 5)) - ($gutter * 7 / 12);\n }\n .col-6 {\n width: ($width / 2) - ($gutter * 6 / 12);\n }\n .col-7 {\n width: ($width / (12 / 7)) - ($gutter * 5 / 12);\n }\n .col-8 {\n width: ($width / (12 / 8)) - ($gutter * 4 / 12);\n }\n .col-9 {\n width: ($width / (12 / 9)) - ($gutter * 3 / 12);\n }\n .col-10 {\n width: ($width / (12 / 10)) - ($gutter * 2 / 12);\n }\n .col-11 {\n width: ($width / (12 / 11)) - ($gutter * 1 / 12);\n }\n .col-12 {\n width: $width;\n }\n\n .hidden-sm {\n display: block;\n }\n}\n\n.row {\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n flex-wrap: wrap;\n}\n\n.row > [class*='col-'] {\n display: flex;\n flex-direction: column;\n}\n","\n/*\nMaterial Icons\n*/\n\n.material-icons {\n font-family: 'Material Icons';\n font-weight: normal;\n font-style: normal;\n font-size: 24px; /* Preferred icon size */\n display: inline-block;\n line-height: 1;\n text-transform: none;\n letter-spacing: normal;\n word-wrap: normal;\n white-space: nowrap;\n direction: ltr;\n \n /* Support for all WebKit browsers. */\n -webkit-font-smoothing: antialiased;\n /* Support for Safari and Chrome. */\n text-rendering: optimizeLegibility;\n \n /* Support for Firefox. */\n -moz-osx-font-smoothing: grayscale;\n \n /* Support for IE. */\n font-feature-settings: 'liga';\n }","html {\n font-size: $font_size;\n}\n\nbody {\n display: block !important;\n background-color: $background_color;\n font-size: 1rem;\n line-height: 1.5rem;\n font-family: $body_font_family;\n}\n\n.mdl-layout__content:focus {\n outline: none;\n }\n\n.mdl-layout__content header.mdl-layout__drawer {\n display: none;\n}\n\n.mdl-layout--fixed-drawer>.mdl-layout__content {\n margin-left: 300px; \n}\n\n@media screen and (max-width: 1024px) {\n .mdl-layout--fixed-drawer>.mdl-layout__content {\n margin-left:0\n }\n}\n\nh1, h2, h3, h4, h5, h6, blockquote, span.mdl-layout-title,\na.download > code.download {\n font-family: $body_font_family;\n}\n\nh1, h2, h3, h4, h5, h6, .toc-backref, .contents, .toctree-wrapper, .contents a, .toctree-wrapper a, .globaltoc a.current {\n color: $color-mxnet !important;\n}\n\na {\n text-decoration: none;\n}\n\n.page-content {\n font-size: 1rem;\n p, ul, ol, dl, dd, dt, table, th, td {\n font-size: 1rem;\n }\n}\n\n.brand {\n color: inherit;\n text-decoration: none;\n}\n\n.section {\n overflow-x: auto;\n}\n\n\n/*\n * Figure Directive Styles\n */\n img {\n max-width: 100%;\n display: block;\n margin-left: auto;\n margin-right: auto;\n }\n\ndiv.figure {\n p.caption {\n text-align: center;\n margin-top: .75rem;\n\n span.caption-number {\n font-style: normal;\n }\n .caption-number::after {\n content: \"\\00a0\";\n }\n }\n}\n\n.svg-icon {\n width: 16px;\n height: 16px;\n display: inline-block;\n fill: $grey-color-light;\n padding-right: 5px;\n padding-top: 4px;\n vertical-align: text-top;\n}\n\n/*\n * Download Link Styles\n */\na.download > i.material-icons {\n position: relative;\n top: 5px;\n}\n\na.download {\n text-decoration: none;\n}\n\n%clearfix:after {\n content: \"\";\n display: table;\n clear: both;\n}\n\n.wrapper {\n max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit} * 2));\n max-width: calc(#{$content-width} - (#{$spacing-unit} * 2));\n margin-right: auto;\n margin-left: auto;\n padding-right: calc(#{$spacing-unit}+15px);\n padding-left: $spacing-unit;\n @extend %clearfix;\n\n @media screen and (max-width: $on-laptop) {\n max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit}));\n max-width: calc(#{$content-width} - (#{$spacing-unit}));\n padding-right: $spacing-unit / 2;\n padding-left: $spacing-unit / 2;\n }\n}\n\n","/*\nVariables\n*/\n$font_size: 16px;\n\n$background_color: #fafafa;\n$code_background: rgba(0,0,0,.05);\n\n$code_font_family: \"Menlo\", \"DejaVu Sans Mono\", \"Liberation Mono\", \"Consolas\", \"Ubuntu Mono\", \"Courier New\", \"andale mono\", \"lucida console\", monospace !default;\n$body_font_family: -apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\" !default;\n$base-font-size: 17px !default;\n\n$xl-breakpoint: 1795px;\n$lg-breakpoint: 1200px;\n$md-breakpoint: 992px;\n$sm-breakpoint: 768px;\n$xs-breakpoint: 576px;\n\n$color-primary: $palette-blue-500;\n$color-primary-dark: $palette-blue-700 !default;\n$color-accent: $palette-deep-orange-A200 !default;\n$color-primary-contrast: $color-white !default;\n$color-accent-contrast: $color-white !default;\n\n\n$base-line-height: 1.5 !default;\n$spacing-unit: 30px !default;\n\n$color-mxnet: rgb(4,140,204);\n$color-mxnet-dark: rgb(4,60,110);\n$grey-color: #828282 !default;\n$grey-color-light: lighten($grey-color, 45%) !default;\n$grey-color-dark: darken($grey-color, 25%) !default;\n\n$table-text-align: left !default;\n\n// Width of the content area\n$content-width: 1150px !default;\n\n$on-palm: 600px !default;\n$on-palm: 900px !default;\n$on-laptop: 1024px !default;","/**\n * Layout Styles\n */\n $layout: (\n document: (\n xl: (\n width: 100%,\n )\n ),\n drawer-container: (\n width: $layout-drawer-width,\n ),\n side-doc-outline: (\n width: 230px,\n ),\n page-content: (\n md: (\n width: 90%,\n padding: 0 5%\n ),\n lg: (\n width: calc( 90% - 230px ),\n padding: 0 5%\n )\n )\n);\n\n.mdl-layout {\n margin-top: 76px;\n}\n\n\n.document {\n width: 100%;\n margin: 0 auto;\n display: flex;\n\n @media (min-width: $xl-breakpoint) {\n width: map-get(map-get(map-get($layout, document), xl), width);\n }\n .page-content {\n width: 100%;\n margin: 0 auto;\n padding: 0 12px;\n\n @media (min-width: $md-breakpoint) {\n width: map-get(map-get(map-get($layout, page-content), md), width);\n padding: map-get(map-get(map-get($layout, page-content), md), padding);\n }\n\n @media (min-width: $lg-breakpoint) {\n width: map-get(map-get(map-get($layout, page-content), lg), width);\n padding: map-get(map-get(map-get($layout, page-content), lg), padding);\n }\n }\n\n .side-doc-outline {\n width: map-get(map-get($layout, side-doc-outline), width);\n\n @media (max-width: $lg-breakpoint - 1) {\n display: none;\n } \n &--content {\n position: fixed;\n overflow-x: auto;\n overflow-y: auto;\n width: inherit;\n right: 0px;\n &::-webkit-scrollbar {\n width: 6px;\n }\n \n &::-webkit-scrollbar-track {\n border-radius: 6px;\n }\n \n &::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, .3);\n border-radius: 6px;\n box-shadow:0 0 0 1px rgba(255, 255, 255, .3);\n }\n }\n }\n\n}","@keyframes float-in {\n 0% {\n transform: translateY(0.5rem);\n opacity: 0;\n }\n\t100% {\n\t\ttransform: translateY(0);\n\t\topacity: 1;\n\t}\n}\n\n@keyframes float-out {\n 0% {\n transform: translateY(0);\n opacity: 1;\n }\n\t100% {\n\t\ttransform: translateY(0.5rem);\n\t\topacity: 0;\n\t}\n}\n\n.page-content {\n .headerlink {\n display: inline-block;\n text-decoration: none;\n margin-left: 0.8rem;\n color: inherit;\n opacity: 0;\n &:hover {\n animation: float-in 0.2s $animation-curve-fast-out-slow-in 0s forwards;\n }\n }\n\n h1, h2, h3, h4, h5, h6 {\n .toc-backref {\n text-decoration: none;\n }\n &:hover {\n .headerlink {\n animation: float-in 0.2s $animation-curve-fast-out-slow-in 0s forwards;\n }\n }\n }\n\n h1 {\n font-size: 2rem;\n line-height: 2.25rem;\n }\n\n h2 {\n font-size: 1.75rem;\n line-height: 2rem;\n padding-top: 1.5rem;\n margin-top: 0;\n margin-bottom: 1rem;\n }\n\n h3 {\n font-size: 1.5rem;\n line-height: 1.75rem;\n padding-top: 1rem;\n margin-top: 0px;\n margin-bottom: .75rem;\n }\n\n h4 {\n font-size: 1.25rem;\n line-height: 1.5rem;\n padding-top: .75rem;\n margin-top: 0px;\n margin-bottom: .5rem;\n }\n\n div.page-content h5 {\n font-size: 1.1rem;\n line-height: 1.5rem;\n padding-top: 2rem;\n margin-top: 0px;\n margin-bottom: 1rem;\n }\n\n div.page-content h6 {\n font-size: 1rem;\n line-height: 1.5rem;\n padding-top: 2rem;\n margin-top: 0px;\n margin-bottom: 1rem;\n }\n\n\n}\n","\n/*\n * Admonition Styles\n */\n $admonitions: (\n hint: (\n font-color: rgb(0, 188, 212),\n background-color: rgba(0, 188, 212, 0.1),\n icon-content: \"help_outline\"\n ),\n note: (\n font-color: rgb(0, 188, 212),\n background-color: rgba(0, 188, 212, 0.1),\n icon-content: \"info_outline\"\n ),\n seealso: (\n font-color: rgb(0, 188, 212),\n background-color: rgba(0, 188, 212, 0.1),\n icon-content: \"search\"\n ),\n warning: (\n font-color: rgb(255, 193, 7),\n background-color: rgba(255, 193, 7, 0.1),\n icon-content: \"warning\"\n ),\n attention: (\n font-color: rgb(255, 193, 7),\n background-color: rgba(255, 193, 7, 0.1),\n icon-content: \"warning\"\n ),\n tip: (\n font-color: rgb(139, 195, 74),\n background-color: rgba(139, 195, 74, 0.1),\n icon-content: \"lightbulb_outline\"\n ),\n important: (\n font-color: rgb(139, 195, 74),\n background-color: rgba(139, 195, 74, 0.1),\n icon-content: \"check_circle\"\n ),\n error: (\n font-color: rgb(244, 67, 54),\n background-color: rgba(244, 67, 54, 0.1),\n icon-content: \"error_outline\"\n ),\n caution: (\n font-color: rgb(244, 67, 54),\n background-color: rgba(244, 67, 54, 0.1),\n icon-content: \"error_outline\"\n ),\n danger: (\n font-color: rgb(244, 67, 54),\n background-color: rgba(244, 67, 54, 0.1),\n icon-content: \"error_outline\"\n )\n);\n\n @mixin admonition-style($type) {\n border-left: solid 4px map-get(map-get($admonitions, $type), font-color);\n background-color: map-get(map-get($admonitions, $type), background-color);\n .admonition-title {\n font-size: 16px;\n font-weight: bold;\n color: map-get(map-get($admonitions, $type), font-color);\n\n margin-top: 4px;\n margin-bottom: 8px;\n &::before {\n @extend .material-icons;\n position: relative;\n margin-right: 5px;\n top: 3px;\n content: map-get(map-get($admonitions, $type), icon-content);\n font-size: 18px;\n }\n }\n}\n\n.admonition {\n @extend .mdl-shadow--2dp;\n\n padding: 12px 20px;\n margin-top: 10px;\n margin-bottom: 10px;\n p.last {\n margin: 16px;\n }\n .admonition-title {\n font-size: 16px;\n font-weight: bold;\n color: #555;\n text-transform: uppercase;\n margin-top: 7px;\n }\n\n @each $type in (note, seealso, hint, warning, attention, tip, important, error, caution, danger) {\n &.#{$type} {\n @include admonition-style($type);\n }\n }\n}\n",".page-content {\n .highlight {\n margin: 1px 0;\n pre {\n background: $code_background;\n color: rgba(0,0,0,.87);\n font-family: $code_font_family;\n padding: 0.75rem;\n overflow: auto;\n overflow-y: hidden;\n .o, .nd {\n color: rgba(0,0,0,.87);\n }\n }\n }\n\n div.highlight-console div.highlight {\n background: none;\n }\n\n // for jupyter notebook output cell\n .output {\n .highlight {\n pre {\n color: rgba(0,0,0,.87);\n background: $background_color;\n border-width: 1px;\n border-color: #999;\n border-style: solid;\n padding: 0.75rem;\n }\n }\n }\n\n .code, code:not(.download) {\n margin: 0 0;\n font-family: $code_font_family;\n border-radius: 2px;\n span.pre {\n font-family: $code_font_family;\n }\n }\n\n .viewcode-link {\n padding-left: 2em;\n font-size: 80%;\n }\n\n .rubric, .method > dt, .function > dt, .class > dt {\n display: table;\n margin: 10px 0;\n font-size: 100%;\n line-height: normal;\n background: #e7f2fa;\n color: #2B98F0;\n border-top: solid 3px #55ADF3;\n padding: 10px;\n position: relative;\n .descname, .descclassname {\n color: rgba(0,0,0,.87);\n background: #e7f2fa;\n padding: 3px;\n }\n em {\n padding: 0 2px;\n }\n }\n\n\n .rubric {\n margin: 30px 0 10px 0;\n }\n\n\n .field-body {\n padding-left: 40px;\n ul {\n padding: 0 0 0 16px;\n margin: 0;\n }\n }\n\n // .docutils > dt {\n // padding: 6px;\n // display: table;\n // margin-bottom: 6px;\n // border: none;\n // border-left: solid 3px #ccc;\n // background: #f0f0f0;\n // color: #555;\n // }\n\n .seealso .docutils > dt {\n float: left;\n clear: left;\n padding: 0 6px;\n }\n\n .seealso .docutils > dd {\n padding-left: 6em;\n }\n .nblast {\n padding-bottom: 1em;\n }\n\n pre {\n font-size: 90%;\n background: #eee;\n color: #455A64;\n padding: 16px 32px;\n width: auto;\n border-radius: 4px;\n word-wrap: break-word;\n\n &:hover {\n @extend .mdl-shadow--2dp;\n\n &:before {\n font-family: $body_font_family;\n padding: 0 0.5rem;\n content: attr(click-to-copy);\n color: rgba(0, 0, 0, 0.5);\n border-radius: 4px;\n position: relative;\n float: right;\n top: -0.5rem;\n right: -0.5rem;\n background: rgb(200, 200, 200);\n font-size: 0.8rem;\n cursor: pointer;\n }\n }\n }\n}\n","/*\n * Quotation Block Styles\n */\n .page-content {\n blockquote {\n font-size: 1rem;\n padding: 0 1rem;\n border-left: 3px solid $code_background;\n\n &:after {\n content: \"\" !important;\n margin-left: 0;\n }\n &:before {\n content: \"\" !important;\n }\n }\n }\n",".page-content {\n table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) {\n @extend .mdl-data-table;\n @extend .mdl-shadow--2dp;\n\n margin: 1.5rem 0;\n table-layout: fixed;\n max-width: 100%;\n min-width: 70%;\n\n th, td {\n @extend .mdl-data-table__cell--non-numeric;\n white-space: normal;\n overflow-wrap: break-word;\n }\n\n caption {\n font-size: $font_size;\n margin: 1rem 0 0.8rem 0;\n white-space: normal;\n .caption-number {\n font-style: normal;\n }\n .caption-number::after {\n content: \"\\00a0\";\n }\n }\n\n }\n}\n",".globaltoc {\n \n .caption, .toc {\n display: none;\n }\n\n ul {\n\n list-style-type: none;\n padding: 0;\n margin: 0;\n\n li {\n min-height: 18px;\n .link-wrapper {\n display: flex;\n justify-content: space-between;\n > a {\n padding: 4px 0;\n display: block;\n width: 100%;\n font-size: 1rem;\n text-decoration: none;\n color: $layout-drawer-navigation-color;\n &.current {\n font-weight: bold;\n }\n }\n }\n }\n }\n\n .nav-toggle {\n padding: 0;\n float: right;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 36px;\n > a {\n padding: 0;\n margin-left: 0;\n margin-right: 4px;\n cursor: pointer;\n > i {\n font-size: 18px;\n }\n }\n &.show {\n transform: rotateZ(180deg);\n > a {\n margin-right: 0;\n margin-left: 4px;\n }\n }\n }\n\n nav {\n > ul > li > span.link-wrapper {\n padding-left: 8px;\n }\n > ul > li > ul > li > span.link-wrapper {\n padding-left: 16px;\n }\n > ul > li > ul > li > ul > li > span.link-wrapper {\n padding-left: 24px;\n }\n > ul > li > ul > li > ul > li > ul> li > span.link-wrapper {\n padding-left: 32px;\n }\n > ul > li > ul > li > ul > li > ul > li > ul> li > span.link-wrapper {\n padding-left: 40px;\n }\n > ul > li > ul > li > ul > li > ul > li > ul > li > ul> li > span.link-wrapper {\n padding-left: 48px;\n }\n }\n}\n",".localtoc {\n font-size: 0.75rem;\n padding-top: 1rem;\n\n .caption {\n padding-left: 12px;\n &-text {\n font-size: 0.9rem;\n font-weight: 700;\n }\n }\n\n > ul > li > a {\n display: none;\n }\n\n ul {\n padding: 0;\n list-style-type: none;\n }\n\n li {\n padding-left: 6px;\n }\n\n a {\n display: block;\n text-decoration: none;\n color: inherit;\n margin-top: 8px;\n padding-left: 8px;\n line-height: 1.1rem;\n \n &.current {\n padding-left: 5px;\n border-left: 3px solid;\n font-weight: bold;\n }\n }\n}","/*\r\n * Toctree and Contents Directive Styles\r\n */\r\n .toctree-wrapper,\r\n .contents.topic {\r\n border-left: 5px solid;\r\n }\r\n\r\n .toctree-wrapper > p.caption,\r\n .contents.topic > p.topic-title {\r\n color: rgb(117, 117, 117);\r\n font-size: 1rem;\r\n padding-left: 14px;\r\n }\r\n\r\n .toctree-wrapper ul,\r\n .contents.topic ul{\r\n padding-left: 14px;\r\n list-style: none;\r\n line-height: 30px;\r\n }\r\n\r\n .toctree-wrapper a,\r\n .contents.topic a {\r\n font-size: 1.2rem;\r\n text-decoration: none;\r\n .pre {\r\n font-size: 1rem;\r\n }\r\n }\r\n\r\n .toctree-wrapper > ul > li > a,\r\n .contents.topic > ul > li > a {\r\n font-size: 1.3rem;\r\n .pre {\r\n font-size: 1.1rem;\r\n }\r\n }\r\n",".page-content {\n ul {\n li {\n margin: .3rem 0;\n p {\n margin: 0;\n }\n }\n }\n .option-list {\n .option {\n font-family: $code_font_family;\n }\n td {\n padding: 0.5rem;\n border: none;\n }\n }\n}\n","/*\r\n * Drawer Styles\r\n */\r\n.mdl-layout {\r\n &__drawer {\r\n background-color: #fff;\r\n\r\n &::-webkit-scrollbar {\r\n width: 6px;\r\n }\r\n\r\n &::-webkit-scrollbar-track {\r\n border-radius: 6px;\r\n }\r\n\r\n &::-webkit-scrollbar-thumb {\r\n background-color: rgba(0, 0, 0, .3);\r\n border-radius: 6px;\r\n box-shadow:0 0 0 1px rgba(255, 255, 255, .3);\r\n }\r\n\r\n > .mdl-layout-title {\r\n font-weight: bold;\r\n text-align: right;\r\n margin: 0;\r\n padding: 0;\r\n line-height: 32px;\r\n border-bottom: 1px solid rgba(0,0,0,.1);\r\n min-height: 64px;\r\n .title {\r\n color: inherit;\r\n display: block;\r\n height: 100%;\r\n width: 100%;\r\n text-decoration: none;\r\n > img.logo {\r\n width: 100%;\r\n margin: 0;\r\n padding: 0;\r\n }\r\n\r\n &-text {\r\n font-weight: bold;\r\n text-align: right;\r\n padding: 0 10px;\r\n margin: 16px 0 8px 0;\r\n line-height: 32px;\r\n font-family: $body_font_family;\r\n color: inherit;\r\n display: block;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","/*\r\n * Header Styles\r\n */\r\n\r\nnav.breadcrumb {\r\n > a.mdl-navigation__link {\r\n padding: 0 8px;\r\n font-size: 18px;\r\n }\r\n @media (max-width: $lg-breakpoint - 1) {\r\n width: calc( 100% - 64px );\r\n a.mdl-navigation__link.is-active {\r\n overflow-x: hidden;\r\n width: 100%;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n }\r\n a.mdl-navigation__link:not(.is-active),\r\n i.material-icons {\r\n display: none;\r\n }\r\n }\r\n}\r\n\r\ndiv.mdl-layout__header {\r\n margin-top: 77px;\r\n}\r\n\r\n.mdl-layout__drawer-button {\r\n top: 13px !important;\r\n}\r\n\r\ndiv.mdl-layout__header-row.header-links {\r\n background: rgba(255,255,255,0.2);\r\n width: 100%;\r\n overflow-x: auto;\r\n overflow-y: hidden;\r\n\r\n a.mdl-navigation__link {\r\n font-size: 1rem;\r\n i {\r\n font-size: 1.2rem;\r\n margin: 0 8px;\r\n position: relative;\r\n bottom: -0.1rem;\r\n }\r\n };\r\n\r\n a.mdl-navigation__link:hover {\r\n background-color: unquote(\"rgb(#{$color-primary})\");\r\n color: #eeeeee;\r\n };\r\n a.mdl-navigation__link[href=\"#\"] {\r\n background-color: unquote(\"rgb(#{$color-primary})\");\r\n opacity: 1;\r\n color: #ffffff;\r\n };\r\n}\r\n\r\n/* mxnet-header */\r\n\r\n\r\n.site-title {\r\n font-weight: 300 !important;\r\n line-height: 57px;\r\n letter-spacing: -1px;\r\n margin-bottom: 0;\r\n float: left;\r\n color: white;\r\n\r\n &,\r\n &:visited {\r\n color: $grey-color-dark;\r\n }\r\n}\r\n\r\n\r\n.site-header {\r\n position: fixed;\r\n top: 0;\r\n width: 100%;\r\n min-height: 55px;\r\n padding-top: 10px;\r\n padding-bottom: 10px;\r\n background-color: $color-mxnet;\r\n z-index: 10;\r\n font-weight: 300;\r\n font-size: 17px;\r\n border-bottom: 1px solid white;\r\n}\r\n\r\n.site-header-logo {\r\n width: 120px;\r\n display: initial;\r\n}\r\n\r\n.site-nav {\r\n float: right;\r\n line-height: 57px;\r\n\r\n .nav-trigger {\r\n display: none;\r\n }\r\n\r\n .menu-icon {\r\n display: none;\r\n }\r\n\r\n .page-link {\r\n color: white;\r\n line-height: 1.5;\r\n font-weight: 300;\r\n // Gaps between nav items, but not on the last one\r\n &:not(:last-child) {\r\n margin-right: 40px;\r\n }\r\n\r\n &:hover {\r\n color: white;\r\n text-shadow: -0.06ex 0 white, 0.06ex 0 white;\r\n }\r\n }\r\n\r\n .page-link.page-current {\r\n color: white;\r\n text-decoration: underline;\r\n }\r\n\r\n @media screen and (max-width: $on-laptop) {\r\n position: absolute;\r\n top: 9px;\r\n right: 15px;\r\n background-color: rgb(23,141,201);\r\n border-radius: 2px;\r\n text-align: right;\r\n\r\n label[for=\"nav-trigger\"] {\r\n display: block;\r\n float: right;\r\n width: 36px;\r\n height: 36px;\r\n z-index: 2;\r\n cursor: pointer;\r\n }\r\n\r\n .menu-icon {\r\n display: block;\r\n float: right;\r\n width: 36px;\r\n height: 26px;\r\n line-height: 0;\r\n padding-top: 20px;\r\n text-align: center;\r\n\r\n > svg {\r\n fill: white;\r\n }\r\n }\r\n\r\n input ~ .trigger {\r\n clear: both;\r\n display: none;\r\n }\r\n\r\n input:checked ~ .trigger {\r\n display: block;\r\n padding-bottom: 5px;\r\n }\r\n\r\n .page-link {\r\n padding: 5px 10px;\r\n display: block;\r\n\r\n &:not(:last-child) {\r\n margin-right: 0;\r\n }\r\n\r\n margin-left: 20px;\r\n }\r\n }\r\n}","/*\r\n * Footer Styles\r\n */\r\nfooter.mdl-mini-footer {\r\n background-color: #212121;\r\n > div.mdl-mini-footer__left-section {\r\n margin-bottom: 20px;\r\n display: flex;\r\n flex-direction: column;\r\n .mdl-logo {\r\n font-size: 1.1rem;\r\n }\r\n ul {\r\n @extend .mdl-mini-footer__link-list;\r\n }\r\n }\r\n > div.mdl-mini-footer__right-section {\r\n font-size: 0.9rem;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: flex-end;\r\n\r\n a {\r\n color: inherit;\r\n font-weight: bold;\r\n text-decoration: none;\r\n }\r\n }\r\n p.caption {\r\n display: none;\r\n }\r\n}\r\n\r\n/*\r\n * Pagenation Block Styles\r\n */\r\n .pagenation {\r\n width: 100%;\r\n margin-top: 80px;\r\n height: 92px;\r\n background-color: #424242;\r\n display: flex;\r\n\r\n .button-common {\r\n text-transform: none;\r\n padding: 0;\r\n height: 92px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n color: #ffffff;\r\n }\r\n #button-prev {\r\n @extend .button-common;\r\n margin-right: auto;\r\n .pagenation-text {\r\n text-align: left;\r\n }\r\n \r\n }\r\n #button-next {\r\n @extend .button-common;\r\n margin-left: auto;\r\n flex-direction: row-reverse;\r\n .pagenation-text {\r\n text-align: right;\r\n }\r\n }\r\n\r\n &-arrow {\r\n &-L {\r\n margin-right: 20px;\r\n }\r\n &-R {\r\n margin-left: 20px;\r\n }\r\n }\r\n\r\n &-text {\r\n line-height: 30px;\r\n font-size: 20px;\r\n }\r\n\r\n &-direction {\r\n opacity: 0.7;\r\n font-size: 18px;\r\n }\r\n @media screen and (max-width: 1024px) {\r\n #button-prev {\r\n width: 20%;\r\n }\r\n \r\n #button-next {\r\n width: 80%;\r\n }\r\n \r\n #button-prev .pagenation-text {\r\n display: none;\r\n }\r\n }\r\n @media screen and (min-width: 1025px) {\r\n #button-prev,\r\n #button-next {\r\n width: 50%;\r\n }\r\n \r\n #button-prev .pagenation-text {\r\n display: block;\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n/**\r\n * Site footer\r\n */\r\n.site-footer {\r\n border-top: 1px solid $grey-color-light;\r\n padding: $spacing-unit 0;\r\n background-color: #424242;\r\n position: relative;\r\n z-index: 10;\r\n .footer-category-title {\r\n color: $color-mxnet;\r\n }\r\n a {\r\n color: $grey-color-light !important;\r\n\r\n &:visited {\r\n color: $grey-color-light !important;\r\n }\r\n }\r\n\r\n}\r\n\r\n.site-footer2 {\r\n background-color: #424242;\r\n padding-top: 40px;\r\n padding-bottom: 10px;\r\n position: relative;\r\n z-index: 10;\r\n}\r\n\r\n.footer-heading {\r\n margin-bottom: $spacing-unit / 2;\r\n}\r\n\r\n.contact-list,\r\n.social-media-list {\r\n list-style: none;\r\n margin-left: 0;\r\n}\r\n\r\n\r\n.footer-bottom-warning {\r\n font-size: 80%;\r\n color: white;\r\n float: left;\r\n}\r\n\r\n.footer-logo {\r\n width: 200px;\r\n margin-bottom: 30px;\r\n margin-top: 30px;\r\n}\r\n\r\n.footer-col {\r\n float: left;\r\n margin-bottom: $spacing-unit / 2;\r\n padding-left: $spacing-unit / 2;\r\n}\r\n\r\n.footer-text {\r\n color: $grey-color-light;\r\n}\r\n\r\n"," /*\r\n * Search Styles\r\n */\r\n#waterfall-exp::-webkit-input-placeholder {\r\n color: #ccc;\r\n}\r\n#waterfall-exp:-ms-input-placeholder {\r\n color: #ccc;\r\n}\r\n#waterfall-exp::-moz-placeholder {\r\n color: #ccc;\r\n}\r\n\r\nul.search span.highlighted {\r\n font-weight: bold;\r\n}\r\n\r\nul.search > li {\r\n margin-bottom: 24px;\r\n}\r\n\r\n#search-results {\r\n ul {\r\n list-style: none;\r\n padding: 0;\r\n li {\r\n > a {\r\n text-decoration: none;\r\n font-size: 1.2rem;\r\n }\r\n }\r\n }\r\n}\r\n","a.download {\n &:before {\n @extend .material-icons;\n content: \"file_download\";\n position: relative;\n top: 5px;\n margin-right: 5px;\n }\n}\n\nbutton.download {\n position: sticky;\n margin-left: 1em;\n}\n",".mdl-card {\n margin: 1em 1.5em 1em 0;\n display: inline-block;\n width: 250px;\n min-height: 140px;\n padding: 18px;\n}\n.mdl-card:hover {\n box-shadow: 0 10px 20px rgba(0,0,0,0.25), 0 6px 6px rgba(0,0,0,0.22);\n color: #000;\n cursor: pointer;\n}\n.mdl-card__title {\n padding: 0 0 1em 0;\n font-size: 18px;\n color: #444;\n}\n\n.mdl-card__supporting-text {\n line-height: 1.5rem;\n padding: 0px;\n width: 100%;\n}\n\n.head-card.mdl-card {\n width: auto;\n display: block;\n max-width: 800px;\n padding: 24px;\n}\n\n.head-card > .mdl-card__title {\n padding-bottom: 0px;\n height: 60px;\n font-weight: 700;\n text-transform: uppercase;\n}\n.head-card > .mdl-card__menu {\n color: #fff;\n}\n.head-card > .mdl-card__actions {\n padding: 0;\n}\n.cards {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n}\n"]} \ No newline at end of file diff --git a/docs/python_docs/themes/mx-theme/src/scss/_root.scss b/docs/python_docs/themes/mx-theme/src/scss/_root.scss index 5893d7d0adc3..0cfa14572864 100644 --- a/docs/python_docs/themes/mx-theme/src/scss/_root.scss +++ b/docs/python_docs/themes/mx-theme/src/scss/_root.scss @@ -22,6 +22,12 @@ body { margin-left: 300px; } +@media screen and (max-width: 1024px) { + .mdl-layout--fixed-drawer>.mdl-layout__content { + margin-left:0 + } +} + h1, h2, h3, h4, h5, h6, blockquote, span.mdl-layout-title, a.download > code.download { font-family: $body_font_family; From 7a240061bbaa5fc4dfcdd59945136ebcd854edc3 Mon Sep 17 00:00:00 2001 From: Leonard Lausen Date: Fri, 31 Jul 2020 02:58:55 +0000 Subject: [PATCH 34/46] Enable DIST_KVSTORE by default in staticbuild (#18796) * Enable DIST_KVSTORE by default in staticbuild set(USE_DIST_KVSTORE ON CACHE BOOL "Build with DIST_KVSTORE support") * Ensure static linkage of dependencies * Fix for OS X * Fix shell syntax * Alternate approach to force static linkage of libprotobuf --- CMakeLists.txt | 1 + config/distribution/darwin_cpu.cmake | 1 + config/distribution/linux_cpu.cmake | 1 + config/distribution/linux_cu100.cmake | 1 + config/distribution/linux_cu101.cmake | 1 + config/distribution/linux_cu102.cmake | 1 + tools/dependencies/cityhash.sh | 7 +++++++ tools/dependencies/libpng.sh | 3 +-- tools/dependencies/libturbojpeg.sh | 4 ++-- tools/dependencies/lz4.sh | 7 +++++++ tools/dependencies/openssl.sh | 4 ++-- tools/dependencies/protobuf.sh | 5 ----- tools/dependencies/zmq.sh | 9 +++++++++ 13 files changed, 34 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cb22c5976122..e302ac7b865c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -147,6 +147,7 @@ if(CMAKE_BUILD_TYPE STREQUAL "Distribution" AND UNIX AND NOT APPLE) # Enforce DT_PATH instead of DT_RUNPATH set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--disable-new-dtags") set(CMAKE_EXE_LINKER_FLAGS "-Wl,--disable-new-dtags") + set(Protobuf_USE_STATIC_LIBS ON) endif() set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/upstream;${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules;${CMAKE_MODULE_PATH}") diff --git a/config/distribution/darwin_cpu.cmake b/config/distribution/darwin_cpu.cmake index 790e18320157..ed295efd33d2 100644 --- a/config/distribution/darwin_cpu.cmake +++ b/config/distribution/darwin_cpu.cmake @@ -31,3 +31,4 @@ set(USE_TVM_OP OFF CACHE BOOL "Enable use of TVM operator build system.") set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction support") set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support") set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo") +set(USE_DIST_KVSTORE ON CACHE BOOL "Build with DIST_KVSTORE support") diff --git a/config/distribution/linux_cpu.cmake b/config/distribution/linux_cpu.cmake index 15b4f5aa7e59..4579b42fce5c 100644 --- a/config/distribution/linux_cpu.cmake +++ b/config/distribution/linux_cpu.cmake @@ -29,3 +29,4 @@ set(USE_TVM_OP OFF CACHE BOOL "Enable use of TVM operator build system.") set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction support") set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support") set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo") +set(USE_DIST_KVSTORE ON CACHE BOOL "Build with DIST_KVSTORE support") diff --git a/config/distribution/linux_cu100.cmake b/config/distribution/linux_cu100.cmake index 457a14f89a32..357ccd457593 100644 --- a/config/distribution/linux_cu100.cmake +++ b/config/distribution/linux_cu100.cmake @@ -31,6 +31,7 @@ set(USE_TVM_OP OFF CACHE BOOL "Enable use of TVM operator build system.") set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction support") set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support") set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo") +set(USE_DIST_KVSTORE ON CACHE BOOL "Build with DIST_KVSTORE support") set(CUDACXX "/usr/local/cuda-10.0/bin/nvcc" CACHE STRING "Cuda compiler") set(MXNET_CUDA_ARCH "3.0;5.0;6.0;7.0" CACHE STRING "Cuda architectures") diff --git a/config/distribution/linux_cu101.cmake b/config/distribution/linux_cu101.cmake index 61089200f31f..29fdda2d6f0a 100644 --- a/config/distribution/linux_cu101.cmake +++ b/config/distribution/linux_cu101.cmake @@ -33,6 +33,7 @@ set(USE_TVM_OP OFF CACHE BOOL "Enable use of TVM operator build system.") set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction support") set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support") set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo") +set(USE_DIST_KVSTORE ON CACHE BOOL "Build with DIST_KVSTORE support") set(CUDACXX "/usr/local/cuda-10.1/bin/nvcc" CACHE STRING "Cuda compiler") set(MXNET_CUDA_ARCH "3.0;5.0;6.0;7.0" CACHE STRING "Cuda architectures") diff --git a/config/distribution/linux_cu102.cmake b/config/distribution/linux_cu102.cmake index 9701b99a6a1f..4e7e0509e4f9 100644 --- a/config/distribution/linux_cu102.cmake +++ b/config/distribution/linux_cu102.cmake @@ -31,6 +31,7 @@ set(USE_TVM_OP OFF CACHE BOOL "Enable use of TVM operator build system.") set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction support") set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support") set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo") +set(USE_DIST_KVSTORE ON CACHE BOOL "Build with DIST_KVSTORE support") set(CUDACXX "/usr/local/cuda-10.2/bin/nvcc" CACHE STRING "Cuda compiler") set(MXNET_CUDA_ARCH "3.0;5.0;6.0;7.0" CACHE STRING "Cuda architectures") diff --git a/tools/dependencies/cityhash.sh b/tools/dependencies/cityhash.sh index 6bc663e906fa..4e6c7fb776a6 100755 --- a/tools/dependencies/cityhash.sh +++ b/tools/dependencies/cityhash.sh @@ -20,6 +20,12 @@ # This script builds the static library of cityhash that can be used as dependency of mxnet. set -ex CITYHASH_VERSION=1.1.1 +if [[ $PLATFORM == 'darwin' ]]; then + DY_EXT="dylib" +else + DY_EXT="so" +fi + if [[ ! -f $DEPS_PATH/lib/libcityhash.a ]]; then # Download and build cityhash >&2 echo "Building cityhash..." @@ -30,5 +36,6 @@ if [[ ! -f $DEPS_PATH/lib/libcityhash.a ]]; then ./configure -prefix=$DEPS_PATH --enable-sse4.2 $MAKE CXXFLAGS="-g -O3 -msse4.2" $MAKE install + rm $DEPS_PATH/lib/*cityhash*$DY_EXT* popd fi diff --git a/tools/dependencies/libpng.sh b/tools/dependencies/libpng.sh index 39fa24c87ecd..93f1823da641 100755 --- a/tools/dependencies/libpng.sh +++ b/tools/dependencies/libpng.sh @@ -20,8 +20,7 @@ # This script builds the static library of libpng that can be used as dependency of mxnet/opencv. set -ex PNG_VERSION=1.6.35 -if [[ ! -f $DEPS_PATH/lib/libpng.a ]]; then - # download and build libpng +if [[ ! -f $DEPS_PATH/lib/libpng.a ]] && [[ ! -f $DEPS_PATH/lib64/libpng.a ]]; then # download and build libpng >&2 echo "Building libpng..." download \ https://github.com/glennrp/libpng/archive/v${PNG_VERSION}.zip \ diff --git a/tools/dependencies/libturbojpeg.sh b/tools/dependencies/libturbojpeg.sh index 911827a16fcf..88b8ec45a193 100755 --- a/tools/dependencies/libturbojpeg.sh +++ b/tools/dependencies/libturbojpeg.sh @@ -25,8 +25,8 @@ if [[ $PLATFORM == 'darwin' ]]; then JPEG_NASM_OPTION="-D CMAKE_ASM_NASM_COMPILER=/usr/local/bin/nasm" fi -if [[ ! -f $DEPS_PATH/lib/libjpeg.a ]] || [[ ! -f $DEPS_PATH/lib/libturbojpeg.a ]]; then - # download and build libjpeg +if [[ ( ! -f $DEPS_PATH/lib/libjpeg.a ) || ( ! -f $DEPS_PATH/lib/libturbojpeg.a ) ]] && \ + [[ ( ! -f $DEPS_PATH/lib64/libjpeg.a ) || ( ! -f $DEPS_PATH/lib64/libturbojpeg.a ) ]]; then # download and build libjpeg >&2 echo "Building libjpeg-turbo..." download \ https://github.com/libjpeg-turbo/libjpeg-turbo/archive/${TURBO_JPEG_VERSION}.zip \ diff --git a/tools/dependencies/lz4.sh b/tools/dependencies/lz4.sh index ce72908fdc2b..ec4b04576a86 100755 --- a/tools/dependencies/lz4.sh +++ b/tools/dependencies/lz4.sh @@ -20,6 +20,12 @@ # This script builds the static library of lz4 that can be used as dependency of mxnet. set -ex LZ4_VERSION=r130 +if [[ $PLATFORM == 'darwin' ]]; then + DY_EXT="dylib" +else + DY_EXT="so" +fi + if [[ ! -f $DEPS_PATH/lib/liblz4.a ]]; then # Download and build lz4 >&2 echo "Building lz4..." @@ -31,5 +37,6 @@ if [[ ! -f $DEPS_PATH/lib/liblz4.a ]]; then cd $DEPS_PATH/lz4-$LZ4_VERSION $MAKE $MAKE PREFIX=$DEPS_PATH install + rm $DEPS_PATH/lib/*lz4*$DY_EXT* popd fi diff --git a/tools/dependencies/openssl.sh b/tools/dependencies/openssl.sh index 78673a3ac84b..cc989a254057 100755 --- a/tools/dependencies/openssl.sh +++ b/tools/dependencies/openssl.sh @@ -20,8 +20,8 @@ # This script builds the static library of openssl that can be used as dependency of mxnet. set -ex OPENSSL_VERSION=1.1.1b -if [[ ! -f $DEPS_PATH/lib/libssl.a ]] || [[ ! -f $DEPS_PATH/lib/libcrypto.a ]]; then - # download and build openssl +if [[ ( ! -f $DEPS_PATH/lib/libssl.a ) || ( ! -f $DEPS_PATH/lib/libcrypto.a ) ]] && \ + [[ ( ! -f $DEPS_PATH/lib64/libssl.a ) || ( ! -f $DEPS_PATH/lib64/libcrypto.a ) ]]; then # download and build openssl >&2 echo "Building openssl..." OPENSSL_VERSION=$(echo $OPENSSL_VERSION | sed 's/\./_/g') download \ diff --git a/tools/dependencies/protobuf.sh b/tools/dependencies/protobuf.sh index 7da4c2537b42..4b58a1cd31ff 100755 --- a/tools/dependencies/protobuf.sh +++ b/tools/dependencies/protobuf.sh @@ -20,11 +20,6 @@ # This script builds the static library of protobuf along with protoc, that can be used as dependency of mxnet. set -ex PROTOBUF_VERSION=3.5.1 -if [[ $PLATFORM == 'darwin' ]]; then - DY_EXT="dylib" -else - DY_EXT="so" -fi LIBPROTOBUF="$DEPS_PATH/lib/libprotobuf.$DY_EXT" LIBPROTOC="$DEPS_PATH/lib/libprotoc.$DY_EXT" diff --git a/tools/dependencies/zmq.sh b/tools/dependencies/zmq.sh index 33ea628d53bb..0ab5335e9045 100755 --- a/tools/dependencies/zmq.sh +++ b/tools/dependencies/zmq.sh @@ -20,6 +20,12 @@ # This script builds the static library of zeroMQ that can be used as dependency of mxnet. set -ex ZEROMQ_VERSION=4.2.2 +if [[ $PLATFORM == 'darwin' ]]; then + DY_EXT="dylib" +else + DY_EXT="so" +fi + if [[ ! -f $DEPS_PATH/lib/libzmq.a ]]; then # Download and build zmq >&2 echo "Building zmq..." @@ -39,8 +45,11 @@ if [[ ! -f $DEPS_PATH/lib/libzmq.a ]]; then $MAKE install if [[ ! -f $DEPS_PATH/lib/libzmq.a ]]; then + rm $DEPS_PATH/lib64/*zmq*$DY_EXT* mkdir -p $DEPS_PATH/lib cp $DEPS_PATH/lib64/*zmq* $DEPS_PATH/lib + else + rm $DEPS_PATH/lib/*zmq*$DY_EXT* fi popd From ac3608932f507e3f41f79d814ba31bb8f83fec3a Mon Sep 17 00:00:00 2001 From: Leonard Lausen Date: Fri, 31 Jul 2020 04:54:10 +0000 Subject: [PATCH 35/46] Fixup move gluon.metric api docs (#18748) * Fix metric API page * Update index.rst --- docs/python_docs/python/api/gluon/index.rst | 2 +- .../python/api/gluon/metric/index.rst | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 docs/python_docs/python/api/gluon/metric/index.rst diff --git a/docs/python_docs/python/api/gluon/index.rst b/docs/python_docs/python/api/gluon/index.rst index c74500efe61e..8a8b42549ce8 100644 --- a/docs/python_docs/python/api/gluon/index.rst +++ b/docs/python_docs/python/api/gluon/index.rst @@ -97,7 +97,7 @@ Training Loss functions for training neural networks. .. card:: - :title: mxnet.metric + :title: gluon.metric :link: metric/index.html Metrics to evaluate the performance of a learned model. diff --git a/docs/python_docs/python/api/gluon/metric/index.rst b/docs/python_docs/python/api/gluon/metric/index.rst new file mode 100644 index 000000000000..8c535973035d --- /dev/null +++ b/docs/python_docs/python/api/gluon/metric/index.rst @@ -0,0 +1,23 @@ +.. Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + +gluon.metric +============ + +.. automodule:: mxnet.gluon.metric + :members: + :autosummary: From 08a5ee33319990db56d53abf3cf2bf46b91fa705 Mon Sep 17 00:00:00 2001 From: Tao Lv Date: Sat, 1 Aug 2020 03:38:20 +0800 Subject: [PATCH 36/46] fix gelu to use erf based algorithm (#18827) --- src/operator/nn/mkldnn/mkldnn_act.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/operator/nn/mkldnn/mkldnn_act.cc b/src/operator/nn/mkldnn/mkldnn_act.cc index 4654c24547cd..e76a0629cc01 100644 --- a/src/operator/nn/mkldnn/mkldnn_act.cc +++ b/src/operator/nn/mkldnn/mkldnn_act.cc @@ -100,7 +100,7 @@ mkldnn::algorithm GetMKLDNNActAlgo(const LeakyReLUParam& param) { case leakyrelu::kELU: return mkldnn::algorithm::eltwise_elu; case leakyrelu::kGELU: - return mkldnn::algorithm::eltwise_gelu; + return mkldnn::algorithm::eltwise_gelu_erf; default: LOG(FATAL) << "unknown activation type for LeakyReLU: " << param.act_type; return mkldnn::algorithm::eltwise_relu; From 5a22193b5588848a2c0879ea17b4d7a0bcfdddc7 Mon Sep 17 00:00:00 2001 From: Sheng Zha Date: Fri, 31 Jul 2020 17:06:17 -0700 Subject: [PATCH 37/46] [NumPy] allow mixed array types (#18562) * allow mixed types in array func protocol * fix #18746 * add support for memory share check --- python/mxnet/numpy/multiarray.py | 35 ++++++++++++--------- tests/python/unittest/test_numpy_ndarray.py | 20 ++++++++++++ 2 files changed, 41 insertions(+), 14 deletions(-) diff --git a/python/mxnet/numpy/multiarray.py b/python/mxnet/numpy/multiarray.py index 5274408e4403..b61686738391 100644 --- a/python/mxnet/numpy/multiarray.py +++ b/python/mxnet/numpy/multiarray.py @@ -50,6 +50,7 @@ from ..ndarray import numpy as _mx_nd_np from ..ndarray.numpy import _internal as _npi from ..ndarray.ndarray import _storage_type +from ..dlpack import ndarray_from_numpy from .utils import _get_np_op from .fallback import * # pylint: disable=wildcard-import,unused-wildcard-import from . import fallback @@ -179,21 +180,20 @@ def _reshape_view(a, *shape): # pylint: disable=redefined-outer-name ctypes.byref(handle))) return ndarray(handle=handle, writable=a.writable) - -def _as_mx_np_array(object, ctx=None): - """Convert object to mxnet.numpy.ndarray.""" - if isinstance(object, ndarray): +def _as_mx_np_array(object, ctx=None, zero_copy=False): + """Convert arrays or any array member of container to mxnet.numpy.ndarray on ctx.""" + if object is None or isinstance(object, ndarray): return object elif isinstance(object, _np.ndarray): - np_dtype = _np.dtype(object.dtype).type - return array(object, dtype=np_dtype, ctx=ctx) + from_numpy = ndarray_from_numpy(ndarray, array) + return from_numpy(object, zero_copy and object.flags['C_CONTIGUOUS']) elif isinstance(object, (integer_types, numeric_types)): return object - elif isinstance(object, (list, tuple)): - tmp = [_as_mx_np_array(arr) for arr in object] - return object.__class__(tmp) elif isinstance(object, (_np.bool_, _np.bool)): return array(object, dtype=_np.bool_, ctx=ctx) + elif isinstance(object, (list, tuple)): + tmp = [_as_mx_np_array(arr, ctx=ctx, zero_copy=zero_copy) for arr in object] + return object.__class__(tmp) else: raise TypeError('Does not support converting {} to mx.np.ndarray.'.format(str(type(object)))) @@ -392,11 +392,18 @@ def __array_function__(self, func, types, args, kwargs): # pylint: disable=bad- out = func(*new_args, **new_kwargs) return _as_mx_np_array(out, ctx=cur_ctx) else: - # Note: this allows subclasses that don't override - # __array_function__ to handle mxnet.numpy.ndarray objects - if not py_all(issubclass(t, ndarray) for t in types): - return NotImplemented - return mx_np_func(*args, **kwargs) + if py_all(issubclass(t, ndarray) for t in types): + return mx_np_func(*args, **kwargs) + else: + try: + cur_ctx = next(a.ctx for a in args if hasattr(a, 'ctx')) + except StopIteration: + cur_ctx = next(a.ctx for a in kwargs.values() if hasattr(a, 'ctx')) + new_args = _as_mx_np_array(args, ctx=cur_ctx, + zero_copy=func_name in {'may_share_memory', 'shares_memory'}) + new_kwargs = {k: _as_mx_np_array(v, cur_ctx) for k, v in kwargs.items()} + return mx_np_func(*new_args, **new_kwargs) + def _get_np_basic_indexing(self, key): """ diff --git a/tests/python/unittest/test_numpy_ndarray.py b/tests/python/unittest/test_numpy_ndarray.py index f1cd9b38621b..74f6af33d4ad 100644 --- a/tests/python/unittest/test_numpy_ndarray.py +++ b/tests/python/unittest/test_numpy_ndarray.py @@ -1401,3 +1401,23 @@ def test_from_numpy_exception(): np_array = _np.array([[1, 2], [3, 4], [5, 6]], dtype="float32") mx_array = mx.npx.from_numpy(np_array, zero_copy=False) np_array[2, 1] = 0 # no error + +def test_mixed_array_types(): + np_array = _np.array([[1, 2], [3, 4], [5, 6]], dtype="float32") + mx_array = mx.np.ones((3, 1)) + assert_almost_equal(mx_array + np_array, 1+np_array) + +def test_mixed_array_types_share_memory(): + np_array = _np.array([[1, 2], [3, 4], [5, 6]], dtype="float32") + mx_array = mx.npx.from_numpy(np_array) + assert _np.may_share_memory(np_array, mx_array) + assert _np.shares_memory(np_array, mx_array) + + np_array_slice = np_array[:2] + mx_array_slice = mx_array[1:] + assert _np.may_share_memory(np_array_slice, mx_array) + assert _np.shares_memory(np_array_slice, mx_array) + + mx_pinned_array = mx_array.as_in_ctx(mx.cpu_pinned(0)) + assert not _np.may_share_memory(np_array, mx_pinned_array) + assert not _np.shares_memory(np_array, mx_pinned_array) From 51340d8f40721e03938e0021c6cbb557a44dd90e Mon Sep 17 00:00:00 2001 From: Haibin Lin Date: Sat, 1 Aug 2020 16:23:03 -0700 Subject: [PATCH 38/46] Add compiled_with_cxx11_abi API (#18836) * draft * add impl * add test * set default val Co-authored-by: Ubuntu --- CMakeLists.txt | 7 +++++++ config/darwin.cmake | 1 + config/distribution/darwin_cpu.cmake | 1 + config/distribution/linux_cpu.cmake | 1 + config/distribution/linux_cu100.cmake | 1 + config/distribution/linux_cu101.cmake | 1 + config/distribution/linux_cu102.cmake | 1 + config/distribution/linux_cu92.cmake | 1 + config/distribution/linux_native.cmake | 1 + config/linux.cmake | 1 + config/linux_gpu.cmake | 1 + include/mxnet/c_api.h | 6 ++++++ include/mxnet/libinfo.h | 7 +++++++ python/mxnet/library.py | 12 ++++++++++++ src/c_api/c_api.cc | 9 +++++++++ src/libinfo.cc | 3 +++ tests/python/unittest/test_runtime.py | 3 +++ 17 files changed, 57 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index e302ac7b865c..c9e2e1886f9a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -89,6 +89,7 @@ cmake_dependent_option(ENABLE_TESTCOVERAGE "Enable compilation with test coverag option(USE_INT64_TENSOR_SIZE "Use int64_t to represent the total number of elements in a tensor" OFF) option(BUILD_CYTHON_MODULES "Build cython modules." OFF) option(LOG_FATAL_THROW "Log exceptions but do not abort" ON) +option(USE_CXX11_ABI "Build with GLIBCXX_USE_CXX11_ABI" ON) cmake_dependent_option(USE_SPLIT_ARCH_DLL "Build a separate DLL for each Cuda arch (Windows only)." ON "MSVC" OFF) cmake_dependent_option(USE_CCACHE "Attempt using CCache to wrap the compilation" ON "UNIX" OFF) @@ -99,6 +100,12 @@ message(STATUS "CMAKE_SYSTEM_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR}") message(STATUS "CMAKE_SYSTEM_NAME ${CMAKE_SYSTEM_NAME}") +if(USE_CXX11_ABI) + add_definitions(-D_GLIBCXX_USE_CXX11_ABI=1) +else() + add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0) +endif() + if(USE_TVM_OP) add_definitions(-DMXNET_USE_TVM_OP=1) endif() diff --git a/config/darwin.cmake b/config/darwin.cmake index a65509f0ba1c..12fd034c07c9 100644 --- a/config/darwin.cmake +++ b/config/darwin.cmake @@ -128,3 +128,4 @@ set(USE_NCCL "Use NVidia NCCL with CUDA" OFF) set(NCCL_ROOT "" CACHE BOOL "NCCL install path. Supports autodetection.") set(ENABLE_CUDA_RTC ON CACHE BOOL "Build with CUDA runtime compilation support") set(USE_NVTX ON CACHE BOOL "Build with NVTX support") +set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI") diff --git a/config/distribution/darwin_cpu.cmake b/config/distribution/darwin_cpu.cmake index ed295efd33d2..f44e004eb420 100644 --- a/config/distribution/darwin_cpu.cmake +++ b/config/distribution/darwin_cpu.cmake @@ -32,3 +32,4 @@ set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction support") set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support") set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo") set(USE_DIST_KVSTORE ON CACHE BOOL "Build with DIST_KVSTORE support") +set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI") diff --git a/config/distribution/linux_cpu.cmake b/config/distribution/linux_cpu.cmake index 4579b42fce5c..83bb1b07f53e 100644 --- a/config/distribution/linux_cpu.cmake +++ b/config/distribution/linux_cpu.cmake @@ -30,3 +30,4 @@ set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction support") set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support") set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo") set(USE_DIST_KVSTORE ON CACHE BOOL "Build with DIST_KVSTORE support") +set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI") diff --git a/config/distribution/linux_cu100.cmake b/config/distribution/linux_cu100.cmake index 357ccd457593..b787c0666a4c 100644 --- a/config/distribution/linux_cu100.cmake +++ b/config/distribution/linux_cu100.cmake @@ -32,6 +32,7 @@ set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction support") set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support") set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo") set(USE_DIST_KVSTORE ON CACHE BOOL "Build with DIST_KVSTORE support") +set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI") set(CUDACXX "/usr/local/cuda-10.0/bin/nvcc" CACHE STRING "Cuda compiler") set(MXNET_CUDA_ARCH "3.0;5.0;6.0;7.0" CACHE STRING "Cuda architectures") diff --git a/config/distribution/linux_cu101.cmake b/config/distribution/linux_cu101.cmake index 29fdda2d6f0a..298b2a5e21e2 100644 --- a/config/distribution/linux_cu101.cmake +++ b/config/distribution/linux_cu101.cmake @@ -34,6 +34,7 @@ set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction support") set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support") set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo") set(USE_DIST_KVSTORE ON CACHE BOOL "Build with DIST_KVSTORE support") +set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI") set(CUDACXX "/usr/local/cuda-10.1/bin/nvcc" CACHE STRING "Cuda compiler") set(MXNET_CUDA_ARCH "3.0;5.0;6.0;7.0" CACHE STRING "Cuda architectures") diff --git a/config/distribution/linux_cu102.cmake b/config/distribution/linux_cu102.cmake index 4e7e0509e4f9..80ef2320d599 100644 --- a/config/distribution/linux_cu102.cmake +++ b/config/distribution/linux_cu102.cmake @@ -32,6 +32,7 @@ set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction support") set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support") set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo") set(USE_DIST_KVSTORE ON CACHE BOOL "Build with DIST_KVSTORE support") +set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI") set(CUDACXX "/usr/local/cuda-10.2/bin/nvcc" CACHE STRING "Cuda compiler") set(MXNET_CUDA_ARCH "3.0;5.0;6.0;7.0" CACHE STRING "Cuda architectures") diff --git a/config/distribution/linux_cu92.cmake b/config/distribution/linux_cu92.cmake index 8499421f91ec..4c767a2cc839 100644 --- a/config/distribution/linux_cu92.cmake +++ b/config/distribution/linux_cu92.cmake @@ -31,6 +31,7 @@ set(USE_TVM_OP OFF CACHE BOOL "Enable use of TVM operator build system.") set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction support") set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support") set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo") +set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI") set(CUDACXX "/usr/local/cuda-9.2/bin/nvcc" CACHE STRING "Cuda compiler") set(MXNET_CUDA_ARCH "3.0;5.0;6.0;7.0" CACHE STRING "Cuda architectures") diff --git a/config/distribution/linux_native.cmake b/config/distribution/linux_native.cmake index 09fb4956ae80..1be84ac79937 100644 --- a/config/distribution/linux_native.cmake +++ b/config/distribution/linux_native.cmake @@ -29,3 +29,4 @@ set(USE_TVM_OP OFF CACHE BOOL "Enable use of TVM operator build system.") set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction support") set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support") set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo") +set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI") diff --git a/config/linux.cmake b/config/linux.cmake index 84eecc2e9701..9104da142e63 100644 --- a/config/linux.cmake +++ b/config/linux.cmake @@ -127,3 +127,4 @@ set(USE_NCCL "Use NVidia NCCL with CUDA" OFF) set(NCCL_ROOT "" CACHE BOOL "NCCL install path. Supports autodetection.") set(ENABLE_CUDA_RTC ON CACHE BOOL "Build with CUDA runtime compilation support") set(USE_NVTX ON CACHE BOOL "Build with NVTX support") +set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI") diff --git a/config/linux_gpu.cmake b/config/linux_gpu.cmake index 0dad43332978..baef45e4157b 100644 --- a/config/linux_gpu.cmake +++ b/config/linux_gpu.cmake @@ -127,3 +127,4 @@ set(USE_NCCL "Use NVidia NCCL with CUDA" OFF) set(NCCL_ROOT "" CACHE BOOL "NCCL install path. Supports autodetection.") set(ENABLE_CUDA_RTC ON CACHE BOOL "Build with CUDA runtime compilation support") set(USE_NVTX ON CACHE BOOL "Build with NVTX support") +set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI") diff --git a/include/mxnet/c_api.h b/include/mxnet/c_api.h index 04d863991b48..2aa00861ff32 100644 --- a/include/mxnet/c_api.h +++ b/include/mxnet/c_api.h @@ -252,6 +252,12 @@ MXNET_DLL int MXLoadLib(const char *path, unsigned verbose); */ MXNET_DLL int MXLibInfoFeatures(const struct LibFeature **libFeature, size_t *size); +/*! + * \brief return whether the mxnet library is compiled with cxx11 abi + * \return whether mxnet is built with cxx11 abi + */ +MXNET_DLL int MXLibInfoCompiledWithCXX11ABI(bool* result); + /*! * \brief Seed all global random number generators in mxnet. * \param seed the random number seed. diff --git a/include/mxnet/libinfo.h b/include/mxnet/libinfo.h index dd7790059de1..b1098b002dd7 100644 --- a/include/mxnet/libinfo.h +++ b/include/mxnet/libinfo.h @@ -131,6 +131,12 @@ #define MXNET_USE_TVM_OP 0 #endif +#ifndef _GLIBCXX_USE_CXX11_ABI +#define MXNET_GLIBCXX_USE_CXX11_ABI 0 +#else +#define MXNET_GLIBCXX_USE_CXX11_ABI _GLIBCXX_USE_CXX11_ABI +#endif + namespace mxnet { namespace features { // Check compile flags such as CMakeLists.txt @@ -204,6 +210,7 @@ struct LibInfo { const std::array& getFeatures() { return m_lib_features; } + bool cxx11_abi(); private: std::array m_lib_features; static std::unique_ptr m_inst; diff --git a/python/mxnet/library.py b/python/mxnet/library.py index e0c60d4588f9..9ce3f7b2223e 100644 --- a/python/mxnet/library.py +++ b/python/mxnet/library.py @@ -72,3 +72,15 @@ def load(path, verbose=True): for op in dir(mx_sym_op): func = getattr(mx_sym_op, op) setattr(mx_sym, op, func) + +def compiled_with_cxx11_abi(): + """Check if the library is compiled with cxx11 ABI. + + Returns + ------- + bool + Whether the library is compiled with cxx11 ABI. + """ + ret = ctypes.c_bool() + check_call(_LIB.MXLibInfoCompiledWithCXX11ABI(ctypes.byref(ret))) + return ret.value diff --git a/src/c_api/c_api.cc b/src/c_api/c_api.cc index 3d73ceb03267..011994b54c67 100644 --- a/src/c_api/c_api.cc +++ b/src/c_api/c_api.cc @@ -1299,6 +1299,15 @@ int MXLibInfoFeatures(const struct LibFeature **lib_features, size_t *size) { API_END(); } +int MXLibInfoCompiledWithCXX11ABI(bool* result) { + using namespace features; + API_BEGIN(); + LibInfo* lib_info = LibInfo::getInstance(); + *result = lib_info->cxx11_abi(); + API_END(); +} + + int MXRandomSeed(int seed) { API_BEGIN(); mxnet::RandomSeed(seed); diff --git a/src/libinfo.cc b/src/libinfo.cc index d14aaf5769b2..ce7f1266eaeb 100644 --- a/src/libinfo.cc +++ b/src/libinfo.cc @@ -126,6 +126,9 @@ LibInfo *LibInfo::getInstance() { m_inst = std::make_unique(); return m_inst.get(); } +bool LibInfo::cxx11_abi() { + return MXNET_GLIBCXX_USE_CXX11_ABI; +} std::unique_ptr LibInfo::m_inst = nullptr; diff --git a/tests/python/unittest/test_runtime.py b/tests/python/unittest/test_runtime.py index f1811554ba2d..d117ac0f4b30 100644 --- a/tests/python/unittest/test_runtime.py +++ b/tests/python/unittest/test_runtime.py @@ -49,3 +49,6 @@ def test_is_enabled_not_existing(): with pytest.raises(RuntimeError): features.is_enabled('this girl is on fire') +def test_cxx11_abi(): + abi = mx.library.compiled_with_cxx11_abi() + assert abi or not abi From 54b9e9c8d063fa00853e6cf80d22c922014e3e67 Mon Sep 17 00:00:00 2001 From: Sheng Zha Date: Mon, 3 Aug 2020 08:59:33 -0700 Subject: [PATCH 39/46] remove unnecessary usage of pretrained models, and prefer smaller size (#18844) --- tests/python/unittest/test_gluon.py | 76 ++++++++++--------- tests/python/unittest/test_gluon_estimator.py | 4 +- tests/python/unittest/test_gluon_model_zoo.py | 2 +- 3 files changed, 44 insertions(+), 38 deletions(-) diff --git a/tests/python/unittest/test_gluon.py b/tests/python/unittest/test_gluon.py index 69bf81e26705..a934fbe12e58 100644 --- a/tests/python/unittest/test_gluon.py +++ b/tests/python/unittest/test_gluon.py @@ -192,11 +192,11 @@ def __init__(self, **kwargs): net = Net() lines = str(net.collect_params()).splitlines() - + assert 'dense0.weight' in lines[0] assert '(10, 5)' in lines[0] assert 'float32' in lines[0] - + @with_seed() def test_collect_parameters(): @@ -312,7 +312,7 @@ def hybrid_forward(self, F, x): net_fp32.cast('float64') net_fp32.hybridize() data = mx.nd.zeros((1,3,224,224), dtype='float64', ctx=ctx) - net_fp32.forward(data) + net_fp32(data) sym_file, params_file = net_fp32.export(tmpfile, 0) # 2.a Load the saved model and verify if all the params are loaded correctly. @@ -1119,23 +1119,26 @@ def check_embedding_large_input(sparse_grad): check_embedding_large_input(False) @with_seed() -def test_export(): +def test_export(tmpdir): + tmpfile = os.path.join(str(tmpdir), 'gluon') ctx = mx.context.current_context() model = gluon.model_zoo.vision.resnet18_v1( - ctx=ctx, pretrained=True) + ctx=ctx, pretrained=False) + model.initialize() model.hybridize() data = mx.nd.random.normal(shape=(1, 3, 32, 32)) out = model(data) - symbol_filename, params_filename = model.export('gluon') - assert symbol_filename == 'gluon-symbol.json' - assert params_filename == 'gluon-0000.params' + symbol_filename, params_filename = model.export(tmpfile) + assert symbol_filename == tmpfile+'-symbol.json' + assert params_filename == tmpfile+'-0000.params' @with_seed() def test_import(): ctx = mx.context.current_context() net1 = gluon.model_zoo.vision.resnet18_v1( - ctx=ctx, pretrained=True) + ctx=ctx, pretrained=False) + net1.initialize() net1.hybridize() data = mx.nd.random.normal(shape=(1, 3, 32, 32)) out1 = net1(data) @@ -1440,7 +1443,9 @@ def test_req(): @with_seed() def test_save_load(tmpdir): - net = mx.gluon.model_zoo.vision.get_resnet(1, 18, pretrained=True, root=str(tmpdir)) + net = mx.gluon.model_zoo.vision.get_resnet(1, 18, pretrained=False, root=str(tmpdir)) + net.initialize() + net(mx.nd.ones((1,3,224,224))) net.save_parameters(os.path.join(str(tmpdir), 'test_save_load.params')) net = mx.gluon.model_zoo.vision.get_resnet(1, 18) @@ -1598,17 +1603,19 @@ def _test_multi_reset(nArrays, dtype, ctx): _test_grad_reset(ctx, dtype=type, sparse=sparse, embeddingType=embType) -def check_hybrid_static_memory(**kwargs): +@with_seed() +@pytest.mark.parametrize('static_alloc', [False, True]) +@pytest.mark.parametrize('static_shape', [False, True]) +def test_hybrid_static_memory(static_alloc, static_shape): + if static_shape and not static_alloc: + pytest.skip() x = mx.nd.random.uniform(shape=(2, 3, 32, 32)) x.attach_grad() - net1 = gluon.model_zoo.vision.get_resnet( - 1, 18, pretrained=True, ctx=mx.context.current_context()) - net2 = gluon.model_zoo.vision.get_resnet( - 1, 18, pretrained=True, ctx=mx.context.current_context()) - net2.hybridize(**kwargs) - net1(x) - net2(x) + net = gluon.model_zoo.vision.get_resnet( + 1, 18, pretrained=False, ctx=mx.context.current_context()) + net.initialize() + net(x) def test(net, x): with mx.autograd.record(): @@ -1619,23 +1626,25 @@ def test(net, x): return y, grads - y1, grads1 = test(net1, x) - y2, grads2 = test(net2, x) + y1, grads1 = test(net, x) + net.hybridize(static_alloc=static_alloc, static_shape=static_shape) + y2, grads2 = test(net, x) assert_almost_equal(y1.asnumpy(), y2.asnumpy(), rtol=1e-3, atol=1e-5) for key in grads1: assert_almost_equal(grads1[key].asnumpy(), grads2[key].asnumpy(), rtol=1e-3, atol=1e-4) -@with_seed() -def test_hybrid_static_memory(): - check_hybrid_static_memory() - check_hybrid_static_memory(static_alloc=True) - check_hybrid_static_memory(static_alloc=True, static_shape=True) -def check_hybrid_static_memory_switching(**kwargs): +@with_seed() +@pytest.mark.parametrize('static_alloc', [False, True]) +@pytest.mark.parametrize('static_shape', [False, True]) +def test_hybrid_static_memory_switching(static_alloc, static_shape): + if static_shape and not static_alloc: + pytest.skip() net = gluon.model_zoo.vision.get_resnet( - 1, 18, pretrained=True, ctx=mx.context.current_context()) - net.hybridize(**kwargs) + 1, 18, pretrained=False, ctx=mx.context.current_context()) + net.initialize() + net.hybridize(static_alloc=static_alloc, static_shape=static_shape) x = mx.nd.random.uniform(shape=(4, 3, 32, 32)) net(x) @@ -1649,12 +1658,6 @@ def check_hybrid_static_memory_switching(**kwargs): y.backward() mx.nd.waitall() -@with_seed() -def test_hybrid_static_memory_switching(): - check_hybrid_static_memory_switching() - check_hybrid_static_memory_switching(static_alloc=True) - check_hybrid_static_memory_switching(static_alloc=True, static_shape=True) - @with_seed() def test_hook(): global hook_call_count @@ -1734,7 +1737,7 @@ def mon_callback(node_name, opr_name, arr): model.add(mx.gluon.nn.AvgPool1D()) model.initialize() model.hybridize() - check_name(model, ['hybridsequential_avgpool1d0_fwd_data', 'hybridsequential_avgpool1d0_fwd_output'], + check_name(model, ['hybridsequential_avgpool1d0_fwd_data', 'hybridsequential_avgpool1d0_fwd_output'], expected_opr_names=["Pooling"], monitor_all=True) # stack two layers and test @@ -1850,7 +1853,8 @@ def hybrid_forward(self, F, x): def test_hybrid_static_memory_recording(): net = gluon.model_zoo.vision.get_resnet( - 1, 18, pretrained=True, ctx=mx.context.current_context()) + 1, 18, pretrained=False, ctx=mx.context.current_context()) + net.initialize() net.hybridize(static_alloc=True) x = mx.nd.random.uniform(shape=(1, 3, 32, 32)) diff --git a/tests/python/unittest/test_gluon_estimator.py b/tests/python/unittest/test_gluon_estimator.py index a18dce054744..8c12b5d2a13b 100644 --- a/tests/python/unittest/test_gluon_estimator.py +++ b/tests/python/unittest/test_gluon_estimator.py @@ -144,7 +144,9 @@ def test_initializer(): context=ctx) assert 'Network already fully initialized' in str(w[-1].message) # net partially initialized, fine tuning use case - net = gluon.model_zoo.vision.resnet18_v1(pretrained=True, ctx=ctx) + net = gluon.model_zoo.vision.resnet18_v1(pretrained=False, ctx=ctx) + net.features.initialize(ctx=ctx) + net.features(mx.nd.zeros((1, 3, 224, 224))) net.output = gluon.nn.Dense(10) #last layer not initialized est = Estimator(net, loss=loss, train_metrics=acc, context=ctx) dataset = gluon.data.ArrayDataset(mx.nd.zeros((10, 3, 224, 224)), mx.nd.zeros((10, 10))) diff --git a/tests/python/unittest/test_gluon_model_zoo.py b/tests/python/unittest/test_gluon_model_zoo.py index 191a070be287..0fdd3576e2b9 100644 --- a/tests/python/unittest/test_gluon_model_zoo.py +++ b/tests/python/unittest/test_gluon_model_zoo.py @@ -41,7 +41,7 @@ def eprint(*args, **kwargs): 'mobilenetv2_1.0', 'mobilenetv2_0.75', 'mobilenetv2_0.5', 'mobilenetv2_0.25' ]) def test_models(model_name): - pretrained_to_test = set(['vgg19_bn']) + pretrained_to_test = set(['mobilenetv2_0.25']) test_pretrain = model_name in pretrained_to_test model = get_model(model_name, pretrained=test_pretrain, root='model/') From 9fd2cce3c9d10abab7c4c8b039c78d0ad8d8c91f Mon Sep 17 00:00:00 2001 From: kpuatamazon <56725192+kpuatamazon@users.noreply.github.com> Date: Mon, 3 Aug 2020 17:40:44 +0100 Subject: [PATCH 40/46] Update tests/README.md Docker instructions to match ci/README.md (#18848) Documentation was missing python3-docker and had an outdated platform. --- tests/README.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/tests/README.md b/tests/README.md index 1d34f6446c33..f26beec1c8fe 100644 --- a/tests/README.md +++ b/tests/README.md @@ -64,7 +64,7 @@ Ninja is a build tool (like make) that prioritizes building speed. If you will b To run tests inside docker, you first need to install `docker` and `docker-compose` on your machine. -On Ubuntu you may install them via `sudo apt-get install docker.io docker-compose` +On Ubuntu you may install them via `sudo apt-get install docker.io docker-compose python3-docker` and set them up via `sudo usermod $(whoami) -G docker -a`. Then, to run tests inside docker run the following command @@ -73,11 +73,10 @@ Then, to run tests inside docker run the following command ci/build.py --platform {PLATFORM} /work/runtime_functions.sh {RUNTIME_FUNCTION} ``` -An example for running python tests would be +An example for running python tests on Ubuntu with a CPU would be ``` -ci/build.py --platform build_ubuntu_cpu_mkldnn /work/runtime_functions.sh unittest_ubuntu_python3_cpu +ci/build.py --platform ubuntu_cpu /work/runtime_functions.sh unittest_ubuntu_python3_cpu ``` - - +See [Continuous Integration](../ci/README.md) From 534cdbca4c1a8b36219529cecf12a6fc1d768398 Mon Sep 17 00:00:00 2001 From: Sheng Zha Date: Mon, 3 Aug 2020 11:58:33 -0700 Subject: [PATCH 41/46] Create greetings.yml (#18842) --- .github/workflows/greetings.yml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 .github/workflows/greetings.yml diff --git a/.github/workflows/greetings.yml b/.github/workflows/greetings.yml new file mode 100644 index 000000000000..a9db175035aa --- /dev/null +++ b/.github/workflows/greetings.yml @@ -0,0 +1,20 @@ +name: Greetings + +on: [pull_request, issues] + +jobs: + greeting: + runs-on: ubuntu-latest + steps: + - uses: actions/first-interaction@v1 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + issue-message: | + Welcome to Apache MXNet (incubating)! We are on a mission to democratize AI, and we are glad that you are contributing to it by opening this issue. + Please make sure to include all the relevant context, and one of the @apache/mxnet-committers will be here shortly. + If you are interested in contributing to our project, let us know! Also, be sure to check out our guide on [contributing to MXNet](https://mxnet.apache.org/community/contribute) and our [development guides wiki](https://cwiki.apache.org/confluence/display/MXNET/Developments). + pr-message: | + Welcome to Apache MXNet (incubating)! We are on a mission to democratize AI, and we are glad that you are contributing to it by opening this pull request. + Please make sure that the changes are covered by tests. One of the @apache/mxnet-committers will be here shortly. + If you run into any issue with the CI and tests, we recommend that you first check out our guide on [developer guides wiki](https://cwiki.apache.org/confluence/display/MXNET/Developments). + Let our @apache/mxnet-committers know if you need any help! From 7a5a48835b656786730488f1ec647862670aa53a Mon Sep 17 00:00:00 2001 From: Iblis Lin Date: Tue, 4 Aug 2020 03:28:08 +0800 Subject: [PATCH 42/46] Fix broken link in docs/README.md (#18847) --- docs/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index cd78c94b03c4..45624562f9a0 100644 --- a/docs/README.md +++ b/docs/README.md @@ -30,7 +30,7 @@ Each language documentation is built in a modular way, so that if you are a cont You can also use the project's CI tools to emulate any changes with Docker. You can use these tools to install dependencies and run the parts of the build you want to test. -Refer to the [MXNet Developer Wiki](https://cwiki.apache.org/confluence/display/MXNET/Building+the+New+Website) for instructions on building the docs locally. +Refer to the [MXNet Developer Wiki](https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=125309983) for instructions on building the docs locally. If you plan to contribute changes to the documentation or website, please submit a pull request. Contributions are welcome! From 4bb82245ee5fcbfd32da6461f7b0770ae3c2d9b6 Mon Sep 17 00:00:00 2001 From: Yang Shi Date: Mon, 3 Aug 2020 12:30:13 -0700 Subject: [PATCH 43/46] Fixed python website double scroller and improve UX (#18845) * make python site header scroll aware and avoid double scroller * add compiled assets * adjust python site second header height * add new line * set focus to main content on DOM load --- docs/python_docs/_static/mxnet.css | 8 ++++++-- .../static/sphinx_materialdesign_theme.css | 2 +- .../static/sphinx_materialdesign_theme.css.map | 2 +- .../static/sphinx_materialdesign_theme.js | 2 +- .../static/sphinx_materialdesign_theme.js.map | 2 +- .../src/js/sphinx_materialdesign_theme.js | 18 ++++++++++++++++++ .../themes/mx-theme/src/scss/_root.scss | 8 ++++++++ .../mx-theme/src/scss/layout/_layout.scss | 7 +------ 8 files changed, 37 insertions(+), 12 deletions(-) diff --git a/docs/python_docs/_static/mxnet.css b/docs/python_docs/_static/mxnet.css index 5c04804578c1..0aec931f4314 100644 --- a/docs/python_docs/_static/mxnet.css +++ b/docs/python_docs/_static/mxnet.css @@ -49,7 +49,7 @@ } .mdl-layout__header-row { - height: 84px !important; + height: 80px !important; } .mdl-shadow--2dp { @@ -199,4 +199,8 @@ p { float: right; margin: 4px; cursor: pointer; -} \ No newline at end of file +} + +.scrollUp { + transform: translateY(-80px); +} diff --git a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css index 9b5a2312e6a6..dca3a3453ea1 100644 --- a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css +++ b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css @@ -1,2 +1,2 @@ -.admonition,.mdl-shadow--2dp,.page-content pre:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list){box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-shadow--3dp{box-shadow:0 3px 4px 0 rgba(0,0,0,.14),0 3px 3px -2px rgba(0,0,0,.2),0 1px 8px 0 rgba(0,0,0,.12)}.mdl-shadow--4dp{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2)}.mdl-shadow--6dp{box-shadow:0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.2)}.mdl-shadow--8dp{box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.2)}.mdl-shadow--16dp{box-shadow:0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.2)}.mdl-shadow--24dp{box-shadow:0 9px 46px 8px rgba(0,0,0,.14),0 11px 15px -7px rgba(0,0,0,.12),0 24px 38px 3px rgba(0,0,0,.2)}.mdl-data-table,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list){position:relative;border:1px solid rgba(0,0,0,.12);border-collapse:collapse;white-space:nowrap;font-size:13px;background-color:#fff}.mdl-data-table thead,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) thead{padding-bottom:3px}.mdl-data-table thead .mdl-data-table__select,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) thead .mdl-data-table__select{margin-top:0}.mdl-data-table tbody tr,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) tbody tr{position:relative;height:48px;transition-duration:.28s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-property:background-color}.mdl-data-table tbody tr.is-selected,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) tbody tr.is-selected{background-color:#e0e0e0}.mdl-data-table tbody tr:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) tbody tr:hover{background-color:#eee}.mdl-data-table td,.mdl-data-table th,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{padding:0 18px 12px;text-align:right}.mdl-data-table td:first-of-type,.mdl-data-table th:first-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td:first-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th:first-of-type{padding-left:24px}.mdl-data-table td:last-of-type,.mdl-data-table th:last-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td:last-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th:last-of-type{padding-right:24px}.mdl-data-table td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td{position:relative;vertical-align:middle;height:48px;border-top:1px solid rgba(0,0,0,.12);border-bottom:1px solid rgba(0,0,0,.12);padding-top:12px;box-sizing:border-box}.mdl-data-table td .mdl-data-table__select,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td .mdl-data-table__select{vertical-align:middle}.mdl-data-table th,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{position:relative;vertical-align:bottom;text-overflow:ellipsis;font-size:14px;font-weight:700;line-height:24px;letter-spacing:0;height:48px;font-size:12px;color:rgba(0,0,0,.54);padding-bottom:8px;box-sizing:border-box}.mdl-data-table th.mdl-data-table__header--sorted-ascending,.mdl-data-table th.mdl-data-table__header--sorted-descending,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending{color:rgba(0,0,0,.87)}.mdl-data-table th.mdl-data-table__header--sorted-ascending:before,.mdl-data-table th.mdl-data-table__header--sorted-descending:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:before{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;word-wrap:normal;font-feature-settings:"liga";-webkit-font-feature-settings:"liga";-webkit-font-smoothing:antialiased;font-size:16px;content:"\e5d8";margin-right:5px;vertical-align:sub}.mdl-data-table th.mdl-data-table__header--sorted-ascending:hover,.mdl-data-table th.mdl-data-table__header--sorted-descending:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:hover{cursor:pointer}.mdl-data-table th.mdl-data-table__header--sorted-ascending:hover:before,.mdl-data-table th.mdl-data-table__header--sorted-descending:hover:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending:hover:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:hover:before{color:rgba(0,0,0,.26)}.mdl-data-table th.mdl-data-table__header--sorted-descending:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:before{content:"\e5db"}.mdl-data-table__select{width:16px}.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{text-align:left}.mdl-mini-footer{display:flex;flex-flow:row wrap;justify-content:space-between;padding:32px 16px;color:#9e9e9e;background-color:#424242}.mdl-mini-footer:after{content:"";display:block}.mdl-mini-footer .mdl-logo{line-height:36px}.mdl-mini-footer--link-list,.mdl-mini-footer__link-list,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul{display:flex;flex-flow:row nowrap;list-style:none;margin:0;padding:0}.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul li{margin-bottom:0;margin-right:16px}@media screen and (min-width:760px){.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul li{line-height:36px}}.mdl-mini-footer--link-list a,.mdl-mini-footer__link-list a,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul a{color:inherit;text-decoration:none;white-space:nowrap}.mdl-mini-footer--left-section,.mdl-mini-footer__left-section{display:inline-block;order:0}.mdl-mini-footer--right-section,.mdl-mini-footer__right-section{display:inline-block;order:1}.mdl-mini-footer--social-btn,.mdl-mini-footer__social-btn{width:36px;height:36px;padding:0;margin:0;background-color:#9e9e9e;border:none}.mdl-card{display:flex;flex-direction:column;font-size:16px;font-weight:400;min-height:200px;overflow:hidden;width:330px;z-index:1;position:relative;background:#fff;border-radius:2px;box-sizing:border-box}.mdl-card__media{background-color:#ff6e40;background-repeat:repeat;background-position:50% 50%;background-size:cover;background-origin:padding-box;background-attachment:scroll;box-sizing:border-box}.mdl-card__title{align-items:center;color:#000;display:block;display:flex;justify-content:stretch;line-height:normal;padding:16px;perspective-origin:165px 56px;transform-origin:165px 56px;box-sizing:border-box}.mdl-card__title.mdl-card--border{border-bottom:1px solid rgba(0,0,0,.1)}.mdl-card__title-text{align-self:flex-end;color:inherit;display:block;display:flex;font-size:24px;font-weight:300;line-height:normal;overflow:hidden;transform-origin:149px 48px;margin:0}.mdl-card__subtitle-text{font-size:14px;color:rgba(0,0,0,.54);margin:0}.mdl-card__supporting-text{color:rgba(0,0,0,.54);font-size:1rem;line-height:18px;overflow:hidden;padding:16px;width:90%}.mdl-card__supporting-text.mdl-card--border{border-bottom:1px solid rgba(0,0,0,.1)}.mdl-card__actions{font-size:16px;line-height:normal;width:100%;background-color:transparent;padding:8px;box-sizing:border-box}.mdl-card__actions.mdl-card--border{border-top:1px solid rgba(0,0,0,.1)}.mdl-card--expand{flex-grow:1}.mdl-card__menu{position:absolute;right:16px;top:16px}.mdl-button{background:transparent;border:none;border-radius:2px;color:#000;position:relative;height:36px;margin:0;min-width:64px;padding:0 16px;display:inline-block;font-family:Roboto,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;text-transform:uppercase;line-height:1;letter-spacing:0;overflow:hidden;will-change:box-shadow;transition:box-shadow .2s cubic-bezier(.4,0,1,1),background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1);outline:none;cursor:pointer;text-decoration:none;text-align:center;line-height:36px;vertical-align:middle}.mdl-button::-moz-focus-inner{border:0}.mdl-button:hover{background-color:hsla(0,0%,62%,.2)}.mdl-button:focus:not(:active){background-color:rgba(0,0,0,.12)}.mdl-button:active{background-color:hsla(0,0%,62%,.4)}.mdl-button.mdl-button--colored{color:#2196f3}.mdl-button.mdl-button--colored:focus:not(:active){background-color:rgba(0,0,0,.12)}input.mdl-button[type=submit]{-webkit-appearance:none}.mdl-button--raised{background:hsla(0,0%,62%,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-button--raised:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:hsla(0,0%,62%,.4)}.mdl-button--raised:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:hsla(0,0%,62%,.4)}.mdl-button--raised.mdl-button--colored{background:#2196f3;color:#fff}.mdl-button--raised.mdl-button--colored:active,.mdl-button--raised.mdl-button--colored:focus:not(:active),.mdl-button--raised.mdl-button--colored:hover{background-color:#2196f3}.mdl-button--raised.mdl-button--colored .mdl-ripple{background:#fff}.mdl-button--fab{border-radius:50%;font-size:24px;height:56px;margin:auto;min-width:56px;width:56px;padding:0;overflow:hidden;background:hsla(0,0%,62%,.2);box-shadow:0 1px 1.5px 0 rgba(0,0,0,.12),0 1px 1px 0 rgba(0,0,0,.24);position:relative;line-height:normal}.admonition.attention .mdl-button--fab .admonition-title:before,.admonition.caution .mdl-button--fab .admonition-title:before,.admonition.danger .mdl-button--fab .admonition-title:before,.admonition.error .mdl-button--fab .admonition-title:before,.admonition.hint .mdl-button--fab .admonition-title:before,.admonition.important .mdl-button--fab .admonition-title:before,.admonition.note .mdl-button--fab .admonition-title:before,.admonition.seealso .mdl-button--fab .admonition-title:before,.admonition.tip .mdl-button--fab .admonition-title:before,.admonition.warning .mdl-button--fab .admonition-title:before,.mdl-button--fab .admonition.attention .admonition-title:before,.mdl-button--fab .admonition.caution .admonition-title:before,.mdl-button--fab .admonition.danger .admonition-title:before,.mdl-button--fab .admonition.error .admonition-title:before,.mdl-button--fab .admonition.hint .admonition-title:before,.mdl-button--fab .admonition.important .admonition-title:before,.mdl-button--fab .admonition.note .admonition-title:before,.mdl-button--fab .admonition.seealso .admonition-title:before,.mdl-button--fab .admonition.tip .admonition-title:before,.mdl-button--fab .admonition.warning .admonition-title:before,.mdl-button--fab .material-icons,.mdl-button--fab a.download:before{position:absolute;top:50%;left:50%;transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--fab.mdl-button--mini-fab{height:40px;min-width:40px;width:40px}.mdl-button--fab .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button--fab:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:hsla(0,0%,62%,.4)}.mdl-button--fab:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:hsla(0,0%,62%,.4)}.mdl-button--fab.mdl-button--colored{background:#ff6e40;color:#fff}.mdl-button--fab.mdl-button--colored:active,.mdl-button--fab.mdl-button--colored:focus:not(:active),.mdl-button--fab.mdl-button--colored:hover{background-color:#ff6e40}.mdl-button--fab.mdl-button--colored .mdl-ripple{background:#fff}.mdl-button--icon{border-radius:50%;font-size:24px;height:32px;margin-left:0;margin-right:0;min-width:32px;width:32px;padding:0;overflow:hidden;color:inherit;line-height:normal}.admonition.attention .mdl-button--icon .admonition-title:before,.admonition.caution .mdl-button--icon .admonition-title:before,.admonition.danger .mdl-button--icon .admonition-title:before,.admonition.error .mdl-button--icon .admonition-title:before,.admonition.hint .mdl-button--icon .admonition-title:before,.admonition.important .mdl-button--icon .admonition-title:before,.admonition.note .mdl-button--icon .admonition-title:before,.admonition.seealso .mdl-button--icon .admonition-title:before,.admonition.tip .mdl-button--icon .admonition-title:before,.admonition.warning .mdl-button--icon .admonition-title:before,.mdl-button--icon .admonition.attention .admonition-title:before,.mdl-button--icon .admonition.caution .admonition-title:before,.mdl-button--icon .admonition.danger .admonition-title:before,.mdl-button--icon .admonition.error .admonition-title:before,.mdl-button--icon .admonition.hint .admonition-title:before,.mdl-button--icon .admonition.important .admonition-title:before,.mdl-button--icon .admonition.note .admonition-title:before,.mdl-button--icon .admonition.seealso .admonition-title:before,.mdl-button--icon .admonition.tip .admonition-title:before,.mdl-button--icon .admonition.warning .admonition-title:before,.mdl-button--icon .material-icons,.mdl-button--icon a.download:before{position:absolute;top:50%;left:50%;transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--icon.mdl-button--mini-icon{height:24px;min-width:24px;width:24px}.admonition.attention .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.caution .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.danger .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.error .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.hint .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.important .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.note .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.seealso .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.tip .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.warning .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.attention .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.caution .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.danger .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.error .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.hint .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.important .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.note .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.seealso .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.tip .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.warning .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .material-icons,.mdl-button--icon.mdl-button--mini-icon a.download:before{top:0;left:0}.mdl-button--icon .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button__ripple-container{display:block;height:100%;left:0;position:absolute;top:0;width:100%;z-index:0;overflow:hidden}.mdl-button.mdl-button--disabled .mdl-button__ripple-container .mdl-ripple,.mdl-button[disabled] .mdl-button__ripple-container .mdl-ripple{background-color:transparent}.mdl-button--primary.mdl-button--primary{color:#2196f3}.mdl-button--primary.mdl-button--primary .mdl-ripple{background:#fff}.mdl-button--primary.mdl-button--primary.mdl-button--fab,.mdl-button--primary.mdl-button--primary.mdl-button--raised{color:#fff;background-color:#2196f3}.mdl-button--accent.mdl-button--accent{color:#ff6e40}.mdl-button--accent.mdl-button--accent .mdl-ripple{background:#fff}.mdl-button--accent.mdl-button--accent.mdl-button--fab,.mdl-button--accent.mdl-button--accent.mdl-button--raised{color:#fff;background-color:#ff6e40}.mdl-button.mdl-button--disabled.mdl-button--disabled,.mdl-button[disabled][disabled]{color:rgba(0,0,0,.26);cursor:default;background-color:transparent}.mdl-button--fab.mdl-button--disabled.mdl-button--disabled,.mdl-button--fab[disabled][disabled]{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26)}.mdl-button--raised.mdl-button--disabled.mdl-button--disabled,.mdl-button--raised[disabled][disabled]{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26);box-shadow:none}.mdl-button--colored.mdl-button--disabled.mdl-button--disabled,.mdl-button--colored[disabled][disabled]{color:rgba(0,0,0,.26)}.admonition.attention .mdl-button .admonition-title:before,.admonition.caution .mdl-button .admonition-title:before,.admonition.danger .mdl-button .admonition-title:before,.admonition.error .mdl-button .admonition-title:before,.admonition.hint .mdl-button .admonition-title:before,.admonition.important .mdl-button .admonition-title:before,.admonition.note .mdl-button .admonition-title:before,.admonition.seealso .mdl-button .admonition-title:before,.admonition.tip .mdl-button .admonition-title:before,.admonition.warning .mdl-button .admonition-title:before,.mdl-button .admonition.attention .admonition-title:before,.mdl-button .admonition.caution .admonition-title:before,.mdl-button .admonition.danger .admonition-title:before,.mdl-button .admonition.error .admonition-title:before,.mdl-button .admonition.hint .admonition-title:before,.mdl-button .admonition.important .admonition-title:before,.mdl-button .admonition.note .admonition-title:before,.mdl-button .admonition.seealso .admonition-title:before,.mdl-button .admonition.tip .admonition-title:before,.mdl-button .admonition.warning .admonition-title:before,.mdl-button .material-icons,.mdl-button a.download:before{vertical-align:middle}.font-light{font-weight:300}.font-regular{font-weight:400}.font-heavy{font-weight:700}.left{text-align:left}.right{text-align:right}.center{text-align:center;margin-left:auto;margin-right:auto}.justify{text-align:justify}.hidden-sm{display:none}.container{width:100%;margin-left:auto;margin-right:auto}.row{position:relative;width:100%}.row [class^=col]{float:left;margin:.5rem 1%;min-height:.125rem}.row:after{content:"";display:table;clear:both}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12{width:98%}.col-1-sm{width:6.33333%}.col-2-sm{width:14.66667%}.col-3-sm{width:23%}.col-4-sm{width:31.33333%}.col-5-sm{width:39.66667%}.col-6-sm{width:48%}.col-7-sm{width:56.33333%}.col-8-sm{width:64.66667%}.col-9-sm{width:73%}.col-10-sm{width:81.33333%}.col-11-sm{width:89.66667%}.col-12-sm{width:98%}@media only screen and (min-width:45em){.col-1{width:6.33333%}.col-2{width:14.66667%}.col-3{width:23%}.col-4{width:31.33333%}.col-5{width:39.66667%}.col-6{width:48%}.col-7{width:56.33333%}.col-8{width:64.66667%}.col-9{width:73%}.col-10{width:81.33333%}.col-11{width:89.66667%}.col-12{width:98%}.hidden-sm{display:block}}.row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;flex-wrap:wrap}.row>[class*=col-]{display:flex;flex-direction:column}.admonition.attention .admonition-title:before,.admonition.caution .admonition-title:before,.admonition.danger .admonition-title:before,.admonition.error .admonition-title:before,.admonition.hint .admonition-title:before,.admonition.important .admonition-title:before,.admonition.note .admonition-title:before,.admonition.seealso .admonition-title:before,.admonition.tip .admonition-title:before,.admonition.warning .admonition-title:before,.material-icons,a.download:before{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:"liga"}html{font-size:16px}body{display:block!important;background-color:#fafafa;font-size:1rem;line-height:1.5rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}.mdl-layout__content:focus{outline:none}.mdl-layout__content header.mdl-layout__drawer{display:none}.mdl-layout--fixed-drawer>.mdl-layout__content{margin-left:300px}@media screen and (max-width:1024px){.mdl-layout--fixed-drawer>.mdl-layout__content{margin-left:0}}a.download>code.download,blockquote,h1,h2,h3,h4,h5,h6,span.mdl-layout-title{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}.contents,.contents a,.globaltoc a.current,.toc-backref,.toctree-wrapper,.toctree-wrapper a,h1,h2,h3,h4,h5,h6{color:#048ccc!important}a{text-decoration:none}.page-content,.page-content dd,.page-content dl,.page-content dt,.page-content ol,.page-content p,.page-content table,.page-content td,.page-content th,.page-content ul{font-size:1rem}.brand{color:inherit;text-decoration:none}.section{overflow-x:auto}img{max-width:100%;display:block;margin-left:auto;margin-right:auto}div.figure p.caption{text-align:center;margin-top:.75rem}div.figure p.caption span.caption-number{font-style:normal}div.figure p.caption .caption-number:after{content:"\00a0"}.svg-icon{width:16px;height:16px;display:inline-block;fill:#f5f5f5;padding-right:5px;padding-top:4px;vertical-align:text-top}.admonition.attention a.download>i.admonition-title:before,.admonition.caution a.download>i.admonition-title:before,.admonition.danger a.download>i.admonition-title:before,.admonition.error a.download>i.admonition-title:before,.admonition.hint a.download>i.admonition-title:before,.admonition.important a.download>i.admonition-title:before,.admonition.note a.download>i.admonition-title:before,.admonition.seealso a.download>i.admonition-title:before,.admonition.tip a.download>i.admonition-title:before,.admonition.warning a.download>i.admonition-title:before,a.download>i.material-icons{position:relative;top:5px}a.download{text-decoration:none}.wrapper:after{content:"";display:table;clear:both}.wrapper{max-width:1090px;margin-right:auto;margin-left:auto;padding-right:45px;padding-left:30px}@media screen and (max-width:1024px){.wrapper{max-width:1120px;padding-right:15px;padding-left:15px}}.mdl-layout{margin-top:76px}.document{width:100%;margin:0 auto;display:flex}@media (min-width:1795px){.document{width:100%}}.document .page-content{width:100%;margin:0 auto;padding:0 12px}@media (min-width:992px){.document .page-content{width:90%;padding:0 5%}}@media (min-width:1200px){.document .page-content{width:calc(90% - 230px);padding:0 5%}}.document .side-doc-outline{width:230px}@media (max-width:1199px){.document .side-doc-outline{display:none}}.document .side-doc-outline--content{position:fixed;overflow-x:auto;overflow-y:auto;width:inherit;right:0}.document .side-doc-outline--content::-webkit-scrollbar{width:6px}.document .side-doc-outline--content::-webkit-scrollbar-track{border-radius:6px}.document .side-doc-outline--content::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3);border-radius:6px;box-shadow:0 0 0 1px hsla(0,0%,100%,.3)}@keyframes float-in{0%{transform:translateY(.5rem);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes float-out{0%{transform:translateY(0);opacity:1}to{transform:translateY(.5rem);opacity:0}}.page-content .headerlink{display:inline-block;text-decoration:none;margin-left:.8rem;color:inherit;opacity:0}.page-content .headerlink:hover{animation:float-in .2s cubic-bezier(.4,0,.2,1) 0s forwards}.page-content h1 .toc-backref,.page-content h2 .toc-backref,.page-content h3 .toc-backref,.page-content h4 .toc-backref,.page-content h5 .toc-backref,.page-content h6 .toc-backref{text-decoration:none}.page-content h1:hover .headerlink,.page-content h2:hover .headerlink,.page-content h3:hover .headerlink,.page-content h4:hover .headerlink,.page-content h5:hover .headerlink,.page-content h6:hover .headerlink{animation:float-in .2s cubic-bezier(.4,0,.2,1) 0s forwards}.page-content h1{font-size:2rem;line-height:2.25rem}.page-content h2{font-size:1.75rem;line-height:2rem;padding-top:1.5rem;margin-top:0;margin-bottom:1rem}.page-content h3{font-size:1.5rem;line-height:1.75rem;padding-top:1rem;margin-top:0;margin-bottom:.75rem}.page-content h4{font-size:1.25rem;line-height:1.5rem;padding-top:.75rem;margin-top:0;margin-bottom:.5rem}.page-content div.page-content h5{font-size:1.1rem;line-height:1.5rem;padding-top:2rem;margin-top:0;margin-bottom:1rem}.page-content div.page-content h6{font-size:1rem;line-height:1.5rem;padding-top:2rem;margin-top:0;margin-bottom:1rem}.admonition{padding:12px 20px;margin-top:10px;margin-bottom:10px}.admonition p.last{margin:16px}.admonition .admonition-title{font-size:16px;font-weight:700;color:#555;text-transform:uppercase;margin-top:7px}.admonition.note{border-left:4px solid #00bcd4;background-color:rgba(0,188,212,.1)}.admonition.note .admonition-title{font-size:16px;font-weight:700;color:#00bcd4;margin-top:4px;margin-bottom:8px}.admonition.note .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"info_outline";font-size:18px}.admonition.seealso{border-left:4px solid #00bcd4;background-color:rgba(0,188,212,.1)}.admonition.seealso .admonition-title{font-size:16px;font-weight:700;color:#00bcd4;margin-top:4px;margin-bottom:8px}.admonition.seealso .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"search";font-size:18px}.admonition.hint{border-left:4px solid #00bcd4;background-color:rgba(0,188,212,.1)}.admonition.hint .admonition-title{font-size:16px;font-weight:700;color:#00bcd4;margin-top:4px;margin-bottom:8px}.admonition.hint .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"help_outline";font-size:18px}.admonition.warning{border-left:4px solid #ffc107;background-color:rgba(255,193,7,.1)}.admonition.warning .admonition-title{font-size:16px;font-weight:700;color:#ffc107;margin-top:4px;margin-bottom:8px}.admonition.warning .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"warning";font-size:18px}.admonition.attention{border-left:4px solid #ffc107;background-color:rgba(255,193,7,.1)}.admonition.attention .admonition-title{font-size:16px;font-weight:700;color:#ffc107;margin-top:4px;margin-bottom:8px}.admonition.attention .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"warning";font-size:18px}.admonition.tip{border-left:4px solid #8bc34a;background-color:rgba(139,195,74,.1)}.admonition.tip .admonition-title{font-size:16px;font-weight:700;color:#8bc34a;margin-top:4px;margin-bottom:8px}.admonition.tip .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"lightbulb_outline";font-size:18px}.admonition.important{border-left:4px solid #8bc34a;background-color:rgba(139,195,74,.1)}.admonition.important .admonition-title{font-size:16px;font-weight:700;color:#8bc34a;margin-top:4px;margin-bottom:8px}.admonition.important .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"check_circle";font-size:18px}.admonition.error{border-left:4px solid #f44336;background-color:rgba(244,67,54,.1)}.admonition.error .admonition-title{font-size:16px;font-weight:700;color:#f44336;margin-top:4px;margin-bottom:8px}.admonition.error .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"error_outline";font-size:18px}.admonition.caution{border-left:4px solid #f44336;background-color:rgba(244,67,54,.1)}.admonition.caution .admonition-title{font-size:16px;font-weight:700;color:#f44336;margin-top:4px;margin-bottom:8px}.admonition.caution .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"error_outline";font-size:18px}.admonition.danger{border-left:4px solid #f44336;background-color:rgba(244,67,54,.1)}.admonition.danger .admonition-title{font-size:16px;font-weight:700;color:#f44336;margin-top:4px;margin-bottom:8px}.admonition.danger .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"error_outline";font-size:18px}.page-content .highlight{margin:1px 0}.page-content .highlight pre{background:rgba(0,0,0,.05);color:rgba(0,0,0,.87);font-family:Menlo,DejaVu Sans Mono,Liberation Mono,Consolas,Ubuntu Mono,Courier New,andale mono,lucida console,monospace;padding:.75rem;overflow:auto;overflow-y:hidden}.page-content .highlight pre .nd,.page-content .highlight pre .o{color:rgba(0,0,0,.87)}.page-content div.highlight-console div.highlight{background:none}.page-content .output .highlight pre{color:rgba(0,0,0,.87);background:#fafafa;border:1px solid #999;padding:.75rem}.page-content .code,.page-content code:not(.download){margin:0;border-radius:2px}.page-content .code,.page-content .code span.pre,.page-content code:not(.download),.page-content code:not(.download) span.pre{font-family:Menlo,DejaVu Sans Mono,Liberation Mono,Consolas,Ubuntu Mono,Courier New,andale mono,lucida console,monospace}.page-content .viewcode-link{padding-left:2em;font-size:80%}.page-content .class>dt,.page-content .function>dt,.page-content .method>dt,.page-content .rubric{display:table;margin:10px 0;font-size:100%;line-height:normal;background:#e7f2fa;color:#2b98f0;border-top:3px solid #55adf3;padding:10px;position:relative}.page-content .class>dt .descclassname,.page-content .class>dt .descname,.page-content .function>dt .descclassname,.page-content .function>dt .descname,.page-content .method>dt .descclassname,.page-content .method>dt .descname,.page-content .rubric .descclassname,.page-content .rubric .descname{color:rgba(0,0,0,.87);background:#e7f2fa;padding:3px}.page-content .class>dt em,.page-content .function>dt em,.page-content .method>dt em,.page-content .rubric em{padding:0 2px}.page-content .rubric{margin:30px 0 10px}.page-content .field-body{padding-left:40px}.page-content .field-body ul{padding:0 0 0 16px;margin:0}.page-content .seealso .docutils>dt{float:left;clear:left;padding:0 6px}.page-content .seealso .docutils>dd{padding-left:6em}.page-content .nblast{padding-bottom:1em}.page-content pre{font-size:90%;background:#eee;color:#455a64;padding:16px 32px;width:auto;border-radius:4px;word-wrap:break-word}.page-content pre:hover:before{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;padding:0 .5rem;content:attr(click-to-copy);color:rgba(0,0,0,.5);border-radius:4px;position:relative;float:right;top:-.5rem;right:-.5rem;background:#c8c8c8;font-size:.8rem;cursor:pointer}.page-content blockquote{font-size:1rem;padding:0 1rem;border-left:3px solid rgba(0,0,0,.05)}.page-content blockquote:after{content:""!important;margin-left:0}.page-content blockquote:before{content:""!important}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list){margin:1.5rem 0;table-layout:fixed;max-width:100%;min-width:70%}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{white-space:normal;overflow-wrap:break-word}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) caption{font-size:16px;margin:1rem 0 .8rem;white-space:normal}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) caption .caption-number{font-style:normal}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) caption .caption-number:after{content:"\00a0"}.globaltoc .caption,.globaltoc .toc{display:none}.globaltoc ul{list-style-type:none;padding:0;margin:0}.globaltoc ul li{min-height:18px}.globaltoc ul li .link-wrapper{display:flex;justify-content:space-between}.globaltoc ul li .link-wrapper>a{padding:4px 0;display:block;width:100%;font-size:1rem;text-decoration:none;color:#757575}.globaltoc ul li .link-wrapper>a.current{font-weight:700}.globaltoc .nav-toggle{padding:0;float:right;display:flex;align-items:center;justify-content:center;height:36px}.globaltoc .nav-toggle>a{padding:0;margin-left:0;margin-right:4px;cursor:pointer}.globaltoc .nav-toggle>a>i{font-size:18px}.globaltoc .nav-toggle.show{transform:rotate(180deg)}.globaltoc .nav-toggle.show>a{margin-right:0;margin-left:4px}.globaltoc nav>ul>li>span.link-wrapper{padding-left:8px}.globaltoc nav>ul>li>ul>li>span.link-wrapper{padding-left:16px}.globaltoc nav>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:24px}.globaltoc nav>ul>li>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:32px}.globaltoc nav>ul>li>ul>li>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:40px}.globaltoc nav>ul>li>ul>li>ul>li>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:48px}.localtoc{font-size:.75rem;padding-top:1rem}.localtoc .caption{padding-left:12px}.localtoc .caption-text{font-size:.9rem;font-weight:700}.localtoc>ul>li>a{display:none}.localtoc ul{padding:0;list-style-type:none}.localtoc li{padding-left:6px}.localtoc a{display:block;text-decoration:none;color:inherit;margin-top:8px;padding-left:8px;line-height:1.1rem}.localtoc a.current{padding-left:5px;border-left:3px solid;font-weight:700}.contents.topic,.toctree-wrapper{border-left:5px solid}.contents.topic>p.topic-title,.toctree-wrapper>p.caption{color:#757575;font-size:1rem;padding-left:14px}.contents.topic ul,.toctree-wrapper ul{padding-left:14px;list-style:none;line-height:30px}.contents.topic a,.toctree-wrapper a{font-size:1.2rem;text-decoration:none}.contents.topic a .pre,.toctree-wrapper a .pre{font-size:1rem}.contents.topic>ul>li>a,.toctree-wrapper>ul>li>a{font-size:1.3rem}.contents.topic>ul>li>a .pre,.toctree-wrapper>ul>li>a .pre{font-size:1.1rem}.page-content ul li{margin:.3rem 0}.page-content ul li p{margin:0}.page-content .option-list .option{font-family:Menlo,DejaVu Sans Mono,Liberation Mono,Consolas,Ubuntu Mono,Courier New,andale mono,lucida console,monospace}.page-content .option-list td{padding:.5rem;border:none}.mdl-layout__drawer{background-color:#fff}.mdl-layout__drawer::-webkit-scrollbar{width:6px}.mdl-layout__drawer::-webkit-scrollbar-track{border-radius:6px}.mdl-layout__drawer::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3);border-radius:6px;box-shadow:0 0 0 1px hsla(0,0%,100%,.3)}.mdl-layout__drawer>.mdl-layout-title{font-weight:700;text-align:right;margin:0;padding:0;line-height:32px;border-bottom:1px solid rgba(0,0,0,.1);min-height:64px}.mdl-layout__drawer>.mdl-layout-title .title{color:inherit;display:block;height:100%;width:100%;text-decoration:none}.mdl-layout__drawer>.mdl-layout-title .title>img.logo{width:100%;margin:0;padding:0}.mdl-layout__drawer>.mdl-layout-title .title-text{font-weight:700;text-align:right;padding:0 10px;margin:16px 0 8px;line-height:32px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;color:inherit;display:block}nav.breadcrumb>a.mdl-navigation__link{padding:0 8px;font-size:18px}@media (max-width:1199px){nav.breadcrumb{width:calc(100% - 64px)}nav.breadcrumb a.mdl-navigation__link.is-active{overflow-x:hidden;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.admonition.attention nav.breadcrumb i.admonition-title:before,.admonition.caution nav.breadcrumb i.admonition-title:before,.admonition.danger nav.breadcrumb i.admonition-title:before,.admonition.error nav.breadcrumb i.admonition-title:before,.admonition.hint nav.breadcrumb i.admonition-title:before,.admonition.important nav.breadcrumb i.admonition-title:before,.admonition.note nav.breadcrumb i.admonition-title:before,.admonition.seealso nav.breadcrumb i.admonition-title:before,.admonition.tip nav.breadcrumb i.admonition-title:before,.admonition.warning nav.breadcrumb i.admonition-title:before,nav.breadcrumb .admonition.attention i.admonition-title:before,nav.breadcrumb .admonition.caution i.admonition-title:before,nav.breadcrumb .admonition.danger i.admonition-title:before,nav.breadcrumb .admonition.error i.admonition-title:before,nav.breadcrumb .admonition.hint i.admonition-title:before,nav.breadcrumb .admonition.important i.admonition-title:before,nav.breadcrumb .admonition.note i.admonition-title:before,nav.breadcrumb .admonition.seealso i.admonition-title:before,nav.breadcrumb .admonition.tip i.admonition-title:before,nav.breadcrumb .admonition.warning i.admonition-title:before,nav.breadcrumb a.mdl-navigation__link:not(.is-active),nav.breadcrumb i.material-icons{display:none}}div.mdl-layout__header{margin-top:77px}.mdl-layout__drawer-button{top:13px!important}div.mdl-layout__header-row.header-links{background:hsla(0,0%,100%,.2);width:100%;overflow-x:auto;overflow-y:hidden}div.mdl-layout__header-row.header-links a.mdl-navigation__link{font-size:1rem}div.mdl-layout__header-row.header-links a.mdl-navigation__link i{font-size:1.2rem;margin:0 8px;position:relative;bottom:-.1rem}div.mdl-layout__header-row.header-links a.mdl-navigation__link:hover{background-color:#2196f3;color:#eee}div.mdl-layout__header-row.header-links a.mdl-navigation__link[href="#"]{background-color:#2196f3;opacity:1;color:#fff}.site-title{font-weight:300!important;line-height:57px;letter-spacing:-1px;margin-bottom:0;float:left;color:#fff}.site-title,.site-title:visited{color:#424242}.site-header{position:fixed;top:0;width:100%;min-height:55px;padding-top:10px;padding-bottom:10px;background-color:#048ccc;z-index:10;font-weight:300;font-size:17px;border-bottom:1px solid #fff}.site-header-logo{width:120px;display:initial}.site-nav{float:right;line-height:57px}.site-nav .menu-icon,.site-nav .nav-trigger{display:none}.site-nav .page-link{color:#fff;line-height:1.5;font-weight:300}.site-nav .page-link:not(:last-child){margin-right:40px}.site-nav .page-link:hover{color:#fff;text-shadow:-.06ex 0 #fff,.06ex 0 #fff}.site-nav .page-link.page-current{color:#fff;text-decoration:underline}@media screen and (max-width:1024px){.site-nav{position:absolute;top:9px;right:15px;background-color:#178dc9;border-radius:2px;text-align:right}.site-nav label[for=nav-trigger]{display:block;float:right;width:36px;height:36px;z-index:2;cursor:pointer}.site-nav .menu-icon{display:block;float:right;width:36px;height:26px;line-height:0;padding-top:20px;text-align:center}.site-nav .menu-icon>svg{fill:#fff}.site-nav input~.trigger{clear:both;display:none}.site-nav input:checked~.trigger{display:block;padding-bottom:5px}.site-nav .page-link{padding:5px 10px;display:block;margin-left:20px}.site-nav .page-link:not(:last-child){margin-right:0}}footer.mdl-mini-footer{background-color:#212121}footer.mdl-mini-footer>div.mdl-mini-footer__left-section{margin-bottom:20px;display:flex;flex-direction:column}footer.mdl-mini-footer>div.mdl-mini-footer__left-section .mdl-logo{font-size:1.1rem}footer.mdl-mini-footer>div.mdl-mini-footer__right-section{font-size:.9rem;display:flex;flex-direction:column;justify-content:flex-end}footer.mdl-mini-footer>div.mdl-mini-footer__right-section a{color:inherit;font-weight:700;text-decoration:none}footer.mdl-mini-footer p.caption{display:none}.pagenation{width:100%;margin-top:80px;height:92px;background-color:#424242;display:flex}.pagenation #button-next,.pagenation #button-prev,.pagenation .button-common{text-transform:none;padding:0;height:92px;display:flex;justify-content:center;align-items:center;color:#fff}.pagenation #button-prev{margin-right:auto}.pagenation #button-prev .pagenation-text{text-align:left}.pagenation #button-next{margin-left:auto;flex-direction:row-reverse}.pagenation #button-next .pagenation-text{text-align:right}.pagenation-arrow-L{margin-right:20px}.pagenation-arrow-R{margin-left:20px}.pagenation-text{line-height:30px;font-size:20px}.pagenation-direction{opacity:.7;font-size:18px}@media screen and (max-width:1024px){.pagenation #button-prev{width:20%}.pagenation #button-next{width:80%}.pagenation #button-prev .pagenation-text{display:none}}@media screen and (min-width:1025px){.pagenation #button-next,.pagenation #button-prev{width:50%}.pagenation #button-prev .pagenation-text{display:block}}.site-footer{border-top:1px solid #f5f5f5;padding:30px 0;background-color:#424242;position:relative;z-index:10}.site-footer .footer-category-title{color:#048ccc}.site-footer a,.site-footer a:visited{color:#f5f5f5!important}.site-footer2{background-color:#424242;padding-top:40px;padding-bottom:10px;position:relative;z-index:10}.footer-heading{margin-bottom:15px}.contact-list,.social-media-list{list-style:none;margin-left:0}.footer-bottom-warning{font-size:80%;color:#fff;float:left}.footer-logo{width:200px;margin-bottom:30px;margin-top:30px}.footer-col{float:left;margin-bottom:15px;padding-left:15px}.footer-text{color:#f5f5f5}#waterfall-exp::-webkit-input-placeholder{color:#ccc}#waterfall-exp:-ms-input-placeholder{color:#ccc}#waterfall-exp::-moz-placeholder{color:#ccc}ul.search span.highlighted{font-weight:700}ul.search>li{margin-bottom:24px}#search-results ul{list-style:none;padding:0}#search-results ul li>a{text-decoration:none;font-size:1.2rem}a.download:before{content:"file_download";position:relative;top:5px;margin-right:5px}button.download{position:sticky;margin-left:1em}.mdl-card{margin:1em 1.5em 1em 0;display:inline-block;width:250px;min-height:140px;padding:18px}.mdl-card:hover{box-shadow:0 10px 20px rgba(0,0,0,.25),0 6px 6px rgba(0,0,0,.22);color:#000;cursor:pointer}.mdl-card__title{padding:0 0 1em;font-size:18px;color:#444}.mdl-card__supporting-text{line-height:1.5rem;padding:0;width:100%}.head-card.mdl-card{width:auto;display:block;max-width:800px;padding:24px}.head-card>.mdl-card__title{padding-bottom:0;height:60px;font-weight:700;text-transform:uppercase}.head-card>.mdl-card__menu{color:#fff}.head-card>.mdl-card__actions{padding:0}.cards{display:flex;flex-direction:row;flex-wrap:wrap} +.admonition,.mdl-shadow--2dp,.page-content pre:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list){box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-shadow--3dp{box-shadow:0 3px 4px 0 rgba(0,0,0,.14),0 3px 3px -2px rgba(0,0,0,.2),0 1px 8px 0 rgba(0,0,0,.12)}.mdl-shadow--4dp{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2)}.mdl-shadow--6dp{box-shadow:0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.2)}.mdl-shadow--8dp{box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.2)}.mdl-shadow--16dp{box-shadow:0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.2)}.mdl-shadow--24dp{box-shadow:0 9px 46px 8px rgba(0,0,0,.14),0 11px 15px -7px rgba(0,0,0,.12),0 24px 38px 3px rgba(0,0,0,.2)}.mdl-data-table,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list){position:relative;border:1px solid rgba(0,0,0,.12);border-collapse:collapse;white-space:nowrap;font-size:13px;background-color:#fff}.mdl-data-table thead,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) thead{padding-bottom:3px}.mdl-data-table thead .mdl-data-table__select,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) thead .mdl-data-table__select{margin-top:0}.mdl-data-table tbody tr,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) tbody tr{position:relative;height:48px;transition-duration:.28s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-property:background-color}.mdl-data-table tbody tr.is-selected,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) tbody tr.is-selected{background-color:#e0e0e0}.mdl-data-table tbody tr:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) tbody tr:hover{background-color:#eee}.mdl-data-table td,.mdl-data-table th,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{padding:0 18px 12px;text-align:right}.mdl-data-table td:first-of-type,.mdl-data-table th:first-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td:first-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th:first-of-type{padding-left:24px}.mdl-data-table td:last-of-type,.mdl-data-table th:last-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td:last-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th:last-of-type{padding-right:24px}.mdl-data-table td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td{position:relative;vertical-align:middle;height:48px;border-top:1px solid rgba(0,0,0,.12);border-bottom:1px solid rgba(0,0,0,.12);padding-top:12px;box-sizing:border-box}.mdl-data-table td .mdl-data-table__select,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td .mdl-data-table__select{vertical-align:middle}.mdl-data-table th,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{position:relative;vertical-align:bottom;text-overflow:ellipsis;font-size:14px;font-weight:700;line-height:24px;letter-spacing:0;height:48px;font-size:12px;color:rgba(0,0,0,.54);padding-bottom:8px;box-sizing:border-box}.mdl-data-table th.mdl-data-table__header--sorted-ascending,.mdl-data-table th.mdl-data-table__header--sorted-descending,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending{color:rgba(0,0,0,.87)}.mdl-data-table th.mdl-data-table__header--sorted-ascending:before,.mdl-data-table th.mdl-data-table__header--sorted-descending:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:before{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;word-wrap:normal;font-feature-settings:"liga";-webkit-font-feature-settings:"liga";-webkit-font-smoothing:antialiased;font-size:16px;content:"\e5d8";margin-right:5px;vertical-align:sub}.mdl-data-table th.mdl-data-table__header--sorted-ascending:hover,.mdl-data-table th.mdl-data-table__header--sorted-descending:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:hover{cursor:pointer}.mdl-data-table th.mdl-data-table__header--sorted-ascending:hover:before,.mdl-data-table th.mdl-data-table__header--sorted-descending:hover:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending:hover:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:hover:before{color:rgba(0,0,0,.26)}.mdl-data-table th.mdl-data-table__header--sorted-descending:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:before{content:"\e5db"}.mdl-data-table__select{width:16px}.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{text-align:left}.mdl-mini-footer{display:flex;flex-flow:row wrap;justify-content:space-between;padding:32px 16px;color:#9e9e9e;background-color:#424242}.mdl-mini-footer:after{content:"";display:block}.mdl-mini-footer .mdl-logo{line-height:36px}.mdl-mini-footer--link-list,.mdl-mini-footer__link-list,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul{display:flex;flex-flow:row nowrap;list-style:none;margin:0;padding:0}.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul li{margin-bottom:0;margin-right:16px}@media screen and (min-width:760px){.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul li{line-height:36px}}.mdl-mini-footer--link-list a,.mdl-mini-footer__link-list a,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul a{color:inherit;text-decoration:none;white-space:nowrap}.mdl-mini-footer--left-section,.mdl-mini-footer__left-section{display:inline-block;order:0}.mdl-mini-footer--right-section,.mdl-mini-footer__right-section{display:inline-block;order:1}.mdl-mini-footer--social-btn,.mdl-mini-footer__social-btn{width:36px;height:36px;padding:0;margin:0;background-color:#9e9e9e;border:none}.mdl-card{display:flex;flex-direction:column;font-size:16px;font-weight:400;min-height:200px;overflow:hidden;width:330px;z-index:1;position:relative;background:#fff;border-radius:2px;box-sizing:border-box}.mdl-card__media{background-color:#ff6e40;background-repeat:repeat;background-position:50% 50%;background-size:cover;background-origin:padding-box;background-attachment:scroll;box-sizing:border-box}.mdl-card__title{align-items:center;color:#000;display:block;display:flex;justify-content:stretch;line-height:normal;padding:16px;perspective-origin:165px 56px;transform-origin:165px 56px;box-sizing:border-box}.mdl-card__title.mdl-card--border{border-bottom:1px solid rgba(0,0,0,.1)}.mdl-card__title-text{align-self:flex-end;color:inherit;display:block;display:flex;font-size:24px;font-weight:300;line-height:normal;overflow:hidden;transform-origin:149px 48px;margin:0}.mdl-card__subtitle-text{font-size:14px;color:rgba(0,0,0,.54);margin:0}.mdl-card__supporting-text{color:rgba(0,0,0,.54);font-size:1rem;line-height:18px;overflow:hidden;padding:16px;width:90%}.mdl-card__supporting-text.mdl-card--border{border-bottom:1px solid rgba(0,0,0,.1)}.mdl-card__actions{font-size:16px;line-height:normal;width:100%;background-color:transparent;padding:8px;box-sizing:border-box}.mdl-card__actions.mdl-card--border{border-top:1px solid rgba(0,0,0,.1)}.mdl-card--expand{flex-grow:1}.mdl-card__menu{position:absolute;right:16px;top:16px}.mdl-button{background:transparent;border:none;border-radius:2px;color:#000;position:relative;height:36px;margin:0;min-width:64px;padding:0 16px;display:inline-block;font-family:Roboto,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;text-transform:uppercase;line-height:1;letter-spacing:0;overflow:hidden;will-change:box-shadow;transition:box-shadow .2s cubic-bezier(.4,0,1,1),background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1);outline:none;cursor:pointer;text-decoration:none;text-align:center;line-height:36px;vertical-align:middle}.mdl-button::-moz-focus-inner{border:0}.mdl-button:hover{background-color:hsla(0,0%,62%,.2)}.mdl-button:focus:not(:active){background-color:rgba(0,0,0,.12)}.mdl-button:active{background-color:hsla(0,0%,62%,.4)}.mdl-button.mdl-button--colored{color:#2196f3}.mdl-button.mdl-button--colored:focus:not(:active){background-color:rgba(0,0,0,.12)}input.mdl-button[type=submit]{-webkit-appearance:none}.mdl-button--raised{background:hsla(0,0%,62%,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-button--raised:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:hsla(0,0%,62%,.4)}.mdl-button--raised:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:hsla(0,0%,62%,.4)}.mdl-button--raised.mdl-button--colored{background:#2196f3;color:#fff}.mdl-button--raised.mdl-button--colored:active,.mdl-button--raised.mdl-button--colored:focus:not(:active),.mdl-button--raised.mdl-button--colored:hover{background-color:#2196f3}.mdl-button--raised.mdl-button--colored .mdl-ripple{background:#fff}.mdl-button--fab{border-radius:50%;font-size:24px;height:56px;margin:auto;min-width:56px;width:56px;padding:0;overflow:hidden;background:hsla(0,0%,62%,.2);box-shadow:0 1px 1.5px 0 rgba(0,0,0,.12),0 1px 1px 0 rgba(0,0,0,.24);position:relative;line-height:normal}.admonition.attention .mdl-button--fab .admonition-title:before,.admonition.caution .mdl-button--fab .admonition-title:before,.admonition.danger .mdl-button--fab .admonition-title:before,.admonition.error .mdl-button--fab .admonition-title:before,.admonition.hint .mdl-button--fab .admonition-title:before,.admonition.important .mdl-button--fab .admonition-title:before,.admonition.note .mdl-button--fab .admonition-title:before,.admonition.seealso .mdl-button--fab .admonition-title:before,.admonition.tip .mdl-button--fab .admonition-title:before,.admonition.warning .mdl-button--fab .admonition-title:before,.mdl-button--fab .admonition.attention .admonition-title:before,.mdl-button--fab .admonition.caution .admonition-title:before,.mdl-button--fab .admonition.danger .admonition-title:before,.mdl-button--fab .admonition.error .admonition-title:before,.mdl-button--fab .admonition.hint .admonition-title:before,.mdl-button--fab .admonition.important .admonition-title:before,.mdl-button--fab .admonition.note .admonition-title:before,.mdl-button--fab .admonition.seealso .admonition-title:before,.mdl-button--fab .admonition.tip .admonition-title:before,.mdl-button--fab .admonition.warning .admonition-title:before,.mdl-button--fab .material-icons,.mdl-button--fab a.download:before{position:absolute;top:50%;left:50%;transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--fab.mdl-button--mini-fab{height:40px;min-width:40px;width:40px}.mdl-button--fab .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button--fab:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:hsla(0,0%,62%,.4)}.mdl-button--fab:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:hsla(0,0%,62%,.4)}.mdl-button--fab.mdl-button--colored{background:#ff6e40;color:#fff}.mdl-button--fab.mdl-button--colored:active,.mdl-button--fab.mdl-button--colored:focus:not(:active),.mdl-button--fab.mdl-button--colored:hover{background-color:#ff6e40}.mdl-button--fab.mdl-button--colored .mdl-ripple{background:#fff}.mdl-button--icon{border-radius:50%;font-size:24px;height:32px;margin-left:0;margin-right:0;min-width:32px;width:32px;padding:0;overflow:hidden;color:inherit;line-height:normal}.admonition.attention .mdl-button--icon .admonition-title:before,.admonition.caution .mdl-button--icon .admonition-title:before,.admonition.danger .mdl-button--icon .admonition-title:before,.admonition.error .mdl-button--icon .admonition-title:before,.admonition.hint .mdl-button--icon .admonition-title:before,.admonition.important .mdl-button--icon .admonition-title:before,.admonition.note .mdl-button--icon .admonition-title:before,.admonition.seealso .mdl-button--icon .admonition-title:before,.admonition.tip .mdl-button--icon .admonition-title:before,.admonition.warning .mdl-button--icon .admonition-title:before,.mdl-button--icon .admonition.attention .admonition-title:before,.mdl-button--icon .admonition.caution .admonition-title:before,.mdl-button--icon .admonition.danger .admonition-title:before,.mdl-button--icon .admonition.error .admonition-title:before,.mdl-button--icon .admonition.hint .admonition-title:before,.mdl-button--icon .admonition.important .admonition-title:before,.mdl-button--icon .admonition.note .admonition-title:before,.mdl-button--icon .admonition.seealso .admonition-title:before,.mdl-button--icon .admonition.tip .admonition-title:before,.mdl-button--icon .admonition.warning .admonition-title:before,.mdl-button--icon .material-icons,.mdl-button--icon a.download:before{position:absolute;top:50%;left:50%;transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--icon.mdl-button--mini-icon{height:24px;min-width:24px;width:24px}.admonition.attention .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.caution .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.danger .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.error .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.hint .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.important .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.note .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.seealso .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.tip .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.warning .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.attention .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.caution .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.danger .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.error .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.hint .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.important .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.note .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.seealso .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.tip .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.warning .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .material-icons,.mdl-button--icon.mdl-button--mini-icon a.download:before{top:0;left:0}.mdl-button--icon .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button__ripple-container{display:block;height:100%;left:0;position:absolute;top:0;width:100%;z-index:0;overflow:hidden}.mdl-button.mdl-button--disabled .mdl-button__ripple-container .mdl-ripple,.mdl-button[disabled] .mdl-button__ripple-container .mdl-ripple{background-color:transparent}.mdl-button--primary.mdl-button--primary{color:#2196f3}.mdl-button--primary.mdl-button--primary .mdl-ripple{background:#fff}.mdl-button--primary.mdl-button--primary.mdl-button--fab,.mdl-button--primary.mdl-button--primary.mdl-button--raised{color:#fff;background-color:#2196f3}.mdl-button--accent.mdl-button--accent{color:#ff6e40}.mdl-button--accent.mdl-button--accent .mdl-ripple{background:#fff}.mdl-button--accent.mdl-button--accent.mdl-button--fab,.mdl-button--accent.mdl-button--accent.mdl-button--raised{color:#fff;background-color:#ff6e40}.mdl-button.mdl-button--disabled.mdl-button--disabled,.mdl-button[disabled][disabled]{color:rgba(0,0,0,.26);cursor:default;background-color:transparent}.mdl-button--fab.mdl-button--disabled.mdl-button--disabled,.mdl-button--fab[disabled][disabled]{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26)}.mdl-button--raised.mdl-button--disabled.mdl-button--disabled,.mdl-button--raised[disabled][disabled]{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26);box-shadow:none}.mdl-button--colored.mdl-button--disabled.mdl-button--disabled,.mdl-button--colored[disabled][disabled]{color:rgba(0,0,0,.26)}.admonition.attention .mdl-button .admonition-title:before,.admonition.caution .mdl-button .admonition-title:before,.admonition.danger .mdl-button .admonition-title:before,.admonition.error .mdl-button .admonition-title:before,.admonition.hint .mdl-button .admonition-title:before,.admonition.important .mdl-button .admonition-title:before,.admonition.note .mdl-button .admonition-title:before,.admonition.seealso .mdl-button .admonition-title:before,.admonition.tip .mdl-button .admonition-title:before,.admonition.warning .mdl-button .admonition-title:before,.mdl-button .admonition.attention .admonition-title:before,.mdl-button .admonition.caution .admonition-title:before,.mdl-button .admonition.danger .admonition-title:before,.mdl-button .admonition.error .admonition-title:before,.mdl-button .admonition.hint .admonition-title:before,.mdl-button .admonition.important .admonition-title:before,.mdl-button .admonition.note .admonition-title:before,.mdl-button .admonition.seealso .admonition-title:before,.mdl-button .admonition.tip .admonition-title:before,.mdl-button .admonition.warning .admonition-title:before,.mdl-button .material-icons,.mdl-button a.download:before{vertical-align:middle}.font-light{font-weight:300}.font-regular{font-weight:400}.font-heavy{font-weight:700}.left{text-align:left}.right{text-align:right}.center{text-align:center;margin-left:auto;margin-right:auto}.justify{text-align:justify}.hidden-sm{display:none}.container{width:100%;margin-left:auto;margin-right:auto}.row{position:relative;width:100%}.row [class^=col]{float:left;margin:.5rem 1%;min-height:.125rem}.row:after{content:"";display:table;clear:both}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12{width:98%}.col-1-sm{width:6.33333%}.col-2-sm{width:14.66667%}.col-3-sm{width:23%}.col-4-sm{width:31.33333%}.col-5-sm{width:39.66667%}.col-6-sm{width:48%}.col-7-sm{width:56.33333%}.col-8-sm{width:64.66667%}.col-9-sm{width:73%}.col-10-sm{width:81.33333%}.col-11-sm{width:89.66667%}.col-12-sm{width:98%}@media only screen and (min-width:45em){.col-1{width:6.33333%}.col-2{width:14.66667%}.col-3{width:23%}.col-4{width:31.33333%}.col-5{width:39.66667%}.col-6{width:48%}.col-7{width:56.33333%}.col-8{width:64.66667%}.col-9{width:73%}.col-10{width:81.33333%}.col-11{width:89.66667%}.col-12{width:98%}.hidden-sm{display:block}}.row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;flex-wrap:wrap}.row>[class*=col-]{display:flex;flex-direction:column}.admonition.attention .admonition-title:before,.admonition.caution .admonition-title:before,.admonition.danger .admonition-title:before,.admonition.error .admonition-title:before,.admonition.hint .admonition-title:before,.admonition.important .admonition-title:before,.admonition.note .admonition-title:before,.admonition.seealso .admonition-title:before,.admonition.tip .admonition-title:before,.admonition.warning .admonition-title:before,.material-icons,a.download:before{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:"liga"}html{font-size:16px}body{display:block!important;background-color:#fafafa;font-size:1rem;line-height:1.5rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}.mdl-layout__content:focus{outline:none}.mdl-layout__content header.mdl-layout__drawer{display:none}.mdl-layout__container{height:calc(100% - 76px);margin-top:76px}.mdl-layout__header{position:fixed;transition:transform .5s}.mdl-layout--fixed-drawer>.mdl-layout__content{margin-left:300px}@media screen and (max-width:1024px){.mdl-layout--fixed-drawer>.mdl-layout__content{margin-left:0}}a.download>code.download,blockquote,h1,h2,h3,h4,h5,h6,span.mdl-layout-title{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}.contents,.contents a,.globaltoc a.current,.toc-backref,.toctree-wrapper,.toctree-wrapper a,h1,h2,h3,h4,h5,h6{color:#048ccc!important}a{text-decoration:none}.page-content,.page-content dd,.page-content dl,.page-content dt,.page-content ol,.page-content p,.page-content table,.page-content td,.page-content th,.page-content ul{font-size:1rem}.brand{color:inherit;text-decoration:none}.section{overflow-x:auto}img{max-width:100%;display:block;margin-left:auto;margin-right:auto}div.figure p.caption{text-align:center;margin-top:.75rem}div.figure p.caption span.caption-number{font-style:normal}div.figure p.caption .caption-number:after{content:"\00a0"}.svg-icon{width:16px;height:16px;display:inline-block;fill:#f5f5f5;padding-right:5px;padding-top:4px;vertical-align:text-top}.admonition.attention a.download>i.admonition-title:before,.admonition.caution a.download>i.admonition-title:before,.admonition.danger a.download>i.admonition-title:before,.admonition.error a.download>i.admonition-title:before,.admonition.hint a.download>i.admonition-title:before,.admonition.important a.download>i.admonition-title:before,.admonition.note a.download>i.admonition-title:before,.admonition.seealso a.download>i.admonition-title:before,.admonition.tip a.download>i.admonition-title:before,.admonition.warning a.download>i.admonition-title:before,a.download>i.material-icons{position:relative;top:5px}a.download{text-decoration:none}.wrapper:after{content:"";display:table;clear:both}.wrapper{max-width:1090px;margin-right:auto;margin-left:auto;padding-right:45px;padding-left:30px}@media screen and (max-width:1024px){.wrapper{max-width:1120px;padding-right:15px;padding-left:15px}}.document{width:100%;margin:84px auto;display:flex}@media (min-width:1795px){.document{width:100%}}.document .page-content{width:100%;margin:0 auto;padding:0 12px}@media (min-width:992px){.document .page-content{width:90%;padding:0 5%}}@media (min-width:1200px){.document .page-content{width:calc(90% - 230px);padding:0 5%}}.document .side-doc-outline{width:230px}@media (max-width:1199px){.document .side-doc-outline{display:none}}.document .side-doc-outline--content{position:fixed;overflow-x:auto;overflow-y:auto;width:inherit;right:0}.document .side-doc-outline--content::-webkit-scrollbar{width:6px}.document .side-doc-outline--content::-webkit-scrollbar-track{border-radius:6px}.document .side-doc-outline--content::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3);border-radius:6px;box-shadow:0 0 0 1px hsla(0,0%,100%,.3)}@keyframes float-in{0%{transform:translateY(.5rem);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes float-out{0%{transform:translateY(0);opacity:1}to{transform:translateY(.5rem);opacity:0}}.page-content .headerlink{display:inline-block;text-decoration:none;margin-left:.8rem;color:inherit;opacity:0}.page-content .headerlink:hover{animation:float-in .2s cubic-bezier(.4,0,.2,1) 0s forwards}.page-content h1 .toc-backref,.page-content h2 .toc-backref,.page-content h3 .toc-backref,.page-content h4 .toc-backref,.page-content h5 .toc-backref,.page-content h6 .toc-backref{text-decoration:none}.page-content h1:hover .headerlink,.page-content h2:hover .headerlink,.page-content h3:hover .headerlink,.page-content h4:hover .headerlink,.page-content h5:hover .headerlink,.page-content h6:hover .headerlink{animation:float-in .2s cubic-bezier(.4,0,.2,1) 0s forwards}.page-content h1{font-size:2rem;line-height:2.25rem}.page-content h2{font-size:1.75rem;line-height:2rem;padding-top:1.5rem;margin-top:0;margin-bottom:1rem}.page-content h3{font-size:1.5rem;line-height:1.75rem;padding-top:1rem;margin-top:0;margin-bottom:.75rem}.page-content h4{font-size:1.25rem;line-height:1.5rem;padding-top:.75rem;margin-top:0;margin-bottom:.5rem}.page-content div.page-content h5{font-size:1.1rem;line-height:1.5rem;padding-top:2rem;margin-top:0;margin-bottom:1rem}.page-content div.page-content h6{font-size:1rem;line-height:1.5rem;padding-top:2rem;margin-top:0;margin-bottom:1rem}.admonition{padding:12px 20px;margin-top:10px;margin-bottom:10px}.admonition p.last{margin:16px}.admonition .admonition-title{font-size:16px;font-weight:700;color:#555;text-transform:uppercase;margin-top:7px}.admonition.note{border-left:4px solid #00bcd4;background-color:rgba(0,188,212,.1)}.admonition.note .admonition-title{font-size:16px;font-weight:700;color:#00bcd4;margin-top:4px;margin-bottom:8px}.admonition.note .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"info_outline";font-size:18px}.admonition.seealso{border-left:4px solid #00bcd4;background-color:rgba(0,188,212,.1)}.admonition.seealso .admonition-title{font-size:16px;font-weight:700;color:#00bcd4;margin-top:4px;margin-bottom:8px}.admonition.seealso .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"search";font-size:18px}.admonition.hint{border-left:4px solid #00bcd4;background-color:rgba(0,188,212,.1)}.admonition.hint .admonition-title{font-size:16px;font-weight:700;color:#00bcd4;margin-top:4px;margin-bottom:8px}.admonition.hint .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"help_outline";font-size:18px}.admonition.warning{border-left:4px solid #ffc107;background-color:rgba(255,193,7,.1)}.admonition.warning .admonition-title{font-size:16px;font-weight:700;color:#ffc107;margin-top:4px;margin-bottom:8px}.admonition.warning .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"warning";font-size:18px}.admonition.attention{border-left:4px solid #ffc107;background-color:rgba(255,193,7,.1)}.admonition.attention .admonition-title{font-size:16px;font-weight:700;color:#ffc107;margin-top:4px;margin-bottom:8px}.admonition.attention .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"warning";font-size:18px}.admonition.tip{border-left:4px solid #8bc34a;background-color:rgba(139,195,74,.1)}.admonition.tip .admonition-title{font-size:16px;font-weight:700;color:#8bc34a;margin-top:4px;margin-bottom:8px}.admonition.tip .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"lightbulb_outline";font-size:18px}.admonition.important{border-left:4px solid #8bc34a;background-color:rgba(139,195,74,.1)}.admonition.important .admonition-title{font-size:16px;font-weight:700;color:#8bc34a;margin-top:4px;margin-bottom:8px}.admonition.important .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"check_circle";font-size:18px}.admonition.error{border-left:4px solid #f44336;background-color:rgba(244,67,54,.1)}.admonition.error .admonition-title{font-size:16px;font-weight:700;color:#f44336;margin-top:4px;margin-bottom:8px}.admonition.error .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"error_outline";font-size:18px}.admonition.caution{border-left:4px solid #f44336;background-color:rgba(244,67,54,.1)}.admonition.caution .admonition-title{font-size:16px;font-weight:700;color:#f44336;margin-top:4px;margin-bottom:8px}.admonition.caution .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"error_outline";font-size:18px}.admonition.danger{border-left:4px solid #f44336;background-color:rgba(244,67,54,.1)}.admonition.danger .admonition-title{font-size:16px;font-weight:700;color:#f44336;margin-top:4px;margin-bottom:8px}.admonition.danger .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"error_outline";font-size:18px}.page-content .highlight{margin:1px 0}.page-content .highlight pre{background:rgba(0,0,0,.05);color:rgba(0,0,0,.87);font-family:Menlo,DejaVu Sans Mono,Liberation Mono,Consolas,Ubuntu Mono,Courier New,andale mono,lucida console,monospace;padding:.75rem;overflow:auto;overflow-y:hidden}.page-content .highlight pre .nd,.page-content .highlight pre .o{color:rgba(0,0,0,.87)}.page-content div.highlight-console div.highlight{background:none}.page-content .output .highlight pre{color:rgba(0,0,0,.87);background:#fafafa;border:1px solid #999;padding:.75rem}.page-content .code,.page-content code:not(.download){margin:0;border-radius:2px}.page-content .code,.page-content .code span.pre,.page-content code:not(.download),.page-content code:not(.download) span.pre{font-family:Menlo,DejaVu Sans Mono,Liberation Mono,Consolas,Ubuntu Mono,Courier New,andale mono,lucida console,monospace}.page-content .viewcode-link{padding-left:2em;font-size:80%}.page-content .class>dt,.page-content .function>dt,.page-content .method>dt,.page-content .rubric{display:table;margin:10px 0;font-size:100%;line-height:normal;background:#e7f2fa;color:#2b98f0;border-top:3px solid #55adf3;padding:10px;position:relative}.page-content .class>dt .descclassname,.page-content .class>dt .descname,.page-content .function>dt .descclassname,.page-content .function>dt .descname,.page-content .method>dt .descclassname,.page-content .method>dt .descname,.page-content .rubric .descclassname,.page-content .rubric .descname{color:rgba(0,0,0,.87);background:#e7f2fa;padding:3px}.page-content .class>dt em,.page-content .function>dt em,.page-content .method>dt em,.page-content .rubric em{padding:0 2px}.page-content .rubric{margin:30px 0 10px}.page-content .field-body{padding-left:40px}.page-content .field-body ul{padding:0 0 0 16px;margin:0}.page-content .seealso .docutils>dt{float:left;clear:left;padding:0 6px}.page-content .seealso .docutils>dd{padding-left:6em}.page-content .nblast{padding-bottom:1em}.page-content pre{font-size:90%;background:#eee;color:#455a64;padding:16px 32px;width:auto;border-radius:4px;word-wrap:break-word}.page-content pre:hover:before{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;padding:0 .5rem;content:attr(click-to-copy);color:rgba(0,0,0,.5);border-radius:4px;position:relative;float:right;top:-.5rem;right:-.5rem;background:#c8c8c8;font-size:.8rem;cursor:pointer}.page-content blockquote{font-size:1rem;padding:0 1rem;border-left:3px solid rgba(0,0,0,.05)}.page-content blockquote:after{content:""!important;margin-left:0}.page-content blockquote:before{content:""!important}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list){margin:1.5rem 0;table-layout:fixed;max-width:100%;min-width:70%}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{white-space:normal;overflow-wrap:break-word}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) caption{font-size:16px;margin:1rem 0 .8rem;white-space:normal}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) caption .caption-number{font-style:normal}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) caption .caption-number:after{content:"\00a0"}.globaltoc .caption,.globaltoc .toc{display:none}.globaltoc ul{list-style-type:none;padding:0;margin:0}.globaltoc ul li{min-height:18px}.globaltoc ul li .link-wrapper{display:flex;justify-content:space-between}.globaltoc ul li .link-wrapper>a{padding:4px 0;display:block;width:100%;font-size:1rem;text-decoration:none;color:#757575}.globaltoc ul li .link-wrapper>a.current{font-weight:700}.globaltoc .nav-toggle{padding:0;float:right;display:flex;align-items:center;justify-content:center;height:36px}.globaltoc .nav-toggle>a{padding:0;margin-left:0;margin-right:4px;cursor:pointer}.globaltoc .nav-toggle>a>i{font-size:18px}.globaltoc .nav-toggle.show{transform:rotate(180deg)}.globaltoc .nav-toggle.show>a{margin-right:0;margin-left:4px}.globaltoc nav>ul>li>span.link-wrapper{padding-left:8px}.globaltoc nav>ul>li>ul>li>span.link-wrapper{padding-left:16px}.globaltoc nav>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:24px}.globaltoc nav>ul>li>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:32px}.globaltoc nav>ul>li>ul>li>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:40px}.globaltoc nav>ul>li>ul>li>ul>li>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:48px}.localtoc{font-size:.75rem;padding-top:1rem}.localtoc .caption{padding-left:12px}.localtoc .caption-text{font-size:.9rem;font-weight:700}.localtoc>ul>li>a{display:none}.localtoc ul{padding:0;list-style-type:none}.localtoc li{padding-left:6px}.localtoc a{display:block;text-decoration:none;color:inherit;margin-top:8px;padding-left:8px;line-height:1.1rem}.localtoc a.current{padding-left:5px;border-left:3px solid;font-weight:700}.contents.topic,.toctree-wrapper{border-left:5px solid}.contents.topic>p.topic-title,.toctree-wrapper>p.caption{color:#757575;font-size:1rem;padding-left:14px}.contents.topic ul,.toctree-wrapper ul{padding-left:14px;list-style:none;line-height:30px}.contents.topic a,.toctree-wrapper a{font-size:1.2rem;text-decoration:none}.contents.topic a .pre,.toctree-wrapper a .pre{font-size:1rem}.contents.topic>ul>li>a,.toctree-wrapper>ul>li>a{font-size:1.3rem}.contents.topic>ul>li>a .pre,.toctree-wrapper>ul>li>a .pre{font-size:1.1rem}.page-content ul li{margin:.3rem 0}.page-content ul li p{margin:0}.page-content .option-list .option{font-family:Menlo,DejaVu Sans Mono,Liberation Mono,Consolas,Ubuntu Mono,Courier New,andale mono,lucida console,monospace}.page-content .option-list td{padding:.5rem;border:none}.mdl-layout__drawer{background-color:#fff}.mdl-layout__drawer::-webkit-scrollbar{width:6px}.mdl-layout__drawer::-webkit-scrollbar-track{border-radius:6px}.mdl-layout__drawer::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3);border-radius:6px;box-shadow:0 0 0 1px hsla(0,0%,100%,.3)}.mdl-layout__drawer>.mdl-layout-title{font-weight:700;text-align:right;margin:0;padding:0;line-height:32px;border-bottom:1px solid rgba(0,0,0,.1);min-height:64px}.mdl-layout__drawer>.mdl-layout-title .title{color:inherit;display:block;height:100%;width:100%;text-decoration:none}.mdl-layout__drawer>.mdl-layout-title .title>img.logo{width:100%;margin:0;padding:0}.mdl-layout__drawer>.mdl-layout-title .title-text{font-weight:700;text-align:right;padding:0 10px;margin:16px 0 8px;line-height:32px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;color:inherit;display:block}nav.breadcrumb>a.mdl-navigation__link{padding:0 8px;font-size:18px}@media (max-width:1199px){nav.breadcrumb{width:calc(100% - 64px)}nav.breadcrumb a.mdl-navigation__link.is-active{overflow-x:hidden;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.admonition.attention nav.breadcrumb i.admonition-title:before,.admonition.caution nav.breadcrumb i.admonition-title:before,.admonition.danger nav.breadcrumb i.admonition-title:before,.admonition.error nav.breadcrumb i.admonition-title:before,.admonition.hint nav.breadcrumb i.admonition-title:before,.admonition.important nav.breadcrumb i.admonition-title:before,.admonition.note nav.breadcrumb i.admonition-title:before,.admonition.seealso nav.breadcrumb i.admonition-title:before,.admonition.tip nav.breadcrumb i.admonition-title:before,.admonition.warning nav.breadcrumb i.admonition-title:before,nav.breadcrumb .admonition.attention i.admonition-title:before,nav.breadcrumb .admonition.caution i.admonition-title:before,nav.breadcrumb .admonition.danger i.admonition-title:before,nav.breadcrumb .admonition.error i.admonition-title:before,nav.breadcrumb .admonition.hint i.admonition-title:before,nav.breadcrumb .admonition.important i.admonition-title:before,nav.breadcrumb .admonition.note i.admonition-title:before,nav.breadcrumb .admonition.seealso i.admonition-title:before,nav.breadcrumb .admonition.tip i.admonition-title:before,nav.breadcrumb .admonition.warning i.admonition-title:before,nav.breadcrumb a.mdl-navigation__link:not(.is-active),nav.breadcrumb i.material-icons{display:none}}div.mdl-layout__header{margin-top:77px}.mdl-layout__drawer-button{top:13px!important}div.mdl-layout__header-row.header-links{background:hsla(0,0%,100%,.2);width:100%;overflow-x:auto;overflow-y:hidden}div.mdl-layout__header-row.header-links a.mdl-navigation__link{font-size:1rem}div.mdl-layout__header-row.header-links a.mdl-navigation__link i{font-size:1.2rem;margin:0 8px;position:relative;bottom:-.1rem}div.mdl-layout__header-row.header-links a.mdl-navigation__link:hover{background-color:#2196f3;color:#eee}div.mdl-layout__header-row.header-links a.mdl-navigation__link[href="#"]{background-color:#2196f3;opacity:1;color:#fff}.site-title{font-weight:300!important;line-height:57px;letter-spacing:-1px;margin-bottom:0;float:left;color:#fff}.site-title,.site-title:visited{color:#424242}.site-header{position:fixed;top:0;width:100%;min-height:55px;padding-top:10px;padding-bottom:10px;background-color:#048ccc;z-index:10;font-weight:300;font-size:17px;border-bottom:1px solid #fff}.site-header-logo{width:120px;display:initial}.site-nav{float:right;line-height:57px}.site-nav .menu-icon,.site-nav .nav-trigger{display:none}.site-nav .page-link{color:#fff;line-height:1.5;font-weight:300}.site-nav .page-link:not(:last-child){margin-right:40px}.site-nav .page-link:hover{color:#fff;text-shadow:-.06ex 0 #fff,.06ex 0 #fff}.site-nav .page-link.page-current{color:#fff;text-decoration:underline}@media screen and (max-width:1024px){.site-nav{position:absolute;top:9px;right:15px;background-color:#178dc9;border-radius:2px;text-align:right}.site-nav label[for=nav-trigger]{display:block;float:right;width:36px;height:36px;z-index:2;cursor:pointer}.site-nav .menu-icon{display:block;float:right;width:36px;height:26px;line-height:0;padding-top:20px;text-align:center}.site-nav .menu-icon>svg{fill:#fff}.site-nav input~.trigger{clear:both;display:none}.site-nav input:checked~.trigger{display:block;padding-bottom:5px}.site-nav .page-link{padding:5px 10px;display:block;margin-left:20px}.site-nav .page-link:not(:last-child){margin-right:0}}footer.mdl-mini-footer{background-color:#212121}footer.mdl-mini-footer>div.mdl-mini-footer__left-section{margin-bottom:20px;display:flex;flex-direction:column}footer.mdl-mini-footer>div.mdl-mini-footer__left-section .mdl-logo{font-size:1.1rem}footer.mdl-mini-footer>div.mdl-mini-footer__right-section{font-size:.9rem;display:flex;flex-direction:column;justify-content:flex-end}footer.mdl-mini-footer>div.mdl-mini-footer__right-section a{color:inherit;font-weight:700;text-decoration:none}footer.mdl-mini-footer p.caption{display:none}.pagenation{width:100%;margin-top:80px;height:92px;background-color:#424242;display:flex}.pagenation #button-next,.pagenation #button-prev,.pagenation .button-common{text-transform:none;padding:0;height:92px;display:flex;justify-content:center;align-items:center;color:#fff}.pagenation #button-prev{margin-right:auto}.pagenation #button-prev .pagenation-text{text-align:left}.pagenation #button-next{margin-left:auto;flex-direction:row-reverse}.pagenation #button-next .pagenation-text{text-align:right}.pagenation-arrow-L{margin-right:20px}.pagenation-arrow-R{margin-left:20px}.pagenation-text{line-height:30px;font-size:20px}.pagenation-direction{opacity:.7;font-size:18px}@media screen and (max-width:1024px){.pagenation #button-prev{width:20%}.pagenation #button-next{width:80%}.pagenation #button-prev .pagenation-text{display:none}}@media screen and (min-width:1025px){.pagenation #button-next,.pagenation #button-prev{width:50%}.pagenation #button-prev .pagenation-text{display:block}}.site-footer{border-top:1px solid #f5f5f5;padding:30px 0;background-color:#424242;position:relative;z-index:10}.site-footer .footer-category-title{color:#048ccc}.site-footer a,.site-footer a:visited{color:#f5f5f5!important}.site-footer2{background-color:#424242;padding-top:40px;padding-bottom:10px;position:relative;z-index:10}.footer-heading{margin-bottom:15px}.contact-list,.social-media-list{list-style:none;margin-left:0}.footer-bottom-warning{font-size:80%;color:#fff;float:left}.footer-logo{width:200px;margin-bottom:30px;margin-top:30px}.footer-col{float:left;margin-bottom:15px;padding-left:15px}.footer-text{color:#f5f5f5}#waterfall-exp::-webkit-input-placeholder{color:#ccc}#waterfall-exp:-ms-input-placeholder{color:#ccc}#waterfall-exp::-moz-placeholder{color:#ccc}ul.search span.highlighted{font-weight:700}ul.search>li{margin-bottom:24px}#search-results ul{list-style:none;padding:0}#search-results ul li>a{text-decoration:none;font-size:1.2rem}a.download:before{content:"file_download";position:relative;top:5px;margin-right:5px}button.download{position:sticky;margin-left:1em}.mdl-card{margin:1em 1.5em 1em 0;display:inline-block;width:250px;min-height:140px;padding:18px}.mdl-card:hover{box-shadow:0 10px 20px rgba(0,0,0,.25),0 6px 6px rgba(0,0,0,.22);color:#000;cursor:pointer}.mdl-card__title{padding:0 0 1em;font-size:18px;color:#444}.mdl-card__supporting-text{line-height:1.5rem;padding:0;width:100%}.head-card.mdl-card{width:auto;display:block;max-width:800px;padding:24px}.head-card>.mdl-card__title{padding-bottom:0;height:60px;font-weight:700;text-transform:uppercase}.head-card>.mdl-card__menu{color:#fff}.head-card>.mdl-card__actions{padding:0}.cards{display:flex;flex-direction:row;flex-wrap:wrap} /*# sourceMappingURL=/sphinx_materialdesign_theme.css.map */ \ No newline at end of file diff --git a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css.map b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css.map index 428795213db6..ad360169c25d 100644 --- a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css.map +++ b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css.map @@ -1 +1 @@ -{"version":3,"sources":["../../node_modules/material-design-lite/src/shadow/_shadow.scss","../../node_modules/material-design-lite/src/_mixins.scss","../../node_modules/material-design-lite/src/data-table/_data-table.scss","../../node_modules/material-design-lite/src/_variables.scss","../../node_modules/material-design-lite/src/footer/_mini_footer.scss","../../node_modules/material-design-lite/src/card/_card.scss","../../node_modules/material-design-lite/src/button/_button.scss","../scss/grid/_simplegrid.scss","../scss/fonts/_material-icons.scss","../scss/_root.scss","../scss/_variables.scss","../scss/layout/_layout.scss","../scss/headerings/_headerings.scss","../scss/admonitions/_admonitions.scss","../scss/code/_code.scss","../scss/blockquote/_blockquote.scss","../scss/tables/_tables.scss","../scss/toc/_globaltoc.scss","../scss/toc/_localtoc.scss","../scss/toc/_toctree.scss","../scss/lists/_lists.scss","../scss/drawer/_drawer.scss","../scss/header/_header.scss","../scss/footer/_footer.scss","../scss/search/_search.scss","../scss/downloadlink/_downloadlink.scss","../scss/card/_card.scss"],"names":[],"mappings":"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","file":"sphinx_materialdesign_theme.css","sourceRoot":"../../src/js","sourcesContent":["/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n@import \"../mixins\";\n\n.mdl-shadow--2dp {\n @include shadow-2dp();\n}\n\n.mdl-shadow--3dp {\n @include shadow-3dp();\n}\n\n.mdl-shadow--4dp {\n @include shadow-4dp();\n}\n\n.mdl-shadow--6dp {\n @include shadow-6dp();\n}\n\n.mdl-shadow--8dp {\n @include shadow-8dp();\n}\n\n.mdl-shadow--16dp {\n @include shadow-16dp();\n}\n\n.mdl-shadow--24dp {\n @include shadow-24dp();\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* Typography */\n\n@mixin typo-preferred-font($usePreferred: true) {\n @if $usePreferred {\n font-family: $preferred_font;\n }\n}\n\n@mixin typo-display-4($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 112px;\n font-weight: 300;\n line-height: 1;\n letter-spacing: -0.04em;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-display-3($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 56px;\n font-weight: 400;\n line-height: 1.35;\n letter-spacing: -0.02em;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-display-2($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 45px;\n font-weight: 400;\n line-height: 48px;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-display-1($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 34px;\n font-weight: 400;\n line-height: 40px;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-headline($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 24px;\n font-weight: 400;\n line-height: 32px;\n -moz-osx-font-smoothing: grayscale;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-title($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 20px;\n font-weight: 500;\n line-height: 1;\n letter-spacing: 0.02em;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-subhead($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 16px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0.04em;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-subhead-2($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 16px;\n font-weight: 400;\n line-height: 28px;\n letter-spacing: 0.04em;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-body-2($colorContrast: false, $usePreferred: false) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n @if $usePreferred {\n font-weight: 500;\n } @else {\n font-weight: bold;\n }\n line-height: 24px;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-body-1($colorContrast: false, $usePreferred: false) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-caption($colorContrast: false, $usePreferred: false) {\n @include typo-preferred-font($usePreferred);\n font-size: 12px;\n font-weight: 400;\n line-height: 1;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-blockquote($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n position: relative;\n font-size: 24px;\n font-weight: 300;\n font-style: italic;\n line-height: 1.35;\n letter-spacing: 0.08em;\n\n &:before {\n position: absolute;\n left: -0.5em;\n content: '“';\n }\n\n &:after {\n content: '”';\n margin-left: -0.05em;\n }\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-menu($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n font-weight: 500;\n line-height: 1;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-button($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n font-weight: 500;\n text-transform: uppercase;\n line-height: 1;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-icon() {\n font-family: 'Material Icons';\n font-weight: normal;\n font-style: normal;\n font-size: 24px;\n line-height: 1;\n letter-spacing: normal;\n text-transform: none;\n display: inline-block;\n word-wrap: normal;\n font-feature-settings: 'liga';\n -webkit-font-feature-settings: 'liga';\n -webkit-font-smoothing: antialiased;\n}\n\n/* Shadows */\n\n// Focus shadow mixin.\n@mixin focus-shadow() {\n box-shadow: 0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);\n}\n\n@mixin shadow-2dp() {\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 3px 1px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),\n 0 1px 5px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);\n}\n@mixin shadow-3dp() {\n box-shadow: 0 3px 4px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 3px 3px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),\n 0 1px 8px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);\n}\n@mixin shadow-4dp() {\n box-shadow: 0 4px 5px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 1px 10px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 2px 4px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n@mixin shadow-6dp() {\n box-shadow: 0 6px 10px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 1px 18px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 3px 5px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n@mixin shadow-8dp() {\n box-shadow: 0 8px 10px 1px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 3px 14px 2px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 5px 5px -3px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n@mixin shadow-16dp() {\n box-shadow: 0 16px 24px 2px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 6px 30px 5px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 8px 10px -5px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n@mixin shadow-24dp() {\n box-shadow: 0 9px 46px 8px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 11px 15px -7px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 24px 38px 3px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n/* Animations */\n\n@mixin material-animation-fast-out-slow-in($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-fast-out-slow-in;\n}\n\n@mixin material-animation-linear-out-slow-in($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-linear-out-slow-in;\n}\n\n@mixin material-animation-fast-out-linear-in($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-fast-out-linear-in;\n}\n\n@mixin material-animation-default($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-default;\n}\n\n/* Dialog */\n\n@mixin dialog-width($units:5) {\n @if(type_of($units) != 'number') {\n @error \"The unit given to dialog-width should be a number.\";\n }\n // 56dp is the base unit width for Dialogs.\n // With 5 units being the number of units for a mobile device.\n // https://goo.gl/sK2O5o\n width: $units * 56px;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n@import \"../mixins\";\n\n.mdl-data-table {\n position: relative;\n border: $data-table-dividers;\n border-collapse: collapse;\n white-space: nowrap;\n font-size: $data-table-font-size;\n background-color: unquote(\"rgb(#{$color-white})\");\n\n thead {\n padding-bottom: 3px;\n\n .mdl-data-table__select {\n margin-top: 0;\n }\n }\n\n tbody {\n tr {\n position: relative;\n height: $data-table-row-height;\n @include material-animation-default(0.28s);\n transition-property: background-color;\n\n &.is-selected {\n background-color: $data-table-selection-color;\n }\n\n &:hover {\n background-color: $data-table-hover-color;\n }\n }\n }\n\n td, th {\n padding: 0 $data-table-column-padding 12px $data-table-column-padding;\n text-align: right;\n\n &:first-of-type {\n padding-left: 24px;\n }\n\n &:last-of-type {\n padding-right: 24px;\n }\n }\n\n td {\n position: relative;\n vertical-align: middle;\n height: $data-table-row-height;\n border-top: $data-table-dividers;\n border-bottom: $data-table-dividers;\n padding-top: $data-table-cell-top;\n box-sizing: border-box;\n\n .mdl-data-table__select {\n vertical-align: middle;\n }\n }\n\n th {\n position: relative;\n vertical-align: bottom;\n text-overflow: ellipsis;\n @include typo-body-2();\n height: $data-table-row-height;\n font-size: $data-table-header-font-size;\n color: $data-table-header-color;\n padding-bottom: 8px;\n box-sizing: border-box;\n\n &.mdl-data-table__header--sorted-ascending,\n &.mdl-data-table__header--sorted-descending {\n color: $data-table-header-sorted-color;\n &:before {\n @include typo-icon;\n font-size: $data-table-header-sort-icon-size;\n content: \"\\e5d8\";\n margin-right: 5px;\n vertical-align: sub;\n }\n &:hover {\n cursor: pointer;\n &:before {\n color: $data-table-header-sorted-icon-hover-color;\n }\n }\n }\n &.mdl-data-table__header--sorted-descending:before {\n content: \"\\e5db\";\n }\n }\n}\n\n.mdl-data-table__select {\n width: 16px;\n}\n\n.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric {\n text-align: left;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n * -----Dialog\n * -----Snackbar\n * -----Tooltip\n * -----Chip\n *\n * Even though all variables have the `!default` directive, most of them\n * should not be changed as they are dependent one another. This can cause\n * visual distortions (like alignment issues) that are hard to track down\n * and fix.\n */\n\n\n/* ========== TYPOGRAPHY ========== */\n\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n$preferred_font: 'Roboto', 'Helvetica', 'Arial', sans-serif !default;\n$performance_font: 'Helvetica', 'Arial', sans-serif !default;\n\n/* ========== COLORS ========== */\n\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n\n@import \"color-definitions\";\n@import \"functions\";\n\n/* ========== IMAGES ========== */\n$image_path: '/images' !default;\n\n/* ========== Color & Themes ========== */\n\n// Define whether individual color palette items should have classes created.\n// Setting this to true will remove individual color classes for each color in the palettes.\n// To improve overall performance (assuming they aren't used) by:\n// * Saving server bandwidth sending the extra classes\n// * Save client computation against the classes\n// it is RECOMMENDED you set this to true.\n$trim-color-classes: false !default;\n\n// Use color primarily for emphasis. Choose colors that fit with\n// your brand and provide good contrast between visual components.\n$color-primary: $palette-indigo-500 !default;\n$color-primary-dark: $palette-indigo-700 !default;\n$color-accent: $palette-pink-A200 !default;\n\n// Our primary is dark, so use $color-dark-contrast for overlaid text.\n$color-primary-contrast: $color-dark-contrast !default;\n// Our accent is dark, so use $color-dark-contrast for overlaid text.\n$color-accent-contrast: $color-dark-contrast !default;\n\n// Replace all colors with placeholders if we're generating a template.\n@if $styleguide-generate-template == true {\n $color-primary: '$color-primary';\n $color-primary-dark: '$color-primary-dark';\n $color-accent: '$color-accent';\n $color-primary-contrast: '$color-primary-contrast';\n $color-accent-contrast: '$color-accent-contrast';\n}\n\n/* ========== Typography ========== */\n\n// We use the following default color styles: text-color-primary and\n// text-color-secondary. For light themes, use text-color-primary-inverse\n// and text-color-secondary-inverse.\n\n$text-color-primary: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$text-link-color: unquote(\"rgb(#{$color-accent})\") !default;\n\n// Define whether to target elements directly for typographic enhancements.\n// Turning this off means you need to use mdl-* classes more often.\n// Other components may also fail to adhere to MD without these rules.\n// It is strongly recommended you leave this as true.\n\n$target-elements-directly: true !default;\n\n/* ========== Components ========== */\n\n/* ========== Standard Buttons ========== */\n\n// Default button colors.\n$button-primary-color: unquote(\"rgba(#{$palette-grey-500}, 0.20)\") !default;\n$button-secondary-color: unquote(\"rgb(#{$color-black})\") !default;\n$button-hover-color: $button-primary-color !default;\n$button-active-color: unquote(\"rgba(#{$palette-grey-500}, 0.40)\") !default;\n$button-focus-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n// Colored button colors.\n$button-primary-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-secondary-color-alt: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n$button-hover-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-active-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-focus-color-alt: $button-focus-color !default;\n\n// Ripple color for colored raised buttons.\n$button-ripple-color-alt: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n\n// Disabled button colors.\n$button-primary-color-disabled: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n$button-secondary-color-disabled: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n// FAB colors and sizes.\n$button-fab-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-hover-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-active-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-text-color-alt: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n$button-fab-ripple-color-alt: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n\n// Icon button colors and sizes.\n$button-icon-color: unquote(\"rgb(#{$palette-grey-700})\") !default;\n$button-icon-focus-color: $button-focus-color !default;\n\n/* ========== Icon Toggles ========== */\n\n$icon-toggle-color: unquote(\"rgb(#{$palette-grey-700})\") !default;\n$icon-toggle-focus-color: $button-focus-color !default;\n$icon-toggle-checked-color: unquote(\"rgb(#{$color-primary})\") !default;\n$icon-toggle-checked-focus-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$icon-toggle-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n/* ========== Radio Buttons ========== */\n\n$radio-color: unquote(\"rgb(#{$color-primary})\") !default;\n$radio-off-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$radio-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n/* ========== Ripple effect ========== */\n\n$ripple-bg-color: unquote(\"rgb(#{$color-light-contrast})\") !default;\n\n/* ========== Layout ========== */\n\n$layout-nav-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n\n// Drawer\n$layout-drawer-bg-color: unquote(\"rgb(#{$palette-grey-50})\") !default;\n$layout-drawer-border-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$layout-text-color: unquote(\"rgb(#{$palette-grey-800})\") !default;\n$layout-drawer-navigation-color: #757575 !default;\n$layout-drawer-navigation-link-active-background: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$layout-drawer-navigation-link-active-color: unquote(\"rgb(#{$color-light-contrast})\") !default;\n\n// Header\n$layout-header-bg-color: unquote(\"rgb(#{$color-primary})\") !default;\n$layout-header-text-color: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n$layout-header-nav-hover-color: unquote(\"rgba(#{$palette-grey-700}, 0.6)\") !default;\n$layout-header-tab-text-color: unquote(\"rgba(#{$color-primary-contrast}, 0.6)\") !default;\n\n// Tabs\n$layout-header-tab-highlight: unquote(\"rgb(#{$color-accent})\") !default;\n\n/* ========== Content Tabs ========== */\n\n$tab-highlight-color: unquote(\"rgb(#{$color-primary})\") !default;\n$tab-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$tab-active-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$tab-border-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n\n/* ========== Checkboxes ========== */\n\n$checkbox-color: unquote(\"rgb(#{$color-primary})\") !default;\n$checkbox-off-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$checkbox-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$checkbox-focus-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$checkbox-image-path: $image_path;\n\n/* ========== Switches ========== */\n\n$switch-color: unquote(\"rgb(#{$color-primary})\") !default;\n$switch-faded-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$switch-thumb-color: $switch-color !default;\n$switch-track-color: unquote(\"rgba(#{$color-primary}, 0.5)\") !default;\n\n$switch-off-thumb-color: unquote(\"rgb(#{$palette-grey-50})\") !default;\n$switch-off-track-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$switch-disabled-thumb-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n$switch-disabled-track-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n/* ========== Spinner ========== */\n\n$spinner-color-1: unquote(\"rgb(#{$palette-blue-400})\") !default;\n$spinner-color-2: unquote(\"rgb(#{$palette-red-500})\") !default;\n$spinner-color-3: unquote(\"rgb(#{$palette-yellow-600})\") !default;\n$spinner-color-4: unquote(\"rgb(#{$palette-green-500})\") !default;\n\n$spinner-single-color: unquote(\"rgb(#{$color-primary})\") !default;\n\n/* ========== Text fields ========== */\n\n$input-text-background-color: transparent !default;\n$input-text-label-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$input-text-bottom-border-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n$input-text-highlight-color: unquote(\"rgb(#{$color-primary})\") !default;\n$input-text-disabled-color: $input-text-bottom-border-color !default;\n$input-text-disabled-text-color: $input-text-label-color !default;\n$input-text-error-color: unquote(\"rgb(#{$palette-red-A700})\") !default;\n\n/* ========== Card ========== */\n\n$card-background-color: unquote(\"rgb(#{$color-white})\") !default;\n$card-text-color: unquote(\"rgb(#{$color-black})\") !default;\n$card-image-placeholder-color: unquote(\"rgb(#{$color-accent})\") !default;\n$card-supporting-text-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$card-border-color: rgba(0,0,0,0.1) !default;\n$card-subtitle-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n\n/* ========== Sliders ========== */\n\n$range-bg-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$range-color: unquote(\"rgb(#{$color-primary})\") !default;\n$range-faded-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$range-bg-focus-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n/* ========== Progress ========== */\n$progress-main-color: unquote(\"rgb(#{$color-primary})\") !default;\n$progress-secondary-color: unquote(\"rgba(#{$color-primary-contrast}, 0.7)\") !default;\n$progress-fallback-buffer-color: unquote(\"rgba(#{$color-primary-contrast}, 0.9)\") !default;\n$progress-image-path: $image_path;\n\n/* ========== List ========== */\n\n$list-main-text-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$list-supporting-text-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$list-icon-color: unquote(\"rgb(#{$palette-grey-600})\") !default;\n$list-avatar-color: white !default;\n\n/* ========== Item ========== */\n\n// Default Item Colors\n$default-item-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$default-item-outline-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n$default-item-hover-bg-color: unquote(\"rgb(#{$palette-grey-200})\") !default;\n$default-item-focus-bg-color: unquote(\"rgb(#{$palette-grey-200})\") !default;\n$default-item-active-bg-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$default-item-divider-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n// Disabled Button Colors\n$disabled-item-text-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n\n/* ========== Dropdown menu ========== */\n\n$default-dropdown-bg-color: unquote(\"rgb(#{$color-white})\") !default;\n\n/* ========== Tooltips ========== */\n\n$tooltip-text-color: unquote(\"rgb(#{$color-white})\") !default;\n$tooltip-background-color: unquote(\"rgba(#{$palette-grey-700}, 0.9)\") !default;\n\n/* ========== Footer ========== */\n\n$footer-bg-color: unquote(\"rgb(#{$palette-grey-800})\") !default;\n$footer-color: unquote(\"rgb(#{$palette-grey-500})\") !default;\n$footer-heading-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$footer-button-fill-color: $footer-color !default;\n$footer-underline-color: $footer-color !default;\n\n\n/* TEXTFIELD */\n\n$input-text-font-size: 16px !default;\n$input-text-width: 100% !default;\n$input-text-padding: 4px !default;\n$input-text-vertical-spacing: 20px !default;\n\n$input-text-button-size: 32px !default;\n$input-text-floating-label-fontsize: 12px !default;\n$input-text-expandable-icon-top: 16px !default;\n\n\n/* SWITCH */\n\n$switch-label-font-size: 16px !default;\n$switch-label-height: 24px !default;\n$switch-track-height: 14px !default;\n$switch-track-length: 36px !default;\n$switch-thumb-size: 20px !default;\n$switch-track-top: ($switch-label-height - $switch-track-height) / 2 !default;\n$switch-thumb-top: ($switch-label-height - $switch-thumb-size) / 2 !default;\n$switch-ripple-size: $switch-label-height * 2 !default;\n$switch-helper-size: 8px !default;\n\n/* SPINNER */\n\n$spinner-size: 28px !default;\n$spinner-stroke-width: 3px !default;\n\n// Amount of circle the arc takes up.\n$spinner-arc-size: 270deg !default;\n// Time it takes to expand and contract arc.\n$spinner-arc-time: 1333ms !default;\n// How much the start location of the arc should rotate each time.\n$spinner-arc-start-rot: 216deg !default;\n\n$spinner-duration: 360 * $spinner-arc-time / (\n strip-units($spinner-arc-start-rot + (360deg - $spinner-arc-size)));\n\n\n/* RADIO */\n\n$radio-label-font-size: 16px !default;\n$radio-label-height: 24px !default;\n$radio-button-size: 16px !default;\n$radio-inner-margin: $radio-button-size / 4;\n$radio-padding: 8px !default;\n$radio-top-offset: ($radio-label-height - $radio-button-size) / 2;\n$radio-ripple-size: 42px !default;\n\n\n/* MENU */\n\n$menu-expand-duration: 0.3s !default;\n$menu-fade-duration: 0.2s !default;\n\n/* LIST */\n\n$list-border: 8px !default;\n$list-min-height: 48px !default;\n$list-min-padding: 16px !default;\n$list-bottom-padding: 20px !default;\n$list-avatar-text-left-distance: 72px !default;\n$list-icon-text-left-distance: 72px !default;\n\n$list-avatar-size: 40px !default;\n$list-icon-size: 24px !default;\n\n$list-two-line-height: 72px !default;\n$list-three-line-height: 88px !default;\n\n/* LAYOUT */\n\n$layout-drawer-narrow: 240px !default;\n$layout-drawer-wide: 456px !default;\n$layout-drawer-width: $layout-drawer-narrow !default;\n\n$layout-header-icon-size: 32px !default;\n$layout-screen-size-threshold: 1024px !default;\n$layout-header-icon-margin: 24px !default;\n$layout-drawer-button-mobile-size: 32px !default;\n$layout-drawer-button-desktop-size: 48px !default;\n\n$layout-header-mobile-row-height: 56px !default;\n$layout-mobile-header-height: $layout-header-mobile-row-height;\n$layout-header-desktop-row-height: 64px !default;\n$layout-desktop-header-height: $layout-header-desktop-row-height;\n\n$layout-header-desktop-baseline: 80px !default;\n$layout-header-mobile-baseline: 72px !default;\n$layout-header-mobile-indent: 16px !default;\n$layout-header-desktop-indent: 40px !default;\n\n$layout-tab-font-size: 14px !default;\n$layout-tab-bar-height: 48px !default;\n$layout-tab-mobile-padding: 12px !default;\n$layout-tab-desktop-padding: 24px !default;\n$layout-tab-highlight-thickness: 2px !default;\n\n\n/* ICON TOGGLE */\n\n$icon-toggle-size: 32px !default;\n$icon-toggle-font-size: 24px !default;\n$icon-toggle-ripple-size: 36px !default;\n\n/* FOOTER */\n\n/*mega-footer*/\n$footer-min-padding: 16px !default;\n$footer-padding-sides: 40px !default;\n$footer-heading-font-size: 14px !default;\n$footer-heading-line-height: (1.7 * $footer-heading-font-size) !default;\n$footer-btn-size: 36px !default;\n\n/*mini-footer*/\n$padding: 16px !default;\n$footer-heading-font-size: 24px !default;\n$footer-heading-line-height: (1.5 * $footer-heading-font-size) !default;\n$footer-btn-size: 36px !default;\n\n/* CHECKBOX */\n\n$checkbox-label-font-size: 16px !default;\n$checkbox-label-height: 24px !default;\n$checkbox-button-size: 16px !default;\n$checkbox-inner-margin: 2px !default;\n$checkbox-padding: 8px !default;\n$checkbox-top-offset:\n($checkbox-label-height - $checkbox-button-size - $checkbox-inner-margin) / 2;\n$checkbox-ripple-size: $checkbox-label-height * 1.5;\n\n/* CARD */\n\n/* Card dimensions */\n$card-width: 330px !default;\n$card-height: 200px !default;\n$card-font-size: 16px !default;\n$card-title-font-size: 24px !default;\n$card-subtitle-font-size: 14px !default;\n$card-horizontal-padding: 16px !default;\n$card-vertical-padding: 16px !default;\n\n$card-title-perspective-origin-x: 165px !default;\n$card-title-perspective-origin-y: 56px !default;\n\n$card-title-transform-origin-x: 165px !default;\n$card-title-transform-origin-y: 56px !default;\n\n$card-title-text-transform-origin-x: 149px !default;\n$card-title-text-transform-origin-y: 48px !default;\n\n$card-supporting-text-font-size: 1rem !default;\n$card-supporting-text-line-height: 18px !default;\n\n$card-actions-font-size: 16px !default;\n\n$card-title-text-font-weight: 300 !default;\n$card-z-index: 1 !default;\n\n/* Cover image */\n$card-cover-image-height: 186px !default;\n$card-background-image-url: '' !default;\n\n\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n$button-min-width: 64px !default;\n$button-height: 36px !default;\n$button-padding: 16px !default;\n$button-margin: 4px !default;\n$button-border-radius: 2px !default;\n\n$button-fab-size: 56px !default;\n$button-fab-size-mini: 40px !default;\n$button-fab-font-size: 24px !default;\n\n$button-icon-size: 32px !default;\n$button-icon-size-mini: 24px !default;\n\n\n/* ANIMATION */\n$animation-curve-fast-out-slow-in: cubic-bezier(0.4, 0, 0.2, 1) !default;\n$animation-curve-linear-out-slow-in: cubic-bezier(0, 0, 0.2, 1) !default;\n$animation-curve-fast-out-linear-in: cubic-bezier(0.4, 0, 1, 1) !default;\n\n$animation-curve-default: $animation-curve-fast-out-slow-in !default;\n\n\n/* PROGRESS */\n$bar-height: 4px !default;\n\n/* BADGE */\n$badge-font-size: 12px !default;\n$badge-color: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n$badge-color-inverse: unquote(\"rgb(#{$color-accent})\") !default;\n$badge-background: unquote(\"rgb(#{$color-accent})\") !default;\n$badge-background-inverse: unquote(\"rgba(#{$color-accent-contrast},0.2)\") !default;\n$badge-size : 22px !default;\n$badge-padding: 2px !default;\n$badge-overlap: 12px !default;\n\n/* SHADOWS */\n\n$shadow-key-umbra-opacity: 0.2 !default;\n$shadow-key-penumbra-opacity: 0.14 !default;\n$shadow-ambient-shadow-opacity: 0.12 !default;\n\n/* GRID */\n\n$grid-desktop-columns: 12 !default;\n$grid-desktop-gutter: 16px !default;\n$grid-desktop-margin: 16px !default;\n\n$grid-desktop-breakpoint: 840px !default;\n\n$grid-tablet-columns: 8 !default;\n$grid-tablet-gutter: $grid-desktop-gutter !default;\n$grid-tablet-margin: $grid-desktop-margin !default;\n\n$grid-tablet-breakpoint: 480px !default;\n\n$grid-phone-columns: 4 !default;\n$grid-phone-gutter: $grid-desktop-gutter !default;\n$grid-phone-margin: $grid-desktop-margin !default;\n\n$grid-cell-default-columns: $grid-phone-columns !default;\n$grid-max-columns: $grid-desktop-columns !default;\n\n/* DATA TABLE */\n\n$data-table-font-size: 13px !default;\n$data-table-header-font-size: 12px !default;\n$data-table-header-sort-icon-size: 16px !default;\n\n$data-table-header-color: rgba(#000, 0.54) !default;\n$data-table-header-sorted-color: rgba(#000, 0.87) !default;\n$data-table-header-sorted-icon-hover-color: rgba(#000, 0.26) !default;\n$data-table-divider-color: rgba(#000, 0.12) !default;\n\n$data-table-hover-color: #eeeeee !default;\n$data-table-selection-color: #e0e0e0 !default;\n\n$data-table-dividers: 1px solid $data-table-divider-color !default;\n\n$data-table-row-height: 48px !default;\n$data-table-last-row-height: 56px !default;\n$data-table-header-height: 56px !default;\n\n$data-table-column-spacing: 36px !default;\n$data-table-column-padding: $data-table-column-spacing / 2;\n\n$data-table-card-header-height: 64px !default;\n$data-table-card-title-top: 20px !default;\n$data-table-card-padding: 24px !default;\n$data-table-button-padding-right: 16px !default;\n$data-table-cell-top: $data-table-card-padding / 2;\n\n/* DIALOG */\n$dialog-content-color: $card-supporting-text-text-color;\n\n/* SNACKBAR */\n\n// Hard coded since the color is not present in any palette.\n$snackbar-background-color: #323232 !default;\n$snackbar-tablet-breakpoint: $grid-tablet-breakpoint;\n$snackbar-action-color: unquote(\"rgb(#{$color-accent})\") !default;\n\n/* TOOLTIP */\n$tooltip-font-size: 10px !default;\n$tooltip-font-size-large: 14px !default;\n\n/* CHIP */\n$chip-bg-color: rgb(222, 222, 222) !default;\n$chip-bg-active-color: rgb(214, 214, 214) !default;\n$chip-height: 32px !default;\n$chip-font-size: 13px !default; \n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n\n.mdl-mini-footer {\n display: flex;\n flex-flow: row wrap;\n justify-content: space-between;\n\n padding: ($padding * 2) $padding;\n\n color: $footer-color;\n background-color: $footer-bg-color;\n\n &:after {\n content: '';\n display: block;\n }\n\n & .mdl-logo {\n line-height: $footer-btn-size;\n }\n}\n\n.mdl-mini-footer--link-list,\n.mdl-mini-footer__link-list {\n display: flex;\n flex-flow: row nowrap;\n\n list-style: none;\n\n margin: 0;\n padding: 0;\n\n & li {\n margin-bottom: 0;\n margin-right: $padding;\n\n @media screen and (min-width: 760px) {\n line-height: $footer-btn-size;\n }\n }\n\n & a {\n color: inherit;\n text-decoration: none;\n white-space: nowrap;\n }\n}\n\n.mdl-mini-footer--left-section,\n.mdl-mini-footer__left-section {\n display: inline-block;\n order: 0;\n}\n\n.mdl-mini-footer--right-section,\n.mdl-mini-footer__right-section {\n display: inline-block;\n order: 1;\n}\n\n.mdl-mini-footer--social-btn,\n.mdl-mini-footer__social-btn {\n width: $footer-btn-size;\n height: $footer-btn-size;\n\n padding: 0;\n margin: 0;\n\n background-color: $footer-button-fill-color;\n\n border: none;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n\n.mdl-card {\n display: flex;\n flex-direction: column;\n font-size: $card-font-size;\n font-weight: 400;\n min-height: $card-height;\n overflow: hidden;\n width: $card-width;\n z-index: $card-z-index;\n position: relative;\n background: $card-background-color;\n border-radius: 2px;\n box-sizing: border-box;\n}\n\n.mdl-card__media {\n background-color: $card-image-placeholder-color;\n background-repeat: repeat;\n background-position: 50% 50%;\n background-size: cover;\n background-origin: padding-box;\n background-attachment: scroll;\n box-sizing: border-box;\n}\n\n.mdl-card__title {\n align-items: center;\n color: $card-text-color;\n display: block;\n display: flex;\n justify-content: stretch;\n line-height: normal;\n padding: $card-vertical-padding $card-horizontal-padding;\n perspective-origin: $card-title-perspective-origin-x $card-title-perspective-origin-y;\n transform-origin: $card-title-transform-origin-x $card-title-transform-origin-y;\n box-sizing: border-box;\n\n &.mdl-card--border {\n border-bottom: 1px solid $card-border-color;\n }\n}\n\n.mdl-card__title-text {\n align-self: flex-end;\n color: inherit;\n display: block;\n display: flex;\n font-size: $card-title-font-size;\n font-weight: $card-title-text-font-weight;\n line-height: normal;\n overflow: hidden;\n transform-origin: $card-title-text-transform-origin-x $card-title-text-transform-origin-y;\n margin: 0;\n}\n\n.mdl-card__subtitle-text {\n font-size: $card-subtitle-font-size;\n color: $card-subtitle-color;\n margin: 0;\n}\n\n.mdl-card__supporting-text {\n color: $card-supporting-text-text-color;\n font-size: $card-supporting-text-font-size;\n line-height: $card-supporting-text-line-height;\n overflow: hidden;\n padding: $card-vertical-padding $card-horizontal-padding;\n width: 90%;\n\n &.mdl-card--border {\n border-bottom: 1px solid $card-border-color;\n }\n}\n\n.mdl-card__actions {\n font-size: $card-actions-font-size;\n line-height: normal;\n width: 100%;\n background-color: rgba(0,0,0,0);\n padding: 8px;\n box-sizing: border-box;\n\n &.mdl-card--border {\n border-top: 1px solid $card-border-color;\n }\n}\n\n.mdl-card--expand {\n flex-grow: 1;\n}\n\n\n.mdl-card__menu {\n position: absolute;\n right: 16px;\n top: 16px;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n@import \"../mixins\";\n\n// The button component. Defaults to a flat button.\n.mdl-button {\n background: transparent;\n border: none;\n border-radius: $button-border-radius;\n color: $button-secondary-color;\n position: relative;\n height: $button-height;\n margin: 0;\n min-width: $button-min-width;\n padding: 0 $button-padding;\n display: inline-block;\n @include typo-button();\n overflow: hidden;\n will-change: box-shadow;\n transition: box-shadow 0.2s $animation-curve-fast-out-linear-in,\n background-color 0.2s $animation-curve-default,\n color 0.2s $animation-curve-default;\n outline: none;\n cursor: pointer;\n text-decoration: none;\n text-align: center;\n line-height: $button-height;\n vertical-align: middle;\n\n &::-moz-focus-inner {\n border: 0;\n }\n\n &:hover {\n background-color: $button-hover-color;\n }\n\n &:focus:not(:active) {\n background-color: $button-focus-color;\n }\n\n &:active {\n background-color: $button-active-color;\n }\n\n &.mdl-button--colored {\n color: $button-primary-color-alt;\n\n &:focus:not(:active) {\n background-color: $button-focus-color-alt;\n }\n }\n}\n\ninput.mdl-button[type=\"submit\"] {\n -webkit-appearance:none;\n}\n\n // Raised buttons\n .mdl-button--raised {\n background: $button-primary-color;\n @include shadow-2dp();\n\n &:active {\n @include shadow-4dp();\n background-color: $button-active-color;\n }\n\n &:focus:not(:active) {\n @include focus-shadow();\n background-color: $button-active-color;\n }\n\n &.mdl-button--colored {\n background: $button-primary-color-alt;\n color: $button-secondary-color-alt;\n\n &:hover {\n background-color: $button-hover-color-alt;\n }\n\n &:active {\n background-color: $button-active-color-alt;\n }\n\n &:focus:not(:active) {\n background-color: $button-active-color-alt;\n }\n\n & .mdl-ripple {\n background: $button-ripple-color-alt;\n }\n }\n }\n\n\n // FABs\n .mdl-button--fab {\n border-radius: 50%;\n font-size: $button-fab-font-size;\n height: $button-fab-size;\n margin: auto;\n min-width: $button-fab-size;\n width: $button-fab-size;\n padding: 0;\n overflow: hidden;\n background: $button-primary-color;\n box-shadow: 0 1px 1.5px 0 rgba(0,0,0,0.12), 0 1px 1px 0 rgba(0,0,0,0.24);\n position: relative;\n line-height: normal;\n\n & .material-icons {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(- $button-fab-font-size / 2, - $button-fab-font-size / 2);\n line-height: $button-fab-font-size;\n width: $button-fab-font-size;\n }\n\n &.mdl-button--mini-fab {\n height: $button-fab-size-mini;\n min-width: $button-fab-size-mini;\n width: $button-fab-size-mini;\n }\n\n & .mdl-button__ripple-container {\n border-radius: 50%;\n // Fixes clipping bug in Safari.\n -webkit-mask-image: -webkit-radial-gradient(circle, white, black);\n }\n\n &:active {\n @include shadow-4dp();\n background-color: $button-active-color;\n }\n\n &:focus:not(:active) {\n @include focus-shadow();\n background-color: $button-active-color;\n }\n\n &.mdl-button--colored {\n background: $button-fab-color-alt;\n color: $button-fab-text-color-alt;\n\n &:hover {\n background-color: $button-fab-hover-color-alt;\n }\n\n &:focus:not(:active) {\n background-color: $button-fab-active-color-alt;\n }\n\n &:active {\n background-color: $button-fab-active-color-alt;\n }\n\n & .mdl-ripple {\n background: $button-fab-ripple-color-alt;\n }\n }\n }\n\n\n // Icon buttons\n .mdl-button--icon {\n border-radius: 50%;\n font-size: $button-fab-font-size;\n height: $button-icon-size;\n margin-left: 0;\n margin-right: 0;\n min-width: $button-icon-size;\n width: $button-icon-size;\n padding: 0;\n overflow: hidden;\n color: inherit;\n line-height: normal;\n\n & .material-icons {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(- $button-fab-font-size / 2, - $button-fab-font-size / 2);\n line-height: $button-fab-font-size;\n width: $button-fab-font-size;\n }\n\n &.mdl-button--mini-icon {\n height: $button-icon-size-mini;\n min-width: $button-icon-size-mini;\n width: $button-icon-size-mini;\n\n & .material-icons {\n top: ($button-icon-size-mini - $button-fab-font-size) / 2;\n left: ($button-icon-size-mini - $button-fab-font-size) / 2;\n }\n }\n\n & .mdl-button__ripple-container {\n border-radius: 50%;\n // Fixes clipping bug in Safari.\n -webkit-mask-image: -webkit-radial-gradient(circle, white, black);\n }\n }\n\n\n // Ripples\n .mdl-button__ripple-container {\n display: block;\n height: 100%;\n left: 0px;\n position: absolute;\n top: 0px;\n width: 100%;\n z-index: 0;\n overflow: hidden;\n\n .mdl-button[disabled] & .mdl-ripple,\n .mdl-button.mdl-button--disabled & .mdl-ripple {\n background-color: transparent;\n }\n }\n\n// Colorized buttons\n\n.mdl-button--primary.mdl-button--primary {\n color: $button-primary-color-alt;\n & .mdl-ripple {\n background: $button-secondary-color-alt;\n }\n &.mdl-button--raised, &.mdl-button--fab {\n color: $button-secondary-color-alt;\n background-color: $button-primary-color-alt;\n }\n}\n\n.mdl-button--accent.mdl-button--accent {\n color: $button-fab-color-alt;\n & .mdl-ripple {\n background: $button-fab-text-color-alt;\n }\n &.mdl-button--raised, &.mdl-button--fab {\n color: $button-fab-text-color-alt;\n background-color: $button-fab-color-alt;\n }\n}\n\n// Disabled buttons\n\n.mdl-button {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n color: $button-secondary-color-disabled;\n cursor: default;\n background-color: transparent;\n }\n\n &--fab {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n background-color: $button-primary-color-disabled;\n color: $button-secondary-color-disabled;\n }\n }\n\n &--raised {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n background-color: $button-primary-color-disabled;\n color: $button-secondary-color-disabled;\n box-shadow: none;\n }\n }\n &--colored {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n color: $button-secondary-color-disabled;\n }\n }\n}\n\n// Align icons inside buttons with text\n.mdl-button .material-icons {\n vertical-align: middle;\n}\n","// SIMPLE GRID - SASS/SCSS\n\n\n// fonts\n$font-weight-light: 300;\n$font-weight-regular: 400;\n$font-weight-heavy: 700;\n\n// colors\n$dark-grey: #333447;\n$dark-gray: #333447; // for the Americans\n\n\n.font-light {\n font-weight: $font-weight-light;\n}\n\n.font-regular {\n font-weight: $font-weight-regular;\n}\n\n.font-heavy {\n font-weight: $font-weight-heavy;\n}\n\n// utility\n\n.left {\n text-align: left;\n}\n\n.right {\n text-align: right;\n}\n\n.center {\n text-align: center;\n margin-left: auto;\n margin-right: auto;\n}\n\n.justify {\n text-align: justify;\n}\n\n.hidden-sm {\n display: none;\n}\n\n// grid\n\n$width: 98%;\n$gutter: 2%;\n$breakpoint-small: 33.75em; // 540px\n$breakpoint-med: 45em; // 720px\n$breakpoint-large: 60em; // 960px\n\n.container {\n width: 100%;\n margin-left: auto;\n margin-right: auto;\n}\n\n.row {\n position: relative;\n width: 100%;\n}\n\n.row [class^=\"col\"] {\n float: left;\n margin: 0.5rem 1%;\n min-height: 0.125rem;\n}\n\n.row::after {\n content: \"\";\n display: table;\n clear: both;\n}\n\n.col-1,\n.col-2,\n.col-3,\n.col-4,\n.col-5,\n.col-6,\n.col-7,\n.col-8,\n.col-9,\n.col-10,\n.col-11,\n.col-12 {\n width: $width;\n}\n\n.col-1-sm {\n width: ($width / 12) - ($gutter * 11 / 12);\n}\n\n.col-2-sm {\n width: ($width / 6) - ($gutter * 10 / 12);\n}\n\n.col-3-sm {\n width: ($width / 4) - ($gutter * 9 / 12);\n}\n\n.col-4-sm {\n width: ($width / 3) - ($gutter * 8 / 12);\n}\n\n.col-5-sm {\n width: ($width / (12 / 5)) - ($gutter * 7 / 12);\n}\n\n.col-6-sm {\n width: ($width / 2) - ($gutter * 6 / 12);\n}\n\n.col-7-sm {\n width: ($width / (12 / 7)) - ($gutter * 5 / 12);\n}\n\n.col-8-sm {\n width: ($width / (12 / 8)) - ($gutter * 4 / 12);\n}\n\n.col-9-sm {\n width: ($width / (12 / 9)) - ($gutter * 3 / 12);\n}\n\n.col-10-sm {\n width: ($width / (12 / 10)) - ($gutter * 2 / 12);\n}\n\n.col-11-sm {\n width: ($width / (12 / 11)) - ($gutter * 1 / 12);\n}\n\n.col-12-sm {\n width: $width;\n}\n\n@media only screen and (min-width: $breakpoint-med) {\n .col-1 {\n width: ($width / 12) - ($gutter * 11 / 12);\n }\n .col-2 {\n width: ($width / 6) - ($gutter * 10 / 12);\n }\n .col-3 {\n width: ($width / 4) - ($gutter * 9 / 12);\n }\n .col-4 {\n width: ($width / 3) - ($gutter * 8 / 12);\n }\n .col-5 {\n width: ($width / (12 / 5)) - ($gutter * 7 / 12);\n }\n .col-6 {\n width: ($width / 2) - ($gutter * 6 / 12);\n }\n .col-7 {\n width: ($width / (12 / 7)) - ($gutter * 5 / 12);\n }\n .col-8 {\n width: ($width / (12 / 8)) - ($gutter * 4 / 12);\n }\n .col-9 {\n width: ($width / (12 / 9)) - ($gutter * 3 / 12);\n }\n .col-10 {\n width: ($width / (12 / 10)) - ($gutter * 2 / 12);\n }\n .col-11 {\n width: ($width / (12 / 11)) - ($gutter * 1 / 12);\n }\n .col-12 {\n width: $width;\n }\n\n .hidden-sm {\n display: block;\n }\n}\n\n.row {\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n flex-wrap: wrap;\n}\n\n.row > [class*='col-'] {\n display: flex;\n flex-direction: column;\n}\n","\n/*\nMaterial Icons\n*/\n\n.material-icons {\n font-family: 'Material Icons';\n font-weight: normal;\n font-style: normal;\n font-size: 24px; /* Preferred icon size */\n display: inline-block;\n line-height: 1;\n text-transform: none;\n letter-spacing: normal;\n word-wrap: normal;\n white-space: nowrap;\n direction: ltr;\n \n /* Support for all WebKit browsers. */\n -webkit-font-smoothing: antialiased;\n /* Support for Safari and Chrome. */\n text-rendering: optimizeLegibility;\n \n /* Support for Firefox. */\n -moz-osx-font-smoothing: grayscale;\n \n /* Support for IE. */\n font-feature-settings: 'liga';\n }","html {\n font-size: $font_size;\n}\n\nbody {\n display: block !important;\n background-color: $background_color;\n font-size: 1rem;\n line-height: 1.5rem;\n font-family: $body_font_family;\n}\n\n.mdl-layout__content:focus {\n outline: none;\n }\n\n.mdl-layout__content header.mdl-layout__drawer {\n display: none;\n}\n\n.mdl-layout--fixed-drawer>.mdl-layout__content {\n margin-left: 300px; \n}\n\n@media screen and (max-width: 1024px) {\n .mdl-layout--fixed-drawer>.mdl-layout__content {\n margin-left:0\n }\n}\n\nh1, h2, h3, h4, h5, h6, blockquote, span.mdl-layout-title,\na.download > code.download {\n font-family: $body_font_family;\n}\n\nh1, h2, h3, h4, h5, h6, .toc-backref, .contents, .toctree-wrapper, .contents a, .toctree-wrapper a, .globaltoc a.current {\n color: $color-mxnet !important;\n}\n\na {\n text-decoration: none;\n}\n\n.page-content {\n font-size: 1rem;\n p, ul, ol, dl, dd, dt, table, th, td {\n font-size: 1rem;\n }\n}\n\n.brand {\n color: inherit;\n text-decoration: none;\n}\n\n.section {\n overflow-x: auto;\n}\n\n\n/*\n * Figure Directive Styles\n */\n img {\n max-width: 100%;\n display: block;\n margin-left: auto;\n margin-right: auto;\n }\n\ndiv.figure {\n p.caption {\n text-align: center;\n margin-top: .75rem;\n\n span.caption-number {\n font-style: normal;\n }\n .caption-number::after {\n content: \"\\00a0\";\n }\n }\n}\n\n.svg-icon {\n width: 16px;\n height: 16px;\n display: inline-block;\n fill: $grey-color-light;\n padding-right: 5px;\n padding-top: 4px;\n vertical-align: text-top;\n}\n\n/*\n * Download Link Styles\n */\na.download > i.material-icons {\n position: relative;\n top: 5px;\n}\n\na.download {\n text-decoration: none;\n}\n\n%clearfix:after {\n content: \"\";\n display: table;\n clear: both;\n}\n\n.wrapper {\n max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit} * 2));\n max-width: calc(#{$content-width} - (#{$spacing-unit} * 2));\n margin-right: auto;\n margin-left: auto;\n padding-right: calc(#{$spacing-unit}+15px);\n padding-left: $spacing-unit;\n @extend %clearfix;\n\n @media screen and (max-width: $on-laptop) {\n max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit}));\n max-width: calc(#{$content-width} - (#{$spacing-unit}));\n padding-right: $spacing-unit / 2;\n padding-left: $spacing-unit / 2;\n }\n}\n\n","/*\nVariables\n*/\n$font_size: 16px;\n\n$background_color: #fafafa;\n$code_background: rgba(0,0,0,.05);\n\n$code_font_family: \"Menlo\", \"DejaVu Sans Mono\", \"Liberation Mono\", \"Consolas\", \"Ubuntu Mono\", \"Courier New\", \"andale mono\", \"lucida console\", monospace !default;\n$body_font_family: -apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\" !default;\n$base-font-size: 17px !default;\n\n$xl-breakpoint: 1795px;\n$lg-breakpoint: 1200px;\n$md-breakpoint: 992px;\n$sm-breakpoint: 768px;\n$xs-breakpoint: 576px;\n\n$color-primary: $palette-blue-500;\n$color-primary-dark: $palette-blue-700 !default;\n$color-accent: $palette-deep-orange-A200 !default;\n$color-primary-contrast: $color-white !default;\n$color-accent-contrast: $color-white !default;\n\n\n$base-line-height: 1.5 !default;\n$spacing-unit: 30px !default;\n\n$color-mxnet: rgb(4,140,204);\n$color-mxnet-dark: rgb(4,60,110);\n$grey-color: #828282 !default;\n$grey-color-light: lighten($grey-color, 45%) !default;\n$grey-color-dark: darken($grey-color, 25%) !default;\n\n$table-text-align: left !default;\n\n// Width of the content area\n$content-width: 1150px !default;\n\n$on-palm: 600px !default;\n$on-palm: 900px !default;\n$on-laptop: 1024px !default;","/**\n * Layout Styles\n */\n $layout: (\n document: (\n xl: (\n width: 100%,\n )\n ),\n drawer-container: (\n width: $layout-drawer-width,\n ),\n side-doc-outline: (\n width: 230px,\n ),\n page-content: (\n md: (\n width: 90%,\n padding: 0 5%\n ),\n lg: (\n width: calc( 90% - 230px ),\n padding: 0 5%\n )\n )\n);\n\n.mdl-layout {\n margin-top: 76px;\n}\n\n\n.document {\n width: 100%;\n margin: 0 auto;\n display: flex;\n\n @media (min-width: $xl-breakpoint) {\n width: map-get(map-get(map-get($layout, document), xl), width);\n }\n .page-content {\n width: 100%;\n margin: 0 auto;\n padding: 0 12px;\n\n @media (min-width: $md-breakpoint) {\n width: map-get(map-get(map-get($layout, page-content), md), width);\n padding: map-get(map-get(map-get($layout, page-content), md), padding);\n }\n\n @media (min-width: $lg-breakpoint) {\n width: map-get(map-get(map-get($layout, page-content), lg), width);\n padding: map-get(map-get(map-get($layout, page-content), lg), padding);\n }\n }\n\n .side-doc-outline {\n width: map-get(map-get($layout, side-doc-outline), width);\n\n @media (max-width: $lg-breakpoint - 1) {\n display: none;\n } \n &--content {\n position: fixed;\n overflow-x: auto;\n overflow-y: auto;\n width: inherit;\n right: 0px;\n &::-webkit-scrollbar {\n width: 6px;\n }\n \n &::-webkit-scrollbar-track {\n border-radius: 6px;\n }\n \n &::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, .3);\n border-radius: 6px;\n box-shadow:0 0 0 1px rgba(255, 255, 255, .3);\n }\n }\n }\n\n}","@keyframes float-in {\n 0% {\n transform: translateY(0.5rem);\n opacity: 0;\n }\n\t100% {\n\t\ttransform: translateY(0);\n\t\topacity: 1;\n\t}\n}\n\n@keyframes float-out {\n 0% {\n transform: translateY(0);\n opacity: 1;\n }\n\t100% {\n\t\ttransform: translateY(0.5rem);\n\t\topacity: 0;\n\t}\n}\n\n.page-content {\n .headerlink {\n display: inline-block;\n text-decoration: none;\n margin-left: 0.8rem;\n color: inherit;\n opacity: 0;\n &:hover {\n animation: float-in 0.2s $animation-curve-fast-out-slow-in 0s forwards;\n }\n }\n\n h1, h2, h3, h4, h5, h6 {\n .toc-backref {\n text-decoration: none;\n }\n &:hover {\n .headerlink {\n animation: float-in 0.2s $animation-curve-fast-out-slow-in 0s forwards;\n }\n }\n }\n\n h1 {\n font-size: 2rem;\n line-height: 2.25rem;\n }\n\n h2 {\n font-size: 1.75rem;\n line-height: 2rem;\n padding-top: 1.5rem;\n margin-top: 0;\n margin-bottom: 1rem;\n }\n\n h3 {\n font-size: 1.5rem;\n line-height: 1.75rem;\n padding-top: 1rem;\n margin-top: 0px;\n margin-bottom: .75rem;\n }\n\n h4 {\n font-size: 1.25rem;\n line-height: 1.5rem;\n padding-top: .75rem;\n margin-top: 0px;\n margin-bottom: .5rem;\n }\n\n div.page-content h5 {\n font-size: 1.1rem;\n line-height: 1.5rem;\n padding-top: 2rem;\n margin-top: 0px;\n margin-bottom: 1rem;\n }\n\n div.page-content h6 {\n font-size: 1rem;\n line-height: 1.5rem;\n padding-top: 2rem;\n margin-top: 0px;\n margin-bottom: 1rem;\n }\n\n\n}\n","\n/*\n * Admonition Styles\n */\n $admonitions: (\n hint: (\n font-color: rgb(0, 188, 212),\n background-color: rgba(0, 188, 212, 0.1),\n icon-content: \"help_outline\"\n ),\n note: (\n font-color: rgb(0, 188, 212),\n background-color: rgba(0, 188, 212, 0.1),\n icon-content: \"info_outline\"\n ),\n seealso: (\n font-color: rgb(0, 188, 212),\n background-color: rgba(0, 188, 212, 0.1),\n icon-content: \"search\"\n ),\n warning: (\n font-color: rgb(255, 193, 7),\n background-color: rgba(255, 193, 7, 0.1),\n icon-content: \"warning\"\n ),\n attention: (\n font-color: rgb(255, 193, 7),\n background-color: rgba(255, 193, 7, 0.1),\n icon-content: \"warning\"\n ),\n tip: (\n font-color: rgb(139, 195, 74),\n background-color: rgba(139, 195, 74, 0.1),\n icon-content: \"lightbulb_outline\"\n ),\n important: (\n font-color: rgb(139, 195, 74),\n background-color: rgba(139, 195, 74, 0.1),\n icon-content: \"check_circle\"\n ),\n error: (\n font-color: rgb(244, 67, 54),\n background-color: rgba(244, 67, 54, 0.1),\n icon-content: \"error_outline\"\n ),\n caution: (\n font-color: rgb(244, 67, 54),\n background-color: rgba(244, 67, 54, 0.1),\n icon-content: \"error_outline\"\n ),\n danger: (\n font-color: rgb(244, 67, 54),\n background-color: rgba(244, 67, 54, 0.1),\n icon-content: \"error_outline\"\n )\n);\n\n @mixin admonition-style($type) {\n border-left: solid 4px map-get(map-get($admonitions, $type), font-color);\n background-color: map-get(map-get($admonitions, $type), background-color);\n .admonition-title {\n font-size: 16px;\n font-weight: bold;\n color: map-get(map-get($admonitions, $type), font-color);\n\n margin-top: 4px;\n margin-bottom: 8px;\n &::before {\n @extend .material-icons;\n position: relative;\n margin-right: 5px;\n top: 3px;\n content: map-get(map-get($admonitions, $type), icon-content);\n font-size: 18px;\n }\n }\n}\n\n.admonition {\n @extend .mdl-shadow--2dp;\n\n padding: 12px 20px;\n margin-top: 10px;\n margin-bottom: 10px;\n p.last {\n margin: 16px;\n }\n .admonition-title {\n font-size: 16px;\n font-weight: bold;\n color: #555;\n text-transform: uppercase;\n margin-top: 7px;\n }\n\n @each $type in (note, seealso, hint, warning, attention, tip, important, error, caution, danger) {\n &.#{$type} {\n @include admonition-style($type);\n }\n }\n}\n",".page-content {\n .highlight {\n margin: 1px 0;\n pre {\n background: $code_background;\n color: rgba(0,0,0,.87);\n font-family: $code_font_family;\n padding: 0.75rem;\n overflow: auto;\n overflow-y: hidden;\n .o, .nd {\n color: rgba(0,0,0,.87);\n }\n }\n }\n\n div.highlight-console div.highlight {\n background: none;\n }\n\n // for jupyter notebook output cell\n .output {\n .highlight {\n pre {\n color: rgba(0,0,0,.87);\n background: $background_color;\n border-width: 1px;\n border-color: #999;\n border-style: solid;\n padding: 0.75rem;\n }\n }\n }\n\n .code, code:not(.download) {\n margin: 0 0;\n font-family: $code_font_family;\n border-radius: 2px;\n span.pre {\n font-family: $code_font_family;\n }\n }\n\n .viewcode-link {\n padding-left: 2em;\n font-size: 80%;\n }\n\n .rubric, .method > dt, .function > dt, .class > dt {\n display: table;\n margin: 10px 0;\n font-size: 100%;\n line-height: normal;\n background: #e7f2fa;\n color: #2B98F0;\n border-top: solid 3px #55ADF3;\n padding: 10px;\n position: relative;\n .descname, .descclassname {\n color: rgba(0,0,0,.87);\n background: #e7f2fa;\n padding: 3px;\n }\n em {\n padding: 0 2px;\n }\n }\n\n\n .rubric {\n margin: 30px 0 10px 0;\n }\n\n\n .field-body {\n padding-left: 40px;\n ul {\n padding: 0 0 0 16px;\n margin: 0;\n }\n }\n\n // .docutils > dt {\n // padding: 6px;\n // display: table;\n // margin-bottom: 6px;\n // border: none;\n // border-left: solid 3px #ccc;\n // background: #f0f0f0;\n // color: #555;\n // }\n\n .seealso .docutils > dt {\n float: left;\n clear: left;\n padding: 0 6px;\n }\n\n .seealso .docutils > dd {\n padding-left: 6em;\n }\n .nblast {\n padding-bottom: 1em;\n }\n\n pre {\n font-size: 90%;\n background: #eee;\n color: #455A64;\n padding: 16px 32px;\n width: auto;\n border-radius: 4px;\n word-wrap: break-word;\n\n &:hover {\n @extend .mdl-shadow--2dp;\n\n &:before {\n font-family: $body_font_family;\n padding: 0 0.5rem;\n content: attr(click-to-copy);\n color: rgba(0, 0, 0, 0.5);\n border-radius: 4px;\n position: relative;\n float: right;\n top: -0.5rem;\n right: -0.5rem;\n background: rgb(200, 200, 200);\n font-size: 0.8rem;\n cursor: pointer;\n }\n }\n }\n}\n","/*\n * Quotation Block Styles\n */\n .page-content {\n blockquote {\n font-size: 1rem;\n padding: 0 1rem;\n border-left: 3px solid $code_background;\n\n &:after {\n content: \"\" !important;\n margin-left: 0;\n }\n &:before {\n content: \"\" !important;\n }\n }\n }\n",".page-content {\n table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) {\n @extend .mdl-data-table;\n @extend .mdl-shadow--2dp;\n\n margin: 1.5rem 0;\n table-layout: fixed;\n max-width: 100%;\n min-width: 70%;\n\n th, td {\n @extend .mdl-data-table__cell--non-numeric;\n white-space: normal;\n overflow-wrap: break-word;\n }\n\n caption {\n font-size: $font_size;\n margin: 1rem 0 0.8rem 0;\n white-space: normal;\n .caption-number {\n font-style: normal;\n }\n .caption-number::after {\n content: \"\\00a0\";\n }\n }\n\n }\n}\n",".globaltoc {\n \n .caption, .toc {\n display: none;\n }\n\n ul {\n\n list-style-type: none;\n padding: 0;\n margin: 0;\n\n li {\n min-height: 18px;\n .link-wrapper {\n display: flex;\n justify-content: space-between;\n > a {\n padding: 4px 0;\n display: block;\n width: 100%;\n font-size: 1rem;\n text-decoration: none;\n color: $layout-drawer-navigation-color;\n &.current {\n font-weight: bold;\n }\n }\n }\n }\n }\n\n .nav-toggle {\n padding: 0;\n float: right;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 36px;\n > a {\n padding: 0;\n margin-left: 0;\n margin-right: 4px;\n cursor: pointer;\n > i {\n font-size: 18px;\n }\n }\n &.show {\n transform: rotateZ(180deg);\n > a {\n margin-right: 0;\n margin-left: 4px;\n }\n }\n }\n\n nav {\n > ul > li > span.link-wrapper {\n padding-left: 8px;\n }\n > ul > li > ul > li > span.link-wrapper {\n padding-left: 16px;\n }\n > ul > li > ul > li > ul > li > span.link-wrapper {\n padding-left: 24px;\n }\n > ul > li > ul > li > ul > li > ul> li > span.link-wrapper {\n padding-left: 32px;\n }\n > ul > li > ul > li > ul > li > ul > li > ul> li > span.link-wrapper {\n padding-left: 40px;\n }\n > ul > li > ul > li > ul > li > ul > li > ul > li > ul> li > span.link-wrapper {\n padding-left: 48px;\n }\n }\n}\n",".localtoc {\n font-size: 0.75rem;\n padding-top: 1rem;\n\n .caption {\n padding-left: 12px;\n &-text {\n font-size: 0.9rem;\n font-weight: 700;\n }\n }\n\n > ul > li > a {\n display: none;\n }\n\n ul {\n padding: 0;\n list-style-type: none;\n }\n\n li {\n padding-left: 6px;\n }\n\n a {\n display: block;\n text-decoration: none;\n color: inherit;\n margin-top: 8px;\n padding-left: 8px;\n line-height: 1.1rem;\n \n &.current {\n padding-left: 5px;\n border-left: 3px solid;\n font-weight: bold;\n }\n }\n}","/*\r\n * Toctree and Contents Directive Styles\r\n */\r\n .toctree-wrapper,\r\n .contents.topic {\r\n border-left: 5px solid;\r\n }\r\n\r\n .toctree-wrapper > p.caption,\r\n .contents.topic > p.topic-title {\r\n color: rgb(117, 117, 117);\r\n font-size: 1rem;\r\n padding-left: 14px;\r\n }\r\n\r\n .toctree-wrapper ul,\r\n .contents.topic ul{\r\n padding-left: 14px;\r\n list-style: none;\r\n line-height: 30px;\r\n }\r\n\r\n .toctree-wrapper a,\r\n .contents.topic a {\r\n font-size: 1.2rem;\r\n text-decoration: none;\r\n .pre {\r\n font-size: 1rem;\r\n }\r\n }\r\n\r\n .toctree-wrapper > ul > li > a,\r\n .contents.topic > ul > li > a {\r\n font-size: 1.3rem;\r\n .pre {\r\n font-size: 1.1rem;\r\n }\r\n }\r\n",".page-content {\n ul {\n li {\n margin: .3rem 0;\n p {\n margin: 0;\n }\n }\n }\n .option-list {\n .option {\n font-family: $code_font_family;\n }\n td {\n padding: 0.5rem;\n border: none;\n }\n }\n}\n","/*\r\n * Drawer Styles\r\n */\r\n.mdl-layout {\r\n &__drawer {\r\n background-color: #fff;\r\n\r\n &::-webkit-scrollbar {\r\n width: 6px;\r\n }\r\n\r\n &::-webkit-scrollbar-track {\r\n border-radius: 6px;\r\n }\r\n\r\n &::-webkit-scrollbar-thumb {\r\n background-color: rgba(0, 0, 0, .3);\r\n border-radius: 6px;\r\n box-shadow:0 0 0 1px rgba(255, 255, 255, .3);\r\n }\r\n\r\n > .mdl-layout-title {\r\n font-weight: bold;\r\n text-align: right;\r\n margin: 0;\r\n padding: 0;\r\n line-height: 32px;\r\n border-bottom: 1px solid rgba(0,0,0,.1);\r\n min-height: 64px;\r\n .title {\r\n color: inherit;\r\n display: block;\r\n height: 100%;\r\n width: 100%;\r\n text-decoration: none;\r\n > img.logo {\r\n width: 100%;\r\n margin: 0;\r\n padding: 0;\r\n }\r\n\r\n &-text {\r\n font-weight: bold;\r\n text-align: right;\r\n padding: 0 10px;\r\n margin: 16px 0 8px 0;\r\n line-height: 32px;\r\n font-family: $body_font_family;\r\n color: inherit;\r\n display: block;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","/*\r\n * Header Styles\r\n */\r\n\r\nnav.breadcrumb {\r\n > a.mdl-navigation__link {\r\n padding: 0 8px;\r\n font-size: 18px;\r\n }\r\n @media (max-width: $lg-breakpoint - 1) {\r\n width: calc( 100% - 64px );\r\n a.mdl-navigation__link.is-active {\r\n overflow-x: hidden;\r\n width: 100%;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n }\r\n a.mdl-navigation__link:not(.is-active),\r\n i.material-icons {\r\n display: none;\r\n }\r\n }\r\n}\r\n\r\ndiv.mdl-layout__header {\r\n margin-top: 77px;\r\n}\r\n\r\n.mdl-layout__drawer-button {\r\n top: 13px !important;\r\n}\r\n\r\ndiv.mdl-layout__header-row.header-links {\r\n background: rgba(255,255,255,0.2);\r\n width: 100%;\r\n overflow-x: auto;\r\n overflow-y: hidden;\r\n\r\n a.mdl-navigation__link {\r\n font-size: 1rem;\r\n i {\r\n font-size: 1.2rem;\r\n margin: 0 8px;\r\n position: relative;\r\n bottom: -0.1rem;\r\n }\r\n };\r\n\r\n a.mdl-navigation__link:hover {\r\n background-color: unquote(\"rgb(#{$color-primary})\");\r\n color: #eeeeee;\r\n };\r\n a.mdl-navigation__link[href=\"#\"] {\r\n background-color: unquote(\"rgb(#{$color-primary})\");\r\n opacity: 1;\r\n color: #ffffff;\r\n };\r\n}\r\n\r\n/* mxnet-header */\r\n\r\n\r\n.site-title {\r\n font-weight: 300 !important;\r\n line-height: 57px;\r\n letter-spacing: -1px;\r\n margin-bottom: 0;\r\n float: left;\r\n color: white;\r\n\r\n &,\r\n &:visited {\r\n color: $grey-color-dark;\r\n }\r\n}\r\n\r\n\r\n.site-header {\r\n position: fixed;\r\n top: 0;\r\n width: 100%;\r\n min-height: 55px;\r\n padding-top: 10px;\r\n padding-bottom: 10px;\r\n background-color: $color-mxnet;\r\n z-index: 10;\r\n font-weight: 300;\r\n font-size: 17px;\r\n border-bottom: 1px solid white;\r\n}\r\n\r\n.site-header-logo {\r\n width: 120px;\r\n display: initial;\r\n}\r\n\r\n.site-nav {\r\n float: right;\r\n line-height: 57px;\r\n\r\n .nav-trigger {\r\n display: none;\r\n }\r\n\r\n .menu-icon {\r\n display: none;\r\n }\r\n\r\n .page-link {\r\n color: white;\r\n line-height: 1.5;\r\n font-weight: 300;\r\n // Gaps between nav items, but not on the last one\r\n &:not(:last-child) {\r\n margin-right: 40px;\r\n }\r\n\r\n &:hover {\r\n color: white;\r\n text-shadow: -0.06ex 0 white, 0.06ex 0 white;\r\n }\r\n }\r\n\r\n .page-link.page-current {\r\n color: white;\r\n text-decoration: underline;\r\n }\r\n\r\n @media screen and (max-width: $on-laptop) {\r\n position: absolute;\r\n top: 9px;\r\n right: 15px;\r\n background-color: rgb(23,141,201);\r\n border-radius: 2px;\r\n text-align: right;\r\n\r\n label[for=\"nav-trigger\"] {\r\n display: block;\r\n float: right;\r\n width: 36px;\r\n height: 36px;\r\n z-index: 2;\r\n cursor: pointer;\r\n }\r\n\r\n .menu-icon {\r\n display: block;\r\n float: right;\r\n width: 36px;\r\n height: 26px;\r\n line-height: 0;\r\n padding-top: 20px;\r\n text-align: center;\r\n\r\n > svg {\r\n fill: white;\r\n }\r\n }\r\n\r\n input ~ .trigger {\r\n clear: both;\r\n display: none;\r\n }\r\n\r\n input:checked ~ .trigger {\r\n display: block;\r\n padding-bottom: 5px;\r\n }\r\n\r\n .page-link {\r\n padding: 5px 10px;\r\n display: block;\r\n\r\n &:not(:last-child) {\r\n margin-right: 0;\r\n }\r\n\r\n margin-left: 20px;\r\n }\r\n }\r\n}","/*\r\n * Footer Styles\r\n */\r\nfooter.mdl-mini-footer {\r\n background-color: #212121;\r\n > div.mdl-mini-footer__left-section {\r\n margin-bottom: 20px;\r\n display: flex;\r\n flex-direction: column;\r\n .mdl-logo {\r\n font-size: 1.1rem;\r\n }\r\n ul {\r\n @extend .mdl-mini-footer__link-list;\r\n }\r\n }\r\n > div.mdl-mini-footer__right-section {\r\n font-size: 0.9rem;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: flex-end;\r\n\r\n a {\r\n color: inherit;\r\n font-weight: bold;\r\n text-decoration: none;\r\n }\r\n }\r\n p.caption {\r\n display: none;\r\n }\r\n}\r\n\r\n/*\r\n * Pagenation Block Styles\r\n */\r\n .pagenation {\r\n width: 100%;\r\n margin-top: 80px;\r\n height: 92px;\r\n background-color: #424242;\r\n display: flex;\r\n\r\n .button-common {\r\n text-transform: none;\r\n padding: 0;\r\n height: 92px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n color: #ffffff;\r\n }\r\n #button-prev {\r\n @extend .button-common;\r\n margin-right: auto;\r\n .pagenation-text {\r\n text-align: left;\r\n }\r\n \r\n }\r\n #button-next {\r\n @extend .button-common;\r\n margin-left: auto;\r\n flex-direction: row-reverse;\r\n .pagenation-text {\r\n text-align: right;\r\n }\r\n }\r\n\r\n &-arrow {\r\n &-L {\r\n margin-right: 20px;\r\n }\r\n &-R {\r\n margin-left: 20px;\r\n }\r\n }\r\n\r\n &-text {\r\n line-height: 30px;\r\n font-size: 20px;\r\n }\r\n\r\n &-direction {\r\n opacity: 0.7;\r\n font-size: 18px;\r\n }\r\n @media screen and (max-width: 1024px) {\r\n #button-prev {\r\n width: 20%;\r\n }\r\n \r\n #button-next {\r\n width: 80%;\r\n }\r\n \r\n #button-prev .pagenation-text {\r\n display: none;\r\n }\r\n }\r\n @media screen and (min-width: 1025px) {\r\n #button-prev,\r\n #button-next {\r\n width: 50%;\r\n }\r\n \r\n #button-prev .pagenation-text {\r\n display: block;\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n/**\r\n * Site footer\r\n */\r\n.site-footer {\r\n border-top: 1px solid $grey-color-light;\r\n padding: $spacing-unit 0;\r\n background-color: #424242;\r\n position: relative;\r\n z-index: 10;\r\n .footer-category-title {\r\n color: $color-mxnet;\r\n }\r\n a {\r\n color: $grey-color-light !important;\r\n\r\n &:visited {\r\n color: $grey-color-light !important;\r\n }\r\n }\r\n\r\n}\r\n\r\n.site-footer2 {\r\n background-color: #424242;\r\n padding-top: 40px;\r\n padding-bottom: 10px;\r\n position: relative;\r\n z-index: 10;\r\n}\r\n\r\n.footer-heading {\r\n margin-bottom: $spacing-unit / 2;\r\n}\r\n\r\n.contact-list,\r\n.social-media-list {\r\n list-style: none;\r\n margin-left: 0;\r\n}\r\n\r\n\r\n.footer-bottom-warning {\r\n font-size: 80%;\r\n color: white;\r\n float: left;\r\n}\r\n\r\n.footer-logo {\r\n width: 200px;\r\n margin-bottom: 30px;\r\n margin-top: 30px;\r\n}\r\n\r\n.footer-col {\r\n float: left;\r\n margin-bottom: $spacing-unit / 2;\r\n padding-left: $spacing-unit / 2;\r\n}\r\n\r\n.footer-text {\r\n color: $grey-color-light;\r\n}\r\n\r\n"," /*\r\n * Search Styles\r\n */\r\n#waterfall-exp::-webkit-input-placeholder {\r\n color: #ccc;\r\n}\r\n#waterfall-exp:-ms-input-placeholder {\r\n color: #ccc;\r\n}\r\n#waterfall-exp::-moz-placeholder {\r\n color: #ccc;\r\n}\r\n\r\nul.search span.highlighted {\r\n font-weight: bold;\r\n}\r\n\r\nul.search > li {\r\n margin-bottom: 24px;\r\n}\r\n\r\n#search-results {\r\n ul {\r\n list-style: none;\r\n padding: 0;\r\n li {\r\n > a {\r\n text-decoration: none;\r\n font-size: 1.2rem;\r\n }\r\n }\r\n }\r\n}\r\n","a.download {\n &:before {\n @extend .material-icons;\n content: \"file_download\";\n position: relative;\n top: 5px;\n margin-right: 5px;\n }\n}\n\nbutton.download {\n position: sticky;\n margin-left: 1em;\n}\n",".mdl-card {\n margin: 1em 1.5em 1em 0;\n display: inline-block;\n width: 250px;\n min-height: 140px;\n padding: 18px;\n}\n.mdl-card:hover {\n box-shadow: 0 10px 20px rgba(0,0,0,0.25), 0 6px 6px rgba(0,0,0,0.22);\n color: #000;\n cursor: pointer;\n}\n.mdl-card__title {\n padding: 0 0 1em 0;\n font-size: 18px;\n color: #444;\n}\n\n.mdl-card__supporting-text {\n line-height: 1.5rem;\n padding: 0px;\n width: 100%;\n}\n\n.head-card.mdl-card {\n width: auto;\n display: block;\n max-width: 800px;\n padding: 24px;\n}\n\n.head-card > .mdl-card__title {\n padding-bottom: 0px;\n height: 60px;\n font-weight: 700;\n text-transform: uppercase;\n}\n.head-card > .mdl-card__menu {\n color: #fff;\n}\n.head-card > .mdl-card__actions {\n padding: 0;\n}\n.cards {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n}\n"]} \ No newline at end of file +{"version":3,"sources":["../../node_modules/material-design-lite/src/shadow/_shadow.scss","../../node_modules/material-design-lite/src/_mixins.scss","../../node_modules/material-design-lite/src/data-table/_data-table.scss","../../node_modules/material-design-lite/src/_variables.scss","../../node_modules/material-design-lite/src/footer/_mini_footer.scss","../../node_modules/material-design-lite/src/card/_card.scss","../../node_modules/material-design-lite/src/button/_button.scss","../scss/grid/_simplegrid.scss","../scss/fonts/_material-icons.scss","../scss/_root.scss","../scss/_variables.scss","../scss/layout/_layout.scss","../scss/headerings/_headerings.scss","../scss/admonitions/_admonitions.scss","../scss/code/_code.scss","../scss/blockquote/_blockquote.scss","../scss/tables/_tables.scss","../scss/toc/_globaltoc.scss","../scss/toc/_localtoc.scss","../scss/toc/_toctree.scss","../scss/lists/_lists.scss","../scss/drawer/_drawer.scss","../scss/header/_header.scss","../scss/footer/_footer.scss","../scss/search/_search.scss","../scss/downloadlink/_downloadlink.scss","../scss/card/_card.scss"],"names":[],"mappings":"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","file":"sphinx_materialdesign_theme.css","sourceRoot":"../../src/js","sourcesContent":["/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n@import \"../mixins\";\n\n.mdl-shadow--2dp {\n @include shadow-2dp();\n}\n\n.mdl-shadow--3dp {\n @include shadow-3dp();\n}\n\n.mdl-shadow--4dp {\n @include shadow-4dp();\n}\n\n.mdl-shadow--6dp {\n @include shadow-6dp();\n}\n\n.mdl-shadow--8dp {\n @include shadow-8dp();\n}\n\n.mdl-shadow--16dp {\n @include shadow-16dp();\n}\n\n.mdl-shadow--24dp {\n @include shadow-24dp();\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* Typography */\n\n@mixin typo-preferred-font($usePreferred: true) {\n @if $usePreferred {\n font-family: $preferred_font;\n }\n}\n\n@mixin typo-display-4($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 112px;\n font-weight: 300;\n line-height: 1;\n letter-spacing: -0.04em;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-display-3($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 56px;\n font-weight: 400;\n line-height: 1.35;\n letter-spacing: -0.02em;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-display-2($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 45px;\n font-weight: 400;\n line-height: 48px;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-display-1($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 34px;\n font-weight: 400;\n line-height: 40px;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-headline($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 24px;\n font-weight: 400;\n line-height: 32px;\n -moz-osx-font-smoothing: grayscale;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-title($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 20px;\n font-weight: 500;\n line-height: 1;\n letter-spacing: 0.02em;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-subhead($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 16px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0.04em;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-subhead-2($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 16px;\n font-weight: 400;\n line-height: 28px;\n letter-spacing: 0.04em;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-body-2($colorContrast: false, $usePreferred: false) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n @if $usePreferred {\n font-weight: 500;\n } @else {\n font-weight: bold;\n }\n line-height: 24px;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-body-1($colorContrast: false, $usePreferred: false) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-caption($colorContrast: false, $usePreferred: false) {\n @include typo-preferred-font($usePreferred);\n font-size: 12px;\n font-weight: 400;\n line-height: 1;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-blockquote($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n position: relative;\n font-size: 24px;\n font-weight: 300;\n font-style: italic;\n line-height: 1.35;\n letter-spacing: 0.08em;\n\n &:before {\n position: absolute;\n left: -0.5em;\n content: '“';\n }\n\n &:after {\n content: '”';\n margin-left: -0.05em;\n }\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-menu($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n font-weight: 500;\n line-height: 1;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-button($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n font-weight: 500;\n text-transform: uppercase;\n line-height: 1;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-icon() {\n font-family: 'Material Icons';\n font-weight: normal;\n font-style: normal;\n font-size: 24px;\n line-height: 1;\n letter-spacing: normal;\n text-transform: none;\n display: inline-block;\n word-wrap: normal;\n font-feature-settings: 'liga';\n -webkit-font-feature-settings: 'liga';\n -webkit-font-smoothing: antialiased;\n}\n\n/* Shadows */\n\n// Focus shadow mixin.\n@mixin focus-shadow() {\n box-shadow: 0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);\n}\n\n@mixin shadow-2dp() {\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 3px 1px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),\n 0 1px 5px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);\n}\n@mixin shadow-3dp() {\n box-shadow: 0 3px 4px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 3px 3px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),\n 0 1px 8px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);\n}\n@mixin shadow-4dp() {\n box-shadow: 0 4px 5px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 1px 10px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 2px 4px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n@mixin shadow-6dp() {\n box-shadow: 0 6px 10px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 1px 18px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 3px 5px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n@mixin shadow-8dp() {\n box-shadow: 0 8px 10px 1px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 3px 14px 2px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 5px 5px -3px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n@mixin shadow-16dp() {\n box-shadow: 0 16px 24px 2px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 6px 30px 5px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 8px 10px -5px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n@mixin shadow-24dp() {\n box-shadow: 0 9px 46px 8px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 11px 15px -7px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 24px 38px 3px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n/* Animations */\n\n@mixin material-animation-fast-out-slow-in($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-fast-out-slow-in;\n}\n\n@mixin material-animation-linear-out-slow-in($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-linear-out-slow-in;\n}\n\n@mixin material-animation-fast-out-linear-in($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-fast-out-linear-in;\n}\n\n@mixin material-animation-default($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-default;\n}\n\n/* Dialog */\n\n@mixin dialog-width($units:5) {\n @if(type_of($units) != 'number') {\n @error \"The unit given to dialog-width should be a number.\";\n }\n // 56dp is the base unit width for Dialogs.\n // With 5 units being the number of units for a mobile device.\n // https://goo.gl/sK2O5o\n width: $units * 56px;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n@import \"../mixins\";\n\n.mdl-data-table {\n position: relative;\n border: $data-table-dividers;\n border-collapse: collapse;\n white-space: nowrap;\n font-size: $data-table-font-size;\n background-color: unquote(\"rgb(#{$color-white})\");\n\n thead {\n padding-bottom: 3px;\n\n .mdl-data-table__select {\n margin-top: 0;\n }\n }\n\n tbody {\n tr {\n position: relative;\n height: $data-table-row-height;\n @include material-animation-default(0.28s);\n transition-property: background-color;\n\n &.is-selected {\n background-color: $data-table-selection-color;\n }\n\n &:hover {\n background-color: $data-table-hover-color;\n }\n }\n }\n\n td, th {\n padding: 0 $data-table-column-padding 12px $data-table-column-padding;\n text-align: right;\n\n &:first-of-type {\n padding-left: 24px;\n }\n\n &:last-of-type {\n padding-right: 24px;\n }\n }\n\n td {\n position: relative;\n vertical-align: middle;\n height: $data-table-row-height;\n border-top: $data-table-dividers;\n border-bottom: $data-table-dividers;\n padding-top: $data-table-cell-top;\n box-sizing: border-box;\n\n .mdl-data-table__select {\n vertical-align: middle;\n }\n }\n\n th {\n position: relative;\n vertical-align: bottom;\n text-overflow: ellipsis;\n @include typo-body-2();\n height: $data-table-row-height;\n font-size: $data-table-header-font-size;\n color: $data-table-header-color;\n padding-bottom: 8px;\n box-sizing: border-box;\n\n &.mdl-data-table__header--sorted-ascending,\n &.mdl-data-table__header--sorted-descending {\n color: $data-table-header-sorted-color;\n &:before {\n @include typo-icon;\n font-size: $data-table-header-sort-icon-size;\n content: \"\\e5d8\";\n margin-right: 5px;\n vertical-align: sub;\n }\n &:hover {\n cursor: pointer;\n &:before {\n color: $data-table-header-sorted-icon-hover-color;\n }\n }\n }\n &.mdl-data-table__header--sorted-descending:before {\n content: \"\\e5db\";\n }\n }\n}\n\n.mdl-data-table__select {\n width: 16px;\n}\n\n.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric {\n text-align: left;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n * -----Dialog\n * -----Snackbar\n * -----Tooltip\n * -----Chip\n *\n * Even though all variables have the `!default` directive, most of them\n * should not be changed as they are dependent one another. This can cause\n * visual distortions (like alignment issues) that are hard to track down\n * and fix.\n */\n\n\n/* ========== TYPOGRAPHY ========== */\n\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n$preferred_font: 'Roboto', 'Helvetica', 'Arial', sans-serif !default;\n$performance_font: 'Helvetica', 'Arial', sans-serif !default;\n\n/* ========== COLORS ========== */\n\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n\n@import \"color-definitions\";\n@import \"functions\";\n\n/* ========== IMAGES ========== */\n$image_path: '/images' !default;\n\n/* ========== Color & Themes ========== */\n\n// Define whether individual color palette items should have classes created.\n// Setting this to true will remove individual color classes for each color in the palettes.\n// To improve overall performance (assuming they aren't used) by:\n// * Saving server bandwidth sending the extra classes\n// * Save client computation against the classes\n// it is RECOMMENDED you set this to true.\n$trim-color-classes: false !default;\n\n// Use color primarily for emphasis. Choose colors that fit with\n// your brand and provide good contrast between visual components.\n$color-primary: $palette-indigo-500 !default;\n$color-primary-dark: $palette-indigo-700 !default;\n$color-accent: $palette-pink-A200 !default;\n\n// Our primary is dark, so use $color-dark-contrast for overlaid text.\n$color-primary-contrast: $color-dark-contrast !default;\n// Our accent is dark, so use $color-dark-contrast for overlaid text.\n$color-accent-contrast: $color-dark-contrast !default;\n\n// Replace all colors with placeholders if we're generating a template.\n@if $styleguide-generate-template == true {\n $color-primary: '$color-primary';\n $color-primary-dark: '$color-primary-dark';\n $color-accent: '$color-accent';\n $color-primary-contrast: '$color-primary-contrast';\n $color-accent-contrast: '$color-accent-contrast';\n}\n\n/* ========== Typography ========== */\n\n// We use the following default color styles: text-color-primary and\n// text-color-secondary. For light themes, use text-color-primary-inverse\n// and text-color-secondary-inverse.\n\n$text-color-primary: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$text-link-color: unquote(\"rgb(#{$color-accent})\") !default;\n\n// Define whether to target elements directly for typographic enhancements.\n// Turning this off means you need to use mdl-* classes more often.\n// Other components may also fail to adhere to MD without these rules.\n// It is strongly recommended you leave this as true.\n\n$target-elements-directly: true !default;\n\n/* ========== Components ========== */\n\n/* ========== Standard Buttons ========== */\n\n// Default button colors.\n$button-primary-color: unquote(\"rgba(#{$palette-grey-500}, 0.20)\") !default;\n$button-secondary-color: unquote(\"rgb(#{$color-black})\") !default;\n$button-hover-color: $button-primary-color !default;\n$button-active-color: unquote(\"rgba(#{$palette-grey-500}, 0.40)\") !default;\n$button-focus-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n// Colored button colors.\n$button-primary-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-secondary-color-alt: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n$button-hover-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-active-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-focus-color-alt: $button-focus-color !default;\n\n// Ripple color for colored raised buttons.\n$button-ripple-color-alt: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n\n// Disabled button colors.\n$button-primary-color-disabled: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n$button-secondary-color-disabled: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n// FAB colors and sizes.\n$button-fab-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-hover-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-active-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-text-color-alt: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n$button-fab-ripple-color-alt: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n\n// Icon button colors and sizes.\n$button-icon-color: unquote(\"rgb(#{$palette-grey-700})\") !default;\n$button-icon-focus-color: $button-focus-color !default;\n\n/* ========== Icon Toggles ========== */\n\n$icon-toggle-color: unquote(\"rgb(#{$palette-grey-700})\") !default;\n$icon-toggle-focus-color: $button-focus-color !default;\n$icon-toggle-checked-color: unquote(\"rgb(#{$color-primary})\") !default;\n$icon-toggle-checked-focus-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$icon-toggle-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n/* ========== Radio Buttons ========== */\n\n$radio-color: unquote(\"rgb(#{$color-primary})\") !default;\n$radio-off-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$radio-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n/* ========== Ripple effect ========== */\n\n$ripple-bg-color: unquote(\"rgb(#{$color-light-contrast})\") !default;\n\n/* ========== Layout ========== */\n\n$layout-nav-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n\n// Drawer\n$layout-drawer-bg-color: unquote(\"rgb(#{$palette-grey-50})\") !default;\n$layout-drawer-border-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$layout-text-color: unquote(\"rgb(#{$palette-grey-800})\") !default;\n$layout-drawer-navigation-color: #757575 !default;\n$layout-drawer-navigation-link-active-background: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$layout-drawer-navigation-link-active-color: unquote(\"rgb(#{$color-light-contrast})\") !default;\n\n// Header\n$layout-header-bg-color: unquote(\"rgb(#{$color-primary})\") !default;\n$layout-header-text-color: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n$layout-header-nav-hover-color: unquote(\"rgba(#{$palette-grey-700}, 0.6)\") !default;\n$layout-header-tab-text-color: unquote(\"rgba(#{$color-primary-contrast}, 0.6)\") !default;\n\n// Tabs\n$layout-header-tab-highlight: unquote(\"rgb(#{$color-accent})\") !default;\n\n/* ========== Content Tabs ========== */\n\n$tab-highlight-color: unquote(\"rgb(#{$color-primary})\") !default;\n$tab-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$tab-active-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$tab-border-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n\n/* ========== Checkboxes ========== */\n\n$checkbox-color: unquote(\"rgb(#{$color-primary})\") !default;\n$checkbox-off-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$checkbox-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$checkbox-focus-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$checkbox-image-path: $image_path;\n\n/* ========== Switches ========== */\n\n$switch-color: unquote(\"rgb(#{$color-primary})\") !default;\n$switch-faded-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$switch-thumb-color: $switch-color !default;\n$switch-track-color: unquote(\"rgba(#{$color-primary}, 0.5)\") !default;\n\n$switch-off-thumb-color: unquote(\"rgb(#{$palette-grey-50})\") !default;\n$switch-off-track-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$switch-disabled-thumb-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n$switch-disabled-track-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n/* ========== Spinner ========== */\n\n$spinner-color-1: unquote(\"rgb(#{$palette-blue-400})\") !default;\n$spinner-color-2: unquote(\"rgb(#{$palette-red-500})\") !default;\n$spinner-color-3: unquote(\"rgb(#{$palette-yellow-600})\") !default;\n$spinner-color-4: unquote(\"rgb(#{$palette-green-500})\") !default;\n\n$spinner-single-color: unquote(\"rgb(#{$color-primary})\") !default;\n\n/* ========== Text fields ========== */\n\n$input-text-background-color: transparent !default;\n$input-text-label-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$input-text-bottom-border-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n$input-text-highlight-color: unquote(\"rgb(#{$color-primary})\") !default;\n$input-text-disabled-color: $input-text-bottom-border-color !default;\n$input-text-disabled-text-color: $input-text-label-color !default;\n$input-text-error-color: unquote(\"rgb(#{$palette-red-A700})\") !default;\n\n/* ========== Card ========== */\n\n$card-background-color: unquote(\"rgb(#{$color-white})\") !default;\n$card-text-color: unquote(\"rgb(#{$color-black})\") !default;\n$card-image-placeholder-color: unquote(\"rgb(#{$color-accent})\") !default;\n$card-supporting-text-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$card-border-color: rgba(0,0,0,0.1) !default;\n$card-subtitle-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n\n/* ========== Sliders ========== */\n\n$range-bg-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$range-color: unquote(\"rgb(#{$color-primary})\") !default;\n$range-faded-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$range-bg-focus-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n/* ========== Progress ========== */\n$progress-main-color: unquote(\"rgb(#{$color-primary})\") !default;\n$progress-secondary-color: unquote(\"rgba(#{$color-primary-contrast}, 0.7)\") !default;\n$progress-fallback-buffer-color: unquote(\"rgba(#{$color-primary-contrast}, 0.9)\") !default;\n$progress-image-path: $image_path;\n\n/* ========== List ========== */\n\n$list-main-text-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$list-supporting-text-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$list-icon-color: unquote(\"rgb(#{$palette-grey-600})\") !default;\n$list-avatar-color: white !default;\n\n/* ========== Item ========== */\n\n// Default Item Colors\n$default-item-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$default-item-outline-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n$default-item-hover-bg-color: unquote(\"rgb(#{$palette-grey-200})\") !default;\n$default-item-focus-bg-color: unquote(\"rgb(#{$palette-grey-200})\") !default;\n$default-item-active-bg-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$default-item-divider-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n// Disabled Button Colors\n$disabled-item-text-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n\n/* ========== Dropdown menu ========== */\n\n$default-dropdown-bg-color: unquote(\"rgb(#{$color-white})\") !default;\n\n/* ========== Tooltips ========== */\n\n$tooltip-text-color: unquote(\"rgb(#{$color-white})\") !default;\n$tooltip-background-color: unquote(\"rgba(#{$palette-grey-700}, 0.9)\") !default;\n\n/* ========== Footer ========== */\n\n$footer-bg-color: unquote(\"rgb(#{$palette-grey-800})\") !default;\n$footer-color: unquote(\"rgb(#{$palette-grey-500})\") !default;\n$footer-heading-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$footer-button-fill-color: $footer-color !default;\n$footer-underline-color: $footer-color !default;\n\n\n/* TEXTFIELD */\n\n$input-text-font-size: 16px !default;\n$input-text-width: 100% !default;\n$input-text-padding: 4px !default;\n$input-text-vertical-spacing: 20px !default;\n\n$input-text-button-size: 32px !default;\n$input-text-floating-label-fontsize: 12px !default;\n$input-text-expandable-icon-top: 16px !default;\n\n\n/* SWITCH */\n\n$switch-label-font-size: 16px !default;\n$switch-label-height: 24px !default;\n$switch-track-height: 14px !default;\n$switch-track-length: 36px !default;\n$switch-thumb-size: 20px !default;\n$switch-track-top: ($switch-label-height - $switch-track-height) / 2 !default;\n$switch-thumb-top: ($switch-label-height - $switch-thumb-size) / 2 !default;\n$switch-ripple-size: $switch-label-height * 2 !default;\n$switch-helper-size: 8px !default;\n\n/* SPINNER */\n\n$spinner-size: 28px !default;\n$spinner-stroke-width: 3px !default;\n\n// Amount of circle the arc takes up.\n$spinner-arc-size: 270deg !default;\n// Time it takes to expand and contract arc.\n$spinner-arc-time: 1333ms !default;\n// How much the start location of the arc should rotate each time.\n$spinner-arc-start-rot: 216deg !default;\n\n$spinner-duration: 360 * $spinner-arc-time / (\n strip-units($spinner-arc-start-rot + (360deg - $spinner-arc-size)));\n\n\n/* RADIO */\n\n$radio-label-font-size: 16px !default;\n$radio-label-height: 24px !default;\n$radio-button-size: 16px !default;\n$radio-inner-margin: $radio-button-size / 4;\n$radio-padding: 8px !default;\n$radio-top-offset: ($radio-label-height - $radio-button-size) / 2;\n$radio-ripple-size: 42px !default;\n\n\n/* MENU */\n\n$menu-expand-duration: 0.3s !default;\n$menu-fade-duration: 0.2s !default;\n\n/* LIST */\n\n$list-border: 8px !default;\n$list-min-height: 48px !default;\n$list-min-padding: 16px !default;\n$list-bottom-padding: 20px !default;\n$list-avatar-text-left-distance: 72px !default;\n$list-icon-text-left-distance: 72px !default;\n\n$list-avatar-size: 40px !default;\n$list-icon-size: 24px !default;\n\n$list-two-line-height: 72px !default;\n$list-three-line-height: 88px !default;\n\n/* LAYOUT */\n\n$layout-drawer-narrow: 240px !default;\n$layout-drawer-wide: 456px !default;\n$layout-drawer-width: $layout-drawer-narrow !default;\n\n$layout-header-icon-size: 32px !default;\n$layout-screen-size-threshold: 1024px !default;\n$layout-header-icon-margin: 24px !default;\n$layout-drawer-button-mobile-size: 32px !default;\n$layout-drawer-button-desktop-size: 48px !default;\n\n$layout-header-mobile-row-height: 56px !default;\n$layout-mobile-header-height: $layout-header-mobile-row-height;\n$layout-header-desktop-row-height: 64px !default;\n$layout-desktop-header-height: $layout-header-desktop-row-height;\n\n$layout-header-desktop-baseline: 80px !default;\n$layout-header-mobile-baseline: 72px !default;\n$layout-header-mobile-indent: 16px !default;\n$layout-header-desktop-indent: 40px !default;\n\n$layout-tab-font-size: 14px !default;\n$layout-tab-bar-height: 48px !default;\n$layout-tab-mobile-padding: 12px !default;\n$layout-tab-desktop-padding: 24px !default;\n$layout-tab-highlight-thickness: 2px !default;\n\n\n/* ICON TOGGLE */\n\n$icon-toggle-size: 32px !default;\n$icon-toggle-font-size: 24px !default;\n$icon-toggle-ripple-size: 36px !default;\n\n/* FOOTER */\n\n/*mega-footer*/\n$footer-min-padding: 16px !default;\n$footer-padding-sides: 40px !default;\n$footer-heading-font-size: 14px !default;\n$footer-heading-line-height: (1.7 * $footer-heading-font-size) !default;\n$footer-btn-size: 36px !default;\n\n/*mini-footer*/\n$padding: 16px !default;\n$footer-heading-font-size: 24px !default;\n$footer-heading-line-height: (1.5 * $footer-heading-font-size) !default;\n$footer-btn-size: 36px !default;\n\n/* CHECKBOX */\n\n$checkbox-label-font-size: 16px !default;\n$checkbox-label-height: 24px !default;\n$checkbox-button-size: 16px !default;\n$checkbox-inner-margin: 2px !default;\n$checkbox-padding: 8px !default;\n$checkbox-top-offset:\n($checkbox-label-height - $checkbox-button-size - $checkbox-inner-margin) / 2;\n$checkbox-ripple-size: $checkbox-label-height * 1.5;\n\n/* CARD */\n\n/* Card dimensions */\n$card-width: 330px !default;\n$card-height: 200px !default;\n$card-font-size: 16px !default;\n$card-title-font-size: 24px !default;\n$card-subtitle-font-size: 14px !default;\n$card-horizontal-padding: 16px !default;\n$card-vertical-padding: 16px !default;\n\n$card-title-perspective-origin-x: 165px !default;\n$card-title-perspective-origin-y: 56px !default;\n\n$card-title-transform-origin-x: 165px !default;\n$card-title-transform-origin-y: 56px !default;\n\n$card-title-text-transform-origin-x: 149px !default;\n$card-title-text-transform-origin-y: 48px !default;\n\n$card-supporting-text-font-size: 1rem !default;\n$card-supporting-text-line-height: 18px !default;\n\n$card-actions-font-size: 16px !default;\n\n$card-title-text-font-weight: 300 !default;\n$card-z-index: 1 !default;\n\n/* Cover image */\n$card-cover-image-height: 186px !default;\n$card-background-image-url: '' !default;\n\n\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n$button-min-width: 64px !default;\n$button-height: 36px !default;\n$button-padding: 16px !default;\n$button-margin: 4px !default;\n$button-border-radius: 2px !default;\n\n$button-fab-size: 56px !default;\n$button-fab-size-mini: 40px !default;\n$button-fab-font-size: 24px !default;\n\n$button-icon-size: 32px !default;\n$button-icon-size-mini: 24px !default;\n\n\n/* ANIMATION */\n$animation-curve-fast-out-slow-in: cubic-bezier(0.4, 0, 0.2, 1) !default;\n$animation-curve-linear-out-slow-in: cubic-bezier(0, 0, 0.2, 1) !default;\n$animation-curve-fast-out-linear-in: cubic-bezier(0.4, 0, 1, 1) !default;\n\n$animation-curve-default: $animation-curve-fast-out-slow-in !default;\n\n\n/* PROGRESS */\n$bar-height: 4px !default;\n\n/* BADGE */\n$badge-font-size: 12px !default;\n$badge-color: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n$badge-color-inverse: unquote(\"rgb(#{$color-accent})\") !default;\n$badge-background: unquote(\"rgb(#{$color-accent})\") !default;\n$badge-background-inverse: unquote(\"rgba(#{$color-accent-contrast},0.2)\") !default;\n$badge-size : 22px !default;\n$badge-padding: 2px !default;\n$badge-overlap: 12px !default;\n\n/* SHADOWS */\n\n$shadow-key-umbra-opacity: 0.2 !default;\n$shadow-key-penumbra-opacity: 0.14 !default;\n$shadow-ambient-shadow-opacity: 0.12 !default;\n\n/* GRID */\n\n$grid-desktop-columns: 12 !default;\n$grid-desktop-gutter: 16px !default;\n$grid-desktop-margin: 16px !default;\n\n$grid-desktop-breakpoint: 840px !default;\n\n$grid-tablet-columns: 8 !default;\n$grid-tablet-gutter: $grid-desktop-gutter !default;\n$grid-tablet-margin: $grid-desktop-margin !default;\n\n$grid-tablet-breakpoint: 480px !default;\n\n$grid-phone-columns: 4 !default;\n$grid-phone-gutter: $grid-desktop-gutter !default;\n$grid-phone-margin: $grid-desktop-margin !default;\n\n$grid-cell-default-columns: $grid-phone-columns !default;\n$grid-max-columns: $grid-desktop-columns !default;\n\n/* DATA TABLE */\n\n$data-table-font-size: 13px !default;\n$data-table-header-font-size: 12px !default;\n$data-table-header-sort-icon-size: 16px !default;\n\n$data-table-header-color: rgba(#000, 0.54) !default;\n$data-table-header-sorted-color: rgba(#000, 0.87) !default;\n$data-table-header-sorted-icon-hover-color: rgba(#000, 0.26) !default;\n$data-table-divider-color: rgba(#000, 0.12) !default;\n\n$data-table-hover-color: #eeeeee !default;\n$data-table-selection-color: #e0e0e0 !default;\n\n$data-table-dividers: 1px solid $data-table-divider-color !default;\n\n$data-table-row-height: 48px !default;\n$data-table-last-row-height: 56px !default;\n$data-table-header-height: 56px !default;\n\n$data-table-column-spacing: 36px !default;\n$data-table-column-padding: $data-table-column-spacing / 2;\n\n$data-table-card-header-height: 64px !default;\n$data-table-card-title-top: 20px !default;\n$data-table-card-padding: 24px !default;\n$data-table-button-padding-right: 16px !default;\n$data-table-cell-top: $data-table-card-padding / 2;\n\n/* DIALOG */\n$dialog-content-color: $card-supporting-text-text-color;\n\n/* SNACKBAR */\n\n// Hard coded since the color is not present in any palette.\n$snackbar-background-color: #323232 !default;\n$snackbar-tablet-breakpoint: $grid-tablet-breakpoint;\n$snackbar-action-color: unquote(\"rgb(#{$color-accent})\") !default;\n\n/* TOOLTIP */\n$tooltip-font-size: 10px !default;\n$tooltip-font-size-large: 14px !default;\n\n/* CHIP */\n$chip-bg-color: rgb(222, 222, 222) !default;\n$chip-bg-active-color: rgb(214, 214, 214) !default;\n$chip-height: 32px !default;\n$chip-font-size: 13px !default; \n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n\n.mdl-mini-footer {\n display: flex;\n flex-flow: row wrap;\n justify-content: space-between;\n\n padding: ($padding * 2) $padding;\n\n color: $footer-color;\n background-color: $footer-bg-color;\n\n &:after {\n content: '';\n display: block;\n }\n\n & .mdl-logo {\n line-height: $footer-btn-size;\n }\n}\n\n.mdl-mini-footer--link-list,\n.mdl-mini-footer__link-list {\n display: flex;\n flex-flow: row nowrap;\n\n list-style: none;\n\n margin: 0;\n padding: 0;\n\n & li {\n margin-bottom: 0;\n margin-right: $padding;\n\n @media screen and (min-width: 760px) {\n line-height: $footer-btn-size;\n }\n }\n\n & a {\n color: inherit;\n text-decoration: none;\n white-space: nowrap;\n }\n}\n\n.mdl-mini-footer--left-section,\n.mdl-mini-footer__left-section {\n display: inline-block;\n order: 0;\n}\n\n.mdl-mini-footer--right-section,\n.mdl-mini-footer__right-section {\n display: inline-block;\n order: 1;\n}\n\n.mdl-mini-footer--social-btn,\n.mdl-mini-footer__social-btn {\n width: $footer-btn-size;\n height: $footer-btn-size;\n\n padding: 0;\n margin: 0;\n\n background-color: $footer-button-fill-color;\n\n border: none;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n\n.mdl-card {\n display: flex;\n flex-direction: column;\n font-size: $card-font-size;\n font-weight: 400;\n min-height: $card-height;\n overflow: hidden;\n width: $card-width;\n z-index: $card-z-index;\n position: relative;\n background: $card-background-color;\n border-radius: 2px;\n box-sizing: border-box;\n}\n\n.mdl-card__media {\n background-color: $card-image-placeholder-color;\n background-repeat: repeat;\n background-position: 50% 50%;\n background-size: cover;\n background-origin: padding-box;\n background-attachment: scroll;\n box-sizing: border-box;\n}\n\n.mdl-card__title {\n align-items: center;\n color: $card-text-color;\n display: block;\n display: flex;\n justify-content: stretch;\n line-height: normal;\n padding: $card-vertical-padding $card-horizontal-padding;\n perspective-origin: $card-title-perspective-origin-x $card-title-perspective-origin-y;\n transform-origin: $card-title-transform-origin-x $card-title-transform-origin-y;\n box-sizing: border-box;\n\n &.mdl-card--border {\n border-bottom: 1px solid $card-border-color;\n }\n}\n\n.mdl-card__title-text {\n align-self: flex-end;\n color: inherit;\n display: block;\n display: flex;\n font-size: $card-title-font-size;\n font-weight: $card-title-text-font-weight;\n line-height: normal;\n overflow: hidden;\n transform-origin: $card-title-text-transform-origin-x $card-title-text-transform-origin-y;\n margin: 0;\n}\n\n.mdl-card__subtitle-text {\n font-size: $card-subtitle-font-size;\n color: $card-subtitle-color;\n margin: 0;\n}\n\n.mdl-card__supporting-text {\n color: $card-supporting-text-text-color;\n font-size: $card-supporting-text-font-size;\n line-height: $card-supporting-text-line-height;\n overflow: hidden;\n padding: $card-vertical-padding $card-horizontal-padding;\n width: 90%;\n\n &.mdl-card--border {\n border-bottom: 1px solid $card-border-color;\n }\n}\n\n.mdl-card__actions {\n font-size: $card-actions-font-size;\n line-height: normal;\n width: 100%;\n background-color: rgba(0,0,0,0);\n padding: 8px;\n box-sizing: border-box;\n\n &.mdl-card--border {\n border-top: 1px solid $card-border-color;\n }\n}\n\n.mdl-card--expand {\n flex-grow: 1;\n}\n\n\n.mdl-card__menu {\n position: absolute;\n right: 16px;\n top: 16px;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n@import \"../mixins\";\n\n// The button component. Defaults to a flat button.\n.mdl-button {\n background: transparent;\n border: none;\n border-radius: $button-border-radius;\n color: $button-secondary-color;\n position: relative;\n height: $button-height;\n margin: 0;\n min-width: $button-min-width;\n padding: 0 $button-padding;\n display: inline-block;\n @include typo-button();\n overflow: hidden;\n will-change: box-shadow;\n transition: box-shadow 0.2s $animation-curve-fast-out-linear-in,\n background-color 0.2s $animation-curve-default,\n color 0.2s $animation-curve-default;\n outline: none;\n cursor: pointer;\n text-decoration: none;\n text-align: center;\n line-height: $button-height;\n vertical-align: middle;\n\n &::-moz-focus-inner {\n border: 0;\n }\n\n &:hover {\n background-color: $button-hover-color;\n }\n\n &:focus:not(:active) {\n background-color: $button-focus-color;\n }\n\n &:active {\n background-color: $button-active-color;\n }\n\n &.mdl-button--colored {\n color: $button-primary-color-alt;\n\n &:focus:not(:active) {\n background-color: $button-focus-color-alt;\n }\n }\n}\n\ninput.mdl-button[type=\"submit\"] {\n -webkit-appearance:none;\n}\n\n // Raised buttons\n .mdl-button--raised {\n background: $button-primary-color;\n @include shadow-2dp();\n\n &:active {\n @include shadow-4dp();\n background-color: $button-active-color;\n }\n\n &:focus:not(:active) {\n @include focus-shadow();\n background-color: $button-active-color;\n }\n\n &.mdl-button--colored {\n background: $button-primary-color-alt;\n color: $button-secondary-color-alt;\n\n &:hover {\n background-color: $button-hover-color-alt;\n }\n\n &:active {\n background-color: $button-active-color-alt;\n }\n\n &:focus:not(:active) {\n background-color: $button-active-color-alt;\n }\n\n & .mdl-ripple {\n background: $button-ripple-color-alt;\n }\n }\n }\n\n\n // FABs\n .mdl-button--fab {\n border-radius: 50%;\n font-size: $button-fab-font-size;\n height: $button-fab-size;\n margin: auto;\n min-width: $button-fab-size;\n width: $button-fab-size;\n padding: 0;\n overflow: hidden;\n background: $button-primary-color;\n box-shadow: 0 1px 1.5px 0 rgba(0,0,0,0.12), 0 1px 1px 0 rgba(0,0,0,0.24);\n position: relative;\n line-height: normal;\n\n & .material-icons {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(- $button-fab-font-size / 2, - $button-fab-font-size / 2);\n line-height: $button-fab-font-size;\n width: $button-fab-font-size;\n }\n\n &.mdl-button--mini-fab {\n height: $button-fab-size-mini;\n min-width: $button-fab-size-mini;\n width: $button-fab-size-mini;\n }\n\n & .mdl-button__ripple-container {\n border-radius: 50%;\n // Fixes clipping bug in Safari.\n -webkit-mask-image: -webkit-radial-gradient(circle, white, black);\n }\n\n &:active {\n @include shadow-4dp();\n background-color: $button-active-color;\n }\n\n &:focus:not(:active) {\n @include focus-shadow();\n background-color: $button-active-color;\n }\n\n &.mdl-button--colored {\n background: $button-fab-color-alt;\n color: $button-fab-text-color-alt;\n\n &:hover {\n background-color: $button-fab-hover-color-alt;\n }\n\n &:focus:not(:active) {\n background-color: $button-fab-active-color-alt;\n }\n\n &:active {\n background-color: $button-fab-active-color-alt;\n }\n\n & .mdl-ripple {\n background: $button-fab-ripple-color-alt;\n }\n }\n }\n\n\n // Icon buttons\n .mdl-button--icon {\n border-radius: 50%;\n font-size: $button-fab-font-size;\n height: $button-icon-size;\n margin-left: 0;\n margin-right: 0;\n min-width: $button-icon-size;\n width: $button-icon-size;\n padding: 0;\n overflow: hidden;\n color: inherit;\n line-height: normal;\n\n & .material-icons {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(- $button-fab-font-size / 2, - $button-fab-font-size / 2);\n line-height: $button-fab-font-size;\n width: $button-fab-font-size;\n }\n\n &.mdl-button--mini-icon {\n height: $button-icon-size-mini;\n min-width: $button-icon-size-mini;\n width: $button-icon-size-mini;\n\n & .material-icons {\n top: ($button-icon-size-mini - $button-fab-font-size) / 2;\n left: ($button-icon-size-mini - $button-fab-font-size) / 2;\n }\n }\n\n & .mdl-button__ripple-container {\n border-radius: 50%;\n // Fixes clipping bug in Safari.\n -webkit-mask-image: -webkit-radial-gradient(circle, white, black);\n }\n }\n\n\n // Ripples\n .mdl-button__ripple-container {\n display: block;\n height: 100%;\n left: 0px;\n position: absolute;\n top: 0px;\n width: 100%;\n z-index: 0;\n overflow: hidden;\n\n .mdl-button[disabled] & .mdl-ripple,\n .mdl-button.mdl-button--disabled & .mdl-ripple {\n background-color: transparent;\n }\n }\n\n// Colorized buttons\n\n.mdl-button--primary.mdl-button--primary {\n color: $button-primary-color-alt;\n & .mdl-ripple {\n background: $button-secondary-color-alt;\n }\n &.mdl-button--raised, &.mdl-button--fab {\n color: $button-secondary-color-alt;\n background-color: $button-primary-color-alt;\n }\n}\n\n.mdl-button--accent.mdl-button--accent {\n color: $button-fab-color-alt;\n & .mdl-ripple {\n background: $button-fab-text-color-alt;\n }\n &.mdl-button--raised, &.mdl-button--fab {\n color: $button-fab-text-color-alt;\n background-color: $button-fab-color-alt;\n }\n}\n\n// Disabled buttons\n\n.mdl-button {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n color: $button-secondary-color-disabled;\n cursor: default;\n background-color: transparent;\n }\n\n &--fab {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n background-color: $button-primary-color-disabled;\n color: $button-secondary-color-disabled;\n }\n }\n\n &--raised {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n background-color: $button-primary-color-disabled;\n color: $button-secondary-color-disabled;\n box-shadow: none;\n }\n }\n &--colored {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n color: $button-secondary-color-disabled;\n }\n }\n}\n\n// Align icons inside buttons with text\n.mdl-button .material-icons {\n vertical-align: middle;\n}\n","// SIMPLE GRID - SASS/SCSS\n\n\n// fonts\n$font-weight-light: 300;\n$font-weight-regular: 400;\n$font-weight-heavy: 700;\n\n// colors\n$dark-grey: #333447;\n$dark-gray: #333447; // for the Americans\n\n\n.font-light {\n font-weight: $font-weight-light;\n}\n\n.font-regular {\n font-weight: $font-weight-regular;\n}\n\n.font-heavy {\n font-weight: $font-weight-heavy;\n}\n\n// utility\n\n.left {\n text-align: left;\n}\n\n.right {\n text-align: right;\n}\n\n.center {\n text-align: center;\n margin-left: auto;\n margin-right: auto;\n}\n\n.justify {\n text-align: justify;\n}\n\n.hidden-sm {\n display: none;\n}\n\n// grid\n\n$width: 98%;\n$gutter: 2%;\n$breakpoint-small: 33.75em; // 540px\n$breakpoint-med: 45em; // 720px\n$breakpoint-large: 60em; // 960px\n\n.container {\n width: 100%;\n margin-left: auto;\n margin-right: auto;\n}\n\n.row {\n position: relative;\n width: 100%;\n}\n\n.row [class^=\"col\"] {\n float: left;\n margin: 0.5rem 1%;\n min-height: 0.125rem;\n}\n\n.row::after {\n content: \"\";\n display: table;\n clear: both;\n}\n\n.col-1,\n.col-2,\n.col-3,\n.col-4,\n.col-5,\n.col-6,\n.col-7,\n.col-8,\n.col-9,\n.col-10,\n.col-11,\n.col-12 {\n width: $width;\n}\n\n.col-1-sm {\n width: ($width / 12) - ($gutter * 11 / 12);\n}\n\n.col-2-sm {\n width: ($width / 6) - ($gutter * 10 / 12);\n}\n\n.col-3-sm {\n width: ($width / 4) - ($gutter * 9 / 12);\n}\n\n.col-4-sm {\n width: ($width / 3) - ($gutter * 8 / 12);\n}\n\n.col-5-sm {\n width: ($width / (12 / 5)) - ($gutter * 7 / 12);\n}\n\n.col-6-sm {\n width: ($width / 2) - ($gutter * 6 / 12);\n}\n\n.col-7-sm {\n width: ($width / (12 / 7)) - ($gutter * 5 / 12);\n}\n\n.col-8-sm {\n width: ($width / (12 / 8)) - ($gutter * 4 / 12);\n}\n\n.col-9-sm {\n width: ($width / (12 / 9)) - ($gutter * 3 / 12);\n}\n\n.col-10-sm {\n width: ($width / (12 / 10)) - ($gutter * 2 / 12);\n}\n\n.col-11-sm {\n width: ($width / (12 / 11)) - ($gutter * 1 / 12);\n}\n\n.col-12-sm {\n width: $width;\n}\n\n@media only screen and (min-width: $breakpoint-med) {\n .col-1 {\n width: ($width / 12) - ($gutter * 11 / 12);\n }\n .col-2 {\n width: ($width / 6) - ($gutter * 10 / 12);\n }\n .col-3 {\n width: ($width / 4) - ($gutter * 9 / 12);\n }\n .col-4 {\n width: ($width / 3) - ($gutter * 8 / 12);\n }\n .col-5 {\n width: ($width / (12 / 5)) - ($gutter * 7 / 12);\n }\n .col-6 {\n width: ($width / 2) - ($gutter * 6 / 12);\n }\n .col-7 {\n width: ($width / (12 / 7)) - ($gutter * 5 / 12);\n }\n .col-8 {\n width: ($width / (12 / 8)) - ($gutter * 4 / 12);\n }\n .col-9 {\n width: ($width / (12 / 9)) - ($gutter * 3 / 12);\n }\n .col-10 {\n width: ($width / (12 / 10)) - ($gutter * 2 / 12);\n }\n .col-11 {\n width: ($width / (12 / 11)) - ($gutter * 1 / 12);\n }\n .col-12 {\n width: $width;\n }\n\n .hidden-sm {\n display: block;\n }\n}\n\n.row {\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n flex-wrap: wrap;\n}\n\n.row > [class*='col-'] {\n display: flex;\n flex-direction: column;\n}\n","\n/*\nMaterial Icons\n*/\n\n.material-icons {\n font-family: 'Material Icons';\n font-weight: normal;\n font-style: normal;\n font-size: 24px; /* Preferred icon size */\n display: inline-block;\n line-height: 1;\n text-transform: none;\n letter-spacing: normal;\n word-wrap: normal;\n white-space: nowrap;\n direction: ltr;\n \n /* Support for all WebKit browsers. */\n -webkit-font-smoothing: antialiased;\n /* Support for Safari and Chrome. */\n text-rendering: optimizeLegibility;\n \n /* Support for Firefox. */\n -moz-osx-font-smoothing: grayscale;\n \n /* Support for IE. */\n font-feature-settings: 'liga';\n }","html {\n font-size: $font_size;\n}\n\nbody {\n display: block !important;\n background-color: $background_color;\n font-size: 1rem;\n line-height: 1.5rem;\n font-family: $body_font_family;\n}\n\n.mdl-layout__content:focus {\n outline: none;\n }\n\n.mdl-layout__content header.mdl-layout__drawer {\n display: none;\n}\n\n.mdl-layout__container {\n height: calc(100% - 76px);\n margin-top: 76px;\n}\n.mdl-layout__header {\n position: fixed;\n transition: transform 0.5s;\n}\n.mdl-layout--fixed-drawer>.mdl-layout__content {\n margin-left: 300px; \n}\n\n@media screen and (max-width: 1024px) {\n .mdl-layout--fixed-drawer>.mdl-layout__content {\n margin-left:0\n }\n}\n\nh1, h2, h3, h4, h5, h6, blockquote, span.mdl-layout-title,\na.download > code.download {\n font-family: $body_font_family;\n}\n\nh1, h2, h3, h4, h5, h6, .toc-backref, .contents, .toctree-wrapper, .contents a, .toctree-wrapper a, .globaltoc a.current {\n color: $color-mxnet !important;\n}\n\na {\n text-decoration: none;\n}\n\n.page-content {\n font-size: 1rem;\n p, ul, ol, dl, dd, dt, table, th, td {\n font-size: 1rem;\n }\n}\n\n.brand {\n color: inherit;\n text-decoration: none;\n}\n\n.section {\n overflow-x: auto;\n}\n\n\n/*\n * Figure Directive Styles\n */\n img {\n max-width: 100%;\n display: block;\n margin-left: auto;\n margin-right: auto;\n }\n\ndiv.figure {\n p.caption {\n text-align: center;\n margin-top: .75rem;\n\n span.caption-number {\n font-style: normal;\n }\n .caption-number::after {\n content: \"\\00a0\";\n }\n }\n}\n\n.svg-icon {\n width: 16px;\n height: 16px;\n display: inline-block;\n fill: $grey-color-light;\n padding-right: 5px;\n padding-top: 4px;\n vertical-align: text-top;\n}\n\n/*\n * Download Link Styles\n */\na.download > i.material-icons {\n position: relative;\n top: 5px;\n}\n\na.download {\n text-decoration: none;\n}\n\n%clearfix:after {\n content: \"\";\n display: table;\n clear: both;\n}\n\n.wrapper {\n max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit} * 2));\n max-width: calc(#{$content-width} - (#{$spacing-unit} * 2));\n margin-right: auto;\n margin-left: auto;\n padding-right: calc(#{$spacing-unit}+15px);\n padding-left: $spacing-unit;\n @extend %clearfix;\n\n @media screen and (max-width: $on-laptop) {\n max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit}));\n max-width: calc(#{$content-width} - (#{$spacing-unit}));\n padding-right: $spacing-unit / 2;\n padding-left: $spacing-unit / 2;\n }\n}\n\n","/*\nVariables\n*/\n$font_size: 16px;\n\n$background_color: #fafafa;\n$code_background: rgba(0,0,0,.05);\n\n$code_font_family: \"Menlo\", \"DejaVu Sans Mono\", \"Liberation Mono\", \"Consolas\", \"Ubuntu Mono\", \"Courier New\", \"andale mono\", \"lucida console\", monospace !default;\n$body_font_family: -apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\" !default;\n$base-font-size: 17px !default;\n\n$xl-breakpoint: 1795px;\n$lg-breakpoint: 1200px;\n$md-breakpoint: 992px;\n$sm-breakpoint: 768px;\n$xs-breakpoint: 576px;\n\n$color-primary: $palette-blue-500;\n$color-primary-dark: $palette-blue-700 !default;\n$color-accent: $palette-deep-orange-A200 !default;\n$color-primary-contrast: $color-white !default;\n$color-accent-contrast: $color-white !default;\n\n\n$base-line-height: 1.5 !default;\n$spacing-unit: 30px !default;\n\n$color-mxnet: rgb(4,140,204);\n$color-mxnet-dark: rgb(4,60,110);\n$grey-color: #828282 !default;\n$grey-color-light: lighten($grey-color, 45%) !default;\n$grey-color-dark: darken($grey-color, 25%) !default;\n\n$table-text-align: left !default;\n\n// Width of the content area\n$content-width: 1150px !default;\n\n$on-palm: 600px !default;\n$on-palm: 900px !default;\n$on-laptop: 1024px !default;","/**\n * Layout Styles\n */\n $layout: (\n document: (\n xl: (\n width: 100%,\n )\n ),\n drawer-container: (\n width: $layout-drawer-width,\n ),\n side-doc-outline: (\n width: 230px,\n ),\n page-content: (\n md: (\n width: 90%,\n padding: 0 5%\n ),\n lg: (\n width: calc( 90% - 230px ),\n padding: 0 5%\n )\n )\n);\n\n.document {\n width: 100%;\n margin: 84px auto;\n display: flex;\n\n @media (min-width: $xl-breakpoint) {\n width: map-get(map-get(map-get($layout, document), xl), width);\n }\n .page-content {\n width: 100%;\n margin: 0 auto;\n padding: 0 12px;\n\n @media (min-width: $md-breakpoint) {\n width: map-get(map-get(map-get($layout, page-content), md), width);\n padding: map-get(map-get(map-get($layout, page-content), md), padding);\n }\n\n @media (min-width: $lg-breakpoint) {\n width: map-get(map-get(map-get($layout, page-content), lg), width);\n padding: map-get(map-get(map-get($layout, page-content), lg), padding);\n }\n }\n\n .side-doc-outline {\n width: map-get(map-get($layout, side-doc-outline), width);\n\n @media (max-width: $lg-breakpoint - 1) {\n display: none;\n } \n &--content {\n position: fixed;\n overflow-x: auto;\n overflow-y: auto;\n width: inherit;\n right: 0px;\n &::-webkit-scrollbar {\n width: 6px;\n }\n \n &::-webkit-scrollbar-track {\n border-radius: 6px;\n }\n \n &::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, .3);\n border-radius: 6px;\n box-shadow:0 0 0 1px rgba(255, 255, 255, .3);\n }\n }\n }\n\n}","@keyframes float-in {\n 0% {\n transform: translateY(0.5rem);\n opacity: 0;\n }\n\t100% {\n\t\ttransform: translateY(0);\n\t\topacity: 1;\n\t}\n}\n\n@keyframes float-out {\n 0% {\n transform: translateY(0);\n opacity: 1;\n }\n\t100% {\n\t\ttransform: translateY(0.5rem);\n\t\topacity: 0;\n\t}\n}\n\n.page-content {\n .headerlink {\n display: inline-block;\n text-decoration: none;\n margin-left: 0.8rem;\n color: inherit;\n opacity: 0;\n &:hover {\n animation: float-in 0.2s $animation-curve-fast-out-slow-in 0s forwards;\n }\n }\n\n h1, h2, h3, h4, h5, h6 {\n .toc-backref {\n text-decoration: none;\n }\n &:hover {\n .headerlink {\n animation: float-in 0.2s $animation-curve-fast-out-slow-in 0s forwards;\n }\n }\n }\n\n h1 {\n font-size: 2rem;\n line-height: 2.25rem;\n }\n\n h2 {\n font-size: 1.75rem;\n line-height: 2rem;\n padding-top: 1.5rem;\n margin-top: 0;\n margin-bottom: 1rem;\n }\n\n h3 {\n font-size: 1.5rem;\n line-height: 1.75rem;\n padding-top: 1rem;\n margin-top: 0px;\n margin-bottom: .75rem;\n }\n\n h4 {\n font-size: 1.25rem;\n line-height: 1.5rem;\n padding-top: .75rem;\n margin-top: 0px;\n margin-bottom: .5rem;\n }\n\n div.page-content h5 {\n font-size: 1.1rem;\n line-height: 1.5rem;\n padding-top: 2rem;\n margin-top: 0px;\n margin-bottom: 1rem;\n }\n\n div.page-content h6 {\n font-size: 1rem;\n line-height: 1.5rem;\n padding-top: 2rem;\n margin-top: 0px;\n margin-bottom: 1rem;\n }\n\n\n}\n","\n/*\n * Admonition Styles\n */\n $admonitions: (\n hint: (\n font-color: rgb(0, 188, 212),\n background-color: rgba(0, 188, 212, 0.1),\n icon-content: \"help_outline\"\n ),\n note: (\n font-color: rgb(0, 188, 212),\n background-color: rgba(0, 188, 212, 0.1),\n icon-content: \"info_outline\"\n ),\n seealso: (\n font-color: rgb(0, 188, 212),\n background-color: rgba(0, 188, 212, 0.1),\n icon-content: \"search\"\n ),\n warning: (\n font-color: rgb(255, 193, 7),\n background-color: rgba(255, 193, 7, 0.1),\n icon-content: \"warning\"\n ),\n attention: (\n font-color: rgb(255, 193, 7),\n background-color: rgba(255, 193, 7, 0.1),\n icon-content: \"warning\"\n ),\n tip: (\n font-color: rgb(139, 195, 74),\n background-color: rgba(139, 195, 74, 0.1),\n icon-content: \"lightbulb_outline\"\n ),\n important: (\n font-color: rgb(139, 195, 74),\n background-color: rgba(139, 195, 74, 0.1),\n icon-content: \"check_circle\"\n ),\n error: (\n font-color: rgb(244, 67, 54),\n background-color: rgba(244, 67, 54, 0.1),\n icon-content: \"error_outline\"\n ),\n caution: (\n font-color: rgb(244, 67, 54),\n background-color: rgba(244, 67, 54, 0.1),\n icon-content: \"error_outline\"\n ),\n danger: (\n font-color: rgb(244, 67, 54),\n background-color: rgba(244, 67, 54, 0.1),\n icon-content: \"error_outline\"\n )\n);\n\n @mixin admonition-style($type) {\n border-left: solid 4px map-get(map-get($admonitions, $type), font-color);\n background-color: map-get(map-get($admonitions, $type), background-color);\n .admonition-title {\n font-size: 16px;\n font-weight: bold;\n color: map-get(map-get($admonitions, $type), font-color);\n\n margin-top: 4px;\n margin-bottom: 8px;\n &::before {\n @extend .material-icons;\n position: relative;\n margin-right: 5px;\n top: 3px;\n content: map-get(map-get($admonitions, $type), icon-content);\n font-size: 18px;\n }\n }\n}\n\n.admonition {\n @extend .mdl-shadow--2dp;\n\n padding: 12px 20px;\n margin-top: 10px;\n margin-bottom: 10px;\n p.last {\n margin: 16px;\n }\n .admonition-title {\n font-size: 16px;\n font-weight: bold;\n color: #555;\n text-transform: uppercase;\n margin-top: 7px;\n }\n\n @each $type in (note, seealso, hint, warning, attention, tip, important, error, caution, danger) {\n &.#{$type} {\n @include admonition-style($type);\n }\n }\n}\n",".page-content {\n .highlight {\n margin: 1px 0;\n pre {\n background: $code_background;\n color: rgba(0,0,0,.87);\n font-family: $code_font_family;\n padding: 0.75rem;\n overflow: auto;\n overflow-y: hidden;\n .o, .nd {\n color: rgba(0,0,0,.87);\n }\n }\n }\n\n div.highlight-console div.highlight {\n background: none;\n }\n\n // for jupyter notebook output cell\n .output {\n .highlight {\n pre {\n color: rgba(0,0,0,.87);\n background: $background_color;\n border-width: 1px;\n border-color: #999;\n border-style: solid;\n padding: 0.75rem;\n }\n }\n }\n\n .code, code:not(.download) {\n margin: 0 0;\n font-family: $code_font_family;\n border-radius: 2px;\n span.pre {\n font-family: $code_font_family;\n }\n }\n\n .viewcode-link {\n padding-left: 2em;\n font-size: 80%;\n }\n\n .rubric, .method > dt, .function > dt, .class > dt {\n display: table;\n margin: 10px 0;\n font-size: 100%;\n line-height: normal;\n background: #e7f2fa;\n color: #2B98F0;\n border-top: solid 3px #55ADF3;\n padding: 10px;\n position: relative;\n .descname, .descclassname {\n color: rgba(0,0,0,.87);\n background: #e7f2fa;\n padding: 3px;\n }\n em {\n padding: 0 2px;\n }\n }\n\n\n .rubric {\n margin: 30px 0 10px 0;\n }\n\n\n .field-body {\n padding-left: 40px;\n ul {\n padding: 0 0 0 16px;\n margin: 0;\n }\n }\n\n // .docutils > dt {\n // padding: 6px;\n // display: table;\n // margin-bottom: 6px;\n // border: none;\n // border-left: solid 3px #ccc;\n // background: #f0f0f0;\n // color: #555;\n // }\n\n .seealso .docutils > dt {\n float: left;\n clear: left;\n padding: 0 6px;\n }\n\n .seealso .docutils > dd {\n padding-left: 6em;\n }\n .nblast {\n padding-bottom: 1em;\n }\n\n pre {\n font-size: 90%;\n background: #eee;\n color: #455A64;\n padding: 16px 32px;\n width: auto;\n border-radius: 4px;\n word-wrap: break-word;\n\n &:hover {\n @extend .mdl-shadow--2dp;\n\n &:before {\n font-family: $body_font_family;\n padding: 0 0.5rem;\n content: attr(click-to-copy);\n color: rgba(0, 0, 0, 0.5);\n border-radius: 4px;\n position: relative;\n float: right;\n top: -0.5rem;\n right: -0.5rem;\n background: rgb(200, 200, 200);\n font-size: 0.8rem;\n cursor: pointer;\n }\n }\n }\n}\n","/*\n * Quotation Block Styles\n */\n .page-content {\n blockquote {\n font-size: 1rem;\n padding: 0 1rem;\n border-left: 3px solid $code_background;\n\n &:after {\n content: \"\" !important;\n margin-left: 0;\n }\n &:before {\n content: \"\" !important;\n }\n }\n }\n",".page-content {\n table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) {\n @extend .mdl-data-table;\n @extend .mdl-shadow--2dp;\n\n margin: 1.5rem 0;\n table-layout: fixed;\n max-width: 100%;\n min-width: 70%;\n\n th, td {\n @extend .mdl-data-table__cell--non-numeric;\n white-space: normal;\n overflow-wrap: break-word;\n }\n\n caption {\n font-size: $font_size;\n margin: 1rem 0 0.8rem 0;\n white-space: normal;\n .caption-number {\n font-style: normal;\n }\n .caption-number::after {\n content: \"\\00a0\";\n }\n }\n\n }\n}\n",".globaltoc {\n \n .caption, .toc {\n display: none;\n }\n\n ul {\n\n list-style-type: none;\n padding: 0;\n margin: 0;\n\n li {\n min-height: 18px;\n .link-wrapper {\n display: flex;\n justify-content: space-between;\n > a {\n padding: 4px 0;\n display: block;\n width: 100%;\n font-size: 1rem;\n text-decoration: none;\n color: $layout-drawer-navigation-color;\n &.current {\n font-weight: bold;\n }\n }\n }\n }\n }\n\n .nav-toggle {\n padding: 0;\n float: right;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 36px;\n > a {\n padding: 0;\n margin-left: 0;\n margin-right: 4px;\n cursor: pointer;\n > i {\n font-size: 18px;\n }\n }\n &.show {\n transform: rotateZ(180deg);\n > a {\n margin-right: 0;\n margin-left: 4px;\n }\n }\n }\n\n nav {\n > ul > li > span.link-wrapper {\n padding-left: 8px;\n }\n > ul > li > ul > li > span.link-wrapper {\n padding-left: 16px;\n }\n > ul > li > ul > li > ul > li > span.link-wrapper {\n padding-left: 24px;\n }\n > ul > li > ul > li > ul > li > ul> li > span.link-wrapper {\n padding-left: 32px;\n }\n > ul > li > ul > li > ul > li > ul > li > ul> li > span.link-wrapper {\n padding-left: 40px;\n }\n > ul > li > ul > li > ul > li > ul > li > ul > li > ul> li > span.link-wrapper {\n padding-left: 48px;\n }\n }\n}\n",".localtoc {\n font-size: 0.75rem;\n padding-top: 1rem;\n\n .caption {\n padding-left: 12px;\n &-text {\n font-size: 0.9rem;\n font-weight: 700;\n }\n }\n\n > ul > li > a {\n display: none;\n }\n\n ul {\n padding: 0;\n list-style-type: none;\n }\n\n li {\n padding-left: 6px;\n }\n\n a {\n display: block;\n text-decoration: none;\n color: inherit;\n margin-top: 8px;\n padding-left: 8px;\n line-height: 1.1rem;\n \n &.current {\n padding-left: 5px;\n border-left: 3px solid;\n font-weight: bold;\n }\n }\n}","/*\r\n * Toctree and Contents Directive Styles\r\n */\r\n .toctree-wrapper,\r\n .contents.topic {\r\n border-left: 5px solid;\r\n }\r\n\r\n .toctree-wrapper > p.caption,\r\n .contents.topic > p.topic-title {\r\n color: rgb(117, 117, 117);\r\n font-size: 1rem;\r\n padding-left: 14px;\r\n }\r\n\r\n .toctree-wrapper ul,\r\n .contents.topic ul{\r\n padding-left: 14px;\r\n list-style: none;\r\n line-height: 30px;\r\n }\r\n\r\n .toctree-wrapper a,\r\n .contents.topic a {\r\n font-size: 1.2rem;\r\n text-decoration: none;\r\n .pre {\r\n font-size: 1rem;\r\n }\r\n }\r\n\r\n .toctree-wrapper > ul > li > a,\r\n .contents.topic > ul > li > a {\r\n font-size: 1.3rem;\r\n .pre {\r\n font-size: 1.1rem;\r\n }\r\n }\r\n",".page-content {\n ul {\n li {\n margin: .3rem 0;\n p {\n margin: 0;\n }\n }\n }\n .option-list {\n .option {\n font-family: $code_font_family;\n }\n td {\n padding: 0.5rem;\n border: none;\n }\n }\n}\n","/*\r\n * Drawer Styles\r\n */\r\n.mdl-layout {\r\n &__drawer {\r\n background-color: #fff;\r\n\r\n &::-webkit-scrollbar {\r\n width: 6px;\r\n }\r\n\r\n &::-webkit-scrollbar-track {\r\n border-radius: 6px;\r\n }\r\n\r\n &::-webkit-scrollbar-thumb {\r\n background-color: rgba(0, 0, 0, .3);\r\n border-radius: 6px;\r\n box-shadow:0 0 0 1px rgba(255, 255, 255, .3);\r\n }\r\n\r\n > .mdl-layout-title {\r\n font-weight: bold;\r\n text-align: right;\r\n margin: 0;\r\n padding: 0;\r\n line-height: 32px;\r\n border-bottom: 1px solid rgba(0,0,0,.1);\r\n min-height: 64px;\r\n .title {\r\n color: inherit;\r\n display: block;\r\n height: 100%;\r\n width: 100%;\r\n text-decoration: none;\r\n > img.logo {\r\n width: 100%;\r\n margin: 0;\r\n padding: 0;\r\n }\r\n\r\n &-text {\r\n font-weight: bold;\r\n text-align: right;\r\n padding: 0 10px;\r\n margin: 16px 0 8px 0;\r\n line-height: 32px;\r\n font-family: $body_font_family;\r\n color: inherit;\r\n display: block;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","/*\r\n * Header Styles\r\n */\r\n\r\nnav.breadcrumb {\r\n > a.mdl-navigation__link {\r\n padding: 0 8px;\r\n font-size: 18px;\r\n }\r\n @media (max-width: $lg-breakpoint - 1) {\r\n width: calc( 100% - 64px );\r\n a.mdl-navigation__link.is-active {\r\n overflow-x: hidden;\r\n width: 100%;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n }\r\n a.mdl-navigation__link:not(.is-active),\r\n i.material-icons {\r\n display: none;\r\n }\r\n }\r\n}\r\n\r\ndiv.mdl-layout__header {\r\n margin-top: 77px;\r\n}\r\n\r\n.mdl-layout__drawer-button {\r\n top: 13px !important;\r\n}\r\n\r\ndiv.mdl-layout__header-row.header-links {\r\n background: rgba(255,255,255,0.2);\r\n width: 100%;\r\n overflow-x: auto;\r\n overflow-y: hidden;\r\n\r\n a.mdl-navigation__link {\r\n font-size: 1rem;\r\n i {\r\n font-size: 1.2rem;\r\n margin: 0 8px;\r\n position: relative;\r\n bottom: -0.1rem;\r\n }\r\n };\r\n\r\n a.mdl-navigation__link:hover {\r\n background-color: unquote(\"rgb(#{$color-primary})\");\r\n color: #eeeeee;\r\n };\r\n a.mdl-navigation__link[href=\"#\"] {\r\n background-color: unquote(\"rgb(#{$color-primary})\");\r\n opacity: 1;\r\n color: #ffffff;\r\n };\r\n}\r\n\r\n/* mxnet-header */\r\n\r\n\r\n.site-title {\r\n font-weight: 300 !important;\r\n line-height: 57px;\r\n letter-spacing: -1px;\r\n margin-bottom: 0;\r\n float: left;\r\n color: white;\r\n\r\n &,\r\n &:visited {\r\n color: $grey-color-dark;\r\n }\r\n}\r\n\r\n\r\n.site-header {\r\n position: fixed;\r\n top: 0;\r\n width: 100%;\r\n min-height: 55px;\r\n padding-top: 10px;\r\n padding-bottom: 10px;\r\n background-color: $color-mxnet;\r\n z-index: 10;\r\n font-weight: 300;\r\n font-size: 17px;\r\n border-bottom: 1px solid white;\r\n}\r\n\r\n.site-header-logo {\r\n width: 120px;\r\n display: initial;\r\n}\r\n\r\n.site-nav {\r\n float: right;\r\n line-height: 57px;\r\n\r\n .nav-trigger {\r\n display: none;\r\n }\r\n\r\n .menu-icon {\r\n display: none;\r\n }\r\n\r\n .page-link {\r\n color: white;\r\n line-height: 1.5;\r\n font-weight: 300;\r\n // Gaps between nav items, but not on the last one\r\n &:not(:last-child) {\r\n margin-right: 40px;\r\n }\r\n\r\n &:hover {\r\n color: white;\r\n text-shadow: -0.06ex 0 white, 0.06ex 0 white;\r\n }\r\n }\r\n\r\n .page-link.page-current {\r\n color: white;\r\n text-decoration: underline;\r\n }\r\n\r\n @media screen and (max-width: $on-laptop) {\r\n position: absolute;\r\n top: 9px;\r\n right: 15px;\r\n background-color: rgb(23,141,201);\r\n border-radius: 2px;\r\n text-align: right;\r\n\r\n label[for=\"nav-trigger\"] {\r\n display: block;\r\n float: right;\r\n width: 36px;\r\n height: 36px;\r\n z-index: 2;\r\n cursor: pointer;\r\n }\r\n\r\n .menu-icon {\r\n display: block;\r\n float: right;\r\n width: 36px;\r\n height: 26px;\r\n line-height: 0;\r\n padding-top: 20px;\r\n text-align: center;\r\n\r\n > svg {\r\n fill: white;\r\n }\r\n }\r\n\r\n input ~ .trigger {\r\n clear: both;\r\n display: none;\r\n }\r\n\r\n input:checked ~ .trigger {\r\n display: block;\r\n padding-bottom: 5px;\r\n }\r\n\r\n .page-link {\r\n padding: 5px 10px;\r\n display: block;\r\n\r\n &:not(:last-child) {\r\n margin-right: 0;\r\n }\r\n\r\n margin-left: 20px;\r\n }\r\n }\r\n}","/*\r\n * Footer Styles\r\n */\r\nfooter.mdl-mini-footer {\r\n background-color: #212121;\r\n > div.mdl-mini-footer__left-section {\r\n margin-bottom: 20px;\r\n display: flex;\r\n flex-direction: column;\r\n .mdl-logo {\r\n font-size: 1.1rem;\r\n }\r\n ul {\r\n @extend .mdl-mini-footer__link-list;\r\n }\r\n }\r\n > div.mdl-mini-footer__right-section {\r\n font-size: 0.9rem;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: flex-end;\r\n\r\n a {\r\n color: inherit;\r\n font-weight: bold;\r\n text-decoration: none;\r\n }\r\n }\r\n p.caption {\r\n display: none;\r\n }\r\n}\r\n\r\n/*\r\n * Pagenation Block Styles\r\n */\r\n .pagenation {\r\n width: 100%;\r\n margin-top: 80px;\r\n height: 92px;\r\n background-color: #424242;\r\n display: flex;\r\n\r\n .button-common {\r\n text-transform: none;\r\n padding: 0;\r\n height: 92px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n color: #ffffff;\r\n }\r\n #button-prev {\r\n @extend .button-common;\r\n margin-right: auto;\r\n .pagenation-text {\r\n text-align: left;\r\n }\r\n \r\n }\r\n #button-next {\r\n @extend .button-common;\r\n margin-left: auto;\r\n flex-direction: row-reverse;\r\n .pagenation-text {\r\n text-align: right;\r\n }\r\n }\r\n\r\n &-arrow {\r\n &-L {\r\n margin-right: 20px;\r\n }\r\n &-R {\r\n margin-left: 20px;\r\n }\r\n }\r\n\r\n &-text {\r\n line-height: 30px;\r\n font-size: 20px;\r\n }\r\n\r\n &-direction {\r\n opacity: 0.7;\r\n font-size: 18px;\r\n }\r\n @media screen and (max-width: 1024px) {\r\n #button-prev {\r\n width: 20%;\r\n }\r\n \r\n #button-next {\r\n width: 80%;\r\n }\r\n \r\n #button-prev .pagenation-text {\r\n display: none;\r\n }\r\n }\r\n @media screen and (min-width: 1025px) {\r\n #button-prev,\r\n #button-next {\r\n width: 50%;\r\n }\r\n \r\n #button-prev .pagenation-text {\r\n display: block;\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n/**\r\n * Site footer\r\n */\r\n.site-footer {\r\n border-top: 1px solid $grey-color-light;\r\n padding: $spacing-unit 0;\r\n background-color: #424242;\r\n position: relative;\r\n z-index: 10;\r\n .footer-category-title {\r\n color: $color-mxnet;\r\n }\r\n a {\r\n color: $grey-color-light !important;\r\n\r\n &:visited {\r\n color: $grey-color-light !important;\r\n }\r\n }\r\n\r\n}\r\n\r\n.site-footer2 {\r\n background-color: #424242;\r\n padding-top: 40px;\r\n padding-bottom: 10px;\r\n position: relative;\r\n z-index: 10;\r\n}\r\n\r\n.footer-heading {\r\n margin-bottom: $spacing-unit / 2;\r\n}\r\n\r\n.contact-list,\r\n.social-media-list {\r\n list-style: none;\r\n margin-left: 0;\r\n}\r\n\r\n\r\n.footer-bottom-warning {\r\n font-size: 80%;\r\n color: white;\r\n float: left;\r\n}\r\n\r\n.footer-logo {\r\n width: 200px;\r\n margin-bottom: 30px;\r\n margin-top: 30px;\r\n}\r\n\r\n.footer-col {\r\n float: left;\r\n margin-bottom: $spacing-unit / 2;\r\n padding-left: $spacing-unit / 2;\r\n}\r\n\r\n.footer-text {\r\n color: $grey-color-light;\r\n}\r\n\r\n"," /*\r\n * Search Styles\r\n */\r\n#waterfall-exp::-webkit-input-placeholder {\r\n color: #ccc;\r\n}\r\n#waterfall-exp:-ms-input-placeholder {\r\n color: #ccc;\r\n}\r\n#waterfall-exp::-moz-placeholder {\r\n color: #ccc;\r\n}\r\n\r\nul.search span.highlighted {\r\n font-weight: bold;\r\n}\r\n\r\nul.search > li {\r\n margin-bottom: 24px;\r\n}\r\n\r\n#search-results {\r\n ul {\r\n list-style: none;\r\n padding: 0;\r\n li {\r\n > a {\r\n text-decoration: none;\r\n font-size: 1.2rem;\r\n }\r\n }\r\n }\r\n}\r\n","a.download {\n &:before {\n @extend .material-icons;\n content: \"file_download\";\n position: relative;\n top: 5px;\n margin-right: 5px;\n }\n}\n\nbutton.download {\n position: sticky;\n margin-left: 1em;\n}\n",".mdl-card {\n margin: 1em 1.5em 1em 0;\n display: inline-block;\n width: 250px;\n min-height: 140px;\n padding: 18px;\n}\n.mdl-card:hover {\n box-shadow: 0 10px 20px rgba(0,0,0,0.25), 0 6px 6px rgba(0,0,0,0.22);\n color: #000;\n cursor: pointer;\n}\n.mdl-card__title {\n padding: 0 0 1em 0;\n font-size: 18px;\n color: #444;\n}\n\n.mdl-card__supporting-text {\n line-height: 1.5rem;\n padding: 0px;\n width: 100%;\n}\n\n.head-card.mdl-card {\n width: auto;\n display: block;\n max-width: 800px;\n padding: 24px;\n}\n\n.head-card > .mdl-card__title {\n padding-bottom: 0px;\n height: 60px;\n font-weight: 700;\n text-transform: uppercase;\n}\n.head-card > .mdl-card__menu {\n color: #fff;\n}\n.head-card > .mdl-card__actions {\n padding: 0;\n}\n.cards {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n}\n"]} \ No newline at end of file diff --git a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.js b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.js index 7ca6cd602aa3..9d73a56b32fa 100644 --- a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.js +++ b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.js @@ -700,6 +700,6 @@ var e=arguments[3];if(require("core-js/shim"),require("regenerator-runtime/runti },{"core-js/shim":"y1LN","regenerator-runtime/runtime":"VuXv","core-js/fn/regexp/escape":"Rlym"}],"sKvN":[function(require,module,exports) { "use strict";function t(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function e(t,e){for(var n=0;ne+s+30}},{key:"toggleNavClass",value:function(t){if(window.onclickToc)window.onclickToc=!1;else{for(var e=0,n=$(),s=0,i=t.length;s'),l=e.children("a");e.append(n.append(l));var o=e.hasClass("current")&&!l.hasClass("current"),d=e.children("ul");if(d.length){var i="globalnav-".concat(a);d.attr("id",i),d.addClass("collapse");var s=$('');o?(d.addClass("show"),s.addClass("show")):d.hide(),e.append(n.append(s.append($('keyboard_arrow_down'))))).append(d)}}),$(".mdl-layout__drawer nav .nav-toggle a").click(function(){var a=$(this),t=a.attr("data-toggle");$("ul".concat(t)).toggleClass("show").animate({height:"toggle",opacity:"toggle"}),a.parent().toggleClass("show")}),e=$(".breadcrumb"),$("#waterfall-exp").focus(function(){$(window).width()<=1024&&e.hide()}).blur(function(){$(window).width()<=1024&&e.show()});new a.default({contentSelector:".page-content .section",navSelector:".localtoc a",scrollSelector:"main",className:"current",offsetTop:64});$(".mdl-layout__content").focus(),$(".mx-card").each(function(){$(this).addClass("mdl-card mdl-shadow--2dp")}),$(".mx-card .mx-card-title").each(function(){$(this).addClass("mdl-card__title")}),$(".mx-card .mx-card-text").each(function(){$(this).addClass("mdl-card__supporting-text")}),$(".mx-card-link").each(function(){$(this).hide()}),$(".mdl-card").each(function(){$(this).click(function(){var a=$(this).find(".mx-card-link").text();return a&&(window.location=a),!0})}),$("a.download").each(function(){var a=document.createElement("button");a.className="download mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect";var t=document.createElement("i");t.className="material-icons";var e=document.createTextNode("file_download");t.appendChild(e),a.appendChild(t);var n=$(this).attr("href");a.onclick=function(){window.location=n};var l=n.split("/").slice(-1).pop();a.id=l?l.replace(".","-"):"download-button-"+$(this).index();var o=document.createElement("div");o.className="mdl-tooltip",o.setAttribute("data-mdl-for",a.id);var d=$(this).find("span.pre").map(function(){return $(this).text()}).get().join(" ");o.innerHTML=d,componentHandler.upgradeElement(a),$(this).remove();var i=$(".section h1").first();i.append(a),i.append(o)}),$(".mdl-layout").css("visibility","visible")}); +"use strict";require("../scss/sphinx_materialdesign_theme.scss"),require("./feedback"),require("material-design-lite"),require("babel-polyfill");var a=t(require("./scrollspy"));function t(a){return a&&a.__esModule?a:{default:a}}$(function(){var t,e;t=$(".mdl-layout__drawer nav").find("li"),$.each(t,function(a,t){var e=$(t),n=$(''),l=e.children("a");e.append(n.append(l));var o=e.hasClass("current")&&!l.hasClass("current"),d=e.children("ul");if(d.length){var s="globalnav-".concat(a);d.attr("id",s),d.addClass("collapse");var i=$('');o?(d.addClass("show"),i.addClass("show")):d.hide(),e.append(n.append(i.append($('keyboard_arrow_down'))))).append(d)}}),$(".mdl-layout__drawer nav .nav-toggle a").click(function(){var a=$(this),t=a.attr("data-toggle");$("ul".concat(t)).toggleClass("show").animate({height:"toggle",opacity:"toggle"}),a.parent().toggleClass("show")}),e=$(".breadcrumb"),$("#waterfall-exp").focus(function(){$(window).width()<=1024&&e.hide()}).blur(function(){$(window).width()<=1024&&e.show()});new a.default({contentSelector:".page-content .section",navSelector:".localtoc a",scrollSelector:"main",className:"current",offsetTop:64});$(".mdl-layout__content").focus(),$(".mx-card").each(function(){$(this).addClass("mdl-card mdl-shadow--2dp")}),$(".mx-card .mx-card-title").each(function(){$(this).addClass("mdl-card__title")}),$(".mx-card .mx-card-text").each(function(){$(this).addClass("mdl-card__supporting-text")}),$(".mx-card-link").each(function(){$(this).hide()}),$(".mdl-card").each(function(){$(this).click(function(){var a=$(this).find(".mx-card-link").text();return a&&(window.location=a),!0})}),$("a.download").each(function(){var a=document.createElement("button");a.className="download mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect";var t=document.createElement("i");t.className="material-icons";var e=document.createTextNode("file_download");t.appendChild(e),a.appendChild(t);var n=$(this).attr("href");a.onclick=function(){window.location=n};var l=n.split("/").slice(-1).pop();a.id=l?l.replace(".","-"):"download-button-"+$(this).index();var o=document.createElement("div");o.className="mdl-tooltip",o.setAttribute("data-mdl-for",a.id);var d=$(this).find("span.pre").map(function(){return $(this).text()}).get().join(" ");o.innerHTML=d,componentHandler.upgradeElement(a),$(this).remove();var s=$(".section h1").first();s.append(a),s.append(o)}),$(".mdl-layout").css("visibility","visible");!function(){var a,t=0,e=$("main.mdl-layout__content");e.focus();var n=$("header.mdl-layout__header"),l=n.height();e.scroll(function(){t=e.scrollTop(),al?n.addClass("scrollUp"):a>t&&!(t<=l)&&n.removeClass("scrollUp"),a=t})}()}); },{"../scss/sphinx_materialdesign_theme.scss":"BS4D","./feedback":"dMzA","material-design-lite":"vKy7","babel-polyfill":"zUFY","./scrollspy":"sKvN"}]},{},["brfV"], null) //# sourceMappingURL=/sphinx_materialdesign_theme.js.map \ No newline at end of file diff --git a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.js.map b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.js.map index 87e68e4d0f27..c8e0635f4aa7 100644 --- a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.js.map +++ b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.js.map @@ -1 +1 @@ -{"version":3,"sources":["feedback.js","ripple.js","tabs.js","layout.js","mdlComponentHandler.js","rAF.js","button.js","checkbox.js","icon-toggle.js","menu.js","progress.js","radio.js","slider.js","snackbar.js","spinner.js","switch.js","textfield.js","tooltip.js","data-table.js","../../node_modules/core-js/modules/_global.js","../../node_modules/core-js/modules/_has.js","../../node_modules/core-js/modules/_fails.js","../../node_modules/core-js/modules/_descriptors.js","../../node_modules/core-js/modules/_core.js","../../node_modules/core-js/modules/_is-object.js","../../node_modules/core-js/modules/_an-object.js","../../node_modules/core-js/modules/_dom-create.js","../../node_modules/core-js/modules/_ie8-dom-define.js","../../node_modules/core-js/modules/_to-primitive.js","../../node_modules/core-js/modules/_object-dp.js","../../node_modules/core-js/modules/_property-desc.js","../../node_modules/core-js/modules/_hide.js","../../node_modules/core-js/modules/_uid.js","../../node_modules/core-js/modules/_library.js","../../node_modules/core-js/modules/_shared.js","../../node_modules/core-js/modules/_function-to-string.js","../../node_modules/core-js/modules/_redefine.js","../../node_modules/core-js/modules/_a-function.js","../../node_modules/core-js/modules/_ctx.js","../../node_modules/core-js/modules/_export.js","../../node_modules/core-js/modules/_meta.js","../../node_modules/core-js/modules/_wks.js","../../node_modules/core-js/modules/_set-to-string-tag.js","../../node_modules/core-js/modules/_wks-ext.js","../../node_modules/core-js/modules/_wks-define.js","../../node_modules/core-js/modules/_cof.js","../../node_modules/core-js/modules/_iobject.js","../../node_modules/core-js/modules/_defined.js","../../node_modules/core-js/modules/_to-iobject.js","../../node_modules/core-js/modules/_to-integer.js","../../node_modules/core-js/modules/_to-length.js","../../node_modules/core-js/modules/_to-absolute-index.js","../../node_modules/core-js/modules/_array-includes.js","../../node_modules/core-js/modules/_shared-key.js","../../node_modules/core-js/modules/_object-keys-internal.js","../../node_modules/core-js/modules/_enum-bug-keys.js","../../node_modules/core-js/modules/_object-keys.js","../../node_modules/core-js/modules/_object-gops.js","../../node_modules/core-js/modules/_object-pie.js","../../node_modules/core-js/modules/_enum-keys.js","../../node_modules/core-js/modules/_is-array.js","../../node_modules/core-js/modules/_to-object.js","../../node_modules/core-js/modules/_object-dps.js","../../node_modules/core-js/modules/_html.js","../../node_modules/core-js/modules/_object-create.js","../../node_modules/core-js/modules/_object-gopn.js","../../node_modules/core-js/modules/_object-gopn-ext.js","../../node_modules/core-js/modules/_object-gopd.js","../../node_modules/core-js/modules/es6.symbol.js","../../node_modules/core-js/modules/es6.object.create.js","../../node_modules/core-js/modules/es6.object.define-property.js","../../node_modules/core-js/modules/es6.object.define-properties.js","../../node_modules/core-js/modules/_object-sap.js","../../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","../../node_modules/core-js/modules/_object-gpo.js","../../node_modules/core-js/modules/es6.object.get-prototype-of.js","../../node_modules/core-js/modules/es6.object.keys.js","../../node_modules/core-js/modules/es6.object.get-own-property-names.js","../../node_modules/core-js/modules/es6.object.freeze.js","../../node_modules/core-js/modules/es6.object.seal.js","../../node_modules/core-js/modules/es6.object.prevent-extensions.js","../../node_modules/core-js/modules/es6.object.is-frozen.js","../../node_modules/core-js/modules/es6.object.is-sealed.js","../../node_modules/core-js/modules/es6.object.is-extensible.js","../../node_modules/core-js/modules/_object-assign.js","../../node_modules/core-js/modules/es6.object.assign.js","../../node_modules/core-js/modules/_same-value.js","../../node_modules/core-js/modules/es6.object.is.js","../../node_modules/core-js/modules/_set-proto.js","../../node_modules/core-js/modules/es6.object.set-prototype-of.js","../../node_modules/core-js/modules/_classof.js","../../node_modules/core-js/modules/es6.object.to-string.js","../../node_modules/core-js/modules/_invoke.js","../../node_modules/core-js/modules/_bind.js","../../node_modules/core-js/modules/es6.function.bind.js","../../node_modules/core-js/modules/es6.function.name.js","../../node_modules/core-js/modules/es6.function.has-instance.js","../../node_modules/core-js/modules/_string-ws.js","../../node_modules/core-js/modules/_string-trim.js","../../node_modules/core-js/modules/_parse-int.js","../../node_modules/core-js/modules/es6.parse-int.js","../../node_modules/core-js/modules/_parse-float.js","../../node_modules/core-js/modules/es6.parse-float.js","../../node_modules/core-js/modules/_inherit-if-required.js","../../node_modules/core-js/modules/es6.number.constructor.js","../../node_modules/core-js/modules/_a-number-value.js","../../node_modules/core-js/modules/_string-repeat.js","../../node_modules/core-js/modules/es6.number.to-fixed.js","../../node_modules/core-js/modules/es6.number.to-precision.js","../../node_modules/core-js/modules/es6.number.epsilon.js","../../node_modules/core-js/modules/es6.number.is-finite.js","../../node_modules/core-js/modules/_is-integer.js","../../node_modules/core-js/modules/es6.number.is-integer.js","../../node_modules/core-js/modules/es6.number.is-nan.js","../../node_modules/core-js/modules/es6.number.is-safe-integer.js","../../node_modules/core-js/modules/es6.number.max-safe-integer.js","../../node_modules/core-js/modules/es6.number.min-safe-integer.js","../../node_modules/core-js/modules/es6.number.parse-float.js","../../node_modules/core-js/modules/es6.number.parse-int.js","../../node_modules/core-js/modules/_math-log1p.js","../../node_modules/core-js/modules/es6.math.acosh.js","../../node_modules/core-js/modules/es6.math.asinh.js","../../node_modules/core-js/modules/es6.math.atanh.js","../../node_modules/core-js/modules/_math-sign.js","../../node_modules/core-js/modules/es6.math.cbrt.js","../../node_modules/core-js/modules/es6.math.clz32.js","../../node_modules/core-js/modules/es6.math.cosh.js","../../node_modules/core-js/modules/_math-expm1.js","../../node_modules/core-js/modules/es6.math.expm1.js","../../node_modules/core-js/modules/_math-fround.js","../../node_modules/core-js/modules/es6.math.fround.js","../../node_modules/core-js/modules/es6.math.hypot.js","../../node_modules/core-js/modules/es6.math.imul.js","../../node_modules/core-js/modules/es6.math.log10.js","../../node_modules/core-js/modules/es6.math.log1p.js","../../node_modules/core-js/modules/es6.math.log2.js","../../node_modules/core-js/modules/es6.math.sign.js","../../node_modules/core-js/modules/es6.math.sinh.js","../../node_modules/core-js/modules/es6.math.tanh.js","../../node_modules/core-js/modules/es6.math.trunc.js","../../node_modules/core-js/modules/es6.string.from-code-point.js","../../node_modules/core-js/modules/es6.string.raw.js","../../node_modules/core-js/modules/es6.string.trim.js","../../node_modules/core-js/modules/_string-at.js","../../node_modules/core-js/modules/_iterators.js","../../node_modules/core-js/modules/_iter-create.js","../../node_modules/core-js/modules/_iter-define.js","../../node_modules/core-js/modules/es6.string.iterator.js","../../node_modules/core-js/modules/es6.string.code-point-at.js","../../node_modules/core-js/modules/_is-regexp.js","../../node_modules/core-js/modules/_string-context.js","../../node_modules/core-js/modules/_fails-is-regexp.js","../../node_modules/core-js/modules/es6.string.ends-with.js","../../node_modules/core-js/modules/es6.string.includes.js","../../node_modules/core-js/modules/es6.string.repeat.js","../../node_modules/core-js/modules/es6.string.starts-with.js","../../node_modules/core-js/modules/_string-html.js","../../node_modules/core-js/modules/es6.string.anchor.js","../../node_modules/core-js/modules/es6.string.big.js","../../node_modules/core-js/modules/es6.string.blink.js","../../node_modules/core-js/modules/es6.string.bold.js","../../node_modules/core-js/modules/es6.string.fixed.js","../../node_modules/core-js/modules/es6.string.fontcolor.js","../../node_modules/core-js/modules/es6.string.fontsize.js","../../node_modules/core-js/modules/es6.string.italics.js","../../node_modules/core-js/modules/es6.string.link.js","../../node_modules/core-js/modules/es6.string.small.js","../../node_modules/core-js/modules/es6.string.strike.js","../../node_modules/core-js/modules/es6.string.sub.js","../../node_modules/core-js/modules/es6.string.sup.js","../../node_modules/core-js/modules/es6.date.now.js","../../node_modules/core-js/modules/es6.date.to-json.js","../../node_modules/core-js/modules/_date-to-iso-string.js","../../node_modules/core-js/modules/es6.date.to-iso-string.js","../../node_modules/core-js/modules/es6.date.to-string.js","../../node_modules/core-js/modules/_date-to-primitive.js","../../node_modules/core-js/modules/es6.date.to-primitive.js","../../node_modules/core-js/modules/es6.array.is-array.js","../../node_modules/core-js/modules/_iter-call.js","../../node_modules/core-js/modules/_is-array-iter.js","../../node_modules/core-js/modules/_create-property.js","../../node_modules/core-js/modules/core.get-iterator-method.js","../../node_modules/core-js/modules/_iter-detect.js","../../node_modules/core-js/modules/es6.array.from.js","../../node_modules/core-js/modules/es6.array.of.js","../../node_modules/core-js/modules/_strict-method.js","../../node_modules/core-js/modules/es6.array.join.js","../../node_modules/core-js/modules/es6.array.slice.js","../../node_modules/core-js/modules/es6.array.sort.js","../../node_modules/core-js/modules/_array-species-constructor.js","../../node_modules/core-js/modules/_array-species-create.js","../../node_modules/core-js/modules/_array-methods.js","../../node_modules/core-js/modules/es6.array.for-each.js","../../node_modules/core-js/modules/es6.array.map.js","../../node_modules/core-js/modules/es6.array.filter.js","../../node_modules/core-js/modules/es6.array.some.js","../../node_modules/core-js/modules/es6.array.every.js","../../node_modules/core-js/modules/_array-reduce.js","../../node_modules/core-js/modules/es6.array.reduce.js","../../node_modules/core-js/modules/es6.array.reduce-right.js","../../node_modules/core-js/modules/es6.array.index-of.js","../../node_modules/core-js/modules/es6.array.last-index-of.js","../../node_modules/core-js/modules/_array-copy-within.js","../../node_modules/core-js/modules/_add-to-unscopables.js","../../node_modules/core-js/modules/es6.array.copy-within.js","../../node_modules/core-js/modules/_array-fill.js","../../node_modules/core-js/modules/es6.array.fill.js","../../node_modules/core-js/modules/es6.array.find.js","../../node_modules/core-js/modules/es6.array.find-index.js","../../node_modules/core-js/modules/_set-species.js","../../node_modules/core-js/modules/es6.array.species.js","../../node_modules/core-js/modules/_iter-step.js","../../node_modules/core-js/modules/es6.array.iterator.js","../../node_modules/core-js/modules/_flags.js","../../node_modules/core-js/modules/es6.regexp.constructor.js","../../node_modules/core-js/modules/_regexp-exec.js","../../node_modules/core-js/modules/es6.regexp.exec.js","../../node_modules/core-js/modules/es6.regexp.flags.js","../../node_modules/core-js/modules/es6.regexp.to-string.js","../../node_modules/core-js/modules/_advance-string-index.js","../../node_modules/core-js/modules/_regexp-exec-abstract.js","../../node_modules/core-js/modules/_fix-re-wks.js","../../node_modules/core-js/modules/es6.regexp.match.js","../../node_modules/core-js/modules/es6.regexp.replace.js","../../node_modules/core-js/modules/es6.regexp.search.js","../../node_modules/core-js/modules/_species-constructor.js","../../node_modules/core-js/modules/es6.regexp.split.js","../../node_modules/core-js/modules/_an-instance.js","../../node_modules/core-js/modules/_for-of.js","../../node_modules/core-js/modules/_task.js","../../node_modules/core-js/modules/_microtask.js","../../node_modules/core-js/modules/_new-promise-capability.js","../../node_modules/core-js/modules/_perform.js","../../node_modules/core-js/modules/_user-agent.js","../../node_modules/core-js/modules/_promise-resolve.js","../../node_modules/core-js/modules/_redefine-all.js","../../node_modules/core-js/modules/es6.promise.js","../../node_modules/core-js/modules/_validate-collection.js","../../node_modules/core-js/modules/_collection-strong.js","../../node_modules/core-js/modules/_collection.js","../../node_modules/core-js/modules/es6.map.js","../../node_modules/core-js/modules/es6.set.js","../../node_modules/core-js/modules/_collection-weak.js","../../node_modules/core-js/modules/es6.weak-map.js","../../node_modules/core-js/modules/es6.weak-set.js","../../node_modules/core-js/modules/_typed.js","../../node_modules/core-js/modules/_to-index.js","../../node_modules/core-js/modules/_typed-buffer.js","../../node_modules/core-js/modules/es6.typed.array-buffer.js","../../node_modules/core-js/modules/es6.typed.data-view.js","../../node_modules/core-js/modules/_typed-array.js","../../node_modules/core-js/modules/es6.typed.int8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","../../node_modules/core-js/modules/es6.typed.int16-array.js","../../node_modules/core-js/modules/es6.typed.uint16-array.js","../../node_modules/core-js/modules/es6.typed.int32-array.js","../../node_modules/core-js/modules/es6.typed.uint32-array.js","../../node_modules/core-js/modules/es6.typed.float32-array.js","../../node_modules/core-js/modules/es6.typed.float64-array.js","../../node_modules/core-js/modules/es6.reflect.apply.js","../../node_modules/core-js/modules/es6.reflect.construct.js","../../node_modules/core-js/modules/es6.reflect.define-property.js","../../node_modules/core-js/modules/es6.reflect.delete-property.js","../../node_modules/core-js/modules/es6.reflect.enumerate.js","../../node_modules/core-js/modules/es6.reflect.get.js","../../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.reflect.get-prototype-of.js","../../node_modules/core-js/modules/es6.reflect.has.js","../../node_modules/core-js/modules/es6.reflect.is-extensible.js","../../node_modules/core-js/modules/_own-keys.js","../../node_modules/core-js/modules/es6.reflect.own-keys.js","../../node_modules/core-js/modules/es6.reflect.prevent-extensions.js","../../node_modules/core-js/modules/es6.reflect.set.js","../../node_modules/core-js/modules/es6.reflect.set-prototype-of.js","../../node_modules/core-js/modules/es7.array.includes.js","../../node_modules/core-js/modules/_flatten-into-array.js","../../node_modules/core-js/modules/es7.array.flat-map.js","../../node_modules/core-js/modules/es7.array.flatten.js","../../node_modules/core-js/modules/es7.string.at.js","../../node_modules/core-js/modules/_string-pad.js","../../node_modules/core-js/modules/es7.string.pad-start.js","../../node_modules/core-js/modules/es7.string.pad-end.js","../../node_modules/core-js/modules/es7.string.trim-left.js","../../node_modules/core-js/modules/es7.string.trim-right.js","../../node_modules/core-js/modules/es7.string.match-all.js","../../node_modules/core-js/modules/es7.symbol.async-iterator.js","../../node_modules/core-js/modules/es7.symbol.observable.js","../../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","../../node_modules/core-js/modules/_object-to-array.js","../../node_modules/core-js/modules/es7.object.values.js","../../node_modules/core-js/modules/es7.object.entries.js","../../node_modules/core-js/modules/_object-forced-pam.js","../../node_modules/core-js/modules/es7.object.define-getter.js","../../node_modules/core-js/modules/es7.object.define-setter.js","../../node_modules/core-js/modules/es7.object.lookup-getter.js","../../node_modules/core-js/modules/es7.object.lookup-setter.js","../../node_modules/core-js/modules/_array-from-iterable.js","../../node_modules/core-js/modules/_collection-to-json.js","../../node_modules/core-js/modules/es7.map.to-json.js","../../node_modules/core-js/modules/es7.set.to-json.js","../../node_modules/core-js/modules/_set-collection-of.js","../../node_modules/core-js/modules/es7.map.of.js","../../node_modules/core-js/modules/es7.set.of.js","../../node_modules/core-js/modules/es7.weak-map.of.js","../../node_modules/core-js/modules/es7.weak-set.of.js","../../node_modules/core-js/modules/_set-collection-from.js","../../node_modules/core-js/modules/es7.map.from.js","../../node_modules/core-js/modules/es7.set.from.js","../../node_modules/core-js/modules/es7.weak-map.from.js","../../node_modules/core-js/modules/es7.weak-set.from.js","../../node_modules/core-js/modules/es7.global.js","../../node_modules/core-js/modules/es7.system.global.js","../../node_modules/core-js/modules/es7.error.is-error.js","../../node_modules/core-js/modules/es7.math.clamp.js","../../node_modules/core-js/modules/es7.math.deg-per-rad.js","../../node_modules/core-js/modules/es7.math.degrees.js","../../node_modules/core-js/modules/_math-scale.js","../../node_modules/core-js/modules/es7.math.fscale.js","../../node_modules/core-js/modules/es7.math.iaddh.js","../../node_modules/core-js/modules/es7.math.isubh.js","../../node_modules/core-js/modules/es7.math.imulh.js","../../node_modules/core-js/modules/es7.math.rad-per-deg.js","../../node_modules/core-js/modules/es7.math.radians.js","../../node_modules/core-js/modules/es7.math.scale.js","../../node_modules/core-js/modules/es7.math.umulh.js","../../node_modules/core-js/modules/es7.math.signbit.js","../../node_modules/core-js/modules/es7.promise.finally.js","../../node_modules/core-js/modules/es7.promise.try.js","../../node_modules/core-js/modules/_metadata.js","../../node_modules/core-js/modules/es7.reflect.define-metadata.js","../../node_modules/core-js/modules/es7.reflect.delete-metadata.js","../../node_modules/core-js/modules/es7.reflect.get-metadata.js","../../node_modules/core-js/modules/es7.reflect.get-metadata-keys.js","../../node_modules/core-js/modules/es7.reflect.get-own-metadata.js","../../node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js","../../node_modules/core-js/modules/es7.reflect.has-metadata.js","../../node_modules/core-js/modules/es7.reflect.has-own-metadata.js","../../node_modules/core-js/modules/es7.reflect.metadata.js","../../node_modules/core-js/modules/es7.asap.js","../../node_modules/core-js/modules/es7.observable.js","../../node_modules/core-js/modules/web.timers.js","../../node_modules/core-js/modules/web.immediate.js","../../node_modules/core-js/modules/web.dom.iterable.js","../../node_modules/core-js/shim.js","../../node_modules/regenerator-runtime/runtime.js","../../node_modules/core-js/modules/_replacer.js","../../node_modules/core-js/modules/core.regexp.escape.js","../../node_modules/core-js/fn/regexp/escape.js","../../node_modules/babel-polyfill/lib/index.js","scrollspy.js","sphinx_materialdesign_theme.js"],"names":["$","document","ready","on","remove","show","ga","hitType","eventCategory","eventAction","attr","eventLabel","window","location","pathname","eventValue","MaterialTab","tab","ctx","element_","classList","contains","CssClasses_","MDL_JS_RIPPLE_EFFECT","rippleContainer","createElement","add","MDL_RIPPLE_CONTAINER","ripple","MDL_RIPPLE","appendChild","addEventListener","e","getAttribute","charAt","preventDefault","href","split","panel","querySelector","resetTabState_","resetPanelState_","ACTIVE_CLASS","MaterialLayoutTab","tabs","panels","layout","selectTab","content_","IS_ACTIVE","tabBar_","JS_RIPPLE_EFFECT","RIPPLE_CONTAINER","RIPPLE","TAB_MANUAL_SWITCH","componentHandler","upgradeDom","optJsClass","optCssClass","upgradeElement","element","upgradeElements","elements","upgradeAllRegistered","registerUpgradedCallback","jsClass","callback","register","config","downgradeElements","nodes","findRegisteredClass_","name","optReplace","i","registeredComponents_","length","className","getUpgradedListOfElement_","dataUpgraded","isElementUpgraded_","upgradedList","indexOf","createEvent_","eventType","bubbles","cancelable","CustomEvent","ev","createEvent","initEvent","upgradeDomInternal","cssClass","registeredClass","querySelectorAll","n","upgradeElementInternal","Element","Error","upgradingEv","dispatchEvent","defaultPrevented","classesToUpgrade","push","forEach","component","setAttribute","join","instance","classConstructor","componentConfigProperty_","createdComponents_","j","m","callbacks","widget","upgradedEv","deconstructComponentInternal","componentIndex","splice","upgrades","componentPlace","classAsString","upgradeElementsInternal","Array","isArray","prototype","slice","call","HTMLElement","children","upgradeAllRegisteredInternal","registerUpgradedCallbackInternal","regClass","registerInternal","widgetMissing","newConfig","constructor","item","hasOwnProperty","downgradeNodesInternal","downgradeNode","node","filter","NodeList","Node","ComponentConfigPublic","ComponentConfig","Component","documentElement","Date","now","getTime","vendors","requestAnimationFrame","vp","cancelAnimationFrame","test","navigator","userAgent","lastTime","nextTime","Math","max","setTimeout","clearTimeout","MaterialButton","this","init","Constant_","RIPPLE_EFFECT","blurHandler_","event","blur","disable","disabled","enable","rippleElement_","boundRippleBlurHandler","bind","boundButtonBlurHandler","MaterialCheckbox","TINY_TIMEOUT","INPUT","BOX_OUTLINE","FOCUS_HELPER","TICK_OUTLINE","RIPPLE_IGNORE_EVENTS","RIPPLE_CENTER","IS_FOCUSED","IS_DISABLED","IS_CHECKED","IS_UPGRADED","onChange_","updateClasses_","onFocus_","onBlur_","onMouseUp_","blur_","checkDisabled","checkToggleState","inputElement_","checked","check","uncheck","boxOutline","tickContainer","tickOutline","rippleContainerElement_","boundRippleMouseUp","boundInputOnChange","boundInputOnFocus","boundInputOnBlur","boundElementMouseUp","MaterialIconToggle","boundElementOnMouseUp","MaterialMenu","TRANSITION_DURATION_SECONDS","TRANSITION_DURATION_FRACTION","CLOSE_TIMEOUT","Keycodes_","ENTER","ESCAPE","SPACE","UP_ARROW","DOWN_ARROW","CONTAINER","OUTLINE","ITEM","ITEM_RIPPLE_CONTAINER","IS_VISIBLE","IS_ANIMATING","BOTTOM_LEFT","BOTTOM_RIGHT","TOP_LEFT","TOP_RIGHT","UNALIGNED","container","parentElement","insertBefore","removeChild","container_","outline","outline_","forElId","forEl","getElementById","forElement_","handleForClick_","handleForKeyboardEvent_","items","boundItemKeydown_","handleItemKeyboardEvent_","boundItemClick_","handleItemClick_","tabIndex","evt","rect","getBoundingClientRect","forRect","style","right","top","offsetTop","offsetHeight","left","offsetLeft","bottom","toggle","keyCode","focus","currentIndex","target","MouseEvent","click","hide","hasAttribute","stopPropagation","closing_","applyClip_","height","width","clip","removeAnimationEndListener_","addAnimationEndListener_","transitionDuration","itemDelay","transitionDelay","parentNode","removeEventListener","removeProperty","MaterialProgress","INDETERMINATE_CLASS","setProgress","p","progressbar_","setBuffer","bufferbar_","auxbar_","el","MaterialRadio","JS_RADIO","RADIO_BTN","RADIO_OUTER_CIRCLE","RADIO_INNER_CIRCLE","radios","getElementsByClassName","btnElement_","onMouseup_","boundChangeHandler_","boundFocusHandler_","boundBlurHandler_","boundMouseUpHandler_","outerCircle","innerCircle","MaterialSlider","isIE_","msPointerEnabled","IE_CONTAINER","SLIDER_CONTAINER","BACKGROUND_FLEX","BACKGROUND_LOWER","BACKGROUND_UPPER","IS_LOWEST_VALUE","onInput_","updateValueStyles_","onContainerMouseDown_","newEvent","buttons","clientX","clientY","y","fraction","value","min","backgroundLower_","flex","webkitFlex","backgroundUpper_","change","containerIE","backgroundFlex","boundInputHandler","boundChangeHandler","boundMouseUpHandler","boundContainerMouseDownHandler","MaterialSnackbar","textElement_","cssClasses_","MESSAGE","actionElement_","ACTION","active","actionHandler_","undefined","message_","actionText_","queuedNotifications_","setActionHidden_","ANIMATION_LENGTH","SNACKBAR","ACTIVE","displaySnackbar_","textContent","cleanup_","timeout_","showSnackbar","data","checkQueue_","shift","Boolean","removeAttribute","MaterialSpinner","MDL_SPINNER_LAYER_COUNT","MDL_SPINNER_LAYER","MDL_SPINNER_CIRCLE_CLIPPER","MDL_SPINNER_CIRCLE","MDL_SPINNER_GAP_PATCH","MDL_SPINNER_LEFT","MDL_SPINNER_RIGHT","createLayer","index","layer","leftClipper","gapPatch","rightClipper","circleOwners","circle","stop","start","MaterialSwitch","TRACK","THUMB","off","track","thumb","focusHelper","boundFocusHandler","boundBlurHandler","MaterialTabs","TAB_CLASS","PANEL_CLASS","UPGRADED_CLASS","MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS","initTabs_","tabs_","panels_","k","MaterialTextfield","maxRows","NO_MAX_ROWS","MAX_ROWS_ATTRIBUTE","LABEL","IS_DIRTY","IS_INVALID","HAS_PLACEHOLDER","onKeyDown_","currentRowCount","onReset_","checkValidity","checkDirty","checkFocus","input_","validity","valid","label_","parseInt","isNaN","boundUpdateClassesHandler","boundResetHandler","boundKeyDownHandler","invalid","MaterialTooltip","BOTTOM","LEFT","RIGHT","TOP","handleMouseEnter_","props","marginLeft","offsetWidth","marginTop","hideTooltip_","boundMouseEnterHandler","boundMouseLeaveAndScrollHandler","MaterialLayout","MAX_WIDTH","TAB_SCROLL_PIXELS","RESIZE_TIMEOUT","MENU_ICON","CHEVRON_LEFT","CHEVRON_RIGHT","Mode_","STANDARD","SEAMED","WATERFALL","SCROLL","HEADER","DRAWER","CONTENT","DRAWER_BTN","ICON","HEADER_SEAMED","HEADER_WATERFALL","HEADER_SCROLL","FIXED_HEADER","OBFUSCATOR","TAB_BAR","TAB_CONTAINER","TAB","TAB_BAR_BUTTON","TAB_BAR_LEFT_BUTTON","TAB_BAR_RIGHT_BUTTON","PANEL","HAS_DRAWER","HAS_TABS","HAS_SCROLLING_HEADER","CASTING_SHADOW","IS_COMPACT","IS_SMALL_SCREEN","IS_DRAWER_OPEN","ON_LARGE_SCREEN","ON_SMALL_SCREEN","contentScrollHandler_","header_","headerVisible","scrollTop","keyboardEventHandler_","drawer_","toggleDrawer","screenSizeHandler_","screenSizeMediaQuery_","matches","obfuscator_","drawerToggleHandler_","type","headerTransitionEndHandler_","headerClickHandler_","tabBar","drawerButton","focusedElement","directChildren","childNodes","numChildren","c","child","persisted","overflowY","mode","drawerButtonIcon","innerHTML","firstChild","obfuscator","matchMedia","addListener","tabContainer","leftButton","leftButtonIcon","scrollLeft","rightButton","rightButtonIcon","tabUpdateHandler","scrollWidth","windowResizeHandler","resizeTimeoutId_","MaterialDataTable","DATA_TABLE","SELECTABLE","SELECT_ELEMENT","IS_SELECTED","selectRow_","checkbox","row","opt_rows","createCheckbox_","label","labelClasses","firstHeader","bodyRows","footRows","rows","concat","th","headerCheckbox","firstCell","td","nodeName","toUpperCase","rowCheckbox","MaterialRipple","INITIAL_SCALE","INITIAL_SIZE","INITIAL_OPACITY","FINAL_OPACITY","FINAL_SCALE","RIPPLE_EFFECT_IGNORE_EVENTS","downHandler_","boundHeight","boundWidth","rippleSize_","sqrt","ignoringMouseDown_","frameCount","getFrameCount","setFrameCount","x","bound","currentTarget","round","touches","setRippleXY","setRippleStyles","animFrameHandler","upHandler_","detail","recentering","frameCount_","x_","y_","boundDownHandler","boundUpHandler","fC","getRippleElement","newX","newY","transformString","scale","offset","webkitTransform","msTransform","transform","ScrollSpy","args","doc","nav","navSelector","win","winHeight","innerHeight","scrollElement","scrollSelector","contents","getContents","contentSelector","attachEvent","scrollTimer","resizeTimer","spy","tagName","onclickToc","navElement","targets","getViewState","toggleNavClass","elementListInView","current","isView","subHeaderRect","headerHeight","scrollBottom","elementTop","elementBottom","maxDepth","maxDepthElement","tempDepth","getTagDepth","id","find","get","reconstructionDrawerGlobalToc","$lists","$breadcrumb","each","li","$li","$linkWrapper","$link","append","isCurrent","hasClass","$ul","ulId","addClass","$toggleWrapper","$toggle","toggleClass","animate","opacity","parent","url","text","button","icon","createTextNode","link","onclick","fileName","pop","replace","hint","hintText","map","header","first","css"],"mappings":"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","file":"sphinx_materialdesign_theme.js","sourceRoot":"../../src/js","sourcesContent":["/*!\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\n$(document).ready(function() {\n $(\".feedback-answer\").on(\"click\", function () {\n $(\".feedback-question\").remove();\n $(\".feedback-answer-container\").remove();\n $(\".feedback-thank-you\").show();\n ga(\"send\", {\n hitType: \"event\",\n eventCategory: \"Did this page help you?\",\n eventAction: $(this).attr(\"data-response\"),\n eventLabel: window.location.pathname || \"unknown\",\n eventValue: $(this).attr(\"data-response\") === \"yes\" ? 1 : 0\n });\n });\n});\n","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Ripple MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialRipple = function MaterialRipple(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialRipple'] = MaterialRipple;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialRipple.prototype.Constant_ = {\n INITIAL_SCALE: 'scale(0.0001, 0.0001)',\n INITIAL_SIZE: '1px',\n INITIAL_OPACITY: '0.4',\n FINAL_OPACITY: '0',\n FINAL_SCALE: ''\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialRipple.prototype.CssClasses_ = {\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE_EFFECT_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE: 'mdl-ripple',\n IS_ANIMATING: 'is-animating',\n IS_VISIBLE: 'is-visible'\n};\n/**\n * Handle mouse / finger down on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRipple.prototype.downHandler_ = function (event) {\n if (!this.rippleElement_.style.width && !this.rippleElement_.style.height) {\n var rect = this.element_.getBoundingClientRect();\n this.boundHeight = rect.height;\n this.boundWidth = rect.width;\n this.rippleSize_ = Math.sqrt(rect.width * rect.width + rect.height * rect.height) * 2 + 2;\n this.rippleElement_.style.width = this.rippleSize_ + 'px';\n this.rippleElement_.style.height = this.rippleSize_ + 'px';\n }\n this.rippleElement_.classList.add(this.CssClasses_.IS_VISIBLE);\n if (event.type === 'mousedown' && this.ignoringMouseDown_) {\n this.ignoringMouseDown_ = false;\n } else {\n if (event.type === 'touchstart') {\n this.ignoringMouseDown_ = true;\n }\n var frameCount = this.getFrameCount();\n if (frameCount > 0) {\n return;\n }\n this.setFrameCount(1);\n var bound = event.currentTarget.getBoundingClientRect();\n var x;\n var y;\n // Check if we are handling a keyboard click.\n if (event.clientX === 0 && event.clientY === 0) {\n x = Math.round(bound.width / 2);\n y = Math.round(bound.height / 2);\n } else {\n var clientX = event.clientX !== undefined ? event.clientX : event.touches[0].clientX;\n var clientY = event.clientY !== undefined ? event.clientY : event.touches[0].clientY;\n x = Math.round(clientX - bound.left);\n y = Math.round(clientY - bound.top);\n }\n this.setRippleXY(x, y);\n this.setRippleStyles(true);\n window.requestAnimationFrame(this.animFrameHandler.bind(this));\n }\n};\n/**\n * Handle mouse / finger up on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRipple.prototype.upHandler_ = function (event) {\n // Don't fire for the artificial \"mouseup\" generated by a double-click.\n if (event && event.detail !== 2) {\n // Allow a repaint to occur before removing this class, so the animation\n // shows for tap events, which seem to trigger a mouseup too soon after\n // mousedown.\n window.setTimeout(function () {\n this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE);\n }.bind(this), 0);\n }\n};\n/**\n * Initialize element.\n */\nMaterialRipple.prototype.init = function () {\n if (this.element_) {\n var recentering = this.element_.classList.contains(this.CssClasses_.RIPPLE_CENTER);\n if (!this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT_IGNORE_EVENTS)) {\n this.rippleElement_ = this.element_.querySelector('.' + this.CssClasses_.RIPPLE);\n this.frameCount_ = 0;\n this.rippleSize_ = 0;\n this.x_ = 0;\n this.y_ = 0;\n // Touch start produces a compat mouse down event, which would cause a\n // second ripples. To avoid that, we use this property to ignore the first\n // mouse down after a touch start.\n this.ignoringMouseDown_ = false;\n this.boundDownHandler = this.downHandler_.bind(this);\n this.element_.addEventListener('mousedown', this.boundDownHandler);\n this.element_.addEventListener('touchstart', this.boundDownHandler);\n this.boundUpHandler = this.upHandler_.bind(this);\n this.element_.addEventListener('mouseup', this.boundUpHandler);\n this.element_.addEventListener('mouseleave', this.boundUpHandler);\n this.element_.addEventListener('touchend', this.boundUpHandler);\n this.element_.addEventListener('blur', this.boundUpHandler);\n /**\n * Getter for frameCount_.\n * @return {number} the frame count.\n */\n this.getFrameCount = function () {\n return this.frameCount_;\n };\n /**\n * Setter for frameCount_.\n * @param {number} fC the frame count.\n */\n this.setFrameCount = function (fC) {\n this.frameCount_ = fC;\n };\n /**\n * Getter for rippleElement_.\n * @return {Element} the ripple element.\n */\n this.getRippleElement = function () {\n return this.rippleElement_;\n };\n /**\n * Sets the ripple X and Y coordinates.\n * @param {number} newX the new X coordinate\n * @param {number} newY the new Y coordinate\n */\n this.setRippleXY = function (newX, newY) {\n this.x_ = newX;\n this.y_ = newY;\n };\n /**\n * Sets the ripple styles.\n * @param {boolean} start whether or not this is the start frame.\n */\n this.setRippleStyles = function (start) {\n if (this.rippleElement_ !== null) {\n var transformString;\n var scale;\n var size;\n var offset = 'translate(' + this.x_ + 'px, ' + this.y_ + 'px)';\n if (start) {\n scale = this.Constant_.INITIAL_SCALE;\n size = this.Constant_.INITIAL_SIZE;\n } else {\n scale = this.Constant_.FINAL_SCALE;\n size = this.rippleSize_ + 'px';\n if (recentering) {\n offset = 'translate(' + this.boundWidth / 2 + 'px, ' + this.boundHeight / 2 + 'px)';\n }\n }\n transformString = 'translate(-50%, -50%) ' + offset + scale;\n this.rippleElement_.style.webkitTransform = transformString;\n this.rippleElement_.style.msTransform = transformString;\n this.rippleElement_.style.transform = transformString;\n if (start) {\n this.rippleElement_.classList.remove(this.CssClasses_.IS_ANIMATING);\n } else {\n this.rippleElement_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n }\n };\n /**\n * Handles an animation frame.\n */\n this.animFrameHandler = function () {\n if (this.frameCount_-- > 0) {\n window.requestAnimationFrame(this.animFrameHandler.bind(this));\n } else {\n this.setRippleStyles(false);\n }\n };\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialRipple,\n classAsString: 'MaterialRipple',\n cssClass: 'mdl-js-ripple-effect',\n widget: false\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Tabs MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {Element} element The element that will be upgraded.\n */\nvar MaterialTabs = function MaterialTabs(element) {\n // Stores the HTML element.\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialTabs'] = MaterialTabs;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string}\n * @private\n */\nMaterialTabs.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialTabs.prototype.CssClasses_ = {\n TAB_CLASS: 'mdl-tabs__tab',\n PANEL_CLASS: 'mdl-tabs__panel',\n ACTIVE_CLASS: 'is-active',\n UPGRADED_CLASS: 'is-upgraded',\n MDL_JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n MDL_RIPPLE_CONTAINER: 'mdl-tabs__ripple-container',\n MDL_RIPPLE: 'mdl-ripple',\n MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events'\n};\n/**\n * Handle clicks to a tabs component\n *\n * @private\n */\nMaterialTabs.prototype.initTabs_ = function () {\n if (this.element_.classList.contains(this.CssClasses_.MDL_JS_RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS);\n }\n // Select element tabs, document panels\n this.tabs_ = this.element_.querySelectorAll('.' + this.CssClasses_.TAB_CLASS);\n this.panels_ = this.element_.querySelectorAll('.' + this.CssClasses_.PANEL_CLASS);\n // Create new tabs for each tab element\n for (var i = 0; i < this.tabs_.length; i++) {\n new MaterialTab(this.tabs_[i], this);\n }\n this.element_.classList.add(this.CssClasses_.UPGRADED_CLASS);\n};\n/**\n * Reset tab state, dropping active classes\n *\n * @private\n */\nMaterialTabs.prototype.resetTabState_ = function () {\n for (var k = 0; k < this.tabs_.length; k++) {\n this.tabs_[k].classList.remove(this.CssClasses_.ACTIVE_CLASS);\n }\n};\n/**\n * Reset panel state, droping active classes\n *\n * @private\n */\nMaterialTabs.prototype.resetPanelState_ = function () {\n for (var j = 0; j < this.panels_.length; j++) {\n this.panels_[j].classList.remove(this.CssClasses_.ACTIVE_CLASS);\n }\n};\n/**\n * Initialize element.\n */\nMaterialTabs.prototype.init = function () {\n if (this.element_) {\n this.initTabs_();\n }\n};\n/**\n * Constructor for an individual tab.\n *\n * @constructor\n * @param {Element} tab The HTML element for the tab.\n * @param {MaterialTabs} ctx The MaterialTabs object that owns the tab.\n */\nfunction MaterialTab(tab, ctx) {\n if (tab) {\n if (ctx.element_.classList.contains(ctx.CssClasses_.MDL_JS_RIPPLE_EFFECT)) {\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(ctx.CssClasses_.MDL_RIPPLE_CONTAINER);\n rippleContainer.classList.add(ctx.CssClasses_.MDL_JS_RIPPLE_EFFECT);\n var ripple = document.createElement('span');\n ripple.classList.add(ctx.CssClasses_.MDL_RIPPLE);\n rippleContainer.appendChild(ripple);\n tab.appendChild(rippleContainer);\n }\n tab.addEventListener('click', function (e) {\n if (tab.getAttribute('href').charAt(0) === '#') {\n e.preventDefault();\n var href = tab.href.split('#')[1];\n var panel = ctx.element_.querySelector('#' + href);\n ctx.resetTabState_();\n ctx.resetPanelState_();\n tab.classList.add(ctx.CssClasses_.ACTIVE_CLASS);\n panel.classList.add(ctx.CssClasses_.ACTIVE_CLASS);\n }\n });\n }\n}\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTabs,\n classAsString: 'MaterialTabs',\n cssClass: 'mdl-js-tabs'\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Layout MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialLayout = function MaterialLayout(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialLayout'] = MaterialLayout;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialLayout.prototype.Constant_ = {\n MAX_WIDTH: '(max-width: 1024px)',\n TAB_SCROLL_PIXELS: 100,\n RESIZE_TIMEOUT: 100,\n MENU_ICON: '',\n CHEVRON_LEFT: 'chevron_left',\n CHEVRON_RIGHT: 'chevron_right'\n};\n/**\n * Keycodes, for code readability.\n *\n * @enum {number}\n * @private\n */\nMaterialLayout.prototype.Keycodes_ = {\n ENTER: 13,\n ESCAPE: 27,\n SPACE: 32\n};\n/**\n * Modes.\n *\n * @enum {number}\n * @private\n */\nMaterialLayout.prototype.Mode_ = {\n STANDARD: 0,\n SEAMED: 1,\n WATERFALL: 2,\n SCROLL: 3\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialLayout.prototype.CssClasses_ = {\n CONTAINER: 'mdl-layout__container',\n HEADER: 'mdl-layout__header',\n DRAWER: 'mdl-layout__drawer',\n CONTENT: 'mdl-layout__content',\n DRAWER_BTN: 'mdl-layout__drawer-button',\n ICON: 'material-icons',\n JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_CONTAINER: 'mdl-layout__tab-ripple-container',\n RIPPLE: 'mdl-ripple',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n HEADER_SEAMED: 'mdl-layout__header--seamed',\n HEADER_WATERFALL: 'mdl-layout__header--waterfall',\n HEADER_SCROLL: 'mdl-layout__header--scroll',\n FIXED_HEADER: 'mdl-layout--fixed-header',\n OBFUSCATOR: 'mdl-layout__obfuscator',\n TAB_BAR: 'mdl-layout__tab-bar',\n TAB_CONTAINER: 'mdl-layout__tab-bar-container',\n TAB: 'mdl-layout__tab',\n TAB_BAR_BUTTON: 'mdl-layout__tab-bar-button',\n TAB_BAR_LEFT_BUTTON: 'mdl-layout__tab-bar-left-button',\n TAB_BAR_RIGHT_BUTTON: 'mdl-layout__tab-bar-right-button',\n TAB_MANUAL_SWITCH: 'mdl-layout__tab-manual-switch',\n PANEL: 'mdl-layout__tab-panel',\n HAS_DRAWER: 'has-drawer',\n HAS_TABS: 'has-tabs',\n HAS_SCROLLING_HEADER: 'has-scrolling-header',\n CASTING_SHADOW: 'is-casting-shadow',\n IS_COMPACT: 'is-compact',\n IS_SMALL_SCREEN: 'is-small-screen',\n IS_DRAWER_OPEN: 'is-visible',\n IS_ACTIVE: 'is-active',\n IS_UPGRADED: 'is-upgraded',\n IS_ANIMATING: 'is-animating',\n ON_LARGE_SCREEN: 'mdl-layout--large-screen-only',\n ON_SMALL_SCREEN: 'mdl-layout--small-screen-only'\n};\n/**\n * Handles scrolling on the content.\n *\n * @private\n */\nMaterialLayout.prototype.contentScrollHandler_ = function () {\n if (this.header_.classList.contains(this.CssClasses_.IS_ANIMATING)) {\n return;\n }\n var headerVisible = !this.element_.classList.contains(this.CssClasses_.IS_SMALL_SCREEN) || this.element_.classList.contains(this.CssClasses_.FIXED_HEADER);\n if (this.content_.scrollTop > 0 && !this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n this.header_.classList.add(this.CssClasses_.CASTING_SHADOW);\n this.header_.classList.add(this.CssClasses_.IS_COMPACT);\n if (headerVisible) {\n this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n } else if (this.content_.scrollTop <= 0 && this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n this.header_.classList.remove(this.CssClasses_.IS_COMPACT);\n if (headerVisible) {\n this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n }\n};\n/**\n * Handles a keyboard event on the drawer.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialLayout.prototype.keyboardEventHandler_ = function (evt) {\n // Only react when the drawer is open.\n if (evt.keyCode === this.Keycodes_.ESCAPE && this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)) {\n this.toggleDrawer();\n }\n};\n/**\n * Handles changes in screen size.\n *\n * @private\n */\nMaterialLayout.prototype.screenSizeHandler_ = function () {\n if (this.screenSizeMediaQuery_.matches) {\n this.element_.classList.add(this.CssClasses_.IS_SMALL_SCREEN);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_SMALL_SCREEN);\n // Collapse drawer (if any) when moving to a large screen size.\n if (this.drawer_) {\n this.drawer_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN);\n this.obfuscator_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN);\n }\n }\n};\n/**\n * Handles events of drawer button.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialLayout.prototype.drawerToggleHandler_ = function (evt) {\n if (evt && evt.type === 'keydown') {\n if (evt.keyCode === this.Keycodes_.SPACE || evt.keyCode === this.Keycodes_.ENTER) {\n // prevent scrolling in drawer nav\n evt.preventDefault();\n } else {\n // prevent other keys\n return;\n }\n }\n this.toggleDrawer();\n};\n/**\n * Handles (un)setting the `is-animating` class\n *\n * @private\n */\nMaterialLayout.prototype.headerTransitionEndHandler_ = function () {\n this.header_.classList.remove(this.CssClasses_.IS_ANIMATING);\n};\n/**\n * Handles expanding the header on click\n *\n * @private\n */\nMaterialLayout.prototype.headerClickHandler_ = function () {\n if (this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n this.header_.classList.remove(this.CssClasses_.IS_COMPACT);\n this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n};\n/**\n * Reset tab state, dropping active classes\n *\n * @private\n */\nMaterialLayout.prototype.resetTabState_ = function (tabBar) {\n for (var k = 0; k < tabBar.length; k++) {\n tabBar[k].classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n};\n/**\n * Reset panel state, droping active classes\n *\n * @private\n */\nMaterialLayout.prototype.resetPanelState_ = function (panels) {\n for (var j = 0; j < panels.length; j++) {\n panels[j].classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n};\n/**\n * Toggle drawer state\n *\n * @public\n */\nMaterialLayout.prototype.toggleDrawer = function () {\n var drawerButton = this.element_.querySelector('.' + this.CssClasses_.DRAWER_BTN);\n this.drawer_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);\n this.obfuscator_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);\n // Set accessibility properties.\n if (this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)) {\n this.drawer_.setAttribute('aria-hidden', 'false');\n drawerButton.setAttribute('aria-expanded', 'true');\n } else {\n this.drawer_.setAttribute('aria-hidden', 'true');\n drawerButton.setAttribute('aria-expanded', 'false');\n }\n};\nMaterialLayout.prototype['toggleDrawer'] = MaterialLayout.prototype.toggleDrawer;\n/**\n * Initialize element.\n */\nMaterialLayout.prototype.init = function () {\n if (this.element_) {\n var container = document.createElement('div');\n container.classList.add(this.CssClasses_.CONTAINER);\n var focusedElement = this.element_.querySelector(':focus');\n this.element_.parentElement.insertBefore(container, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n container.appendChild(this.element_);\n if (focusedElement) {\n focusedElement.focus();\n }\n var directChildren = this.element_.childNodes;\n var numChildren = directChildren.length;\n for (var c = 0; c < numChildren; c++) {\n var child = directChildren[c];\n if (child.classList && child.classList.contains(this.CssClasses_.HEADER)) {\n this.header_ = child;\n }\n if (child.classList && child.classList.contains(this.CssClasses_.DRAWER)) {\n this.drawer_ = child;\n }\n if (child.classList && child.classList.contains(this.CssClasses_.CONTENT)) {\n this.content_ = child;\n }\n }\n window.addEventListener('pageshow', function (e) {\n if (e.persisted) {\n // when page is loaded from back/forward cache\n // trigger repaint to let layout scroll in safari\n this.element_.style.overflowY = 'hidden';\n requestAnimationFrame(function () {\n this.element_.style.overflowY = '';\n }.bind(this));\n }\n }.bind(this), false);\n if (this.header_) {\n this.tabBar_ = this.header_.querySelector('.' + this.CssClasses_.TAB_BAR);\n }\n var mode = this.Mode_.STANDARD;\n if (this.header_) {\n if (this.header_.classList.contains(this.CssClasses_.HEADER_SEAMED)) {\n mode = this.Mode_.SEAMED;\n } else if (this.header_.classList.contains(this.CssClasses_.HEADER_WATERFALL)) {\n mode = this.Mode_.WATERFALL;\n this.header_.addEventListener('transitionend', this.headerTransitionEndHandler_.bind(this));\n this.header_.addEventListener('click', this.headerClickHandler_.bind(this));\n } else if (this.header_.classList.contains(this.CssClasses_.HEADER_SCROLL)) {\n mode = this.Mode_.SCROLL;\n container.classList.add(this.CssClasses_.HAS_SCROLLING_HEADER);\n }\n if (mode === this.Mode_.STANDARD) {\n this.header_.classList.add(this.CssClasses_.CASTING_SHADOW);\n if (this.tabBar_) {\n this.tabBar_.classList.add(this.CssClasses_.CASTING_SHADOW);\n }\n } else if (mode === this.Mode_.SEAMED || mode === this.Mode_.SCROLL) {\n this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n if (this.tabBar_) {\n this.tabBar_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n }\n } else if (mode === this.Mode_.WATERFALL) {\n // Add and remove shadows depending on scroll position.\n // Also add/remove auxiliary class for styling of the compact version of\n // the header.\n this.content_.addEventListener('scroll', this.contentScrollHandler_.bind(this));\n this.contentScrollHandler_();\n }\n }\n // Add drawer toggling button to our layout, if we have an openable drawer.\n if (this.drawer_) {\n var drawerButton = this.element_.querySelector('.' + this.CssClasses_.DRAWER_BTN);\n if (!drawerButton) {\n drawerButton = document.createElement('div');\n drawerButton.setAttribute('aria-expanded', 'false');\n drawerButton.setAttribute('role', 'button');\n drawerButton.setAttribute('tabindex', '0');\n drawerButton.classList.add(this.CssClasses_.DRAWER_BTN);\n var drawerButtonIcon = document.createElement('i');\n drawerButtonIcon.classList.add(this.CssClasses_.ICON);\n drawerButtonIcon.innerHTML = this.Constant_.MENU_ICON;\n drawerButton.appendChild(drawerButtonIcon);\n }\n if (this.drawer_.classList.contains(this.CssClasses_.ON_LARGE_SCREEN)) {\n //If drawer has ON_LARGE_SCREEN class then add it to the drawer toggle button as well.\n drawerButton.classList.add(this.CssClasses_.ON_LARGE_SCREEN);\n } else if (this.drawer_.classList.contains(this.CssClasses_.ON_SMALL_SCREEN)) {\n //If drawer has ON_SMALL_SCREEN class then add it to the drawer toggle button as well.\n drawerButton.classList.add(this.CssClasses_.ON_SMALL_SCREEN);\n }\n drawerButton.addEventListener('click', this.drawerToggleHandler_.bind(this));\n drawerButton.addEventListener('keydown', this.drawerToggleHandler_.bind(this));\n // Add a class if the layout has a drawer, for altering the left padding.\n // Adds the HAS_DRAWER to the elements since this.header_ may or may\n // not be present.\n this.element_.classList.add(this.CssClasses_.HAS_DRAWER);\n // If we have a fixed header, add the button to the header rather than\n // the layout.\n if (this.element_.classList.contains(this.CssClasses_.FIXED_HEADER)) {\n this.header_.insertBefore(drawerButton, this.header_.firstChild);\n } else {\n this.element_.insertBefore(drawerButton, this.content_);\n }\n var obfuscator = document.createElement('div');\n obfuscator.classList.add(this.CssClasses_.OBFUSCATOR);\n this.element_.appendChild(obfuscator);\n obfuscator.addEventListener('click', this.drawerToggleHandler_.bind(this));\n this.obfuscator_ = obfuscator;\n this.drawer_.addEventListener('keydown', this.keyboardEventHandler_.bind(this));\n this.drawer_.setAttribute('aria-hidden', 'true');\n }\n // Keep an eye on screen size, and add/remove auxiliary class for styling\n // of small screens.\n this.screenSizeMediaQuery_ = window.matchMedia(this.Constant_.MAX_WIDTH);\n this.screenSizeMediaQuery_.addListener(this.screenSizeHandler_.bind(this));\n this.screenSizeHandler_();\n // Initialize tabs, if any.\n if (this.header_ && this.tabBar_) {\n this.element_.classList.add(this.CssClasses_.HAS_TABS);\n var tabContainer = document.createElement('div');\n tabContainer.classList.add(this.CssClasses_.TAB_CONTAINER);\n this.header_.insertBefore(tabContainer, this.tabBar_);\n this.header_.removeChild(this.tabBar_);\n var leftButton = document.createElement('div');\n leftButton.classList.add(this.CssClasses_.TAB_BAR_BUTTON);\n leftButton.classList.add(this.CssClasses_.TAB_BAR_LEFT_BUTTON);\n var leftButtonIcon = document.createElement('i');\n leftButtonIcon.classList.add(this.CssClasses_.ICON);\n leftButtonIcon.textContent = this.Constant_.CHEVRON_LEFT;\n leftButton.appendChild(leftButtonIcon);\n leftButton.addEventListener('click', function () {\n this.tabBar_.scrollLeft -= this.Constant_.TAB_SCROLL_PIXELS;\n }.bind(this));\n var rightButton = document.createElement('div');\n rightButton.classList.add(this.CssClasses_.TAB_BAR_BUTTON);\n rightButton.classList.add(this.CssClasses_.TAB_BAR_RIGHT_BUTTON);\n var rightButtonIcon = document.createElement('i');\n rightButtonIcon.classList.add(this.CssClasses_.ICON);\n rightButtonIcon.textContent = this.Constant_.CHEVRON_RIGHT;\n rightButton.appendChild(rightButtonIcon);\n rightButton.addEventListener('click', function () {\n this.tabBar_.scrollLeft += this.Constant_.TAB_SCROLL_PIXELS;\n }.bind(this));\n tabContainer.appendChild(leftButton);\n tabContainer.appendChild(this.tabBar_);\n tabContainer.appendChild(rightButton);\n // Add and remove tab buttons depending on scroll position and total\n // window size.\n var tabUpdateHandler = function () {\n if (this.tabBar_.scrollLeft > 0) {\n leftButton.classList.add(this.CssClasses_.IS_ACTIVE);\n } else {\n leftButton.classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n if (this.tabBar_.scrollLeft < this.tabBar_.scrollWidth - this.tabBar_.offsetWidth) {\n rightButton.classList.add(this.CssClasses_.IS_ACTIVE);\n } else {\n rightButton.classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n }.bind(this);\n this.tabBar_.addEventListener('scroll', tabUpdateHandler);\n tabUpdateHandler();\n // Update tabs when the window resizes.\n var windowResizeHandler = function () {\n // Use timeouts to make sure it doesn't happen too often.\n if (this.resizeTimeoutId_) {\n clearTimeout(this.resizeTimeoutId_);\n }\n this.resizeTimeoutId_ = setTimeout(function () {\n tabUpdateHandler();\n this.resizeTimeoutId_ = null;\n }.bind(this), this.Constant_.RESIZE_TIMEOUT);\n }.bind(this);\n window.addEventListener('resize', windowResizeHandler);\n if (this.tabBar_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)) {\n this.tabBar_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n }\n // Select element tabs, document panels\n var tabs = this.tabBar_.querySelectorAll('.' + this.CssClasses_.TAB);\n var panels = this.content_.querySelectorAll('.' + this.CssClasses_.PANEL);\n // Create new tabs for each tab element\n for (var i = 0; i < tabs.length; i++) {\n new MaterialLayoutTab(tabs[i], tabs, panels, this);\n }\n }\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n/**\n * Constructor for an individual tab.\n *\n * @constructor\n * @param {HTMLElement} tab The HTML element for the tab.\n * @param {!Array} tabs Array with HTML elements for all tabs.\n * @param {!Array} panels Array with HTML elements for all panels.\n * @param {MaterialLayout} layout The MaterialLayout object that owns the tab.\n */\nfunction MaterialLayoutTab(tab, tabs, panels, layout) {\n /**\n * Auxiliary method to programmatically select a tab in the UI.\n */\n function selectTab() {\n var href = tab.href.split('#')[1];\n var panel = layout.content_.querySelector('#' + href);\n layout.resetTabState_(tabs);\n layout.resetPanelState_(panels);\n tab.classList.add(layout.CssClasses_.IS_ACTIVE);\n panel.classList.add(layout.CssClasses_.IS_ACTIVE);\n }\n if (layout.tabBar_.classList.contains(layout.CssClasses_.JS_RIPPLE_EFFECT)) {\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(layout.CssClasses_.RIPPLE_CONTAINER);\n rippleContainer.classList.add(layout.CssClasses_.JS_RIPPLE_EFFECT);\n var ripple = document.createElement('span');\n ripple.classList.add(layout.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n tab.appendChild(rippleContainer);\n }\n if (!layout.tabBar_.classList.contains(layout.CssClasses_.TAB_MANUAL_SWITCH)) {\n tab.addEventListener('click', function (e) {\n if (tab.getAttribute('href').charAt(0) === '#') {\n e.preventDefault();\n selectTab();\n }\n });\n }\n tab.show = selectTab;\n}\nwindow['MaterialLayoutTab'] = MaterialLayoutTab;\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialLayout,\n classAsString: 'MaterialLayout',\n cssClass: 'mdl-js-layout'\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * A component handler interface using the revealing module design pattern.\n * More details on this design pattern here:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @author Jason Mayes.\n */\n/* exported componentHandler */\n\n// Pre-defining the componentHandler interface, for closure documentation and\n// static verification.\nvar componentHandler = {\n /**\n * Searches existing DOM for elements of our component type and upgrades them\n * if they have not already been upgraded.\n *\n * @param {string=} optJsClass the programatic name of the element class we\n * need to create a new instance of.\n * @param {string=} optCssClass the name of the CSS class elements of this\n * type will have.\n */\n upgradeDom: function(optJsClass, optCssClass) {},\n /**\n * Upgrades a specific element rather than all in the DOM.\n *\n * @param {!Element} element The element we wish to upgrade.\n * @param {string=} optJsClass Optional name of the class we want to upgrade\n * the element to.\n */\n upgradeElement: function(element, optJsClass) {},\n /**\n * Upgrades a specific list of elements rather than all in the DOM.\n *\n * @param {!Element|!Array|!NodeList|!HTMLCollection} elements\n * The elements we wish to upgrade.\n */\n upgradeElements: function(elements) {},\n /**\n * Upgrades all registered components found in the current DOM. This is\n * automatically called on window load.\n */\n upgradeAllRegistered: function() {},\n /**\n * Allows user to be alerted to any upgrades that are performed for a given\n * component type\n *\n * @param {string} jsClass The class name of the MDL component we wish\n * to hook into for any upgrades performed.\n * @param {function(!HTMLElement)} callback The function to call upon an\n * upgrade. This function should expect 1 parameter - the HTMLElement which\n * got upgraded.\n */\n registerUpgradedCallback: function(jsClass, callback) {},\n /**\n * Registers a class for future use and attempts to upgrade existing DOM.\n *\n * @param {componentHandler.ComponentConfigPublic} config the registration configuration\n */\n register: function(config) {},\n /**\n * Downgrade either a given node, an array of nodes, or a NodeList.\n *\n * @param {!Node|!Array|!NodeList} nodes\n */\n downgradeElements: function(nodes) {}\n};\n\ncomponentHandler = (function() {\n 'use strict';\n\n /** @type {!Array} */\n var registeredComponents_ = [];\n\n /** @type {!Array} */\n var createdComponents_ = [];\n\n var componentConfigProperty_ = 'mdlComponentConfigInternal_';\n\n /**\n * Searches registered components for a class we are interested in using.\n * Optionally replaces a match with passed object if specified.\n *\n * @param {string} name The name of a class we want to use.\n * @param {componentHandler.ComponentConfig=} optReplace Optional object to replace match with.\n * @return {!Object|boolean}\n * @private\n */\n function findRegisteredClass_(name, optReplace) {\n for (var i = 0; i < registeredComponents_.length; i++) {\n if (registeredComponents_[i].className === name) {\n if (typeof optReplace !== 'undefined') {\n registeredComponents_[i] = optReplace;\n }\n return registeredComponents_[i];\n }\n }\n return false;\n }\n\n /**\n * Returns an array of the classNames of the upgraded classes on the element.\n *\n * @param {!Element} element The element to fetch data from.\n * @return {!Array}\n * @private\n */\n function getUpgradedListOfElement_(element) {\n var dataUpgraded = element.getAttribute('data-upgraded');\n // Use `['']` as default value to conform the `,name,name...` style.\n return dataUpgraded === null ? [''] : dataUpgraded.split(',');\n }\n\n /**\n * Returns true if the given element has already been upgraded for the given\n * class.\n *\n * @param {!Element} element The element we want to check.\n * @param {string} jsClass The class to check for.\n * @returns {boolean}\n * @private\n */\n function isElementUpgraded_(element, jsClass) {\n var upgradedList = getUpgradedListOfElement_(element);\n return upgradedList.indexOf(jsClass) !== -1;\n }\n\n /**\n * Create an event object.\n *\n * @param {string} eventType The type name of the event.\n * @param {boolean} bubbles Whether the event should bubble up the DOM.\n * @param {boolean} cancelable Whether the event can be canceled.\n * @returns {!Event}\n */\n function createEvent_(eventType, bubbles, cancelable) {\n if ('CustomEvent' in window && typeof window.CustomEvent === 'function') {\n return new CustomEvent(eventType, {\n bubbles: bubbles,\n cancelable: cancelable\n });\n } else {\n var ev = document.createEvent('Events');\n ev.initEvent(eventType, bubbles, cancelable);\n return ev;\n }\n }\n\n /**\n * Searches existing DOM for elements of our component type and upgrades them\n * if they have not already been upgraded.\n *\n * @param {string=} optJsClass the programatic name of the element class we\n * need to create a new instance of.\n * @param {string=} optCssClass the name of the CSS class elements of this\n * type will have.\n */\n function upgradeDomInternal(optJsClass, optCssClass) {\n if (typeof optJsClass === 'undefined' &&\n typeof optCssClass === 'undefined') {\n for (var i = 0; i < registeredComponents_.length; i++) {\n upgradeDomInternal(registeredComponents_[i].className,\n registeredComponents_[i].cssClass);\n }\n } else {\n var jsClass = /** @type {string} */ (optJsClass);\n if (typeof optCssClass === 'undefined') {\n var registeredClass = findRegisteredClass_(jsClass);\n if (registeredClass) {\n optCssClass = registeredClass.cssClass;\n }\n }\n\n var elements = document.querySelectorAll('.' + optCssClass);\n for (var n = 0; n < elements.length; n++) {\n upgradeElementInternal(elements[n], jsClass);\n }\n }\n }\n\n /**\n * Upgrades a specific element rather than all in the DOM.\n *\n * @param {!Element} element The element we wish to upgrade.\n * @param {string=} optJsClass Optional name of the class we want to upgrade\n * the element to.\n */\n function upgradeElementInternal(element, optJsClass) {\n // Verify argument type.\n if (!(typeof element === 'object' && element instanceof Element)) {\n throw new Error('Invalid argument provided to upgrade MDL element.');\n }\n // Allow upgrade to be canceled by canceling emitted event.\n var upgradingEv = createEvent_('mdl-componentupgrading', true, true);\n element.dispatchEvent(upgradingEv);\n if (upgradingEv.defaultPrevented) {\n return;\n }\n\n var upgradedList = getUpgradedListOfElement_(element);\n var classesToUpgrade = [];\n // If jsClass is not provided scan the registered components to find the\n // ones matching the element's CSS classList.\n if (!optJsClass) {\n var classList = element.classList;\n registeredComponents_.forEach(function(component) {\n // Match CSS & Not to be upgraded & Not upgraded.\n if (classList.contains(component.cssClass) &&\n classesToUpgrade.indexOf(component) === -1 &&\n !isElementUpgraded_(element, component.className)) {\n classesToUpgrade.push(component);\n }\n });\n } else if (!isElementUpgraded_(element, optJsClass)) {\n classesToUpgrade.push(findRegisteredClass_(optJsClass));\n }\n\n // Upgrade the element for each classes.\n for (var i = 0, n = classesToUpgrade.length, registeredClass; i < n; i++) {\n registeredClass = classesToUpgrade[i];\n if (registeredClass) {\n // Mark element as upgraded.\n upgradedList.push(registeredClass.className);\n element.setAttribute('data-upgraded', upgradedList.join(','));\n var instance = new registeredClass.classConstructor(element);\n instance[componentConfigProperty_] = registeredClass;\n createdComponents_.push(instance);\n // Call any callbacks the user has registered with this component type.\n for (var j = 0, m = registeredClass.callbacks.length; j < m; j++) {\n registeredClass.callbacks[j](element);\n }\n\n if (registeredClass.widget) {\n // Assign per element instance for control over API\n element[registeredClass.className] = instance;\n }\n } else {\n throw new Error(\n 'Unable to find a registered component for the given class.');\n }\n\n var upgradedEv = createEvent_('mdl-componentupgraded', true, false);\n element.dispatchEvent(upgradedEv);\n }\n }\n\n /**\n * Upgrades a specific list of elements rather than all in the DOM.\n *\n * @param {!Element|!Array|!NodeList|!HTMLCollection} elements\n * The elements we wish to upgrade.\n */\n function upgradeElementsInternal(elements) {\n if (!Array.isArray(elements)) {\n if (elements instanceof Element) {\n elements = [elements];\n } else {\n elements = Array.prototype.slice.call(elements);\n }\n }\n for (var i = 0, n = elements.length, element; i < n; i++) {\n element = elements[i];\n if (element instanceof HTMLElement) {\n upgradeElementInternal(element);\n if (element.children.length > 0) {\n upgradeElementsInternal(element.children);\n }\n }\n }\n }\n\n /**\n * Registers a class for future use and attempts to upgrade existing DOM.\n *\n * @param {componentHandler.ComponentConfigPublic} config\n */\n function registerInternal(config) {\n // In order to support both Closure-compiled and uncompiled code accessing\n // this method, we need to allow for both the dot and array syntax for\n // property access. You'll therefore see the `foo.bar || foo['bar']`\n // pattern repeated across this method.\n var widgetMissing = (typeof config.widget === 'undefined' &&\n typeof config['widget'] === 'undefined');\n var widget = true;\n\n if (!widgetMissing) {\n widget = config.widget || config['widget'];\n }\n\n var newConfig = /** @type {componentHandler.ComponentConfig} */ ({\n classConstructor: config.constructor || config['constructor'],\n className: config.classAsString || config['classAsString'],\n cssClass: config.cssClass || config['cssClass'],\n widget: widget,\n callbacks: []\n });\n\n registeredComponents_.forEach(function(item) {\n if (item.cssClass === newConfig.cssClass) {\n throw new Error('The provided cssClass has already been registered: ' + item.cssClass);\n }\n if (item.className === newConfig.className) {\n throw new Error('The provided className has already been registered');\n }\n });\n\n if (config.constructor.prototype\n .hasOwnProperty(componentConfigProperty_)) {\n throw new Error(\n 'MDL component classes must not have ' + componentConfigProperty_ +\n ' defined as a property.');\n }\n\n var found = findRegisteredClass_(config.classAsString, newConfig);\n\n if (!found) {\n registeredComponents_.push(newConfig);\n }\n }\n\n /**\n * Allows user to be alerted to any upgrades that are performed for a given\n * component type\n *\n * @param {string} jsClass The class name of the MDL component we wish\n * to hook into for any upgrades performed.\n * @param {function(!HTMLElement)} callback The function to call upon an\n * upgrade. This function should expect 1 parameter - the HTMLElement which\n * got upgraded.\n */\n function registerUpgradedCallbackInternal(jsClass, callback) {\n var regClass = findRegisteredClass_(jsClass);\n if (regClass) {\n regClass.callbacks.push(callback);\n }\n }\n\n /**\n * Upgrades all registered components found in the current DOM. This is\n * automatically called on window load.\n */\n function upgradeAllRegisteredInternal() {\n for (var n = 0; n < registeredComponents_.length; n++) {\n upgradeDomInternal(registeredComponents_[n].className);\n }\n }\n\n /**\n * Check the component for the downgrade method.\n * Execute if found.\n * Remove component from createdComponents list.\n *\n * @param {?componentHandler.Component} component\n */\n function deconstructComponentInternal(component) {\n if (component) {\n var componentIndex = createdComponents_.indexOf(component);\n createdComponents_.splice(componentIndex, 1);\n\n var upgrades = component.element_.getAttribute('data-upgraded').split(',');\n var componentPlace = upgrades.indexOf(component[componentConfigProperty_].classAsString);\n upgrades.splice(componentPlace, 1);\n component.element_.setAttribute('data-upgraded', upgrades.join(','));\n\n var ev = createEvent_('mdl-componentdowngraded', true, false);\n component.element_.dispatchEvent(ev);\n }\n }\n\n /**\n * Downgrade either a given node, an array of nodes, or a NodeList.\n *\n * @param {!Node|!Array|!NodeList} nodes\n */\n function downgradeNodesInternal(nodes) {\n /**\n * Auxiliary function to downgrade a single node.\n * @param {!Node} node the node to be downgraded\n */\n var downgradeNode = function(node) {\n createdComponents_.filter(function(item) {\n return item.element_ === node;\n }).forEach(deconstructComponentInternal);\n };\n if (nodes instanceof Array || nodes instanceof NodeList) {\n for (var n = 0; n < nodes.length; n++) {\n downgradeNode(nodes[n]);\n }\n } else if (nodes instanceof Node) {\n downgradeNode(nodes);\n } else {\n throw new Error('Invalid argument provided to downgrade MDL nodes.');\n }\n }\n\n // Now return the functions that should be made public with their publicly\n // facing names...\n return {\n upgradeDom: upgradeDomInternal,\n upgradeElement: upgradeElementInternal,\n upgradeElements: upgradeElementsInternal,\n upgradeAllRegistered: upgradeAllRegisteredInternal,\n registerUpgradedCallback: registerUpgradedCallbackInternal,\n register: registerInternal,\n downgradeElements: downgradeNodesInternal\n };\n})();\n\n/**\n * Describes the type of a registered component type managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n * constructor: Function,\n * classAsString: string,\n * cssClass: string,\n * widget: (string|boolean|undefined)\n * }}\n */\ncomponentHandler.ComponentConfigPublic; // jshint ignore:line\n\n/**\n * Describes the type of a registered component type managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n * constructor: !Function,\n * className: string,\n * cssClass: string,\n * widget: (string|boolean),\n * callbacks: !Array\n * }}\n */\ncomponentHandler.ComponentConfig; // jshint ignore:line\n\n/**\n * Created component (i.e., upgraded element) type as managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n * element_: !HTMLElement,\n * className: string,\n * classAsString: string,\n * cssClass: string,\n * widget: string\n * }}\n */\ncomponentHandler.Component; // jshint ignore:line\n\n// Export all symbols, for the benefit of Closure compiler.\n// No effect on uncompiled code.\ncomponentHandler['upgradeDom'] = componentHandler.upgradeDom;\ncomponentHandler['upgradeElement'] = componentHandler.upgradeElement;\ncomponentHandler['upgradeElements'] = componentHandler.upgradeElements;\ncomponentHandler['upgradeAllRegistered'] =\n componentHandler.upgradeAllRegistered;\ncomponentHandler['registerUpgradedCallback'] =\n componentHandler.registerUpgradedCallback;\ncomponentHandler['register'] = componentHandler.register;\ncomponentHandler['downgradeElements'] = componentHandler.downgradeElements;\nwindow.componentHandler = componentHandler;\nwindow['componentHandler'] = componentHandler;\n\nwindow.addEventListener('load', function() {\n 'use strict';\n\n /**\n * Performs a \"Cutting the mustard\" test. If the browser supports the features\n * tested, adds a mdl-js class to the element. It then upgrades all MDL\n * components requiring JavaScript.\n */\n if ('classList' in document.createElement('div') &&\n 'querySelector' in document &&\n 'addEventListener' in window && Array.prototype.forEach) {\n document.documentElement.classList.add('mdl-js');\n componentHandler.upgradeAllRegistered();\n } else {\n /**\n * Dummy function to avoid JS errors.\n */\n componentHandler.upgradeElement = function() {};\n /**\n * Dummy function to avoid JS errors.\n */\n componentHandler.register = function() {};\n }\n});\n","// Source: https://github.com/darius/requestAnimationFrame/blob/master/requestAnimationFrame.js\n// Adapted from https://gist.github.com/paulirish/1579671 which derived from\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n// requestAnimationFrame polyfill by Erik Möller.\n// Fixes from Paul Irish, Tino Zijdel, Andrew Mao, Klemen Slavič, Darius Bacon\n// MIT license\nif (!Date.now) {\n /**\n * Date.now polyfill.\n * @return {number} the current Date\n */\n Date.now = function () {\n return new Date().getTime();\n };\n Date['now'] = Date.now;\n}\nvar vendors = [\n 'webkit',\n 'moz'\n];\nfor (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) {\n var vp = vendors[i];\n window.requestAnimationFrame = window[vp + 'RequestAnimationFrame'];\n window.cancelAnimationFrame = window[vp + 'CancelAnimationFrame'] || window[vp + 'CancelRequestAnimationFrame'];\n window['requestAnimationFrame'] = window.requestAnimationFrame;\n window['cancelAnimationFrame'] = window.cancelAnimationFrame;\n}\nif (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) || !window.requestAnimationFrame || !window.cancelAnimationFrame) {\n var lastTime = 0;\n /**\n * requestAnimationFrame polyfill.\n * @param {!Function} callback the callback function.\n */\n window.requestAnimationFrame = function (callback) {\n var now = Date.now();\n var nextTime = Math.max(lastTime + 16, now);\n return setTimeout(function () {\n callback(lastTime = nextTime);\n }, nextTime - now);\n };\n window.cancelAnimationFrame = clearTimeout;\n window['requestAnimationFrame'] = window.requestAnimationFrame;\n window['cancelAnimationFrame'] = window.cancelAnimationFrame;\n}","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Button MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialButton = function MaterialButton(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialButton'] = MaterialButton;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialButton.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialButton.prototype.CssClasses_ = {\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_CONTAINER: 'mdl-button__ripple-container',\n RIPPLE: 'mdl-ripple'\n};\n/**\n * Handle blur of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialButton.prototype.blurHandler_ = function (event) {\n if (event) {\n this.element_.blur();\n }\n};\n// Public methods.\n/**\n * Disable button.\n *\n * @public\n */\nMaterialButton.prototype.disable = function () {\n this.element_.disabled = true;\n};\nMaterialButton.prototype['disable'] = MaterialButton.prototype.disable;\n/**\n * Enable button.\n *\n * @public\n */\nMaterialButton.prototype.enable = function () {\n this.element_.disabled = false;\n};\nMaterialButton.prototype['enable'] = MaterialButton.prototype.enable;\n/**\n * Initialize element.\n */\nMaterialButton.prototype.init = function () {\n if (this.element_) {\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleElement_ = document.createElement('span');\n this.rippleElement_.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(this.rippleElement_);\n this.boundRippleBlurHandler = this.blurHandler_.bind(this);\n this.rippleElement_.addEventListener('mouseup', this.boundRippleBlurHandler);\n this.element_.appendChild(rippleContainer);\n }\n this.boundButtonBlurHandler = this.blurHandler_.bind(this);\n this.element_.addEventListener('mouseup', this.boundButtonBlurHandler);\n this.element_.addEventListener('mouseleave', this.boundButtonBlurHandler);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialButton,\n classAsString: 'MaterialButton',\n cssClass: 'mdl-js-button',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Checkbox MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialCheckbox = function MaterialCheckbox(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialCheckbox'] = MaterialCheckbox;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialCheckbox.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialCheckbox.prototype.CssClasses_ = {\n INPUT: 'mdl-checkbox__input',\n BOX_OUTLINE: 'mdl-checkbox__box-outline',\n FOCUS_HELPER: 'mdl-checkbox__focus-helper',\n TICK_OUTLINE: 'mdl-checkbox__tick-outline',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-checkbox__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onChange_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onMouseUp_ = function (event) {\n this.blur_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialCheckbox.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialCheckbox.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the inputs toggle state and update display.\n *\n * @public\n */\nMaterialCheckbox.prototype.checkToggleState = function () {\n if (this.inputElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialCheckbox.prototype['checkToggleState'] = MaterialCheckbox.prototype.checkToggleState;\n/**\n * Check the inputs disabled state and update display.\n *\n * @public\n */\nMaterialCheckbox.prototype.checkDisabled = function () {\n if (this.inputElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialCheckbox.prototype['checkDisabled'] = MaterialCheckbox.prototype.checkDisabled;\n/**\n * Disable checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.disable = function () {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['disable'] = MaterialCheckbox.prototype.disable;\n/**\n * Enable checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.enable = function () {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['enable'] = MaterialCheckbox.prototype.enable;\n/**\n * Check checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.check = function () {\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['check'] = MaterialCheckbox.prototype.check;\n/**\n * Uncheck checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.uncheck = function () {\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['uncheck'] = MaterialCheckbox.prototype.uncheck;\n/**\n * Initialize element.\n */\nMaterialCheckbox.prototype.init = function () {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n var boxOutline = document.createElement('span');\n boxOutline.classList.add(this.CssClasses_.BOX_OUTLINE);\n var tickContainer = document.createElement('span');\n tickContainer.classList.add(this.CssClasses_.FOCUS_HELPER);\n var tickOutline = document.createElement('span');\n tickOutline.classList.add(this.CssClasses_.TICK_OUTLINE);\n boxOutline.appendChild(tickOutline);\n this.element_.appendChild(tickContainer);\n this.element_.appendChild(boxOutline);\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n this.boundRippleMouseUp = this.onMouseUp_.bind(this);\n this.rippleContainerElement_.addEventListener('mouseup', this.boundRippleMouseUp);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n this.boundInputOnChange = this.onChange_.bind(this);\n this.boundInputOnFocus = this.onFocus_.bind(this);\n this.boundInputOnBlur = this.onBlur_.bind(this);\n this.boundElementMouseUp = this.onMouseUp_.bind(this);\n this.inputElement_.addEventListener('change', this.boundInputOnChange);\n this.inputElement_.addEventListener('focus', this.boundInputOnFocus);\n this.inputElement_.addEventListener('blur', this.boundInputOnBlur);\n this.element_.addEventListener('mouseup', this.boundElementMouseUp);\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialCheckbox,\n classAsString: 'MaterialCheckbox',\n cssClass: 'mdl-js-checkbox',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for icon toggle MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialIconToggle = function MaterialIconToggle(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialIconToggle'] = MaterialIconToggle;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialIconToggle.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialIconToggle.prototype.CssClasses_ = {\n INPUT: 'mdl-icon-toggle__input',\n JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-icon-toggle__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onChange_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onMouseUp_ = function (event) {\n this.blur_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialIconToggle.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialIconToggle.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the inputs toggle state and update display.\n *\n * @public\n */\nMaterialIconToggle.prototype.checkToggleState = function () {\n if (this.inputElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialIconToggle.prototype['checkToggleState'] = MaterialIconToggle.prototype.checkToggleState;\n/**\n * Check the inputs disabled state and update display.\n *\n * @public\n */\nMaterialIconToggle.prototype.checkDisabled = function () {\n if (this.inputElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialIconToggle.prototype['checkDisabled'] = MaterialIconToggle.prototype.checkDisabled;\n/**\n * Disable icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.disable = function () {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['disable'] = MaterialIconToggle.prototype.disable;\n/**\n * Enable icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.enable = function () {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['enable'] = MaterialIconToggle.prototype.enable;\n/**\n * Check icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.check = function () {\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['check'] = MaterialIconToggle.prototype.check;\n/**\n * Uncheck icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.uncheck = function () {\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['uncheck'] = MaterialIconToggle.prototype.uncheck;\n/**\n * Initialize element.\n */\nMaterialIconToggle.prototype.init = function () {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n if (this.element_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleContainerElement_.classList.add(this.CssClasses_.JS_RIPPLE_EFFECT);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n this.boundRippleMouseUp = this.onMouseUp_.bind(this);\n this.rippleContainerElement_.addEventListener('mouseup', this.boundRippleMouseUp);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n this.boundInputOnChange = this.onChange_.bind(this);\n this.boundInputOnFocus = this.onFocus_.bind(this);\n this.boundInputOnBlur = this.onBlur_.bind(this);\n this.boundElementOnMouseUp = this.onMouseUp_.bind(this);\n this.inputElement_.addEventListener('change', this.boundInputOnChange);\n this.inputElement_.addEventListener('focus', this.boundInputOnFocus);\n this.inputElement_.addEventListener('blur', this.boundInputOnBlur);\n this.element_.addEventListener('mouseup', this.boundElementOnMouseUp);\n this.updateClasses_();\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialIconToggle,\n classAsString: 'MaterialIconToggle',\n cssClass: 'mdl-js-icon-toggle',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for dropdown MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialMenu = function MaterialMenu(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialMenu'] = MaterialMenu;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialMenu.prototype.Constant_ = {\n // Total duration of the menu animation.\n TRANSITION_DURATION_SECONDS: 0.3,\n // The fraction of the total duration we want to use for menu item animations.\n TRANSITION_DURATION_FRACTION: 0.8,\n // How long the menu stays open after choosing an option (so the user can see\n // the ripple).\n CLOSE_TIMEOUT: 150\n};\n/**\n * Keycodes, for code readability.\n *\n * @enum {number}\n * @private\n */\nMaterialMenu.prototype.Keycodes_ = {\n ENTER: 13,\n ESCAPE: 27,\n SPACE: 32,\n UP_ARROW: 38,\n DOWN_ARROW: 40\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialMenu.prototype.CssClasses_ = {\n CONTAINER: 'mdl-menu__container',\n OUTLINE: 'mdl-menu__outline',\n ITEM: 'mdl-menu__item',\n ITEM_RIPPLE_CONTAINER: 'mdl-menu__item-ripple-container',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE: 'mdl-ripple',\n // Statuses\n IS_UPGRADED: 'is-upgraded',\n IS_VISIBLE: 'is-visible',\n IS_ANIMATING: 'is-animating',\n // Alignment options\n BOTTOM_LEFT: 'mdl-menu--bottom-left',\n // This is the default.\n BOTTOM_RIGHT: 'mdl-menu--bottom-right',\n TOP_LEFT: 'mdl-menu--top-left',\n TOP_RIGHT: 'mdl-menu--top-right',\n UNALIGNED: 'mdl-menu--unaligned'\n};\n/**\n * Initialize element.\n */\nMaterialMenu.prototype.init = function () {\n if (this.element_) {\n // Create container for the menu.\n var container = document.createElement('div');\n container.classList.add(this.CssClasses_.CONTAINER);\n this.element_.parentElement.insertBefore(container, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n container.appendChild(this.element_);\n this.container_ = container;\n // Create outline for the menu (shadow and background).\n var outline = document.createElement('div');\n outline.classList.add(this.CssClasses_.OUTLINE);\n this.outline_ = outline;\n container.insertBefore(outline, this.element_);\n // Find the \"for\" element and bind events to it.\n var forElId = this.element_.getAttribute('for') || this.element_.getAttribute('data-mdl-for');\n var forEl = null;\n if (forElId) {\n forEl = document.getElementById(forElId);\n if (forEl) {\n this.forElement_ = forEl;\n forEl.addEventListener('click', this.handleForClick_.bind(this));\n forEl.addEventListener('keydown', this.handleForKeyboardEvent_.bind(this));\n }\n }\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n this.boundItemKeydown_ = this.handleItemKeyboardEvent_.bind(this);\n this.boundItemClick_ = this.handleItemClick_.bind(this);\n for (var i = 0; i < items.length; i++) {\n // Add a listener to each menu item.\n items[i].addEventListener('click', this.boundItemClick_);\n // Add a tab index to each menu item.\n items[i].tabIndex = '-1';\n // Add a keyboard listener to each menu item.\n items[i].addEventListener('keydown', this.boundItemKeydown_);\n }\n // Add ripple classes to each item, if the user has enabled ripples.\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n for (i = 0; i < items.length; i++) {\n var item = items[i];\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.ITEM_RIPPLE_CONTAINER);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n item.appendChild(rippleContainer);\n item.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n }\n }\n // Copy alignment classes to the container, so the outline can use them.\n if (this.element_.classList.contains(this.CssClasses_.BOTTOM_LEFT)) {\n this.outline_.classList.add(this.CssClasses_.BOTTOM_LEFT);\n }\n if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n this.outline_.classList.add(this.CssClasses_.BOTTOM_RIGHT);\n }\n if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n this.outline_.classList.add(this.CssClasses_.TOP_LEFT);\n }\n if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n this.outline_.classList.add(this.CssClasses_.TOP_RIGHT);\n }\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n this.outline_.classList.add(this.CssClasses_.UNALIGNED);\n }\n container.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n/**\n * Handles a click on the \"for\" element, by positioning the menu and then\n * toggling it.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleForClick_ = function (evt) {\n if (this.element_ && this.forElement_) {\n var rect = this.forElement_.getBoundingClientRect();\n var forRect = this.forElement_.parentElement.getBoundingClientRect();\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n } else if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n // Position below the \"for\" element, aligned to its right.\n this.container_.style.right = forRect.right - rect.right + 'px';\n this.container_.style.top = this.forElement_.offsetTop + this.forElement_.offsetHeight + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n // Position above the \"for\" element, aligned to its left.\n this.container_.style.left = this.forElement_.offsetLeft + 'px';\n this.container_.style.bottom = forRect.bottom - rect.top + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n // Position above the \"for\" element, aligned to its right.\n this.container_.style.right = forRect.right - rect.right + 'px';\n this.container_.style.bottom = forRect.bottom - rect.top + 'px';\n } else {\n // Default: position below the \"for\" element, aligned to its left.\n this.container_.style.left = this.forElement_.offsetLeft + 'px';\n this.container_.style.top = this.forElement_.offsetTop + this.forElement_.offsetHeight + 'px';\n }\n }\n this.toggle(evt);\n};\n/**\n * Handles a keyboard event on the \"for\" element.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleForKeyboardEvent_ = function (evt) {\n if (this.element_ && this.container_ && this.forElement_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM + ':not([disabled])');\n if (items && items.length > 0 && this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n if (evt.keyCode === this.Keycodes_.UP_ARROW) {\n evt.preventDefault();\n items[items.length - 1].focus();\n } else if (evt.keyCode === this.Keycodes_.DOWN_ARROW) {\n evt.preventDefault();\n items[0].focus();\n }\n }\n }\n};\n/**\n * Handles a keyboard event on an item.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleItemKeyboardEvent_ = function (evt) {\n if (this.element_ && this.container_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM + ':not([disabled])');\n if (items && items.length > 0 && this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n var currentIndex = Array.prototype.slice.call(items).indexOf(evt.target);\n if (evt.keyCode === this.Keycodes_.UP_ARROW) {\n evt.preventDefault();\n if (currentIndex > 0) {\n items[currentIndex - 1].focus();\n } else {\n items[items.length - 1].focus();\n }\n } else if (evt.keyCode === this.Keycodes_.DOWN_ARROW) {\n evt.preventDefault();\n if (items.length > currentIndex + 1) {\n items[currentIndex + 1].focus();\n } else {\n items[0].focus();\n }\n } else if (evt.keyCode === this.Keycodes_.SPACE || evt.keyCode === this.Keycodes_.ENTER) {\n evt.preventDefault();\n // Send mousedown and mouseup to trigger ripple.\n var e = new MouseEvent('mousedown');\n evt.target.dispatchEvent(e);\n e = new MouseEvent('mouseup');\n evt.target.dispatchEvent(e);\n // Send click.\n evt.target.click();\n } else if (evt.keyCode === this.Keycodes_.ESCAPE) {\n evt.preventDefault();\n this.hide();\n }\n }\n }\n};\n/**\n * Handles a click event on an item.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleItemClick_ = function (evt) {\n if (evt.target.hasAttribute('disabled')) {\n evt.stopPropagation();\n } else {\n // Wait some time before closing menu, so the user can see the ripple.\n this.closing_ = true;\n window.setTimeout(function (evt) {\n this.hide();\n this.closing_ = false;\n }.bind(this), this.Constant_.CLOSE_TIMEOUT);\n }\n};\n/**\n * Calculates the initial clip (for opening the menu) or final clip (for closing\n * it), and applies it. This allows us to animate from or to the correct point,\n * that is, the point it's aligned to in the \"for\" element.\n *\n * @param {number} height Height of the clip rectangle\n * @param {number} width Width of the clip rectangle\n * @private\n */\nMaterialMenu.prototype.applyClip_ = function (height, width) {\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n // Do not clip.\n this.element_.style.clip = '';\n } else if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n // Clip to the top right corner of the menu.\n this.element_.style.clip = 'rect(0 ' + width + 'px ' + '0 ' + width + 'px)';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n // Clip to the bottom left corner of the menu.\n this.element_.style.clip = 'rect(' + height + 'px 0 ' + height + 'px 0)';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n // Clip to the bottom right corner of the menu.\n this.element_.style.clip = 'rect(' + height + 'px ' + width + 'px ' + height + 'px ' + width + 'px)';\n } else {\n // Default: do not clip (same as clipping to the top left corner).\n this.element_.style.clip = '';\n }\n};\n/**\n * Cleanup function to remove animation listeners.\n *\n * @param {Event} evt\n * @private\n */\nMaterialMenu.prototype.removeAnimationEndListener_ = function (evt) {\n evt.target.classList.remove(MaterialMenu.prototype.CssClasses_.IS_ANIMATING);\n};\n/**\n * Adds an event listener to clean up after the animation ends.\n *\n * @private\n */\nMaterialMenu.prototype.addAnimationEndListener_ = function () {\n this.element_.addEventListener('transitionend', this.removeAnimationEndListener_);\n this.element_.addEventListener('webkitTransitionEnd', this.removeAnimationEndListener_);\n};\n/**\n * Displays the menu.\n *\n * @public\n */\nMaterialMenu.prototype.show = function (evt) {\n if (this.element_ && this.container_ && this.outline_) {\n // Measure the inner element.\n var height = this.element_.getBoundingClientRect().height;\n var width = this.element_.getBoundingClientRect().width;\n // Apply the inner element's size to the container and outline.\n this.container_.style.width = width + 'px';\n this.container_.style.height = height + 'px';\n this.outline_.style.width = width + 'px';\n this.outline_.style.height = height + 'px';\n var transitionDuration = this.Constant_.TRANSITION_DURATION_SECONDS * this.Constant_.TRANSITION_DURATION_FRACTION;\n // Calculate transition delays for individual menu items, so that they fade\n // in one at a time.\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n for (var i = 0; i < items.length; i++) {\n var itemDelay = null;\n if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT) || this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n itemDelay = (height - items[i].offsetTop - items[i].offsetHeight) / height * transitionDuration + 's';\n } else {\n itemDelay = items[i].offsetTop / height * transitionDuration + 's';\n }\n items[i].style.transitionDelay = itemDelay;\n }\n // Apply the initial clip to the text before we start animating.\n this.applyClip_(height, width);\n // Wait for the next frame, turn on animation, and apply the final clip.\n // Also make it visible. This triggers the transitions.\n window.requestAnimationFrame(function () {\n this.element_.classList.add(this.CssClasses_.IS_ANIMATING);\n this.element_.style.clip = 'rect(0 ' + width + 'px ' + height + 'px 0)';\n this.container_.classList.add(this.CssClasses_.IS_VISIBLE);\n }.bind(this));\n // Clean up after the animation is complete.\n this.addAnimationEndListener_();\n // Add a click listener to the document, to close the menu.\n var callback = function (e) {\n // Check to see if the document is processing the same event that\n // displayed the menu in the first place. If so, do nothing.\n // Also check to see if the menu is in the process of closing itself, and\n // do nothing in that case.\n // Also check if the clicked element is a menu item\n // if so, do nothing.\n if (e !== evt && !this.closing_ && e.target.parentNode !== this.element_) {\n document.removeEventListener('click', callback);\n this.hide();\n }\n }.bind(this);\n document.addEventListener('click', callback);\n }\n};\nMaterialMenu.prototype['show'] = MaterialMenu.prototype.show;\n/**\n * Hides the menu.\n *\n * @public\n */\nMaterialMenu.prototype.hide = function () {\n if (this.element_ && this.container_ && this.outline_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n // Remove all transition delays; menu items fade out concurrently.\n for (var i = 0; i < items.length; i++) {\n items[i].style.removeProperty('transition-delay');\n }\n // Measure the inner element.\n var rect = this.element_.getBoundingClientRect();\n var height = rect.height;\n var width = rect.width;\n // Turn on animation, and apply the final clip. Also make invisible.\n // This triggers the transitions.\n this.element_.classList.add(this.CssClasses_.IS_ANIMATING);\n this.applyClip_(height, width);\n this.container_.classList.remove(this.CssClasses_.IS_VISIBLE);\n // Clean up after the animation is complete.\n this.addAnimationEndListener_();\n }\n};\nMaterialMenu.prototype['hide'] = MaterialMenu.prototype.hide;\n/**\n * Displays or hides the menu, depending on current state.\n *\n * @public\n */\nMaterialMenu.prototype.toggle = function (evt) {\n if (this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n this.hide();\n } else {\n this.show(evt);\n }\n};\nMaterialMenu.prototype['toggle'] = MaterialMenu.prototype.toggle;\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialMenu,\n classAsString: 'MaterialMenu',\n cssClass: 'mdl-js-menu',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Progress MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialProgress = function MaterialProgress(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialProgress'] = MaterialProgress;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialProgress.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialProgress.prototype.CssClasses_ = { INDETERMINATE_CLASS: 'mdl-progress__indeterminate' };\n/**\n * Set the current progress of the progressbar.\n *\n * @param {number} p Percentage of the progress (0-100)\n * @public\n */\nMaterialProgress.prototype.setProgress = function (p) {\n if (this.element_.classList.contains(this.CssClasses_.INDETERMINATE_CLASS)) {\n return;\n }\n this.progressbar_.style.width = p + '%';\n};\nMaterialProgress.prototype['setProgress'] = MaterialProgress.prototype.setProgress;\n/**\n * Set the current progress of the buffer.\n *\n * @param {number} p Percentage of the buffer (0-100)\n * @public\n */\nMaterialProgress.prototype.setBuffer = function (p) {\n this.bufferbar_.style.width = p + '%';\n this.auxbar_.style.width = 100 - p + '%';\n};\nMaterialProgress.prototype['setBuffer'] = MaterialProgress.prototype.setBuffer;\n/**\n * Initialize element.\n */\nMaterialProgress.prototype.init = function () {\n if (this.element_) {\n var el = document.createElement('div');\n el.className = 'progressbar bar bar1';\n this.element_.appendChild(el);\n this.progressbar_ = el;\n el = document.createElement('div');\n el.className = 'bufferbar bar bar2';\n this.element_.appendChild(el);\n this.bufferbar_ = el;\n el = document.createElement('div');\n el.className = 'auxbar bar bar3';\n this.element_.appendChild(el);\n this.auxbar_ = el;\n this.progressbar_.style.width = '0%';\n this.bufferbar_.style.width = '100%';\n this.auxbar_.style.width = '0%';\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialProgress,\n classAsString: 'MaterialProgress',\n cssClass: 'mdl-js-progress',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Radio MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialRadio = function MaterialRadio(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialRadio'] = MaterialRadio;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialRadio.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialRadio.prototype.CssClasses_ = {\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked',\n IS_UPGRADED: 'is-upgraded',\n JS_RADIO: 'mdl-js-radio',\n RADIO_BTN: 'mdl-radio__button',\n RADIO_OUTER_CIRCLE: 'mdl-radio__outer-circle',\n RADIO_INNER_CIRCLE: 'mdl-radio__inner-circle',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-radio__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onChange_ = function (event) {\n // Since other radio buttons don't get change events, we need to look for\n // them to update their classes.\n var radios = document.getElementsByClassName(this.CssClasses_.JS_RADIO);\n for (var i = 0; i < radios.length; i++) {\n var button = radios[i].querySelector('.' + this.CssClasses_.RADIO_BTN);\n // Different name == different group, so no point updating those.\n if (button.getAttribute('name') === this.btnElement_.getAttribute('name')) {\n if (typeof radios[i]['MaterialRadio'] !== 'undefined') {\n radios[i]['MaterialRadio'].updateClasses_();\n }\n }\n }\n};\n/**\n * Handle focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onMouseup_ = function (event) {\n this.blur_();\n};\n/**\n * Update classes.\n *\n * @private\n */\nMaterialRadio.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialRadio.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.btnElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the components disabled state.\n *\n * @public\n */\nMaterialRadio.prototype.checkDisabled = function () {\n if (this.btnElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialRadio.prototype['checkDisabled'] = MaterialRadio.prototype.checkDisabled;\n/**\n * Check the components toggled state.\n *\n * @public\n */\nMaterialRadio.prototype.checkToggleState = function () {\n if (this.btnElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialRadio.prototype['checkToggleState'] = MaterialRadio.prototype.checkToggleState;\n/**\n * Disable radio.\n *\n * @public\n */\nMaterialRadio.prototype.disable = function () {\n this.btnElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialRadio.prototype['disable'] = MaterialRadio.prototype.disable;\n/**\n * Enable radio.\n *\n * @public\n */\nMaterialRadio.prototype.enable = function () {\n this.btnElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialRadio.prototype['enable'] = MaterialRadio.prototype.enable;\n/**\n * Check radio.\n *\n * @public\n */\nMaterialRadio.prototype.check = function () {\n this.btnElement_.checked = true;\n this.onChange_(null);\n};\nMaterialRadio.prototype['check'] = MaterialRadio.prototype.check;\n/**\n * Uncheck radio.\n *\n * @public\n */\nMaterialRadio.prototype.uncheck = function () {\n this.btnElement_.checked = false;\n this.onChange_(null);\n};\nMaterialRadio.prototype['uncheck'] = MaterialRadio.prototype.uncheck;\n/**\n * Initialize element.\n */\nMaterialRadio.prototype.init = function () {\n if (this.element_) {\n this.btnElement_ = this.element_.querySelector('.' + this.CssClasses_.RADIO_BTN);\n this.boundChangeHandler_ = this.onChange_.bind(this);\n this.boundFocusHandler_ = this.onChange_.bind(this);\n this.boundBlurHandler_ = this.onBlur_.bind(this);\n this.boundMouseUpHandler_ = this.onMouseup_.bind(this);\n var outerCircle = document.createElement('span');\n outerCircle.classList.add(this.CssClasses_.RADIO_OUTER_CIRCLE);\n var innerCircle = document.createElement('span');\n innerCircle.classList.add(this.CssClasses_.RADIO_INNER_CIRCLE);\n this.element_.appendChild(outerCircle);\n this.element_.appendChild(innerCircle);\n var rippleContainer;\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_CENTER);\n rippleContainer.addEventListener('mouseup', this.boundMouseUpHandler_);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n this.element_.appendChild(rippleContainer);\n }\n this.btnElement_.addEventListener('change', this.boundChangeHandler_);\n this.btnElement_.addEventListener('focus', this.boundFocusHandler_);\n this.btnElement_.addEventListener('blur', this.boundBlurHandler_);\n this.element_.addEventListener('mouseup', this.boundMouseUpHandler_);\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialRadio,\n classAsString: 'MaterialRadio',\n cssClass: 'mdl-js-radio',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Slider MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialSlider = function MaterialSlider(element) {\n this.element_ = element;\n // Browser feature detection.\n this.isIE_ = window.navigator.msPointerEnabled;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialSlider'] = MaterialSlider;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSlider.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSlider.prototype.CssClasses_ = {\n IE_CONTAINER: 'mdl-slider__ie-container',\n SLIDER_CONTAINER: 'mdl-slider__container',\n BACKGROUND_FLEX: 'mdl-slider__background-flex',\n BACKGROUND_LOWER: 'mdl-slider__background-lower',\n BACKGROUND_UPPER: 'mdl-slider__background-upper',\n IS_LOWEST_VALUE: 'is-lowest-value',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Handle input on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onInput_ = function (event) {\n this.updateValueStyles_();\n};\n/**\n * Handle change on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onChange_ = function (event) {\n this.updateValueStyles_();\n};\n/**\n * Handle mouseup on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onMouseUp_ = function (event) {\n event.target.blur();\n};\n/**\n * Handle mousedown on container element.\n * This handler is purpose is to not require the use to click\n * exactly on the 2px slider element, as FireFox seems to be very\n * strict about this.\n *\n * @param {Event} event The event that fired.\n * @private\n * @suppress {missingProperties}\n */\nMaterialSlider.prototype.onContainerMouseDown_ = function (event) {\n // If this click is not on the parent element (but rather some child)\n // ignore. It may still bubble up.\n if (event.target !== this.element_.parentElement) {\n return;\n }\n // Discard the original event and create a new event that\n // is on the slider element.\n event.preventDefault();\n var newEvent = new MouseEvent('mousedown', {\n target: event.target,\n buttons: event.buttons,\n clientX: event.clientX,\n clientY: this.element_.getBoundingClientRect().y\n });\n this.element_.dispatchEvent(newEvent);\n};\n/**\n * Handle updating of values.\n *\n * @private\n */\nMaterialSlider.prototype.updateValueStyles_ = function () {\n // Calculate and apply percentages to div structure behind slider.\n var fraction = (this.element_.value - this.element_.min) / (this.element_.max - this.element_.min);\n if (fraction === 0) {\n this.element_.classList.add(this.CssClasses_.IS_LOWEST_VALUE);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_LOWEST_VALUE);\n }\n if (!this.isIE_) {\n this.backgroundLower_.style.flex = fraction;\n this.backgroundLower_.style.webkitFlex = fraction;\n this.backgroundUpper_.style.flex = 1 - fraction;\n this.backgroundUpper_.style.webkitFlex = 1 - fraction;\n }\n};\n// Public methods.\n/**\n * Disable slider.\n *\n * @public\n */\nMaterialSlider.prototype.disable = function () {\n this.element_.disabled = true;\n};\nMaterialSlider.prototype['disable'] = MaterialSlider.prototype.disable;\n/**\n * Enable slider.\n *\n * @public\n */\nMaterialSlider.prototype.enable = function () {\n this.element_.disabled = false;\n};\nMaterialSlider.prototype['enable'] = MaterialSlider.prototype.enable;\n/**\n * Update slider value.\n *\n * @param {number} value The value to which to set the control (optional).\n * @public\n */\nMaterialSlider.prototype.change = function (value) {\n if (typeof value !== 'undefined') {\n this.element_.value = value;\n }\n this.updateValueStyles_();\n};\nMaterialSlider.prototype['change'] = MaterialSlider.prototype.change;\n/**\n * Initialize element.\n */\nMaterialSlider.prototype.init = function () {\n if (this.element_) {\n if (this.isIE_) {\n // Since we need to specify a very large height in IE due to\n // implementation limitations, we add a parent here that trims it down to\n // a reasonable size.\n var containerIE = document.createElement('div');\n containerIE.classList.add(this.CssClasses_.IE_CONTAINER);\n this.element_.parentElement.insertBefore(containerIE, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n containerIE.appendChild(this.element_);\n } else {\n // For non-IE browsers, we need a div structure that sits behind the\n // slider and allows us to style the left and right sides of it with\n // different colors.\n var container = document.createElement('div');\n container.classList.add(this.CssClasses_.SLIDER_CONTAINER);\n this.element_.parentElement.insertBefore(container, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n container.appendChild(this.element_);\n var backgroundFlex = document.createElement('div');\n backgroundFlex.classList.add(this.CssClasses_.BACKGROUND_FLEX);\n container.appendChild(backgroundFlex);\n this.backgroundLower_ = document.createElement('div');\n this.backgroundLower_.classList.add(this.CssClasses_.BACKGROUND_LOWER);\n backgroundFlex.appendChild(this.backgroundLower_);\n this.backgroundUpper_ = document.createElement('div');\n this.backgroundUpper_.classList.add(this.CssClasses_.BACKGROUND_UPPER);\n backgroundFlex.appendChild(this.backgroundUpper_);\n }\n this.boundInputHandler = this.onInput_.bind(this);\n this.boundChangeHandler = this.onChange_.bind(this);\n this.boundMouseUpHandler = this.onMouseUp_.bind(this);\n this.boundContainerMouseDownHandler = this.onContainerMouseDown_.bind(this);\n this.element_.addEventListener('input', this.boundInputHandler);\n this.element_.addEventListener('change', this.boundChangeHandler);\n this.element_.addEventListener('mouseup', this.boundMouseUpHandler);\n this.element_.parentElement.addEventListener('mousedown', this.boundContainerMouseDownHandler);\n this.updateValueStyles_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSlider,\n classAsString: 'MaterialSlider',\n cssClass: 'mdl-js-slider',\n widget: true\n});","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Snackbar MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialSnackbar = function MaterialSnackbar(element) {\n this.element_ = element;\n this.textElement_ = this.element_.querySelector('.' + this.cssClasses_.MESSAGE);\n this.actionElement_ = this.element_.querySelector('.' + this.cssClasses_.ACTION);\n if (!this.textElement_) {\n throw new Error('There must be a message element for a snackbar.');\n }\n if (!this.actionElement_) {\n throw new Error('There must be an action element for a snackbar.');\n }\n this.active = false;\n this.actionHandler_ = undefined;\n this.message_ = undefined;\n this.actionText_ = undefined;\n this.queuedNotifications_ = [];\n this.setActionHidden_(true);\n};\nwindow['MaterialSnackbar'] = MaterialSnackbar;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSnackbar.prototype.Constant_ = {\n // The duration of the snackbar show/hide animation, in ms.\n ANIMATION_LENGTH: 250\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSnackbar.prototype.cssClasses_ = {\n SNACKBAR: 'mdl-snackbar',\n MESSAGE: 'mdl-snackbar__text',\n ACTION: 'mdl-snackbar__action',\n ACTIVE: 'mdl-snackbar--active'\n};\n/**\n * Display the snackbar.\n *\n * @private\n */\nMaterialSnackbar.prototype.displaySnackbar_ = function () {\n this.element_.setAttribute('aria-hidden', 'true');\n if (this.actionHandler_) {\n this.actionElement_.textContent = this.actionText_;\n this.actionElement_.addEventListener('click', this.actionHandler_);\n this.setActionHidden_(false);\n }\n this.textElement_.textContent = this.message_;\n this.element_.classList.add(this.cssClasses_.ACTIVE);\n this.element_.setAttribute('aria-hidden', 'false');\n setTimeout(this.cleanup_.bind(this), this.timeout_);\n};\n/**\n * Show the snackbar.\n *\n * @param {Object} data The data for the notification.\n * @public\n */\nMaterialSnackbar.prototype.showSnackbar = function (data) {\n if (data === undefined) {\n throw new Error('Please provide a data object with at least a message to display.');\n }\n if (data['message'] === undefined) {\n throw new Error('Please provide a message to be displayed.');\n }\n if (data['actionHandler'] && !data['actionText']) {\n throw new Error('Please provide action text with the handler.');\n }\n if (this.active) {\n this.queuedNotifications_.push(data);\n } else {\n this.active = true;\n this.message_ = data['message'];\n if (data['timeout']) {\n this.timeout_ = data['timeout'];\n } else {\n this.timeout_ = 2750;\n }\n if (data['actionHandler']) {\n this.actionHandler_ = data['actionHandler'];\n }\n if (data['actionText']) {\n this.actionText_ = data['actionText'];\n }\n this.displaySnackbar_();\n }\n};\nMaterialSnackbar.prototype['showSnackbar'] = MaterialSnackbar.prototype.showSnackbar;\n/**\n * Check if the queue has items within it.\n * If it does, display the next entry.\n *\n * @private\n */\nMaterialSnackbar.prototype.checkQueue_ = function () {\n if (this.queuedNotifications_.length > 0) {\n this.showSnackbar(this.queuedNotifications_.shift());\n }\n};\n/**\n * Cleanup the snackbar event listeners and accessiblity attributes.\n *\n * @private\n */\nMaterialSnackbar.prototype.cleanup_ = function () {\n this.element_.classList.remove(this.cssClasses_.ACTIVE);\n setTimeout(function () {\n this.element_.setAttribute('aria-hidden', 'true');\n this.textElement_.textContent = '';\n if (!Boolean(this.actionElement_.getAttribute('aria-hidden'))) {\n this.setActionHidden_(true);\n this.actionElement_.textContent = '';\n this.actionElement_.removeEventListener('click', this.actionHandler_);\n }\n this.actionHandler_ = undefined;\n this.message_ = undefined;\n this.actionText_ = undefined;\n this.active = false;\n this.checkQueue_();\n }.bind(this), this.Constant_.ANIMATION_LENGTH);\n};\n/**\n * Set the action handler hidden state.\n *\n * @param {boolean} value\n * @private\n */\nMaterialSnackbar.prototype.setActionHidden_ = function (value) {\n if (value) {\n this.actionElement_.setAttribute('aria-hidden', 'true');\n } else {\n this.actionElement_.removeAttribute('aria-hidden');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSnackbar,\n classAsString: 'MaterialSnackbar',\n cssClass: 'mdl-js-snackbar',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Spinner MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n * @constructor\n */\nvar MaterialSpinner = function MaterialSpinner(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialSpinner'] = MaterialSpinner;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSpinner.prototype.Constant_ = { MDL_SPINNER_LAYER_COUNT: 4 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSpinner.prototype.CssClasses_ = {\n MDL_SPINNER_LAYER: 'mdl-spinner__layer',\n MDL_SPINNER_CIRCLE_CLIPPER: 'mdl-spinner__circle-clipper',\n MDL_SPINNER_CIRCLE: 'mdl-spinner__circle',\n MDL_SPINNER_GAP_PATCH: 'mdl-spinner__gap-patch',\n MDL_SPINNER_LEFT: 'mdl-spinner__left',\n MDL_SPINNER_RIGHT: 'mdl-spinner__right'\n};\n/**\n * Auxiliary method to create a spinner layer.\n *\n * @param {number} index Index of the layer to be created.\n * @public\n */\nMaterialSpinner.prototype.createLayer = function (index) {\n var layer = document.createElement('div');\n layer.classList.add(this.CssClasses_.MDL_SPINNER_LAYER);\n layer.classList.add(this.CssClasses_.MDL_SPINNER_LAYER + '-' + index);\n var leftClipper = document.createElement('div');\n leftClipper.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER);\n leftClipper.classList.add(this.CssClasses_.MDL_SPINNER_LEFT);\n var gapPatch = document.createElement('div');\n gapPatch.classList.add(this.CssClasses_.MDL_SPINNER_GAP_PATCH);\n var rightClipper = document.createElement('div');\n rightClipper.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER);\n rightClipper.classList.add(this.CssClasses_.MDL_SPINNER_RIGHT);\n var circleOwners = [\n leftClipper,\n gapPatch,\n rightClipper\n ];\n for (var i = 0; i < circleOwners.length; i++) {\n var circle = document.createElement('div');\n circle.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE);\n circleOwners[i].appendChild(circle);\n }\n layer.appendChild(leftClipper);\n layer.appendChild(gapPatch);\n layer.appendChild(rightClipper);\n this.element_.appendChild(layer);\n};\nMaterialSpinner.prototype['createLayer'] = MaterialSpinner.prototype.createLayer;\n/**\n * Stops the spinner animation.\n * Public method for users who need to stop the spinner for any reason.\n *\n * @public\n */\nMaterialSpinner.prototype.stop = function () {\n this.element_.classList.remove('is-active');\n};\nMaterialSpinner.prototype['stop'] = MaterialSpinner.prototype.stop;\n/**\n * Starts the spinner animation.\n * Public method for users who need to manually start the spinner for any reason\n * (instead of just adding the 'is-active' class to their markup).\n *\n * @public\n */\nMaterialSpinner.prototype.start = function () {\n this.element_.classList.add('is-active');\n};\nMaterialSpinner.prototype['start'] = MaterialSpinner.prototype.start;\n/**\n * Initialize element.\n */\nMaterialSpinner.prototype.init = function () {\n if (this.element_) {\n for (var i = 1; i <= this.Constant_.MDL_SPINNER_LAYER_COUNT; i++) {\n this.createLayer(i);\n }\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSpinner,\n classAsString: 'MaterialSpinner',\n cssClass: 'mdl-js-spinner',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Checkbox MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialSwitch = function MaterialSwitch(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialSwitch'] = MaterialSwitch;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSwitch.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSwitch.prototype.CssClasses_ = {\n INPUT: 'mdl-switch__input',\n TRACK: 'mdl-switch__track',\n THUMB: 'mdl-switch__thumb',\n FOCUS_HELPER: 'mdl-switch__focus-helper',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-switch__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onChange_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onMouseUp_ = function (event) {\n this.blur_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialSwitch.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialSwitch.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the components disabled state.\n *\n * @public\n */\nMaterialSwitch.prototype.checkDisabled = function () {\n if (this.inputElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialSwitch.prototype['checkDisabled'] = MaterialSwitch.prototype.checkDisabled;\n/**\n * Check the components toggled state.\n *\n * @public\n */\nMaterialSwitch.prototype.checkToggleState = function () {\n if (this.inputElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialSwitch.prototype['checkToggleState'] = MaterialSwitch.prototype.checkToggleState;\n/**\n * Disable switch.\n *\n * @public\n */\nMaterialSwitch.prototype.disable = function () {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['disable'] = MaterialSwitch.prototype.disable;\n/**\n * Enable switch.\n *\n * @public\n */\nMaterialSwitch.prototype.enable = function () {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['enable'] = MaterialSwitch.prototype.enable;\n/**\n * Activate switch.\n *\n * @public\n */\nMaterialSwitch.prototype.on = function () {\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['on'] = MaterialSwitch.prototype.on;\n/**\n * Deactivate switch.\n *\n * @public\n */\nMaterialSwitch.prototype.off = function () {\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['off'] = MaterialSwitch.prototype.off;\n/**\n * Initialize element.\n */\nMaterialSwitch.prototype.init = function () {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n var track = document.createElement('div');\n track.classList.add(this.CssClasses_.TRACK);\n var thumb = document.createElement('div');\n thumb.classList.add(this.CssClasses_.THUMB);\n var focusHelper = document.createElement('span');\n focusHelper.classList.add(this.CssClasses_.FOCUS_HELPER);\n thumb.appendChild(focusHelper);\n this.element_.appendChild(track);\n this.element_.appendChild(thumb);\n this.boundMouseUpHandler = this.onMouseUp_.bind(this);\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n this.rippleContainerElement_.addEventListener('mouseup', this.boundMouseUpHandler);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n this.boundChangeHandler = this.onChange_.bind(this);\n this.boundFocusHandler = this.onFocus_.bind(this);\n this.boundBlurHandler = this.onBlur_.bind(this);\n this.inputElement_.addEventListener('change', this.boundChangeHandler);\n this.inputElement_.addEventListener('focus', this.boundFocusHandler);\n this.inputElement_.addEventListener('blur', this.boundBlurHandler);\n this.element_.addEventListener('mouseup', this.boundMouseUpHandler);\n this.updateClasses_();\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSwitch,\n classAsString: 'MaterialSwitch',\n cssClass: 'mdl-js-switch',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Textfield MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialTextfield = function MaterialTextfield(element) {\n this.element_ = element;\n this.maxRows = this.Constant_.NO_MAX_ROWS;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialTextfield'] = MaterialTextfield;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialTextfield.prototype.Constant_ = {\n NO_MAX_ROWS: -1,\n MAX_ROWS_ATTRIBUTE: 'maxrows'\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialTextfield.prototype.CssClasses_ = {\n LABEL: 'mdl-textfield__label',\n INPUT: 'mdl-textfield__input',\n IS_DIRTY: 'is-dirty',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_INVALID: 'is-invalid',\n IS_UPGRADED: 'is-upgraded',\n HAS_PLACEHOLDER: 'has-placeholder'\n};\n/**\n * Handle input being entered.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onKeyDown_ = function (event) {\n var currentRowCount = event.target.value.split('\\n').length;\n if (event.keyCode === 13) {\n if (currentRowCount >= this.maxRows) {\n event.preventDefault();\n }\n }\n};\n/**\n * Handle focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle reset event from out side.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onReset_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialTextfield.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkValidity();\n this.checkDirty();\n this.checkFocus();\n};\n// Public methods.\n/**\n * Check the disabled state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkDisabled = function () {\n if (this.input_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialTextfield.prototype['checkDisabled'] = MaterialTextfield.prototype.checkDisabled;\n/**\n * Check the focus state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkFocus = function () {\n if (Boolean(this.element_.querySelector(':focus'))) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n }\n};\nMaterialTextfield.prototype['checkFocus'] = MaterialTextfield.prototype.checkFocus;\n/**\n * Check the validity state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkValidity = function () {\n if (this.input_.validity) {\n if (this.input_.validity.valid) {\n this.element_.classList.remove(this.CssClasses_.IS_INVALID);\n } else {\n this.element_.classList.add(this.CssClasses_.IS_INVALID);\n }\n }\n};\nMaterialTextfield.prototype['checkValidity'] = MaterialTextfield.prototype.checkValidity;\n/**\n * Check the dirty state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkDirty = function () {\n if (this.input_.value && this.input_.value.length > 0) {\n this.element_.classList.add(this.CssClasses_.IS_DIRTY);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DIRTY);\n }\n};\nMaterialTextfield.prototype['checkDirty'] = MaterialTextfield.prototype.checkDirty;\n/**\n * Disable text field.\n *\n * @public\n */\nMaterialTextfield.prototype.disable = function () {\n this.input_.disabled = true;\n this.updateClasses_();\n};\nMaterialTextfield.prototype['disable'] = MaterialTextfield.prototype.disable;\n/**\n * Enable text field.\n *\n * @public\n */\nMaterialTextfield.prototype.enable = function () {\n this.input_.disabled = false;\n this.updateClasses_();\n};\nMaterialTextfield.prototype['enable'] = MaterialTextfield.prototype.enable;\n/**\n * Update text field value.\n *\n * @param {string} value The value to which to set the control (optional).\n * @public\n */\nMaterialTextfield.prototype.change = function (value) {\n this.input_.value = value || '';\n this.updateClasses_();\n};\nMaterialTextfield.prototype['change'] = MaterialTextfield.prototype.change;\n/**\n * Initialize element.\n */\nMaterialTextfield.prototype.init = function () {\n if (this.element_) {\n this.label_ = this.element_.querySelector('.' + this.CssClasses_.LABEL);\n this.input_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n if (this.input_) {\n if (this.input_.hasAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE)) {\n this.maxRows = parseInt(this.input_.getAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE), 10);\n if (isNaN(this.maxRows)) {\n this.maxRows = this.Constant_.NO_MAX_ROWS;\n }\n }\n if (this.input_.hasAttribute('placeholder')) {\n this.element_.classList.add(this.CssClasses_.HAS_PLACEHOLDER);\n }\n this.boundUpdateClassesHandler = this.updateClasses_.bind(this);\n this.boundFocusHandler = this.onFocus_.bind(this);\n this.boundBlurHandler = this.onBlur_.bind(this);\n this.boundResetHandler = this.onReset_.bind(this);\n this.input_.addEventListener('input', this.boundUpdateClassesHandler);\n this.input_.addEventListener('focus', this.boundFocusHandler);\n this.input_.addEventListener('blur', this.boundBlurHandler);\n this.input_.addEventListener('reset', this.boundResetHandler);\n if (this.maxRows !== this.Constant_.NO_MAX_ROWS) {\n // TODO: This should handle pasting multi line text.\n // Currently doesn't.\n this.boundKeyDownHandler = this.onKeyDown_.bind(this);\n this.input_.addEventListener('keydown', this.boundKeyDownHandler);\n }\n var invalid = this.element_.classList.contains(this.CssClasses_.IS_INVALID);\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n if (invalid) {\n this.element_.classList.add(this.CssClasses_.IS_INVALID);\n }\n if (this.input_.hasAttribute('autofocus')) {\n this.element_.focus();\n this.checkFocus();\n }\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTextfield,\n classAsString: 'MaterialTextfield',\n cssClass: 'mdl-js-textfield',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Tooltip MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialTooltip = function MaterialTooltip(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialTooltip'] = MaterialTooltip;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialTooltip.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialTooltip.prototype.CssClasses_ = {\n IS_ACTIVE: 'is-active',\n BOTTOM: 'mdl-tooltip--bottom',\n LEFT: 'mdl-tooltip--left',\n RIGHT: 'mdl-tooltip--right',\n TOP: 'mdl-tooltip--top'\n};\n/**\n * Handle mouseenter for tooltip.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTooltip.prototype.handleMouseEnter_ = function (event) {\n var props = event.target.getBoundingClientRect();\n var left = props.left + props.width / 2;\n var top = props.top + props.height / 2;\n var marginLeft = -1 * (this.element_.offsetWidth / 2);\n var marginTop = -1 * (this.element_.offsetHeight / 2);\n if (this.element_.classList.contains(this.CssClasses_.LEFT) || this.element_.classList.contains(this.CssClasses_.RIGHT)) {\n left = props.width / 2;\n if (top + marginTop < 0) {\n this.element_.style.top = '0';\n this.element_.style.marginTop = '0';\n } else {\n this.element_.style.top = top + 'px';\n this.element_.style.marginTop = marginTop + 'px';\n }\n } else {\n if (left + marginLeft < 0) {\n this.element_.style.left = '0';\n this.element_.style.marginLeft = '0';\n } else {\n this.element_.style.left = left + 'px';\n this.element_.style.marginLeft = marginLeft + 'px';\n }\n }\n if (this.element_.classList.contains(this.CssClasses_.TOP)) {\n this.element_.style.top = props.top - this.element_.offsetHeight - 10 + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.RIGHT)) {\n this.element_.style.left = props.left + props.width + 10 + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.LEFT)) {\n this.element_.style.left = props.left - this.element_.offsetWidth - 10 + 'px';\n } else {\n this.element_.style.top = props.top + props.height + 10 + 'px';\n }\n this.element_.classList.add(this.CssClasses_.IS_ACTIVE);\n};\n/**\n * Hide tooltip on mouseleave or scroll\n *\n * @private\n */\nMaterialTooltip.prototype.hideTooltip_ = function () {\n this.element_.classList.remove(this.CssClasses_.IS_ACTIVE);\n};\n/**\n * Initialize element.\n */\nMaterialTooltip.prototype.init = function () {\n if (this.element_) {\n var forElId = this.element_.getAttribute('for') || this.element_.getAttribute('data-mdl-for');\n if (forElId) {\n this.forElement_ = document.getElementById(forElId);\n }\n if (this.forElement_) {\n // It's left here because it prevents accidental text selection on Android\n if (!this.forElement_.hasAttribute('tabindex')) {\n this.forElement_.setAttribute('tabindex', '0');\n }\n this.boundMouseEnterHandler = this.handleMouseEnter_.bind(this);\n this.boundMouseLeaveAndScrollHandler = this.hideTooltip_.bind(this);\n this.forElement_.addEventListener('mouseenter', this.boundMouseEnterHandler, false);\n this.forElement_.addEventListener('touchend', this.boundMouseEnterHandler, false);\n this.forElement_.addEventListener('mouseleave', this.boundMouseLeaveAndScrollHandler, false);\n window.addEventListener('scroll', this.boundMouseLeaveAndScrollHandler, true);\n window.addEventListener('touchstart', this.boundMouseLeaveAndScrollHandler);\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTooltip,\n classAsString: 'MaterialTooltip',\n cssClass: 'mdl-tooltip'\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Data Table Card MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {Element} element The element that will be upgraded.\n */\nvar MaterialDataTable = function MaterialDataTable(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialDataTable'] = MaterialDataTable;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialDataTable.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialDataTable.prototype.CssClasses_ = {\n DATA_TABLE: 'mdl-data-table',\n SELECTABLE: 'mdl-data-table--selectable',\n SELECT_ELEMENT: 'mdl-data-table__select',\n IS_SELECTED: 'is-selected',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Generates and returns a function that toggles the selection state of a\n * single row (or multiple rows).\n *\n * @param {Element} checkbox Checkbox that toggles the selection state.\n * @param {Element} row Row to toggle when checkbox changes.\n * @param {(Array|NodeList)=} opt_rows Rows to toggle when checkbox changes.\n * @private\n */\nMaterialDataTable.prototype.selectRow_ = function (checkbox, row, opt_rows) {\n if (row) {\n return function () {\n if (checkbox.checked) {\n row.classList.add(this.CssClasses_.IS_SELECTED);\n } else {\n row.classList.remove(this.CssClasses_.IS_SELECTED);\n }\n }.bind(this);\n }\n if (opt_rows) {\n return function () {\n var i;\n var el;\n if (checkbox.checked) {\n for (i = 0; i < opt_rows.length; i++) {\n el = opt_rows[i].querySelector('td').querySelector('.mdl-checkbox');\n el['MaterialCheckbox'].check();\n opt_rows[i].classList.add(this.CssClasses_.IS_SELECTED);\n }\n } else {\n for (i = 0; i < opt_rows.length; i++) {\n el = opt_rows[i].querySelector('td').querySelector('.mdl-checkbox');\n el['MaterialCheckbox'].uncheck();\n opt_rows[i].classList.remove(this.CssClasses_.IS_SELECTED);\n }\n }\n }.bind(this);\n }\n};\n/**\n * Creates a checkbox for a single or or multiple rows and hooks up the\n * event handling.\n *\n * @param {Element} row Row to toggle when checkbox changes.\n * @param {(Array|NodeList)=} opt_rows Rows to toggle when checkbox changes.\n * @private\n */\nMaterialDataTable.prototype.createCheckbox_ = function (row, opt_rows) {\n var label = document.createElement('label');\n var labelClasses = [\n 'mdl-checkbox',\n 'mdl-js-checkbox',\n 'mdl-js-ripple-effect',\n this.CssClasses_.SELECT_ELEMENT\n ];\n label.className = labelClasses.join(' ');\n var checkbox = document.createElement('input');\n checkbox.type = 'checkbox';\n checkbox.classList.add('mdl-checkbox__input');\n if (row) {\n checkbox.checked = row.classList.contains(this.CssClasses_.IS_SELECTED);\n checkbox.addEventListener('change', this.selectRow_(checkbox, row));\n } else if (opt_rows) {\n checkbox.addEventListener('change', this.selectRow_(checkbox, null, opt_rows));\n }\n label.appendChild(checkbox);\n componentHandler.upgradeElement(label, 'MaterialCheckbox');\n return label;\n};\n/**\n * Initialize element.\n */\nMaterialDataTable.prototype.init = function () {\n if (this.element_) {\n var firstHeader = this.element_.querySelector('th');\n var bodyRows = Array.prototype.slice.call(this.element_.querySelectorAll('tbody tr'));\n var footRows = Array.prototype.slice.call(this.element_.querySelectorAll('tfoot tr'));\n var rows = bodyRows.concat(footRows);\n if (this.element_.classList.contains(this.CssClasses_.SELECTABLE)) {\n var th = document.createElement('th');\n var headerCheckbox = this.createCheckbox_(null, rows);\n th.appendChild(headerCheckbox);\n firstHeader.parentElement.insertBefore(th, firstHeader);\n for (var i = 0; i < rows.length; i++) {\n var firstCell = rows[i].querySelector('td');\n if (firstCell) {\n var td = document.createElement('td');\n if (rows[i].parentNode.nodeName.toUpperCase() === 'TBODY') {\n var rowCheckbox = this.createCheckbox_(rows[i]);\n td.appendChild(rowCheckbox);\n }\n rows[i].insertBefore(td, firstCell);\n }\n }\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialDataTable,\n classAsString: 'MaterialDataTable',\n cssClass: 'mdl-js-data-table'\n});","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var core = module.exports = { version: '2.6.11' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","module.exports = false;\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","module.exports = require('./_shared')('native-function-to-string', Function.toString);\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar $toString = require('./_function-to-string');\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","exports.f = Object.getOwnPropertySymbols;\n","exports.f = {}.propertyIsEnumerable;\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","var $export = require('./_export');\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperties: require('./_object-dps') });\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./_classof');\nvar test = {};\ntest[require('./_wks')('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n require('./_redefine')(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = require('./_export');\n\n$export($export.P, 'Function', { bind: require('./_bind') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","'use strict';\nvar isObject = require('./_is-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar HAS_INSTANCE = require('./_wks')('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) require('./_object-dp').f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n} });\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n","var $parseInt = require('./_global').parseInt;\nvar $trim = require('./_string-trim').trim;\nvar ws = require('./_string-ws');\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n","var $parseFloat = require('./_global').parseFloat;\nvar $trim = require('./_string-trim').trim;\n\nmodule.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = require('./_descriptors') ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./_redefine')(global, NUMBER, $Number);\n}\n","var cof = require('./_cof');\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","'use strict';\nvar $export = require('./_export');\nvar toInteger = require('./_to-integer');\nvar aNumberValue = require('./_a-number-value');\nvar repeat = require('./_string-repeat');\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !require('./_fails')(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $fails = require('./_fails');\nvar aNumberValue = require('./_a-number-value');\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","'use strict';\n// 21.1.3.25 String.prototype.trim()\nrequire('./_string-trim')('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","module.exports = {};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","var $export = require('./_export');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n","'use strict';\n// B.2.3.2 String.prototype.anchor(name)\nrequire('./_string-html')('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});\n","'use strict';\n// B.2.3.3 String.prototype.big()\nrequire('./_string-html')('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});\n","'use strict';\n// B.2.3.4 String.prototype.blink()\nrequire('./_string-html')('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});\n","'use strict';\n// B.2.3.5 String.prototype.bold()\nrequire('./_string-html')('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});\n","'use strict';\n// B.2.3.6 String.prototype.fixed()\nrequire('./_string-html')('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n","'use strict';\n// B.2.3.7 String.prototype.fontcolor(color)\nrequire('./_string-html')('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});\n","'use strict';\n// B.2.3.8 String.prototype.fontsize(size)\nrequire('./_string-html')('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});\n","'use strict';\n// B.2.3.9 String.prototype.italics()\nrequire('./_string-html')('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});\n","'use strict';\n// B.2.3.10 String.prototype.link(url)\nrequire('./_string-html')('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n","'use strict';\n// B.2.3.11 String.prototype.small()\nrequire('./_string-html')('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});\n","'use strict';\n// B.2.3.12 String.prototype.strike()\nrequire('./_string-html')('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});\n","'use strict';\n// B.2.3.13 String.prototype.sub()\nrequire('./_string-html')('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});\n","'use strict';\n// B.2.3.14 String.prototype.sup()\nrequire('./_string-html')('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});\n","// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = require('./_export');\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\n\n$export($export.P + $export.F * require('./_fails')(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n","'use strict';\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = require('./_fails');\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n","// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = require('./_export');\nvar toISOString = require('./_date-to-iso-string');\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});\n","var DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n require('./_redefine')(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n","'use strict';\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};\n","var TO_PRIMITIVE = require('./_wks')('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) require('./_hide')(proto, TO_PRIMITIVE, require('./_date-to-primitive'));\n","// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = require('./_export');\n\n$export($export.S, 'Array', { isArray: require('./_is-array') });\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","'use strict';\nvar fails = require('./_fails');\n\nmodule.exports = function (method, arg) {\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call\n arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n });\n};\n","'use strict';\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (require('./_iobject') != Object || !require('./_strict-method')(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar html = require('./_html');\nvar cof = require('./_cof');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * require('./_fails')(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n for (; i < size; i++) cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar fails = require('./_fails');\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !require('./_strict-method')($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $forEach = require('./_array-methods')(0);\nvar STRICT = require('./_strict-method')([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $map = require('./_array-methods')(1);\n\n$export($export.P + $export.F * !require('./_strict-method')([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $filter = require('./_array-methods')(2);\n\n$export($export.P + $export.F * !require('./_strict-method')([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $some = require('./_array-methods')(3);\n\n$export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $every = require('./_array-methods')(4);\n\n$export($export.P + $export.F * !require('./_strict-method')([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments[1]);\n }\n});\n","var aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar toLength = require('./_to-length');\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $indexOf = require('./_array-includes')(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n return -1;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","require('./_set-species')('Array');\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","var global = require('./_global');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar dP = require('./_object-dp').f;\nvar gOPN = require('./_object-gopn').f;\nvar isRegExp = require('./_is-regexp');\nvar $flags = require('./_flags');\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () {\n re2[require('./_wks')('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');\n","'use strict';\n\nvar regexpFlags = require('./_flags');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar regexpExec = require('./_regexp-exec');\nrequire('./_export')({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nrequire('./es6.regexp.flags');\nvar anObject = require('./_an-object');\nvar $flags = require('./_flags');\nvar DESCRIPTORS = require('./_descriptors');\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n","'use strict';\nvar at = require('./_string-at')(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};\n","'use strict';\n\nvar classof = require('./_classof');\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n","'use strict';\nrequire('./es6.regexp.exec');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\nvar regexpExec = require('./_regexp-exec');\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar sameValue = require('./_same-value');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative($search, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\n\nvar isRegExp = require('./_is-regexp');\nvar anObject = require('./_an-object');\nvar speciesConstructor = require('./_species-constructor');\nvar advanceStringIndex = require('./_advance-string-index');\nvar toLength = require('./_to-length');\nvar callRegExpExec = require('./_regexp-exec-abstract');\nvar regexpExec = require('./_regexp-exec');\nvar fails = require('./_fails');\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar global = require('./_global');\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar validate = require('./_validate-collection');\nvar NATIVE_WEAK_MAP = require('./_validate-collection');\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < fin) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","var $export = require('./_export');\n$export($export.G + $export.W + $export.F * !require('./_typed').ABV, {\n DataView: require('./_typed-buffer').DataView\n});\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","'use strict';\n// 26.1.5 Reflect.enumerate(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar Enumerate = function (iterated) {\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = []; // keys\n var key;\n for (key in iterated) keys.push(key);\n};\nrequire('./_iter-create')(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n do {\n if (that._i >= keys.length) return { value: undefined, done: true };\n } while (!((key = keys[that._i++]) in that._t));\n return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar isArray = require('./_is-array');\nvar isObject = require('./_is-object');\nvar toLength = require('./_to-length');\nvar ctx = require('./_ctx');\nvar IS_CONCAT_SPREADABLE = require('./_wks')('isConcatSpreadable');\n\nfunction flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;\n var element, spreadable;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n spreadable = false;\n if (isObject(element)) {\n spreadable = element[IS_CONCAT_SPREADABLE];\n spreadable = spreadable !== undefined ? !!spreadable : isArray(element);\n }\n\n if (spreadable && depth > 0) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1fffffffffffff) throw TypeError();\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n}\n\nmodule.exports = flattenIntoArray;\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap\nvar $export = require('./_export');\nvar flattenIntoArray = require('./_flatten-into-array');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar aFunction = require('./_a-function');\nvar arraySpeciesCreate = require('./_array-species-create');\n\n$export($export.P, 'Array', {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen, A;\n aFunction(callbackfn);\n sourceLen = toLength(O.length);\n A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);\n return A;\n }\n});\n\nrequire('./_add-to-unscopables')('flatMap');\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatten\nvar $export = require('./_export');\nvar flattenIntoArray = require('./_flatten-into-array');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar arraySpeciesCreate = require('./_array-species-create');\n\n$export($export.P, 'Array', {\n flatten: function flatten(/* depthArg = 1 */) {\n var depthArg = arguments[0];\n var O = toObject(this);\n var sourceLen = toLength(O.length);\n var A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toInteger(depthArg));\n return A;\n }\n});\n\nrequire('./_add-to-unscopables')('flatten');\n","'use strict';\n// https://github.com/mathiasbynens/String.prototype.at\nvar $export = require('./_export');\nvar $at = require('./_string-at')(true);\n\n$export($export.P, 'String', {\n at: function at(pos) {\n return $at(this, pos);\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimLeft', function ($trim) {\n return function trimLeft() {\n return $trim(this, 1);\n };\n}, 'trimStart');\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimRight', function ($trim) {\n return function trimRight() {\n return $trim(this, 2);\n };\n}, 'trimEnd');\n","'use strict';\n// https://tc39.github.io/String.prototype.matchAll/\nvar $export = require('./_export');\nvar defined = require('./_defined');\nvar toLength = require('./_to-length');\nvar isRegExp = require('./_is-regexp');\nvar getFlags = require('./_flags');\nvar RegExpProto = RegExp.prototype;\n\nvar $RegExpStringIterator = function (regexp, string) {\n this._r = regexp;\n this._s = string;\n};\n\nrequire('./_iter-create')($RegExpStringIterator, 'RegExp String', function next() {\n var match = this._r.exec(this._s);\n return { value: match, done: match === null };\n});\n\n$export($export.P, 'String', {\n matchAll: function matchAll(regexp) {\n defined(this);\n if (!isRegExp(regexp)) throw TypeError(regexp + ' is not a regexp!');\n var S = String(this);\n var flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp);\n var rx = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags);\n rx.lastIndex = toLength(regexp.lastIndex);\n return new $RegExpStringIterator(rx, S);\n }\n});\n","require('./_wks-define')('asyncIterator');\n","require('./_wks-define')('observable');\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","var DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","'use strict';\n// Forced replacement prototype accessors methods\nmodule.exports = require('./_library') || !require('./_fails')(function () {\n var K = Math.random();\n // In FF throws only define methods\n // eslint-disable-next-line no-undef, no-useless-call\n __defineSetter__.call(null, K, function () { /* empty */ });\n delete require('./_global')[K];\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar aFunction = require('./_a-function');\nvar $defineProperty = require('./_object-dp');\n\n// B.2.2.2 Object.prototype.__defineGetter__(P, getter)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __defineGetter__: function __defineGetter__(P, getter) {\n $defineProperty.f(toObject(this), P, { get: aFunction(getter), enumerable: true, configurable: true });\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar aFunction = require('./_a-function');\nvar $defineProperty = require('./_object-dp');\n\n// B.2.2.3 Object.prototype.__defineSetter__(P, setter)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __defineSetter__: function __defineSetter__(P, setter) {\n $defineProperty.f(toObject(this), P, { set: aFunction(setter), enumerable: true, configurable: true });\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\nvar getPrototypeOf = require('./_object-gpo');\nvar getOwnPropertyDescriptor = require('./_object-gopd').f;\n\n// B.2.2.4 Object.prototype.__lookupGetter__(P)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __lookupGetter__: function __lookupGetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.get;\n } while (O = getPrototypeOf(O));\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\nvar getPrototypeOf = require('./_object-gpo');\nvar getOwnPropertyDescriptor = require('./_object-gopd').f;\n\n// B.2.2.5 Object.prototype.__lookupSetter__(P)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __lookupSetter__: function __lookupSetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.set;\n } while (O = getPrototypeOf(O));\n }\n});\n","var forOf = require('./_for-of');\n\nmodule.exports = function (iter, ITERATOR) {\n var result = [];\n forOf(iter, false, result.push, result, ITERATOR);\n return result;\n};\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar classof = require('./_classof');\nvar from = require('./_array-from-iterable');\nmodule.exports = function (NAME) {\n return function toJSON() {\n if (classof(this) != NAME) throw TypeError(NAME + \"#toJSON isn't generic\");\n return from(this);\n };\n};\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = require('./_export');\n\n$export($export.P + $export.R, 'Map', { toJSON: require('./_collection-to-json')('Map') });\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = require('./_export');\n\n$export($export.P + $export.R, 'Set', { toJSON: require('./_collection-to-json')('Set') });\n","'use strict';\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = require('./_export');\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { of: function of() {\n var length = arguments.length;\n var A = new Array(length);\n while (length--) A[length] = arguments[length];\n return new this(A);\n } });\n};\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-map.of\nrequire('./_set-collection-of')('Map');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of\nrequire('./_set-collection-of')('Set');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of\nrequire('./_set-collection-of')('WeakMap');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.of\nrequire('./_set-collection-of')('WeakSet');\n","'use strict';\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar ctx = require('./_ctx');\nvar forOf = require('./_for-of');\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {\n var mapFn = arguments[1];\n var mapping, A, n, cb;\n aFunction(this);\n mapping = mapFn !== undefined;\n if (mapping) aFunction(mapFn);\n if (source == undefined) return new this();\n A = [];\n if (mapping) {\n n = 0;\n cb = ctx(mapFn, arguments[2], 2);\n forOf(source, false, function (nextItem) {\n A.push(cb(nextItem, n++));\n });\n } else {\n forOf(source, false, A.push, A);\n }\n return new this(A);\n } });\n};\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-map.from\nrequire('./_set-collection-from')('Map');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from\nrequire('./_set-collection-from')('Set');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.from\nrequire('./_set-collection-from')('WeakMap');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.from\nrequire('./_set-collection-from')('WeakSet');\n","// https://github.com/tc39/proposal-global\nvar $export = require('./_export');\n\n$export($export.G, { global: require('./_global') });\n","// https://github.com/tc39/proposal-global\nvar $export = require('./_export');\n\n$export($export.S, 'System', { global: require('./_global') });\n","// https://github.com/ljharb/proposal-is-error\nvar $export = require('./_export');\nvar cof = require('./_cof');\n\n$export($export.S, 'Error', {\n isError: function isError(it) {\n return cof(it) === 'Error';\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clamp: function clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { DEG_PER_RAD: Math.PI / 180 });\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\nvar RAD_PER_DEG = 180 / Math.PI;\n\n$export($export.S, 'Math', {\n degrees: function degrees(radians) {\n return radians * RAD_PER_DEG;\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nmodule.exports = Math.scale || function scale(x, inLow, inHigh, outLow, outHigh) {\n if (\n arguments.length === 0\n // eslint-disable-next-line no-self-compare\n || x != x\n // eslint-disable-next-line no-self-compare\n || inLow != inLow\n // eslint-disable-next-line no-self-compare\n || inHigh != inHigh\n // eslint-disable-next-line no-self-compare\n || outLow != outLow\n // eslint-disable-next-line no-self-compare\n || outHigh != outHigh\n ) return NaN;\n if (x === Infinity || x === -Infinity) return x;\n return (x - inLow) * (outHigh - outLow) / (inHigh - inLow) + outLow;\n};\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\nvar scale = require('./_math-scale');\nvar fround = require('./_math-fround');\n\n$export($export.S, 'Math', {\n fscale: function fscale(x, inLow, inHigh, outLow, outHigh) {\n return fround(scale(x, inLow, inHigh, outLow, outHigh));\n }\n});\n","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n iaddh: function iaddh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;\n }\n});\n","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n isubh: function isubh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;\n }\n});\n","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n imulh: function imulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >> 16;\n var v1 = $v >> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16);\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { RAD_PER_DEG: 180 / Math.PI });\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\nvar DEG_PER_RAD = Math.PI / 180;\n\n$export($export.S, 'Math', {\n radians: function radians(degrees) {\n return degrees * DEG_PER_RAD;\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { scale: require('./_math-scale') });\n","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n umulh: function umulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >>> 16;\n var v1 = $v >>> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16);\n }\n});\n","// http://jfbastien.github.io/papers/Math.signbit.html\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { signbit: function signbit(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) != x ? x : x == 0 ? 1 / x == Infinity : x > 0;\n} });\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n","'use strict';\n// https://github.com/tc39/proposal-promise-try\nvar $export = require('./_export');\nvar newPromiseCapability = require('./_new-promise-capability');\nvar perform = require('./_perform');\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapability.f(this);\n var result = perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n","var Map = require('./es6.map');\nvar $export = require('./_export');\nvar shared = require('./_shared')('metadata');\nvar store = shared.store || (shared.store = new (require('./es6.weak-map'))());\n\nvar getOrCreateMetadataMap = function (target, targetKey, create) {\n var targetMetadata = store.get(target);\n if (!targetMetadata) {\n if (!create) return undefined;\n store.set(target, targetMetadata = new Map());\n }\n var keyMetadata = targetMetadata.get(targetKey);\n if (!keyMetadata) {\n if (!create) return undefined;\n targetMetadata.set(targetKey, keyMetadata = new Map());\n } return keyMetadata;\n};\nvar ordinaryHasOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? false : metadataMap.has(MetadataKey);\n};\nvar ordinaryGetOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);\n};\nvar ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) {\n getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);\n};\nvar ordinaryOwnMetadataKeys = function (target, targetKey) {\n var metadataMap = getOrCreateMetadataMap(target, targetKey, false);\n var keys = [];\n if (metadataMap) metadataMap.forEach(function (_, key) { keys.push(key); });\n return keys;\n};\nvar toMetaKey = function (it) {\n return it === undefined || typeof it == 'symbol' ? it : String(it);\n};\nvar exp = function (O) {\n $export($export.S, 'Reflect', O);\n};\n\nmodule.exports = {\n store: store,\n map: getOrCreateMetadataMap,\n has: ordinaryHasOwnMetadata,\n get: ordinaryGetOwnMetadata,\n set: ordinaryDefineOwnMetadata,\n keys: ordinaryOwnMetadataKeys,\n key: toMetaKey,\n exp: exp\n};\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar toMetaKey = metadata.key;\nvar ordinaryDefineOwnMetadata = metadata.set;\n\nmetadata.exp({ defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey) {\n ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar toMetaKey = metadata.key;\nvar getOrCreateMetadataMap = metadata.map;\nvar store = metadata.store;\n\nmetadata.exp({ deleteMetadata: function deleteMetadata(metadataKey, target /* , targetKey */) {\n var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2]);\n var metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);\n if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false;\n if (metadataMap.size) return true;\n var targetMetadata = store.get(target);\n targetMetadata['delete'](targetKey);\n return !!targetMetadata.size || store['delete'](target);\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nvar ordinaryGetMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return ordinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;\n};\n\nmetadata.exp({ getMetadata: function getMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var Set = require('./es6.set');\nvar from = require('./_array-from-iterable');\nvar metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nvar ordinaryMetadataKeys = function (O, P) {\n var oKeys = ordinaryOwnMetadataKeys(O, P);\n var parent = getPrototypeOf(O);\n if (parent === null) return oKeys;\n var pKeys = ordinaryMetadataKeys(parent, P);\n return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;\n};\n\nmetadata.exp({ getMetadataKeys: function getMetadataKeys(target /* , targetKey */) {\n return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadata: function getOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadataKeys: function getOwnMetadataKeys(target /* , targetKey */) {\n return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nvar ordinaryHasMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return true;\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;\n};\n\nmetadata.exp({ hasMetadata: function hasMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ hasOwnMetadata: function hasOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var $metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar toMetaKey = $metadata.key;\nvar ordinaryDefineOwnMetadata = $metadata.set;\n\n$metadata.exp({ metadata: function metadata(metadataKey, metadataValue) {\n return function decorator(target, targetKey) {\n ordinaryDefineOwnMetadata(\n metadataKey, metadataValue,\n (targetKey !== undefined ? anObject : aFunction)(target),\n toMetaKey(targetKey)\n );\n };\n} });\n","// https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask\nvar $export = require('./_export');\nvar microtask = require('./_microtask')();\nvar process = require('./_global').process;\nvar isNode = require('./_cof')(process) == 'process';\n\n$export($export.G, {\n asap: function asap(fn) {\n var domain = isNode && process.domain;\n microtask(domain ? domain.bind(fn) : fn);\n }\n});\n","'use strict';\n// https://github.com/zenparsing/es-observable\nvar $export = require('./_export');\nvar global = require('./_global');\nvar core = require('./_core');\nvar microtask = require('./_microtask')();\nvar OBSERVABLE = require('./_wks')('observable');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar anInstance = require('./_an-instance');\nvar redefineAll = require('./_redefine-all');\nvar hide = require('./_hide');\nvar forOf = require('./_for-of');\nvar RETURN = forOf.RETURN;\n\nvar getMethod = function (fn) {\n return fn == null ? undefined : aFunction(fn);\n};\n\nvar cleanupSubscription = function (subscription) {\n var cleanup = subscription._c;\n if (cleanup) {\n subscription._c = undefined;\n cleanup();\n }\n};\n\nvar subscriptionClosed = function (subscription) {\n return subscription._o === undefined;\n};\n\nvar closeSubscription = function (subscription) {\n if (!subscriptionClosed(subscription)) {\n subscription._o = undefined;\n cleanupSubscription(subscription);\n }\n};\n\nvar Subscription = function (observer, subscriber) {\n anObject(observer);\n this._c = undefined;\n this._o = observer;\n observer = new SubscriptionObserver(this);\n try {\n var cleanup = subscriber(observer);\n var subscription = cleanup;\n if (cleanup != null) {\n if (typeof cleanup.unsubscribe === 'function') cleanup = function () { subscription.unsubscribe(); };\n else aFunction(cleanup);\n this._c = cleanup;\n }\n } catch (e) {\n observer.error(e);\n return;\n } if (subscriptionClosed(this)) cleanupSubscription(this);\n};\n\nSubscription.prototype = redefineAll({}, {\n unsubscribe: function unsubscribe() { closeSubscription(this); }\n});\n\nvar SubscriptionObserver = function (subscription) {\n this._s = subscription;\n};\n\nSubscriptionObserver.prototype = redefineAll({}, {\n next: function next(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n try {\n var m = getMethod(observer.next);\n if (m) return m.call(observer, value);\n } catch (e) {\n try {\n closeSubscription(subscription);\n } finally {\n throw e;\n }\n }\n }\n },\n error: function error(value) {\n var subscription = this._s;\n if (subscriptionClosed(subscription)) throw value;\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.error);\n if (!m) throw value;\n value = m.call(observer, value);\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n },\n complete: function complete(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.complete);\n value = m ? m.call(observer, value) : undefined;\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n }\n }\n});\n\nvar $Observable = function Observable(subscriber) {\n anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber);\n};\n\nredefineAll($Observable.prototype, {\n subscribe: function subscribe(observer) {\n return new Subscription(observer, this._f);\n },\n forEach: function forEach(fn) {\n var that = this;\n return new (core.Promise || global.Promise)(function (resolve, reject) {\n aFunction(fn);\n var subscription = that.subscribe({\n next: function (value) {\n try {\n return fn(value);\n } catch (e) {\n reject(e);\n subscription.unsubscribe();\n }\n },\n error: reject,\n complete: resolve\n });\n });\n }\n});\n\nredefineAll($Observable, {\n from: function from(x) {\n var C = typeof this === 'function' ? this : $Observable;\n var method = getMethod(anObject(x)[OBSERVABLE]);\n if (method) {\n var observable = anObject(method.call(x));\n return observable.constructor === C ? observable : new C(function (observer) {\n return observable.subscribe(observer);\n });\n }\n return new C(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n try {\n if (forOf(x, false, function (it) {\n observer.next(it);\n if (done) return RETURN;\n }) === RETURN) return;\n } catch (e) {\n if (done) throw e;\n observer.error(e);\n return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n },\n of: function of() {\n for (var i = 0, l = arguments.length, items = new Array(l); i < l;) items[i] = arguments[i++];\n return new (typeof this === 'function' ? this : $Observable)(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n for (var j = 0; j < items.length; ++j) {\n observer.next(items[j]);\n if (done) return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n }\n});\n\nhide($Observable.prototype, OBSERVABLE, function () { return this; });\n\n$export($export.G, { Observable: $Observable });\n\nrequire('./_set-species')('Observable');\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","require('./modules/es6.symbol');\nrequire('./modules/es6.object.create');\nrequire('./modules/es6.object.define-property');\nrequire('./modules/es6.object.define-properties');\nrequire('./modules/es6.object.get-own-property-descriptor');\nrequire('./modules/es6.object.get-prototype-of');\nrequire('./modules/es6.object.keys');\nrequire('./modules/es6.object.get-own-property-names');\nrequire('./modules/es6.object.freeze');\nrequire('./modules/es6.object.seal');\nrequire('./modules/es6.object.prevent-extensions');\nrequire('./modules/es6.object.is-frozen');\nrequire('./modules/es6.object.is-sealed');\nrequire('./modules/es6.object.is-extensible');\nrequire('./modules/es6.object.assign');\nrequire('./modules/es6.object.is');\nrequire('./modules/es6.object.set-prototype-of');\nrequire('./modules/es6.object.to-string');\nrequire('./modules/es6.function.bind');\nrequire('./modules/es6.function.name');\nrequire('./modules/es6.function.has-instance');\nrequire('./modules/es6.parse-int');\nrequire('./modules/es6.parse-float');\nrequire('./modules/es6.number.constructor');\nrequire('./modules/es6.number.to-fixed');\nrequire('./modules/es6.number.to-precision');\nrequire('./modules/es6.number.epsilon');\nrequire('./modules/es6.number.is-finite');\nrequire('./modules/es6.number.is-integer');\nrequire('./modules/es6.number.is-nan');\nrequire('./modules/es6.number.is-safe-integer');\nrequire('./modules/es6.number.max-safe-integer');\nrequire('./modules/es6.number.min-safe-integer');\nrequire('./modules/es6.number.parse-float');\nrequire('./modules/es6.number.parse-int');\nrequire('./modules/es6.math.acosh');\nrequire('./modules/es6.math.asinh');\nrequire('./modules/es6.math.atanh');\nrequire('./modules/es6.math.cbrt');\nrequire('./modules/es6.math.clz32');\nrequire('./modules/es6.math.cosh');\nrequire('./modules/es6.math.expm1');\nrequire('./modules/es6.math.fround');\nrequire('./modules/es6.math.hypot');\nrequire('./modules/es6.math.imul');\nrequire('./modules/es6.math.log10');\nrequire('./modules/es6.math.log1p');\nrequire('./modules/es6.math.log2');\nrequire('./modules/es6.math.sign');\nrequire('./modules/es6.math.sinh');\nrequire('./modules/es6.math.tanh');\nrequire('./modules/es6.math.trunc');\nrequire('./modules/es6.string.from-code-point');\nrequire('./modules/es6.string.raw');\nrequire('./modules/es6.string.trim');\nrequire('./modules/es6.string.iterator');\nrequire('./modules/es6.string.code-point-at');\nrequire('./modules/es6.string.ends-with');\nrequire('./modules/es6.string.includes');\nrequire('./modules/es6.string.repeat');\nrequire('./modules/es6.string.starts-with');\nrequire('./modules/es6.string.anchor');\nrequire('./modules/es6.string.big');\nrequire('./modules/es6.string.blink');\nrequire('./modules/es6.string.bold');\nrequire('./modules/es6.string.fixed');\nrequire('./modules/es6.string.fontcolor');\nrequire('./modules/es6.string.fontsize');\nrequire('./modules/es6.string.italics');\nrequire('./modules/es6.string.link');\nrequire('./modules/es6.string.small');\nrequire('./modules/es6.string.strike');\nrequire('./modules/es6.string.sub');\nrequire('./modules/es6.string.sup');\nrequire('./modules/es6.date.now');\nrequire('./modules/es6.date.to-json');\nrequire('./modules/es6.date.to-iso-string');\nrequire('./modules/es6.date.to-string');\nrequire('./modules/es6.date.to-primitive');\nrequire('./modules/es6.array.is-array');\nrequire('./modules/es6.array.from');\nrequire('./modules/es6.array.of');\nrequire('./modules/es6.array.join');\nrequire('./modules/es6.array.slice');\nrequire('./modules/es6.array.sort');\nrequire('./modules/es6.array.for-each');\nrequire('./modules/es6.array.map');\nrequire('./modules/es6.array.filter');\nrequire('./modules/es6.array.some');\nrequire('./modules/es6.array.every');\nrequire('./modules/es6.array.reduce');\nrequire('./modules/es6.array.reduce-right');\nrequire('./modules/es6.array.index-of');\nrequire('./modules/es6.array.last-index-of');\nrequire('./modules/es6.array.copy-within');\nrequire('./modules/es6.array.fill');\nrequire('./modules/es6.array.find');\nrequire('./modules/es6.array.find-index');\nrequire('./modules/es6.array.species');\nrequire('./modules/es6.array.iterator');\nrequire('./modules/es6.regexp.constructor');\nrequire('./modules/es6.regexp.exec');\nrequire('./modules/es6.regexp.to-string');\nrequire('./modules/es6.regexp.flags');\nrequire('./modules/es6.regexp.match');\nrequire('./modules/es6.regexp.replace');\nrequire('./modules/es6.regexp.search');\nrequire('./modules/es6.regexp.split');\nrequire('./modules/es6.promise');\nrequire('./modules/es6.map');\nrequire('./modules/es6.set');\nrequire('./modules/es6.weak-map');\nrequire('./modules/es6.weak-set');\nrequire('./modules/es6.typed.array-buffer');\nrequire('./modules/es6.typed.data-view');\nrequire('./modules/es6.typed.int8-array');\nrequire('./modules/es6.typed.uint8-array');\nrequire('./modules/es6.typed.uint8-clamped-array');\nrequire('./modules/es6.typed.int16-array');\nrequire('./modules/es6.typed.uint16-array');\nrequire('./modules/es6.typed.int32-array');\nrequire('./modules/es6.typed.uint32-array');\nrequire('./modules/es6.typed.float32-array');\nrequire('./modules/es6.typed.float64-array');\nrequire('./modules/es6.reflect.apply');\nrequire('./modules/es6.reflect.construct');\nrequire('./modules/es6.reflect.define-property');\nrequire('./modules/es6.reflect.delete-property');\nrequire('./modules/es6.reflect.enumerate');\nrequire('./modules/es6.reflect.get');\nrequire('./modules/es6.reflect.get-own-property-descriptor');\nrequire('./modules/es6.reflect.get-prototype-of');\nrequire('./modules/es6.reflect.has');\nrequire('./modules/es6.reflect.is-extensible');\nrequire('./modules/es6.reflect.own-keys');\nrequire('./modules/es6.reflect.prevent-extensions');\nrequire('./modules/es6.reflect.set');\nrequire('./modules/es6.reflect.set-prototype-of');\nrequire('./modules/es7.array.includes');\nrequire('./modules/es7.array.flat-map');\nrequire('./modules/es7.array.flatten');\nrequire('./modules/es7.string.at');\nrequire('./modules/es7.string.pad-start');\nrequire('./modules/es7.string.pad-end');\nrequire('./modules/es7.string.trim-left');\nrequire('./modules/es7.string.trim-right');\nrequire('./modules/es7.string.match-all');\nrequire('./modules/es7.symbol.async-iterator');\nrequire('./modules/es7.symbol.observable');\nrequire('./modules/es7.object.get-own-property-descriptors');\nrequire('./modules/es7.object.values');\nrequire('./modules/es7.object.entries');\nrequire('./modules/es7.object.define-getter');\nrequire('./modules/es7.object.define-setter');\nrequire('./modules/es7.object.lookup-getter');\nrequire('./modules/es7.object.lookup-setter');\nrequire('./modules/es7.map.to-json');\nrequire('./modules/es7.set.to-json');\nrequire('./modules/es7.map.of');\nrequire('./modules/es7.set.of');\nrequire('./modules/es7.weak-map.of');\nrequire('./modules/es7.weak-set.of');\nrequire('./modules/es7.map.from');\nrequire('./modules/es7.set.from');\nrequire('./modules/es7.weak-map.from');\nrequire('./modules/es7.weak-set.from');\nrequire('./modules/es7.global');\nrequire('./modules/es7.system.global');\nrequire('./modules/es7.error.is-error');\nrequire('./modules/es7.math.clamp');\nrequire('./modules/es7.math.deg-per-rad');\nrequire('./modules/es7.math.degrees');\nrequire('./modules/es7.math.fscale');\nrequire('./modules/es7.math.iaddh');\nrequire('./modules/es7.math.isubh');\nrequire('./modules/es7.math.imulh');\nrequire('./modules/es7.math.rad-per-deg');\nrequire('./modules/es7.math.radians');\nrequire('./modules/es7.math.scale');\nrequire('./modules/es7.math.umulh');\nrequire('./modules/es7.math.signbit');\nrequire('./modules/es7.promise.finally');\nrequire('./modules/es7.promise.try');\nrequire('./modules/es7.reflect.define-metadata');\nrequire('./modules/es7.reflect.delete-metadata');\nrequire('./modules/es7.reflect.get-metadata');\nrequire('./modules/es7.reflect.get-metadata-keys');\nrequire('./modules/es7.reflect.get-own-metadata');\nrequire('./modules/es7.reflect.get-own-metadata-keys');\nrequire('./modules/es7.reflect.has-metadata');\nrequire('./modules/es7.reflect.has-own-metadata');\nrequire('./modules/es7.reflect.metadata');\nrequire('./modules/es7.asap');\nrequire('./modules/es7.observable');\nrequire('./modules/web.timers');\nrequire('./modules/web.immediate');\nrequire('./modules/web.dom.iterable');\nmodule.exports = require('./modules/_core');\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","module.exports = function (regExp, replace) {\n var replacer = replace === Object(replace) ? function (part) {\n return replace[part];\n } : replace;\n return function (it) {\n return String(it).replace(regExp, replacer);\n };\n};\n","// https://github.com/benjamingr/RexExp.escape\nvar $export = require('./_export');\nvar $re = require('./_replacer')(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n$export($export.S, 'RegExp', { escape: function escape(it) { return $re(it); } });\n","require('../../modules/core.regexp.escape');\nmodule.exports = require('../../modules/_core').RegExp.escape;\n","\"use strict\";\n\nrequire(\"core-js/shim\");\n\nrequire(\"regenerator-runtime/runtime\");\n\nrequire(\"core-js/fn/regexp/escape\");\n\nif (global._babelPolyfill) {\n throw new Error(\"only one instance of babel-polyfill is allowed\");\n}\nglobal._babelPolyfill = true;\n\nvar DEFINE_PROPERTY = \"defineProperty\";\nfunction define(O, key, value) {\n O[key] || Object[DEFINE_PROPERTY](O, key, {\n writable: true,\n configurable: true,\n value: value\n });\n}\n\ndefine(String.prototype, \"padLeft\", \"\".padStart);\ndefine(String.prototype, \"padRight\", \"\".padEnd);\n\n\"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill\".split(\",\").forEach(function (key) {\n [][key] && define(Array, key, Function.call.bind([][key]));\n});","export default class ScrollSpy {\n constructor(args) {\n\n this.doc = document;\n this.nav = this.doc.querySelectorAll(args.navSelector);\n\n if(!this.nav.length === 0) { return }\n\n this.win = window;\n this.winHeight = this.win.innerHeight;\n\n this.scrollElement = this.doc.querySelector(args.scrollSelector);\n this.className = args.className;\n this.offsetTop = args.offsetTop || 0;\n\n this.contents = [];\n this.contents = this.getContents(args.contentSelector);\n\n this.attachEvent();\n }\n\n attachEvent() {\n let scrollTimer;\n this.scrollElement.addEventListener('scroll', () => {\n if (scrollTimer) {\n clearTimeout(scrollTimer);\n }\n\n scrollTimer = setTimeout(() => {\n this.spy();\n }, 1);\n });\n\n let resizeTimer;\n this.scrollElement.addEventListener('resize', () => {\n if (resizeTimer) {\n clearTimeout(resizeTimer);\n }\n\n resizeTimer = setTimeout(() => {\n this.spy();\n }, 1);\n });\n\n this.scrollElement.addEventListener(\"click\", (e) => {\n const target = e.target;\n if (target.tagName !== \"A\") return;\n window.onclickToc = true;\n for (let i = 0, max = this.nav.length; i < max; i++) {\n const navElement = this.nav[i];\n if (navElement.href === target.href) {\n navElement.classList.add(this.className);\n navElement.classList.add('mdl-color-text--primary');\n } else {\n navElement.classList.remove(this.className);\n navElement.classList.remove('mdl-color-text--primary');\n }\n }\n });\n }\n\n getContents(contentSelector) {\n const targets = [];\n for (let i = 0, max = this.nav.length; i < max; i++) {\n const href = this.nav[i].href;\n targets.push(this.doc.getElementById(href.split('#')[1]));\n }\n return targets;\n }\n\n spy() {\n let elements = this.getViewState();\n this.toggleNavClass(elements);\n }\n\n getViewState() {\n const elementListInView = [];\n for (let i = 0, max = this.contents.length; i < max; i++) {\n const current = this.contents[i];\n if (current && this.isView(current)) {\n elementListInView.push(current);\n }\n }\n\n return elementListInView;\n }\n\n isView(element) {\n const scrollTop = this.scrollElement.scrollTop;\n const subHeaderRect = document.querySelector(\".mdl-layout__header-row\").getBoundingClientRect();\n const headerHeight = subHeaderRect.top + subHeaderRect.height;\n const scrollBottom = scrollTop + window.innerHeight - headerHeight;\n const rect = element.getBoundingClientRect();\n const elementTop = rect.top + scrollTop;\n const elementBottom = elementTop + element.offsetHeight;\n\n return elementTop < scrollBottom - 30 && elementBottom > scrollTop + headerHeight + 30;\n }\n\n toggleNavClass(elements) {\n if (window.onclickToc) {\n window.onclickToc = false;\n return;\n }\n let maxDepth = 0;\n let maxDepthElement = $();\n\n for (let i = 0, max = elements.length; i < max; i++) {\n const el = elements[i];\n const tempDepth = this.getTagDepth(el);\n if (maxDepth < tempDepth) {\n maxDepth = tempDepth;\n maxDepthElement = el;\n }\n }\n\n for (let i = 0, max = this.nav.length; i < max; i++) {\n const navElement = this.nav[i];\n if (navElement.href.split('#')[1] === maxDepthElement.id) {\n navElement.classList.add(this.className);\n navElement.classList.add('mdl-color-text--primary');\n } else {\n navElement.classList.remove(this.className);\n navElement.classList.remove('mdl-color-text--primary');\n }\n }\n }\n\n getTagDepth(element) {\n return parseInt($(element).find('h1,h2,h3,h4,h5,h6').get(0).tagName.split('H')[1]);\n }\n}\n","import \"../scss/sphinx_materialdesign_theme.scss\";\r\nimport \"./feedback\";\r\nimport \"material-design-lite\";\r\nimport \"babel-polyfill\";\r\nimport ScrollSpy from \"./scrollspy\";\r\n\r\n$(function() {\r\n\r\n function reconstructionDrawerGlobalToc() {\r\n const $globaltoc = $('.mdl-layout__drawer nav');\r\n const $lists = $globaltoc.find('li');\r\n $.each($lists, function(index, li) {\r\n const $li = $(li);\r\n const $linkWrapper = $('');\r\n const $link = $li.children('a');\r\n $li.append($linkWrapper.append($link));\r\n\r\n const isCurrent = $li.hasClass('current') && !$link.hasClass('current');\r\n const $ul = $li.children('ul');\r\n if ($ul.length) {\r\n const ulId = `globalnav-${index}`;\r\n $ul.attr('id', ulId);\r\n $ul.addClass('collapse');\r\n const $toggleWrapper = $('');\r\n if (isCurrent) {\r\n $ul.addClass('show');\r\n $toggleWrapper.addClass('show');\r\n } else {\r\n $ul.hide();\r\n }\r\n\r\n $li.append(\r\n $linkWrapper.append(\r\n $toggleWrapper.append(\r\n $(`keyboard_arrow_down`)\r\n )\r\n )\r\n ).append($ul);\r\n }\r\n });\r\n }\r\n\r\n function collapse() {\r\n $('.mdl-layout__drawer nav .nav-toggle a').click(function() {\r\n const $toggle = $(this);\r\n const id = $toggle.attr('data-toggle');\r\n $(`ul${id}`).toggleClass('show').animate({height: \"toggle\", opacity: \"toggle\"});\r\n $toggle.parent().toggleClass('show');\r\n });\r\n }\r\n\r\n function styleMdlCodeBlock() {\r\n $('pre').hover(function() {\r\n $(this).attr('click-to-copy', 'click to copy...');\r\n });\r\n $('pre').click(function(){\r\n var result = copyClipboard(this);\r\n if (result) {\r\n $(this).attr('click-to-copy', 'copied!');\r\n }\r\n });\r\n }\r\n\r\n function copyClipboard(selector) {\r\n var body = document.body;\r\n if(!body) return false;\r\n\r\n var $target = $(selector);\r\n if ($target.length === 0) { return false; }\r\n\r\n var text = $target.text();\r\n var textarea = document.createElement('textarea');\r\n textarea.value = text;\r\n document.body.appendChild(textarea);\r\n textarea.select();\r\n var result = document.execCommand('copy');\r\n document.body.removeChild(textarea);\r\n return result;\r\n }\r\n\r\n function quickSearchClickEvent() {\r\n const $breadcrumb = $('.breadcrumb');\r\n\r\n $('#waterfall-exp').focus(() => {\r\n if ($(window).width() <= 1024) {\r\n $breadcrumb.hide();\r\n }\r\n }).blur(() => {\r\n if ($(window).width() <= 1024) {\r\n $breadcrumb.show();\r\n }\r\n });\r\n }\r\n\r\n // styleMdlCodeBlock();\r\n\r\n reconstructionDrawerGlobalToc();\r\n collapse();\r\n quickSearchClickEvent();\r\n\r\n\r\n const spy = new ScrollSpy({\r\n contentSelector: '.page-content .section',\r\n navSelector: '.localtoc a',\r\n scrollSelector: 'main' ,\r\n className: 'current',\r\n offsetTop: 64});\r\n\r\n $('.mdl-layout__content').focus();\r\n\r\n $('.mx-card').each(function(){\r\n $(this).addClass('mdl-card mdl-shadow--2dp');\r\n });\r\n $('.mx-card .mx-card-title').each(function(){\r\n $(this).addClass('mdl-card__title');\r\n });\r\n $('.mx-card .mx-card-text').each(function(){\r\n $(this).addClass('mdl-card__supporting-text');\r\n });\r\n $('.mx-card-link').each(function(){\r\n $(this).hide();\r\n });\r\n $('.mdl-card').each(function(){\r\n $(this).click(function() {\r\n var url = $(this).find('.mx-card-link').text();\r\n if (url) {\r\n window.location = url;\r\n }\r\n return true;\r\n });\r\n });\r\n\r\n $('a.download').each(function() {\r\n // button\r\n var button = document.createElement('button');\r\n button.className = 'download mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect';\r\n\r\n // icon\r\n var icon = document.createElement('i');\r\n icon.className = 'material-icons';\r\n var text = document.createTextNode('file_download');\r\n icon.appendChild(text);\r\n button.appendChild(icon);\r\n\r\n // link\r\n var link = $(this).attr('href');\r\n button.onclick = function() {\r\n window.location = link;\r\n };\r\n var fileName = link.split(\"/\").slice(-1).pop();\r\n if (fileName) {\r\n button.id = fileName.replace('.', '-');\r\n } else {\r\n button.id = 'download-button-' + $(this).index();\r\n }\r\n\r\n // hint\r\n var hint = document.createElement('div');\r\n hint.className = 'mdl-tooltip';\r\n hint.setAttribute('data-mdl-for', button.id);\r\n var hintText = $(this).find('span.pre').map(function() {\r\n return $(this).text();\r\n }).get().join(' ');\r\n hint.innerHTML = hintText;\r\n\r\n componentHandler.upgradeElement(button);\r\n $(this).remove();\r\n var header = $('.section h1').first();\r\n header.append(button);\r\n header.append(hint);\r\n });\r\n\r\n $('.mdl-layout').css('visibility', 'visible');\r\n\r\n});\r\n"]} \ No newline at end of file +{"version":3,"sources":["feedback.js","ripple.js","tabs.js","layout.js","mdlComponentHandler.js","rAF.js","button.js","checkbox.js","icon-toggle.js","menu.js","progress.js","radio.js","slider.js","snackbar.js","spinner.js","switch.js","textfield.js","tooltip.js","data-table.js","../../node_modules/core-js/modules/_global.js","../../node_modules/core-js/modules/_has.js","../../node_modules/core-js/modules/_fails.js","../../node_modules/core-js/modules/_descriptors.js","../../node_modules/core-js/modules/_core.js","../../node_modules/core-js/modules/_is-object.js","../../node_modules/core-js/modules/_an-object.js","../../node_modules/core-js/modules/_dom-create.js","../../node_modules/core-js/modules/_ie8-dom-define.js","../../node_modules/core-js/modules/_to-primitive.js","../../node_modules/core-js/modules/_object-dp.js","../../node_modules/core-js/modules/_property-desc.js","../../node_modules/core-js/modules/_hide.js","../../node_modules/core-js/modules/_uid.js","../../node_modules/core-js/modules/_library.js","../../node_modules/core-js/modules/_shared.js","../../node_modules/core-js/modules/_function-to-string.js","../../node_modules/core-js/modules/_redefine.js","../../node_modules/core-js/modules/_a-function.js","../../node_modules/core-js/modules/_ctx.js","../../node_modules/core-js/modules/_export.js","../../node_modules/core-js/modules/_meta.js","../../node_modules/core-js/modules/_wks.js","../../node_modules/core-js/modules/_set-to-string-tag.js","../../node_modules/core-js/modules/_wks-ext.js","../../node_modules/core-js/modules/_wks-define.js","../../node_modules/core-js/modules/_cof.js","../../node_modules/core-js/modules/_iobject.js","../../node_modules/core-js/modules/_defined.js","../../node_modules/core-js/modules/_to-iobject.js","../../node_modules/core-js/modules/_to-integer.js","../../node_modules/core-js/modules/_to-length.js","../../node_modules/core-js/modules/_to-absolute-index.js","../../node_modules/core-js/modules/_array-includes.js","../../node_modules/core-js/modules/_shared-key.js","../../node_modules/core-js/modules/_object-keys-internal.js","../../node_modules/core-js/modules/_enum-bug-keys.js","../../node_modules/core-js/modules/_object-keys.js","../../node_modules/core-js/modules/_object-gops.js","../../node_modules/core-js/modules/_object-pie.js","../../node_modules/core-js/modules/_enum-keys.js","../../node_modules/core-js/modules/_is-array.js","../../node_modules/core-js/modules/_to-object.js","../../node_modules/core-js/modules/_object-dps.js","../../node_modules/core-js/modules/_html.js","../../node_modules/core-js/modules/_object-create.js","../../node_modules/core-js/modules/_object-gopn.js","../../node_modules/core-js/modules/_object-gopn-ext.js","../../node_modules/core-js/modules/_object-gopd.js","../../node_modules/core-js/modules/es6.symbol.js","../../node_modules/core-js/modules/es6.object.create.js","../../node_modules/core-js/modules/es6.object.define-property.js","../../node_modules/core-js/modules/es6.object.define-properties.js","../../node_modules/core-js/modules/_object-sap.js","../../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","../../node_modules/core-js/modules/_object-gpo.js","../../node_modules/core-js/modules/es6.object.get-prototype-of.js","../../node_modules/core-js/modules/es6.object.keys.js","../../node_modules/core-js/modules/es6.object.get-own-property-names.js","../../node_modules/core-js/modules/es6.object.freeze.js","../../node_modules/core-js/modules/es6.object.seal.js","../../node_modules/core-js/modules/es6.object.prevent-extensions.js","../../node_modules/core-js/modules/es6.object.is-frozen.js","../../node_modules/core-js/modules/es6.object.is-sealed.js","../../node_modules/core-js/modules/es6.object.is-extensible.js","../../node_modules/core-js/modules/_object-assign.js","../../node_modules/core-js/modules/es6.object.assign.js","../../node_modules/core-js/modules/_same-value.js","../../node_modules/core-js/modules/es6.object.is.js","../../node_modules/core-js/modules/_set-proto.js","../../node_modules/core-js/modules/es6.object.set-prototype-of.js","../../node_modules/core-js/modules/_classof.js","../../node_modules/core-js/modules/es6.object.to-string.js","../../node_modules/core-js/modules/_invoke.js","../../node_modules/core-js/modules/_bind.js","../../node_modules/core-js/modules/es6.function.bind.js","../../node_modules/core-js/modules/es6.function.name.js","../../node_modules/core-js/modules/es6.function.has-instance.js","../../node_modules/core-js/modules/_string-ws.js","../../node_modules/core-js/modules/_string-trim.js","../../node_modules/core-js/modules/_parse-int.js","../../node_modules/core-js/modules/es6.parse-int.js","../../node_modules/core-js/modules/_parse-float.js","../../node_modules/core-js/modules/es6.parse-float.js","../../node_modules/core-js/modules/_inherit-if-required.js","../../node_modules/core-js/modules/es6.number.constructor.js","../../node_modules/core-js/modules/_a-number-value.js","../../node_modules/core-js/modules/_string-repeat.js","../../node_modules/core-js/modules/es6.number.to-fixed.js","../../node_modules/core-js/modules/es6.number.to-precision.js","../../node_modules/core-js/modules/es6.number.epsilon.js","../../node_modules/core-js/modules/es6.number.is-finite.js","../../node_modules/core-js/modules/_is-integer.js","../../node_modules/core-js/modules/es6.number.is-integer.js","../../node_modules/core-js/modules/es6.number.is-nan.js","../../node_modules/core-js/modules/es6.number.is-safe-integer.js","../../node_modules/core-js/modules/es6.number.max-safe-integer.js","../../node_modules/core-js/modules/es6.number.min-safe-integer.js","../../node_modules/core-js/modules/es6.number.parse-float.js","../../node_modules/core-js/modules/es6.number.parse-int.js","../../node_modules/core-js/modules/_math-log1p.js","../../node_modules/core-js/modules/es6.math.acosh.js","../../node_modules/core-js/modules/es6.math.asinh.js","../../node_modules/core-js/modules/es6.math.atanh.js","../../node_modules/core-js/modules/_math-sign.js","../../node_modules/core-js/modules/es6.math.cbrt.js","../../node_modules/core-js/modules/es6.math.clz32.js","../../node_modules/core-js/modules/es6.math.cosh.js","../../node_modules/core-js/modules/_math-expm1.js","../../node_modules/core-js/modules/es6.math.expm1.js","../../node_modules/core-js/modules/_math-fround.js","../../node_modules/core-js/modules/es6.math.fround.js","../../node_modules/core-js/modules/es6.math.hypot.js","../../node_modules/core-js/modules/es6.math.imul.js","../../node_modules/core-js/modules/es6.math.log10.js","../../node_modules/core-js/modules/es6.math.log1p.js","../../node_modules/core-js/modules/es6.math.log2.js","../../node_modules/core-js/modules/es6.math.sign.js","../../node_modules/core-js/modules/es6.math.sinh.js","../../node_modules/core-js/modules/es6.math.tanh.js","../../node_modules/core-js/modules/es6.math.trunc.js","../../node_modules/core-js/modules/es6.string.from-code-point.js","../../node_modules/core-js/modules/es6.string.raw.js","../../node_modules/core-js/modules/es6.string.trim.js","../../node_modules/core-js/modules/_string-at.js","../../node_modules/core-js/modules/_iterators.js","../../node_modules/core-js/modules/_iter-create.js","../../node_modules/core-js/modules/_iter-define.js","../../node_modules/core-js/modules/es6.string.iterator.js","../../node_modules/core-js/modules/es6.string.code-point-at.js","../../node_modules/core-js/modules/_is-regexp.js","../../node_modules/core-js/modules/_string-context.js","../../node_modules/core-js/modules/_fails-is-regexp.js","../../node_modules/core-js/modules/es6.string.ends-with.js","../../node_modules/core-js/modules/es6.string.includes.js","../../node_modules/core-js/modules/es6.string.repeat.js","../../node_modules/core-js/modules/es6.string.starts-with.js","../../node_modules/core-js/modules/_string-html.js","../../node_modules/core-js/modules/es6.string.anchor.js","../../node_modules/core-js/modules/es6.string.big.js","../../node_modules/core-js/modules/es6.string.blink.js","../../node_modules/core-js/modules/es6.string.bold.js","../../node_modules/core-js/modules/es6.string.fixed.js","../../node_modules/core-js/modules/es6.string.fontcolor.js","../../node_modules/core-js/modules/es6.string.fontsize.js","../../node_modules/core-js/modules/es6.string.italics.js","../../node_modules/core-js/modules/es6.string.link.js","../../node_modules/core-js/modules/es6.string.small.js","../../node_modules/core-js/modules/es6.string.strike.js","../../node_modules/core-js/modules/es6.string.sub.js","../../node_modules/core-js/modules/es6.string.sup.js","../../node_modules/core-js/modules/es6.date.now.js","../../node_modules/core-js/modules/es6.date.to-json.js","../../node_modules/core-js/modules/_date-to-iso-string.js","../../node_modules/core-js/modules/es6.date.to-iso-string.js","../../node_modules/core-js/modules/es6.date.to-string.js","../../node_modules/core-js/modules/_date-to-primitive.js","../../node_modules/core-js/modules/es6.date.to-primitive.js","../../node_modules/core-js/modules/es6.array.is-array.js","../../node_modules/core-js/modules/_iter-call.js","../../node_modules/core-js/modules/_is-array-iter.js","../../node_modules/core-js/modules/_create-property.js","../../node_modules/core-js/modules/core.get-iterator-method.js","../../node_modules/core-js/modules/_iter-detect.js","../../node_modules/core-js/modules/es6.array.from.js","../../node_modules/core-js/modules/es6.array.of.js","../../node_modules/core-js/modules/_strict-method.js","../../node_modules/core-js/modules/es6.array.join.js","../../node_modules/core-js/modules/es6.array.slice.js","../../node_modules/core-js/modules/es6.array.sort.js","../../node_modules/core-js/modules/_array-species-constructor.js","../../node_modules/core-js/modules/_array-species-create.js","../../node_modules/core-js/modules/_array-methods.js","../../node_modules/core-js/modules/es6.array.for-each.js","../../node_modules/core-js/modules/es6.array.map.js","../../node_modules/core-js/modules/es6.array.filter.js","../../node_modules/core-js/modules/es6.array.some.js","../../node_modules/core-js/modules/es6.array.every.js","../../node_modules/core-js/modules/_array-reduce.js","../../node_modules/core-js/modules/es6.array.reduce.js","../../node_modules/core-js/modules/es6.array.reduce-right.js","../../node_modules/core-js/modules/es6.array.index-of.js","../../node_modules/core-js/modules/es6.array.last-index-of.js","../../node_modules/core-js/modules/_array-copy-within.js","../../node_modules/core-js/modules/_add-to-unscopables.js","../../node_modules/core-js/modules/es6.array.copy-within.js","../../node_modules/core-js/modules/_array-fill.js","../../node_modules/core-js/modules/es6.array.fill.js","../../node_modules/core-js/modules/es6.array.find.js","../../node_modules/core-js/modules/es6.array.find-index.js","../../node_modules/core-js/modules/_set-species.js","../../node_modules/core-js/modules/es6.array.species.js","../../node_modules/core-js/modules/_iter-step.js","../../node_modules/core-js/modules/es6.array.iterator.js","../../node_modules/core-js/modules/_flags.js","../../node_modules/core-js/modules/es6.regexp.constructor.js","../../node_modules/core-js/modules/_regexp-exec.js","../../node_modules/core-js/modules/es6.regexp.exec.js","../../node_modules/core-js/modules/es6.regexp.flags.js","../../node_modules/core-js/modules/es6.regexp.to-string.js","../../node_modules/core-js/modules/_advance-string-index.js","../../node_modules/core-js/modules/_regexp-exec-abstract.js","../../node_modules/core-js/modules/_fix-re-wks.js","../../node_modules/core-js/modules/es6.regexp.match.js","../../node_modules/core-js/modules/es6.regexp.replace.js","../../node_modules/core-js/modules/es6.regexp.search.js","../../node_modules/core-js/modules/_species-constructor.js","../../node_modules/core-js/modules/es6.regexp.split.js","../../node_modules/core-js/modules/_an-instance.js","../../node_modules/core-js/modules/_for-of.js","../../node_modules/core-js/modules/_task.js","../../node_modules/core-js/modules/_microtask.js","../../node_modules/core-js/modules/_new-promise-capability.js","../../node_modules/core-js/modules/_perform.js","../../node_modules/core-js/modules/_user-agent.js","../../node_modules/core-js/modules/_promise-resolve.js","../../node_modules/core-js/modules/_redefine-all.js","../../node_modules/core-js/modules/es6.promise.js","../../node_modules/core-js/modules/_validate-collection.js","../../node_modules/core-js/modules/_collection-strong.js","../../node_modules/core-js/modules/_collection.js","../../node_modules/core-js/modules/es6.map.js","../../node_modules/core-js/modules/es6.set.js","../../node_modules/core-js/modules/_collection-weak.js","../../node_modules/core-js/modules/es6.weak-map.js","../../node_modules/core-js/modules/es6.weak-set.js","../../node_modules/core-js/modules/_typed.js","../../node_modules/core-js/modules/_to-index.js","../../node_modules/core-js/modules/_typed-buffer.js","../../node_modules/core-js/modules/es6.typed.array-buffer.js","../../node_modules/core-js/modules/es6.typed.data-view.js","../../node_modules/core-js/modules/_typed-array.js","../../node_modules/core-js/modules/es6.typed.int8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","../../node_modules/core-js/modules/es6.typed.int16-array.js","../../node_modules/core-js/modules/es6.typed.uint16-array.js","../../node_modules/core-js/modules/es6.typed.int32-array.js","../../node_modules/core-js/modules/es6.typed.uint32-array.js","../../node_modules/core-js/modules/es6.typed.float32-array.js","../../node_modules/core-js/modules/es6.typed.float64-array.js","../../node_modules/core-js/modules/es6.reflect.apply.js","../../node_modules/core-js/modules/es6.reflect.construct.js","../../node_modules/core-js/modules/es6.reflect.define-property.js","../../node_modules/core-js/modules/es6.reflect.delete-property.js","../../node_modules/core-js/modules/es6.reflect.enumerate.js","../../node_modules/core-js/modules/es6.reflect.get.js","../../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.reflect.get-prototype-of.js","../../node_modules/core-js/modules/es6.reflect.has.js","../../node_modules/core-js/modules/es6.reflect.is-extensible.js","../../node_modules/core-js/modules/_own-keys.js","../../node_modules/core-js/modules/es6.reflect.own-keys.js","../../node_modules/core-js/modules/es6.reflect.prevent-extensions.js","../../node_modules/core-js/modules/es6.reflect.set.js","../../node_modules/core-js/modules/es6.reflect.set-prototype-of.js","../../node_modules/core-js/modules/es7.array.includes.js","../../node_modules/core-js/modules/_flatten-into-array.js","../../node_modules/core-js/modules/es7.array.flat-map.js","../../node_modules/core-js/modules/es7.array.flatten.js","../../node_modules/core-js/modules/es7.string.at.js","../../node_modules/core-js/modules/_string-pad.js","../../node_modules/core-js/modules/es7.string.pad-start.js","../../node_modules/core-js/modules/es7.string.pad-end.js","../../node_modules/core-js/modules/es7.string.trim-left.js","../../node_modules/core-js/modules/es7.string.trim-right.js","../../node_modules/core-js/modules/es7.string.match-all.js","../../node_modules/core-js/modules/es7.symbol.async-iterator.js","../../node_modules/core-js/modules/es7.symbol.observable.js","../../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","../../node_modules/core-js/modules/_object-to-array.js","../../node_modules/core-js/modules/es7.object.values.js","../../node_modules/core-js/modules/es7.object.entries.js","../../node_modules/core-js/modules/_object-forced-pam.js","../../node_modules/core-js/modules/es7.object.define-getter.js","../../node_modules/core-js/modules/es7.object.define-setter.js","../../node_modules/core-js/modules/es7.object.lookup-getter.js","../../node_modules/core-js/modules/es7.object.lookup-setter.js","../../node_modules/core-js/modules/_array-from-iterable.js","../../node_modules/core-js/modules/_collection-to-json.js","../../node_modules/core-js/modules/es7.map.to-json.js","../../node_modules/core-js/modules/es7.set.to-json.js","../../node_modules/core-js/modules/_set-collection-of.js","../../node_modules/core-js/modules/es7.map.of.js","../../node_modules/core-js/modules/es7.set.of.js","../../node_modules/core-js/modules/es7.weak-map.of.js","../../node_modules/core-js/modules/es7.weak-set.of.js","../../node_modules/core-js/modules/_set-collection-from.js","../../node_modules/core-js/modules/es7.map.from.js","../../node_modules/core-js/modules/es7.set.from.js","../../node_modules/core-js/modules/es7.weak-map.from.js","../../node_modules/core-js/modules/es7.weak-set.from.js","../../node_modules/core-js/modules/es7.global.js","../../node_modules/core-js/modules/es7.system.global.js","../../node_modules/core-js/modules/es7.error.is-error.js","../../node_modules/core-js/modules/es7.math.clamp.js","../../node_modules/core-js/modules/es7.math.deg-per-rad.js","../../node_modules/core-js/modules/es7.math.degrees.js","../../node_modules/core-js/modules/_math-scale.js","../../node_modules/core-js/modules/es7.math.fscale.js","../../node_modules/core-js/modules/es7.math.iaddh.js","../../node_modules/core-js/modules/es7.math.isubh.js","../../node_modules/core-js/modules/es7.math.imulh.js","../../node_modules/core-js/modules/es7.math.rad-per-deg.js","../../node_modules/core-js/modules/es7.math.radians.js","../../node_modules/core-js/modules/es7.math.scale.js","../../node_modules/core-js/modules/es7.math.umulh.js","../../node_modules/core-js/modules/es7.math.signbit.js","../../node_modules/core-js/modules/es7.promise.finally.js","../../node_modules/core-js/modules/es7.promise.try.js","../../node_modules/core-js/modules/_metadata.js","../../node_modules/core-js/modules/es7.reflect.define-metadata.js","../../node_modules/core-js/modules/es7.reflect.delete-metadata.js","../../node_modules/core-js/modules/es7.reflect.get-metadata.js","../../node_modules/core-js/modules/es7.reflect.get-metadata-keys.js","../../node_modules/core-js/modules/es7.reflect.get-own-metadata.js","../../node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js","../../node_modules/core-js/modules/es7.reflect.has-metadata.js","../../node_modules/core-js/modules/es7.reflect.has-own-metadata.js","../../node_modules/core-js/modules/es7.reflect.metadata.js","../../node_modules/core-js/modules/es7.asap.js","../../node_modules/core-js/modules/es7.observable.js","../../node_modules/core-js/modules/web.timers.js","../../node_modules/core-js/modules/web.immediate.js","../../node_modules/core-js/modules/web.dom.iterable.js","../../node_modules/core-js/shim.js","../../node_modules/regenerator-runtime/runtime.js","../../node_modules/core-js/modules/_replacer.js","../../node_modules/core-js/modules/core.regexp.escape.js","../../node_modules/core-js/fn/regexp/escape.js","../../node_modules/babel-polyfill/lib/index.js","scrollspy.js","sphinx_materialdesign_theme.js"],"names":["$","document","ready","on","remove","show","ga","hitType","eventCategory","eventAction","attr","eventLabel","window","location","pathname","eventValue","MaterialTab","tab","ctx","element_","classList","contains","CssClasses_","MDL_JS_RIPPLE_EFFECT","rippleContainer","createElement","add","MDL_RIPPLE_CONTAINER","ripple","MDL_RIPPLE","appendChild","addEventListener","e","getAttribute","charAt","preventDefault","href","split","panel","querySelector","resetTabState_","resetPanelState_","ACTIVE_CLASS","MaterialLayoutTab","tabs","panels","layout","selectTab","content_","IS_ACTIVE","tabBar_","JS_RIPPLE_EFFECT","RIPPLE_CONTAINER","RIPPLE","TAB_MANUAL_SWITCH","componentHandler","upgradeDom","optJsClass","optCssClass","upgradeElement","element","upgradeElements","elements","upgradeAllRegistered","registerUpgradedCallback","jsClass","callback","register","config","downgradeElements","nodes","findRegisteredClass_","name","optReplace","i","registeredComponents_","length","className","getUpgradedListOfElement_","dataUpgraded","isElementUpgraded_","upgradedList","indexOf","createEvent_","eventType","bubbles","cancelable","CustomEvent","ev","createEvent","initEvent","upgradeDomInternal","cssClass","registeredClass","querySelectorAll","n","upgradeElementInternal","Element","Error","upgradingEv","dispatchEvent","defaultPrevented","classesToUpgrade","push","forEach","component","setAttribute","join","instance","classConstructor","componentConfigProperty_","createdComponents_","j","m","callbacks","widget","upgradedEv","deconstructComponentInternal","componentIndex","splice","upgrades","componentPlace","classAsString","upgradeElementsInternal","Array","isArray","prototype","slice","call","HTMLElement","children","upgradeAllRegisteredInternal","registerUpgradedCallbackInternal","regClass","registerInternal","widgetMissing","newConfig","constructor","item","hasOwnProperty","downgradeNodesInternal","downgradeNode","node","filter","NodeList","Node","ComponentConfigPublic","ComponentConfig","Component","documentElement","Date","now","getTime","vendors","requestAnimationFrame","vp","cancelAnimationFrame","test","navigator","userAgent","lastTime","nextTime","Math","max","setTimeout","clearTimeout","MaterialButton","this","init","Constant_","RIPPLE_EFFECT","blurHandler_","event","blur","disable","disabled","enable","rippleElement_","boundRippleBlurHandler","bind","boundButtonBlurHandler","MaterialCheckbox","TINY_TIMEOUT","INPUT","BOX_OUTLINE","FOCUS_HELPER","TICK_OUTLINE","RIPPLE_IGNORE_EVENTS","RIPPLE_CENTER","IS_FOCUSED","IS_DISABLED","IS_CHECKED","IS_UPGRADED","onChange_","updateClasses_","onFocus_","onBlur_","onMouseUp_","blur_","checkDisabled","checkToggleState","inputElement_","checked","check","uncheck","boxOutline","tickContainer","tickOutline","rippleContainerElement_","boundRippleMouseUp","boundInputOnChange","boundInputOnFocus","boundInputOnBlur","boundElementMouseUp","MaterialIconToggle","boundElementOnMouseUp","MaterialMenu","TRANSITION_DURATION_SECONDS","TRANSITION_DURATION_FRACTION","CLOSE_TIMEOUT","Keycodes_","ENTER","ESCAPE","SPACE","UP_ARROW","DOWN_ARROW","CONTAINER","OUTLINE","ITEM","ITEM_RIPPLE_CONTAINER","IS_VISIBLE","IS_ANIMATING","BOTTOM_LEFT","BOTTOM_RIGHT","TOP_LEFT","TOP_RIGHT","UNALIGNED","container","parentElement","insertBefore","removeChild","container_","outline","outline_","forElId","forEl","getElementById","forElement_","handleForClick_","handleForKeyboardEvent_","items","boundItemKeydown_","handleItemKeyboardEvent_","boundItemClick_","handleItemClick_","tabIndex","evt","rect","getBoundingClientRect","forRect","style","right","top","offsetTop","offsetHeight","left","offsetLeft","bottom","toggle","keyCode","focus","currentIndex","target","MouseEvent","click","hide","hasAttribute","stopPropagation","closing_","applyClip_","height","width","clip","removeAnimationEndListener_","addAnimationEndListener_","transitionDuration","itemDelay","transitionDelay","parentNode","removeEventListener","removeProperty","MaterialProgress","INDETERMINATE_CLASS","setProgress","p","progressbar_","setBuffer","bufferbar_","auxbar_","el","MaterialRadio","JS_RADIO","RADIO_BTN","RADIO_OUTER_CIRCLE","RADIO_INNER_CIRCLE","radios","getElementsByClassName","btnElement_","onMouseup_","boundChangeHandler_","boundFocusHandler_","boundBlurHandler_","boundMouseUpHandler_","outerCircle","innerCircle","MaterialSlider","isIE_","msPointerEnabled","IE_CONTAINER","SLIDER_CONTAINER","BACKGROUND_FLEX","BACKGROUND_LOWER","BACKGROUND_UPPER","IS_LOWEST_VALUE","onInput_","updateValueStyles_","onContainerMouseDown_","newEvent","buttons","clientX","clientY","y","fraction","value","min","backgroundLower_","flex","webkitFlex","backgroundUpper_","change","containerIE","backgroundFlex","boundInputHandler","boundChangeHandler","boundMouseUpHandler","boundContainerMouseDownHandler","MaterialSnackbar","textElement_","cssClasses_","MESSAGE","actionElement_","ACTION","active","actionHandler_","undefined","message_","actionText_","queuedNotifications_","setActionHidden_","ANIMATION_LENGTH","SNACKBAR","ACTIVE","displaySnackbar_","textContent","cleanup_","timeout_","showSnackbar","data","checkQueue_","shift","Boolean","removeAttribute","MaterialSpinner","MDL_SPINNER_LAYER_COUNT","MDL_SPINNER_LAYER","MDL_SPINNER_CIRCLE_CLIPPER","MDL_SPINNER_CIRCLE","MDL_SPINNER_GAP_PATCH","MDL_SPINNER_LEFT","MDL_SPINNER_RIGHT","createLayer","index","layer","leftClipper","gapPatch","rightClipper","circleOwners","circle","stop","start","MaterialSwitch","TRACK","THUMB","off","track","thumb","focusHelper","boundFocusHandler","boundBlurHandler","MaterialTabs","TAB_CLASS","PANEL_CLASS","UPGRADED_CLASS","MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS","initTabs_","tabs_","panels_","k","MaterialTextfield","maxRows","NO_MAX_ROWS","MAX_ROWS_ATTRIBUTE","LABEL","IS_DIRTY","IS_INVALID","HAS_PLACEHOLDER","onKeyDown_","currentRowCount","onReset_","checkValidity","checkDirty","checkFocus","input_","validity","valid","label_","parseInt","isNaN","boundUpdateClassesHandler","boundResetHandler","boundKeyDownHandler","invalid","MaterialTooltip","BOTTOM","LEFT","RIGHT","TOP","handleMouseEnter_","props","marginLeft","offsetWidth","marginTop","hideTooltip_","boundMouseEnterHandler","boundMouseLeaveAndScrollHandler","MaterialLayout","MAX_WIDTH","TAB_SCROLL_PIXELS","RESIZE_TIMEOUT","MENU_ICON","CHEVRON_LEFT","CHEVRON_RIGHT","Mode_","STANDARD","SEAMED","WATERFALL","SCROLL","HEADER","DRAWER","CONTENT","DRAWER_BTN","ICON","HEADER_SEAMED","HEADER_WATERFALL","HEADER_SCROLL","FIXED_HEADER","OBFUSCATOR","TAB_BAR","TAB_CONTAINER","TAB","TAB_BAR_BUTTON","TAB_BAR_LEFT_BUTTON","TAB_BAR_RIGHT_BUTTON","PANEL","HAS_DRAWER","HAS_TABS","HAS_SCROLLING_HEADER","CASTING_SHADOW","IS_COMPACT","IS_SMALL_SCREEN","IS_DRAWER_OPEN","ON_LARGE_SCREEN","ON_SMALL_SCREEN","contentScrollHandler_","header_","headerVisible","scrollTop","keyboardEventHandler_","drawer_","toggleDrawer","screenSizeHandler_","screenSizeMediaQuery_","matches","obfuscator_","drawerToggleHandler_","type","headerTransitionEndHandler_","headerClickHandler_","tabBar","drawerButton","focusedElement","directChildren","childNodes","numChildren","c","child","persisted","overflowY","mode","drawerButtonIcon","innerHTML","firstChild","obfuscator","matchMedia","addListener","tabContainer","leftButton","leftButtonIcon","scrollLeft","rightButton","rightButtonIcon","tabUpdateHandler","scrollWidth","windowResizeHandler","resizeTimeoutId_","MaterialDataTable","DATA_TABLE","SELECTABLE","SELECT_ELEMENT","IS_SELECTED","selectRow_","checkbox","row","opt_rows","createCheckbox_","label","labelClasses","firstHeader","bodyRows","footRows","rows","concat","th","headerCheckbox","firstCell","td","nodeName","toUpperCase","rowCheckbox","MaterialRipple","INITIAL_SCALE","INITIAL_SIZE","INITIAL_OPACITY","FINAL_OPACITY","FINAL_SCALE","RIPPLE_EFFECT_IGNORE_EVENTS","downHandler_","boundHeight","boundWidth","rippleSize_","sqrt","ignoringMouseDown_","frameCount","getFrameCount","setFrameCount","x","bound","currentTarget","round","touches","setRippleXY","setRippleStyles","animFrameHandler","upHandler_","detail","recentering","frameCount_","x_","y_","boundDownHandler","boundUpHandler","fC","getRippleElement","newX","newY","transformString","scale","offset","webkitTransform","msTransform","transform","ScrollSpy","args","doc","nav","navSelector","win","winHeight","innerHeight","scrollElement","scrollSelector","contents","getContents","contentSelector","attachEvent","scrollTimer","resizeTimer","spy","tagName","onclickToc","navElement","targets","getViewState","toggleNavClass","elementListInView","current","isView","subHeaderRect","headerHeight","scrollBottom","elementTop","elementBottom","maxDepth","maxDepthElement","tempDepth","getTagDepth","id","find","get","reconstructionDrawerGlobalToc","$lists","$breadcrumb","each","li","$li","$linkWrapper","$link","append","isCurrent","hasClass","$ul","ulId","addClass","$toggleWrapper","$toggle","toggleClass","animate","opacity","parent","url","text","button","icon","createTextNode","link","onclick","fileName","pop","replace","hint","hintText","map","header","first","css","preScrollTop","curScrollTop","scrollContent","navBar","navBarHeight","scroll","removeClass","addScrollAwareHeaderAnimation"],"mappings":"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","file":"sphinx_materialdesign_theme.js","sourceRoot":"../../src/js","sourcesContent":["/*!\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\n$(document).ready(function() {\n $(\".feedback-answer\").on(\"click\", function () {\n $(\".feedback-question\").remove();\n $(\".feedback-answer-container\").remove();\n $(\".feedback-thank-you\").show();\n ga(\"send\", {\n hitType: \"event\",\n eventCategory: \"Did this page help you?\",\n eventAction: $(this).attr(\"data-response\"),\n eventLabel: window.location.pathname || \"unknown\",\n eventValue: $(this).attr(\"data-response\") === \"yes\" ? 1 : 0\n });\n });\n});\n","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Ripple MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialRipple = function MaterialRipple(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialRipple'] = MaterialRipple;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialRipple.prototype.Constant_ = {\n INITIAL_SCALE: 'scale(0.0001, 0.0001)',\n INITIAL_SIZE: '1px',\n INITIAL_OPACITY: '0.4',\n FINAL_OPACITY: '0',\n FINAL_SCALE: ''\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialRipple.prototype.CssClasses_ = {\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE_EFFECT_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE: 'mdl-ripple',\n IS_ANIMATING: 'is-animating',\n IS_VISIBLE: 'is-visible'\n};\n/**\n * Handle mouse / finger down on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRipple.prototype.downHandler_ = function (event) {\n if (!this.rippleElement_.style.width && !this.rippleElement_.style.height) {\n var rect = this.element_.getBoundingClientRect();\n this.boundHeight = rect.height;\n this.boundWidth = rect.width;\n this.rippleSize_ = Math.sqrt(rect.width * rect.width + rect.height * rect.height) * 2 + 2;\n this.rippleElement_.style.width = this.rippleSize_ + 'px';\n this.rippleElement_.style.height = this.rippleSize_ + 'px';\n }\n this.rippleElement_.classList.add(this.CssClasses_.IS_VISIBLE);\n if (event.type === 'mousedown' && this.ignoringMouseDown_) {\n this.ignoringMouseDown_ = false;\n } else {\n if (event.type === 'touchstart') {\n this.ignoringMouseDown_ = true;\n }\n var frameCount = this.getFrameCount();\n if (frameCount > 0) {\n return;\n }\n this.setFrameCount(1);\n var bound = event.currentTarget.getBoundingClientRect();\n var x;\n var y;\n // Check if we are handling a keyboard click.\n if (event.clientX === 0 && event.clientY === 0) {\n x = Math.round(bound.width / 2);\n y = Math.round(bound.height / 2);\n } else {\n var clientX = event.clientX !== undefined ? event.clientX : event.touches[0].clientX;\n var clientY = event.clientY !== undefined ? event.clientY : event.touches[0].clientY;\n x = Math.round(clientX - bound.left);\n y = Math.round(clientY - bound.top);\n }\n this.setRippleXY(x, y);\n this.setRippleStyles(true);\n window.requestAnimationFrame(this.animFrameHandler.bind(this));\n }\n};\n/**\n * Handle mouse / finger up on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRipple.prototype.upHandler_ = function (event) {\n // Don't fire for the artificial \"mouseup\" generated by a double-click.\n if (event && event.detail !== 2) {\n // Allow a repaint to occur before removing this class, so the animation\n // shows for tap events, which seem to trigger a mouseup too soon after\n // mousedown.\n window.setTimeout(function () {\n this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE);\n }.bind(this), 0);\n }\n};\n/**\n * Initialize element.\n */\nMaterialRipple.prototype.init = function () {\n if (this.element_) {\n var recentering = this.element_.classList.contains(this.CssClasses_.RIPPLE_CENTER);\n if (!this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT_IGNORE_EVENTS)) {\n this.rippleElement_ = this.element_.querySelector('.' + this.CssClasses_.RIPPLE);\n this.frameCount_ = 0;\n this.rippleSize_ = 0;\n this.x_ = 0;\n this.y_ = 0;\n // Touch start produces a compat mouse down event, which would cause a\n // second ripples. To avoid that, we use this property to ignore the first\n // mouse down after a touch start.\n this.ignoringMouseDown_ = false;\n this.boundDownHandler = this.downHandler_.bind(this);\n this.element_.addEventListener('mousedown', this.boundDownHandler);\n this.element_.addEventListener('touchstart', this.boundDownHandler);\n this.boundUpHandler = this.upHandler_.bind(this);\n this.element_.addEventListener('mouseup', this.boundUpHandler);\n this.element_.addEventListener('mouseleave', this.boundUpHandler);\n this.element_.addEventListener('touchend', this.boundUpHandler);\n this.element_.addEventListener('blur', this.boundUpHandler);\n /**\n * Getter for frameCount_.\n * @return {number} the frame count.\n */\n this.getFrameCount = function () {\n return this.frameCount_;\n };\n /**\n * Setter for frameCount_.\n * @param {number} fC the frame count.\n */\n this.setFrameCount = function (fC) {\n this.frameCount_ = fC;\n };\n /**\n * Getter for rippleElement_.\n * @return {Element} the ripple element.\n */\n this.getRippleElement = function () {\n return this.rippleElement_;\n };\n /**\n * Sets the ripple X and Y coordinates.\n * @param {number} newX the new X coordinate\n * @param {number} newY the new Y coordinate\n */\n this.setRippleXY = function (newX, newY) {\n this.x_ = newX;\n this.y_ = newY;\n };\n /**\n * Sets the ripple styles.\n * @param {boolean} start whether or not this is the start frame.\n */\n this.setRippleStyles = function (start) {\n if (this.rippleElement_ !== null) {\n var transformString;\n var scale;\n var size;\n var offset = 'translate(' + this.x_ + 'px, ' + this.y_ + 'px)';\n if (start) {\n scale = this.Constant_.INITIAL_SCALE;\n size = this.Constant_.INITIAL_SIZE;\n } else {\n scale = this.Constant_.FINAL_SCALE;\n size = this.rippleSize_ + 'px';\n if (recentering) {\n offset = 'translate(' + this.boundWidth / 2 + 'px, ' + this.boundHeight / 2 + 'px)';\n }\n }\n transformString = 'translate(-50%, -50%) ' + offset + scale;\n this.rippleElement_.style.webkitTransform = transformString;\n this.rippleElement_.style.msTransform = transformString;\n this.rippleElement_.style.transform = transformString;\n if (start) {\n this.rippleElement_.classList.remove(this.CssClasses_.IS_ANIMATING);\n } else {\n this.rippleElement_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n }\n };\n /**\n * Handles an animation frame.\n */\n this.animFrameHandler = function () {\n if (this.frameCount_-- > 0) {\n window.requestAnimationFrame(this.animFrameHandler.bind(this));\n } else {\n this.setRippleStyles(false);\n }\n };\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialRipple,\n classAsString: 'MaterialRipple',\n cssClass: 'mdl-js-ripple-effect',\n widget: false\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Tabs MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {Element} element The element that will be upgraded.\n */\nvar MaterialTabs = function MaterialTabs(element) {\n // Stores the HTML element.\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialTabs'] = MaterialTabs;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string}\n * @private\n */\nMaterialTabs.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialTabs.prototype.CssClasses_ = {\n TAB_CLASS: 'mdl-tabs__tab',\n PANEL_CLASS: 'mdl-tabs__panel',\n ACTIVE_CLASS: 'is-active',\n UPGRADED_CLASS: 'is-upgraded',\n MDL_JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n MDL_RIPPLE_CONTAINER: 'mdl-tabs__ripple-container',\n MDL_RIPPLE: 'mdl-ripple',\n MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events'\n};\n/**\n * Handle clicks to a tabs component\n *\n * @private\n */\nMaterialTabs.prototype.initTabs_ = function () {\n if (this.element_.classList.contains(this.CssClasses_.MDL_JS_RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS);\n }\n // Select element tabs, document panels\n this.tabs_ = this.element_.querySelectorAll('.' + this.CssClasses_.TAB_CLASS);\n this.panels_ = this.element_.querySelectorAll('.' + this.CssClasses_.PANEL_CLASS);\n // Create new tabs for each tab element\n for (var i = 0; i < this.tabs_.length; i++) {\n new MaterialTab(this.tabs_[i], this);\n }\n this.element_.classList.add(this.CssClasses_.UPGRADED_CLASS);\n};\n/**\n * Reset tab state, dropping active classes\n *\n * @private\n */\nMaterialTabs.prototype.resetTabState_ = function () {\n for (var k = 0; k < this.tabs_.length; k++) {\n this.tabs_[k].classList.remove(this.CssClasses_.ACTIVE_CLASS);\n }\n};\n/**\n * Reset panel state, droping active classes\n *\n * @private\n */\nMaterialTabs.prototype.resetPanelState_ = function () {\n for (var j = 0; j < this.panels_.length; j++) {\n this.panels_[j].classList.remove(this.CssClasses_.ACTIVE_CLASS);\n }\n};\n/**\n * Initialize element.\n */\nMaterialTabs.prototype.init = function () {\n if (this.element_) {\n this.initTabs_();\n }\n};\n/**\n * Constructor for an individual tab.\n *\n * @constructor\n * @param {Element} tab The HTML element for the tab.\n * @param {MaterialTabs} ctx The MaterialTabs object that owns the tab.\n */\nfunction MaterialTab(tab, ctx) {\n if (tab) {\n if (ctx.element_.classList.contains(ctx.CssClasses_.MDL_JS_RIPPLE_EFFECT)) {\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(ctx.CssClasses_.MDL_RIPPLE_CONTAINER);\n rippleContainer.classList.add(ctx.CssClasses_.MDL_JS_RIPPLE_EFFECT);\n var ripple = document.createElement('span');\n ripple.classList.add(ctx.CssClasses_.MDL_RIPPLE);\n rippleContainer.appendChild(ripple);\n tab.appendChild(rippleContainer);\n }\n tab.addEventListener('click', function (e) {\n if (tab.getAttribute('href').charAt(0) === '#') {\n e.preventDefault();\n var href = tab.href.split('#')[1];\n var panel = ctx.element_.querySelector('#' + href);\n ctx.resetTabState_();\n ctx.resetPanelState_();\n tab.classList.add(ctx.CssClasses_.ACTIVE_CLASS);\n panel.classList.add(ctx.CssClasses_.ACTIVE_CLASS);\n }\n });\n }\n}\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTabs,\n classAsString: 'MaterialTabs',\n cssClass: 'mdl-js-tabs'\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Layout MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialLayout = function MaterialLayout(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialLayout'] = MaterialLayout;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialLayout.prototype.Constant_ = {\n MAX_WIDTH: '(max-width: 1024px)',\n TAB_SCROLL_PIXELS: 100,\n RESIZE_TIMEOUT: 100,\n MENU_ICON: '',\n CHEVRON_LEFT: 'chevron_left',\n CHEVRON_RIGHT: 'chevron_right'\n};\n/**\n * Keycodes, for code readability.\n *\n * @enum {number}\n * @private\n */\nMaterialLayout.prototype.Keycodes_ = {\n ENTER: 13,\n ESCAPE: 27,\n SPACE: 32\n};\n/**\n * Modes.\n *\n * @enum {number}\n * @private\n */\nMaterialLayout.prototype.Mode_ = {\n STANDARD: 0,\n SEAMED: 1,\n WATERFALL: 2,\n SCROLL: 3\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialLayout.prototype.CssClasses_ = {\n CONTAINER: 'mdl-layout__container',\n HEADER: 'mdl-layout__header',\n DRAWER: 'mdl-layout__drawer',\n CONTENT: 'mdl-layout__content',\n DRAWER_BTN: 'mdl-layout__drawer-button',\n ICON: 'material-icons',\n JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_CONTAINER: 'mdl-layout__tab-ripple-container',\n RIPPLE: 'mdl-ripple',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n HEADER_SEAMED: 'mdl-layout__header--seamed',\n HEADER_WATERFALL: 'mdl-layout__header--waterfall',\n HEADER_SCROLL: 'mdl-layout__header--scroll',\n FIXED_HEADER: 'mdl-layout--fixed-header',\n OBFUSCATOR: 'mdl-layout__obfuscator',\n TAB_BAR: 'mdl-layout__tab-bar',\n TAB_CONTAINER: 'mdl-layout__tab-bar-container',\n TAB: 'mdl-layout__tab',\n TAB_BAR_BUTTON: 'mdl-layout__tab-bar-button',\n TAB_BAR_LEFT_BUTTON: 'mdl-layout__tab-bar-left-button',\n TAB_BAR_RIGHT_BUTTON: 'mdl-layout__tab-bar-right-button',\n TAB_MANUAL_SWITCH: 'mdl-layout__tab-manual-switch',\n PANEL: 'mdl-layout__tab-panel',\n HAS_DRAWER: 'has-drawer',\n HAS_TABS: 'has-tabs',\n HAS_SCROLLING_HEADER: 'has-scrolling-header',\n CASTING_SHADOW: 'is-casting-shadow',\n IS_COMPACT: 'is-compact',\n IS_SMALL_SCREEN: 'is-small-screen',\n IS_DRAWER_OPEN: 'is-visible',\n IS_ACTIVE: 'is-active',\n IS_UPGRADED: 'is-upgraded',\n IS_ANIMATING: 'is-animating',\n ON_LARGE_SCREEN: 'mdl-layout--large-screen-only',\n ON_SMALL_SCREEN: 'mdl-layout--small-screen-only'\n};\n/**\n * Handles scrolling on the content.\n *\n * @private\n */\nMaterialLayout.prototype.contentScrollHandler_ = function () {\n if (this.header_.classList.contains(this.CssClasses_.IS_ANIMATING)) {\n return;\n }\n var headerVisible = !this.element_.classList.contains(this.CssClasses_.IS_SMALL_SCREEN) || this.element_.classList.contains(this.CssClasses_.FIXED_HEADER);\n if (this.content_.scrollTop > 0 && !this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n this.header_.classList.add(this.CssClasses_.CASTING_SHADOW);\n this.header_.classList.add(this.CssClasses_.IS_COMPACT);\n if (headerVisible) {\n this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n } else if (this.content_.scrollTop <= 0 && this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n this.header_.classList.remove(this.CssClasses_.IS_COMPACT);\n if (headerVisible) {\n this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n }\n};\n/**\n * Handles a keyboard event on the drawer.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialLayout.prototype.keyboardEventHandler_ = function (evt) {\n // Only react when the drawer is open.\n if (evt.keyCode === this.Keycodes_.ESCAPE && this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)) {\n this.toggleDrawer();\n }\n};\n/**\n * Handles changes in screen size.\n *\n * @private\n */\nMaterialLayout.prototype.screenSizeHandler_ = function () {\n if (this.screenSizeMediaQuery_.matches) {\n this.element_.classList.add(this.CssClasses_.IS_SMALL_SCREEN);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_SMALL_SCREEN);\n // Collapse drawer (if any) when moving to a large screen size.\n if (this.drawer_) {\n this.drawer_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN);\n this.obfuscator_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN);\n }\n }\n};\n/**\n * Handles events of drawer button.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialLayout.prototype.drawerToggleHandler_ = function (evt) {\n if (evt && evt.type === 'keydown') {\n if (evt.keyCode === this.Keycodes_.SPACE || evt.keyCode === this.Keycodes_.ENTER) {\n // prevent scrolling in drawer nav\n evt.preventDefault();\n } else {\n // prevent other keys\n return;\n }\n }\n this.toggleDrawer();\n};\n/**\n * Handles (un)setting the `is-animating` class\n *\n * @private\n */\nMaterialLayout.prototype.headerTransitionEndHandler_ = function () {\n this.header_.classList.remove(this.CssClasses_.IS_ANIMATING);\n};\n/**\n * Handles expanding the header on click\n *\n * @private\n */\nMaterialLayout.prototype.headerClickHandler_ = function () {\n if (this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n this.header_.classList.remove(this.CssClasses_.IS_COMPACT);\n this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n};\n/**\n * Reset tab state, dropping active classes\n *\n * @private\n */\nMaterialLayout.prototype.resetTabState_ = function (tabBar) {\n for (var k = 0; k < tabBar.length; k++) {\n tabBar[k].classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n};\n/**\n * Reset panel state, droping active classes\n *\n * @private\n */\nMaterialLayout.prototype.resetPanelState_ = function (panels) {\n for (var j = 0; j < panels.length; j++) {\n panels[j].classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n};\n/**\n * Toggle drawer state\n *\n * @public\n */\nMaterialLayout.prototype.toggleDrawer = function () {\n var drawerButton = this.element_.querySelector('.' + this.CssClasses_.DRAWER_BTN);\n this.drawer_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);\n this.obfuscator_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);\n // Set accessibility properties.\n if (this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)) {\n this.drawer_.setAttribute('aria-hidden', 'false');\n drawerButton.setAttribute('aria-expanded', 'true');\n } else {\n this.drawer_.setAttribute('aria-hidden', 'true');\n drawerButton.setAttribute('aria-expanded', 'false');\n }\n};\nMaterialLayout.prototype['toggleDrawer'] = MaterialLayout.prototype.toggleDrawer;\n/**\n * Initialize element.\n */\nMaterialLayout.prototype.init = function () {\n if (this.element_) {\n var container = document.createElement('div');\n container.classList.add(this.CssClasses_.CONTAINER);\n var focusedElement = this.element_.querySelector(':focus');\n this.element_.parentElement.insertBefore(container, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n container.appendChild(this.element_);\n if (focusedElement) {\n focusedElement.focus();\n }\n var directChildren = this.element_.childNodes;\n var numChildren = directChildren.length;\n for (var c = 0; c < numChildren; c++) {\n var child = directChildren[c];\n if (child.classList && child.classList.contains(this.CssClasses_.HEADER)) {\n this.header_ = child;\n }\n if (child.classList && child.classList.contains(this.CssClasses_.DRAWER)) {\n this.drawer_ = child;\n }\n if (child.classList && child.classList.contains(this.CssClasses_.CONTENT)) {\n this.content_ = child;\n }\n }\n window.addEventListener('pageshow', function (e) {\n if (e.persisted) {\n // when page is loaded from back/forward cache\n // trigger repaint to let layout scroll in safari\n this.element_.style.overflowY = 'hidden';\n requestAnimationFrame(function () {\n this.element_.style.overflowY = '';\n }.bind(this));\n }\n }.bind(this), false);\n if (this.header_) {\n this.tabBar_ = this.header_.querySelector('.' + this.CssClasses_.TAB_BAR);\n }\n var mode = this.Mode_.STANDARD;\n if (this.header_) {\n if (this.header_.classList.contains(this.CssClasses_.HEADER_SEAMED)) {\n mode = this.Mode_.SEAMED;\n } else if (this.header_.classList.contains(this.CssClasses_.HEADER_WATERFALL)) {\n mode = this.Mode_.WATERFALL;\n this.header_.addEventListener('transitionend', this.headerTransitionEndHandler_.bind(this));\n this.header_.addEventListener('click', this.headerClickHandler_.bind(this));\n } else if (this.header_.classList.contains(this.CssClasses_.HEADER_SCROLL)) {\n mode = this.Mode_.SCROLL;\n container.classList.add(this.CssClasses_.HAS_SCROLLING_HEADER);\n }\n if (mode === this.Mode_.STANDARD) {\n this.header_.classList.add(this.CssClasses_.CASTING_SHADOW);\n if (this.tabBar_) {\n this.tabBar_.classList.add(this.CssClasses_.CASTING_SHADOW);\n }\n } else if (mode === this.Mode_.SEAMED || mode === this.Mode_.SCROLL) {\n this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n if (this.tabBar_) {\n this.tabBar_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n }\n } else if (mode === this.Mode_.WATERFALL) {\n // Add and remove shadows depending on scroll position.\n // Also add/remove auxiliary class for styling of the compact version of\n // the header.\n this.content_.addEventListener('scroll', this.contentScrollHandler_.bind(this));\n this.contentScrollHandler_();\n }\n }\n // Add drawer toggling button to our layout, if we have an openable drawer.\n if (this.drawer_) {\n var drawerButton = this.element_.querySelector('.' + this.CssClasses_.DRAWER_BTN);\n if (!drawerButton) {\n drawerButton = document.createElement('div');\n drawerButton.setAttribute('aria-expanded', 'false');\n drawerButton.setAttribute('role', 'button');\n drawerButton.setAttribute('tabindex', '0');\n drawerButton.classList.add(this.CssClasses_.DRAWER_BTN);\n var drawerButtonIcon = document.createElement('i');\n drawerButtonIcon.classList.add(this.CssClasses_.ICON);\n drawerButtonIcon.innerHTML = this.Constant_.MENU_ICON;\n drawerButton.appendChild(drawerButtonIcon);\n }\n if (this.drawer_.classList.contains(this.CssClasses_.ON_LARGE_SCREEN)) {\n //If drawer has ON_LARGE_SCREEN class then add it to the drawer toggle button as well.\n drawerButton.classList.add(this.CssClasses_.ON_LARGE_SCREEN);\n } else if (this.drawer_.classList.contains(this.CssClasses_.ON_SMALL_SCREEN)) {\n //If drawer has ON_SMALL_SCREEN class then add it to the drawer toggle button as well.\n drawerButton.classList.add(this.CssClasses_.ON_SMALL_SCREEN);\n }\n drawerButton.addEventListener('click', this.drawerToggleHandler_.bind(this));\n drawerButton.addEventListener('keydown', this.drawerToggleHandler_.bind(this));\n // Add a class if the layout has a drawer, for altering the left padding.\n // Adds the HAS_DRAWER to the elements since this.header_ may or may\n // not be present.\n this.element_.classList.add(this.CssClasses_.HAS_DRAWER);\n // If we have a fixed header, add the button to the header rather than\n // the layout.\n if (this.element_.classList.contains(this.CssClasses_.FIXED_HEADER)) {\n this.header_.insertBefore(drawerButton, this.header_.firstChild);\n } else {\n this.element_.insertBefore(drawerButton, this.content_);\n }\n var obfuscator = document.createElement('div');\n obfuscator.classList.add(this.CssClasses_.OBFUSCATOR);\n this.element_.appendChild(obfuscator);\n obfuscator.addEventListener('click', this.drawerToggleHandler_.bind(this));\n this.obfuscator_ = obfuscator;\n this.drawer_.addEventListener('keydown', this.keyboardEventHandler_.bind(this));\n this.drawer_.setAttribute('aria-hidden', 'true');\n }\n // Keep an eye on screen size, and add/remove auxiliary class for styling\n // of small screens.\n this.screenSizeMediaQuery_ = window.matchMedia(this.Constant_.MAX_WIDTH);\n this.screenSizeMediaQuery_.addListener(this.screenSizeHandler_.bind(this));\n this.screenSizeHandler_();\n // Initialize tabs, if any.\n if (this.header_ && this.tabBar_) {\n this.element_.classList.add(this.CssClasses_.HAS_TABS);\n var tabContainer = document.createElement('div');\n tabContainer.classList.add(this.CssClasses_.TAB_CONTAINER);\n this.header_.insertBefore(tabContainer, this.tabBar_);\n this.header_.removeChild(this.tabBar_);\n var leftButton = document.createElement('div');\n leftButton.classList.add(this.CssClasses_.TAB_BAR_BUTTON);\n leftButton.classList.add(this.CssClasses_.TAB_BAR_LEFT_BUTTON);\n var leftButtonIcon = document.createElement('i');\n leftButtonIcon.classList.add(this.CssClasses_.ICON);\n leftButtonIcon.textContent = this.Constant_.CHEVRON_LEFT;\n leftButton.appendChild(leftButtonIcon);\n leftButton.addEventListener('click', function () {\n this.tabBar_.scrollLeft -= this.Constant_.TAB_SCROLL_PIXELS;\n }.bind(this));\n var rightButton = document.createElement('div');\n rightButton.classList.add(this.CssClasses_.TAB_BAR_BUTTON);\n rightButton.classList.add(this.CssClasses_.TAB_BAR_RIGHT_BUTTON);\n var rightButtonIcon = document.createElement('i');\n rightButtonIcon.classList.add(this.CssClasses_.ICON);\n rightButtonIcon.textContent = this.Constant_.CHEVRON_RIGHT;\n rightButton.appendChild(rightButtonIcon);\n rightButton.addEventListener('click', function () {\n this.tabBar_.scrollLeft += this.Constant_.TAB_SCROLL_PIXELS;\n }.bind(this));\n tabContainer.appendChild(leftButton);\n tabContainer.appendChild(this.tabBar_);\n tabContainer.appendChild(rightButton);\n // Add and remove tab buttons depending on scroll position and total\n // window size.\n var tabUpdateHandler = function () {\n if (this.tabBar_.scrollLeft > 0) {\n leftButton.classList.add(this.CssClasses_.IS_ACTIVE);\n } else {\n leftButton.classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n if (this.tabBar_.scrollLeft < this.tabBar_.scrollWidth - this.tabBar_.offsetWidth) {\n rightButton.classList.add(this.CssClasses_.IS_ACTIVE);\n } else {\n rightButton.classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n }.bind(this);\n this.tabBar_.addEventListener('scroll', tabUpdateHandler);\n tabUpdateHandler();\n // Update tabs when the window resizes.\n var windowResizeHandler = function () {\n // Use timeouts to make sure it doesn't happen too often.\n if (this.resizeTimeoutId_) {\n clearTimeout(this.resizeTimeoutId_);\n }\n this.resizeTimeoutId_ = setTimeout(function () {\n tabUpdateHandler();\n this.resizeTimeoutId_ = null;\n }.bind(this), this.Constant_.RESIZE_TIMEOUT);\n }.bind(this);\n window.addEventListener('resize', windowResizeHandler);\n if (this.tabBar_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)) {\n this.tabBar_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n }\n // Select element tabs, document panels\n var tabs = this.tabBar_.querySelectorAll('.' + this.CssClasses_.TAB);\n var panels = this.content_.querySelectorAll('.' + this.CssClasses_.PANEL);\n // Create new tabs for each tab element\n for (var i = 0; i < tabs.length; i++) {\n new MaterialLayoutTab(tabs[i], tabs, panels, this);\n }\n }\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n/**\n * Constructor for an individual tab.\n *\n * @constructor\n * @param {HTMLElement} tab The HTML element for the tab.\n * @param {!Array} tabs Array with HTML elements for all tabs.\n * @param {!Array} panels Array with HTML elements for all panels.\n * @param {MaterialLayout} layout The MaterialLayout object that owns the tab.\n */\nfunction MaterialLayoutTab(tab, tabs, panels, layout) {\n /**\n * Auxiliary method to programmatically select a tab in the UI.\n */\n function selectTab() {\n var href = tab.href.split('#')[1];\n var panel = layout.content_.querySelector('#' + href);\n layout.resetTabState_(tabs);\n layout.resetPanelState_(panels);\n tab.classList.add(layout.CssClasses_.IS_ACTIVE);\n panel.classList.add(layout.CssClasses_.IS_ACTIVE);\n }\n if (layout.tabBar_.classList.contains(layout.CssClasses_.JS_RIPPLE_EFFECT)) {\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(layout.CssClasses_.RIPPLE_CONTAINER);\n rippleContainer.classList.add(layout.CssClasses_.JS_RIPPLE_EFFECT);\n var ripple = document.createElement('span');\n ripple.classList.add(layout.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n tab.appendChild(rippleContainer);\n }\n if (!layout.tabBar_.classList.contains(layout.CssClasses_.TAB_MANUAL_SWITCH)) {\n tab.addEventListener('click', function (e) {\n if (tab.getAttribute('href').charAt(0) === '#') {\n e.preventDefault();\n selectTab();\n }\n });\n }\n tab.show = selectTab;\n}\nwindow['MaterialLayoutTab'] = MaterialLayoutTab;\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialLayout,\n classAsString: 'MaterialLayout',\n cssClass: 'mdl-js-layout'\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * A component handler interface using the revealing module design pattern.\n * More details on this design pattern here:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @author Jason Mayes.\n */\n/* exported componentHandler */\n\n// Pre-defining the componentHandler interface, for closure documentation and\n// static verification.\nvar componentHandler = {\n /**\n * Searches existing DOM for elements of our component type and upgrades them\n * if they have not already been upgraded.\n *\n * @param {string=} optJsClass the programatic name of the element class we\n * need to create a new instance of.\n * @param {string=} optCssClass the name of the CSS class elements of this\n * type will have.\n */\n upgradeDom: function(optJsClass, optCssClass) {},\n /**\n * Upgrades a specific element rather than all in the DOM.\n *\n * @param {!Element} element The element we wish to upgrade.\n * @param {string=} optJsClass Optional name of the class we want to upgrade\n * the element to.\n */\n upgradeElement: function(element, optJsClass) {},\n /**\n * Upgrades a specific list of elements rather than all in the DOM.\n *\n * @param {!Element|!Array|!NodeList|!HTMLCollection} elements\n * The elements we wish to upgrade.\n */\n upgradeElements: function(elements) {},\n /**\n * Upgrades all registered components found in the current DOM. This is\n * automatically called on window load.\n */\n upgradeAllRegistered: function() {},\n /**\n * Allows user to be alerted to any upgrades that are performed for a given\n * component type\n *\n * @param {string} jsClass The class name of the MDL component we wish\n * to hook into for any upgrades performed.\n * @param {function(!HTMLElement)} callback The function to call upon an\n * upgrade. This function should expect 1 parameter - the HTMLElement which\n * got upgraded.\n */\n registerUpgradedCallback: function(jsClass, callback) {},\n /**\n * Registers a class for future use and attempts to upgrade existing DOM.\n *\n * @param {componentHandler.ComponentConfigPublic} config the registration configuration\n */\n register: function(config) {},\n /**\n * Downgrade either a given node, an array of nodes, or a NodeList.\n *\n * @param {!Node|!Array|!NodeList} nodes\n */\n downgradeElements: function(nodes) {}\n};\n\ncomponentHandler = (function() {\n 'use strict';\n\n /** @type {!Array} */\n var registeredComponents_ = [];\n\n /** @type {!Array} */\n var createdComponents_ = [];\n\n var componentConfigProperty_ = 'mdlComponentConfigInternal_';\n\n /**\n * Searches registered components for a class we are interested in using.\n * Optionally replaces a match with passed object if specified.\n *\n * @param {string} name The name of a class we want to use.\n * @param {componentHandler.ComponentConfig=} optReplace Optional object to replace match with.\n * @return {!Object|boolean}\n * @private\n */\n function findRegisteredClass_(name, optReplace) {\n for (var i = 0; i < registeredComponents_.length; i++) {\n if (registeredComponents_[i].className === name) {\n if (typeof optReplace !== 'undefined') {\n registeredComponents_[i] = optReplace;\n }\n return registeredComponents_[i];\n }\n }\n return false;\n }\n\n /**\n * Returns an array of the classNames of the upgraded classes on the element.\n *\n * @param {!Element} element The element to fetch data from.\n * @return {!Array}\n * @private\n */\n function getUpgradedListOfElement_(element) {\n var dataUpgraded = element.getAttribute('data-upgraded');\n // Use `['']` as default value to conform the `,name,name...` style.\n return dataUpgraded === null ? [''] : dataUpgraded.split(',');\n }\n\n /**\n * Returns true if the given element has already been upgraded for the given\n * class.\n *\n * @param {!Element} element The element we want to check.\n * @param {string} jsClass The class to check for.\n * @returns {boolean}\n * @private\n */\n function isElementUpgraded_(element, jsClass) {\n var upgradedList = getUpgradedListOfElement_(element);\n return upgradedList.indexOf(jsClass) !== -1;\n }\n\n /**\n * Create an event object.\n *\n * @param {string} eventType The type name of the event.\n * @param {boolean} bubbles Whether the event should bubble up the DOM.\n * @param {boolean} cancelable Whether the event can be canceled.\n * @returns {!Event}\n */\n function createEvent_(eventType, bubbles, cancelable) {\n if ('CustomEvent' in window && typeof window.CustomEvent === 'function') {\n return new CustomEvent(eventType, {\n bubbles: bubbles,\n cancelable: cancelable\n });\n } else {\n var ev = document.createEvent('Events');\n ev.initEvent(eventType, bubbles, cancelable);\n return ev;\n }\n }\n\n /**\n * Searches existing DOM for elements of our component type and upgrades them\n * if they have not already been upgraded.\n *\n * @param {string=} optJsClass the programatic name of the element class we\n * need to create a new instance of.\n * @param {string=} optCssClass the name of the CSS class elements of this\n * type will have.\n */\n function upgradeDomInternal(optJsClass, optCssClass) {\n if (typeof optJsClass === 'undefined' &&\n typeof optCssClass === 'undefined') {\n for (var i = 0; i < registeredComponents_.length; i++) {\n upgradeDomInternal(registeredComponents_[i].className,\n registeredComponents_[i].cssClass);\n }\n } else {\n var jsClass = /** @type {string} */ (optJsClass);\n if (typeof optCssClass === 'undefined') {\n var registeredClass = findRegisteredClass_(jsClass);\n if (registeredClass) {\n optCssClass = registeredClass.cssClass;\n }\n }\n\n var elements = document.querySelectorAll('.' + optCssClass);\n for (var n = 0; n < elements.length; n++) {\n upgradeElementInternal(elements[n], jsClass);\n }\n }\n }\n\n /**\n * Upgrades a specific element rather than all in the DOM.\n *\n * @param {!Element} element The element we wish to upgrade.\n * @param {string=} optJsClass Optional name of the class we want to upgrade\n * the element to.\n */\n function upgradeElementInternal(element, optJsClass) {\n // Verify argument type.\n if (!(typeof element === 'object' && element instanceof Element)) {\n throw new Error('Invalid argument provided to upgrade MDL element.');\n }\n // Allow upgrade to be canceled by canceling emitted event.\n var upgradingEv = createEvent_('mdl-componentupgrading', true, true);\n element.dispatchEvent(upgradingEv);\n if (upgradingEv.defaultPrevented) {\n return;\n }\n\n var upgradedList = getUpgradedListOfElement_(element);\n var classesToUpgrade = [];\n // If jsClass is not provided scan the registered components to find the\n // ones matching the element's CSS classList.\n if (!optJsClass) {\n var classList = element.classList;\n registeredComponents_.forEach(function(component) {\n // Match CSS & Not to be upgraded & Not upgraded.\n if (classList.contains(component.cssClass) &&\n classesToUpgrade.indexOf(component) === -1 &&\n !isElementUpgraded_(element, component.className)) {\n classesToUpgrade.push(component);\n }\n });\n } else if (!isElementUpgraded_(element, optJsClass)) {\n classesToUpgrade.push(findRegisteredClass_(optJsClass));\n }\n\n // Upgrade the element for each classes.\n for (var i = 0, n = classesToUpgrade.length, registeredClass; i < n; i++) {\n registeredClass = classesToUpgrade[i];\n if (registeredClass) {\n // Mark element as upgraded.\n upgradedList.push(registeredClass.className);\n element.setAttribute('data-upgraded', upgradedList.join(','));\n var instance = new registeredClass.classConstructor(element);\n instance[componentConfigProperty_] = registeredClass;\n createdComponents_.push(instance);\n // Call any callbacks the user has registered with this component type.\n for (var j = 0, m = registeredClass.callbacks.length; j < m; j++) {\n registeredClass.callbacks[j](element);\n }\n\n if (registeredClass.widget) {\n // Assign per element instance for control over API\n element[registeredClass.className] = instance;\n }\n } else {\n throw new Error(\n 'Unable to find a registered component for the given class.');\n }\n\n var upgradedEv = createEvent_('mdl-componentupgraded', true, false);\n element.dispatchEvent(upgradedEv);\n }\n }\n\n /**\n * Upgrades a specific list of elements rather than all in the DOM.\n *\n * @param {!Element|!Array|!NodeList|!HTMLCollection} elements\n * The elements we wish to upgrade.\n */\n function upgradeElementsInternal(elements) {\n if (!Array.isArray(elements)) {\n if (elements instanceof Element) {\n elements = [elements];\n } else {\n elements = Array.prototype.slice.call(elements);\n }\n }\n for (var i = 0, n = elements.length, element; i < n; i++) {\n element = elements[i];\n if (element instanceof HTMLElement) {\n upgradeElementInternal(element);\n if (element.children.length > 0) {\n upgradeElementsInternal(element.children);\n }\n }\n }\n }\n\n /**\n * Registers a class for future use and attempts to upgrade existing DOM.\n *\n * @param {componentHandler.ComponentConfigPublic} config\n */\n function registerInternal(config) {\n // In order to support both Closure-compiled and uncompiled code accessing\n // this method, we need to allow for both the dot and array syntax for\n // property access. You'll therefore see the `foo.bar || foo['bar']`\n // pattern repeated across this method.\n var widgetMissing = (typeof config.widget === 'undefined' &&\n typeof config['widget'] === 'undefined');\n var widget = true;\n\n if (!widgetMissing) {\n widget = config.widget || config['widget'];\n }\n\n var newConfig = /** @type {componentHandler.ComponentConfig} */ ({\n classConstructor: config.constructor || config['constructor'],\n className: config.classAsString || config['classAsString'],\n cssClass: config.cssClass || config['cssClass'],\n widget: widget,\n callbacks: []\n });\n\n registeredComponents_.forEach(function(item) {\n if (item.cssClass === newConfig.cssClass) {\n throw new Error('The provided cssClass has already been registered: ' + item.cssClass);\n }\n if (item.className === newConfig.className) {\n throw new Error('The provided className has already been registered');\n }\n });\n\n if (config.constructor.prototype\n .hasOwnProperty(componentConfigProperty_)) {\n throw new Error(\n 'MDL component classes must not have ' + componentConfigProperty_ +\n ' defined as a property.');\n }\n\n var found = findRegisteredClass_(config.classAsString, newConfig);\n\n if (!found) {\n registeredComponents_.push(newConfig);\n }\n }\n\n /**\n * Allows user to be alerted to any upgrades that are performed for a given\n * component type\n *\n * @param {string} jsClass The class name of the MDL component we wish\n * to hook into for any upgrades performed.\n * @param {function(!HTMLElement)} callback The function to call upon an\n * upgrade. This function should expect 1 parameter - the HTMLElement which\n * got upgraded.\n */\n function registerUpgradedCallbackInternal(jsClass, callback) {\n var regClass = findRegisteredClass_(jsClass);\n if (regClass) {\n regClass.callbacks.push(callback);\n }\n }\n\n /**\n * Upgrades all registered components found in the current DOM. This is\n * automatically called on window load.\n */\n function upgradeAllRegisteredInternal() {\n for (var n = 0; n < registeredComponents_.length; n++) {\n upgradeDomInternal(registeredComponents_[n].className);\n }\n }\n\n /**\n * Check the component for the downgrade method.\n * Execute if found.\n * Remove component from createdComponents list.\n *\n * @param {?componentHandler.Component} component\n */\n function deconstructComponentInternal(component) {\n if (component) {\n var componentIndex = createdComponents_.indexOf(component);\n createdComponents_.splice(componentIndex, 1);\n\n var upgrades = component.element_.getAttribute('data-upgraded').split(',');\n var componentPlace = upgrades.indexOf(component[componentConfigProperty_].classAsString);\n upgrades.splice(componentPlace, 1);\n component.element_.setAttribute('data-upgraded', upgrades.join(','));\n\n var ev = createEvent_('mdl-componentdowngraded', true, false);\n component.element_.dispatchEvent(ev);\n }\n }\n\n /**\n * Downgrade either a given node, an array of nodes, or a NodeList.\n *\n * @param {!Node|!Array|!NodeList} nodes\n */\n function downgradeNodesInternal(nodes) {\n /**\n * Auxiliary function to downgrade a single node.\n * @param {!Node} node the node to be downgraded\n */\n var downgradeNode = function(node) {\n createdComponents_.filter(function(item) {\n return item.element_ === node;\n }).forEach(deconstructComponentInternal);\n };\n if (nodes instanceof Array || nodes instanceof NodeList) {\n for (var n = 0; n < nodes.length; n++) {\n downgradeNode(nodes[n]);\n }\n } else if (nodes instanceof Node) {\n downgradeNode(nodes);\n } else {\n throw new Error('Invalid argument provided to downgrade MDL nodes.');\n }\n }\n\n // Now return the functions that should be made public with their publicly\n // facing names...\n return {\n upgradeDom: upgradeDomInternal,\n upgradeElement: upgradeElementInternal,\n upgradeElements: upgradeElementsInternal,\n upgradeAllRegistered: upgradeAllRegisteredInternal,\n registerUpgradedCallback: registerUpgradedCallbackInternal,\n register: registerInternal,\n downgradeElements: downgradeNodesInternal\n };\n})();\n\n/**\n * Describes the type of a registered component type managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n * constructor: Function,\n * classAsString: string,\n * cssClass: string,\n * widget: (string|boolean|undefined)\n * }}\n */\ncomponentHandler.ComponentConfigPublic; // jshint ignore:line\n\n/**\n * Describes the type of a registered component type managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n * constructor: !Function,\n * className: string,\n * cssClass: string,\n * widget: (string|boolean),\n * callbacks: !Array\n * }}\n */\ncomponentHandler.ComponentConfig; // jshint ignore:line\n\n/**\n * Created component (i.e., upgraded element) type as managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n * element_: !HTMLElement,\n * className: string,\n * classAsString: string,\n * cssClass: string,\n * widget: string\n * }}\n */\ncomponentHandler.Component; // jshint ignore:line\n\n// Export all symbols, for the benefit of Closure compiler.\n// No effect on uncompiled code.\ncomponentHandler['upgradeDom'] = componentHandler.upgradeDom;\ncomponentHandler['upgradeElement'] = componentHandler.upgradeElement;\ncomponentHandler['upgradeElements'] = componentHandler.upgradeElements;\ncomponentHandler['upgradeAllRegistered'] =\n componentHandler.upgradeAllRegistered;\ncomponentHandler['registerUpgradedCallback'] =\n componentHandler.registerUpgradedCallback;\ncomponentHandler['register'] = componentHandler.register;\ncomponentHandler['downgradeElements'] = componentHandler.downgradeElements;\nwindow.componentHandler = componentHandler;\nwindow['componentHandler'] = componentHandler;\n\nwindow.addEventListener('load', function() {\n 'use strict';\n\n /**\n * Performs a \"Cutting the mustard\" test. If the browser supports the features\n * tested, adds a mdl-js class to the element. It then upgrades all MDL\n * components requiring JavaScript.\n */\n if ('classList' in document.createElement('div') &&\n 'querySelector' in document &&\n 'addEventListener' in window && Array.prototype.forEach) {\n document.documentElement.classList.add('mdl-js');\n componentHandler.upgradeAllRegistered();\n } else {\n /**\n * Dummy function to avoid JS errors.\n */\n componentHandler.upgradeElement = function() {};\n /**\n * Dummy function to avoid JS errors.\n */\n componentHandler.register = function() {};\n }\n});\n","// Source: https://github.com/darius/requestAnimationFrame/blob/master/requestAnimationFrame.js\n// Adapted from https://gist.github.com/paulirish/1579671 which derived from\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n// requestAnimationFrame polyfill by Erik Möller.\n// Fixes from Paul Irish, Tino Zijdel, Andrew Mao, Klemen Slavič, Darius Bacon\n// MIT license\nif (!Date.now) {\n /**\n * Date.now polyfill.\n * @return {number} the current Date\n */\n Date.now = function () {\n return new Date().getTime();\n };\n Date['now'] = Date.now;\n}\nvar vendors = [\n 'webkit',\n 'moz'\n];\nfor (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) {\n var vp = vendors[i];\n window.requestAnimationFrame = window[vp + 'RequestAnimationFrame'];\n window.cancelAnimationFrame = window[vp + 'CancelAnimationFrame'] || window[vp + 'CancelRequestAnimationFrame'];\n window['requestAnimationFrame'] = window.requestAnimationFrame;\n window['cancelAnimationFrame'] = window.cancelAnimationFrame;\n}\nif (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) || !window.requestAnimationFrame || !window.cancelAnimationFrame) {\n var lastTime = 0;\n /**\n * requestAnimationFrame polyfill.\n * @param {!Function} callback the callback function.\n */\n window.requestAnimationFrame = function (callback) {\n var now = Date.now();\n var nextTime = Math.max(lastTime + 16, now);\n return setTimeout(function () {\n callback(lastTime = nextTime);\n }, nextTime - now);\n };\n window.cancelAnimationFrame = clearTimeout;\n window['requestAnimationFrame'] = window.requestAnimationFrame;\n window['cancelAnimationFrame'] = window.cancelAnimationFrame;\n}","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Button MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialButton = function MaterialButton(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialButton'] = MaterialButton;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialButton.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialButton.prototype.CssClasses_ = {\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_CONTAINER: 'mdl-button__ripple-container',\n RIPPLE: 'mdl-ripple'\n};\n/**\n * Handle blur of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialButton.prototype.blurHandler_ = function (event) {\n if (event) {\n this.element_.blur();\n }\n};\n// Public methods.\n/**\n * Disable button.\n *\n * @public\n */\nMaterialButton.prototype.disable = function () {\n this.element_.disabled = true;\n};\nMaterialButton.prototype['disable'] = MaterialButton.prototype.disable;\n/**\n * Enable button.\n *\n * @public\n */\nMaterialButton.prototype.enable = function () {\n this.element_.disabled = false;\n};\nMaterialButton.prototype['enable'] = MaterialButton.prototype.enable;\n/**\n * Initialize element.\n */\nMaterialButton.prototype.init = function () {\n if (this.element_) {\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleElement_ = document.createElement('span');\n this.rippleElement_.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(this.rippleElement_);\n this.boundRippleBlurHandler = this.blurHandler_.bind(this);\n this.rippleElement_.addEventListener('mouseup', this.boundRippleBlurHandler);\n this.element_.appendChild(rippleContainer);\n }\n this.boundButtonBlurHandler = this.blurHandler_.bind(this);\n this.element_.addEventListener('mouseup', this.boundButtonBlurHandler);\n this.element_.addEventListener('mouseleave', this.boundButtonBlurHandler);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialButton,\n classAsString: 'MaterialButton',\n cssClass: 'mdl-js-button',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Checkbox MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialCheckbox = function MaterialCheckbox(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialCheckbox'] = MaterialCheckbox;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialCheckbox.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialCheckbox.prototype.CssClasses_ = {\n INPUT: 'mdl-checkbox__input',\n BOX_OUTLINE: 'mdl-checkbox__box-outline',\n FOCUS_HELPER: 'mdl-checkbox__focus-helper',\n TICK_OUTLINE: 'mdl-checkbox__tick-outline',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-checkbox__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onChange_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onMouseUp_ = function (event) {\n this.blur_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialCheckbox.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialCheckbox.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the inputs toggle state and update display.\n *\n * @public\n */\nMaterialCheckbox.prototype.checkToggleState = function () {\n if (this.inputElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialCheckbox.prototype['checkToggleState'] = MaterialCheckbox.prototype.checkToggleState;\n/**\n * Check the inputs disabled state and update display.\n *\n * @public\n */\nMaterialCheckbox.prototype.checkDisabled = function () {\n if (this.inputElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialCheckbox.prototype['checkDisabled'] = MaterialCheckbox.prototype.checkDisabled;\n/**\n * Disable checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.disable = function () {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['disable'] = MaterialCheckbox.prototype.disable;\n/**\n * Enable checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.enable = function () {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['enable'] = MaterialCheckbox.prototype.enable;\n/**\n * Check checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.check = function () {\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['check'] = MaterialCheckbox.prototype.check;\n/**\n * Uncheck checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.uncheck = function () {\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['uncheck'] = MaterialCheckbox.prototype.uncheck;\n/**\n * Initialize element.\n */\nMaterialCheckbox.prototype.init = function () {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n var boxOutline = document.createElement('span');\n boxOutline.classList.add(this.CssClasses_.BOX_OUTLINE);\n var tickContainer = document.createElement('span');\n tickContainer.classList.add(this.CssClasses_.FOCUS_HELPER);\n var tickOutline = document.createElement('span');\n tickOutline.classList.add(this.CssClasses_.TICK_OUTLINE);\n boxOutline.appendChild(tickOutline);\n this.element_.appendChild(tickContainer);\n this.element_.appendChild(boxOutline);\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n this.boundRippleMouseUp = this.onMouseUp_.bind(this);\n this.rippleContainerElement_.addEventListener('mouseup', this.boundRippleMouseUp);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n this.boundInputOnChange = this.onChange_.bind(this);\n this.boundInputOnFocus = this.onFocus_.bind(this);\n this.boundInputOnBlur = this.onBlur_.bind(this);\n this.boundElementMouseUp = this.onMouseUp_.bind(this);\n this.inputElement_.addEventListener('change', this.boundInputOnChange);\n this.inputElement_.addEventListener('focus', this.boundInputOnFocus);\n this.inputElement_.addEventListener('blur', this.boundInputOnBlur);\n this.element_.addEventListener('mouseup', this.boundElementMouseUp);\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialCheckbox,\n classAsString: 'MaterialCheckbox',\n cssClass: 'mdl-js-checkbox',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for icon toggle MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialIconToggle = function MaterialIconToggle(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialIconToggle'] = MaterialIconToggle;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialIconToggle.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialIconToggle.prototype.CssClasses_ = {\n INPUT: 'mdl-icon-toggle__input',\n JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-icon-toggle__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onChange_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onMouseUp_ = function (event) {\n this.blur_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialIconToggle.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialIconToggle.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the inputs toggle state and update display.\n *\n * @public\n */\nMaterialIconToggle.prototype.checkToggleState = function () {\n if (this.inputElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialIconToggle.prototype['checkToggleState'] = MaterialIconToggle.prototype.checkToggleState;\n/**\n * Check the inputs disabled state and update display.\n *\n * @public\n */\nMaterialIconToggle.prototype.checkDisabled = function () {\n if (this.inputElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialIconToggle.prototype['checkDisabled'] = MaterialIconToggle.prototype.checkDisabled;\n/**\n * Disable icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.disable = function () {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['disable'] = MaterialIconToggle.prototype.disable;\n/**\n * Enable icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.enable = function () {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['enable'] = MaterialIconToggle.prototype.enable;\n/**\n * Check icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.check = function () {\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['check'] = MaterialIconToggle.prototype.check;\n/**\n * Uncheck icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.uncheck = function () {\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['uncheck'] = MaterialIconToggle.prototype.uncheck;\n/**\n * Initialize element.\n */\nMaterialIconToggle.prototype.init = function () {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n if (this.element_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleContainerElement_.classList.add(this.CssClasses_.JS_RIPPLE_EFFECT);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n this.boundRippleMouseUp = this.onMouseUp_.bind(this);\n this.rippleContainerElement_.addEventListener('mouseup', this.boundRippleMouseUp);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n this.boundInputOnChange = this.onChange_.bind(this);\n this.boundInputOnFocus = this.onFocus_.bind(this);\n this.boundInputOnBlur = this.onBlur_.bind(this);\n this.boundElementOnMouseUp = this.onMouseUp_.bind(this);\n this.inputElement_.addEventListener('change', this.boundInputOnChange);\n this.inputElement_.addEventListener('focus', this.boundInputOnFocus);\n this.inputElement_.addEventListener('blur', this.boundInputOnBlur);\n this.element_.addEventListener('mouseup', this.boundElementOnMouseUp);\n this.updateClasses_();\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialIconToggle,\n classAsString: 'MaterialIconToggle',\n cssClass: 'mdl-js-icon-toggle',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for dropdown MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialMenu = function MaterialMenu(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialMenu'] = MaterialMenu;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialMenu.prototype.Constant_ = {\n // Total duration of the menu animation.\n TRANSITION_DURATION_SECONDS: 0.3,\n // The fraction of the total duration we want to use for menu item animations.\n TRANSITION_DURATION_FRACTION: 0.8,\n // How long the menu stays open after choosing an option (so the user can see\n // the ripple).\n CLOSE_TIMEOUT: 150\n};\n/**\n * Keycodes, for code readability.\n *\n * @enum {number}\n * @private\n */\nMaterialMenu.prototype.Keycodes_ = {\n ENTER: 13,\n ESCAPE: 27,\n SPACE: 32,\n UP_ARROW: 38,\n DOWN_ARROW: 40\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialMenu.prototype.CssClasses_ = {\n CONTAINER: 'mdl-menu__container',\n OUTLINE: 'mdl-menu__outline',\n ITEM: 'mdl-menu__item',\n ITEM_RIPPLE_CONTAINER: 'mdl-menu__item-ripple-container',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE: 'mdl-ripple',\n // Statuses\n IS_UPGRADED: 'is-upgraded',\n IS_VISIBLE: 'is-visible',\n IS_ANIMATING: 'is-animating',\n // Alignment options\n BOTTOM_LEFT: 'mdl-menu--bottom-left',\n // This is the default.\n BOTTOM_RIGHT: 'mdl-menu--bottom-right',\n TOP_LEFT: 'mdl-menu--top-left',\n TOP_RIGHT: 'mdl-menu--top-right',\n UNALIGNED: 'mdl-menu--unaligned'\n};\n/**\n * Initialize element.\n */\nMaterialMenu.prototype.init = function () {\n if (this.element_) {\n // Create container for the menu.\n var container = document.createElement('div');\n container.classList.add(this.CssClasses_.CONTAINER);\n this.element_.parentElement.insertBefore(container, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n container.appendChild(this.element_);\n this.container_ = container;\n // Create outline for the menu (shadow and background).\n var outline = document.createElement('div');\n outline.classList.add(this.CssClasses_.OUTLINE);\n this.outline_ = outline;\n container.insertBefore(outline, this.element_);\n // Find the \"for\" element and bind events to it.\n var forElId = this.element_.getAttribute('for') || this.element_.getAttribute('data-mdl-for');\n var forEl = null;\n if (forElId) {\n forEl = document.getElementById(forElId);\n if (forEl) {\n this.forElement_ = forEl;\n forEl.addEventListener('click', this.handleForClick_.bind(this));\n forEl.addEventListener('keydown', this.handleForKeyboardEvent_.bind(this));\n }\n }\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n this.boundItemKeydown_ = this.handleItemKeyboardEvent_.bind(this);\n this.boundItemClick_ = this.handleItemClick_.bind(this);\n for (var i = 0; i < items.length; i++) {\n // Add a listener to each menu item.\n items[i].addEventListener('click', this.boundItemClick_);\n // Add a tab index to each menu item.\n items[i].tabIndex = '-1';\n // Add a keyboard listener to each menu item.\n items[i].addEventListener('keydown', this.boundItemKeydown_);\n }\n // Add ripple classes to each item, if the user has enabled ripples.\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n for (i = 0; i < items.length; i++) {\n var item = items[i];\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.ITEM_RIPPLE_CONTAINER);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n item.appendChild(rippleContainer);\n item.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n }\n }\n // Copy alignment classes to the container, so the outline can use them.\n if (this.element_.classList.contains(this.CssClasses_.BOTTOM_LEFT)) {\n this.outline_.classList.add(this.CssClasses_.BOTTOM_LEFT);\n }\n if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n this.outline_.classList.add(this.CssClasses_.BOTTOM_RIGHT);\n }\n if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n this.outline_.classList.add(this.CssClasses_.TOP_LEFT);\n }\n if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n this.outline_.classList.add(this.CssClasses_.TOP_RIGHT);\n }\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n this.outline_.classList.add(this.CssClasses_.UNALIGNED);\n }\n container.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n/**\n * Handles a click on the \"for\" element, by positioning the menu and then\n * toggling it.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleForClick_ = function (evt) {\n if (this.element_ && this.forElement_) {\n var rect = this.forElement_.getBoundingClientRect();\n var forRect = this.forElement_.parentElement.getBoundingClientRect();\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n } else if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n // Position below the \"for\" element, aligned to its right.\n this.container_.style.right = forRect.right - rect.right + 'px';\n this.container_.style.top = this.forElement_.offsetTop + this.forElement_.offsetHeight + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n // Position above the \"for\" element, aligned to its left.\n this.container_.style.left = this.forElement_.offsetLeft + 'px';\n this.container_.style.bottom = forRect.bottom - rect.top + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n // Position above the \"for\" element, aligned to its right.\n this.container_.style.right = forRect.right - rect.right + 'px';\n this.container_.style.bottom = forRect.bottom - rect.top + 'px';\n } else {\n // Default: position below the \"for\" element, aligned to its left.\n this.container_.style.left = this.forElement_.offsetLeft + 'px';\n this.container_.style.top = this.forElement_.offsetTop + this.forElement_.offsetHeight + 'px';\n }\n }\n this.toggle(evt);\n};\n/**\n * Handles a keyboard event on the \"for\" element.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleForKeyboardEvent_ = function (evt) {\n if (this.element_ && this.container_ && this.forElement_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM + ':not([disabled])');\n if (items && items.length > 0 && this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n if (evt.keyCode === this.Keycodes_.UP_ARROW) {\n evt.preventDefault();\n items[items.length - 1].focus();\n } else if (evt.keyCode === this.Keycodes_.DOWN_ARROW) {\n evt.preventDefault();\n items[0].focus();\n }\n }\n }\n};\n/**\n * Handles a keyboard event on an item.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleItemKeyboardEvent_ = function (evt) {\n if (this.element_ && this.container_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM + ':not([disabled])');\n if (items && items.length > 0 && this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n var currentIndex = Array.prototype.slice.call(items).indexOf(evt.target);\n if (evt.keyCode === this.Keycodes_.UP_ARROW) {\n evt.preventDefault();\n if (currentIndex > 0) {\n items[currentIndex - 1].focus();\n } else {\n items[items.length - 1].focus();\n }\n } else if (evt.keyCode === this.Keycodes_.DOWN_ARROW) {\n evt.preventDefault();\n if (items.length > currentIndex + 1) {\n items[currentIndex + 1].focus();\n } else {\n items[0].focus();\n }\n } else if (evt.keyCode === this.Keycodes_.SPACE || evt.keyCode === this.Keycodes_.ENTER) {\n evt.preventDefault();\n // Send mousedown and mouseup to trigger ripple.\n var e = new MouseEvent('mousedown');\n evt.target.dispatchEvent(e);\n e = new MouseEvent('mouseup');\n evt.target.dispatchEvent(e);\n // Send click.\n evt.target.click();\n } else if (evt.keyCode === this.Keycodes_.ESCAPE) {\n evt.preventDefault();\n this.hide();\n }\n }\n }\n};\n/**\n * Handles a click event on an item.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleItemClick_ = function (evt) {\n if (evt.target.hasAttribute('disabled')) {\n evt.stopPropagation();\n } else {\n // Wait some time before closing menu, so the user can see the ripple.\n this.closing_ = true;\n window.setTimeout(function (evt) {\n this.hide();\n this.closing_ = false;\n }.bind(this), this.Constant_.CLOSE_TIMEOUT);\n }\n};\n/**\n * Calculates the initial clip (for opening the menu) or final clip (for closing\n * it), and applies it. This allows us to animate from or to the correct point,\n * that is, the point it's aligned to in the \"for\" element.\n *\n * @param {number} height Height of the clip rectangle\n * @param {number} width Width of the clip rectangle\n * @private\n */\nMaterialMenu.prototype.applyClip_ = function (height, width) {\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n // Do not clip.\n this.element_.style.clip = '';\n } else if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n // Clip to the top right corner of the menu.\n this.element_.style.clip = 'rect(0 ' + width + 'px ' + '0 ' + width + 'px)';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n // Clip to the bottom left corner of the menu.\n this.element_.style.clip = 'rect(' + height + 'px 0 ' + height + 'px 0)';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n // Clip to the bottom right corner of the menu.\n this.element_.style.clip = 'rect(' + height + 'px ' + width + 'px ' + height + 'px ' + width + 'px)';\n } else {\n // Default: do not clip (same as clipping to the top left corner).\n this.element_.style.clip = '';\n }\n};\n/**\n * Cleanup function to remove animation listeners.\n *\n * @param {Event} evt\n * @private\n */\nMaterialMenu.prototype.removeAnimationEndListener_ = function (evt) {\n evt.target.classList.remove(MaterialMenu.prototype.CssClasses_.IS_ANIMATING);\n};\n/**\n * Adds an event listener to clean up after the animation ends.\n *\n * @private\n */\nMaterialMenu.prototype.addAnimationEndListener_ = function () {\n this.element_.addEventListener('transitionend', this.removeAnimationEndListener_);\n this.element_.addEventListener('webkitTransitionEnd', this.removeAnimationEndListener_);\n};\n/**\n * Displays the menu.\n *\n * @public\n */\nMaterialMenu.prototype.show = function (evt) {\n if (this.element_ && this.container_ && this.outline_) {\n // Measure the inner element.\n var height = this.element_.getBoundingClientRect().height;\n var width = this.element_.getBoundingClientRect().width;\n // Apply the inner element's size to the container and outline.\n this.container_.style.width = width + 'px';\n this.container_.style.height = height + 'px';\n this.outline_.style.width = width + 'px';\n this.outline_.style.height = height + 'px';\n var transitionDuration = this.Constant_.TRANSITION_DURATION_SECONDS * this.Constant_.TRANSITION_DURATION_FRACTION;\n // Calculate transition delays for individual menu items, so that they fade\n // in one at a time.\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n for (var i = 0; i < items.length; i++) {\n var itemDelay = null;\n if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT) || this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n itemDelay = (height - items[i].offsetTop - items[i].offsetHeight) / height * transitionDuration + 's';\n } else {\n itemDelay = items[i].offsetTop / height * transitionDuration + 's';\n }\n items[i].style.transitionDelay = itemDelay;\n }\n // Apply the initial clip to the text before we start animating.\n this.applyClip_(height, width);\n // Wait for the next frame, turn on animation, and apply the final clip.\n // Also make it visible. This triggers the transitions.\n window.requestAnimationFrame(function () {\n this.element_.classList.add(this.CssClasses_.IS_ANIMATING);\n this.element_.style.clip = 'rect(0 ' + width + 'px ' + height + 'px 0)';\n this.container_.classList.add(this.CssClasses_.IS_VISIBLE);\n }.bind(this));\n // Clean up after the animation is complete.\n this.addAnimationEndListener_();\n // Add a click listener to the document, to close the menu.\n var callback = function (e) {\n // Check to see if the document is processing the same event that\n // displayed the menu in the first place. If so, do nothing.\n // Also check to see if the menu is in the process of closing itself, and\n // do nothing in that case.\n // Also check if the clicked element is a menu item\n // if so, do nothing.\n if (e !== evt && !this.closing_ && e.target.parentNode !== this.element_) {\n document.removeEventListener('click', callback);\n this.hide();\n }\n }.bind(this);\n document.addEventListener('click', callback);\n }\n};\nMaterialMenu.prototype['show'] = MaterialMenu.prototype.show;\n/**\n * Hides the menu.\n *\n * @public\n */\nMaterialMenu.prototype.hide = function () {\n if (this.element_ && this.container_ && this.outline_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n // Remove all transition delays; menu items fade out concurrently.\n for (var i = 0; i < items.length; i++) {\n items[i].style.removeProperty('transition-delay');\n }\n // Measure the inner element.\n var rect = this.element_.getBoundingClientRect();\n var height = rect.height;\n var width = rect.width;\n // Turn on animation, and apply the final clip. Also make invisible.\n // This triggers the transitions.\n this.element_.classList.add(this.CssClasses_.IS_ANIMATING);\n this.applyClip_(height, width);\n this.container_.classList.remove(this.CssClasses_.IS_VISIBLE);\n // Clean up after the animation is complete.\n this.addAnimationEndListener_();\n }\n};\nMaterialMenu.prototype['hide'] = MaterialMenu.prototype.hide;\n/**\n * Displays or hides the menu, depending on current state.\n *\n * @public\n */\nMaterialMenu.prototype.toggle = function (evt) {\n if (this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n this.hide();\n } else {\n this.show(evt);\n }\n};\nMaterialMenu.prototype['toggle'] = MaterialMenu.prototype.toggle;\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialMenu,\n classAsString: 'MaterialMenu',\n cssClass: 'mdl-js-menu',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Progress MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialProgress = function MaterialProgress(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialProgress'] = MaterialProgress;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialProgress.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialProgress.prototype.CssClasses_ = { INDETERMINATE_CLASS: 'mdl-progress__indeterminate' };\n/**\n * Set the current progress of the progressbar.\n *\n * @param {number} p Percentage of the progress (0-100)\n * @public\n */\nMaterialProgress.prototype.setProgress = function (p) {\n if (this.element_.classList.contains(this.CssClasses_.INDETERMINATE_CLASS)) {\n return;\n }\n this.progressbar_.style.width = p + '%';\n};\nMaterialProgress.prototype['setProgress'] = MaterialProgress.prototype.setProgress;\n/**\n * Set the current progress of the buffer.\n *\n * @param {number} p Percentage of the buffer (0-100)\n * @public\n */\nMaterialProgress.prototype.setBuffer = function (p) {\n this.bufferbar_.style.width = p + '%';\n this.auxbar_.style.width = 100 - p + '%';\n};\nMaterialProgress.prototype['setBuffer'] = MaterialProgress.prototype.setBuffer;\n/**\n * Initialize element.\n */\nMaterialProgress.prototype.init = function () {\n if (this.element_) {\n var el = document.createElement('div');\n el.className = 'progressbar bar bar1';\n this.element_.appendChild(el);\n this.progressbar_ = el;\n el = document.createElement('div');\n el.className = 'bufferbar bar bar2';\n this.element_.appendChild(el);\n this.bufferbar_ = el;\n el = document.createElement('div');\n el.className = 'auxbar bar bar3';\n this.element_.appendChild(el);\n this.auxbar_ = el;\n this.progressbar_.style.width = '0%';\n this.bufferbar_.style.width = '100%';\n this.auxbar_.style.width = '0%';\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialProgress,\n classAsString: 'MaterialProgress',\n cssClass: 'mdl-js-progress',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Radio MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialRadio = function MaterialRadio(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialRadio'] = MaterialRadio;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialRadio.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialRadio.prototype.CssClasses_ = {\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked',\n IS_UPGRADED: 'is-upgraded',\n JS_RADIO: 'mdl-js-radio',\n RADIO_BTN: 'mdl-radio__button',\n RADIO_OUTER_CIRCLE: 'mdl-radio__outer-circle',\n RADIO_INNER_CIRCLE: 'mdl-radio__inner-circle',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-radio__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onChange_ = function (event) {\n // Since other radio buttons don't get change events, we need to look for\n // them to update their classes.\n var radios = document.getElementsByClassName(this.CssClasses_.JS_RADIO);\n for (var i = 0; i < radios.length; i++) {\n var button = radios[i].querySelector('.' + this.CssClasses_.RADIO_BTN);\n // Different name == different group, so no point updating those.\n if (button.getAttribute('name') === this.btnElement_.getAttribute('name')) {\n if (typeof radios[i]['MaterialRadio'] !== 'undefined') {\n radios[i]['MaterialRadio'].updateClasses_();\n }\n }\n }\n};\n/**\n * Handle focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onMouseup_ = function (event) {\n this.blur_();\n};\n/**\n * Update classes.\n *\n * @private\n */\nMaterialRadio.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialRadio.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.btnElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the components disabled state.\n *\n * @public\n */\nMaterialRadio.prototype.checkDisabled = function () {\n if (this.btnElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialRadio.prototype['checkDisabled'] = MaterialRadio.prototype.checkDisabled;\n/**\n * Check the components toggled state.\n *\n * @public\n */\nMaterialRadio.prototype.checkToggleState = function () {\n if (this.btnElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialRadio.prototype['checkToggleState'] = MaterialRadio.prototype.checkToggleState;\n/**\n * Disable radio.\n *\n * @public\n */\nMaterialRadio.prototype.disable = function () {\n this.btnElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialRadio.prototype['disable'] = MaterialRadio.prototype.disable;\n/**\n * Enable radio.\n *\n * @public\n */\nMaterialRadio.prototype.enable = function () {\n this.btnElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialRadio.prototype['enable'] = MaterialRadio.prototype.enable;\n/**\n * Check radio.\n *\n * @public\n */\nMaterialRadio.prototype.check = function () {\n this.btnElement_.checked = true;\n this.onChange_(null);\n};\nMaterialRadio.prototype['check'] = MaterialRadio.prototype.check;\n/**\n * Uncheck radio.\n *\n * @public\n */\nMaterialRadio.prototype.uncheck = function () {\n this.btnElement_.checked = false;\n this.onChange_(null);\n};\nMaterialRadio.prototype['uncheck'] = MaterialRadio.prototype.uncheck;\n/**\n * Initialize element.\n */\nMaterialRadio.prototype.init = function () {\n if (this.element_) {\n this.btnElement_ = this.element_.querySelector('.' + this.CssClasses_.RADIO_BTN);\n this.boundChangeHandler_ = this.onChange_.bind(this);\n this.boundFocusHandler_ = this.onChange_.bind(this);\n this.boundBlurHandler_ = this.onBlur_.bind(this);\n this.boundMouseUpHandler_ = this.onMouseup_.bind(this);\n var outerCircle = document.createElement('span');\n outerCircle.classList.add(this.CssClasses_.RADIO_OUTER_CIRCLE);\n var innerCircle = document.createElement('span');\n innerCircle.classList.add(this.CssClasses_.RADIO_INNER_CIRCLE);\n this.element_.appendChild(outerCircle);\n this.element_.appendChild(innerCircle);\n var rippleContainer;\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_CENTER);\n rippleContainer.addEventListener('mouseup', this.boundMouseUpHandler_);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n this.element_.appendChild(rippleContainer);\n }\n this.btnElement_.addEventListener('change', this.boundChangeHandler_);\n this.btnElement_.addEventListener('focus', this.boundFocusHandler_);\n this.btnElement_.addEventListener('blur', this.boundBlurHandler_);\n this.element_.addEventListener('mouseup', this.boundMouseUpHandler_);\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialRadio,\n classAsString: 'MaterialRadio',\n cssClass: 'mdl-js-radio',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Slider MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialSlider = function MaterialSlider(element) {\n this.element_ = element;\n // Browser feature detection.\n this.isIE_ = window.navigator.msPointerEnabled;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialSlider'] = MaterialSlider;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSlider.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSlider.prototype.CssClasses_ = {\n IE_CONTAINER: 'mdl-slider__ie-container',\n SLIDER_CONTAINER: 'mdl-slider__container',\n BACKGROUND_FLEX: 'mdl-slider__background-flex',\n BACKGROUND_LOWER: 'mdl-slider__background-lower',\n BACKGROUND_UPPER: 'mdl-slider__background-upper',\n IS_LOWEST_VALUE: 'is-lowest-value',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Handle input on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onInput_ = function (event) {\n this.updateValueStyles_();\n};\n/**\n * Handle change on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onChange_ = function (event) {\n this.updateValueStyles_();\n};\n/**\n * Handle mouseup on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onMouseUp_ = function (event) {\n event.target.blur();\n};\n/**\n * Handle mousedown on container element.\n * This handler is purpose is to not require the use to click\n * exactly on the 2px slider element, as FireFox seems to be very\n * strict about this.\n *\n * @param {Event} event The event that fired.\n * @private\n * @suppress {missingProperties}\n */\nMaterialSlider.prototype.onContainerMouseDown_ = function (event) {\n // If this click is not on the parent element (but rather some child)\n // ignore. It may still bubble up.\n if (event.target !== this.element_.parentElement) {\n return;\n }\n // Discard the original event and create a new event that\n // is on the slider element.\n event.preventDefault();\n var newEvent = new MouseEvent('mousedown', {\n target: event.target,\n buttons: event.buttons,\n clientX: event.clientX,\n clientY: this.element_.getBoundingClientRect().y\n });\n this.element_.dispatchEvent(newEvent);\n};\n/**\n * Handle updating of values.\n *\n * @private\n */\nMaterialSlider.prototype.updateValueStyles_ = function () {\n // Calculate and apply percentages to div structure behind slider.\n var fraction = (this.element_.value - this.element_.min) / (this.element_.max - this.element_.min);\n if (fraction === 0) {\n this.element_.classList.add(this.CssClasses_.IS_LOWEST_VALUE);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_LOWEST_VALUE);\n }\n if (!this.isIE_) {\n this.backgroundLower_.style.flex = fraction;\n this.backgroundLower_.style.webkitFlex = fraction;\n this.backgroundUpper_.style.flex = 1 - fraction;\n this.backgroundUpper_.style.webkitFlex = 1 - fraction;\n }\n};\n// Public methods.\n/**\n * Disable slider.\n *\n * @public\n */\nMaterialSlider.prototype.disable = function () {\n this.element_.disabled = true;\n};\nMaterialSlider.prototype['disable'] = MaterialSlider.prototype.disable;\n/**\n * Enable slider.\n *\n * @public\n */\nMaterialSlider.prototype.enable = function () {\n this.element_.disabled = false;\n};\nMaterialSlider.prototype['enable'] = MaterialSlider.prototype.enable;\n/**\n * Update slider value.\n *\n * @param {number} value The value to which to set the control (optional).\n * @public\n */\nMaterialSlider.prototype.change = function (value) {\n if (typeof value !== 'undefined') {\n this.element_.value = value;\n }\n this.updateValueStyles_();\n};\nMaterialSlider.prototype['change'] = MaterialSlider.prototype.change;\n/**\n * Initialize element.\n */\nMaterialSlider.prototype.init = function () {\n if (this.element_) {\n if (this.isIE_) {\n // Since we need to specify a very large height in IE due to\n // implementation limitations, we add a parent here that trims it down to\n // a reasonable size.\n var containerIE = document.createElement('div');\n containerIE.classList.add(this.CssClasses_.IE_CONTAINER);\n this.element_.parentElement.insertBefore(containerIE, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n containerIE.appendChild(this.element_);\n } else {\n // For non-IE browsers, we need a div structure that sits behind the\n // slider and allows us to style the left and right sides of it with\n // different colors.\n var container = document.createElement('div');\n container.classList.add(this.CssClasses_.SLIDER_CONTAINER);\n this.element_.parentElement.insertBefore(container, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n container.appendChild(this.element_);\n var backgroundFlex = document.createElement('div');\n backgroundFlex.classList.add(this.CssClasses_.BACKGROUND_FLEX);\n container.appendChild(backgroundFlex);\n this.backgroundLower_ = document.createElement('div');\n this.backgroundLower_.classList.add(this.CssClasses_.BACKGROUND_LOWER);\n backgroundFlex.appendChild(this.backgroundLower_);\n this.backgroundUpper_ = document.createElement('div');\n this.backgroundUpper_.classList.add(this.CssClasses_.BACKGROUND_UPPER);\n backgroundFlex.appendChild(this.backgroundUpper_);\n }\n this.boundInputHandler = this.onInput_.bind(this);\n this.boundChangeHandler = this.onChange_.bind(this);\n this.boundMouseUpHandler = this.onMouseUp_.bind(this);\n this.boundContainerMouseDownHandler = this.onContainerMouseDown_.bind(this);\n this.element_.addEventListener('input', this.boundInputHandler);\n this.element_.addEventListener('change', this.boundChangeHandler);\n this.element_.addEventListener('mouseup', this.boundMouseUpHandler);\n this.element_.parentElement.addEventListener('mousedown', this.boundContainerMouseDownHandler);\n this.updateValueStyles_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSlider,\n classAsString: 'MaterialSlider',\n cssClass: 'mdl-js-slider',\n widget: true\n});","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Snackbar MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialSnackbar = function MaterialSnackbar(element) {\n this.element_ = element;\n this.textElement_ = this.element_.querySelector('.' + this.cssClasses_.MESSAGE);\n this.actionElement_ = this.element_.querySelector('.' + this.cssClasses_.ACTION);\n if (!this.textElement_) {\n throw new Error('There must be a message element for a snackbar.');\n }\n if (!this.actionElement_) {\n throw new Error('There must be an action element for a snackbar.');\n }\n this.active = false;\n this.actionHandler_ = undefined;\n this.message_ = undefined;\n this.actionText_ = undefined;\n this.queuedNotifications_ = [];\n this.setActionHidden_(true);\n};\nwindow['MaterialSnackbar'] = MaterialSnackbar;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSnackbar.prototype.Constant_ = {\n // The duration of the snackbar show/hide animation, in ms.\n ANIMATION_LENGTH: 250\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSnackbar.prototype.cssClasses_ = {\n SNACKBAR: 'mdl-snackbar',\n MESSAGE: 'mdl-snackbar__text',\n ACTION: 'mdl-snackbar__action',\n ACTIVE: 'mdl-snackbar--active'\n};\n/**\n * Display the snackbar.\n *\n * @private\n */\nMaterialSnackbar.prototype.displaySnackbar_ = function () {\n this.element_.setAttribute('aria-hidden', 'true');\n if (this.actionHandler_) {\n this.actionElement_.textContent = this.actionText_;\n this.actionElement_.addEventListener('click', this.actionHandler_);\n this.setActionHidden_(false);\n }\n this.textElement_.textContent = this.message_;\n this.element_.classList.add(this.cssClasses_.ACTIVE);\n this.element_.setAttribute('aria-hidden', 'false');\n setTimeout(this.cleanup_.bind(this), this.timeout_);\n};\n/**\n * Show the snackbar.\n *\n * @param {Object} data The data for the notification.\n * @public\n */\nMaterialSnackbar.prototype.showSnackbar = function (data) {\n if (data === undefined) {\n throw new Error('Please provide a data object with at least a message to display.');\n }\n if (data['message'] === undefined) {\n throw new Error('Please provide a message to be displayed.');\n }\n if (data['actionHandler'] && !data['actionText']) {\n throw new Error('Please provide action text with the handler.');\n }\n if (this.active) {\n this.queuedNotifications_.push(data);\n } else {\n this.active = true;\n this.message_ = data['message'];\n if (data['timeout']) {\n this.timeout_ = data['timeout'];\n } else {\n this.timeout_ = 2750;\n }\n if (data['actionHandler']) {\n this.actionHandler_ = data['actionHandler'];\n }\n if (data['actionText']) {\n this.actionText_ = data['actionText'];\n }\n this.displaySnackbar_();\n }\n};\nMaterialSnackbar.prototype['showSnackbar'] = MaterialSnackbar.prototype.showSnackbar;\n/**\n * Check if the queue has items within it.\n * If it does, display the next entry.\n *\n * @private\n */\nMaterialSnackbar.prototype.checkQueue_ = function () {\n if (this.queuedNotifications_.length > 0) {\n this.showSnackbar(this.queuedNotifications_.shift());\n }\n};\n/**\n * Cleanup the snackbar event listeners and accessiblity attributes.\n *\n * @private\n */\nMaterialSnackbar.prototype.cleanup_ = function () {\n this.element_.classList.remove(this.cssClasses_.ACTIVE);\n setTimeout(function () {\n this.element_.setAttribute('aria-hidden', 'true');\n this.textElement_.textContent = '';\n if (!Boolean(this.actionElement_.getAttribute('aria-hidden'))) {\n this.setActionHidden_(true);\n this.actionElement_.textContent = '';\n this.actionElement_.removeEventListener('click', this.actionHandler_);\n }\n this.actionHandler_ = undefined;\n this.message_ = undefined;\n this.actionText_ = undefined;\n this.active = false;\n this.checkQueue_();\n }.bind(this), this.Constant_.ANIMATION_LENGTH);\n};\n/**\n * Set the action handler hidden state.\n *\n * @param {boolean} value\n * @private\n */\nMaterialSnackbar.prototype.setActionHidden_ = function (value) {\n if (value) {\n this.actionElement_.setAttribute('aria-hidden', 'true');\n } else {\n this.actionElement_.removeAttribute('aria-hidden');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSnackbar,\n classAsString: 'MaterialSnackbar',\n cssClass: 'mdl-js-snackbar',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Spinner MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n * @constructor\n */\nvar MaterialSpinner = function MaterialSpinner(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialSpinner'] = MaterialSpinner;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSpinner.prototype.Constant_ = { MDL_SPINNER_LAYER_COUNT: 4 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSpinner.prototype.CssClasses_ = {\n MDL_SPINNER_LAYER: 'mdl-spinner__layer',\n MDL_SPINNER_CIRCLE_CLIPPER: 'mdl-spinner__circle-clipper',\n MDL_SPINNER_CIRCLE: 'mdl-spinner__circle',\n MDL_SPINNER_GAP_PATCH: 'mdl-spinner__gap-patch',\n MDL_SPINNER_LEFT: 'mdl-spinner__left',\n MDL_SPINNER_RIGHT: 'mdl-spinner__right'\n};\n/**\n * Auxiliary method to create a spinner layer.\n *\n * @param {number} index Index of the layer to be created.\n * @public\n */\nMaterialSpinner.prototype.createLayer = function (index) {\n var layer = document.createElement('div');\n layer.classList.add(this.CssClasses_.MDL_SPINNER_LAYER);\n layer.classList.add(this.CssClasses_.MDL_SPINNER_LAYER + '-' + index);\n var leftClipper = document.createElement('div');\n leftClipper.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER);\n leftClipper.classList.add(this.CssClasses_.MDL_SPINNER_LEFT);\n var gapPatch = document.createElement('div');\n gapPatch.classList.add(this.CssClasses_.MDL_SPINNER_GAP_PATCH);\n var rightClipper = document.createElement('div');\n rightClipper.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER);\n rightClipper.classList.add(this.CssClasses_.MDL_SPINNER_RIGHT);\n var circleOwners = [\n leftClipper,\n gapPatch,\n rightClipper\n ];\n for (var i = 0; i < circleOwners.length; i++) {\n var circle = document.createElement('div');\n circle.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE);\n circleOwners[i].appendChild(circle);\n }\n layer.appendChild(leftClipper);\n layer.appendChild(gapPatch);\n layer.appendChild(rightClipper);\n this.element_.appendChild(layer);\n};\nMaterialSpinner.prototype['createLayer'] = MaterialSpinner.prototype.createLayer;\n/**\n * Stops the spinner animation.\n * Public method for users who need to stop the spinner for any reason.\n *\n * @public\n */\nMaterialSpinner.prototype.stop = function () {\n this.element_.classList.remove('is-active');\n};\nMaterialSpinner.prototype['stop'] = MaterialSpinner.prototype.stop;\n/**\n * Starts the spinner animation.\n * Public method for users who need to manually start the spinner for any reason\n * (instead of just adding the 'is-active' class to their markup).\n *\n * @public\n */\nMaterialSpinner.prototype.start = function () {\n this.element_.classList.add('is-active');\n};\nMaterialSpinner.prototype['start'] = MaterialSpinner.prototype.start;\n/**\n * Initialize element.\n */\nMaterialSpinner.prototype.init = function () {\n if (this.element_) {\n for (var i = 1; i <= this.Constant_.MDL_SPINNER_LAYER_COUNT; i++) {\n this.createLayer(i);\n }\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSpinner,\n classAsString: 'MaterialSpinner',\n cssClass: 'mdl-js-spinner',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Checkbox MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialSwitch = function MaterialSwitch(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialSwitch'] = MaterialSwitch;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSwitch.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSwitch.prototype.CssClasses_ = {\n INPUT: 'mdl-switch__input',\n TRACK: 'mdl-switch__track',\n THUMB: 'mdl-switch__thumb',\n FOCUS_HELPER: 'mdl-switch__focus-helper',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-switch__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onChange_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onMouseUp_ = function (event) {\n this.blur_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialSwitch.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialSwitch.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the components disabled state.\n *\n * @public\n */\nMaterialSwitch.prototype.checkDisabled = function () {\n if (this.inputElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialSwitch.prototype['checkDisabled'] = MaterialSwitch.prototype.checkDisabled;\n/**\n * Check the components toggled state.\n *\n * @public\n */\nMaterialSwitch.prototype.checkToggleState = function () {\n if (this.inputElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialSwitch.prototype['checkToggleState'] = MaterialSwitch.prototype.checkToggleState;\n/**\n * Disable switch.\n *\n * @public\n */\nMaterialSwitch.prototype.disable = function () {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['disable'] = MaterialSwitch.prototype.disable;\n/**\n * Enable switch.\n *\n * @public\n */\nMaterialSwitch.prototype.enable = function () {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['enable'] = MaterialSwitch.prototype.enable;\n/**\n * Activate switch.\n *\n * @public\n */\nMaterialSwitch.prototype.on = function () {\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['on'] = MaterialSwitch.prototype.on;\n/**\n * Deactivate switch.\n *\n * @public\n */\nMaterialSwitch.prototype.off = function () {\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['off'] = MaterialSwitch.prototype.off;\n/**\n * Initialize element.\n */\nMaterialSwitch.prototype.init = function () {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n var track = document.createElement('div');\n track.classList.add(this.CssClasses_.TRACK);\n var thumb = document.createElement('div');\n thumb.classList.add(this.CssClasses_.THUMB);\n var focusHelper = document.createElement('span');\n focusHelper.classList.add(this.CssClasses_.FOCUS_HELPER);\n thumb.appendChild(focusHelper);\n this.element_.appendChild(track);\n this.element_.appendChild(thumb);\n this.boundMouseUpHandler = this.onMouseUp_.bind(this);\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n this.rippleContainerElement_.addEventListener('mouseup', this.boundMouseUpHandler);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n this.boundChangeHandler = this.onChange_.bind(this);\n this.boundFocusHandler = this.onFocus_.bind(this);\n this.boundBlurHandler = this.onBlur_.bind(this);\n this.inputElement_.addEventListener('change', this.boundChangeHandler);\n this.inputElement_.addEventListener('focus', this.boundFocusHandler);\n this.inputElement_.addEventListener('blur', this.boundBlurHandler);\n this.element_.addEventListener('mouseup', this.boundMouseUpHandler);\n this.updateClasses_();\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSwitch,\n classAsString: 'MaterialSwitch',\n cssClass: 'mdl-js-switch',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Textfield MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialTextfield = function MaterialTextfield(element) {\n this.element_ = element;\n this.maxRows = this.Constant_.NO_MAX_ROWS;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialTextfield'] = MaterialTextfield;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialTextfield.prototype.Constant_ = {\n NO_MAX_ROWS: -1,\n MAX_ROWS_ATTRIBUTE: 'maxrows'\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialTextfield.prototype.CssClasses_ = {\n LABEL: 'mdl-textfield__label',\n INPUT: 'mdl-textfield__input',\n IS_DIRTY: 'is-dirty',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_INVALID: 'is-invalid',\n IS_UPGRADED: 'is-upgraded',\n HAS_PLACEHOLDER: 'has-placeholder'\n};\n/**\n * Handle input being entered.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onKeyDown_ = function (event) {\n var currentRowCount = event.target.value.split('\\n').length;\n if (event.keyCode === 13) {\n if (currentRowCount >= this.maxRows) {\n event.preventDefault();\n }\n }\n};\n/**\n * Handle focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle reset event from out side.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onReset_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialTextfield.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkValidity();\n this.checkDirty();\n this.checkFocus();\n};\n// Public methods.\n/**\n * Check the disabled state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkDisabled = function () {\n if (this.input_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialTextfield.prototype['checkDisabled'] = MaterialTextfield.prototype.checkDisabled;\n/**\n * Check the focus state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkFocus = function () {\n if (Boolean(this.element_.querySelector(':focus'))) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n }\n};\nMaterialTextfield.prototype['checkFocus'] = MaterialTextfield.prototype.checkFocus;\n/**\n * Check the validity state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkValidity = function () {\n if (this.input_.validity) {\n if (this.input_.validity.valid) {\n this.element_.classList.remove(this.CssClasses_.IS_INVALID);\n } else {\n this.element_.classList.add(this.CssClasses_.IS_INVALID);\n }\n }\n};\nMaterialTextfield.prototype['checkValidity'] = MaterialTextfield.prototype.checkValidity;\n/**\n * Check the dirty state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkDirty = function () {\n if (this.input_.value && this.input_.value.length > 0) {\n this.element_.classList.add(this.CssClasses_.IS_DIRTY);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DIRTY);\n }\n};\nMaterialTextfield.prototype['checkDirty'] = MaterialTextfield.prototype.checkDirty;\n/**\n * Disable text field.\n *\n * @public\n */\nMaterialTextfield.prototype.disable = function () {\n this.input_.disabled = true;\n this.updateClasses_();\n};\nMaterialTextfield.prototype['disable'] = MaterialTextfield.prototype.disable;\n/**\n * Enable text field.\n *\n * @public\n */\nMaterialTextfield.prototype.enable = function () {\n this.input_.disabled = false;\n this.updateClasses_();\n};\nMaterialTextfield.prototype['enable'] = MaterialTextfield.prototype.enable;\n/**\n * Update text field value.\n *\n * @param {string} value The value to which to set the control (optional).\n * @public\n */\nMaterialTextfield.prototype.change = function (value) {\n this.input_.value = value || '';\n this.updateClasses_();\n};\nMaterialTextfield.prototype['change'] = MaterialTextfield.prototype.change;\n/**\n * Initialize element.\n */\nMaterialTextfield.prototype.init = function () {\n if (this.element_) {\n this.label_ = this.element_.querySelector('.' + this.CssClasses_.LABEL);\n this.input_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n if (this.input_) {\n if (this.input_.hasAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE)) {\n this.maxRows = parseInt(this.input_.getAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE), 10);\n if (isNaN(this.maxRows)) {\n this.maxRows = this.Constant_.NO_MAX_ROWS;\n }\n }\n if (this.input_.hasAttribute('placeholder')) {\n this.element_.classList.add(this.CssClasses_.HAS_PLACEHOLDER);\n }\n this.boundUpdateClassesHandler = this.updateClasses_.bind(this);\n this.boundFocusHandler = this.onFocus_.bind(this);\n this.boundBlurHandler = this.onBlur_.bind(this);\n this.boundResetHandler = this.onReset_.bind(this);\n this.input_.addEventListener('input', this.boundUpdateClassesHandler);\n this.input_.addEventListener('focus', this.boundFocusHandler);\n this.input_.addEventListener('blur', this.boundBlurHandler);\n this.input_.addEventListener('reset', this.boundResetHandler);\n if (this.maxRows !== this.Constant_.NO_MAX_ROWS) {\n // TODO: This should handle pasting multi line text.\n // Currently doesn't.\n this.boundKeyDownHandler = this.onKeyDown_.bind(this);\n this.input_.addEventListener('keydown', this.boundKeyDownHandler);\n }\n var invalid = this.element_.classList.contains(this.CssClasses_.IS_INVALID);\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n if (invalid) {\n this.element_.classList.add(this.CssClasses_.IS_INVALID);\n }\n if (this.input_.hasAttribute('autofocus')) {\n this.element_.focus();\n this.checkFocus();\n }\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTextfield,\n classAsString: 'MaterialTextfield',\n cssClass: 'mdl-js-textfield',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Tooltip MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialTooltip = function MaterialTooltip(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialTooltip'] = MaterialTooltip;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialTooltip.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialTooltip.prototype.CssClasses_ = {\n IS_ACTIVE: 'is-active',\n BOTTOM: 'mdl-tooltip--bottom',\n LEFT: 'mdl-tooltip--left',\n RIGHT: 'mdl-tooltip--right',\n TOP: 'mdl-tooltip--top'\n};\n/**\n * Handle mouseenter for tooltip.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTooltip.prototype.handleMouseEnter_ = function (event) {\n var props = event.target.getBoundingClientRect();\n var left = props.left + props.width / 2;\n var top = props.top + props.height / 2;\n var marginLeft = -1 * (this.element_.offsetWidth / 2);\n var marginTop = -1 * (this.element_.offsetHeight / 2);\n if (this.element_.classList.contains(this.CssClasses_.LEFT) || this.element_.classList.contains(this.CssClasses_.RIGHT)) {\n left = props.width / 2;\n if (top + marginTop < 0) {\n this.element_.style.top = '0';\n this.element_.style.marginTop = '0';\n } else {\n this.element_.style.top = top + 'px';\n this.element_.style.marginTop = marginTop + 'px';\n }\n } else {\n if (left + marginLeft < 0) {\n this.element_.style.left = '0';\n this.element_.style.marginLeft = '0';\n } else {\n this.element_.style.left = left + 'px';\n this.element_.style.marginLeft = marginLeft + 'px';\n }\n }\n if (this.element_.classList.contains(this.CssClasses_.TOP)) {\n this.element_.style.top = props.top - this.element_.offsetHeight - 10 + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.RIGHT)) {\n this.element_.style.left = props.left + props.width + 10 + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.LEFT)) {\n this.element_.style.left = props.left - this.element_.offsetWidth - 10 + 'px';\n } else {\n this.element_.style.top = props.top + props.height + 10 + 'px';\n }\n this.element_.classList.add(this.CssClasses_.IS_ACTIVE);\n};\n/**\n * Hide tooltip on mouseleave or scroll\n *\n * @private\n */\nMaterialTooltip.prototype.hideTooltip_ = function () {\n this.element_.classList.remove(this.CssClasses_.IS_ACTIVE);\n};\n/**\n * Initialize element.\n */\nMaterialTooltip.prototype.init = function () {\n if (this.element_) {\n var forElId = this.element_.getAttribute('for') || this.element_.getAttribute('data-mdl-for');\n if (forElId) {\n this.forElement_ = document.getElementById(forElId);\n }\n if (this.forElement_) {\n // It's left here because it prevents accidental text selection on Android\n if (!this.forElement_.hasAttribute('tabindex')) {\n this.forElement_.setAttribute('tabindex', '0');\n }\n this.boundMouseEnterHandler = this.handleMouseEnter_.bind(this);\n this.boundMouseLeaveAndScrollHandler = this.hideTooltip_.bind(this);\n this.forElement_.addEventListener('mouseenter', this.boundMouseEnterHandler, false);\n this.forElement_.addEventListener('touchend', this.boundMouseEnterHandler, false);\n this.forElement_.addEventListener('mouseleave', this.boundMouseLeaveAndScrollHandler, false);\n window.addEventListener('scroll', this.boundMouseLeaveAndScrollHandler, true);\n window.addEventListener('touchstart', this.boundMouseLeaveAndScrollHandler);\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTooltip,\n classAsString: 'MaterialTooltip',\n cssClass: 'mdl-tooltip'\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Data Table Card MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {Element} element The element that will be upgraded.\n */\nvar MaterialDataTable = function MaterialDataTable(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialDataTable'] = MaterialDataTable;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialDataTable.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialDataTable.prototype.CssClasses_ = {\n DATA_TABLE: 'mdl-data-table',\n SELECTABLE: 'mdl-data-table--selectable',\n SELECT_ELEMENT: 'mdl-data-table__select',\n IS_SELECTED: 'is-selected',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Generates and returns a function that toggles the selection state of a\n * single row (or multiple rows).\n *\n * @param {Element} checkbox Checkbox that toggles the selection state.\n * @param {Element} row Row to toggle when checkbox changes.\n * @param {(Array|NodeList)=} opt_rows Rows to toggle when checkbox changes.\n * @private\n */\nMaterialDataTable.prototype.selectRow_ = function (checkbox, row, opt_rows) {\n if (row) {\n return function () {\n if (checkbox.checked) {\n row.classList.add(this.CssClasses_.IS_SELECTED);\n } else {\n row.classList.remove(this.CssClasses_.IS_SELECTED);\n }\n }.bind(this);\n }\n if (opt_rows) {\n return function () {\n var i;\n var el;\n if (checkbox.checked) {\n for (i = 0; i < opt_rows.length; i++) {\n el = opt_rows[i].querySelector('td').querySelector('.mdl-checkbox');\n el['MaterialCheckbox'].check();\n opt_rows[i].classList.add(this.CssClasses_.IS_SELECTED);\n }\n } else {\n for (i = 0; i < opt_rows.length; i++) {\n el = opt_rows[i].querySelector('td').querySelector('.mdl-checkbox');\n el['MaterialCheckbox'].uncheck();\n opt_rows[i].classList.remove(this.CssClasses_.IS_SELECTED);\n }\n }\n }.bind(this);\n }\n};\n/**\n * Creates a checkbox for a single or or multiple rows and hooks up the\n * event handling.\n *\n * @param {Element} row Row to toggle when checkbox changes.\n * @param {(Array|NodeList)=} opt_rows Rows to toggle when checkbox changes.\n * @private\n */\nMaterialDataTable.prototype.createCheckbox_ = function (row, opt_rows) {\n var label = document.createElement('label');\n var labelClasses = [\n 'mdl-checkbox',\n 'mdl-js-checkbox',\n 'mdl-js-ripple-effect',\n this.CssClasses_.SELECT_ELEMENT\n ];\n label.className = labelClasses.join(' ');\n var checkbox = document.createElement('input');\n checkbox.type = 'checkbox';\n checkbox.classList.add('mdl-checkbox__input');\n if (row) {\n checkbox.checked = row.classList.contains(this.CssClasses_.IS_SELECTED);\n checkbox.addEventListener('change', this.selectRow_(checkbox, row));\n } else if (opt_rows) {\n checkbox.addEventListener('change', this.selectRow_(checkbox, null, opt_rows));\n }\n label.appendChild(checkbox);\n componentHandler.upgradeElement(label, 'MaterialCheckbox');\n return label;\n};\n/**\n * Initialize element.\n */\nMaterialDataTable.prototype.init = function () {\n if (this.element_) {\n var firstHeader = this.element_.querySelector('th');\n var bodyRows = Array.prototype.slice.call(this.element_.querySelectorAll('tbody tr'));\n var footRows = Array.prototype.slice.call(this.element_.querySelectorAll('tfoot tr'));\n var rows = bodyRows.concat(footRows);\n if (this.element_.classList.contains(this.CssClasses_.SELECTABLE)) {\n var th = document.createElement('th');\n var headerCheckbox = this.createCheckbox_(null, rows);\n th.appendChild(headerCheckbox);\n firstHeader.parentElement.insertBefore(th, firstHeader);\n for (var i = 0; i < rows.length; i++) {\n var firstCell = rows[i].querySelector('td');\n if (firstCell) {\n var td = document.createElement('td');\n if (rows[i].parentNode.nodeName.toUpperCase() === 'TBODY') {\n var rowCheckbox = this.createCheckbox_(rows[i]);\n td.appendChild(rowCheckbox);\n }\n rows[i].insertBefore(td, firstCell);\n }\n }\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialDataTable,\n classAsString: 'MaterialDataTable',\n cssClass: 'mdl-js-data-table'\n});","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var core = module.exports = { version: '2.6.11' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","module.exports = false;\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","module.exports = require('./_shared')('native-function-to-string', Function.toString);\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar $toString = require('./_function-to-string');\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","exports.f = Object.getOwnPropertySymbols;\n","exports.f = {}.propertyIsEnumerable;\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","var $export = require('./_export');\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperties: require('./_object-dps') });\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./_classof');\nvar test = {};\ntest[require('./_wks')('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n require('./_redefine')(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = require('./_export');\n\n$export($export.P, 'Function', { bind: require('./_bind') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","'use strict';\nvar isObject = require('./_is-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar HAS_INSTANCE = require('./_wks')('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) require('./_object-dp').f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n} });\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n","var $parseInt = require('./_global').parseInt;\nvar $trim = require('./_string-trim').trim;\nvar ws = require('./_string-ws');\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n","var $parseFloat = require('./_global').parseFloat;\nvar $trim = require('./_string-trim').trim;\n\nmodule.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = require('./_descriptors') ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./_redefine')(global, NUMBER, $Number);\n}\n","var cof = require('./_cof');\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","'use strict';\nvar $export = require('./_export');\nvar toInteger = require('./_to-integer');\nvar aNumberValue = require('./_a-number-value');\nvar repeat = require('./_string-repeat');\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !require('./_fails')(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $fails = require('./_fails');\nvar aNumberValue = require('./_a-number-value');\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","'use strict';\n// 21.1.3.25 String.prototype.trim()\nrequire('./_string-trim')('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","module.exports = {};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","var $export = require('./_export');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n","'use strict';\n// B.2.3.2 String.prototype.anchor(name)\nrequire('./_string-html')('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});\n","'use strict';\n// B.2.3.3 String.prototype.big()\nrequire('./_string-html')('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});\n","'use strict';\n// B.2.3.4 String.prototype.blink()\nrequire('./_string-html')('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});\n","'use strict';\n// B.2.3.5 String.prototype.bold()\nrequire('./_string-html')('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});\n","'use strict';\n// B.2.3.6 String.prototype.fixed()\nrequire('./_string-html')('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n","'use strict';\n// B.2.3.7 String.prototype.fontcolor(color)\nrequire('./_string-html')('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});\n","'use strict';\n// B.2.3.8 String.prototype.fontsize(size)\nrequire('./_string-html')('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});\n","'use strict';\n// B.2.3.9 String.prototype.italics()\nrequire('./_string-html')('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});\n","'use strict';\n// B.2.3.10 String.prototype.link(url)\nrequire('./_string-html')('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n","'use strict';\n// B.2.3.11 String.prototype.small()\nrequire('./_string-html')('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});\n","'use strict';\n// B.2.3.12 String.prototype.strike()\nrequire('./_string-html')('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});\n","'use strict';\n// B.2.3.13 String.prototype.sub()\nrequire('./_string-html')('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});\n","'use strict';\n// B.2.3.14 String.prototype.sup()\nrequire('./_string-html')('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});\n","// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = require('./_export');\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\n\n$export($export.P + $export.F * require('./_fails')(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n","'use strict';\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = require('./_fails');\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n","// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = require('./_export');\nvar toISOString = require('./_date-to-iso-string');\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});\n","var DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n require('./_redefine')(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n","'use strict';\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};\n","var TO_PRIMITIVE = require('./_wks')('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) require('./_hide')(proto, TO_PRIMITIVE, require('./_date-to-primitive'));\n","// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = require('./_export');\n\n$export($export.S, 'Array', { isArray: require('./_is-array') });\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","'use strict';\nvar fails = require('./_fails');\n\nmodule.exports = function (method, arg) {\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call\n arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n });\n};\n","'use strict';\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (require('./_iobject') != Object || !require('./_strict-method')(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar html = require('./_html');\nvar cof = require('./_cof');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * require('./_fails')(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n for (; i < size; i++) cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar fails = require('./_fails');\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !require('./_strict-method')($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $forEach = require('./_array-methods')(0);\nvar STRICT = require('./_strict-method')([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $map = require('./_array-methods')(1);\n\n$export($export.P + $export.F * !require('./_strict-method')([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $filter = require('./_array-methods')(2);\n\n$export($export.P + $export.F * !require('./_strict-method')([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $some = require('./_array-methods')(3);\n\n$export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $every = require('./_array-methods')(4);\n\n$export($export.P + $export.F * !require('./_strict-method')([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments[1]);\n }\n});\n","var aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar toLength = require('./_to-length');\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $indexOf = require('./_array-includes')(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n return -1;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","require('./_set-species')('Array');\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","var global = require('./_global');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar dP = require('./_object-dp').f;\nvar gOPN = require('./_object-gopn').f;\nvar isRegExp = require('./_is-regexp');\nvar $flags = require('./_flags');\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () {\n re2[require('./_wks')('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');\n","'use strict';\n\nvar regexpFlags = require('./_flags');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar regexpExec = require('./_regexp-exec');\nrequire('./_export')({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nrequire('./es6.regexp.flags');\nvar anObject = require('./_an-object');\nvar $flags = require('./_flags');\nvar DESCRIPTORS = require('./_descriptors');\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n","'use strict';\nvar at = require('./_string-at')(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};\n","'use strict';\n\nvar classof = require('./_classof');\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n","'use strict';\nrequire('./es6.regexp.exec');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\nvar regexpExec = require('./_regexp-exec');\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar sameValue = require('./_same-value');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative($search, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\n\nvar isRegExp = require('./_is-regexp');\nvar anObject = require('./_an-object');\nvar speciesConstructor = require('./_species-constructor');\nvar advanceStringIndex = require('./_advance-string-index');\nvar toLength = require('./_to-length');\nvar callRegExpExec = require('./_regexp-exec-abstract');\nvar regexpExec = require('./_regexp-exec');\nvar fails = require('./_fails');\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar global = require('./_global');\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar validate = require('./_validate-collection');\nvar NATIVE_WEAK_MAP = require('./_validate-collection');\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < fin) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","var $export = require('./_export');\n$export($export.G + $export.W + $export.F * !require('./_typed').ABV, {\n DataView: require('./_typed-buffer').DataView\n});\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","'use strict';\n// 26.1.5 Reflect.enumerate(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar Enumerate = function (iterated) {\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = []; // keys\n var key;\n for (key in iterated) keys.push(key);\n};\nrequire('./_iter-create')(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n do {\n if (that._i >= keys.length) return { value: undefined, done: true };\n } while (!((key = keys[that._i++]) in that._t));\n return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar isArray = require('./_is-array');\nvar isObject = require('./_is-object');\nvar toLength = require('./_to-length');\nvar ctx = require('./_ctx');\nvar IS_CONCAT_SPREADABLE = require('./_wks')('isConcatSpreadable');\n\nfunction flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;\n var element, spreadable;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n spreadable = false;\n if (isObject(element)) {\n spreadable = element[IS_CONCAT_SPREADABLE];\n spreadable = spreadable !== undefined ? !!spreadable : isArray(element);\n }\n\n if (spreadable && depth > 0) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1fffffffffffff) throw TypeError();\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n}\n\nmodule.exports = flattenIntoArray;\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap\nvar $export = require('./_export');\nvar flattenIntoArray = require('./_flatten-into-array');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar aFunction = require('./_a-function');\nvar arraySpeciesCreate = require('./_array-species-create');\n\n$export($export.P, 'Array', {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen, A;\n aFunction(callbackfn);\n sourceLen = toLength(O.length);\n A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);\n return A;\n }\n});\n\nrequire('./_add-to-unscopables')('flatMap');\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatten\nvar $export = require('./_export');\nvar flattenIntoArray = require('./_flatten-into-array');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar arraySpeciesCreate = require('./_array-species-create');\n\n$export($export.P, 'Array', {\n flatten: function flatten(/* depthArg = 1 */) {\n var depthArg = arguments[0];\n var O = toObject(this);\n var sourceLen = toLength(O.length);\n var A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toInteger(depthArg));\n return A;\n }\n});\n\nrequire('./_add-to-unscopables')('flatten');\n","'use strict';\n// https://github.com/mathiasbynens/String.prototype.at\nvar $export = require('./_export');\nvar $at = require('./_string-at')(true);\n\n$export($export.P, 'String', {\n at: function at(pos) {\n return $at(this, pos);\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimLeft', function ($trim) {\n return function trimLeft() {\n return $trim(this, 1);\n };\n}, 'trimStart');\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimRight', function ($trim) {\n return function trimRight() {\n return $trim(this, 2);\n };\n}, 'trimEnd');\n","'use strict';\n// https://tc39.github.io/String.prototype.matchAll/\nvar $export = require('./_export');\nvar defined = require('./_defined');\nvar toLength = require('./_to-length');\nvar isRegExp = require('./_is-regexp');\nvar getFlags = require('./_flags');\nvar RegExpProto = RegExp.prototype;\n\nvar $RegExpStringIterator = function (regexp, string) {\n this._r = regexp;\n this._s = string;\n};\n\nrequire('./_iter-create')($RegExpStringIterator, 'RegExp String', function next() {\n var match = this._r.exec(this._s);\n return { value: match, done: match === null };\n});\n\n$export($export.P, 'String', {\n matchAll: function matchAll(regexp) {\n defined(this);\n if (!isRegExp(regexp)) throw TypeError(regexp + ' is not a regexp!');\n var S = String(this);\n var flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp);\n var rx = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags);\n rx.lastIndex = toLength(regexp.lastIndex);\n return new $RegExpStringIterator(rx, S);\n }\n});\n","require('./_wks-define')('asyncIterator');\n","require('./_wks-define')('observable');\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","var DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","'use strict';\n// Forced replacement prototype accessors methods\nmodule.exports = require('./_library') || !require('./_fails')(function () {\n var K = Math.random();\n // In FF throws only define methods\n // eslint-disable-next-line no-undef, no-useless-call\n __defineSetter__.call(null, K, function () { /* empty */ });\n delete require('./_global')[K];\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar aFunction = require('./_a-function');\nvar $defineProperty = require('./_object-dp');\n\n// B.2.2.2 Object.prototype.__defineGetter__(P, getter)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __defineGetter__: function __defineGetter__(P, getter) {\n $defineProperty.f(toObject(this), P, { get: aFunction(getter), enumerable: true, configurable: true });\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar aFunction = require('./_a-function');\nvar $defineProperty = require('./_object-dp');\n\n// B.2.2.3 Object.prototype.__defineSetter__(P, setter)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __defineSetter__: function __defineSetter__(P, setter) {\n $defineProperty.f(toObject(this), P, { set: aFunction(setter), enumerable: true, configurable: true });\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\nvar getPrototypeOf = require('./_object-gpo');\nvar getOwnPropertyDescriptor = require('./_object-gopd').f;\n\n// B.2.2.4 Object.prototype.__lookupGetter__(P)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __lookupGetter__: function __lookupGetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.get;\n } while (O = getPrototypeOf(O));\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\nvar getPrototypeOf = require('./_object-gpo');\nvar getOwnPropertyDescriptor = require('./_object-gopd').f;\n\n// B.2.2.5 Object.prototype.__lookupSetter__(P)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __lookupSetter__: function __lookupSetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.set;\n } while (O = getPrototypeOf(O));\n }\n});\n","var forOf = require('./_for-of');\n\nmodule.exports = function (iter, ITERATOR) {\n var result = [];\n forOf(iter, false, result.push, result, ITERATOR);\n return result;\n};\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar classof = require('./_classof');\nvar from = require('./_array-from-iterable');\nmodule.exports = function (NAME) {\n return function toJSON() {\n if (classof(this) != NAME) throw TypeError(NAME + \"#toJSON isn't generic\");\n return from(this);\n };\n};\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = require('./_export');\n\n$export($export.P + $export.R, 'Map', { toJSON: require('./_collection-to-json')('Map') });\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = require('./_export');\n\n$export($export.P + $export.R, 'Set', { toJSON: require('./_collection-to-json')('Set') });\n","'use strict';\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = require('./_export');\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { of: function of() {\n var length = arguments.length;\n var A = new Array(length);\n while (length--) A[length] = arguments[length];\n return new this(A);\n } });\n};\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-map.of\nrequire('./_set-collection-of')('Map');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of\nrequire('./_set-collection-of')('Set');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of\nrequire('./_set-collection-of')('WeakMap');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.of\nrequire('./_set-collection-of')('WeakSet');\n","'use strict';\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar ctx = require('./_ctx');\nvar forOf = require('./_for-of');\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {\n var mapFn = arguments[1];\n var mapping, A, n, cb;\n aFunction(this);\n mapping = mapFn !== undefined;\n if (mapping) aFunction(mapFn);\n if (source == undefined) return new this();\n A = [];\n if (mapping) {\n n = 0;\n cb = ctx(mapFn, arguments[2], 2);\n forOf(source, false, function (nextItem) {\n A.push(cb(nextItem, n++));\n });\n } else {\n forOf(source, false, A.push, A);\n }\n return new this(A);\n } });\n};\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-map.from\nrequire('./_set-collection-from')('Map');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from\nrequire('./_set-collection-from')('Set');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.from\nrequire('./_set-collection-from')('WeakMap');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.from\nrequire('./_set-collection-from')('WeakSet');\n","// https://github.com/tc39/proposal-global\nvar $export = require('./_export');\n\n$export($export.G, { global: require('./_global') });\n","// https://github.com/tc39/proposal-global\nvar $export = require('./_export');\n\n$export($export.S, 'System', { global: require('./_global') });\n","// https://github.com/ljharb/proposal-is-error\nvar $export = require('./_export');\nvar cof = require('./_cof');\n\n$export($export.S, 'Error', {\n isError: function isError(it) {\n return cof(it) === 'Error';\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clamp: function clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { DEG_PER_RAD: Math.PI / 180 });\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\nvar RAD_PER_DEG = 180 / Math.PI;\n\n$export($export.S, 'Math', {\n degrees: function degrees(radians) {\n return radians * RAD_PER_DEG;\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nmodule.exports = Math.scale || function scale(x, inLow, inHigh, outLow, outHigh) {\n if (\n arguments.length === 0\n // eslint-disable-next-line no-self-compare\n || x != x\n // eslint-disable-next-line no-self-compare\n || inLow != inLow\n // eslint-disable-next-line no-self-compare\n || inHigh != inHigh\n // eslint-disable-next-line no-self-compare\n || outLow != outLow\n // eslint-disable-next-line no-self-compare\n || outHigh != outHigh\n ) return NaN;\n if (x === Infinity || x === -Infinity) return x;\n return (x - inLow) * (outHigh - outLow) / (inHigh - inLow) + outLow;\n};\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\nvar scale = require('./_math-scale');\nvar fround = require('./_math-fround');\n\n$export($export.S, 'Math', {\n fscale: function fscale(x, inLow, inHigh, outLow, outHigh) {\n return fround(scale(x, inLow, inHigh, outLow, outHigh));\n }\n});\n","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n iaddh: function iaddh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;\n }\n});\n","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n isubh: function isubh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;\n }\n});\n","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n imulh: function imulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >> 16;\n var v1 = $v >> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16);\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { RAD_PER_DEG: 180 / Math.PI });\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\nvar DEG_PER_RAD = Math.PI / 180;\n\n$export($export.S, 'Math', {\n radians: function radians(degrees) {\n return degrees * DEG_PER_RAD;\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { scale: require('./_math-scale') });\n","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n umulh: function umulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >>> 16;\n var v1 = $v >>> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16);\n }\n});\n","// http://jfbastien.github.io/papers/Math.signbit.html\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { signbit: function signbit(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) != x ? x : x == 0 ? 1 / x == Infinity : x > 0;\n} });\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n","'use strict';\n// https://github.com/tc39/proposal-promise-try\nvar $export = require('./_export');\nvar newPromiseCapability = require('./_new-promise-capability');\nvar perform = require('./_perform');\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapability.f(this);\n var result = perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n","var Map = require('./es6.map');\nvar $export = require('./_export');\nvar shared = require('./_shared')('metadata');\nvar store = shared.store || (shared.store = new (require('./es6.weak-map'))());\n\nvar getOrCreateMetadataMap = function (target, targetKey, create) {\n var targetMetadata = store.get(target);\n if (!targetMetadata) {\n if (!create) return undefined;\n store.set(target, targetMetadata = new Map());\n }\n var keyMetadata = targetMetadata.get(targetKey);\n if (!keyMetadata) {\n if (!create) return undefined;\n targetMetadata.set(targetKey, keyMetadata = new Map());\n } return keyMetadata;\n};\nvar ordinaryHasOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? false : metadataMap.has(MetadataKey);\n};\nvar ordinaryGetOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);\n};\nvar ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) {\n getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);\n};\nvar ordinaryOwnMetadataKeys = function (target, targetKey) {\n var metadataMap = getOrCreateMetadataMap(target, targetKey, false);\n var keys = [];\n if (metadataMap) metadataMap.forEach(function (_, key) { keys.push(key); });\n return keys;\n};\nvar toMetaKey = function (it) {\n return it === undefined || typeof it == 'symbol' ? it : String(it);\n};\nvar exp = function (O) {\n $export($export.S, 'Reflect', O);\n};\n\nmodule.exports = {\n store: store,\n map: getOrCreateMetadataMap,\n has: ordinaryHasOwnMetadata,\n get: ordinaryGetOwnMetadata,\n set: ordinaryDefineOwnMetadata,\n keys: ordinaryOwnMetadataKeys,\n key: toMetaKey,\n exp: exp\n};\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar toMetaKey = metadata.key;\nvar ordinaryDefineOwnMetadata = metadata.set;\n\nmetadata.exp({ defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey) {\n ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar toMetaKey = metadata.key;\nvar getOrCreateMetadataMap = metadata.map;\nvar store = metadata.store;\n\nmetadata.exp({ deleteMetadata: function deleteMetadata(metadataKey, target /* , targetKey */) {\n var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2]);\n var metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);\n if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false;\n if (metadataMap.size) return true;\n var targetMetadata = store.get(target);\n targetMetadata['delete'](targetKey);\n return !!targetMetadata.size || store['delete'](target);\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nvar ordinaryGetMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return ordinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;\n};\n\nmetadata.exp({ getMetadata: function getMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var Set = require('./es6.set');\nvar from = require('./_array-from-iterable');\nvar metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nvar ordinaryMetadataKeys = function (O, P) {\n var oKeys = ordinaryOwnMetadataKeys(O, P);\n var parent = getPrototypeOf(O);\n if (parent === null) return oKeys;\n var pKeys = ordinaryMetadataKeys(parent, P);\n return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;\n};\n\nmetadata.exp({ getMetadataKeys: function getMetadataKeys(target /* , targetKey */) {\n return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadata: function getOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadataKeys: function getOwnMetadataKeys(target /* , targetKey */) {\n return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nvar ordinaryHasMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return true;\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;\n};\n\nmetadata.exp({ hasMetadata: function hasMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ hasOwnMetadata: function hasOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var $metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar toMetaKey = $metadata.key;\nvar ordinaryDefineOwnMetadata = $metadata.set;\n\n$metadata.exp({ metadata: function metadata(metadataKey, metadataValue) {\n return function decorator(target, targetKey) {\n ordinaryDefineOwnMetadata(\n metadataKey, metadataValue,\n (targetKey !== undefined ? anObject : aFunction)(target),\n toMetaKey(targetKey)\n );\n };\n} });\n","// https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask\nvar $export = require('./_export');\nvar microtask = require('./_microtask')();\nvar process = require('./_global').process;\nvar isNode = require('./_cof')(process) == 'process';\n\n$export($export.G, {\n asap: function asap(fn) {\n var domain = isNode && process.domain;\n microtask(domain ? domain.bind(fn) : fn);\n }\n});\n","'use strict';\n// https://github.com/zenparsing/es-observable\nvar $export = require('./_export');\nvar global = require('./_global');\nvar core = require('./_core');\nvar microtask = require('./_microtask')();\nvar OBSERVABLE = require('./_wks')('observable');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar anInstance = require('./_an-instance');\nvar redefineAll = require('./_redefine-all');\nvar hide = require('./_hide');\nvar forOf = require('./_for-of');\nvar RETURN = forOf.RETURN;\n\nvar getMethod = function (fn) {\n return fn == null ? undefined : aFunction(fn);\n};\n\nvar cleanupSubscription = function (subscription) {\n var cleanup = subscription._c;\n if (cleanup) {\n subscription._c = undefined;\n cleanup();\n }\n};\n\nvar subscriptionClosed = function (subscription) {\n return subscription._o === undefined;\n};\n\nvar closeSubscription = function (subscription) {\n if (!subscriptionClosed(subscription)) {\n subscription._o = undefined;\n cleanupSubscription(subscription);\n }\n};\n\nvar Subscription = function (observer, subscriber) {\n anObject(observer);\n this._c = undefined;\n this._o = observer;\n observer = new SubscriptionObserver(this);\n try {\n var cleanup = subscriber(observer);\n var subscription = cleanup;\n if (cleanup != null) {\n if (typeof cleanup.unsubscribe === 'function') cleanup = function () { subscription.unsubscribe(); };\n else aFunction(cleanup);\n this._c = cleanup;\n }\n } catch (e) {\n observer.error(e);\n return;\n } if (subscriptionClosed(this)) cleanupSubscription(this);\n};\n\nSubscription.prototype = redefineAll({}, {\n unsubscribe: function unsubscribe() { closeSubscription(this); }\n});\n\nvar SubscriptionObserver = function (subscription) {\n this._s = subscription;\n};\n\nSubscriptionObserver.prototype = redefineAll({}, {\n next: function next(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n try {\n var m = getMethod(observer.next);\n if (m) return m.call(observer, value);\n } catch (e) {\n try {\n closeSubscription(subscription);\n } finally {\n throw e;\n }\n }\n }\n },\n error: function error(value) {\n var subscription = this._s;\n if (subscriptionClosed(subscription)) throw value;\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.error);\n if (!m) throw value;\n value = m.call(observer, value);\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n },\n complete: function complete(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.complete);\n value = m ? m.call(observer, value) : undefined;\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n }\n }\n});\n\nvar $Observable = function Observable(subscriber) {\n anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber);\n};\n\nredefineAll($Observable.prototype, {\n subscribe: function subscribe(observer) {\n return new Subscription(observer, this._f);\n },\n forEach: function forEach(fn) {\n var that = this;\n return new (core.Promise || global.Promise)(function (resolve, reject) {\n aFunction(fn);\n var subscription = that.subscribe({\n next: function (value) {\n try {\n return fn(value);\n } catch (e) {\n reject(e);\n subscription.unsubscribe();\n }\n },\n error: reject,\n complete: resolve\n });\n });\n }\n});\n\nredefineAll($Observable, {\n from: function from(x) {\n var C = typeof this === 'function' ? this : $Observable;\n var method = getMethod(anObject(x)[OBSERVABLE]);\n if (method) {\n var observable = anObject(method.call(x));\n return observable.constructor === C ? observable : new C(function (observer) {\n return observable.subscribe(observer);\n });\n }\n return new C(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n try {\n if (forOf(x, false, function (it) {\n observer.next(it);\n if (done) return RETURN;\n }) === RETURN) return;\n } catch (e) {\n if (done) throw e;\n observer.error(e);\n return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n },\n of: function of() {\n for (var i = 0, l = arguments.length, items = new Array(l); i < l;) items[i] = arguments[i++];\n return new (typeof this === 'function' ? this : $Observable)(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n for (var j = 0; j < items.length; ++j) {\n observer.next(items[j]);\n if (done) return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n }\n});\n\nhide($Observable.prototype, OBSERVABLE, function () { return this; });\n\n$export($export.G, { Observable: $Observable });\n\nrequire('./_set-species')('Observable');\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","require('./modules/es6.symbol');\nrequire('./modules/es6.object.create');\nrequire('./modules/es6.object.define-property');\nrequire('./modules/es6.object.define-properties');\nrequire('./modules/es6.object.get-own-property-descriptor');\nrequire('./modules/es6.object.get-prototype-of');\nrequire('./modules/es6.object.keys');\nrequire('./modules/es6.object.get-own-property-names');\nrequire('./modules/es6.object.freeze');\nrequire('./modules/es6.object.seal');\nrequire('./modules/es6.object.prevent-extensions');\nrequire('./modules/es6.object.is-frozen');\nrequire('./modules/es6.object.is-sealed');\nrequire('./modules/es6.object.is-extensible');\nrequire('./modules/es6.object.assign');\nrequire('./modules/es6.object.is');\nrequire('./modules/es6.object.set-prototype-of');\nrequire('./modules/es6.object.to-string');\nrequire('./modules/es6.function.bind');\nrequire('./modules/es6.function.name');\nrequire('./modules/es6.function.has-instance');\nrequire('./modules/es6.parse-int');\nrequire('./modules/es6.parse-float');\nrequire('./modules/es6.number.constructor');\nrequire('./modules/es6.number.to-fixed');\nrequire('./modules/es6.number.to-precision');\nrequire('./modules/es6.number.epsilon');\nrequire('./modules/es6.number.is-finite');\nrequire('./modules/es6.number.is-integer');\nrequire('./modules/es6.number.is-nan');\nrequire('./modules/es6.number.is-safe-integer');\nrequire('./modules/es6.number.max-safe-integer');\nrequire('./modules/es6.number.min-safe-integer');\nrequire('./modules/es6.number.parse-float');\nrequire('./modules/es6.number.parse-int');\nrequire('./modules/es6.math.acosh');\nrequire('./modules/es6.math.asinh');\nrequire('./modules/es6.math.atanh');\nrequire('./modules/es6.math.cbrt');\nrequire('./modules/es6.math.clz32');\nrequire('./modules/es6.math.cosh');\nrequire('./modules/es6.math.expm1');\nrequire('./modules/es6.math.fround');\nrequire('./modules/es6.math.hypot');\nrequire('./modules/es6.math.imul');\nrequire('./modules/es6.math.log10');\nrequire('./modules/es6.math.log1p');\nrequire('./modules/es6.math.log2');\nrequire('./modules/es6.math.sign');\nrequire('./modules/es6.math.sinh');\nrequire('./modules/es6.math.tanh');\nrequire('./modules/es6.math.trunc');\nrequire('./modules/es6.string.from-code-point');\nrequire('./modules/es6.string.raw');\nrequire('./modules/es6.string.trim');\nrequire('./modules/es6.string.iterator');\nrequire('./modules/es6.string.code-point-at');\nrequire('./modules/es6.string.ends-with');\nrequire('./modules/es6.string.includes');\nrequire('./modules/es6.string.repeat');\nrequire('./modules/es6.string.starts-with');\nrequire('./modules/es6.string.anchor');\nrequire('./modules/es6.string.big');\nrequire('./modules/es6.string.blink');\nrequire('./modules/es6.string.bold');\nrequire('./modules/es6.string.fixed');\nrequire('./modules/es6.string.fontcolor');\nrequire('./modules/es6.string.fontsize');\nrequire('./modules/es6.string.italics');\nrequire('./modules/es6.string.link');\nrequire('./modules/es6.string.small');\nrequire('./modules/es6.string.strike');\nrequire('./modules/es6.string.sub');\nrequire('./modules/es6.string.sup');\nrequire('./modules/es6.date.now');\nrequire('./modules/es6.date.to-json');\nrequire('./modules/es6.date.to-iso-string');\nrequire('./modules/es6.date.to-string');\nrequire('./modules/es6.date.to-primitive');\nrequire('./modules/es6.array.is-array');\nrequire('./modules/es6.array.from');\nrequire('./modules/es6.array.of');\nrequire('./modules/es6.array.join');\nrequire('./modules/es6.array.slice');\nrequire('./modules/es6.array.sort');\nrequire('./modules/es6.array.for-each');\nrequire('./modules/es6.array.map');\nrequire('./modules/es6.array.filter');\nrequire('./modules/es6.array.some');\nrequire('./modules/es6.array.every');\nrequire('./modules/es6.array.reduce');\nrequire('./modules/es6.array.reduce-right');\nrequire('./modules/es6.array.index-of');\nrequire('./modules/es6.array.last-index-of');\nrequire('./modules/es6.array.copy-within');\nrequire('./modules/es6.array.fill');\nrequire('./modules/es6.array.find');\nrequire('./modules/es6.array.find-index');\nrequire('./modules/es6.array.species');\nrequire('./modules/es6.array.iterator');\nrequire('./modules/es6.regexp.constructor');\nrequire('./modules/es6.regexp.exec');\nrequire('./modules/es6.regexp.to-string');\nrequire('./modules/es6.regexp.flags');\nrequire('./modules/es6.regexp.match');\nrequire('./modules/es6.regexp.replace');\nrequire('./modules/es6.regexp.search');\nrequire('./modules/es6.regexp.split');\nrequire('./modules/es6.promise');\nrequire('./modules/es6.map');\nrequire('./modules/es6.set');\nrequire('./modules/es6.weak-map');\nrequire('./modules/es6.weak-set');\nrequire('./modules/es6.typed.array-buffer');\nrequire('./modules/es6.typed.data-view');\nrequire('./modules/es6.typed.int8-array');\nrequire('./modules/es6.typed.uint8-array');\nrequire('./modules/es6.typed.uint8-clamped-array');\nrequire('./modules/es6.typed.int16-array');\nrequire('./modules/es6.typed.uint16-array');\nrequire('./modules/es6.typed.int32-array');\nrequire('./modules/es6.typed.uint32-array');\nrequire('./modules/es6.typed.float32-array');\nrequire('./modules/es6.typed.float64-array');\nrequire('./modules/es6.reflect.apply');\nrequire('./modules/es6.reflect.construct');\nrequire('./modules/es6.reflect.define-property');\nrequire('./modules/es6.reflect.delete-property');\nrequire('./modules/es6.reflect.enumerate');\nrequire('./modules/es6.reflect.get');\nrequire('./modules/es6.reflect.get-own-property-descriptor');\nrequire('./modules/es6.reflect.get-prototype-of');\nrequire('./modules/es6.reflect.has');\nrequire('./modules/es6.reflect.is-extensible');\nrequire('./modules/es6.reflect.own-keys');\nrequire('./modules/es6.reflect.prevent-extensions');\nrequire('./modules/es6.reflect.set');\nrequire('./modules/es6.reflect.set-prototype-of');\nrequire('./modules/es7.array.includes');\nrequire('./modules/es7.array.flat-map');\nrequire('./modules/es7.array.flatten');\nrequire('./modules/es7.string.at');\nrequire('./modules/es7.string.pad-start');\nrequire('./modules/es7.string.pad-end');\nrequire('./modules/es7.string.trim-left');\nrequire('./modules/es7.string.trim-right');\nrequire('./modules/es7.string.match-all');\nrequire('./modules/es7.symbol.async-iterator');\nrequire('./modules/es7.symbol.observable');\nrequire('./modules/es7.object.get-own-property-descriptors');\nrequire('./modules/es7.object.values');\nrequire('./modules/es7.object.entries');\nrequire('./modules/es7.object.define-getter');\nrequire('./modules/es7.object.define-setter');\nrequire('./modules/es7.object.lookup-getter');\nrequire('./modules/es7.object.lookup-setter');\nrequire('./modules/es7.map.to-json');\nrequire('./modules/es7.set.to-json');\nrequire('./modules/es7.map.of');\nrequire('./modules/es7.set.of');\nrequire('./modules/es7.weak-map.of');\nrequire('./modules/es7.weak-set.of');\nrequire('./modules/es7.map.from');\nrequire('./modules/es7.set.from');\nrequire('./modules/es7.weak-map.from');\nrequire('./modules/es7.weak-set.from');\nrequire('./modules/es7.global');\nrequire('./modules/es7.system.global');\nrequire('./modules/es7.error.is-error');\nrequire('./modules/es7.math.clamp');\nrequire('./modules/es7.math.deg-per-rad');\nrequire('./modules/es7.math.degrees');\nrequire('./modules/es7.math.fscale');\nrequire('./modules/es7.math.iaddh');\nrequire('./modules/es7.math.isubh');\nrequire('./modules/es7.math.imulh');\nrequire('./modules/es7.math.rad-per-deg');\nrequire('./modules/es7.math.radians');\nrequire('./modules/es7.math.scale');\nrequire('./modules/es7.math.umulh');\nrequire('./modules/es7.math.signbit');\nrequire('./modules/es7.promise.finally');\nrequire('./modules/es7.promise.try');\nrequire('./modules/es7.reflect.define-metadata');\nrequire('./modules/es7.reflect.delete-metadata');\nrequire('./modules/es7.reflect.get-metadata');\nrequire('./modules/es7.reflect.get-metadata-keys');\nrequire('./modules/es7.reflect.get-own-metadata');\nrequire('./modules/es7.reflect.get-own-metadata-keys');\nrequire('./modules/es7.reflect.has-metadata');\nrequire('./modules/es7.reflect.has-own-metadata');\nrequire('./modules/es7.reflect.metadata');\nrequire('./modules/es7.asap');\nrequire('./modules/es7.observable');\nrequire('./modules/web.timers');\nrequire('./modules/web.immediate');\nrequire('./modules/web.dom.iterable');\nmodule.exports = require('./modules/_core');\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","module.exports = function (regExp, replace) {\n var replacer = replace === Object(replace) ? function (part) {\n return replace[part];\n } : replace;\n return function (it) {\n return String(it).replace(regExp, replacer);\n };\n};\n","// https://github.com/benjamingr/RexExp.escape\nvar $export = require('./_export');\nvar $re = require('./_replacer')(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n$export($export.S, 'RegExp', { escape: function escape(it) { return $re(it); } });\n","require('../../modules/core.regexp.escape');\nmodule.exports = require('../../modules/_core').RegExp.escape;\n","\"use strict\";\n\nrequire(\"core-js/shim\");\n\nrequire(\"regenerator-runtime/runtime\");\n\nrequire(\"core-js/fn/regexp/escape\");\n\nif (global._babelPolyfill) {\n throw new Error(\"only one instance of babel-polyfill is allowed\");\n}\nglobal._babelPolyfill = true;\n\nvar DEFINE_PROPERTY = \"defineProperty\";\nfunction define(O, key, value) {\n O[key] || Object[DEFINE_PROPERTY](O, key, {\n writable: true,\n configurable: true,\n value: value\n });\n}\n\ndefine(String.prototype, \"padLeft\", \"\".padStart);\ndefine(String.prototype, \"padRight\", \"\".padEnd);\n\n\"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill\".split(\",\").forEach(function (key) {\n [][key] && define(Array, key, Function.call.bind([][key]));\n});","export default class ScrollSpy {\n constructor(args) {\n\n this.doc = document;\n this.nav = this.doc.querySelectorAll(args.navSelector);\n\n if(!this.nav.length === 0) { return }\n\n this.win = window;\n this.winHeight = this.win.innerHeight;\n\n this.scrollElement = this.doc.querySelector(args.scrollSelector);\n this.className = args.className;\n this.offsetTop = args.offsetTop || 0;\n\n this.contents = [];\n this.contents = this.getContents(args.contentSelector);\n\n this.attachEvent();\n }\n\n attachEvent() {\n let scrollTimer;\n this.scrollElement.addEventListener('scroll', () => {\n if (scrollTimer) {\n clearTimeout(scrollTimer);\n }\n\n scrollTimer = setTimeout(() => {\n this.spy();\n }, 1);\n });\n\n let resizeTimer;\n this.scrollElement.addEventListener('resize', () => {\n if (resizeTimer) {\n clearTimeout(resizeTimer);\n }\n\n resizeTimer = setTimeout(() => {\n this.spy();\n }, 1);\n });\n\n this.scrollElement.addEventListener(\"click\", (e) => {\n const target = e.target;\n if (target.tagName !== \"A\") return;\n window.onclickToc = true;\n for (let i = 0, max = this.nav.length; i < max; i++) {\n const navElement = this.nav[i];\n if (navElement.href === target.href) {\n navElement.classList.add(this.className);\n navElement.classList.add('mdl-color-text--primary');\n } else {\n navElement.classList.remove(this.className);\n navElement.classList.remove('mdl-color-text--primary');\n }\n }\n });\n }\n\n getContents(contentSelector) {\n const targets = [];\n for (let i = 0, max = this.nav.length; i < max; i++) {\n const href = this.nav[i].href;\n targets.push(this.doc.getElementById(href.split('#')[1]));\n }\n return targets;\n }\n\n spy() {\n let elements = this.getViewState();\n this.toggleNavClass(elements);\n }\n\n getViewState() {\n const elementListInView = [];\n for (let i = 0, max = this.contents.length; i < max; i++) {\n const current = this.contents[i];\n if (current && this.isView(current)) {\n elementListInView.push(current);\n }\n }\n\n return elementListInView;\n }\n\n isView(element) {\n const scrollTop = this.scrollElement.scrollTop;\n const subHeaderRect = document.querySelector(\".mdl-layout__header-row\").getBoundingClientRect();\n const headerHeight = subHeaderRect.top + subHeaderRect.height;\n const scrollBottom = scrollTop + window.innerHeight - headerHeight;\n const rect = element.getBoundingClientRect();\n const elementTop = rect.top + scrollTop;\n const elementBottom = elementTop + element.offsetHeight;\n\n return elementTop < scrollBottom - 30 && elementBottom > scrollTop + headerHeight + 30;\n }\n\n toggleNavClass(elements) {\n if (window.onclickToc) {\n window.onclickToc = false;\n return;\n }\n let maxDepth = 0;\n let maxDepthElement = $();\n\n for (let i = 0, max = elements.length; i < max; i++) {\n const el = elements[i];\n const tempDepth = this.getTagDepth(el);\n if (maxDepth < tempDepth) {\n maxDepth = tempDepth;\n maxDepthElement = el;\n }\n }\n\n for (let i = 0, max = this.nav.length; i < max; i++) {\n const navElement = this.nav[i];\n if (navElement.href.split('#')[1] === maxDepthElement.id) {\n navElement.classList.add(this.className);\n navElement.classList.add('mdl-color-text--primary');\n } else {\n navElement.classList.remove(this.className);\n navElement.classList.remove('mdl-color-text--primary');\n }\n }\n }\n\n getTagDepth(element) {\n return parseInt($(element).find('h1,h2,h3,h4,h5,h6').get(0).tagName.split('H')[1]);\n }\n}\n","import \"../scss/sphinx_materialdesign_theme.scss\";\r\nimport \"./feedback\";\r\nimport \"material-design-lite\";\r\nimport \"babel-polyfill\";\r\nimport ScrollSpy from \"./scrollspy\";\r\n\r\n$(function() {\r\n\r\n function reconstructionDrawerGlobalToc() {\r\n const $globaltoc = $('.mdl-layout__drawer nav');\r\n const $lists = $globaltoc.find('li');\r\n $.each($lists, function(index, li) {\r\n const $li = $(li);\r\n const $linkWrapper = $('');\r\n const $link = $li.children('a');\r\n $li.append($linkWrapper.append($link));\r\n\r\n const isCurrent = $li.hasClass('current') && !$link.hasClass('current');\r\n const $ul = $li.children('ul');\r\n if ($ul.length) {\r\n const ulId = `globalnav-${index}`;\r\n $ul.attr('id', ulId);\r\n $ul.addClass('collapse');\r\n const $toggleWrapper = $('');\r\n if (isCurrent) {\r\n $ul.addClass('show');\r\n $toggleWrapper.addClass('show');\r\n } else {\r\n $ul.hide();\r\n }\r\n\r\n $li.append(\r\n $linkWrapper.append(\r\n $toggleWrapper.append(\r\n $(`keyboard_arrow_down`)\r\n )\r\n )\r\n ).append($ul);\r\n }\r\n });\r\n }\r\n\r\n function collapse() {\r\n $('.mdl-layout__drawer nav .nav-toggle a').click(function() {\r\n const $toggle = $(this);\r\n const id = $toggle.attr('data-toggle');\r\n $(`ul${id}`).toggleClass('show').animate({height: \"toggle\", opacity: \"toggle\"});\r\n $toggle.parent().toggleClass('show');\r\n });\r\n }\r\n\r\n function styleMdlCodeBlock() {\r\n $('pre').hover(function() {\r\n $(this).attr('click-to-copy', 'click to copy...');\r\n });\r\n $('pre').click(function(){\r\n var result = copyClipboard(this);\r\n if (result) {\r\n $(this).attr('click-to-copy', 'copied!');\r\n }\r\n });\r\n }\r\n\r\n function copyClipboard(selector) {\r\n var body = document.body;\r\n if(!body) return false;\r\n\r\n var $target = $(selector);\r\n if ($target.length === 0) { return false; }\r\n\r\n var text = $target.text();\r\n var textarea = document.createElement('textarea');\r\n textarea.value = text;\r\n document.body.appendChild(textarea);\r\n textarea.select();\r\n var result = document.execCommand('copy');\r\n document.body.removeChild(textarea);\r\n return result;\r\n }\r\n\r\n function quickSearchClickEvent() {\r\n const $breadcrumb = $('.breadcrumb');\r\n\r\n $('#waterfall-exp').focus(() => {\r\n if ($(window).width() <= 1024) {\r\n $breadcrumb.hide();\r\n }\r\n }).blur(() => {\r\n if ($(window).width() <= 1024) {\r\n $breadcrumb.show();\r\n }\r\n });\r\n }\r\n\r\n // styleMdlCodeBlock();\r\n\r\n reconstructionDrawerGlobalToc();\r\n collapse();\r\n quickSearchClickEvent();\r\n\r\n\r\n const spy = new ScrollSpy({\r\n contentSelector: '.page-content .section',\r\n navSelector: '.localtoc a',\r\n scrollSelector: 'main' ,\r\n className: 'current',\r\n offsetTop: 64});\r\n\r\n $('.mdl-layout__content').focus();\r\n\r\n $('.mx-card').each(function(){\r\n $(this).addClass('mdl-card mdl-shadow--2dp');\r\n });\r\n $('.mx-card .mx-card-title').each(function(){\r\n $(this).addClass('mdl-card__title');\r\n });\r\n $('.mx-card .mx-card-text').each(function(){\r\n $(this).addClass('mdl-card__supporting-text');\r\n });\r\n $('.mx-card-link').each(function(){\r\n $(this).hide();\r\n });\r\n $('.mdl-card').each(function(){\r\n $(this).click(function() {\r\n var url = $(this).find('.mx-card-link').text();\r\n if (url) {\r\n window.location = url;\r\n }\r\n return true;\r\n });\r\n });\r\n\r\n $('a.download').each(function() {\r\n // button\r\n var button = document.createElement('button');\r\n button.className = 'download mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect';\r\n\r\n // icon\r\n var icon = document.createElement('i');\r\n icon.className = 'material-icons';\r\n var text = document.createTextNode('file_download');\r\n icon.appendChild(text);\r\n button.appendChild(icon);\r\n\r\n // link\r\n var link = $(this).attr('href');\r\n button.onclick = function() {\r\n window.location = link;\r\n };\r\n var fileName = link.split(\"/\").slice(-1).pop();\r\n if (fileName) {\r\n button.id = fileName.replace('.', '-');\r\n } else {\r\n button.id = 'download-button-' + $(this).index();\r\n }\r\n\r\n // hint\r\n var hint = document.createElement('div');\r\n hint.className = 'mdl-tooltip';\r\n hint.setAttribute('data-mdl-for', button.id);\r\n var hintText = $(this).find('span.pre').map(function() {\r\n return $(this).text();\r\n }).get().join(' ');\r\n hint.innerHTML = hintText;\r\n\r\n componentHandler.upgradeElement(button);\r\n $(this).remove();\r\n var header = $('.section h1').first();\r\n header.append(button);\r\n header.append(hint);\r\n });\r\n\r\n $('.mdl-layout').css('visibility', 'visible');\r\n\r\n const addScrollAwareHeaderAnimation = function() {\r\n let preScrollTop, curScrollTop = 0;\r\n const scrollContent = $(\"main.mdl-layout__content\");\r\n scrollContent.focus();\r\n const navBar = $('header.mdl-layout__header');\r\n const navBarHeight = navBar.height();\r\n \r\n scrollContent.scroll(function () {\r\n curScrollTop = scrollContent.scrollTop();\r\n if (preScrollTop < curScrollTop && curScrollTop > navBarHeight) {\r\n navBar.addClass(\"scrollUp\");\r\n } else if (preScrollTop > curScrollTop && !(curScrollTop <= navBarHeight)) {\r\n navBar.removeClass(\"scrollUp\");\r\n }\r\n preScrollTop = curScrollTop;\r\n });\r\n }\r\n addScrollAwareHeaderAnimation();\r\n});\r\n"]} \ No newline at end of file diff --git a/docs/python_docs/themes/mx-theme/src/js/sphinx_materialdesign_theme.js b/docs/python_docs/themes/mx-theme/src/js/sphinx_materialdesign_theme.js index dad460755cde..75d2f9160455 100644 --- a/docs/python_docs/themes/mx-theme/src/js/sphinx_materialdesign_theme.js +++ b/docs/python_docs/themes/mx-theme/src/js/sphinx_materialdesign_theme.js @@ -172,4 +172,22 @@ $(function() { $('.mdl-layout').css('visibility', 'visible'); + const addScrollAwareHeaderAnimation = function() { + let preScrollTop, curScrollTop = 0; + const scrollContent = $("main.mdl-layout__content"); + scrollContent.focus(); + const navBar = $('header.mdl-layout__header'); + const navBarHeight = navBar.height(); + + scrollContent.scroll(function () { + curScrollTop = scrollContent.scrollTop(); + if (preScrollTop < curScrollTop && curScrollTop > navBarHeight) { + navBar.addClass("scrollUp"); + } else if (preScrollTop > curScrollTop && !(curScrollTop <= navBarHeight)) { + navBar.removeClass("scrollUp"); + } + preScrollTop = curScrollTop; + }); + } + addScrollAwareHeaderAnimation(); }); diff --git a/docs/python_docs/themes/mx-theme/src/scss/_root.scss b/docs/python_docs/themes/mx-theme/src/scss/_root.scss index 0cfa14572864..b1954a5b4613 100644 --- a/docs/python_docs/themes/mx-theme/src/scss/_root.scss +++ b/docs/python_docs/themes/mx-theme/src/scss/_root.scss @@ -18,6 +18,14 @@ body { display: none; } +.mdl-layout__container { + height: calc(100% - 76px); + margin-top: 76px; +} +.mdl-layout__header { + position: fixed; + transition: transform 0.5s; +} .mdl-layout--fixed-drawer>.mdl-layout__content { margin-left: 300px; } diff --git a/docs/python_docs/themes/mx-theme/src/scss/layout/_layout.scss b/docs/python_docs/themes/mx-theme/src/scss/layout/_layout.scss index 2e862e1bc4b1..be12d9406b16 100644 --- a/docs/python_docs/themes/mx-theme/src/scss/layout/_layout.scss +++ b/docs/python_docs/themes/mx-theme/src/scss/layout/_layout.scss @@ -25,14 +25,9 @@ ) ); -.mdl-layout { - margin-top: 76px; -} - - .document { width: 100%; - margin: 0 auto; + margin: 84px auto; display: flex; @media (min-width: $xl-breakpoint) { From f872b43407ccfb7d17fe7492c7d869b83194f3a6 Mon Sep 17 00:00:00 2001 From: Leonard Lausen Date: Mon, 3 Aug 2020 20:11:06 +0000 Subject: [PATCH 44/46] Protobuf_USE_STATIC_LIBS must be set on Apple too (#18851) Fixes https://github.com/apache/incubator-mxnet/issues/18840 --- CMakeLists.txt | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c9e2e1886f9a..c6aa06ecc55a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -148,12 +148,14 @@ else() execute_process(COMMAND uname -m COMMAND tr -d '\n' OUTPUT_VARIABLE SYSTEM_ARCHITECTURE) endif() -if(CMAKE_BUILD_TYPE STREQUAL "Distribution" AND UNIX AND NOT APPLE) - set(CMAKE_BUILD_WITH_INSTALL_RPATH ON) - set(CMAKE_INSTALL_RPATH $\{ORIGIN\}) - # Enforce DT_PATH instead of DT_RUNPATH - set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--disable-new-dtags") - set(CMAKE_EXE_LINKER_FLAGS "-Wl,--disable-new-dtags") +if(CMAKE_BUILD_TYPE STREQUAL "Distribution") + if(UNIX AND NOT APPLE) + set(CMAKE_BUILD_WITH_INSTALL_RPATH ON) + set(CMAKE_INSTALL_RPATH $\{ORIGIN\}) + # Enforce DT_PATH instead of DT_RUNPATH + set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--disable-new-dtags") + set(CMAKE_EXE_LINKER_FLAGS "-Wl,--disable-new-dtags") + endif() set(Protobuf_USE_STATIC_LIBS ON) endif() From 7f2e314294bb3bc97ddfb6d98d7c27580db62ea7 Mon Sep 17 00:00:00 2001 From: Haibin Lin Date: Mon, 3 Aug 2020 16:09:48 -0700 Subject: [PATCH 45/46] update setup.py (#18850) * update setup.py * update python version Co-authored-by: Lin --- python/setup.py | 8 ++------ tools/pip/setup.py | 7 ++----- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/python/setup.py b/python/setup.py index e2b4d645a792..9a5671f3a40f 100644 --- a/python/setup.py +++ b/python/setup.py @@ -131,15 +131,11 @@ def config_cython(): 'Intended Audience :: Education', 'Intended Audience :: Science/Research', 'License :: OSI Approved :: Apache Software License', - 'Programming Language :: C++', 'Programming Language :: Cython', - 'Programming Language :: Other', # R, Scala - 'Programming Language :: Perl', 'Programming Language :: Python', - 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3.4', - 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: Implementation :: CPython', 'Topic :: Scientific/Engineering', 'Topic :: Scientific/Engineering :: Artificial Intelligence', diff --git a/tools/pip/setup.py b/tools/pip/setup.py index 2377e6177641..132188d01107 100644 --- a/tools/pip/setup.py +++ b/tools/pip/setup.py @@ -64,7 +64,8 @@ def has_ext_modules(self): DEPENDENCIES = [ 'numpy<2.0.0,>1.16.0', 'requests>=2.20.0,<3', - 'graphviz<0.9.0,>=0.8.1' + 'graphviz<0.9.0,>=0.8.1', + 'contextvars;python_version<"3.7"' ] shutil.rmtree(os.path.join(CURRENT_DIR, 'mxnet'), ignore_errors=True) @@ -192,12 +193,8 @@ def skip_markdown_comments(md): 'Intended Audience :: Education', 'Intended Audience :: Science/Research', 'License :: OSI Approved :: Apache Software License', - 'Programming Language :: C++', 'Programming Language :: Cython', - 'Programming Language :: Other', # R, Scala - 'Programming Language :: Perl', 'Programming Language :: Python', - 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', From 95fa63f765f33b13c29c7b1c0822d2502eb16721 Mon Sep 17 00:00:00 2001 From: Serge Panev Date: Mon, 3 Aug 2020 17:15:02 -0700 Subject: [PATCH 46/46] Update the onnx-tensorrt submodule - CI to TRT7 (#18574) --- 3rdparty/onnx-tensorrt | 2 +- CMakeLists.txt | 8 +++----- ci/docker/Dockerfile.build.ubuntu | 13 ++++++++++--- ci/docker/docker-compose.yml | 10 ++++++++++ ci/docker/runtime_functions.sh | 15 ++++++++------- ci/jenkins/Jenkins_steps.groovy | 2 +- .../subgraph/tensorrt/onnx_to_tensorrt.cc | 4 ---- 7 files changed, 33 insertions(+), 21 deletions(-) diff --git a/3rdparty/onnx-tensorrt b/3rdparty/onnx-tensorrt index f4745fcaff86..2eb74d933f89 160000 --- a/3rdparty/onnx-tensorrt +++ b/3rdparty/onnx-tensorrt @@ -1 +1 @@ -Subproject commit f4745fcaff868a519834917c657f105a8eef2f53 +Subproject commit 2eb74d933f89e1590fdbfc64971a36e5f72df720 diff --git a/CMakeLists.txt b/CMakeLists.txt index c6aa06ecc55a..2c86dd9d0f7d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -238,6 +238,7 @@ if(USE_TENSORRT) include_directories(3rdparty/onnx-tensorrt/third_party/onnx/) add_definitions(-DMXNET_USE_TENSORRT=1) add_definitions(-DONNX_NAMESPACE=onnx) + add_definitions(-DONNX_ML=1) find_package(Protobuf REQUIRED) @@ -247,14 +248,11 @@ if(USE_TENSORRT) find_library(ONNX_PROTO_LIBRARY NAMES libonnx_proto.so REQUIRED PATHS ${ONNX_PATH} DOC "Path to onnx_proto library.") - find_library(ONNX_TRT_RUNTIME_LIBRARY NAMES libnvonnxparser_runtime.so REQUIRED - PATHS ${ONNX_TRT_PATH} - DOC "Path to onnx_proto library.") find_library(ONNX_TRT_PARSER_LIBRARY NAMES libnvonnxparser.so REQUIRED PATHS ${ONNX_TRT_PATH} - DOC "Path to onnx_proto library.") + DOC "Path to onnx_proto parser library.") - list(APPEND mxnet_LINKER_LIBS libnvinfer.so ${ONNX_TRT_PARSER_LIBRARY} ${ONNX_TRT_RUNTIME_LIBRARY} + list(APPEND mxnet_LINKER_LIBS libnvinfer.so ${ONNX_TRT_PARSER_LIBRARY} ${ONNX_PROTO_LIBRARY} ${ONNX_LIBRARY} ${PROTOBUF_LIBRARY}) endif() diff --git a/ci/docker/Dockerfile.build.ubuntu b/ci/docker/Dockerfile.build.ubuntu index 8398dc9bee54..abc3e8c6ce94 100644 --- a/ci/docker/Dockerfile.build.ubuntu +++ b/ci/docker/Dockerfile.build.ubuntu @@ -139,15 +139,22 @@ ARG BASE_IMAGE RUN export SHORT_CUDA_VERSION=${CUDA_VERSION%.*} && \ apt-get update && \ if [ ${SHORT_CUDA_VERSION} = 10.0 ]; then \ - apt-get install -y "libnvinfer-dev=5.1.5-1+cuda10.0"; \ + TRT_VERSION="7.0.0-1+cuda10.0"; \ + TRT_MAJOR_VERSION=7; \ elif [ ${SHORT_CUDA_VERSION} = 10.1 ]; then \ - apt-get install -y "libnvinfer-dev=5.1.5-1+cuda10.1"; \ + TRT_VERSION="6.0.1-1+cuda10.1"; \ + TRT_MAJOR_VERSION=6; \ elif [ ${SHORT_CUDA_VERSION} = 10.2 ]; then \ - apt-get install -y "libnvinfer-dev=6.0.1-1+cuda10.2"; \ + TRT_VERSION="7.0.0-1+cuda10.2"; \ + TRT_MAJOR_VERSION=7; \ else \ echo "ERROR: Cuda ${SHORT_CUDA_VERSION} not yet supported in Dockerfile.build.ubuntu"; \ exit 1; \ fi && \ + apt-get install -y libnvinfer${TRT_MAJOR_VERSION}=${TRT_VERSION} \ + libnvinfer-dev=${TRT_VERSION} \ + libnvinfer-plugin${TRT_MAJOR_VERSION}=${TRT_VERSION} \ + libnvinfer-plugin-dev=${TRT_VERSION} && \ rm -rf /var/lib/apt/lists/* FROM gpu as gpuwithcudaruntimelibs diff --git a/ci/docker/docker-compose.yml b/ci/docker/docker-compose.yml index cced098d7f11..865abc128167 100644 --- a/ci/docker/docker-compose.yml +++ b/ci/docker/docker-compose.yml @@ -108,6 +108,16 @@ services: BASE_IMAGE: nvidia/cuda:10.1-cudnn7-devel-ubuntu18.04 cache_from: - ${DOCKER_CACHE_REGISTRY}/build.ubuntu_gpu_cu101:latest + ubuntu_gpu_cu102: + image: ${DOCKER_CACHE_REGISTRY}/build.ubuntu_gpu_cu102:latest + build: + context: . + dockerfile: Dockerfile.build.ubuntu + target: gpu + args: + BASE_IMAGE: nvidia/cuda:10.2-cudnn7-devel-ubuntu18.04 + cache_from: + - ${DOCKER_CACHE_REGISTRY}/build.ubuntu_gpu_cu102:latest ubuntu_build_cuda: image: ${DOCKER_CACHE_REGISTRY}/build.ubuntu_build_cuda:latest build: diff --git a/ci/docker/runtime_functions.sh b/ci/docker/runtime_functions.sh index 76b723c5d919..1e988db11a18 100755 --- a/ci/docker/runtime_functions.sh +++ b/ci/docker/runtime_functions.sh @@ -541,6 +541,7 @@ build_ubuntu_gpu_tensorrt() { export CC=gcc-7 export CXX=g++-7 + export ONNX_NAMESPACE=onnx # Build ONNX pushd . @@ -549,29 +550,29 @@ build_ubuntu_gpu_tensorrt() { rm -rf build mkdir -p build cd build - cmake -DBUILD_SHARED_LIBS=ON -GNinja .. - ninja onnx/onnx.proto - ninja + cmake -DCMAKE_CXX_FLAGS=-I/usr/include/python${PYVER} -DBUILD_SHARED_LIBS=ON .. + make -j$(nproc) export LIBRARY_PATH=`pwd`:`pwd`/onnx/:$LIBRARY_PATH export CPLUS_INCLUDE_PATH=`pwd`:$CPLUS_INCLUDE_PATH + export CXXFLAGS=-I`pwd` + popd # Build ONNX-TensorRT export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib - export CPLUS_INCLUDE_PATH=${CPLUS_INCLUDE_PATH}:/usr/local/cuda-10.1/targets/x86_64-linux/include/ + export CPLUS_INCLUDE_PATH=${CPLUS_INCLUDE_PATH}:/usr/local/cuda-10.2/targets/x86_64-linux/include/ pushd . cd 3rdparty/onnx-tensorrt/ mkdir -p build cd build - cmake .. + cmake -DONNX_NAMESPACE=$ONNX_NAMESPACE .. make -j$(nproc) export LIBRARY_PATH=`pwd`:$LIBRARY_PATH popd mkdir -p /work/mxnet/lib/ cp 3rdparty/onnx-tensorrt/third_party/onnx/build/*.so /work/mxnet/lib/ - cp -L 3rdparty/onnx-tensorrt/build/libnvonnxparser_runtime.so.0 /work/mxnet/lib/ - cp -L 3rdparty/onnx-tensorrt/build/libnvonnxparser.so.0 /work/mxnet/lib/ + cp -L 3rdparty/onnx-tensorrt/build/libnvonnxparser.so /work/mxnet/lib/ cd /work/build cmake -DUSE_CUDA=1 \ diff --git a/ci/jenkins/Jenkins_steps.groovy b/ci/jenkins/Jenkins_steps.groovy index 8079420dd794..e2b0b04dea41 100644 --- a/ci/jenkins/Jenkins_steps.groovy +++ b/ci/jenkins/Jenkins_steps.groovy @@ -278,7 +278,7 @@ def compile_unix_tensorrt_gpu(lib_name) { ws('workspace/build-tensorrt') { timeout(time: max_time, unit: 'MINUTES') { utils.init_git() - utils.docker_run('ubuntu_gpu_cu101', 'build_ubuntu_gpu_tensorrt', false) + utils.docker_run('ubuntu_gpu_cu102', 'build_ubuntu_gpu_tensorrt', false) utils.pack_lib(lib_name, mx_tensorrt_lib) } } diff --git a/src/operator/subgraph/tensorrt/onnx_to_tensorrt.cc b/src/operator/subgraph/tensorrt/onnx_to_tensorrt.cc index b02d1094183f..d82f7544a091 100644 --- a/src/operator/subgraph/tensorrt/onnx_to_tensorrt.cc +++ b/src/operator/subgraph/tensorrt/onnx_to_tensorrt.cc @@ -35,13 +35,9 @@ #include #include #include -#include #include #include -#include -#include - using std::cout; using std::cerr; using std::endl;